commit 9d4fc889019285691f1a2084c81e6273e3d5141c Author: stuzer05 Date: Thu Apr 21 16:15:41 2022 +0300 Initial diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ab1b929 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/.idea +/BattlEye/*.log diff --git a/24_napf.bat b/24_napf.bat new file mode 100755 index 0000000..215ff3e --- /dev/null +++ b/24_napf.bat @@ -0,0 +1,2 @@ +@echo off +start "arma2" /min /high arma2oaserver.exe -port=2302 "-config=D:\Dayz Epoch Server\24_napf.cfg" "-cfg=D:\Dayz Epoch Server\basic.cfg" "-profiles=D:\Dayz Epoch Server" -name=server "-mod=@DayZ_Epoch;@DayZ_Epoch_Server;" diff --git a/24_napf.cfg b/24_napf.cfg new file mode 100755 index 0000000..7c9be25 --- /dev/null +++ b/24_napf.cfg @@ -0,0 +1,41 @@ +hostName = "DayZ Epoch Napf Server (1.0.7/144629)"; +password = "qwertyplm"; +passwordAdmin = "root"; +maxPlayers = 20; +steamport = 2304; +steamqueryport = 2303; + +motd[] = {"DayZ Epoch","Have fun!"}; +motdInterval = 0; + +logFile = "server_log.txt"; +voteThreshold = 2; +voteMissionPlayers = 999; +timeStampFormat = "short"; + +vonCodecQuality = 11; +disableVoN = 0; +kickduplicate = 1; +verifySignatures = 2; +persistent = 1; +BattlEye = 0; +requiredSecureId = 2; +doubleIdDetected = ""; + +onUserConnected = ""; +onUserDisconnected = ""; +onUnsignedData = "kick (_this select 0)"; +onHackedData = "kick (_this select 0)"; +onDifferentData = ""; + +regularCheck = ""; +requiredBuild = 144629; +class Missions +{ + class Mission1 + { + template = "DayZ_Epoch_24.Napf"; + difficulty="regular"; + }; + +}; diff --git a/@DayZ_Epoch_Server/HiveExt.dll b/@DayZ_Epoch_Server/HiveExt.dll new file mode 100755 index 0000000..29bebdf Binary files /dev/null and b/@DayZ_Epoch_Server/HiveExt.dll differ diff --git a/@DayZ_Epoch_Server/addons/dayz_server.pbo b/@DayZ_Epoch_Server/addons/dayz_server.pbo new file mode 100755 index 0000000..023b450 Binary files /dev/null and b/@DayZ_Epoch_Server/addons/dayz_server.pbo differ diff --git a/@DayZ_Epoch_Server/addons/dayz_server/$PREFIX$ b/@DayZ_Epoch_Server/addons/dayz_server/$PREFIX$ new file mode 100755 index 0000000..0f58ae7 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/$PREFIX$ @@ -0,0 +1 @@ +z\addons\dayz_server \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Admin/activate.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Admin/activate.sqf new file mode 100755 index 0000000..14ee27e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Admin/activate.sqf @@ -0,0 +1,56 @@ +dayz_antihack = 0; // Disable vanilla antihack for admins + +// Initialize Variables +#include "\z\addons\dayz_server\AdminTools\Admin\config.sqf" +#include "\z\addons\dayz_server\AdminTools\Admin\functions.sqf" +#include "\z\addons\dayz_server\AdminTools\Admin\main.sqf" + + +[] spawn { + waitUntil {uiSleep 0.1;(!isNil "Dayz_loginCompleted" && !isNil "keyboard_keys")}; + + EAT_Keybind = { + private ["_option","_handled"]; + #include "\ca\editor\Data\Scripts\dikCodes.h" + + _option = _this select 0; + _handled = false; + + call + { + if (_option == "AdminMenu") exitWith {keyboard_keys set [DIK_F2,{call EAT_ToolsMain;_handled = true;}];}; + if (_option == "AdminMode") exitWith { + keyboard_keys set [DIK_F4,{call optionMenu;_handled = true;}]; + keyboard_keys set [DIK_DELETE,{[] spawn EAT_DeleteObj;_handled = true;}]; + keyboard_keys set [DIK_U,{[] spawn EAT_Unlock;_handled = true;}]; + keyboard_keys set [DIK_L,{[] spawn EAT_Lock;_handled = true;}]; + keyboard_keys set [DIK_J,{call EAT_GetObjDetails;_handled = true;}]; + keyboard_keys set [DIK_T,{[] spawn EAT_TeleportToggle;_handled = true;}]; + }; + if (_option == "EndAdminMode") exitWith { + keyboard_keys set [DIK_F4,{_handled = true;}]; + keyboard_keys set [DIK_DELETE,{_handled = true;}]; + keyboard_keys set [DIK_U,{_handled = true;}]; + keyboard_keys set [DIK_L,{_handled = true;}]; + keyboard_keys set [DIK_J,{_handled = true;}]; + keyboard_keys set [DIK_T,{_handled = true;}]; + }; + if (_option == "ESP") exitWith {keyboard_keys set [DIK_7,{call F5Menu;_handled = true;}];}; + if (_option == "EndESP") exitWith {keyboard_keys set [DIK_7,{_handled = true;}];}; + if (_option == "Spectate") exitWith {keyboard_keys set [DIK_F6,{spectate = false;_handled = true;}];}; + if (_option == "EndSpectate") exitWith {keyboard_keys set [DIK_F6,{_handled = true;}];}; + if (_option == "FastWalk") exitWith {keyboard_keys set [DIK_4, {call EAT_FastForward;_handled = true;}];}; + if (_option == "EndFastWalk") exitWith {keyboard_keys set [DIK_4, {_handled = true;}];}; + if (_option == "FastUp") exitWith {keyboard_keys set [DIK_5, {call EAT_AdminFastUp;_handled = true;}];}; + if (_option == "EndFastUp") exitWith {keyboard_keys set [DIK_5, {_handled = true;}];}; + }; + _handled + }; + + ["AdminMenu"] call EAT_Keybind; + #include "\z\addons\dayz_server\adminTools\DebugMonitors\debugMonitor2.sqf" + + systemChat "Admin Tools Loaded..."; + systemChat "Press F2 to Open the Admin Menu"; + diag_log("Admin Tools: AdminActivate.sqf loaded"); +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Admin/config.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Admin/config.sqf new file mode 100755 index 0000000..115948c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Admin/config.sqf @@ -0,0 +1,46 @@ +/************** Epoch Admin Tools Variables **************/ + +//Enable/Disable weather/time change menu. This may cause server to revert to mid-day on restart. +EAT_wtChanger = true; + +// Change the maximum build distance for placable base items +DZE_buildMaxMoveDistance = 20; + +//This creates a log in your server\EpochAdminToolLogs\toolUsageLog.txt REQUIRES: EATadminLogger.dll +EAT_logMajorTool = true; //A major tool is a strong tool with high possibility for exploitation +EAT_logMinorTool = true;//A minor tool is a weak tool with low possibility for exploitation + +/************** Admin/Mod mode Variables **************/ + +// Defines the default on and off for admin/mod mode options +// ALL items can be turned on or off during gameplay, these are just defaults +EAT_playerGod = true; +EAT_vehicleGod = true; +EAT_playerESPMode = true; +EAT_enhancedESPMode = false; +EAT_grassOff = true; +EAT_infAmmo = true; +EAT_speedBoost = false; +EAT_fastWalk = true; +EAT_fastUp = true; +EAT_invisibility = false; +EAT_flyingMode = false; +EAT_adminBuildMode = false; +EAT_ZombieShield = false; + +EAT_isOverpoch = isClass (configFile >> "CfgWeapons" >> "USSR_cheytacM200"); // Used to detect the Overwatch Mod for crate spawning + +// This section defines all of the buildings in the building GUI +// Format: variable = [["TYPE","NAME","BUILING_CLASS"],["TYPE","NAME","BUILING_CLASS"]]; + +// Epoch Modular Buildables +EAT_buildCinder = [["Cinder","1/2 Wall","CinderWallHalf_DZ"],["Cinder","1/2 Wall w/ Gap","CinderWallHalf_Gap_DZ"],["Cinder","Full Wall","CinderWall_DZ"],["Cinder","Full Wall w/ Window","CinderWallWindow_DZ"],["Cinder","Garage Doorway","CinderWallDoorway_DZ"],["Cinder","Garage Doorway Open Top","CinderGarageOpenTopFrame_DZ"],["Cinder","Doorway","CinderWallSmallDoorway_DZ"],["Cinder","Doorway w/ Hatch","CinderDoorHatch_DZ"],["Cinder","Tall Gate","CinderGateFrame_DZ"],["Cinder","Bunker","Concrete_Bunker_DZ"]]; +EAT_buildWood = [["Wood","Ramp","WoodRamp_DZ"],["Wood","Floor w/ Stairs","WoodFloorStairs_DZ"],["Wood","4X Floor","WoodFloor4x_DZ"],["Wood","Wood Floor","WoodFloor_DZ"],["Wood","1/2 Floor","WoodFloorHalf_DZ"],["Wood","1/4 Floor","WoodFloorQuarter_DZ"],["Wood","Triangle Floor","WoodTriangleFloor_DZ"],["Wood","Large Wall","WoodLargeWall_DZ"],["Wood","Large Doorway","WoodLargeWallDoor_DZ"],["Wood","Large Wall w/Window","WoodLargeWallWin_DZ"],["Wood","Garage Frame","Land_DZE_GarageWoodDoor"],["Wood","Open Top Garage","Land_DZE_WoodOpenTopGarageDoor"],["Wood","Wood Gate Frame","WoodGateFrame_DZ"],["Wood","Wood Gate","Land_DZE_WoodGate"],["Wood","Wall","WoodSmallWall_DZ"],["Wood","1/3 Wall","WoodSmallWallThird_DZ"],["Wood","Triangle Wall","WoodTriangleWall_DZ"],["Wood","Wall w/Window","WoodSmallWallWin_DZ"],["Wood","Doorway","WoodSmallWallDoor_DZ"],["Wood","Stairs","WoodStairsSans_DZ"],["Wood","Stairs w/Stilts","WoodStairs_DZ"],["Wood","Stairs w/Rails","WoodStairsRails_DZ"],["Wood","Ladder","WoodLadder_DZ"],["Wood","Handrail","WoodHandrail_DZ"],["Wood","Pillar","WoodPillar_DZ"],["Wood","Door Frame","DoorFrame_DZ"],["Wood","Frame w/ Door","Door_DZ"]]; +EAT_buildMetal = [["Metal","Panel","MetalPanel_DZ"],["Metal","4X Floor","MetalFloor4x_DZ"],["Metal","Floor","MetalFloor_DZ"],["Metal","1/2 Floor","MetalFloor_Half_DZ"],["Metal","1/4 Floor","MetalFloor_Quarter_DZ"],["Metal","Glass Floor","GlassFloor_DZ"],["Metal","1/2 Glass Floor","GlassFloor_Half_DZ"],["Metal","1/4 Glass Floor","GlassFloor_Quarter_DZ"],["Metal","Pillar","MetalPillar_DZ"],["Metal","Corrugated Fence","Fence_corrugated_DZ"],["Metal","Tank Trap","Hedgehog_DZ"],["Metal","Wire Fence","Fort_RazorWire"],["Metal","Metal Gate","MetalGate_DZ"],["Metal","Drawbridge","Metal_Drawbridge_DZ"]]; +EAT_buildNets = [["Camo Net","Desert","DesertCamoNet_DZ"],["Camo Net","Forest","ForestCamoNet_DZ"],["Camo Net","Winter","WinterCamoNet_DZ"],["Camo Net","Large Desert","DesertLargeCamoNet_DZ"],["Camo Net","Large Forest","ForestLargeCamoNet_DZ"],["Camo Net","Large Winter","WinterLargeCamoNet_DZ"]]; +EAT_buildStorage = [["Storage","Large Storage Shed","StorageShed_DZ"],["Storage","Upgraded Large Storage Shed","StorageShed2_DZ"],["Storage","Gun Rack","GunRack_DZ"],["Storage","Upgraded Gun Rack","GunRack2_DZ"],["Storage","Wood Crate","WoodCrate_DZ"],["Storage","Upgraded Wood Crate","WoodCrate2_DZ"],["Storage","Wood Shack","WoodShack_DZ"],["Storage","Upgraded Wood Shack","WoodShack2_DZ"],["Storage","Fancy Wood Shed","Wooden_shed_DZ"],["Storage","Upgraded Fancy Wood Shed","Wooden_shed2_DZ"],["Storage","Safe","VaultStorageLocked"],["Storage","Upgraded Safe","VaultStorage2Locked"],["Storage","Tall Safe","TallSafeLocked"],["Storage","Lockbox","LockboxStorageLocked"],["Storage","Upgraded Lockbox","LockboxStorage2Locked"],["Storage","Winter Lockbox","LockboxStorageWinterLocked"],["Storage","Upgraded Winter Lockbox","LockboxStorageWinter2Locked"]]; +EAT_buildSandbags = [["SandBags","Sandbag Fence","Sandbag1_DZ"],["SandBags","Sandbag Fence (round)","BagFenceRound_DZ"],["SandBags","H-barrier Cube","Land_HBarrier1_DZ"],["SandBags","H-barrier (short)","Land_HBarrier3_DZ"],["SandBags","H-barrier (long)","Land_HBarrier5_DZ"],["SandBags","H-barrier (extra large)","Base_WarfareBBarrier10xTall"],["SandBags","Sandbag Nest","SandNest_DZ"]]; +EAT_buildMisc = [["Misc","Workbench","WorkBench_DZ"],["Misc","Advanced Workbench","Advanced_WorkBench_DZ"],["Misc","Outhouse","OutHouse_DZ"],["Misc","Fuel Pump","FuelPump_DZ"],["Misc","Light Pole","LightPole_DZ"],["Misc","Generator","Generator_DZ"],["Misc","Plot Pole","Plastic_Pole_EP1_DZ"],["Misc","Canvas Hut","CanvasHut_DZ"],["Misc","Park Bench","ParkBench_DZ"],["Misc","Stick Fence","StickFence_DZ"],["Misc","Deer Stand","DeerStand_DZ"],["Misc","Scaffolding","Scaffolding_DZ"],["Misc","Fire Barrel","FireBarrel_DZ"],["Misc","Machine Gun Nest","M240Nest_DZ"],["Misc","Cooking Tripod","CookTripod_DZ"],["Misc","Stone Oven","Stoneoven_DZ"],["Misc","Toilet","Commode_DZ"],["Misc","Wardrobe","Wardrobe_DZ"],["Misc","Fridge","Fridge_DZ"],["Misc","Washing Machine","Washing_Machine_DZ"],["Misc","Server Rack","Server_Rack_DZ"],["Misc","ATM","ATM_DZ"],["Misc","Armchair","Armchair_DZ"],["Misc","Sofa","Sofa_DZ"],["Misc","Arcade Game","Arcade_DZ"],["Misc","Vending Machine","Vendmachine1_DZ"],["Misc","Vending Machine","Vendmachine2_DZ"],["Misc","Storage Crate","StorageCrate_DZ"],["Misc","Camo Storage Crate","CamoStorageCrate_DZ"],["Misc","Water Pump","Water_Pump_DZ"],["Misc","Greenhouse","Greenhouse_DZ"],["Misc","Bed","Bed_DZ"],["Misc","Table","Table_DZ"],["Misc","Office Chair","Office_Chair_DZ"],["Misc","Green Garage","Garage_Green_DZ"],["Misc","White Garage","Garage_White_DZ"],["Misc","Brown Garage","Garage_Brown_DZ"],["Misc","Grey Garage","Garage_Grey_DZ"],["Misc","Civilian Helipad","Helipad_Civil_DZ"]]; +EAT_allBuildingList = EAT_buildCinder + EAT_buildWood + EAT_buildMetal + EAT_buildNets + EAT_buildStorage + EAT_buildSandbags + EAT_buildMisc; + +diag_log("Admin Tools: config.sqf loaded"); diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Admin/functions.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Admin/functions.sqf new file mode 100755 index 0000000..bc9d708 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Admin/functions.sqf @@ -0,0 +1,3147 @@ +// This is a centralized function for checking if an action is allowed to take place. +// This is basically the "_canDo" found in player actions. +EAT_fnc_actionAllowed = { + private["_player","_vehicle","_inVehicle","_onLadder","_canDo"]; + _player = player; //Setting a local variable as player saves resources + _vehicle = vehicle _player; + _inVehicle = (_vehicle != _player); + _onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState _player) >> "onLadder")) == 1; + _canDo = (!r_drag_sqf && !r_player_unconscious && !_onLadder && !_inVehicle); + +_canDo +}; + +// Generates a selectable list of players for teleports and spectate +// Title is set by setting EAT_pMenuTitle = "TITLE HERE" before calling the function +EAT_pMenuTitle = ""; +EAT_fnc_playerSelect = +{ + private["_pmenu","_arr"]; + _pmenu = [["",true],[EAT_pMenuTitle, [-1], "", -5, [["expression", ""]], "1", "0"]]; + for "_i" from (_this select 0) to (_this select 1) do + {_arr = [format['%1', plist select (_i)], [12], "", -5, [["expression", format ["pselect5 = plist select %1;", _i]]], "1", "1"]; _pmenu set [_i + 2, _arr];}; + if (count plist > (_this select 1)) then {_pmenu set [(_this select 1) + 2, ["Next", [13], "", -5, [["expression", "snext = true;"]], "1", "1"]];} + else {_pmenu set [(_this select 1) + 2, ["", [-1], "", -5, [["expression", ""]], "1", "0"]];}; + _pmenu set [(_this select 1) + 3, ["Exit", [13], "", -5, [["expression", "pselect5 = 'exit';"]], "1", "1"]]; + showCommandingMenu "#USER:_pmenu"; +}; + +// Convert multidimensional array to single dimensional +// Used in adminBuild +myfnc_MDarray = { + private ["_list","_i","_temp"]; + _list = []; _temp = _this select 0; _i = 0; + + for "_i" from 0 to ((count _temp) - 1) do { + _list set [_i,((_temp select _i) select 2)]; + }; + _list; +}; + +// Prints the position of the admin or a cursorTarget to the RPT +EAT_GetPosition = { + private "_text"; + _obj = _this select 0; + if(isNull _obj) exitWith {"No target" call dayz_rollingMessages;}; + _pos = getPos _obj; + _dir = getDir _obj; + + if (isPlayer _obj) then { + _text = format["Position of %1 is: %3%2",name _obj,_pos,_dir]; + } else { + _text = format["Position of %1 is: %3%2",typeOf _obj,_pos,_dir]; + }; + + if(EAT_logMinorTool) then { + "Saved to client RPT and EAT logs" call dayz_rollingMessages; + diag_log _text; + _text call EAT_Logger; + } else { + "Saved to client RPT" call dayz_rollingMessages; + diag_log _text; + }; +}; + +// Posts object information to system chat +EAT_GetObjDetails = { + _obj = cursorTarget; + if(isNull _obj) exitWith {"No target" call dayz_rollingMessages;}; + _charID = _obj getVariable ["CharacterID","0"]; + _objID = _obj getVariable["ObjectID","0"]; + _objUID = _obj getVariable["ObjectUID","0"]; + _lastUpdate = _obj getVariable ["lastUpdate",time]; + _owner = _obj getVariable["ownerPUID","0"]; + + systemChat format["%1: charID: %2, objID: %3, objUID: %4, Owner %5, lastUpdate: %6",typeOF _obj,_charID,_objID,_objUID,_owner,_lastUpdate]; +}; + +// Flips the nearest land vehicle +EAT_FlipVeh = { + private "_vehicle"; + _vehicle = getPos player nearestObject "LandVehicle"; + if (isNull _vehicle) exitWith {"There are no vehicles near to flip" call dayz_rollingMessages;}; + _vehicle setVectorUp [0, 0, 1]; + _vehicleType = typeOf _vehicle; + format["Your %1 is now right-side up",_vehicleType] call dayz_rollingMessages; +}; + +// Ejects players from a vehicle +EAT_Eject = { +_ct = cursorTarget; +_ctType = typeOf _ct; +if(isNull _ct) exitWith {"No target" call dayz_rollingMessages;}; +if(!(_ct isKindOf "LandVehicle") && !(_ct isKindOf "Air") && !(_ct isKindOf "Ship")) exitWith {cutText ["Target not a vehicle", "PLAIN DOWN"];}; +if ((count crew _ct) < 1) exitWith {format["There are no players in the %1", _ctType] call dayz_rollingMessages;}; +_ct forceSpeed 0; +{_x action ["Eject", _ct];} forEach crew _ct; +uiSleep 5; +_ct forceSpeed -1; +}; + +// Allows the player to glide forward quickly across the map. It is called from key bind. +EAT_FastForward = { + _player = vehicle player; + _dis = 5; + _dir = getdir _player; + _pos = getPosATL _player; + _pos2 = getPos _player; + _z2 = _pos2 select 2; + _z = 0; + + if(_player isKindOf "Air" && _z2 < 20 && isEngineOn _player) then {_z = _z2 + 30;} else {if(_z2 > 3) then {_z = _z2;}else{if(surfaceIsWater _pos) then {_z = 2;} else {_z=0;};};}; + _pos = [(_pos select 0)+_dis*sin(_dir),(_pos select 1)+_dis*cos(_dir),_z]; + if (surfaceIsWater _pos) then {_player setPosASL _pos;} else {_player setPosATL _pos;}; +}; + +// Toggles fast forward key bind on and off +EAT_FastForwardToggle = { + private "_isActive"; + _isActive = _this select 0; + if(_isActive) then { + ["FastWalk"] call EAT_Keybind; + } else { + ["EndFastWalk"] call EAT_Keybind; + }; +}; + +// Allows the admin to leap vertically or directionally +EAT_AdminFastUp = { + private "_velocity"; + _velocity = velocity player; + player setVelocity [_velocity select 0,_velocity select 1,5]; +}; + +// This function toggles the jump key bind on and off +EAT_FastUpToggle = { + private "_isActive"; + _isActive = _this select 0; + if (_isActive) then { + ["FastUp"] call EAT_Keybind; + } else { + ["EndFastUp"] call EAT_Keybind; + }; +}; + +// Lowers the terrain +EAT_GrassOffToggle = { + private ["_isActive","_toggle"]; + _isActive = _this select 0; + + if (_isActive) then { + _toggle = "on"; + setTerrainGrid 50; + }else{ + _toggle = "off"; + setTerrainGrid 25; + }; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has turned grass %3",name player,getPlayerUID player,_toggle] call EAT_Logger;}; +}; + +// Allows admin to be invisible to other players +EAT_AdminInvisible = { + private ["_isActive","_position"]; + _isActive = _this select 0; + _position = getPos player; + + EAT_clientToServer = ["invisibility",player,[_isActive,_position],dayz_authKey]; + publicVariableServer "EAT_clientToServer"; +}; + +// Turns the build count to one and removes the requirement for a plot pole to build +EAT_adminBuildCount = { + private "_isActive"; + _isActive = _this select 0; + if(_isActive) then { + DZE_StaticConstructionCount = 1; + DZE_requireplot = 0; + } else { + DZE_StaticConstructionCount = 0; + DZE_requireplot = 1; + }; +}; + +EAT_AddWeapon = { + private ["_handGuns","_gun","_ammo","_HEammo","_player"]; + + #define IS_HANDGUN(wpn) (getNumber (configFile >> "CfgWeapons" >> wpn >> "type") == 2) + + _gun = _this select 0; + _ammo = _this select 1; + if ((count _this) > 2) then { + _HEammo = _this select 2; + } else { + _HEammo = nil; + }; + _player = player; + + if (IS_HANDGUN(_gun)) then { + { + if (IS_HANDGUN(_x)) exitWith { + _player removeWeapon _x; + } + } count (weapons _player); + } else { + _player removeWeapon (primaryWeapon _player); + }; + + // Add magazines before gun so the gun loads ammo on spawn + _player addMagazine _ammo; + _player addMagazine _ammo; + _player addWeapon _gun; + _player selectWeapon _gun; + if(!(isNil _HEammo)) then { + _player addMagazine _HEammo; + }; +}; + +EAT_Loadouts = { + private ["_primaryWeapon","_secondaryWeapon","_primaryAmmo","_secondaryAmmo","_player","_bloodbag","_mags","_weps","_rifleMag","_pistolMag"]; + + _player = player; + _primaryWeapon = _this select 0; + _secondaryWeapon = _this select 1; + _primaryAmmo = getArray (configFile >> "cfgWeapons" >> _primaryWeapon >> "magazines"); + _secondaryAmmo = getArray (configFile >> "cfgWeapons" >> _secondaryWeapon >> "magazines"); + _rifleMag = _primaryAmmo select 0; + _pistolMag = _secondaryAmmo select 0; + _weps = ["ItemRadio","NVGoggles_DZE","Binocular_Vector","ItemGPS","ItemHatchet","ItemKnife","ItemMatchbox","ItemEtool","ItemToolbox","ItemCrowbar",_primaryWeapon,_secondaryWeapon]; + if(dayz_classicBloodBagSystem) then {_bloodbag = "ItemBloodbag";} else {_bloodbag = "bloodBagONEG";}; + _mags = ["ItemMorphine","ItemEpinephrine","ItemAntibiotic","ItemPainkiller","ItemWaterBottleBoiled","FoodBeefCooked","ItemBandage","ItemBandage",_bloodbag,_rifleMag,_rifleMag,_rifleMag,_pistolMag,_pistolMag,_pistolMag]; + + removeAllWeapons _player; + removeAllItems _player; + removeBackpack _player; + + _player addBackpack "CoyoteBackpack_DZE2"; + + { + _player addMagazine _x; + } count _mags; + + { + _player addWeapon _x; + } count _weps; + + _player selectWeapon _primaryWeapon; +}; + +EAT_AddBackPack = { + private["_bag","_player"]; + _bag = _this select 0; + _player = player; + removeBackpack _player; + _player addBackpack _bag; +}; + +EAT_AddMeds = { + private "_bloodbag"; + + if(dayz_classicBloodBagSystem) then {_bloodbag = "ItemBloodbag";}else{_bloodbag = "bloodBagONEG";}; + + { + player addMagazine _x; + } count ["ItemMorphine","ItemEpinephrine","ItemAntibiotic","ItemPainkiller","ItemSodaPepsi","FoodBeefCooked","ItemBandage","ItemBandage",_bloodbag]; +}; + +EAT_RemoveGear = { + removeAllWeapons player; + removeAllItems player; + removeBackpack player; + "Gear deleted!" call dayz_rollingMessages; +}; + +EAT_AddTools = { + private "_tools"; + _tools = ["ItemRadio","ItemHatchet","ItemKnife","ItemMatchbox","ItemEtool","ItemToolbox","ItemCrowbar"]; + + { + if (_x in weapons player) then { + player removeWeapon _x; + }; + } count _tools; + + { + player addWeapon _x; + } count _tools; +}; + +EAT_AddTempVeh = { + + _vehtospawn = _this select 0; + _dist = 9; + _player = player; + _dir = getDir vehicle _player; + _pos = getPosATL vehicle _player; + _pos = [(_pos select 0)+_dist*sin(_dir),(_pos select 1)+_dist*cos(_dir),0]; + _vehName = getText(configFile >> "cfgVehicles" >> _vehtospawn >> "displayName"); + + EAT_clientToServer = ["tempVeh",_player,[_vehtospawn,_dir,_pos],dayz_authKey]; + publicVariableServer "EAT_clientToServer"; + + format["Spawned a %1",_vehName] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has added a temporary vehicle: %3",name _player,getPlayerUID _player,_vehtospawn] call EAT_Logger;}; +}; + +EAT_AddVeh = { + private ["_vehName","_veh","_isOk","_vehtospawn","_dir","_pos","_keyColor","_keyNumber","_keySelected","_isKeyOK","_config","_player"]; + _vehtospawn = _this select 0; // Vehicle string + _player = player; + _dir = getDir vehicle _player; + _pos = getPos vehicle _player; + _pos = [(_pos select 0)+9*sin(_dir),(_pos select 1)+9*cos(_dir),0]; + _vehName = getText(configFile >> "cfgVehicles" >> _vehtospawn >> "displayName"); + _keyColor = ["Green","Red","Blue","Yellow","Black"] call BIS_fnc_selectRandom; + _keyNumber = (floor(random 2500)) + 1; + _keySelected = format[("ItemKey%1%2"),_keyColor,_keyNumber]; + _isKeyOK = isClass(configFile >> "CfgWeapons" >> _keySelected); + _config = _keySelected; + _isOk = [_player,_config] call BIS_fnc_invAdd; + + if (_isOk and _isKeyOK) then { + + PVDZE_veh_Publish2 = [[_dir,_pos],_vehtospawn,false,_keySelected,_player,dayz_authKey]; + publicVariableServer "PVDZE_veh_Publish2"; + + format["%1 spawned, key added to toolbelt.",_vehName] call dayz_rollingMessages; + + if(EAT_logMajorTool) then {format["%1 %2 -- has added a permanent vehicle: %3",name _player,getPlayerUID _player,_vehtospawn] call EAT_Logger;}; + } else { + "Your toolbelt is full." call dayz_rollingMessages; + }; +}; + +EAT_AddVehDialog = { + PermDialogSelected = -1; + TempDialogSelected = -1; + AdminDialogList = 13000; + if (isNil "EAT_EpochOnlyVehicles") then {EAT_EpochOnlyVehicles = false;}; + if (isNil "vhnlist") then {vhnlist = [];}; + + LoadAllVehiclesList = { + lbClear AdminDialogList; + vhnlist = +EAT_allVehList; + + { + local _index = lbAdd [AdminDialogList, format["%2 (%1)", _x select 0, _x select 1]]; + lbSetPicture [AdminDialogList, _index, (_x select 2)]; + } count vhnlist; + }; + + LoadEpochOnlyList = { + lbClear AdminDialogList; + vhnlist = +EAT_allEpochVehList; + + { + local _index = lbAdd [AdminDialogList, format["%2 (%1)", _x select 0, _x select 1]]; + lbSetPicture [AdminDialogList, _index, (_x select 2)]; + } count vhnlist; + }; + + createDialog "EAT_Veh_AdminDialog"; + call LoadAllVehiclesList; + + LoadSpecificList = { + lbClear AdminDialogList; + vhnlist = []; + local _kindOf = _this select 0; + if (EAT_EpochOnlyVehicles) then { + { + if ((_x select 0) isKindOf _kindOf) then { + vhnlist set [count vhnlist, _x] + }; + } count EAT_allEpochVehList; + } else { + { + if ((_x select 0) isKindOf _kindOf) then { + vhnlist set [count vhnlist, _x] + }; + } count EAT_allVehList; + }; + { + local _index = lbAdd [AdminDialogList, format["%2 (%1)", _x select 0, _x select 1]]; + lbSetPicture [AdminDialogList, _index, (_x select 2)]; + } count vhnlist; + }; + + waitUntil { !dialog }; + if ((PermDialogSelected < 0) && (TempDialogSelected < 0)) exitWith {}; + + if (PermDialogSelected > -1) then { + [((vhnlist select PermDialogSelected) select 0)] call EAT_AddVeh; + }; + + if (TempDialogSelected > -1) then { + [((vhnlist select TempDialogSelected) select 0)] call EAT_AddTempVeh; + }; +}; + +EAT_AISpawn = { + private ["_player","_done"]; + if (!("ItemGPS" in items player)) then {player addWeapon "ItemGPS";}; + EAT_aiArea = 0; + EAT_aiCount = 0; + _done = false; + EAT_aiSpawnType = ""; + + EAT_aiTypeMenu = + [ + ["",true], + ["Select AI Type:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["Hero",[],"", -5,[["expression","EAT_aiSpawnType = ""Hero"";"]],"1","1"], + ["Bandit",[],"", -5,[["expression","EAT_aiSpawnType = ""Bandit"";"]],"1","1"], + ["", [], "", -5,[["expression", ""]], "1", "0"], + ["Exit", [20], "", -5, [["expression", "EAT_aiArea = -1;"]], "1", "1"] + ]; + + EAT_aiAreaMenu = + [ + ["",true], + ["Set AI Movement Radius:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["40m",[],"", -5,[["expression","EAT_aiArea = 40;"]],"1","1"], + ["50m",[],"", -5,[["expression","EAT_aiArea = 50;"]],"1","1"], + ["75m",[],"", -5,[["expression","EAT_aiArea = 75;"]],"1","1"], + ["100m",[],"", -5,[["expression","EAT_aiArea = 100;"]],"1","1"], + ["150m",[],"", -5,[["expression","EAT_aiArea = 150;"]],"1","1"], + ["200m",[],"", -5,[["expression","EAT_aiArea = 200;"]],"1","1"], + ["300m",[],"", -5,[["expression","EAT_aiArea = 200;"]],"1","1"], + ["", [], "", -5,[["expression", ""]], "1", "0"], + ["Exit", [20], "", -5, [["expression", "EAT_aiArea = -1;"]], "1", "1"] + ]; + + EAT_amountMenu = + [ + ["",true], + ["Select AI count:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["1",[],"", -5,[["expression","EAT_aiCount = 1;"]],"1","1"], + ["2",[],"", -5,[["expression","EAT_aiCount = 2;"]],"1","1"], + ["4",[],"", -5,[["expression","EAT_aiCount = 4;"]],"1","1"], + ["6",[],"", -5,[["expression","EAT_aiCount = 6;"]],"1","1"], + ["8",[],"", -5,[["expression","EAT_aiCount = 8;"]],"1","1"], + ["10",[],"", -5,[["expression","EAT_aiCount = 10;"]],"1","1"], + ["20",[],"", -5,[["expression","EAT_aiCount = 20;"]],"1","1"], + ["30",[],"", -5,[["expression","EAT_aiCount = 30;"]],"1","1"], + ["40",[],"", -5,[["expression","EAT_aiCount = 40;"]],"1","1"], + ["50",[],"", -5,[["expression","EAT_aiCount = 50;"]],"1","1"], + ["", [], "", -5,[["expression", ""]], "1", "0"], + ["Exit", [20], "", -5, [["expression", "EAT_aiCount = -1;"]], "1", "1"] + ]; + + showCommandingMenu "#USER:EAT_aiTypeMenu"; + waitUntil{(EAT_aiSpawnType != "") || (commandingMenu == "")}; + if(EAT_aiSpawnType == "") exitWith{}; + + showCommandingMenu "#USER:EAT_aiAreaMenu"; + waitUntil{(EAT_aiArea != 0) || (commandingMenu == "")}; + if(EAT_aiArea == 0) exitWith{}; + + showCommandingMenu "#USER:EAT_amountMenu"; + waitUntil{(EAT_aiCount != 0) || (commandingMenu == "")}; + if(EAT_aiCount == 0) exitWith{}; + + + _player = player; + + if(EAT_logMajorTool) then {format["%1 %2 -- has added %3 AI units",name _player,getPlayerUID _player,EAT_aiCount] call EAT_Logger;}; + + EAT_SpawnAI = { + private ["_divisor","_aiPosition"]; + _divisor = _this select 0; + _aiPosition = [_this select 1, _this select 2,_this select 3]; + + EAT_clientToServer = ["addAI",player,[EAT_aiSpawnType,EAT_aiArea,EAT_aiCount,_divisor,_aiPosition,(getPos player)],dayz_authKey]; + publicVariableServer "EAT_clientToServer"; + + }; + + EAT_aiSpawnSelection = { + private ["_pos1","_pos2","_pos3"]; + _pos1 = _this select 0; + _pos2 = _this select 1; + _pos3 = _this select 2; + if(EAT_aiCount %5 == 0) then { + [5,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [5,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [5,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [5,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [5,_pos1,_pos2,_pos3] call EAT_SpawnAI; + } else { + if(EAT_aiCount %4 == 0) then { + [4,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [4,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [4,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [4,_pos1,_pos2,_pos3] call EAT_SpawnAI; + } else { + if(EAT_aiCount %2 == 0) then { + [2,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [2,_pos1,_pos2,_pos3] call EAT_SpawnAI; + } else { + [1,_pos1,_pos2,_pos3] call EAT_SpawnAI; + }; + }; + }; + openMap [false, false]; + TitleText [format[""], "PLAIN DOWN"]; + _done = true; + }; + + closeDialog 0; + uiSleep 0.5; + "Click on the map to spawn AI" call dayz_rollingMessages; + + if(!(visibleMap)) then { + openMap [true, false]; + }; + + onMapSingleClick '[_pos select 0, _pos select 1, _pos select 2] call EAT_aiSpawnSelection'; + waitUntil{_done || !(visibleMap)}; + onMapSingleClick ""; +}; + +EAT_DeleteObj = { + private ["_obj","_objectID","_objectUID","_player"]; + + _obj = cursorTarget; + if(isNull _obj) exitWith{"No object selected" call dayz_rollingMessages;}; + _player = player; + EAT_DeleteObjText = getText (configFile >> "CfgVehicles" >> typeOf _obj >> "displayName"); + EAT_databaseRemove = 0; + + _objectID = _obj getVariable["ObjectID","0"]; + _objectUID = _obj getVariable["ObjectUID","0"]; + + _deleteMenu = + [ + ["",true], + [format["Delete this %1?:",EAT_DeleteObjText], [-1], "", -5, [["expression", ""]], "1", "0"], + ["Yes",[0],"", -5,[["expression","EAT_databaseRemove = 1;"]],"1","1"], + ["No", [0], "", -5, [["expression", "EAT_databaseRemove = -1"]], "1", "1"] + ]; + showCommandingMenu "#USER:_deleteMenu"; + waitUntil{(EAT_databaseRemove != 0) || (commandingMenu == "")}; + if(EAT_databaseRemove <= 0) exitWith{}; + + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has deleted object: %3 ID:%4 UID:%5 from database",name _player,getPlayerUID _player,EAT_DeleteObjText,_objectID,_objectUID] call EAT_Logger;}; + + format["Deleted %1",EAT_DeleteObjText] call dayz_rollingMessages; + + PVDZ_obj_Destroy = [_objectID,_objectUID,_player,_obj,dayz_authKey]; + publicVariableServer "PVDZ_obj_Destroy"; +}; + +EAT_DisplayCode = { + private ["_combo","_ct","_player"]; + _ct = cursorTarget; + _player = player; + _combo = _ct getVariable ["CharacterID","0"]; + + if(isNull _ct) exitWith{"No target" call dayz_rollingMessages;}; + + if(_combo != "0") then { + if (_ct isKindOf "LandVehicle" OR _ct isKindOf "Helicopter" OR _ct isKindOf "Plane" OR _ct isKindOf "Ship") then { + if ((_combo > 0) && (_combo <= 2500)) then {_result = format["Green%1",_combo];}else{ + if ((_combo > 2500) && (_combo <= 5000)) then {_result = format["Red%1",_combo-2500];}else{ + if ((_combo > 5000) && (_combo <= 7500)) then {_result = format["Blue%1",_combo-5000];}else{ + if ((_combo > 7500) && (_combo <= 10000)) then {_result = format["Yellow%1",_combo-7500];}else{ + if ((_combo > 10000) && (_combo <= 12500)) then {_result = format["Black%1",_combo-10000];};};};};}; + format["Vehicle Key: %1", _result] call dayz_rollingMessages; + }else{ + format["Item Code: %1", _combo] call dayz_rollingMessages; + }; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has viewed a locked item: %3",name _player,getPlayerUID _player,_combo] call EAT_Logger;}; + } else { + format["Not a valid target.",_combo] call dayz_rollingMessages; + }; +}; + +EAT_HealPlayer = { + private ["_player","_unit","_UIfix","_UIfix2"]; + + EAT_healDistance = -1; + _player = player; + + EAT_distanceMenu = + [ + ["",true], + ["Select distance:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["5", [2], "", -5, [["expression", "EAT_healDistance=5;"]], "1", "1"], + ["10", [3], "", -5, [["expression", "EAT_healDistance=10;"]], "1", "1"], + ["25", [4], "", -5, [["expression", "EAT_healDistance=25;"]], "1", "1"], + ["50", [5], "", -5, [["expression", "EAT_healDistance=50;"]], "1", "1"], + ["100", [6], "", -5, [["expression", "EAT_healDistance=100;"]], "1", "1"], + ["500", [7], "", -5, [["expression", "EAT_healDistance=500;"]], "1", "1"], + ["1000", [8], "", -5, [["expression", "EAT_healDistance=1000;"]], "1", "1"], + ["10000", [9], "", -5, [["expression", "EAT_healDistance=10000;"]], "1", "1"], + ["Self", [10], "", -5, [["expression", "EAT_healDistance=0;"]], "1", "1"], + ["Exit", [13], "", -3, [["expression", ""]], "1", "1"] + ]; + + showCommandingMenu "#USER:EAT_distanceMenu"; + + WaitUntil{commandingMenu == ""}; + + if(EAT_healDistance == -1) exitWith {}; + + r_player_blood = r_player_bloodTotal; + r_player_inpain = false; + r_player_infected = false; + r_player_injured = false; + dayz_hunger = 0; + dayz_thirst = 0; + dayz_temperatur = 100; + + r_fracture_legs = false; + r_fracture_arms = false; + r_player_dead = false; + r_player_unconscious = false; + r_player_loaded = false; + r_player_cardiac = false; + r_player_lowblood = false; + r_doLoop = false; + r_action = false; + r_player_timeout = 0; + r_handlerCount = 0; + r_interrupt = false; + + disableUserInput false; + dayz_sourceBleeding = objNull; + _player setVariable ["USEC_injured",false,true]; + _player setVariable['USEC_inPain',false,true]; + _player setVariable['USEC_infected',false,true]; + _player setVariable['USEC_lowBlood',false,true]; + _player setVariable['USEC_BloodQty',12000,true]; + _player setVariable['USEC_isCardiac',false,true]; + {_player setVariable[_x,false,true];} forEach USEC_woundHit; + _player setVariable ["unconsciousTime", r_player_timeout, true]; + _player setVariable['NORRN_unconscious',false,true]; + _player setVariable ['messing',[dayz_hunger,dayz_thirst],true]; + _player setHit ['legs',0]; + _player setVariable ['hit_legs',0,true]; + _player setVariable ['hit_hands',0,true]; + _player setVariable['medForceUpdate',true,true]; + _player setVariable["inCombat",false, true]; + + disableSerialization; + _UIfix = (uiNameSpace getVariable 'DAYZ_GUI_display') displayCtrl 1303; + _UIfix2 = (uiNameSpace getVariable 'DAYZ_GUI_display') displayCtrl 1203; + _UIfix ctrlShow false; + _UIfix2 ctrlShow false; + + if(EAT_healDistance == 0) exitWith {}; + + xyzaa = _player nearEntities ["Man", EAT_healDistance]; + + { + if (!(_x isKindOf "zZombie_Base") && !(_x isKindOf "Animal")) then { + _unit = _x; + + PVDZ_send = [_unit,"Bandage",[_unit,player]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_unit, "Transfuse", [_unit, player, 12000]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_unit,"Morphine",[_unit,player]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_unit,"Epinephrine",[_unit,player,"ItemEpinephrine"]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_unit,"Painkiller",[_unit,player]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_unit,"Antibiotics",[_unit,player]]; + publicVariableServer "PVDZ_send"; + }; + } forEach xyzaa; + + format["%1 healed",xyzaa] call dayz_rollingMessages; +}; + +EAT_Humanity = { + /* + Add or remove the selected humanity amount from player. + */ + + private ["_target","_player","_humanity","_addOrRemove"]; + _addOrRemove = _this select 0; + _target = cursorTarget; + _player = player; + + if(!isPlayer _target) then {_target = _player;}; + + EAT_humanityGain = -1; + _humanity = _target getVariable["humanity", 0]; + + if(_addOrRemove != "reset") then { + EAT_humanityChange = [ + ["",true], + ["Select humanity amount:", [-1], "", 0, [["expression", ""]], "1", "0"], + ["100", [2], "", -5, [["expression", "EAT_humanityGain=100;"]], "1", "1"], + ["500", [3], "", -5, [["expression", "EAT_humanityGain=500;"]], "1", "1"], + ["1000", [4], "", -5, [["expression", "EAT_humanityGain=1000;"]], "1", "1"], + ["2500", [5], "", -5, [["expression", "EAT_humanityGain=2500;"]], "1", "1"], + ["5000", [6], "", -5, [["expression", "EAT_humanityGain=5000;"]], "1", "1"], + ["Exit", [8], "", 0, [["expression", ""]], "1", "1"] + ]; + + showCommandingMenu "#USER:EAT_humanityChange"; + waitUntil{(commandingMenu == "")}; + if((EAT_humanityGain == -1)) exitWith {}; + + if(_addOrRemove == "remove") then { + EAT_humanityGain = EAT_humanityGain - (EAT_humanityGain * 2); + }; + + _target setVariable["humanity", _humanity + EAT_humanityGain, true]; + format["%1 humanity has been added (total: %2) for player %3", EAT_humanityGain, _humanity + EAT_humanityGain, name _target] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has added %3 to %4 humanity (total %5)",name _player,getPlayerUID _player,EAT_humanityGain,name _target,_humanity + EAT_humanityGain] call EAT_Logger;}; + }else{ + EAT_humanityGain = _humanity - (_humanity * 2); + _target setVariable["humanity", 2500, true]; + format["Humanity reset to 2500 for player %1", name _target] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has adjusted %3 humanity to 2500",name _player,getPlayerUID _player,name _target] call EAT_Logger;}; + }; +}; + +EAT_SendMessage = { + private "_dialog"; + EAT_SendDialogText = ""; + + // Sleep to make sure scroll menu is cleared + uiSleep 0.2; + + _dialog = createDialog "EAT_messageBox_Dialog"; + + ctrlSetText [1001,"Send a server message"]; + + waitUntil {!dialog}; + if(EAT_SendDialogText == "") exitWith {}; + + EAT_clientToServer = ["ServerMessage",player,[EAT_SendDialogText],dayz_authKey]; + publicVariableServer "EAT_clientToServer"; +}; + +EAT_AddMoney = { + // Add money to cursor target or self + + private ["_amount","_wealth","_addMoney"]; + + _target = cursorTarget; + _player = player; + //_amount = _this select 0; //this value will be either a coin amount or a briefcase amount depending on if ZSC is installed. + + if(!isPlayer _target) then {_target = _player;}; + EAT_moneyAmount = 0; + + if(Z_SingleCurrency) then { + _addMoney = + [ + ["",true], + ["Add Money to Player or Self:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["1,000", [2], "", -5, [["expression", "EAT_moneyAmount=1000;"]], "1", "1"], + ["5,000", [3], "", -5, [["expression", "EAT_moneyAmount=5000;"]], "1", "1"], + ["10,000", [4], "", -5, [["expression", "EAT_moneyAmount=10000;"]], "1", "1"], + ["25,000", [5], "", -5, [["expression", "EAT_moneyAmount=25000;"]], "1", "1"], + ["50,000", [6], "", -5, [["expression", "EAT_moneyAmount=50000;"]], "1", "1"], + ["100,000", [7], "", -5, [["expression", "EAT_moneyAmount=100000;"]], "1", "1"], + ["250,000", [8], "", -5, [["expression", "EAT_moneyAmount=250000;"]], "1", "1"], + ["Exit", [13], "", -3, [["expression", "EAT_moneyAmount = -1;"]], "1", "1"] + ]; + showCommandingMenu "#USER:_addMoney"; + WaitUntil{(EAT_moneyAmount !=0) || (commandingMenu == "")}; + if(EAT_moneyAmount <= 0) exitWith{}; + + _wealth = _target getVariable[Z_MoneyVariable,0]; + _target setVariable[Z_MoneyVariable,_wealth + EAT_moneyAmount,true]; + + } else { + _addMoney = + [ + ["",true], + ["Add Money to Player or Self:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["1 Briefcase", [2], "", -5, [["expression", "EAT_moneyAmount=1;"]], "1", "1"], + ["2 Briefcases", [3], "", -5, [["expression", "EAT_moneyAmount=2;"]], "1", "1"], + ["3 Briefcases", [4], "", -5, [["expression", "EAT_moneyAmount=3;"]], "1", "1"], + ["4 Briefcases", [5], "", -5, [["expression", "EAT_moneyAmount=4;"]], "1", "1"], + ["5 Briefcases", [6], "", -5, [["expression", "EAT_moneyAmount=5;"]], "1", "1"], + ["Exit", [13], "", -3, [["expression", "EAT_moneyAmount = -1;"]], "1", "1"] + ]; + showCommandingMenu "#USER:_addMoney"; + WaitUntil{(EAT_moneyAmount !=0) || (commandingMenu == "")}; + if(EAT_moneyAmount <= 0) exitWith{}; + + _target addMagazine ["ItemBriefcase100oz",EAT_moneyAmount]; + /* + { + [_target,"ItemBriefcase100oz"] call BIS_fnc_invAdd + } count _amount; + */ + + }; +}; + +EAT_Lock = { + private ["_objectID","_objectUID","_obj","_ownerID","_dir","_pos","_holder","_weapons","_magazines","_backpacks","_lockedClass","_player"]; + + _obj = cursorTarget; + if(isNull _obj) exitWith {}; + + _objType = typeOf _obj; + _ownerID = _obj getVariable["ObjectID","0"]; + _objectID = _obj getVariable["ObjectID","0"]; + _player = player; + + // Lock car + if (_obj isKindOf "LandVehicle" || _obj isKindOf "Air" || _obj isKindOf "Ship") then { + {player removeAction _x} forEach s_player_lockunlock;s_player_lockunlock = []; + s_player_lockUnlock_crtl = 1; + + PVDZE_veh_Lock = [_obj,true]; + + if (local _obj) then { + PVDZE_veh_Lock spawn local_lockUnlock + } else { + publicVariable "PVDZE_veh_Lock"; + }; + + s_player_lockUnlock_crtl = -1; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has locked a vehicle: %3",name _player,getPlayerUID _player,_obj] call EAT_Logger;}; + } else { + //Lock Safe/Lock_box + if(_objType in DZE_UnLockedStorage) then { + _lockedClass = getText (configFile >> "CfgVehicles" >> _objType >> "lockedClass"); + _text = getText (configFile >> "CfgVehicles" >> _objType >> "displayName"); + + disableUserInput true; // Make sure player can not modify gear while it is being saved + (findDisplay 106) closeDisplay 0; // Close gear + dze_waiting = nil; + + [_lockedClass,objNull] call fn_waitForObject; + + PVDZE_handleSafeGear = [_player,_obj,1]; + publicVariableServer "PVDZE_handleSafeGear"; + //wait for response from server to verify safe was logged and saved before proceeding + waitUntil {!isNil "dze_waiting"}; + disableUserInput false; // Safe is done saving now + + format[localize "str_epoch_player_117",_text] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has locked a safe - ID:%3 UID:%4",name _player,getPlayerUID _player,_objectID,_ownerID] call EAT_Logger;}; + + } else { + //Lock Door + + _objectCharacterID = _obj getVariable ["CharacterID","0"]; + + if(_obj animationPhase "Open_hinge" == 1) then {_obj animate ["Open_hinge", 0];}; + if(_obj animationPhase "Open_latch" == 1) then {_obj animate ["Open_latch", 0];}; + if(_obj animationPhase "Open_door" == 1) then {_obj animate ["Open_door", 0];}; + if(_obj animationPhase "DoorR" == 1) then {_obj animate ["DoorR", 0];}; + if(_obj animationPhase "LeftShutter" == 1) then {_obj animate ["LeftShutter", 0];}; + if(_obj animationPhase "RightShutter" == 1) then {_obj animate ["RightShutter", 0];}; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has locked a door - ID:%3 Combo:%4",name _player,getPlayerUID _player,_objectID,_objectCharacterID] call EAT_Logger;}; + }; + }; +}; + +EAT_Repair = { + local _vehicle = cursorTarget; + if (isNull _vehicle) exitWith {"No target" call dayz_rollingMessages;}; + + { + local _damage = [_vehicle,_x] call object_getHit; + if ((_damage select 0) > 0) then { + [_vehicle, (_damage select 1), 0, true] call fnc_veh_handleRepair; + }; + } forEach (_vehicle call vehicle_getHitpoints); + + if (local _vehicle) then { + [_vehicle,1] call local_setFuel; + } else { + PVDZ_send = [_vehicle,"SetFuel",[_vehicle,1]]; + publicVariableServer "PVDZ_send"; + }; + + format["%1 Repaired and Refueled", (getText(configFile >> "cfgVehicles" >> (typeOf _vehicle) >> "displayName"))] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has repaired %3",name player,getPlayerUID player,_vehicle] call EAT_Logger;}; +}; + +EAT_Unlock = { + private ["_objectID","_objectUID","_obj","_ownerID","_dir","_pos","_holder","_weapons","_magazines","_backpacks","_objWpnTypes","_objWpnQty","_countr","_unlockedClass","_objType","_objectCharacterID","_player"]; + + _obj = cursorTarget; + if(isNull _obj) exitWith {}; + _objectID = _obj getVariable["ObjectID","0"]; + _ownerID = _obj getVariable["ObjectID","0"]; + _objType = typeOf _obj; + _player = player; + + // Unlock car + if (_obj isKindOf "LandVehicle" || _obj isKindOf "Air" || _obj isKindOf "Ship") then { + + {player removeAction _x} forEach s_player_lockunlock;s_player_lockunlock = []; + s_player_lockUnlock_crtl = 1; + + PVDZE_veh_Lock = [_obj,false]; + + if (local _obj) then { + PVDZE_veh_Lock spawn local_lockUnlock + } else { + publicVariable "PVDZE_veh_Lock"; + }; + + s_player_lockUnlock_crtl = -1; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has unlocked vehicle: %3 with ID:%4",name _player,getPlayerUID _player,_obj,_objectID] call EAT_Logger;}; + } else { + // Unlock Safe/Lock_Box + if(_objType in DZE_LockedStorage) then { + // Get all required variables + _unlockedClass = getText (configFile >> "CfgVehicles" >> _objType >> "unlockedClass"); + _text = getText (configFile >> "CfgVehicles" >> _objType >> "displayName"); + //_obj setVariable["packing",1]; + + disableUserInput true; // Make sure player can not modify gear while it is filling + (findDisplay 106) closeDisplay 0; // Close gear + dze_waiting = nil; + + [_unlockedClass,objNull] call fn_waitForObject; + + PVDZE_handleSafeGear = [_player,_obj,0]; + publicVariableServer "PVDZE_handleSafeGear"; + //wait for response from server to verify safe was logged before proceeding + waitUntil {!isNil "dze_waiting"}; + disableUserInput false; // Safe is done filling now + + format[localize "STR_BLD_UNLOCKED",_text] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has unlocked a safe - ID:%3 UID:%4",name _player,getPlayerUID _player,_objectID,_ownerID] call EAT_Logger;}; + } else { + + _objectCharacterID = _obj getVariable ["CharacterID","0"]; + + //Unlock Doors + if(_obj animationPhase "Open_hinge" == 0) then {_obj animate ["Open_hinge", 1];}; + if(_obj animationPhase "Open_latch" == 0) then {_obj animate ["Open_latch", 1];}; + if(_obj animationPhase "Open_door" == 0) then {_obj animate ["Open_door", 1];}; + if(_obj animationPhase "DoorR" == 0) then {_obj animate ["DoorR", 1];}; + if(_obj animationPhase "LeftShutter" == 0) then {_obj animate ["LeftShutter", 1];}; + if(_obj animationPhase "RightShutter" == 0) then {_obj animate ["RightShutter", 1];}; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has unlocked a door - ID:%3 Combo:%4",name _player,getPlayerUID _player,_objectID,_objectCharacterID] call EAT_Logger;}; + }; + }; +}; + +EAT_RecoverKey = { + private ["_ct","_id","_result","_player"]; + _ct = cursorTarget; + _player = player; + + if (isNull _ct) exitWith {"No target" call dayz_rollingMessages;}; + + if (_ct isKindOf "LandVehicle" OR _ct isKindOf "Air" OR _ct isKindOf "Ship") then + { + _id = _ct getVariable ["CharacterID","0"]; + _id = parseNumber _id; + _result = "ItemKey"; + if (_id == 0) exitWith {cutText [format["%1 has ID 0 - No Key possible.",typeOf _ct], "PLAIN"];}; + if ((_id > 0) && (_id <= 2500)) then {_result = format["ItemKeyGreen%1",_id];}else{ + if ((_id > 2500) && (_id <= 5000)) then {_result = format["ItemKeyRed%1",_id-2500];}else{ + if ((_id > 5000) && (_id <= 7500)) then {_result = format["ItemKeyBlue%1",_id-5000];}else{ + if ((_id > 7500) && (_id <= 10000)) then {_result = format["ItemKeyYellow%1",_id-7500];}else{ + if ((_id > 10000) && (_id <= 12500)) then {_result = format["ItemKeyBlack%1",_id-10000];};};};};}; + + _player addWeapon _result; + format["Key [%1] added to inventory!",_result] call dayz_rollingMessages; + + if(EAT_logMajorTool) then {format["%1 %2 -- has generated %3 for a %4",name _player,getPlayerUID _player,_result,_ct] call EAT_Logger;}; + }; +}; + +EAT_SkinChanger = { + private ["_skin","_unitBag","_bagType","_bagMagazines","_bagWeapons","_array1","_array2","_player"]; + _skin = _this select 0; + _player = player; + _unitBag = unitBackpack _player; + _bagType = (typeOf _unitBag); + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has changed skins to %3",name _player,getPlayerUID _player,_skin] call EAT_Logger;}; + + if(_bagType !="") then { + _bagWeapons = getWeaponCargo _unitBag; + _bagMagazines = getMagazineCargo _unitBag; + removeBackpack (vehicle _player); + [dayz_playerUID,dayz_characterID,_skin] spawn player_humanityMorph; + uiSleep 0.3; + + if(_bagType in DayZ_Backpacks) then + { + (vehicle _player) addBackpack _bagType; + uiSleep 0.1; + + _array1 = _bagWeapons select 0; + _array2 = _bagWeapons select 1; + + { + (unitBackpack _player) addWeaponCargo [(_array1 select _forEachIndex),(_array2 select _forEachIndex)]; + }forEach _array1; + + _array1 = _bagMagazines select 0; + _array2 = _bagMagazines select 1; + + { + (unitBackpack _player) addMagazineCargo [(_array1 select _forEachIndex),(_array2 select _forEachIndex)]; + }forEach _array1; + }; + } else { + [dayz_playerUID,dayz_characterID,_skin] spawn player_humanityMorph; + }; +}; + +EAT_SpawnCrate = { + private ["_crate","_player","_dir","_pos"]; + + _crate = _this select 0; + _player = player; + + // Location of player and crate + _dir = getDir _player; + _pos = getposATL _player; + _pos = [(_pos select 0)+3*sin(_dir),(_pos select 1)+3*cos(_dir), (_pos select 2)]; + + EAT_selectDelay = 0; + + // Run delaymenu + EAT_delaymenu = + [ + ["",true], + ["Select delay", [-1], "", -5, [["expression", ""]], "1", "0"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["30 seconds", [], "", -5, [["expression", "EAT_selectDelay=30;"]], "1", "1"], + ["1 min", [], "", -5, [["expression", "EAT_selectDelay=60;"]], "1", "1"], + ["3 min", [], "", -5, [["expression", "EAT_selectDelay=180;"]], "1", "1"], + ["5 min", [], "", -5, [["expression", "EAT_selectDelay=300;"]], "1", "1"], + ["10 min", [], "", -5, [["expression", "EAT_selectDelay=600;"]], "1", "1"], + ["30 min", [], "", -5, [["expression", "EAT_selectDelay=1800;"]], "1", "1"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["No timer", [], "", -5, [["expression", "EAT_selectDelay=0;"]], "1", "1"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"] + ]; + showCommandingMenu "#USER:EAT_delaymenu"; + + WaitUntil{commandingMenu == ""}; + + EAT_clientToServer = ["crate",player,[EAT_selectDelay,_crate,_dir,_pos],dayz_authKey]; + publicVariableServer "EAT_clientToServer"; + + if(EAT_logMajorTool) then {format["%1 %2 -- has added a %3 crate",name _player,getPlayerUID _player,_crate] call EAT_Logger;}; + + if(EAT_selectDelay != 0) then { + format[_crate + " crate will disappear in %1 seconds.",EAT_selectDelay] call dayz_rollingMessages; + } else { + format[_crate + " has no timer. Shoot it to destroy."] call dayz_rollingMessages; + }; +}; + +EAT_Spectate = { + private ["_mycv","_max","_j","_name","_player","_menuCheckOk"]; + + _mycv = cameraView; + _player = player; + _menuCheckOk = false; + _max = 10; + _j = 0; + _name = ""; + + + EAT_pMenuTitle = "Spectate Player:"; + snext = false; + plist = []; + pselect5 = ""; + spectate = true; + + {if (_x != _player) then {plist set [count plist, name _x];};} forEach playableUnits; + + while {pselect5 == "" && !_menuCheckOk} do + { + [_j, (_j + _max) min (count plist)] call EAT_fnc_playerSelect; _j = _j + _max; + WaitUntil {pselect5 != "" || snext || commandingMenu == ""}; + _menuCheckOk = (commandingMenu == ""); + snext = false; + }; + + if (pselect5!= "exit" && pselect5!="") then + { + _name = pselect5; + { + if(format[name _x] == _name) then + { + ["Spectate"] call EAT_Keybind; + (vehicle _x) switchCamera "EXTERNAL"; + "F6 to return" call dayz_rollingMessages; + waitUntil {uiSleep 1; !(alive _x) or !(alive player) or !(spectate)}; + ["EndSpectate"] call EAT_Keybind; + player switchCamera _mycv; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has begun spectating %3",name _player,getPlayerUID _player,_name] call EAT_Logger;}; + }; + } forEach playableUnits; + }; + spectate = false; + if (!spectate && pselect5 != "exit") then + { + "Spectate done" call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has stopped spectating %3",name _player,getPlayerUID _player,_name] call EAT_Logger;}; + }; +}; + +EAT_LocateVeh = { + private ["_inv","_searchString","_ID","_found","_targetColor","_finalID","_targetPosition","_targetVehicle","_count","_key","_keyName","_showMapMarker","_markerColour","_locatorMarker"]; + + /****************************************| Config |**************************************************************************************/ + + _showMapMarker = True; // True = display the map markers, False = just identify the keys + _markerColour = "ColorOrange"; // Alternatives = "ColorBlack", "ColorRed", "ColorGreen", "ColorBlue", "ColorYellow", "ColorWhite" + + /****************************************| Config |**************************************************************************************/ + + if( isNil "locateVehicle") then {locateVehicle = true;} else {locateVehicle = !locateVehicle}; + + if(locateVehicle) then { + + _inv = [player] call BIS_fnc_invString; + _keyColor = []; + _keyID = []; + _removedID = []; + _count = 0; + + if (!("ItemGPS" in _inv)) then {player addWeapon "ItemGPS";}; + + { + for "_i" from 1 to 2500 do { + _searchString = format ["ItemKey%1%2",_x,str(_i)]; + if ((_searchString in _inv)) then { + _count = _count + 1; + _targetColor = _x; + _keyColor = _keyColor + [_targetColor]; + _ID = str(_i); + _ID = parseNumber _ID; + if (_targetColor == "Green") then { _finalID = _ID; }; + if (_targetColor == "Red") then { _finalID = _ID + 2500; }; + if (_targetColor == "Blue") then { _finalID = _ID + 5000; }; + if (_targetColor == "Yellow") then { _finalID = _ID + 7500; }; + if (_targetColor == "Black") then { _finalID = _ID + 10000; }; + _keyID = _keyID + [_finalID]; + _removedID = _removedID + [_ID]; + }; + }; + } forEach ["Black","Yellow","Blue","Green","Red"]; + + _i = 0; + for "_i" from 0 to 10 do {deleteMarkerLocal ("locatorMarker"+ (str _i));}; + + if (_count == 0) exitWith {"Place a key in your inventory to find that vehicle." call dayz_rollingMessages; locateVehicle = false;}; + format["Found: %1 vehicle key",_count] call dayz_rollingMessages; + + _count = _count - 1; + + _i = 0; + for "_i" from 0 to _count do { + _finalID = _keyID select _i; + _ID = _removedID select _i; + _targetColor = _keyColor select _i; + _key = format["ItemKey%1%2",_targetColor,_ID]; + _keyName = getText (configFile >> "CfgWeapons" >> _key >> "displayName"); + _found = 0; + + { + private ["_tID","_vehicle_type"]; + _vehicle_type = typeOf _x; + _tID = parseNumber (_x getVariable ["CharacterID","0"]); + if ((_tID == _finalID) && ((_vehicle_type isKindOf "Air") || (_vehicle_type isKindOf "LandVehicle") || (_vehicle_type isKindOf "Ship"))) then { + _targetPosition = getPosATL _x; + _targetVehicle = _x; + _found = 1; + }; + } forEach vehicles; + + if (_found != 0) then { + _vehicleName = gettext (configFile >> "CfgVehicles" >> (typeof _targetVehicle) >> "displayName"); + if (_showMapMarker) then { + _Marker = "locatorMarker" + (str _i); + _locatorMarker = createMarkerLocal [_Marker,[(_targetPosition select 0),(_targetPosition select 1)]]; + _locatorMarker setMarkerShapeLocal "ICON"; + _locatorMarker setMarkerTypeLocal "DOT"; + _locatorMarker setMarkerColorLocal _markerColour; + _locatorMarker setMarkerSizeLocal [1.0, 1.0]; + _locatorMarker setMarkerTextLocal format ["locator: %1",_vehicleName]; + } else { + format["%1 belongs to %2 - %3",_keyName,_vehicleName,_finalID] call dayz_rollingMessages; + }; + } else { + format["%1 - Vehicle ID: %2 - (This vehicle no longer exists in the database)",_keyName,_finalID] call dayz_rollingMessages; + }; + }; + + if (_showMapMarker) then { + "Map markers added. Run this again to remove them." call dayz_rollingMessages; + }; + } else { + _i=0; + for "_i" from 0 to 10 do {deleteMarkerLocal ("locatorMarker"+ (str _i));}; + "Map markers removed" call dayz_rollingMessages; + }; +}; + +EAT_SpawnZombie = { + private["_zCreate","_zPos","_setZedType","_zSpawnFnc","_zSpawnFnc","_player"]; + zTypes = ["zZombie_Base","z_villager1","z_villager2","z_villager3","z_suit1","z_suit2","z_worker1","z_worker2","z_worker3","z_soldier","z_soldier_heavy","z_soldier_pilot","z_policeman","z_teacher","z_doctor","z_hunter","z_priest"]; + + EAT_area = 0; + zCount = 0; + _player = player; + + _areaMenu = + [ + ["",true], + ["Set Radius:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["5m",[],"", -5,[["expression","EAT_area = 5;"]],"1","1"], + ["10m",[],"", -5,[["expression","EAT_area = 10;"]],"1","1"], + ["20m",[],"", -5,[["expression","EAT_area = 20;"]],"1","1"], + ["30m",[],"", -5,[["expression","EAT_area = 30;"]],"1","1"], + ["40m",[],"", -5,[["expression","EAT_area = 40;"]],"1","1"], + ["50m",[],"", -5,[["expression","EAT_area = 50;"]],"1","1"], + ["75m",[],"", -5,[["expression","EAT_area = 75;"]],"1","1"], + ["100m",[],"", -5,[["expression","EAT_area = 100;"]],"1","1"], + ["125m",[],"", -5,[["expression","EAT_area = 125;"]],"1","1"], + ["150m",[],"", -5,[["expression","EAT_area = 150;"]],"1","1"], + ["200m",[],"", -5,[["expression","EAT_area = 200;"]],"1","1"], + ["", [], "", -5,[["expression", ""]], "1", "0"], + ["Exit", [20], "", -5, [["expression", "EAT_area = -1;"]], "1", "1"] + ]; + + _amountMenu = + [ + ["",true], + ["Select zombie count:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["1",[],"", -5,[["expression","zCount = 1;"]],"1","1"], + ["2",[],"", -5,[["expression","zCount = 2;"]],"1","1"], + ["3",[],"", -5,[["expression","zCount = 3;"]],"1","1"], + ["4",[],"", -5,[["expression","zCount = 4;"]],"1","1"], + ["5",[],"", -5,[["expression","zCount = 5;"]],"1","1"], + ["10",[],"", -5,[["expression","zCount = 10;"]],"1","1"], + ["20",[],"", -5,[["expression","zCount = 20;"]],"1","1"], + ["30",[],"", -5,[["expression","zCount = 30;"]],"1","1"], + ["40",[],"", -5,[["expression","zCount = 40;"]],"1","1"], + ["50",[],"", -5,[["expression","zCount = 50;"]],"1","1"], + ["100",[],"", -5,[["expression","zCount = 100;"]],"1","1"], + ["", [], "", -5,[["expression", ""]], "1", "0"], + ["Exit", [20], "", -5, [["expression", "zCount = -1;"]], "1", "1"] + ]; + + showCommandingMenu "#USER:_areaMenu"; + waitUntil{(EAT_area != 0) || (commandingMenu == "")}; + if(EAT_area <= 0) exitWith{}; + + showCommandingMenu "#USER:_amountMenu"; + waitUntil{(zCount != 0) || (commandingMenu == "")}; + if(zCount <= 0) exitWith{}; + + if(EAT_logMajorTool) then {format["%1 %2 -- has added %3 zombies",name _player,getPlayerUID _player,zCount] call EAT_Logger;}; + + _i = 1; + for "_i" from 1 to zCount do { + [zTypes] spawn { + zTypes = _this select 0; + _setZedType = zTypes call BIS_fnc_selectRandom; + _zCreate = createAgent [_setZedType, position player, [], EAT_area, "NONE"]; + _zPos = getPosATL _zCreate; + [_zPos,_zCreate] execFSM "\z\addons\dayz_code\system\zombie_agent.fsm"; + }; + }; +}; + +EAT_AdminBuild = { + private ["_abort","_reason","_distance","_isNear","_lockable","_isAllowedUnderGround","_offset","_classname", + "_zheightdirection","_zheightchanged","_rotate","_objectHelperPos","_objectHelperDir","_objHDiff","_position", + "_isOk","_dir","_vector","_cancel","_location2","_buildOffset","_location", + "_counter","_dis","_sfx","_combination_1_Display","_combination_1", + "_combination_2","_combination_3","_combination","_combinationDisplay","_combination_4","_num_removed", + "_tmpbuilt","_vUp","_classnametmp","_text","_ghost","_objectHelper","_location1","_object","_helperColor", + "_canDo","_pos","_onLadder","_vehicle","_inVehicle","_isPole","_isPerm","_moveDistanceOriginal"]; + + //Check if building already in progress, exit if so. + if (dayz_actionInProgress) exitWith {localize "str_epoch_player_40" call dayz_rollingMessages;}; + dayz_actionInProgress = true; + + _pos = [player] call FNC_GetPos; + + _onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1; + + _vehicle = vehicle player; + _inVehicle = (_vehicle != player); + _isPerm = false; + + DZE_Q = false; + DZE_Z = false; + + DZE_Q_alt = false; + DZE_Z_alt = false; + + DZE_Q_ctrl = false; + DZE_Z_ctrl = false; + + DZE_5 = false; + DZE_4 = false; + DZE_6 = false; + + DZE_F = false; + + DZE_cancelBuilding = false; + + DZE_updateVec = false; + DZE_memDir = 0; + DZE_memForBack = 0; + DZE_memLeftRight = 0; + + call gear_ui_init; + closeDialog 1; + + if (dayz_isSwimming) exitWith {dayz_actionInProgress = false; localize "str_player_26" call dayz_rollingMessages;}; + if (_inVehicle) exitWith {dayz_actionInProgress = false; localize "str_epoch_player_42" call dayz_rollingMessages;}; + if (_onLadder) exitWith {dayz_actionInProgress = false; localize "str_player_21" call dayz_rollingMessages;}; + + DZE_buildItem = _this select 0; + if(isNil "adminRebuildItem" && DZE_buildItem == "rebuild") exitWith {dayz_actionInProgress = false; systemChat "You have not selected a buildable item yet"}; + if(DZE_buildItem == "rebuild") then { + DZE_buildItem = adminRebuildItem; + _isPerm = adminRebuildPerm; + } else { + adminRebuildItem = DZE_buildItem; + adminRebuildPerm = _this select 1; + _isPerm = adminRebuildPerm; + }; + + _classname = DZE_buildItem; + _classnametmp = _classname; + + _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); + if(isNil "_text") then { + _text = _classname; + }; + _ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview"); + + _lockable = 0; //default define if lockable not found in config file below + if(isNumber (configFile >> "CfgVehicles" >> _classname >> "lockable")) then { //find out if item is lockable object + _lockable = getNumber(configFile >> "CfgVehicles" >> _classname >> "lockable"); // 2=lockbox, 3=combolock, 4=safe + }; + + _isAllowedUnderGround = 1; //check if allowed to build under terrain + if(isNumber (configFile >> "CfgVehicles" >> _classname >> "nounderground")) then { + _isAllowedUnderGround = getNumber(configFile >> "CfgVehicles" >> _classname >> "nounderground"); + }; + + _offset = getArray (configFile >> "CfgVehicles" >> _classname >> "offset"); //check default distance offset, define if does not exist + + if((count _offset) <= 0) then { + _offset = [0,2,0]; + }; + + _isPole = (_classname == "Plastic_Pole_EP1_DZ"); + + _distance = DZE_PlotPole select 0; + _needText = localize "str_epoch_player_246"; + + if(_isPole) then { + _distance = DZE_PlotPole select 1; + }; + + // check for near plot + _findNearestPoles = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], _distance]; + _findNearestPole = []; + + { + if (alive _x) then { + _findNearestPole set [(count _findNearestPole),_x]; + }; + } count _findNearestPoles; + + _IsNearPlot = count (_findNearestPole); + + // If item is plot pole && another one exists within 45m + if(_isPole && _IsNearPlot > 0) exitWith {dayz_actionInProgress = false; cutText ["You are too close to another plot pole" , "PLAIN DOWN"]; }; + + _objectHelper = objNull; + _isOk = true; + _location1 = [player] call FNC_GetPos; // get inital players position + _dir = getDir player; //required to pass direction when building + + // if ghost preview available use that instead + if (_ghost != "") then { + _classname = _ghost; + }; + + _object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"]; //object preview, not an actual object that will be built + + if((count _offset) <= 0) then { + _offset = [0,(abs(((boundingBox _object)select 0) select 1)),0]; + }; + + _objectHelper = "Sign_sphere10cm_EP1" createVehicle [0,0,0]; + _helperColor = "#(argb,8,8,3)color(0,0,0,0,ca)"; + _objectHelper setObjectTexture [0,_helperColor]; + _objectHelper attachTo [player,_offset]; + _object attachTo [_objectHelper,[0,0,0]]; + + if (isClass (configFile >> "SnapBuilding" >> _classname)) then { + ["","","",["Init",_object,_classname,_objectHelper]] spawn snap_build; + }; + + // Do not turn on vectors for GUI spawned buildings + if !(DZE_buildItem in DZE_noRotate) then{ + ["","","",["Init","Init",0]] spawn build_vectors; + }; + + _objHDiff = 0; + _cancel = false; + _reason = ""; + + helperDetach = false; + _canDo = (!r_drag_sqf and !r_player_unconscious); + _position = [_objectHelper] call FNC_GetPos; + + while {_isOk} do { + _zheightchanged = false; + _zheightdirection = ""; + _rotate = false; + + if (DZE_Q) then { + DZE_Q = false; + _zheightdirection = "up"; + _zheightchanged = true; + }; + if (DZE_Z) then { + DZE_Z = false; + _zheightdirection = "down"; + _zheightchanged = true; + }; + if (DZE_Q_alt) then { + DZE_Q_alt = false; + _zheightdirection = "up_alt"; + _zheightchanged = true; + }; + if (DZE_Z_alt) then { + DZE_Z_alt = false; + _zheightdirection = "down_alt"; + _zheightchanged = true; + }; + if (DZE_Q_ctrl) then { + DZE_Q_ctrl = false; + _zheightdirection = "up_ctrl"; + _zheightchanged = true; + }; + if (DZE_Z_ctrl) then { + DZE_Z_ctrl = false; + _zheightdirection = "down_ctrl"; + _zheightchanged = true; + }; + if (DZE_4) then { + _rotate = true; + DZE_4 = false; + if(DZE_dirWithDegrees) then{ + DZE_memDir = DZE_memDir - DZE_curDegree; + }else{ + DZE_memDir = DZE_memDir - 45; + }; + }; + if (DZE_6) then { + _rotate = true; + DZE_6 = false; + if(DZE_dirWithDegrees) then{ + DZE_memDir = DZE_memDir + DZE_curDegree; + }else{ + DZE_memDir = DZE_memDir + 45; + }; + }; + + if(DZE_updateVec) then{ + [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw; + DZE_updateVec = false; + }; + + if (DZE_F and _canDo) then { + if (helperDetach) then { + _objectHelper attachTo [player]; + DZE_memDir = DZE_memDir-(getDir player); + helperDetach = false; + [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw; + } else { + _objectHelperPos = getPosATL _objectHelper; + detach _objectHelper; + DZE_memDir = getDir _objectHelper; + [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw; + _objectHelper setPosATL _objectHelperPos; + _objectHelper setVelocity [0,0,0]; //fix sliding glitch + helperDetach = true; + }; + DZE_F = false; + }; + + if(_rotate) then { + [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw; + }; + + if(_zheightchanged) then { + if (!helperDetach) then { + detach _objectHelper; + _objectHelperDir = getDir _objectHelper; + }; + + _position = [_objectHelper] call FNC_GetPos; + + if(_zheightdirection == "up") then { + _position set [2,((_position select 2)+0.1)]; + _objHDiff = _objHDiff + 0.1; + }; + if(_zheightdirection == "down") then { + _position set [2,((_position select 2)-0.1)]; + _objHDiff = _objHDiff - 0.1; + }; + + if(_zheightdirection == "up_alt") then { + _position set [2,((_position select 2)+1)]; + _objHDiff = _objHDiff + 1; + }; + if(_zheightdirection == "down_alt") then { + _position set [2,((_position select 2)-1)]; + _objHDiff = _objHDiff - 1; + }; + + if(_zheightdirection == "up_ctrl") then { + _position set [2,((_position select 2)+0.01)]; + _objHDiff = _objHDiff + 0.01; + }; + if(_zheightdirection == "down_ctrl") then { + _position set [2,((_position select 2)-0.01)]; + _objHDiff = _objHDiff - 0.01; + }; + + if((_isAllowedUnderGround == 0) && ((_position select 2) < 0)) then { + _position set [2,0]; + }; + + if (surfaceIsWater _position) then { + _objectHelper setPosASL _position; + } else { + _objectHelper setPosATL _position; + }; + + if (!helperDetach) then { + _objectHelper attachTo [player]; + }; + [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw; + }; + + uiSleep 0.5; + + _location2 = [player] call FNC_GetPos; + _objectHelperPos = [_objectHelper] call FNC_GetPos; + + if(DZE_5) exitWith { + _position = [_object] call FNC_GetPos; + detach _object; + _dir = getDir _object; + _vector = [(vectorDir _object),(vectorUp _object)]; + deleteVehicle _object; + detach _objectHelper; + deleteVehicle _objectHelper; + }; + + if(_location1 distance _location2 > DZE_buildMaxMoveDistance) exitWith { + _cancel = true; + _reason = format[localize "STR_EPOCH_BUILD_FAIL_MOVED",DZE_buildMaxMoveDistance]; + detach _object; + deleteVehicle _object; + detach _objectHelper; + deleteVehicle _objectHelper; + }; + + if(_location1 distance _objectHelperPos > DZE_buildMaxMoveDistance) exitWith { + _cancel = true; + _reason = format[localize "STR_EPOCH_BUILD_FAIL_TOO_FAR",DZE_buildMaxMoveDistance]; + detach _object; + deleteVehicle _object; + detach _objectHelper; + deleteVehicle _objectHelper; + }; + + if (DZE_cancelBuilding) exitWith { + _cancel = true; + _reason = localize "STR_EPOCH_PLAYER_46"; + detach _object; + deleteVehicle _object; + detach _objectHelper; + deleteVehicle _objectHelper; + }; + }; + _proceed = false; + _counter = 0; + _location = [0,0,0]; + + if(!_cancel) then { + + _classname = _classnametmp; + + // Start Build + _tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; //create actual object that will be published to database + + _tmpbuilt setdir _dir; //set direction inherited from passed args from control + _tmpbuilt setVariable["memDir",_dir,true]; + //if (isBuilding) then {_tmpbuilt setVariable["EAT_Building",1,true];}; + + // Get position based on object + _location = _position; + + if((_isAllowedUnderGround == 0) && ((_location select 2) < 0)) then { //check Z axis if not allowed to build underground + _location set [2,0]; //reset Z axis to zero (above terrain) + }; + + _tmpbuilt setVectorDirAndUp _vector; + + _buildOffset = [0,0,0]; + _vUp = _vector select 1; + switch (_classname) do { + case "MetalFloor_DZ": { _buildOffset = [(_vUp select 0) * .148, (_vUp select 1) * .148,0]; }; + //case "CinderWall_DZ": { _buildOffset = [(_vUp select 0) * 1.686, (_vUp select 1) * 1.686,0]; }; + }; + + _location = [ + (_location select 0) - (_buildOffset select 0), + (_location select 1) - (_buildOffset select 1), + (_location select 2) - (_buildOffset select 2) + ]; + + if (surfaceIsWater _location) then { + _tmpbuilt setPosASL _location; + _location = ASLtoATL _location; //Database uses ATL + } else { + _tmpbuilt setPosATL _location; + }; + + //format[localize "str_epoch_player_138",_text] call dayz_rollingMessages; + + call player_forceSave; + + format[localize "str_build_01",_text] call dayz_rollingMessages; + + _tmpbuilt setVariable ["OEMPos",_location,true]; //store original location as a variable + + if(_isPerm) then { + _tmpbuilt setVariable ["CharacterID",dayz_characterID,true]; + // fire? + if(_tmpbuilt isKindOf "Land_Fire_DZ") then { //if campfire, then spawn, but do not publish to database + _tmpbuilt spawn player_fireMonitor; + } else { + if (DZE_permanentPlot) then { + _tmpbuilt setVariable ["ownerPUID",dayz_playerUID,true]; + if (_isPole) then { + _friendsArr = [[dayz_playerUID,toArray (name player)]]; + _tmpbuilt setVariable ["plotfriends", _friendsArr, true]; + PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],_friendsArr,player,dayz_authKey]; + } else { + PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],[],player,dayz_authKey]; + }; + } else { + PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location, _vector],[]]; + }; + publicVariableServer "PVDZ_obj_Publish"; + }; + }; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has used admin build to place: %3",name player,getPlayerUID player,_tmpbuilt] call EAT_Logger;}; + + } else { //cancel build if passed _cancel arg was true or building on roads/trader city + format[localize "str_epoch_player_47",_text,_reason] call dayz_rollingMessages; + }; + + dayz_actionInProgress = false; +}; + +EAT_BuildingDialog = { + private ["_dialog","_building"]; + PermDialogSelected = -1; + TempDialogSelected = -1; + AdminDialogList = 13000; + buildingList = EAT_allBuildingList; + + _dialog = createDialog "EAT_build_AdminDialog"; + lbClear AdminDialogList; + + { + private ["_index"]; + _index = lbAdd [AdminDialogList, format["%1 - %2 (%3)", _x select 0, _x select 1, _x select 2]]; + lbSetPicture [AdminDialogList, _index]; + } forEach buildingList; + + LoadSpecificList = { + lbClear AdminDialogList; + buildingList = _this select 0; + + switch(buildingList) do + { + case "Cinder": + { + buildingList = EAT_buildCinder; + }; + case "Wood": + { + buildingList = EAT_buildWood; + }; + case "Metal": + { + buildingList = EAT_buildMetal; + }; + case "Nets": + { + buildingList = EAT_buildNets; + }; + case "Storage": + { + buildingList = EAT_buildStorage; + }; + case "Sandbags": + { + buildingList = EAT_buildSandbags; + }; + case "Misc": + { + buildingList = EAT_buildMisc; + }; + }; + + lbClear AdminDialogList; + + { + private ["_index", "_x"]; + _index = lbAdd [AdminDialogList, format["%1 - %2 (%3)", _x select 0, _x select 1, _x select 2]]; + lbSetPicture [AdminDialogList, _index]; + } forEach buildingList; + }; + + waitUntil { !dialog }; + if ((PermDialogSelected < 0) && (TempDialogSelected < 0)) exitWith {}; + + if (PermDialogSelected > -1) then { + _building = ((buildingList select PermDialogSelected) select 2); + [_building,true] spawn EAT_AdminBuild; + }; + + if (TempDialogSelected > -1) then { + _building = ((buildingList select TempDialogSelected) select 2); + [_building,false] spawn EAT_AdminBuild; + }; +}; + +EAT_MaintainArea = { + private ["_target","_objectClasses","_range","_objects","_count","_findNearestPole","_IsNearPlot","_objects_filtered"]; + + player removeAction s_player_maintain_area; + s_player_maintain_area = 1; + player removeAction s_player_maintain_area_preview; + s_player_maintain_area_preview = 1; + + // check for near plot + _target = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], 20]; + _findNearestPole = []; + + { + if (alive _x) then { + _findNearestPole set [(count _findNearestPole),_x]; + }; + } count _target; + + _IsNearPlot = count (_findNearestPole); + if(_IsNearPlot < 1) exitWith {s_player_maintain_area_preview = -1;s_player_maintain_area = -1; "No plot pole found in 20 meters" call dayz_rollingMessages;}; + _target = _target select 0; + _objectClasses = DZE_maintainClasses; + _range = DZE_maintainRange; // set the max range for the maintain area + _objects = nearestObjects [_target, _objectClasses, _range]; + + //filter to only those that have 10% damage + _objects_filtered = []; + { + if (damage _x >= DZE_DamageBeforeMaint) then { + _objects_filtered set [count _objects_filtered, _x]; + }; + } count _objects; + _objects = _objects_filtered; + + // TODO dynamic requirements based on used building parts? + _count = count _objects; + + if (_count == 0) exitWith { + cutText [format[(localize "STR_EPOCH_ACTIONS_22"), _count], "PLAIN DOWN"]; + s_player_maintain_area = -1; + s_player_maintain_area_preview = -1; + }; + + // all required items removed from player gear + cutText [format[(localize "STR_EPOCH_ACTIONS_4"), _count], "PLAIN DOWN", 5]; + PVDZE_maintainArea = [player,1,_target]; + publicVariableServer "PVDZE_maintainArea"; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has used admin build to maintain an area",name player,getPlayerUID player] call EAT_Logger;}; + + s_player_maintain_area = -1; + s_player_maintain_area_preview = -1; +}; + +EAT_DownGrade = { + private ["_location","_dir","_classname","_text","_object","_objectID","_objectUID","_newclassname","_obj","_downgrade","_objectCharacterID"]; + + player removeAction s_player_downgrade_build; + s_player_downgrade_build = 1; + + // get cursor target + _obj = cursorTarget; + if(isNull _obj) exitWith {s_player_downgrade_build = -1; "No Object Selected" call dayz_rollingMessages}; + + _objectCharacterID = _obj getVariable ["CharacterID","0"];// Current charID + + if (DZE_Lock_Door != _objectCharacterID) exitWith {s_player_downgrade_build = -1; localize "str_epoch_player_49" call dayz_rollingMessages;}; + + _objectID = _obj getVariable ["ObjectID","0"];// Find objectID + _objectUID = _obj getVariable ["ObjectUID","0"];// Find objectUID + + if(_objectID == "0" && _objectUID == "0") exitWith {s_player_downgrade_build = -1; localize "str_epoch_player_50" call dayz_rollingMessages;}; + + // Get classname + _classname = typeOf _obj; + + // Find display name + _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); + + // Find next downgrade + _downgrade = getArray (configFile >> "CfgVehicles" >> _classname >> "downgradeBuilding"); + + if ((count _downgrade) > 0) then { + + _newclassname = _downgrade select 0; + + // Get position + _location = _obj getVariable["OEMPos",(getposATL _obj)]; + + // Get direction + _dir = getDir _obj; + _vector = [(vectorDir _obj),(vectorUp _obj)]; + + // Reset the character ID on locked doors before they inherit the newclassname + if (_classname in DZE_DoorsLocked) then { + _obj setVariable ["CharacterID",dayz_characterID,true]; + _objectCharacterID = dayz_characterID; + }; + + _classname = _newclassname; + _object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"]; + _object setDir _dir; + _object setVariable["memDir",_dir,true]; + _object setVectorDirAndUp _vector; + _object setPosATL _location; + + format[localize "str_epoch_player_142",_text] call dayz_rollingMessages; + + if (DZE_GodModeBase && {!(_classname in DZE_GodModeBaseExclude)}) then { + _object addEventHandler ["HandleDamage",{false}]; + }; + + if (DZE_permanentPlot) then { + _ownerID = _obj getVariable["ownerPUID","0"]; + _object setVariable ["ownerPUID",_ownerID,true]; + PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location,dayz_playerUID,_vector],_classname,_obj,player,[],dayz_authKey]; + } else { + PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location, _vector],_classname,_obj,player,[],dayz_authKey]; + }; + publicVariableServer "PVDZE_obj_Swap"; + + player reveal _object; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has used admin build to downgrade: %3",name player,getPlayerUID player,_obj] call EAT_Logger;}; + + } else { + localize "str_epoch_player_51" call dayz_rollingMessages; + }; + + s_player_downgrade_build = -1; +}; + +EAT_Upgrade = { + private ["_location","_dir","_classname","_text","_object","_objectID","_objectUID","_newclassname","_obj","_upgrade","_lockable", + "_combination_1","_combination_2","_combination_3","_combination","_objectCharacterID"]; + + player removeAction s_player_upgrade_build; + s_player_upgrade_build = 1; + + _obj = cursorTarget; + if(isNull _obj) exitWith {s_player_upgrade_build = -1; "No Object Selected" call dayz_rollingMessages;}; + + _objectID = _obj getVariable ["ObjectID","0"]; // Find objectID + _objectUID = _obj getVariable ["ObjectUID","0"];// Find objectUID + + if (_objectID == "0" && _objectUID == "0") exitWith {s_player_upgrade_build = -1; localize "str_epoch_player_50" call dayz_rollingMessages;}; + + _classname = typeOf _obj; + _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); + _upgrade = getArray (configFile >> "CfgVehicles" >> _classname >> "upgradeBuilding"); + + if ((count _upgrade) > 0) then { + _newclassname = _upgrade select 0; + _lockable = 0; + if(isNumber (configFile >> "CfgVehicles" >> _newclassname >> "lockable")) then { + _lockable = getNumber(configFile >> "CfgVehicles" >> _newclassname >> "lockable"); + }; + + _location = _obj getVariable["OEMPos",(getposATL _obj)]; + _dir = getDir _obj; + _vector = [(vectorDir _obj),(vectorUp _obj)]; + _objectCharacterID = _obj getVariable ["CharacterID","0"]; + _classname = _newclassname; + _object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"]; + _object setDir _dir; + _object setVariable["memDir",_dir,true]; + _object setVectorDirAndUp _vector; + _object setPosATL _location; + + if (_lockable == 3) then { + _combination_1 = floor(random 10); + _combination_2 = floor(random 10); + _combination_3 = floor(random 10); + _combination = format["%1%2%3",_combination_1,_combination_2,_combination_3]; + + _objectCharacterID = _combination; + DZE_Lock_Door = _combination; + + format[localize "str_epoch_player_158",_combination,_text] call dayz_rollingMessages; + systemChat format[localize "str_epoch_player_158",_combination,_text]; + } else { + format[localize "str_epoch_player_159",_text] call dayz_rollingMessages; + }; + if (DZE_GodModeBase && {!(_classname in DZE_GodModeBaseExclude)}) then { + _object addEventHandler ["HandleDamage",{false}]; + }; + if (DZE_permanentPlot) then { + _ownerID = _obj getVariable["ownerPUID","0"]; + _object setVariable ["ownerPUID",_ownerID,true]; + PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location,_ownerID,_vector],_classname,_obj,player,[],dayz_authKey]; + } else { + PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location,_vector],_classname,_obj,player,[],dayz_authKey]; + }; + publicVariableServer "PVDZE_obj_Swap"; + + player reveal _object; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has used admin build to upgrade: %3",name player,getPlayerUID player,_obj] call EAT_Logger;}; + + } else { + localize "str_epoch_player_82" call dayz_rollingMessages; + }; + + s_player_upgrade_build = -1; +}; + +EAT_AdminModeToggle = { + /* + Below are the default ON/OFF toggles. Anything marked + true will turn on when you turn on AdminMode. + To make an option default ON change = false to = true. + To make an option default OFF change = true to = false. + To disable an option entirely, go down to toggleMenu = + */ + + if (isNil "EAT_AdminMode") then {EAT_AdminMode = true;} else {EAT_AdminMode = !EAT_AdminMode;}; + + optionMenu = + { + toggleMenu = + [ + // To disable an option for admins place a // in the front of the line below + // and change the initialization to false in the config at the top of this file + ["",true], + ["Toggle options:(current state)", [-1], "", -5, [["expression", ""]], "1", "0"], + [format["Vehicle Speed Boost: %1",EAT_speedBoost],[0],"", -5, [["expression", 'EAT_speedBoost = [EAT_speedBoost,EAT_VehSpeedBoost] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + [format["Fast Forward: %1",EAT_fastWalk],[0],"", -5, [["expression", 'EAT_fastWalk = [EAT_fastWalk,EAT_FastForwardToggle] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + [format["Fast Up: %1",EAT_fastUp],[0],"", -5, [["expression", 'EAT_fastUp = [EAT_fastUp,EAT_fastUpToggle] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + [format["Enhanced ESP: %1",EAT_enhancedESPMode], [0], "", -5, [["expression", 'if (EAT_enhancedESPMode) then {EAT_enhancedESPMode = false; EATenhancedESP = false;} else {call EAT_enhancedESPToggle;}; [] spawn optionMenu']], "1", "1"], + [format["Player ESP: %1",EAT_playerESPMode], [0], "", -5, [["expression", 'if (EAT_playerESPMode) then {EAT_playerESPMode = false; EATplayerESP = false;} else {call EAT_playerESPToggle}; [] spawn optionMenu']], "1", "1"], + [format["Invisibility ON: %1",EAT_invisibility], [0], "", -5, [["expression", 'EAT_invisibility = [EAT_invisibility,EAT_AdminInvisible] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + [format["Flying ON: %1",EAT_flyingMode], [0], "", -5, [["expression", 'if (EAT_flyingMode) then {EAT_flyingMode = false; EATflying = false;} else {EAT_flyingMode = [EAT_flyingMode,EAT_flying] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["Infinite Ammo: %1",EAT_infAmmo], [0], "", -5, [["expression", 'if (EAT_infAmmo) then {EAT_infAmmo = false; EATinfiniteAmmo = false;} else {EAT_infAmmo = [EAT_infAmmo,EAT_InfiniteAmmo] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["God Mode: %1",EAT_playerGod], [0], "", -5, [["expression", 'if (EAT_playerGod) then {EAT_playerGod = false; EATplayerGod = false;} else {EAT_playerGod = [EAT_playerGod,EAT_GodMode] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["Car God Mode: %1",EAT_vehicleGod], [0], "", -5, [["expression", 'if (EAT_vehicleGod) then {EAT_vehicleGod = false; EATvehicleGod = false;} else {EAT_vehicleGod = [EAT_vehicleGod,EAT_VehGod] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["Zombie Shield: %1",EAT_ZombieShield], [0], "", -5, [["expression", 'if (EAT_ZombieShield) then {EAT_ZombieShield = false; EAT_SheildMe = false;} else {EAT_ZombieShield = [EAT_ZombieShield,EAT_ZomShield] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["Grass Off: %1",EAT_grassOff], [0], "", -5, [["expression", 'EAT_grassOff = [EAT_grassOff,EAT_GrassOffToggle] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + [format["Admin Fast Build (No Plot Req): %1",EAT_adminBuildMode], [0], "", -5, [["expression", 'EAT_adminBuildMode = [EAT_adminBuildMode,EAT_adminBuildCount] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + ["", [], "", -5, [["expression", ""]], "1", "0"], + ["Exit", [0], "", -5, [["expression", ""]], "1", "1"] + ]; + showCommandingMenu "#USER:toggleMenu"; + }; + + if(EAT_AdminMode) then { + "***Press F4 to toggle AdminMode options***" call dayz_rollingMessages; + ["AdminMode"] call EAT_Keybind; + call EAT_AdminToggleOn; + } else{ + "Admin Mode - DISABLED" call dayz_rollingMessages; + ["EndAdminMode"] call EAT_Keybind; + call EAT_AdminToggleOff; + }; +}; + +EAT_flying = { + EATflying = _this select 0; + + hovering = nil; + hoverPos = nil; + + move_forward = + { + if ((getPosATL (vehicle player) select 2) > 1) then + { + _vehicle = (vehicle player); + _vel = velocity _vehicle; + _dir = direction _vehicle; + _speed = 0.4; comment "Added speed"; + _vehicle setVelocity [(_vel select 0)+(sin _dir*_speed),(_vel select 1)+ + (cos _dir*_speed),0.4]; + }; + }; + + move_left = + { + if ((getPosATL (vehicle player) select 2) > 1) then + { + _leftDirection = getdir (vehicle player); + (vehicle player) setdir (_leftDirection) - 2; + }; + }; + + move_backward = + { + if ((getPosATL (vehicle player) select 2) > 1) then + { + _vehicle = (vehicle player); + _vel = velocity _vehicle; + _dir = direction _vehicle; + _speed = -0.4; comment "Added speed"; + _vehicle setVelocity [(_vel select 0)+(sin _dir*_speed),(_vel select 1)+ + (cos _dir*_speed),0.4]; + }; + }; + + move_right = + { + if ((getPosATL (vehicle player) select 2) > 1) then + { + _rightDirection = getdir (vehicle player); + (vehicle player) setdir (_rightDirection) + 2; + player setVariable["lastPos",1];player setVariable["lastPos",[]]; + }; + }; + + move_up = + { + _vehicle = (vehicle player); + _vel = velocity _vehicle; + _dir = direction _vehicle; + _speed = 6; comment "Added speed"; + _vehicle setVelocity [(_vel select 0),(_vel select 1),8]; + }; + + move_down = + { + if ((getPosATL (vehicle player) select 2) > 1) then + { + _vehicle = (vehicle player); + _forwardCurrentDirection = getdir (vehicle player); + _forwardCurrentPosition = getPosATL (vehicle player); + (vehicle player) setdir _forwardCurrentDirection; + _vehicle setVelocity [0,0,-4]; + }; + }; + + toggle_hover = + { + if (isnil "hovering") then + { + hovering = true; + "Hovering ON" call dayz_rollingMessages; + hoverPos = getPosATL (vehicle player); + } + else + { + hovering = nil; + "Hovering OFF" call dayz_rollingMessages; + hoverPos = nil; + }; + }; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has added flying",name player,getPlayerUID player]call EAT_Logger;}; + + keyForward = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 17) then {call move_forward;}"];//W - Forward + keyLeft = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 30) then {call move_left;}"];//A - Left + keyBackward = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 31) then {call move_backward;}"];//S - Backward + keyRight = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 32) then {call move_right;}"];//D - Right + keyUp = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 16) then {call move_up;}"];//Q - Up + keyDown = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 44) then {call move_down;}"];//Z - Down + keyHover = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 57) then {call toggle_hover;}"];//SpaceBar - Toggle Hover + + + [] spawn { + while {EATflying} do + { + if (!isNil "hovering") then + { + (vehicle player) setVelocity [0,0,0.2]; + }; + uiSleep 0.01; + }; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has DISABLED flying",name player,getPlayerUID player] call EAT_Logger;}; + + (findDisplay 46) displayRemoveEventHandler ["KeyDown", keyForward]; + (findDisplay 46) displayRemoveEventHandler ["KeyDown", keyLeft]; + (findDisplay 46) displayRemoveEventHandler ["KeyDown", keyBackward]; + (findDisplay 46) displayRemoveEventHandler ["KeyDown", keyRight]; + (findDisplay 46) displayRemoveEventHandler ["KeyDown", keyUp]; + (findDisplay 46) displayRemoveEventHandler ["KeyDown", keyDown]; + (findDisplay 46) displayRemoveEventHandler ["KeyDown", keyHover]; + + hovering = nil; + hoverPos = nil; + }; +}; + +EAT_EnhancedESP = { + if(isNil "markers") then { markers = []}; + if(isNil "vehList") then { vehList = []}; + if(isNil "unlockedVehList") then { unlockedVehList = []}; + if(isNil "lockedVehList") then { lockedVehList = []}; + if(isNil "changed") then {changed = false}; + if(isNil "toggleCheck") then {toggleCheck = 0}; + if(isNil "delayTime") then {delayTime = 0}; + if(isNil "poleList") then {poleList = [];}; + if(isNil "storageList") then {storageList = [];}; + if(isNil "buildableObjectsList") then {buildableObjectsList = [];}; + if(isNil "crashList") then {crashList = [];}; + if(isNil "storageObjects") then {storageObjects = ["TentStorage","TentStorageDomed","TentStorageDomed2","VaultStorageLocked","OutHouse_DZ","Wooden_shed_DZ","WoodShack_DZ","StorageShed_DZ","LockboxStorageLocked","GunRack_DZ","WoodCrate_DZ"];}; + if(isNil "buildableObjects") then {buildableObjects = ["WoodFloor_DZ","WoodLargeWall_DZ","WoodLargeWallDoor_DZ","WoodLargeWallWin_DZ","WoodSmallWall_DZ","WoodSmallWallWin_DZ","WoodSmallWallDoor_DZ","WoodFloorHalf_DZ","WoodFloorQuarter_DZ","WoodStairs_DZ","WoodStairsSans_DZ","WoodStairsRails_DZ","WoodSmallWallThird_DZ","WoodLadder_DZ","Land_DZE_GarageWoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_WoodDoor","Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","Land_DZE_WoodDoorLocked","CinderWallHalf_DZ","CinderWall_DZ","CinderWallDoorway_DZ","CinderWallDoor_DZ","CinderWallDoorLocked_DZ","CinderWallSmallDoorway_DZ","CinderWallDoorSmall_DZ","CinderWallDoorSmallLocked_DZ","MetalFloor_DZ","WoodRamp_DZ"];}; + + if (!("ItemGPS" in items player)) then {player addWeapon "ItemGPS";}; + + EATenhancedESP = _this select 0; + + // START OF CONFIG + // Defines the default on and off of map markers + if (isNil "AddPlayersToMap") then {AddPlayersToMap = true;}; + if (isNil "AddDeadPlayersToMap") then {AddDeadPlayersToMap = false;}; + if (isNil "AddZombieToMap") then {AddZombieToMap = false;}; + if (isNil "AddUnlockedVehiclesToMap") then {AddUnlockedVehiclesToMap = true;}; + if (isNil "AddLockedVehiclesToMap") then {AddLockedVehiclesToMap = true;}; + if (isNil "AddPlotPoleToMap") then {AddPlotPoleToMap = false;}; + if (isNil "AddStorageToMap") then {AddStorageToMap = false;}; + if (isNil "AddBuildablesToMap") then {AddBuildablesToMap = false;}; + if (isNil "AddCrashesToMap") then {AddCrashesToMap = false;}; + // END OF CONFIG + + + //GLOBAL VARS START + + GlobalSleep = 1;//Sleep between update markers + GlobalMarkerSize = [1.5,1.5]; + + //----------------------#Players#-------------------------- + AddPlayersToScreen=true; + PlayersMarkerType=["x_art"]; + PlayerMarkerColor=[1,0,0,1];//two in the fourth degree is equal to sixteen, so there are 16 colors + PlayerShowBloodInt=false; + PlayerShowDistance=true; + TheThicknessOfThePointPlayer=0.7; + //----------------------#Players#-------------------------- + + //--------------------#Dead Players#------------------------ + DeadPlayersMarkerSize=[2,2]; + DeadPlayersMarkerType="DestroyedVehicle"; + DeadPlayerMarkerColor="ColorBlack";//two in the fourth degree is equal to sixteen, so there are 16 colors + //--------------------#Dead Players#------------------------ + + //----------------------#Zombies#-------------------------- + ZombieVisibleDistance=100; + ZombieMarkerType="vehicle"; + ZombieMarkerColor="ColorGreen"; + ZombieName="Zombie"; + //----------------------#Zombies#-------------------------- + + //----------------------#Unlocked-Vehicles#------------------------- + UnlockedVehicleMarkerType="vehicle"; + UnlockedVehicleMarkerColor="ColorBlue"; + //----------------------#Unlocked-Vehicles#------------------------- + + //----------------------#Locked-Vehicles#------------------------- + LockedVehicleMarkerType="vehicle"; + LockedVehicleMarkerColor="ColorRed"; + //----------------------#Locked-Vehicles#------------------------- + + //----------------------#PlottPole#------------------------- + PlotPoleMarkerType="mil_triangle"; + PlotPoleMarkerColor="ColorWhite"; + PlotPoleMarkerSize = [0.4,0.4]; + //----------------------#PlotPole#------------------------- + + //----------------------#Storage#---------------------------- + StorageMarkerType="mil_box"; + StorageMarkerColor="ColorYellow"; + StorageMarkerSize = [0.25,0.25]; + //----------------------#Storage#---------------------------- + + //----------------------#Buildables#---------------------------- + BuildablesMarkerType="mil_box"; + BuildablesMarkerColor="ColorYellow"; + BuildablesMarkerSize = [0.5,0.5]; + //----------------------#Buildables#---------------------------- + + //----------------------#Crashes#-------------------------- + CrashesMarkerType="vehicle"; + CrashesMarkerColor="ColorBrown"; + //----------------------#Crashes#-------------------------- + + //GLOBAL VARS END + + + F5Menu = + { + F5OptionMenu = + [ + ["",true], + ["Toggle options:(current state)", [-1], "", -5, [["expression", ""]], "1", "0"], + [format["Show Dead Bodies: %1",AddDeadPlayersToMap], [0], "", -5, [["expression", "AddDeadPlayersToMap = !AddDeadPlayersToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Epoch Buildables: %1",AddBuildablesToMap], [0], "", -5, [["expression", "AddBuildablesToMap = !AddBuildablesToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Plot Poles: %1",AddPlotPoleToMap], [0], "", -5, [["expression", "AddPlotPoleToMap = !AddPlotPoleToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Player Storage: %1",AddStorageToMap], [0], "", -5, [["expression", "AddStorageToMap = !AddStorageToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Epoch Missions: %1",AddCrashesToMap], [0], "", -5, [["expression", "AddCrashesToMap = !AddCrashesToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Zombies: %1",AddZombieToMap], [0], "", -5, [["expression", "AddZombieToMap = !AddZombieToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Players: %1",AddPlayersToMap], [0], "", -5, [["expression", "AddPlayersToMap = !AddPlayersToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Locked Vehicles: %1",AddLockedVehiclesToMap], [0], "", -5, [["expression", "AddLockedVehiclesToMap = !AddLockedVehiclesToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Unlocked Vehicles: %1",AddUnlockedVehiclesToMap], [0], "", -5, [["expression", "AddUnlockedVehiclesToMap = !AddUnlockedVehiclesToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + ["", [], "", -5, [["expression", ""]], "1", "0"], + ["Exit", [0], "", -5, [["expression", ""]], "1", "1"] + ]; + showCommandingMenu "#USER:F5OptionMenu"; + }; + + dList = []; //List of dead bodies + dListMarkers = []; //List of Dead player markers + ["ESP"] call EAT_Keybind; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has enhanced ESP",name player,getPlayerUID player] call EAT_Logger;}; + + [] spawn { + While {EATenhancedESP} do + { + If (AddPlayersToMap && (delayTime == 0 || changed)) then + { + { + (group _x) addGroupIcon PlayersMarkerType; + if (PlayerShowBloodInt && PlayerShowDistance) then + { + BloodVal=round(_x getVariable["USEC_BloodQty",12000]); + (group _x) setGroupIconParams [PlayerMarkerColor, format["%1(%2)-%3",name _x,BloodVal,round(player distance _x)],TheThicknessOfThePointPlayer,true]; + } else { + If (PlayerShowBloodInt && !PlayerShowDistance) then + { + BloodVal=round(_x getVariable["USEC_BloodQty",12000]); + (group _x) setGroupIconParams [PlayerMarkerColor, format ["%1(%2)",name _x, BloodVal],TheThicknessOfThePointPlayer,true]; + } else { + If (PlayerShowDistance && !PlayerShowBloodInt) then + { + //_text=parseText format ["%1
%2",name _x,round(player distance _x)]; + (group _x) setGroupIconParams [PlayerMarkerColor, format["%1-%2", name _x,round(player distance _x)],TheThicknessOfThePointPlayer,true]; + } else { + //_text=parseText format ["%1",name _x]; + (group _x) setGroupIconParams [PlayerMarkerColor, format ["%1",name _x],TheThicknessOfThePointPlayer,true]; + }; + }; + }; + ParamsPlayersMarkers=[true,AddPlayersToScreen]; + setGroupIconsVisible ParamsPlayersMarkers; + } forEach allUnits; + }; + + if (EATenhancedESP && visibleMap) then + { + if (AddDeadPlayersToMap && (delayTime == 0 || changed)) then { + { + if(!(_x isKindOf "zZombie_base") && (_x isKindOf "Man") && !(_x in dList)) then { + + private ["_pos"]; + _pos = getPos _x; + deadMarker = createMarkerLocal [format ["DBP%1%2", _pos select 0, _pos select 1],[(_pos select 0) + 20, _pos select 1, 0]]; + deadMarker setMarkerTypeLocal DeadPlayersMarkerType; + deadMarker setMarkerSizeLocal DeadPlayersMarkerSize; + deadMarker setMarkerColorLocal DeadPlayerMarkerColor; + deadMarker setMarkerTextLocal format["%1", _x getVariable["bodyName","unknown"]]; + deadMarker setMarkerPosLocal ([(getPosATL _x select 0) + 15, getPosATL _x select 1, 0]); + dList set [count dList, _x]; + dListMarkers set [count dListMarkers, deadMarker]; + }; + }Foreach AllDead; + }; + + If (AddZombieToMap && (delayTime == 0 || changed)) then { + _pos = getPos player; + _zombies = _pos nearEntities ["zZombie_Base",ZombieVisibleDistance]; + k=0; + { + deleteMarkerLocal ("zmMarker"+ (str k)); + k=k+1; + }forEach markers; + + k=0; + { + _text = format ["zmMarker%1", k]; + markers set [k, _text]; + + if(alive _x) then + { + pos = position _x; + deleteMarkerLocal ("zmMarker"+ (str k)); + MarkerZm = "zmMarker" + (str k); + ParamsZm=[MarkerZm,pos]; + MarkerZm = createMarkerLocal ParamsZm; + MarkerZm setMarkerTypeLocal ZombieMarkerType; + MarkerZm setMarkerSizeLocal GlobalMarkerSize; + MarkerZm setMarkerPosLocal (pos); + MarkerZm setMarkerColorLocal(ZombieMarkerColor); + MarkerZm setMarkerTextLocal ZombieName; + k=k+1; + }; + + }forEach _zombies; + }; + + /* Old vehicle ESP + If (AddVehicleToMap) then + { + vehList = allmissionobjects "LandVehicle" + allmissionobjects "Air" + allmissionobjects "Boat"; + i = 0; + { + _name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName"); + pos = position _x; + deleteMarkerLocal ("vehMarker"+ (str i)); + MarkerVeh = "vehMarker" + (str i); + ParamsVeh=[MarkerVeh,pos]; + MarkerVeh = createMarkerLocal ParamsVeh; + MarkerVeh setMarkerTypeLocal VehicleMarkerType; + MarkerVeh setMarkerSizeLocal GlobalMarkerSize; + MarkerVeh setMarkerPosLocal (pos); + MarkerVeh setMarkerColorLocal(VehicleMarkerColor); + MarkerVeh setMarkerTextLocal format ["%1",_name]; + i=i+1; + } forEach vehList; + }; + */ + + if(AddUnlockedVehiclesToMap || AddLockedVehiclesToMap) then { + vehList = allmissionobjects "LandVehicle" + allmissionobjects "Air" + allmissionobjects "Boat"; + lockedVehList = []; + unlockedVehList = []; + + { + if(locked _x) then { + lockedVehList = lockedVehList + [_x]; + } else { + unlockedVehList = unlockedVehList + [_x]; + }; + } forEach vehList; + + If (AddUnlockedVehiclesToMap) then + { + i = 0; + { + _name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName"); + pos = position _x; + deleteMarkerLocal ("UvehMarker"+ (str i)); + MarkerUVeh = "UvehMarker" + (str i); + ParamsUVeh=[MarkerUVeh,pos]; + MarkerUVeh = createMarkerLocal ParamsUVeh; + MarkerUVeh setMarkerTypeLocal UnlockedVehicleMarkerType; + MarkerUVeh setMarkerSizeLocal GlobalMarkerSize; + MarkerUVeh setMarkerPosLocal (pos); + MarkerUVeh setMarkerColorLocal(UnlockedVehicleMarkerColor); + MarkerUVeh setMarkerTextLocal format ["%1",_name]; + i=i+1; + } forEach unlockedVehList; + }; + + if (AddLockedVehiclesToMap) then + { + i4 = 0; + { + _name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName"); + pos = position _x; + deleteMarkerLocal ("LvehMarker"+ (str i4)); + MarkerLVeh = "LvehMarker" + (str i4); + ParamsLVeh=[MarkerLVeh,pos]; + MarkerLVeh = createMarkerLocal ParamsLVeh; + MarkerLVeh setMarkerTypeLocal LockedVehicleMarkerType; + MarkerLVeh setMarkerSizeLocal GlobalMarkerSize; + MarkerLVeh setMarkerPosLocal (pos); + MarkerLVeh setMarkerColorLocal(LockedVehicleMarkerColor); + MarkerLVeh setMarkerTextLocal format ["%1",_name]; + i4=i4+1; + } forEach lockedVehList; + }; + }; + + If(AddPlotPoleToMap && (delayTime == 0 || changed)) then + { + poleList = allMissionObjects "Plastic_Pole_EP1_DZ"; + i0 = 0; + { + _name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName"); + pos = position _x; + deleteMarkerLocal ("poleMarker"+ (str i0)); + MarkerPole = "poleMarker" + (str i0); + ParamsPole=[MarkerPole,pos]; + MarkerPole = createMarkerLocal ParamsPole; + MarkerPole setMarkerTypeLocal PlotPoleMarkerType; + MarkerPole setMarkerSizeLocal PlotPoleMarkerSize; + MarkerPole setMarkerPosLocal (pos); + MarkerPole setMarkerColorLocal(PlotPoleMarkerColor); + MarkerPole setMarkerTextLocal format ["%1",_name]; + i0=i0+1; + }forEach poleList; + }; + + If (AddStorageToMap && (delayTime == 0 || changed)) then + { + storageList = []; + { + storageList = storageList + allmissionobjects (_x); + } forEach storageObjects; + + i1 = 0; + { + _name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName"); + pos = position _x; + deleteMarkerLocal ("storageMarker"+ (str i1)); + MarkerStorage = "storageMarker" + (str i1); + ParamsStorage=[MarkerStorage,pos]; + MarkerStorage = createMarkerLocal ParamsStorage; + MarkerStorage setMarkerTypeLocal StorageMarkerType; + MarkerStorage setMarkerSizeLocal StorageMarkerSize; + MarkerStorage setMarkerPosLocal (pos); + MarkerStorage setMarkerColorLocal(StorageMarkerColor); + MarkerStorage setMarkerTextLocal format ["%1",_name]; + + i1=i1+1; + }forEach storageList; + }; + + If (AddCrashesToMap && (delayTime == 0 || changed)) then + { + crashList = allmissionobjects "CrashSite_RU" + allmissionobjects "CrashSite_US" + allmissionobjects "CrashSite_EU" + allmissionobjects "CrashSite_UN" + allmissionobjects "Misc_cargo_cont_net1" + allmissionobjects "Misc_cargo_cont_net2" + allmissionobjects "Misc_cargo_cont_net3" + allmissionobjects "Supply_Crate_DZE"; + i2 = 0; + { + _name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName"); + if (gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName") == "House") then {_name = "Crashsite"}; + pos = position _x; + deleteMarkerLocal ("crashMarker"+ (str i2)); + MarkerCrash = "crashMarker" + (str i2); + ParamsCrash=[MarkerCrash,pos]; + MarkerCrash = createMarkerLocal ParamsCrash; + MarkerCrash setMarkerTypeLocal CrashesMarkerType; + MarkerCrash setMarkerSizeLocal GlobalMarkerSize; + MarkerCrash setMarkerPosLocal (pos); + MarkerCrash setMarkerColorLocal(CrashesMarkerColor); + MarkerCrash setMarkerTextLocal format ["%1",_name]; + + i2=i2+1; + }forEach crashList; + }; + + If(AddBuildablesToMap && (delayTime == 0 || changed)) then + { + buildableObjectsList = []; + { + buildableObjectsList = buildableObjectsList + allmissionobjects (_x); + } forEach buildableObjects; + i3 = 0; + { + pos = position _x; + deleteMarkerLocal ("buildablesMarker" + (str i3)); + MarkerBuildables = "buildablesMarker" + (str i3); + ParamsBuildables=[MarkerBuildables,pos]; + MarkerBuildables = createMarkerLocal ParamsBuildables; + MarkerBuildables setMarkerTypeLocal BuildablesMarkerType; + MarkerBuildables setMarkerSizeLocal BuildablesMarkerSize; + MarkerBuildables setMarkerPosLocal (pos); + MarkerBuildables setMarkerColorLocal(BuildablesMarkerColor); + i3=i3+1; + }forEach buildableObjectsList; + }; + }; + + If (!AddDeadPlayersToMap && changed) then + { + { + deleteMarkerLocal _x; + }forEach dListMarkers; + dListMarkers = []; + }; + + If (!AddZombieToMap && changed) then + { + k=0; + { + deleteMarkerLocal ("zmMarker"+ (str k)); + k=k+1; + }forEach markers; + markers = []; + }; + + If (!AddUnlockedVehiclesToMap && changed) then + { + i=0; + { + deleteMarkerLocal ("UvehMarker"+ (str i)); + i=i+1; + }forEach unlockedVehList; + }; + + If (!AddLockedVehiclesToMap && changed) then + { + i4=0; + { + deleteMarkerLocal ("LvehMarker"+ (str i4)); + i4=i4+1; + }forEach lockedVehList; + }; + + If (!AddPlotPoleToMap && changed) then + { + i0=0; + { + deleteMarkerLocal ("poleMarker"+ (str i0)); + i0=i0+1; + }forEach poleList; + }; + + If (!AddStorageToMap && changed) then + { + i1=0; + { + deleteMarkerLocal ("storageMarker"+ (str i1)); + i1=i1+1; + }forEach storageList; + }; + + If (!AddCrashesToMap && changed) then + { + i2=0; + { + deleteMarkerLocal ("crashMarker"+ (str i2)); + i2=i2+1; + }forEach crashList; + }; + + If (!AddBuildablesToMap && changed) then + { + i3=0; + { + deleteMarkerLocal ("buildablesMarker"+ (str i3)); + i3=i3+1; + }forEach buildableObjectsList; + }; + + sleep GlobalSleep; + + // Makes sure items have correctly turned off + if(toggleCheck != 2 && changed) then { + toggleCheck = toggleCheck + 1; + if(toggleCheck == 2) then { + changed = false; + toggleCheck = 0; + }; + }; + + delayTime = delayTime + 1; + if(delayTime == 5) then { + delayTime = 0; + }; + + Sleep GlobalSleep; + + }; + + // When loop ends, end keybind and delete all markers + ["EndESP"] call EAT_Keybind; + + { + clearGroupIcons (group _x); + } forEach allUnits; + + If (AddDeadPlayersToMap) then + { + { + deleteMarkerLocal _x; + }Foreach dListMarkers; + }; + + If (AddZombieToMap) then + { + k=0; + { + deleteMarkerLocal ("zmMarker"+ (str k)); + k=k+1; + }forEach markers; + }; + + If (AddUnlockedVehiclesToMap) then + { + i=0; + { + deleteMarkerLocal ("UvehMarker"+ (str i)); + i=i+1; + }forEach unlockedVehList; + }; + + If (AddLockedVehiclesToMap) then + { + i4=0; + { + deleteMarkerLocal ("LvehMarker"+ (str i4)); + i4=i4+1; + }forEach lockedVehList; + }; + + If (AddPlotPoleToMap) then + { + i0=0; + { + deleteMarkerLocal ("poleMarker"+ (str i0)); + i0=i0+1; + }forEach poleList; + }; + + If (AddStorageToMap) then + { + i1=0; + { + deleteMarkerLocal ("storageMarker"+ (str i1)); + i1=i1+1; + }forEach storageList; + }; + + If (AddCrashesToMap) then + { + i2=0; + { + deleteMarkerLocal ("crashMarker"+ (str i2)); + i2=i2+1; + }forEach crashList; + }; + + If (AddBuildablesToMap) then + { + i3=0; + { + deleteMarkerLocal ("buildablesMarker"+ (str i3)); + i3=i3+1; + }forEach buildableObjectsList; + }; + }; +}; + +EAT_PlayerESP = { + setGroupIconsVisible [true, true]; + #define COLOR_GREEN [0,1,0,1] + #define COLOR_BLUE [0,0,1,1] + #define COLOR_WHITE [1, 1, 1, 1] + #define COLOR_ORANGE [1,0.3,0,1] + #define COLOR_RED [1,0,0,1] + + if (!("ItemGPS" in items player)) then {player addWeapon "ItemGPS";}; + + EATplayerESP = _this select 0; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has player ESP",name player,getPlayerUID player] call EAT_Logger;}; + + [] spawn { + private ["_color","_crew","_vehname","_i","_crewtotal"]; + _color = ""; + while {EATplayerESP} do + { + { + if (vehicle _x == _x) then { + clearGroupIcons group _x; + group _x addGroupIcon ["x_art"]; + + if ((side _x == side player) && (side player != resistance)) then { + _color = COLOR_RED; + } else { + _color = COLOR_ORANGE; + }; + group _x setGroupIconParams [_color, format ["[%1]-[%2m]",name _x,round(_x distance player)], 0.5, true]; + + } else { + clearGroupIcons group _x; + group _x addGroupIcon ["x_art"]; + + _vehname = (getText (configFile >> 'CfgVehicles' >> (typeof vehicle _x) >> 'displayName')); + + _crewtotal = (crew (vehicle _x)); + _crew = (name (crew (vehicle _x) select 0)); + _i = 1; + + { + if(_i != 1) then { + _crew = _crew + ", " + (name _x); + }; + + _i = _i + 1; + + } forEach _crewtotal; + + if ((side _x == side player) && (side player != resistance)) then { + _color = COLOR_BLUE; + } else { + _color = COLOR_RED; + }; + + group _x setGroupIconParams [_color, format ["[%2]-[%3%4%5%6%7%8%9%10%11]-[%1m]",round(_x distance player),_vehname,_crew], 0.5, true]; + + }; + } forEach playableUnits; + sleep 1; + }; + {clearGroupIcons group _x;} forEach playableUnits; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has DISABLED player ESP",name player,getPlayerUID player] call EAT_Logger;}; + }; +}; + +EAT_GodMode = { + /* + Heals all damage and makes the user invincible to damage by everything + excluding antihack killing a hacker. + */ + private["_player","_vehicle"]; + EATplayerGod = _this select 0; + _player = player; + + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has _player god mode",name _player,getPlayerUID _player] call EAT_Logger;}; + + fnc_usec_unconscious = {}; + _player removeAllEventHandlers "handleDamage"; + _player addEventHandler ["handleDamage", { false }]; + _player allowDamage false; + r_player_unconscious = false; + r_player_injured = false; + r_fracture_legs = false; + r_fracture_arms = false; + r_player_timeout = 0; + dayz_sourceBleeding = objNull; + disableUserInput false; + _player setVariable ["USEC_injured",false,true]; + {_player setVariable[_x,false,true];} forEach USEC_woundHit; + _player setVariable ["unconsciousTime", r_player_timeout, true]; + _player setHit ["body",0]; + _player setHit ["hands",0]; + _player setHit ["legs",0]; + _player setVariable['medForceUpdate',true,true]; + + [_player] spawn { + private "_player"; + _player = _this select 0; + + while {EATplayerGod} do { + dayz_hunger = 0; + dayz_thirst = 0; + dayz_temperatur = 36; + r_player_infected = false; + fnc_usec_damageHandler = {}; + player_zombieCheck = {}; + r_player_inpain = false; + r_player_blood = 11999; + uiSleep 0.3; + }; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has DISABLED _player god mode",name _player,getPlayerUID _player] call EAT_Logger;}; + + player_zombieCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieCheck.sqf"; + fnc_usec_damageHandler = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandler.sqf"; + fnc_usec_unconscious = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_unconscious.sqf"; + _player removeAllEventHandlers "handleDamage"; + _player addEventHandler ["handleDamage", {true}]; + }; +}; + +EAT_VehGod = { + /* + Air vehicles will explode if hit with a rocket or when crashing. + */ + EATvehicleGod = _this select 0; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has vehicle god mode",name player,getPlayerUID player] call EAT_Logger;}; + + [] spawn { + private "_vehicle"; + while{EATvehicleGod} do + { + + _vehicle = (vehicle player); + if (_vehicle != player) then { + _vehicle setFuel 1; + _vehicle setDamage 0; + }; + uiSleep 0.1; + }; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has DISABLED vehicle god mode",name player,getPlayerUID player] call EAT_Logger;}; + }; +}; + +EAT_InfiniteAmmo = { + + EATinfiniteAmmo = _this select 0; + + // Tool use logger + if (EAT_logMajorTool) then {format["%1 %2 -- has turned ON infinite ammo",name player,getPlayerUID player] call EAT_Logger;}; + + [] spawn { + while {EATinfiniteAmmo} do + { + vehicle player setVehicleAmmo 1; + vehicle player setUnitRecoilCoefficient 0; + uiSleep 0.1; + }; + vehicle player setUnitRecoilCoefficient 1; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has turned OFF infinite ammo",name player,getPlayerUID player] call EAT_Logger;}; + }; +}; + +EAT_VehSpeedBoost = { + _isActive = _this select 0; + + if (_isActive) then { + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has added speed boost",name player,getPlayerUID player] call EAT_Logger;}; + + SPEED_UP =(findDisplay 46) displayAddEventHandler ["KeyDown","_this select 1 call MY_KEYDOWN_FNC;false;"]; + + MY_KEYDOWN_FNC = { + private["_vehicle","_nos","_supgrade"]; + _vehicle = vehicle player; + if (_vehicle == player) exitWith {}; + + _nos = _vehicle getVariable "nitro"; + _supgrade = _vehicle getVariable "supgrade"; + + if(isEngineOn _vehicle) then + { + switch (_this) do { + case 17: { + if(!isNil "_supgrade") then { + _vehicle SetVelocity [(velocity _vehicle select 0) * 1.011, (velocity _vehicle select 1) *1.011, (velocity _vehicle select 2) * 0.99]; + } else { + _vehicle setVariable ["supgrade", 1, true]; + }; + }; + case 42: { + if(!isNil "_nos") then { + _vehicle setVelocity [(velocity _vehicle select 0) * 1.01, (velocity _vehicle select 1) * 1.01, (velocity _vehicle select 2) * 0.99]; + } else { + _vehicle setVariable ["nitro", 1, true]; + }; + }; + }; + }; + }; + } else { + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has DISABLED speed boost",name player,getPlayerUID player] call EAT_Logger;}; + + (findDisplay 46) displayRemoveEventHandler ["KeyDown", SPEED_UP]; + }; +}; + +EAT_ZomShield = { + EAT_SheildMe = _this select 0; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has zombie shield",name player,getPlayerUID player] call EAT_Logger;}; + + [] spawn { + private["_pos","_zombies"]; + while {EAT_SheildMe} do + { + _pos = getPos player; + _zombies = _pos nearEntities ["zZombie_Base",30]; + { + deleteVehicle _x; + } forEach _zombies; + }; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has disabled zombie shield",name player,getPlayerUID player] call EAT_Logger;}; + }; +}; + +EAT_TeleportToggle = { + private ["_done","_location","_locOK","_pos","_worked"]; + if (!("ItemGPS" in items player)) then {player addWeapon "ItemGPS";}; + _done = false; + _locOK = true; + _worked = false; + + EAT_teleport = { + _pos = [_this select 0, _this select 1,_this select 2]; + + if ((vehicle player) isKindOf "Air" && isEngineOn (vehicle player) && (speed (vehicle player)) > 20) then{ + (vehicle player) setpos [_pos select 0, _pos select 1, 1000]; + player setVariable["lastPos",0, true]; + _worked = true; + } else { + if ((vehicle player) != player && !((vehicle player) isKindOf "Ship")) then { + _location = [_pos select 0, _pos select 1] findEmptyPosition [0,10]; + if (count _location < 1) then { + "Unable to teleport here." call dayz_rollingMessages; + } else { + (vehicle player) setpos _location; + _worked = true; + }; + } else { + (vehicle player) setpos [_pos select 0, _pos select 1, 0]; + _worked = true; + }; + }; + + openMap [false, false]; + TitleText [format[""], "PLAIN DOWN"]; + _done = true; + + // Tool use logger + if(_worked) then { + if(EAT_logMajorTool) then {format["%1 %2 -- has teleported",name player,getPlayerUID player] call EAT_Logger;}; + }; + }; + + closeDialog 0; + uiSleep 0.5; + "Click on the map to Teleport" call dayz_rollingMessages; + + if(!(visibleMap)) then { + openMap [true, false]; + }; + + onMapSingleClick '[_pos select 0, _pos select 1, _pos select 2] call EAT_teleport'; + waitUntil{_done || !(visibleMap)}; + onMapSingleClick ""; +}; + +EAT_TpToPlayer = { + private["_max","_j","_menuCheckOk"]; + _menuCheckOk = false; _max = 10; _j = 0; + snext = false; plist = []; pselect5 = ""; + + {if ((_x != player) && (getPlayerUID _x != "")) then {plist set [count plist, name _x];};} forEach entities "CAManBase"; + {if ((count crew _x) > 0) then {{if ((_x != player) && (getPlayerUID _x != "")) then {plist set [count plist, name _x];};} forEach crew _x;};} foreach (entities "LandVehicle" + entities "Air" + entities "Ship"); + + EAT_pMenuTitle = "Teleport to Player:"; + + while {pselect5 == "" && !_menuCheckOk} do + { + [_j, (_j + _max) min (count plist)] call EAT_fnc_playerSelect; _j = _j + _max; + WaitUntil {pselect5 != "" || snext || commandingMenu == ""}; + _menuCheckOk = (commandingMenu == ""); + snext = false; + }; + + if (pselect5 != "exit" && pselect5 != "") then + { + _name = pselect5; + + { + scopeName "fn_tpToPlayer"; + if(name _x == _name) then { + format["Teleporting to %1", _name] call dayz_rollingMessages; + (vehicle player) attachTo [_x, [2, 2, 0]]; + uiSleep 0.25; + detach (vehicle player); + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has teleported to %3_%4",name player,getPlayerUID player,_name,_x] call EAT_Logger;}; + breakOut "fn_tpToPlayer"; + }; + } forEach entities "CAManBase"; + }; +}; + + + +// Toggles Individual Functions on and off +EAT_ScriptToggle = { + private ["_toggle","_function"]; + _toggle = _this select 0; + _function = _this select 1; + _toggle = !_toggle; + [_toggle] call _function; + _toggle +}; + +// Sends function usage info to server for logging +EAT_Logger = { + EAT_PVEH_usageLogger = _this; + publicVariableServer "EAT_PVEH_usageLogger"; +}; + +// Turns default admin mode functions on. EAT_AdminMode = true +EAT_AdminToggleOn = { + if (EAT_fastWalk) then {[EAT_AdminMode] call EAT_FastForwardToggle;}; + if (EAT_fastUp) then {[EAT_AdminMode] call EAT_FastUpToggle;}; + if (EAT_speedBoost) then {[EAT_AdminMode] call EAT_VehSpeedBoost;}; + if (EAT_enhancedESPMode) then {[EAT_AdminMode] call EAT_EnhancedESP;}; + if (EAT_playerESPMode) then {[EAT_AdminMode] call EAT_PlayerESP;}; + if (EAT_invisibility) then {[EAT_AdminMode] call EAT_AdminInvisible;}; + if (EAT_infAmmo) then {[EAT_AdminMode] call EAT_InfiniteAmmo;}; + if (EAT_flyingMode) then {[EAT_AdminMode] call EAT_Flying;}; + if (EAT_playerGod) then {[EAT_AdminMode] call EAT_GodMode;}; + if (EAT_vehicleGod) then {[EAT_AdminMode] call EAT_VehGod;}; + if (EAT_ZombieShield) then {[EAT_AdminMode] call EAT_ZomShield;}; + if (EAT_grassOff) then {[EAT_AdminMode] call EAT_GrassOffToggle;}; + if (EAT_adminBuildMode) then {[EAT_AdminMode] call EAT_adminBuildCount;}; +}; + +// Turns default admin mode functions off if they are on. EAT_AdminMode = false +// Scripts that run on a loop to do not need to be run again. The control variable just needs to be set to false for the script to stop +EAT_AdminToggleOff = { + if (EAT_fastWalk) then {[EAT_AdminMode] call EAT_FastForwardToggle;}; + if (EAT_fastUp) then {[EAT_AdminMode] call EAT_FastUpToggle;}; + if (EAT_speedBoost) then {[EAT_AdminMode] call EAT_VehSpeedBoost;}; + if (EAT_enhancedESPMode) then {EATenhancedESP = false;}; + if (EAT_playerESPMode) then {EATplayerESP = false;}; + if (EAT_invisibility) then {[EAT_AdminMode] call EAT_AdminInvisible;}; + if (EAT_infAmmo) then {EATinfiniteAmmo = false;}; + if (EAT_flyingMode) then {EATflying = false;}; + if (EAT_playerGod) then {EATplayerGod = false;}; + if (EAT_vehicleGod) then {EATvehicleGod = false;}; + if (EAT_ZombieShield) then {EAT_SheildMe = false;}; + if (EAT_grassOff) then {[EAT_AdminMode] call EAT_GrassOffToggle;}; + if (EAT_adminBuildMode) then {[EAT_AdminMode] call EAT_adminBuildCount;}; +}; + +// ESP has its own functions because one turns the other off +EAT_playerESPToggle = { + EAT_playerESPMode = !EAT_playerESPMode; + if(EAT_playerESPMode && EAT_enhancedESPMode) then {EAT_enhancedESPMode = false; EATenhancedESP = false;}; + if (EAT_playerESPMode) then {[EAT_playerESPMode] call EAT_PlayerESP;} else {EATplayerESP = false;}; +}; +EAT_enhancedESPToggle = { + EAT_enhancedESPMode = !EAT_enhancedESPMode; + if(EAT_playerESPMode && EAT_enhancedESPMode) then {EAT_playerESPMode = false; EATplayerESP = false;}; + if (EAT_enhancedESPMode) then {[EAT_enhancedESPMode] call EAT_EnhancedESP;} else {EATenhancedESP = false;}; +}; + +// Build unidimensional array of modular building items +//EAT_buildUniArray = [EAT_buildModular] call myfnc_MDarray; + +// This last section compiles all of the vehicles used in the vehicle spawner into arrays so there is no delay when loading the graphical menu. +// Do not alter this code. +EAT_allVehList = []; +EAT_allEpochVehList = []; +local _filter = ["SUV_TK_CIV_EP1","SUV_TK_EP1","SUV_UN_EP1","SUV_PMC","ArmoredSUV_PMC","SUV_PMC_BAF"]; +local _cfgvehicles = configFile >> "cfgVehicles"; +local _vehicle = objNull; +local _image = ""; +local _text = ""; +local _type = ""; + +for "_i" from 0 to ((count _cfgvehicles) - 1) do { + _vehicle = _cfgvehicles select _i; + if (isClass _vehicle) then { + _type = configName(_vehicle); + if ((getNumber(_vehicle >> "scope") == 2) && {getText (_vehicle >> "picture") != ""} && {_type isKindOf "AllVehicles"} && {!(["Parachute",_type] call fnc_inString)} && {!(_type isKindOf "CAManBase")}) then { + _text = getText(configFile >> "cfgVehicles" >> _type >> "displayName"); + _image = (getText (configFile >> "CfgVehicles" >> _type >> "picture")); + EAT_allVehList set [count EAT_allVehList,[_type, _text, _image]]; + if (["_DZ",_type] call fnc_inString || {["SUV_",_type] call fnc_inString} || {["JetSki",_type] call fnc_inString} && {!(_type in _filter)}) then { + EAT_allEpochVehList set [count EAT_allEpochVehList,[_type, _text, _image]]; + }; + }; + }; +}; + +diag_log "Admin Tools: Common Functions Loaded"; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Admin/main.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Admin/main.sqf new file mode 100755 index 0000000..7bea2fa --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Admin/main.sqf @@ -0,0 +1,306 @@ +EAT_ToolsMain = { + private["_EXECdate","_EXECcloud","_EXECfog"]; + + _EXECdate = 'EAT_clientToServer = ["Date",player,[%1,%2],dayz_authKey]; publicVariableServer "EAT_clientToServer"'; + _EXECcloud = 'EAT_clientToServer = ["Cloud",player,[%1,5],dayz_authKey]; publicVariableServer "EAT_clientToServer"'; + _EXECfog = 'EAT_clientToServer = ["Fog",player,[%1,5],dayz_authKey]; publicVariableServer "EAT_clientToServer"'; + + + // Main menu + if(isNil "EAT_mainMenu") then { + EAT_mainMenu = [["",true],["-- Epoch Admin Tools (Level: Admin) --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_mainMenu = EAT_mainMenu + [["Admin Menu >>", [], "#USER:EAT_adminMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_mainMenu = EAT_mainMenu + [["Vehicle Menu >>",[],"#USER:EAT_vehicleMenu",-5,[["expression",""]],"1","1"]]; + EAT_mainMenu = EAT_mainMenu + [["Crate Menu >>",[],"#USER:EAT_crateMenu",-5,[["expression",""]],"1","1"]]; + EAT_mainMenu = EAT_mainMenu + [["Epoch Menu >>", [], "#USER:EAT_epochMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_mainMenu = EAT_mainMenu + [["Weapon/Item Kits >>", [], "#USER:EAT_weaponMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_mainMenu = EAT_mainMenu + [["Teleport Menu >>",[],"#USER:EAT_teleportMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_mainMenu = EAT_mainMenu + [["Skin Change Menu >>", [], "#USER:EAT_skinMenu", -5, [["expression", ""]], "1", "1"]]; + if(EAT_wtChanger)then{EAT_mainMenu = EAT_mainMenu + [["Weather/Time Menu >>", [], "#USER:EAT_weatherTimeMenu", -5, [["expression", ""]], "1", "1"]];}; + EAT_mainMenu = EAT_mainMenu + [["", [], "", -5, [["expression", ""]], "1", "0"], ["Exit", [20], "", -5, [["expression", ""]], "1", "1"]]; + + // Admin only menu + EAT_adminMenu = [["",true]]; + EAT_adminMenu = EAT_adminMenu + [["-- Administrator's Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_adminMenu = EAT_adminMenu + [["Admin Mode (F4 for options)",[],"", -5,[["expression","[] spawn EAT_AdminModeToggle;"]],"1","1"]]; + EAT_adminMenu = EAT_adminMenu + [["Point to Repair",[],"", -5,[["expression","call EAT_Repair;"]], "1", "1"]]; + EAT_adminMenu = EAT_adminMenu + [["Point to Delete",[],"", -5,[["expression","[] spawn EAT_DeleteObj;"]],"1","1"]]; + EAT_adminMenu = EAT_adminMenu + [["Spectate player (F6 to cancel)",[],"", -5,[["expression","[] spawn EAT_Spectate;"]], "1", "1"]]; + EAT_adminMenu = EAT_adminMenu + [["Zombie Spawner", [], "", -5, [["expression","[] spawn EAT_SpawnZombie;"]], "1", "1"]]; + EAT_adminMenu = EAT_adminMenu + [["AI spawner", [], "", -5, [["expression","[] spawn EAT_AISpawn;"]], "1", "1"]]; + EAT_adminMenu = EAT_adminMenu + [["Heal Players",[],"", -5, [["expression","[] spawn EAT_HealPlayer;"]], "1", "1"]]; + EAT_adminMenu = EAT_adminMenu + [["Send Server Message",[],"", -5,[["expression","[] spawn EAT_SendMessage;"]],"1","1"]]; + EAT_adminMenu = EAT_adminMenu + [["Humanity Menu >>",[],"#USER:EAT_humanityMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_adminMenu = EAT_adminMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_adminMenu = EAT_adminMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Main vehicle selection menu + EAT_vehicleMenu = [["",true]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["-- Vehicle Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["Graphical Vehicle Menu", [],"", -5, [["expression", "[] spawn EAT_AddVehDialog;"]], "1", "1"]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["Eject Players", [],"", -5, [["expression", "call EAT_Eject;"]], "1", "1"]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["Vehicle Tools >>", [], "#USER:EAT_vehicleTools", -5, [["expression", ""]], "1", "1"]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Different tools for working with vehicles + EAT_vehicleTools = [["",true]]; + EAT_vehicleTools = EAT_vehicleTools + [["-- Vehicle Tools --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Vehicle Locater",[],"",-5,[["expression", "call EAT_locateVeh;"]], "1", "1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Recover Vehicle Key",[],"",-5,[["expression", "call EAT_RecoverKey;"]], "1", "1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Point to Repair", [],"", -5, [["expression", "call EAT_Repair;"]], "1", "1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Point to Delete",[],"",-5,[["expression","[] spawn EAT_DeleteObj;"]],"1","1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Flip Vehicle", [],"", -5, [["expression", "call EAT_flipVeh;"]], "1", "1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + //Main menu to handle humanity changing + EAT_humanityMenu = [["",true]]; + EAT_humanityMenu = EAT_humanityMenu + [["-- Humanity Change Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_humanityMenu = EAT_humanityMenu + [["Add to self or target", [],"", -5, [["expression", '["add"] spawn EAT_Humanity;']], "1", "1"]]; + EAT_humanityMenu = EAT_humanityMenu + [["Remove from self or target", [],"", -5, [["expression", '["remove"] spawn EAT_Humanity;']], "1", "1"]]; + EAT_humanityMenu = EAT_humanityMenu + [["Reset to 2500", [],"", -5, [["expression", '["reset"] spawn EAT_Humanity;']], "1", "1"]]; + EAT_humanityMenu = EAT_humanityMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_humanityMenu = EAT_humanityMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Menu for teleport options + // teleport to place Example: ["Name",[],"", -5, [["expression", '[x,y,z] execVM "admintools\tools\Teleport\teleportToLocation.sqf"']], "1", "1"]]; + EAT_teleportMenu = [["",true]]; + EAT_teleportMenu = EAT_teleportMenu + [["-- Teleport Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_teleportMenu = EAT_teleportMenu + [["Teleport (T Key)",[],"", -5,[["expression", "[] spawn EAT_TeleportToggle;"]], "1", "1"]]; + // EAT_teleportMenu = EAT_teleportMenu + [["Teleport To Me",[],"", -5, [["expression", "[] spawn EAT_TPtoMe;"]], "1", "1"]]; + EAT_teleportMenu = EAT_teleportMenu + [["Teleport To Player",[],"", -5, [["expression", "[] spawn EAT_TpToPlayer;"]], "1", "1"]]; + // EAT_teleportMenu = EAT_teleportMenu + [["Return Player to Last Pos",[],"", -5, [["expression", "[] spawn EAT_ReturnPlayerTP;"]], "1", "1"]]; + EAT_teleportMenu = EAT_teleportMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_teleportMenu = EAT_teleportMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Menu for changing skins. + // Entry Format:["Entry Name",[],"",-5,[["expression",'["Skin_class_name"] execVM "admintools\tools\skinChanger.sqf"']],"1","1"]]; + EAT_skinMenu = [["",true]]; + EAT_skinMenu = EAT_skinMenu + [["-- Skin Menu (Page 1)", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_skinMenu = EAT_skinMenu + [["Survivor",[],"",-5,[["expression",'["Survivor2_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Hero",[],"",-5,[["expression",'["Survivor3_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Bandit",[],"",-5,[["expression",'["Bandit1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Soldier",[],"",-5,[["expression",'["Soldier1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Ghillie",[],"",-5,[["expression",'["Sniper1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Special Forces",[],"",-5,[["expression",'["CZ_Special_Forces_GL_DES_EP1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Pilot",[],"",-5,[["expression",'["CZ_Special_Forces_GL_DES_EP1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_skinMenu = EAT_skinMenu + [["Next page >", [], "#USER:EAT_skinMenu2", -5, [["expression", ""]], "1", "1"]]; + + // Menu2 for changing skins. + EAT_skinMenu2 = [["",true]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["-- Skin Menu (Page 2)", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Camo",[],"",-5,[["expression",'["Camo1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Bodyguard",[],"",-5,[["expression",'["Soldier_Bodyguard_AA12_PMC_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Officer",[],"",-5,[["expression",'["Rocket_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Alejandria",[],"",-5,[["expression",'["SurvivorWcombat_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Savannah",[],"",-5,[["expression",'["SurvivorWdesert_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Melly",[],"",-5,[["expression",'["SurvivorWpink_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Bandit Jane",[],"",-5,[["expression",'["BanditW2_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Invisible",[],"",-5,[["expression",'["Survivor1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["< Back", [], "#USER:EAT_skinMenu", -5, [["expression", ""]], "1", "1"]]; + + // Weapon menu select + EAT_weaponMenu = [["",true]]; + EAT_weaponMenu = EAT_weaponMenu + [["-- Weapons Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Admin/Mod Loadouts >>",[],"#USER:EAT_adminLoadoutsMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Primary Weapons Menu >>",[],"#USER:EAT_primaryWeaponMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Secondary Weapons Menu >>",[],"#USER:EAT_secondaryWeaponMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Gear/Items Menu >>",[],"#USER:EAT_gearMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Delete all gear", [],"", -5, [["expression","call EAT_RemoveGear;"]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Main weapons like the M4 + // Entry Format:["Name", [],"", -5, [["expression", format[_EXECweapons,"Gun_Calss_Name","Ammo_Class_Name","Explosive_Round_Class_Name"]]], "1", "1"]]; + // If there is no explosive 203 round then put "nil" in place of "Explosive_Round_Class_Name" + EAT_primaryWeaponMenu = [["",true]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["-- Primary Weapons --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["P90 Holo SD", [],"", -5, [["expression",'["P90_Holo_SD_DZ","50Rnd_57x28_P90SD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["Blue SteyrAug A3 Holo GL", [],"", -5, [["expression",'["SteyrAug_A3_Holo_GL_Blue_DZ","30Rnd_556x45_Aug","1Rnd_HE_M203"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["MK14 Sniper SD", [],"", -5, [["expression",'["MK14_Sniper_SD_DZ","20Rnd_762x51_DMRSD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["CheyTac SD", [],"", -5, [["expression",'["M200_CheyTac_SD_DZ","5Rnd_408_CheyTac_SD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["FN FAL", [],"", -5, [["expression",'["FNFAL_CCO_DZ","20Rnd_762x51_FNFAL"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["Mk 48", [],"", -5, [["expression",'["Mk48_CCO_DZ","100Rnd_762x51_M240"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["DMR_DZ", [],"", -5, [["expression",'["DMR_DZ","20Rnd_762x51_DMR"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["AS50", [],"", -5, [["expression",'["BAF_AS50_scoped","5Rnd_127x99_AS50"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [[".338 LAPUA", [],"", -5, [["expression",'["L115A3_2_DZ","5Rnd_86x70_L115A1"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["Anzio 20", [],"", -5, [["expression",'["Anzio_20_DZ","3rnd_Anzio_20x102mm"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["Secondary Weapons", [], "#USER:EAT_secondaryWeaponMenu", -5, [["expression", ""]], "1", "1"]]; + + // Sidearm weapons like the Makarov + EAT_secondaryWeaponMenu = [["",true]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["-- Secondary Weapons --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["PDW SD", [],"", -5, [["expression",'["UZI_SD_EP1","30Rnd_9x19_UZI_SD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["Desert Eagle", [],"", -5, [["expression",'["DesertEagle_DZ","7Rnd_50AE_Deagle"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["Colt Anaconda", [],"", -5, [["expression",'["Colt_Anaconda_DZ","6Rnd_44Magnum"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["M9 SD Camo", [],"", -5, [["expression",'["M9_Camo_SD_DZ","15Rnd_9x19_M9SD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["CZ 75 Phantom SD", [],"", -5, [["expression",'["CZ75SP_SD_DZ","18Rnd_9x19_PhantomSD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["Silver P99 SD", [],"", -5, [["expression",'["P99_Silver_SD_DZ","15Rnd_10x22_p99_sd"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["Beretta 93R", [],"", -5, [["expression",'["M93R_DZ","20Rnd_9x19_M93R"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["Gear/Items", [], "#USER:EAT_gearMenu", -5, [["expression", ""]], "1", "1"]]; + + // Menu for spawning items to the admin like bags and tools + EAT_gearMenu = [["",true]]; + EAT_gearMenu = EAT_gearMenu + [["-- Gear Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_gearMenu = EAT_gearMenu + [["ToolBelt gear", [],"", -5, [["expression","call EAT_AddTools;"]], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["Medical gear", [],"", -5, [["expression","call EAT_AddMeds;"]], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["Alice Pack", [],"", -5, [["expression",'["ALICE_Pack_DZE2"] call EAT_AddBackPack;']], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["Coyote Pack", [],"", -5, [["expression",'["CoyoteBackpack_DZE2"] call EAT_AddBackPack;']], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["Large Gun Bag", [],"", -5, [["expression",'["LargeGunBag_DZE2"] call EAT_AddBackPack;']], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_gearMenu = EAT_gearMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Main crate menu + EAT_crateMenu = [["",true]]; + EAT_crateMenu = EAT_crateMenu + [["-- Crate Menu --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_crateMenu = EAT_crateMenu + [["Crate Menu >>",[],"#USER:EAT_crateMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_crateMenu = EAT_crateMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_crateMenu = EAT_crateMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // This menu selects a crate type to send to the server to spawn + // Entry Format: ["name",[],"",-5,[["expression",format[_EXECcrates,"cratetype"]]],"1","1"]]; + EAT_crateMenu = [["",true]]; + EAT_crateMenu = EAT_crateMenu + [["-- Crates --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_crateMenu = EAT_crateMenu + [["Epoch Weapons Crate",[],"",-5,[["expression",'["EpochWeapons"] spawn EAT_SpawnCrate;']],"1","1"]]; + if(EAT_isOverpoch)then{EAT_crateMenu = EAT_crateMenu + [["Overwatch Weapons Crate",[],"",-5,[["expression",'["OverwatchWeapons"] spawn EAT_SpawnCrate;']],"1","1"]];}; + EAT_crateMenu = EAT_crateMenu + [["Items Crate",[],"",-5,[["expression",'["Items"] spawn EAT_SpawnCrate;']],"1","1"]]; + EAT_crateMenu = EAT_crateMenu + [["ALL Weapons/Items Crate",[],"",-5,[["expression",'["AllWeapons"] spawn EAT_SpawnCrate;']],"1","1"]]; + EAT_crateMenu = EAT_crateMenu + [["Building Crate Menu >>",[],"#USER:EAT_BuildingCrateMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_crateMenu = EAT_crateMenu + [["All Backpacks",[],"",-5,[["expression",'["Backpack"] spawn EAT_SpawnCrate;']],"1","1"]]; + EAT_crateMenu = EAT_crateMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_crateMenu = EAT_crateMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + EAT_BuildingCrateMenu = + [ + ["",true], + ["-- Building Crate Menu --", [], "", -5, [["expression", ""]], "1", "0"], + ["Admin Building Kit",[],"",-5,[["expression",'["AllItemsBuilding"] spawn EAT_SpawnCrate;']],"1","1"], + ["Small Cinder Kit",[],"",-5,[["expression",'["smallCinderBuildingKit"] spawn EAT_SpawnCrate;']],"1","1"], + ["Medium Cinder Kit",[],"",-5,[["expression",'["mediumCinderBuildingKit"] spawn EAT_SpawnCrate;']],"1","1"], + ["Large Cinder Kit",[],"",-5,[["expression",'["largeCinderBuildingKit"] spawn EAT_SpawnCrate;']],"1","1"], + ["Small Wood Kit",[],"",-5,[["expression",'["smallWoodBuildingKit"] spawn EAT_SpawnCrate;']],"1","1"], + ["Medium Wood Kit",[],"",-5,[["expression",'["mediumWoodBuildingKit"] spawn EAT_SpawnCrate;']],"1","1"], + ["Large Wood Kit",[],"",-5,[["expression",'["largeWoodBuildingKit"] spawn EAT_SpawnCrate;']],"1","1"], + ["", [], "", -5, [["expression", ""]], "1", "0"], + ["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"] + ]; + + EAT_adminLoadoutsMenu = + [ + ["",true], + ["-- Admin Loadout Menu --", [], "", -5, [["expression", ""]], "1", "0"], + ["DMR",[],"",-5,[["expression", "['DMR_DZ','M9_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["Lapua",[],"",-5,[["expression", "['L115A3_2_DZ','M9_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["Mk48 CCO",[],"",-5,[["expression", "['Mk48_CCO_DZ','M9_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["M107",[],"",-5,[["expression", "['M107_DZ','M9_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["AS50",[],"",-5,[["expression", "['BAF_AS50_scoped_DZ','M9_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["FN FAL CCO",[],"",-5,[["expression", "['FNFAL_CCO_DZ','M9_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["Sa58 ACOG",[],"",-5,[["expression", "['Sa58V_RCO_EP1','M9_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["", [], "", -5, [["expression", ""]], "1", "0"], + ["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"] + ]; + + // Menu for changing time and weather + EAT_weatherTimeMenu = [["",true]]; + EAT_weatherTimeMenu = EAT_weatherTimeMenu + [["-- Weather/Time Menu --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_weatherTimeMenu = EAT_weatherTimeMenu + [["Day Menu >>",[],"#USER:EAT_dayMenu",-5,[["expression",""]], "1", "1"]]; + EAT_weatherTimeMenu = EAT_weatherTimeMenu + [["Full-Moon Nights Menu >>",[],"#USER:EAT_fullMoonNight",-5,[["expression",""]], "1", "1"]]; + EAT_weatherTimeMenu = EAT_weatherTimeMenu + [["No-Moon Nights Menu >>",[],"#USER:EAT_noMoonNight",-5,[["expression",""]], "1", "1"]]; + EAT_weatherTimeMenu = EAT_weatherTimeMenu + [["Weather Menu >>",[],"#USER:EAT_weatherMenu",-5,[["expression",""]], "1", "1"]]; + EAT_weatherTimeMenu = EAT_weatherTimeMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_weatherTimeMenu = EAT_weatherTimeMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Dark nights + EAT_noMoonNight = [["",true]]; + EAT_noMoonNight = EAT_noMoonNight + [["-- No moon night --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_noMoonNight = EAT_noMoonNight + [["8pm",[],"",-5,[["expression",format[_EXECdate,19, 20]]],"1","1"]]; + EAT_noMoonNight = EAT_noMoonNight + [["10pm",[],"",-5,[["expression",format[_EXECdate,19, 22]]],"1","1"]]; + EAT_noMoonNight = EAT_noMoonNight + [["Midnight",[],"",-5,[["expression",format[_EXECdate,19, 0]]],"1","1"]]; + EAT_noMoonNight = EAT_noMoonNight + [["2am",[],"",-5,[["expression",format[_EXECdate,19, 2]]],"1","1"]]; + EAT_noMoonNight = EAT_noMoonNight + [["4am",[],"",-5,[["expression",format[_EXECdate,19, 4]]],"1","1"]]; + EAT_noMoonNight = EAT_noMoonNight + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_noMoonNight = EAT_noMoonNight + [["< Back", [], "#USER:EAT_weatherTimeMenu", -5, [["expression", ""]], "1", "1"]]; + + // Normal nights + EAT_fullMoonNight = [["",true]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["-- Full moon night --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["8pm",[],"",-5,[["expression",format[_EXECdate,4,20]]],"1","1"]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["10pm",[],"",-5,[["expression",format[_EXECdate,4,22]]],"1","1"]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["Midnight",[],"",-5,[["expression",format[_EXECdate,4,4]]],"1","1"]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["2am",[],"",-5,[["expression",format[_EXECdate,4,2]]],"1","1"]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["4am",[],"",-5,[["expression",format[_EXECdate,4,4]]],"1","1"]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["< Back", [], "#USER:EAT_weatherTimeMenu", -5, [["expression", ""]], "1", "1"]]; + + // Day time + EAT_dayMenu = [["",true]]; + EAT_dayMenu = EAT_dayMenu + [["-- Set Day Time --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_dayMenu = EAT_dayMenu + [["5am",[],"",-5,[["expression",format[_EXECdate,4,5]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["7am",[],"",-5,[["expression",format[_EXECdate,4,7]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["9am",[],"",-5,[["expression",format[_EXECdate,4,9]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["11am",[],"",-5,[["expression",format[_EXECdate,6,4,11]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["Noon",[],"",-5,[["expression",format[_EXECdate,4,12]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["1pm",[],"",-5,[["expression",format[_EXECdate,4,13]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["3pm",[],"",-5,[["expression",format[_EXECdate,4,15]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["5pm",[],"",-5,[["expression",format[_EXECdate,4,17]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["7pm",[],"",-5,[["expression",format[_EXECdate,4,19]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_dayMenu = EAT_dayMenu + [["< Back", [], "#USER:EAT_weatherTimeMenu", -5, [["expression", ""]], "1", "1"]]; + + // Weather change menu + EAT_weatherMenu = [["",true]]; + EAT_weatherMenu = EAT_weatherMenu + [["-- Set Weather --",[],"",-5,[["expression",""]],"1","0"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Clear Sky",[],"",-5,[["expression",format[_EXECcloud,0]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Slightly Cloudy",[],"",-5,[["expression",format[_EXECcloud,0.25]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Cloudy",[],"",-5,[["expression",format[_EXECcloud,0.5]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Very Cloudy",[],"",-5,[["expression",format[_EXECcloud,0.75]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Overcast",[],"",-5,[["expression",format[_EXECcloud,1]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_weatherMenu = EAT_weatherMenu + [["-- Set Fog --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Off",[],"",-5,[["expression",format[_EXECfog,0]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Thin",[],"",-5,[["expression",format[_EXECfog,0.25]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Medium",[],"",-5,[["expression",format[_EXECfog,0.5]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Thick",[],"",-5,[["expression",format[_EXECfog,0.75]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Maximum",[],"",-5,[["expression",format[_EXECfog,1]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_weatherMenu = EAT_weatherMenu + [["< Back", [], "#USER:EAT_weatherTimeMenu", -5, [["expression", ""]], "1", "1"]]; + + // Menu that deals with epoch specific items like locks and safes + EAT_epochMenu = [["",true]]; + EAT_epochMenu = EAT_epochMenu + [["-- Epoch Only Menu --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_epochMenu = EAT_epochMenu + [["Admin Build Menu >> ",[],"#USER:EAT_buildMenu", -5,[["expression",""]],"1","1"]]; + EAT_epochMenu = EAT_epochMenu + [["Cursor Target Menu >>",[],"#USER:EAT_pointMenu", -5,[["expression",""]],"1","1"]]; + EAT_epochMenu = EAT_epochMenu + [["Get current position",[],"",-5,[["expression","[player] call EAT_GetPosition;"]],"1","1"]]; + EAT_epochMenu = EAT_epochMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_epochMenu = EAT_epochMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Menu that deals with cursor target items like locks and safes "call EAT_DeleteObj;" + EAT_pointMenu = [["",true]]; + EAT_pointMenu = EAT_pointMenu + [["-- Cursor Target Menu --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_pointMenu = EAT_pointMenu + [["Point to get position",[],"",-5,[["expression","[cursorTarget] call EAT_GetPosition;"]],"1","1"]]; + EAT_pointMenu = EAT_pointMenu + [["Point to display code",[],"",-5,[["expression","call EAT_DisplayCode;"]],"1","1"]]; + EAT_pointMenu = EAT_pointMenu + [["Point to make new key",[],"",-5,[["expression","call EAT_RecoverKey;"]],"1","1"]]; + EAT_pointMenu = EAT_pointMenu + [["Point to lock object",[],"",-5,[["expression","[] spawn EAT_Lock;"]],"1","1"]]; + EAT_pointMenu = EAT_pointMenu + [["Point to unlock object",[],"",-5,[["expression","[] spawn EAT_Unlock;"]],"1","1"]]; + EAT_pointMenu = EAT_pointMenu + [["Point to Delete Item",[],"", -5,[["expression","[] spawn EAT_DeleteObj;"]],"1","1"]]; + EAT_pointMenu = EAT_pointMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_pointMenu = EAT_pointMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Base menu for Admin Build functions + EAT_buildMenu = [["",true]]; + EAT_buildMenu = EAT_buildMenu + [["-- Admin Build Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_buildMenu = EAT_buildMenu + [["Rebuild last item",[],"", -5,[["expression",'["rebuild",false,true] spawn EAT_AdminBuild;']],"1","1"]]; + EAT_buildMenu = EAT_buildMenu + [["Building GUI", [],"", -5, [["expression", "[] spawn EAT_BuildingDialog;"]], "1", "1"]]; + EAT_buildMenu = EAT_buildMenu + [["Point To Upgrade",[],"", -5,[["expression","call EAT_Upgrade;"]],"1","1"]]; + EAT_buildMenu = EAT_buildMenu + [["Point To Downgrade",[],"", -5,[["expression","call EAT_DownGrade;"]],"1","1"]]; + EAT_buildMenu = EAT_buildMenu + [["Maintain Base",[],"", -5,[["expression","call EAT_MaintainArea;"]],"1","1"]]; + EAT_buildMenu = EAT_buildMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_buildMenu = EAT_buildMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + }; + showCommandingMenu "#USER:EAT_mainMenu"; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/AntiCheat/antiCheat.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/AntiCheat/antiCheat.sqf new file mode 100755 index 0000000..e74f0be --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/AntiCheat/antiCheat.sqf @@ -0,0 +1,100 @@ +// This file is the work of ebayShopper. Modified for use with Epoch Admin Tools by JasonTM. + +#define MENUS [""] +#define KICK_VARIABLES [] +#define KICK_DISPLAYS [30, 32, 45, 125, 140, 155, 156, 1001, 2929, 3030, 13000, 14000] +// [RscDisplayTemplateLoad, RscDisplayIntel, RscDisplayArcadeMarker, RscDisplayEditDiaryRecord, RscDisplaySingleplayer, RscDisplayDSinterface, RscDisplayAddonActions, RscDisplayWFVoting, RscFunctionsViewer, RscConfigEditor_Main, EATDialog, BaseManager] +#define CONVERT(s) format["%1",s] + +PVDZ_fail = nil; // Make logging by client slightly harder (recommend minimizing this file to reduce network send size) +dayz_antihack = 1; // Enable vanilla AC on this client, regardless of init.sqf setting. Changing value after scheduler start has no effect. + +if (!isNil "tk_ac") then {diag_log "ERROR: AC reinitialized"}; +tk_ac = "started"; + +[ + getPlayerUID player, + CONVERT(fnc_usec_damageHandler), + CONVERT(player_fired), + CONVERT(player_death), + getMarkerPos "respawn_west", + CONVERT(fnc_usec_unconscious), + CONVERT(fnc_veh_handleDam), + CONVERT(fnc_veh_handleKilled), + CONVERT(player_zombieAttack), + CONVERT(player_zombieCheck), + CONVERT(DZ_KeyDown_EH) +] spawn { + private ["_charID","_damageHandler","_firedHandler","_isPZombie","_keyDown","_killedHandler","_name", + "_reason","_respawn","_type","_uid","_unconscious","_vehicleDamage","_vehicleKilled","_zFind","_zTarget","_startTime","_done"]; + + _uid = _this select 0; + _damageHandler = _this select 1; + _firedHandler = _this select 2; + _killedHandler = _this select 3; + _respawn = _this select 4; + _unconscious = _this select 5; + _vehicleDamage = _this select 6; + _vehicleKilled = _this select 7; + _zTarget = _this select 8; + _zFind = _this select 9; + _keyDown = _this select 10; + + waitUntil {!isNil "Dayz_loginCompleted"}; + + _charID = CONVERT(dayz_characterID); + _name = if (alive player) then {name player} else {"DeadPlayer"}; + _isPZombie = player isKindOf "PZombie_VB"; + + while {true} do { + + _type = typeOf player; + _reason = switch true do { + case (_charID != CONVERT(dayz_characterID)): {"Dayz_characterID modified"}; + case (_uid != CONVERT(dayz_playerUID)): {"Dayz_playerUID modified"}; + //case (_damageHandler != CONVERT(fnc_usec_damageHandler)): {"DamageHandler modified"}; // disabled this line for safezones. + case (_firedHandler != CONVERT(player_fired)): {"FiredHandler modified"}; + case (_killedHandler != CONVERT(player_death)): {"KilledHandler modified"}; + case (_unconscious != CONVERT(fnc_usec_unconscious)): {"Unconscious modified"}; + case (_vehicleDamage != CONVERT(fnc_veh_handleDam)): {"VehicleDamage modified"}; + case (_vehicleKilled != CONVERT(fnc_veh_handleKilled)): {"VehicleKilled modified"}; + case (_zTarget != CONVERT(player_zombieAttack) && !_isPZombie): {"ZombieTarget modified"}; + case (_zFind != CONVERT(player_zombieCheck) && !_isPZombie): {"ZombieFind modified"}; + case (_keyDown != CONVERT(DZ_KeyDown_EH)): {"KeyDown modified"}; + case (_type == "Survivor1_DZ"): {"Survivor1_DZ morph"}; + case (_type isKindOf "Animal"): {"Animal morph"}; + case (getMarkerPos "respawn_west" distance _respawn > 0): {"Respawn moved"}; + default {"none"}; + }; + { + if (!isNull findDisplay _x) then { + _reason = format["Display%1",_x]; + }; + } count KICK_DISPLAYS; + { + if (!isNil _x) then { + _reason = format["Variable %1",_x]; + }; + } count KICK_VARIABLES; + + if !(commandingMenu in MENUS) then { + _reason = format["CommandingMenu %1",commandingMenu]; + }; + + if (_reason != "none") exitWith { + PVDZ_sec_atp = format["TK_AC_KICK - %1(%2) %3",_name,_uid,_reason]; + publicVariableServer "PVDZ_sec_atp"; //Log to server RPT + uiSleep 1; // Wait for PV to send + call compile format["TK_AC_KICK%1'%2(%3) %4'","=",_name,_uid,_reason]; //Recommend adding "TK_AC_KICK=" to scripts.txt and BEC ScriptBan + uiSleep 1; // Wait for scripts.txt trigger + TK_AC_KICK = ";"; + publicVariableServer "TK_AC_KICK"; // Trigger PV kick + uiSleep 1; + {(findDisplay _x) closeDisplay 2;} count [0,8,12,18,46,70]; // Last resort if no BE + }; + + uiSleep 4; + }; +}; + +#include "\z\addons\dayz_server\adminTools\DebugMonitors\debugMonitor2.sqf" diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/DebugMonitors/debugMonitor.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/DebugMonitors/debugMonitor.sqf new file mode 100755 index 0000000..b433805 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/DebugMonitors/debugMonitor.sqf @@ -0,0 +1,81 @@ +[] spawn { + private["_serverName","_serverSubtitle","_teamspeak","_time","_hours","_minutes","_restartTime"]; + + /************************* CONFIG *************************/ + + _serverName = "SERVER NAME HERE"; + _serverSubtitle = "WEBSITE/MESSAGE HERE"; // DELETE line 40 if you don't want this to show + _teamspeak = "Teamspeak: TEAMSPEAK IP HERE"; // DELETE line 50 if you don't want this to show + _restartTime = 180; //total time before server restart (3hrs = 180 minutes) + + /************************* CONFIG *************************/ + + if (isNil "DebugMonitorActive") then {DebugMonitorActive = true;}; + + EAT_DebugMonitorToggle = { + DebugMonitorActive = !DebugMonitorActive; + if !(DebugMonitorActive) exitWith {hintSilent '';}; + }; + + waitUntil {!isNull (findDisplay 46)}; + Ins_KEY = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 210) then {call EAT_DebugMonitorToggle;};"]; + + while {true} do { + if (DebugMonitorActive) then { + _time = (round(_restartTime-(serverTime)/60)); //Want it to count up instead of down? use _time = (round serverTime)/60; + _hours = (floor(_time/60)); + _minutes = (_time - (_hours * 60)); + + switch(_minutes) do + { + case 9: {_minutes = "09"}; + case 8: {_minutes = "08"}; + case 7: {_minutes = "07"}; + case 6: {_minutes = "06"}; + case 5: {_minutes = "05"}; + case 4: {_minutes = "04"}; + case 3: {_minutes = "03"}; + case 2: {_minutes = "02"}; + case 1: {_minutes = "01"}; + case 0: {_minutes = "00"}; + }; + + // Want to change the colors? http://www.w3schools.com/colors/colors_picker.asp + // Use the #xxxxxx color code you get on that website and place it with any of the + //%1
+ %2
+
+ Players Online: %3
+ Murders: %4
+ Bandits Killed: %5
+ Zombies Killed: %6
+ Humanity: %7
+ Blood: %8
+ FPS: %9
+
+ %10
+ Server restart in %11:%12
", //ONLY last line needs the ", + + _serverName, // Used on line 40 for server title + _serverSubtitle, // Used on line 41 for server subtitle + (count playableUnits), // Used on line 43 for player count + (player getVariable['humanKills', 0]), // Used on line 44 for murder count + (player getVariable['banditKills', 0]), // Used on line 45 for bandit kill count + (player getVariable['zombieKills', 0]), // Used on line 46 for zombie kill count + (player getVariable['humanity', 0]), // Used on line 47 for humanity count + (player getVariable['USEC_BloodQty', r_player_blood]), // Used on line 48 for player blood amount + (round diag_fps), // Used on line 49 for frames per second + _teamspeak, // Used on line 51 for frames per second + _hours, // Used on line 52 to display hours + _minutes // Used on line 52 to display minutes + ]; + }; + //Don't modify this part + uiSleep 0.5; + }; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/DebugMonitors/debugMonitor2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/DebugMonitors/debugMonitor2.sqf new file mode 100755 index 0000000..f9da7fd --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/DebugMonitors/debugMonitor2.sqf @@ -0,0 +1,74 @@ +[] spawn { + + _serverName = "SERVER NAME"; + _teamspeak = "000.000.000.000"; // DELETE line 50 if you don't want this to show + _restartTime = 180; //total time before server restart (3hrs = 180 minutes) + _pic = ""; + + if (isNil "DebugMonitorActive") then {DebugMonitorActive = true;}; + + EAT_DebugMonitorToggle = { + DebugMonitorActive = !DebugMonitorActive; + hintSilent ''; + }; + + waitUntil {!isNull (findDisplay 46)}; + Ins_KEY = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 210) then {call EAT_DebugMonitorToggle;};"]; + + while {true} do { + if (DebugMonitorActive) then { + _time = (round(_restartTime-(serverTime)/60)); + _hours = (floor(_time/60)); + _minutes = (_time - (_hours * 60)); + + if (player == vehicle player) then { + _pic = (getText (configFile >> "cfgWeapons" >> (currentWeapon player) >> "picture")); + } else { + _pic = (getText (configFile >> "CfgVehicles" >> (typeOf vehicle player) >> "picture")); + }; + + switch(_minutes) do + { + case 9: {_minutes = "09"}; + case 8: {_minutes = "08"}; + case 7: {_minutes = "07"}; + case 6: {_minutes = "06"}; + case 5: {_minutes = "05"}; + case 4: {_minutes = "04"}; + case 3: {_minutes = "03"}; + case 2: {_minutes = "02"}; + case 1: {_minutes = "01"}; + case 0: {_minutes = "00"}; + }; + + hintSilent parseText format [" + %12
+ %1 Players Online:
+
+ Blood: %5
+ Humanity: %6
+ FPS: %7
+ Murders: %3
+ Bandit Kills: %4
+ Zombie Kills: %2
+ Server restart in: %8:%9

+ Teamspeak: %13", + + (count playableUnits), // 1 + (player getVariable['zombieKills', 0]), // 2 + (player getVariable['humanKills', 0]), // 3 + (player getVariable['banditKills', 0]), // 4 + (player getVariable['USEC_BloodQty', r_player_blood]), // 5 + (player getVariable['humanity', 0]), // 6 + (round diag_fps), // 7 + _hours, // 8 + _minutes, // 9 + dayz_playerName, // 10 + _pic, // 11 + _serverName, // 12 + _teamspeak // 13 + ]; + uiSleep 1; + }; + }; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Mod/activate.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Mod/activate.sqf new file mode 100755 index 0000000..ea0abb9 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Mod/activate.sqf @@ -0,0 +1,57 @@ +dayz_antihack = 0; // Disable vanilla antihack for admins and mods + +// Load Configs and Functions +#include "\z\addons\dayz_server\AdminTools\Mod\config.sqf" +#include "\z\addons\dayz_server\AdminTools\Mod\functions.sqf" +#include "\z\addons\dayz_server\AdminTools\Mod\main.sqf" + + + + +[] spawn { + waitUntil {uiSleep 0.1;(!isNil "Dayz_loginCompleted" && !isNil "keyboard_keys")}; + + EAT_Keybind = { + private ["_option","_handled"]; + #include "\ca\editor\Data\Scripts\dikCodes.h" + + _option = _this select 0; + _handled = false; + + call + { + if (_option == "ModMenu") exitWith {keyboard_keys set [DIK_F2,{call EAT_ToolsMain;_handled = true;}];}; + if (_option == "ModMode") exitWith { + keyboard_keys set [DIK_F4,{call optionMenu;_handled = true;}]; + keyboard_keys set [DIK_DELETE,{[] spawn EAT_DeleteObj;_handled = true;}]; + keyboard_keys set [DIK_U,{[] spawn EAT_Unlock;_handled = true;}]; + keyboard_keys set [DIK_L,{[] spawn EAT_Lock;_handled = true;}]; + keyboard_keys set [DIK_T,{[] spawn EAT_TeleportToggle;_handled = true;}]; + }; + if (_option == "EndModMode") exitWith { + keyboard_keys set [DIK_F4,{_handled = true;}]; + keyboard_keys set [DIK_DELETE,{_handled = true;}]; + keyboard_keys set [DIK_U,{_handled = true;}]; + keyboard_keys set [DIK_L,{_handled = true;}]; + keyboard_keys set [DIK_T,{_handled = true;}]; + }; + if (_option == "Spectate") exitWith {keyboard_keys set [DIK_F6,{spectate = false;_handled = true;}];}; + if (_option == "EndSpectate") exitWith {keyboard_keys set [DIK_F6,{_handled = true;}];}; + if (_option == "FastWalk") exitWith {keyboard_keys set [DIK_4, {call EAT_FastForward;_handled = true;}];}; + if (_option == "EndFastWalk") exitWith {keyboard_keys set [DIK_4, {_handled = true;}];}; + if (_option == "FastUp") exitWith {keyboard_keys set [DIK_5, {call EAT_AdminFastUp;_handled = true;}];}; + if (_option == "EndFastUp") exitWith {keyboard_keys set [DIK_5, {_handled = true;}];}; + }; + _handled + }; + + // Bind F2 key for mod menu + ["ModMenu"] call EAT_Keybind; + + // Start Debug Monitor + #include "\z\addons\dayz_server\adminTools\DebugMonitors\debugMonitor2.sqf" + + systemChat "Moderator Tools Loaded..."; + systemChat "Press F2 to Open the Moderator Menu"; + diag_log("Moderator Tools: ModActivate.sqf loaded"); +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Mod/config.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Mod/config.sqf new file mode 100755 index 0000000..fc9989e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Mod/config.sqf @@ -0,0 +1,21 @@ +/************** Epoch Moderator Tools Variables **************/ + +//This creates a log in your server\EpochAdminToolLogs\toolUsageLog.txt REQUIRES: EATadminLogger.dll +EAT_logMajorTool = true; //A major tool is a strong tool with high possibility for exploitation +EAT_logMinorTool = true;//A minor tool is a weak tool with low possibility for exploitation + +/************** ModMode Variables **************/ + +// Defines the default on and off for mod mode options +// ALL items can be turned on or off during gameplay, these are just defaults +EAT_playerGod = true; +EAT_vehicleGod = false; +EAT_playerESPMode = true; +EAT_grassOff = true; +EAT_infAmmo = true; +EAT_fastWalk = true; +EAT_fastUp = true; +EAT_invisibility = false; +EAT_ZombieShield = false; + +diag_log("Moderator Tools: Configs loaded"); diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Mod/functions.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Mod/functions.sqf new file mode 100755 index 0000000..8fb2a24 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Mod/functions.sqf @@ -0,0 +1,1145 @@ + +/* +EAT_fnc_actionAllowed = { + local _onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1; + local _canDo = (!r_drag_sqf && !r_player_unconscious && !_onLadder && (vehicle player == player)); + _canDo +}; +*/ + +// Generates a selectable list of players for teleports and spectate +// Title is set by setting EAT_pMenuTitle = "TITLE HERE" before calling the function +EAT_pMenuTitle = ""; +EAT_fnc_playerSelect = +{ + private["_pmenu","_arr"]; + _pmenu = [["",true],[EAT_pMenuTitle, [-1], "", -5, [["expression", ""]], "1", "0"]]; + for "_i" from (_this select 0) to (_this select 1) do + {_arr = [format['%1', plist select (_i)], [12], "", -5, [["expression", format ["pselect5 = plist select %1;", _i]]], "1", "1"]; _pmenu set [_i + 2, _arr];}; + if (count plist > (_this select 1)) then {_pmenu set [(_this select 1) + 2, ["Next", [13], "", -5, [["expression", "snext = true;"]], "1", "1"]];} + else {_pmenu set [(_this select 1) + 2, ["", [-1], "", -5, [["expression", ""]], "1", "0"]];}; + _pmenu set [(_this select 1) + 3, ["Exit", [13], "", -5, [["expression", "pselect5 = 'exit';"]], "1", "1"]]; + showCommandingMenu "#USER:_pmenu"; +}; + +// Convert multidimensional array to single dimensional - Used in adminBuild +myfnc_MDarray = { + local _list = []; + local _temp = _this select 0; + + for "_i" from 0 to ((count _temp) - 1) do { + _list set [_i,((_temp select _i) select 2)]; + }; + _list +}; + +// Flips the nearest land vehicle +EAT_FlipVeh = { + local _vehicle = getPos player nearestObject "LandVehicle"; + if (isNull _vehicle) exitWith {"There are no vehicles near to flip" call dayz_rollingMessages;}; + _vehicle setVectorUp [0,0,1]; + local _name = getText(configFile >> "cfgVehicles" >> (typeOf _vehicle) >> "displayName"); + format ["Your %1 is now right-side up",_name] call dayz_rollingMessages; +}; + +// Allows the player to glide forward quickly across the map. It is called from key bind. +EAT_FastForward = { + local _player = vehicle player; + local _dir = getdir _player; + local _pos = getPosATL _player; + local _pos2 = getPos _player; + local _z2 = _pos2 select 2; + local _z = 0; + + if (_player isKindOf "Air" && _z2 < 20 && isEngineOn _player) then {_z = _z2 + 30;} else {if (_z2 > 3) then {_z = _z2;} else {if (surfaceIsWater _pos) then {_z = 2;} else {_z=0;};};}; + _pos = [(_pos select 0) + 5 * sin (_dir), (_pos select 1) + 5 * cos (_dir), _z]; + if (surfaceIsWater _pos) then {_player setPosASL _pos;} else {_player setPosATL _pos;}; +}; + +// Toggles fast forward key bind on and off +EAT_FastForwardToggle = { + local _active = _this select 0; + if (_active) then { + ["FastWalk"] call EAT_Keybind; + } else { + ["EndFastWalk"] call EAT_Keybind; + }; +}; + +// Allows the admin to leap vertically or directionally +EAT_AdminFastUp = { + local _vel = velocity player; + player setVelocity [_vel select 0,_vel select 1,5]; +}; + +// This function toggles the jump key bind on and off +EAT_FastUpToggle = { + local _active = _this select 0; + if (_active) then { + ["FastUp"] call EAT_Keybind; + } else { + ["EndFastUp"] call EAT_Keybind; + }; +}; + +// Lowers the terrain +EAT_GrassOffToggle = { + local _active = _this select 0; + if (_active) then { + local _toggle = "on"; + setTerrainGrid 50; + }else{ + local _toggle = "off"; + setTerrainGrid 25; + }; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has turned grass %3",name player,getPlayerUID player,_toggle] call EAT_Logger;}; +}; + +// Allows admin to be invisible to other players +EAT_AdminInvisible = { + EAT_clientToServer = ["invisibility",player,[(_this select 0),(getPos player)],dayz_authKey]; + publicVariableServer "EAT_clientToServer"; +}; + +EAT_AddWeapon = { + #define IS_HANDGUN(wpn) (getNumber (configFile >> "CfgWeapons" >> wpn >> "type") == 2) + local _gun = _this select 0; + local _ammo = _this select 1; + local _mags = []; + + if (count _this > 2) then { // grenade launcher ammo + player addMagazine (_this select 2); + player addMagazine (_this select 2); + }; + + if (IS_HANDGUN(_gun)) then { + { + if (IS_HANDGUN(_x)) exitWith { + player removeWeapon _x; + _mags = getArray (configFile >> "cfgWeapons" >> _x >> "magazines"); + player removeMagazines (_mags select 0); + } + } count (weapons player); + } else { + _mags = getArray (configFile >> "cfgWeapons" >> (primaryWeapon player) >> "magazines"); + player removeWeapon (primaryWeapon player); + player removeMagazines (_mags select 0); + }; + + // Add magazines before gun so the gun loads ammo on spawn + player addMagazine _ammo; + player addMagazine _ammo; + player addWeapon _gun; + player selectWeapon _gun; +}; + +EAT_Loadouts = { + local _primaryWeapon = _this select 0; + local _secondaryWeapon = _this select 1; + local _primaryAmmo = getArray (configFile >> "cfgWeapons" >> _primaryWeapon >> "magazines"); + local _secondaryAmmo = getArray (configFile >> "cfgWeapons" >> _secondaryWeapon >> "magazines"); + local _rifleMag = _primaryAmmo select 0; + local _pistolMag = _secondaryAmmo select 0; + local _weps = ["ItemRadio","NVGoggles_DZE","Binocular_Vector","ItemGPS","ItemHatchet","ItemKnife","ItemMatchbox","ItemEtool","ItemToolbox","ItemCrowbar",_primaryWeapon,_secondaryWeapon]; + local _bloodbag = ["bloodBagONEG","ItemBloodbag"] select dayz_classicBloodBagSystem; + local _mags = ["ItemMorphine","ItemEpinephrine","ItemAntibiotic","ItemPainkiller","ItemWaterBottleBoiled","FoodBeefCooked","ItemBandage","ItemBandage",_bloodbag,_rifleMag,_rifleMag,_rifleMag,_pistolMag,_pistolMag,_pistolMag]; + + removeAllWeapons player; + removeAllItems player; + removeBackpack player; + + player addBackpack "CoyoteBackpack_Camping_DZE2"; + + { + player addMagazine _x; + } count _mags; + + { + player addWeapon _x; + } count _weps; + + player selectWeapon _primaryWeapon; +}; + +EAT_AddBackPack = { + removeBackpack player; + player addBackpack (_this select 0); +}; + +EAT_AddMeds = { + local _bloodbag = ["bloodBagONEG","ItemBloodbag"] select dayz_classicBloodBagSystem; + { + player addMagazine _x; + } count ["ItemMorphine","ItemEpinephrine","ItemAntibiotic","ItemPainkiller","ItemSodaPepsi","FoodBeefCooked","ItemBandage","ItemBandage",_bloodbag]; +}; + +EAT_RemoveGear = { + removeAllWeapons player; + removeAllItems player; + removeBackpack player; + "Gear deleted!" call dayz_rollingMessages; +}; + +EAT_AddTools = { + local _tools = ["ItemRadio","ItemHatchet","ItemKnife","ItemMatchbox","ItemEtool","ItemToolbox","ItemCrowbar"]; + + { + if (_x in weapons player) then { + player removeWeapon _x; + }; + } count _tools; + + { + player addWeapon _x; + } count _tools; +}; + +EAT_AddTempVeh = { + local _vehicle = _this select 0; + local _dir = getDir vehicle player; + local _pos = getPosATL vehicle player; + _pos = [(_pos select 0) + 9 * sin (_dir), (_pos select 1) + 9 * cos (_dir), 0]; + + EAT_clientToServer = ["tempVeh",player,[_vehicle,_dir,_pos],dayz_authKey]; + publicVariableServer "EAT_clientToServer"; + + format["Spawned a %1", (getText(configFile >> "cfgVehicles" >> _vehicle >> "displayName"))] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has added a temporary vehicle: %3",name player,getPlayerUID player,_vehicle] call EAT_Logger;}; +}; + +EAT_AddVeh = { + local _vehicle = _this select 0; + local _dir = getDir vehicle player; + local _pos = getPos vehicle player; + _pos = [(_pos select 0) + 9 * sin (_dir), (_pos select 1) + 9 * cos (_dir), 0]; + local _keyColor = ["Green","Red","Blue","Yellow","Black"] call BIS_fnc_selectRandom; + local _keyNumber = (floor(random 2500)) + 1; + local _keySelected = format[("ItemKey%1%2"),_keyColor,_keyNumber]; + local _isKeyOK = isClass(configFile >> "CfgWeapons" >> _keySelected); + false call dz_fn_meleeMagazines; + local _isOk = [player,_keySelected] call BIS_fnc_invAdd; + true call dz_fn_meleeMagazines; + + if (_isOk and _isKeyOK) then { + PVDZE_veh_Publish2 = [[_dir,_pos],_vehicle,false,_keySelected,player,dayz_authKey]; + publicVariableServer "PVDZE_veh_Publish2"; + + format["%1 spawned, key added to toolbelt", (getText(configFile >> "cfgVehicles" >> _vehicle >> "displayName"))] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has added a permanent vehicle: %3",name player,getPlayerUID player,_vehicle] call EAT_Logger;}; + } else { + "Your toolbelt is full" call dayz_rollingMessages; + }; +}; + +EAT_AddVehDialog = { + PermDialogSelected = -1; + TempDialogSelected = -1; + AdminDialogList = 13000; + if (isNil "vhnlist") then {vhnlist = [];}; + + LoadEpochOnlyList = { + lbClear AdminDialogList; + vhnlist = +EAT_AllEpochVehList; + { + local _index = lbAdd [AdminDialogList, format["%2 (%1)", (_x select 0), (_x select 1)]]; + lbSetPicture [AdminDialogList, _index, (_x select 2)]; + } count vhnlist; + }; + + createDialog "EAT_Veh_ModDialog"; + call LoadEpochOnlyList; + + LoadSpecificList = { + lbClear AdminDialogList; + vhnlist = []; + local _kindOf = _this select 0; + { + if ((_x select 0) isKindOf _kindOf) then { + vhnlist set [count vhnlist, _x]; + }; + } count EAT_AllEpochVehList; + + { + local _index = lbAdd [AdminDialogList, format["%2 (%1)", (_x select 0), (_x select 1)]]; + lbSetPicture [AdminDialogList, _index, (_x select 2)]; + } count vhnlist; + }; + + waitUntil { !dialog }; + if ((PermDialogSelected < 0) && (TempDialogSelected < 0)) exitWith {}; + + if (PermDialogSelected > -1) then { + [((vhnlist select PermDialogSelected) select 0)] call EAT_AddVeh; + }; + + if (TempDialogSelected > -1) then { + [((vhnlist select TempDialogSelected) select 0)] call EAT_AddTempVeh; + }; +}; + +EAT_DeleteObj = { + local _obj = cursorTarget; + if(isNull _obj) exitWith{"No object selected" call dayz_rollingMessages;}; + EAT_DeleteObjText = getText (configFile >> "CfgVehicles" >> typeOf _obj >> "displayName"); + EAT_databaseRemove = 0; + + local _objectID = _obj getVariable["ObjectID","0"]; + local _objectUID = _obj getVariable["ObjectUID","0"]; + + EAT_deleteMenu = + [ + ["",true], + [format["Delete this %1?:",EAT_DeleteObjText], [-1], "", -5, [["expression", ""]], "1", "0"], + ["Yes",[0],"", -5,[["expression","EAT_databaseRemove = 1;"]],"1","1"], + ["No", [0], "", -5, [["expression", "EAT_databaseRemove = -1"]], "1", "1"] + ]; + showCommandingMenu "#USER:EAT_deleteMenu"; + waitUntil{(EAT_databaseRemove != 0) || (commandingMenu == "")}; + if(EAT_databaseRemove <= 0) exitWith{}; + + if(EAT_logMinorTool) then {format["%1 %2 -- has deleted object: %3 ID:%4 UID:%5 from database",name player,getPlayerUID player,EAT_DeleteObjText,_objectID,_objectUID] call EAT_Logger;}; + + format["Deleted %1",EAT_DeleteObjText] call dayz_rollingMessages; + + PVDZ_obj_Destroy = [_objectID,_objectUID,player,_obj,dayz_authKey]; + publicVariableServer "PVDZ_obj_Destroy"; +}; + +EAT_HealPlayer = { + EAT_healDistance = -1; + EAT_distanceMenu = + [ + ["",true], + ["Select distance:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["5", [2], "", -5, [["expression", "EAT_healDistance=5;"]], "1", "1"], + ["10", [3], "", -5, [["expression", "EAT_healDistance=10;"]], "1", "1"], + ["25", [4], "", -5, [["expression", "EAT_healDistance=25;"]], "1", "1"], + ["50", [5], "", -5, [["expression", "EAT_healDistance=50;"]], "1", "1"], + ["100", [6], "", -5, [["expression", "EAT_healDistance=100;"]], "1", "1"], + ["500", [7], "", -5, [["expression", "EAT_healDistance=500;"]], "1", "1"], + ["1000", [8], "", -5, [["expression", "EAT_healDistance=1000;"]], "1", "1"], + ["10000", [9], "", -5, [["expression", "EAT_healDistance=10000;"]], "1", "1"], + ["Self", [10], "", -5, [["expression", "EAT_healDistance=0;"]], "1", "1"], + ["Exit", [13], "", -3, [["expression", ""]], "1", "1"] + ]; + + showCommandingMenu "#USER:EAT_distanceMenu"; + WaitUntil{commandingMenu == ""}; + + if(EAT_healDistance == -1) exitWith {}; + + r_player_blood = r_player_bloodTotal; + r_player_inpain = false; + r_player_infected = false; + r_player_injured = false; + dayz_hunger = 0; + dayz_thirst = 0; + dayz_temperatur = 100; + + r_fracture_legs = false; + r_fracture_arms = false; + r_player_dead = false; + r_player_unconscious = false; + r_player_loaded = false; + r_player_cardiac = false; + r_player_lowblood = false; + r_doLoop = false; + r_action = false; + r_player_timeout = 0; + r_handlerCount = 0; + r_interrupt = false; + + disableUserInput false; + dayz_sourceBleeding = objNull; + player setVariable ["USEC_injured",false,true]; + player setVariable['USEC_inPain',false,true]; + player setVariable['USEC_infected',false,true]; + player setVariable['USEC_lowBlood',false,true]; + player setVariable['USEC_BloodQty',12000,true]; + player setVariable['USEC_isCardiac',false,true]; + {player setVariable[_x,false,true];} forEach USEC_woundHit; + player setVariable ["unconsciousTime", r_player_timeout, true]; + player setVariable['NORRN_unconscious',false,true]; + player setVariable ['messing',[dayz_hunger,dayz_thirst],true]; + player setHit ['legs',0]; + player setVariable ['hit_legs',0,true]; + player setVariable ['hit_hands',0,true]; + player setVariable["inCombat",false, true]; + + disableSerialization; + local _UIfix = (uiNameSpace getVariable 'DAYZ_GUI_display') displayCtrl 1303; + local _UIfix2 = (uiNameSpace getVariable 'DAYZ_GUI_display') displayCtrl 1203; + _UIfix ctrlShow false; + _UIfix2 ctrlShow false; + + if(EAT_healDistance == 0) exitWith {}; + + { + if (isPlayer _x) then { + PVDZ_send = [_x,"Bandage", [_x,player]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_x, "Transfuse", [_x, player, 12000]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_x,"Morphine", [_x,player]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_x,"Epinephrine", [_x,player,"ItemEpinephrine"]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_x,"Painkiller", [_x,player]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_x,"Antibiotics", [_x,player]]; + publicVariableServer "PVDZ_send"; + }; + } count (player nearEntities ["CAManBase", EAT_healDistance]); + + format ["%1 healed",_list] call dayz_rollingMessages; +}; + +EAT_Lock = { + local _obj = cursorTarget; + if (isNull _obj) exitWith {"No Target" call dayz_rollingMessages;}; + + local _objType = typeOf _obj; + local _objectID = _obj getVariable["ObjectID","0"]; + + call { + if(_objType in DZE_UnLockedStorage) exitWith { // Lock safe/lockbox + local _lockedClass = getText (configFile >> "CfgVehicles" >> _objType >> "lockedClass"); + local _text = getText (configFile >> "CfgVehicles" >> _objType >> "displayName"); + local _ownerID = _obj getVariable["ownerPUID","0"]; + + disableUserInput true; // Make sure player can not modify gear while it is being saved + (findDisplay 106) closeDisplay 0; // Close gear + dze_waiting = nil; + + [_lockedClass,objNull] call fn_waitForObject; + + PVDZE_handleSafeGear = [player,_obj,1]; + publicVariableServer "PVDZE_handleSafeGear"; + //wait for response from server to verify safe was logged and saved before proceeding + waitUntil {!isNil "dze_waiting"}; + disableUserInput false; // Safe is done saving now + + format[localize "str_epoch_player_117",_text] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has locked a safe - ID:%3 UID:%4",name player,getPlayerUID player,_objectID,_ownerID] call EAT_Logger;}; + }; + if (_obj isKindOf "AllVehicles") exitWith { // Lock vehicle + {player removeAction _x} forEach s_player_lockunlock;s_player_lockunlock = []; + s_player_lockUnlock_crtl = 1; + + PVDZE_veh_Lock = [_obj,true]; + if (local _obj) then { + PVDZE_veh_Lock spawn local_lockUnlock + } else { + publicVariable "PVDZE_veh_Lock"; + }; + s_player_lockUnlock_crtl = -1; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has locked a vehicle: %3",name player,getPlayerUID player,_obj] call EAT_Logger;}; + }; + // Lock Door + if (_obj animationPhase "Open_hinge" == 1) then {_obj animate ["Open_hinge", 0];}; + if (_obj animationPhase "Open_latch" == 1) then {_obj animate ["Open_latch", 0];}; + if (_obj animationPhase "Open_door" == 1) then {_obj animate ["Open_door", 0];}; + if (_obj animationPhase "DoorR" == 1) then {_obj animate ["DoorR", 0];}; + if (_obj animationPhase "LeftShutter" == 1) then {_obj animate ["LeftShutter", 0];}; + if (_obj animationPhase "RightShutter" == 1) then {_obj animate ["RightShutter", 0];}; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has locked a door - ID:%3 Combo:%4",name _player,getPlayerUID _player,_objectID,(_obj getVariable ["CharacterID","0"])] call EAT_Logger;}; + }; +}; + + +EAT_Repair = { + local _vehicle = cursorTarget; + if (isNull _vehicle) exitWith {"No target" call dayz_rollingMessages;}; + + { + local _damage = [_vehicle,_x] call object_getHit; + if ((_damage select 0) > 0) then { + [_vehicle, (_damage select 1), 0, true] call fnc_veh_handleRepair; + }; + } forEach (_vehicle call vehicle_getHitpoints); + + if (local _vehicle) then { + [_vehicle,1] call local_setFuel; + } else { + PVDZ_send = [_vehicle,"SetFuel",[_vehicle,1]]; + publicVariableServer "PVDZ_send"; + }; + + format["%1 Repaired and Refueled", (getText(configFile >> "cfgVehicles" >> (typeOf _vehicle) >> "displayName"))] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has repaired %3",name player,getPlayerUID player,_vehicle] call EAT_Logger;}; +}; + +EAT_Unlock = { + local _obj = cursorTarget; + if (isNull _obj) exitWith {"No Target" call dayz_rollingMessages;}; + local _objectID = _obj getVariable["ObjectID","0"]; + local _objType = typeOf _obj; + + call { + if (_objType in DZE_LockedStorage) exitWith { // Unlock Safe/Lock_Box + // Get all required variables + local _unlockedClass = getText (configFile >> "CfgVehicles" >> _objType >> "unlockedClass"); + local _ownerID = _obj getVariable["ownerPUID","0"]; + disableUserInput true; // Make sure player can not modify gear while it is filling + (findDisplay 106) closeDisplay 0; // Close gear + dze_waiting = nil; + [_unlockedClass,objNull] call fn_waitForObject; + + PVDZE_handleSafeGear = [player,_obj,0]; + publicVariableServer "PVDZE_handleSafeGear"; + //wait for response from server to verify safe was logged before proceeding + waitUntil {!isNil "dze_waiting"}; + disableUserInput false; // Safe is done filling now + + format[localize "STR_BLD_UNLOCKED", (getText (configFile >> "CfgVehicles" >> _objType >> "displayName"))] call dayz_rollingMessages; + if(EAT_logMajorTool) then {format["%1 %2 -- has unlocked a safe - ID:%3 UID:%4",name player,getPlayerUID player,_objectID,_ownerID] call EAT_Logger;}; + }; + if (_obj isKindOf "AllVehicles") exitWith { // Unlock vehicle + {player removeAction _x} forEach s_player_lockunlock;s_player_lockunlock = []; + s_player_lockUnlock_crtl = 1; + + PVDZE_veh_Lock = [_obj,false]; + + if (local _obj) then { + PVDZE_veh_Lock spawn local_lockUnlock + } else { + publicVariable "PVDZE_veh_Lock"; + }; + + s_player_lockUnlock_crtl = -1; + + if(EAT_logMajorTool) then {format["%1 %2 -- has unlocked vehicle: %3 with ID:%4",name player,getPlayerUID player,_obj,_objectID] call EAT_Logger;}; + }; + //Unlock Door + if(_obj animationPhase "Open_hinge" == 0) then {_obj animate ["Open_hinge", 1];}; + if(_obj animationPhase "Open_latch" == 0) then {_obj animate ["Open_latch", 1];}; + if(_obj animationPhase "Open_door" == 0) then {_obj animate ["Open_door", 1];}; + if(_obj animationPhase "DoorR" == 0) then {_obj animate ["DoorR", 1];}; + if(_obj animationPhase "LeftShutter" == 0) then {_obj animate ["LeftShutter", 1];}; + if(_obj animationPhase "RightShutter" == 0) then {_obj animate ["RightShutter", 1];}; + + if(EAT_logMajorTool) then {format["%1 %2 -- has unlocked a door - ID:%3 Combo:%4",name player,getPlayerUID player,_objectID,(_obj getVariable ["CharacterID","0"])] call EAT_Logger;}; + }; +}; + +EAT_RecoverKey = { + local _obj = cursorTarget; + if (isNull _obj) exitWith {"No target" call dayz_rollingMessages;}; + + if (_obj isKindOf "AllVehicles") then { + local _id = parseNumber (_obj getVariable ["CharacterID","0"]); + if (_id == 0) exitWith {format ["%1 has ID 0 - No Key possible", (getText(configFile >> "cfgVehicles" >> (typeOf _obj) >> "displayName"))] call dayz_rollingMessages;}; + + local _result = call { + if (_id > 0 && {_id <= 2500}) exitWith {format["ItemKeyGreen%1", _id];}; + if (_id > 2500 && {_id <= 5000}) exitWith {format["ItemKeyRed%1", _id - 2500];}; + if (_id > 5000 && {_id <= 7500}) exitWith {format["ItemKeyBlue%1", _id - 5000];}; + if (_id > 7500 && {_id <= 10000}) exitWith {format["ItemKeyYellow%1", _id - 7500];}; + if (_id > 10000 && {_id <= 12500}) exitWith {format["ItemKeyBlack%1", _id - 10000];}; + }; + + local _isKeyOK = isClass(configFile >> "CfgWeapons" >> _result); + false call dz_fn_meleeMagazines; + local _isOk = [player,_result] call BIS_fnc_invAdd; + true call dz_fn_meleeMagazines; + if (_isOk && _isKeyOK) then { + format["Key [%1] added to inventory!",_result] call dayz_rollingMessages; + } else { + "Your toolbelt is full" call dayz_rollingMessages; + }; + + if(EAT_logMajorTool) then {format["%1 %2 -- has generated %3 for a %4",name player,getPlayerUID player,_result,_obj] call EAT_Logger;}; + }; +}; + +EAT_SkinChanger = { + local _skin = _this select 0; + local _backPack = unitBackpack player; + local _bagType = (typeOf _backPack); + + // Tool use logger + if (EAT_logMinorTool) then {format["%1 %2 -- has changed skins to %3",name player,getPlayerUID player,_skin] call EAT_Logger;}; + + if (_bagType != "") then { + local _weps = getWeaponCargo _backPack; + local _mags = getMagazineCargo _backPack; + removeBackpack player; + [dayz_playerUID,dayz_characterID,_skin] spawn player_humanityMorph; + player addBackpack _bagType; + local _array1 = _weps select 0; + local _array2 = _weps select 1; + + { + (unitBackpack player) addWeaponCargo [(_array1 select _forEachIndex),(_array2 select _forEachIndex)]; + } forEach _array1; + + _array1 = _mags select 0; + _array2 = _mags select 1; + + { + (unitBackpack player) addMagazineCargo [(_array1 select _forEachIndex),(_array2 select _forEachIndex)]; + } forEach _array1; + } else { + [dayz_playerUID,dayz_characterID,_skin] spawn player_humanityMorph; + }; +}; + +EAT_Spectate = { + local _mycv = cameraView; + local _menuCheckOk = false; + local _j = 0; + local _name = ""; + + + EAT_pMenuTitle = "Spectate Player:"; + snext = false; + plist = []; + pselect5 = ""; + spectate = true; + + {if (_x != player) then {plist set [count plist, name _x];};} forEach playableUnits; + + while {pselect5 == "" && !_menuCheckOk} do { + [_j, (_j + 10) min (count plist)] call EAT_fnc_playerSelect; _j = _j + 10; + WaitUntil {pselect5 != "" || snext || commandingMenu == ""}; + _menuCheckOk = (commandingMenu == ""); + snext = false; + }; + + if (pselect5 != "exit" && {pselect5 != ""}) then { + _name = pselect5; + { + if(format[name _x] == _name) then { + ["Spectate"] call EAT_Keybind; + (vehicle _x) switchCamera "EXTERNAL"; + "F6 to return" call dayz_rollingMessages; + waitUntil {uiSleep 1; !(alive _x) or !(alive player) or !(spectate)}; + ["EndSpectate"] call EAT_Keybind; + player switchCamera _mycv; + + if(EAT_logMajorTool) then {format["%1 %2 -- has begun spectating %3",name player,getPlayerUID player,_name] call EAT_Logger;}; + }; + } forEach playableUnits; + }; + spectate = false; + if (!spectate && {pselect5 != "exit"}) then { + "Spectate done" call dayz_rollingMessages; + + if(EAT_logMajorTool) then {format["%1 %2 -- has stopped spectating %3",name player,getPlayerUID player,_name] call EAT_Logger;}; + }; +}; + +EAT_LocateVeh = { + private ["_inv","_searchString","_ID","_found","_targetColor","_finalID","_targetPosition","_targetVehicle","_count","_key","_keyName","_showMapMarker","_markerColour","_locatorMarker"]; + + /****************************************| Config |**************************************************************************************/ + + _showMapMarker = True; // True = display the map markers, False = just identify the keys + _markerColour = "ColorOrange"; // Alternatives = "ColorBlack", "ColorRed", "ColorGreen", "ColorBlue", "ColorYellow", "ColorWhite" + + /****************************************| Config |**************************************************************************************/ + + if( isNil "locateVehicle") then {locateVehicle = true;} else {locateVehicle = !locateVehicle}; + + if(locateVehicle) then { + + _inv = [player] call BIS_fnc_invString; + _keyColor = []; + _keyID = []; + _removedID = []; + _count = 0; + + if (!("ItemGPS" in _inv)) then {player addWeapon "ItemGPS";}; + + { + for "_i" from 1 to 2500 do { + _searchString = format ["ItemKey%1%2",_x,str(_i)]; + if ((_searchString in _inv)) then { + _count = _count + 1; + _targetColor = _x; + _keyColor = _keyColor + [_targetColor]; + _ID = str(_i); + _ID = parseNumber _ID; + if (_targetColor == "Green") then { _finalID = _ID; }; + if (_targetColor == "Red") then { _finalID = _ID + 2500; }; + if (_targetColor == "Blue") then { _finalID = _ID + 5000; }; + if (_targetColor == "Yellow") then { _finalID = _ID + 7500; }; + if (_targetColor == "Black") then { _finalID = _ID + 10000; }; + _keyID = _keyID + [_finalID]; + _removedID = _removedID + [_ID]; + }; + }; + } forEach ["Black","Yellow","Blue","Green","Red"]; + + _i = 0; + for "_i" from 0 to 10 do {deleteMarkerLocal ("locatorMarker"+ (str _i));}; + + if (_count == 0) exitWith {"Place a key in your inventory to find that vehicle." call dayz_rollingMessages; locateVehicle = false;}; + format["Found: %1 vehicle key",_count] call dayz_rollingMessages; + + _count = _count - 1; + + _i = 0; + for "_i" from 0 to _count do { + _finalID = _keyID select _i; + _ID = _removedID select _i; + _targetColor = _keyColor select _i; + _key = format["ItemKey%1%2",_targetColor,_ID]; + _keyName = getText (configFile >> "CfgWeapons" >> _key >> "displayName"); + _found = 0; + + { + private ["_tID","_vehicle_type"]; + _vehicle_type = typeOf _x; + _tID = parseNumber (_x getVariable ["CharacterID","0"]); + if ((_tID == _finalID) && ((_vehicle_type isKindOf "Air") || (_vehicle_type isKindOf "LandVehicle") || (_vehicle_type isKindOf "Ship"))) then { + _targetPosition = getPosATL _x; + _targetVehicle = _x; + _found = 1; + }; + } forEach vehicles; + + if (_found != 0) then { + _vehicleName = gettext (configFile >> "CfgVehicles" >> (typeof _targetVehicle) >> "displayName"); + if (_showMapMarker) then { + _Marker = "locatorMarker" + (str _i); + _locatorMarker = createMarkerLocal [_Marker,[(_targetPosition select 0),(_targetPosition select 1)]]; + _locatorMarker setMarkerShapeLocal "ICON"; + _locatorMarker setMarkerTypeLocal "DOT"; + _locatorMarker setMarkerColorLocal _markerColour; + _locatorMarker setMarkerSizeLocal [1.0, 1.0]; + _locatorMarker setMarkerTextLocal format ["locator: %1",_vehicleName]; + } else { + format["%1 belongs to %2 - %3",_keyName,_vehicleName,_finalID] call dayz_rollingMessages; + }; + } else { + format["%1 - Vehicle ID: %2 - (This vehicle no longer exists in the database)",_keyName,_finalID] call dayz_rollingMessages; + }; + }; + + if (_showMapMarker) then { + "Map markers added. Run this again to remove them." call dayz_rollingMessages; + }; + } else { + _i=0; + for "_i" from 0 to 10 do {deleteMarkerLocal ("locatorMarker"+ (str _i));}; + "Map markers removed" call dayz_rollingMessages; + }; +}; + +EAT_ModModeToggle = { + /* Below are the default ON/OFF toggles. Anything marked + true will turn on when you turn on AdminMode. + To make an option default ON change = false to = true. + To make an option default OFF change = true to = false. + */ + + if (isNil "EAT_AdminMode") then {EAT_AdminMode = true;} else {EAT_AdminMode = !EAT_AdminMode;}; + + // To disable an option for mods place a // in the front of the line below + // and change the initialization to false in the config at the top of this file + optionMenu = + { + toggleMenu = + [ + ["",true], + ["Toggle options:(current state)", [-1], "", -5, [["expression", ""]], "1", "0"], + [format["Fast Forward: %1",EAT_fastWalk],[0],"", -5, [["expression", 'EAT_fastWalk = [EAT_fastWalk,EAT_FastForwardToggle] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + [format["Fast Up: %1",EAT_fastUp],[0],"", -5, [["expression", 'EAT_fastUp = [EAT_fastUp,EAT_FastUpToggle] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + [format["Player ESP: %1",EAT_playerESPMode], [0], "", -5, [["expression", 'if (EAT_playerESPMode) then {EAT_playerESPMode = false; EATplayerESP = false;} else {EAT_playerESPMode = [EAT_playerESPMode,EAT_PlayerESP] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["Invisibility ON: %1",EAT_invisibility], [0], "", -5, [["expression", 'EAT_invisibility = [EAT_invisibility,EAT_AdminInvisible] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + [format["Infinite Ammo: %1",EAT_infAmmo], [0], "", -5, [["expression", 'if (EAT_infAmmo) then {EAT_infAmmo = false; EATinfiniteAmmo = false;} else {EAT_infAmmo = [EAT_infAmmo,EAT_InfiniteAmmo] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["God Mode: %1",EAT_playerGod], [0], "", -5, [["expression", 'if (EAT_playerGod) then {EAT_playerGod = false; EATplayerGod = false;} else {EAT_playerGod = [EAT_playerGod,EAT_GodMode] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["Car God Mode: %1",EAT_vehicleGod], [0], "", -5, [["expression", 'if (EAT_vehicleGod) then {EAT_vehicleGod = false; EATvehicleGod = false;} else {EAT_vehicleGod = [EAT_vehicleGod,EAT_VehGod] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["Zombie Shield: %1",EAT_ZombieShield], [0], "", -5, [["expression", 'if (EAT_ZombieShield) then {EAT_ZombieShield = false; EAT_SheildMe = false;} else {EAT_ZombieShield = [EAT_ZombieShield,EAT_ZomShield] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["Grass Off: %1",EAT_grassOff], [0], "", -5, [["expression", 'EAT_grassOff = [EAT_grassOff,EAT_GrassOffToggle] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + ["", [], "", -5, [["expression", ""]], "1", "0"], + ["Exit", [0], "", -5, [["expression", ""]], "1", "1"] + ]; + showCommandingMenu "#USER:toggleMenu"; + }; + + if(EAT_AdminMode) then { + "***Press F4 to toggle ModMode options***" call dayz_rollingMessages; + ["ModMode"] call EAT_Keybind; + call EAT_AdminToggleOn; + } else{ + "Mod Mode - DISABLED" call dayz_rollingMessages; + ["EndModMode"] call EAT_Keybind; + call EAT_AdminToggleOff; + }; +}; + +EAT_PlayerESP = { + setGroupIconsVisible [true, true]; + #define COLOR_GREEN [0,1,0,1] + #define COLOR_BLUE [0,0,1,1] + #define COLOR_WHITE [1, 1, 1, 1] + #define COLOR_ORANGE [1,0.3,0,1] + #define COLOR_RED [1,0,0,1] + + if (!("ItemGPS" in items player)) then {player addWeapon "ItemGPS";}; + + EATplayerESP = _this select 0; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has player ESP",name player,getPlayerUID player] call EAT_Logger;}; + + [] spawn { + private ["_color","_crew","_vehname","_i","_crewtotal"]; + _color = ""; + while {EATplayerESP} do + { + { + if (vehicle _x == _x) then { + clearGroupIcons group _x; + group _x addGroupIcon ["x_art"]; + + if ((side _x == side player) && (side player != resistance)) then { + _color = COLOR_RED; + } else { + _color = COLOR_ORANGE; + }; + group _x setGroupIconParams [_color, format ["[%1]-[%2m]",name _x,round(_x distance player)], 0.5, true]; + + } else { + clearGroupIcons group _x; + group _x addGroupIcon ["x_art"]; + + _vehname = (getText (configFile >> 'CfgVehicles' >> (typeof vehicle _x) >> 'displayName')); + + _crewtotal = (crew (vehicle _x)); + _crew = (name (crew (vehicle _x) select 0)); + _i = 1; + + { + if(_i != 1) then { + _crew = _crew + ", " + (name _x); + }; + + _i = _i + 1; + + } forEach _crewtotal; + + if ((side _x == side player) && (side player != resistance)) then { + _color = COLOR_BLUE; + } else { + _color = COLOR_RED; + }; + + group _x setGroupIconParams [_color, format ["[%2]-[%3%4%5%6%7%8%9%10%11]-[%1m]",round(_x distance player),_vehname,_crew], 0.5, true]; + + }; + } forEach playableUnits; + sleep 1; + }; + {clearGroupIcons group _x;} forEach playableUnits; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has DISABLED player ESP",name player,getPlayerUID player] call EAT_Logger;}; + }; +}; + +EAT_GodMode = { + /* + Heals all damage and makes the user invincible to damage by everything + excluding antihack killing a hacker. + */ + private["_player","_vehicle"]; + EATplayerGod = _this select 0; + _player = player; + + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has _player god mode",name _player,getPlayerUID _player] call EAT_Logger;}; + + fnc_usec_unconscious = {}; + _player removeAllEventHandlers "handleDamage"; + _player addEventHandler ["handleDamage", { false }]; + _player allowDamage false; + r_player_unconscious = false; + r_player_injured = false; + r_fracture_legs = false; + r_fracture_arms = false; + r_player_timeout = 0; + dayz_sourceBleeding = objNull; + disableUserInput false; + _player setVariable ["USEC_injured",false,true]; + {_player setVariable[_x,false,true];} forEach USEC_woundHit; + _player setVariable ["unconsciousTime", r_player_timeout, true]; + _player setHit ["body",0]; + _player setHit ["hands",0]; + _player setHit ["legs",0]; + _player setVariable['medForceUpdate',true,true]; + + [_player] spawn { + private "_player"; + _player = _this select 0; + + while {EATplayerGod} do { + dayz_hunger = 0; + dayz_thirst = 0; + dayz_temperatur = 36; + r_player_infected = false; + fnc_usec_damageHandler = {}; + player_zombieCheck = {}; + r_player_inpain = false; + r_player_blood = 11999; + uiSleep 0.3; + }; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has DISABLED _player god mode",name _player,getPlayerUID _player] call EAT_Logger;}; + + player_zombieCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieCheck.sqf"; + fnc_usec_damageHandler = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandler.sqf"; + fnc_usec_unconscious = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_unconscious.sqf"; + _player removeAllEventHandlers "handleDamage"; + _player addEventHandler ["handleDamage", {true}]; + }; +}; + +EAT_VehGod = { + /* + Air vehicles will explode if hit with a rocket or when crashing. + */ + EATvehicleGod = _this select 0; + + if(EAT_logMajorTool) then {format["%1 %2 -- has vehicle god mode",name player,getPlayerUID player] call EAT_Logger;}; + + [] spawn { + private "_vehicle"; + while{EATvehicleGod} do + { + + _vehicle = (vehicle player); + if (_vehicle != player) then { + _vehicle setFuel 1; + _vehicle setDamage 0; + }; + uiSleep 0.1; + }; + + if(EAT_logMajorTool) then {format["%1 %2 -- has DISABLED vehicle god mode",name player,getPlayerUID player] call EAT_Logger;}; + }; +}; + +EAT_InfiniteAmmo = { + + EATinfiniteAmmo = _this select 0; + + if (EAT_logMajorTool) then {format["%1 %2 -- has turned ON infinite ammo",name player,getPlayerUID player] call EAT_Logger;}; + + [] spawn { + while {EATinfiniteAmmo} do + { + vehicle player setVehicleAmmo 1; + vehicle player setUnitRecoilCoefficient 0; + uiSleep 0.1; + }; + vehicle player setUnitRecoilCoefficient 1; + + if(EAT_logMajorTool) then {format["%1 %2 -- has turned OFF infinite ammo",name player,getPlayerUID player] call EAT_Logger;}; + }; +}; + +EAT_ZomShield = { + EAT_SheildMe = _this select 0; + + if(EAT_logMinorTool) then {format["%1 %2 -- has zombie shield",name player,getPlayerUID player] call EAT_Logger;}; + + [] spawn { + private["_pos","_zombies"]; + while {EAT_SheildMe} do + { + _pos = getPos player; + _zombies = _pos nearEntities ["zZombie_Base",30]; + { + deleteVehicle _x; + } forEach _zombies; + }; + + if(EAT_logMinorTool) then {format["%1 %2 -- has disabled zombie shield",name player,getPlayerUID player] call EAT_Logger;}; + }; +}; + +EAT_TeleportToggle = { + private ["_done","_location","_locOK","_pos","_worked"]; + if (!("ItemGPS" in items player)) then {player addweapon "ItemGPS";}; + _done = false; + _locOK = true; + _worked = false; + + EAT_teleport = { + _pos = [_this select 0, _this select 1,_this select 2]; + + if ((vehicle player) isKindOf "Air" && isEngineOn (vehicle player) && (speed (vehicle player)) > 20) then{ + (vehicle player) setpos [_pos select 0, _pos select 1, 1000]; + player setVariable["lastPos",0, true]; + _worked = true; + } else { + if ((vehicle player) != player && !((vehicle player) isKindOf "Ship")) then { + _location = [_pos select 0, _pos select 1] findEmptyPosition [0,10]; + if (count _location < 1) then { + "Unable to teleport here." call dayz_rollingMessages; + } else { + (vehicle player) setpos _location; + _worked = true; + }; + } else { + (vehicle player) setpos [_pos select 0, _pos select 1, 0]; + _worked = true; + }; + }; + + openMap [false, false]; + TitleText [format[""], "PLAIN DOWN"]; + _done = true; + + if(_worked) then { + if(EAT_logMajorTool) then {format["%1 %2 -- has teleported",name player,getPlayerUID player] call EAT_Logger;}; + }; + }; + + closeDialog 0; + uiSleep 0.5; + "Click on the map to Teleport" call dayz_rollingMessages; + + if(!(visibleMap)) then { + openMap [true, false]; + }; + + onMapSingleClick '[_pos select 0, _pos select 1, _pos select 2] call EAT_teleport'; + waitUntil{_done || !(visibleMap)}; + onMapSingleClick ""; +}; + +EAT_TpToPlayer = { + private["_max","_j","_menuCheckOk"]; + _menuCheckOk = false; _max = 10; _j = 0; + snext = false; plist = []; pselect5 = ""; + + {if ((_x != player) && (getPlayerUID _x != "")) then {plist set [count plist, name _x];};} forEach entities "CAManBase"; + {if ((count crew _x) > 0) then {{if ((_x != player) && (getPlayerUID _x != "")) then {plist set [count plist, name _x];};} forEach crew _x;};} foreach (entities "LandVehicle" + entities "Air" + entities "Ship"); + + EAT_pMenuTitle = "Teleport to Player:"; + + while {pselect5 == "" && !_menuCheckOk} do + { + [_j, (_j + _max) min (count plist)] call EAT_fnc_playerSelect; _j = _j + _max; + WaitUntil {pselect5 != "" || snext || commandingMenu == ""}; + _menuCheckOk = (commandingMenu == ""); + snext = false; + }; + + if (pselect5 != "exit" && pselect5 != "") then + { + _name = pselect5; + + { + scopeName "fn_tpToPlayer"; + if(name _x == _name) then { + format["Teleporting to %1", _name] call dayz_rollingMessages; + (vehicle player) attachTo [_x, [2, 2, 0]]; + uiSleep 0.25; + detach (vehicle player); + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has teleported to %3_%4",name player,getPlayerUID player,_name,_x] call EAT_Logger;}; + breakOut "fn_tpToPlayer"; + }; + } forEach entities "CAManBase"; + }; +}; + + + +// Toggles Individual Functions on and off +EAT_ScriptToggle = { + private ["_toggle","_function"]; + _toggle = _this select 0; + _function = _this select 1; + _toggle = !_toggle; + [_toggle] call _function; + _toggle +}; + +// Sends function usage info to server for logging +EAT_Logger = { + EAT_PVEH_usageLogger = _this; + publicVariableServer "EAT_PVEH_usageLogger"; +}; + +// Turns default admin mode functions on. EAT_AdminMode = true +EAT_AdminToggleOn = { + if (EAT_fastWalk) then {[EAT_AdminMode] call EAT_FastForwardToggle;}; + if (EAT_fastUp) then {[EAT_AdminMode] call EAT_FastUpToggle;}; + if (EAT_playerESPMode) then {[EAT_AdminMode] call EAT_PlayerESP;}; + if (EAT_invisibility) then {[EAT_AdminMode] call EAT_AdminInvisible;}; + if (EAT_infAmmo) then {[EAT_AdminMode] call EAT_InfiniteAmmo;}; + if (EAT_playerGod) then {[EAT_AdminMode] call EAT_GodMode;}; + if (EAT_vehicleGod) then {[EAT_AdminMode] call EAT_VehGod;}; + if (EAT_ZombieShield) then {[EAT_AdminMode] call EAT_ZomShield;}; + if (EAT_grassOff) then {[EAT_AdminMode] call EAT_GrassOffToggle;}; +}; + +// Turns default admin mode functions off if they are on. EAT_AdminMode = false +// Scripts that run on a loop to do not need to be run again. The control variable just needs to be set to false for the script to stop +EAT_AdminToggleOff = { + if (EAT_fastWalk) then {[EAT_AdminMode] call EAT_FastForwardToggle;}; + if (EAT_fastUp) then {[EAT_AdminMode] call EAT_FastUpToggle;}; + if (EAT_playerESPMode) then {EATplayerESP = false;}; + if (EAT_invisibility) then {[EAT_AdminMode] call EAT_AdminInvisible;}; + if (EAT_infAmmo) then {EATinfiniteAmmo = false;}; + if (EAT_playerGod) then {EATplayerGod = false;}; + if (EAT_vehicleGod) then {EATvehicleGod = false;}; + if (EAT_ZombieShield) then {EAT_SheildMe = false;}; + if (EAT_grassOff) then {[EAT_AdminMode] call EAT_GrassOffToggle;}; +}; + +// This last section compiles all of the vehicles used in the vehicle spawner into arrays so there is no delay when loading the graphical menu. +// Do not alter this code. +EAT_allEpochVehList = []; +local _filter = ["SUV_TK_CIV_EP1","SUV_TK_EP1","SUV_UN_EP1","SUV_PMC","ArmoredSUV_PMC","SUV_PMC_BAF"]; +local _cfgvehicles = configFile >> "cfgVehicles"; +local _vehicle = objNull; +local _image = ""; +local _text = ""; +local _type = ""; + +for "_i" from 0 to ((count _cfgvehicles) - 1) do { + _vehicle = _cfgvehicles select _i; + if (isClass _vehicle) then { + _type = configName(_vehicle); + if ((getNumber(_vehicle >> "scope") == 2) && {getText (_vehicle >> "picture") != ""} && {_type isKindOf "AllVehicles"} && {!(["Parachute",_type] call fnc_inString)} && {!(_type isKindOf "CAManBase")}) then { + if (["_DZ",_type] call fnc_inString || {["SUV_",_type] call fnc_inString} || {["JetSki",_type] call fnc_inString}) then { + if !(_type in _filter) then { + _text = getText(configFile >> "cfgVehicles" >> _type >> "displayName"); + _image = (getText (configFile >> "CfgVehicles" >> _type >> "picture")); + EAT_allEpochVehList set [count EAT_allEpochVehList,[_type, _text, _image]]; + }; + }; + }; + }; +}; + +diag_log "Admin Tools: Moderator Functions Loaded"; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Mod/main.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Mod/main.sqf new file mode 100755 index 0000000..cd022fa --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/Mod/main.sqf @@ -0,0 +1,151 @@ +EAT_ToolsMain = { + + // Main menu + if(isNil "EAT_mainMenu") then { + EAT_mainMenu = [["",true],["-- Epoch Admin Tools (Level: Mod) --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_mainMenu = EAT_mainMenu + [["Mod Menu >>", [], "#USER:EAT_modMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_mainMenu = EAT_mainMenu + [["Vehicle Menu >>",[],"#USER:EAT_vehicleMenu",-5,[["expression",""]],"1","1"]]; + EAT_mainMenu = EAT_mainMenu + [["Weapon/Item Kits >>", [], "#USER:EAT_weaponMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_mainMenu = EAT_mainMenu + [["Teleport Menu >>",[],"#USER:EAT_teleportMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_mainMenu = EAT_mainMenu + [["Skin Change Menu >>", [], "#USER:EAT_skinMenu", -5, [["expression", ""]], "1", "1"]]; + //if(EAT_ActionMenuPlayers && EAT_AllowContactAdmin)then{EAT_mainMenu = EAT_mainMenu + [["Player Ticket Menu >>", [], "", -5, [["expression", format[_EXECgenTools,"contactAdminTickets.sqf"]]], "1", "1"]];}; + EAT_mainMenu = EAT_mainMenu + [["", [], "", -5, [["expression", ""]], "1", "0"], ["Exit", [20], "", -5, [["expression", ""]], "1", "1"]]; + + + // Mod only menu + EAT_modMenu = [["",true]]; + EAT_modMenu = EAT_modMenu + [["-- Moderator's Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_modMenu = EAT_modMenu + [["Mod Mode (F4 for options)",[],"", -5,[["expression","[] spawn EAT_ModModeToggle;"]],"1","1"]]; + EAT_modMenu = EAT_modMenu + [["Point to Repair",[],"", -5,[["expression","call EAT_Repair;"]], "1", "1"]]; + EAT_modMenu = EAT_modMenu + [["Point to Delete",[],"", -5,[["expression","[] spawn EAT_DeleteObj;"]],"1","1"]]; + EAT_modMenu = EAT_modMenu + [["Spectate player (F6 to cancel)",[],"", -5,[["expression","[] spawn EAT_Spectate;"]], "1", "1"]]; + EAT_modMenu = EAT_modMenu + [["Heal Players",[],"", -5, [["expression","[] spawn EAT_HealPlayer;"]], "1", "1"]]; + EAT_modMenu = EAT_modMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_modMenu = EAT_modMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + + // Main vehicle selection menu + EAT_vehicleMenu = [["",true]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["-- Vehicle Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["Graphical Vehicle Menu", [],"", -5, [["expression", "[] spawn EAT_AddVehDialog;"]], "1", "1"]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["Vehicle Tools >>", [], "#USER:EAT_vehicleTools", -5, [["expression", ""]], "1", "1"]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Different tools for working with vehicles + EAT_vehicleTools = [["",true]]; + EAT_vehicleTools = EAT_vehicleTools + [["-- Vehicle Tools --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Vehicle Locater",[],"",-5,[["expression", "call EAT_locateVeh;"]], "1", "1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Recover Vehicle Key",[],"",-5,[["expression", "call EAT_RecoverKey;"]], "1", "1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Point to Repair", [],"", -5, [["expression", "call EAT_Repair;"]], "1", "1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Point to Delete",[],"",-5,[["expression","[] spawn EAT_DeleteObj;"]],"1","1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Flip Vehicle", [],"", -5, [["expression", "call EAT_flipVeh;"]], "1", "1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Menu for teleport options + // teleport to place Example: ["Name",[],"", -5, [["expression", '[x,y,z] execVM "admintools\tools\Teleport\teleportToLocation.sqf"']], "1", "1"]]; + EAT_teleportMenu = [["",true]]; + EAT_teleportMenu = EAT_teleportMenu + [["-- Teleport Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_teleportMenu = EAT_teleportMenu + [["Teleport (T Key)",[],"", -5,[["expression", "[] spawn EAT_TeleportToggle;"]], "1", "1"]]; + // EAT_teleportMenu = EAT_teleportMenu + [["Teleport To Me",[],"", -5, [["expression", "[] spawn EAT_TPtoMe;"]], "1", "1"]]; + EAT_teleportMenu = EAT_teleportMenu + [["Teleport To Player",[],"", -5, [["expression", "[] spawn EAT_TpToPlayer;"]], "1", "1"]]; + // EAT_teleportMenu = EAT_teleportMenu + [["Return Player to Last Pos",[],"", -5, [["expression", "[] spawn EAT_ReturnPlayerTP;"]], "1", "1"]]; + EAT_teleportMenu = EAT_teleportMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_teleportMenu = EAT_teleportMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Menu for changing skins. + // Entry Format:["Entry Name",[],"",-5,[["expression",'["Skin_class_name"] execVM "admintools\tools\skinChanger.sqf"']],"1","1"]]; + EAT_skinMenu = [["",true]]; + EAT_skinMenu = EAT_skinMenu + [["-- Skin Menu (Page 1)", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_skinMenu = EAT_skinMenu + [["Survivor",[],"",-5,[["expression",'["Survivor2_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Hero",[],"",-5,[["expression",'["Survivor3_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Bandit",[],"",-5,[["expression",'["Bandit1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Soldier",[],"",-5,[["expression",'["Soldier1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Ghillie",[],"",-5,[["expression",'["Sniper1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Special Forces",[],"",-5,[["expression",'["CZ_Special_Forces_GL_DES_EP1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Pilot",[],"",-5,[["expression",'["CZ_Special_Forces_GL_DES_EP1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_skinMenu = EAT_skinMenu + [["Next page >", [], "#USER:EAT_skinMenu2", -5, [["expression", ""]], "1", "1"]]; + + // Menu2 for changing skins. + EAT_skinMenu2 = [["",true]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["-- Skin Menu (Page 2)", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Camo",[],"",-5,[["expression",'["Camo1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Bodyguard",[],"",-5,[["expression",'["Soldier_Bodyguard_AA12_PMC_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Officer",[],"",-5,[["expression",'["Rocket_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Alejandria",[],"",-5,[["expression",'["SurvivorWcombat_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Savannah",[],"",-5,[["expression",'["SurvivorWdesert_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Melly",[],"",-5,[["expression",'["SurvivorWpink_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Bandit Jane",[],"",-5,[["expression",'["BanditW2_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + //EAT_skinMenu2 = EAT_skinMenu2 + [["Invisible",[],"",-5,[["expression",'["Survivor1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["< Back", [], "#USER:EAT_skinMenu", -5, [["expression", ""]], "1", "1"]]; + + // Weapon menu select + EAT_weaponMenu = [["",true]]; + EAT_weaponMenu = EAT_weaponMenu + [["-- Weapons Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Admin/Mod Loadouts >>",[],"#USER:EAT_adminLoadoutsMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Primary Weapons Menu >>",[],"#USER:EAT_primaryWeaponMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Secondary Weapons Menu >>",[],"#USER:EAT_secondaryWeaponMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Gear/Items Menu >>",[],"#USER:EAT_gearMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Delete all gear", [],"", -5, [["expression","call EAT_RemoveGear;"]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Main weapons like the M4 + // Entry Format:["Name", [],"", -5, [["expression", format[_EXECweapons,"Gun_Calss_Name","Ammo_Class_Name","Explosive_Round_Class_Name"]]], "1", "1"]]; + // If there is no explosive 203 round then put "nil" in place of "Explosive_Round_Class_Name" + EAT_primaryWeaponMenu = [["",true]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["-- Primary Weapons --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["M4 Holo", [],"", -5, [["expression",'["M4A1_HWS_GL_camo","30Rnd_556x45_Stanag","1Rnd_HE_M203"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["M4A1_DZ GL SD Camo", [],"", -5, [["expression",'["M4A1_HWS_GL_SD_Camo","30Rnd_556x45_StanagSD","1Rnd_HE_M203"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["Sa58V ACOG", [],"", -5, [["expression",'["Sa58V_RCO_EP1","30Rnd_762x39_SA58"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["AKM Kobra", [],"", -5, [["expression",'["AKM_Kobra_DZ","30Rnd_762x39_AK47"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["FN FAL", [],"", -5, [["expression",'["FNFAL_CCO_DZ","20Rnd_762x51_FNFAL"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["Mk 48", [],"", -5, [["expression",'["Mk48_CCO_DZ","100Rnd_762x51_M240"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["MK14 Sniper SD", [],"", -5, [["expression",'["MK14_Sniper_SD_DZ","20Rnd_762x51_DMRSD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [[".338 LAPUA", [],"", -5, [["expression",'["L115A3_2_DZ","5Rnd_86x70_L115A1"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["DMR_DZ", [],"", -5, [["expression",'["DMR_DZ","20Rnd_762x51_DMR"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["Secondary Weapons", [], "#USER:EAT_secondaryWeaponMenu", -5, [["expression", ""]], "1", "1"]]; + + // Sidearm weapons like the Makarov + EAT_secondaryWeaponMenu = [["",true]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["-- Secondary Weapons --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["PDW SD", [],"", -5, [["expression",'["UZI_SD_EP1","30Rnd_9x19_UZI_SD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["PDW", [],"", -5, [["expression",'["PDW_DZ","30Rnd_9x19_UZI"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["M9 SD Camo", [],"", -5, [["expression",'["M9_Camo_SD_DZ","15Rnd_9x19_M9SD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["M9_DZ SD", [],"", -5, [["expression",'["M9_SD_DZ","15Rnd_9x19_M9SD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["Makarov_DZ", [],"", -5, [["expression",'["Makarov_DZ","8Rnd_9x18_Makarov"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["Makarov_DZ SD", [],"", -5, [["expression",'["Makarov_SD_DZ","8Rnd_9x18_Makarov"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["Gear/Items", [], "#USER:EAT_gearMenu", -5, [["expression", ""]], "1", "1"]]; + + // Menu for spawning items to the admin like bags and tools + EAT_gearMenu = [["",true]]; + EAT_gearMenu = EAT_gearMenu + [["-- Gear Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_gearMenu = EAT_gearMenu + [["ToolBelt gear", [],"", -5, [["expression","call EAT_AddTools;"]], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["Medical gear", [],"", -5, [["expression","call EAT_AddMeds;"]], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["Alice Pack", [],"", -5, [["expression",'["ALICE_Pack_DZE2"] call EAT_AddBackPack;']], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["Coyote Pack", [],"", -5, [["expression",'["CoyoteBackpack_DZE2"] call EAT_AddBackPack;']], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["Large Gun Bag", [],"", -5, [["expression",'["LargeGunBag_DZE2"] call EAT_AddBackPack;']], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_gearMenu = EAT_gearMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + EAT_adminLoadoutsMenu = + [ + ["",true], + ["-- Admin Loadout Menu --", [], "", -5, [["expression", ""]], "1", "0"], + ["DMR",[],"",-5,[["expression", "['DMR_DZ','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["Lapua",[],"",-5,[["expression", "['BAF_LRR_scoped','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["Mk48 CCO",[],"",-5,[["expression", "['Mk48_CCO_DZ','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["MK14 Sniper SD",[],"",-5,[["expression", "['MK14_Sniper_SD_DZ','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["FN FAL CCO",[],"",-5,[["expression", "['FNFAL_CCO_DZ','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["Sa58 ACOG",[],"",-5,[["expression", "['Sa58V_RCO_EP1','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["", [], "", -5, [["expression", ""]], "1", "0"], + ["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"] + ]; + }; + showCommandingMenu "#USER:EAT_mainMenu"; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/ServerFunctions/aiSpawn.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/ServerFunctions/aiSpawn.sqf new file mode 100755 index 0000000..c55202f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/ServerFunctions/aiSpawn.sqf @@ -0,0 +1,118 @@ +private ["_aiMag","_aiWeapon","_aiAssault","_aiMachine","_aiSniper","_aiRandomWep","_aiWepAndMag","_aiPosition","_divisor","_playerUID","_clientKey","_playerPos","_activatingPlayer","_exitReason","_aiArea","_aiCount","_unitGroup","_unit","_deadai","_killer"]; + +//_activatingPlayer = _this select 0; +//_params = _this select 1; +//_clientKey = _this select 2; +EAT_BanditorHero = _params select 0; +_aiArea = _params select 1; +_aiCount = _params select 2; +_divisor = _params select 3; +_aiPosition = _params select 4; +_playerPos = _params select 6; +//_playerUID = getPlayerUID _activatingPlayer; + + +_exitReason = [_this,"EAT_AiSpawn",_playerPos,_clientKey,_playerUID,_activatingPlayer] call server_verifySender; +if (_exitReason != "") exitWith {diag_log _exitReason}; + +#define AI_SKILL [["aimingAccuracy",0.60],["aimingShake",0.60],["aimingSpeed",0.60],["endurance",1.00],["spotDistance",0.60],["spotTime",0.60],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00]] +#define AI_ITEMS ["ItemBandage","ItemAntibiotic","ItemPainkiller","ItemAntibacterialWipe","ItemMorphine","ItemEpinephrine","FoodCanBakedBeans","FoodCanPotatoes","ItemSodaMtngreen","ItemSodaLemonade"] +#define AI_BAG ["DZ_Czech_Vest_Pouch","DZ_ALICE_Pack_EP1","DZ_TK_Assault_Pack_EP1","DZ_British_ACU","DZ_GunBag_EP1","DZ_CivilBackpack_EP1","DZ_Backpack_EP1","DZ_LargeGunBag_EP1"] +#define BANDIT_SKIN ["Ins_Soldier_GL_DZ","TK_INS_Soldier_EP1_DZ","TK_INS_Warlord_EP1_DZ","GUE_Commander_DZ","GUE_Soldier_Sniper_DZ","GUE_Soldier_MG_DZ","GUE_Soldier_Crew_DZ","GUE_Soldier_2_DZ","GUE_Soldier_CO_DZ","BanditW1_DZ","BanditW2_DZ","Bandit1_DZ","Bandit2_DZ"] +#define HERO_SKIN ["Soldier_Sniper_PMC_DZ","FR_OHara_DZ","Soldier_Bodyguard_AA12_PMC_DZ","FR_R_DZ","FR_Sapper_DZ","FR_Marksman_DZ","FR_Assault_R_DZ","UN_CDF_Soldier_Guard_EP1_DZ","UN_CDF_Soldier_EP1_DZ","BAF_Soldier_N_MTP_DZ"] +#define AI_TOOLS ["ItemKnife","ItemMap","ItemMatchbox","ItemHatchet","ItemToolbox","ItemCrowbar"] +_aiAssault = [["M16A4_ACOG_DZ","30Rnd_556x45_Stanag"],["Sa58V_RCO_EP1","30Rnd_762x39_AK47"],["SCAR_L_STD_Mk4CQT","30Rnd_556x45_Stanag"],["M8_sharpshooter","30Rnd_556x45_Stanag"],["M4A1_Holo_MFL_DZ","30Rnd_556x45_Stanag"],["SCAR_L_STD_HOLO","30Rnd_556x45_Stanag"],["M4A1_CCO_DZ","30Rnd_556x45_Stanag"],["G36C_ACOG_DZ","30Rnd_556x45_G36"],["AKM_Kobra_DZ","30Rnd_762x39_AK47"],["SA58_Holo_DZ","30Rnd_762x39_SA58"],["m8_carbine","30Rnd_556x45_Stanag"],["L85A2_CCO_FL_DZ","30Rnd_556x45_Stanag"],["AK74_GL_PSO1_DZ","30Rnd_545x39_AK"]]; +_aiMachine = [["RPK74_Kobra_DZ","75Rnd_545x39_RPK"],["Mk48_CCO_DZ","100Rnd_762x51_M240"],["M249_DZ","200Rnd_556x45_M249"],["Pecheneg_DZ","100Rnd_762x54_PK"],["M240_DZ","100Rnd_762x51_M240"]]; +_aiSniper = [["M14_Holo_DZ","20Rnd_762x51_DMR"],["SCAR_H_LNG_Sniper_SD","20Rnd_762x51_SB_SCAR"],["M110_NVG_EP1","20rnd_762x51_B_SCAR"],["SVD_PSO1_Gh_DZ","10Rnd_762x54_SVD"],["VSS_Vintorez","20Rnd_9x39_SP5_VSS"],["DMR_DZ","20Rnd_762x51_DMR"],["M40A3_DZ","5Rnd_762x51_M24"]]; +_aiRandomWep = [_aiAssault,_aiAssault,_aiAssault,_aiSniper,_aiMachine]; +_aiWepAndMag = (_aiRandomWep call BIS_fnc_selectRandom) call BIS_fnc_selectRandom; +_aiWeapon = _aiWepAndMag select 0; +_aiMag = _aiWepAndMag select 1; + +EAT_unitWaypoints = { + private ["_wp","_pos_x","_pos_y","_pos_z","_unitGroup","_position","_waypoint"]; + + _unitGroup = _this select 0; + _position = _this select 1; + _pos_x = _position select 0; + _pos_y = _position select 1; + _pos_z = _position select 2; + _waypoint = _this select 2; + + { + _wp = _unitGroup addWaypoint [_x,10]; + _wp setWaypointType "MOVE"; + + } count [[_pos_x,(_pos_y+_waypoint),0],[(_pos_x+_waypoint),_pos_y,0],[_pos_x,(_pos_y-_waypoint),0],[(_pos_x-_waypoint),_pos_y,0]]; + + _wp = _unitGroup addWaypoint [[_pos_x,_pos_y,0],_waypoint]; + _wp setWaypointType "CYCLE"; +}; + +_unitGroup = createGroup EAST; + +for "_x" from 1 to (_aiCount/_divisor) do { + if (EAT_BanditorHero == "Hero") then { + _unit = _unitGroup createUnit [(HERO_SKIN call BIS_fnc_selectRandom),_aiPosition,[],(_aiArea/2),"CAN COLLIDE"]; + } else { + _unit = _unitGroup createUnit [(BANDIT_SKIN call BIS_fnc_selectRandom),_aiPosition,[],(_aiArea/2),"CAN COLLIDE"]; + }; + [_unit] joinSilent _unitGroup; + //_unit setVariable ["Bandit",true]; + _unit enableAI "TARGET"; + _unit enableAI "AUTOTARGET"; + _unit enableAI "MOVE"; + _unit enableAI "ANIM"; + _unit enableAI "FSM"; + _unit setCombatMode "YELLOW"; + _unit setBehaviour "COMBAT"; + removeAllWeapons _unit; + removeAllItems _unit; + if (sunOrMoon != 1) then { + _unit addWeapon "NVGoggles"; + }; + _i = 0; + _j = 0; + + // Magazine count 3 + for "_i" from 1 to 3 do { + _unit addMagazine _aiMag; + }; + + _unit addWeapon _aiWeapon; + _unit selectWeapon _aiWeapon; + _unit addBackpack (AI_BAG call BIS_fnc_selectRandom); + _unit addWeapon (AI_TOOLS call BIS_fnc_selectRandom); + + for "_j" from 1 to 3 do { + _unit addMagazine (AI_ITEMS call BIS_fnc_selectRandom); + }; + + { + _unit setSkill [(_x select 0),(_x select 1)] + } count AI_SKILL; + + _unit addEventHandler ["Killed",{ + _deadai = _this select 0; + _killer = _this select 1; + _deadai setVariable ["bodyName","unknown",false]; + [_deadai,_killer] spawn { + private ["_humanity","_humankills","_banditkills","_player"]; + _player = _this select 1; + if (isPlayer _player) then { + _humanity = _player getVariable["humanity",0]; + if (EAT_BanditorHero == "Hero") then { + _humankills = _player getVariable["humanKills",0]; + _player setVariable ["humanKills",(_humankills + 1),true]; + _player setVariable ["humanity",(_humanity - EAT_HumanityGainLoss),true]; + } else { + _banditkills = _player getVariable ["banditKills", 0]; + _player setVariable ["banditKills",(_banditkills + 1),true]; + _player setVariable ["humanity",(_humanity + EAT_HumanityGainLoss),true]; + }; + }; + uiSleep EAT_aiDeleteTimer; deleteVehicle (_this select 0);};}]; +}; +_unitGroup setFormation "ECH LEFT"; +_unitGroup selectLeader ((units _unitGroup) select 0); +[_unitGroup, _aiPosition, _aiArea] spawn EAT_unitWaypoints; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/ServerFunctions/crateSpawn.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/ServerFunctions/crateSpawn.sqf new file mode 100755 index 0000000..ade9fa9 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/ServerFunctions/crateSpawn.sqf @@ -0,0 +1,195 @@ +private ["_playerUID","_clientKey","_worldspace","_activatingPlayer","_weapon","_key_colors","_wpn_type","_magazine","_mag_type"]; + +// Macros for repeatable code +#define CRATE_SETUP _spawnCrate = "DZ_AmmoBoxFlatUS" createVehicle _pos; _spawnCrate setDir _dir; _spawnCrate setposATL _pos; clearWeaponCargoGlobal _spawnCrate; clearMagazineCargoGlobal _spawnCrate; clearBackpackCargoGlobal _spawnCrate; +#define ADD_BACKPACK _spawnCrate addBackpackCargoGlobal ["LargeGunBag_DZE2", 1]; +#define ADD {_spawnCrate addMagazineCargoGlobal _x;} forEach +#define ADD_1X {_spawnCrate addWeaponCargoGlobal [_x, 1];} forEach +#define ADD_5X {_spawnCrate addWeaponCargoGlobal [_x, 5];} forEach + +// Backpack crate +#define BACKPACKS ["Patrol_Pack_DZE1","Patrol_Pack_DZE2","GymBag_Camo_DZE1","GymBag_Camo_DZE2","GymBag_Green_DZE1","GymBag_Green_DZE2","Czech_Vest_Pouch_DZE1","Czech_Vest_Pouch_DZE2","Assault_Pack_DZE1","Assault_Pack_DZE2","TerminalPack_DZE1","TerminalPack_DZE2","TinyPack_DZE1","TinyPack_DZE2","ALICE_Pack_DZE1","ALICE_Pack_DZE2","TK_Assault_Pack_DZE1","TK_Assault_Pack_DZE2","School_Bag_DZE1","School_Bag_DZE2","CompactPack_DZE1","CompactPack_DZE2","British_ACU_DZE1","British_ACU_DZE2","GunBag_DZE1","GunBag_DZE2","PartyPack_DZE1","PartyPack_DZE2","NightPack_DZE1","NightPack_DZE2","SurvivorPack_DZE1","SurvivorPack_DZE2","AirwavesPack_DZE1","AirwavesPack_DZE2","CzechBackpack_DZE1","CzechBackpack_DZE2","CzechBackpack_Camping_DZE1","CzechBackpack_Camping_DZE2","CzechBackpack_OD_DZE1","CzechBackpack_OD_DZE2","CzechBackpack_DES_DZE1","CzechBackpack_DES_DZE2","CzechBackpack_3DES_DZE1","CzechBackpack_3DES_DZE2","CzechBackpack_WDL_DZE1","CzechBackpack_WDL_DZE2","CzechBackpack_MAR_DZE1","CzechBackpack_MAR_DZE2","CzechBackpack_DMAR_DZE1","CzechBackpack_DMAR_DZE2","CzechBackpack_UCP_DZE1","CzechBackpack_UCP_DZE2","CzechBackpack_6DES_DZE1","CzechBackpack_6DES_DZE2","CzechBackpack_TAK_DZE1","CzechBackpack_TAK_DZE2","CzechBackpack_NVG_DZE1","CzechBackpack_NVG_DZE2","CzechBackpack_BLK_DZE1","CzechBackpack_BLK_DZE2","CzechBackpack_DPM_DZE1","CzechBackpack_DPM_DZE2","CzechBackpack_FIN_DZE1","CzechBackpack_FIN_DZE2","CzechBackpack_MTC_DZE1","CzechBackpack_MTC_DZE2","CzechBackpack_NOR_DZE1","CzechBackpack_NOR_DZE2","CzechBackpack_WIN_DZE1","CzechBackpack_WIN_DZE2","CzechBackpack_ATC_DZE1","CzechBackpack_ATC_DZE2","CzechBackpack_MTL_DZE1","CzechBackpack_MTL_DZE2","CzechBackpack_FTN_DZE1","CzechBackpack_FTN_DZE2","WandererBackpack_DZE1","WandererBackpack_DZE2","LegendBackpack_DZE1","LegendBackpack_DZE2","CoyoteBackpack_DZE1","CoyoteBackpack_DZE2","CoyoteBackpackDes_DZE1","CoyoteBackpackDes_DZE2","CoyoteBackpackWdl_DZE1","CoyoteBackpackWdl_DZE2","CoyoteBackpack_Camping_DZE1","CoyoteBackpack_Camping_DZE2","LargeGunBag_DZE1","LargeGunBag_DZE2"] + +// Items +//local _bloodbag = ["bloodBagONEG","ItemBloodbag"] select dayz_classicBloodBagSystem; +#define TOOLBELT ["Binocular","Binocular_Vector","ItemCompass","ItemCrowbar","ItemEtool","ItemFishingPole","ItemFlashlight","ItemFlashlightRed","ItemGPS","ItemHatchet","ItemKeyKit","ItemKnife","ItemMap","ItemMatchBox","ItemRadio","ItemSledge","ItemSledgeHammer","ItemToolbox","ItemWatch","NVGoggles","NVGoggles_DZE","ItemShovel","ItemPickaxe","ItemMachete","ItemAPSI_DZE","ItemPilotmask_DZE","ItemGasmask1_DZE","ItemGasmask2_DZE","ItemSolder_DZE","Cuffs_DZE","Hammer_DZE","Handsaw_DZE","Smartphone_DZE","Scissors_DZE","Screwdriver_DZE","Wrench_DZE"] + +// Building Crates +#define BUILDING_TOOLS ["ItemCrowbar","ItemEtool","ItemHatchet","ItemMatchBox","ItemSledge","ItemToolbox","ChainSaw"] +#define ADMIN_BUILD_CRATE [["plot_pole_kit", 10],["bulk_empty", 10],["bulk_ItemTankTrap", 20],["bulk_ItemWire", 10],["CinderBlocks", 30],["cinder_door_kit", 10],["cinder_garage_kit", 10],["full_cinder_wall_kit", 60],["glass_floor_kit", 8],["glass_floor_half_kit", 16],["glass_floor_quarter_kit", 32],["metal_floor_half_kit", 16],["metal_floor_quarter_kit", 32],["metal_floor4x_kit", 2],["metal_pillar_kit", 4],["half_cinder_wall_gap_kit", 4],["cinderwall_window_kit", 6],["cinderwall_window_locked_kit", 2],["cinder_door_frame_kit", 6],["cinder_door_kit_locked", 2],["cinder_door_hatch_kit", 4],["cinder_door_hatch_kit_locked", 2],["cinder_garage_frame_kit", 6],["cinder_garage_kit_locked", 1],["cinder_garage_top_open_frame_kit", 2],["cinder_garage_top_open_kit", 6],["cinder_garage_top_open_kit_locked", 1],["cinder_gate_frame_kit", 2],["cinder_gate_kit", 6],["cinder_gate_kit_locked", 1],["cinder_bunker_kit", 6],["cinder_bunker_kit_locked", 1],["metal_drawbridge_kit", 6],["metal_drawbridge_kit_locked", 1],["deer_stand_kit", 10],["desert_large_net_kit", 10],["desert_net_kit", 10],["forest_large_net_kit", 10],["forest_net_kit", 10],["fuel_pump_kit", 10],["ItemBurlap", 10],["ItemCanvas", 10],["ItemComboLock", 10],["ItemCorrugated", 10],["ItemFireBarrel_Kit", 10],["ItemFuelBarrelEmpty", 10],["ItemGenerator", 10],["ItemGunRackKit", 10],["ItemHotwireKit", 10],["ItemJerrycan", 10],["ItemLockbox", 10],["ItemPole", 10],["ItemSandbag", 50],["ItemSandbagExLarge", 20],["ItemSandbagExLarge5x", 20],["ItemSandbagLarge", 20],["ItemScaffoldingKit", 10],["BagFenceRound_DZ_kit",20],["ItemTankTrap", 10],["ItemTent", 5],["ItemDesertTent", 5],["ItemVault", 10],["ItemWire", 10],["ItemWoodFloor", 30],["ItemWoodFloorHalf", 30],["ItemWoodFloorQuarter", 30],["ItemWoodLadder", 30],["ItemWoodStairs", 10],["ItemWoodStairsSupport", 10],["ItemWoodWall", 30],["ItemWoodWallDoor", 10],["ItemWoodWallDoorLg", 10],["ItemWoodWallGarageDoor", 10],["ItemWoodWallGarageDoorLocked", 10],["ItemWoodWallLg", 30],["ItemWoodWallThird", 20],["ItemWoodWallWindow", 20],["ItemWoodWallWindowLg", 30],["ItemWoodWallWithDoor", 10],["ItemWoodWallwithDoorLg", 10],["ItemWoodWallWithDoorLgLocked", 10],["ItemWoodWallWithDoorLocked", 10],["door_frame_kit", 10],["door_kit", 10],["door_locked_kit", 10],["ItemWoodFloor4x", 10],["ItemWoodFloorStairs", 10],["ItemTriangleWoodFloor", 10],["ItemWoodHandRail", 16],["ItemWoodPillar", 16],["ItemTriangleWoodWall", 8],["ItemWoodOpenTopGarageDoor", 4],["ItemWoodOpenTopGarageDoor", 10],["ItemWoodOpenTopGarageDoorLocked", 10],["ItemWoodGateFrame", 4],["ItemWoodGate", 10],["ItemWoodGateLocked", 10],["light_pole_kit", 10],["m240_nest_kit", 5],["metal_floor_kit", 60],["metal_panel_kit", 20],["MortarBucket", 5],["outhouse_kit", 5],["park_bench_kit", 5],["PartGeneric", 30],["PartPlankPack", 30],["PartPlywoodPack", 30],["PartWoodLumber", 30],["PartWoodPile", 30],["PartWoodPlywood", 30],["rusty_gate_kit", 5],["sandbag_nest_kit", 30],["stick_fence_kit", 5],["storage_shed_kit", 10],["sun_shade_kit", 10],["wooden_shed_kit", 10],["wood_ramp_kit", 10],["wood_shack_kit", 10],["workbench_kit", 5]] +#define SM_CINDER_KIT [["plot_pole_kit", 1],["bulk_ItemTankTrap", 1],["ItemPole", 4],["bulk_ItemWire", 1],["CinderBlocks", 32],["MortarBucket", 8],["cinder_door_kit", 1],["cinder_garage_kit", 1],["full_cinder_wall_kit", 8],["half_cinder_wall_kit", 8],["metal_floor_kit", 8],["glass_floor_kit", 4],["glass_floor_half_kit", 8],["glass_floor_quarter_kit", 16],["metal_floor_half_kit", 8],["metal_floor_quarter_kit", 16],["metal_floor4x_kit", 2],["metal_pillar_kit", 4],["half_cinder_wall_gap_kit", 4],["cinderwall_window_kit", 4],["cinder_door_frame_kit", 4],["cinder_door_hatch_kit", 4],["cinder_garage_frame_kit", 2],["cinder_garage_top_open_frame_kit", 2],["cinder_gate_frame_kit", 2],["cinder_bunker_kit", 2],["metal_drawbridge_kit", 2],["ItemComboLock", 2],["bulk_ItemSandbag", 1],["ItemVault", 1],["ItemGunRackKit", 1],["workbench_kit", 1],["ItemWoodCrateKit",1],["ItemFireBarrel_Kit",1],["metal_panel_kit", 8],["ItemCorrugated",8],["ItemMixOil", 1],["ItemJerrycan", 1],["storage_shed_kit", 1],["light_pole_kit", 1]] +#define MD_CINDER_KIT [["plot_pole_kit", 1],["bulk_ItemTankTrap", 2],["ItemPole", 8],["bulk_ItemWire", 2],["CinderBlocks", 64],["MortarBucket", 16],["cinder_door_kit", 2],["cinder_garage_kit", 2],["full_cinder_wall_kit", 16],["half_cinder_wall_kit", 16],["metal_floor_kit", 16],["glass_floor_kit", 4],["glass_floor_half_kit", 8],["glass_floor_quarter_kit", 16],["metal_floor_half_kit", 8],["metal_floor_quarter_kit", 16],["metal_floor4x_kit", 2],["metal_pillar_kit", 4],["half_cinder_wall_gap_kit", 4],["cinderwall_window_kit", 4],["cinder_door_frame_kit", 4],["cinder_door_hatch_kit", 4],["cinder_garage_frame_kit", 2],["cinder_garage_top_open_frame_kit", 2],["cinder_gate_frame_kit", 2],["cinder_bunker_kit", 2],["metal_drawbridge_kit", 2],["ItemComboLock", 4],["bulk_ItemSandbag", 2],["ItemVault", 2],["ItemGunRackKit", 2],["workbench_kit", 1],["ItemWoodCrateKit",2],["ItemFireBarrel_Kit",1],["metal_panel_kit", 16],["ItemCorrugated",16],["ItemMixOil", 2],["ItemJerrycan", 1],["storage_shed_kit", 2],["light_pole_kit", 2]] +#define LG_CINDER_KIT [["plot_pole_kit", 1],["bulk_ItemTankTrap", 3],["ItemPole", 12],["bulk_ItemWire", 3],["CinderBlocks", 96],["MortarBucket", 24],["cinder_door_kit", 3],["cinder_garage_kit", 3],["full_cinder_wall_kit", 24],["half_cinder_wall_kit", 24],["metal_floor_kit", 24],["glass_floor_kit", 4],["glass_floor_half_kit", 8],["glass_floor_quarter_kit", 16],["metal_floor_half_kit", 8],["metal_floor_quarter_kit", 16],["metal_floor4x_kit", 2],["metal_pillar_kit", 4],["half_cinder_wall_gap_kit", 4],["cinderwall_window_kit", 4],["cinder_door_frame_kit", 4],["cinder_door_hatch_kit", 4],["cinder_garage_frame_kit", 2],["cinder_garage_top_open_frame_kit", 2],["cinder_gate_frame_kit", 2],["cinder_bunker_kit", 2],["metal_drawbridge_kit", 2],["ItemComboLock", 6],["bulk_ItemSandbag", 3],["ItemVault", 3],["ItemGunRackKit", 3],["workbench_kit", 1],["ItemWoodCrateKit",3],["ItemFireBarrel_Kit",1],["metal_panel_kit", 24],["ItemCorrugated",24],["ItemMixOil", 3],["ItemJerrycan", 1],["storage_shed_kit", 3],["light_pole_kit", 3]] +#define SM_WOOD_KIT [["ItemWoodFloor", 4],["ItemWoodFloorHalf", 4],["ItemWoodFloorQuarter", 4],["ItemWoodLadder", 2],["ItemWoodStairs", 2],["ItemWoodWallDoorLg", 1],["ItemWoodWallGarageDoor", 1],["ItemWoodWallLg", 4],["ItemWoodWallThird", 3],["ItemWoodWallWindowLg", 4],["ItemWoodWallwithDoorLg", 1],["ItemWoodFloorStairs", 1],["ItemTriangleWoodFloor", 2],["ItemWoodHandRail", 4],["ItemWoodPillar", 4],["ItemTriangleWoodWall", 2],["ItemWoodOpenTopGarageDoor", 1],["ItemWoodGateFrame", 1],["ItemComboLock", 2],["ItemLockbox", 1],["ItemGunRackKit", 1],["workbench_kit", 1],["ItemWoodCrateKit",1],["ItemFireBarrel_Kit",1],["ItemMixOil", 1],["ItemJerrycan", 1]] +#define MD_WOOD_KIT [["ItemWoodFloor", 8],["ItemWoodFloorHalf", 8],["ItemWoodFloorQuarter", 8],["ItemWoodLadder", 4],["ItemWoodStairs", 4],["ItemWoodWallDoorLg", 2],["ItemWoodWallGarageDoor", 2],["ItemWoodWallLg", 8],["ItemWoodWallThird", 6],["ItemWoodWallWindowLg", 8],["ItemWoodWallwithDoorLg", 2],["ItemWoodFloorStairs", 2],["ItemTriangleWoodFloor", 4],["ItemWoodHandRail", 8],["ItemWoodPillar", 8],["ItemTriangleWoodWall", 4],["ItemWoodOpenTopGarageDoor", 2],["ItemWoodGateFrame", 2],["ItemComboLock", 4],["ItemLockbox", 2],["ItemGunRackKit", 2],["workbench_kit", 1],["ItemWoodCrateKit",2],["ItemFireBarrel_Kit",1],["ItemMixOil", 2],["ItemJerrycan", 2]] +#define LG_WOOD_KIT [["ItemWoodFloor", 16],["ItemWoodFloorHalf", 16],["ItemWoodFloorQuarter", 16],["ItemWoodLadder", 6],["ItemWoodStairs", 6],["ItemWoodWallDoorLg", 3],["ItemWoodWallGarageDoor", 3],["ItemWoodWallLg", 16],["ItemWoodWallThird", 12],["ItemWoodWallWindowLg", 16],["ItemWoodWallwithDoorLg", 3],["ItemWoodFloorStairs", 4],["ItemTriangleWoodFloor", 8],["ItemWoodHandRail", 16],["ItemWoodPillar", 16],["ItemTriangleWoodWall", 8],["ItemWoodOpenTopGarageDoor", 4],["ItemWoodGateFrame", 4],["ItemComboLock", 6],["ItemVault", 1],["ItemGunRackKit", 3],["workbench_kit", 1],["ItemWoodCrateKit",3],["ItemFireBarrel_Kit",1],["ItemMixOil", 3],["ItemJerrycan", 3]] +#define VANILLA_KIT [["woodfence_foundation_kit", 10],["woodfence_frame_kit", 10],["woodfence_quaterpanel_kit", 10],["woodfence_halfpanel_kit", 10],["woodfence_thirdpanel_kit", 10],["woodfence_1_kit", 10],["woodfence_2_kit", 10],["woodfence_3_kit", 10],["woodfence_4_kit", 10],["woodfence_5_kit", 10],["woodfence_6_kit", 10],["woodfence_7_kit", 10],["metalfence_foundation_kit", 10],["metalfence_frame_kit", 10],["metalfence_halfpanel_kit", 10],["metalfence_thirdpanel_kit", 10],["metalfence_1_kit", 10],["metalfence_2_kit", 10],["metalfence_3_kit", 10],["metalfence_4_kit", 10],["metalfence_5_kit", 10],["metalfence_6_kit", 10],["metalfence_7_kit", 10],["woodfence_gate_foundation_kit", 10],["woodfence_gate_1_kit", 10],["woodfence_gate_2_kit", 10],["woodfence_gate_3_kit", 10],["woodfence_gate_4_kit", 10]]; + +// Epoch Weapons +#define EPOCH_WEPS ["AK74_Kobra_DZ","AK74_Kobra_SD_DZ","AK74_GL_Kobra_DZ","AK74_GL_Kobra_SD_DZ","AK74_DZ","AK74_SD_DZ","AK74_GL_DZ","AK74_GL_SD_DZ","AK74_PSO1_DZ","AK74_PSO1_SD_DZ","AK74_GL_PSO1_DZ","AK74_GL_PSO1_SD_DZ","AK107_Kobra_DZ","AK107_DZ","AK107_GL_DZ","AK107_PSO_DZ","AK107_GL_PSO_DZ","AK107_GL_Kobra_DZ","AN94_DZ","AN94_GL_DZ","AKS74U_Kobra_DZ","AKS74U_Kobra_SD_DZ","AKS74U_DZ","AKS74U_SD_DZ","AKM_DZ","AKM_Kobra_DZ","AKM_PSO1_DZ","AKS_Gold_DZ","AKS_Silver_DZ","AKS_DZ","RK95_DZ","RK95_SD_DZ","RK95_CCO_SD_DZ","RK95_ACOG_SD_DZ","RK95_CCO_DZ","RK95_ACOG_DZ","Groza9_DZ","Groza9_Sniper_DZ","Groza9_GL_DZ","Groza9_GL_Sniper_DZ","Groza9_SD_DZ","Groza9_Sniper_SD_DZ","Groza1_DZ","Groza1_Sniper_DZ","Groza1_SD_DZ","Groza1_Sniper_SD_DZ","SCAR_H_AK_DZ","SCAR_H_AK_CCO_DZ","SCAR_H_B_AK_CCO_DZ","SCAR_H_AK_HOLO_DZ","SCAR_H_AK_ACOG_DZ","RPK_DZ","RPK_Kobra_DZ","RPK_PSO1_DZ","DMR_DZ","DMR_SKN","DMR_Gh_DZ","DMR_DZE","DMR_Gh_DZE","RSASS_DZ","RSASS_TWS_DZ","RSASS_SD_DZ","RSASS_TWS_SD_DZ","FNFAL_DZ","FNFAL_CCO_DZ","FNFAL_Holo_DZ","FNFAL_ANPVS4_DZ","FN_FAL_ANPVS4_DZE","G3_DZ","G36K_Camo_DZ","G36K_Camo_SD_DZ","G36A_Camo_DZ","G36A_Camo_SD_DZ","G36C_DZ","G36C_SD_DZ","G36C_CCO_DZ","G36C_CCO_SD_DZ","G36C_Holo_DZ","G36C_Holo_SD_DZ","G36C_ACOG_DZ","G36C_ACOG_SD_DZ","G36C_Camo_DZ","G36C_Camo_Holo_SD_DZ","MG36_DZ","MG36_Camo_DZ","M4A1_DZ","M4A1_FL_DZ","M4A1_MFL_DZ","M4A1_SD_DZ","M4A1_SD_FL_DZ","M4A1_SD_MFL_DZ","M4A1_GL_DZ","M4A1_GL_FL_DZ","M4A1_GL_MFL_DZ","M4A1_GL_SD_DZ","M4A1_GL_SD_FL_DZ","M4A1_GL_SD_MFL_DZ","M4A1_CCO_DZ","M4A1_CCO_FL_DZ","M4A1_CCO_MFL_DZ","M4A1_CCO_SD_DZ","M4A1_CCO_SD_FL_DZ","M4A1_CCO_SD_MFL_DZ","M4A1_GL_CCO_DZ","M4A1_GL_CCO_FL_DZ","M4A1_GL_CCO_MFL_DZ","M4A1_GL_CCO_SD_DZ","M4A1_GL_CCO_SD_FL_DZ","M4A1_GL_CCO_SD_MFL_DZ","M4A1_Holo_DZ","M4A1_Holo_FL_DZ","M4A1_Holo_MFL_DZ","M4A1_Holo_SD_DZ","M4A1_Holo_SD_FL_DZ","M4A1_Holo_SD_MFL_DZ","M4A1_GL_Holo_DZ","M4A1_GL_Holo_FL_DZ","M4A1_GL_Holo_MFL_DZ","M4A1_GL_Holo_SD_DZ","M4A1_GL_Holo_SD_FL_DZ","M4A1_GL_Holo_SD_MFL_DZ","M4A1_ACOG_DZ","M4A1_ACOG_FL_DZ","M4A1_ACOG_MFL_DZ","M4A1_ACOG_SD_DZ","M4A1_ACOG_SD_FL_DZ","M4A1_ACOG_SD_MFL_DZ","M4A1_GL_ACOG_DZ","M4A1_GL_ACOG_FL_DZ","M4A1_GL_ACOG_MFL_DZ","M4A1_GL_ACOG_SD_DZ","M4A1_GL_ACOG_SD_FL_DZ","M4A1_GL_ACOG_SD_MFL_DZ","M4A1_Rusty_DZ","M4A1_Camo_CCO_DZ","M4A1_Camo_CCO_SD_DZ","M4A1_Camo_Holo_GL_DZ","M4A1_Camo_Holo_GL_SD_DZ","M4A3_DES_CCO_DZ","M4A3_ACOG_GL_DZ","M4A3_Camo_DZ","M4A3_Camo_ACOG_DZ","HK416_DZ","HK416_SD_DZ","HK416_GL_DZ","HK416_GL_SD_DZ","HK416_CCO_DZ","HK416_CCO_SD_DZ","HK416_GL_CCO_DZ","HK416_GL_CCO_SD_DZ","HK416_Holo_DZ","HK416_Holo_SD_DZ","HK416_GL_Holo_DZ","HK416C_DZ","HK416C_GL_DZ","HK416C_CCO_DZ","HK416C_GL_CCO_DZ","HK416C_Holo_DZ","HK416C_GL_Holo_DZ","HK416C_ACOG_DZ","HK416C_GL_ACOG_DZ","SteyrAug_A3_Green_DZ","SteyrAug_A3_Black_DZ","SteyrAug_A3_Blue_DZ","SteyrAug_A3_ACOG_Green_DZ","SteyrAug_A3_ACOG_Black_DZ","SteyrAug_A3_ACOG_Blue_DZ","SteyrAug_A3_Holo_Green_DZ","SteyrAug_A3_Holo_Black_DZ","SteyrAug_A3_Holo_Blue_DZ","SteyrAug_A3_GL_Green_DZ","SteyrAug_A3_GL_Black_DZ","SteyrAug_A3_GL_Blue_DZ","SteyrAug_A3_ACOG_GL_Green_DZ","SteyrAug_A3_ACOG_GL_Black_DZ","SteyrAug_A3_ACOG_GL_Blue_DZ","SteyrAug_A3_Holo_GL_Green_DZ","SteyrAug_A3_Holo_GL_Black_DZ","SteyrAug_A3_Holo_GL_Blue_DZ","HK53A3_DZ","HK53A3_CCO_DZ","HK53A3_Holo_DZ","PDR_DZ","PDR_CCO_DZ","PDR_Holo_DZ","Famas_DZ","Famas_CCO_DZ","Famas_Holo_DZ","Famas_SD_DZ","Famas_CCO_SD_DZ","Famas_Holo_SD_DZ","ACR_WDL_DZ","ACR_WDL_SD_DZ","ACR_WDL_GL_DZ","ACR_WDL_GL_SD_DZ","ACR_WDL_CCO_DZ","ACR_WDL_CCO_SD_DZ","ACR_WDL_CCO_GL_DZ","ACR_WDL_CCO_GL_SD_DZ","ACR_WDL_Holo_DZ","ACR_WDL_Holo_SD_DZ","ACR_WDL_Holo_GL_DZ","ACR_WDL_Holo_GL_SD_DZ","ACR_WDL_ACOG_DZ","ACR_WDL_ACOG_SD_DZ","ACR_WDL_ACOG_GL_DZ","ACR_WDL_ACOG_GL_SD_DZ","ACR_WDL_TWS_DZ","ACR_WDL_TWS_GL_DZ","ACR_WDL_TWS_SD_DZ","ACR_WDL_TWS_GL_SD_DZ","ACR_WDL_NV_DZ","ACR_WDL_NV_SD_DZ","ACR_WDL_NV_GL_DZ","ACR_WDL_NV_GL_SD_DZ","ACR_BL_DZ","ACR_BL_SD_DZ","ACR_BL_GL_DZ","ACR_BL_GL_SD_DZ","ACR_BL_CCO_DZ","ACR_BL_CCO_SD_DZ","ACR_BL_CCO_GL_DZ","ACR_BL_CCO_GL_SD_DZ","ACR_BL_Holo_DZ","ACR_BL_Holo_SD_DZ","ACR_BL_Holo_GL_DZ","ACR_BL_Holo_GL_SD_DZ","ACR_BL_ACOG_DZ","ACR_BL_ACOG_SD_DZ","ACR_BL_ACOG_GL_DZ","ACR_BL_ACOG_GL_SD_DZ","ACR_BL_TWS_DZ","ACR_BL_TWS_GL_DZ","ACR_BL_TWS_SD_DZ","ACR_BL_TWS_GL_SD_DZ","ACR_BL_NV_DZ","ACR_BL_NV_SD_DZ","ACR_BL_NV_GL_DZ","ACR_BL_NV_GL_SD_DZ","ACR_DES_DZ","ACR_DES_SD_DZ","ACR_DES_GL_DZ","ACR_DES_GL_SD_DZ","ACR_DES_CCO_DZ","ACR_DES_CCO_SD_DZ","ACR_DES_CCO_GL_DZ","ACR_DES_CCO_GL_SD_DZ","ACR_DES_Holo_DZ","ACR_DES_Holo_SD_DZ","ACR_DES_Holo_GL_DZ","ACR_DES_Holo_GL_SD_DZ","ACR_DES_ACOG_DZ","ACR_DES_ACOG_SD_DZ","ACR_DES_ACOG_GL_DZ","ACR_DES_ACOG_GL_SD_DZ","ACR_DES_TWS_DZ","ACR_DES_TWS_GL_DZ","ACR_DES_TWS_SD_DZ","ACR_DES_TWS_GL_SD_DZ","ACR_DES_NV_DZ","ACR_DES_NV_SD_DZ","ACR_DES_NV_GL_DZ","ACR_DES_NV_GL_SD_DZ","ACR_SNOW_DZ","ACR_SNOW_SD_DZ","ACR_SNOW_GL_DZ","ACR_SNOW_GL_SD_DZ","ACR_SNOW_CCO_DZ","ACR_SNOW_CCO_SD_DZ","ACR_SNOW_CCO_GL_DZ","ACR_SNOW_CCO_GL_SD_DZ","ACR_SNOW_Holo_DZ","ACR_SNOW_Holo_SD_DZ","ACR_SNOW_Holo_GL_DZ","ACR_SNOW_Holo_GL_SD_DZ","ACR_SNOW_ACOG_DZ","ACR_SNOW_ACOG_SD_DZ","ACR_SNOW_ACOG_GL_DZ","ACR_SNOW_ACOG_GL_SD_DZ","ACR_SNOW_TWS_DZ","ACR_SNOW_TWS_GL_DZ","ACR_SNOW_TWS_SD_DZ","ACR_SNOW_TWS_GL_SD_DZ","ACR_SNOW_NV_DZ","ACR_SNOW_NV_SD_DZ","ACR_SNOW_NV_GL_DZ","ACR_SNOW_NV_GL_SD_DZ","KAC_PDW_DZ","KAC_PDW_CCO_DZ","KAC_PDW_HOLO_DZ","KAC_PDW_ACOG_DZ","CTAR21_DZ","CTAR21_CCO_DZ","CTAR21_ACOG_DZ","Masada_DZ","Masada_SD_DZ","Masada_CCO_DZ","Masada_CCO_SD_DZ","Masada_Holo_DZ","Masada_Holo_SD_DZ","Masada_ACOG_DZ","Masada_ACOG_SD_DZ","Masada_BL_DZ","Masada_BL_SD_DZ","Masada_BL_CCO_DZ","Masada_BL_CCO_SD_DZ","Masada_BL_Holo_DZ","Masada_BL_Holo_SD_DZ","Masada_BL_ACOG_DZ","Masada_BL_ACOG_SD_DZ","MK16_DZ","MK16_CCO_DZ","MK16_Holo_DZ","MK16_ACOG_DZ","MK16_GL_DZ","MK16_GL_CCO_DZ","MK16_GL_Holo_DZ","MK16_GL_ACOG_DZ","MK16_CCO_SD_DZ","MK16_Holo_SD_DZ","MK16_ACOG_SD_DZ","MK16_GL_CCO_SD_DZ","MK16_GL_Holo_SD_DZ","MK16_GL_ACOG_SD_DZ","MK16_BL_CCO_DZ","MK16_BL_GL_ACOG_DZ","MK16_BL_Holo_SD_DZ","MK16_BL_GL_CCO_SD_DZ","XM8_DZ","XM8_DES_DZ","XM8_GREY_DZ","XM8_GREY_2_DZ","XM8_GL_DZ","XM8_DES_GL_DZ","XM8_GREY_GL_DZ","XM8_Compact_DZ","XM8_DES_Compact_DZ","XM8_GREY_Compact_DZ","XM8_GREY_2_Compact_DZ","XM8_Sharpsh_DZ","XM8_DES_Sharpsh_DZ","XM8_GREY_Sharpsh_DZ","XM8_SAW_DZ","XM8_DES_SAW_DZ","XM8_GREY_SAW_DZ","XM8_SD_DZ","M14_DZ","M14_Gh_DZ","M14_CCO_DZ","M14_CCO_Gh_DZ","M14_Holo_DZ","M14_Holo_Gh_DZ","M1A_SC16_BL_DZ","M1A_SC16_BL_ACOG_DZ","M1A_SC16_BL_CCO_DZ","M1A_SC16_BL_HOLO_DZ","M1A_SC16_BL_PU_DZ","M1A_SC16_BL_Sniper_DZ","M1A_SC16_TAN_DZ","M1A_SC16_TAN_ACOG_DZ","M1A_SC16_TAN_CCO_DZ","M1A_SC16_TAN_HOLO_DZ","M1A_SC16_TAN_PU_DZ","M1A_SC16_TAN_Sniper_DZ","M1A_SC2_BL_DZ","M1A_SC2_BL_ACOG_DZ","M1A_SC2_BL_CCO_DZ","M1A_SC2_BL_HOLO_DZ","M1A_SC2_BL_PU_DZ","M1A_SC2_BL_Sniper_DZ","M21_DZ","M21A5_DZ","M21A5_SD_DZ","HK417_DZ","HK417_SD_DZ","HK417_CCO_DZ","HK417_CCO_SD_DZ","HK417_Holo_DZ","HK417_Holo_SD_DZ","HK417_ACOG_DZ","HK417_ACOG_SD_DZ","HK417C_DZ","HK417C_GL_DZ","HK417C_CCO_DZ","HK417C_GL_CCO_DZ","HK417C_Holo_DZ","HK417C_GL_Holo_DZ","HK417C_ACOG_DZ","HK417C_GL_ACOG_DZ","HK417_Sniper_DZ","HK417_Sniper_SD_DZ","MK14_DZ","MK14_CCO_DZ","MK14_Holo_DZ","MK14_ACOG_DZ","MK14_Sniper_DZ","MK14_SD_DZ","MK14_CCO_SD_DZ","MK14_Holo_SD_DZ","MK14_ACOG_SD_DZ","MK14_Sniper_SD_DZ","MK17_DZ","MK17_CCO_DZ","MK17_Holo_DZ","MK17_ACOG_DZ","MK17_GL_DZ","MK17_GL_CCO_DZ","MK17_GL_Holo_DZ","MK17_GL_ACOG_DZ","MK17_CCO_SD_DZ","MK17_Holo_SD_DZ","MK17_ACOG_SD_DZ","MK17_GL_CCO_SD_DZ","MK17_GL_Holo_SD_DZ","MK17_BL_Holo_DZ","MK17_BL_GL_ACOG_DZ","MK17_BL_CCO_SD_DZ","MK17_BL_GL_Holo_SD_DZ","MK17_Sniper_DZ","MK17_Sniper_SD_DZ","M110_NV_DZ","CZ805_A1_DZ","CZ805_A1_GL_DZ","CZ805_A2_DZ","CZ805_A2_SD_DZ","CZ805_B_GL_DZ","M24_DZ","M24_Gh_DZ","M24_DES_DZ","M40A3_Gh_DZ","M40A3_DZ","CZ750_DZ","M249_CCO_DZ","M249_DZ","M249_Holo_DZ","M249_EP1_DZ","M249_m145_EP1_DZE","L110A1_CCO_DZ","L110A1_Holo_DZ","L110A1_DZ","BAF_L110A1_Aim_DZE","M240_DZ","M240_CCO_DZ","M240_Holo_DZ","m240_scoped_EP1_DZE","M60A4_EP1_DZE","Mk43_DZ","MK43_Holo_DZ","MK43_ACOG_DZ","MK43_M145_DZ","M1014_DZ","M1014_CCO_DZ","M1014_Holo_DZ","Mk48_CCO_DZ","Mk48_DZ","Mk48_Holo_DZ","Mk48_DES_CCO_DZ","PKM_DZ","Pecheneg_DZ","UK59_DZ","RPK74_Kobra_DZ","RPK74_DZ","RPK74_PSO1_DZ","SVD_PSO1_DZ","SVD_PSO1_Gh_DZ","SVD_DZ","SVD_Gh_DZ","SVD_PSO1_Gh_DES_DZ","SVD_NSPU_DZ","SVD_Gold_DZ","SVU_PSO1_DZ","VSS_vintorez_DZE","VAL_DZ","VAL_Kobra_DZ","VAL_PSO1_DZ","KSVK_DZE","Mosin_DZ","Mosin_BR_DZ","Mosin_FL_DZ","Mosin_MFL_DZ","Mosin_Belt_DZ","Mosin_Belt_FL_DZ","Mosin_Belt_MFL_DZ","Mosin_PU_DZ","Mosin_PU_FL_DZ","Mosin_PU_MFL_DZ","Mosin_PU_Belt_DZ","Mosin_PU_Belt_FL_DZ","Mosin_PU_Belt_MFL_DZ","MP5_DZ","MP5_SD_DZ","Kriss_DZ","Kriss_CCO_DZ","Kriss_Holo_DZ","Kriss_SD_DZ","Kriss_CCO_SD_DZ","Kriss_Holo_SD_DZ","Scorpion_Evo3_DZ","Scorpion_Evo3_CCO_DZ","Scorpion_Evo3_CCO_SD_DZ","MP7_DZ","MP7_FL_DZ","MP7_MFL_DZ","MP7_Holo_DZ","MP7_Holo_FL_DZ","MP7_Holo_MFL_DZ","MP7_CCO_DZ","MP7_CCO_FL_DZ","MP7_CCO_MFL_DZ","MP7_ACOG_DZ","MP7_ACOG_FL_DZ","MP7_ACOG_MFL_DZ","MP7_SD_DZ","MP7_SD_FL_DZ","MP7_SD_MFL_DZ","MP7_Holo_SD_DZ","MP7_Holo_SD_FL_DZ","MP7_Holo_SD_MFL_DZ","MP7_CCO_SD_DZ","MP7_CCO_SD_FL_DZ","MP7_CCO_SD_MFL_DZ","MP7_ACOG_SD_DZ","MP7_ACOG_SD_FL_DZ","MP7_ACOG_SD_MFL_DZ","TMP_DZ","TMP_CCO_DZ","TMP_Holo_DZ","TMP_SD_DZ","TMP_CCO_SD_DZ","TMP_Holo_SD_DZ","UMP_DZ","UMP_CCO_DZ","UMP_Holo_DZ","UMP_SD_DZ","UMP_CCO_SD_DZ","UMP_Holo_SD_DZ","P90_DZ","P90_CCO_DZ","P90_Holo_DZ","P90_SD_DZ","P90_CCO_SD_DZ","P90_Holo_SD_DZ","Sten_MK_DZ","MAT49_DZ","M31_DZ","M16A2_DZ","M16A2_GL_DZ","M16A2_Rusty_DZ","M16A4_DZ","M16A4_FL_DZ","M16A4_MFL_DZ","M16A4_GL_DZ","M16A4_GL_FL_DZ","M16A4_GL_MFL_DZ","M16A4_CCO_DZ","M16A4_CCO_FL_DZ","M16A4_CCO_MFL_DZ","M16A4_GL_CCO_DZ","M16A4_GL_CCO_FL_DZ","M16A4_GL_CCO_MFL_DZ","M16A4_Holo_DZ","M16A4_Holo_FL_DZ","M16A4_Holo_MFL_DZ","M16A4_GL_Holo_DZ","M16A4_GL_Holo_FL_DZ","M16A4_GL_Holo_MFL_DZ","M16A4_ACOG_DZ","M16A4_ACOG_FL_DZ","M16A4_ACOG_MFL_DZ","M16A4_GL_ACOG_DZ","M16A4_GL_ACOG_FL_DZ","M16A4_GL_ACOG_MFL_DZ","SA58_DZ","SA58_RIS_DZ","SA58_RIS_FL_DZ","SA58_RIS_MFL_DZ","SA58_CCO_DZ","SA58_CCO_FL_DZ","SA58_CCO_MFL_DZ","SA58_Holo_DZ","SA58_Holo_FL_DZ","SA58_Holo_MFL_DZ","SA58_ACOG_DZ","SA58_ACOG_FL_DZ","SA58_ACOG_MFL_DZ","Sa58V_DZ","Sa58V_Camo_CCO_DZ","Sa58V_Camo_ACOG_DZ","L85A2_DZ","L85A2_FL_DZ","L85A2_MFL_DZ","L85A2_SD_DZ","L85A2_SD_FL_DZ","L85A2_SD_MFL_DZ","L85A2_CCO_DZ","L85A2_CCO_FL_DZ","L85A2_CCO_MFL_DZ","L85A2_CCO_SD_DZ","L85A2_CCO_SD_FL_DZ","L85A2_CCO_SD_MFL_DZ","L85A2_Holo_DZ","L85A2_Holo_FL_DZ","L85A2_Holo_MFL_DZ","L85A2_Holo_SD_DZ","L85A2_Holo_SD_FL_DZ","L85A2_Holo_SD_MFL_DZ","L85A2_ACOG_DZ","L85A2_ACOG_FL_DZ","L85A2_ACOG_MFL_DZ","L85A2_ACOG_SD_DZ","L85A2_ACOG_SD_FL_DZ","L85A2_ACOG_SD_MFL_DZ","BAF_L85A2_RIS_TWS_DZ","L86A2_LSW_DZ","Bizon_DZ","Bizon_Kobra_DZ","Bizon_SD_DZ","Bizon_Kobra_SD_DZ","CZ550_DZ","LeeEnfield_DZ","MR43_DZ","Winchester1866_DZ","Remington870_DZ","Remington870_FL_DZ","Remington870_MFL_DZ","Saiga12K_DZ","USAS12_DZ","AA12_DZ","Crossbow_DZ","Crossbow_FL_DZ","Crossbow_MFL_DZ","Crossbow_CCO_DZ","Crossbow_CCO_FL_DZ","Crossbow_CCO_MFL_DZ","Crossbow_Scope_DZ","Crossbow_Scope_FL_DZ","Crossbow_Scope_MFL_DZ","L115A3_DZ","L115A3_2_DZ","MSR_DZ","MSR_SD_DZ","MSR_NV_DZ","MSR_NV_SD_DZ","MSR_TWS_DZ","MSR_TWS_SD_DZ","XM2010_DZ","XM2010_SD_DZ","XM2010_NV_DZ","XM2010_NV_SD_DZ","XM2010_TWS_DZ","XM2010_TWS_SD_DZ","Anzio_20_DZ","BAF_AS50_scoped_DZ","m107_DZ","m107_SKN","M4SPR_DZE","M200_CheyTac_DZ","M200_CheyTac_SD_DZ","WA2000_DZ","Barrett_MRAD_Iron_DZ","Barrett_MRAD_CCO_DZ","Barrett_MRAD_Sniper_DZ","M9_DZ","M9_SD_DZ","M9_Camo_DZ","M9_Camo_SD_DZ","M93R_DZ","P99_Black_DZ","P99_Black_SD_DZ","P99_Green_DZ","P99_Green_SD_DZ","P99_Silver_DZ","P99_Silver_SD_DZ","BrowningHP_DZ","P226_DZ","P226_Silver_DZ","P38_DZ","PPK_DZ","MK22_DZ","MK22_2_DZ","MK22_SD_DZ","MK22_2_SD_DZ","G17_DZ","G17_FL_DZ","G17_MFL_DZ","G17_SD_DZ","G17_SD_FL_DZ","G17_SD_MFL_DZ","G18_DZ","M1911_DZ","M1911_2_DZ","Kimber_M1911_DZ","Kimber_M1911_SD_DZ","USP_DZ","USP_SD_DZ","Makarov_DZ","Makarov_SD_DZ","Tokarew_TT33_DZ","Ruger_MK2_DZ","APS_DZ","APS_SD_DZ","PDW_DZ","PDW_SD_DZ","TEC9_DZ","Mac10_DZ","Revolver_DZ","Revolver_Gold_DZ","Colt_Anaconda_DZ","Colt_Anaconda_Gold_DZ","Colt_Bull_DZ","Colt_Python_DZ","Colt_Revolver_DZ","CZ75P_DZ","CZ75D_DZ","CZ75SP_DZ","CZ75SP_SD_DZ","DesertEagle_DZ","DesertEagle_Gold_DZ","DesertEagle_Silver_DZ","DesertEagle_Modern_DZ","Sa61_DZ"] + +// Overwatch Weapons +#define OW_WEPS ["RH_m9","RH_m9c","RH_m93r","RH_M9sd","RH_m9csd","RH_browninghp","vil_B_HP","RH_anac","RH_anacg","RH_python","RH_deagle","RH_Deagleg","RH_Deaglem","RH_Deaglemzb","RH_Deaglemz","RH_Deagles","vil_Glock","RH_g17","vil_Glock_o","RH_g17sd","RH_g18","RH_g19","RH_g19t","RH_tec9","RH_m1911","RH_m1911sd","RH_m1911old","RH_mk22","RH_mk22sd","RH_mk22v","RH_mk22vsd","RH_p38","RH_ppk","RH_mk2","RH_p226","RH_p226s","RH_bull","RH_tt33","RH_usp","RH_uspm","RH_uspsd","vil_USP45","vil_USP45SD","vil_USP","vil_USPSD","RH_vz61", "vil_AEK2","vil_AEK_GL","vil_AeK_3","vil_AeK_23","vil_AeK_3_K","vil_AK_105","Vil_AK_105_c","vil_AK_101","vil_AK_103","vil_AK_107","Vil_AK_107_c","vil_ak12","vil_ak12_ap","vil_ak12_gp","vil_AK_47","vil_AK_47_49","vil_AK_47_m1","vil_AK_47","vil_AK_74_N","vil_AK_74P","vil_AK_74m","vil_AK_74m_p29","vil_AK_74m_EOT_Alfa","vil_AK_74m_gp_29","vil_AK_74m_gp","vil_AK_74m_EOT","vil_AK_74m_EOT_FSB","vil_AK_74m_EOT_FSB_60","vil_AK_74m_EOT_FSB_45","vil_AK_74m_c","vil_AK_74m_k","vil_AK_74m_PSO","vil_AKM","vil_AKM_GL","vil_AKMS","vil_AKMS_GP25","vil_AKMSB","vil_AKS_47","vil_AKS_74","vil_AKS_74_gp","vil_AKS_74p_gp","vil_AKS_74p","vil_AKS_74p_45","vil_AKs_74_u","vil_AKs_74_u45","Vil_AKS_74_UB","Vil_AKS_74_UN_kobra","vil_AMD63","vil_AMD","vil_Abakan","vil_Abakan_P29","vil_Abakan_gp","vil_AK_nato_m1","vil_ASH82","vil_MPi","vil_PMI74S","vil_PMI","vil_PMIS","vil_type88_1","vil_M64","vil_M70","vil_M70B","vil_AK_nato_m80", "vil_Galil","vil_Galil_arm","vil_SKS","gms_k98","gms_k98_knife","gms_k98_rg","gms_k98zf39","FHQ_ACR_BLK_CCO_GL_SD","FHQ_ACR_TAN_CCO_GL_SD","FHQ_ACR_SNW_CCO_GL_SD","FHQ_ACR_WDL_CCO_GL_SD","FHQ_ACR_BLK_CCO_SD","FHQ_ACR_TAN_CCO_SD","FHQ_ACR_SNW_CCO_SD","FHQ_ACR_WDL_CCO_SD","FHQ_ACR_BLK_G33_GL_SD","FHQ_ACR_TAN_G33_GL_SD","FHQ_ACR_SNW_G33_GL_SD","FHQ_ACR_WDL_G33_GL_SD","FHQ_ACR_BLK_G33_SD","FHQ_ACR_TAN_G33_SD","FHQ_ACR_SNW_G33_SD","FHQ_ACR_WDL_G33_SD","FHQ_ACR_BLK_HAMR_GL_SD","FHQ_ACR_TAN_HAMR_GL_SD","FHQ_ACR_SNW_HAMR_GL_SD","FHQ_ACR_WDL_HAMR_GL_SD","FHQ_ACR_BLK_HAMR_SD","FHQ_ACR_TAN_HAMR_SD","FHQ_ACR_SNW_HAMR_SD","FHQ_ACR_WDL_HAMR_SD","FHQ_ACR_BLK_HWS_GL_SD","FHQ_ACR_TAN_HWS_GL_SD","FHQ_ACR_SNW_HWS_GL_SD","FHQ_ACR_WDL_HWS_GL_SD","FHQ_ACR_BLK_HWS_SD","FHQ_ACR_TAN_HWS_SD","FHQ_ACR_SNW_HWS_SD","FHQ_ACR_WDL_HWS_SD","FHQ_ACR_BLK_IRN_GL_SD","FHQ_ACR_TAN_IRN_GL_SD","FHQ_ACR_SNW_IRN_GL_SD","FHQ_ACR_WDL_IRN_GL_SD","FHQ_ACR_BLK_RCO_GL_SD","FHQ_ACR_TAN_RCO_GL_SD","FHQ_ACR_SNW_RCO_GL_SD","FHQ_ACR_WDL_RCO_GL_SD","FHQ_ACR_BLK_RCO_SD","FHQ_ACR_TAN_RCO_SD","FHQ_ACR_SNW_RCO_SD","FHQ_ACR_WDL_RCO_SD","FHQ_ACR_BLK_IRN_SD","FHQ_ACR_TAN_IRN_SD","FHQ_ACR_SNW_IRN_SD","FHQ_ACR_WDL_IRN_SD", "FHQ_ACR_BLK_IRN","FHQ_ACR_TAN_IRN","FHQ_ACR_SNW_IRN","FHQ_ACR_WDL_IRN","FHQ_ACR_BLK_CCO","FHQ_ACR_TAN_CCO","FHQ_ACR_SNW_CCO","FHQ_ACR_WDL_CCO","FHQ_ACR_BLK_CCO_GL","FHQ_ACR_TAN_CCO_GL","FHQ_ACR_SNW_CCO_GL","FHQ_ACR_WDL_CCO_GL","FHQ_ACR_BLK_G33","FHQ_ACR_TAN_G33","FHQ_ACR_SNW_G33","FHQ_ACR_WDL_G33","FHQ_ACR_BLK_G33_GL","FHQ_ACR_TAN_G33_GL","FHQ_ACR_SNW_G33_GL","FHQ_ACR_WDL_G33_GL","FHQ_ACR_BLK_HAMR","FHQ_ACR_TAN_HAMR","FHQ_ACR_SNW_HAMR","FHQ_ACR_WDL_HAMR","FHQ_ACR_BLK_HAMR_GL","FHQ_ACR_TAN_HAMR_GL","FHQ_ACR_SNW_HAMR_GL","FHQ_ACR_WDL_HAMR_GL","FHQ_ACR_BLK_HWS","FHQ_ACR_TAN_HWS","FHQ_ACR_SNW_HWS","FHQ_ACR_WDL_HWS","FHQ_ACR_BLK_HWS_GL","FHQ_ACR_TAN_HWS_GL","FHQ_ACR_SNW_HWS_GL","FHQ_ACR_WDL_HWS_GL","FHQ_ACR_BLK_IRN_GL","FHQ_ACR_TAN_IRN_GL","FHQ_ACR_SNW_IRN_GL","FHQ_ACR_WDL_IRN_GL","FHQ_ACR_BLK_RCO","FHQ_ACR_TAN_RCO","FHQ_ACR_SNW_RCO","FHQ_ACR_WDL_RCO","FHQ_ACR_BLK_RCO_GL","FHQ_ACR_TAN_RCO_GL","FHQ_ACR_SNW_RCO_GL","FHQ_ACR_WDL_RCO_GL", "SCAR_L_CQC_CCO_SD","SCAR_L_CQC","SCAR_L_CQC_Holo","SCAR_L_CQC_EGLM_Holo","SCAR_L_STD_EGLM_RCO","SCAR_L_STD_HOLO","SCAR_L_STD_Mk4CQT","SCAR_H_CQC_CCO","SCAR_H_CQC_CCO_SD","SCAR_H_STD_EGLM_Spect","SCAR_H_LNG_Sniper","SCAR_H_LNG_Sniper_SD","vil_9a91","vil_9a91_c","vil_9a91_csd","vil_VAL","vil_VAL_C","vil_Groza_HG","vil_Groza_GL","vil_Groza_SC","vil_Groza_SD","vil_Vikhr","vil_vsk94","vil_MP5_EOTech","vil_MP5SD_EOTech","vil_uzimini","vil_uzimini_SD","vil_uzi","vil_uzi_c","vil_uzi_SD", "USSR_cheytacM200","USSR_cheytacM200_sd","vil_SVD_63","vil_SVD_N","vil_SVD_M","vil_SVD_P21","vil_SVD_S","FHQ_MSR_DESERT","FHQ_MSR_NV_DESERT","FHQ_MSR_NV_SD_DESERT","FHQ_MSR_SD_DESERT","FHQ_RSASS_TAN","FHQ_RSASS_SD_TAN","vil_SV_98_69","vil_SV_98","vil_SV_98_SD","vil_SVDK","FHQ_XM2010_DESERT","FHQ_XM2010_NV_DESERT","FHQ_XM2010_NV_SD_DESERT","FHQ_XM2010_SD_DESERT","RH_ctar21","RH_ctar21glacog","RH_ctar21m","RH_ctar21mgl","RH_star21","vil_AG3","vil_G3a2","vil_G3a3","vil_G3an","vil_G3anb","vil_G3SG1","vil_G3sg1b","vil_G3TGS","vil_G3TGSb","vil_G3ZF","vil_G3zfb","vil_G3a4","vil_G3a4b","RH_masacog","RH_masaim","RH_masbaim","RH_masb","RH_masbeotech","RH_mas","RH_massd","RH_massdacog","RH_masbsdacog","RH_massdaim","RH_masbsdaim","RH_masbsd","RH_massdeotech","RH_masbsdeotech","vil_RPK75_Romania","vil_M240_B","vil_M249_Para","skavil_M60","skavil_M60e3","vil_Mg3","vil_MG4","vil_MG4E","vil_PKP","vil_PKP_EOT","vil_PK","vil_PKM","vil_RPD","vil_RPK","vil_RPK75","vil_RPK74","vil_RPK74M","vil_RPK74M_P29","vil_RPK75_M72","vil_zastava_m84","RH_hk417","RH_hk417acog","RH_hk417aim","RH_hk417s","RH_hk417sacog","RH_hk417saim","RH_hk417seotech","RH_hk417eotech","RH_hk417sd","RH_hk417sdacog","RH_hk417sdaim","RH_hk417sdeotech","RH_hk417sdsp","RH_hk417sp","RH_hk417sglacog","RH_hk417sgl","RH_hk417sglaim","RH_hk417sgleotech", "RH_hk416","RH_hk416glacog","RH_hk416gl","RH_hk416aim","RH_hk416glaim","RH_hk416s","RH_hk416sacog","RH_hk416sglacog","RH_hk416saim","RH_hk416sglaim","RH_hk416seotech","RH_hk416sgleotech","RH_hk416sgl","RH_hk416eotech","RH_hk416gleotech","RH_hk416sd","RH_hk416sdgl","RH_hk416sdglaim","RH_hk416sdeotech","RH_hk416sdgleotech","vil_AG36KA4","vil_AG36KV","vil_G36KSKdes","vil_G36KA4","vil_G36KSKES","vil_G36KSKdesES","vil_G36KES","vil_G36KVZ","vil_G36KSK","vil_G36VA4Eot","vil_G36KV3","vil_G36KVA4","vil_G36KV3Des","vil_G36VA4","vil_AG36","vil_G36a2","vil_AG36A2","vil_G36CC","vil_G36E"] + +//_activatingPlayer = _this select 0; +//_params = _this select 1; +//_clientKey = _this select 2; +local _selectDelay = _params select 0; +local _crate = _params select 1; +local _dir = _params select 2; +local _pos = _params select 3; +//_playerUID = getPlayerUID _activatingPlayer; +local _spawnCrate = ""; + + +_exitReason = [_this,"EAT_crateSpawn",(_worldspace select 1),_clientKey,_playerUID,_activatingPlayer] call server_verifySender; +if (_exitReason != "") exitWith {diag_log _exitReason}; + +call +{ + if (_crate == "Items") exitWith { + CRATE_SETUP + ADD_BACKPACK + local _parents = ["FakeMagazine","ItemAntibiotic","ItemSodaEmpty","ItemWaterBottle","TrashTinCan"]; + local _ignore = ["bloodBagBase","SkinBase","wholeBloodBagBase","ItemAntibiotic_base","ItemAntibioticEmpty","ItemBriefcase_Base","ItemBriefcaseEmpty","ItemSilvercase_Base","ItemSodaEmpty","TrashTinCan","ItemFuelcanEmpty","ItemJerrycanEmpty","ItemFuelBarrelEmpty"]; + local _cfg = configFile >> "cfgMagazines"; + for "_i" from 0 to (count _cfg) - 1 do { + local _type = _cfg select _i; + local _item = configName _type; + if (isClass _type && {getNumber (_type >> "scope") > 1} && {!(_item in _ignore)} && {!(configName(inheritsFrom _type) in _parents)} && {!(["Rnd",_item] call fnc_inString)} && {!(["_Swing",_item] call fnc_inString)} && {!(["cinder_",_item] call fnc_inString)} && {!(["metal_",_item] call fnc_inString)} && {!(["ItemWood",_item] call fnc_inString)} && {!(["PartWood",_item] call fnc_inString)}) then { + _spawnCrate addMagazineCargoGlobal [_item, 5]; + }; + }; + local _cfg = configFile >> "cfgWeapons"; + local _parents = ["FakeWeapon","ItemMatchbox"]; + local _ignore = ["ItemCore","ItemKnife_Base","ItemMatchbox_base"]; + for "_i" from 0 to (count _cfg) - 1 do { + local _type = _cfg select _i; + local _item = configName _type; + if (isClass _type && {isNumber (_type >> "type")} && {!(configName(inheritsFrom(_type)) in _parents)} && {!isNumber (_type >> "keyid")} && {!(_item in _ignore)}) then { + if (getNumber (_type >> "type") == 131072) then { + _spawnCrate addWeaponCargoGlobal [_item, 1]; + }; + }; + }; + }; + if (_crate == "Backpack") exitWith { + CRATE_SETUP + {_spawnCrate addBackpackCargoGlobal [_x, 1];} forEach BACKPACKS; + }; + if (_crate == "AllItemsBuilding") exitWith { + CRATE_SETUP + ADD_5X BUILDING_TOOLS; + ADD ADMIN_BUILD_CRATE; + ADD_BACKPACK + }; + if (_crate == "smallCinderBuildingKit") exitWith { + CRATE_SETUP + ADD_1X BUILDING_TOOLS; + ADD SM_CINDER_KIT; + ADD_BACKPACK + }; + if (_crate == "mediumCinderBuildingKit") exitWith { + CRATE_SETUP + ADD_1X BUILDING_TOOLS; + ADD MD_CINDER_KIT; + ADD_BACKPACK + }; + if (_crate == "largeCinderBuildingKit") exitWith { + CRATE_SETUP + ADD_1X BUILDING_TOOLS; + ADD LG_CINDER_KIT; + ADD_BACKPACK + }; + if (_crate == "smallWoodBuildingKit") exitWith { + CRATE_SETUP + ADD_1X BUILDING_TOOLS; + ADD SM_WOOD_KIT; + ADD_BACKPACK + }; + if (_crate == "mediumWoodBuildingKit") exitWith { + CRATE_SETUP + ADD_1X BUILDING_TOOLS; + ADD MD_WOOD_KIT; + ADD_BACKPACK + }; + if (_crate == "largeWoodBuildingKit") exitWith { + CRATE_SETUP + ADD_1X BUILDING_TOOLS; + ADD LG_WOOD_KIT; + ADD_BACKPACK + }; + if (_crate == "VanillaBuildKit") exitWith { + CRATE_SETUP + ADD_1X ["ItemToolbox","ItemEtool"]; + ADD VANILLA_KIT; + ADD_BACKPACK + }; + if (_crate == "EpochWeapons") exitWith { + CRATE_SETUP + local _tArr = []; // Create temp array to prevent duplicate magazine spawning + local _mag = ""; + { + _spawnCrate addWeaponCargoGlobal [_x, 1]; + local _ammo = getArray (configFile >> "cfgWeapons" >> _x >> "magazines"); + if (count _ammo > 0) then { + _mag = _ammo select 0; + if !(_mag in _tArr) then { + _spawnCrate addMagazineCargoGlobal [_mag, 30]; + _tArr set [count _tArr, _mag]; + }; + }; + } forEach EPOCH_WEPS; + ADD_BACKPACK + }; + if (_crate == "OverwatchWeapons") exitWith { + CRATE_SETUP + local _tArr = []; // Create temp array to prevent duplicate magazine spawning + local _mag = ""; + { + _spawnCrate addWeaponCargoGlobal [_x, 1]; + local _ammo = getArray (configFile >> "cfgWeapons" >> _x >> "magazines"); + if (count _ammo > 0) then { + _mag = _ammo select 0; + if !(_mag in _tArr) then { + _spawnCrate addMagazineCargoGlobal [_mag, 30]; + _tArr set [count _tArr, _mag]; + }; + }; + } forEach OW_WEPS; + ADD_BACKPACK + }; + if (_crate == "RocketLaunchers") exitWith { + CRATE_SETUP + ADD_BACKPACK + local _tArr = []; // Create temp array to prevent duplicate magazine spawning + local _mag = ""; + local _ignore = ["LauncherCore","Launcher"]; + local _cfg = configFile >> "cfgWeapons"; + for "_i" from 0 to (count _cfg) - 1 do { + local _type = _cfg select _i; + local _item = configName _type; + if (isClass _type && {isNumber (_type >> "type")} && {!(_item in _ignore)}) then { + if (getNumber (_type >> "type") == 4) then { // type 4 is launcher + _spawnCrate addWeaponCargoGlobal [_item, 1]; + local _ammo = getArray (configFile >> "cfgWeapons" >> _item >> "magazines"); + if (count _ammo > 0) then { + _mag = _ammo select 0; + if !(_mag in _tArr) then { + _spawnCrate addMagazineCargoGlobal [_mag, 5]; + _tArr set [count _tArr, _mag]; + }; + }; + }; + }; + }; + }; +}; + +if (_selectDelay != 0) exitWith { + [_selectDelay,_spawnCrate] spawn { + + uiSleep (_this select 0); + deleteVehicle (_this select 1); + }; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/ServerFunctions/vehSpawn.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/ServerFunctions/vehSpawn.sqf new file mode 100755 index 0000000..99ef928 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/ServerFunctions/vehSpawn.sqf @@ -0,0 +1,25 @@ +private ["_exitReason","_playerUID","_clientKey","_vehtospawn","_worldspace","_pos","_dir","_veh","_activatingPlayer"]; + +//_activatingPlayer = _this select 0; +//_params = _this select 1; +//_clientKey = _this select 2; +_vehtospawn = _params select 0; +_dir = _params select 1; +_pos = _params select 2; +//_playerUID = getPlayerUID _activatingPlayer; + + +_exitReason = [_this,"EAT_vehSpawn",_pos,_clientKey,_playerUID,_activatingPlayer] call server_verifySender; +if (_exitReason != "") exitWith {diag_log _exitReason}; + +_veh = _vehtospawn createVehicle _pos; +_veh setDir _dir; +_veh setPos _pos; +_veh setVariable ["ObjectID", "1", true]; +_veh setVariable ["ObjectUID", "1", true]; +dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_veh]; +//_veh setVariable ["EAT_Veh",1,true]; +clearMagazineCargoGlobal _veh; +clearWeaponCargoGlobal _veh; + +//if (_vehtospawn == "CSJ_GyroC") then {_veh setVehicleAmmo 0;}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/SuperAdmin/activate.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/SuperAdmin/activate.sqf new file mode 100755 index 0000000..ea16293 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/SuperAdmin/activate.sqf @@ -0,0 +1,56 @@ +dayz_antihack = 0; // Disable vanilla antihack for admins + +// Initialize Variables +#include "\z\addons\dayz_server\AdminTools\SuperAdmin\config.sqf" +#include "\z\addons\dayz_server\AdminTools\SuperAdmin\functions.sqf" +#include "\z\addons\dayz_server\AdminTools\SuperAdmin\main.sqf" + + +[] spawn { + waitUntil {uiSleep 0.1;(!isNil "Dayz_loginCompleted" && !isNil "keyboard_keys")}; + + EAT_Keybind = { + private ["_option","_handled"]; + #include "\ca\editor\Data\Scripts\dikCodes.h" + + _option = _this select 0; + _handled = false; + + call + { + if (_option == "AdminMenu") exitWith {keyboard_keys set [DIK_F2,{call EAT_ToolsMain;_handled = true;}];}; + if (_option == "AdminMode") exitWith { + keyboard_keys set [DIK_F4,{call optionMenu;_handled = true;}]; + keyboard_keys set [DIK_DELETE,{[] spawn EAT_DeleteObj;_handled = true;}]; + keyboard_keys set [DIK_U,{[] spawn EAT_Unlock;_handled = true;}]; + keyboard_keys set [DIK_L,{[] spawn EAT_Lock;_handled = true;}]; + keyboard_keys set [DIK_J,{call EAT_GetObjDetails;_handled = true;}]; + keyboard_keys set [DIK_T,{[] spawn EAT_TeleportToggle;_handled = true;}]; + }; + if (_option == "EndAdminMode") exitWith { + keyboard_keys set [DIK_F4,{_handled = true;}]; + keyboard_keys set [DIK_DELETE,{_handled = true;}]; + keyboard_keys set [DIK_U,{_handled = true;}]; + keyboard_keys set [DIK_L,{_handled = true;}]; + keyboard_keys set [DIK_J,{_handled = true;}]; + keyboard_keys set [DIK_T,{_handled = true;}]; + }; + if (_option == "ESP") exitWith {keyboard_keys set [DIK_7,{call F5Menu;_handled = true;}];}; + if (_option == "EndESP") exitWith {keyboard_keys set [DIK_7,{_handled = true;}];}; + if (_option == "Spectate") exitWith {keyboard_keys set [DIK_F6,{spectate = false;_handled = true;}];}; + if (_option == "EndSpectate") exitWith {keyboard_keys set [DIK_F6,{_handled = true;}];}; + if (_option == "FastWalk") exitWith {keyboard_keys set [DIK_4, {call EAT_FastForward;_handled = true;}];}; + if (_option == "EndFastWalk") exitWith {keyboard_keys set [DIK_4, {_handled = true;}];}; + if (_option == "FastUp") exitWith {keyboard_keys set [DIK_5, {call EAT_AdminFastUp;_handled = true;}];}; + if (_option == "EndFastUp") exitWith {keyboard_keys set [DIK_5, {_handled = true;}];}; + }; + _handled + }; + + ["AdminMenu"] call EAT_Keybind; + #include "\z\addons\dayz_server\adminTools\DebugMonitors\debugMonitor2.sqf" + + systemChat "Admin Tools Loaded..."; + systemChat "Press F2 to Open the Admin Menu"; + diag_log("Admin Tools: AdminActivate.sqf loaded"); +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/SuperAdmin/config.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/SuperAdmin/config.sqf new file mode 100755 index 0000000..1fce785 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/SuperAdmin/config.sqf @@ -0,0 +1,200 @@ +/************** Epoch Admin Tools Variables **************/ + +//Enable/Disable weather/time change menu. This may cause server to revert to mid-day on restart. +EAT_wtChanger = true; + +// Change the maximum build distance for placable base items +DZE_buildMaxMoveDistance = 20; + +//This creates a log in your server\EpochAdminToolLogs\toolUsageLog.txt REQUIRES: EATadminLogger.dll +EAT_logMajorTool = true; //A major tool is a strong tool with high possibility for exploitation +EAT_logMinorTool = true;//A minor tool is a weak tool with low possibility for exploitation + +/************** Admin/Mod mode Variables **************/ + +// Defines the default on and off for admin/mod mode options +// ALL items can be turned on or off during gameplay, these are just defaults +EAT_playerGod = true; +EAT_vehicleGod = false; +EAT_playerESPMode = true; +EAT_enhancedESPMode = false; +EAT_grassOff = true; +EAT_infAmmo = true; +EAT_speedBoost = false; +EAT_fastWalk = true; +EAT_fastUp = true; +EAT_invisibility = false; +EAT_flyingMode = false; +EAT_adminBuildMode = false; +EAT_ZombieShield = false; + +// Initialize Base Manager Variables +BD_Buildables = true; +BD_PlotPoles = true; +BD_vehicles = true; +BCCurrentBase = []; +BC_BuildVector = []; + +EAT_isOverpoch = isClass (configFile >> "CfgWeapons" >> "USSR_cheytacM200"); // Used to detect the Overwatch Mod for crate spawning + +// This section defines all of the buildings in the building GUI +// Format: variable = [["TYPE","NAME","BUILING_CLASS"],["TYPE","NAME","BUILING_CLASS"]]; + +//Residential +local _buildHouse = [["House","Large Brick (Open)","Land_HouseV2_04_interier"],["House","Log Cabin (Open)","Land_HouseV_1I4"],["House","Yellow Modern","Land_sara_domek_zluty"],["House","Large Orange","Land_Housev2_02_Interier"],["House","Yellow Wood","land_housev_3i3"],["House","Burgundy","land_housev_1l2"],["House","Orange/Green","Land_HouseV_3I1"],["House","Damaged Brick","land_r_housev2_04"],["House","Orange/Red","Land_HouseV_1I1"],["House","Barn","Land_HouseV_3I4"],["House","Yellow","Land_HouseV_1T"],["House","Red Brick","Land_HouseV_2I"],["House","Wood","Land_HouseV_1I3"],["House","Green","Land_HouseV_1L1"],["House","Yellow Wood","Land_HouseV_1I2"],["House","Yellow Stone","Land_HouseV_2L"],["House","Green Wood","Land_HouseV_2T2"],["House","Green wood/concrete","Land_HouseV_3I2"],["House","Shanty","Land_MBG_Shanty_BIG"],["House","Middle-East 1","Land_House_C_11_EP1"],["House","Middle-East 2","Land_House_C_12_EP1"],["House","Old Stone 1","Land_House_K_1_EP1"],["House","Old Stone 2","Land_House_K_3_EP1"],["House","Old Stone 3","Land_House_K_5_EP1"],["House","Old Stone 4","Land_House_K_7_EP1"],["House","Old Stone 5","Land_House_K_8_EP1"],["House","Old Stone 6","Land_House_L_1_EP1"],["House","Old Stone 7","Land_House_L_3_EP1"],["House","Old Stone 8","Land_House_L_4_EP1"],["House","Old Stone 9","Land_House_L_6_EP1"],["House","Old Stone 10","Land_House_L_7_EP1"],["House","Old Stone 11","Land_House_L_8_EP1"],["House","Old Stone Ruins","Land_ruin_01"]]; +local _buildHouseBlock = [["House Block","A1","Land_HouseBlock_A1"],["House Block","A1","Land_HouseBlock_A1"],["House Block","A1_2","Land_HouseBlock_A1_2"],["House Block","A2","Land_HouseBlock_A2"],["House Block","A2_1","Land_HouseBlock_A2_1"],["House Block","A3","Land_HouseBlock_A3"],["House Block","B1","Land_HouseBlock_B1"],["House Block","B2","Land_HouseBlock_B2"],["House Block","B3","Land_HouseBlock_B3"],["House Block","B4","Land_HouseBlock_B4"],["House Block","B5","Land_HouseBlock_B5"],["House Block","B6","Land_HouseBlock_B6"],["House Block","C1","Land_HouseBlock_C1"],["House Block","C2","Land_HouseBlock_C2"],["House Block","C3","Land_HouseBlock_C3"],["House Block","C4","Land_HouseBlock_C4"],["House Block","C5","Land_HouseBlock_C5"]]; +local _buildApartment = [["Apartment","B","Land_MBG_ApartmentsTwo_B"],["Apartment","G","Land_MBG_ApartmentsTwo_G"],["Apartment","P","Land_MBG_ApartmentsTwo_P"],["Apartment","W","Land_MBG_ApartmentsOne_W"],["Apartment","Large","land_mbg_apartments_big_04"],["Apartment","Red Short","Land_Panelak"],["Apartment","Red Tall","Land_Panelak2"],["Apartment","Red Very Tall","Land_Panelak3"],["Apartment","Grey (closed)","Land_A_Office02"]]; +local _buildOffice = [["Office","International Hotel","Land_HouseB_Tenement"],["Office","Municipal Office","Land_A_MunicipalOffice"],["School","School (normal)","Land_A_Office01"]]; +EAT_buildShed = [["Shed","Nice Wood (open)","Land_Shed_Wooden"],["Shed","Rickety Wood (closed)","Land_kulna"],["Shed","Large Old Wood (closed)","Land_Shed_W4"],["Shed","Patchwork wood (closed)","Land_Shed_W03"],["Shed","Grey Wood (closed)","Land_Shed_W02"],["Shed","Old Metal (closed)","Land_Shed_m03"]]; +local _buildResidentMisc = [["Hospital","Hospital (normal)","land_a_hospital"],["Store","Pub","Land_A_Pub_01"],["Store","Supermarket 1","Land_A_GeneralStore_01"],["Store","Supermarket 2","Land_A_GeneralStore_01a"],["House","Mayor's Mansion","Land_A_Villa_EP1"]]; +EAT_buildResidential = _buildHouse + _buildHouseBlock + _buildApartment + _buildOffice + EAT_buildShed + _buildResidentMisc; + +//Industrial +local _buildCargo = [["Cargo","1 Closed Red Crate","Land_Misc_Cargo1Bo"],["Cargo","2 Closed Red Crates","Land_Misc_Cargo2D"],["Cargo","1 Open Cargo Crate","Land_Misc_Cargo1D"],["Cargo","Military Crate","US_WarfareBVehicleServicePoint_Base_EP1"]]; +local _buildIndustrialParts = [["Metal","Overhang","Land_Ind_Shed_02_main"],["Metal","Arch","Land_Ind_Shed_01_end"],["Station","Vehicle Ceckpoint","Land_Hlidac_budka"]]; +local _buildIndustrial = [["Industrial","Large Construction","MAP_A_BuildingWIP"],["Industrial","Hangar","Land_Hangar_2"],["Industrial","Workshop","Land_Ind_Workshop01_01"],["Industrial","Workshop","Land_Ind_Workshop01_04"],["Industrial","Workshop","Land_Ind_Workshop01_L"],["Industrial","Shed","Land_Shed_Ind02"],["Industrial","Repair Center","Land_repair_center"],["Industrial","Garage","Land_Ind_Garage01"],["Industrial","Industrial Warehouse","Land_Ind_Pec_03a"],["Industrial","Fuel Station","Land_A_FuelStation_Shed"],["Industrial","Fuel Station","Land_A_FuelStation_Feed"],["Industrial","Fuel Station","Land_A_FuelStation_Build"],["Industrial","Fuel Tank","Land_Fuel_tank_stairs"],["Industrial","Fuel Tank","Land_Ind_TankSmall"],["Industrial","Large Factory","Land_Ind_Vysypka"],["Industrial","Small Factory","Land_Tovarna2"],["Industrial","Well","MAP_Pumpa"],["Industrial","Well","Land_Misc_Well_C_EP1"],["Industrial","Fire Barrel","Land_Fire_barrel"]]; +EAT_buildIndustrial = _buildIndustrial + _buildCargo + _buildIndustrialParts; + +// Farm +EAT_buildFarm = [["Farm","Barn","Land_stodola_old_open"],["Farm","Cowshed Section A","Land_Farm_Cowshed_a"],["Farm","Cowshed Section B","Land_Farm_Cowshed_b"],["Farm","Cowshed Section C","Land_Farm_Cowshed_c"],["Farm","Barn","Land_Barn_W_01"],["Farm","Barn","Land_stodola_open"],["Farm","Barn","Land_Barn_W_02"],["Farm","Hay Bale","Land_seno_balik"]]; + +//Military +EAT_buildMilitary = [["Military","Airplane Hangar","Land_SS_hangar"],["Military","Administration","Land_Mil_House"],["Military","ATC","Land_Mil_ControlTower"],["Barracks","L-Barracks","Land_Mil_Barracks_L"],["Barracks","L-Barracks","Land_Mil_Barracks_i"],["Barracks","Open Barracks","Land_Mil_Barracks"],["Military","Fire Station","Land_a_stationhouse"],["Depot","Warfare Depot","WarfareBDepot"],["Hospital","Field Hospital","INS_WarfareBFieldhHospital"],["Military","Guardhouse","Land_Mil_Guardhouse"],["Military","Military Tent","CampEast_EP1"],["Military","Medical Tent (Red Cross)","MASH_EP1"],["Military","Medical Tent","Camp_EP1"],["Military","Military Tent","Land_tent_east"]]; + +//Religious +EAT_buildReligious = [["Church","Orange","Land_Church_01"],["Church","Open","Land_Church_03"],["Church","Closed","Land_Church_02"],["Church","Destroyed","Land_Church_05R"],["Mosque","Small","Land_A_Mosque_small_2_EP1"],["Mosque","Medium","Land_A_Mosque_small_1_EP1"],["Mosque","Large","Land_A_Mosque_big_hq_EP1"],["Mosque","Addon","Land_A_Mosque_big_addon_EP1"],["Mosque","Wall","Land_A_Mosque_big_wall_EP1"]]; + +//Graves +EAT_buildGrave = [["Grave","Grave (normal)","Grave"],["Grave","Cross 1","GraveCross1"],["Grave","Cross 2","GraveCross2"],["Grave","Cross /w Helmet","GraveCrossHelmet"],["Grave","Mass Grave","Mass_grave_DZ"]]; + +//Castle +EAT_buildCastle = [["Castle","Gate","Land_A_Castle_Gate"],["Castle","Tower","Land_A_Castle_Bergfrit"],["Castle","Stairs","Land_A_Castle_Stairs_A"],["Castle","Wall","Land_A_Castle_Wall1_20"],["Castle","Wall","Land_A_Castle_Wall2_30"],["Castle","Wall","Land_A_Castle_WallS_10"],["Castle","Wall End","Land_A_Castle_Wall2_End_2"],["Castle","Wall End","Land_A_Castle_Wall1_20_Turn"],["Castle","Bastion","Land_A_Castle_Bastion"],["Castle","Keep","Land_A_Castle_Donjon"],["Castle","End1","Land_A_Castle_Wall1_End"],["Castle","End2","Land_A_Castle_WallS_End"],["Castle","End3","Land_A_Castle_Wall1_End_2"],["Castle","End4","Land_A_Castle_Wall2_End"],["Castle","End5","Land_A_Castle_Wall2_End_2"],["Dock","Wall","MAP_molo_krychle"]]; + +// Epoch Modular Buildables +local _buildCinder = [["Cinder","1/2 Wall","CinderWallHalf_DZ"],["Cinder","1/2 Wall w/ Gap","CinderWallHalf_Gap_DZ"],["Cinder","Full Wall","CinderWall_DZ"],["Cinder","Full Wall w/ Window","CinderWallWindow_DZ"],["Cinder","Garage Doorway","CinderWallDoorway_DZ"],["Cinder","Garage Doorway Open Top","CinderGarageOpenTopFrame_DZ"],["Cinder","Doorway","CinderWallSmallDoorway_DZ"],["Cinder","Doorway w/ Hatch","CinderDoorHatch_DZ"],["Cinder","Tall Gate","CinderGateFrame_DZ"],["Cinder","Bunker","Concrete_Bunker_DZ"]]; +local _buildMetal = [["Metal","Panel","MetalPanel_DZ"],["Metal","4X Floor","MetalFloor4x_DZ"],["Metal","Floor","MetalFloor_DZ"],["Metal","1/2 Floor","MetalFloor_Half_DZ"],["Metal","1/4 Floor","MetalFloor_Quarter_DZ"],["Metal","Glass Floor","GlassFloor_DZ"],["Metal","1/2 Glass Floor","GlassFloor_Half_DZ"],["Metal","1/4 Glass Floor","GlassFloor_Quarter_DZ"],["Metal","Pillar","MetalPillar_DZ"],["Metal","Corrugated Fence","Fence_corrugated_DZ"],["Metal","Tank Trap","Hedgehog_DZ"],["Metal","Wire Fence","Fort_RazorWire"],["Metal","Metal Gate","MetalGate_DZ"],["Metal","Drawbridge","Metal_Drawbridge_DZ"]]; +local _buildWood = [["Wood","Ramp","WoodRamp_DZ"],["Wood","Floor w/ Stairs","WoodFloorStairs_DZ"],["Wood","4X Floor","WoodFloor4x_DZ"],["Wood","Wood Floor","WoodFloor_DZ"],["Wood","1/2 Floor","WoodFloorHalf_DZ"],["Wood","1/4 Floor","WoodFloorQuarter_DZ"],["Wood","Triangle Floor","WoodTriangleFloor_DZ"],["Wood","Large Wall","WoodLargeWall_DZ"],["Wood","Large Doorway","WoodLargeWallDoor_DZ"],["Wood","Large Wall w/Window","WoodLargeWallWin_DZ"],["Wood","Garage Frame","Land_DZE_GarageWoodDoor"],["Wood","Open Top Garage","Land_DZE_WoodOpenTopGarageDoor"],["Wood","Wood Gate Frame","WoodGateFrame_DZ"],["Wood","Wood Gate","Land_DZE_WoodGate"],["Wood","Wall","WoodSmallWall_DZ"],["Wood","1/3 Wall","WoodSmallWallThird_DZ"],["Wood","Triangle Wall","WoodTriangleWall_DZ"],["Wood","Wall w/Window","WoodSmallWallWin_DZ"],["Wood","Doorway","WoodSmallWallDoor_DZ"],["Wood","Stairs","WoodStairsSans_DZ"],["Wood","Stairs w/Stilts","WoodStairs_DZ"],["Wood","Stairs w/Rails","WoodStairsRails_DZ"],["Wood","Ladder","WoodLadder_DZ"],["Wood","Handrail","WoodHandrail_DZ"],["Wood","Pillar","WoodPillar_DZ"],["Wood","Door Frame","DoorFrame_DZ"],["Wood","Frame w/ Door","Door_DZ"]]; +local _buildNets = [["Camo Net","Desert","DesertCamoNet_DZ"],["Camo Net","Forest","ForestCamoNet_DZ"],["Camo Net","Winter","WinterCamoNet_DZ"],["Camo Net","Large Desert","DesertLargeCamoNet_DZ"],["Camo Net","Large Forest","ForestLargeCamoNet_DZ"],["Camo Net","Large Winter","WinterLargeCamoNet_DZ"]]; +local _buildStorage = [["Storage","Large Storage Shed","StorageShed_DZ"],["Storage","Upgraded Large Storage Shed","StorageShed2_DZ"],["Storage","Gun Rack","GunRack_DZ"],["Storage","Upgraded Gun Rack","GunRack2_DZ"],["Storage","Wood Crate","WoodCrate_DZ"],["Storage","Upgraded Wood Crate","WoodCrate2_DZ"],["Storage","Wood Shack","WoodShack_DZ"],["Storage","Upgraded Wood Shack","WoodShack2_DZ"],["Storage","Fancy Wood Shed","Wooden_shed_DZ"],["Storage","Upgraded Fancy Wood Shed","Wooden_shed2_DZ"],["Storage","Safe","VaultStorageLocked"],["Storage","Upgraded Safe","VaultStorage2Locked"],["Storage","Tall Safe","TallSafeLocked"],["Storage","Lockbox","LockboxStorageLocked"],["Storage","Upgraded Lockbox","LockboxStorage2Locked"],["Storage","Winter Lockbox","LockboxStorageWinterLocked"],["Storage","Upgraded Winter Lockbox","LockboxStorageWinter2Locked"]]; +local _buildSandbags = [["SandBags","Sandbag Fence","Sandbag1_DZ"],["SandBags","Sandbag Fence (round)","BagFenceRound_DZ"],["SandBags","H-barrier Cube","Land_HBarrier1_DZ"],["SandBags","H-barrier (short)","Land_HBarrier3_DZ"],["SandBags","H-barrier (long)","Land_HBarrier5_DZ"],["SandBags","H-barrier (extra large)","Base_WarfareBBarrier10xTall"],["SandBags","Sandbag Nest","SandNest_DZ"]]; +local _buildMisc = [["Misc","Workbench","WorkBench_DZ"],["Misc","Advanced Workbench","Advanced_WorkBench_DZ"],["Misc","Outhouse","OutHouse_DZ"],["Misc","Fuel Pump","FuelPump_DZ"],["Misc","Light Pole","LightPole_DZ"],["Misc","Generator","Generator_DZ"],["Misc","Plot Pole","Plastic_Pole_EP1_DZ"],["Misc","Canvas Hut","CanvasHut_DZ"],["Misc","Park Bench","ParkBench_DZ"],["Misc","Stick Fence","StickFence_DZ"],["Misc","Deer Stand","DeerStand_DZ"],["Misc","Scaffolding","Scaffolding_DZ"],["Misc","Fire Barrel","FireBarrel_DZ"],["Misc","Machine Gun Nest","M240Nest_DZ"],["Misc","Cooking Tripod","CookTripod_DZ"],["Misc","Stone Oven","Stoneoven_DZ"],["Misc","Toilet","Commode_DZ"],["Misc","Wardrobe","Wardrobe_DZ"],["Misc","Fridge","Fridge_DZ"],["Misc","Washing Machine","Washing_Machine_DZ"],["Misc","Server Rack","Server_Rack_DZ"],["Misc","ATM","ATM_DZ"],["Misc","Armchair","Armchair_DZ"],["Misc","Sofa","Sofa_DZ"],["Misc","Arcade Game","Arcade_DZ"],["Misc","Vending Machine","Vendmachine1_DZ"],["Misc","Vending Machine","Vendmachine2_DZ"],["Misc","Storage Crate","StorageCrate_DZ"],["Misc","Camo Storage Crate","CamoStorageCrate_DZ"],["Misc","Water Pump","Water_Pump_DZ"],["Misc","Greenhouse","Greenhouse_DZ"],["Misc","Bed","Bed_DZ"],["Misc","Table","Table_DZ"],["Misc","Office Chair","Office_Chair_DZ"],["Misc","Green Garage","Garage_Green_DZ"],["Misc","White Garage","Garage_White_DZ"],["Misc","Brown Garage","Garage_Brown_DZ"],["Misc","Grey Garage","Garage_Grey_DZ"],["Misc","Civilian Helipad","Helipad_Civil_DZ"]]; +EAT_buildModular = _buildCinder + _buildMetal + _buildWood + _buildNets + _buildStorage + _buildSandbags + _buildMisc; + +//Ore +EAT_buildOre = [["Ore","Gold","Gold_Vein_DZE"],["Ore","Silver","Silver_Vein_DZE"],["Ore","Iron","Iron_Vein_DZE"]]; + +//Roads +EAT_buildRoad = [["Fence","Fence","MAP_zed2_civil"],["Fence","Fence","MAP_Wall_Fen1_5_Pole"],["Fence","Fence","MAP_Wall_Fen1_5"],["Fence","Fence","MAP_Wall_Fen1_5_Hole"],["Fence","Fence","MAP_Wall_Tin_4"],["Fence","Fence","MAP_Wall_Tin_4_2"],["Tree","Tree","MAP_t_picea2s"],["Tree","Tree","MAP_t_picea1s"],["Runway","Runway","MAP_runway_beton"],["Runway","Runway","MAP_runway_end15"],["Runway","Runway","MAP_runway_main"],["Runway","Runway","MAP_runway_poj_L_2_end"],["Runway","Runway","MAP_runway_poj_T_2"],["Runway","Runway","MAP_runway_poj_draha"],["Runway","Runway","MAP_runway_poj_L_2"],["Runway","Runway","MAP_runway_poj_T_1"],["Runway","Runway","MAP_runway_beton_end1"],["Runway","Runway","MAP_runway_beton_end2"],["Road","Road","MAP_asf3_10_75"],["Road","Road","MAP_asf3_6konec"],["Road","Road","MAP_asf3_0_2000"],["Road","Road","MAP_kr_t_asf3_asf3"],["Road","Road","MAP_asf3_6"],["Road","Road","MAP_asf3_12"],["Road","Road","MAP_asf2_0_2000"],["Road","Road","MAP_asf3_10_25"],["Road","Road","MAP_asf3_22_50"],["Road","Road","MAP_asf3_10_50"],["Road","Road","MAP_asf2_12"],["Road","Road","MAP_city_0_2000"],["Road","Road","MAP_city_10_75"],["Road","Road","MAP_kr_t_city_asf3"],["Road","Road","MAP_city_10_25"],["Road","Road","MAP_city_6"],["Road","Gravel Road","MAP_grav_1_1000"],["Road","Gravel Road","MAP_grav_10_50"],["Road","Gravel Road","MAP_grav_6konec"],["Road","Gravel Road","MAP_grav_30_25"],["Road","Gravel Road","MAP_grav_6"],["Road","Gravel Road","MAP_grav_15_75"],["Road","Gravel Road","MAP_grav_10_25"],["Road","Grass Cutter","ClutterCutter_EP1"]]; + +//Other +local _buildMarker = [["Marker","Archway","Sign_circle_EP1"]]; +local _buildSand = [["Sandbag","Nest (BIG)","Land_fortified_nest_big"],["Sandbag","2 Story cubes /w Net","Land_Fort_Watchtower"]]; +local _buildRamp = [["Ramp","Concrete Tall","Land_ConcreteRamp"],["Ramp","Concrete Short","RampConcrete"],["Ramp","Wood Small","Land_WoodenRamp"]]; +local _buildMisc = [["Statue","Soldiers /w Flag","Land_A_statue01"],["Statue","Tank","Land_A_statue02"],["Misc","Archway","Land_brana02nodoor"]]; +EAT_buildOutdoors = [["Outdoors","Outhouse","Land_KBud"]]; +EAT_buildOther = EAT_buildOutdoors + _buildMisc + _buildRamp + _buildSand + _buildMarker; + + +EAT_allBuildingList = EAT_buildResidential + EAT_buildIndustrial + EAT_buildMilitary + EAT_buildReligious + EAT_buildGrave + EAT_buildCastle + EAT_buildOre + EAT_buildOther; + +/***************** add basses here for base manager *****************/ +BCBaseList = [ + [ + "base1", + "Test Base", + [0,23,0], + [ + ["CinderWallDoor_DZ",[0.0551758,-0.736328,3.37357],239.861], + ["MetalFloor_DZ",[2.53516,0.763672,6.58356],59.9374], + ["MetalFloor_DZ",[2.54492,0.763672,3.19955],59.8886], + ["MetalFloor_DZ",[-2.00488,-1.83691,6.58356],239.937], + ["MetalFloor_DZ",[-2.00488,-1.83691,3.19955],239.889], + ["CinderWall_DZ",[-4.20508,1.36328,3.38358],150.186], + ["CinderWallDoorSmall_DZ",[-2.5249,3.76367,3.38358],239.993], + ["FireBarrel_DZ",[4.40527,1.86328,3.43457],59.2191], + ["CinderWallDoor_DZ",[4.78516,2.06348,-0.000427246],59.9374], + ["MetalFloor_DZ",[-0.0947266,5.26367,6.58356],239.937], + ["MetalFloor_DZ",[-0.0947266,5.26367,3.19955],59.8886], + ["WoodSmallWallThird_DZ",[4.84521,2.06348,3.38358],239.847], + ["WoodSmallWallThird_DZ",[4.89502,1.96289,3.38358],59.8468], + ["MetalFloor_DZ",[-4.63477,2.66309,3.19955],239.889], + ["MetalFloor_DZ",[-4.63477,2.66309,6.58356],59.9374], + ["CinderWall_DZ",[-0.214844,-5.63672,3.38358],329.709], + ["CinderWallDoorSmall_DZ",[2.71484,-5.23633,3.39355],59.7286], + ["MetalFloor_DZ",[5.16504,-3.83691,6.58356],239.937], + ["MetalFloor_DZ",[5.1748,-3.83691,3.19955],59.8886], + ["MetalFloor_DZ",[0.625,-6.43652,6.58356],59.9374], + ["MetalFloor_DZ",[0.635254,-6.43652,3.19955],239.889], + ["CinderWall_DZ",[6.18506,2.76367,3.38358],60.0843], + ["CinderWallDoorSmall_DZ",[2.33496,6.36328,-0.000427246],59.7633], + ["CinderWall_DZ",[-1.50488,7.46289,3.38956],329.972], + ["CinderWall_DZ",[-1.54492,7.46289,-0.000427246],150.363], + ["CinderWall_DZ",[-6.04492,4.76367,-0.000427246],148.928], + ["CinderWallDoorSmall_DZ",[7.34521,-2.33691,0.009552],59.8816], + ["CinderWallHalf_DZ",[-6.23486,4.66309,3.38956],149.364], + ["MetalFloor_DZ",[7.08496,3.36328,6.58356],59.9374], + ["MetalFloor_DZ",[-6.54492,-4.53711,3.19955],239.889], + ["MetalFloor_DZ",[-6.54492,-4.53711,6.58356],239.937], + ["MetalFloor_DZ",[5.36523,6.36328,3.18356],59.7772], + ["CinderWall_DZ",[8.55518,1.06348,-0.000427246],149.939], + ["CinderWall_DZ",[-8.59473,-1.13672,3.38358],150.109], + ["MetalFloor_DZ",[8.90527,0.263672,3.19357],59.8189], + ["CinderWall_DZ",[6.375,-6.23633,3.37958],149.81], + ["CinderWall_DZ",[6.375,-6.23633,-0.000427246],329.81], + ["Sandbag1_DZ",[6.68506,6.16309,-0.00143433],329.956], + ["MetalFloor_DZ",[4.44482,7.96289,3.19955],59.8886], + ["MetalFloor_DZ",[4.45508,7.96289,6.58356],59.9374], + ["MetalFloor_DZ",[-9.1748,0.0634766,6.58356],239.937], + ["MetalFloor_DZ",[-9.1748,0.0634766,3.19955],239.889], + ["CinderWallHalf_DZ",[1.60498,-9.03711,3.37958],149.81], + ["CinderWall_DZ",[1.60498,-9.03711,-0.000427246],329.81], + ["CinderWall_DZ",[-4.58496,-8.13672,3.38358],329.818], + ["CinderWallDoorSmall_DZ",[7.10498,6.36328,3.39755],330.226], + ["MetalFloor_DZ",[8.5752,4.26367,3.19357],59.7494], + ["MetalFloor_DZ",[8.70508,4.26367,6.58755],59.9444], + ["MetalFloor_DZ",[9.71484,-1.13672,6.58356],59.9374], + ["MetalFloor_DZ",[-3.90479,-9.03711,3.19955],239.889], + ["MetalFloor_DZ",[-3.91504,-9.03711,6.58356],239.937], + ["CinderWallDoorSmall_DZ",[9.78516,1.76367,3.39755],149.591], + ["WoodStairsSans_DZ",[9.64502,-3.23633,0.299561],149.952], + ["WoodSmallWallThird_DZ",[10.1748,-1.83691,3.37756],149.842], + ["WoodSmallWallThird_DZ",[10.2148,-1.73633,3.37756],329.842], + ["CinderWall_DZ",[3.24512,10.1631,-0.000427246],150.363], + ["CinderWall_DZ",[3.24512,10.1631,3.37958],330.363], + ["CinderWall_DZ",[-9.03516,-5.73633,-0.000427246],60.2108], + ["CinderWall_DZ",[-9.60498,-4.73633,3.38956],60.2249], + ["CinderWall_DZ",[-10.5649,2.16309,-0.000427246],150.057], + ["CinderWallHalf_DZ",[-10.5649,2.16309,3.37958],330.057], + ["CinderWall_DZ",[-8.23486,-7.13672,3.38956],60.0563], + ["CinderWall_DZ",[6.85498,9.16309,3.37958],60.0283], + ["CinderWall_DZ",[6.85498,9.16309,-0.000427246],240.028], + ["CinderWall_DZ",[-11.5552,-1.33691,-0.000427246],60.3165], + ["CinderWallHalf_DZ",[-11.5552,-1.33691,3.37958],240.317], + ["CinderWall_DZ",[11.1353,-3.43652,-0.000427246],329.81], + ["CinderWall_DZ",[11.1353,-3.43652,3.37958],149.81], + ["CinderWallHalf_DZ",[-2.60498,-11.4365,3.37958],150.089], + ["CinderWall_DZ",[-2.60498,-11.4365,-0.000427246],330.089], + ["CinderWallHalf_DZ",[10.7451,5.46289,3.37357],59.9723], + ["CinderWall_DZ",[12.0649,0.163086,3.37958],60.1405], + ["CinderWall_DZ",[12.0649,0.163086,-0.000427246],240.14], + ["CinderWall_DZ",[-6.29492,-10.5371,-0.000427246],60.2108], + ["CinderWallHalf_DZ",[-6.29492,-10.5371,3.37958],240.211], + ["WoodStairsSans_DZ",[12.2749,-1.63672,-2.20044],149.947] + ] + ], + [ + "Base2", //Name the base + "Bambi Bunker", //give it a display name + [0,23,0], //This is the distance the base will spawn from you + [ + ["MetalFloor_DZ",[-0.635254,-0.428711,3.1275],124.745], + ["CinderWall_DZ",[0.869141,1.74072,-0.076416],214.745], + ["CinderWall_DZ",[1.53467,-1.93359,-0.076355],304.745], + ["CinderWall_DZ",[-2.80469,1.07617,-0.0765076],124.745], + ["CinderWallDoorSmall_DZ",[-2.13965,-2.59863,-0.0762634],34.7454] + ] + ] // to add a base place a comma here. ex: ], + //add base from server/EpochAdminToolLogs/SavedBases here +]; + +diag_log("Admin Tools: config.sqf loaded"); diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/SuperAdmin/functions.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/SuperAdmin/functions.sqf new file mode 100755 index 0000000..9b024ee --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/SuperAdmin/functions.sqf @@ -0,0 +1,3622 @@ +/* +EAT_fnc_actionAllowed = { + local _onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1; + local _canDo = (!r_drag_sqf && !r_player_unconscious && !_onLadder && (vehicle player == player)); + _canDo +}; +*/ + +// Generates a selectable list of players for teleports and spectate +// Title is set by setting EAT_pMenuTitle = "TITLE HERE" before calling the function +EAT_pMenuTitle = ""; +EAT_fnc_playerSelect = +{ + private["_pmenu","_arr"]; + _pmenu = [["",true],[EAT_pMenuTitle, [-1], "", -5, [["expression", ""]], "1", "0"]]; + for "_i" from (_this select 0) to (_this select 1) do + {_arr = [format['%1', plist select (_i)], [12], "", -5, [["expression", format ["pselect5 = plist select %1;", _i]]], "1", "1"]; _pmenu set [_i + 2, _arr];}; + if (count plist > (_this select 1)) then {_pmenu set [(_this select 1) + 2, ["Next", [13], "", -5, [["expression", "snext = true;"]], "1", "1"]];} + else {_pmenu set [(_this select 1) + 2, ["", [-1], "", -5, [["expression", ""]], "1", "0"]];}; + _pmenu set [(_this select 1) + 3, ["Exit", [13], "", -5, [["expression", "pselect5 = 'exit';"]], "1", "1"]]; + showCommandingMenu "#USER:_pmenu"; +}; + +// Convert multidimensional array to single dimensional - Used in adminBuild +myfnc_MDarray = { + local _list = []; + local _temp = _this select 0; + + for "_i" from 0 to ((count _temp) - 1) do { + _list set [_i,((_temp select _i) select 2)]; + }; + _list +}; + +// Prints the position of the admin or a cursorTarget to the RPT +EAT_GetPosition = { + private "_text"; + local _obj = _this select 0; + if(isNull _obj) exitWith {"No target" call dayz_rollingMessages;}; + local _pos = getPosATL _obj; + local _dir = getDir _obj; + + if (isPlayer _obj) then { + _text = format["Position of %1 is: %3%2",name _obj,_pos,_dir]; + } else { + _text = format["Position of %1 is: %3%2",typeOf _obj,_pos,_dir]; + }; + + if(EAT_logMinorTool) then { + "Saved to client RPT and EAT logs" call dayz_rollingMessages; + diag_log _text; + _text call EAT_Logger; + } else { + "Saved to client RPT" call dayz_rollingMessages; + diag_log _text; + }; +}; + +// Posts object information to system chat +EAT_GetObjDetails = { + local _obj = cursorTarget; + if(isNull _obj) exitWith {"No target" call dayz_rollingMessages;}; + local _charID = _obj getVariable ["CharacterID","0"]; + local _objID = _obj getVariable["ObjectID","0"]; + local _objUID = _obj getVariable["ObjectUID","0"]; + local _lastUpdate = _obj getVariable ["lastUpdate",time]; + local _owner = _obj getVariable["ownerPUID","0"]; + + systemChat format["%1: charID: %2, objID: %3, objUID: %4, Owner %5, lastUpdate: %6",typeOF _obj,_charID,_objID,_objUID,_owner,_lastUpdate]; +}; + +// Flips the nearest land vehicle +EAT_FlipVeh = { + local _vehicle = getPos player nearestObject "LandVehicle"; + if (isNull _vehicle) exitWith {"There are no vehicles near to flip" call dayz_rollingMessages;}; + _vehicle setVectorUp [0,0,1]; + local _name = getText(configFile >> "cfgVehicles" >> (typeOf _vehicle) >> "displayName"); + format ["Your %1 is now right-side up",_name] call dayz_rollingMessages; +}; + +// Ejects players from a vehicle +EAT_Eject = { +local _ct = cursorTarget; +if(isNull _ct) exitWith {"No target" call dayz_rollingMessages;}; +if !(_ct isKindOf "AllVehicles") exitWith {"Target not a vehicle" call dayz_rollingMessages;}; +if ((count crew _ct) < 1) exitWith {format["There are no players in the %1", (getText(configFile >> "CfgVehicles" >> (typeOf _ct) >> "displayName"))] call dayz_rollingMessages;}; +_ct forceSpeed 0; +{_x action ["Eject", _ct];} forEach crew _ct; +uiSleep 5; +_ct forceSpeed -1; +}; + +// Allows the player to glide forward quickly across the map. It is called from key bind. +EAT_FastForward = { + local _player = vehicle player; + local _dir = getdir _player; + local _pos = getPosATL _player; + local _pos2 = getPos _player; + local _z2 = _pos2 select 2; + local _z = 0; + + if (_player isKindOf "Air" && _z2 < 20 && isEngineOn _player) then {_z = _z2 + 30;} else {if (_z2 > 3) then {_z = _z2;} else {if (surfaceIsWater _pos) then {_z = 2;} else {_z=0;};};}; + _pos = [(_pos select 0) + 5 * sin (_dir), (_pos select 1) + 5 * cos (_dir), _z]; + if (surfaceIsWater _pos) then {_player setPosASL _pos;} else {_player setPosATL _pos;}; +}; + +// Toggles fast forward key bind on and off +EAT_FastForwardToggle = { + local _active = _this select 0; + if (_active) then { + ["FastWalk"] call EAT_Keybind; + } else { + ["EndFastWalk"] call EAT_Keybind; + }; +}; + +// Allows the admin to leap vertically or directionally +EAT_AdminFastUp = { + local _vel = velocity player; + player setVelocity [_vel select 0,_vel select 1,5]; +}; + +// This function toggles the jump key bind on and off +EAT_FastUpToggle = { + local _active = _this select 0; + if (_active) then { + ["FastUp"] call EAT_Keybind; + } else { + ["EndFastUp"] call EAT_Keybind; + }; +}; + +// Lowers the terrain +EAT_GrassOffToggle = { + local _active = _this select 0; + local _toggle = "on"; + if (_active) then { + setTerrainGrid 50; + }else{ + _toggle = "off"; + setTerrainGrid 25; + }; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has turned grass %3",name player,getPlayerUID player,_toggle] call EAT_Logger;}; +}; + +// Allows admin to be invisible to other players +EAT_AdminInvisible = { + EAT_clientToServer = ["invisibility",player,[(_this select 0),(getPos player)],dayz_authKey]; + publicVariableServer "EAT_clientToServer"; +}; + +// Turns the build count to one and removes the requirement for a plot pole to build +EAT_adminBuildCount = { + local _active = _this select 0; + if(_active) then { + DZE_StaticConstructionCount = 1; + DZE_requireplot = 0; + } else { + DZE_StaticConstructionCount = 0; + DZE_requireplot = 1; + }; +}; + +EAT_AddWeapon = { + #define IS_HANDGUN(wpn) (getNumber (configFile >> "CfgWeapons" >> wpn >> "type") == 2) + local _gun = _this select 0; + local _ammo = _this select 1; + local _mags = []; + + if (count _this > 2) then { // grenade launcher ammo + player addMagazine (_this select 2); + player addMagazine (_this select 2); + }; + + if (IS_HANDGUN(_gun)) then { + { + if (IS_HANDGUN(_x)) exitWith { + player removeWeapon _x; + _mags = getArray (configFile >> "cfgWeapons" >> _x >> "magazines"); + player removeMagazines (_mags select 0); + } + } count (weapons player); + } else { + _mags = getArray (configFile >> "cfgWeapons" >> (primaryWeapon player) >> "magazines"); + player removeWeapon (primaryWeapon player); + player removeMagazines (_mags select 0); + }; + + // Add magazines before gun so the gun loads ammo on spawn + player addMagazine _ammo; + player addMagazine _ammo; + player addWeapon _gun; + player selectWeapon _gun; +}; + +EAT_Loadouts = { + local _primaryWeapon = _this select 0; + local _secondaryWeapon = _this select 1; + local _primaryAmmo = getArray (configFile >> "cfgWeapons" >> _primaryWeapon >> "magazines"); + local _secondaryAmmo = getArray (configFile >> "cfgWeapons" >> _secondaryWeapon >> "magazines"); + local _rifleMag = _primaryAmmo select 0; + local _pistolMag = _secondaryAmmo select 0; + local _weps = ["ItemRadio","NVGoggles_DZE","Binocular_Vector","ItemGPS","ItemHatchet","ItemKnife","ItemMatchbox","ItemEtool","ItemToolbox","ItemCrowbar",_primaryWeapon,_secondaryWeapon]; + local _bloodbag = ["bloodBagONEG","ItemBloodbag"] select dayz_classicBloodBagSystem; + local _mags = ["ItemMorphine","ItemEpinephrine","ItemAntibiotic","ItemPainkiller","ItemWaterBottleBoiled","FoodBeefCooked","ItemBandage","ItemBandage",_bloodbag,_rifleMag,_rifleMag,_rifleMag,_pistolMag,_pistolMag,_pistolMag]; + + removeAllWeapons player; + removeAllItems player; + removeBackpack player; + + player addBackpack "CoyoteBackpack_Camping_DZE2"; + + { + player addMagazine _x; + } count _mags; + + { + player addWeapon _x; + } count _weps; + + player selectWeapon _primaryWeapon; +}; + +EAT_AddBackPack = { + removeBackpack player; + player addBackpack (_this select 0); +}; + +EAT_AddMeds = { + local _bloodbag = ["bloodBagONEG","ItemBloodbag"] select dayz_classicBloodBagSystem; + { + player addMagazine _x; + } count ["ItemMorphine","ItemEpinephrine","ItemAntibiotic","ItemPainkiller","ItemSodaPepsi","FoodBeefCooked","ItemBandage","ItemBandage",_bloodbag]; +}; + +EAT_RemoveGear = { + removeAllWeapons player; + removeAllItems player; + removeBackpack player; + "Gear deleted!" call dayz_rollingMessages; +}; + +EAT_AddTools = { + local _tools = ["ItemRadio","ItemHatchet","ItemKnife","ItemMatchbox","ItemEtool","ItemToolbox","ItemCrowbar"]; + + { + if (_x in weapons player) then { + player removeWeapon _x; + }; + } count _tools; + + { + player addWeapon _x; + } count _tools; +}; + +EAT_AddTempVeh = { + local _vehicle = _this select 0; + local _dir = getDir vehicle player; + local _pos = getPosATL vehicle player; + _pos = [(_pos select 0) + 9 * sin (_dir), (_pos select 1) + 9 * cos (_dir), 0]; + + EAT_clientToServer = ["tempVeh",player,[_vehicle,_dir,_pos],dayz_authKey]; + publicVariableServer "EAT_clientToServer"; + + format["Spawned a %1", (getText(configFile >> "cfgVehicles" >> _vehicle >> "displayName"))] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has added a temporary vehicle: %3",name player,getPlayerUID player,_vehicle] call EAT_Logger;}; +}; + +EAT_AddVeh = { + local _vehicle = _this select 0; + local _dir = getDir vehicle player; + local _pos = getPos vehicle player; + _pos = [(_pos select 0) + 9 * sin (_dir), (_pos select 1) + 9 * cos (_dir), 0]; + local _keyColor = ["Green","Red","Blue","Yellow","Black"] call BIS_fnc_selectRandom; + local _keyNumber = (floor(random 2500)) + 1; + local _keySelected = format[("ItemKey%1%2"),_keyColor,_keyNumber]; + local _isKeyOK = isClass(configFile >> "CfgWeapons" >> _keySelected); + false call dz_fn_meleeMagazines; + local _isOk = [player,_keySelected] call BIS_fnc_invAdd; + true call dz_fn_meleeMagazines; + + if (_isOk and _isKeyOK) then { + PVDZE_veh_Publish2 = [[_dir,_pos],_vehicle,false,_keySelected,player,dayz_authKey]; + publicVariableServer "PVDZE_veh_Publish2"; + + format["%1 spawned, key added to toolbelt", (getText(configFile >> "cfgVehicles" >> _vehicle >> "displayName"))] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has added a permanent vehicle: %3",name player,getPlayerUID player,_vehicle] call EAT_Logger;}; + } else { + "Your toolbelt is full" call dayz_rollingMessages; + }; +}; + +EAT_AddVehDialog = { + PermDialogSelected = -1; + TempDialogSelected = -1; + AdminDialogList = 13000; + if (isNil "EAT_EpochOnlyVehicles") then {EAT_EpochOnlyVehicles = false;}; + if (isNil "vhnlist") then {vhnlist = [];}; + + LoadAllVehiclesList = { + lbClear AdminDialogList; + vhnlist = +EAT_allVehList; + + { + local _index = lbAdd [AdminDialogList, format["%2 (%1)", _x select 0, _x select 1]]; + lbSetPicture [AdminDialogList, _index, (_x select 2)]; + } count vhnlist; + }; + + LoadEpochOnlyList = { + lbClear AdminDialogList; + vhnlist = +EAT_allEpochVehList; + + { + local _index = lbAdd [AdminDialogList, format["%2 (%1)", _x select 0, _x select 1]]; + lbSetPicture [AdminDialogList, _index, (_x select 2)]; + } count vhnlist; + }; + + createDialog "EAT_Veh_AdminDialog"; + call LoadAllVehiclesList; + + LoadSpecificList = { + lbClear AdminDialogList; + vhnlist = []; + local _kindOf = _this select 0; + if (EAT_EpochOnlyVehicles) then { + { + if ((_x select 0) isKindOf _kindOf) then { + vhnlist set [count vhnlist, _x] + }; + } count EAT_allEpochVehList; + } else { + { + if ((_x select 0) isKindOf _kindOf) then { + vhnlist set [count vhnlist, _x] + }; + } count EAT_allVehList; + }; + { + local _index = lbAdd [AdminDialogList, format["%2 (%1)", _x select 0, _x select 1]]; + lbSetPicture [AdminDialogList, _index, (_x select 2)]; + } count vhnlist; + }; + + waitUntil { !dialog }; + if ((PermDialogSelected < 0) && (TempDialogSelected < 0)) exitWith {}; + + if (PermDialogSelected > -1) then { + [((vhnlist select PermDialogSelected) select 0)] call EAT_AddVeh; + }; + + if (TempDialogSelected > -1) then { + [((vhnlist select TempDialogSelected) select 0)] call EAT_AddTempVeh; + }; +}; + +EAT_AISpawn = { + private ["_player","_done"]; + if (!("ItemGPS" in items player)) then {player addWeapon "ItemGPS";}; + EAT_aiArea = 0; + EAT_aiCount = 0; + _done = false; + EAT_aiSpawnType = ""; + + EAT_aiTypeMenu = + [ + ["",true], + ["Select AI Type:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["Hero",[],"", -5,[["expression","EAT_aiSpawnType = ""Hero"";"]],"1","1"], + ["Bandit",[],"", -5,[["expression","EAT_aiSpawnType = ""Bandit"";"]],"1","1"], + ["", [], "", -5,[["expression", ""]], "1", "0"], + ["Exit", [20], "", -5, [["expression", "EAT_aiArea = -1;"]], "1", "1"] + ]; + + EAT_aiAreaMenu = + [ + ["",true], + ["Set AI Movement Radius:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["40m",[],"", -5,[["expression","EAT_aiArea = 40;"]],"1","1"], + ["50m",[],"", -5,[["expression","EAT_aiArea = 50;"]],"1","1"], + ["75m",[],"", -5,[["expression","EAT_aiArea = 75;"]],"1","1"], + ["100m",[],"", -5,[["expression","EAT_aiArea = 100;"]],"1","1"], + ["150m",[],"", -5,[["expression","EAT_aiArea = 150;"]],"1","1"], + ["200m",[],"", -5,[["expression","EAT_aiArea = 200;"]],"1","1"], + ["300m",[],"", -5,[["expression","EAT_aiArea = 200;"]],"1","1"], + ["", [], "", -5,[["expression", ""]], "1", "0"], + ["Exit", [20], "", -5, [["expression", "EAT_aiArea = -1;"]], "1", "1"] + ]; + + EAT_amountMenu = + [ + ["",true], + ["Select AI count:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["1",[],"", -5,[["expression","EAT_aiCount = 1;"]],"1","1"], + ["2",[],"", -5,[["expression","EAT_aiCount = 2;"]],"1","1"], + ["4",[],"", -5,[["expression","EAT_aiCount = 4;"]],"1","1"], + ["6",[],"", -5,[["expression","EAT_aiCount = 6;"]],"1","1"], + ["8",[],"", -5,[["expression","EAT_aiCount = 8;"]],"1","1"], + ["10",[],"", -5,[["expression","EAT_aiCount = 10;"]],"1","1"], + ["20",[],"", -5,[["expression","EAT_aiCount = 20;"]],"1","1"], + ["30",[],"", -5,[["expression","EAT_aiCount = 30;"]],"1","1"], + ["40",[],"", -5,[["expression","EAT_aiCount = 40;"]],"1","1"], + ["50",[],"", -5,[["expression","EAT_aiCount = 50;"]],"1","1"], + ["", [], "", -5,[["expression", ""]], "1", "0"], + ["Exit", [20], "", -5, [["expression", "EAT_aiCount = -1;"]], "1", "1"] + ]; + + showCommandingMenu "#USER:EAT_aiTypeMenu"; + waitUntil{(EAT_aiSpawnType != "") || (commandingMenu == "")}; + if(EAT_aiSpawnType == "") exitWith{}; + + showCommandingMenu "#USER:EAT_aiAreaMenu"; + waitUntil{(EAT_aiArea != 0) || (commandingMenu == "")}; + if(EAT_aiArea == 0) exitWith{}; + + showCommandingMenu "#USER:EAT_amountMenu"; + waitUntil{(EAT_aiCount != 0) || (commandingMenu == "")}; + if(EAT_aiCount == 0) exitWith{}; + + + _player = player; + + if(EAT_logMajorTool) then {format["%1 %2 -- has added %3 AI units",name _player,getPlayerUID _player,EAT_aiCount] call EAT_Logger;}; + + EAT_SpawnAI = { + private ["_divisor","_aiPosition"]; + _divisor = _this select 0; + _aiPosition = [_this select 1, _this select 2,_this select 3]; + + EAT_clientToServer = ["addAI",player,[EAT_aiSpawnType,EAT_aiArea,EAT_aiCount,_divisor,_aiPosition,(getPos player)],dayz_authKey]; + publicVariableServer "EAT_clientToServer"; + + }; + + EAT_aiSpawnSelection = { + private ["_pos1","_pos2","_pos3"]; + _pos1 = _this select 0; + _pos2 = _this select 1; + _pos3 = _this select 2; + if(EAT_aiCount %5 == 0) then { + [5,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [5,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [5,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [5,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [5,_pos1,_pos2,_pos3] call EAT_SpawnAI; + } else { + if(EAT_aiCount %4 == 0) then { + [4,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [4,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [4,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [4,_pos1,_pos2,_pos3] call EAT_SpawnAI; + } else { + if(EAT_aiCount %2 == 0) then { + [2,_pos1,_pos2,_pos3] call EAT_SpawnAI; + [2,_pos1,_pos2,_pos3] call EAT_SpawnAI; + } else { + [1,_pos1,_pos2,_pos3] call EAT_SpawnAI; + }; + }; + }; + openMap [false, false]; + TitleText [format[""], "PLAIN DOWN"]; + _done = true; + }; + + closeDialog 0; + uiSleep 0.5; + "Click on the map to spawn AI" call dayz_rollingMessages; + + if(!(visibleMap)) then { + openMap [true, false]; + }; + + onMapSingleClick '[_pos select 0, _pos select 1, _pos select 2] call EAT_aiSpawnSelection'; + waitUntil{_done || !(visibleMap)}; + onMapSingleClick ""; +}; + +EAT_DeleteObj = { + local _obj = cursorTarget; + if(isNull _obj) exitWith{"No object selected" call dayz_rollingMessages;}; + EAT_DeleteObjText = getText (configFile >> "CfgVehicles" >> typeOf _obj >> "displayName"); + EAT_databaseRemove = 0; + + local _objectID = _obj getVariable["ObjectID","0"]; + local _objectUID = _obj getVariable["ObjectUID","0"]; + + EAT_deleteMenu = + [ + ["",true], + [format["Delete this %1?:",EAT_DeleteObjText], [-1], "", -5, [["expression", ""]], "1", "0"], + ["Yes",[0],"", -5,[["expression","EAT_databaseRemove = 1;"]],"1","1"], + ["No", [0], "", -5, [["expression", "EAT_databaseRemove = -1"]], "1", "1"] + ]; + showCommandingMenu "#USER:EAT_deleteMenu"; + waitUntil{(EAT_databaseRemove != 0) || (commandingMenu == "")}; + if(EAT_databaseRemove <= 0) exitWith{}; + + if(EAT_logMinorTool) then {format["%1 %2 -- has deleted object: %3 ID:%4 UID:%5 from database",name player,getPlayerUID player,EAT_DeleteObjText,_objectID,_objectUID] call EAT_Logger;}; + + format["Deleted %1",EAT_DeleteObjText] call dayz_rollingMessages; + + PVDZ_obj_Destroy = [_objectID,_objectUID,player,_obj,dayz_authKey]; + publicVariableServer "PVDZ_obj_Destroy"; +}; + +EAT_DisplayCode = { + local _ct = cursorTarget; + if (isNull _ct) exitWith {"No target" call dayz_rollingMessages;}; + local _combo = _ct getVariable ["CharacterID","0"]; + local _id = parseNumber _combo; + + if (_ct isKindOf "AllVehicles") then { + if (_id == 0) exitWith {format ["%1 has ID 0 - No Key", (getText(configFile >> "cfgVehicles" >> (typeOf _ct) >> "displayName"))] call dayz_rollingMessages;}; + local _result = call { + if (_id > 0 && {_id <= 2500}) exitWith {format["Green%1",_id];}; + if (_id > 2500 && {_id <= 5000}) exitWith {format["Red%1",_id - 2500];}; + if (_id > 5000 && {_id <= 7500}) exitWith {format["Blue%1",_id - 5000];}; + if (_id > 7500 && {_id <= 10000}) exitWith {format["Yellow%1",_id - 7500];}; + if (_id > 10000 && {_id <= 12500}) exitWith {format["Black%1",_id - 10000];}; + }; + format["Vehicle Key: %1", _result] call dayz_rollingMessages; + } else { + if (_id == 0) exitWith {format ["%1 has ID 0", (getText(configFile >> "cfgMagazines" >> (typeOf _ct) >> "displayName"))] call dayz_rollingMessages;}; + format["Item Code: %1", _id] call dayz_rollingMessages; + }; + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has viewed a locked item: %3",name player,getPlayerUID player,_combo] call EAT_Logger;}; +}; + +EAT_HealPlayer = { + EAT_healDistance = -1; + EAT_distanceMenu = + [ + ["",true], + ["Select distance:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["5", [2], "", -5, [["expression", "EAT_healDistance=5;"]], "1", "1"], + ["10", [3], "", -5, [["expression", "EAT_healDistance=10;"]], "1", "1"], + ["25", [4], "", -5, [["expression", "EAT_healDistance=25;"]], "1", "1"], + ["50", [5], "", -5, [["expression", "EAT_healDistance=50;"]], "1", "1"], + ["100", [6], "", -5, [["expression", "EAT_healDistance=100;"]], "1", "1"], + ["500", [7], "", -5, [["expression", "EAT_healDistance=500;"]], "1", "1"], + ["1000", [8], "", -5, [["expression", "EAT_healDistance=1000;"]], "1", "1"], + ["10000", [9], "", -5, [["expression", "EAT_healDistance=10000;"]], "1", "1"], + ["Self", [10], "", -5, [["expression", "EAT_healDistance=0;"]], "1", "1"], + ["Exit", [13], "", -3, [["expression", ""]], "1", "1"] + ]; + + showCommandingMenu "#USER:EAT_distanceMenu"; + WaitUntil{commandingMenu == ""}; + + if(EAT_healDistance == -1) exitWith {}; + + r_player_blood = r_player_bloodTotal; + r_player_inpain = false; + r_player_infected = false; + r_player_injured = false; + dayz_hunger = 0; + dayz_thirst = 0; + dayz_temperatur = 100; + + r_fracture_legs = false; + r_fracture_arms = false; + r_player_dead = false; + r_player_unconscious = false; + r_player_loaded = false; + r_player_cardiac = false; + r_player_lowblood = false; + r_doLoop = false; + r_action = false; + r_player_timeout = 0; + r_handlerCount = 0; + r_interrupt = false; + + disableUserInput false; + dayz_sourceBleeding = objNull; + player setVariable ["USEC_injured",false,true]; + player setVariable['USEC_inPain',false,true]; + player setVariable['USEC_infected',false,true]; + player setVariable['USEC_lowBlood',false,true]; + player setVariable['USEC_BloodQty',12000,true]; + player setVariable['USEC_isCardiac',false,true]; + {player setVariable[_x,false,true];} forEach USEC_woundHit; + player setVariable ["unconsciousTime", r_player_timeout, true]; + player setVariable['NORRN_unconscious',false,true]; + player setVariable ['messing',[dayz_hunger,dayz_thirst],true]; + player setHit ['legs',0]; + player setVariable ['hit_legs',0,true]; + player setVariable ['hit_hands',0,true]; + player setVariable["inCombat",false, true]; + + disableSerialization; + local _UIfix = (uiNameSpace getVariable 'DAYZ_GUI_display') displayCtrl 1303; + local _UIfix2 = (uiNameSpace getVariable 'DAYZ_GUI_display') displayCtrl 1203; + _UIfix ctrlShow false; + _UIfix2 ctrlShow false; + + if(EAT_healDistance == 0) exitWith {}; + + local _entities = player nearEntities ["CAManBase", EAT_healDistance]; + local _list = []; + + { + if (isPlayer _x) then { + PVDZ_send = [_x,"Bandage", [_x,player]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_x, "Transfuse", [_x, player, 12000]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_x,"Morphine", [_x,player]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_x,"Epinephrine", [_x,player,"ItemEpinephrine"]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_x,"Painkiller", [_x,player]]; + publicVariableServer "PVDZ_send"; + + PVDZ_send = [_x,"Antibiotics", [_x,player]]; + publicVariableServer "PVDZ_send"; + + _list set[count _list, (name _x)]; + }; + } count _entities; + + if (count _list > 0) then {format ["%1 healed",_list] call dayz_rollingMessages;}; +}; + +EAT_Humanity = { + local _addOrRemove = _this select 0; + local _target = cursorTarget; + + if (!isPlayer _target) then {_target = player;}; + + EAT_humanityGain = -1; + local _humanity = _target getVariable["humanity", 0]; + + if(_addOrRemove != "reset") then { + EAT_humanityChange = [ + ["",true], + ["Select humanity amount:", [-1], "", 0, [["expression", ""]], "1", "0"], + ["100", [2], "", -5, [["expression", "EAT_humanityGain=100;"]], "1", "1"], + ["500", [3], "", -5, [["expression", "EAT_humanityGain=500;"]], "1", "1"], + ["1000", [4], "", -5, [["expression", "EAT_humanityGain=1000;"]], "1", "1"], + ["2500", [5], "", -5, [["expression", "EAT_humanityGain=2500;"]], "1", "1"], + ["5000", [6], "", -5, [["expression", "EAT_humanityGain=5000;"]], "1", "1"], + ["Exit", [8], "", 0, [["expression", ""]], "1", "1"] + ]; + + showCommandingMenu "#USER:EAT_humanityChange"; + waitUntil{(commandingMenu == "")}; + if((EAT_humanityGain == -1)) exitWith {}; + + if(_addOrRemove == "remove") then { + EAT_humanityGain = EAT_humanityGain - (EAT_humanityGain * 2); + }; + + _target setVariable["humanity", _humanity + EAT_humanityGain, true]; + format["%1 humanity has been added (total: %2) for player %3", EAT_humanityGain, _humanity + EAT_humanityGain, name _target] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has added %3 to %4 humanity (total %5)",name player,getPlayerUID player,EAT_humanityGain,name _target,_humanity + EAT_humanityGain] call EAT_Logger;}; + }else{ + EAT_humanityGain = _humanity - (_humanity * 2); + _target setVariable["humanity", 2500, true]; + format["Humanity reset to 2500 for player %1", name _target] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has adjusted %3 humanity to 2500",name player,getPlayerUID player,name _target] call EAT_Logger;}; + }; +}; + +EAT_SendMessage = { + uiSleep 0.2; // Sleep to make sure scroll menu is cleared + EAT_SendDialogText = ""; + createDialog "EAT_messageBox_Dialog"; + ctrlSetText [1001,"Send a server message"]; + waitUntil {!dialog}; + if(EAT_SendDialogText == "") exitWith {}; + + EAT_clientToServer = ["ServerMessage",player,[EAT_SendDialogText],dayz_authKey]; + publicVariableServer "EAT_clientToServer"; +}; + +EAT_AddMoney = { + // Add money to cursor target or self + + private ["_amount","_wealth","_addMoney"]; + + _target = cursorTarget; + _player = player; + //_amount = _this select 0; //this value will be either a coin amount or a briefcase amount depending on if ZSC is installed. + + if(!isPlayer _target) then {_target = _player;}; + EAT_moneyAmount = 0; + + if(Z_SingleCurrency) then { + _addMoney = + [ + ["",true], + ["Add Money to Player or Self:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["1,000", [2], "", -5, [["expression", "EAT_moneyAmount=1000;"]], "1", "1"], + ["5,000", [3], "", -5, [["expression", "EAT_moneyAmount=5000;"]], "1", "1"], + ["10,000", [4], "", -5, [["expression", "EAT_moneyAmount=10000;"]], "1", "1"], + ["25,000", [5], "", -5, [["expression", "EAT_moneyAmount=25000;"]], "1", "1"], + ["50,000", [6], "", -5, [["expression", "EAT_moneyAmount=50000;"]], "1", "1"], + ["100,000", [7], "", -5, [["expression", "EAT_moneyAmount=100000;"]], "1", "1"], + ["250,000", [8], "", -5, [["expression", "EAT_moneyAmount=250000;"]], "1", "1"], + ["Exit", [13], "", -3, [["expression", "EAT_moneyAmount = -1;"]], "1", "1"] + ]; + showCommandingMenu "#USER:_addMoney"; + WaitUntil{(EAT_moneyAmount !=0) || (commandingMenu == "")}; + if(EAT_moneyAmount <= 0) exitWith{}; + + _wealth = _target getVariable[Z_MoneyVariable,0]; + _target setVariable[Z_MoneyVariable,_wealth + EAT_moneyAmount,true]; + + } else { + _addMoney = + [ + ["",true], + ["Add Money to Player or Self:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["1 Briefcase", [2], "", -5, [["expression", "EAT_moneyAmount=1;"]], "1", "1"], + ["2 Briefcases", [3], "", -5, [["expression", "EAT_moneyAmount=2;"]], "1", "1"], + ["3 Briefcases", [4], "", -5, [["expression", "EAT_moneyAmount=3;"]], "1", "1"], + ["4 Briefcases", [5], "", -5, [["expression", "EAT_moneyAmount=4;"]], "1", "1"], + ["5 Briefcases", [6], "", -5, [["expression", "EAT_moneyAmount=5;"]], "1", "1"], + ["Exit", [13], "", -3, [["expression", "EAT_moneyAmount = -1;"]], "1", "1"] + ]; + showCommandingMenu "#USER:_addMoney"; + WaitUntil{(EAT_moneyAmount !=0) || (commandingMenu == "")}; + if(EAT_moneyAmount <= 0) exitWith{}; + + _target addMagazine ["ItemBriefcase100oz",EAT_moneyAmount]; + /* + { + [_target,"ItemBriefcase100oz"] call BIS_fnc_invAdd + } count _amount; + */ + + }; +}; + +EAT_Lock = { + local _obj = cursorTarget; + if (isNull _obj) exitWith {"No Target" call dayz_rollingMessages;}; + + local _objType = typeOf _obj; + local _objectID = _obj getVariable["ObjectID","0"]; + + call { + if(_objType in DZE_UnLockedStorage) exitWith { // Lock safe/lockbox + local _lockedClass = getText (configFile >> "CfgVehicles" >> _objType >> "lockedClass"); + local _text = getText (configFile >> "CfgVehicles" >> _objType >> "displayName"); + local _ownerID = _obj getVariable["ownerPUID","0"]; + + disableUserInput true; // Make sure player can not modify gear while it is being saved + (findDisplay 106) closeDisplay 0; // Close gear + dze_waiting = nil; + + [_lockedClass,objNull] call fn_waitForObject; + + PVDZE_handleSafeGear = [player,_obj,1]; + publicVariableServer "PVDZE_handleSafeGear"; + //wait for response from server to verify safe was logged and saved before proceeding + waitUntil {!isNil "dze_waiting"}; + disableUserInput false; // Safe is done saving now + + format[localize "str_epoch_player_117",_text] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has locked a safe - ID:%3 UID:%4",name player,getPlayerUID player,_objectID,_ownerID] call EAT_Logger;}; + }; + if (_obj isKindOf "AllVehicles") exitWith { // Lock vehicle + {player removeAction _x} forEach s_player_lockunlock;s_player_lockunlock = []; + s_player_lockUnlock_crtl = 1; + + PVDZE_veh_Lock = [_obj,true]; + if (local _obj) then { + PVDZE_veh_Lock spawn local_lockUnlock + } else { + publicVariable "PVDZE_veh_Lock"; + }; + s_player_lockUnlock_crtl = -1; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has locked a vehicle: %3",name player,getPlayerUID player,_obj] call EAT_Logger;}; + }; + // Lock Door + if (_obj animationPhase "Open_hinge" == 1) then {_obj animate ["Open_hinge", 0];}; + if (_obj animationPhase "Open_latch" == 1) then {_obj animate ["Open_latch", 0];}; + if (_obj animationPhase "Open_door" == 1) then {_obj animate ["Open_door", 0];}; + if (_obj animationPhase "DoorR" == 1) then {_obj animate ["DoorR", 0];}; + if (_obj animationPhase "LeftShutter" == 1) then {_obj animate ["LeftShutter", 0];}; + if (_obj animationPhase "RightShutter" == 1) then {_obj animate ["RightShutter", 0];}; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has locked a door - ID:%3 Combo:%4",name _player,getPlayerUID _player,_objectID,(_obj getVariable ["CharacterID","0"])] call EAT_Logger;}; + }; +}; + +EAT_Repair = { + local _vehicle = cursorTarget; + if (isNull _vehicle) exitWith {"No target" call dayz_rollingMessages;}; + + { + local _damage = [_vehicle,_x] call object_getHit; + if ((_damage select 0) > 0) then { + [_vehicle, (_damage select 1), 0, true] call fnc_veh_handleRepair; + }; + } forEach (_vehicle call vehicle_getHitpoints); + + if (local _vehicle) then { + [_vehicle,1] call local_setFuel; + } else { + PVDZ_send = [_vehicle,"SetFuel",[_vehicle,1]]; + publicVariableServer "PVDZ_send"; + }; + + format["%1 Repaired and Refueled", (getText(configFile >> "cfgVehicles" >> (typeOf _vehicle) >> "displayName"))] call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has repaired %3",name player,getPlayerUID player,_vehicle] call EAT_Logger;}; +}; + +EAT_Unlock = { + local _obj = cursorTarget; + if (isNull _obj) exitWith {"No Target" call dayz_rollingMessages;}; + local _objectID = _obj getVariable["ObjectID","0"]; + local _objType = typeOf _obj; + + call { + if (_objType in DZE_LockedStorage) exitWith { // Unlock Safe/Lock_Box + // Get all required variables + local _unlockedClass = getText (configFile >> "CfgVehicles" >> _objType >> "unlockedClass"); + local _ownerID = _obj getVariable["ownerPUID","0"]; + disableUserInput true; // Make sure player can not modify gear while it is filling + (findDisplay 106) closeDisplay 0; // Close gear + dze_waiting = nil; + [_unlockedClass,objNull] call fn_waitForObject; + + PVDZE_handleSafeGear = [player,_obj,0]; + publicVariableServer "PVDZE_handleSafeGear"; + //wait for response from server to verify safe was logged before proceeding + waitUntil {!isNil "dze_waiting"}; + disableUserInput false; // Safe is done filling now + + format[localize "STR_BLD_UNLOCKED", (getText (configFile >> "CfgVehicles" >> _objType >> "displayName"))] call dayz_rollingMessages; + if(EAT_logMajorTool) then {format["%1 %2 -- has unlocked a safe - ID:%3 UID:%4",name player,getPlayerUID player,_objectID,_ownerID] call EAT_Logger;}; + }; + if (_obj isKindOf "AllVehicles") exitWith { // Unlock vehicle + {player removeAction _x} forEach s_player_lockunlock;s_player_lockunlock = []; + s_player_lockUnlock_crtl = 1; + + PVDZE_veh_Lock = [_obj,false]; + + if (local _obj) then { + PVDZE_veh_Lock spawn local_lockUnlock + } else { + publicVariable "PVDZE_veh_Lock"; + }; + + s_player_lockUnlock_crtl = -1; + + if(EAT_logMajorTool) then {format["%1 %2 -- has unlocked vehicle: %3 with ID:%4",name player,getPlayerUID player,_obj,_objectID] call EAT_Logger;}; + }; + //Unlock Door + if(_obj animationPhase "Open_hinge" == 0) then {_obj animate ["Open_hinge", 1];}; + if(_obj animationPhase "Open_latch" == 0) then {_obj animate ["Open_latch", 1];}; + if(_obj animationPhase "Open_door" == 0) then {_obj animate ["Open_door", 1];}; + if(_obj animationPhase "DoorR" == 0) then {_obj animate ["DoorR", 1];}; + if(_obj animationPhase "LeftShutter" == 0) then {_obj animate ["LeftShutter", 1];}; + if(_obj animationPhase "RightShutter" == 0) then {_obj animate ["RightShutter", 1];}; + + if(EAT_logMajorTool) then {format["%1 %2 -- has unlocked a door - ID:%3 Combo:%4",name player,getPlayerUID player,_objectID,(_obj getVariable ["CharacterID","0"])] call EAT_Logger;}; + }; +}; + +EAT_RecoverKey = { + local _obj = cursorTarget; + if (isNull _obj) exitWith {"No target" call dayz_rollingMessages;}; + + if (_obj isKindOf "AllVehicles") then { + local _id = parseNumber (_obj getVariable ["CharacterID","0"]); + if (_id == 0) exitWith {format ["%1 has ID 0 - No Key possible", (getText(configFile >> "cfgVehicles" >> (typeOf _obj) >> "displayName"))] call dayz_rollingMessages;}; + + local _result = call { + if (_id > 0 && {_id <= 2500}) exitWith {format["ItemKeyGreen%1", _id];}; + if (_id > 2500 && {_id <= 5000}) exitWith {format["ItemKeyRed%1", _id - 2500];}; + if (_id > 5000 && {_id <= 7500}) exitWith {format["ItemKeyBlue%1", _id - 5000];}; + if (_id > 7500 && {_id <= 10000}) exitWith {format["ItemKeyYellow%1", _id - 7500];}; + if (_id > 10000 && {_id <= 12500}) exitWith {format["ItemKeyBlack%1", _id - 10000];}; + }; + + local _isKeyOK = isClass(configFile >> "CfgWeapons" >> _result); + false call dz_fn_meleeMagazines; + local _isOk = [player,_result] call BIS_fnc_invAdd; + true call dz_fn_meleeMagazines; + if (_isOk && _isKeyOK) then { + format["Key [%1] added to inventory!",_result] call dayz_rollingMessages; + } else { + "Your toolbelt is full" call dayz_rollingMessages; + }; + + if(EAT_logMajorTool) then {format["%1 %2 -- has generated %3 for a %4",name player,getPlayerUID player,_result,_obj] call EAT_Logger;}; + }; +}; + +EAT_SkinChanger = { + private ["_skin","_unitBag","_bagType","_bagMagazines","_bagWeapons","_array1","_array2"]; + _skin = _this select 0; + _unitBag = unitBackpack player; + _bagType = (typeOf _unitBag); + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has changed skins to %3",name player,getPlayerUID player,_skin] call EAT_Logger;}; + + if(_bagType != "") then { + _bagWeapons = getWeaponCargo _unitBag; + _bagMagazines = getMagazineCargo _unitBag; + removeBackpack (vehicle player); + [dayz_playerUID,dayz_characterID,_skin] spawn player_humanityMorph; + uiSleep 0.3; + + (vehicle player) addBackpack _bagType; + uiSleep 0.1; + + _array1 = _bagWeapons select 0; + _array2 = _bagWeapons select 1; + + { + (unitBackpack player) addWeaponCargo [(_array1 select _forEachIndex),(_array2 select _forEachIndex)]; + } forEach _array1; + + _array1 = _bagMagazines select 0; + _array2 = _bagMagazines select 1; + + { + (unitBackpack player) addMagazineCargo [(_array1 select _forEachIndex),(_array2 select _forEachIndex)]; + } forEach _array1; + } else { + [dayz_playerUID,dayz_characterID,_skin] spawn player_humanityMorph; + }; +}; + +EAT_SpawnCrate = { + private ["_crate","_player","_dir","_pos"]; + + _crate = _this select 0; + _player = player; + + // Location of player and crate + _dir = getDir _player; + _pos = getposATL _player; + _pos = [(_pos select 0)+3*sin(_dir),(_pos select 1)+3*cos(_dir), (_pos select 2)]; + + EAT_selectDelay = 0; + + // Run delaymenu + EAT_delaymenu = + [ + ["",true], + ["Select delay", [-1], "", -5, [["expression", ""]], "1", "0"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["30 seconds", [], "", -5, [["expression", "EAT_selectDelay=30;"]], "1", "1"], + ["1 min", [], "", -5, [["expression", "EAT_selectDelay=60;"]], "1", "1"], + ["3 min", [], "", -5, [["expression", "EAT_selectDelay=180;"]], "1", "1"], + ["5 min", [], "", -5, [["expression", "EAT_selectDelay=300;"]], "1", "1"], + ["10 min", [], "", -5, [["expression", "EAT_selectDelay=600;"]], "1", "1"], + ["30 min", [], "", -5, [["expression", "EAT_selectDelay=1800;"]], "1", "1"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["No timer", [], "", -5, [["expression", "EAT_selectDelay=0;"]], "1", "1"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"] + ]; + showCommandingMenu "#USER:EAT_delaymenu"; + + WaitUntil{commandingMenu == ""}; + + EAT_clientToServer = ["crate",player,[EAT_selectDelay,_crate,_dir,_pos],dayz_authKey]; + publicVariableServer "EAT_clientToServer"; + + if(EAT_logMajorTool) then {format["%1 %2 -- has added a %3 crate",name _player,getPlayerUID _player,_crate] call EAT_Logger;}; + + if(EAT_selectDelay != 0) then { + format[_crate + " crate will disappear in %1 seconds.",EAT_selectDelay] call dayz_rollingMessages; + } else { + format[_crate + " has no timer. Shoot it to destroy."] call dayz_rollingMessages; + }; +}; + +EAT_Spectate = { + private ["_mycv","_max","_j","_name","_player","_menuCheckOk"]; + + _mycv = cameraView; + _player = player; + _menuCheckOk = false; + _max = 10; + _j = 0; + _name = ""; + + + EAT_pMenuTitle = "Spectate Player:"; + snext = false; + plist = []; + pselect5 = ""; + spectate = true; + + {if (_x != _player) then {plist set [count plist, name _x];};} forEach playableUnits; + + while {pselect5 == "" && !_menuCheckOk} do + { + [_j, (_j + _max) min (count plist)] call EAT_fnc_playerSelect; _j = _j + _max; + WaitUntil {pselect5 != "" || snext || commandingMenu == ""}; + _menuCheckOk = (commandingMenu == ""); + snext = false; + }; + + if (pselect5!= "exit" && pselect5!="") then + { + _name = pselect5; + { + if(format[name _x] == _name) then + { + ["Spectate"] call EAT_Keybind; + (vehicle _x) switchCamera "EXTERNAL"; + "F6 to return" call dayz_rollingMessages; + waitUntil {uiSleep 1; !(alive _x) or !(alive player) or !(spectate)}; + ["EndSpectate"] call EAT_Keybind; + player switchCamera _mycv; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has begun spectating %3",name _player,getPlayerUID _player,_name] call EAT_Logger;}; + }; + } forEach playableUnits; + }; + spectate = false; + if (!spectate && pselect5 != "exit") then + { + "Spectate done" call dayz_rollingMessages; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has stopped spectating %3",name _player,getPlayerUID _player,_name] call EAT_Logger;}; + }; +}; + +EAT_LocateVeh = { + private ["_inv","_searchString","_ID","_found","_targetColor","_finalID","_targetPosition","_targetVehicle","_count","_key","_keyName","_showMapMarker","_markerColour","_locatorMarker"]; + + /****************************************| Config |**************************************************************************************/ + + _showMapMarker = True; // True = display the map markers, False = just identify the keys + _markerColour = "ColorOrange"; // Alternatives = "ColorBlack", "ColorRed", "ColorGreen", "ColorBlue", "ColorYellow", "ColorWhite" + + /****************************************| Config |**************************************************************************************/ + + if( isNil "locateVehicle") then {locateVehicle = true;} else {locateVehicle = !locateVehicle}; + + if(locateVehicle) then { + + _inv = [player] call BIS_fnc_invString; + _keyColor = []; + _keyID = []; + _removedID = []; + _count = 0; + + if (!("ItemGPS" in _inv)) then {player addWeapon "ItemGPS";}; + + { + for "_i" from 1 to 2500 do { + _searchString = format ["ItemKey%1%2",_x,str(_i)]; + if ((_searchString in _inv)) then { + _count = _count + 1; + _targetColor = _x; + _keyColor = _keyColor + [_targetColor]; + _ID = str(_i); + _ID = parseNumber _ID; + if (_targetColor == "Green") then { _finalID = _ID; }; + if (_targetColor == "Red") then { _finalID = _ID + 2500; }; + if (_targetColor == "Blue") then { _finalID = _ID + 5000; }; + if (_targetColor == "Yellow") then { _finalID = _ID + 7500; }; + if (_targetColor == "Black") then { _finalID = _ID + 10000; }; + _keyID = _keyID + [_finalID]; + _removedID = _removedID + [_ID]; + }; + }; + } forEach ["Black","Yellow","Blue","Green","Red"]; + + _i = 0; + for "_i" from 0 to 10 do {deleteMarkerLocal ("locatorMarker"+ (str _i));}; + + if (_count == 0) exitWith {"Place a key in your inventory to find that vehicle." call dayz_rollingMessages; locateVehicle = false;}; + format["Found: %1 vehicle key",_count] call dayz_rollingMessages; + + _count = _count - 1; + + _i = 0; + for "_i" from 0 to _count do { + _finalID = _keyID select _i; + _ID = _removedID select _i; + _targetColor = _keyColor select _i; + _key = format["ItemKey%1%2",_targetColor,_ID]; + _keyName = getText (configFile >> "CfgWeapons" >> _key >> "displayName"); + _found = 0; + + { + private ["_tID","_vehicle_type"]; + _vehicle_type = typeOf _x; + _tID = parseNumber (_x getVariable ["CharacterID","0"]); + if ((_tID == _finalID) && ((_vehicle_type isKindOf "Air") || (_vehicle_type isKindOf "LandVehicle") || (_vehicle_type isKindOf "Ship"))) then { + _targetPosition = getPosATL _x; + _targetVehicle = _x; + _found = 1; + }; + } forEach vehicles; + + if (_found != 0) then { + _vehicleName = gettext (configFile >> "CfgVehicles" >> (typeof _targetVehicle) >> "displayName"); + if (_showMapMarker) then { + _Marker = "locatorMarker" + (str _i); + _locatorMarker = createMarkerLocal [_Marker,[(_targetPosition select 0),(_targetPosition select 1)]]; + _locatorMarker setMarkerShapeLocal "ICON"; + _locatorMarker setMarkerTypeLocal "DOT"; + _locatorMarker setMarkerColorLocal _markerColour; + _locatorMarker setMarkerSizeLocal [1.0, 1.0]; + _locatorMarker setMarkerTextLocal format ["locator: %1",_vehicleName]; + } else { + format["%1 belongs to %2 - %3",_keyName,_vehicleName,_finalID] call dayz_rollingMessages; + }; + } else { + format["%1 - Vehicle ID: %2 - (This vehicle no longer exists in the database)",_keyName,_finalID] call dayz_rollingMessages; + }; + }; + + if (_showMapMarker) then { + "Map markers added. Run this again to remove them." call dayz_rollingMessages; + }; + } else { + _i=0; + for "_i" from 0 to 10 do {deleteMarkerLocal ("locatorMarker"+ (str _i));}; + "Map markers removed" call dayz_rollingMessages; + }; +}; + +EAT_SpawnZombie = { + private["_zCreate","_zPos","_setZedType","_zSpawnFnc","_zSpawnFnc","_player"]; + zTypes = ["zZombie_Base","z_villager1","z_villager2","z_villager3","z_suit1","z_suit2","z_worker1","z_worker2","z_worker3","z_soldier","z_soldier_heavy","z_soldier_pilot","z_policeman","z_teacher","z_doctor","z_hunter","z_priest"]; + + EAT_area = 0; + zCount = 0; + _player = player; + + _areaMenu = + [ + ["",true], + ["Set Radius:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["5m",[],"", -5,[["expression","EAT_area = 5;"]],"1","1"], + ["10m",[],"", -5,[["expression","EAT_area = 10;"]],"1","1"], + ["20m",[],"", -5,[["expression","EAT_area = 20;"]],"1","1"], + ["30m",[],"", -5,[["expression","EAT_area = 30;"]],"1","1"], + ["40m",[],"", -5,[["expression","EAT_area = 40;"]],"1","1"], + ["50m",[],"", -5,[["expression","EAT_area = 50;"]],"1","1"], + ["75m",[],"", -5,[["expression","EAT_area = 75;"]],"1","1"], + ["100m",[],"", -5,[["expression","EAT_area = 100;"]],"1","1"], + ["125m",[],"", -5,[["expression","EAT_area = 125;"]],"1","1"], + ["150m",[],"", -5,[["expression","EAT_area = 150;"]],"1","1"], + ["200m",[],"", -5,[["expression","EAT_area = 200;"]],"1","1"], + ["", [], "", -5,[["expression", ""]], "1", "0"], + ["Exit", [20], "", -5, [["expression", "EAT_area = -1;"]], "1", "1"] + ]; + + _amountMenu = + [ + ["",true], + ["Select zombie count:", [-1], "", -5, [["expression", ""]], "1", "0"], + ["1",[],"", -5,[["expression","zCount = 1;"]],"1","1"], + ["2",[],"", -5,[["expression","zCount = 2;"]],"1","1"], + ["3",[],"", -5,[["expression","zCount = 3;"]],"1","1"], + ["4",[],"", -5,[["expression","zCount = 4;"]],"1","1"], + ["5",[],"", -5,[["expression","zCount = 5;"]],"1","1"], + ["10",[],"", -5,[["expression","zCount = 10;"]],"1","1"], + ["20",[],"", -5,[["expression","zCount = 20;"]],"1","1"], + ["30",[],"", -5,[["expression","zCount = 30;"]],"1","1"], + ["40",[],"", -5,[["expression","zCount = 40;"]],"1","1"], + ["50",[],"", -5,[["expression","zCount = 50;"]],"1","1"], + ["100",[],"", -5,[["expression","zCount = 100;"]],"1","1"], + ["", [], "", -5,[["expression", ""]], "1", "0"], + ["Exit", [20], "", -5, [["expression", "zCount = -1;"]], "1", "1"] + ]; + + showCommandingMenu "#USER:_areaMenu"; + waitUntil{(EAT_area != 0) || (commandingMenu == "")}; + if(EAT_area <= 0) exitWith{}; + + showCommandingMenu "#USER:_amountMenu"; + waitUntil{(zCount != 0) || (commandingMenu == "")}; + if(zCount <= 0) exitWith{}; + + if(EAT_logMajorTool) then {format["%1 %2 -- has added %3 zombies",name _player,getPlayerUID _player,zCount] call EAT_Logger;}; + + _i = 1; + for "_i" from 1 to zCount do { + [zTypes] spawn { + zTypes = _this select 0; + _setZedType = zTypes call BIS_fnc_selectRandom; + _zCreate = createAgent [_setZedType, position player, [], EAT_area, "NONE"]; + _zPos = getPosATL _zCreate; + [_zPos,_zCreate] execFSM "\z\addons\dayz_code\system\zombie_agent.fsm"; + }; + }; +}; + +/*************Start Base Manager Functions******************/ +fn_BCSelect = { + systemChat str [lbCurSel 14000]; + [lbCurSel 14000] spawn { + private ["_pindex", "_bindex", "_base", "_player", "_base_objects"]; + systemChat str _this; + //_pindex = _this select 0; + _bindex = _this select 0; + if (_bindex < 0) exitWith {}; + _base = BCBaseList select _bindex; + //_player = BCNearbyList select _pindex; + _attach_position = player modelToWorld (_base select 2); + //_attach_position set [2, getPosASL player select 2]; + _attach_position set [2, ([player] call FNC_GetPos) select 2]; + _base_objects = [_base select 3, _attach_position, player] call fn_BCCreateBase; + [_base_objects] call fn_BCBuildbase; + }; +}; + +fn_BCInsert = { + createdialog "EAT_BaseManager_Dialog"; + //lbClear 12000; + lbClear 14000; + //ctrlShow [12005, false]; + { + lbAdd [14000, format["%1 (%2)", _x select 1, _x select 0]]; + true + } count BCBaseList; +}; + +fn_BCSetCenter = { + BC_radius = nil; + //BC_Center = getPosASL player; + BC_Center = [player] call FNC_GetPos; + local _centerSign = createVehicle ["Sign_arrow_down_large_EP1", [0,0,0], [], 0, "CAN_COLLIDE"]; + if (surfaceIsWater BC_Center) then { + _centerSign setPosASL BC_Center; + } else { + _centerSign setPosATL BC_Center; + }; + //_centerSign setPosASL BC_Center; + _centerSign spawn {sleep 30; deleteVehicle _this;}; + showCommandingMenu "#USER:BCMainMenu"; +}; + +fn_BCSetRadius = { + if (isNil "BC_Center") exitWith + { + systemChat "Center not set"; + }; + BC_radius = [player, BC_center] call BIS_fnc_distance2D; + showCommandingMenu "#USER:BCMainMenu"; + + // Have the server spawn the transparent red globes to avoid BattlEye kicks + EAT_clientToServer = ["Base Manager",player,[BC_radius,BC_center,getPos player],dayz_authKey]; + publicVariableServer "EAT_clientToServer"; +}; + +fn_BCExport = { + private ["_objects", "_position", "_distance", "_nearest_objects", "_export","_i"]; + if (isNil "BC_Center" or isNil "BC_radius") exitWith + { + systemChat "Center not set"; + }; + _objects = []; + _export = ""; + _position = BC_center; + _distance = BC_radius; + _nearest_objects = nearestObjects [[_position select 0, _position select 1], DayZ_SafeObjects, _distance]; + _objectCount = count _nearest_objects; + _i = 1; + { + private ["_obj_type", "_direction", "_obj_position", "_relative_position", "_row"]; + _obj_type = typeOf _x; + _direction = getDir _x; + //_obj_position = getPosASL _x; + _obj_position = [_x] call FNC_GetPos; + _relative_position = [ + (_obj_position select 0) - (_position select 0), + (_obj_position select 1) - (_position select 1), + (_obj_position select 2) - (_position select 2) + ]; + _row = [_obj_type, _relative_position, _direction]; + if(_i < _objectCount) then { + _export = _export + str(_row) + ",$$"; + } else { + _export = _export + str(_row); + }; + _row set [count _row, _x]; + _objects set [count _objects, _row]; + _i = _i + 1; + } count _nearest_objects; + + EAT_PVEH_baseExporter = _export; + publicVariableServer "EAT_PVEH_baseExporter"; + + systemChat format["Exported base to server\EpochAdminTools\Bases.sqf"]; + showCommandingMenu "#USER:BCMainMenu"; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has exported a base",name player,getPlayerUID player] call EAT_Logger;}; + + _objects +}; + +fn_BCCopy = { + private ["_objects", "_position", "_distance", "_nearest_objects"]; + if (isNil "BC_Center" or isNil "BC_radius") exitWith + { + systemChat "Center not set"; + }; + _objects = []; + _position = BC_center; + _distance = BC_radius; + _nearest_objects = nearestObjects [[_position select 0, _position select 1], DayZ_SafeObjects, _distance]; + { + private ["_obj_type","_direction","_obj_position","_relative_position","_row","_vector"]; + _obj_type = typeOf _x; + _direction = getDir _x; + //_obj_position = getPosASL _x; + _obj_position = [_x] call FNC_GetPos; + _vector = [vectorDir _x,vectorUp _x]; + _relative_position = [ + (_obj_position select 0) - (_position select 0), + (_obj_position select 1) - (_position select 1), + (_obj_position select 2) - (_position select 2) + ]; + _row = [_obj_type, _relative_position, _direction, _vector]; + _row set [count _row, _x]; + _objects set [count _objects, _row]; + true + } count _nearest_objects; + systemChat format["Copied %1 items", count _nearest_objects]; + BCCopiedBase = _objects; + showCommandingMenu "#USER:BCMainMenu"; + _objects +}; + +fn_BCPaste = { + private ["_dimensions", "_attach_position", "_base_objects"]; + if (isNil "BCCopiedBase") exitWith + { + "No base has been copied" call dayz_rollingmessages; + }; + _dimensions = BCCopiedBase call fn_BCGetDimensions; + _attach_position = player modelToWorld [0, ((_dimensions select 0) max (_dimensions select 1)), 0]; + diag_log str [0, ((_dimensions select 0) max (_dimensions select 1)), 0]; + //_attach_position set [2, getPosASL player select 2]; + _attach_position set [2, ([player] call FNC_GetPos) select 2]; + _base_objects = [BCCopiedBase, _attach_position] call fn_BCCreateBase; + [_base_objects] call fn_BCBuildbase; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has pasted a copied base",name player,getPlayerUID player] call EAT_Logger;}; +}; + +fn_BCDelete = { + BaseDestruction = [ + ["What should delete?",true], + ["Finish",[2],"",-5,[["expression","[] spawn fn_BCConfirmDelete"]],"1","1"], + [format["Vehicles(%1)",BD_vehicles], [3], "", -5, [["expression", "BD_vehicles = !BD_vehicles; [] spawn fn_BCDelete"]], "1", "1"], + [format["PlotPoles(%1)",BD_PlotPoles], [4], "", -5, [["expression", "BD_PlotPoles = !BD_PlotPoles; [] spawn fn_BCDelete"]], "1", "1"], + [format["Buildables(%1)",BD_Buildables], [5], "", -5, [["expression", "BD_Buildables = !BD_Buildables; [] spawn fn_BCDelete"]], "1", "1"] + ]; + showCommandingMenu "#USER:BaseDestruction"; +}; + +fn_BCConfirmDelete = { + private ["_position", "_distance", "_objectClasses", "_objects"]; + + if (isNil "BC_Center" or isNil "BC_radius") exitWith + { + systemChat "Center or radius not set"; + }; + if (!BD_Buildables && !BD_PlotPoles && !BD_vehicles) exitWith + { + systemChat "Nothing deleted. You set all options to false"; + }; + + _position = BC_center; + _distance = BC_radius; + _objectClasses = []; + + if (BD_Buildables) then { + _objectClasses = DayZ_SafeObjects; + }; + if (BD_vehicles) then { + _objectClasses = _objectClasses + ["LandVehicle","Helicopter","Plane","Ship"]; + }; + if (BD_PlotPoles) then { + _objectClasses = _objectClasses + ["Plastic_Pole_EP1_DZ"]; + } else { + _objectClasses = _objectClasses - ["Plastic_Pole_EP1_DZ"]; + }; + + _objects = nearestObjects [[_position select 0, _position select 1], _objectClasses, _distance]; + + { + _objectID = _x getVariable ["ObjectID", "0"]; + _objectUID = _x getVariable ["ObjectUID", "0"]; + PVDZ_obj_Destroy = [_objectID, _objectUID, player, _x, dayz_authKey]; + publicVariableServer "PVDZ_obj_Destroy"; + } forEach _objects; + + [format["Deleted %1 objects", count _objects],0,0.8,0.5,0,0,8] spawn BIS_fnc_dynamicText; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has deleted %3 items using deletebase",name player,getPlayerUID player,count _objects] call EAT_Logger;}; +}; + +fn_BCSaveToDb = { + { + _x setVariable ["CharacterID",dayz_characterID,true]; + + PVDZ_obj_Publish = [dayz_characterID,_x,[getDir _x,getPosATL _x,[vectorDir _x,vectorUp _x]],[],player,dayz_authKey]; + publicVariableServer "PVDZ_obj_Publish"; + + } forEach BCCurrentBase; + [format["Added %1 objects to database", count BCCurrentBase],0,0.8,0.5,0,0,8] spawn BIS_fnc_dynamicText; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has placed a saved base",name player,getPlayerUID player] call EAT_Logger;}; +}; + +fn_BCCancelBase = { + { + detach _x; deleteVehicle _x; + } count BCCurrentBase; + BCCurrentBase = []; + ["Cancelled",0,0.8,0.5,0,0,8] spawn BIS_fnc_dynamicText; +}; + +fn_BCCenter = { + private ["_ax", "_ay", "_az", "_total"]; + _ax = 0; + _ay = 0; + _az = 0; + { + private ["_pos"]; + //_pos = getPosASL _x; + _pos = [_x] call FNC_GetPos; + _ax = _ax + (_pos select 0); + _ay = _ay + (_pos select 1); + _az = _az + (_pos select 2); + } count _this; + _total = count _this; + _center = [_ax / _total, _ay / _total, _az / _total]; + _center +}; + +fn_BCRotateVector = { + local _object = _this select 0; + local _vector = _this select 1; + local _aroundZ = (360 - (_this select 2)) - 360; + local _dirX = ((_vector select 0) select 0); + local _dirY = ((_vector select 0) select 1); + local _dirZ = ((_vector select 0) select 2); + local _upX = ((_vector select 1) select 0); + local _upY = ((_vector select 1) select 1); + local _upZ = ((_vector select 1) select 2); + + + local _sinaroundZ = sin _aroundZ; + local _cosaroundZ = cos _aroundZ; + local _dirXTemp = _dirX; + _dirX = (_dirXTemp * _cosaroundZ) - (_dirY * _sinaroundZ); + _dirY = (_dirY * _cosaroundZ) + (_dirXTemp * _sinaroundZ); + local _upXTemp = _upX; + _upX = (_upXTemp * _cosaroundZ) - (_upY * _sinaroundZ); + _upY = (_upY * _cosaroundZ) + (_upXTemp * _sinaroundZ); + + local _dir = [_dirX, _dirY, _dirZ]; + local _up = [_upX, _upY, _upZ]; + _object setVectorDirAndUp [_dir, _up]; +}; + +fn_BCCreateBase = { + + //#include "\z\addons\dayz_code\util\Vector.hpp" + + private ["_objects", "_items", "_position", "_player","_dirPlayer","_playerVectorDir"]; + _objects = []; + _items = _this select 0; + _position = _this select 1; + _dirPlayer = getDir player; + if (count _this == 3) then { + _player = _this select 2; + }; + { + private ["_object", "_orig_obj","_objectVectorDir","_resultVectorDir","_rotateDegrees","_newDir","_rotate","_vector","_newVector"]; + _object = createVehicle [_x select 0, [0,0,0], [], 0, "CAN_COLLIDE"]; + //_object = (_x select 0) createVehicle [0,0,0]; + _newDir = ((_x select 2) - _dirPlayer); + _object setDir _newDir; + //_rotate = ((360 - _newDir) - 360); + //_vector = _x select 3; + //_object setVectorDirAndUp (Vector_Rotate3D_Fast((_vector select 0), (_vector select 1), _rotate)); // use this instead of creating a new function. + //_newVector = [(_vector select 0), (_vector select 1), _rotate] call dz_fn_vector_rotate3d; + //diag_log _newVector; + //diag_log formatText ["Vector after rotation %1",(Vector_Rotate3D((_vector select 0), (_vector select 1), _rotate));]; + //_object setVectorDirAndUp (Vector_Rotate3D((_vector select 0), (_vector select 1), _rotate)); + if (surfaceIsWater _position) then { + _object setPosASL [ + ((_x select 1) select 0) + (_position select 0), + ((_x select 1) select 1) + (_position select 1), + ((_x select 1) select 2) + (_position select 2) + ]; + } else { + _object setPosATL [ + ((_x select 1) select 0) + (_position select 0), + ((_x select 1) select 1) + (_position select 1), + ((_x select 1) select 2) + (_position select 2) + ]; + }; + [_object, (_x select 3), _newDir] call fn_BCRotateVector; + _object attachTo [player]; + + /* + if (count _x == 4) then { + _orig_obj = _x select 3; + _object setVariable ["CharacterID", _orig_obj getVariable ["CharacterID", ""], true]; + }; + */ + if (!isNil "_player") then { + _object setVariable ["CharacterID", (_player getVariable ["CharacterID","0"]), true]; + }; + _objects set [count _objects, _object]; + + true + } count _items; + _objects +}; + +fn_BCBuildbase = { + private ["_base_objects", "_finished", "_place"]; + _base_objects = _this select 0; + { + _x attachTo [player]; + true + } count _base_objects; + _finished = false; + DZE_Q = false; + DZE_Z = false; + DZE_4 = false; + DZE_6 = false; + DZE_5 = false; + DZE_cancelBuilding = false; + _place = false; + while {!_finished} do { + private ["_player_direction"]; + ["SPACE: Place | Q/E: Rotate | PgUp/PgDn: Height",0,0.8,0.5,0,0,8] spawn BIS_fnc_dynamicText; + _player_direction = getDir player; + if (DZE_Q or DZE_Z) then { + { + private ["_obj_direction", "_position"]; + detach _x; + _obj_direction = getDir _x; + //_position = getPosASL _x; + _position = [_x] call FNC_getPos; + _position set [2, (_position select 2) + (if (DZE_Q) then {0.5} else {-0.5})]; + //_x setPosASL _position; + if (surfaceIsWater _position) then { + _x setPosASL _position; + } else { + _x setPosATL _position; + }; + _x attachTo [player]; + _x setDir (_obj_direction - _player_direction); + true + } count _base_objects; + DZE_Q = false; + DZE_Z = false; + }; + if (DZE_4 or DZE_6) then { + private ["_center_position"]; + _center_position = _base_objects call fn_BCCenter; + { + private ["_position", "_obj_direction", "_dif_direction", "_new_direction", "_distance", "_rotated_position"]; + detach _x; + //_position = getPosASL _x; + _position = [_x] call FNC_getPos; + _obj_direction = ([_center_position, _position] call BIS_fnc_dirTo); + _dif_direction = if (DZE_4) then {10} else {-10}; + _new_direction = _obj_direction + _dif_direction; + _distance = [_center_position, _position] call BIS_fnc_distance2D; + _obj_direction = getDir _x; + _rotated_position = [_center_position, _distance, _new_direction] call BIS_fnc_relPos; + _rotated_position set [2, _position select 2]; + //_x setPosASL _rotated_position; + if (surfaceIsWater _position) then { + _x setPosASL _rotated_position; + } else { + _x setPosATL _rotated_position; + }; + _x attachTo [player]; + _x setDir (((_obj_direction - _player_direction) + _dif_direction) % 360); + true + } count _base_objects; + DZE_4 = false; + DZE_6 = false; + }; + if(DZE_5) exitWith { + _finished = true; + _place = true; + }; + if (DZE_cancelBuilding) exitWith { + _finished = true; + _place = false; + }; + sleep 0.1; + }; + {detach _x; true} count _base_objects; + BCCurrentBase = _base_objects; + if (_place) then { + showCommandingMenu "#USER:BCBaseSaveMenu"; + } else { + call fn_BCCancelBase; + }; +}; + +fn_BCGetDimensions = { + private ["_xmin", "_xmax", "_ymin", "_ymax"]; + _xmin = 0; + _xmax = 0; + _ymin = 0; + _ymax = 0; + { + private ["_position"]; + _position = _x select 1; + if ((_position select 0) < _xmin) then { + _xmin = _position select 0; + }; + if ((_position select 0) > _xmax) then { + _xmax = _position select 0; + }; + if ((_position select 1) < _ymin) then { + _ymin = _position select 1; + }; + if ((_position select 1) > _ymax) then { + _ymax = _position select 1; + }; + true + } count _this; + [abs _xmin + abs _xmax, abs _ymin + abs _ymax] +}; + +BCSaveAsScript = { + private ["_lastObject","_position","_distance","_objectClasses","_objects","_pos","_class","_dir","_buildings"]; + + if (isNil "BC_Center" or isNil "BC_radius") exitWith + { + systemChat "Center or radius not set"; + }; + + _position = BC_center; + _distance = BC_radius; + _objectClasses = []; + _buildings = [EAT_allBuildingList] call myfnc_MDarray; + _objectClasses = _buildings + DayZ_SafeObjects; + _objects = nearestObjects [[_position select 0, _position select 1], _objectClasses, _distance]; + _lastObject = _objects select ((count _objects) -1); + _objects = _objects - [_objects select ((count _objects) -1)]; + + diag_log "////////////////// Begin Scripted Base /////////////////////////////"; + diag_log text "[["; + { + _pos = [_x] call FNC_GetPos; + _class = TypeOf _x; + _dir = getDir _x; + diag_log text format[" [""%1"",%2,%3],",_class,_pos,_dir]; + } forEach _objects; + diag_log text format[" [""%1"",%2,%3]",TypeOf _lastObject,[_lastObject] call FNC_GetPos,getDir _lastObject]; + diag_log text "],false,false,false] call fnc_spawnObjects;"; + diag_log "/////////////////// End Scripted Base //////////////////////////////"; + systemChat "The base has been saved to the client rpt"; + + +}; + +BCMainMenu = +[ + ["Base Manager",true], + ["Insert", [2], "", -5, [["expression", "[] spawn fn_BCInsert"]], "1", "1"], + ["Export to sqf",[3], "", -5, [["expression", "[] spawn fn_BCExport"]], "1", "1"], + ["===========", [], "", -5, [["expression", ""]], "1", "0"], + ["Set Center", [4], "", -5, [["expression", "[] spawn fn_BCSetCenter"]], "1", "1"], + ["Set Radius", [5], "", -5, [["expression", "[] spawn fn_BCSetRadius"]], "1", "1"], + ["===========", [], "", -5, [["expression", ""]], "1", "0"], + ["Copy", [6], "", -5, [["expression", "[] spawn fn_BCCopy"]], "1", "1"], + ["Paste", [7], "", -5, [["expression", "[] spawn fn_BCPaste"]], "1", "1"], + ["Save As Script", [8], "", -5, [["expression", "[] spawn BCSaveAsScript"]], "1", "1"], + + ["Delete", [9], "", -5, [["expression", "[] spawn fn_BCDelete"]], "1", "1"], + ["===========", [], "", -5, [["expression", ""]], "1", "0"], + ["Exit", [10], "", -5, [["expression", ""]], "1", "1"] +]; + +BCBaseSaveMenu = [ + ["",true], + ["Save", [2], "", -5, [["expression", "[] spawn fn_BCSaveToDb"]], "1", "1"], + ["Exit", [3], "", -5, [["expression", "[] spawn fn_BCCancelBase"]], "1", "1"] +]; + +EAT_BaseManager = { + showCommandingMenu "#USER:BCMainMenu"; +}; + +/****************End Base Manager Functions******************/ + +EAT_AdminBuild = { + private ["_abort","_reason","_distance","_isNear","_lockable","_isAllowedUnderGround","_offset","_classname", + "_zheightdirection","_zheightchanged","_rotate","_objectHelperPos","_objectHelperDir","_objHDiff","_position", + "_isOk","_dir","_vector","_cancel","_location2","_buildOffset","_location", + "_counter","_dis","_sfx","_combination_1_Display","_combination_1", + "_combination_2","_combination_3","_combination","_combinationDisplay","_combination_4","_num_removed", + "_tmpbuilt","_vUp","_classnametmp","_text","_ghost","_objectHelper","_location1","_object","_helperColor", + "_canDo","_pos","_onLadder","_vehicle","_inVehicle","_isPole","_isPerm","_moveDistanceOriginal"]; + + //Check if building already in progress, exit if so. + if (dayz_actionInProgress) exitWith {localize "str_epoch_player_40" call dayz_rollingMessages;}; + dayz_actionInProgress = true; + + _pos = [player] call FNC_GetPos; + + _onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1; + + _vehicle = vehicle player; + _inVehicle = (_vehicle != player); + _isPerm = false; + + DZE_Q = false; + DZE_Z = false; + + DZE_Q_alt = false; + DZE_Z_alt = false; + + DZE_Q_ctrl = false; + DZE_Z_ctrl = false; + + DZE_5 = false; + DZE_4 = false; + DZE_6 = false; + + DZE_F = false; + + DZE_cancelBuilding = false; + + DZE_updateVec = false; + DZE_memDir = 0; + DZE_memForBack = 0; + DZE_memLeftRight = 0; + + call gear_ui_init; + closeDialog 1; + + if (dayz_isSwimming) exitWith {dayz_actionInProgress = false; localize "str_player_26" call dayz_rollingMessages;}; + if (_inVehicle) exitWith {dayz_actionInProgress = false; localize "str_epoch_player_42" call dayz_rollingMessages;}; + if (_onLadder) exitWith {dayz_actionInProgress = false; localize "str_player_21" call dayz_rollingMessages;}; + + DZE_buildItem = _this select 0; + if(isNil "adminRebuildItem" && DZE_buildItem == "rebuild") exitWith {dayz_actionInProgress = false; systemChat "You have not selected a buildable item yet"}; + if(DZE_buildItem == "rebuild") then { + DZE_buildItem = adminRebuildItem; + _isPerm = adminRebuildPerm; + } else { + adminRebuildItem = DZE_buildItem; + isBuilding = _this select 1; + adminRebuildPerm = _this select 2; + _isPerm = adminRebuildPerm; + }; + // declare tempVariables for the unidimentional array with the list of each items for each category to be compared + _buildRes = [(EAT_buildResidential - EAT_buildShed) + EAT_buildFarm] call myfnc_MDarray; + _buildMil = [(EAT_buildCastle + EAT_buildMilitary + EAT_buildIndustrial)] call myfnc_MDarray; + _buildReli = [EAT_buildReligious] call myfnc_MDarray; + _buildMisc = [(EAT_buildGrave + EAT_buildOutdoors)] call myfnc_MDarray; + + _classname = DZE_buildItem; + _classnametmp = _classname; + + _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); + if(isNil "_text") then { + _text = _classname; + }; + _ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview"); + + _lockable = 0; //default define if lockable not found in config file below + if(isNumber (configFile >> "CfgVehicles" >> _classname >> "lockable")) then { //find out if item is lockable object + _lockable = getNumber(configFile >> "CfgVehicles" >> _classname >> "lockable"); // 2=lockbox, 3=combolock, 4=safe + }; + + _isAllowedUnderGround = 1; //check if allowed to build under terrain + if(isNumber (configFile >> "CfgVehicles" >> _classname >> "nounderground")) then { + _isAllowedUnderGround = getNumber(configFile >> "CfgVehicles" >> _classname >> "nounderground"); + }; + + _offset = getArray (configFile >> "CfgVehicles" >> _classname >> "offset"); //check default distance offset, define if does not exist + + if((count _offset) <= 0) then { + if(isBuilding) then { + if(DZE_buildItem in _buildRes) then { + _offset = [0,15,2]; + } else { + if(DZE_buildItem in _buildMil) then { + _offset = [0,15,2]; + } else { + if(DZE_buildItem in _buildReli) then { + _offset = [0,25,2]; + } else { + if(DZE_buildItem in _buildMisc) then { + _offset = [0,2,1]; + } else { + _offset = [0,6,2]; + }; + }; + }; + }; + } else { + _offset = [0,2,0]; + }; + }; + + _isPole = (_classname == "Plastic_Pole_EP1_DZ"); + + _distance = DZE_PlotPole select 0; + _needText = localize "str_epoch_player_246"; + + if(_isPole) then { + _distance = DZE_PlotPole select 1; + }; + + // check for near plot + _findNearestPoles = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], _distance]; + _findNearestPole = []; + + { + if (alive _x) then { + _findNearestPole set [(count _findNearestPole),_x]; + }; + } count _findNearestPoles; + + _IsNearPlot = count (_findNearestPole); + + // If item is plot pole && another one exists within 45m + if(_isPole && _IsNearPlot > 0) exitWith {dayz_actionInProgress = false; cutText ["You are too close to another plot pole" , "PLAIN DOWN"]; }; + + _objectHelper = objNull; + _isOk = true; + _location1 = [player] call FNC_GetPos; // get inital players position + _dir = getDir player; //required to pass direction when building + + // if ghost preview available use that instead + if (_ghost != "") then { + _classname = _ghost; + }; + + _object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"]; //object preview, not an actual object that will be built + + if((count _offset) <= 0) then { + _offset = [0,(abs(((boundingBox _object)select 0) select 1)),0]; + }; + + _objectHelper = "Sign_sphere10cm_EP1" createVehicle [0,0,0]; + _helperColor = "#(argb,8,8,3)color(0,0,0,0,ca)"; + _objectHelper setObjectTexture [0,_helperColor]; + _objectHelper attachTo [player,_offset]; + _object attachTo [_objectHelper,[0,0,0]]; + + if (isClass (configFile >> "SnapBuilding" >> _classname)) then { + ["","","",["Init",_object,_classname,_objectHelper]] spawn snap_build; + }; + + // Do not turn on vectors for GUI spawned buildings + if !(DZE_buildItem in DZE_noRotate) then{ + ["","","",["Init","Init",0]] spawn build_vectors; + }; + + _objHDiff = 0; + _cancel = false; + _reason = ""; + _moveDistanceOriginal = DZE_buildMaxMoveDistance; + + // Allow more movement for GUI building spawns - 100 meters + if (DZE_buildItem in (_buildRes + _buildMil + _buildReli + _buildMisc)) then { + DZE_buildMaxMoveDistance = 100; + }; + + helperDetach = false; + _canDo = (!r_drag_sqf and !r_player_unconscious); + _position = [_objectHelper] call FNC_GetPos; + + while {_isOk} do { + _zheightchanged = false; + _zheightdirection = ""; + _rotate = false; + + if (DZE_Q) then { + DZE_Q = false; + _zheightdirection = "up"; + _zheightchanged = true; + }; + if (DZE_Z) then { + DZE_Z = false; + _zheightdirection = "down"; + _zheightchanged = true; + }; + if (DZE_Q_alt) then { + DZE_Q_alt = false; + _zheightdirection = "up_alt"; + _zheightchanged = true; + }; + if (DZE_Z_alt) then { + DZE_Z_alt = false; + _zheightdirection = "down_alt"; + _zheightchanged = true; + }; + if (DZE_Q_ctrl) then { + DZE_Q_ctrl = false; + _zheightdirection = "up_ctrl"; + _zheightchanged = true; + }; + if (DZE_Z_ctrl) then { + DZE_Z_ctrl = false; + _zheightdirection = "down_ctrl"; + _zheightchanged = true; + }; + if (DZE_4) then { + _rotate = true; + DZE_4 = false; + if(DZE_dirWithDegrees) then{ + DZE_memDir = DZE_memDir - DZE_curDegree; + }else{ + DZE_memDir = DZE_memDir - 45; + }; + }; + if (DZE_6) then { + _rotate = true; + DZE_6 = false; + if(DZE_dirWithDegrees) then{ + DZE_memDir = DZE_memDir + DZE_curDegree; + }else{ + DZE_memDir = DZE_memDir + 45; + }; + }; + + if(DZE_updateVec) then{ + [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw; + DZE_updateVec = false; + }; + + if (DZE_F and _canDo) then { + if (helperDetach) then { + _objectHelper attachTo [player]; + DZE_memDir = DZE_memDir-(getDir player); + helperDetach = false; + [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw; + } else { + _objectHelperPos = getPosATL _objectHelper; + detach _objectHelper; + DZE_memDir = getDir _objectHelper; + [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw; + _objectHelper setPosATL _objectHelperPos; + _objectHelper setVelocity [0,0,0]; //fix sliding glitch + helperDetach = true; + }; + DZE_F = false; + }; + + if(_rotate) then { + [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw; + }; + + if(_zheightchanged) then { + if (!helperDetach) then { + detach _objectHelper; + _objectHelperDir = getDir _objectHelper; + }; + + _position = [_objectHelper] call FNC_GetPos; + + if(_zheightdirection == "up") then { + _position set [2,((_position select 2)+0.1)]; + _objHDiff = _objHDiff + 0.1; + }; + if(_zheightdirection == "down") then { + _position set [2,((_position select 2)-0.1)]; + _objHDiff = _objHDiff - 0.1; + }; + + if(_zheightdirection == "up_alt") then { + _position set [2,((_position select 2)+1)]; + _objHDiff = _objHDiff + 1; + }; + if(_zheightdirection == "down_alt") then { + _position set [2,((_position select 2)-1)]; + _objHDiff = _objHDiff - 1; + }; + + if(_zheightdirection == "up_ctrl") then { + _position set [2,((_position select 2)+0.01)]; + _objHDiff = _objHDiff + 0.01; + }; + if(_zheightdirection == "down_ctrl") then { + _position set [2,((_position select 2)-0.01)]; + _objHDiff = _objHDiff - 0.01; + }; + + if((_isAllowedUnderGround == 0) && ((_position select 2) < 0)) then { + _position set [2,0]; + }; + + if (surfaceIsWater _position) then { + _objectHelper setPosASL _position; + } else { + _objectHelper setPosATL _position; + }; + + if (!helperDetach) then { + _objectHelper attachTo [player]; + }; + [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw; + }; + + uiSleep 0.5; + + _location2 = [player] call FNC_GetPos; + _objectHelperPos = [_objectHelper] call FNC_GetPos; + + if(DZE_5) exitWith { + _position = [_object] call FNC_GetPos; + detach _object; + _dir = getDir _object; + _vector = [(vectorDir _object),(vectorUp _object)]; + deleteVehicle _object; + detach _objectHelper; + deleteVehicle _objectHelper; + }; + + if(_location1 distance _location2 > DZE_buildMaxMoveDistance) exitWith { + _cancel = true; + _reason = format[localize "STR_EPOCH_BUILD_FAIL_MOVED",DZE_buildMaxMoveDistance]; + detach _object; + deleteVehicle _object; + detach _objectHelper; + deleteVehicle _objectHelper; + }; + + if(_location1 distance _objectHelperPos > DZE_buildMaxMoveDistance) exitWith { + _cancel = true; + _reason = format[localize "STR_EPOCH_BUILD_FAIL_TOO_FAR",DZE_buildMaxMoveDistance]; + detach _object; + deleteVehicle _object; + detach _objectHelper; + deleteVehicle _objectHelper; + }; + + if (DZE_cancelBuilding) exitWith { + _cancel = true; + _reason = localize "STR_EPOCH_PLAYER_46"; + detach _object; + deleteVehicle _object; + detach _objectHelper; + deleteVehicle _objectHelper; + }; + }; + _proceed = false; + _counter = 0; + _location = [0,0,0]; + + if(!_cancel) then { + + _classname = _classnametmp; + + // Start Build + _tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; //create actual object that will be published to database + + _tmpbuilt setdir _dir; //set direction inherited from passed args from control + _tmpbuilt setVariable["memDir",_dir,true]; + if (isBuilding) then {_tmpbuilt setVariable["EAT_Building",1,true];}; + + // Get position based on object + _location = _position; + + if((_isAllowedUnderGround == 0) && ((_location select 2) < 0)) then { //check Z axis if not allowed to build underground + _location set [2,0]; //reset Z axis to zero (above terrain) + }; + + _tmpbuilt setVectorDirAndUp _vector; + + _buildOffset = [0,0,0]; + _vUp = _vector select 1; + switch (_classname) do { + case "MetalFloor_DZ": { _buildOffset = [(_vUp select 0) * .148, (_vUp select 1) * .148,0]; }; + //case "CinderWall_DZ": { _buildOffset = [(_vUp select 0) * 1.686, (_vUp select 1) * 1.686,0]; }; + }; + + _location = [ + (_location select 0) - (_buildOffset select 0), + (_location select 1) - (_buildOffset select 1), + (_location select 2) - (_buildOffset select 2) + ]; + + if (surfaceIsWater _location) then { + _tmpbuilt setPosASL _location; + _location = ASLtoATL _location; //Database uses ATL + } else { + _tmpbuilt setPosATL _location; + }; + + //format[localize "str_epoch_player_138",_text] call dayz_rollingMessages; + + call player_forceSave; + + format[localize "str_build_01",_text] call dayz_rollingMessages; + + _tmpbuilt setVariable ["OEMPos",_location,true]; //store original location as a variable + + if(_isPerm) then { + _tmpbuilt setVariable ["CharacterID",dayz_characterID,true]; + // fire? + if(_tmpbuilt isKindOf "Land_Fire_DZ") then { //if campfire, then spawn, but do not publish to database + _tmpbuilt spawn player_fireMonitor; + } else { + if (DZE_permanentPlot) then { + _tmpbuilt setVariable ["ownerPUID",dayz_playerUID,true]; + if (_isPole) then { + _friendsArr = [[dayz_playerUID,toArray (name player)]]; + _tmpbuilt setVariable ["plotfriends", _friendsArr, true]; + PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],_friendsArr,player,dayz_authKey]; + } else { + PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],[],player,dayz_authKey]; + }; + } else { + PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location, _vector],[]]; + }; + publicVariableServer "PVDZ_obj_Publish"; + }; + }; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has used admin build to place: %3",name player,getPlayerUID player,_tmpbuilt] call EAT_Logger;}; + + } else { //cancel build if passed _cancel arg was true or building on roads/trader city + format[localize "str_epoch_player_47",_text,_reason] call dayz_rollingMessages; + }; + + // Reset variable if it was changed because of GUI building placement + DZE_buildMaxMoveDistance = _moveDistanceOriginal; + + dayz_actionInProgress = false; +}; + +EAT_BuildingDialog = { + private ["_dialog","_building"]; + PermDialogSelected = -1; + TempDialogSelected = -1; + AdminDialogList = 13000; + buildingList = EAT_allBuildingList; + + _dialog = createDialog "EAT_build_SuperAdminDialog"; + lbClear AdminDialogList; + + { + private ["_index"]; + _index = lbAdd [AdminDialogList, format["%1 - %2 (%3)", _x select 0, _x select 1, _x select 2]]; + lbSetPicture [AdminDialogList, _index]; + } forEach buildingList; + + LoadSpecificList = { + lbClear AdminDialogList; + buildingList = _this select 0; + + switch(buildingList) do + { + case "Residential": + { + buildingList = EAT_buildResidential; + }; + case "Military": + { + buildingList = EAT_buildMilitary; + }; + case "Industrial": + { + buildingList = EAT_buildIndustrial; + }; + case "Religious": + { + buildingList = EAT_buildReligious; + }; + case "Farm": + { + buildingList = EAT_buildFarm; + }; + case "Ores": + { + buildingList = EAT_buildOre; + }; + case "Graves": + { + buildingList = EAT_buildGrave; + }; + case "Roads": + { + buildingList = EAT_buildRoad; + }; + case "Castle": + { + buildingList = EAT_buildCastle; + }; + case "Epoch": + { + buildingList = EAT_buildModular; + }; + }; + + lbClear AdminDialogList; + + { + private ["_index", "_x"]; + _index = lbAdd [AdminDialogList, format["%1 - %2 (%3)", _x select 0, _x select 1, _x select 2]]; + lbSetPicture [AdminDialogList, _index]; + } forEach buildingList; + }; + + waitUntil { !dialog }; + if ((PermDialogSelected < 0) && (TempDialogSelected < 0)) exitWith {}; + + if (PermDialogSelected > -1) then { + _building = ((buildingList select PermDialogSelected) select 2); + if (_building in EAT_buildUniArray) then { + [_building,false,true] spawn EAT_AdminBuild; + } else { + [_building,true,true] spawn EAT_AdminBuild; + }; + }; + + if (TempDialogSelected > -1) then { + _building = ((buildingList select TempDialogSelected) select 2); + if (_building in EAT_buildUniArray) then { + [_building,false,false] spawn EAT_AdminBuild; + } else { + [_building,true,false] spawn EAT_AdminBuild; + }; + }; +}; + +EAT_MaintainArea = { + private ["_target","_objectClasses","_range","_objects","_count","_findNearestPole","_IsNearPlot","_objects_filtered"]; + + player removeAction s_player_maintain_area; + s_player_maintain_area = 1; + player removeAction s_player_maintain_area_preview; + s_player_maintain_area_preview = 1; + + // check for near plot + _target = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], 20]; + _findNearestPole = []; + + { + if (alive _x) then { + _findNearestPole set [(count _findNearestPole),_x]; + }; + } count _target; + + _IsNearPlot = count (_findNearestPole); + if(_IsNearPlot < 1) exitWith {s_player_maintain_area_preview = -1;s_player_maintain_area = -1; "No plot pole found in 20 meters" call dayz_rollingMessages;}; + _target = _target select 0; + _objectClasses = DZE_maintainClasses; + _range = DZE_maintainRange; // set the max range for the maintain area + _objects = nearestObjects [_target, _objectClasses, _range]; + + //filter to only those that have 10% damage + _objects_filtered = []; + { + if (damage _x >= DZE_DamageBeforeMaint) then { + _objects_filtered set [count _objects_filtered, _x]; + }; + } count _objects; + _objects = _objects_filtered; + + // TODO dynamic requirements based on used building parts? + _count = count _objects; + + if (_count == 0) exitWith { + cutText [format[(localize "STR_EPOCH_ACTIONS_22"), _count], "PLAIN DOWN"]; + s_player_maintain_area = -1; + s_player_maintain_area_preview = -1; + }; + + // all required items removed from player gear + cutText [format[(localize "STR_EPOCH_ACTIONS_4"), _count], "PLAIN DOWN", 5]; + PVDZE_maintainArea = [player,1,_target]; + publicVariableServer "PVDZE_maintainArea"; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has used admin build to maintain an area",name player,getPlayerUID player] call EAT_Logger;}; + + s_player_maintain_area = -1; + s_player_maintain_area_preview = -1; +}; + +EAT_DownGrade = { + private ["_location","_dir","_classname","_text","_object","_objectID","_objectUID","_newclassname","_obj","_downgrade","_objectCharacterID"]; + + player removeAction s_player_downgrade_build; + s_player_downgrade_build = 1; + + // get cursor target + _obj = cursorTarget; + if(isNull _obj) exitWith {s_player_downgrade_build = -1; "No Object Selected" call dayz_rollingMessages}; + + _objectCharacterID = _obj getVariable ["CharacterID","0"];// Current charID + + if (DZE_Lock_Door != _objectCharacterID) exitWith {s_player_downgrade_build = -1; localize "str_epoch_player_49" call dayz_rollingMessages;}; + + _objectID = _obj getVariable ["ObjectID","0"];// Find objectID + _objectUID = _obj getVariable ["ObjectUID","0"];// Find objectUID + + if(_objectID == "0" && _objectUID == "0") exitWith {s_player_downgrade_build = -1; localize "str_epoch_player_50" call dayz_rollingMessages;}; + + // Get classname + _classname = typeOf _obj; + + // Find display name + _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); + + // Find next downgrade + _downgrade = getArray (configFile >> "CfgVehicles" >> _classname >> "downgradeBuilding"); + + if ((count _downgrade) > 0) then { + + _newclassname = _downgrade select 0; + + // Get position + _location = _obj getVariable["OEMPos",(getposATL _obj)]; + + // Get direction + _dir = getDir _obj; + _vector = [(vectorDir _obj),(vectorUp _obj)]; + + // Reset the character ID on locked doors before they inherit the newclassname + if (_classname in DZE_DoorsLocked) then { + _obj setVariable ["CharacterID",dayz_characterID,true]; + _objectCharacterID = dayz_characterID; + }; + + _classname = _newclassname; + _object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"]; + _object setDir _dir; + _object setVariable["memDir",_dir,true]; + _object setVectorDirAndUp _vector; + _object setPosATL _location; + + format[localize "str_epoch_player_142",_text] call dayz_rollingMessages; + + if (DZE_GodModeBase && {!(_classname in DZE_GodModeBaseExclude)}) then { + _object addEventHandler ["HandleDamage",{false}]; + }; + + if (DZE_permanentPlot) then { + _ownerID = _obj getVariable["ownerPUID","0"]; + _object setVariable ["ownerPUID",_ownerID,true]; + PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location,dayz_playerUID,_vector],_classname,_obj,player,[],dayz_authKey]; + } else { + PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location, _vector],_classname,_obj,player,[],dayz_authKey]; + }; + publicVariableServer "PVDZE_obj_Swap"; + + player reveal _object; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has used admin build to downgrade: %3",name player,getPlayerUID player,_obj] call EAT_Logger;}; + + } else { + localize "str_epoch_player_51" call dayz_rollingMessages; + }; + + s_player_downgrade_build = -1; +}; + +EAT_Upgrade = { + private ["_location","_dir","_classname","_text","_object","_objectID","_objectUID","_newclassname","_obj","_upgrade","_lockable", + "_combination_1","_combination_2","_combination_3","_combination","_objectCharacterID"]; + + player removeAction s_player_upgrade_build; + s_player_upgrade_build = 1; + + _obj = cursorTarget; + if(isNull _obj) exitWith {s_player_upgrade_build = -1; "No Object Selected" call dayz_rollingMessages;}; + + _objectID = _obj getVariable ["ObjectID","0"]; // Find objectID + _objectUID = _obj getVariable ["ObjectUID","0"];// Find objectUID + + if (_objectID == "0" && _objectUID == "0") exitWith {s_player_upgrade_build = -1; localize "str_epoch_player_50" call dayz_rollingMessages;}; + + _classname = typeOf _obj; + _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); + _upgrade = getArray (configFile >> "CfgVehicles" >> _classname >> "upgradeBuilding"); + + if ((count _upgrade) > 0) then { + _newclassname = _upgrade select 0; + _lockable = 0; + if(isNumber (configFile >> "CfgVehicles" >> _newclassname >> "lockable")) then { + _lockable = getNumber(configFile >> "CfgVehicles" >> _newclassname >> "lockable"); + }; + + _location = _obj getVariable["OEMPos",(getposATL _obj)]; + _dir = getDir _obj; + _vector = [(vectorDir _obj),(vectorUp _obj)]; + _objectCharacterID = _obj getVariable ["CharacterID","0"]; + _classname = _newclassname; + _object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"]; + _object setDir _dir; + _object setVariable["memDir",_dir,true]; + _object setVectorDirAndUp _vector; + _object setPosATL _location; + + if (_lockable == 3) then { + _combination_1 = floor(random 10); + _combination_2 = floor(random 10); + _combination_3 = floor(random 10); + _combination = format["%1%2%3",_combination_1,_combination_2,_combination_3]; + + _objectCharacterID = _combination; + DZE_Lock_Door = _combination; + + format[localize "str_epoch_player_158",_combination,_text] call dayz_rollingMessages; + systemChat format[localize "str_epoch_player_158",_combination,_text]; + } else { + format[localize "str_epoch_player_159",_text] call dayz_rollingMessages; + }; + if (DZE_GodModeBase && {!(_classname in DZE_GodModeBaseExclude)}) then { + _object addEventHandler ["HandleDamage",{false}]; + }; + if (DZE_permanentPlot) then { + _ownerID = _obj getVariable["ownerPUID","0"]; + _object setVariable ["ownerPUID",_ownerID,true]; + PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location,_ownerID,_vector],_classname,_obj,player,[],dayz_authKey]; + } else { + PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location,_vector],_classname,_obj,player,[],dayz_authKey]; + }; + publicVariableServer "PVDZE_obj_Swap"; + + player reveal _object; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has used admin build to upgrade: %3",name player,getPlayerUID player,_obj] call EAT_Logger;}; + + } else { + localize "str_epoch_player_82" call dayz_rollingMessages; + }; + + s_player_upgrade_build = -1; +}; + +EAT_AdminModeToggle = { + /* + Below are the default ON/OFF toggles. Anything marked + true will turn on when you turn on AdminMode. + To make an option default ON change = false to = true. + To make an option default OFF change = true to = false. + To disable an option entirely, go down to toggleMenu = + */ + + if (isNil "EAT_AdminMode") then {EAT_AdminMode = true;} else {EAT_AdminMode = !EAT_AdminMode;}; + + optionMenu = + { + toggleMenu = + [ + // To disable an option for admins place a // in the front of the line below + // and change the initialization to false in the config at the top of this file + ["",true], + ["Toggle options:(current state)", [-1], "", -5, [["expression", ""]], "1", "0"], + [format["Vehicle Speed Boost: %1",EAT_speedBoost],[0],"", -5, [["expression", 'EAT_speedBoost = [EAT_speedBoost,EAT_VehSpeedBoost] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + [format["Fast Forward: %1",EAT_fastWalk],[0],"", -5, [["expression", 'EAT_fastWalk = [EAT_fastWalk,EAT_FastForwardToggle] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + [format["Fast Up: %1",EAT_fastUp],[0],"", -5, [["expression", 'EAT_fastUp = [EAT_fastUp,EAT_fastUpToggle] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + [format["Enhanced ESP: %1",EAT_enhancedESPMode], [0], "", -5, [["expression", 'if (EAT_enhancedESPMode) then {EAT_enhancedESPMode = false; EATenhancedESP = false;} else {call EAT_enhancedESPToggle;}; [] spawn optionMenu']], "1", "1"], + [format["Player ESP: %1",EAT_playerESPMode], [0], "", -5, [["expression", 'if (EAT_playerESPMode) then {EAT_playerESPMode = false; EATplayerESP = false;} else {call EAT_playerESPToggle}; [] spawn optionMenu']], "1", "1"], + [format["Invisibility ON: %1",EAT_invisibility], [0], "", -5, [["expression", 'EAT_invisibility = [EAT_invisibility,EAT_AdminInvisible] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + [format["Flying ON: %1",EAT_flyingMode], [0], "", -5, [["expression", 'if (EAT_flyingMode) then {EAT_flyingMode = false; EATflying = false;} else {EAT_flyingMode = [EAT_flyingMode,EAT_flying] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["Infinite Ammo: %1",EAT_infAmmo], [0], "", -5, [["expression", 'if (EAT_infAmmo) then {EAT_infAmmo = false; EATinfiniteAmmo = false;} else {EAT_infAmmo = [EAT_infAmmo,EAT_InfiniteAmmo] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["God Mode: %1",EAT_playerGod], [0], "", -5, [["expression", 'if (EAT_playerGod) then {EAT_playerGod = false; EATplayerGod = false;} else {EAT_playerGod = [EAT_playerGod,EAT_GodMode] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["Car God Mode: %1",EAT_vehicleGod], [0], "", -5, [["expression", 'if (EAT_vehicleGod) then {EAT_vehicleGod = false; EATvehicleGod = false;} else {EAT_vehicleGod = [EAT_vehicleGod,EAT_VehGod] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["Zombie Shield: %1",EAT_ZombieShield], [0], "", -5, [["expression", 'if (EAT_ZombieShield) then {EAT_ZombieShield = false; EAT_SheildMe = false;} else {EAT_ZombieShield = [EAT_ZombieShield,EAT_ZomShield] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"], + [format["Grass Off: %1",EAT_grassOff], [0], "", -5, [["expression", 'EAT_grassOff = [EAT_grassOff,EAT_GrassOffToggle] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + [format["Admin Fast Build (No Plot Req): %1",EAT_adminBuildMode], [0], "", -5, [["expression", 'EAT_adminBuildMode = [EAT_adminBuildMode,EAT_adminBuildCount] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"], + ["", [], "", -5, [["expression", ""]], "1", "0"], + ["Exit", [0], "", -5, [["expression", ""]], "1", "1"] + ]; + showCommandingMenu "#USER:toggleMenu"; + }; + + if(EAT_AdminMode) then { + "***Press F4 to toggle AdminMode options***" call dayz_rollingMessages; + ["AdminMode"] call EAT_Keybind; + call EAT_AdminToggleOn; + } else{ + "Admin Mode - DISABLED" call dayz_rollingMessages; + ["EndAdminMode"] call EAT_Keybind; + call EAT_AdminToggleOff; + }; +}; + +EAT_flying = { + EATflying = _this select 0; + + hovering = nil; + hoverPos = nil; + + move_forward = + { + if ((getPosATL (vehicle player) select 2) > 1) then + { + _vehicle = (vehicle player); + _vel = velocity _vehicle; + _dir = direction _vehicle; + _speed = 0.4; comment "Added speed"; + _vehicle setVelocity [(_vel select 0)+(sin _dir*_speed),(_vel select 1)+ + (cos _dir*_speed),0.4]; + }; + }; + + move_left = + { + if ((getPosATL (vehicle player) select 2) > 1) then + { + _leftDirection = getdir (vehicle player); + (vehicle player) setdir (_leftDirection) - 2; + }; + }; + + move_backward = + { + if ((getPosATL (vehicle player) select 2) > 1) then + { + _vehicle = (vehicle player); + _vel = velocity _vehicle; + _dir = direction _vehicle; + _speed = -0.4; comment "Added speed"; + _vehicle setVelocity [(_vel select 0)+(sin _dir*_speed),(_vel select 1)+ + (cos _dir*_speed),0.4]; + }; + }; + + move_right = + { + if ((getPosATL (vehicle player) select 2) > 1) then + { + _rightDirection = getdir (vehicle player); + (vehicle player) setdir (_rightDirection) + 2; + player setVariable["lastPos",1];player setVariable["lastPos",[]]; + }; + }; + + move_up = + { + _vehicle = (vehicle player); + _vel = velocity _vehicle; + _dir = direction _vehicle; + _speed = 6; comment "Added speed"; + _vehicle setVelocity [(_vel select 0),(_vel select 1),8]; + }; + + move_down = + { + if ((getPosATL (vehicle player) select 2) > 1) then + { + _vehicle = (vehicle player); + _forwardCurrentDirection = getdir (vehicle player); + _forwardCurrentPosition = getPosATL (vehicle player); + (vehicle player) setdir _forwardCurrentDirection; + _vehicle setVelocity [0,0,-4]; + }; + }; + + toggle_hover = + { + if (isnil "hovering") then + { + hovering = true; + "Hovering ON" call dayz_rollingMessages; + hoverPos = getPosATL (vehicle player); + } + else + { + hovering = nil; + "Hovering OFF" call dayz_rollingMessages; + hoverPos = nil; + }; + }; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has added flying",name player,getPlayerUID player]call EAT_Logger;}; + + keyForward = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 17) then {call move_forward;}"];//W - Forward + keyLeft = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 30) then {call move_left;}"];//A - Left + keyBackward = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 31) then {call move_backward;}"];//S - Backward + keyRight = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 32) then {call move_right;}"];//D - Right + keyUp = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 16) then {call move_up;}"];//Q - Up + keyDown = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 44) then {call move_down;}"];//Z - Down + keyHover = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 57) then {call toggle_hover;}"];//SpaceBar - Toggle Hover + + + [] spawn { + while {EATflying} do + { + if (!isNil "hovering") then + { + (vehicle player) setVelocity [0,0,0.2]; + }; + uiSleep 0.01; + }; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has DISABLED flying",name player,getPlayerUID player] call EAT_Logger;}; + + (findDisplay 46) displayRemoveEventHandler ["KeyDown", keyForward]; + (findDisplay 46) displayRemoveEventHandler ["KeyDown", keyLeft]; + (findDisplay 46) displayRemoveEventHandler ["KeyDown", keyBackward]; + (findDisplay 46) displayRemoveEventHandler ["KeyDown", keyRight]; + (findDisplay 46) displayRemoveEventHandler ["KeyDown", keyUp]; + (findDisplay 46) displayRemoveEventHandler ["KeyDown", keyDown]; + (findDisplay 46) displayRemoveEventHandler ["KeyDown", keyHover]; + + hovering = nil; + hoverPos = nil; + }; +}; + +EAT_EnhancedESP = { + if(isNil "markers") then { markers = []}; + if(isNil "vehList") then { vehList = []}; + if(isNil "unlockedVehList") then { unlockedVehList = []}; + if(isNil "lockedVehList") then { lockedVehList = []}; + if(isNil "changed") then {changed = false}; + if(isNil "toggleCheck") then {toggleCheck = 0}; + if(isNil "delayTime") then {delayTime = 0}; + if(isNil "poleList") then {poleList = [];}; + if(isNil "storageList") then {storageList = [];}; + if(isNil "buildableObjectsList") then {buildableObjectsList = [];}; + if(isNil "crashList") then {crashList = [];}; + if(isNil "storageObjects") then {storageObjects = ["TentStorage","TentStorageDomed","TentStorageDomed2","VaultStorageLocked","OutHouse_DZ","Wooden_shed_DZ","WoodShack_DZ","StorageShed_DZ","LockboxStorageLocked","GunRack_DZ","WoodCrate_DZ"];}; + if(isNil "buildableObjects") then {buildableObjects = ["WoodFloor_DZ","WoodLargeWall_DZ","WoodLargeWallDoor_DZ","WoodLargeWallWin_DZ","WoodSmallWall_DZ","WoodSmallWallWin_DZ","WoodSmallWallDoor_DZ","WoodFloorHalf_DZ","WoodFloorQuarter_DZ","WoodStairs_DZ","WoodStairsSans_DZ","WoodStairsRails_DZ","WoodSmallWallThird_DZ","WoodLadder_DZ","Land_DZE_GarageWoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_WoodDoor","Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","Land_DZE_WoodDoorLocked","CinderWallHalf_DZ","CinderWall_DZ","CinderWallDoorway_DZ","CinderWallDoor_DZ","CinderWallDoorLocked_DZ","CinderWallSmallDoorway_DZ","CinderWallDoorSmall_DZ","CinderWallDoorSmallLocked_DZ","MetalFloor_DZ","WoodRamp_DZ"];}; + + if (!("ItemGPS" in items player)) then {player addWeapon "ItemGPS";}; + + EATenhancedESP = _this select 0; + + // START OF CONFIG + // Defines the default on and off of map markers + if (isNil "AddPlayersToMap") then {AddPlayersToMap = true;}; + if (isNil "AddDeadPlayersToMap") then {AddDeadPlayersToMap = false;}; + if (isNil "AddZombieToMap") then {AddZombieToMap = false;}; + if (isNil "AddUnlockedVehiclesToMap") then {AddUnlockedVehiclesToMap = true;}; + if (isNil "AddLockedVehiclesToMap") then {AddLockedVehiclesToMap = true;}; + if (isNil "AddPlotPoleToMap") then {AddPlotPoleToMap = false;}; + if (isNil "AddStorageToMap") then {AddStorageToMap = false;}; + if (isNil "AddBuildablesToMap") then {AddBuildablesToMap = false;}; + if (isNil "AddCrashesToMap") then {AddCrashesToMap = false;}; + // END OF CONFIG + + + //GLOBAL VARS START + + GlobalSleep = 1;//Sleep between update markers + GlobalMarkerSize = [1.5,1.5]; + + //----------------------#Players#-------------------------- + AddPlayersToScreen=true; + PlayersMarkerType=["x_art"]; + PlayerMarkerColor=[1,0,0,1];//two in the fourth degree is equal to sixteen, so there are 16 colors + PlayerShowBloodInt=false; + PlayerShowDistance=true; + TheThicknessOfThePointPlayer=0.7; + //----------------------#Players#-------------------------- + + //--------------------#Dead Players#------------------------ + DeadPlayersMarkerSize=[2,2]; + DeadPlayersMarkerType="DestroyedVehicle"; + DeadPlayerMarkerColor="ColorBlack";//two in the fourth degree is equal to sixteen, so there are 16 colors + //--------------------#Dead Players#------------------------ + + //----------------------#Zombies#-------------------------- + ZombieVisibleDistance=100; + ZombieMarkerType="vehicle"; + ZombieMarkerColor="ColorGreen"; + ZombieName="Zombie"; + //----------------------#Zombies#-------------------------- + + //----------------------#Unlocked-Vehicles#------------------------- + UnlockedVehicleMarkerType="vehicle"; + UnlockedVehicleMarkerColor="ColorBlue"; + //----------------------#Unlocked-Vehicles#------------------------- + + //----------------------#Locked-Vehicles#------------------------- + LockedVehicleMarkerType="vehicle"; + LockedVehicleMarkerColor="ColorRed"; + //----------------------#Locked-Vehicles#------------------------- + + //----------------------#PlottPole#------------------------- + PlotPoleMarkerType="mil_triangle"; + PlotPoleMarkerColor="ColorWhite"; + PlotPoleMarkerSize = [0.4,0.4]; + //----------------------#PlotPole#------------------------- + + //----------------------#Storage#---------------------------- + StorageMarkerType="mil_box"; + StorageMarkerColor="ColorYellow"; + StorageMarkerSize = [0.25,0.25]; + //----------------------#Storage#---------------------------- + + //----------------------#Buildables#---------------------------- + BuildablesMarkerType="mil_box"; + BuildablesMarkerColor="ColorYellow"; + BuildablesMarkerSize = [0.5,0.5]; + //----------------------#Buildables#---------------------------- + + //----------------------#Crashes#-------------------------- + CrashesMarkerType="vehicle"; + CrashesMarkerColor="ColorBrown"; + //----------------------#Crashes#-------------------------- + + //GLOBAL VARS END + + + F5Menu = + { + F5OptionMenu = + [ + ["",true], + ["Toggle options:(current state)", [-1], "", -5, [["expression", ""]], "1", "0"], + [format["Show Dead Bodies: %1",AddDeadPlayersToMap], [0], "", -5, [["expression", "AddDeadPlayersToMap = !AddDeadPlayersToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Epoch Buildables: %1",AddBuildablesToMap], [0], "", -5, [["expression", "AddBuildablesToMap = !AddBuildablesToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Plot Poles: %1",AddPlotPoleToMap], [0], "", -5, [["expression", "AddPlotPoleToMap = !AddPlotPoleToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Player Storage: %1",AddStorageToMap], [0], "", -5, [["expression", "AddStorageToMap = !AddStorageToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Epoch Missions: %1",AddCrashesToMap], [0], "", -5, [["expression", "AddCrashesToMap = !AddCrashesToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Zombies: %1",AddZombieToMap], [0], "", -5, [["expression", "AddZombieToMap = !AddZombieToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Players: %1",AddPlayersToMap], [0], "", -5, [["expression", "AddPlayersToMap = !AddPlayersToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Locked Vehicles: %1",AddLockedVehiclesToMap], [0], "", -5, [["expression", "AddLockedVehiclesToMap = !AddLockedVehiclesToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + [format["Show Unlocked Vehicles: %1",AddUnlockedVehiclesToMap], [0], "", -5, [["expression", "AddUnlockedVehiclesToMap = !AddUnlockedVehiclesToMap;changed = true; [] spawn F5Menu"]], "1", "1"], + ["", [], "", -5, [["expression", ""]], "1", "0"], + ["Exit", [0], "", -5, [["expression", ""]], "1", "1"] + ]; + showCommandingMenu "#USER:F5OptionMenu"; + }; + + dList = []; //List of dead bodies + dListMarkers = []; //List of Dead player markers + ["ESP"] call EAT_Keybind; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has enhanced ESP",name player,getPlayerUID player] call EAT_Logger;}; + + [] spawn { + While {EATenhancedESP} do + { + If (AddPlayersToMap && (delayTime == 0 || changed)) then + { + { + (group _x) addGroupIcon PlayersMarkerType; + if (PlayerShowBloodInt && PlayerShowDistance) then + { + BloodVal=round(_x getVariable["USEC_BloodQty",12000]); + (group _x) setGroupIconParams [PlayerMarkerColor, format["%1(%2)-%3",name _x,BloodVal,round(player distance _x)],TheThicknessOfThePointPlayer,true]; + } else { + If (PlayerShowBloodInt && !PlayerShowDistance) then + { + BloodVal=round(_x getVariable["USEC_BloodQty",12000]); + (group _x) setGroupIconParams [PlayerMarkerColor, format ["%1(%2)",name _x, BloodVal],TheThicknessOfThePointPlayer,true]; + } else { + If (PlayerShowDistance && !PlayerShowBloodInt) then + { + //_text=parseText format ["%1
%2",name _x,round(player distance _x)]; + (group _x) setGroupIconParams [PlayerMarkerColor, format["%1-%2", name _x,round(player distance _x)],TheThicknessOfThePointPlayer,true]; + } else { + //_text=parseText format ["%1",name _x]; + (group _x) setGroupIconParams [PlayerMarkerColor, format ["%1",name _x],TheThicknessOfThePointPlayer,true]; + }; + }; + }; + ParamsPlayersMarkers=[true,AddPlayersToScreen]; + setGroupIconsVisible ParamsPlayersMarkers; + } forEach allUnits; + }; + + if (EATenhancedESP && visibleMap) then + { + if (AddDeadPlayersToMap && (delayTime == 0 || changed)) then { + { + if(!(_x isKindOf "zZombie_base") && (_x isKindOf "Man") && !(_x in dList)) then { + + private ["_pos"]; + _pos = getPos _x; + deadMarker = createMarkerLocal [format ["DBP%1%2", _pos select 0, _pos select 1],[(_pos select 0) + 20, _pos select 1, 0]]; + deadMarker setMarkerTypeLocal DeadPlayersMarkerType; + deadMarker setMarkerSizeLocal DeadPlayersMarkerSize; + deadMarker setMarkerColorLocal DeadPlayerMarkerColor; + deadMarker setMarkerTextLocal format["%1", _x getVariable["bodyName","unknown"]]; + deadMarker setMarkerPosLocal ([(getPosATL _x select 0) + 15, getPosATL _x select 1, 0]); + dList set [count dList, _x]; + dListMarkers set [count dListMarkers, deadMarker]; + }; + }Foreach AllDead; + }; + + If (AddZombieToMap && (delayTime == 0 || changed)) then { + _pos = getPos player; + _zombies = _pos nearEntities ["zZombie_Base",ZombieVisibleDistance]; + k=0; + { + deleteMarkerLocal ("zmMarker"+ (str k)); + k=k+1; + }forEach markers; + + k=0; + { + _text = format ["zmMarker%1", k]; + markers set [k, _text]; + + if(alive _x) then + { + pos = position _x; + deleteMarkerLocal ("zmMarker"+ (str k)); + MarkerZm = "zmMarker" + (str k); + ParamsZm=[MarkerZm,pos]; + MarkerZm = createMarkerLocal ParamsZm; + MarkerZm setMarkerTypeLocal ZombieMarkerType; + MarkerZm setMarkerSizeLocal GlobalMarkerSize; + MarkerZm setMarkerPosLocal (pos); + MarkerZm setMarkerColorLocal(ZombieMarkerColor); + MarkerZm setMarkerTextLocal ZombieName; + k=k+1; + }; + + }forEach _zombies; + }; + + /* Old vehicle ESP + If (AddVehicleToMap) then + { + vehList = allmissionobjects "LandVehicle" + allmissionobjects "Air" + allmissionobjects "Boat"; + i = 0; + { + _name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName"); + pos = position _x; + deleteMarkerLocal ("vehMarker"+ (str i)); + MarkerVeh = "vehMarker" + (str i); + ParamsVeh=[MarkerVeh,pos]; + MarkerVeh = createMarkerLocal ParamsVeh; + MarkerVeh setMarkerTypeLocal VehicleMarkerType; + MarkerVeh setMarkerSizeLocal GlobalMarkerSize; + MarkerVeh setMarkerPosLocal (pos); + MarkerVeh setMarkerColorLocal(VehicleMarkerColor); + MarkerVeh setMarkerTextLocal format ["%1",_name]; + i=i+1; + } forEach vehList; + }; + */ + + if(AddUnlockedVehiclesToMap || AddLockedVehiclesToMap) then { + vehList = allmissionobjects "LandVehicle" + allmissionobjects "Air" + allmissionobjects "Boat"; + lockedVehList = []; + unlockedVehList = []; + + { + if(locked _x) then { + lockedVehList = lockedVehList + [_x]; + } else { + unlockedVehList = unlockedVehList + [_x]; + }; + } forEach vehList; + + If (AddUnlockedVehiclesToMap) then + { + i = 0; + { + _name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName"); + pos = position _x; + deleteMarkerLocal ("UvehMarker"+ (str i)); + MarkerUVeh = "UvehMarker" + (str i); + ParamsUVeh=[MarkerUVeh,pos]; + MarkerUVeh = createMarkerLocal ParamsUVeh; + MarkerUVeh setMarkerTypeLocal UnlockedVehicleMarkerType; + MarkerUVeh setMarkerSizeLocal GlobalMarkerSize; + MarkerUVeh setMarkerPosLocal (pos); + MarkerUVeh setMarkerColorLocal(UnlockedVehicleMarkerColor); + MarkerUVeh setMarkerTextLocal format ["%1",_name]; + i=i+1; + } forEach unlockedVehList; + }; + + if (AddLockedVehiclesToMap) then + { + i4 = 0; + { + _name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName"); + pos = position _x; + deleteMarkerLocal ("LvehMarker"+ (str i4)); + MarkerLVeh = "LvehMarker" + (str i4); + ParamsLVeh=[MarkerLVeh,pos]; + MarkerLVeh = createMarkerLocal ParamsLVeh; + MarkerLVeh setMarkerTypeLocal LockedVehicleMarkerType; + MarkerLVeh setMarkerSizeLocal GlobalMarkerSize; + MarkerLVeh setMarkerPosLocal (pos); + MarkerLVeh setMarkerColorLocal(LockedVehicleMarkerColor); + MarkerLVeh setMarkerTextLocal format ["%1",_name]; + i4=i4+1; + } forEach lockedVehList; + }; + }; + + If(AddPlotPoleToMap && (delayTime == 0 || changed)) then + { + poleList = allMissionObjects "Plastic_Pole_EP1_DZ"; + i0 = 0; + { + _name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName"); + pos = position _x; + deleteMarkerLocal ("poleMarker"+ (str i0)); + MarkerPole = "poleMarker" + (str i0); + ParamsPole=[MarkerPole,pos]; + MarkerPole = createMarkerLocal ParamsPole; + MarkerPole setMarkerTypeLocal PlotPoleMarkerType; + MarkerPole setMarkerSizeLocal PlotPoleMarkerSize; + MarkerPole setMarkerPosLocal (pos); + MarkerPole setMarkerColorLocal(PlotPoleMarkerColor); + MarkerPole setMarkerTextLocal format ["%1",_name]; + i0=i0+1; + }forEach poleList; + }; + + If (AddStorageToMap && (delayTime == 0 || changed)) then + { + storageList = []; + { + storageList = storageList + allmissionobjects (_x); + } forEach storageObjects; + + i1 = 0; + { + _name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName"); + pos = position _x; + deleteMarkerLocal ("storageMarker"+ (str i1)); + MarkerStorage = "storageMarker" + (str i1); + ParamsStorage=[MarkerStorage,pos]; + MarkerStorage = createMarkerLocal ParamsStorage; + MarkerStorage setMarkerTypeLocal StorageMarkerType; + MarkerStorage setMarkerSizeLocal StorageMarkerSize; + MarkerStorage setMarkerPosLocal (pos); + MarkerStorage setMarkerColorLocal(StorageMarkerColor); + MarkerStorage setMarkerTextLocal format ["%1",_name]; + + i1=i1+1; + }forEach storageList; + }; + + If (AddCrashesToMap && (delayTime == 0 || changed)) then + { + crashList = allmissionobjects "CrashSite_RU" + allmissionobjects "CrashSite_US" + allmissionobjects "CrashSite_EU" + allmissionobjects "CrashSite_UN" + allmissionobjects "Misc_cargo_cont_net1" + allmissionobjects "Misc_cargo_cont_net2" + allmissionobjects "Misc_cargo_cont_net3" + allmissionobjects "Supply_Crate_DZE"; + i2 = 0; + { + _name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName"); + if (gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName") == "House") then {_name = "Crashsite"}; + pos = position _x; + deleteMarkerLocal ("crashMarker"+ (str i2)); + MarkerCrash = "crashMarker" + (str i2); + ParamsCrash=[MarkerCrash,pos]; + MarkerCrash = createMarkerLocal ParamsCrash; + MarkerCrash setMarkerTypeLocal CrashesMarkerType; + MarkerCrash setMarkerSizeLocal GlobalMarkerSize; + MarkerCrash setMarkerPosLocal (pos); + MarkerCrash setMarkerColorLocal(CrashesMarkerColor); + MarkerCrash setMarkerTextLocal format ["%1",_name]; + + i2=i2+1; + }forEach crashList; + }; + + If(AddBuildablesToMap && (delayTime == 0 || changed)) then + { + buildableObjectsList = []; + { + buildableObjectsList = buildableObjectsList + allmissionobjects (_x); + } forEach buildableObjects; + i3 = 0; + { + pos = position _x; + deleteMarkerLocal ("buildablesMarker" + (str i3)); + MarkerBuildables = "buildablesMarker" + (str i3); + ParamsBuildables=[MarkerBuildables,pos]; + MarkerBuildables = createMarkerLocal ParamsBuildables; + MarkerBuildables setMarkerTypeLocal BuildablesMarkerType; + MarkerBuildables setMarkerSizeLocal BuildablesMarkerSize; + MarkerBuildables setMarkerPosLocal (pos); + MarkerBuildables setMarkerColorLocal(BuildablesMarkerColor); + i3=i3+1; + }forEach buildableObjectsList; + }; + }; + + If (!AddDeadPlayersToMap && changed) then + { + { + deleteMarkerLocal _x; + }forEach dListMarkers; + dListMarkers = []; + }; + + If (!AddZombieToMap && changed) then + { + k=0; + { + deleteMarkerLocal ("zmMarker"+ (str k)); + k=k+1; + }forEach markers; + markers = []; + }; + + If (!AddUnlockedVehiclesToMap && changed) then + { + i=0; + { + deleteMarkerLocal ("UvehMarker"+ (str i)); + i=i+1; + }forEach unlockedVehList; + }; + + If (!AddLockedVehiclesToMap && changed) then + { + i4=0; + { + deleteMarkerLocal ("LvehMarker"+ (str i4)); + i4=i4+1; + }forEach lockedVehList; + }; + + If (!AddPlotPoleToMap && changed) then + { + i0=0; + { + deleteMarkerLocal ("poleMarker"+ (str i0)); + i0=i0+1; + }forEach poleList; + }; + + If (!AddStorageToMap && changed) then + { + i1=0; + { + deleteMarkerLocal ("storageMarker"+ (str i1)); + i1=i1+1; + }forEach storageList; + }; + + If (!AddCrashesToMap && changed) then + { + i2=0; + { + deleteMarkerLocal ("crashMarker"+ (str i2)); + i2=i2+1; + }forEach crashList; + }; + + If (!AddBuildablesToMap && changed) then + { + i3=0; + { + deleteMarkerLocal ("buildablesMarker"+ (str i3)); + i3=i3+1; + }forEach buildableObjectsList; + }; + + sleep GlobalSleep; + + // Makes sure items have correctly turned off + if(toggleCheck != 2 && changed) then { + toggleCheck = toggleCheck + 1; + if(toggleCheck == 2) then { + changed = false; + toggleCheck = 0; + }; + }; + + delayTime = delayTime + 1; + if(delayTime == 5) then { + delayTime = 0; + }; + + Sleep GlobalSleep; + + }; + + // When loop ends, end keybind and delete all markers + ["EndESP"] call EAT_Keybind; + + { + clearGroupIcons (group _x); + } forEach allUnits; + + If (AddDeadPlayersToMap) then + { + { + deleteMarkerLocal _x; + }Foreach dListMarkers; + }; + + If (AddZombieToMap) then + { + k=0; + { + deleteMarkerLocal ("zmMarker"+ (str k)); + k=k+1; + }forEach markers; + }; + + If (AddUnlockedVehiclesToMap) then + { + i=0; + { + deleteMarkerLocal ("UvehMarker"+ (str i)); + i=i+1; + }forEach unlockedVehList; + }; + + If (AddLockedVehiclesToMap) then + { + i4=0; + { + deleteMarkerLocal ("LvehMarker"+ (str i4)); + i4=i4+1; + }forEach lockedVehList; + }; + + If (AddPlotPoleToMap) then + { + i0=0; + { + deleteMarkerLocal ("poleMarker"+ (str i0)); + i0=i0+1; + }forEach poleList; + }; + + If (AddStorageToMap) then + { + i1=0; + { + deleteMarkerLocal ("storageMarker"+ (str i1)); + i1=i1+1; + }forEach storageList; + }; + + If (AddCrashesToMap) then + { + i2=0; + { + deleteMarkerLocal ("crashMarker"+ (str i2)); + i2=i2+1; + }forEach crashList; + }; + + If (AddBuildablesToMap) then + { + i3=0; + { + deleteMarkerLocal ("buildablesMarker"+ (str i3)); + i3=i3+1; + }forEach buildableObjectsList; + }; + }; +}; + +EAT_PlayerESP = { + setGroupIconsVisible [true, true]; + #define COLOR_GREEN [0,1,0,1] + #define COLOR_BLUE [0,0,1,1] + #define COLOR_WHITE [1, 1, 1, 1] + #define COLOR_ORANGE [1,0.3,0,1] + #define COLOR_RED [1,0,0,1] + + if (!("ItemGPS" in items player)) then {player addWeapon "ItemGPS";}; + + EATplayerESP = _this select 0; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has player ESP",name player,getPlayerUID player] call EAT_Logger;}; + + [] spawn { + private ["_color","_crew","_vehname","_i","_crewtotal"]; + _color = ""; + while {EATplayerESP} do + { + { + if (vehicle _x == _x) then { + clearGroupIcons group _x; + group _x addGroupIcon ["x_art"]; + + if ((side _x == side player) && (side player != resistance)) then { + _color = COLOR_RED; + } else { + _color = COLOR_ORANGE; + }; + group _x setGroupIconParams [_color, format ["[%1]-[%2m]",name _x,round(_x distance player)], 0.5, true]; + + } else { + clearGroupIcons group _x; + group _x addGroupIcon ["x_art"]; + + _vehname = (getText (configFile >> 'CfgVehicles' >> (typeof vehicle _x) >> 'displayName')); + + _crewtotal = (crew (vehicle _x)); + _crew = (name (crew (vehicle _x) select 0)); + _i = 1; + + { + if(_i != 1) then { + _crew = _crew + ", " + (name _x); + }; + + _i = _i + 1; + + } forEach _crewtotal; + + if ((side _x == side player) && (side player != resistance)) then { + _color = COLOR_BLUE; + } else { + _color = COLOR_RED; + }; + + group _x setGroupIconParams [_color, format ["[%2]-[%3%4%5%6%7%8%9%10%11]-[%1m]",round(_x distance player),_vehname,_crew], 0.5, true]; + + }; + } forEach playableUnits; + sleep 1; + }; + {clearGroupIcons group _x;} forEach playableUnits; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has DISABLED player ESP",name player,getPlayerUID player] call EAT_Logger;}; + }; +}; + +EAT_GodMode = { + /* + Heals all damage and makes the user invincible to damage by everything + excluding antihack killing a hacker. + */ + private["_player","_vehicle"]; + EATplayerGod = _this select 0; + _player = player; + + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has _player god mode",name _player,getPlayerUID _player] call EAT_Logger;}; + + fnc_usec_unconscious = {}; + _player removeAllEventHandlers "handleDamage"; + _player addEventHandler ["handleDamage", { false }]; + _player allowDamage false; + r_player_unconscious = false; + r_player_injured = false; + r_fracture_legs = false; + r_fracture_arms = false; + r_player_timeout = 0; + dayz_sourceBleeding = objNull; + disableUserInput false; + _player setVariable ["USEC_injured",false,true]; + {_player setVariable[_x,false,true];} forEach USEC_woundHit; + _player setVariable ["unconsciousTime", r_player_timeout, true]; + _player setHit ["body",0]; + _player setHit ["hands",0]; + _player setHit ["legs",0]; + _player setVariable['medForceUpdate',true,true]; + + [_player] spawn { + private "_player"; + _player = _this select 0; + + while {EATplayerGod} do { + dayz_hunger = 0; + dayz_thirst = 0; + dayz_temperatur = 36; + r_player_infected = false; + fnc_usec_damageHandler = {}; + player_zombieCheck = {}; + r_player_inpain = false; + r_player_blood = 11999; + uiSleep 0.3; + }; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has DISABLED _player god mode",name _player,getPlayerUID _player] call EAT_Logger;}; + + player_zombieCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieCheck.sqf"; + fnc_usec_damageHandler = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandler.sqf"; + fnc_usec_unconscious = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_unconscious.sqf"; + _player removeAllEventHandlers "handleDamage"; + _player addEventHandler ["handleDamage", {true}]; + }; +}; + +EAT_VehGod = { + /* + Air vehicles will explode if hit with a rocket or when crashing. + */ + EATvehicleGod = _this select 0; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has vehicle god mode",name player,getPlayerUID player] call EAT_Logger;}; + + [] spawn { + private "_vehicle"; + while{EATvehicleGod} do + { + + _vehicle = (vehicle player); + if (_vehicle != player) then { + _vehicle setFuel 1; + _vehicle setDamage 0; + }; + uiSleep 0.1; + }; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has DISABLED vehicle god mode",name player,getPlayerUID player] call EAT_Logger;}; + }; +}; + +EAT_InfiniteAmmo = { + + EATinfiniteAmmo = _this select 0; + + // Tool use logger + if (EAT_logMajorTool) then {format["%1 %2 -- has turned ON infinite ammo",name player,getPlayerUID player] call EAT_Logger;}; + + [] spawn { + while {EATinfiniteAmmo} do + { + vehicle player setVehicleAmmo 1; + vehicle player setUnitRecoilCoefficient 0; + uiSleep 0.1; + }; + vehicle player setUnitRecoilCoefficient 1; + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has turned OFF infinite ammo",name player,getPlayerUID player] call EAT_Logger;}; + }; +}; + +EAT_VehSpeedBoost = { + _isActive = _this select 0; + + if (_isActive) then { + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has added speed boost",name player,getPlayerUID player] call EAT_Logger;}; + + SPEED_UP =(findDisplay 46) displayAddEventHandler ["KeyDown","_this select 1 call MY_KEYDOWN_FNC;false;"]; + + MY_KEYDOWN_FNC = { + private["_vehicle","_nos","_supgrade"]; + _vehicle = vehicle player; + if (_vehicle == player) exitWith {}; + + _nos = _vehicle getVariable "nitro"; + _supgrade = _vehicle getVariable "supgrade"; + + if(isEngineOn _vehicle) then + { + switch (_this) do { + case 17: { + if(!isNil "_supgrade") then { + _vehicle SetVelocity [(velocity _vehicle select 0) * 1.011, (velocity _vehicle select 1) *1.011, (velocity _vehicle select 2) * 0.99]; + } else { + _vehicle setVariable ["supgrade", 1, true]; + }; + }; + case 42: { + if(!isNil "_nos") then { + _vehicle setVelocity [(velocity _vehicle select 0) * 1.01, (velocity _vehicle select 1) * 1.01, (velocity _vehicle select 2) * 0.99]; + } else { + _vehicle setVariable ["nitro", 1, true]; + }; + }; + }; + }; + }; + } else { + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has DISABLED speed boost",name player,getPlayerUID player] call EAT_Logger;}; + + (findDisplay 46) displayRemoveEventHandler ["KeyDown", SPEED_UP]; + }; +}; + +EAT_ZomShield = { + EAT_SheildMe = _this select 0; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has zombie shield",name player,getPlayerUID player] call EAT_Logger;}; + + [] spawn { + private["_pos","_zombies"]; + while {EAT_SheildMe} do + { + _pos = getPos player; + _zombies = _pos nearEntities ["zZombie_Base",30]; + { + deleteVehicle _x; + } forEach _zombies; + }; + + // Tool use logger + if(EAT_logMinorTool) then {format["%1 %2 -- has disabled zombie shield",name player,getPlayerUID player] call EAT_Logger;}; + }; +}; + +EAT_TeleportToggle = { + private ["_done","_location","_locOK","_pos","_worked"]; + if (!("ItemGPS" in items player)) then {player addWeapon "ItemGPS";}; + _done = false; + _locOK = true; + _worked = false; + + EAT_teleport = { + _pos = [_this select 0, _this select 1,_this select 2]; + + if ((vehicle player) isKindOf "Air" && isEngineOn (vehicle player) && (speed (vehicle player)) > 20) then{ + (vehicle player) setpos [_pos select 0, _pos select 1, 1000]; + player setVariable["lastPos",0, true]; + _worked = true; + } else { + if ((vehicle player) != player && !((vehicle player) isKindOf "Ship")) then { + _location = [_pos select 0, _pos select 1] findEmptyPosition [0,10]; + if (count _location < 1) then { + "Unable to teleport here." call dayz_rollingMessages; + } else { + (vehicle player) setpos _location; + _worked = true; + }; + } else { + (vehicle player) setpos [_pos select 0, _pos select 1, 0]; + _worked = true; + }; + }; + + openMap [false, false]; + TitleText [format[""], "PLAIN DOWN"]; + _done = true; + + // Tool use logger + if(_worked) then { + if(EAT_logMajorTool) then {format["%1 %2 -- has teleported",name player,getPlayerUID player] call EAT_Logger;}; + }; + }; + + closeDialog 0; + uiSleep 0.5; + "Click on the map to Teleport" call dayz_rollingMessages; + + if(!(visibleMap)) then { + openMap [true, false]; + }; + + onMapSingleClick '[_pos select 0, _pos select 1, _pos select 2] call EAT_teleport'; + waitUntil{_done || !(visibleMap)}; + onMapSingleClick ""; +}; + +EAT_TpToPlayer = { + private["_max","_j","_menuCheckOk"]; + _menuCheckOk = false; _max = 10; _j = 0; + snext = false; plist = []; pselect5 = ""; + + {if ((_x != player) && (getPlayerUID _x != "")) then {plist set [count plist, name _x];};} forEach entities "CAManBase"; + {if ((count crew _x) > 0) then {{if ((_x != player) && (getPlayerUID _x != "")) then {plist set [count plist, name _x];};} forEach crew _x;};} foreach (entities "LandVehicle" + entities "Air" + entities "Ship"); + + EAT_pMenuTitle = "Teleport to Player:"; + + while {pselect5 == "" && !_menuCheckOk} do + { + [_j, (_j + _max) min (count plist)] call EAT_fnc_playerSelect; _j = _j + _max; + WaitUntil {pselect5 != "" || snext || commandingMenu == ""}; + _menuCheckOk = (commandingMenu == ""); + snext = false; + }; + + if (pselect5 != "exit" && pselect5 != "") then + { + _name = pselect5; + + { + scopeName "fn_tpToPlayer"; + if(name _x == _name) then { + format["Teleporting to %1", _name] call dayz_rollingMessages; + (vehicle player) attachTo [_x, [2, 2, 0]]; + uiSleep 0.25; + detach (vehicle player); + + // Tool use logger + if(EAT_logMajorTool) then {format["%1 %2 -- has teleported to %3_%4",name player,getPlayerUID player,_name,_x] call EAT_Logger;}; + breakOut "fn_tpToPlayer"; + }; + } forEach entities "CAManBase"; + }; +}; + + + +// Toggles Individual Functions on and off +EAT_ScriptToggle = { + local _toggle = _this select 0; + local _function = _this select 1; + _toggle = !_toggle; + [_toggle] call _function; + _toggle +}; + +// Sends function usage info to server for logging +EAT_Logger = { + EAT_PVEH_usageLogger = _this; + publicVariableServer "EAT_PVEH_usageLogger"; +}; + +// Turns default admin mode functions on. EAT_AdminMode = true +EAT_AdminToggleOn = { + if (EAT_fastWalk) then {[EAT_AdminMode] call EAT_FastForwardToggle;}; + if (EAT_fastUp) then {[EAT_AdminMode] call EAT_FastUpToggle;}; + if (EAT_speedBoost) then {[EAT_AdminMode] call EAT_VehSpeedBoost;}; + if (EAT_enhancedESPMode) then {[EAT_AdminMode] call EAT_EnhancedESP;}; + if (EAT_playerESPMode) then {[EAT_AdminMode] call EAT_PlayerESP;}; + if (EAT_invisibility) then {[EAT_AdminMode] call EAT_AdminInvisible;}; + if (EAT_infAmmo) then {[EAT_AdminMode] call EAT_InfiniteAmmo;}; + if (EAT_flyingMode) then {[EAT_AdminMode] call EAT_Flying;}; + if (EAT_playerGod) then {[EAT_AdminMode] call EAT_GodMode;}; + if (EAT_vehicleGod) then {[EAT_AdminMode] call EAT_VehGod;}; + if (EAT_ZombieShield) then {[EAT_AdminMode] call EAT_ZomShield;}; + if (EAT_grassOff) then {[EAT_AdminMode] call EAT_GrassOffToggle;}; + if (EAT_adminBuildMode) then {[EAT_AdminMode] call EAT_adminBuildCount;}; +}; + +// Turns default admin mode functions off if they are on. EAT_AdminMode = false +// Scripts that run on a loop to do not need to be run again. The control variable just needs to be set to false for the script to stop +EAT_AdminToggleOff = { + if (EAT_fastWalk) then {[EAT_AdminMode] call EAT_FastForwardToggle;}; + if (EAT_fastUp) then {[EAT_AdminMode] call EAT_FastUpToggle;}; + if (EAT_speedBoost) then {[EAT_AdminMode] call EAT_VehSpeedBoost;}; + if (EAT_enhancedESPMode) then {EATenhancedESP = false;}; + if (EAT_playerESPMode) then {EATplayerESP = false;}; + if (EAT_invisibility) then {[EAT_AdminMode] call EAT_AdminInvisible;}; + if (EAT_infAmmo) then {EATinfiniteAmmo = false;}; + if (EAT_flyingMode) then {EATflying = false;}; + if (EAT_playerGod) then {EATplayerGod = false;}; + if (EAT_vehicleGod) then {EATvehicleGod = false;}; + if (EAT_ZombieShield) then {EAT_SheildMe = false;}; + if (EAT_grassOff) then {[EAT_AdminMode] call EAT_GrassOffToggle;}; + if (EAT_adminBuildMode) then {[EAT_AdminMode] call EAT_adminBuildCount;}; +}; + +// ESP has its own functions because one turns the other off +EAT_playerESPToggle = { + EAT_playerESPMode = !EAT_playerESPMode; + if(EAT_playerESPMode && EAT_enhancedESPMode) then {EAT_enhancedESPMode = false; EATenhancedESP = false;}; + if (EAT_playerESPMode) then {[EAT_playerESPMode] call EAT_PlayerESP;} else {EATplayerESP = false;}; +}; +EAT_enhancedESPToggle = { + EAT_enhancedESPMode = !EAT_enhancedESPMode; + if(EAT_playerESPMode && EAT_enhancedESPMode) then {EAT_playerESPMode = false; EATplayerESP = false;}; + if (EAT_enhancedESPMode) then {[EAT_enhancedESPMode] call EAT_EnhancedESP;} else {EATenhancedESP = false;}; +}; + +// Build unidimensional array of modular building items +EAT_buildUniArray = [EAT_buildModular] call myfnc_MDarray; + +// This last section compiles all of the vehicles used in the vehicle spawner into arrays so there is no delay when loading the graphical menu. +// Do not alter this code. +EAT_allVehList = []; +EAT_allEpochVehList = []; +local _filter = ["SUV_TK_CIV_EP1","SUV_TK_EP1","SUV_UN_EP1","SUV_PMC","ArmoredSUV_PMC","SUV_PMC_BAF"]; +local _cfgvehicles = configFile >> "cfgVehicles"; +local _vehicle = objNull; +local _image = ""; +local _text = ""; +local _type = ""; + +for "_i" from 0 to ((count _cfgvehicles) - 1) do { + _vehicle = _cfgvehicles select _i; + if (isClass _vehicle) then { + _type = configName(_vehicle); + if ((getNumber(_vehicle >> "scope") == 2) && {getText (_vehicle >> "picture") != ""} && {_type isKindOf "AllVehicles"} && {!(["Parachute",_type] call fnc_inString)} && {!(_type isKindOf "CAManBase")}) then { + _text = getText(configFile >> "cfgVehicles" >> _type >> "displayName"); + _image = (getText (configFile >> "CfgVehicles" >> _type >> "picture")); + EAT_allVehList set [count EAT_allVehList,[_type, _text, _image]]; + if (["_DZ",_type] call fnc_inString || {["SUV_",_type] call fnc_inString} || {["JetSki",_type] call fnc_inString}) then { + if !(_type in _filter) then { + EAT_allEpochVehList set [count EAT_allEpochVehList,[_type, _text, _image]]; + }; + }; + }; + }; +}; + +diag_log "Admin Tools: Common Functions Loaded"; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/SuperAdmin/main.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/SuperAdmin/main.sqf new file mode 100755 index 0000000..33e24ea --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/SuperAdmin/main.sqf @@ -0,0 +1,310 @@ +EAT_ToolsMain = { + private["_EXECdate","_EXECcloud","_EXECfog"]; + + _EXECdate = 'EAT_clientToServer = ["Date",player,[%1,%2],dayz_authKey]; publicVariableServer "EAT_clientToServer"'; + _EXECcloud = 'EAT_clientToServer = ["Cloud",player,[%1,5],dayz_authKey]; publicVariableServer "EAT_clientToServer"'; + _EXECfog = 'EAT_clientToServer = ["Fog",player,[%1,5],dayz_authKey]; publicVariableServer "EAT_clientToServer"'; + + + // Main menu + if(isNil "EAT_mainMenu") then { + EAT_mainMenu = [["",true],["-- Epoch Admin Tools (Level: Admin) --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_mainMenu = EAT_mainMenu + [["Admin Menu >>", [], "#USER:EAT_adminMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_mainMenu = EAT_mainMenu + [["Vehicle Menu >>",[],"#USER:EAT_vehicleMenu",-5,[["expression",""]],"1","1"]]; + EAT_mainMenu = EAT_mainMenu + [["Crate Menu >>",[],"#USER:EAT_crateMenu",-5,[["expression",""]],"1","1"]]; + EAT_mainMenu = EAT_mainMenu + [["Epoch Menu >>", [], "#USER:EAT_epochMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_mainMenu = EAT_mainMenu + [["Weapon/Item Kits >>", [], "#USER:EAT_weaponMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_mainMenu = EAT_mainMenu + [["Teleport Menu >>",[],"#USER:EAT_teleportMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_mainMenu = EAT_mainMenu + [["Skin Change Menu >>", [], "#USER:EAT_skinMenu", -5, [["expression", ""]], "1", "1"]]; + if(EAT_wtChanger)then{EAT_mainMenu = EAT_mainMenu + [["Weather/Time Menu >>", [], "#USER:EAT_weatherTimeMenu", -5, [["expression", ""]], "1", "1"]];}; + EAT_mainMenu = EAT_mainMenu + [["", [], "", -5, [["expression", ""]], "1", "0"], ["Exit", [20], "", -5, [["expression", ""]], "1", "1"]]; + + // Admin only menu + EAT_adminMenu = [["",true]]; + EAT_adminMenu = EAT_adminMenu + [["-- Administrator's Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_adminMenu = EAT_adminMenu + [["Admin Mode (F4 for options)",[],"", -5,[["expression","[] spawn EAT_AdminModeToggle;"]],"1","1"]]; + EAT_adminMenu = EAT_adminMenu + [["Point to Repair",[],"", -5,[["expression","call EAT_Repair;"]], "1", "1"]]; + EAT_adminMenu = EAT_adminMenu + [["Point to Delete",[],"", -5,[["expression","[] spawn EAT_DeleteObj;"]],"1","1"]]; + EAT_adminMenu = EAT_adminMenu + [["Spectate player (F6 to cancel)",[],"", -5,[["expression","[] spawn EAT_Spectate;"]], "1", "1"]]; + EAT_adminMenu = EAT_adminMenu + [["Zombie Spawner", [], "", -5, [["expression","[] spawn EAT_SpawnZombie;"]], "1", "1"]]; + EAT_adminMenu = EAT_adminMenu + [["AI spawner", [], "", -5, [["expression","[] spawn EAT_AISpawn;"]], "1", "1"]]; + EAT_adminMenu = EAT_adminMenu + [["Heal Players",[],"", -5, [["expression","[] spawn EAT_HealPlayer;"]], "1", "1"]]; + EAT_adminMenu = EAT_adminMenu + [["Send Server Message",[],"", -5,[["expression","[] spawn EAT_SendMessage;"]],"1","1"]]; + EAT_adminMenu = EAT_adminMenu + [["Humanity Menu >>",[],"#USER:EAT_humanityMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_adminMenu = EAT_adminMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_adminMenu = EAT_adminMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Main vehicle selection menu + EAT_vehicleMenu = [["",true]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["-- Vehicle Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["Graphical Vehicle Menu", [],"", -5, [["expression", "[] spawn EAT_AddVehDialog;"]], "1", "1"]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["Eject Players", [],"", -5, [["expression", "call EAT_Eject;"]], "1", "1"]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["Vehicle Tools >>", [], "#USER:EAT_vehicleTools", -5, [["expression", ""]], "1", "1"]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_vehicleMenu = EAT_vehicleMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Different tools for working with vehicles + EAT_vehicleTools = [["",true]]; + EAT_vehicleTools = EAT_vehicleTools + [["-- Vehicle Tools --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Vehicle Locater",[],"",-5,[["expression", "call EAT_locateVeh;"]], "1", "1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Recover Vehicle Key",[],"",-5,[["expression", "call EAT_RecoverKey;"]], "1", "1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Point to Repair", [],"", -5, [["expression", "call EAT_Repair;"]], "1", "1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Point to Delete",[],"",-5,[["expression","[] spawn EAT_DeleteObj;"]],"1","1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Flip Vehicle", [],"", -5, [["expression", "call EAT_flipVeh;"]], "1", "1"]]; + EAT_vehicleTools = EAT_vehicleTools + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_vehicleTools = EAT_vehicleTools + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + //Main menu to handle humanity changing + EAT_humanityMenu = [["",true]]; + EAT_humanityMenu = EAT_humanityMenu + [["-- Humanity Change Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_humanityMenu = EAT_humanityMenu + [["Add to self or target", [],"", -5, [["expression", '["add"] spawn EAT_Humanity;']], "1", "1"]]; + EAT_humanityMenu = EAT_humanityMenu + [["Remove from self or target", [],"", -5, [["expression", '["remove"] spawn EAT_Humanity;']], "1", "1"]]; + EAT_humanityMenu = EAT_humanityMenu + [["Reset to 2500", [],"", -5, [["expression", '["reset"] spawn EAT_Humanity;']], "1", "1"]]; + EAT_humanityMenu = EAT_humanityMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_humanityMenu = EAT_humanityMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Menu for teleport options + // teleport to place Example: ["Name",[],"", -5, [["expression", '[x,y,z] execVM "admintools\tools\Teleport\teleportToLocation.sqf"']], "1", "1"]]; + EAT_teleportMenu = [["",true]]; + EAT_teleportMenu = EAT_teleportMenu + [["-- Teleport Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_teleportMenu = EAT_teleportMenu + [["Teleport (T Key)",[],"", -5,[["expression", "[] spawn EAT_TeleportToggle;"]], "1", "1"]]; + // EAT_teleportMenu = EAT_teleportMenu + [["Teleport To Me",[],"", -5, [["expression", "[] spawn EAT_TPtoMe;"]], "1", "1"]]; + EAT_teleportMenu = EAT_teleportMenu + [["Teleport To Player",[],"", -5, [["expression", "[] spawn EAT_TpToPlayer;"]], "1", "1"]]; + // EAT_teleportMenu = EAT_teleportMenu + [["Return Player to Last Pos",[],"", -5, [["expression", "[] spawn EAT_ReturnPlayerTP;"]], "1", "1"]]; + EAT_teleportMenu = EAT_teleportMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_teleportMenu = EAT_teleportMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Menu for changing skins. + // Entry Format:["Entry Name",[],"",-5,[["expression",'["Skin_class_name"] execVM "admintools\tools\skinChanger.sqf"']],"1","1"]]; + EAT_skinMenu = [["",true]]; + EAT_skinMenu = EAT_skinMenu + [["-- Skin Menu (Page 1)", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_skinMenu = EAT_skinMenu + [["Survivor",[],"",-5,[["expression",'["Survivor2_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Hero",[],"",-5,[["expression",'["Survivor3_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Bandit",[],"",-5,[["expression",'["Bandit1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Soldier",[],"",-5,[["expression",'["Soldier1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Ghillie",[],"",-5,[["expression",'["Sniper1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Special Forces",[],"",-5,[["expression",'["CZ_Special_Forces_GL_DES_EP1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["Apocalyptic Rifleman",[],"",-5,[["expression",'["Apo_Rifleman_03_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu = EAT_skinMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_skinMenu = EAT_skinMenu + [["Next page >", [], "#USER:EAT_skinMenu2", -5, [["expression", ""]], "1", "1"]]; + + // Menu2 for changing skins. + EAT_skinMenu2 = [["",true]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["-- Skin Menu (Page 2)", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Camo",[],"",-5,[["expression",'["Camo1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Stalker",[],"",-5,[["expression",'["gsc_eco_stalker_mask_neutralW_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Officer",[],"",-5,[["expression",'["Rocket_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Alejandria",[],"",-5,[["expression",'["SurvivorWcombat_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Savannah",[],"",-5,[["expression",'["SurvivorWdesert_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Melly",[],"",-5,[["expression",'["SurvivorWpink_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Bandit Jane",[],"",-5,[["expression",'["BanditW2_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["Invisible",[],"",-5,[["expression",'["Survivor1_DZ"] spawn EAT_SkinChanger;']],"1","1"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_skinMenu2 = EAT_skinMenu2 + [["< Back", [], "#USER:EAT_skinMenu", -5, [["expression", ""]], "1", "1"]]; + + // Weapon menu select + EAT_weaponMenu = [["",true]]; + EAT_weaponMenu = EAT_weaponMenu + [["-- Weapons Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Admin/Mod Loadouts >>",[],"#USER:EAT_adminLoadoutsMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Primary Weapons Menu >>",[],"#USER:EAT_primaryWeaponMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Secondary Weapons Menu >>",[],"#USER:EAT_secondaryWeaponMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Gear/Items Menu >>",[],"#USER:EAT_gearMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Delete all gear", [],"", -5, [["expression","call EAT_RemoveGear;"]], "1", "1"]]; + EAT_weaponMenu = EAT_weaponMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_weaponMenu = EAT_weaponMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Main weapons like the M4 + // Entry Format:["Name", [],"", -5, [["expression", format[_EXECweapons,"Gun_Calss_Name","Ammo_Class_Name","Explosive_Round_Class_Name"]]], "1", "1"]]; + // If there is no explosive 203 round then put "nil" in place of "Explosive_Round_Class_Name" + EAT_primaryWeaponMenu = [["",true]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["-- Primary Weapons --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["P90 Holo SD", [],"", -5, [["expression",'["P90_Holo_SD_DZ","50Rnd_57x28_P90SD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["Blue SteyrAug A3 Holo GL", [],"", -5, [["expression",'["SteyrAug_A3_Holo_GL_Blue_DZ","30Rnd_556x45_Aug","1Rnd_HE_M203"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["MK14 Sniper SD", [],"", -5, [["expression",'["MK14_Sniper_SD_DZ","20Rnd_762x51_DMRSD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["CheyTac SD", [],"", -5, [["expression",'["M200_CheyTac_SD_DZ","5Rnd_408_CheyTac_SD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["FN FAL", [],"", -5, [["expression",'["FNFAL_CCO_DZ","20Rnd_762x51_FNFAL"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["Mk 48", [],"", -5, [["expression",'["Mk48_CCO_DZ","100Rnd_762x51_M240"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["DMR_DZ", [],"", -5, [["expression",'["DMR_DZ","20Rnd_762x51_DMR"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["AS50", [],"", -5, [["expression",'["BAF_AS50_scoped","5Rnd_127x99_AS50"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [[".338 LAPUA", [],"", -5, [["expression",'["L115A3_2_DZ","5Rnd_86x70_L115A1"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["Anzio 20", [],"", -5, [["expression",'["Anzio_20_DZ","3rnd_Anzio_20x102mm"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_primaryWeaponMenu = EAT_primaryWeaponMenu + [["Secondary Weapons", [], "#USER:EAT_secondaryWeaponMenu", -5, [["expression", ""]], "1", "1"]]; + + // Sidearm weapons like the Makarov + EAT_secondaryWeaponMenu = [["",true]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["-- Secondary Weapons --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["PDW SD", [],"", -5, [["expression",'["UZI_SD_EP1","30Rnd_9x19_UZI_SD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["Desert Eagle", [],"", -5, [["expression",'["DesertEagle_DZ","7Rnd_50AE_Deagle"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["Colt Anaconda", [],"", -5, [["expression",'["Colt_Anaconda_DZ","6Rnd_44Magnum"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["M9 SD Camo", [],"", -5, [["expression",'["M9_Camo_SD_DZ","15Rnd_9x19_M9SD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["CZ 75 Phantom SD", [],"", -5, [["expression",'["CZ75SP_SD_DZ","18Rnd_9x19_PhantomSD"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["Silver P99 SD", [],"", -5, [["expression",'["P99_Silver_SD_DZ","15Rnd_10x22_p99_sd"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["Beretta 93R", [],"", -5, [["expression",'["M93R_DZ","20Rnd_9x19_M93R"] call EAT_AddWeapon;']], "1", "1"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_secondaryWeaponMenu = EAT_secondaryWeaponMenu + [["Gear/Items", [], "#USER:EAT_gearMenu", -5, [["expression", ""]], "1", "1"]]; + + // Menu for spawning items to the admin like bags and tools + EAT_gearMenu = [["",true]]; + EAT_gearMenu = EAT_gearMenu + [["-- Gear Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_gearMenu = EAT_gearMenu + [["ToolBelt gear", [],"", -5, [["expression","call EAT_AddTools;"]], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["Medical gear", [],"", -5, [["expression","call EAT_AddMeds;"]], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["Alice Pack", [],"", -5, [["expression",'["ALICE_Pack_DZE2"] call EAT_AddBackPack;']], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["Coyote Pack", [],"", -5, [["expression",'["CoyoteBackpack_DZE2"] call EAT_AddBackPack;']], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["Large Gun Bag", [],"", -5, [["expression",'["LargeGunBag_DZE2"] call EAT_AddBackPack;']], "1", "1"]]; + EAT_gearMenu = EAT_gearMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_gearMenu = EAT_gearMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Main crate menu + EAT_crateMenu = [["",true]]; + EAT_crateMenu = EAT_crateMenu + [["-- Crate Menu --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_crateMenu = EAT_crateMenu + [["Crate Menu >>",[],"#USER:EAT_crateMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_crateMenu = EAT_crateMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_crateMenu = EAT_crateMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // This menu selects a crate type to send to the server to spawn + // Entry Format: ["name",[],"",-5,[["expression",format[_EXECcrates,"cratetype"]]],"1","1"]]; + EAT_crateMenu = [["",true]]; + EAT_crateMenu = EAT_crateMenu + [["-- Crates --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_crateMenu = EAT_crateMenu + [["Epoch Weapons Crate",[],"",-5,[["expression",'["EpochWeapons"] spawn EAT_SpawnCrate;']],"1","1"]]; + if(EAT_isOverpoch)then{EAT_crateMenu = EAT_crateMenu + [["Overwatch Weapons Crate",[],"",-5,[["expression",'["OverwatchWeapons"] spawn EAT_SpawnCrate;']],"1","1"]];}; + EAT_crateMenu = EAT_crateMenu + [["Items Crate",[],"",-5,[["expression",'["Items"] spawn EAT_SpawnCrate;']],"1","1"]]; + EAT_crateMenu = EAT_crateMenu + [["Building Crate Menu >>",[],"#USER:EAT_BuildingCrateMenu", -5, [["expression", ""]], "1", "1"]]; + EAT_crateMenu = EAT_crateMenu + [["All Backpacks",[],"",-5,[["expression",'["Backpack"] spawn EAT_SpawnCrate;']],"1","1"]]; + EAT_crateMenu = EAT_crateMenu + [["Rocket Launchers",[],"",-5,[["expression",'["RocketLaunchers"] spawn EAT_SpawnCrate;']],"1","1"]]; + EAT_crateMenu = EAT_crateMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_crateMenu = EAT_crateMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + EAT_BuildingCrateMenu = + [ + ["",true], + ["-- Building Crate Menu --", [], "", -5, [["expression", ""]], "1", "0"], + ["Admin Building Kit",[],"",-5,[["expression",'["AllItemsBuilding"] spawn EAT_SpawnCrate;']],"1","1"], + ["Small Cinder Kit",[],"",-5,[["expression",'["smallCinderBuildingKit"] spawn EAT_SpawnCrate;']],"1","1"], + ["Medium Cinder Kit",[],"",-5,[["expression",'["mediumCinderBuildingKit"] spawn EAT_SpawnCrate;']],"1","1"], + ["Large Cinder Kit",[],"",-5,[["expression",'["largeCinderBuildingKit"] spawn EAT_SpawnCrate;']],"1","1"], + ["Small Wood Kit",[],"",-5,[["expression",'["smallWoodBuildingKit"] spawn EAT_SpawnCrate;']],"1","1"], + ["Medium Wood Kit",[],"",-5,[["expression",'["mediumWoodBuildingKit"] spawn EAT_SpawnCrate;']],"1","1"], + ["Large Wood Kit",[],"",-5,[["expression",'["largeWoodBuildingKit"] spawn EAT_SpawnCrate;']],"1","1"], + ["Vanilla Build Kit",[],"",-5,[["expression",'["VanillaBuildKit"] spawn EAT_SpawnCrate;']],"1","1"], + ["", [], "", -5, [["expression", ""]], "1", "0"], + ["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"] + ]; + + EAT_adminLoadoutsMenu = + [ + ["",true], + ["-- Admin Loadout Menu --", [], "", -5, [["expression", ""]], "1", "0"], + ["P90 Holo SD",[],"",-5,[["expression", "['P90_Holo_SD_DZ','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["Blue SteyrAug A3 Holo GL",[],"",-5,[["expression", "['SteyrAug_A3_Holo_GL_Blue_DZ','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["DMR",[],"",-5,[["expression", "['DMR_DZ','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["MK14 Sniper SD",[],"",-5,[["expression", "['MK14_Sniper_SD_DZ','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["Mk48 CCO",[],"",-5,[["expression", "['Mk48_CCO_DZ','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["CheyTac SD",[],"",-5,[["expression", "['M200_CheyTac_SD_DZ','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["AS50",[],"",-5,[["expression", "['BAF_AS50_scoped_DZ','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["FN FAL CCO",[],"",-5,[["expression", "['FNFAL_CCO_DZ','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["Anzio 20",[],"",-5,[["expression", "['Anzio_20_DZ','M9_Camo_SD_DZ'] call EAT_Loadouts;"]],"1","1"], + ["", [], "", -5, [["expression", ""]], "1", "0"], + ["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"] + ]; + + // Menu for changing time and weather + EAT_weatherTimeMenu = [["",true]]; + EAT_weatherTimeMenu = EAT_weatherTimeMenu + [["-- Weather/Time Menu --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_weatherTimeMenu = EAT_weatherTimeMenu + [["Day Menu >>",[],"#USER:EAT_dayMenu",-5,[["expression",""]], "1", "1"]]; + EAT_weatherTimeMenu = EAT_weatherTimeMenu + [["Full-Moon Nights Menu >>",[],"#USER:EAT_fullMoonNight",-5,[["expression",""]], "1", "1"]]; + EAT_weatherTimeMenu = EAT_weatherTimeMenu + [["No-Moon Nights Menu >>",[],"#USER:EAT_noMoonNight",-5,[["expression",""]], "1", "1"]]; + EAT_weatherTimeMenu = EAT_weatherTimeMenu + [["Weather Menu >>",[],"#USER:EAT_weatherMenu",-5,[["expression",""]], "1", "1"]]; + EAT_weatherTimeMenu = EAT_weatherTimeMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_weatherTimeMenu = EAT_weatherTimeMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Dark nights + EAT_noMoonNight = [["",true]]; + EAT_noMoonNight = EAT_noMoonNight + [["-- No moon night --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_noMoonNight = EAT_noMoonNight + [["8pm",[],"",-5,[["expression",format[_EXECdate,19, 20]]],"1","1"]]; + EAT_noMoonNight = EAT_noMoonNight + [["10pm",[],"",-5,[["expression",format[_EXECdate,19, 22]]],"1","1"]]; + EAT_noMoonNight = EAT_noMoonNight + [["Midnight",[],"",-5,[["expression",format[_EXECdate,19, 0]]],"1","1"]]; + EAT_noMoonNight = EAT_noMoonNight + [["2am",[],"",-5,[["expression",format[_EXECdate,19, 2]]],"1","1"]]; + EAT_noMoonNight = EAT_noMoonNight + [["4am",[],"",-5,[["expression",format[_EXECdate,19, 4]]],"1","1"]]; + EAT_noMoonNight = EAT_noMoonNight + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_noMoonNight = EAT_noMoonNight + [["< Back", [], "#USER:EAT_weatherTimeMenu", -5, [["expression", ""]], "1", "1"]]; + + // Normal nights + EAT_fullMoonNight = [["",true]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["-- Full moon night --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["8pm",[],"",-5,[["expression",format[_EXECdate,4,20]]],"1","1"]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["10pm",[],"",-5,[["expression",format[_EXECdate,4,22]]],"1","1"]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["Midnight",[],"",-5,[["expression",format[_EXECdate,4,4]]],"1","1"]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["2am",[],"",-5,[["expression",format[_EXECdate,4,2]]],"1","1"]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["4am",[],"",-5,[["expression",format[_EXECdate,4,4]]],"1","1"]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_fullMoonNight = EAT_fullMoonNight + [["< Back", [], "#USER:EAT_weatherTimeMenu", -5, [["expression", ""]], "1", "1"]]; + + // Day time + EAT_dayMenu = [["",true]]; + EAT_dayMenu = EAT_dayMenu + [["-- Set Day Time --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_dayMenu = EAT_dayMenu + [["5am",[],"",-5,[["expression",format[_EXECdate,4,5]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["7am",[],"",-5,[["expression",format[_EXECdate,4,7]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["9am",[],"",-5,[["expression",format[_EXECdate,4,9]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["11am",[],"",-5,[["expression",format[_EXECdate,6,4,11]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["Noon",[],"",-5,[["expression",format[_EXECdate,4,12]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["1pm",[],"",-5,[["expression",format[_EXECdate,4,13]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["3pm",[],"",-5,[["expression",format[_EXECdate,4,15]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["5pm",[],"",-5,[["expression",format[_EXECdate,4,17]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["7pm",[],"",-5,[["expression",format[_EXECdate,4,19]]],"1","1"]]; + EAT_dayMenu = EAT_dayMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_dayMenu = EAT_dayMenu + [["< Back", [], "#USER:EAT_weatherTimeMenu", -5, [["expression", ""]], "1", "1"]]; + + // Weather change menu + EAT_weatherMenu = [["",true]]; + EAT_weatherMenu = EAT_weatherMenu + [["-- Set Weather --",[],"",-5,[["expression",""]],"1","0"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Clear Sky",[],"",-5,[["expression",format[_EXECcloud,0]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Slightly Cloudy",[],"",-5,[["expression",format[_EXECcloud,0.25]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Cloudy",[],"",-5,[["expression",format[_EXECcloud,0.5]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Very Cloudy",[],"",-5,[["expression",format[_EXECcloud,0.75]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Overcast",[],"",-5,[["expression",format[_EXECcloud,1]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_weatherMenu = EAT_weatherMenu + [["-- Set Fog --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Off",[],"",-5,[["expression",format[_EXECfog,0]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Thin",[],"",-5,[["expression",format[_EXECfog,0.25]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Medium",[],"",-5,[["expression",format[_EXECfog,0.5]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Thick",[],"",-5,[["expression",format[_EXECfog,0.75]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["Maximum",[],"",-5,[["expression",format[_EXECfog,1]]],"1","1"]]; + EAT_weatherMenu = EAT_weatherMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_weatherMenu = EAT_weatherMenu + [["< Back", [], "#USER:EAT_weatherTimeMenu", -5, [["expression", ""]], "1", "1"]]; + + // Menu that deals with epoch specific items like locks and safes + EAT_epochMenu = [["",true]]; + EAT_epochMenu = EAT_epochMenu + [["-- Epoch Only Menu --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_epochMenu = EAT_epochMenu + [["Admin Build Menu >> ",[],"#USER:EAT_buildMenu", -5,[["expression",""]],"1","1"]]; + EAT_epochMenu = EAT_epochMenu + [["Base Manager Menu >>", [], "", -5, [["expression","[] spawn EAT_BaseManager;"]], "1", "1"]]; + EAT_epochMenu = EAT_epochMenu + [["Cursor Target Menu >>",[],"#USER:EAT_pointMenu", -5,[["expression",""]],"1","1"]]; + EAT_epochMenu = EAT_epochMenu + [["Get current position",[],"",-5,[["expression","[player] call EAT_GetPosition;"]],"1","1"]]; + EAT_epochMenu = EAT_epochMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_epochMenu = EAT_epochMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Menu that deals with cursor target items like locks and safes "call EAT_DeleteObj;" + EAT_pointMenu = [["",true]]; + EAT_pointMenu = EAT_pointMenu + [["-- Cursor Target Menu --", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_pointMenu = EAT_pointMenu + [["Point to get position",[],"",-5,[["expression","[cursorTarget] call EAT_GetPosition;"]],"1","1"]]; + EAT_pointMenu = EAT_pointMenu + [["Point to display code",[],"",-5,[["expression","call EAT_DisplayCode;"]],"1","1"]]; + EAT_pointMenu = EAT_pointMenu + [["Point to make new key",[],"",-5,[["expression","call EAT_RecoverKey;"]],"1","1"]]; + EAT_pointMenu = EAT_pointMenu + [["Point to lock object",[],"",-5,[["expression","[] spawn EAT_Lock;"]],"1","1"]]; + EAT_pointMenu = EAT_pointMenu + [["Point to unlock object",[],"",-5,[["expression","[] spawn EAT_Unlock;"]],"1","1"]]; + EAT_pointMenu = EAT_pointMenu + [["Point to Delete Item",[],"", -5,[["expression","[] spawn EAT_DeleteObj;"]],"1","1"]]; + EAT_pointMenu = EAT_pointMenu + [["", [], "", -5, [["expression", ""]], "1", "0"]]; + EAT_pointMenu = EAT_pointMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + + // Base menu for Admin Build functions + EAT_buildMenu = [["",true]]; + EAT_buildMenu = EAT_buildMenu + [["-- Admin Build Menu --", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_buildMenu = EAT_buildMenu + [["Rebuild last item",[],"", -5,[["expression",'["rebuild",false,true] spawn EAT_AdminBuild;']],"1","1"]]; + EAT_buildMenu = EAT_buildMenu + [["Building GUI", [],"", -5, [["expression", "[] spawn EAT_BuildingDialog;"]], "1", "1"]]; + EAT_buildMenu = EAT_buildMenu + [["Point To Upgrade",[],"", -5,[["expression","call EAT_Upgrade;"]],"1","1"]]; + EAT_buildMenu = EAT_buildMenu + [["Point To Downgrade",[],"", -5,[["expression","call EAT_DownGrade;"]],"1","1"]]; + EAT_buildMenu = EAT_buildMenu + [["Maintain Base",[],"", -5,[["expression","call EAT_MaintainArea;"]],"1","1"]]; + EAT_buildMenu = EAT_buildMenu + [["", [], "", -5,[["expression", ""]], "1", "0"]]; + EAT_buildMenu = EAT_buildMenu + [["Main Menu", [20], "#USER:EAT_mainMenu", -5, [["expression", ""]], "1", "1"]]; + }; + showCommandingMenu "#USER:EAT_mainMenu"; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/init.sqf b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/init.sqf new file mode 100755 index 0000000..f10e480 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/AdminTools/init.sqf @@ -0,0 +1,214 @@ +// Add UIDs and names of Admins and Mods Here. If an admin or mod wants to play with no admin tools, change name in profile. +#define SUPER_ADMIN_LIST ["76561198180152023","76500000000000000","76500000000000000"] +#define SUPER_ADMIN_NAMES ["Stuzer","SuperAdminName","SuperAdminName"] +#define ADMIN_LIST ["76500000000000000","76500000000000000","76500000000000000"] +#define ADMIN_NAMES ["AdminName","AdminName","AdminName"] +#define MOD_LIST ["76500000000000000","76500000000000000","76500000000000000"] +#define MOD_NAMES ["ModeratorName","ModeratorName","ModeratorName"] + +// These variables are used in the AI spawner. You can adjust them. +EAT_HumanityGainLoss = 25; +EAT_aiDeleteTimer = 600; + +// DO NOT EDIT BELOW THIS LINE + +"EAT_clientToServer" addPublicVariableEventHandler { + private ["_array","_type","_activatingPlayer","_playerUID"]; + _array = _this select 1; + _type = _array select 0; + _activatingPlayer = _array select 1; + _playerUID = getPlayerUID _activatingPlayer; + + if ((count _array == 2) && (_type == "login")) then { + { + if (_playerUID == getPlayerUID _x) exitWith { + call + { + if ((getPlayerUID _x) in SUPER_ADMIN_LIST && (name _x) in SUPER_ADMIN_NAMES) exitWith { + EAT_login = { + #include "\z\addons\dayz_server\AdminTools\SuperAdmin\activate.sqf" + }; + (owner _x) publicVariableClient "EAT_login"; + }; + + if ((getPlayerUID _x) in ADMIN_LIST && (name _x) in ADMIN_NAMES) exitWith { + EAT_login = { + #include "\z\addons\dayz_server\AdminTools\Admin\activate.sqf" + }; + (owner _x) publicVariableClient "EAT_login"; + }; + + if ((getPlayerUID _x) in MOD_LIST && (name _x) in MOD_NAMES) exitWith { + EAT_login = { + #include "\z\addons\dayz_server\AdminTools\Mod\activate.sqf" + }; + (owner _x) publicVariableClient "EAT_login"; + }; + + EAT_login = { + #include "\z\addons\dayz_server\adminTools\AntiCheat\antiCheat.sqf" + }; + (owner _x) publicVariableClient "EAT_login"; + }; + }; + } count playableUnits; + }; + + + if (count _array > 2) then { + + _params = _array select 2; + _clientKey = _array select 3; + + // First line of defense + if (!((_playerUID) in SUPER_ADMIN_LIST) && !((_playerUID) in ADMIN_LIST) && !((_playerUID) in MOD_LIST)) exitWith {diag_log format["ADMIN TOOLS: unauthorized use by %1, %2",_playerUID, (name _activatingPlayer)];}; + + if (_type == "tempVeh") exitWith { + #include "\z\addons\dayz_server\adminTools\ServerFunctions\vehSpawn.sqf" + }; + if (_type == "addAI") exitWith { + #include "\z\addons\dayz_server\adminTools\ServerFunctions\aiSpawn.sqf" + }; + if (_type == "crate") exitWith { + #include "\z\addons\dayz_server\adminTools\ServerFunctions\crateSpawn.sqf" + }; + if (_type == "invisibility") exitWith { + private ["_hide","_position","_isActive"]; + _isActive = _params select 0; + _position = _params select 1; + + _exitReason = [_this,"EAT_invisibility",_position,_clientKey,_playerUID,_activatingPlayer] call server_verifySender; + if (_exitReason != "") exitWith {diag_log _exitReason}; + + _activatingPlayer setVehicleInit format["this hideObject %1;",_isActive]; + processInitCommands; + clearVehicleInit _activatingPlayer; + }; + // Have the server spawn the transparent red globes to avoid BattlEye kicks + if (_type == "Base Manager") exitWith { + local _radius = _params select 0; + local _center = _params select 1; + local _pos = _params select 2; + + _exitReason = [_this,"Base Manager",_pos,_clientKey,_playerUID,_activatingPlayer] call server_verifySender; + if (_exitReason != "") exitWith {diag_log _exitReason}; + + [_radius,_center, _pos] spawn { + private ["_obj","_center","_a","_b","_radius","_angle","_count","_objects","_isWater"]; + _radius = _this select 0; + _center = _this select 1; + _angle = 0; + _count = round((2 * pi * _radius) / 2); + _objects = []; + _isWater = surfaceIsWater (_this select 2); + for "_x" from 0 to _count do + { + _a = (_center select 0) + (sin(_angle)*_radius); + _b = (_center select 1) + (cos(_angle)*_radius); + _obj = "Sign_sphere100cm_EP1" createVehicle [0,0,0]; + if (_isWater) then { + _obj setPosASL [_a, _b, _center select 2]; + } else { + _obj setPosATL [_a, _b, _center select 2]; + }; + //_obj setPosASL [_a, _b, _center select 2]; + _objects set [count _objects, _obj]; + _angle = _angle + (360/_count); + }; + + for "_x" from 0 to _count do + { + _a = (_center select 0) + (sin(_angle)*_radius); + _b = (_center select 2) + (cos(_angle)*_radius); + _obj = "Sign_sphere100cm_EP1" createVehicle [0,0,0]; + //_obj setPosASL [_a, _center select 1, _b]; + if (_isWater) then { + _obj setPosASL [_a, _center select 1, _b]; + } else { + _obj setPosATL [_a, _center select 1, _b]; + }; + _objects set [count _objects, _obj]; + _angle = _angle + (360/_count); + }; + + for "_x" from 0 to _count do + { + _a = (_center select 1) + (sin(_angle)*_radius); + _b = (_center select 2) + (cos(_angle)*_radius); + _obj = "Sign_sphere100cm_EP1" createVehicle [0,0,0]; + //_obj setPosASL [_center select 0, _a, _b]; + if (_isWater) then { + _obj setPosASL [_center select 0, _a, _b]; + } else { + _obj setPosATL [_center select 0, _a, _b]; + }; + _objects set [count _objects, _obj]; + _angle = _angle + (360/_count); + }; + + uiSleep 30; + {deleteVehicle _x; true } count _objects; + }; + }; + if (_type == "ServerMessage") exitWith { + private ["_message","_args"]; + _message = _params select 0; + _message = format["ADMIN:%1",_message]; + + _exitReason = [_this,"ServerMessage",getPos _activatingPlayer,_clientKey,_playerUID,_activatingPlayer] call server_verifySender; + if (_exitReason != "") exitWith {diag_log _exitReason}; + + _args = ["0.40","#FFFFFF","0.70","#990000",0,-.3,10,0.5]; + RemoteMessage = ["dynamic_text",["",_message],_args]; + publicVariable "RemoteMessage"; + }; + if (_type == "Date") exitWith { + private ["_moon","_time"]; + _moon = _params select 0; + _time = _params select 1; + _exitReason = [_this,"SetDate",getPos _activatingPlayer,_clientKey,_playerUID,_activatingPlayer] call server_verifySender; + if (_exitReason != "") exitWith {diag_log _exitReason}; + dayzSetDate = [2012,6,_moon,_time,1]; + publicVariable "dayzSetDate"; + setDate dayzSetDate; + }; + if (_type == "Fog") exitWith { + private ["_value","_time"]; + _value = _params select 0; + _time = _params select 1; + + _exitReason = [_this,"SetFog",getPos _activatingPlayer,_clientKey,_playerUID,_activatingPlayer] call server_verifySender; + if (_exitReason != "") exitWith {diag_log _exitReason}; + + drn_DynamicWeatherEventArgs = [overcast,fog,rain,"FOG",_value,_time,-1,-1]; + publicVariable "drn_DynamicWeatherEventArgs"; + drn_DynamicWeatherEventArgs call drn_fnc_DynamicWeather_SetWeatherLocal; + }; + //[current overcast, current fog, current rain, current weather change ("OVERCAST", "FOG" or ""), target weather value, time until weather completion (in seconds), current wind x, current wind z] + if (_type == "Cloud") exitWith { + private ["_value","_time"]; + _value = _params select 0; + _time = _params select 1; + + _exitReason = [_this,"SetWeather",getPos _activatingPlayer,_clientKey,_playerUID,_activatingPlayer] call server_verifySender; + if (_exitReason != "") exitWith {diag_log _exitReason}; + + drn_DynamicWeatherEventArgs = [overcast,fog,rain,"OVERCAST",_value,_time,-1,-1]; + publicVariable "drn_DynamicWeatherEventArgs"; + drn_DynamicWeatherEventArgs call drn_fnc_DynamicWeather_SetWeatherLocal; + }; + }; +}; + +// This variable is used for crate spawning. DO NOT CHANGE IT. +EAT_isOverPoch = isClass (configFile >> "CfgWeapons" >> "USSR_cheytacM200"); + +// Log tool usage to .txt file +"EAT_PVEH_usageLogger" addPublicVariableEventHandler { + "EATadminLogger" callExtension (_this select 1); +}; + +// Export base to .sqf +"EAT_PVEH_baseExporter" addPublicVariableEventHandler { + "EATbaseExporter" callExtension (_this select 1); +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_findclosestposition.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_findclosestposition.sqf new file mode 100755 index 0000000..43018b9 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_findclosestposition.sqf @@ -0,0 +1,19 @@ +// Return the closest position from array to the positionA. +// In: [positionA,[array of positions]] +// Out: positionB +private ["_pA","_ps","_p1","_p2"]; +_pA = _this select 0; +_ps = _this select 1; + +_p1 = _ps select 0; + +if (count _ps > 1) then { + for "_i" from 1 to (count _ps - 1) do { + _p2 = _ps select _i; + if ((_p2 distance _pA) < (_p1 distance _pA)) then { + _p1 = _p2; + }; + }; +}; + +_p1 \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getmarkercorners.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getmarkercorners.sqf new file mode 100755 index 0000000..1cac68b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getmarkercorners.sqf @@ -0,0 +1,59 @@ +// In: marker +// Out: array of positions +private ["_area","_corners"]; +_area = _this; +_corners = []; + +// Center point +private ["_center","_centerX","_centerY"]; +_center = getMarkerPos _area; +_centerX = _center select 0; +_centerY = _center select 1; + +// Direction and make sure it's between 0 and 360. +private ["_dir","_dirCos","_dirSin"]; +_dir = (markerDir _area) * -1; +_dir = _dir % 360; +_dirCos = cos _dir; +_dirSin = sin _dir; + +// Size +private ["_size","_sizeX","_sizeY"]; +_size = getMarkerSize _area; +_sizeX = _size select 0; +_sizeY = _size select 1; + + +private ["_cosX","_sinX","_cosY","_sinY","_addX","_addY","_subX","_subY"]; +_cosX = _dirCos * _sizeX; +_sinX = _dirSin * _sizeX; +_cosY = _dirCos * _sizeY; +_sinY = _dirSin * _sizeY; + +_addX = _cosX + _sinY; +_addY = _sinX + _cosY; +_subX = _cosX - _sinY; +_subY = _sinX - _cosY; + +private ["_posX","_posY"]; +// Bottom Left +_posX = _centerX - _subX; +_posY = _centerY - _addY; +_corners set [0,[_posX,_posY]]; + +// Top Left +_posX = _centerX - _addX; +_posY = _centerY - _subY; +_corners set [1,[_posX,_posY]]; + +// Top Right +_posX = _centerX + _subX; +_posY = _centerY + _addY; +_corners set [2,[_posX,_posY]]; + +// Bottom Right +_posX = _centerX + _addX; +_posY = _centerY + _subY; +_corners set [3,[_posX,_posY]]; + +_corners \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getmarkershape.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getmarkershape.sqf new file mode 100755 index 0000000..e397c5e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getmarkershape.sqf @@ -0,0 +1,30 @@ +// In: marker +// Out: string (marker shape) + +private ["_size","_x","_y","_ret"]; +_size = markersize _this; +_x = _size select 0; +_y = _size select 1; + +_ret = ""; + +switch (tolower(markershape _this)) do { + case "rectangle": { + if (_x == _y) then { + _ret = "SQUARE"; + } else { + _ret = "RECTANGLE"; + }; + }; + case "ellipse": { + if (_x == _y) then { + _ret = "CIRCLE"; + } else { + _ret = "ELLIPSE"; + }; + }; + case "icon": { + _ret = "ICON"; + }; +}; +_ret \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getpos.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getpos.sqf new file mode 100755 index 0000000..d5c5fb4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getpos.sqf @@ -0,0 +1,13 @@ +// In: [position,distance,direction] +// Out: position +private ["_pos","_dst","_dir","_orgX","_orgY","_posX","_posY"]; +_pos = _this select 0; +_dst = _this select 1; +_dir = _this select 2; + +_orgX = _pos select 0; +_orgY = _pos select 1; +_posX = _orgX + (_dst * sin _dir); +_posY = _orgY + (_dst * cos _dir); + +[_posX,_posY,0] \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getposfromcircle.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getposfromcircle.sqf new file mode 100755 index 0000000..87269f8 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getposfromcircle.sqf @@ -0,0 +1,26 @@ +// In: marker +// Out: position + +// Center point +private ["_center","_centerX","_centerY"]; +_center = getMarkerPos _this; +_centerX = _center select 0; +_centerY = _center select 1; + +// Size +private ["_size"]; +_size = getMarkerSize _this; +_size = _size select 0; + +// Randomly pick a direction, +private ["_dir","_posX","_posY","_rand","_pos"]; +_dir = random 360; +_rand = sqrt random 1; +_posX = (_size * (cos _dir)) * _rand; +_posY = (_size * (sin _dir)) * _rand; +_pos = [_posX,_posY]; + +_posX = _centerX + (_pos select 0); +_posY = _centerY + (_pos select 1); + +[_posX,_posY,0] diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getposfromellipse.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getposfromellipse.sqf new file mode 100755 index 0000000..7201fbc --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getposfromellipse.sqf @@ -0,0 +1,43 @@ +// In: ellipseMarker +// Out: position + +// Center point +private ["_center","_centerX","_centerY"]; +_center = getMarkerPos _this; +_centerX = _center select 0; +_centerY = _center select 1; + +// Direction and make sure it's between 0 and 360. +private ["_dirMrk"]; +_dirMrk = (markerDir _this) * -1; +_dirMrk = _dirMrk % 360; + +// Size +private ["_size","_sizeX","_sizeY"]; +_size = getMarkerSize _this; +_sizeX = _size select 0; +_sizeY = _size select 1; + +// If B axis is longer than A, switch them and fix direction. +if (_sizeX < _sizeY) then { + _sizeX = _size select 1; + _sizeY = _size select 0; + _dirMrk = _dirMrk + 90; +}; + +// Randomly pick a direction, +private ["_dir","_posX","_posY","_rand","_pos"]; +_dir = random 360; +_rand = sqrt random 1; +_posX = (_sizeX * (cos _dir)) * _rand; +_posY = (_sizeY * (sin _dir)) * _rand; +_pos = [_posX,_posY]; + +if (_dirMrk != 0) then { + _pos = [_pos,_dirMrk] call SHK_pos_fnc_rotatePosition; +}; + +_posX = _centerX + (_pos select 0); +_posY = _centerY + (_pos select 1); + +[_posX,_posY,0] diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getposfromrectangle.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getposfromrectangle.sqf new file mode 100755 index 0000000..76ebd7d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getposfromrectangle.sqf @@ -0,0 +1,37 @@ +// In: marker +// Out: position + +// Center point +private ["_center","_centerX","_centerY"]; +_center = getMarkerPos _this; +_centerX = _center select 0; +_centerY = _center select 1; + +// Size +private ["_size","_sizeX","_sizeY"]; +_size = getMarkerSize _this; +_sizeX = _size select 0; +_sizeY = _size select 1; + +// Direction and make sure it's between 0 and 360. +private ["_dir","_dirCos","_dirSin"]; +_dir = (markerDir _this) * -1; +_dir = _dir % 360; +_dirCos = cos _dir; +_dirSin = sin _dir; + +private ["_rndX","_rndY","_posX","_posY"]; +// Select random X and Y +_rndX = (random (_sizeX * 2)) - _sizeX; +_rndY = (random (_sizeY * 2)) - _sizeY; + +// If area is angled, shift X and Y +if (_dir != 0) then { + _posX = _centerX + (_dirCos * _rndX - _dirSin * _rndY); + _posY = _centerY + (_dirSin * _rndX + _dirCos * _rndY); +} else { + _posX = _centerX + _rndX; + _posY = _centerY + _rndY; +}; + +[_posX,_posY,0] \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getposfromsquare.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getposfromsquare.sqf new file mode 100755 index 0000000..c47df5b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_getposfromsquare.sqf @@ -0,0 +1,36 @@ +// In: marker +// Out: position + +// Center point +private ["_center","_centerX","_centerY"]; +_center = getMarkerPos _this; +_centerX = _center select 0; +_centerY = _center select 1; + +// Size +private ["_size"]; +_size = getMarkerSize _this; +_size = _size select 0; + +// Direction and make sure it's between 0 and 360. +private ["_dir","_dirCos","_dirSin"]; +_dir = (markerDir _this) * -1; +_dir = _dir % 360; +_dirCos = cos _dir; +_dirSin = sin _dir; + +private ["_rndX","_rndY","_posX","_posY"]; +// Select random X and Y +_rndX = (random (_size * 2)) - _size; +_rndY = (random (_size * 2)) - _size; + +// If area is angled, shift X and Y +if (_dir != 0) then { + _posX = _centerX + (_dirCos * _rndX - _dirSin * _rndY); + _posY = _centerY + (_dirSin * _rndX + _dirCos * _rndY); +} else { + _posX = _centerX + _rndX; + _posY = _centerY + _rndY; +}; + +[_posX,_posY,0] \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_isblacklisted.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_isblacklisted.sqf new file mode 100755 index 0000000..00a74b4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_isblacklisted.sqf @@ -0,0 +1,85 @@ +// In: [position,blackListMarker] +// Out: boolean + +private ["_pos","_area","_return"]; +_pos = _this select 0; +_area = _this select 1; +_return = false; + +// Find corner positions of the rectangle +private ["_dir"]; +_dir = markerDir _area; +_dir = _dir % 360; + +// Center point +private ["_center","_centerX","_centerY"]; +_center = getMarkerPos _area; +_centerX = _center select 0; +_centerY = _center select 1; + +private ["_shape"]; +_shape = _area call SHK_pos_fnc_getMarkerShape; + +if (_shape == "ICON") then { + // Icon has only one position, so if it equals to the given position, then it's blacklisted. + if ([_pos,_center] call SHK_pos_fnc_isSamePosition) then { + _return = true; + }; + +// Markers that have an area. +} else { + if (_shape in ["RECTANGLE","SQUARE"]) then { + private ["_corners"]; + _corners = _area call SHK_pos_fnc_getMarkerCorners; + + // If rectangle is not axis-aligned. + if (_dir % 90 != 0) then { + // Add the point position to the array to have it shifted by the FOR below + _corners set [4,_pos]; + + // Rotate each corner position so that the rectangle is aligned with x and y axises + // Use origo as center while rotating, but for comparison shift positions back + private ["_posCor","_posNew","_orgX","_orgY","_shiftedX","_shiftedY","_newX","_newY"]; + for "_i" from 0 to (count _corners - 1) do { + _posCor = _corners select _i; + + // Original coordinates + _orgX = _posCor select 0; + _orgY = _posCor select 1; + + // Subtract the marker center coordinates from corner coordinates. + // Rotation is done using origo (0,0) as anchor/centerpoint. + _shiftedX = _orgX - _centerX; + _shiftedY = _orgY - _centerY; + + // Axis-aligned corner position + _posNew = [[_shiftedX,_shiftedY],_dir] call SHK_pos_fnc_rotatePosition; + + // Shift the aligned corner position back near to the original marker location. + _newX = _posNew select 0; + _newY = _posNew select 1; + _newX = _newX + _centerX; + _newY = _newY + _centerY; + + _posCor = [_newX,_newY]; + + _corners set [_i,_posCor]; + }; + + // Point position + _pos = _corners select 4; + }; + + // Check if the position is within the marker area. + _return = [_pos,_corners] call SHK_pos_fnc_isInRectangle; + } else { + if (_shape == "CIRCLE") then { + _return = [_pos,_area] call SHK_pos_fnc_isInCircle; + } else { + _return = [_pos,_area] call SHK_pos_fnc_isInEllipse; + }; + }; +}; + + +_return \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_isincircle.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_isincircle.sqf new file mode 100755 index 0000000..39616d9 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_isincircle.sqf @@ -0,0 +1,36 @@ +// In: [position,marker] +// Out: boolean + +private ["_pos","_area","_posX","_posY"]; +_pos = _this select 0; +_area = _this select 1; + +_posX = _pos select 0; +_posY = _pos select 1; + +// Center point +private ["_center","_centerX","_centerY"]; +_center = getMarkerPos _area; +_centerX = _center select 0; +_centerY = _center select 1; + +// Size +private ["_size"]; +_size = getMarkerSize _area; +_size = _size select 0; + +// Difference in coordinates +private ["_difX","_difY"]; +_difX = _posX - _centerX; +_difY = _posY - _centerY; + +private ["_return"]; +_return = false; + +// If distance from center of marker to the given position is +// smaller than the radius of the circle, then position is inside. +if (sqrt((_difX * _difX) + (_difY * _difY)) < _size) then { + _return = true; +}; + +_return \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_isinellipse.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_isinellipse.sqf new file mode 100755 index 0000000..535e7cf --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_isinellipse.sqf @@ -0,0 +1,54 @@ +// In: [position,ellipseMarker] +// Out: boolean + +private ["_pos","_area","_return"]; +_pos = _this select 0; +_area = _this select 1; +_return = false; + +// Ellipse size +private ["_size","_sizeX","_sizeY"]; +_size = getMarkerSize _area; +_sizeX = _size select 0; +_sizeY = _size select 1; + +// Direction and make sure it's between 0 and 360. +private ["_dir"]; +_dir = markerDir _area; +_dir = _dir % 360; + +// Ellipse center position +private ["_center","_centerX","_centerY"]; +_center = getMarkerPos _area; +_centerX = _center select 0; +_centerY = _center select 1; + +// If marker is not axis-aligned, rotate the dot position. +if (_dir % 90 != 0) then { + private ["_orgX","_orgY","_shiftedX","_shiftedY"]; + _orgX = _pos select 0; + _orgY = _pos select 1; + _shiftedX = _orgX - _centerX; + _shiftedY = _orgY - _centerY; + _pos = [[_shiftedX,_shiftedY],_dir] call SHK_pos_fnc_rotatePosition; + _pos set [0,(_pos select 0) + _centerX]; + _pos set [1,(_pos select 1) + _centerY]; +}; +// Dot position +private ["_posX","_posY"]; +_posX = _pos select 0; +_posY = _pos select 1; + +// Distance between dot and ellipse center +private ["_dstX","_dstY"]; +_dstX = abs(_posX - _centerX); +_dstY = abs(_posY - _centerY); + +private ["_sum"]; +_sum = ((_dstX * _dstX)/(_sizeX * _sizeX)) + ((_dstY * _dstY)/(_sizeY * _sizeY)); + +if (_sum <= 1) then { + _return = true; +}; + +_return \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_isinrectangle.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_isinrectangle.sqf new file mode 100755 index 0000000..43d7d36 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_isinrectangle.sqf @@ -0,0 +1,26 @@ +// In: [pointPosition,corners] +// Out: boolean +private ["_pos","_corners","_return"]; +_pos = _this select 0; +_corners = _this select 1; +_return = false; + +private ["_dotX","_dotY","_bottomLeft","_left","_bottom","_topRight","_right","_top"]; +_dotX = _pos select 0; +_dotY = _pos select 1; + +_bottomLeft = _corners select 0; +_left = _bottomLeft select 0; +_bottom = _bottomLeft select 1; + +_topRight = _corners select 2; +_right = _topRight select 0; +_top = _topRight select 1; + +// x is between left and right +// y is between bottom and top +if (_dotX >= _left && _dotX < _right && _dotY >= _bottom && _dotY < _top) then { + _return = true; +}; + +_return \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_issameposition.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_issameposition.sqf new file mode 100755 index 0000000..32dbf4c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_issameposition.sqf @@ -0,0 +1,16 @@ +// In: [array1,array2] +// Out: boolean + +private ["_p1","_p2","_return"]; +_p1 = _this select 0; +_p2 = _this select 1; +_return = true; + +// Only compare X and Y coordinates, ignore Z. +for "_i" from 0 to 1 do { + if ((_p1 select _i) != (_p2 select _i)) exitwith { + _return = false; + }; +}; + +_return \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_rotateposition.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_rotateposition.sqf new file mode 100755 index 0000000..c0afaae --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_fnc_rotateposition.sqf @@ -0,0 +1,13 @@ +// In: [position,direction] +// Out: position +private ["_pos","_dir","_orgX","_orgY","_newX","_newY"]; +_pos = _this select 0; +_dir = _this select 1; + +_orgX = _pos select 0; +_orgY = _pos select 1; + +_newX = (_orgX * (cos _dir)) - (_orgY * (sin _dir)); +_newY = (_orgX * (sin _dir)) + (_orgY * (cos _dir)); + +[_newX,_newY] \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_getpos.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_getpos.sqf new file mode 100755 index 0000000..b63dcbd --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_getpos.sqf @@ -0,0 +1,170 @@ +/* Select a random position based on anchor position, direction and distance. + In: [position,distance,direction,water,road,emptySpace] + Out: position +*/ +private ["_org","_dst","_dir","_pos","_water","_road","_empty"]; +_org = _this select 0; +_dst = _this select 1; +_dir = if (count _this > 2) then {_this select 2} else {random 360}; +_water = if (count _this > 3) then {_this select 3} else {0}; +_road = if (count _this > 4) then {_this select 4} else {[0,200]}; +_empty = if (count _this > 5) then {_this select 5} else {[]}; + +// Object instead of position array given +if (typename _org == "OBJECT") then {_org = getpos _org}; + +// Distance given as an array of min and max. Pick a random between them. +if (typename _dst == "ARRAY") then { + private ["_min","_max"]; + _min = _dst select 0; + _max = _dst select 1; + _dst = (_min + random(_max - _min)); +}; + +// Direction given as an array of min and max. Pick a random dir between them. +if (typename _dir == "ARRAY") then { + private ["_min","_max","_ang"]; + _min = _dir select 0; + _max = _dir select 1; + + _ang = _max - _min; + + // Min bigger than max, can happen with directions around north + if (_ang < 0) then { _ang = _ang + 360 }; + + _dir = (_min + random _ang); +}; + +_pos = [_org,_dst,_dir] call SHK_pos_fnc_getPos; + +// Water position +if (typeName _water == "SCALAR") then { + switch _water do { + case 0: { // Water not allowed + if (surfaceIsWater _pos) then { + private ["_p","_d","_l"]; + _d = 0; _l = true; + + // Search for a land position starting from the randomly picked position and + // then going outwards from it in full circles in 20m steps. + while {_d = _d + 20; _l && _d < 5000} do { + for "_i" from 0 to 340 step 20 do { + _p = [_pos,_d,_i] call SHK_pos_fnc_getpos; + if (!surfaceIsWater _p) exitwith {_l = false}; + }; + }; + _pos = _p; + }; + }; + case 1: { // Water allowed + + }; + case 2: { // Only water allowed + if !(surfaceIsWater _pos) then { + private ["_p","_d","_l"]; + _d = 0; _l = true; + + // Search for a water position starting from the randomly picked position and + // then going outwards from it in full circles in 20m steps. + while {_d = _d + 20; _l && _d < 5000} do { + for "_i" from 0 to 340 step 20 do { + _p = [_pos,_d,_i] call SHK_pos_fnc_getpos; + if (surfaceIsWater _p) exitwith {_l = false}; + }; + }; + _pos = _p; + }; + }; + }; +} else { // For backward compatibility + // Water position is not allowed + if !_water then { + if (surfaceIsWater _pos) then { + private ["_p","_d","_l"]; + _d = 0; _l = true; + + // Search for a land position starting from the randomly picked position and + // then going outwards from it in full circles in 20m steps. + while {_d = _d + 20; _l && _d < 5000} do { + for "_i" from 0 to 340 step 20 do { + _p = [_pos,_d,_i] call SHK_pos_fnc_getpos; + if (!surfaceIsWater _p) exitwith {_l = false}; + }; + }; + _pos = _p; + }; + }; +}; + +// Road position. +if (count _road > 0) then { + if ((_road select 0) > 0) then { + private ["_mode","_range","_roads","_cnt","_p","_p2"]; + _mode = _road select 0; + _range = _road select 1; + _roads = _pos nearroads _range; + _cnt = count _roads; + _p = []; + + // Road position(s) found. + if (_cnt > 0) then { + _p = getpos (_roads select 0); + + // Found more than one road position, return closest. + if (_cnt > 1) then { + for "_i" from 1 to (_cnt - 1) do { + _p2 = getpos (_roads select _i); + if ((_p2 distance _pos) < (_p distance _pos)) then { + _p = _p2; + }; + }; + }; + }; + + switch _mode do { + // Road position preferred but not forced. + case 1: { + if (count _p > 0) then { + _pos = _p; + }; + }; + // Only accept road position, return empty array if none found. + case 2: { + if (count _p > 0) then { + _pos = _p; + } else { + _pos resize 0; + }; + }; + }; + }; +}; + +// Find empty position +private ["_dst","_veh","_p"]; + +_dst = 200; +_veh = ""; +switch (typename _empty) do { + case "OBJECT": { _veh = typeof _empty }; // Only vehicle given, use default distance + case "SCALAR": {_dst = _empty;}; + case "ARRAY": { + if (count _empty > 0) then { + _dst = _empty select 0; + _veh = _empty select 1; + if (typename _veh == typename objNull) then { _veh = typeof _veh }; + }; + }; +}; + +_p = []; +if (count _pos > 0) then {_p = _pos findEmptyPosition [0,_dst,_veh];}; + + +// If an empty position is found, use it. Otherwise, return the original position. +if (count _p > 0) then { + _pos = _p; +}; + +// Return position +_pos \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_getposmarker.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_getposmarker.sqf new file mode 100755 index 0000000..1672daa --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_getposmarker.sqf @@ -0,0 +1,101 @@ +/* Select a random position from an area defined by a marker. + In: [marker,water,blacklist,emptySpace] + Out: position +*/ +private ["_area","_water","_blist","_pos","_empty"]; +_area = _this select 0; +_water = if (count _this > 1) then {_this select 1} else {0}; +_blist = if (count _this > 2) then {_this select 2} else {[]}; +_empty = if (count _this > 3) then {_this select 3} else {[]}; +_pos = []; + +if (typename _blist == "STRING") then {_blist = [_blist]}; + +private ["_shape"]; +_shape = _area call SHK_pos_fnc_getMarkerShape; + +// Limited loop so the script won't get stuck +private ["_i","_exit"]; +_exit = false; +for [{_i = 0}, {_i < 1000 && !_exit}, {_i = _i + 1}] do { + + // Rectangle or Ellipse marker given? + if (_shape in ["SQUARE","RECTANGLE"]) then { + _pos = _area call SHK_pos_fnc_getPosFromRectangle; + } else { + _pos = _area call SHK_pos_fnc_getPosFromEllipse; + }; + + // Find empty position + private ["_dst","_veh","_p"]; + + _dst = 200; + _veh = ""; + switch (typename _empty) do { + case (typename objNull): { _veh = typeof _empty }; // Only vehicle given, use default distance + case ("STRING"): { _veh = _empty }; + case (typename []): { + if (count _empty > 0) then { + _dst = _empty select 0; + _veh = _empty select 1; + if (typename _veh == typename objNull) then { _veh = typeof _veh }; + }; + }; + }; + + _p = _pos findEmptyPosition [0,_dst,_veh]; + + // If an empty position is found, use it. Otherwise, return the original position. + if (count _p > 0) then { + _pos = _p; + }; + + // Water position + if (typeName _water == "SCALAR") then { + switch _water do { + + case 0: { // Water position is not allowed + // Position is on land, try to exit script. + if !(surfaceIsWater _pos) then { + _exit = true; + }; + }; + + case 1: { // Doesn't matter if position is on water or land. + _exit = true; + }; + + case 2: { // Only water position is allowed + // Position is on water, try to exit script. + if (surfaceIsWater _pos) then { + _exit = true; + }; + }; + }; + } else { // For backward compatibility + // Water position is not allowed + if !_water then { + // Position is on land, try to exit script. + if !(surfaceIsWater _pos) then { + _exit = true; + }; + // Doesn't matter if position is on water or land. + } else { + _exit = true; + }; + }; + + // Position is not allowed in blacklisted areas + if (count _blist > 0 && _exit) then { + // Check each blacklist marker + { + // If blacklisted, jump out of blacklist check and continue main loop. + if ([_pos,_x] call SHK_pos_fnc_isBlacklisted) exitwith { + _exit = false; + }; + } foreach _blist; + }; +}; + +// Return position +_pos \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_init.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_init.sqf new file mode 100755 index 0000000..4c0814b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/SHK_pos/shk_pos_init.sqf @@ -0,0 +1,105 @@ +/* + SHK_pos + + Version 0.24 + Author: Shuko (shuko@quakenet, miika@miikajarvinen.fi) + Contributors: Cool=Azroul13, Hatifnat + + Forum: http://forums.bistudio.com/showthread.php?162695-SHK_pos + + Marker Based Selection + Required Parameters: + 0 String Area marker's name. + + Optional Parameters: + 1 Number Water position. Default is only land positions allowed. + 0 Find closest land. Search outwards 360 degrees (20 degree steps) and 20m steps. + 1 Allow water positions. + 2 Find only water positions. + 2 Array or String One or multiple blacklist area markers which are excluded from the main marker area. + 3 Array, Number, Object or Vehicle Type Force finding large enough empty position. + 0 Max range from the selection position to look for empty space. Default is 200. + 1 Vehicle or vehicle type to fit into an empty space. + + Examples: + [...,[300,heli]] Array with distance and vehicle object. + [...,350] Only distance given + [...,(typeof heli)] Only vehicle type given + [...,heli] Only vehicle object given + + Position Based Selection + Required Parameters: + 0 Object or Position Anchor point from where the relative position is calculated from. + 1 Array or Number Distance from anchor. + + Optional Parameters: + 2 Array of Number Direction from anchor. Default is random between 0 and 360. + 3 Number Water position. Default is only land positions allowed. + 0 Find closest land. Search outwards 360 degrees (20 degree steps) and 20m steps. + 1 Allow water positions. + 2 Find only water positions. + 4 Array Road positions. + 0 Number Road position forcing. Default is 0. + 0 Do not search for road positions. + 1 Find closest road position. Return the generated random position if none found. + 2 Find closest road position. Return empty array if none found. + 1 Number Road search range. Default is 200m. + 5 Array, Number, Object or Vehicle Type Force finding large enough empty position. + 0 Max range from the selection position to look for empty space. Default is 200. + 1 Vehicle or vehicle type to fit into an empty space. + + Examples: + [...,[300,heli]] Array with distance and vehicle object. + [...,350] Only distance given + [...,(typeof heli)] Only vehicle type given + [...,heli] Only vehicle object given + + Usage: + Preprocess the file in init.sqf: + call compile preprocessfile "SHK_pos\shk_pos_init.sqf"; + + Actually getting the position: + pos = [parameters] call SHK_pos; +*/ +// Functions +SHK_pos_getPos = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_getpos.sqf",DZAI_directory]; +SHK_pos_getPosMarker = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_getposmarker.sqf",DZAI_directory]; + +// Sub functions +SHK_pos_fnc_findClosestPosition = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_fnc_findclosestposition.sqf",DZAI_directory]; +SHK_pos_fnc_getMarkerCorners = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_fnc_getmarkercorners.sqf",DZAI_directory]; +SHK_pos_fnc_getMarkerShape = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_fnc_getmarkershape.sqf",DZAI_directory]; +SHK_pos_fnc_getPos = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_fnc_getpos.sqf",DZAI_directory]; +SHK_pos_fnc_getPosFromCircle = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_fnc_getposfromcircle.sqf",DZAI_directory]; +SHK_pos_fnc_getPosFromEllipse = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_fnc_getposfromellipse.sqf",DZAI_directory]; +SHK_pos_fnc_getPosFromRectangle = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_fnc_getposfromrectangle.sqf",DZAI_directory]; +SHK_pos_fnc_getPosFromSquare = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_fnc_getposfromsquare.sqf",DZAI_directory]; +SHK_pos_fnc_isBlacklisted = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_fnc_isblacklisted.sqf",DZAI_directory]; +SHK_pos_fnc_isInCircle = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_fnc_isincircle.sqf",DZAI_directory]; +SHK_pos_fnc_isInEllipse = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_fnc_isinellipse.sqf",DZAI_directory]; +SHK_pos_fnc_isInRectangle = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_fnc_isinrectangle.sqf",DZAI_directory]; +SHK_pos_fnc_isSamePosition = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_fnc_issameposition.sqf",DZAI_directory]; +SHK_pos_fnc_rotatePosition = compile preprocessFileLineNumbers format ["%1\shk_pos\shk_pos_fnc_rotateposition.sqf",DZAI_directory]; + +// Wrapper function +// Decide which function to call based on parameters. +SHK_pos = { + private ["_pos"]; + _pos = []; + + // Only marker is given as parameter + if (typename _this == "STRING") then { + _pos = [_this] call SHK_pos_getPosMarker; + + // Parameter array + } else { + if (typename (_this select 0) == "STRING") then { + _pos = _this call SHK_pos_getPosMarker; + } else { + _pos = _this call SHK_pos_getPos; + }; + }; + + // Return position + _pos +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/BIN_taskPatrol.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/BIN_taskPatrol.sqf new file mode 100755 index 0000000..59e42c8 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/BIN_taskPatrol.sqf @@ -0,0 +1,186 @@ +/* +======================================================================================================================= +Script: BIN_taskPatrol.sqf v1.3 +Author(s): Binesi +Partly based on original code by BIS + +Description: +Creates a continually randomized patrol path which circles and intersects a given position. + +Parameter(s): +_this select 0: the group to which to assign the waypoints (Group) +_this select 1: the position on which to base the patrol (Array) +_this select 2: the maximum distance between waypoints (Number) +_this select 3: (optional) debug markers on or off (Number) +_this select 4: (optional) blacklist of areas (Array) + +Returns: +Boolean - success flag + +Example(s): +null = [group this,(getPos this),250] execVM "BIN_taskPatrol.sqf" +null = [group this,(getPos this),250,1] execVM "BIN_taskPatrol.sqf" // Same with debug markers + +----------------------------------------------------------------------------------------------------------------------- +Notes: Wolffy.au +If anyone is interested, I've made some additions to Binesi's BIN_taskPatrol script. +Random initial patrol direction - I noticed every patrol started off in the same direction, so I've randomised it. +Fixed the 2D position / findSafePos errors +Added building positions as possible patrol locations using Random Building Position Script v1.0 by Tophe of Östgöta Ops +Added check that BIS Functions has been initialized + +ArmaIIholic +-- added JTD direction normalization function +-- changed numbers for waypoints to match previous waypoints +-- randomized initial direction - Wolffy.au added only the offset +-- fixed error with building position format +-- randomized initial direction -- Wolffy.au added only the offset which had to be reduced to 180 + - however this script is making full circle from wherever it starts + +Edited version for DZAI (https://github.com/dayzai/DZAI) +======================================================================================================================= +*/ + +if (isServer) then +{ + //waitUntil {!isNil "bis_fnc_init"}; + _grp = _this select 0; + _pos = _this select 1; + _max_dist = _this select 2; + //_debug = if ((count _this) > 3) then {_this select 3} else {((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled})}; + _unitType = _grp getVariable ["unitType",""]; + _allowWater = (_unitType == "aircustom"); + _searchLoot = _unitType in ["static","dynamic"]; + _isVehicle = (_unitType == "landcustom"); + + //_grp setBehaviour "AWARE"; + if (_max_dist < 75) then {_grp setSpeedMode "LIMITED"}; + //_grp setCombatMode "RED"; + + _wpStatements = if ((_max_dist >= 100) && {_searchLoot}) then {"if ((random 3) > 2) then { group this setCurrentWaypoint [(group this), (floor (random (count (waypoints (group this)))))];} else {_nul = [(group this),100] spawn DZAI_findLootPile;};"} else {"if ((random 3) > 2) then { group this setCurrentWaypoint [(group this), (floor (random (count (waypoints (group this)))))];};"}; + _wpTimeouts = if (_max_dist >= 100) then {[0, 3, 10]} else {[5, 10, 15]}; + + _center_x = (_pos) select 0; + _center_y = (_pos) select 1; + _center_z = (_pos) select 2; + if(isNil "_center_z")then{_center_z = 0;}; + + _wp_count = 4 + (floor random 3) + (floor (_max_dist / 100 )); + _angle = (360 / (_wp_count -1)); + + _newangle = 0; + _wp_array = []; + _slack = _max_dist / 5.5; + _completionRadius = if (_isVehicle) then {(5 + _slack) max 75} else {(5 + _slack)}; + if ( _slack < 20 ) then { _slack = 20 }; + + _angle_offset = random 180; + while {count _wp_array < _wp_count} do + { + private ["_x1","_y1","_wp_pos", "_prepos","_bldgpos","_bldgs","_a","_b"]; + + _newangle = (count _wp_array * _angle) + _angle_offset; + + if ((_newangle > 360) || (_newangle < 0)) then + { + _newangle = abs (abs (_newangle) - 360); + }; + + if ((random 1) < 0.5) then + { + _newangle = -_newangle; + + if ((_newangle > 360) || (_newangle < 0)) then + { + _newangle = abs (abs (_newangle) - 360); + }; + }; + + _x1 = _center_x - (sin _newangle * _max_dist); + _y1 = _center_y - (cos _newangle * _max_dist); + + _prepos = [_x1, _y1, _center_z]; + if ( isNil "_center_z" ) then { + _prepos = [_x1, _y1]; + }; + + _wp_pos = [_prepos, 0, _slack, 6, 0, 50 * (pi / 180), 0, [],[_prepos]] call BIS_fnc_findSafePos; + + _a = 0 + (_wp_pos select 0); + _b = 0 + (_wp_pos select 1); + + if (_searchLoot) then { + ////////////////////////////////////////////////////////////////// + // The following code is an extract from Random Building Position Script v1.0 by Tophe of Östgöta Ops + ////////////////////////////////////////////////////////////////// + _bldgpos = []; + _bldgs = nearestObjects [[_a,_b,0], ["HouseBase"], 50]; + { + private["_i","_y"]; + _i = 0; + _y = _x buildingPos _i; + while {format["%1", _y] != "[0,0,0]"} do { + _bldgpos = _bldgpos + [_y]; + _i = _i + 1; + _y = _x buildingPos _i; + }; + } forEach _bldgs; + + if(count _bldgpos != 0) then {_wp_pos = _bldgpos call BIS_fnc_selectRandom2;}; + } else { + if (_isVehicle) then { + _nearRoads = _wp_pos nearRoads ((_max_dist/2) min 100); + _roadsCount = count _nearRoads; + _returnPos = []; + if (_roadsCount > 0) then { + _returnPos = getPosASL (_nearRoads select 0); + if (_roadsCount > 1) then { + for "_i" from 1 to (_roadsCount -1) do { + _comparePos = getPosASL (_nearRoads select _i); + if ((_comparePos distance _wp_pos) < (_returnPos distance _wp_pos)) then { + _returnPos = _comparePos; + }; + }; + }; + _wp_pos = _returnPos; + }; + }; + }; + _wp_array = _wp_array + [_wp_pos]; + + uiSleep 0.5; + }; + + uiSleep 1; + + for "_i" from 1 to (_wp_count - 1) do + { + private ["_wp","_cur_pos"]; + + _cur_pos = (_wp_array select _i); + + if ((!(surfaceIsWater _cur_pos)) or {_allowWater}) then { + _wp = _grp addWaypoint [_cur_pos, 0]; + _wp setWaypointType "MOVE"; + _wp setWaypointCompletionRadius _completionRadius; + _wp setWaypointTimeout [_wpTimeouts select 0, _wpTimeouts select 1, _wpTimeouts select 2]; + _wp setWaypointStatements ["true", _wpStatements]; + }; + uiSleep 0.25; + }; + + if (_searchLoot) then { + // End back near start point and then pick a new random point + _wp1 = _grp addWaypoint [_pos, 0]; + _wp1 setWaypointType "SAD"; + _wp1 setWaypointCompletionRadius (_max_dist max 100); + [_grp,(count waypoints _grp)] setWaypointStatements ["true", "group this setCurrentWaypoint [(group this), (round (random 2) + 1)];"]; + }; + + // Cycle in case we reach the end + _wp2 = _grp addWaypoint [_pos, 0]; + _wp2 setWaypointType "CYCLE"; + _wp2 setWaypointCompletionRadius (_max_dist max 100); + + true +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_alertzombies.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_alertzombies.sqf new file mode 100755 index 0000000..4fb2af4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_alertzombies.sqf @@ -0,0 +1,26 @@ + +private["_unit","_distance","_i","_listTalk","_zombie","_targets","_pos"]; +//Alert Zed's to noise of shot +_unit = _this select 0; +_distance = _this select 1; +_doRun = _this select 2; +_pos = _this select 3; +_listTalk = _pos nearEntities ["zZombie_Base",_distance]; + +{ + if ((_unit distance _x) > 10) then { + if (_doRun) then { + _localtargets = _x getVariable ["localtargets",[]]; + _remotetargets = _x getVariable ["remotetargets",[]]; + _epochtargets = _x getVariable ["targets",[]]; + _targets = _localtargets + _remotetargets + _epochtargets; + if (!(_unit in _targets)) then { + _remotetargets set [count _remotetargets,_unit]; + _x setVariable ["remotetargets",_remotetargets,true]; + _x setVariable ["targets",_remotetargets,true]; + }; + } else { + _x setVariable ["myDest",_pos,true]; + }; + }; +} count _listTalk; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_death.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_death.sqf new file mode 100755 index 0000000..06c4de9 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_death.sqf @@ -0,0 +1,104 @@ +/* + DZAI_unitDeath + + Description: Called when AI unit blood level drops below zero to process unit death. + + Usage: [_unit,_killer] call DZAI_unitDeath; +*/ + +private["_coins","_values","_victim","_killer","_unitGroup","_unitType","_launchWeapon","_launchAmmo","_deathType","_groupIsEmpty","_unitsAlive","_vehicle","_groupSize"]; + +_victim = _this select 0; +_killer = _this select 1; +_deathType = if ((count _this) > 2) then {_this select 2} else {"bled"}; + +if (_victim getVariable ["deathhandled",false]) exitWith {}; +_victim setVariable ["deathhandled",true]; + +_vehicle = (vehicle _victim); +_unitGroup = (group _victim); + +_victim setDamage 1; +_victim removeAllEventHandlers DZAI_healthType; + +//Check number of units alive, preserve group immediately if empty. +_unitsAlive = ({alive _x} count (units _unitGroup)); +_groupIsEmpty = if (_unitsAlive == 0) then {_unitGroup call DZAI_protectGroup; true} else {false}; + +//Update group size counter +_groupSize = (_unitGroup getVariable ["GroupSize",0]); +if (_groupSize > 0) then {_unitGroup setVariable ["GroupSize",(_groupSize - 1)]}; + +//Retrieve group type +_unitType = _unitGroup getVariable ["unitType",""]; + +call { + if (_unitType == "static") exitWith { + [_victim,_killer,_unitGroup,_groupIsEmpty] call DZAI_AI_killed_static; + 0 = [_victim,_killer,_unitGroup,_unitType,_unitsAlive] call DZAI_AI_killed_all; + }; + if (_unitType == "dynamic") exitWith { + [_victim,_killer,_unitGroup,_groupIsEmpty] call DZAI_AI_killed_dynamic; + 0 = [_victim,_killer,_unitGroup,_unitType,_unitsAlive] call DZAI_AI_killed_all; + }; + if (_unitType == "randomspawn") exitWith { + [_victim,_killer,_unitGroup,_groupIsEmpty] call DZAI_AI_killed_random; + 0 = [_victim,_killer,_unitGroup,_unitType,_unitsAlive] call DZAI_AI_killed_all; + }; + if (_unitType in ["air","aircustom"]) exitWith { + [_victim,_unitGroup] call DZAI_AI_killed_air; + }; + if (_unitType in ["land","landcustom"]) exitWith { + 0 = [_victim,_killer,_unitGroup,_unitType] call DZAI_AI_killed_all; + [_victim,_unitGroup,_groupIsEmpty] call DZAI_AI_killed_land; + }; + if (_unitType == "aircrashed") exitWith {}; + if (_groupIsEmpty) then { + _unitGroup setVariable ["GroupSize",-1]; + }; +}; + +if !(isNull _victim) then { + //_launchWeapon = (secondaryWeapon _victim); + //if (_launchWeapon in DZAI_launcherTypes) then { + // _launchAmmo = getArray (configFile >> "CfgWeapons" >> _launchWeapon >> "magazines") select 0; + // _victim removeWeapon _launchWeapon; + // _victim removeMagazines _launchAmmo; + //}; + + if (_deathType == "shothead") then { //no need for isplayer check since "shothead" is only possible if killer is a player + _nul = _killer spawn { + _headshots = _this getVariable ["headShots",0]; + _headshots = _headshots + 1; + _this setVariable ["headShots",_headshots,true]; + }; + }; + + if (_victim getVariable ["removeNVG",true]) then { + _victim removeWeapon "NVGoggles"; + }; + + _victim spawn DZAI_deathFlies; + _bodyName = _victim getVariable ["bodyName","unknown"]; + _victim setVariable ["bodyName",_bodyName]; + _victim setVariable ["deathType",_deathType,true]; + _victim setVariable ["DZAI_deathTime",diag_tickTime]; + _victim setVariable ["unconscious",true]; + + if (Z_SingleCurrency && {DZAI_hasCoins select 0}) then { + _values = DZAI_hasCoins select 1; + _coins = ceil(random (_values select 1)) max (_values select 0); + _victim setVariable ["cashMoney",_coins,true]; + }; + + if (_vehicle == (_unitGroup getVariable ["assignedVehicle",objNull])) then { + _victim setPosASL (getPosASL _victim); + }; + if ((combatMode _unitGroup) == "BLUE") then {_unitGroup setCombatMode "RED"}; + //[_victim] joinSilent grpNull; + if (DZAI_deathMessages && {isPlayer _killer}) then { + _nul = [_killer,_bodyName] spawn DZAI_sendKillMessage; + }; +}; + +_victim diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_fired.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_fired.sqf new file mode 100755 index 0000000..2cc5d1f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_fired.sqf @@ -0,0 +1,16 @@ +private["_unit","_ammo","_audible","_distance"]; + +//[unit, weapon, muzzle, mode, ammo, magazine] +_unit = _this select 0; +_ammo = _this select 4; + +if ((diag_tickTime - (_unit getVariable ["lastFired",0])) > 5) then { + //Calculate audible range of fired bullet + _audible = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFire"); + _caliber = getNumber (configFile >> "CfgAmmo" >> _ammo >> "caliber"); + _distance = round(_audible * 10 * _caliber); + [_unit,_distance/2,true,(ASLtoATL getPosASL _unit)] spawn DZAI_alertZombies; + _unit setVariable ["lastFired",diag_tickTime]; +}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_generate_loot.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_generate_loot.sqf new file mode 100755 index 0000000..29d7fa6 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_generate_loot.sqf @@ -0,0 +1,111 @@ +private ["_unit","_pistol","_pistols","_weapongrade","_magazine","_currentWeapon","_toolselect","_chance","_tool","_toolsArray","_loot"]; +_unit = _this select 0; +_weapongrade = _this select 1; + +if (DZAI_debugLevel > 1) then {diag_log format["DZAI Extended Debug: AI killed by player at %1. Generating loot with weapongrade %2.",mapGridPosition _unit,_weapongrade];}; + +_loot = []; + +if (_unit getVariable ["CanGivePistol",true]) then { + _pistols = missionNamespace getVariable ["DZAI_Pistols"+str(_weapongrade),DZAI_Pistols0+DZAI_Pistols1+DZAI_Pistols2+DZAI_Pistols3]; + _pistol = _pistols call BIS_fnc_selectRandom2; + _magazine = getArray (configFile >> "CfgWeapons" >> _pistol >> "magazines") select 0; + _unit addMagazine _magazine; + _unit addWeapon _pistol; + if (DZAI_debugLevel > 1) then { + _loot set [count _loot,_pistol]; + _loot set [count _loot,_magazine]; + }; +}; + +//Add consumables, medical items, and miscellaneous items +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//Clear backpack cargo in case there are items +clearMagazineCargoGlobal _unit; + +//Add one guaranteed Bandage to inventory +_unit addMagazine "ItemBandage"; + +//Add edible items to inventory +for "_i" from 1 to DZAI_invedibles do { + if (DZAI_chanceEdibles call DZAI_chance) then { + _invedible = DZAI_Edibles call BIS_fnc_selectRandom2; + _unit addMagazine _invedible; + if (DZAI_debugLevel > 1) then {_loot set [count _loot,_invedible];}; + }; +}; + +//Add edible items to backpack +for "_i" from 1 to DZAI_bpedibles do { + if (DZAI_chanceEdibles call DZAI_chance) then { + _bpedible = DZAI_Edibles call BIS_fnc_selectRandom2; + (unitBackpack _unit) addMagazineCargoGlobal [_bpedible, 1]; + if (DZAI_debugLevel > 1) then {_loot set [count _loot,_bpedible];}; + }; +}; + +//Chance to add miscellaneous item (Small) to backpack +for "_i" from 1 to DZAI_numMiscItemS do { + if (DZAI_chanceMiscItemS call DZAI_chance) then { + _miscItemS = DZAI_MiscItemS call BIS_fnc_selectRandom2; + (unitBackpack _unit) addMagazineCargoGlobal [_miscItemS,1]; + if (DZAI_debugLevel > 1) then {_loot set [count _loot,_miscItemS];}; + }; +}; + +if (_weapongrade > 0) then { + //Chance to add miscellaneous item (Large) to backpack - only if backpack capacity greater than 6 + if ((getNumber (configFile >> "CfgVehicles" >> (str (unitBackpack _unit)) >> "transportMaxMagazines")) > 6) then { + for "_i" from 1 to DZAI_numMiscItemL do { + if (DZAI_chanceMiscItemL call DZAI_chance) then { + _miscItemL = DZAI_MiscItemL call BIS_fnc_selectRandom2; + (unitBackpack _unit) addMagazineCargoGlobal [_miscItemL,1]; + if (DZAI_debugLevel > 1) then {_loot set [count _loot,_miscItemL];}; + }; + }; + }; + + //Add medical items to backpack + for "_i" from 1 to DZAI_bpmedicals do { + if (DZAI_chanceMedicals call DZAI_chance) then { + _bpmedical = DZAI_Medicals2 call BIS_fnc_selectRandom2; + (unitBackpack _unit) addMagazineCargoGlobal [_bpmedical, 1]; + if (DZAI_debugLevel > 1) then {_loot set [count _loot,_bpmedical];}; + }; + }; + + //Add medical items to inventory + for "_i" from 1 to DZAI_invmedicals do { + if (DZAI_chanceMedicals call DZAI_chance) then { + _invmedical = DZAI_Medicals1 call BIS_fnc_selectRandom2; + _unit addMagazine _invmedical; + if (DZAI_debugLevel > 1) then {_loot set [count _loot,_invmedical];}; + }; + }; + + if (DZAI_modName == "epoch") then { + _barsAdded = 0; + { + if (_barsAdded >= DZAI_metalBarNum) exitWith {}; + if (((_x select 1) call DZAI_chance) && {[(_x select 0),"magazine"] call DZAI_checkClassname}) then { + _unit addMagazine (_x select 0); + _barsAdded = _barsAdded + 1; + if (DZAI_debugLevel > 1) then {_loot set [count _loot,(_x select 0)];}; + } + } count DZAI_metalBars; + }; +}; + +//Add tool items +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + +_toolsArray = if (_weapongrade < 2) then {DZAI_tools0} else {DZAI_tools1}; +{ + if (((_x select 1) call DZAI_chance) && {[(_x select 0),"weapon"] call DZAI_checkClassname}) then { + _unit addWeapon (_x select 0); + if (DZAI_debugLevel > 1) then {_loot set [count _loot,(_x select 0)];}; + } +} count _toolsArray; + +if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Generated loot for AI death: %1",_loot];}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_air.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_air.sqf new file mode 100755 index 0000000..9031dfd --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_air.sqf @@ -0,0 +1,25 @@ +private ["_vehicle","_victim","_unitGroup","_parachuted"]; + +_victim = _this select 0; +_unitGroup = _this select 1; + +_vehicle = (_unitGroup getVariable ["assignedVehicle",objNull]); +if (alive _vehicle) then { + if (_victim getVariable ["isDriver",false]) then { + _unitGroup setVariable ["unitType","aircrashed"]; //prevent this case from being run for ejected non-pilot units + _parachuted = [_vehicle] call DZAI_parachuteOut; + if (_parachuted) then { + _nul = _vehicle spawn { + _this setFuel 0; + _this setVehicleAmmo 0; + uiSleep 2.5; + _this setDamage 1; + }; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: AI %1 pilot unit %2 killed, ejecting surving crew.",(typeOf _vehicle),(typeOf _victim)];}; + }; + } else { + 0 = [_victim,(_unitGroup getVariable ["weapongrade",1])] spawn DZAI_addLoot; + }; +}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_all.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_all.sqf new file mode 100755 index 0000000..0eb7be9 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_all.sqf @@ -0,0 +1,46 @@ +/* + fnc_banditAIKilled + + Description: Adds loot to AI corpse if killed by a player. Script is shared between all infantry-type AI units. + + Usage: [_victim,_killer,_unitGroup,_unitType] call DZAI_AI_killed_all; + +*/ + +private["_victim","_killer","_unitGroup","_unitType","_groupSize","_unitsAlive"]; +_victim = _this select 0; +_killer = _this select 1; +_unitGroup = _this select 2; +_unitType = _this select 3; +_unitsAlive = if ((count _this) > 4) then {_this select 4} else {0}; + +if (isPlayer _killer) then { + _weapongrade = _unitGroup getVariable ["weapongrade",1]; + 0 = [_victim,_weapongrade] spawn DZAI_addLoot; + 0 = [_killer,_victim,"banditKills"] call DZAI_countKills; + if (_unitsAlive > 0) then { + _unitGroup reveal [vehicle _killer,4]; + _unitGroup setFormDir ([(leader _unitGroup),_killer] call BIS_fnc_dirTo); + (units _unitGroup) doTarget (vehicle _killer); + (units _unitGroup) doFire (vehicle _killer); + if (DZAI_findKiller) then {0 = [_killer,_unitGroup] spawn DZAI_huntKiller}; + if (DZAI_lastManStanding && {_unitsAlive == 1}) then {0 = _unitGroup spawn DZAI_skillBoost;}; //"Last man standing" mode on + if (DZAI_debugLevel > 0) then {diag_log format["DZAI Debug: AI group %1 killed, %2 units left alive in group.",_unitGroup,_unitsAlive];}; + }; +} else { + if (_killer == _victim) then { + removeAllWeapons _victim; //Clear unit inventory if death is caused by collision. + {_victim removeMagazines _x} count (magazines _victim); + removeBackpack _victim; + }; +}; + +//Force death animation if unit has pistol and conscious to avoid "standing while dead" bug. +if ((vehicle _victim) == _victim) then { + if !((_victim getVariable ["CanGivePistol",true]) && {(_victim getVariable ["unconscious",false])}) then { + _anim = if ((animationState _victim) in ["amovppnemrunsnonwnondf","amovppnemstpsnonwnondnon","amovppnemstpsraswrfldnon","amovppnemsprslowwrfldf","aidlppnemstpsnonwnondnon0s","aidlppnemstpsnonwnondnon01"]) then {"adthppnemstpsraswpstdnon_2"} else {"adthpercmstpslowwrfldnon_4"}; + _nul = [objNull, _victim, rSWITCHMOVE, _anim] call RE; + }; +}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_dynamic.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_dynamic.sqf new file mode 100755 index 0000000..447034d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_dynamic.sqf @@ -0,0 +1,14 @@ + +private ["_victim","_killer","_groupIsEmpty","_trigger","_unitGroup"]; + +_victim = _this select 0; +_killer = _this select 1; +_unitGroup = _this select 2; +_groupIsEmpty = _this select 3; + +_trigger = _unitGroup getVariable ["trigger",DZAI_defaultTrigger]; +if (_groupIsEmpty) then { + [_trigger,true] spawn fnc_despawnBandits_dynamic; //force despawning even if players are present in trigger area. +}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_land.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_land.sqf new file mode 100755 index 0000000..e50f0d8 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_land.sqf @@ -0,0 +1,37 @@ +private ["_victim","_vehicle","_unitGroup","_groupIsEmpty"]; + +_victim = _this select 0; +_unitGroup = _this select 1; +_groupIsEmpty = _this select 2; + +_vehicle = _unitGroup getVariable ["assignedVehicle",objNull]; +if (_groupIsEmpty) then { + if (_vehicle isKindOf "LandVehicle") then { + {_vehicle removeAllEventHandlers _x} count ["HandleDamage","Killed"]; + [_unitGroup,_vehicle] call DZAI_respawnAIVehicle; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: AI vehicle patrol destroyed, adding vehicle %1 to cleanup queue.",(typeOf _vehicle)];}; + }; + _unitGroup setVariable ["GroupSize",-1]; +} else { + if (_victim getVariable ["isDriver",false]) then { + _groupUnits = (units _unitGroup) - [_victim]; + _newDriver = _groupUnits call BIS_fnc_selectRandom2; //Find another unit to serve as driver + if (!isNil "_newDriver") then { + _nul = [_newDriver,_vehicle] spawn { + private ["_newDriver","_vehicle"]; + _newDriver = _this select 0; + _vehicle = _this select 1; + unassignVehicle _newDriver; + _newDriver assignAsDriver _vehicle; + if (_newDriver in _vehicle) then { + _newDriver moveInDriver _vehicle; + }; + [_newDriver] orderGetIn true; + _newDriver setVariable ["isDriver",true]; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Replaced driver unit for group %1 vehicle %2.",(group _newDriver),(typeOf _vehicle)];}; + }; + }; + }; +}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_random.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_random.sqf new file mode 100755 index 0000000..ba0986d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_random.sqf @@ -0,0 +1,14 @@ + +private ["_victim","_killer","_groupIsEmpty","_trigger","_unitGroup"]; + +_victim = _this select 0; +_killer = _this select 1; +_unitGroup = _this select 2; +_groupIsEmpty = _this select 3; + +_trigger = _unitGroup getVariable ["trigger",DZAI_defaultTrigger]; +if (_groupIsEmpty) then { + [_trigger,true] spawn fnc_despawnBandits_random; //force despawning even if players are present in trigger area. +}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_static.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_static.sqf new file mode 100755 index 0000000..e10328b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_killed_static.sqf @@ -0,0 +1,55 @@ +/* + fnc_staticAIDeath + + Usage: [_victim,_killer,_unitGroup] call DZAI_AI_killed_static; + + Description: Script is called when an AI unit is killed, and waits for the specified amount of time before respawning the unit into the same group it was part of previously. + If the killed unit was the last surviving unit of its group, a dummy AI unit is created to occupy the group until a dead unit in the group is respawned. +*/ + +private ["_victim","_killer","_unitGroup","_trigger","_dummy","_groupIsEmpty"]; + +_victim = _this select 0; +_killer = _this select 1; +_unitGroup = _this select 2; +_groupIsEmpty = _this select 3; + +_trigger = _unitGroup getVariable ["trigger",DZAI_defaultTrigger]; + +if (_groupIsEmpty) then { + if (_trigger getVariable ["respawn",true]) then { + _respawnCount = _trigger getVariable ["respawnLimit",-1]; + if (_respawnCount != 0) then { + [0,_trigger,_unitGroup] call fnc_respawnHandler; //If there are still respawns possible... respawn the group + if (_respawnCount > -1) then { + _trigger setVariable ["respawnLimit",(_respawnCount - 1)]; //If respawns are limited, decrease respawn counter + if (DZAI_debugLevel > 0) then {diag_log format["DZAI Debug: Respawns remaining for group %1: %2.",_unitGroup,(_unitGroup getVariable ["respawnLimit",-1])];}; + }; + } else { + _trigger setVariable ["permadelete",true]; //deny respawn and delete trigger on next despawn. + }; + } else { + if ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}) then {deleteMarker str(_trigger)}; + _nul = _trigger spawn { + _trigger = _this; + _trigger setTriggerStatements ["this","true","false"]; //Disable trigger from activating or deactivating while cleanup is performed + if (DZAI_debugLevel > 0) then {diag_log format["DZAI Debug: Deleting custom-defined AI spawn %1 at %2 in 30 seconds.",triggerText _trigger, mapGridPosition _trigger];}; + uiSleep 30; + { + //_x call DZAI_deleteGroup; + _x setVariable ["GroupSize",-1]; + } forEach (_trigger getVariable ["GroupArray",[]]); + deleteMarker (_trigger getVariable ["spawnmarker",""]); + [_trigger,"DZAI_staticTriggerArray"] call DZAI_updateSpawnCount; + deleteVehicle _trigger; + }; + }; +} else { + if (!(_trigger getVariable ["respawn",true])) then { + _maxUnits = _trigger getVariable ["maxUnits",[0,0]]; //Reduce maximum AI for spawn trigger for each AI killed for non-respawning spawns. + _maxUnits set [0,(_maxUnits select 0) - 1]; + if (DZAI_debugLevel > 1) then {diag_log format["DZAI Extended Debug: MaxUnits variable for group %1 set to %2.",_unitGroup,_maxUnits];}; + }; +}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_setup_loadout.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_setup_loadout.sqf new file mode 100755 index 0000000..0928ea3 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_setup_loadout.sqf @@ -0,0 +1,57 @@ +private ["_unit","_weapongrade","_weapons","_weapon","_magazine","_backpacks","_gadgetsArray","_backpack","_gadget","_inventory"]; +_unit = _this select 0; +_weapongrade = _this select 1; + +if (_unit getVariable ["loadoutDone",false]) exitWith {diag_log format ["DZAI Error: Unit already has loadout! (%1)",__FILE__];}; + +if !(_weapongrade in DZAI_weaponGradesAll) then { + _weapongradeInvalid = _weapongrade; + _weapongrade = DZAI_weaponGrades call BIS_fnc_selectRandom2; + diag_log format ["DZAI Error: Invalid weapongrade provided: %1. Generating new weapongrade value: %2. (%3)",_weapongradeInvalid,_weapongrade,__FILE__]; +}; + +if ((count (weapons _unit)) > 0) then { + removeAllWeapons _unit; + {_unit removeWeapon _x} count ["ItemMap","ItemGPS","ItemCompass","ItemRadio","ItemWatch"]; +}; + +_weapons = missionNamespace getVariable ["DZAI_Rifles"+str(_weapongrade),DZAI_Rifles1+DZAI_Rifles2+DZAI_Rifles3]; +if ((_weapongrade == 0) && {(0.25 call DZAI_chance)}) then { + _weapons = missionNamespace getVariable ("DZAI_Pistols" + str(floor(random 2))); +}; +_backpacks = missionNamespace getVariable ["DZAI_Backpacks"+str(_weapongrade),DZAI_Backpacks1+DZAI_Backpacks2+DZAI_Backpacks3]; + +//Select weapon and backpack +_weapon = _weapons call BIS_fnc_selectRandom2; +_backpack = _backpacks call BIS_fnc_selectRandom2; + +//Add weapon, ammunition, and backpack +_magazine = getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines") select 0; +_unit addMagazine _magazine; +_unit addWeapon _weapon; +_unit selectWeapon _weapon; +_unit addBackpack _backpack; +if ((getNumber (configFile >> "CfgWeapons" >> _weapon >> "type")) == 2) then {_unit setVariable ["CanGivePistol",false]}; +if ((getNumber (configFile >> "CfgMagazines" >> _magazine >> "count")) < 8) then {_unit addMagazine _magazine}; + +_gadgetsArray = if (_weapongrade > 1) then {DZAI_gadgets1} else {DZAI_gadgets0}; +for "_i" from 0 to ((count _gadgetsArray) - 1) do { + if (((_gadgetsArray select _i) select 1) call DZAI_chance) then { + _gadget = ((_gadgetsArray select _i) select 0); + _unit addWeapon _gadget; + }; +}; + +//If unit has weapongrade 2 or 3 and was not given NVGs, give the unit temporary NVGs which will be removed at death. Set DZAI_tempNVGs to true in variables config to enable temporary NVGs. +if (DZAI_tempNVGs) then { + if (!(_unit hasWeapon "NVGoggles") && {(_weapongrade > 0)} && {(daytime < 6 || daytime > 20)}) then { + _nvg = _unit call DZAI_addTempNVG; + if (DZAI_debugLevel > 1) then {diag_log "DZAI Extended Debug: Generated temporary NVGs for AI.";}; + }; +}; + +_unit setVariable ["loadoutDone",true]; +_unit setVariable ["loadout",[[_weapon],[_magazine]]]; +if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Created loadout for unit %1 (weapongrade: %2): [%3,%4,%5].",_unit,_weapongrade,_weapon,_magazine,_backpack];}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_unconscious.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_unconscious.sqf new file mode 100755 index 0000000..1b40997 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/ai_unconscious.sqf @@ -0,0 +1,45 @@ +//Knocks an AI unit unconscious for x seconds - determines the correct animation to use, and returns unit to standing state after waking. + +private ["_unit","_anim","_hit","_knockoutTime","_launchWeapon","_launchAmmo"]; +_unit = _this select 0; +_hit = _this select 1; + +if ((vehicle _unit) == _unit) then { //do not allow vehicle AI to be knocked unconscious. + if ((animationState _unit) in ["amovppnemrunsnonwnondf","amovppnemstpsnonwnondnon","amovppnemstpsraswrfldnon","amovppnemsprslowwrfldf","aidlppnemstpsnonwnondnon0s","aidlppnemstpsnonwnondnon01"]) then { + _anim = "adthppnemstpsraswpstdnon_2"; + } else { + _anim = "adthpercmstpslowwrfldnon_4"; + }; + _unit switchMove _anim; + _nul = [objNull, _unit, rSWITCHMOVE, _anim] call RE; + {_unit disableAI _x} forEach ["TARGET","MOVE","FSM"]; + //diag_log "DEBUG :: AI unit is unconscious."; + + //_launchWeapon = (secondaryWeapon _unit); + //if (_launchWeapon in DZAI_launcherTypes) then { + // _launchAmmo = getArray (configFile >> "CfgWeapons" >> _launchWeapon >> "magazines") select 0; + // _unit removeWeapon _launchWeapon; + // _unit removeMagazines _launchAmmo; + // _loadout = _unit getVariable ["loadout",[]]; + // (_loadout select 0) resize 1; + // (_loadout select 1) resize 1; + // //if (_launchWeapon in (weapons _unit)) then {diag_log format ["Warning: Unable to remove launcher weapon %1 from unit %2.",_launchWeapon,_unit]}; + // //if (_launchAmmo in (magazines _unit)) then {diag_log format ["Warning: Unable to remove launcher ammo %1 from unit %2.",_launchWeapon,_unit]}; + // //if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Unit %1 knocked out, removed launcher weapon %2 and ammo %3.",_unit,_launchWeapon,_launchAmmo]}; + //}; + + _knockoutTime = if (_hit == "head_hit") then {40} else {20}; + //diag_log format ["DEBUG :: Knocked out AI %1 for %2 seconds.",_unit,_knockoutTime]; + uiSleep _knockoutTime; + + if (alive _unit) then { + _nul = [objNull, _unit, rSWITCHMOVE, "AmovPpneMstpSnonWnonDnon_healed"] call RE; + _unit switchMove "AmovPpneMstpSnonWnonDnon_healed"; + uiSleep 1.75; + {_unit enableAI _x} forEach ["TARGET","MOVE","FSM"]; + _unit setVariable ["unconscious",false]; + }; +} else { + uiSleep 10; + _unit setVariable ["unconscious",false]; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/createRandomSpawns.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/createRandomSpawns.sqf new file mode 100755 index 0000000..eac0729 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/createRandomSpawns.sqf @@ -0,0 +1,55 @@ +private ["_maxRandomSpawns","_debugMarkers","_triggerArea","_attempts","_trigPos","_trigger","_markername","_marker"]; + +_maxRandomSpawns = _this; + +_debugMarkers = ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}); +_triggerArea = 600; + +//waitUntil {sleep 1; !isNil "DZAI_locations_ready"}; + +if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Attempting to place %1 random spawns on the map...",_maxRandomSpawns];}; + +for "_i" from 1 to _maxRandomSpawns do { + _attempts = 0; + _keepSearching = true; + _trigPos = [0,0,0]; + while { + _keepSearching + } do { + _trigPos = ["DZAI_centerMarker",false,DZAI_randAreaBlacklist] call SHK_pos; + _attempts = _attempts + 1; + _keepSearching = ((count ((nearestLocations [_trigPos, ["Strategic"], 650])) > 0) && {_attempts < 3}); + if (_keepSearching) then {uiSleep 0.25}; + }; + + if (_attempts < 3) then { + _trigger = createTrigger ["EmptyDetector",_trigPos]; + + _location = createLocation ["Strategic",(getPosASL _trigger),600,600]; //Create temporary dynamic spawn blacklist area + _trigger setVariable ["triggerLocation",_location]; + [_trigger,"DZAI_randTriggerArray"] call DZAI_updateSpawnCount; + + _trigger setTriggerArea [_triggerArea, _triggerArea, 0, false]; + _trigger setTriggerActivation ["ANY", "PRESENT", true]; + _trigger setTriggerTimeout [5, 5, 5, true]; + _trigger setTriggerStatements ["{isPlayer _x} count thisList > 0;","0 = [300,thisTrigger,thisList] call fnc_spawnBandits_random;", "[thisTrigger] spawn fnc_despawnBandits_random;"]; + if (_debugMarkers) then { + _markername = str(_trigger); + _marker = createMarker[_markername,_trigPos]; + _marker setMarkerShape "ELLIPSE"; + _marker setMarkerType "Flag"; + _marker setMarkerBrush "SOLID"; + _marker setMarkerSize [_triggerArea, _triggerArea]; + _marker setMarkerColor "ColorYellow"; + _marker setMarkerAlpha 0.6; + DZAI_mapMarkerArray set [(count DZAI_mapMarkerArray),_marker]; + }; + _trigger setTriggerText format ["Random Spawn at %1",(mapGridPosition _trigger)]; + _trigger setVariable ["timestamp",diag_tickTime]; + if (DZAI_debugLevel > 0) then {diag_log format["DZAI Debug: Random spawn %1 of %2 placed at %3 (Retries: %4).",_i,_maxRandomSpawns,_trigPos,_attempts];}; + //DZAI_randTriggerArray set [(count DZAI_randTriggerArray),_trigger]; + } else { + if (DZAI_debugLevel > 0) then {diag_log format["DZAI Debug: Could not find suitable location to place random spawn %1 of %2.",_i,_maxRandomSpawns];}; + }; + uiSleep 3; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_abortdynspawn.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_abortdynspawn.sqf new file mode 100755 index 0000000..628acd2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_abortdynspawn.sqf @@ -0,0 +1,9 @@ +private["_trigger"]; +_trigger = _this; + +DZAI_dynTriggerArray = DZAI_dynTriggerArray - [_trigger]; +if ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}) then {deleteMarker str(_trigger)}; + +deleteVehicle _trigger; + +false diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_abortrandspawn.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_abortrandspawn.sqf new file mode 100755 index 0000000..90bcffc --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_abortrandspawn.sqf @@ -0,0 +1,14 @@ +private["_trigger","_triggerLocation"]; +_trigger = _this; + +[_trigger,"DZAI_randTriggerArray"] call DZAI_updateSpawnCount; +if ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}) then {deleteMarker (str _trigger)}; + +_triggerLocation = _trigger getVariable "triggerLocation"; +deleteLocation _triggerLocation; +//_triggerLocation setVariable ["deletetime",(diag_tickTime + 900)]; +//DZAI_tempBlacklist set [(count DZAI_tempBlacklist),_triggerLocation]; + +deleteVehicle _trigger; + +false diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_checkclassname.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_checkclassname.sqf new file mode 100755 index 0000000..462ae3e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_checkclassname.sqf @@ -0,0 +1,63 @@ +private ["_classname","_checkType","_result","_config","_banString","_check","_configIndex"]; + +_classname = _this select 0; +_checkType = _this select 1; +_result = false; +_configIndex = -1; +_checkType = (toLower _checkType); +_startTime = diag_tickTime; + +call { + if (_checkType == "weapon") exitWith { + if (_classname in (DZAI_checkedClassnames select 0)) then { + _result = true; + } else { + if (!(_classname in (DZAI_invalidClassnames select 0))) then { + _config = "CfgWeapons"; + _banString = "bin\config.bin/CfgWeapons/FakeWeapon"; + _configIndex = 0; + }; + }; + }; + if (_checkType == "magazine") exitWith { + if (_classname in (DZAI_checkedClassnames select 1)) then { + _result = true; + } else { + if (!(_classname in (DZAI_invalidClassnames select 0))) then { + _config = "CfgMagazines"; + _banString = "bin\config.bin/CfgMagazines/FakeMagazine"; + _configIndex = 1; + }; + }; + }; + if (_checkType == "vehicle") exitWith { + if (_classname in (DZAI_checkedClassnames select 2)) then { + _result = true; + } else { + if (!(_classname in (DZAI_invalidClassnames select 0))) then { + _config = "CfgVehicles"; + _banString = "bin\config.bin/CfgVehicles/Banned"; + _configIndex = 2; + }; + }; + }; + diag_log format ["DZAI Error: Attempted to check %1 as an invalid classname type! Provided type: %2. Valid types: weapon, magazine, vehicle.",_checkType]; +}; + +if (_configIndex > -1) then { + _check = (str(inheritsFrom (configFile >> _config >> _classname))); + _classnameArray = []; + if ((_check != "") && {(_check != _banString)} && {(getNumber (configFile >> _config >> _classname >> "scope")) != 0}) then { + _classnameArray = DZAI_checkedClassnames; + _result = true; + } else { + _classnameArray = DZAI_invalidClassnames; + diag_log format ["DZAI Warning: %1 is an invalid %2 classname!",_classname,_checkType]; + }; + (_classnameArray select _configIndex) set [(count (_classnameArray select _configIndex)),_classname]; //Classname now known to be either valid or invalid, no need to check it again + //;diag_log format ["DEBUG :: Classname check result: %1. ClassnameArray: %2.",_result,_classnameArray]; +}; + +//diag_log format ["DEBUG :: Classname %1 (check result: %2) completed in %3 seconds.",_classname,_result,diag_tickTime - _startTime]; + +_result \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_countkills.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_countkills.sqf new file mode 100755 index 0000000..f176b67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_countkills.sqf @@ -0,0 +1,13 @@ +private ["_killer","_victim","_killType","_killCount"]; +_killer = _this select 0; +_victim = _this select 1; +_killType = _this select 2; + +_killCount = _killer getVariable [_killType,0]; +_killer setVariable [_killType,(_killCount +1),true]; + +if (DZAI_humanityGain != 0) then { + _humanity = _killer getVariable["humanity",0]; + _humanity = _humanity + DZAI_humanityGain; + _killer setVariable["humanity",_humanity,true]; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_createStaticSpawn.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_createStaticSpawn.sqf new file mode 100755 index 0000000..bf8893f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_createStaticSpawn.sqf @@ -0,0 +1,52 @@ +/*Syntax: [ + _spawnMarker, //Circular marker defining patrol radius. + [_minAI,_addAI], //(Optional, default [1,1]) Minimum and maximum bonus amount of AI units per group. + _positionArray, //(Optional, default []): Array of markers defining possible spawn points. If omitted or left empty, nearby buildings within 250m radius will be used as spawn points. + _equipType, //(Optional, default 1): Number between 0-3. Defines AI weapon selection and skill parameters. + _numGroups //(Optional, default 1): Number of AI groups to spawn using the above parameters. + ] call DZAI_static_spawn; +*/ + +private ["_spawnMarker","_minAI","_addAI","_positionArray","_equipType","_numGroups","_patrolDist","_onActStatements","_trigger","_abort"]; + +_spawnMarker = _this select 0; +if ((getMarkerColor _spawnMarker) == "") exitWith {diag_log format ["DZAI Error: Static spawn marker %1 does not exist!",_spawnMarker];}; +if ((markerAlpha _spawnMarker) > 0) then {_spawnMarker setMarkerAlpha 0}; + +_abort = true; +if ((count _this) > 1) then { + _minAI = (_this select 1) select 0; + _addAI = (_this select 1) select 1; + if ((_minAI + _addAI) > 0) then { + _abort = false; + }; +} else { + _minAI = 1; + _addAI = 1; +}; + +if (_abort) exitWith { + diag_log format ["DZAI Error: Zero AI amount for spawn area %1. Spawn area not created. (%2)",_spawnMarker,__FILE__]; + + objNull +}; + +_positionArray = if ((count _this) > 2) then {_this select 2} else {[]}; +_equipType = if ((count _this) > 3) then {_this select 3} else {1}; +_numGroups = if ((count _this) > 4) then {_this select 4} else {1}; + +_patrolDist = (getMarkerSize _spawnMarker) select 0; + +if !(_equipType in [0,1,2,3]) then {_equipType = 1}; + +_onActStatements = format ["_nul = [%1,%2,%3,thisTrigger,%4,%5,%6] call DZAI_spawnBandits_init;",_minAI,_addAI,_patrolDist,_positionArray,_equipType,_numGroups]; +_trigger = createTrigger ["EmptyDetector", getMarkerPos(_spawnMarker)]; +_trigger setTriggerArea [600, 600, 0, false]; +_trigger setTriggerActivation ["ANY", "PRESENT", true]; +_trigger setTriggerTimeout [10, 10, 10, true]; +_trigger setTriggerText _spawnMarker; +_trigger setTriggerStatements ["{isPlayer _x} count thisList > 0;",_onActStatements,""]; + +deleteMarker _spawnMarker; + +_trigger diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_customSpawnUnits.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_customSpawnUnits.sqf new file mode 100755 index 0000000..803d716 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_customSpawnUnits.sqf @@ -0,0 +1,30 @@ +private ["_spawnMarker","_patrolRadius","_trigStatements","_trigger","_respawn","_weapongrade","_totalAI","_respawnTime"]; + +_spawnMarker = _this select 0; +if ((typeName _spawnMarker) != "STRING") exitWith {diag_log "DZAI Error: Marker string not given!"}; +_totalAI = if ((typeName (_this select 1)) == "SCALAR") then {_this select 1} else {1}; +_weapongrade = if ((typeName (_this select 2)) == "SCALAR") then {_this select 2} else {1}; +_respawn = if ((count _this) > 3) then {if ((typeName (_this select 3)) == "BOOL") then {_this select 3} else {true}} else {true}; +_respawnTime = if ((count _this) > 4) then {if ((typeName (_this select 4)) == "SCALAR") then {_this select 4} else {0}} else {0}; + +_patrolRadius = ((((getMarkerSize _spawnMarker) select 0) min ((getMarkerSize _spawnMarker) select 1)) min 300); + +_trigStatements = format ["0 = [%1,0,%2,thisTrigger,%3,%4] call fnc_spawnBandits_custom;",_totalAI,_patrolRadius,_weapongrade,_spawnMarker]; +_trigger = createTrigger ["EmptyDetector", getMarkerPos(_spawnMarker)]; +_trigger setTriggerArea [600, 600, 0, false]; +_trigger setTriggerActivation ["ANY", "PRESENT", true]; +_trigger setTriggerTimeout [5, 5, 5, true]; +_trigger setTriggerText _spawnMarker; +_trigger setTriggerStatements ["{isPlayer _x} count thisList > 0;",_trigStatements,"0 = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger setVariable ["respawn",_respawn]; +_trigger setVariable ["spawnmarker",_spawnMarker]; +if (_respawnTime > 0) then {_trigger setVariable ["respawnTime",_respawnTime];}; +//diag_log format ["DEBUG :: %1",_trigStatements]; + +if ((markerAlpha _spawnMarker) > 0) then { + _spawnMarker setMarkerAlpha 0; +}; + +if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Created custom spawn area %1 at %2 with %3 AI units, weapongrade %4, respawn %5, respawn time %6.",_spawnMarker,mapGridPosition _trigger,_totalAI,_weapongrade,_respawn,_respawnTime];}; + +_trigger diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_damageHandlerAI2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_damageHandlerAI2.sqf new file mode 100755 index 0000000..faf95e4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_damageHandlerAI2.sqf @@ -0,0 +1,83 @@ +private["_unit","_hit","_damage","_source","_ammo","_unithealth","_scale","_blooddamage","_newbloodlevel","_headShots","_partdamage","_deathType","_headHit"]; +/* + Damage Handler script modified for DZAI + Simulates DayZ's player health system for individual AI units + +*/ +_unit = _this select 0; //Object the event handler is assigned to. (the unit taking damage) +_hit = _this select 1; //Name of the selection where the unit was damaged. "" for over-all structural damage, "?" for unknown selections. +_damage = _this select 2; //Resulting level of damage for the selection. (Received damage) +_source = _this select 3; //The source unit that caused the damage. +_ammo = _this select 4; //Classname of the projectile that caused inflicted the damage. ("" for unknown, such as falling damage.) + +if ((group _unit) == (group _source)) then {_damage = (_damage/10)}; //Reduce friendly fire and collision damage. +//if (isNil {_unit getVariable "unithealth"}) then {_unit setVariable ["unithealth",[12000,0,false]]}; //Reset initial health stats if not found +_unithealth = _unit getVariable "unithealth"; // Retrieve unit's health statistics + +_scale = 300; +_deathType = "bled"; +_headHit = (_hit == "head_hit"); +if (_damage > 0.4) then { + //Calculate locational damage + call { + if (_hit == "legs") exitWith { + _partdamage = (_unithealth select 1) + (_damage/2); + _unithealth set [1,_partdamage]; //Record leg damage internally + if ((_partdamage > 0.99) && {!(_unithealth select 2)}) then { + _nul = _unit spawn {_this setHit["legs",1]}; //Break legs when enough damage taken + [nil,_unit,rSAY,["z_fracture_1",40]] call RE; + _unithealth set [2,true]; + }; + }; + if (_headHit) exitWith { + _scale = _scale + 500; + }; + }; + + //additional damage if attacker is a player + if (isPlayer _source) then { + _scale = _scale + 800; + if (_headHit) then { + if (_damage > 1.5) then { + _deathType = "shothead"; + _scale = 12000; //sufficient head shot damage causes instant death + } else { + _scale = _scale + 500; + }; + }; + }; + + //special death types + call { + if (_ammo isKindOf "GrenadeBase") exitWith { + _scale = _scale + 200; + if (_damage > 4) then { + _deathType = "explosion"; + _scale = 12000; //sufficient grenade damage causes instant death + }; + }; + if ((_ammo isKindOf "B_127x107_Ball") or (_ammo isKindOf "B_127x99_Ball")) exitWith { + _scale = _scale + 200; + if (_damage > 4) then { + _deathType = "shotheavy"; + _scale = 12000; //sufficient high calibre damage causes instant death + }; + }; + }; + + _blooddamage = (_damage * _scale); + _newbloodlevel = (_unithealth select 0) - _blooddamage; + _unithealth set [0,_newbloodlevel]; + + //Uncomment the following line to report blood damage to rpt log + //diag_log format ["DEBUG :: Unit %1 took %2 blood damage in part %3 by ammo %4 (Blood level: %5).",_unit,_blooddamage,_hit,_ammo,_newbloodlevel]; + + if (_newbloodlevel < 0) then { + _nul = [_unit,_source,_deathType] call DZAI_unitDeath; + //diag_log format ["DEBUG :: %1 was killed by %2 from %3m. Cause: %4.",_unit,_source,(_unit distance _source),_deathType]; + } else { + if (!(_unit getVariable ["unconscious",false]) && {((_damage > 2) || {((_damage > 0.5) && (_hit == "head_hit"))})}) then {_nul = [_unit,_hit] spawn DZAI_unconscious; _unit setVariable ["unconscious",true];}; + }; +}; + +0 diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_findKiller.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_findKiller.sqf new file mode 100755 index 0000000..711a28f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_findKiller.sqf @@ -0,0 +1,149 @@ +/* + fn_findKiller + + Description: If an AI unit is killed, surviving members of their group will aggressively pursue the killer for a set amount of time. After this amount of time has passed, the group will return to their patrol state. + + Last updated: 2:00 AM 7/1/2014 +*/ +private ["_unitGroup","_targetPlayer","_startPos","_chaseDistance"]; + +_targetPlayer = _this select 0; +_unitGroup = _this select 1; + +//Disable killer-finding for dynamic AI in hunting mode +if (_unitGroup getVariable ["seekActive",false]) exitWith {}; + +//If group is already pursuing player and target player has killed another group member, then extend pursuit time. +if (((_unitGroup getVariable ["pursuitTime",0]) > 0) && {((_unitGroup getVariable ["targetKiller",""]) == (name _targetPlayer))}) exitWith { + _unitGroup setVariable ["pursuitTime",((_unitGroup getVariable ["pursuitTime",0]) + 20)]; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Pursuit time +20 sec for Group %1 (Target: %2) to %3 seconds (fn_findKiller).",_unitGroup,name _targetPlayer,(_unitGroup getVariable ["pursuitTime",0]) - diag_tickTime]}; +}; + +_startPos = _unitGroup getVariable ["trigger",(getPosASL (leader _unitGroup))]; +_chaseDistance = _unitGroup getVariable ["patrolDist",250]; + +#define TRANSMIT_RANGE 50 //distance to broadcast radio text around target player +#define RECEIVE_DIST 150 //distance requirement to receive message from AI group leader + +if ((_startPos distance _targetPlayer) < _chaseDistance) then { + private ["_targetPlayerPos","_leader","_ableToChase","_debugMarkers","_marker"]; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Group %1 has entered pursuit state for 180 seconds. Target: %2. (fn_findKiller)",_unitGroup,_targetPlayer];}; + + //Temporarily cancel patrol state. + _unitGroup lockWP true; + + //Set pursuit timer + _unitGroup setVariable ["pursuitTime",diag_tickTime+180]; + _unitGroup setVariable ["targetKiller",name _targetPlayer]; + + _debugMarkers = ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}); + if (_debugMarkers) then { + _markername = format ["%1 Target",_unitGroup]; + if ((getMarkerColor _markername) != "") then {deleteMarker _markername; uiSleep 0.5;}; + _marker = createMarker [_markername,getPosASL _targetPlayer]; + _marker setMarkerText _markername; + _marker setMarkerType "Attack"; + _marker setMarkerColor "ColorRed"; + _marker setMarkerBrush "Solid"; + }; + + //Begin pursuit state. + _ableToChase = true; + while { + _ableToChase && + {alive _targetPlayer} && + {((_startPos distance _targetPlayer) < _chaseDistance)} && + {(!((vehicle _targetPlayer) isKindOf "Air"))} + } do { + if ((_unitGroup knowsAbout _targetPlayer) < 4) then {_unitGroup reveal [_targetPlayer,4]}; + _targetPlayerPos = ASLtoATL getPosASL _targetPlayer; + (units _unitGroup) doMove _targetPlayerPos; + (units _unitGroup) doTarget _targetPlayer; + (units _unitGroup) doFire _targetPlayer; + { + if (alive _x) then { + _x moveTo _targetPlayerPos + }; + } count (units _unitGroup); + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: AI group %1 in pursuit state. Pursuit time remaining: %2 seconds.",_unitGroup,(_unitGroup getVariable ["pursuitTime",0]) - diag_tickTime];}; + + if (DZAI_radioMsgs) then { + _leader = (leader _unitGroup); + if (((_targetPlayer distance _leader) <= RECEIVE_DIST) && {!(_leader getVariable ["unconscious",false])}) then { + private ["_nearbyUnits","_radioSpeech"]; + _nearbyUnits = _targetPlayerPos nearEntities [["LandVehicle","CAManBase"],TRANSMIT_RANGE]; + if ((_unitGroup getVariable ["GroupSize",0]) > 1) then { + { + if ((isPlayer _x)&& {((driver (vehicle _x)) hasWeapon "ItemRadio")}) then { + _speechIndex = (floor (random 3)); + _radioSpeech = call { + if (_speechIndex == 0) exitWith { + format ["[RADIO] %1 (Bandit Leader): %2 is nearby. That's our target!",(name _leader),(name _targetPlayer)] + }; + if (_speechIndex == 1) exitWith { + format ["[RADIO] %1 (Bandit Leader): Target looks like a %2. Find him!",(name _leader),(getText (configFile >> "CfgVehicles" >> (typeOf _targetPlayer) >> "displayName"))] + }; + if (_speechIndex == 2) exitWith { + format ["[RADIO] %1 (Bandit Leader): Target's distance is %2 meters. Search the area!",(name _leader),round (_leader distance _targetPlayer)] + }; + "" //Default radio message: empty string (this case should never happen) + }; + [_x,_radioSpeech] call DZAI_radioSend; + }; + } count _nearbyUnits; + } else { + _radioSpeech = "[RADIO] Your radio is picking up a signal nearby."; + { + if ((isPlayer _x)&& {((driver (vehicle _x)) hasWeapon "ItemRadio")}) then { + [_x,_radioSpeech] call DZAI_radioSend; + }; + } count _nearbyUnits; + }; + }; + }; + if (_debugMarkers) then { + _marker setMarkerPos (getPosASL _targetPlayer); + }; + uiSleep 19.5; + _ableToChase = ((!isNull _unitGroup) && {diag_tickTime < (_unitGroup getVariable ["pursuitTime",0])} && {(_unitGroup getVariable ["GroupSize",0]) > 0}); + if (_ableToChase && {isNull _targetPlayer}) then { + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Group %1 is attempting to re-establish contact with target %2.",_unitGroup,_unitGroup getVariable "targetKiller"];}; + _nearUnits = _targetPlayerPos nearEntities ["CAManBase",100]; + { + if ((isPlayer _x) && {((name _x) == _unitGroup getVariable "targetKiller")}) exitWith {_targetPlayer = _x}; + } forEach _nearUnits; + }; + uiSleep 0.5; + }; + + if !(isNull _unitGroup) then { + //End of pursuit state. Re-enable patrol state. + _unitGroup setVariable ["pursuitTime",0]; + _unitGroup setVariable ["targetKiller",""]; + _unitGroup lockWP false; + + if ((_unitGroup getVariable ["GroupSize",0]) > 0) then { + _waypoints = (waypoints _unitGroup); + _unitGroup setCurrentWaypoint (_waypoints call BIS_fnc_selectRandom2); + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Pursuit state ended for group %1. Returning to patrol state. (fn_findKiller)",_unitGroup];}; + + if (DZAI_radioMsgs) then { + _leader = (leader _unitGroup); + if (((_targetPlayer distance _leader) <= RECEIVE_DIST) && {((_unitGroup getVariable ["GroupSize",0]) > 1)} && {!(_leader getVariable ["unconscious",false])} && {!(isNull _targetPlayer)}) then { + private ["_nearbyUnits","_radioSpeech","_radioText"]; + _radioText = if (alive _targetPlayer) then {"%1 (Bandit Leader): Lost contact with target. Breaking off pursuit."} else {"%1 (Bandit Leader): Target has been eliminated."}; + _radioSpeech = format [_radioText,(name (leader _unitGroup))]; + _nearbyUnits = (getPosASL _targetPlayer) nearEntities [["LandVehicle","CAManBase"],TRANSMIT_RANGE]; + { + if ((isPlayer _x)&&{((driver (vehicle _x)) hasWeapon "ItemRadio")}) then { + [_x,_radioSpeech] call DZAI_radioSend; + }; + } count _nearbyUnits; + }; + }; + }; + }; + if (_debugMarkers) then { + deleteMarker _marker; + }; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_findspawnpos.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_findspawnpos.sqf new file mode 100755 index 0000000..44ad795 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_findspawnpos.sqf @@ -0,0 +1,23 @@ +//Finds a position that does not have a player within a certain distance. +private ["_spawnPos","_attempts","_continue","_spawnpool","_maxAttempts"]; + +_attempts = 0; +_continue = true; +_spawnPos = []; +_spawnpool = +_this; +_maxAttempts = ((count _spawnpool) min 5); //5: Maximum number of attempts +while {_continue && {(_attempts < _maxAttempts)}} do { + _index = floor (random (count _spawnpool)); + _spawnPosSelected = _spawnpool select _index; + if (({isPlayer _x} count (_spawnPosSelected nearEntities [["CAManBase","LandVehicle"],75])) == 0) then { + _spawnPos = _spawnPosSelected; + _continue = false; + } else { + _spawnpool set [_index,objNull]; + _spawnpool = _spawnpool - [objNull]; + _attempts = _attempts + 1; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Player found within 75 meters of chosen spawn position. (attempt %1/%2).",_attempts,_maxAttempts];}; + }; +}; + +_spawnPos diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_init_trigger.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_init_trigger.sqf new file mode 100755 index 0000000..40693b3 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_init_trigger.sqf @@ -0,0 +1,49 @@ +private["_trigger","_mode"]; + +_mode = _this select 0; +_trigger = _this select 1; + +_trigger setVariable ["isCleaning",false]; +_trigger setVariable ["GroupArray",(_this select 2)]; + +call { + if (_mode == 0) exitWith { + //Static spawns + _trigger setVariable ["patrolDist",(_this select 3)]; + _trigger setVariable ["equipType",(_this select 4)]; + _trigger setVariable ["locationArray",(_this select 5)]; + _trigger setVariable ["maxUnits",(_this select 6)]; + _trigger setVariable ["spawnChance",missionNamespace getVariable [format ["DZAI_spawnChance%1",(_this select 4)],1]]; + //DZAI_locations set [(count DZAI_locations),[(triggerText _trigger),(getPosASL _trigger),"NameLocal"]]; //Add helicopter patrol WP pointing to static spawn location + if (DZAI_debugLevel > 1) then {diag_log format["DZAI Extended Debug: Initialized static spawn at %1. GroupArray: %2, PatrolDist: %3. equipType: %4. %LocationArray %5 positions, MaxUnits %6.",triggerText _trigger,(_this select 2),(_this select 3),(_this select 4),count (_this select 5),(_this select 6)];}; + }; + if (_mode == 1) exitWith { + //Dynamic spawns + _location = createLocation ["Strategic",(getPosASL _trigger),600,600]; //Create temporary dynamic spawn blacklist area + _trigger setVariable ["triggerLocation",_location]; + if (DZAI_debugLevel > 1) then {diag_log format["DZAI Extended Debug: Initialized dynamic spawn at %1. GroupArray: %2.",triggerText _trigger,(_this select 2)];}; + }; + if (_mode == 2) exitWith { + //Random spawns + _triggerPos = getPosASL _trigger; + _location = _trigger getVariable ["triggerLocation",_triggerPos]; + if ((_triggerPos distance _location) > 0) then { + _location setPosition _triggerPos; + }; + if (DZAI_debugLevel > 1) then {diag_log format["DZAI Extended Debug: Initialized random spawn at %1. GroupArray: %2.",triggerText _trigger,(_this select 2)];}; + }; + if (_mode == 3) exitWith { + //Static spawns (custom) + _trigger setVariable ["patrolDist",(_this select 3)]; + _trigger setVariable ["equipType",(_this select 4)]; + _trigger setVariable ["locationArray",(_this select 5)]; + _trigger setVariable ["maxUnits",(_this select 6)]; + _trigger setVariable ["spawnChance",1]; + if (DZAI_debugLevel > 1) then {diag_log format["DZAI Extended Debug: Initialized custom spawn at %1. GroupArray: %2, PatrolDist: %3. equipType: %4. %LocationArray %5 positions, MaxUnits %6.",triggerText _trigger,(_this select 2),(_this select 3),(_this select 4),count (_this select 5),(_this select 6)];}; + }; +}; + +_trigger setVariable ["triggerStatements",+(triggerStatements _trigger)]; +_trigger setVariable ["initialized",true]; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_refreshmarker.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_refreshmarker.sqf new file mode 100755 index 0000000..0319993 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_refreshmarker.sqf @@ -0,0 +1,17 @@ +private ["_trigger","_marker"]; +_trigger = _this select 0; + +_marker = str (_trigger); +if ((getMarkerColor _marker) == "") then { + _marker = createMarker [_marker, (getPosASL _trigger)]; + _marker setMarkerType "Defend"; + _marker setMarkerBrush "Solid"; +}; + +_marker setMarkerText "STATIC TRIGGER (ACTIVE)"; +_marker setMarkerColor "ColorRed"; + +while {!((getMarkerColor _marker) in ["ColorGreen",""])} do { + _marker setMarkerPos (getMarkerPos _marker); + uiSleep 30; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_seekPlayer.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_seekPlayer.sqf new file mode 100755 index 0000000..ce7da58 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_seekPlayer.sqf @@ -0,0 +1,135 @@ +/* + DZAI_dyn_huntPlayer + + Description: Used for dynamically spawned AI. Creates a MOVE waypoint directing AI to a random player's position, then uses BIN_taskPatrol to create a circular patrol path around initial spawn position. + + Last updated: 2:12 AM 1/11/2014 +*/ + +#define TRANSMIT_RANGE 50 //distance to broadcast radio text around target player (target player will also recieve messages) +#define SEEK_RANGE 450 //distance to chase player from initial group spawn location + +private ["_unitGroup","_spawnPos","_waypoint","_patrolDist","_statement","_targetPlayer","_triggerPos","_leader","_nearbyUnits","_radioSpeech","_radioText","_ableToChase"]; + +_unitGroup = _this select 0; +_spawnPos = _this select 1; +_patrolDist = _this select 2; +_targetPlayer = _this select 3; +_triggerPos = _this select 4; + +_unitGroup setVariable ["seekActive",true]; + +_waypoint = [_unitGroup,0]; //Group will move to waypoint index 0 (first waypoint). +_waypoint setWaypointType "MOVE"; +_waypoint setWaypointCompletionRadius 35; +_waypoint setWaypointTimeout [10,12,15]; +_waypoint setWPPos (ASLtoATL getPosASL _targetPlayer); +_unitGroup setCurrentWaypoint _waypoint; + +if (DZAI_radioMsgs) then { + _leader = (leader _unitGroup); + if (((_unitGroup getVariable ["GroupSize",0]) > 1) && {!(_leader getVariable ["unconscious",false])}) then { + _nearbyUnits = (getPosASL _targetPlayer) nearEntities [["LandVehicle","CAManBase"],TRANSMIT_RANGE]; + { + if (isPlayer _x) then { + if ((driver (vehicle _x)) hasWeapon "ItemRadio") then { + _radioSpeech = [ + "[RADIO] You hear static coming from your Radio...", + "[RADIO] Your Radio is picking up a signal..." + ] call BIS_fnc_selectRandom2; + [_x,_radioSpeech] call DZAI_radioSend; + } else { + if (0.10 call DZAI_chance) then { + _radioSpeech = [ + "You feel as if you are being watched...", + "You feel as if you are being followed...", + "You feel something isn't quite right..." + ] call BIS_fnc_selectRandom2; + [_x,_radioSpeech] call DZAI_radioSend; + }; + }; + } + } count _nearbyUnits; + }; +}; +uiSleep 10; + +//Begin hunting phase +_ableToChase = true; +while { + _ableToChase && + {alive _targetPlayer} && + {((_targetPlayer distance _triggerPos) < SEEK_RANGE)} +} do { + if !(_unitGroup getVariable ["inPursuit",false]) then { + _leader = (leader _unitGroup); + if (((getWPPos [_unitGroup,0]) distance _targetPlayer) > 25) then { + _waypoint setWPPos (ASLtoATL getPosASL _targetPlayer); + _unitGroup setCurrentWaypoint _waypoint; + _unitGroup setFormDir ([_leader,_targetPlayer] call BIS_fnc_dirTo); + _unitGroup reveal [_targetPlayer,4]; + }; + (units _unitGroup) doTarget _targetPlayer; + (units _unitGroup) doFire _targetPlayer; + if (DZAI_radioMsgs) then { + //Warn player of AI bandit presence if they have a radio. + if (((_unitGroup getVariable ["GroupSize",0]) > 1) && {!(_leader getVariable ["unconscious",false])} && {(_leader distance _targetPlayer) < 150}) then { + _nearbyUnits = (ASLtoATL getPosASL _targetPlayer) nearEntities [["LandVehicle","CAManBase"],TRANSMIT_RANGE]; + + { + if ((isPlayer _x)&&{((driver (vehicle _x)) hasWeapon "ItemRadio")}) then { + _index = (floor (random 10)); + _radioSpeech = call { + if (_index == 0) exitWith {format ["[RADIO] %1 (Bandit Leader): Target's name is %2. Find him!",(name _leader),(name _targetPlayer)]}; + if (_index == 1) exitWith {format ["[RADIO] %1 (Bandit Leader): Target is a %2. Find him!",(name _leader),(getText (configFile >> "CfgVehicles" >> (typeOf _targetPlayer) >> "displayName"))]}; + if (_index == 2) exitWith {format ["[RADIO] %1 (Bandit Leader): Target's distance is %2 meters. Find him!",(name _leader),round (_leader distance _targetPlayer)]}; + if (_index > 2) exitWith {"[RADIO] ??? (Bandit): .... (static)"}; + "[RADIO] ??? : ..." + }; + //diag_log format ["DEBUG :: %1",_radioSpeech]; + [_x,_radioSpeech] call DZAI_radioSend; + }; + } count _nearbyUnits; + }; + }; + }; + uiSleep 19.5; + _ableToChase = ((!isNull _unitGroup) && {(_unitGroup getVariable ["GroupSize",0]) > 0}); + if (_ableToChase && {isNull _targetPlayer}) then { + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Group %1 is attempting to search for a new target.",_unitGroup];}; + _nearUnits = (leader _unitGroup) nearEntities ["CAManBase",200]; + { + if (isPlayer _x) exitWith { + _targetPlayer = _x; + _unitGroup reveal [_targetPlayer,4]; + }; + } forEach _nearUnits; + }; + uiSleep 0.5; +}; + +if ((isNull _unitGroup) or {(_unitGroup getVariable ["GroupSize",0]) < 1}) exitWith {}; +if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Group %1 has exited hunting phase. Moving to patrol phase. (fn_seekPlayer)",_unitGroup];}; + +//Begin patrol phase +_waypoint setWaypointStatements ["true","if ((random 1) < 0.50) then { group this setCurrentWaypoint [(group this), (floor (random (count (waypoints (group this)))))];};"]; +0 = [_unitGroup,_triggerPos,_patrolDist] spawn DZAI_BIN_taskPatrol; +_unitGroup setVariable ["seekActive",nil]; + +uiSleep 5; + +if (DZAI_radioMsgs) then { + _leader = (leader _unitGroup); + if (((_unitGroup getVariable ["GroupSize",0]) > 1) && {!(_leader getVariable ["unconscious",false])} && {!(isNull _targetPlayer)}) then { + _nearbyUnits = (getPosASL _targetPlayer) nearEntities [["LandVehicle","CAManBase"],TRANSMIT_RANGE]; + { + if ((isPlayer _x)&&{((driver (vehicle _x)) hasWeapon "ItemRadio")}) then { + _radioText = if (alive _targetPlayer) then {"%1 (Bandit Leader): We've lost contact with the target. Let's move out."} else {"%1 (Bandit Leader): The target has been killed."}; + _radioSpeech = format [_radioText,(name _leader)]; + [_x,_radioSpeech] call DZAI_radioSend; + }; + } count _nearbyUnits; + }; +}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_selectRandom.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_selectRandom.sqf new file mode 100755 index 0000000..1b52ceb --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_selectRandom.sqf @@ -0,0 +1,22 @@ +//scriptName "Functions\arrays\fn_selectRandom.sqf"; +/************************************************************ + Random Select + By Andrew Barron + +Parameters: array + +This returns a randomly selected element from the passed array. + +Example: [1,2,3] call BIS_fnc_selectRandom +Returns: 1, 2, or 3 +************************************************************/ + +private "_ret"; + +if(count _this > 0) then +{ + _ret = count _this; //number of elements in the array + _ret = floor (random _ret); //floor it first + _ret = _this select _ret; //get the element, return it +}; +_ret \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_selectRandomWeighted.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_selectRandomWeighted.sqf new file mode 100755 index 0000000..f7233b6 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_selectRandomWeighted.sqf @@ -0,0 +1,60 @@ +//scriptName "Functions\arrays\fn_selectRandomWeighted.sqf"; +/* + File: fn_selectRandomWeighted.sqf + Author: Joris-Jan van 't Land + + Description: + Function to select a random item from an array, taking into account item weights. + The weights should be Numbers between 0 and 1, with a maximum precision of hundreds. + + Parameter(s): + _this select 0: source Array (Array of Any Value) + _this select 1: weights (Array of Number) + + Returns: + Any Value selected item + + TODO: + [*] Algorithm is inefficient? +*/ + +private ["_array", "_weights","_index","_weighted","_i"]; +_array = _this select 0; +_weights = _this select 1; +//_amount = if ((count _this) > 2) then {_this select 2} else {1}; + +//Parameter validation. +if ((typeName _array) != (typeName [])) exitWith {debugLog "Log: [selectRandomWeighted] Array (0) must be an Array!"; nil}; +if ((typeName _weights) != (typeName [])) exitWith {debugLog "Log: [selectRandomWeighted] Weights (1) must be an Array!"; nil}; +if ((count _array) > (count _weights)) exitWith {debugLog "Log: [selectRandomWeighted] There must be at least as many elements in Weights (1) as there are in Array (0)!"; nil}; + +//Created weighted array of indices. +private ["_weighted"]; +_weighted = []; +for "_i" from 0 to ((count _weights) - 1) do +{ + private ["_weight"]; + _weight = _weights select _i; + + //Ensure the weight is a Number. + //If it's not, set weight to 0 to exclude it. + if ((typeName _weight) != (typeName 0)) then {debugLog "Log: [selectRandomWeighted] Weights should be Numbers; weight set to 0!"; _weight = 0}; + + //The weight should be a Number between 0 and 1. + if (_weight < 0) then {debugLog "Log: [selectRandomWeighted] Weights should be more than or equal to 0; weight set to 0!"; _weight = 0}; + //if (_weight > 1) then {debugLog "Log: [selectRandomWeighted] Weights should be less than or equal to 1; weight set to 1!"; _weight = 1}; + + //Normalize the weight for a precision of hundreds. + _weight = round(_weight * 100); + + for "_k" from 0 to (_weight - 1) do + { + _weighted = _weighted + [_i]; + }; +}; + +//Randomly select an index from the weighted array and therefore an element. +private ["_index"]; +_index = _weighted call BIS_fnc_selectRandom2; + +_array select _index \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_skillboost.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_skillboost.sqf new file mode 100755 index 0000000..82f1e0b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_skillboost.sqf @@ -0,0 +1,14 @@ +{ + _unit = _x; + if (alive _x) exitWith { + { + _skillLevel = _unit skill _x; + _skillLevel = (_skillLevel * 1.1) min 1; + _unit setSkill [_x,_skillLevel]; + uiSleep 0.01; + } count ["aimingAccuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","general"]; + _bandageAmount = _x getVariable ["bandageAmount",0]; + _x setVariable ["bandageAmount",(_bandageAmount+1)]; + }; + uiSleep 0.05; +} forEach (units _this); diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_spawnGroup.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_spawnGroup.sqf new file mode 100755 index 0000000..ecdcb77 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/fn_spawnGroup.sqf @@ -0,0 +1,88 @@ + /* + fnc_createGroup + + Description: Spawns a group of AI units. Used for spawning of DZAI's static, dynamic, and custom AI units. + + _totalAI = Number of AI units to spawn in the group + _spawnPos: Position to create AI unit. + _trigger: The trigger object responsible for spawning the AI unit. + _weapongrade: weapongrade to be used for generating equipment. Influences weapon quality and skill level. + + Last updated: 10:33 PM 5/14/2014 + +*/ +private ["_totalAI","_spawnPos","_unitGroup","_trigger","_attempts","_baseDist","_dummy","_weapongrade"]; +if (!isServer) exitWith {}; + +_totalAI = _this select 0; +_spawnPos = _this select 2; +_trigger = _this select 3; +_weapongrade = _this select 4; + +_pos = []; +_attempts = 0; +_baseDist = 25; + +while {((count _pos) < 1) && {(_attempts < 3)}} do { + _pos = _spawnPos findEmptyPosition [0.5,_baseDist,"Misc_cargo_cont_small_EP1"]; + if ((count _pos) > 1) then { + _pos = _pos isFlatEmpty [0,0,0.75,5,0,false,objNull]; + }; + if ((count _pos) < 1) then { + _baseDist = (_baseDist + 25); _attempts = (_attempts + 1); + if (_attempts == 3) then { + _pos = [_trigger,random (_trigger getVariable ["patrolDist",125]),random(360),0] call SHK_pos; + _attempts = (_attempts + 1); + }; + }; +}; +_pos set [2,0]; + +if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Found spawn position at %3 meters away at position %1 after %2 retries.",_pos,_attempts,(_pos distance _spawnPos)]}; + +_unitGroup = if (isNull (_this select 1)) then {[] call DZAI_createGroup} else {_this select 1}; +if (({isPlayer _x} count (_pos nearEntities ["CAManBase",100])) == 0) then { + _unitGroup setCombatMode "RED"; +} else { + _unitGroup setCombatMode "BLUE"; + _nul = _unitGroup spawn { + uiSleep 10; + _this setCombatMode "RED"; //Activate AI group hostility after 5 seconds + }; +}; + +for "_i" from 1 to _totalAI do { + private ["_type","_unit"]; + _type = DZAI_BanditTypes call BIS_fnc_selectRandom2; // Select skin of AI unit + _unit = _unitGroup createUnit [_type, _pos, [], 0, "FORM"]; // Spawn the AI unit + _unit setPos _pos; + [_unit] joinSilent _unitGroup; // Add AI unit to group + + _unit setVariable ["bodyName",(name _unit)]; // Set unit body name (will be PVed upon death). + _unit setVariable ["unithealth",[(DZAI_baseBlood + (random DZAI_bonusBlood)),0,false]]; // Set unit health (blood, legs health, legs broken) + _unit setVariable ["unconscious",false]; // Set unit consciousness + _unit addEventHandler [DZAI_healthType, DZAI_healthStatements]; + 0 = [_unit, _weapongrade] call DZAI_setupLoadout; // Assign unit loadout + 0 = [_unit, _weapongrade] call DZAI_setSkills; // Set AI skill + if (DZAI_weaponNoise) then {_unit addEventHandler ["Fired", {_this call DZAI_aiFired;}];}; // Unit firing causes zombie aggro in the area, like player. + if (DZAI_debugLevel > 1) then {diag_log format["DZAI Extended Debug: Spawned AI Type %1 with weapongrade %2 for group %3 (fnc_createGroup).",_type,_weapongrade,_unitGroup];}; +}; + +//Delete dummy if it exists, and clear group's "dummy" variable. +_dummy = _unitGroup getVariable "dummyUnit"; +if (!isNil "_dummy") then { + deleteVehicle _dummy; + _unitGroup setVariable ["dummyUnit",nil]; + if (DZAI_debugLevel > 1) then {diag_log format["DZAI Extended Debug: Deleted 1 dummy AI unit for group %1. (fnc_createGroup)",_unitGroup];}; +}; + +_unitGroup selectLeader ((units _unitGroup) select 0); +_unitGroup setVariable ["trigger",_trigger]; +_unitGroup setVariable ["GroupSize",_totalAI]; +_unitGroup setVariable ["weapongrade",_weapongrade]; +if (isNull _trigger) then {_unitGroup setVariable ["spawnPos",_spawnPos]}; //If group was spawned directly by scripting instead of a trigger object, record spawn position instead of trigger position as anchoring point +//(DZAI_numAIUnits + _totalAI) call DZAI_updateUnitCount; +0 = [_unitGroup,_weapongrade] spawn DZAI_autoRearm_group; //start group-level manager +_unitGroup setFormDir (random 360); + +_unitGroup diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/group_manager.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/group_manager.sqf new file mode 100755 index 0000000..057389b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/group_manager.sqf @@ -0,0 +1,350 @@ +private ["_unitGroup","_weapongrade","_vehicle","_lastRearmTime","_useLaunchers","_isArmed","_debugMarkers","_marker","_marker2","_antistuckTime","_antistuckPos","_lastReinforceTime","_vehicleMoved"]; + +if (!isServer) exitWith {}; + +_unitGroup = _this select 0; +_weapongrade = _this select 1; + +if (_unitGroup getVariable ["rearmEnabled",false]) exitWith {}; +_unitGroup setVariable ["rearmEnabled",true]; + +_vehicle = if ((_unitGroup getVariable ["unitType",""]) in ["static","dynamic"]) then {objNull} else {(vehicle (leader _unitGroup))}; +_useLaunchers = (((count DZAI_launcherTypes) > 0) && {(_weapongrade in DZAI_launcherLevels)}); +_isArmed = _vehicle getVariable ["isArmed",false]; +_antistuckPos = (getWPPos [_unitGroup,(currentWaypoint _unitGroup)]); +if (isNil {_unitGroup getVariable "GroupSize"}) then {_unitGroup setVariable ["GroupSize",(count (units _unitGroup))]}; +_vehicleMoved = true; + +//set up debug variables +_debugMarkers = ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}); +_marker = ""; +_marker2 = ""; + +//Set up timer variables +_lastRearmTime = diag_tickTime; +_antistuckTime = diag_tickTime + 900; +_lastReinforceTime = diag_tickTime + 600; + +//Set up individual group units +{ + if (isNil {_x getVariable "unithealth"}) then {_x setVariable ["unithealth",[((9000 + (random 3000)) min 12000),0,false]]}; + if (isNil {_x getVariable "unconscious"}) then {_x setVariable ["unconscious",false]}; + _x setVariable ["bandageAmount",((_weapongrade + 1) min 3)]; + _x setVariable ["lastBandage",0]; + _x setVariable ["needsHeal",false]; + _x setVariable ["rearmEnabled",true]; //prevent DZAI_autoRearm loop from executing on unit. + _loadout = _x getVariable "loadout"; + + if (isNil "_loadout") then { + _weapon = primaryWeapon _x; + _magazine = getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines") select 0; + _loadout = [[_weapon],[_magazine]]; + _x setVariable ["loadout",_loadout]; + }; + + if ((getNumber (configFile >> "CfgMagazines" >> ((_loadout select 1) select 0) >> "count")) <= 8) then {_x setVariable ["extraMag",true]}; + + if (_useLaunchers) then { + _maxLaunchers = (DZAI_launchersPerGroup min _weapongrade); + if (_forEachIndex < _maxLaunchers) then { + _launchWeapon = DZAI_launcherTypes call BIS_fnc_selectRandom2; + _launchAmmo = [] + getArray (configFile >> "CfgWeapons" >> _launchWeapon >> "magazines") select 0; + _x addMagazine _launchAmmo; (_loadout select 1) set [1,_launchAmmo]; + _x addWeapon _launchWeapon; (_loadout select 0) set [1,_launchWeapon]; + }; + }; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Unit %1 loadout: %2. Weapongrade %3. Blood: %4.",_x,_x getVariable ["loadout",[]],_weapongrade,((_x getVariable ["unithealth",[12000,0,false]]) select 0)];}; +} forEach (units _unitGroup); + +if (_debugMarkers) then { + _markername = format ["%1-1",_unitGroup]; + if ((getMarkerColor _markername) != "") then {deleteMarker _markername; uiSleep 0.5}; //Delete the previous marker if it wasn't deleted for some reason. + _marker = createMarker [_markername,getPosASL (leader _unitGroup)]; + _marker setMarkerType "Attack"; + _marker setMarkerBrush "Solid"; + _marker setMarkerColor "ColorBlack"; + + if (isNull _vehicle) then { + _marker setMarkerText format ["%1 (AI L%2)",_unitGroup,_weapongrade]; + } else { + _marker setMarkerText format ["%1 (AI L%2 %3)",_unitGroup,_weapongrade,(typeOf (vehicle (leader _unitGroup)))]; + }; + + _markername2 = format ["%1-2",_unitGroup]; + if ((getMarkerColor _markername2) != "") then {deleteMarker _markername2; uiSleep 0.5;}; //Delete the previous marker if it wasn't deleted for some reason. + _marker2 = createMarker [_markername2,(getWPPos [_unitGroup,(currentWaypoint _unitGroup)])]; + _marker2 setMarkerText format ["%1 WP",_unitGroup]; + _marker2 setMarkerType "Waypoint"; + _marker2 setMarkerColor "ColorBlue"; + _marker2 setMarkerBrush "Solid"; + + { + _x spawn { + private ["_mark","_markname"]; + _markname = str(_this); + if ((getMarkerColor _markname) != "") then {deleteMarker _markname; uiSleep 0.5}; + _mark = createMarker [_markname,getPosASL _this]; + _mark setMarkerShape "ELLIPSE"; + _mark setMarkerType "Dot"; + _mark setMarkerColor "ColorRed"; + _mark setMarkerBrush "SolidBorder"; + _mark setMarkerSize [3,3]; + waitUntil {uiSleep 15; (!(alive _this))}; + //diag_log format ["DEBUG :: Deleting unit marker %1.",_mark]; + deleteMarker _mark; + }; + uiSleep 0.1; + } count (units _unitGroup); +} else { + _marker = nil; + _marker2 = nil; +}; + +//Main loop +while {(!isNull _unitGroup) && {(_unitGroup getVariable ["GroupSize",-1]) > 0}} do { + private ["_unitType"]; + _unitType = (_unitGroup getVariable ["unitType",""]); + + call { + //Zed hostility check + if (_unitType in ["static","dynamic"]) exitWith { + if (DZAI_zombieEnemy) then { + if (_unitGroup getVariable ["detectReady",true]) then { + _unitGroup setVariable ["detectReady",false]; + _nul = _unitGroup spawn { + _unitGroup = _this; + if !(isNull _unitGroup) then { + _detectRange = if ((_unitGroup getVariable ["pursuitTime",0]) == 0) then {DZAI_zDetectRange} else {DZAI_zDetectRange/2}; //Reduce detection range of new zombies while searching for killer unit + _leader = (leader _unitGroup); + if (alive _leader) then { + _nearbyZeds = _leader nearEntities ["zZombie_Base",_detectRange]; + _hostileZedsNew = []; + { + if (rating _x > -30000) then { + _hostileZedsNew set [count _hostileZedsNew,_x]; + }; + if ((_forEachIndex % 5) == 0) then {uiSleep 0.05}; + } forEach _nearbyZeds; + if ((count _hostileZedsNew) > 0) then { + DZAI_ratingModify = [_hostileZedsNew,-30000]; + (owner (_hostileZedsNew select 0)) publicVariableClient "DZAI_ratingModify"; + }; + }; + _unitGroup setVariable ["detectReady",true]; + }; + }; + }; + }; + }; + //If any units have left vehicle then allow re-entry + if (_unitType in ["land","landcustom"]) exitWith { + if (alive _vehicle) then { + if (_unitGroup getVariable ["regrouped",true]) then { + if (({(_x distance _vehicle) > 175} count (assignedCargo _vehicle)) > 0) then { + _unitGroup setVariable ["regrouped",false]; + [_unitGroup,_vehicle] call DZAI_vehRegroup; + }; + }; + }; + }; + if (_unitType == "air") exitWith { + if ((alive _vehicle) && {!(_vehicle getVariable ["heli_disabled",false])}) then { + if (((diag_tickTime - _lastReinforceTime) > 900) && {((count DZAI_reinforcePlaces) > 0)}) then { + [_unitGroup,_vehicle] call DZAI_heliReinforce; + _lastReinforceTime = diag_tickTime; + }; + }; + }; + }; + + { + //Check infantry-type units + if (((vehicle _x) == _x) && {!(_x getVariable ["unconscious",false])} && {_x getVariable ["canCheckUnit",true]}) then { + _x setVariable ["canCheckUnit",false]; + _nul = _x spawn { + if (!alive _this) exitWith {}; + _unit = _this; + _loadout = _unit getVariable ["loadout",[[],[]]]; + if (!isNil "_loadout") then { + _currentMagazines = (magazines _unit); + for "_i" from 0 to ((count (_loadout select 0)) - 1) do { + if (((_unit ammo ((_loadout select 0) select _i)) == 0) || {!((((_loadout select 1) select _i) in _currentMagazines))}) then { + _unit removeMagazines ((_loadout select 1) select _i); + _unit addMagazine ((_loadout select 1) select _i); + if ((_i == 0) && {_unit getVariable ["extraMag",false]}) then {_unit addMagazine ((_loadout select 1) select _i)}; + }; + }; + }; + + _bandages = _unit getVariable ["bandageAmount",0]; + if (_bandages > 0) then { + _health = _unit getVariable ["unithealth",[12000,0,false]]; + if (_unit getVariable ["needsHeal",false]) then { + _nearestEnemy = _unit findNearestEnemy _unit; + _isSafe = ((_unit distance _nearestEnemy) > 35); + if (_isSafe) then { + _bandages = _bandages - 1; + _unit setVariable ["bandageAmount",_bandages]; + {_unit disableAI _x} forEach ["TARGET","MOVE","FSM"]; + _unit playActionNow "Medic"; + _healTimes = 0; + while {(!(_unit getVariable ["unconscious",false])) && {(_healTimes < 3)}} do { + uiSleep 3; + if (!(_unit getVariable ["unconscious",false])) then { + _health set [0,(((_health select 0) + (DZAI_unitHealAmount/3)) min 12000)]; + _healTimes = _healTimes + 1; + if ((alive _unit) && {(_healTimes == 3)}) then { + _health set [1,0]; + _health set [2,false]; + _unit setHit ["legs",0]; + }; + }; + }; + _unit setVariable ["lastBandage",diag_tickTime]; + _unit setVariable ["needsHeal",false]; + uiSleep 1.75; + {_unit enableAI _x} forEach ["TARGET","MOVE","FSM"]; + }; + } else { + _lowblood = ((_health select 0) < DZAI_lowBloodLevel); + _brokenbones = (_health select 2); + if ((_lowblood or _brokenbones) && {((diag_tickTime - (_unit getVariable ["lastBandage",diag_tickTime])) > 60)}) then { + _unit setVariable ["needsHeal",true]; + }; + }; + }; + _unit setVariable ["canCheckUnit",true]; + }; + }; + uiSleep 0.1; + } forEach (units _unitGroup); + + //Vehicle ammo/fuel check + if (alive _vehicle) then { //If _vehicle is objNull (if no vehicle was assigned to the group) then nothing in this bracket should be executed + if ((_isArmed) && {someAmmo _vehicle}) then { //Note: someAmmo check is not reliable for vehicles with multiple turrets + _lastRearmTime = diag_tickTime; //Reset rearm timestamp if vehicle still has some ammo + } else { + if ((diag_tickTime - _lastRearmTime) > 180) then { //If ammo is depleted, wait 3 minutes until rearm is possible. + _vehicle setVehicleAmmo 1; //Rearm vehicle. Rearm timestamp will be reset durng the next loop cycle. + }; + }; + if ((fuel _vehicle) < 0.25) then {_vehicle setFuel 1}; + }; + + //Antistuck detection + if ((diag_tickTime - _antistuckTime) > 900) then { + _wpPos = (getWPPos [_unitGroup,(currentWaypoint _unitGroup)]); + _unitType = (_unitGroup getVariable ["unitType",""]); + call { + if (_unitType in ["static","aircustom","landcustom"]) exitWith { + //Static and custom air/land vehicle patrol anti stuck routine + if ((_antistuckPos distance _wpPos) == 0) then { + _currentWP = (currentWaypoint _unitGroup); + _allWP = (waypoints _unitGroup); + _nextWP = _currentWP + 1; + if ((count _allWP) == _nextWP) then {_nextWP = 1}; //Cycle back to first added waypoint if group is currently on last waypoint. + _unitGroup setCurrentWaypoint [_unitGroup,_nextWP]; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Antistuck detection triggered for AI group %1. Forcing next waypoint.",_unitGroup];}; + _antistuckTime = diag_tickTime + 300; + } else { + _antistuckPos = _wpPos; + _antistuckTime = diag_tickTime; + }; + }; + if (_unitType == "air") exitWith { + //Mapwide air vehicle patrol anti stuck routine + if ((canMove _vehicle) && {(_antistuckPos distance _wpPos) < 300}) then { + _tooClose = true; + _wpSelect = []; + while {_tooClose} do { + _wpSelect = (DZAI_locations call BIS_fnc_selectRandom2) select 1; + if (((waypointPosition [_unitGroup,0]) distance _wpSelect) < 300) then { + _tooClose = false; + } else { + uiSleep 0.1; + }; + }; + _wpSelect = [_wpSelect,50+(random 900),(random 360),1] call SHK_pos; + [_unitGroup,0] setWPPos _wpSelect; + [_unitGroup,1] setWPPos _wpSelect; + _vehicle doMove _wpSelect; + _antistuckPos = _wpSelect; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Antistuck detection triggered for AI vehicle %1 (Group: %2). Forcing next waypoint.",(typeOf _vehicle),_unitGroup];}; + _antistuckTime = diag_tickTime + 300; + } else { + _antistuckPos = _wpPos; + _antistuckTime = diag_tickTime; + }; + }; + if (_unitType == "land") exitWith { + //Mapwide land vehicle patrol anti stuck routine + if ((_antistuckPos distance _wpPos) < 300) then { + if (_vehicleMoved && {canMove _vehicle}) then { + _tooClose = true; + _wpSelect = []; + while {_tooClose} do { + _wpSelect = (DZAI_locationsLand call BIS_fnc_selectRandom2) select 1; + if (((waypointPosition [_unitGroup,0]) distance _wpSelect) < 300) then { + _tooClose = false; + } else { + uiSleep 0.1; + }; + }; + _wpSelect = [_wpSelect,random(300),random(360),0,[1,300]] call SHK_pos; + [_unitGroup,0] setWPPos _wpSelect; + _antistuckPos = _wpSelect; + _vehicleMoved = false; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Antistuck prevention triggered for AI vehicle %1 (Group: %2). Forcing next waypoint.",(typeOf _vehicle),_unitGroup];}; + _antistuckTime = diag_tickTime + 300; + } else { + if (!(_vehicle getVariable ["veh_disabled",false])) then { + [_vehicle] call DZAI_vehDestroyed; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: AI vehicle %1 (Group: %2) is immobilized. Respawning vehicle patrol group.",(typeOf _vehicle),_unitGroup];}; + }; + }; + } else { + _antistuckPos = _wpPos; + if (!_vehicleMoved) then { + _vehicleMoved = true; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Antistuck check passed for AI vehicle %1 (Group: %2). Reset vehicleMoved flag.",(typeOf _vehicle),_unitGroup];}; + }; + _antistuckTime = diag_tickTime; + }; + }; + }; + }; + + if (_debugMarkers) then { + _marker setMarkerPos (getPosASL (vehicle (leader _unitGroup))); + _marker2 setMarkerPos (getWPPos [_unitGroup,(currentWaypoint _unitGroup)]); + { + if (alive _x) then { + (str (_x)) setMarkerPos (getPosASL _x); + }; + if ((_forEachIndex % 3) == 0) then {uiSleep 0.05}; + } forEach (units _unitGroup); + }; + + //diag_log format ["DEBUG: Group Manager cycle time for group %1: %2 seconds.",_unitGroup,(diag_tickTime - _debugStartTime)]; + if ((_unitGroup getVariable ["GroupSize",0]) > 0) then {uiSleep 15}; +}; + +_unitGroup setVariable ["rearmEnabled",false]; //allow group manager to run again on group respawn. + +if (isEngineOn _vehicle) then {_vehicle engineOn false}; + +if (_debugMarkers) then { + deleteMarker _marker; + deleteMarker _marker2; +}; + +//Wait until group is either respawned or marked for deletion. A dummy unit should be created to preserve group. +while {(_unitGroup getVariable ["GroupSize",-1]) == 0} do { + uiSleep 5; +}; + +//GroupSize value of -1 marks group for deletion +if ((_unitGroup getVariable ["GroupSize",-1]) == -1) then { + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Deleting %2 group %1.",_unitGroup,(_unitGroup getVariable ["unitType","unknown"])]}; + _unitGroup call DZAI_deleteGroup; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_airlanding.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_airlanding.sqf new file mode 100755 index 0000000..937913e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_airlanding.sqf @@ -0,0 +1,65 @@ +/* + DZAI_airLanding + + Description: Called when AI air vehicle performs a landing. Converts onboard AI crew into static-type units. + + Last updated: 12:11 AM 6/17/2014 +*/ + +private ["_helicopter","_trigger","_heliPos","_unitsAlive","_unitGroup","_waypointCount"]; +_helicopter = _this select 0; + +if (_helicopter getVariable ["heli_disabled",false]) exitWith {}; +_helicopter setVariable ["heli_disabled",true]; +{_helicopter removeAllEventHandlers _x} count ["HandleDamage","GetOut","Killed"]; +_unitGroup = _helicopter getVariable ["unitGroup",(group (_this select 2))]; +[_unitGroup,_helicopter] call DZAI_respawnAIVehicle; + +_unitsAlive = {alive _x} count (units _unitGroup); +if (_unitsAlive > 0) then { + //Convert helicrew units to ground units + { + if (alive _x) then { + _health = _x getVariable ["unithealth",[]]; + if ((_health select 1) > 0) then { + _health set [1,0]; //If unit has any leg damage, heal it + _health set [2,false]; + _x setHit["legs",0]; + }; + unassignVehicle _x; + }; + } count (units _unitGroup); + for "_i" from ((count (waypoints _unitGroup)) - 1) to 0 step -1 do { + deleteWaypoint [_unitGroup,_i]; + }; + + _heliPos = ASLtoATL getPosASL _helicopter; + 0 = [_unitGroup,_heliPos,75] spawn DZAI_BIN_taskPatrol; + //(DZAI_numAIUnits + _unitsAlive) call DZAI_updateUnitCount; + + //Create area trigger + _trigger = createTrigger ["EmptyDetector",_heliPos]; + _trigger setTriggerArea [600, 600, 0, false]; + _trigger setTriggerActivation ["ANY", "PRESENT", true]; + _trigger setTriggerTimeout [5, 5, 5, true]; + _trigger setTriggerText (format ["HeliLandingArea_%1",mapGridPosition _helicopter]); + _trigger setTriggerStatements ["{isPlayer _x} count thisList > 0;","","0 = [thisTrigger] spawn fnc_despawnBandits;"]; + + //Set required trigger variables and begin despawn + _trigger setVariable ["isCleaning",false]; + _trigger setVariable ["GroupArray",[_unitGroup]]; + _trigger setVariable ["equipType",DZAI_heliUnitLevel]; + _trigger setVariable ["maxUnits",[_unitsAlive,0]]; + _trigger setVariable ["respawn",false]; //landed AI units should never respawn + _trigger setVariable ["permadelete",true]; //units should be permanently despawned + [_trigger,"DZAI_staticTriggerArray"] call DZAI_updateSpawnCount; + 0 = [_trigger] spawn fnc_despawnBandits; + + _unitGroup setVariable ["unitType","static"]; //convert units to static type + _unitGroup setVariable ["trigger",_trigger]; //attach trigger object reference to group + _unitGroup setVariable ["GroupSize",_unitsAlive]; //set group size + _unitGroup setBehaviour "AWARE"; + _unitGroup allowFleeing 0; + + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: AI helicopter %1 landed at %2.",typeOf _helicopter,mapGridPosition _helicopter];}; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_awareness.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_awareness.sqf new file mode 100755 index 0000000..de8daa4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_awareness.sqf @@ -0,0 +1,26 @@ +if (!isServer) exitWith {}; + +private ["_helicopter","_unitGroup"]; + +_helicopter = _this select 0; +_unitGroup = _this select 1; + +uiSleep 60; +if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Starting helicopter awareness script for AI vehicle %1 (Group: %2).",typeOf _helicopter,_unitGroup];}; + +while {!(_helicopter getVariable ["heli_disabled",false]) && {alive _helicopter}} do { + _detectOrigin = [getPosASL _helicopter,200,getDir _helicopter,1] call SHK_pos; + _detectOrigin set [2,0]; + _detected = _detectOrigin nearEntities [["CAManBase","LandVehicle"],225]; + { + if ((isPlayer _x) && {(_unitGroup knowsAbout _x) < 1.5}) then { + _heliAimPos = aimPos _helicopter; + _playerAimPos = aimPos _x; + if (!(terrainIntersectASL [_heliAimPos,_playerAimPos]) && {!(lineIntersects [_heliAimPos,_playerAimPos,_helicopter,_x])}) then { //if no intersection of terrain and objects between helicopter and player, then reveal player + _unitGroup reveal [_x,2.5]; + }; + }; + uiSleep 0.1; + } forEach _detected; + uiSleep 20; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_destroyed.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_destroyed.sqf new file mode 100755 index 0000000..2cdfd29 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_destroyed.sqf @@ -0,0 +1,37 @@ +/* + DZAI_heliDestroyed + + Description: Called when AI air vehicle is destroyed by collision damage. + + Last updated: 12:11 AM 6/17/2014 +*/ + +private ["_helicopter","_unitGroup","_weapongrade"]; +_helicopter = _this select 0; + +if (_helicopter getVariable ["heli_disabled",false]) exitWith {false}; +_helicopter setVariable ["heli_disabled",true]; +{_helicopter removeAllEventHandlers _x} count ["HandleDamage","GetOut","Killed"]; +_unitGroup = _helicopter getVariable "unitGroup"; +[_unitGroup,_helicopter] call DZAI_respawnAIVehicle; + +if !(surfaceIsWater (getPosASL _helicopter)) then { + _weapongrade = _unitGroup getVariable ["weapongrade",1]; + _unitGroup setVariable ["unitType","aircrashed"]; //Recategorize group as "aircrashed" to prevent AI inventory from being cleared since death is considered suicide. + { + if (alive _x) then { + _x action ["eject",_helicopter]; + _nul = [_x,_x] call DZAI_unitDeath; + 0 = [_x,_weapongrade] spawn DZAI_addLoot; + } else { + [_x] joinSilent grpNull; + }; + } count (units _unitGroup); +} else { + //_unitGroup call DZAI_deleteGroup; +}; + +_unitGroup setVariable ["GroupSize",-1]; +if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: AI helicopter patrol destroyed at %1",mapGridPosition _helicopter];}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_detectplayers.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_detectplayers.sqf new file mode 100755 index 0000000..a2187c2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_detectplayers.sqf @@ -0,0 +1,40 @@ +private ["_unitGroup","_detectBase","_detectFactor","_detectRange","_helicopter"]; +_unitGroup = _this select 0; + +_helicopter = vehicle (leader _unitGroup); +//_detectDelay = if ((waypointType [_unitGroup,1]) == "MOVE") then {5} else {20}; +_detectRange = if (_unitGroup getVariable ["DetectPlayersWide",false]) then {_unitGroup setVariable ["DetectPlayersWide",false]; 375} else {250}; + +//uiSleep (round (random _detectDelay)); +uiSleep 2; + +if (_unitGroup getVariable ["HeliDetectReady",true]) then { + _unitGroup setVariable ["HeliDetectReady",false]; + _detectStartPos = getPosASL _helicopter; + while {!(_helicopter getVariable ["heli_disabled",false])} do { + private ["_detected","_detectOrigin","_detectedCount","_startPos"]; + _startPos = getPosASL _helicopter; + _detectOrigin = [_startPos,100,getDir _helicopter,1] call SHK_pos; + _detectOrigin set [2,0]; + _detected = _detectOrigin nearEntities [["CAManBase","LandVehicle"],_detectRange]; + _detectedCount = (count _detected); + if (_detectedCount > 0) then { + if (_detectedCount > 15) then {_detected resize 15}; + { + if (isPlayer _x) then { + _heliAimPos = aimPos _helicopter; + _playerAimPos = aimPos _x; + if (!(terrainIntersectASL [_heliAimPos,_playerAimPos]) && {!(lineIntersects [_heliAimPos,_playerAimPos,_helicopter,_x])}) then { //if no intersection of terrain and objects between helicopter and player, then reveal player + _unitGroup reveal [_x,2.5]; + }; + }; + uiSleep 0.1; + } forEach _detected; + + if (((_helicopter distance _detectStartPos) > 700) or {_helicopter getVariable ["heli_disabled",false]}) exitWith {_unitGroup setVariable ["HeliDetectReady",true]}; + uiSleep 15; + } else { + uiSleep 7.5; + }; + }; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_handledamage.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_handledamage.sqf new file mode 100755 index 0000000..c2fa183 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_handledamage.sqf @@ -0,0 +1,45 @@ +private["_unit","_hit","_damage","_source","_ammo","_partdamage","_durability"]; +_unit = _this select 0; //Object the event handler is assigned to. (the unit taking damage) +_hit = _this select 1; //Name of the selection where the unit was damaged. "" for over-all structural damage, "?" for unknown selections. +_damage = _this select 2; //Resulting level of damage for the selection. (Received damage) +_source = _this select 3; //The source unit that caused the damage. +_ammo = _this select 4; //Classname of the projectile that caused inflicted the damage. ("" for unknown, such as falling damage.) + +_durability = _unit getVariable "durability"; + +if ((_ammo != "")&&{!isNil "_durability"}) then { + call { + if (_hit == "") exitWith { + //Structural damage + _partdamage = (_durability select 0) + _damage; + _durability set [0,_partdamage]; + if (((_partdamage >= 0.9) or {((_durability select 1) >= 0.9)}) && {(alive _unit)}) then { + 0 = [_unit] call DZAI_parachuteOut; + _nul = _unit spawn { + uiSleep 3; + _this setVehicleAmmo 0; + _this setFuel 0; + _this setDamage 1; + }; + {_unit removeAllEventHandlers _x} forEach ["HandleDamage","GetOut","Killed"]; + }; + }; + if (_hit == "motor") exitWith { + _partdamage = (_durability select 1) + _damage; + _durability set [1,_partdamage]; + if ((_partdamage > 0.88) && {alive _unit}) then { + _damage = 0.88; //Intercept fatal damage to helicopter engine - next hit will destroy the helicopter. + }; + }; + if (_hit == "mala vrtule") exitWith { + _partdamage = (_durability select 2) + _damage; + _durability set [2,_partdamage]; + if ((_partdamage >= 0.9) && {_unit getVariable ["tailRotorFunctional",true]}) then { + _unit setHit ["mala vrtule",1]; //Knock out helicopter tail rotor when sufficiently damaged + _unit setVariable ["tailRotorFunctional",false]; + }; + }; + }; +}; + +_damage diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_parachute.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_parachute.sqf new file mode 100755 index 0000000..ef10fef --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_parachute.sqf @@ -0,0 +1,90 @@ +/* + DZAI_parachuteOut + + Description: Called when AI air vehicle suffers critical damage. Onboard units are ejected if the vehicle is not above water. + + Last updated: 12:11 AM 6/17/2014 +*/ + +private ["_helicopter","_vehPos","_unitGroup"]; +_helicopter = _this select 0; + +if (_helicopter getVariable ["heli_disabled",false]) exitWith {false}; +_helicopter setVariable ["heli_disabled",true]; +{_helicopter removeAllEventHandlers _x} count ["HandleDamage","GetOut","Killed"]; +_unitGroup = _helicopter getVariable "unitGroup"; +[_unitGroup,_helicopter] call DZAI_respawnAIVehicle; +_vehPos = ASLtoATL getPosASL _helicopter; + +if (!surfaceIsWater _vehPos) then { + private ["_unitsAlive","_trigger","_weapongrade","_units","_waypointCount"]; + _weapongrade = _unitGroup getVariable ["weapongrade",1]; + _units = units _unitGroup; + if (((_vehPos select 2) > 60) or {(0.40 call DZAI_chance)}) then { + { + if (alive _x) then { + _health = _x getVariable ["unithealth",[]]; + if ((_health select 1) > 0) then { + _health set [1,0]; //If unit has any leg damage, heal it + _health set [2,false]; + _x setHit["legs",0]; + }; + _x action ["eject",_helicopter]; + unassignVehicle _x; + } else { + 0 = [_x,_weapongrade] spawn DZAI_addLoot; + }; + } forEach _units; + + _unitsAlive = {alive _x} count _units; + //(DZAI_numAIUnits + _unitsAlive) call DZAI_updateUnitCount; + if (_unitsAlive > 0) then { + for "_i" from ((count (waypoints _unitGroup)) - 1) to 0 step -1 do { + deleteWaypoint [_unitGroup,_i]; + }; + + 0 = [_unitGroup,_vehPos,75] spawn DZAI_BIN_taskPatrol; + + _unitGroup allowFleeing 0; + + //Create area trigger + _trigger = createTrigger ["EmptyDetector",_vehPos]; + _trigger setTriggerArea [600, 600, 0, false]; + _trigger setTriggerActivation ["ANY", "PRESENT", true]; + _trigger setTriggerTimeout [5, 5, 5, true]; + _trigger setTriggerText (format ["Heli AI Parachute %1",mapGridPosition _helicopter]); + _trigger setTriggerStatements ["{isPlayer _x} count thisList > 0;","","0 = [thisTrigger] spawn fnc_despawnBandits;"]; + + //Set required trigger variables and begin despawn + _trigger setVariable ["isCleaning",false]; + _trigger setVariable ["GroupArray",[_unitGroup]]; + _trigger setVariable ["equipType",DZAI_heliUnitLevel]; + _trigger setVariable ["maxUnits",[_unitsAlive,0]]; + _trigger setVariable ["respawn",false]; //landed AI units should never respawn + _trigger setVariable ["permadelete",true]; //units should be permanently despawned + [_trigger,"DZAI_staticTriggerArray"] call DZAI_updateSpawnCount; + 0 = [_trigger] spawn fnc_despawnBandits; + + _unitGroup setVariable ["unitType","static"]; + _unitGroup setVariable ["trigger",_trigger]; + _unitGroup setVariable ["groupSize",_unitsAlive]; + + _unitGroup setBehaviour "AWARE"; + }; + } else { + _unitGroup setVariable ["unitType","aircrashed"]; + { + _x action ["eject",_helicopter]; + _nul = [_x,_x] call DZAI_unitDeath; + 0 = [_x,_weapongrade] spawn DZAI_addLoot; + } forEach _units; + _unitGroup setVariable ["GroupSize",-1]; + }; +} else { + //_unitGroup call DZAI_deleteGroup; + _unitGroup setVariable ["GroupSize",-1]; +}; + +if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: AI helicopter %1 evacuated at %2.",typeOf _helicopter,mapGridPosition _helicopter];}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_randompatrol.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_randompatrol.sqf new file mode 100755 index 0000000..42595f6 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_randompatrol.sqf @@ -0,0 +1,31 @@ +private ["_unitGroup","_tooClose","_wpSelect"]; +_unitGroup = _this select 0; + +_tooClose = true; +while {_tooClose} do { + _wpSelect = (DZAI_locations call BIS_fnc_selectRandom2) select 1; + if (((waypointPosition [_unitGroup,0]) distance _wpSelect) > 300) then { + _tooClose = false; + } else { + uiSleep 0.1; + }; +}; +_wpSelect = [_wpSelect,50+(random 900),(random 360),1] call SHK_pos; +[_unitGroup,0] setWPPos _wpSelect; +[_unitGroup,1] setWPPos _wpSelect; +if ((waypointType [_unitGroup,1]) == "MOVE") then { + if (0.275 call DZAI_chance) then { + [_unitGroup,1] setWaypointType "SAD"; + [_unitGroup,1] setWaypointTimeout [20,25,30]; + _unitGroup setVariable ["DetectPlayersWide",true]; + }; +} else { + [_unitGroup,1] setWaypointType "MOVE"; + [_unitGroup,1] setWaypointTimeout [3,6,9]; +}; +//[_unitGroup,0] setWaypointCompletionRadius 150; +//_unitGroup setCurrentWaypoint [_unitGroup,0]; +//(vehicle (leader _unitGroup)) flyInHeight (100 + (random 40)); + +_unitGroup setCurrentWaypoint [_unitGroup,0]; +(vehicle (leader _unitGroup)) flyInHeight (100 + (random 40)); diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_reinforce.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_reinforce.sqf new file mode 100755 index 0000000..b6f332e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/heli_reinforce.sqf @@ -0,0 +1,31 @@ +/* + + +*/ + +private ["_index","_trigger","_targetPlayer","_unitGroup","_reinforcePos","_lastRedirectTime","_helicopter"]; + +_unitGroup = _this select 0; +_helicopter = _this select 1; + +_index = floor (random (count DZAI_reinforcePlaces)); +_trigger = DZAI_reinforcePlaces select _index; +if (!isNull _trigger) then { + _targetPlayer = _trigger getVariable "targetplayer"; + if (!isNil "_targetPlayer") then {_unitGroup reveal [_targetPlayer,4]}; + _reinforcePos = (getPosASL _trigger); + DZAI_reinforcePlaces set [_index,objNull]; + DZAI_reinforcePlaces = DZAI_reinforcePlaces - [objNull]; + [_unitGroup,0] setWPPos _reinforcePos; + [_unitGroup,1] setWPPos _reinforcePos; + [_unitGroup,1] setWaypointType "SAD"; + [_unitGroup,1] setWaypointTimeout [40,50,60]; + _unitGroup setVariable ["DetectPlayersWide",true]; + + _unitGroup setCurrentWaypoint [_unitGroup,0]; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Helicopter %1 (%2) redirected to dynamic spawn area at %3.",_helicopter,(typeOf _helicopter),mapGridPosition _reinforcePos]}; +}; +DZAI_reinforcePlaces set [_index,objNull]; +DZAI_reinforcePlaces = DZAI_reinforcePlaces - [objNull]; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/veh_destroyed.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/veh_destroyed.sqf new file mode 100755 index 0000000..aaaa9fc --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/veh_destroyed.sqf @@ -0,0 +1,62 @@ +/* + DZAI_vehDestroyed + + Description: Called when AI land vehicle is destroyed + + Last updated: 12:11 AM 6/17/2014 + +*/ + +private ["_vehicle","_unitGroup","_unitsAlive"]; +_vehicle = _this select 0; + +if (_vehicle getVariable ["veh_disabled",false]) exitWith {}; +_vehicle setVariable ["veh_disabled",true]; +_unitGroup = _vehicle getVariable "unitGroup"; +{_vehicle removeAllEventHandlers _x} count ["HandleDamage","Killed"]; +[_unitGroup,_vehicle] call DZAI_respawnAIVehicle; +_unitsAlive = {alive _x} count (units _unitGroup); + +if (_unitsAlive > 0) then { + //Restrict patrol area to vehicle wreck + for "_i" from ((count (waypoints _unitGroup)) - 1) to 0 step -1 do { + deleteWaypoint [_unitGroup,_i]; + }; + + _vehPos = ASLToATL getPosASL _vehicle; + 0 = [_unitGroup,_vehPos,100] spawn DZAI_BIN_taskPatrol; + + //Create area trigger + _trigger = createTrigger ["EmptyDetector",_vehPos]; + _trigger setTriggerArea [600, 600, 0, false]; + _trigger setTriggerActivation ["ANY", "PRESENT", true]; + _trigger setTriggerTimeout [5, 5, 5, true]; + _trigger setTriggerText (format ["Abandoned AI Vehicle %1",mapGridPosition _vehicle]); + _trigger setTriggerStatements ["{isPlayer _x} count thisList > 0;","","0 = [thisTrigger] spawn fnc_despawnBandits;"]; + + //Set required trigger variables and begin despawn + _trigger setVariable ["isCleaning",false]; + _trigger setVariable ["GroupArray",[_unitGroup]]; + _trigger setVariable ["equipType",DZAI_vehUnitLevel]; + _trigger setVariable ["maxUnits",[_unitsAlive,0]]; + _trigger setVariable ["respawn",false]; //landed AI units should never respawn + _trigger setVariable ["permadelete",true]; //units should be permanently despawned + //DZAI_actTrigs = DZAI_actTrigs + 1; + [_trigger,"DZAI_staticTriggerArray"] call DZAI_updateSpawnCount; + //(DZAI_numAIUnits + _unitsAlive) call DZAI_updateUnitCount; + 0 = [_trigger] spawn fnc_despawnBandits; + + _unitGroup setVariable ["unitType","static"]; + _unitGroup setVariable ["trigger",_trigger]; + _unitGroup setVariable ["groupSize",_unitsAlive]; + + _unitGroup setBehaviour "AWARE"; + + { + unassignVehicle _x; + } forEach (assignedCargo _vehicle); +} else { + _unitGroup setVariable ["GroupSize",-1]; +}; + +if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: AI land vehicle patrol destroyed at %1",mapGridPosition _vehicle];}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/veh_handledamage.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/veh_handledamage.sqf new file mode 100755 index 0000000..19a44b3 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/veh_handledamage.sqf @@ -0,0 +1,10 @@ +private["_unit","_hit","_damage","_source","_ammo"]; +//_unit = _this select 0; //Object the event handler is assigned to. (the unit taking damage) +_hit = _this select 1; //Name of the selection where the unit was damaged. "" for over-all structural damage, "?" for unknown selections. +_damage = _this select 2; //Resulting level of damage for the selection. (Received damage) +//_source = _this select 3; //The source unit that caused the damage. +_ammo = _this select 4; //Classname of the projectile that caused inflicted the damage. ("" for unknown, such as falling damage.) + +if (_ammo == "") then {_damage = 0}; + +_damage \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/veh_randompatrol.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/veh_randompatrol.sqf new file mode 100755 index 0000000..ab788a2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/veh_randompatrol.sqf @@ -0,0 +1,17 @@ +private ["_unitGroup","_tooClose","_wpSelect"]; +_unitGroup = _this select 0; + +_tooClose = true; +while {_tooClose} do { + _wpSelect = (DZAI_locationsLand call BIS_fnc_selectRandom2) select 1; + if (((waypointPosition [_unitGroup,0]) distance _wpSelect) > 300) then { + _tooClose = false; + }; +}; + +_wpSelect = [_wpSelect,random(300),random(360),0,[1,300]] call SHK_pos; +[_unitGroup,0] setWPPos _wpSelect; +[_unitGroup,0] setWaypointCompletionRadius 150; +if ((count (waypoints _unitGroup)) == 1) then { + _unitGroup setCurrentWaypoint [_unitGroup,0]; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/veh_regroup.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/veh_regroup.sqf new file mode 100755 index 0000000..f68ef6a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/compile/veh_regroup.sqf @@ -0,0 +1,15 @@ +private ["_unitGroup","_vehicle","_loadWP","_loadWPCond"]; + +_unitGroup = _this select 0; +_vehicle = _this select 1; + +_loadWP = _unitGroup addWaypoint [(ASLtoATL getPosASL _vehicle),0]; +_loadWP setWaypointType "LOAD"; +_loadWPCond = "_vehicle = (group this) getVariable ['assignedVehicle',objNull]; ({_x == (vehicle _x)} count (assignedCargo _vehicle)) == 0"; +_loadWP setWaypointStatements [_loadWPCond,(format ["_unitGroup = (group this); deleteWaypoint [_unitGroup,%1]; _unitGroup setVariable ['regrouped',true]; _unitGroup setCurrentWaypoint [_unitGroup,0];",(_loadWP select 1)])]; +_loadWP setWaypointCompletionRadius 20; +_unitGroup setCurrentWaypoint _loadWP; + +if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Regroup order issued for AI group %1 to vehicle %2. Check WP count: %3.",_unitGroup,typeOf _vehicle,(count (waypoints _unitGroup))];}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/DZAI_version.txt b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/DZAI_version.txt new file mode 100755 index 0000000..b1dfdcc --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/DZAI_version.txt @@ -0,0 +1,6 @@ +/* + DZAI Version Identifier File +*/ + +#define DZAI_TYPE "DZAI" +#define DZAI_VERSION "2.2.4 Release Build 20210419" diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/dzai_config.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/dzai_config.sqf new file mode 100755 index 0000000..84bb12c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/dzai_config.sqf @@ -0,0 +1,495 @@ +/* + DZAI Configuration File + + Description: Contains all configurable settings of DZAI. Contains settings for debugging, customization of AI units, spawning, and loot. + + +*/ + +diag_log "[DZAI] Reading DZAI configuration file."; + +/* DZAI Settings +--------------------------------------------------------------------------------------------------------------------*/ + +//Enable or disable event logging to arma2oaserver.rpt. Debug level setting. 0: No debug output, 1: Basic Debug output, 2: Extended Debug output. (Default: 0) +//Debug output may help finding additional information about DZAI's background behavior. This output is helpful when asking for help regarding bugs or unexpected behaviors. +DZAI_debugLevel = 0; + +//Frequency of server monitor update to RPT log in seconds. The monitor periodically reports number of max/current AI units and dynamically spawned triggers into RPT log. (Default: 300, 0 = Disable reporting) +DZAI_monitorRate = 300; + +//Enable or disable verification and error-correction of classname tables used by DZAI. If invalid entries are found, they are removed and logged into the RPT log. +//If disabled, any invalid classnames will not be removed and clients may crash if AI bodies with invalid items are looted. Only disable if a previous scan shows no invalid classnames (Default: true). +DZAI_verifyTables = true; + +//(Feature in development) Enables additional checking and error-correction of certain classname tables. (Default: false) +DZAI_extendedVerify = false; + +//Enable to have server spawn in objects/buildings normally spawned clientside by DayZ's CfgTownGenerator. Prevents AI from walking/shooting through clutter and other objects. (Default: true) +//If running DayZ Mod ("vanilla DayZ") or DayZ Overwatch, it is highly recommended to enable this option, as many added buildings are handled by the CfgTownGenerator. Not used with Epoch. +DZAI_objPatch = true; + +//Minimum seconds to pass until each dead AI body or destroyed vehicle can be cleaned up by DZAI's task scheduler. DZAI will not clean up a body/vehicle if there is a player close by (Default: 900). +//Note: Other cleanup scripts might interfere by cleaning up dead AI bodies/vehicles! +DZAI_cleanupDelay = 900; + +//Enable auto detection of DayZ mod type ran by server. If additional support exists for the mod type, DZAI will load additional classnames (example: weapons, skins, or other items) +//Additional support exists for the following DayZ mods: Epoch, Overwatch, Unleashed, Hunting Grounds, 2017. (Default: true) +DZAI_modAutoDetect = true; + + +/* AI Unit Settings +--------------------------------------------------------------------------------------------------------------------*/ + +//Enhanced AI health system setting. +//If enabled, AI units will use DayZ's 12,000 blood system, can be knocked unconscious and Tasered, and can self-bloodbag/morphine. If disabled, AI units will use default Arma 2 damage handling. (Default: true) +DZAI_useHealthSystem = false; + +//Minimum and maximum AI blood level to spawn each unit with. Each individual unit will have a randomized blood level within this range. Upper limit: 12000 blood (Default: [10000,12000]) +//Note: No effect if DZAI_useHealthSystem is false +DZAI_unitBloodLevel = [10000,12000]; + +//Amount of blood restored from a full self-heal. One-third of the total amount is restored 3 times every 3 seconds. Note: Applies to infantry-type AI units. (Default: 6000) +//Note: No effect if DZAI_useHealthSystem is false +DZAI_unitHealAmount = 6000; + +//Below this blood level, AI may decide to heal themselves for amount specified by DZAI_unitHealAmount. Healing requires 9 seconds to fully complete and can be interrupted by knocking the unit unconscious. (Default: 5000) +//Note: No effect if DZAI_useHealthSystem is false +DZAI_lowBloodLevel = 5000; + +//Enable or disable zombie attraction to AI weapon sounds. No effect if DZAI_zombieEnemy is set to false. Enabling this option may impact server performance as a script is run for each AI bullet fired. +//Note: AI cannot be attacked or damaged by zombies.(Default: false) +DZAI_weaponNoise = false; + +//If enabled, AI group will attempt to track down player responsible for killing a group member. Players with radios will be given text warnings if they are being pursued (Default: true) +DZAI_findKiller = true; + +//If normal probability check for spawning NVGs fails, then give AI temporary NVGs only if they are spawned with weapongrade 1 or higher (applies only during nighttime hours). Temporary NVGs are unlootable and will be removed at death (Default: false). +DZAI_tempNVGs = false; + +//Amount of humanity to reward player for killing an AI unit (Default: 0) +DZAI_humanityGain = 0; + +//If enabled, players with radios will be given text warnings if they are being pursued by AI groups. (Default: true) +DZAI_radioMsgs = true; + +//If enabled, last surviving unit of a group will be granted slightly boosted skills. No effect if unit is spawned alone (Default: false) +DZAI_lastManStanding = false; + +//If enabled, dead AI bodies have coins. From 100 - 2000 coins on each AI. Works only if Z_SingleCurrency = true; (Default: [false,[100,2000]]) +DZAI_hasCoins = [false,[100,2000]]; + +/*DZAI client-side addon settings. +**NOTE**: These settings require the DZAI client-side addon to be installed to your mission pbo file in order to work. +--------------------------------------------------------------------------------------------------------------------*/ + +//Enable to use client-side radio addon for radio messages instead of remote execution method. (Default: false) +DZAI_clientRadio = false; + +//Enable or disable AI hostility to zombies. If enabled, AI units spawned by DZAI will attack nearby zombies. (Default: false) +DZAI_zombieEnemy = true; + +//Maximum distance (in meters) for AI group leader to detect zombies. Increasing range beyond default may negatively impact server performance. (Default: 150) +DZAI_zDetectRange = 150; + +//Enable or disable AI death messages. Messages will be sent only to player responsible for killing the unit. Messages will be sent in System chat in the format "(Unit name) was killed." (Default: false) +DZAI_deathMessages = false; + + +/* Static AI Spawning Settings +--------------------------------------------------------------------------------------------------------------------*/ + +//Enable or disable static AI spawns. If enabled, AI spawn points will be generated in cities, towns, and other predefined areas. Does not affect custom-defined spawns (Default: true). +DZAI_staticAI = false; + +//Set minimum and maximum wait time in seconds to respawn an AI group after all units have been killed. Applies to both static AI and custom spawned AI (Default: Min 300, Max 600). +DZAI_respawnTimeMin = 300; +DZAI_respawnTimeMax = 600; + +//Time to allow spawned AI units to exist in seconds before being despawned when no players are present in a trigger area. Applies to both static AI and custom spawned AI (Default: 120) +DZAI_despawnWait = 120; + +//Respawn limits. Set to -1 for unlimited respawns. (Default: -1 for each). +DZAI_respawnLimit0 = -1; //Respawn limit for low level AI found in low-value areas (Default: -1) +DZAI_respawnLimit1 = -1; //Respawn limit for mid level AI found in cities and other mid-value areas (Default: -1) +DZAI_respawnLimit2 = -1; //Respawn limit for high level AI found in places with military loot (Default: -1) +DZAI_respawnLimit3 = -1; //Respawn limit for very high level AI in places with high-grade military loot (Default: -1) + +//Spawn probabilities +DZAI_spawnChance0 = 0.40; //Spawn chance for low-skill AI typically found in small towns (Default: 0.40) +DZAI_spawnChance1 = 0.60; //Spawn chance for mid-level AI typically found in cities and large towns (Default: 0.60) +DZAI_spawnChance2 = 0.80; //Spawn chance for high-level AI typically found in places with military-grade loot (Default: 0.80) +DZAI_spawnChance3 = 0.90; //Spawn chance for expert-level AI found in areas with high-grade military loot (Default: 0.90) + + +/* Dynamic AI Spawning Settings +--------------------------------------------------------------------------------------------------------------------*/ + +//Enable or disable dynamic AI spawns. If enabled, AI spawn locations will be generated for randomly selected players at randomized intervals (Default: true) +DZAI_dynAISpawns = false; + +//Time (seconds) required to reach maximum spawn probability per player, after which the probability is reset to 0%. Lower number = More frequent spawns, Higher Number = Less frequent. (Recommended range: 1200-2700, Default: 1200) +DZAI_maxSpawnTime = 1200; + +//Time (seconds) to allow each player to retain maximum spawn probability. (Default: 1200). +DZAI_keepMaxSpawnTime = 1200; + +//Probability for dynamic AI to actively hunt a targeted player. If probability check fails, dynamic AI will patrol the area instead of hunting (Default: 0.50) +DZAI_huntingChance = 0.50; + +//Probability to send first available AI helicopter to reinforce dynamic AI group. No effect if DZAI_maxHeliPatrols is set to zero. (Default: 0.50) +DZAI_heliReinforceChance = 0.50; + +//Array of area blacklist markers. Players within marker areas will not be targeted for dynamic AI spawns (Example: ["BlacklistArea1","BlacklistArea2","BlacklistArea3"]) +//Epoch: DZAI will automatically set up 200m-radius blacklist areas around each trader area. +DZAI_dynAreaBlacklist = []; + +//Time to wait before despawning all AI units in dynamic spawn area when no players are present. (Default: 120) +DZAI_dynDespawnWait = 120; + +//Enable or disable dynamic spawn-free zones of 600m radius around player spawn areas. (Default: false) +DZAI_freshSpawnSafeArea = false; + + +/* Random AI Spawning Settings (Feature in development) +--------------------------------------------------------------------------------------------------------------------*/ + +//Maximum number of placed random spawns on map +DZAI_maxRandomSpawns = 0; + +//Time to wait before despawning all AI units in random spawn area when no players are present. (Default: 120) +DZAI_randDespawnWait = 120; + +//Array of area blacklist markers. Players within marker areas will not be targeted for random AI spawns (Example: ["BlacklistArea1","BlacklistArea2","BlacklistArea3"]) +//Epoch: DZAI will automatically set up 200m-radius blacklist areas around each trader area. +//Tip: To use dynamic-spawn blacklist areas for random-spawn blacklist areas, simply set DZAI_randAreaBlacklist = DZAI_dynAreaBlacklist; +DZAI_randAreaBlacklist = []; + + +/* AI Air vehicle patrol settings. These AI vehicles will randomly travel between different cities and towns. +--------------------------------------------------------------------------------------------------------------------*/ + +//Global maximum number of active AI air vehicle patrols. Set at 0 to disable (Default: 0). +DZAI_maxHeliPatrols = 0; + +//Set minimum and maximum wait time in seconds to respawn an AI vehicle patrol after vehicle is destroyed or disabled. (Default: Min 600, Max 900). +DZAI_respawnTMinA = 600; +DZAI_respawnTMaxA = 900; + +//Classnames of air vehicle types to use, with the maximum amount of each type to spawn. +DZAI_heliList = [ + ["UH1H_DZ",5], + ["Mi17_DZ",5] +]; + +//Difficulty level of air vehicle patrol units. Difficulty level also affects unit loadout and loot. Possible values: 0 to 3 (Default: 3) +DZAI_heliUnitLevel = 3; + +//Maximum number of gunner units per air vehicle. Limited by actual number of available gunner positions. (Default: 2) +DZAI_heliGunnerUnits = 3; + +//Specify vehicle weapon for air vehicles that are unarmed by default. DZAI will arm these air vehicles with the specified weapons upon spawning each vehicle. +//Weapon classnames are verified. If the classname is invalid (banned or nonexistent), it will not be added to the vehicle. +//Format: Each row containing a vehicle classname will be equipped with the weapon from the corresponding row in weapon classnames section. DZAI will automatically select ammo type. +DZAI_airWeapons = [ + //Air vehicle classnames (Remember: no comma for last entry! Otherwise, separate each string with commas) + ["Helicopter1_Example_Classname","Helicopter2_Example_Classname"] + , + //Corresponding weapon classnames (Remember: no comma for last entry! Otherwise, separate each string with commas) + ["Helicopter1_Example_Weapon","Helicopter2_Example_Weapon"] +]; + + +/*AI Land vehicle patrol settings. These AI vehicles will randomly travel between different cities and towns. +--------------------------------------------------------------------------------------------------------------------*/ + +//Global maximum number of active AI land vehicle patrols. Set at 0 to disable (Default: 0). +DZAI_maxLandPatrols = 0; + +//Set minimum and maximum wait time in seconds to respawn an AI vehicle patrol after vehicle is destroyed or disabled. (Default: Min 600, Max 900). +DZAI_respawnTMinL = 600; +DZAI_respawnTMaxL = 900; + +//Classnames of land vehicle types to use, with the maximum amount of each type to spawn. +DZAI_vehList = [ + ["UAZ_Unarmed_TK_EP1_DZE",5], + ["SUV_TK_CIV_EP1_DZE",5] +]; + +//Difficulty level of land vehicle patrol units. Difficulty level also affects unit loadout and loot. Possible values: 0 to 3 (Default: 3) +DZAI_vehUnitLevel = 3; + +//Maximum number of gunner units per land vehicle. Limited by actual number of available gunner positions. (Default: 1) +DZAI_vehGunnerUnits = 2; + +//Maximum number of cargo units per land vehicle. Limited by actual number of available cargo positions. (Default: 3) +DZAI_vehCargoUnits = 3; + + +/* AI Vehicle (Air & Land) Settings +--------------------------------------------------------------------------------------------------------------------*/ + +//Array of area blacklist markers. Areas covered by marker will not be used as waypoints for vehicle patrols. (Example: ["BlacklistArea1","BlacklistArea2","BlacklistArea3"]) +//Note: Vehicles may still pass through these areas but will not make stops unless enemies are encountered. +DZAI_waypointBlacklist = []; + + +/* AI weapon selection settings +--------------------------------------------------------------------------------------------------------------------*/ + +//True: Dynamically generate AI weapon list from CfgBuildingLoot (DayZ loot tables). False: Use preset weapon tables located near the end of this file. (Default: true). +//Highly recommended to enable DZAI_verifyTables if this option is set to false. +DZAI_dynamicWeaponList = true; + +//Determines whether DZAI reads from default DayZ loot tables for dynamic AI weapon generation or from user-installed custom loot tables. (Default: false) +//No effect if DZAI_dynamicWeaponList is 'false'. If DZAI is unable to find custom loot tables installed, default loot tables will be used instead. If no loot tables are found, DZAI will use prebuilt weapon tables. +DZAI_customLootTables = false; + +//List of classnames of weapons that AI should never use. By default, AI may carry any lootable weapon. (Only if DZAI_dynamicWeaponList = true) +//Example: DZAI_banAIWeapons = ["M107_DZ","BAF_AS50_scoped"] will remove the M107 and AS50 from AI weapon tables if dynamic weapon list is enabled. +//Note: It is recommended to add all melee weapon classnames into this list as AI have issues using melee weapons. +//Pre-banned weapons by DZAI: "Crossbow_DZ","Crossbow","MeleeHatchet","MeleeCrowbar","MeleeMachete","MeleeBaseball","MeleeBaseBallBat","MeleeBaseBallBatBarbed","MeleeBaseBallBatNails" +DZAI_banAIWeapons = []; + +//List of launcher-type weapons for mid/high-level AI to use (by default, weapongrade 1/2/3), example: ["M136"]. If left empty, AI will not use launcher weapons. (Default: []) +//If AI encounter an armored player vehicle, they will switch to a randomly-selected launcher-type weapon to engage. +//Weapon classnames added here are verified if DZAI_verifyTables is set to true. Note: Launcher weapons are removed from the AI unit upon death. +DZAI_launcherTypes = [M_Igla_AA, M_AT13_AT, M_Strela_AA, Javelin, BAF_NLAW_Launcher, M47Launcher_EP1, MetisLauncher, SMAW]; + +//List of AI weapongrades that are permitted to use launcher-type weapons. Individual custom weapongrade levels may be added to allow launcher use (Default: [1,2,3]) +DZAI_launcherLevels = [1,2,3]; + +//Limit of number of launcher-type weapons to add to each AI group. Groups cannot have more launcher weapons than their weapongrade value (Default: 1). +DZAI_launchersPerGroup = 1; + + +/* AI loot quantity settings +--------------------------------------------------------------------------------------------------------------------*/ + +//Number of selections of medical items (Inventory) +DZAI_invmedicals = 1; + +//Number of selections of edible items (Inventory) +DZAI_invedibles = 1; + +//Number of selections of medical items (Backpack) +DZAI_bpmedicals = 1; + +//Number of selections of edible items (Backpack) +DZAI_bpedibles = 1; + +//Maximum number of items to select from DZAI_MiscItemS table. +DZAI_numMiscItemS = 3; + +//Maximum number of items to select from DZAI_MiscItemL table. +DZAI_numMiscItemL = 1; + + +/* AI loot probability settings +--------------------------------------------------------------------------------------------------------------------*/ + +//Chance to add each medical item. +DZAI_chanceMedicals = 0.70; + +//Chance to add each edible item. +DZAI_chanceEdibles = 0.70; + +//Chance to add each random item from DZAI_MiscItemS table. +DZAI_chanceMiscItemS = 0.60; + +//Chance to add each random item from DZAI_MiscItemL table. +DZAI_chanceMiscItemL = 0.15; + + +/*AI weapon/skill probabilities (gradeChances should add up to 1.00) - [Civilian, Military, MilitarySpecial, HeliCrash] - Note: AI with higher grade weaponry will also have higher skill settings. +--------------------------------------------------------------------------------------------------------------------*/ + +//equipType level 0 - most AI will have basic pistols or rifles, and occasionally common military weapons. +DZAI_gradeChances0 = [0.90,0.10,0.00,0.00]; + +//equipType level 1 - most AI will have common rifles, many will have common military weapons. Very rarely, AI will spawn with high-grade military or helicrash weapons. +DZAI_gradeChances1 = [0.65,0.30,0.04,0.01]; + +//equipType level 2 - most AI carry military weapons, and occasionally high-grade military weapons. +DZAI_gradeChances2 = [0.15,0.65,0.15,0.05]; + +//equipType level 3 - All AI will carry at least a military-grade weapon. Many will be carrying high-grade military weapons. Note: Air and land vehicle patrols use equipType level 3. +DZAI_gradeChances3 = [0.00,0.50,0.35,0.15]; + +//equipType level "dynamic" - Weapongrade chances for dynamic-spawned AI. Majority of dynamic AI will be carrying low-grade military weapons, some will carry high-grade military. +DZAI_gradeChancesDyn = [0.00,0.88,0.09,0.03]; + + +/* + AI skill settings + Skill Level: Description + 0-1: Low to medium-skilled AI. Most common type of AI encountered. Intended to challenge players. + 2-3: High-skilled AI. Uncommon/rare type of AI found in places with military loot. Intended to kill players. + Hint: The best way to quickly adjust AI difficulty is by modifying aimingAccuracy value. For all skill types, higher number = better skill. +*/ + +//AI skill settings level 0 (Skill, Minimum skill, Maximum skill). Baseline skill level: 0.50 +DZAI_skill0 = [ + ["aimingAccuracy",0.10,0.125], + ["aimingShake",0.50,0.59], + ["aimingSpeed",0.50,0.59], + ["endurance",0.50,0.59], + ["spotDistance",0.50,0.59], + ["spotTime",0.50,0.59], + ["courage",0.50,0.59], + ["reloadSpeed",0.50,0.59], + ["commanding",0.60,0.69], + ["general",0.60,0.69] +]; + +//AI skill settings level 1 (Skill, Minimum skill, Maximum skill). Baseline skill level: 0.60 +DZAI_skill1 = [ + ["aimingAccuracy",0.125,0.15], + ["aimingShake",0.60,0.69], + ["aimingSpeed",0.60,0.69], + ["endurance",0.60,0.69], + ["spotDistance",0.60,0.69], + ["spotTime",0.60,0.69], + ["courage",0.60,0.69], + ["reloadSpeed",0.60,0.69], + ["commanding",0.70,0.79], + ["general",0.70,0.79] +]; + +//AI skill settings level 2 (Skill, Minimum skill, Maximum skill). Baseline skill level: 0.70 +DZAI_skill2 = [ + ["aimingAccuracy",0.175,0.225], + ["aimingShake",0.70,0.79], + ["aimingSpeed",0.70,0.79], + ["endurance",0.70,0.79], + ["spotDistance",0.70,0.79], + ["spotTime",0.70,0.79], + ["courage",0.70,0.79], + ["reloadSpeed",0.70,0.79], + ["commanding",0.80,0.89], + ["general",0.80,0.89] +]; + +//AI skill settings level 3 (Skill, Minimum skill, Maximum skill). Baseline skill level: 0.80 +DZAI_skill3 = [ + ["aimingAccuracy",0.225,0.250], + ["aimingShake",0.80,0.89], + ["aimingSpeed",0.80,0.89], + ["endurance",0.80,0.89], + ["spotDistance",0.80,0.89], + ["spotTime",0.80,0.89], + ["courage",0.80,0.89], + ["reloadSpeed",0.80,0.89], + ["commanding",0.90,0.99], + ["general",0.90,0.99] +]; + + +/* + Additional AI skill settings can be defined (DZAI_skill4 - DZAI_skill9) for the corresponding custom weapongrade level using the same format above. + Note: If a custom weapongrade is used without defining the corresponding custom skill settings, DZAI_skill3 settings will be used instead. + Instructions: replace "nil" with the skill array. Refer to the above preset skill arrays for examples. + Custom AI skill settings can only be used with custom-defined spawns (spawns created using the DZAI_spawn function). +*/ + +//weapongrade 4 skills +DZAI_skill4 = nil; + +//weapongrade 5 skills +DZAI_skill5 = nil; + +//weapongrade 6 skills +DZAI_skill6 = nil; + +//weapongrade 7 skills +DZAI_skill7 = nil; + +//weapongrade 8 skills +DZAI_skill8 = nil; + +//weapongrade 9 skills +DZAI_skill9 = nil; + + +/* + AI weapon, loot, and equipment settings + + DZAI will first load the classname tables defined below, the modify the settings according to the DayZ map/mod being run. + + Example: DZAI will always first load the classname tables defined below, then if DayZ Epoch is detected, DZAI will add or overwrite settings specified by \world_classname_configs\epoch\dayz_epoch.sqf. + +*/ + +//Default weapon classname tables - DZAI will ONLY use these tables if the dynamic weapon list (DZAI_dynamicWeaponList) is disabled, otherwise they are ignored and overwritten if it is enabled. +//Note: Low-level AI (weapongrade 0) may use pistols listed in DZAI_Pistols0 or DZAI_Pistols1. Mid/high level AI (weapongrade 1+) will carry pistol weapons but not use them - they will use rifle weapons instead. +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +DZAI_Pistols0 = ["Makarov_DZ","M1911_DZ","Revolver_DZ"]; //Weapongrade 0 pistols +DZAI_Pistols1 = ["M9_DZ","M9_SD_DZ","Makarov_SD_DZ","PDW_DZ","G17_FL_DZ"]; //Weapongrade 1 pistols +DZAI_Pistols2 = ["M9_SD_DZ","Makarov_SD_DZ","PDW_DZ","G17_FL_DZ"]; //Weapongrade 2 pistols +DZAI_Pistols3 = ["M9_SD_DZ","Makarov_SD_DZ","PDW_DZ","G17_FL_DZ"]; //Weapongrade 3 pistols + +DZAI_Rifles0 = ["LeeEnfield_DZ","Winchester1866_DZ","MR43_DZ","CZ550_DZ","LeeEnfield_DZ","Winchester1866_DZ","MR43_DZ"]; //Weapongrade 0 rifles +DZAI_Rifles1 = ["M16A2_DZ","M16A2_GL_DZ","AK74_DZ","M4A1_CCO_DZ","AK74_Kobra_DZ","AKS74U_DZ","AKM_DZ","M24_DZ","M1014_DZ","DMR_DZ","M4A1_DZ","M14_CCO_DZ","Remington870_FL_DZ","MP5_DZ","MP5_SD_DZ","M4A3_DES_CCO_DZ"]; //Weapongrade 1 rifles +DZAI_Rifles2 = ["M16A2_DZ","M16A2_GL_DZ","M249_DZ","AK74_DZ","M4A1_CCO_DZ","AK74_Kobra_DZ","AKS74U_DZ","AKM_DZ","M24_DZ","SVD_Gh_DZ","M1014_DZ","DMR_DZ","M4A1_DZ","M14_CCO_DZ","Remington870_FL_DZ","M240_DZ","M4A1_Camo_CCO_SD_DZ","M16A4_ACOG_DZ","M4A1_Camo_Holo_GL_DZ","Mk48_CCO_DZ","M4A3_DES_CCO_DZ","Sa58V_Camo_ACOG_DZ","Sa58V_Camo_CCO_DZ","M40A3_Gh_DZ","SA58_DZ","SA58_DZ"]; //Weapongrade 2 rifles +DZAI_Rifles3 = ["FNFAL_DZ","FN_FAL_ANPVS4_DZE","Mk48_CCO_DZ","M249_DZ","L85_Holo_DZ","G36C_DZ","G36C_Camo_DZ","G36A_Camo_DZ","G36K_Camo_DZ","AKM_DZ","AKS74U_DZ","M14_CCO_DZ","Bizon_SD_DZ","DMR_DZ","RPK74_DZ"]; //Weapongrade 3 rifles + + +/* + Custom rifle tables can be defined below this line (DZAI_Rifles4 - DZAI_Rifles9) for the corresponding custom weapongrade level using the same format above. + Note: If a custom weapongrade is used without defining the corresponding custom rifle array, the DZAI_Rifles3 array will be used instead. + Instructions: Replace "nil" with the wanted rifle array. Refer to the above rifle arrays for examples on how to define custom rifle tables. + Custom rifle tables can only be used with custom-defined spawns (spawns created using the DZAI_spawn function). +*/ + +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +DZAI_Rifles4 = nil; //weapongrade 4 weapons +DZAI_Rifles5 = nil; //weapongrade 5 weapons +DZAI_Rifles6 = nil; //weapongrade 6 weapons +DZAI_Rifles7 = nil; //weapongrade 7 weapons +DZAI_Rifles8 = nil; //weapongrade 8 weapons +DZAI_Rifles9 = nil; //weapongrade 9 weapons + + +//AI skin classnames. DZAI will use any of these classnames for AI spawned. Note: Additional skins may be included on a per-map or per-mod basis - see folders in \world_classname_configs +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +DZAI_BanditTypes = ["Survivor2_DZ", "SurvivorW2_DZ", "Bandit1_DZ", "BanditW1_DZ", "Camo1_DZ", "Sniper1_DZ"]; + + +//AI Backpack types (for weapongrade levels 0-3) +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +DZAI_Backpacks0 = ["Patrol_Pack_DZE1","Czech_Vest_Pouch_DZE1","Assault_Pack_DZE1"]; +DZAI_Backpacks1 = ["Patrol_Pack_DZE1","Czech_Vest_Pouch_DZE1","Assault_Pack_DZE1","British_ACU_DZE1","TK_Assault_Pack_DZE1","CzechBackpack_DZE1","ALICE_Pack_DZE1"]; +DZAI_Backpacks2 = ["CzechBackpack_DZE1","British_ACU_DZE1","CoyoteBackpack_DZE1"]; +DZAI_Backpacks3 = ["CzechBackpack_DZE1","CoyoteBackpack_DZE1"]; + + +//AI Food/Medical item types. DZAI_Edibles: Drinkable and edible items. DZAI_Medicals1: List of common medical items to be added to AI inventory. DZAI_Medicals2: List of all medical items available only in hospitals to be added to AI backpack. +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +DZAI_Edibles = ["ItemSodaCoke", "ItemSodaPepsi", "ItemWaterbottle", "FoodCanSardines", "FoodCanBakedBeans", "FoodCanFrankBeans", "FoodCanPasta", "ItemWaterbottleUnfilled","ItemWaterbottleBoiled","FoodmuttonCooked","FoodchickenCooked","FoodBaconCooked","FoodRabbitCooked","FoodbaconRaw","FoodchickenRaw","FoodmuttonRaw","foodrabbitRaw","FoodCanUnlabeled","FoodPistachio","FoodNutmix","FoodMRE"]; +DZAI_Medicals1 = ["ItemBandage", "ItemPainkiller"]; +DZAI_Medicals2 = ["ItemPainkiller", "ItemMorphine", "ItemBandage", "ItemBloodbag", "ItemAntibiotic","ItemEpinephrine"]; + + +//AI Miscellaneous item types. DZAI_MiscItemS: List of random low-value items. DZAI_MiscItemL: List of random semi-valuable/useful items +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +DZAI_MiscItemS = ["ItemHeatpack", "HandRoadFlare", "HandChemBlue", "HandChemRed", "HandChemGreen","SmokeShell","TrashTinCan","TrashJackDaniels","ItemSodaEmpty"]; +DZAI_MiscItemL = ["ItemJerrycan", "PartWheel", "PartEngine", "PartFueltank", "PartGlass", "PartVRotor","PartWoodPile"]; + + +//AI toolbelt item types. Toolbelt items are added to AI inventory upon death. Format: [item classname, item probability] +//Weapongrade level 0-1 AI will use DZAI_tools0 table, weapongrade level 2-3 AI will use DZAI_tools1 table. Custom-spawned AI will use DZAI_tools1 table. +//NOTE: Do not delete any elements from this list, set its chance to zero intead. Only add elements to the end of the array, not in the middle. +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +DZAI_tools0 = [["ItemFlashlight",0.65],["ItemWatch",0.65],["ItemKnife",0.50],["ItemHatchet",0.40],["ItemCompass",0.40],["ItemMap",0.35],["ItemToolbox",0.15],["ItemMatchbox",0.15],["ItemFlashlightRed",0.05],["ItemGPS",0.005],["ItemRadio",0.005],["ItemCrowbar",0.15]]; +DZAI_tools1 = [["ItemFlashlight",0.75],["ItemWatch",0.75],["ItemKnife",0.75],["ItemHatchet",0.70],["ItemCompass",0.75],["ItemMap",0.70],["ItemToolbox",0.35],["ItemMatchbox",0.40],["ItemFlashlightRed",0.10],["ItemGPS",0.10],["ItemRadio",0.075],["ItemCrowbar",0.35]]; + + +//AI-useable toolbelt item types. These items are added to AI inventory at unit creation and may be used by AI. Format: [item classname, item probability] +//Weapongrade level 0-1 AI will use DZAI_gadgets0 table, weapongrade level 2-3 AI will use DZAI_gadgets1 table. Custom-spawned AI will use DZAI_gadgets1 table. +//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +DZAI_gadgets0 = [["binocular",0.40],["NVGoggles",0.00]]; +DZAI_gadgets1 = [["binocular",0.60],["NVGoggles",0.05]]; + + +//NOTHING TO EDIT BEYOND THIS POINT +diag_log "[DZAI] DZAI configuration file loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/dzai_functions.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/dzai_functions.sqf new file mode 100755 index 0000000..ea3e3a9 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/dzai_functions.sqf @@ -0,0 +1,381 @@ +/* + DZAI Functions + + Last Updated: 5:08 AM 12/24/2013 +*/ + +diag_log "[DZAI] Compiling DZAI functions."; + +//Utility functions +if (isNil "SHK_pos_getPos") then {call compile preprocessFile format ["%1\SHK_pos\shk_pos_init.sqf",DZAI_directory];}; +if (isNil "fnc_selectRandomWeighted") then {fnc_selectRandomWeighted = compile preprocessFileLineNumbers format ["%1\compile\fn_selectRandomWeighted.sqf",DZAI_directory]}; +BIS_fnc_selectRandom2 = compile preprocessFileLineNumbers format ["%1\compile\fn_selectRandom.sqf",DZAI_directory]; +DZAI_checkClassname = compile preprocessFileLineNumbers format ["%1\compile\fn_checkclassname.sqf",DZAI_directory]; + +//Spawning-related functions +DZAI_setup_AI = compile preprocessFileLineNumbers format ["%1\compile\fn_spawnGroup.sqf",DZAI_directory]; +DZAI_findSpawnPos = compile preprocessFileLineNumbers format ["%1\compile\fn_findspawnpos.sqf",DZAI_directory]; +DZAI_setTrigVars = compile preprocessFileLineNumbers format ["%1\compile\fn_init_trigger.sqf",DZAI_directory]; +fnc_spawnBandits_custom = compile preprocessFileLineNumbers format ["%1\spawn_functions\spawnBandits_custom.sqf",DZAI_directory]; +DZAI_spawnVehicle_custom = compile preprocessFileLineNumbers format ["%1\spawn_functions\spawnVehicle_custom.sqf",DZAI_directory]; +DZAI_spawn_units = compile preprocessFileLineNumbers format ["%1\compile\fn_customSpawnUnits.sqf",DZAI_directory]; +fnc_respawnBandits = compile preprocessFileLineNumbers format ["%1\spawn_functions\respawnBandits.sqf",DZAI_directory]; +fnc_respawnHandler = compile preprocessFileLineNumbers format ["%1\spawn_functions\respawnHandler1.sqf",DZAI_directory]; +fnc_respawnHandler2 = compile preprocessFileLineNumbers format ["%1\spawn_functions\respawnHandler2.sqf",DZAI_directory]; +fnc_despawnBandits = compile preprocessFileLineNumbers format ["%1\spawn_functions\despawnBandits.sqf",DZAI_directory]; + +//AI unit-related functions +DZAI_AI_handledamage = compile preprocessFileLineNumbers format ["%1\compile\fn_damageHandlerAI2.sqf",DZAI_directory]; +DZAI_unconscious = compile preprocessFileLineNumbers format ["%1\compile\ai_unconscious.sqf",DZAI_directory]; +DZAI_BIN_taskPatrol = compile preprocessFileLineNumbers format ["%1\compile\BIN_taskPatrol.sqf",DZAI_directory]; +DZAI_addLoot = compile preprocessFileLineNumbers format ["%1\compile\ai_generate_loot.sqf",DZAI_directory]; +DZAI_setupLoadout = compile preprocessFileLineNumbers format ["%1\compile\ai_setup_loadout.sqf",DZAI_directory]; +DZAI_autoRearm_group = compile preprocessFileLineNumbers format ["%1\compile\group_manager.sqf",DZAI_directory]; +DZAI_heliAwareness = compile preprocessFileLineNumbers format ["%1\compile\heli_awareness.sqf",DZAI_directory]; + +//Kill-related functions +DZAI_AI_killed_all = compile preprocessFileLineNumbers format ["%1\compile\ai_killed_all.sqf",DZAI_directory]; +DZAI_AI_killed_static = compile preprocessFileLineNumbers format ["%1\compile\ai_killed_static.sqf",DZAI_directory]; +DZAI_unitDeath = compile preprocessFileLineNumbers format ["%1\compile\ai_death.sqf",DZAI_directory]; +DZAI_countKills = compile preprocessFileLineNumbers format ["%1\compile\fn_countkills.sqf",DZAI_directory]; + +//Vehicle-related functions +DZAI_hHandleDamage = compile preprocessFileLineNumbers format ["%1\compile\heli_handledamage.sqf",DZAI_directory]; +DZAI_vHandleDamage = compile preprocessFileLineNumbers format ["%1\compile\veh_handledamage.sqf",DZAI_directory]; +DZAI_airLanding = compile preprocessFileLineNumbers format ["%1\compile\heli_airlanding.sqf",DZAI_directory]; +DZAI_parachuteOut = compile preprocessFileLineNumbers format ["%1\compile\heli_parachute.sqf",DZAI_directory]; +DZAI_heliDestroyed = compile preprocessFileLineNumbers format ["%1\compile\heli_destroyed.sqf",DZAI_directory]; +DZAI_vehDestroyed = compile preprocessFileLineNumbers format ["%1\compile\veh_destroyed.sqf",DZAI_directory]; +DZAI_AI_killed_air = compile preprocessFileLineNumbers format ["%1\compile\ai_killed_air.sqf",DZAI_directory]; +DZAI_AI_killed_land = compile preprocessFileLineNumbers format ["%1\compile\ai_killed_land.sqf",DZAI_directory]; +DZAI_vehRegroup = compile preprocessFileLineNumbers format ["%1\compile\veh_regroup.sqf",DZAI_directory]; + +//Static AI functions +if (DZAI_staticAI) then { + fnc_spawnBandits = compile preprocessFileLineNumbers format ["%1\spawn_functions\spawnBandits.sqf",DZAI_directory]; + DZAI_spawnBandits_init = compile preprocessFileLineNumbers format ["%1\spawn_functions\spawnBandits_initialize.sqf",DZAI_directory]; + DZAI_static_spawn = compile preprocessFileLineNumbers format ["%1\compile\fn_createStaticSpawn.sqf",DZAI_directory]; +}; + +//Dynamic AI functions +if (DZAI_dynAISpawns) then { + DZAI_abortDynSpawn = compile preprocessFileLineNumbers format ["%1\compile\fn_abortdynspawn.sqf",DZAI_directory]; + fnc_spawnBandits_dynamic = compile preprocessFileLineNumbers format ["%1\spawn_functions\spawnBandits_dynamic.sqf",DZAI_directory]; + fnc_despawnBandits_dynamic = compile preprocessFileLineNumbers format ["%1\spawn_functions\despawnBandits_dynamic.sqf",DZAI_directory]; + DZAI_dyn_huntPlayer = compile preprocessFileLineNumbers format ["%1\compile\fn_seekPlayer.sqf",DZAI_directory]; + DZAI_AI_killed_dynamic = compile preprocessFileLineNumbers format ["%1\compile\ai_killed_dynamic.sqf",DZAI_directory]; +}; + +if (DZAI_maxRandomSpawns > 0) then { + DZAI_createRandomSpawns = compile preprocessFileLineNumbers format ["%1\compile\createRandomSpawns.sqf",DZAI_directory]; + DZAI_abortRandSpawn = compile preprocessFileLineNumbers format ["%1\compile\fn_abortrandspawn.sqf",DZAI_directory]; + fnc_spawnBandits_random = compile preprocessFileLineNumbers format ["%1\spawn_functions\spawnBandits_random.sqf",DZAI_directory]; + fnc_despawnBandits_random = compile preprocessFileLineNumbers format ["%1\spawn_functions\despawnBandits_random.sqf",DZAI_directory]; + DZAI_AI_killed_random = compile preprocessFileLineNumbers format ["%1\compile\ai_killed_random.sqf",DZAI_directory]; +}; + +if (DZAI_findKiller) then { + DZAI_huntKiller = compile preprocessFileLineNumbers format ["%1\compile\fn_findKiller.sqf",DZAI_directory]; +}; + +if ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}) then { + //DZAI_updateSpawnMarker = compile preprocessFileLineNumbers format ["%1\compile\fn_refreshmarker.sqf",DZAI_directory]; +}; + +//Compile zombie aggro functions +if (DZAI_zombieEnemy && {DZAI_weaponNoise}) then { // Optional Zed-to-AI aggro functions + DZAI_aiFired = compile preprocessFileLineNumbers format ["%1\compile\ai_fired.sqf",DZAI_directory]; + DZAI_alertZombies = compile preprocessFileLineNumbers format ["%1\compile\ai_alertzombies.sqf",DZAI_directory]; +}; + +//Air/land vehicle patrol spawn scripts +if ((DZAI_maxHeliPatrols > 0) or {DZAI_maxLandPatrols > 0}) then { + DZAI_spawnVehiclePatrol = compile preprocessFileLineNumbers format ["%1\spawn_functions\spawnVehiclePatrol.sqf",DZAI_directory]; + //Helicopter patrol scripts + if (DZAI_maxHeliPatrols > 0) then { + DZAI_heliDetectPlayers = compile preprocessFileLineNumbers format ["%1\compile\heli_detectplayers.sqf",DZAI_directory]; + DZAI_heliRandomPatrol = compile preprocessFileLineNumbers format ["%1\compile\heli_randompatrol.sqf",DZAI_directory]; + if (DZAI_heliReinforceChance > 0) then {DZAI_heliReinforce = compile preprocessFileLineNumbers format ["%1\compile\heli_reinforce.sqf",DZAI_directory]}; + }; + //Land vehicle patrol scripts + if (DZAI_maxLandPatrols > 0) then { + DZAI_vehPatrol = compile preprocessFileLineNumbers format ["%1\compile\veh_randompatrol.sqf",DZAI_directory]; + }; +}; + +//AI skill-boosting function for last surviving AI unit. +if (DZAI_lastManStanding) then { + DZAI_skillBoost = compile preprocessFileLineNumbers format ["%1\compile\fn_skillboost.sqf",DZAI_directory]; +}; + + +//Miscellaneous functions +//------------------------------------------------------------------------------------------------------------------------ + +if (DZAI_radioMsgs) then { + if (DZAI_clientRadio) then { + DZAI_radioSend = { + DZAI_SMS = (_this select 1); + (owner (_this select 0)) publicVariableClient "DZAI_SMS"; + true + }; + } else { + DZAI_radioSend = { + [nil,(_this select 0),"loc",rTITLETEXT,(_this select 1),"PLAIN DOWN",2] call RE; + true + }; + }; +}; + +if (DZAI_deathMessages) then { + DZAI_sendKillMessage = { + private ["_killer","_victimName"]; + _killer = _this select 0; + _victimName = _this select 1; + { + DZAI_killMSG = _victimName; + (owner _x) publicVariableClient "DZAI_killMSG"; + } count (crew _killer); + }; +}; + +DZAI_updGroupCount = { + private ["_unitGroup","_isNewGroup"]; + _unitGroup = _this select 0; + _isNewGroup = _this select 1; + + if (isNull _unitGroup) exitWith {false}; + + if (_isNewGroup) then { + DZAI_activeGroups = DZAI_activeGroups + [_unitGroup]; + } else { + DZAI_activeGroups = DZAI_activeGroups - [_unitGroup]; + }; + true +}; + +//DZAI group side assignment function. Detects when East side has too many groups, then switches to Resistance side. +DZAI_createGroup = { + private["_groupSide","_unitGroup"]; + _groupSide = (if (({(side _x) == east} count allGroups) < 141) then { + east + } else { + //If there are 140 East groups, set West/Resistance hostility and assign a Resistance group instead. + if ((resistance getFriend west) > 0) then { + createCenter resistance; + resistance setFriend [west,0]; + west setFriend [resistance,0]; + east setFriend [resistance, 1]; + resistance setFriend [east, 1]; + diag_log "DZAI Warning: Group maximum reached for East side! Modifying Resistance side for DZAI use. Recommend reducing amount of AI spawns."; + }; + resistance + }); + //diag_log format ["Assigned side %1 to AI group",_groupSide]; + + _unitGroup = createGroup _groupSide; + [_unitGroup,true] call DZAI_updGroupCount; + + _unitGroup +}; + +//Sets skills for unit based on their weapongrade value. +DZAI_setSkills = { + private["_unit","_weapongrade","_skillArray"]; + _unit = _this select 0; + _weapongrade = _this select 1; + + _skillArray = missionNamespace getVariable ["DZAI_skill"+str(_weapongrade),DZAI_skill3]; + { + _unit setskill [_x select 0,(((_x select 1) + random ((_x select 2)-(_x select 1))) min 1)]; + } forEach _skillArray; +}; + +//Spawns flies on AI corpse +DZAI_deathFlies = { + private ["_soundFlies"]; + _soundFlies = createSoundSource ["Sound_Flies",ASLtoATL getPosASL _this,[],0]; + _soundFlies attachTo [_this,[0,0,0]]; + _this setVariable ["sound_flies",_soundFlies]; + waitUntil {sleep 5; (speed (vehicle _this)) == 0}; + _this enableSimulation false; +}; + +//Combines two arrays and returns the combined array. Does not add duplicate values. Second array is appended to first array. +DZAI_append = { + if (((typeName (_this select 0)) != "ARRAY")&&((typeName (_this select 1)) != "ARRAY")) exitWith {diag_log "DZAI Error: DZAI_append function was not provided with two arrays!";}; + { + if !(_x in (_this select 0)) then { + (_this select 0) set [(count (_this select 0)),_x]; + }; + } forEach (_this select 1); + + (_this select 0) +}; + +DZAI_findLootPile = { + private ["_lootPiles","_lootPos","_unitGroup","_searchRange"]; + _unitGroup = _this select 0; + _searchRange = _this select 1; + + _lootPiles = (getPosASL (leader _unitGroup)) nearObjects ["ReammoBox",_searchRange]; + if ((count _lootPiles) > 0) then { + _lootPos = ASLtoATL getPosASL (_lootPiles call BIS_fnc_selectRandom2); + if ((behaviour (leader _unitGroup)) != "AWARE") then {_unitGroup setBehaviour "AWARE"}; + (units _unitGroup) doMove _lootPos; + {_x moveTo _lootPos} forEach (units _unitGroup); + //diag_log format ["DEBUG :: AI group %1 is investigating a loot pile at %2.",_unitGroup,_lootPos]; + }; +}; + +//Prevents object from being destroyed/deleted from DayZ's anti-hacker check +DZAI_protectObject = { + private ["_objectMonitor","_object"]; + _object = _this; + + _objectMonitor = missionNamespace getVariable [DZAI_serverObjectMonitor,[]]; + _objectMonitor set [count _objectMonitor,_object]; + DZAI_monitoredObjects set [count DZAI_monitoredObjects,_object]; + _object setVariable ["ObjectID","1"]; + _object setVariable ["ObjectUID","1"]; + + true +}; + +DZAI_getWeapongrade = { + private ["_indexWeighted"]; + + _indexWeighted = call { + if (_this == 0) exitWith {DZAI_gradeIndices0}; + if (_this == 1) exitWith {DZAI_gradeIndices1}; + if (_this == 2) exitWith {DZAI_gradeIndices2}; + if (_this == 3) exitWith {DZAI_gradeIndices3}; + if (_this == 4) exitWith {DZAI_gradeIndicesDyn}; + DZAI_gradeIndices1 + }; + + DZAI_weaponGrades select (_indexWeighted call BIS_fnc_selectRandom2) +}; + +DZAI_spawn_vehicle = { + if ((getMarkerColor (_this select 0)) == "") exitWith {diag_log format ["DZAI Error: Unable to find provided marker %1 to spawn AI vehicle.",(_this select 0)]}; + if (!([(_this select 1),"vehicle"] call DZAI_checkClassname)) exitWith {diag_log format ["DZAI Error: Provided vehicle classname %1 is a banned or nonexistent classname.",(_this select 1)]}; + if ((typeName (_this select 2)) != "ARRAY") then {_this set [2,[3,3]]}; + if (!((_this select 3) in DZAI_weaponGradesAll)) then {_this set [3,1]}; + DZAI_customSpawnQueue set [(count DZAI_customSpawnQueue),_this]; +}; + +DZAI_protectGroup = { + private ["_dummy"]; //_this = group + + _dummy = _this createUnit ["Logic",[0,0,0],[],0,"FORM"]; + [_dummy] joinSilent _this; + _dummy disableAI "MOVE"; + _dummy setVariable ["unconscious",true]; + if ((behaviour _dummy) != "AWARE") then {_this setBehaviour "AWARE"}; + _this setVariable ["dummyUnit",_dummy]; + + if (DZAI_debugLevel > 1) then {diag_log format["DZAI Extended Debug: Spawned 1 dummy AI unit to preserve group %1.",_this];}; + + _dummy +}; + +DZAI_addTempNVG = { + _this addWeapon "NVGoggles"; + //_this addEventHandler ["Killed",{(_this select 0) removeWeapon "NVGoggles"; (_this select 0) removeAllEventHandlers "Killed";}]; + _this setVariable ["removeNVG",true]; + + true +}; + +DZAI_respawnAIVehicle = { + //Usage: [_unitGroup,_vehicle] call DZAI_respawnAIVehicle; + private ["_vehicle","_unitType"]; + _unitType = (_this select 0) getVariable ["unitType",""]; + _vehicle = _this select 1; + call { + if (_unitType in ["aircustom","landcustom"]) exitWith { + private ["_spawnParams"]; + _spawnParams = (_this select 0) getVariable ["spawnParams",false]; + if (_spawnParams select 4) then { + [1,_spawnParams] call fnc_respawnHandler; + }; + if (_vehicle isKindOf "Air") then {DZAI_curHeliPatrols = DZAI_curHeliPatrols - 1} else {DZAI_curLandPatrols = DZAI_curLandPatrols - 1}; + }; + if (_unitType in ["air","land"]) exitWith { + [2,typeOf _vehicle] call fnc_respawnHandler; + if (_vehicle isKindOf "Air") then {DZAI_curHeliPatrols = DZAI_curHeliPatrols - 1} else {DZAI_curLandPatrols = DZAI_curLandPatrols - 1}; + }; + }; + _vehicle setVariable ["DZAI_deathTime",diag_tickTime]; //mark vehicle for cleanup + + true +}; + +DZAI_updateSpawnCount = { + private ["_trigger","_arrayString","_triggerArray"]; + _trigger = _this select 0; + _arrayString = _this select 1; + + _triggerArray = missionNamespace getVariable [_arrayString,[]]; + if (!isNull _trigger) then { + if (_trigger in _triggerArray) then { + _triggerArray = _triggerArray - [_trigger]; + } else { + if ((triggerStatements _trigger select 1) == "") then { + _triggerArray set [count _triggerArray,_trigger]; + }; + }; + }; + + _triggerArray = _triggerArray - [objNull]; + missionNamespace setVariable [_arrayString,_triggerArray]; +}; + +DZAI_deleteGroup = { + private ["_groupManager"]; + + [_this,false] call DZAI_updGroupCount; + + { + if (alive _x) then { + deleteVehicle _x; + } else { + [_x] joinSilent grpNull; + }; + } count (units _this); + deleteGroup _this; + + true +}; + +DZAI_chance = { + private ["_result"]; + _result = ((random 1) < _this); + + _result +}; + + +DZAI_addMapMarker = { + private ["_mapMarkerArray","_objectString"]; + _mapMarkerArray = missionNamespace getVariable ["DZAI_mapMarkerArray",[]]; + _objectString = str (_this); + if !(_objectString in _mapMarkerArray) then { //Determine if marker is new + if ((getMarkerColor _objectString) == "") then { + private ["_marker"]; + _marker = createMarker [_objectString, (getPosASL _this)]; + _marker setMarkerType "Defend"; + _marker setMarkerBrush "Solid"; + }; + _mapMarkerArray set [(count _mapMarkerArray),_objectString]; + missionNamespace setVariable ["DZAI_mapMarkerArray",_mapMarkerArray]; + }; + if (_this isKindOf "EmptyDetector") then { //Set marker as active + _objectString setMarkerText "STATIC TRIGGER (ACTIVE)"; + _objectString setMarkerColor "ColorRed"; + }; +}; + + +diag_log "[DZAI] DZAI functions compiled."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/dzai_initserver.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/dzai_initserver.sqf new file mode 100755 index 0000000..8536ad1 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/dzai_initserver.sqf @@ -0,0 +1,189 @@ +/* + DZAI Server Initialization File + + Description: Handles startup process for DZAI. Does not contain any values intended for modification. +*/ +private ["_startTime","_directoryAsArray","_worldname","_allUnits"]; + +if (!isServer || !isNil "DZAI_isActive") exitWith {}; +DZAI_isActive = true; + +_startTime = diag_tickTime; + +_directoryAsArray = toArray __FILE__; +_directoryAsArray resize ((count _directoryAsArray) - 25); +DZAI_directory = toString _directoryAsArray; +if (isNil "_this") then {_this = []}; +if ((count _this) > 0) then { + //diag_log "DEBUG :: Startup parameters found!"; + if ("readoverridefile" in _this) then {DZAI_overrideEnabled = true} else {DZAI_overrideEnabled = nil}; + if ("enabledebugmarkers" in _this) then {DZAI_debugMarkersEnabled = true} else {DZAI_debugMarkersEnabled = nil}; +} else { + //diag_log "DEBUG :: Startup parameters not found!"; + DZAI_overrideEnabled = nil; + DZAI_debugMarkersEnabled = nil; +}; + +//Report DZAI version to RPT log +#include "DZAI_version.txt" +diag_log format ["[DZAI] Initializing %1 version %2 using base path %3.",DZAI_TYPE,DZAI_VERSION,DZAI_directory]; + +//Load DZAI main configuration file +call compile preprocessFileLineNumbers format ["%1\init\dzai_config.sqf",DZAI_directory]; + +//Load custom DZAI settings file. +if ((!isNil "DZAI_overrideEnabled") && {DZAI_overrideEnabled}) then {call compile preprocessFileLineNumbers format ["%1\DZAI_settings_override.sqf",DZAI_directory]}; + +//Load DZAI functions +call compile preprocessFileLineNumbers format ["%1\init\dzai_functions.sqf",DZAI_directory]; + +//Set side relations +_allUnits = +allUnits; +if (({(side _x) == west} count _allUnits) == 0) then {createCenter west}; +if (({(side _x) == east} count _allUnits) == 0) then {createCenter east}; +east setFriend [west, 0]; +west setFriend [east, 0]; + +//Detect DayZ mod variant and version being used. +if (isNil "DZAI_modName") then {DZAI_modName = "Default"}; +if (isNil "DZAI_modVersion") then {DZAI_modVersion = toLower (getText (configFile >> "CfgMods" >> "DayZ" >> "version"))}; +if (isNil "DZAI_modAutoDetect") then {DZAI_modAutoDetect = true}; + +if (DZAI_modAutoDetect) then { + private["_modVariant"]; + _modVariant = toLower (getText (configFile >> "CfgMods" >> "DayZ" >> "dir")); + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Detected mod variant %1.",_modVariant];}; + DZAI_modName = call { + if (_modVariant == "@dayz_epoch") exitWith {"epoch"}; + if ((isClass (configFile >> "CfgWeapons" >> "ItemHatchet")) && {isClass (configFile >> "CfgWeapons" >> "ItemMatchbox")}) exitWith {"epoch"}; + if (_modVariant in ["dayzoverwatch","@dayzoverwatch"]) exitWith {"overwatch"}; + if (_modVariant == "@dayzhuntinggrounds") exitWith {"huntinggrounds"}; + if (_modVariant == "@dayzunleashed") exitWith {"unleashed"}; + if ((_modVariant == "dayzlingor") && {(toLower (getText (configFile >> "CfgMods" >> "DayZ" >> "action"))) == "http://www.skaronator.com"}) exitWith {"lingorskaro"}; + "" + }; +}; + +//Create reference marker to act as boundary for spawning AI air/land vehicles. These values will be later modified on a per-map basis. +if (isNil "DZAI_maxHeliPatrols") then {DZAI_maxHeliPatrols = 0}; +if (isNil "DZAI_maxLandPatrols") then {DZAI_maxLandPatrols = 0}; +_centerPos = getMarkerPos 'center'; +_markerSize = [7000, 7000]; +_centerMarker = createMarker ["DZAI_centerMarker", _centerPos]; +_centerMarker setMarkerShape "ELLIPSE"; +_centerMarker setMarkerType "Empty"; +_centerMarker setMarkerBrush "Solid"; +_centerMarker setMarkerAlpha 0; + +_worldname = (toLower worldName); +call { + if (_worldname == "caribou") exitWith { + _centerPos = [3938.9722, 4195.7417]; + _markerSize = [3500, 3500]; + }; + if (_worldname == "chernarus") exitWith { + _centerPos = [7652.9634, 7870.8076]; + _markerSize = [5500, 5500]; + }; + if (_worldname == "cmr_ovaron") exitWith { + //Proper values needed + }; + if (_worldname == "fallujah") exitWith { + _centerPos = [5139.8008, 4092.6797]; + _markerSize = [4000, 4000]; + }; + if (_worldname == "fdf_isle1_a") exitWith { + _centerPos = [10771.362, 8389.2568]; + _markerSize = [2750, 2750]; + }; + if (_worldname == "isladuala") exitWith { + _centerPos = [4945.3438, 4919.6616]; + _markerSize = [4000, 4000]; + }; + if (_worldname == "lingor") exitWith { + _centerPos = [5166.5581, 5108.8301]; + _markerSize = [4500, 4500]; + }; + if (_worldname == "mbg_celle2") exitWith { + _centerPos = [6163.52, 6220.3984]; + _markerSize = [6000, 6000]; + }; + if (_worldname == "namalsk") exitWith { + _centerPos = [5880.1313, 8889.1045]; + _markerSize = [3000, 3000]; + }; + if (_worldname == "napf") exitWith { + _centerPos = [10725.096, 9339.918]; + _markerSize = [8500, 8500]; + }; + if (_worldname == "oring") exitWith { + _centerPos = [5191.1069, 5409.1938]; + _markerSize = [4750, 4750]; + }; + if (_worldname == "panthera2") exitWith { + _centerPos = [5343.6953, 4366.2534]; + _markerSize = [3500, 3500]; + }; + if (_worldname == "sara") exitWith { + _centerPos = [12693.104, 11544.386]; + _markerSize = [6250, 6250]; + }; + if (_worldname == "sauerland") exitWith { + _centerPos = [12270.443, 13632.132]; + _markerSize = [17500, 17500]; + }; + if (_worldname == "takistan") exitWith { + _centerPos = [6368.2764, 6624.2744]; + _markerSize = [6000, 6000]; + }; + if (_worldname == "tavi") exitWith { + _centerPos = [10887.825, 11084.657]; + _markerSize = [8500, 8500]; + }; + if (_worldname == "trinity") exitWith { + _centerPos = [7183.8403, 7067.4727]; + _markerSize = [5250, 5250]; + }; + if (_worldname == "utes") exitWith { + _centerPos = [3519.8037, 3703.0649]; + _markerSize = [1000, 1000]; + }; + if (_worldname == "zargabad") exitWith { + _centerPos = [3917.6201, 3800.0376]; + _markerSize = [2000, 2000]; + }; + if ((_centerPos distance [0,0,0]) < 5) then { + _centerPos = getArray(configFile >> "CfgWorlds" >> worldName >> "centerPosition"); + }; +}; +_centerMarker setMarkerPos _centerPos; +_centerMarker setMarkerSize _markerSize; + +//Load map-specific configuration file. Config files contain trigger/marker information, addition and removal of items/skins, and/or other variable customizations. +//Classname files will overwrite basic settings specified in base_classnames.sqf +if (_worldname in ["chernarus","utes","zargabad","fallujah","takistan","tavi","lingor","namalsk","mbg_celle2","oring","panthera2","isladuala","sara","smd_sahrani_a2","trinity","napf","caribou","cmr_ovaron","sauerland","fdf_isle1_a","caribou"]) then { + if (DZAI_modAutoDetect) then { + if (DZAI_modName in ["epoch","unleashed","overwatch","huntinggrounds"]) then { + call compile preprocessFileLineNumbers format ["%1\init\world_classname_configs\dayz_%2.sqf",DZAI_directory,DZAI_modName]; + } else { + call compile preprocessFileLineNumbers format ["%1\init\world_classname_configs\default_classnames\%2.sqf",DZAI_directory,_worldname]; + }; + }; + [] execVM format ["%1\init\world_spawn_configs\world_%2.sqf",DZAI_directory,_worldname]; +} else { + if (DZAI_modAutoDetect) then { + if (DZAI_modName == "epoch") then { + call compile preprocessFileLineNumbers format ["%1\init\world_classname_configs\dayz_epoch_classnames.sqf",DZAI_directory]; + }; + }; + if (DZAI_staticAI) then {[] execVM format ["%1\scripts\setup_autoStaticSpawns.sqf",DZAI_directory];}; +}; + +//Continue loading required DZAI script files +[] execVM format ['%1\scripts\DZAI_startup.sqf',DZAI_directory]; + +//Report DZAI startup settings to RPT log +diag_log format ["[DZAI] DZAI settings: Debug Level: %1. DebugMarkers: %2. WorldName: %3. ModName: %4 (Ver: %5). DZAI_dynamicWeaponList: %6. VerifyTables: %7.",DZAI_debugLevel,((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}),_worldname,DZAI_modName,DZAI_modVersion,DZAI_dynamicWeaponList,DZAI_verifyTables]; +diag_log format ["[DZAI] AI spawn settings: Static: %1. Dynamic: %2. Random: %3. Air: %4. Land: %5.",DZAI_staticAI,DZAI_dynAISpawns,(DZAI_maxRandomSpawns > 0),(DZAI_maxHeliPatrols>0),(DZAI_maxLandPatrols>0)]; +diag_log format ["[DZAI] AI settings: DZAI_findKiller: %1. DZAI_useHealthSystem: %2. DZAI_weaponNoise: %3. DZAI_zombieEnemy: %4.",DZAI_findKiller,DZAI_useHealthSystem,DZAI_weaponNoise,DZAI_zombieEnemy]; +diag_log format ["[DZAI] DZAI loading completed in %1 seconds.",(diag_tickTime - _startTime)]; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/#readme - Read this before editing classnames.txt b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/#readme - Read this before editing classnames.txt new file mode 100755 index 0000000..f68633b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/#readme - Read this before editing classnames.txt @@ -0,0 +1,16 @@ +Explanation for world_classname_configs directory +----------------------------------- + +If DZAI_modAutoDetect is enabled in dzai_config.sqf, DZAI will automatically detect if one of the following DayZ mods is active and load additional classnames for skins, weapons, and/or other items: + +- DayZ Epoch (dayz_epoch.sqf) +- DayZ Hunting Grounds (dayz_huntinggrounds.sqf) +- DayZ Overwatch (dayz_overwatch.sqf) +- DayZ Unleashed (dayz_unleashed.sqf) + +Tips: +1. If none of the above mods are detected, one of the .sqf files in the default_classnames folder will be read instead, depending on which map is being used. +2. If combinations of the above mods are loaded, the last mod in the load order will determine which mod is detected by DZAI. +3. The classnames specified in dzai_config.sqf are always loaded first and may be modified or overwritten later if DZAI_modAutoDetect is enabled. +4. If fully manual control over classname configuration is wanted, set DZAI_modAutoDetect to false in dzai_config.sqf. + With DZAI_modAutoDetect set to false, dzai_config.sqf will be the only source of classname information used by DZAI. diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/dayz_epoch.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/dayz_epoch.sqf new file mode 100755 index 0000000..1d2427b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/dayz_epoch.sqf @@ -0,0 +1,27 @@ +/* + DayZ Epoch configuration + + Description: Adds DayZ Epoch-specific items to DZAI loot tables if Epoch mode is on. + + Last updated: 5:10 PM 9/8/2013 + +*/ + +DZAI_metalBars = [["ItemSilverBar",0.15],["ItemSilverBar10oz",0.10],["ItemGoldBar",0.075],["ItemGoldBar10oz",0.035]]; //Format: [["Bar1Classname",Bar1Chance],["Bar2Classname",Bar2Chance],["Bar2Classname",Bar2Chance]] +DZAI_metalBarNum = 2; //Maximum number of metal bars to generate + +DZAI_banditTypesNew = ["Bandit1_DZ","BanditW1_DZ","BanditW2_DZ","Camo1_DZ","Sniper1_DZ","Soldier1_DZ","Survivor2_DZ","SurvivorW2_DZ","GUE_Soldier_MG_DZ","GUE_Soldier_Sniper_DZ","GUE_Soldier_Crew_DZ","GUE_Soldier_2_DZ","RU_Policeman_DZ","Pilot_EP1_DZ","Haris_Press_EP1_DZ","Ins_Soldier_GL_DZ","GUE_Commander_DZ","Functionary1_EP1_DZ","Priest_DZ","Rocker1_DZ","Rocker2_DZ","Rocker3_DZ","Rocker4_DZ","TK_INS_Warlord_EP1_DZ","TK_INS_Soldier_EP1_DZ","Soldier_Sniper_PMC_DZ","Soldier_TL_PMC_DZ","FR_OHara_DZ","FR_Rodriguez_DZ","CZ_Soldier_Sniper_EP1_DZ","Graves_Light_DZ","Bandit2_DZ","SurvivorWcombat_DZ","CZ_Special_Forces_GL_DES_EP1_DZ","Soldier_Bodyguard_AA12_PMC_DZ","GUE_Soldier_CO_DZ"]; +DZAI_ediblesNew = ["ItemSodaRabbit","ItemSodaMtngreen","ItemSodaClays","ItemSodaSmasht","ItemSodaDrwaste","ItemSodaLemonade","ItemSodaLvg","ItemSodaMzly","FoodBioMeat","FoodCanGriff","FoodCanBadguy","FoodCanBoneboy","FoodCanCorn","FoodCanCurgon","FoodCanDemon","FoodCanFraggleos","FoodCanHerpy","FoodCanOrlok","FoodCanPowell","FoodCanTylers","FoodPumpkin","FoodSunFlowerSeed"]; +DZAI_MiscItemSNew = ["ItemZombieParts"]; + +DZAI_Backpacks0New = ["TerminalPack_DZE1"]; //Added: DZ_TerminalPack_EP1 +DZAI_Backpacks1New = ["TerminalPack_DZE1", "CompactPack_DZE1"]; //Added: DZ_TerminalPack_EP1, DZ_CompactPack_EP1 +DZAI_Backpacks2New = ["CompactPack_DZE1","GunBag_DZE1"]; //Added: DZ_CompactPack_EP1, DZ_GunBag_EP1 +DZAI_Backpacks3New = ["GunBag_DZE1","LargeGunBag_DZE1"]; //Added: DZ_GunBag_EP1, DZ_LargeGunBag_EP1 + +//Do not edit below lines. Replaces standard hatchet and matchbox classnames with Epoch versions. +(DZAI_tools0 select 3) set [0,"ItemHatchet"]; +(DZAI_tools0 select 7) set [0,"ItemMatchbox"]; +(DZAI_tools1 select 3) set [0,"ItemHatchet"]; +(DZAI_tools1 select 7) set [0,"ItemMatchbox"]; +diag_log "[DZAI] Epoch classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/dayz_huntinggrounds.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/dayz_huntinggrounds.sqf new file mode 100755 index 0000000..22b80c4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/dayz_huntinggrounds.sqf @@ -0,0 +1,13 @@ +/* + DayZ Hunting Grounds Classname Configuration + + Last updated: 10:50 AM 9/14/2013 + +*/ + +DZAI_BanditTypesNew = ["Gangman_Blue_DZ","Gangman_Red_DZ","HuntingGrounds1_DZ","HuntingGrounds2_DZ","HuntingGrounds3_DZ","HuntingGrounds4_DZ","HuntingGrounds5_DZ","HuntingGrounds6_DZ","HuntingGrounds7_DZ","SurvivorW2_DZ","Survivor2_DZ","Sniper1_DZ","Camo1_DZ","BanditW1_DZ","Bandit1_DZ","Bandit2_DZ","Bandit3_DZ"]; +DZAI_Backpacks1New = ["DZ_TerminalPack_EP1"]; //Tier 1 backpacks +DZAI_Backpacks2New = ["DZ_GunBag_EP1","DZ_LargeGunBag_EP1"]; //Tier 2 backpacks +DZAI_Backpacks3New = ["DZ_GunBag_EP1","DZ_LargeGunBag_EP1"]; //Tier 3 backpacks + +diag_log "[DZAI] DayZ Hunting Grounds classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/dayz_overwatch.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/dayz_overwatch.sqf new file mode 100755 index 0000000..85dddf8 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/dayz_overwatch.sqf @@ -0,0 +1,10 @@ +/* + DayZ Overwatch Classname Configuration + + Last updated: 10:48 AM 9/14/2013 + +*/ + +DZAI_BanditTypesNew = ["SurvivorW2_DZ","Survivor2_DZ","Sniper1_DZ","Sniper2_DZ","Sniper3_DZ","Sniper4_DZ","Sniper5_DZ","Sniper6_DZ","Soldier1_DZ","Camo1_DZ","Camo2_DZ","Camo3_DZ","Camo4_DZ","Camo5_DZ","Camo6_DZ","Camo7_DZ","Camo8_DZ","Camo9_DZ","Camo10_DZ","Camo11_DZ","Camo12_DZ","Camo13_DZ","Camo14_DZ","Camo15_DZ","Camo16_DZ","Camo17_DZ","Camo18_DZ","Camo19_DZ","Camo20_DZ","Camo21_DZ","Camo22_DZ","Camo23_DZ","Camo24_DZ","BanditW1_DZ","Bandit1_DZ"]; + +diag_log "DayZ Overwatch classnames loaded."; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/dayz_unleashed.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/dayz_unleashed.sqf new file mode 100755 index 0000000..d69ff17 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/dayz_unleashed.sqf @@ -0,0 +1,10 @@ +/* + Napf Classname Configuration + + Last updated: 9:09 PM 1/23/2014 + +*/ + +DZAI_BanditTypesNew = ["BRT_Commander_DZ", "BRT_Officer_DZ", "BRT_Pilot_DZ", "BRT_Scout_DZ", "BRT_Looter_DZ", "BRT_Grunt_DZ"]; + +diag_log "[DZAI] DayZ Unleashed classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/caribou.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/caribou.sqf new file mode 100755 index 0000000..59a55a8 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/caribou.sqf @@ -0,0 +1,8 @@ +/* + Caribou Classname Configuration + + Last updated: 9:09 PM 1/23/2014 + +*/ + +diag_log "[DZAI] Caribou classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/chernarus.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/chernarus.sqf new file mode 100755 index 0000000..dd2f5e5 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/chernarus.sqf @@ -0,0 +1,8 @@ +/* + DayZ (Default) Classname Configuration + + Last updated: 10:47 AM 9/14/2013 + +*/ + +diag_log "DayZ (Default) classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/cmr_ovaron.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/cmr_ovaron.sqf new file mode 100755 index 0000000..70031cd --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/cmr_ovaron.sqf @@ -0,0 +1,8 @@ +/* + Ovaron Classname Configuration + + Last updated: 9:09 PM 1/23/2014 + +*/ + +diag_log "[DZAI] Ovaron classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/fallujah.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/fallujah.sqf new file mode 100755 index 0000000..8d56b8d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/fallujah.sqf @@ -0,0 +1,9 @@ +/* + Fallujah Classname Configuration + + Last updated: + +*/ + +diag_log "[DZAI] Fallujah classnames loaded."; + \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/fdf_isle1.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/fdf_isle1.sqf new file mode 100755 index 0000000..42362f0 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/fdf_isle1.sqf @@ -0,0 +1,8 @@ +/* + Podagorsk Classname Configuration + + Last updated: 9:09 PM 1/23/2014 + +*/ + +diag_log "[DZAI] Podagorsk classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/isladuala.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/isladuala.sqf new file mode 100755 index 0000000..20412d1 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/isladuala.sqf @@ -0,0 +1,8 @@ +/* + Isladuala Classname Configuration + + Last updated: + +*/ + +diag_log "[DZAI] Isladuala classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/lingor.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/lingor.sqf new file mode 100755 index 0000000..1e0d35e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/lingor.sqf @@ -0,0 +1,8 @@ +/* + Lingor Classname Configuration + + Last updated: 10:50 AM 9/14/2013 + +*/ + +diag_log "[DZAI] Lingor classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/mbg_celle2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/mbg_celle2.sqf new file mode 100755 index 0000000..9802ec8 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/mbg_celle2.sqf @@ -0,0 +1,12 @@ +/* + Celle Classname Configuration + + Last updated: 11:15 AM 6/16/2014 + +*/ + +//Add classnames +DZAI_BanditTypesNew = ["Sniper1_DZC","Sniper2_DZC","Sniper3_DZC","Clan_Officer1_DZC","Clan_Officer2_DZC","Clan_Officer3_DZC","Clan_Delta1","Clan_Delta2","Clan_Delta3_DZC","Clan_UN_Helmet_DZC","Clan_UN_Cap_DZC","Clan_GER_DZC","Clan_GER_Hvy_DZC","Clan_Terror_DZC","Clan_Terror2_DZC","Clan_nobackpack_INS1_DZC","Clan_nobackpack_INS2_DZC","Clan_nobackpack_INS3_DZC","Clan_nobackpack_suit_DZC","Snow_Trooper1_DZC","Snow_Trooper2_DZC","Soldier1_DZC","Soldier2_DZC","Soldier3_DZC","Soldier1_SF_DZC","Soldier2_SF_DZC","Soldier3_SF_DZC","BAF_Officer1_DZC","BAF_Officer2_DZC","BAF_Officer3_DZC","CZ_Officer1_DZC","CZ_Officer2_DZC","CZ_Officer3_DZC","GER_Officer1_DZC","CZ_Heavy1_DZC","CZ_Heavy2_DZC","CZ_Heavy3_DZC","BAF_Heavy1_DZC","BAF_Heavy2_DZC","BAF_Heavy3_DZC","US_Heavy1_DZC","US_Heavy2_DZC","CIV_Pilot1_DZC","US_Pilot1_DZC","CZ_Pilot1_DZC","CZ_Pilot2_DZC","CZ_Pilot3_DZC","BAF_Pilot1_DZC","BAF_Pilot2_DZC","BAF_Pilot3_DZC","Doctor_DZC","Civ_Soldier_DZC","Cameraman_DZC","EuroMan01_DZC","EuroMan02_DZC","Storm_Trooper1_DZC","Storm_Trooper2_DZC","Storm_Trooper3_DZC","Storm_Trooper4_DZC","PrivateSec1_DZC","PrivateSec2_DZC","PrivateSec3_DZC","Asano_DZC","Camo1_DZC","Camo2_DZC","Camo3_DZC","Soldier1_STD_DZC","Soldier2_STD_DZC","Soldier3_STD_DZC","Soldier1_GL_DZC","Soldier2_GL_DZC","Soldier3_GL_DZC","Soldier1_AT_DZC","Soldier2_AT_DZC","Soldier3_AT_DZC","Soldier1_SL_DZC","Soldier2_SL_DZC","Soldier3_SL_DZC"]; +DZAI_EdiblesNew = ["FoodCanGriff","FoodCanBadguy","FoodCanBoneboy","FoodCanCorn","FoodCanCurgon","FoodCanDemon","FoodCanFraggleos","FoodCanHerpy","FoodCanOrlok","FoodCanPowell","FoodCanTylers","ItemSodaMtngreen","ItemSodaR4z0r","ItemSodaClays","ItemSodaSmasht","ItemSodaDrwaste","ItemSodaLemonade","ItemSodaLvg","ItemSodaMzly","ItemSodaRabbit"]; + +diag_log "[DZAI] Celle classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/namalsk.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/namalsk.sqf new file mode 100755 index 0000000..902230a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/namalsk.sqf @@ -0,0 +1,19 @@ +/* + Namalsk Classname Configuration + + Last updated: 6:26 PM 1/24/2014 + +*/ + +//Classname-related settings for Namalsk +DZAI_BanditTypes = [DZAI_BanditTypes,["CamoWinterW_DZN", "CamoWinter_DZN", "Sniper1W_DZN"]] call DZAI_append; +DZAI_tools0 = [DZAI_tools0,[["BrokenItemGPS",0.04],["BrokenNVGoggles",0.04],["BrokenItemRadio",0.02],["ItemSolder",0.01],["APSI",0.01]]] call DZAI_append; +DZAI_tools1 = [DZAI_tools0,[["BrokenItemGPS",0.04],["BrokenNVGoggles",0.04],["BrokenItemRadio",0.02],["ItemSolder",0.01],["APSI",0.01]]] call DZAI_append; + +//Modify item-related settings for Namalsk +DZAI_gadgets0 set [1,["NVGoggles",0.005]]; //Reduce probability of functional NVGs +DZAI_tools0 set [9,["ItemGPS",0.005]]; //Reduce probability of functional GPS +DZAI_chanceMedicals = 0.25; //Reduce probability of medical items +DZAI_chanceEdibles = 0.25; //Reduce probability of edible items + +diag_log "[DZAI] Namalsk classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/napf.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/napf.sqf new file mode 100755 index 0000000..9a96646 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/napf.sqf @@ -0,0 +1,8 @@ +/* + Napf Classname Configuration + + Last updated: 9:09 PM 1/23/2014 + +*/ + +diag_log "[DZAI] Napf classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/oring.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/oring.sqf new file mode 100755 index 0000000..480c40a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/oring.sqf @@ -0,0 +1,10 @@ +/* + Oring Classname Configuration + + Last updated: 6:35 PM 1/24/2014 + +*/ + +DZAI_BanditTypesNew = ["BW1_DZ","Civilian2_DZ","Civilian3_DZ","Civilian4_DZ","Civilian5_DZ","SurvivorW2_DZ","Survivor2_DZ","Sniper1_DZ","Soldier1_DZ","Camo1_DZ","BanditW1_DZ","Bandit1_DZ","SurvivorW2_DZ"]; + +diag_log "[DZAI] Oring classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/panthera2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/panthera2.sqf new file mode 100755 index 0000000..d28e56a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/panthera2.sqf @@ -0,0 +1,8 @@ +/* + Panthera Classname Configuration + + Last updated: + +*/ + +diag_log "[DZAI] Panthera classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/sara.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/sara.sqf new file mode 100755 index 0000000..989ed66 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/sara.sqf @@ -0,0 +1,11 @@ +/* + Sahrani Classname Configuration + + Last updated: 1:14 PM 6/3/2013 + +*/ + +DZAI_BanditTypesNew = ["Rocket_DZ","BanditSkin_DZ","SniperBandit_DZ","SniperBanditW_DZ","Sniper1W_DZ","BanditSkinW_DZ"]; +DZAI_MiscItemSNew = ["ItemNails"]; + +diag_log "[DZAI] Sahrani classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/sauerland.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/sauerland.sqf new file mode 100755 index 0000000..5da8c23 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/sauerland.sqf @@ -0,0 +1,8 @@ +/* + Sauerland Classname Configuration + + Last updated: 9:09 PM 1/23/2014 + +*/ + +diag_log "[DZAI] Sauerland classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/smd_sahrani_a2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/smd_sahrani_a2.sqf new file mode 100755 index 0000000..989ed66 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/smd_sahrani_a2.sqf @@ -0,0 +1,11 @@ +/* + Sahrani Classname Configuration + + Last updated: 1:14 PM 6/3/2013 + +*/ + +DZAI_BanditTypesNew = ["Rocket_DZ","BanditSkin_DZ","SniperBandit_DZ","SniperBanditW_DZ","Sniper1W_DZ","BanditSkinW_DZ"]; +DZAI_MiscItemSNew = ["ItemNails"]; + +diag_log "[DZAI] Sahrani classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/takistan.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/takistan.sqf new file mode 100755 index 0000000..7b65a53 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/takistan.sqf @@ -0,0 +1,8 @@ +/* + Takistan Classname Configuration + + Last updated: + +*/ + +diag_log "[DZAI] Takistan classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/tavi.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/tavi.sqf new file mode 100755 index 0000000..be04d34 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/tavi.sqf @@ -0,0 +1,8 @@ +/* + Taviana Classname Configuration + + Last updated: + +*/ + +diag_log "[DZAI] Taviana classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/trinity.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/trinity.sqf new file mode 100755 index 0000000..da97e43 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/trinity.sqf @@ -0,0 +1,10 @@ +/* + Trinity Island Classname Configuration + + Last updated: 10:55 AM 9/14/2013 + +*/ + +DZAI_BanditTypesNew = ["Coach_DZT","SF_Survivor_DZT","Merc_GasMask_DZT","Merc_Balaclava_DZT","Bandit_1_1_DZT","Bandit_1_2_DZT","Bandit_1_3_DZT"]; + +diag_log "[DZAI] Trinity Island classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/utes.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/utes.sqf new file mode 100755 index 0000000..94e9fec --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/utes.sqf @@ -0,0 +1,15 @@ +/* + Utes Classname Configuration + + Last updated: 10:56 AM 9/14/2013 + +*/ + + +//Weapongrade chances adjusted for Utes to allow for more aggressive gameplay +DZAI_gradeChances0 = [0.85,0.13,0.02,0.00]; +DZAI_gradeChances2 = [0.50,0.46,0.10,0.01]; +DZAI_gradeChances2 = [0.20,0.60,0.15,0.05]; +DZAI_gradeChances3 = [0.00,0.60,0.33,0.07]; + +diag_log "[DZAI] Utes classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/zargabad.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/zargabad.sqf new file mode 100755 index 0000000..60b6f77 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_classname_configs/default_classnames/zargabad.sqf @@ -0,0 +1,8 @@ +/* + Zargabad Classname Configuration + + Last updated: 10:56 AM 9/14/2013 + +*/ + +diag_log "[DZAI] Zargabad classnames loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/#readme - directory guide and custom spawn info.txt b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/#readme - directory guide and custom spawn info.txt new file mode 100755 index 0000000..1827b99 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/#readme - directory guide and custom spawn info.txt @@ -0,0 +1,34 @@ +Directory Guide: + +(Folders) +--------- + +Custom Spawns +-------------- + +custom_spawns: Custom static spawn definitions. + +custom_markers: Custom spawn point definitions, area blacklists for dynamic AI spawns. + + + +Preset Static Spawns +-------------- + +spawn_areas: Markers defining static spawn areas (Used for: Chernarus, Trinity Island, Napf, Sauerland)* + +spawn_markers: Markers defining static spawn points + + +* Static spawn areas for every map to be converted to the new format eventually. +I do all of this by hand, so it will take some time to fully complete. + + + +(Files) +--------- + +world_(mapname).sqf: Pre-defined static spawn definitions. +- Spawn areas (for Chernarus, Trinity Island, Napf, Sauerland) are defined in spawn_areas folder. +- Manual spawn points are defined in spawn_markers folder. + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_caribou.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_caribou.sqf new file mode 100755 index 0000000..1f999f3 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_caribou.sqf @@ -0,0 +1,27 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_chernarus.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_chernarus.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_chernarus.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_cmr_ovaron.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_cmr_ovaron.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_cmr_ovaron.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_fallujah.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_fallujah.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_fallujah.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_isladuala.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_isladuala.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_isladuala.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_lingor.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_lingor.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_lingor.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_mbg_celle2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_mbg_celle2.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_mbg_celle2.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_namalsk.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_namalsk.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_namalsk.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_napf.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_napf.sqf new file mode 100755 index 0000000..4e147b5 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_napf.sqf @@ -0,0 +1,28 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_oring.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_oring.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_oring.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_panthera2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_panthera2.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_panthera2.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_podagorsk.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_podagorsk.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_podagorsk.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_sara.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_sara.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_sara.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_sauerland.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_sauerland.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_sauerland.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_takistan.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_takistan.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_takistan.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_tavi.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_tavi.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_tavi.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_trinity.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_trinity.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_trinity.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_utes.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_utes.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_utes.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_zargabad.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_zargabad.sqf new file mode 100755 index 0000000..4255ba2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_markers/cust_markers_zargabad.sqf @@ -0,0 +1,29 @@ +/* + Custom Marker Requirements: + + Spawn markers: The area covered by the marker will be used as the patrol and spawning area. + + 1. Marker shape must be Ellipse (Could be rectangular but the function will consider the marker as elliptical regardless) + 2. Marker should have identical x and y dimensions. If they are different, the smaller dimension will be used instead. + + Blacklist markers: If a player is within this area, they will not be selected as a target for dynamic AI spawns. + + 1. Marker shape may be Ellipse or Rectangle + 2. Marker dimensions should cover the area to be blacklisted. + + Example Marker (Note: the marker name must be unique! In this example, it's named "dzaicustomspawntest"): + + _this = createMarker ["dzaicustomspawntest", [6650.9883, 9411.541, -6.1035156e-005]]; + _this setMarkerShape "ELLIPSE"; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _this setMarkerSize [200, 200]; + _this setMarkerAlpha 0; + _dzaicustomspawntest = _this; //_dzaicustomspawntest must be a unique name + + Note: This marker is used in the example found in the custom_spawns config files. +*/ + +//----------------------------Add your custom markers below this line ---------------------------- + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_caribou.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_caribou.sqf new file mode 100755 index 0000000..d99cc13 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_caribou.sqf @@ -0,0 +1,47 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_chernarus.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_chernarus.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_chernarus.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_cmr_ovaron.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_cmr_ovaron.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_cmr_ovaron.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_fallujah.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_fallujah.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_fallujah.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_isladuala.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_isladuala.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_isladuala.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_lingor.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_lingor.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_lingor.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_mbg_celle2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_mbg_celle2.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_mbg_celle2.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_namalsk.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_namalsk.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_namalsk.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_napf.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_napf.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_napf.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_oring.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_oring.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_oring.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_panthera2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_panthera2.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_panthera2.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_podagorsk.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_podagorsk.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_podagorsk.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_sara.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_sara.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_sara.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_sauerland.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_sauerland.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_sauerland.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_takistan.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_takistan.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_takistan.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_tavi.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_tavi.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_tavi.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_trinity.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_trinity.sqf new file mode 100755 index 0000000..d99cc13 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_trinity.sqf @@ -0,0 +1,47 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_utes.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_utes.sqf new file mode 100755 index 0000000..d99cc13 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_utes.sqf @@ -0,0 +1,47 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_zargabad.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_zargabad.sqf new file mode 100755 index 0000000..7be2f67 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/custom_spawns/cust_spawns_zargabad.sqf @@ -0,0 +1,48 @@ +/* + DZAI Custom Spawn Definitions File + + Description: Defines all custom AI spawns here. Note that you must first define a custom spawn area + by creating an area marker in the appropriate file in the custom_markers folder. + + Explanation of DZAI_spawn_units (For spawning infantry AI) + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + 2, //This trigger will spawn a group of 2 AI units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true //(OPTIONAL)* Respawn setting. True: AI spawned will respawn (Default). False: AI will not respawn. Spawn area will be deleted when all units have been killed. + ] call DZAI_spawn_units; + + The above DZAI_spawn_units call will create 2 respawning AI units with weapons from DayZ's military loot table. + + [ + "dzaicustomspawntest", //This is the marker name to be used as the patrol and spawning area. + "ArmoredSUV_PMC_DZ", //Insert a vehicle classname here. Acceptable vehicle types: Air or Land vehicles. Spawn will be cancelled if classname is invalid or banned. + [3,1], //Set number of passenger and gunner units here. A driver unit will always be created. DZAI will not add more units to a vehicle than the vehicle type allows. Only land vehicles may have passenger units. + 1, //Weapon grade setting. 1 = weapon chosen from Military loot table (see below for explanation of Weapon Grade) + true, //(OPTIONAL)* Respawn setting. True: AI will respawn with vehicle after a specified time. False: AI and vehicle will not respawn after being destroyed. (Default) + 600 //(OPTIONAL)* Respawn time. Number of seconds to wait until AI and vehicle are respawned. (Default: 600). Timer begins after AI group is wiped out or vehicle is destroyed, whichever comes first. + ] call DZAI_spawn_vehicle; + + The above DZAI_spawn_vehicle call will spawn an Armored SUV with 1 driver, 3 passenger units and 1 gunner unit with military-grade weapons, and will respawn after 600 seconds (10 minutes). + + * Optional parameters may be left out of the function call. A default action will be taken instead. + + Weapon Grade explanation: + + 0: Approx 40% of maximum AI skill potential - weapon from Farm/Residential loot table. + 1: Approx 55% of maximum AI skill potential - weapon from Military loot table + 2: Approx 70% of maximum AI skill potential - weapon from MilitarySpecial (Barracks) loot table + 3: Approx 80% of maximum AI skill potential - weapon from HeliCrash loot table + + + +*/ + +//----------------------------Add your custom spawn definitions below this line ---------------------------- + + + + + + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_caribou.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_caribou.sqf new file mode 100755 index 0000000..1c74154 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_caribou.sqf @@ -0,0 +1,175 @@ +/* + Caribou Frontier Spawn Area Definitions + Last updated: 9:35 PM 8/28/2013 + +*/ + +_this = createMarker ["DZAI_EastsidePort", [5416.1958, 1479.9331, 9.478056]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_0 = _this; + +_this = createMarker ["DZAI_Hightower", [4743.0142, 1878.2212]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_1 = _this; + +_this = createMarker ["DZAI_NorthStation", [3089.8665, 3129.3867, 7.5976486]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_4 = _this; + +_this = createMarker ["DZAI_EastStation", [3227.7844, 2431.2456, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_5 = _this; + +_this = createMarker ["DZAI_WestStationBarracks", [2638.4548, 2757.9063]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_6 = _this; + +_this = createMarker ["DZAI_MountRageAFB_N", [1801.0226, 3510.9883]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_7 = _this; + +_this = createMarker ["DZAI_MountRageAFB_S", [1801.6139, 3344.8667]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_8 = _this; + +_this = createMarker ["DZAI_FortCrassus_N", [997.00989, 3828.0405]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_9 = _this; + +_this = createMarker ["DZAI_FortCrassus_S", [954.55841, 3696.3979]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_10 = _this; + +_this = createMarker ["DZAI_CosytonSaw", [2575.0391, 3881.188]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_11 = _this; + +_this = createMarker ["DZAI_BrigadeHalls", [4208.7847, 4055.5879]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_12 = _this; + +_this = createMarker ["DZAI_CommunicationsStation", [5251.5288, 3615.0811]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_13 = _this; + +_this = createMarker ["DZAI_Valleypoint", [5619.79, 2887.3618]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_14 = _this; + +_this = createMarker ["DZAI_BlaiseEnd", [5001.042, 5095.2754]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_15 = _this; + +_this = createMarker ["DZAI_SklonHolma", [5882.4219, 5654.4341]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_16 = _this; + +_this = createMarker ["DZAI_OutpostEast", [5682.2114, 4224.3804]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_17 = _this; + +_this = createMarker ["DZAI_SevernojNasosnoj", [5105.7979, 6752.8726]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [50, 50]; +_marker_18 = _this; + +_this = createMarker ["DZAI_PointRocksBarracks", [3537.7351, 5625.4648]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_19 = _this; + +_this = createMarker ["DZAI_OutpostWest", [3418.6262, 5936.686]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_20 = _this; + +_this = createMarker ["DZAI_WintryStation", [1784.5085, 7438.2578]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_21 = _this; + +_this = createMarker ["DZAI_ShootingRange", [1056.7444, 3290.873]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_22 = _this; + +diag_log "Caribou Frontier spawn areas loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_chernarus.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_chernarus.sqf new file mode 100755 index 0000000..ac3bc95 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_chernarus.sqf @@ -0,0 +1,567 @@ +/* + Chernarus Spawn Area Definitions + Last updated: 3:01 PM 12/24/2013 + +*/ + +_this = createMarker ["DZAI_Kamenka", [1867.8379, 2290.2583]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_114 = _this; + +_this = createMarker ["DZAI_Komarovo", [3633.8445, 2392.9741]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_115 = _this; + +_this = createMarker ["DZAI_Balota", [4482.1094, 2424.5408, 4.1991434]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_116 = _this; + +_this = createMarker ["DZAI_BalotaAirstrip", [4787.6616, 2551.0151]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_117 = _this; + +_this = createMarker ["DZAI_Cherno1", [6560.6025, 2419.9658]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_118 = _this; + +_this = createMarker ["DZAI_Cherno2", [6504.7559, 2773.7056, 6.6184349]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_119 = _this; + +_this = createMarker ["DZAI_Cherno4", [6674.2568, 2583.6072]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_120 = _this; + +_this = createMarker ["DZAI_Cherno3", [6975.0464, 2645.3413]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_121 = _this; + +_this = createMarker ["DZAI_Elektro1", [10168.299, 1954.9338]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_122 = _this; + +_this = createMarker ["DZAI_Elektro3", [10454.194, 2245.2053, 9.1402712]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_123 = _this; + +_this = createMarker ["DZAI_Elektro2", [10469.834, 2467.689]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_125 = _this; + +_this = createMarker ["DZAI_Skalisty", [13657.813, 2925.7288]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_127 = _this; + +_this = createMarker ["DZAI_Kamyshovo", [12067.335, 3621.5562]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_129 = _this; + +_this = createMarker ["DZAI_Tulga", [12866.335, 4463.1636]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_130 = _this; + +_this = createMarker ["DZAI_Rog", [11254.334, 4278.8921]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_132 = _this; + +_this = createMarker ["DZAI_Pusta", [9162.2178, 3838.3701]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_133 = _this; + +_this = createMarker ["DZAI_ThreeValleys", [13256.896, 5440.0186]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_134 = _this; + +_this = createMarker ["DZAI_Solnichniy", [13334.822, 6261.1094]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_135 = _this; + +_this = createMarker ["DZAI_SolnichniyFactory", [13090.676, 7070.6646]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_137 = _this; + +_this = createMarker ["DZAI_Nizhnoye", [12889.117, 8149.4814]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_138 = _this; + +_this = createMarker ["DZAI_Orlovets", [12163.348, 7298.52]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_139 = _this; + +_this = createMarker ["DZAI_Berezino", [12031.008, 9118.2402]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_140 = _this; + +_this = createMarker ["DZAI_Berezino4", [12249.986, 9588.9346]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_141 = _this; + +_this = createMarker ["DZAI_Berezino2", [12734.031, 9623.2559]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_142 = _this; + +_this = createMarker ["DZAI_Berezino3", [12870.814, 10054.313]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_143 = _this; + +_this = createMarker ["DZAI_Khelm", [12313.479, 10851.807, 4.392067]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_144 = _this; + +_this = createMarker ["DZAI_Olsha", [13367.774, 12848.616]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_145 = _this; + +_this = createMarker ["DZAI_NEAF", [12076.522, 12637.961, 0.056991577]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_146 = _this; + +_this = createMarker ["DZAI_Krasnostav", [11128.36, 12342.763]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_147 = _this; + +_this = createMarker ["DZAI_Gvozdno", [8717.3887, 11794.308]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [225, 225]; +_marker_148 = _this; + +_this = createMarker ["DZAI_Pavlovo", [1700.5154, 3838.8384]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_149 = _this; + +_this = createMarker ["DZAI_Bor", [3338.4927, 3923.6582, 3.5301208]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_150 = _this; + +_this = createMarker ["DZAI_Msta", [11345.774, 5475.9185]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_151 = _this; + +_this = createMarker ["DZAI_Staroye", [10126.361, 5483.3281]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_152 = _this; + +_this = createMarker ["DZAI_Dolina", [11281.19, 6607.8843]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_154 = _this; + +_this = createMarker ["DZAI_OrlovetsFactory", [11457.82, 7483.894, 5.1239624]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_155 = _this; + +_this = createMarker ["DZAI_DubrovkaNW", [10007.422, 10392.041, 4.4281769]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_156 = _this; + +_this = createMarker ["DZAI_Dubrovka", [10467.023, 9791.6279]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [225, 225]; +_marker_157 = _this; + +_this = createMarker ["DZAI_Polana", [10713.679, 8045.3086]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_158 = _this; + +_this = createMarker ["DZAI_Mogilevka", [7599.5488, 5169.6831]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_159 = _this; + +_this = createMarker ["DZAI_Nadezhdino", [5850.4556, 4746.9932]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_161 = _this; + +_this = createMarker ["DZAI_Zub", [6548.4966, 5590.0073]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_163 = _this; + +_this = createMarker ["DZAI_Kozlovka", [4432.9712, 4648.2036]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_164 = _this; + +_this = createMarker ["DZAI_Drozhino", [3415.1025, 4941.2129]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_165 = _this; + +_this = createMarker ["DZAI_Zelenogorsk", [2743.4209, 5304.1323]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [225, 225]; +_marker_166 = _this; + +_this = createMarker ["DZAI_GreenMountain", [3720.9399, 6005.7715]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_167 = _this; + +_this = createMarker ["DZAI_Shakhovka", [9659.7217, 6564.8687]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_168 = _this; + +_this = createMarker ["DZAI_Guglovo", [8462.3857, 6697.4175]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_169 = _this; + +_this = createMarker ["DZAI_Vyshnoye", [6538.7881, 6129.7109, 5.9794617]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_170 = _this; + +_this = createMarker ["DZAI_Pulkovo", [4943.1729, 5617.7466, 5.722168]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_171 = _this; + +_this = createMarker ["DZAI_Sosnovka", [2530.4241, 6358.1699, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_172 = _this; + +_this = createMarker ["DZAI_Myshkino", [1994.825, 7389.6553]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_173 = _this; + +_this = createMarker ["DZAI_Pustoshka", [3057.0288, 7854.3584]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_174 = _this; + +_this = createMarker ["DZAI_Vybor", [3860.8384, 8891.998]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_175 = _this; + +_this = createMarker ["DZAI_Pogorevka", [4523.5366, 6417.9312]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_176 = _this; + +_this = createMarker ["DZAI_Rogovo", [4743.606, 6770.0415, 2.3750305]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_177 = _this; + +_this = createMarker ["DZAI_Gorka", [9615.8896, 8845.5264]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [225, 225]; +_marker_178 = _this; + +_this = createMarker ["DZAI_NovySobor", [7039.3799, 7689.1279]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [225, 225]; +_marker_179 = _this; + +_this = createMarker ["DZAI_StarySobor", [6158.9712, 7749.9517]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [225, 225]; +_marker_180 = _this; + +_this = createMarker ["DZAI_Kabanino", [5380.0811, 8599.0205]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_181 = _this; + +_this = createMarker ["DZAI_Lopatino", [2769.7209, 9947.7793]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_182 = _this; + +_this = createMarker ["DZAI_DevilsCastle", [6894.8286, 11444.771]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_183 = _this; + +_this = createMarker ["DZAI_Grishino", [6018.1162, 10304.021]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [225, 225]; +_marker_184 = _this; + +_this = createMarker ["DZAI_NWAF2", [4762.6807, 10202.887]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_185 = _this; + +_this = createMarker ["DZAI_NWAF4", [5227.6763, 9775.2021]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_186 = _this; + +_this = createMarker ["DZAI_NWAF3", [4630.3066, 9666.2881]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_188 = _this; + +_this = createMarker ["DZAI_NWAF6", [4087.0801, 10787.999]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_189 = _this; + +_this = createMarker ["DZAI_NWAF5", [4616.1626, 10697.177]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_190 = _this; + +_this = createMarker ["DZAI_NWAF1", [4670.3218, 10454.917]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_191 = _this; + +_this = createMarker ["DZAI_NWAF7", [4216.0415, 10355.757]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_192 = _this; + +diag_log "Chernarus spawn areas loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_napf.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_napf.sqf new file mode 100755 index 0000000..9b44e62 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_napf.sqf @@ -0,0 +1,520 @@ +/* + Napf Spawn Area Definitions + + +*/ + + +_this = createMarker ["DZAI_Lenzburg", [8876.1641, 16260.472]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_114 = _this; + +_this = createMarker ["DZAI_Trueb", [7587.0171, 14221.998]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_115 = _this; + +_this = createMarker ["DZAI_Seltisberg", [5789.9204, 15317.989]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_116 = _this; + +_this = createMarker ["DZAI_Neue_Welt", [5984.3174, 13589.515]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_117 = _this; + +_this = createMarker ["DZAI_Bubendorf", [3936.8379, 14387.571]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_118 = _this; + +_this = createMarker ["DZAI_Huttwil", [4691.8608, 12267.877]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_120 = _this; + +_this = createMarker ["DZAI_Ruchfeld", [6291.979, 12740.054]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_121 = _this; + +_this = createMarker ["DZAI_Oberdorf", [5794.8022, 11695.465]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_123 = _this; + +_this = createMarker ["DZAI_Muttenz", [6253.1118, 10445.891]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_125 = _this; + +_this = createMarker ["DZAI_Muenchenstein", [6489.9155, 9683.1045]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_133 = _this; + +_this = createMarker ["DZAI_Chatzbach", [7808.2021, 9318.6074]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_134 = _this; + +_this = createMarker ["DZAI_Bruderholz", [9832.37,9853.36]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_135 = _this; + +_this = createMarker ["DZAI_Freidorf", [8444.5938, 17123.244]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_139 = _this; + +_this = createMarker ["DZAI_Olten", [10049.203, 16467.189]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_140 = _this; + +_this = createMarker ["DZAI_Ruemlingen", [10686.2,15883.3]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_141 = _this; + +_this = createMarker ["DZAI_Hirsegg", [10575.794, 14068.857]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_144 = _this; + +_this = createMarker ["DZAI_Lausen", [12085.853, 15345.522]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_146 = _this; + +_this = createMarker ["DZAI_Unterdorf", [5051.2803, 11196.765]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_151 = _this; + +_this = createMarker ["DZAI_Luzern", [14726.621, 14107.868]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_152 = _this; + +_this = createMarker ["DZAI_Emmen", [15495.981, 13431.276]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_154 = _this; + +_this = createMarker ["DZAI_Wolhusen", [14245.889, 12714.578]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_155 = _this; + +_this = createMarker ["DZAI_Horw", [17220.289, 13905.854]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_156 = _this; + +_this = createMarker ["DZAI_Romoos", [12913.013, 11756.14]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_157 = _this; + +_this = createMarker ["DZAI_Meggen", [16410.053, 15302.249]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_158 = _this; + +_this = createMarker ["DZAI_Liestal", [12791.802, 9626.2422]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_159 = _this; + +_this = createMarker ["DZAI_Sachseln", [14931.782, 10882.149]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_161 = _this; + +_this = createMarker ["DZAI_Eggwil", [7383.05,6598.69]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_165 = _this; + +_this = createMarker ["DZAI_Pfeffikon", [18306.078, 17137.08]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_166 = _this; + +_this = createMarker ["DZAI_Signau", [5990.39,8893.48]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_168 = _this; + +_this = createMarker ["DZAI_Schangen", [9048.1934, 5428.6768]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_169 = _this; + +_this = createMarker ["DZAI_Hasle", [3603.1506, 9727.3291]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_170 = _this; + +_this = createMarker ["DZAI_Worb", [2180.1565, 7626.7544]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_171 = _this; + +_this = createMarker ["DZAI_Munsingen", [3654.7224, 7928.7563]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_172 = _this; + +_this = createMarker ["DZAI_Ittingen", [2072.7058, 9780.8652]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_173 = _this; + +_this = createMarker ["DZAI_Hindelbank", [2411.7112, 11241.985]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_174 = _this; + +_this = createMarker ["DZAI_Homburg", [2877.75,6243.71]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_175 = _this; + +_this = createMarker ["DZAI_Sorenberg", [13515.016, 5313.1172]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_181 = _this; + +_this = createMarker ["DZAI_South_Airstrip", [18249.895, 2206.3149]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_188 = _this; + +_this = createMarker ["DZAI_Froburg", [17203.361, 3525.9858]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_189 = _this; + +_this = createMarker ["DZAI_Brienz", [14448.045, 2914.2048]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_190 = _this; + +_this = createMarker ["DZAI_WorbE", [2557.7725, 7784.0161]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_193 = _this; + +_this = createMarker ["DZAI_WorbN", [2560.0894, 8248.7227]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_194 = _this; + +_this = createMarker ["DZAI_WorbIndustrial", [3200.5864, 7428.8589]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_195 = _this; + +_this = createMarker ["DZAI_MuenchensteinS", [6349.5601, 9400.2988]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_197 = _this; + +_this = createMarker ["DZAI_MuenchensteinE", [6850.7959, 9643.5898]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_199 = _this; + +_this = createMarker ["DZAI_MuttenzN", [6334.1348, 10818.069, 7.1861682]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_201 = _this; + +_this = createMarker ["DZAI_SuhrenfeldMilitary", [16431.096, 18415.654]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_209 = _this; + +_this = createMarker ["DZAI_SuhrenfeldBarracks", [17051.783, 18746.586]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_210 = _this; + +_this = createMarker ["DZAI_TruebN", [7410.8555, 14823.762, 12.371061]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_214 = _this; + +_this = createMarker ["DZAI_Harbour", [9191.4619, 17585.988]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_216 = _this; + +_this = createMarker ["DZAI_Magden", [10656.134, 17037.621, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_217 = _this; + +_this = createMarker ["DZAI_LenzburgW", [8659.707, 15989.149, 0.17934036]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_218 = _this; + +_this = createMarker ["DZAI_LenzburgE", [8930.8291, 15925.417]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_219 = _this; + +_this = createMarker ["DZAI_LenzburgIndustrial", [9149.332, 15644.616]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_220 = _this; + +_this = createMarker ["DZAI_LuzernW", [14259.116, 14121.588]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_221 = _this; + +_this = createMarker ["DZAI_LuzernS", [14481.524, 13712.073, 5.4349804]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_222 = _this; + +_this = createMarker ["DZAI_Airport", [14352.377, 16932.207]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_223 = _this; + +_this = createMarker ["DZAI_AirportE", [14993.102, 16172.912, 7.9194927]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_224 = _this; + +_this = createMarker ["DZAI_Airbase", [5193.6675, 4471.2915]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_225 = _this; + +_this = createMarker ["DZAI_AirbaseHangars", [4783.3022, 4828.5498]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_226 = _this; + +_this = createMarker ["DZAI_MilanMilitary", [9990.627, 7592.1777, -4.5776367e-005]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_229 = _this; + +_this = createMarker ["DZAI_Nordstern", [10057.302, 18093.361]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_231 = _this; + +_this = createMarker ["DZAI_SouthAirbaseBarracks", [18076.391, 2579.5398, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_232 = _this; + +_this = createMarker ["DZAI_SuhrenfeldHotels", [16577.482, 18223.15]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_233 = _this; + +diag_log "Napf spawn areas loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_podagorsk.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_podagorsk.sqf new file mode 100755 index 0000000..0d1072f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_podagorsk.sqf @@ -0,0 +1,167 @@ +/* + Podagorsk Spawn Area Definitions + Last updated: 9:35 PM 8/28/2013 + +*/ + +_this = createMarker ["DZAI_BolshevikS", [7958.1318, 4153.0093]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_1 = _this; + +_this = createMarker ["DZAI_Bolshevik", [8267.0078, 4876.3257]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [250, 250]; +_marker_3 = _this; + +_this = createMarker ["DZAI_BolshevikN", [8471.8301, 5261.2686]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_4 = _this; + +_this = createMarker ["DZAI_BolshevikBarracks", [9448.8506, 4207.0225]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_5 = _this; + +_this = createMarker ["DZAI_OstrovYBarracks", [15816.948, 6582.645]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_6 = _this; + +_this = createMarker ["DZAI_KrasnoflotskiyeBarracks", [14913.332, 6323.7886]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_7 = _this; + +_this = createMarker ["DZAI_Tobolsk", [11728.37, 8023.9404, 5.3836517]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_8 = _this; + +_this = createMarker ["DZAI_TobolskTowers", [11385.285, 7922.4106, 3.351593]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_9 = _this; + +_this = createMarker ["DZAI_KronotskyBarracks", [11270.97, 8542.9961]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_10 = _this; + +_this = createMarker ["DZAI_SonaBarracks", [13036.701, 9620.0791]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_11 = _this; + +_this = createMarker ["DZAI_Protvino", [11764.891, 10445.49, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_12 = _this; + +_this = createMarker ["DZAI_ProtvinoBarrack", [11517.976, 10382.28, 3.1173649]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_13 = _this; + +_this = createMarker ["DZAI_PijmaBarracks", [9074.0615, 15740.781, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_14 = _this; + +_this = createMarker ["DZAI_BereznikiE", [7659.7656, 10713.272]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_15 = _this; + +_this = createMarker ["DZAI_BereznikiW", [7434.5381, 10730.594]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_17 = _this; + +_this = createMarker ["DZAI_Kirsanov", [8231.3838, 9109.9336, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_18 = _this; + +_this = createMarker ["DZAI_BoronukBarracks", [10230.561, 8865.6162, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_19 = _this; + +_this = createMarker ["DZAI_Kovrov", [10788.598, 6957.2817]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_20 = _this; + +_this = createMarker ["DZAI_Zirnitra", [8626.7754, 7863.6665]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_21 = _this; + +_this = createMarker ["DZAI_Sona", [13611.271, 9968.752]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_22 = _this; + +diag_log "Podagorsk spawn areas loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_sauerland.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_sauerland.sqf new file mode 100755 index 0000000..262eefa --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_sauerland.sqf @@ -0,0 +1,583 @@ +/* + Sauerland Spawn Area Definitions + Last updated: 5:02 PM 2/9/2014 + +*/ + +_this = createMarker ["DZAI_Wenden_Airfield", [15269.454, 18561.916]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_117 = _this; + +_this = createMarker ["DZAI_Old_Airfield", [17025.402, 2002.5928]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_118 = _this; + +_this = createMarker ["DZAI_Fernsehturm", [11088.31, 4002.9553]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_122 = _this; + +_this = createMarker ["DZAI_Heidermuehle", [18236.965, 4600.7134]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_125 = _this; + +_this = createMarker ["DZAI_Arnsberg", [1548.4891, 24001.635]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [225, 225]; +_marker_133 = _this; + +_this = createMarker ["DZAI_Suederbarup", [13100.252, 810.17828]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_134 = _this; + +_this = createMarker ["DZAI_Klein_Sodenau", [369.17911, 25038.863]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_137 = _this; + +_this = createMarker ["DZAI_Reine", [23841.941, 6976.6738]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_138 = _this; + +_this = createMarker ["DZAI_Heggen", [18941.576, 14371.465]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_139 = _this; + +_this = createMarker ["DZAI_Berghausen", [21180.15, 12630.672]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_140 = _this; + +_this = createMarker ["DZAI_Moosbach", [23220.2,12550]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_141 = _this; + +_this = createMarker ["DZAI_Garbow", [6064.2339, 16748.203]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [225, 225]; +_marker_144 = _this; + +_this = createMarker ["DZAI_Ihrhofen", [9590.2,18883]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_145 = _this; + +_this = createMarker ["DZAI_Ihren", [11751.979, 17175.313]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_146 = _this; + +_this = createMarker ["DZAI_Berghoven", [18451.602, 22197.6]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_147 = _this; + +_this = createMarker ["DZAI_Grossenfelde", [16782.324, 22384.234]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_148 = _this; + +_this = createMarker ["DZAI_Oberdorf", [12235.536, 5905.9258]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_149 = _this; + +_this = createMarker ["DZAI_Oeventrop", [8185.9746, 22308.031]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [250, 250]; +_marker_150 = _this; + +_this = createMarker ["DZAI_Schmallenberg", [8918.7881, 13666.422]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_151 = _this; + +_this = createMarker ["DZAI_Schueren", [10962.186, 13369.05]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_152 = _this; + +_this = createMarker ["DZAI_Hoeinghausen", [21829.002, 9406.9531]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_154 = _this; + +_this = createMarker ["DZAI_Fahrenbrecht", [3394.824, 1908.1086]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_155 = _this; + +_this = createMarker ["DZAI_Meschede", [16756.123, 17354.289]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [250, 250]; +_marker_156 = _this; + +_this = createMarker ["DZAI_Uhlenbusch", [3782.2,13394]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [225, 225]; +_marker_157 = _this; + +_this = createMarker ["DZAI_Niederbergbach", [21644.25, 17371.664]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_158 = _this; + +_this = createMarker ["DZAI_Rhaude", [3741.5422, 5427.0972]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_161 = _this; + +_this = createMarker ["DZAI_Osterholz", [2932.7324, 8094.626]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_163 = _this; + +_this = createMarker ["DZAI_Remblinghausen", [19243.2,10908]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_164 = _this; + +_this = createMarker ["DZAI_Buersfeld", [16524.2,8784]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_165 = _this; + +_this = createMarker ["DZAI_Seedorf", [16629.861, 15752.437]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [225, 225]; +_marker_166 = _this; + +_this = createMarker ["DZAI_Niedersalvey", [6270.5967, 6061.1021]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_167 = _this; + +_this = createMarker ["DZAI_Old_Airfield2", [16973.58, 1840.6829, 2.0128479]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_168 = _this; + +_this = createMarker ["DZAI_OldAirfieldTown", [17091.068, 1310.3103]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_169 = _this; + +_this = createMarker ["DZAI_OldAirfieldVillage", [16375.906, 1302.205, 2.7341003]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_170 = _this; + +_this = createMarker ["DZAI_Fahrenbrecht2", [3137.7576, 1573.5107, 15.335632]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_171 = _this; + +_this = createMarker ["DZAI_Fahrenbrecht3", [3058.6182, 1105.7908, 1.0932617]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_172 = _this; + +_this = createMarker ["DZAI_Fahrenbrecht4", [2872.8777, 781.78711, 0.13195801]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_173 = _this; + +_this = createMarker ["DZAI_Fahrenbrecht5", [3283.3281, 883.0658, 2.4784698]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_174 = _this; + +_this = createMarker ["DZAI_Fahrenbrecht6", [3030.2761, 3742.9856]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_175 = _this; + +_this = createMarker ["DZAI_Niedersalvey2", [5835.1636, 5876.0605]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_176 = _this; + +_this = createMarker ["DZAI_Uhlenbusch2", [3609.031, 13833.808, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_177 = _this; + +_this = createMarker ["DZAI_Uhlenbusch2", [4023.7253, 13675.433]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_178 = _this; + +_this = createMarker ["DZAI_WestMilBase", [1105.3364, 15183.339]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_179 = _this; + +_this = createMarker ["DZAI_Loc332", [2245.6079, 16578.264, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_180 = _this; + +_this = createMarker ["DZAI_Arnsberg2", [1400.8392, 23630.836]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_181 = _this; + +_this = createMarker ["DZAI_Nordern", [1362.3033, 23290.398]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_182 = _this; + +_this = createMarker ["DZAI_NordernBarracks", [1488.2198, 22436.875]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_183 = _this; + +_this = createMarker ["DZAI_Nordern2", [1486.3866, 23007.014]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_184 = _this; + +_this = createMarker ["DZAI_Loc80", [2824.3101, 22615.168]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_185 = _this; + +_this = createMarker ["DZAI_RiverRailway", [2938.9727, 23343.287]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_186 = _this; + +_this = createMarker ["DZAI_NorthMilBase", [3612.8738, 24988.32, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_188 = _this; + +_this = createMarker ["DZAI_TownWithChurch", [12151.469, 15260.933]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_189 = _this; + +_this = createMarker ["DZAI_WendenBarracks", [15102.944, 18589.408]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_190 = _this; + +_this = createMarker ["DZAI_Meschede1", [15226.739, 18132.395]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_191 = _this; + +_this = createMarker ["DZAI_Meschede2", [15621.885, 18026.115]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_192 = _this; + +_this = createMarker ["DZAI_Meschede3", [15955.719, 17817.848]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_193 = _this; + +_this = createMarker ["DZAI_Meschede4", [16279.222, 18043.605]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_194 = _this; + +_this = createMarker ["DZAI_Meschede5", [16721.852, 18025.49, 0.18069458]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_195 = _this; + +_this = createMarker ["DZAI_Meschede6", [17362.547, 18218.281]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_196 = _this; + +_this = createMarker ["DZAI_Meschede7", [17752.25, 18212.738]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_197 = _this; + +_this = createMarker ["DZAI_Meschede8", [17995.221, 17931.566, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_198 = _this; + +_this = createMarker ["DZAI_Meschede9", [17464.176, 17155.836, 12.397186]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [250, 250]; +_marker_199 = _this; + +_this = createMarker ["DZAI_Meschede10", [17164.379, 17567.193]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [250, 250]; +_marker_200 = _this; + +_this = createMarker ["DZAI_Meschede11", [17803.031, 16775.938, 13.362091]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_201 = _this; + +_this = createMarker ["DZAI_Meschede12", [18163.98, 16745.107, 12.729576]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_202 = _this; + +_this = createMarker ["DZAI_Meschede13", [17885.594, 16152.522]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_203 = _this; + +_this = createMarker ["DZAI_NorthMilBase2", [19880.184, 25226.951, 3.3473816]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_204 = _this; + +_this = createMarker ["DZAI_Reine2", [23523.695, 7248.5322]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_205 = _this; + +_this = createMarker ["DZAI_SEMilBase", [23956.162, 3173.1858, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_206 = _this; + +_this = createMarker ["DZAI_Strelingen", [3359.6086, 19225.355]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_207 = _this; + +_this = createMarker ["DZAI_GarbowMilBase", [7073.9038, 17244.992]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_208 = _this; + +_this = createMarker ["DZAI_GarbowIndustrial", [6519.2881, 16911.307, 12.519424]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_209 = _this; + +diag_log "Sauerland spawn areas loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_taviana.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_taviana.sqf new file mode 100755 index 0000000..81ccd86 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_taviana.sqf @@ -0,0 +1,615 @@ +/* + Taviana Spawn Area Definitions + + +*/ + +_this = createMarker ["DZAI_Blato", [11766.242, 783.62885]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_0 = _this; + +_this = createMarker ["DZAI_Seven", [10987.998, 769.48853, 0.10097504]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_1 = _this; + +_this = createMarker ["DZAI_Marina", [10031.798, 1386.2731]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_2 = _this; + +_this = createMarker ["DZAI_Topolka", [8916.6074, 2310.0403]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_3 = _this; + +_this = createMarker ["DZAI_Branibor", [7677.5615, 4578.5151, 0.0069999695]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_4 = _this; + +_this = createMarker ["DZAI_Branibor2", [7929.0435, 4297.4546, 0.10200119]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_5 = _this; + +_this = createMarker ["DZAI_Branibor3", [7421.5361, 4292.8755]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_6 = _this; + +_this = createMarker ["DZAI_Branibor4", [7666.1294, 3984.3154]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_7 = _this; + +_this = createMarker ["DZAI_BashkaLukaMilBase", [9339.6211, 5262.5767]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_10 = _this; + +_this = createMarker ["DZAI_Kryvoe", [9082.3438, 5408.0596, 0.00025177002]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_11 = _this; + +_this = createMarker ["DZAI_Krasnoz1", [9362.6025, 7889.311]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_12 = _this; + +_this = createMarker ["DZAI_Krasnoz2", [9015.4082, 8153.9185]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_13 = _this; + +_this = createMarker ["DZAI_KrasnozAirport", [7534.6147, 7974.6338]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_14 = _this; + +_this = createMarker ["DZAI_KrasnozMilBase", [7777.1079, 9102.8564]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_15 = _this; + +_this = createMarker ["DZAI_Vedich", [6692.4927, 9846.4492]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_16 = _this; + +_this = createMarker ["DZAI_Chernovar", [5823.189, 9829.9883, 0.10200119]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_17 = _this; + +_this = createMarker ["DZAI_Bilgrad", [5524.2417, 8855.0576]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_18 = _this; + +_this = createMarker ["DZAI_Bilgrad2", [5331.8662, 8612.4229, 24.007565]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_19 = _this; + +_this = createMarker ["DZAI_Shtangrad", [3351.1626, 7519.98]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_20 = _this; + +_this = createMarker ["DZAI_ShtangradMilBase", [3620.0962, 7653.1587]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_21 = _this; + +_this = createMarker ["DZAI_Mitrovice", [3883.342, 7268.2354]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_22 = _this; + +_this = createMarker ["DZAI_Mitrovice2", [3845.9675, 7028.6748, 10.904247]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_23 = _this; + +_this = createMarker ["DZAI_Komarovo", [10611.676, 6542.5581, 11.683929]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_24 = _this; + +_this = createMarker ["DZAI_KomarovoMilBase", [10439.436, 6744.6108]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_25 = _this; + +_this = createMarker ["DZAI_ZhutaMilBase", [17182.637, 5623.7471]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_27 = _this; + +_this = createMarker ["DZAI_StarePoleMilBase", [16777.328, 6288.9771]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_28 = _this; + +_this = createMarker ["DZAI_SwampMilBase", [16276.947, 10036.184, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_29 = _this; + +_this = createMarker ["DZAI_DubovoAirport", [16675.242, 10540.636]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_30 = _this; + +_this = createMarker ["DZAI_DubovoAirport2", [16454.418, 11563.869]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_31 = _this; + +_this = createMarker ["DZAI_Dubovo", [16209.043, 11587.123, 29.143837]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_32 = _this; + +_this = createMarker ["DZAI_StariSad", [17580.254, 6303.3359]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_33 = _this; + +_this = createMarker ["DZAI_Byelov", [17298.441, 7485.8291]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_34 = _this; + +_this = createMarker ["DZAI_Kopech", [16515.439, 8274.0859]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_35 = _this; + +_this = createMarker ["DZAI_Boye", [15187.44, 7867.7446]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_36 = _this; + +_this = createMarker ["DZAI_Postoyna", [15549.432, 8506.21, 0.10199738]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_37 = _this; + +_this = createMarker ["DZAI_Molotovsk", [16897.236, 12676.642]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_38 = _this; + +_this = createMarker ["DZAI_Martin", [16191.419, 13642.562, 12.593601]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_39 = _this; + +_this = createMarker ["DZAI_MillMilBase", [16436.6, 14266.563]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_41 = _this; + +_this = createMarker ["DZAI_Gorka", [15136.348, 14889.47]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_42 = _this; + +_this = createMarker ["DZAI_SevastopolMilBase", [15082.46, 15898.194]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_43 = _this; + +_this = createMarker ["DZAI_Sevastopol", [15473.854, 16372.353]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_44 = _this; + +_this = createMarker ["DZAI_Sevastopol2", [15402.354, 16141.029, 0.10200119]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_46 = _this; + +_this = createMarker ["DZAI_Dalnogorsk", [15035.327, 18216.568, 12.491837]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_48 = _this; + +_this = createMarker ["DZAI_DalnogorskMilBase", [14636.279, 18555.789]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_49 = _this; + +_this = createMarker ["DZAI_Ekaterinburg", [10900.545, 18839.094]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_50 = _this; + +_this = createMarker ["DZAI_Ekaterinburg2", [11073.892, 18622.762]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_51 = _this; + +_this = createMarker ["DZAI_Yaroslav", [10193.348, 19048.738, 21.604385]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_52 = _this; + +_this = createMarker ["DZAI_YaroslavMilBase", [9985.3721, 18905.855]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_53 = _this; + +_this = createMarker ["DZAI_JaroslavskiAirport", [10225.507, 18611.068, 0.045051575]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_54 = _this; + +_this = createMarker ["DZAI_Lyubol", [10435.554, 16920.193, 6.2529449]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_55 = _this; + +_this = createMarker ["DZAI_Etanovsk", [12639.455, 11777.848]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_56 = _this; + +_this = createMarker ["DZAI_Etanovsk2", [12661.685, 12136.558]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_57 = _this; + +_this = createMarker ["DZAI_Vishkov", [11258.344, 15792.933, 14.037567]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_58 = _this; + +_this = createMarker ["DZAI_StariGrad", [11242.693, 15382.672, 0.0070037842]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_59 = _this; + +_this = createMarker ["DZAI_Dubravka", [11831.151, 15687.939, 0.10199738]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_60 = _this; + +_this = createMarker ["DZAI_Lyepestok", [11595.344, 15394.919, 5.6600571]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_62 = _this; + +_this = createMarker ["DZAI_Zelenogorod", [12236.24, 15394.267]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_63 = _this; + +_this = createMarker ["DZAI_Bori", [11644.896, 14948.265, 11.114861]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_64 = _this; + +_this = createMarker ["DZAI_Nina", [12650.064, 15090.02]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_65 = _this; + +_this = createMarker ["DZAI_NinaMilBae", [12439.564, 14960.65]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_66 = _this; + +_this = createMarker ["DZAI_Kustik", [12973.656, 15015.534]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_67 = _this; + +_this = createMarker ["DZAI_ChrveniGradok", [12747.379, 14423.039, 0.2530365]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_68 = _this; + +_this = createMarker ["DZAI_VinogradFactory", [13668.726, 13561.216]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_69 = _this; + +_this = createMarker ["DZAI_Doriyanov", [12517.958, 13720.994]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_70 = _this; + +_this = createMarker ["DZAI_Solibor", [14033.917, 12297.51]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_71 = _this; + +_this = createMarker ["DZAI_Prilep", [14128.186, 12013.017]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_72 = _this; + +_this = createMarker ["DZAI_NoviBor", [14414.153, 11331.182]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_73 = _this; + +_this = createMarker ["DZAI_SabinaCenter", [14603.089, 10243.351]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_74 = _this; + +_this = createMarker ["DZAI_Uyezd", [15246.176, 10062.691]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_75 = _this; + +_this = createMarker ["DZAI_Podgorica", [14625.55, 9763.1006]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_76 = _this; + +_this = createMarker ["DZAI_Sabina", [15077.591, 9616.7559, 1.5322094]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_77 = _this; + +_this = createMarker ["DZAI_Dyelnica", [15446.245, 9556.1709, 12.313131]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_78 = _this; + +_this = createMarker ["DZAI_Slovany", [15258.28, 9234.3994]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_79 = _this; + +_this = createMarker ["DZAI_Slovany2", [15646.354, 9105.2607]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_81 = _this; + +_this = createMarker ["DZAI_Dyelnica2", [15731.443, 9479.9375]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_82 = _this; + +_this = createMarker ["DZAI_NekhayMilSpecial", [14849.834, 11913.729, 7.9565659]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [100, 100]; +_marker_83 = _this; + +diag_log "Taviana spawn areas loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_trinity.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_trinity.sqf new file mode 100755 index 0000000..7492fd0 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_areas/areas_trinity.sqf @@ -0,0 +1,399 @@ +/* + Trinity Island Spawn Area Definitions + Last updated: 9:35 PM 8/28/2013 + +*/ + +_this = createMarker ["DZAI_StansfieldAirport", [377.94009, 5956.3296]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_1 = _this; + +_this = createMarker ["DZAI_FarmArea", [2715.6921, 5574.0586]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_2 = _this; + +_this = createMarker ["DZAI_HouseArea1", [3048.7012, 5894.7764]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_3 = _this; + +_this = createMarker ["DZAI_HouseArea2", [2589.0259, 6134.1221]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_4 = _this; + +_this = createMarker ["DZAI_Edan", [1807.6942, 7508.3716]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_5 = _this; + +_this = createMarker ["DZAI_Barracks1", [2213.583, 7993.7998]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_6 = _this; + +_this = createMarker ["DZAI_ChapelHill", [1858.1975, 8314.2549]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_7 = _this; + +_this = createMarker ["DZAI_SarasotaS", [2320.7437, 8803.9746, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_8 = _this; + +_this = createMarker ["DZAI_Sarasota", [2662.2263, 9050.0859]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_9 = _this; + +_this = createMarker ["DZAI_CoastalHouse", [6595.3408, 3487.4436]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_10 = _this; + +_this = createMarker ["DZAI_Rivlin", [7435.1494, 4468.4858, 0]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_11 = _this; + +_this = createMarker ["DZAI_RivlinChurch", [6465.2407, 4322.9292]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_12 = _this; + +_this = createMarker ["DZAI_MilBase", [6876.9243, 4920.5176]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_13 = _this; + +_this = createMarker ["DZAI_Ellesmere", [6984.0972, 5303.7788]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_14 = _this; + +_this = createMarker ["DZAI_Bree", [7646.998, 5745.5977]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_15 = _this; + +_this = createMarker ["DZAI_Helm", [8513.667, 5912.8975]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_16 = _this; + +_this = createMarker ["DZAI_HelmE", [9037.8516, 5844.4868]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_17 = _this; + +_this = createMarker ["DZAI_MilBase2", [8280.9502, 6697.5918]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_18 = _this; + +_this = createMarker ["DZAI_MilBase3", [5634.4678, 6045.0474]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_19 = _this; + +_this = createMarker ["DZAI_Abbeyfield", [7190.1333, 6840.3481]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_20 = _this; + +_this = createMarker ["DZAI_StFrances", [5239.6465, 6406.9961]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_21 = _this; + +_this = createMarker ["DZAI_StFrancesW", [4865.9854, 6732.2983]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_22 = _this; + +_this = createMarker ["DZAI_Contra", [5842.4111, 6835.1309]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_23 = _this; + +_this = createMarker ["DZAI_ContraNW", [5395.5996, 7354.2979]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_24 = _this; + +_this = createMarker ["DZAI_Richmond", [6066.2344, 7619.0737]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_25 = _this; + +_this = createMarker ["DZAI_Totley", [7930.9561, 8097.8682]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [250, 250]; +_marker_26 = _this; + +_this = createMarker ["DZAI_Koul", [7142.6621, 8779.5381]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_27 = _this; + +_this = createMarker ["DZAI_DurrasHights", [9433.5381, 8128.8408]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_28 = _this; + +_this = createMarker ["DZAI_LodgeMoor", [10243.755, 8979.751]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_29 = _this; + +_this = createMarker ["DZAI_MilBase4", [10779.331, 9189.5186]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_30 = _this; + +_this = createMarker ["DZAI_MilBase5", [11816.232, 9328.6699]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_31 = _this; + +_this = createMarker ["DZAI_Deepcut", [11395.864, 9729.5137]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_32 = _this; + +_this = createMarker ["DZAI_FarmArea2", [12148.192, 9881.8115, 0.082328796]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_33 = _this; + +_this = createMarker ["DZAI_LibertyAirport", [8902.5127, 10503.782]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_34 = _this; + +_this = createMarker ["DZAI_Maine", [7097.4717, 9886.125, 10.648094]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_35 = _this; + +_this = createMarker ["DZAI_Eastwick", [7922.1646, 11228.662]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_36 = _this; + +_this = createMarker ["DZAI_HessIsland", [4737.9854, 10906.981]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_38 = _this; + +_this = createMarker ["DZAI_StattonPort", [10296.095, 6075.8755]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_39 = _this; + +_this = createMarker ["DZAI_HarleyW", [10934.944, 5839.958]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_41 = _this; + +_this = createMarker ["DZAI_Harley", [11386.157, 5979.8125]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [200, 200]; +_marker_42 = _this; + +_this = createMarker ["DZAI_MilBarracks", [11208.166, 6582.667]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_43 = _this; + +_this = createMarker ["DZAI_Yale", [12072.798, 6257.0752]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_44 = _this; + +_this = createMarker ["DZAI_YaleS", [12065.385, 5875.689, 7.7468491]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_45 = _this; + +_this = createMarker ["DZAI_Madison", [11995.574, 5379.6797]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_46 = _this; + +_this = createMarker ["DZAI_MilBase6", [10672.873, 4401.5894]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_47 = _this; + +_this = createMarker ["DZAI_Lavayette", [11815.874, 4850.7017]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_48 = _this; + +_this = createMarker ["DZAI_TimberlandN", [10928.018, 2759.8992]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [175, 175]; +_marker_50 = _this; + +_this = createMarker ["DZAI_MilBase7", [10320.668, 1697.3518]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [150, 150]; +_marker_51 = _this; + +_this = createMarker ["DZAI_TimberlandIndustrial", [10692.135, 1718.3403]]; +_this setMarkerShape "ELLIPSE"; +_this setMarkerType "Flag"; +_this setMarkerBrush "Solid"; +_this setMarkerAlpha 0; +_this setMarkerSize [125, 125]; +_marker_52 = _this; + +diag_log "Trinity Island spawn areas loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_caribou.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_caribou.sqf new file mode 100755 index 0000000..b7aed3d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_caribou.sqf @@ -0,0 +1,8 @@ +/* + Caribou Frontier spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_chernarus.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_chernarus.sqf new file mode 100755 index 0000000..8bc4758 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_chernarus.sqf @@ -0,0 +1,235 @@ +/* + Chernarus spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 12:06 AM 8/20/2013 + +*/ + +//Begin markers +_this = createMarker ["NEAF1", [11958.352, 13143.257, 3.0517578e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_27 = _this; + +_this = createMarker ["NEAF2", [12212.049, 12482.955]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_28 = _this; + +_this = createMarker ["NEAF3", [11816.073, 12926.985, 3.0517578e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_29 = _this; + +_this = createMarker ["NEAF4", [11746.358, 12610.153, -3.0517578e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_30 = _this; + +_this = createMarker ["NEAF5", [12483.098, 12883.227, -4.5776367e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_31 = _this; + +_this = createMarker ["Skalisty1", [14160.69, 2707.7178, -4.7683716e-007]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_51 = _this; + +_this = createMarker ["Skalisty2", [13310.174, 2752.4612, 7.4863434e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_53 = _this; + +_this = createMarker ["Skalisty3", [13797.646, 3064.9883, 0.00012779236]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_54 = _this; + +_this = createMarker ["Balota1", [4592.4634, 2724.5557, 4.7683716e-006]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_64 = _this; + +_this = createMarker ["Balota2", [4794.811, 2735.4512, 1.7166138e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_65 = _this; + +_this = createMarker ["Balota3", [4962.8208, 2648.8101, -9.5367432e-007]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_66 = _this; + +_this = createMarker ["Balota4", [4524.6079, 2708.7559, -1.9073486e-006]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_67 = _this; + +_this = createMarker ["Balota5", [4869.4707, 2702.0361]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_68 = _this; + +_this = createMarker ["NWAF4_1", [5123.7661, 9896.9561, 0]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_99 = _this; + +_this = createMarker ["NWAF4_2", [5230.0479, 9855.4219, 3.0517578e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_100 = _this; + +_this = createMarker ["NWAF4_3", [5218.3945, 9664.8857, 3.0517578e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_101 = _this; + +_this = createMarker ["NWAF4_4", [5305.8325, 9810.5674, 0.00024414063]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_102 = _this; + +_this = createMarker ["CastleRog", [11280.589, 4297.4292, -0.00012207031]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_79 = _this; + +_this = createMarker ["DevilsCastle", [6886.5234, 11494.024, -3.0517578e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_80 = _this; + +_this = createMarker ["CastleZub", [6516.1924, 5603.2427, -3.0517578e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_81 = _this; + +_this = createMarker ["CastleZub2", [6477.1846, 5558.3892, 6.1035156e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_82 = _this; + +_this = createMarker ["DevilsCastle2", [7069.1392, 11639.588, -9.1552734e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_84 = _this; + +_this = createMarker ["CastleRog2", [11118.082, 4084.0393, 6.1035156e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_85 = _this; + +_this = createMarker ["NWAF5_1", [4576.5781, 10877.494, 9.1552734e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_86 = _this; + +_this = createMarker ["NWAF5_2", [4863.6953, 10688.869]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_87 = _this; + +_this = createMarker ["NWAF5_3", [4676.2095, 10923.367, 0.00012207031]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_88 = _this; + +_this = createMarker ["NWAF5_4", [4823.3579, 10614.722, 9.1552734e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_90 = _this; + +_this = createMarker ["NWAF6_1", [3966.0071, 10825.011, -3.0517578e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_91 = _this; + +_this = createMarker ["NWAF6_2", [3983.3364, 10706.798, -6.1035156e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_92 = _this; + +_this = createMarker ["NWAF6_3", [3860.4697, 10906.981, -9.1552734e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_93 = _this; + +_this = createMarker ["NWAF6_4", [4042.3828, 10907.524, -9.1552734e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_94 = _this; + +_this = createMarker ["NWAF7_1", [4044.9353, 10609.702]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_95 = _this; + +_this = createMarker ["NWAF7_2", [4279.9717, 10233.461, 3.0517578e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_96 = _this; + +_this = createMarker ["NWAF7_3", [4026.0771, 10301.227, 3.0517578e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_97 = _this; + +_this = createMarker ["NWAF7_4", [4246.4731, 10168.34, 0]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_98 = _this; + +_this = createMarker ["NWAF8_1", [5123.7661, 9896.9561, 0]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_99 = _this; + +_this = createMarker ["NWAF8_2", [5230.0479, 9855.4219, 3.0517578e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_100 = _this; + +_this = createMarker ["NWAF8_3", [5218.3945, 9664.8857, 3.0517578e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_101 = _this; + +_this = createMarker ["NWAF8_4", [5305.8325, 9810.5674, 0.00024414063]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_102 = _this; + +_this = createMarker ["Rog3", [11318.306, 4413.0542, 0.00088500977]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_103 = _this; + +_this = createMarker ["Rog4", [11104.321, 4311.7319, -0.00015258789]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_104 = _this; + +_this = createMarker ["Devils3", [6985.4487, 11838.063, 3.0517578e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_109 = _this; + +_this = createMarker ["Devils4", [6789.7358, 11246.682, -0.00012207031]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_111 = _this; + +_this = createMarker ["Zub3", [6586.2847, 5411.603, 0]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_112 = _this; + +_this = createMarker ["Zub4", [6470.5083, 5692.708, -0.00012207031]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_113 = _this; +//End markers \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_cmr_ovaron.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_cmr_ovaron.sqf new file mode 100755 index 0000000..90d359f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_cmr_ovaron.sqf @@ -0,0 +1,8 @@ +/* + Ovaron spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_fallujah.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_fallujah.sqf new file mode 100755 index 0000000..4e4fd00 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_fallujah.sqf @@ -0,0 +1,8 @@ +/* + Fallujah spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_isladuala.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_isladuala.sqf new file mode 100755 index 0000000..a8ce5a3 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_isladuala.sqf @@ -0,0 +1,8 @@ +/* + Isla Duala spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_lingor.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_lingor.sqf new file mode 100755 index 0000000..e21b773 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_lingor.sqf @@ -0,0 +1,150 @@ +/* + Lingor spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 12:19 AM 7/23/2013 +*/ + +//begin markers +_this = createMarker ["Prison1", [3109.2454, 8275.2422, 9.5367432e-007]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_0 = _this; + +_this = createMarker ["Prison2", [2941.7852, 7946.2852, 5.7220459e-006]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_1 = _this; + +_this = createMarker ["Prison3", [3192.8079, 7932.6636]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_2 = _this; + +_this = createMarker ["Prison4", [3231.5239, 8156.4961, -1.9073486e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_3 = _this; + +_this = createMarker ["Prison5", [2977.0652, 8197.6357, 3.8146973e-006]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_4 = _this; + +_this = createMarker ["Palace1", [6976.9258, 6350.7671, -1.9073486e-006]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_11 = _this; + +_this = createMarker ["Palace2", [6922.918, 6467.9102, -3.0517578e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_12 = _this; + +_this = createMarker ["Palace3", [6834.2813, 6476.8394, -2.2888184e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_13 = _this; + +_this = createMarker ["Sargento1", [4363.5332, 1883.884, 1.9073486e-006]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_22 = _this; + +_this = createMarker ["Sargento2", [4429.6279, 1520.834]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_23 = _this; + +_this = createMarker ["Sargento3", [4462.6128, 1773.457, 3.8146973e-006]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_24 = _this; + +_this = createMarker ["Sargento4", [4427.3809, 1649.6858, -1.335144e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_25 = _this; + +_this = createMarker ["Sargento5", [4143.8174, 1846.0819, 1.9073486e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_26 = _this; + +if ((DZAI_modName == "lingorskaro") || (DZAI_modName == "huntinggrounds")) then { + _this = createMarker ["NMB1_1", [1860.3685, 8914.6328, 0]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_29 = _this; + + _this = createMarker ["NMB1_2", [1766.4445, 8785.083, 6.1035156e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_30 = _this; + + _this = createMarker ["NMB1_3", [2065.157, 8850.5146, -8.5830688e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_31 = _this; + + _this = createMarker ["NMB1_4", [1964.6107, 8930.249, 1.1920929e-006]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_32 = _this; + + _this = createMarker ["NMB1_5", [1790.6433, 8654.4551, 9.5367432e-006]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_33 = _this; + + _this = createMarker ["NMB2_1", [2617.1428, 9395.9561, 4.5776367e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_34 = _this; + + _this = createMarker ["NMB2_2", [2430.6089, 9137.5869, 5.531311e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_35 = _this; + + _this = createMarker ["NMB2_3", [2628.978, 9089.625, -2.9325485e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_36 = _this; + + _this = createMarker ["NMB2_4", [2517.6316, 9014.7051, -0.00032329559]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_37 = _this; + + _this = createMarker ["NMB2_5", [2706.9177, 9278.5254, -4.2915344e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_38 = _this; + + _this = createMarker ["NMB3_1", [779.80127, 7832.2363, -2.9087067e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_39 = _this; + + _this = createMarker ["NMB3_2", [977.49982, 7861.8066, 0.00010538101]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_40 = _this; + + _this = createMarker ["NMB3_3", [1045.5101, 7677.5601, -0.00018167496]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_41 = _this; + + _this = createMarker ["NMB3_4", [848.31274, 7559.3047, 2.1934509e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_42 = _this; + + _this = createMarker ["NMB3_5", [659.41174, 7742.1211, -1.2636185e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_43 = _this; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_mbg_celle2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_mbg_celle2.sqf new file mode 100755 index 0000000..1713325 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_mbg_celle2.sqf @@ -0,0 +1,32 @@ +/* + Celle spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ + +//begin markers + +_this = createMarker ["ETHS1", [10451.422, 11695.715, -2.7656555e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_2 = _this; + +_this = createMarker ["ETHS2", [10608.365, 11680.685, -9.5367432e-007]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_3 = _this; + +_this = createMarker ["ETHS3", [10233.635, 11605.618, 1.4305115e-005]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_4 = _this; + +_this = createMarker ["ETHS4", [10768.843, 11588.769, 9.5367432e-007]]; +_this setMarkerType "Empty"; +_this setMarkerBrush "Solid"; +_marker_5 = _this; + +//end markers diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_namalsk.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_namalsk.sqf new file mode 100755 index 0000000..22ebc82 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_namalsk.sqf @@ -0,0 +1,210 @@ +/* + Namalsk spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ + +//Begin Markers +_this = createMarker ["ObjectA2_1", [4966.9224, 6722.8711]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_0 = _this; + + _this = createMarker ["ObjectA2_3", [5049.21, 6527.749, -5.7220459e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_2 = _this; + + _this = createMarker ["ObjectA2_2", [4889.707, 6724.2788]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_3 = _this; + + _this = createMarker ["ObjectA2_4", [4989.4429, 6524.6143, -0.00012969971]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_6 = _this; + + _this = createMarker ["ObjectA2_5", [4887.9893, 6678.5127, 3.8146973e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_7 = _this; + + _this = createMarker ["CrashedC1301", [3205.6426, 7425.0835, 0.0001373291]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_10 = _this; + + _this = createMarker ["CrashedC1302", [3154.9116, 7593.6294, 0.00011444092]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_11 = _this; + + _this = createMarker ["CrashedC1303", [3087.3816, 7484.2783]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_14 = _this; + + _this = createMarker ["SebChem1", [6520.0317, 9376.6143, 3.8146973e-006]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_32 = _this; + + _this = createMarker ["SebChem2", [6581.7417, 9290.4141]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_33 = _this; + + _this = createMarker ["SebChem4", [6492.0703, 9228.3252, 1.5258789e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_35 = _this; + + _this = createMarker ["Seb1", [5880.2593, 8703.2041, -2.6702881e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_50 = _this; + + _this = createMarker ["Seb2", [5729.4082, 8707.043, 2.2888184e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_51 = _this; + + _this = createMarker ["Seb3", [5747.7002, 8633.2598, 4.5776367e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_52 = _this; + + _this = createMarker ["Seb4", [5786.749, 8695.9268, 3.8146973e-006]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_53 = _this; + + _this = createMarker ["Seb5", [5808.3936, 8738.1035, 3.8146973e-006]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_54 = _this; + + _this = createMarker ["SebMine1", [5043.8394, 8301.3184, 3.4332275e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_62 = _this; + + _this = createMarker ["SebMine2", [5020.355, 8002.2046, 1.1444092e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_63 = _this; + + _this = createMarker ["SebMine3", [4996.6753, 8145.877, 1.5258789e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_64 = _this; + + _this = createMarker ["SebMine4", [4994.6919, 8222.2051, 3.8146973e-006]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_65 = _this; + + _this = createMarker ["SebMine5", [4863.3384, 8129.3716]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_66 = _this; + + _this = createMarker ["Harb1", [7820.6021, 7683.3228, 3.8146973e-006]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_130 = _this; + + _this = createMarker ["Harb2", [7843.103, 7702.7246, 3.3378601e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_131 = _this; + + _this = createMarker ["Harb3", [7841.3164, 7741.9927, -1.6212463e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_132 = _this; + + _this = createMarker ["Harb4", [7837.7827, 7610.0864, 1.8119812e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_133 = _this; + + _this = createMarker ["Harb5", [7869.4995, 7786.0303, 2.8610229e-006]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_134 = _this; + + _this = createMarker ["SAB1", [3534.5061, 6628.9224, -1.5258789e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_140 = _this; + + _this = createMarker ["SAB2", [3596.0684, 6653.4595, -1.5258789e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_141 = _this; + + _this = createMarker ["SAB3", [3567.4377, 6698.2339, 1.5258789e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_142 = _this; + + _this = createMarker ["Seraja1", [4180.6309, 6642.29]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_146 = _this; + + _this = createMarker ["Seraja2", [4186.333, 6707.2549, -3.0517578e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_147 = _this; + + _this = createMarker ["Seraja3", [4208.2539, 6619.6069, 3.0517578e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_148 = _this; + + _this = createMarker ["Seraja4", [4178.4443, 6582.8184, -6.1035156e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_149 = _this; + + _this = createMarker ["Seraja5", [4148.8447, 6558.4243]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_150 = _this; + + _this = createMarker ["Lub1", [4417.6191, 11039.309, -3.8146973e-006]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_171 = _this; + + _this = createMarker ["Lub2", [4295.0586, 11038.771, -3.8146973e-006]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_172 = _this; + + _this = createMarker ["Lub3", [4489.8462, 11286.414, -2.3841858e-007]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_173 = _this; + + _this = createMarker ["Lub4", [4401.8081, 11208.507, -1.1205673e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_174 = _this; + + _this = createMarker ["Lub5", [4511.0195, 10992.617, -2.4795532e-005]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_176 = _this; + + _this = createMarker ["SebChem3", [6394.314, 9400.1211]]; + _this setMarkerType "Empty"; + _this setMarkerBrush "Solid"; + _marker_178 = _this; +//End markers \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_napf.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_napf.sqf new file mode 100755 index 0000000..45dfa01 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_napf.sqf @@ -0,0 +1,8 @@ +/* + Napf spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_oring.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_oring.sqf new file mode 100755 index 0000000..91a0683 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_oring.sqf @@ -0,0 +1,8 @@ +/* + Oring spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_panthera2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_panthera2.sqf new file mode 100755 index 0000000..ccc810d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_panthera2.sqf @@ -0,0 +1,8 @@ +/* + Panthera spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_podagorsk.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_podagorsk.sqf new file mode 100755 index 0000000..8d5ae36 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_podagorsk.sqf @@ -0,0 +1,8 @@ +/* + Podagorsk spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_sara.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_sara.sqf new file mode 100755 index 0000000..6da95a9 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_sara.sqf @@ -0,0 +1,8 @@ +/* + Sahrani spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_sauerland.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_sauerland.sqf new file mode 100755 index 0000000..241a18e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_sauerland.sqf @@ -0,0 +1,8 @@ +/* + Sauerland spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_takistan.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_takistan.sqf new file mode 100755 index 0000000..550c88a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_takistan.sqf @@ -0,0 +1,8 @@ +/* + Takistan spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_tavi.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_tavi.sqf new file mode 100755 index 0000000..2d24b2d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_tavi.sqf @@ -0,0 +1,8 @@ +/* + Taviana spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_trinity.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_trinity.sqf new file mode 100755 index 0000000..6edcdab --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_trinity.sqf @@ -0,0 +1,8 @@ +/* + Trinity Island spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 7:46 PM 8/28/2013 + +*/ \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_utes.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_utes.sqf new file mode 100755 index 0000000..0943f5b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_utes.sqf @@ -0,0 +1,8 @@ +/* + Utes spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_zargabad.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_zargabad.sqf new file mode 100755 index 0000000..79d6eed --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/spawn_markers/markers_zargabad.sqf @@ -0,0 +1,8 @@ +/* + Zargabad spawn point definitions + + Notes: Markers are used to manually-specify exact locations to use as spawn points. Markers are used for spawn points when there are no/not enough buildings within 300m of trigger center to use as spawn positions. + + Last updated: 11:05 PM 7/5/2013 + +*/ diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_caribou.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_caribou.sqf new file mode 100755 index 0000000..0a8468f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_caribou.sqf @@ -0,0 +1,42 @@ +/* + Caribou static spawn configuration + + Last updated: 2:40 PM 6/22/2014 + +*/ + +#include "spawn_markers\markers_caribou.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + #include "spawn_areas\areas_caribou.sqf" + + ['DZAI_EastsidePort',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_Hightower',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_NorthStation',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_EastStation',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_WestStationBarracks',[2,0],[],3] call DZAI_static_spawn; + ['DZAI_MountRageAFB_N',[1,1],[],3] call DZAI_static_spawn; + ['DZAI_MountRageAFB_S',[1,1],[],3] call DZAI_static_spawn; + ['DZAI_FortCrassus_N',[2,1],[],3] call DZAI_static_spawn; + ['DZAI_FortCrassus_S',[2,1],[],3] call DZAI_static_spawn; + ['DZAI_ShootingRange',[0,1],[],3] call DZAI_static_spawn; + ['DZAI_CosytonSaw',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_BrigadeHalls',[0,1],[],2] call DZAI_static_spawn; + ['DZAI_CommunicationsStation',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_Valleypoint',[0,1],[],1] call DZAI_static_spawn; + ['DZAI_BlaiseEnd',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_SklonHolma',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_OutpostEast',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_SevernojNasosnoj',[0,1],[],2] call DZAI_static_spawn; + ['DZAI_PointRocksBarracks',[1,1],[],3] call DZAI_static_spawn; + ['DZAI_OutpostWest',[0,1],[],1] call DZAI_static_spawn; + ['DZAI_WintryStation',[0,2],[],2] call DZAI_static_spawn; +}; + +#include "custom_markers\cust_markers_caribou.sqf" +#include "custom_spawns\cust_spawns_caribou.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Caribou Frontier static spawn configuration loaded."; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_chernarus.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_chernarus.sqf new file mode 100755 index 0000000..cd5b612 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_chernarus.sqf @@ -0,0 +1,91 @@ +/* + Chernarus static spawn configuration + + Last updated: 3:37 PM 12/24/2013 + +*/ + +#include "spawn_markers\markers_chernarus.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + #include "spawn_areas\areas_chernarus.sqf" //Load spawn area definitions file. + + //marker name, [minimum AI, max additional AI], [markers for manual spawn points] (leave as empty array to use nearby buildings as spawn points), equipType (optional, required if number of AI groups is defined), number of AI groups (optional) + ["DZAI_Kamenka",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Komarovo",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Balota",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_BalotaAirstrip",[1,1],['Balota1','Balota2','Balota3','Balota4','Balota5'],1] call DZAI_static_spawn; + ["DZAI_Cherno1",[1,2],[],1] call DZAI_static_spawn; + ["DZAI_Cherno2",[1,1],[],0] call DZAI_static_spawn; + ["DZAI_Cherno3",[1,1],[],0] call DZAI_static_spawn; + ["DZAI_Cherno4",[2,1],[],1] call DZAI_static_spawn; + ["DZAI_Elektro1",[1,1],[],0] call DZAI_static_spawn; + ["DZAI_Elektro2",[1,2],[],1] call DZAI_static_spawn; + ["DZAI_Elektro3",[1,2],[],0] call DZAI_static_spawn; + ["DZAI_Skalisty",[0,1],['Skalisty1','Skalisty2','Skalisty3'],1] call DZAI_static_spawn; + ["DZAI_Kamyshovo",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Tulga",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Rog",[2,2],['CastleRog','CastleRog2','Rog3','Rog4'],1] call DZAI_static_spawn; + ["DZAI_Pusta",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_ThreeValleys",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Solnichniy",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_SolnichniyFactory",[0,1],[],1] call DZAI_static_spawn; + ["DZAI_Nizhnoye",[0,1],[],1] call DZAI_static_spawn; + ["DZAI_Orlovets",[0,1],[],1] call DZAI_static_spawn; + ["DZAI_Berezino",[2,1],[],1] call DZAI_static_spawn; + ["DZAI_Berezino2",[0,2],[],1] call DZAI_static_spawn; + ["DZAI_Berezino3",[2,1],[],1] call DZAI_static_spawn; + ["DZAI_Berezino4",[2,1],[],1] call DZAI_static_spawn; + ["DZAI_Khelm",[0,1],[],1] call DZAI_static_spawn; + ["DZAI_Olsha",[0,1],[],1] call DZAI_static_spawn; + ["DZAI_NEAF",[2,2],['NEAF1','NEAF2','NEAF3','NEAF4','NEAF5'],2] call DZAI_static_spawn; + ["DZAI_Krasnostav",[1,1],[],2] call DZAI_static_spawn; + ["DZAI_Gvozdno",[0,2],[],2] call DZAI_static_spawn; + ["DZAI_Pavlovo",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Bor",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Msta",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Staroye",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Dolina",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_OrlovetsFactory",[0,1],[],1] call DZAI_static_spawn; + ["DZAI_DubrovkaNW",[0,1],[],1] call DZAI_static_spawn; + ["DZAI_Dubrovka",[0,2],[],1] call DZAI_static_spawn; + ["DZAI_Polana",[1,2],[],1] call DZAI_static_spawn; + ["DZAI_Mogilevka",[0,2],[],1] call DZAI_static_spawn; + ["DZAI_Nadezhdino",[0,2],[],0] call DZAI_static_spawn; + ["DZAI_Zub",[2,2],['CastleZub','CastleZub2','Zub3','Zub4'],1] call DZAI_static_spawn; + ["DZAI_Kozlovka",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Drozhino",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Zelenogorsk",[1,1],[],1,2] call DZAI_static_spawn; + ["DZAI_GreenMountain",[0,3],[],2] call DZAI_static_spawn; + ["DZAI_Shakhovka",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Guglovo",[0,1],[],1] call DZAI_static_spawn; + ["DZAI_Vyshnoye",[0,1],[],1] call DZAI_static_spawn; + ["DZAI_Pulkovo",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Sosnovka",[0,1],[],1] call DZAI_static_spawn; + ["DZAI_Myshkino",[0,2],[],1] call DZAI_static_spawn; + ["DZAI_Pustoshka",[1,2],[],1] call DZAI_static_spawn; + ["DZAI_Vybor",[1,2],[],2] call DZAI_static_spawn; + ["DZAI_Pogorevka",[0,2],[],1] call DZAI_static_spawn; + ["DZAI_Rogovo",[0,1],[],1] call DZAI_static_spawn; + ["DZAI_Gorka",[0,2],[],2] call DZAI_static_spawn; + ["DZAI_NovySobor",[2,1],[],2] call DZAI_static_spawn; + ["DZAI_StarySobor",[2,0],[],2,2] call DZAI_static_spawn; //Recommended to remove for Epoch servers + ["DZAI_Kabanino",[1,2],[],1] call DZAI_static_spawn; + ["DZAI_Lopatino",[0,2],[],2] call DZAI_static_spawn; + ["DZAI_DevilsCastle",[2,2],['DevilsCastle','DevilsCastle2','Devils3','Devils4'],1] call DZAI_static_spawn; + ["DZAI_Grishino",[1,2],[],2] call DZAI_static_spawn; + ["DZAI_NWAF2",[3,0],[],3] call DZAI_static_spawn; + ["DZAI_NWAF3",[3,0],[],3] call DZAI_static_spawn; + ["DZAI_NWAF4",[2,1],['NWAF4_1','NWAF4_2','NWAF4_3','NWAF4_4'],2] call DZAI_static_spawn; + ["DZAI_NWAF5",[2,1],['NWAF5_1','NWAF5_2','NWAF5_3','NWAF5_4'],2] call DZAI_static_spawn; + ["DZAI_NWAF6",[2,1],['NWAF6_1','NWAF6_2','NWAF6_3','NWAF6_4'],2] call DZAI_static_spawn; + ["DZAI_NWAF7",[2,1],['NWAF7_1','NWAF7_2','NWAF7_3','NWAF7_4'],2] call DZAI_static_spawn; +}; + +#include "custom_markers\cust_markers_chernarus.sqf" +#include "custom_spawns\cust_spawns_chernarus.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Chernarus static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_cmr_ovaron.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_cmr_ovaron.sqf new file mode 100755 index 0000000..cff81f9 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_cmr_ovaron.sqf @@ -0,0 +1,20 @@ +/* + Ovaron static spawn configuration + + Last updated: 9:07 PM 1/23/2014 + +*/ + +#include "spawn_markers\markers_cmr_ovaron.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + [] execVM format ["%1\scripts\setup_autoStaticSpawns.sqf",DZAI_directory]; //IMPORTANT: REMOVE THIS ENTIRE LINE BEFORE ADDING STATIC SPAWNS HERE +}; + +#include "custom_markers\cust_markers_cmr_ovaron.sqf" +#include "custom_spawns\cust_spawns_cmr_ovaron.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Ovaron static spawn configuration loaded."; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_dayzunleashed.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_dayzunleashed.sqf new file mode 100755 index 0000000..d09fd64 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_dayzunleashed.sqf @@ -0,0 +1,598 @@ +/* + //DayZ Unleashed-specific spawns + + +*/ + + +_this = createTrigger ["EmptyDetector", [16404.818, 18407.805]]; +_this setTriggerArea [900, 900, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "suhrenfeld_internal"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [3,8,850,thisTrigger,[],3,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_6 = _this; + +_this = createTrigger ["EmptyDetector", [18338.666, 17120.857]]; +_this setTriggerArea [400, 400, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "pfeffikon"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [3,5,350,thisTrigger,[],3,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_9 = _this; + +_this = createTrigger ["EmptyDetector", [14408.414, 16992.586]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "airport_north1"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_12 = _this; + +_this = createTrigger ["EmptyDetector", [14647.103, 16670.883]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "airport_north2"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_14 = _this; + +_this = createTrigger ["EmptyDetector", [14874.174, 16418.256]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "airport_north3"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_16 = _this; + +_this = createTrigger ["EmptyDetector", [15154.952, 16126.912]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "airport_north4"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_18 = _this; + +_this = createTrigger ["EmptyDetector", [18163.58, 2037.2637, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "airport_southeast1"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_21 = _this; + +_this = createTrigger ["EmptyDetector", [18464.359, 2430.2002, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "airport_southeast"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_23 = _this; + +_this = createTrigger ["EmptyDetector", [4130.9883, 4493.3403]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "airport_southwest1"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_25 = _this; + +_this = createTrigger ["EmptyDetector", [4690.6611, 4678.5127]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "airport_southwest2"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_27 = _this; + +_this = createTrigger ["EmptyDetector", [5183.7568, 4688.9141]]; +_this setTriggerArea [400, 400, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "airport_southwest3"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,350,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_29 = _this; + +_this = createTrigger ["EmptyDetector", [2533.6628, 11372.42]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "hindelbank2"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_31 = _this; + +_this = createTrigger ["EmptyDetector", [2326.0884, 11103.879, 8.392334e-005]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "hindelbank1"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_33 = _this; + +_this = createTrigger ["EmptyDetector", [1969.004, 10009.399]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "ittingen1"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_36 = _this; + +_this = createTrigger ["EmptyDetector", [1990.7776, 9816.3418, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "ittingen2"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_38 = _this; + +_this = createTrigger ["EmptyDetector", [2159.1592, 9589.8965]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "ittingen3"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_40 = _this; + +_this = createTrigger ["EmptyDetector", [3252.1887, 9148.6221, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "hasle_southeast"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_42 = _this; + +_this = createTrigger ["EmptyDetector", [3491.6978, 9655.2197, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "hasle2"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_44 = _this; + +_this = createTrigger ["EmptyDetector", [3676.0464, 9926.6621, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "hasle1"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_46 = _this; + +_this = createTrigger ["EmptyDetector", [2363.8328, 8425.7461, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "worb9"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_48 = _this; + +_this = createTrigger ["EmptyDetector", [2212.8699, 8202.2051, 4.7683716e-007]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "worb8"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_50 = _this; + +_this = createTrigger ["EmptyDetector", [2098.1963, 7938.02, -4.7683716e-007]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "worb6"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_52 = _this; + +_this = createTrigger ["EmptyDetector", [2214.3215, 7549, 9.5367432e-007]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "worb3"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_54 = _this; + +_this = createTrigger ["EmptyDetector", [2655.5977, 7479.3237, -1.9073486e-006]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "worb2"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_56 = _this; + +_this = createTrigger ["EmptyDetector", [2424.7983, 7820.4419, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "worb5"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_58 = _this; + +_this = createTrigger ["EmptyDetector", [2604.7927, 8231.2354, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "worb7"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_60 = _this; + +_this = createTrigger ["EmptyDetector", [3130.2598, 7447.3887, -9.5367432e-007]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "worb4"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_62 = _this; + +_this = createTrigger ["EmptyDetector", [2777.5298, 7936.5684, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "worb1"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_64 = _this; + +_this = createTrigger ["EmptyDetector", [3514.9255, 8202.2012, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "munsingen1"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_66 = _this; + +_this = createTrigger ["EmptyDetector", [3667.3401, 7962.6929, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "munsingen2"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_68 = _this; + +_this = createTrigger ["EmptyDetector", [2885.3394, 6229.498, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "homburg"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_70 = _this; + +_this = createTrigger ["EmptyDetector", [5353.5059, 5675.8838]]; +_this setTriggerArea [500, 500, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,450,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_72 = _this; + +_this = createTrigger ["EmptyDetector", [6117.0796, 5107.5576, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "buckten_southeast"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_76 = _this; + +_this = createTrigger ["EmptyDetector", [8942.9766, 5357.8394]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "schangen1"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_78 = _this; + +_this = createTrigger ["EmptyDetector", [9199.4727, 5520.2275, 0.77199554]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "schangen2"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_80 = _this; + +_this = createTrigger ["EmptyDetector", [7308.8135, 6713.7588, -5.3405762e-005]]; +_this setTriggerArea [500, 500, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "eggwil"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,450,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_82 = _this; + +_this = createTrigger ["EmptyDetector", [5982.0449, 8952.29, 4.3856812]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "signau"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_84 = _this; + +_this = createTrigger ["EmptyDetector", [6294.2505, 9481.6221, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "muenchenstein2"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_86 = _this; + +_this = createTrigger ["EmptyDetector", [6383.7153, 9737.5332, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "muenchenstein1"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_88 = _this; + +_this = createTrigger ["EmptyDetector", [6650.0273, 9581.4902, 9.5367432e-007]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "muenchenstein3"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_90 = _this; + +_this = createTrigger ["EmptyDetector", [7786.0205, 9306.8555, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "chatzbach"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_92 = _this; + +_this = createTrigger ["EmptyDetector", [10015.75, 7582.4756, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "milan"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_94 = _this; + +_this = createTrigger ["EmptyDetector", [11084.175, 8673.1826]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "sissach2"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_96 = _this; + +_this = createTrigger ["EmptyDetector", [11281.655, 8785.5947]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "sissach1"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_98 = _this; + +_this = createTrigger ["EmptyDetector", [10590.528, 4926.6992, 11.500801]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "schrattendamm"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_100 = _this; + +_this = createTrigger ["EmptyDetector", [13537.42, 5317.3462, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "sorenberg"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_102 = _this; + +_this = createTrigger ["EmptyDetector", [16839.898, 5182.0947, 8.1885509]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "giswil"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_104 = _this; + +_this = createTrigger ["EmptyDetector", [17217.1, 3523.4072, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "froburg"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_106 = _this; + +_this = createTrigger ["EmptyDetector", [13085.807, 6985.7456]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "farnen"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_108 = _this; + +_this = createTrigger ["EmptyDetector", [12407.355, 9419.6377]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "liestal1"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_110 = _this; + +_this = createTrigger ["EmptyDetector", [12700.942, 9575.6875]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "liestal2"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_112 = _this; + +_this = createTrigger ["EmptyDetector", [12923.115, 9795.2168]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "liestal3"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_114 = _this; + +_this = createTrigger ["EmptyDetector", [9833.3955, 9936.5967, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "bruderholz"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_116 = _this; + +_this = createTrigger ["EmptyDetector", [8862.5166, 11018.768, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "ag"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +agerifeld = _this; +_trigger_118 = _this; + +_this = createTrigger ["EmptyDetector", [11075.406, 11822.705, 4.3609467]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "napf"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_120 = _this; + +_this = createTrigger ["EmptyDetector", [12944.842, 11750.984, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "romoos"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_122 = _this; + +_this = createTrigger ["EmptyDetector", [14896.84, 11082.713, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "sachseln1"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_124 = _this; + +_this = createTrigger ["EmptyDetector", [14895.552, 10847.114, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "sachseln2"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_126 = _this; + +_this = createTrigger ["EmptyDetector", [18664.523, 9478.3291, -4.7683716e-007]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "alpnach"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_128 = _this; + +_this = createTrigger ["EmptyDetector", [19003.676, 6876.001, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "island_east"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_130 = _this; + +_this = createTrigger ["EmptyDetector", [14338.446, 12520.148, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "wolhusen2"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_132 = _this; + +_this = createTrigger ["EmptyDetector", [14183.622, 12754.734, 6.3866339]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "wolhusen1"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_134 = _this; + +_this = createTrigger ["EmptyDetector", [10487.617, 14090.64, 0]]; +_this setTriggerArea [500, 500, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "hirsegg"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,450,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_136 = _this; + +_this = createTrigger ["EmptyDetector", [8653.4922, 14330.331, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "truebsaal"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_138 = _this; + +_this = createTrigger ["EmptyDetector", [7533.418, 14246.273, -1.1444092e-005]]; +_this setTriggerArea [500, 500, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "trueb"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,450,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_142 = _this; + +_this = createTrigger ["EmptyDetector", [7396.2163, 14776.627]]; +_this setTriggerArea [500, 500, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "trueb_north"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,450,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_144 = _this; + +_this = createTrigger ["EmptyDetector", [5924.395, 13703.486, 0]]; +_this setTriggerArea [500, 500, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "neue_welt"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,450,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_146 = _this; + +_this = createTrigger ["EmptyDetector", [9752.668, 15666.391, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "lenzburg_south"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_148 = _this; + +_this = createTrigger ["EmptyDetector", [11305.615, 18476.525, 1.9073486e-006]]; +_this setTriggerArea [200, 200, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "hasenmatt"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_150 = _this; + +_this = createTrigger ["EmptyDetector", [8419.9619, 945.08301, 9.5367432e-007]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "waldegg"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_152 = _this; + +_this = createTrigger ["EmptyDetector", [759.22412, 6988.7656, 3.8146973e-006]]; +_this setTriggerArea [600, 600, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "feldmoos"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,550,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_154 = _this; + +_this = createTrigger ["EmptyDetector", [9101.6924, 17625.164]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "harbour"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_156 = _this; + +_this = createTrigger ["EmptyDetector", [8406.0137, 17206.279, 0]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "freidorf"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_158 = _this; + +_this = createTrigger ["EmptyDetector", [6532.5107, 16838.295, 9.5367432e-007]]; +_this setTriggerArea [300, 300, 0, false]; +_this setTriggerActivation ["ANY", "PRESENT", false]; +_this setTriggerTimeout [20, 25, 30, false]; +_this setTriggerText "seewen"; +_this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,250,thisTrigger,[],1,1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; +_trigger_160 = _this; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_fallujah.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_fallujah.sqf new file mode 100755 index 0000000..987e8a9 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_fallujah.sqf @@ -0,0 +1,292 @@ +/* + Fallujah static spawn configuration + + Last updated: 11:08 PM 7/5/2013 + +*/ + +#include "spawn_markers\markers_fallujah.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + _this = createTrigger ["EmptyDetector", [7874.5493, 1919.8889]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Airport 2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,200,thisTrigger,[],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_3 = _this; + + _this = createTrigger ["EmptyDetector", [7992.6025, 2274.168]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Airport 1"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_5 = _this; + + _this = createTrigger ["EmptyDetector", [5841.0649, 3274.3418]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Shuhada 3"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_7 = _this; + + _this = createTrigger ["EmptyDetector", [4167.9814, 2937.0071]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Shuhada Outskirts"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_10 = _this; + + _this = createTrigger ["EmptyDetector", [4231.8408, 3775.5828]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Nazal Old City 3"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_12 = _this; + + _this = createTrigger ["EmptyDetector", [5460.3242, 4725.9829]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Industrial Park"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_14 = _this; + + _this = createTrigger ["EmptyDetector", [4578.2759, 4623.8286]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Nazal Old City"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_16 = _this; + + _this = createTrigger ["EmptyDetector", [3789.0449, 4756.6895]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Muhadisin 2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_18 = _this; + + _this = createTrigger ["EmptyDetector", [6017.7773, 5471.8042]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Al-Fallujah2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_20 = _this; + + _this = createTrigger ["EmptyDetector", [6847.6694, 5847.5957]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Askari"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_22 = _this; + + _this = createTrigger ["EmptyDetector", [6149.6079, 6328.2373]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Jeghaifi"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_24 = _this; + + _this = createTrigger ["EmptyDetector", [5275.6221, 6394.0518, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Shurta"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_26 = _this; + + _this = createTrigger ["EmptyDetector", [5099.4775, 5486.6943, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Al-Fallujah"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_28 = _this; + + _this = createTrigger ["EmptyDetector", [4259.4507, 5389.4009]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Muhadisin"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_30 = _this; + + _this = createTrigger ["EmptyDetector", [4258.0264, 6241.6333, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Mualimeen"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_32 = _this; + + _this = createTrigger ["EmptyDetector", [2743.0493, 6054.9946]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Jolan 1"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_34 = _this; + + _this = createTrigger ["EmptyDetector", [3135.6968, 5255.6885, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Jolan 2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_36 = _this; + + _this = createTrigger ["EmptyDetector", [664.65045, 8368.6553]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "006 981"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_38 = _this; + + _this = createTrigger ["EmptyDetector", [1752.8987, 7335.0488]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "017 970"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_41 = _this; + + _this = createTrigger ["EmptyDetector", [5693.0415, 9848.7383, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "FOB"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_43 = _this; + + _this = createTrigger ["EmptyDetector", [8290.915, 5529.1563, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Highway 13 Hotel"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_46 = _this; + + _this = createTrigger ["EmptyDetector", [8121.4365, 1513.1226]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Airport 3"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,200,thisTrigger,[],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_49 = _this; + + _this = createTrigger ["EmptyDetector", [8401.168, 1669.4257]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Airport 4"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,200,thisTrigger,[],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_52 = _this; + + _this = createTrigger ["EmptyDetector", [3628.2813, 6870.4043, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Train Station"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_55 = _this; + + _this = createTrigger ["EmptyDetector", [5137.1113, 3965.2295]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Nazal Old City 2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_58 = _this; + + _this = createTrigger ["EmptyDetector", [6320.5513, 4726.0381]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Industrial Park 2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_61 = _this; + + _this = createTrigger ["EmptyDetector", [4948.8364, 3179.9587, 8.0061226]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Shuhada"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_63 = _this; + + _this = createTrigger ["EmptyDetector", [5462.3125, 2556.1438]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Shuhada 2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_65 = _this; + + _this = createTrigger ["EmptyDetector", [3560.7349, 5894.3066, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Jolan 3"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_67 = _this; + + _this = createTrigger ["EmptyDetector", [5874.2266, 4094.0103]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Industrial Park 3"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_69 = _this; + + _this = createTrigger ["EmptyDetector", [4710.873, 2471.1787]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Shuhada Outskirts 2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_71 = _this; + + _this = createTrigger ["EmptyDetector", [3493.2424, 4049.1069]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Nazal Outskirts"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_73 = _this; + + _this = createTrigger ["EmptyDetector", [2466.6702, 4881.7129]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Hospital"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_75 = _this; + + _this = createTrigger ["EmptyDetector", [6880.3315, 6543.4219, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Askari 2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_77 = _this; + + //end triggers +}; + +#include "custom_markers\cust_markers_fallujah.sqf" +#include "custom_spawns\cust_spawns_fallujah.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Fallujah static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_fdf_isle1_a.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_fdf_isle1_a.sqf new file mode 100755 index 0000000..8eda3ba --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_fdf_isle1_a.sqf @@ -0,0 +1,43 @@ +/* + Podagorsk static spawn configuration + + Last updated: 3:32 PM 6/21/2014 + +*/ + +#include "spawn_markers\markers_podagorsk.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + //begin spawns + #include "spawn_areas\areas_podagorsk.sqf" //Load spawn area definitions file. + + ['DZAI_BolshevikS',[0,2],[],1] call DZAI_static_spawn; + ['DZAI_Bolshevik',[2,0],[],2] call DZAI_static_spawn; + ['DZAI_BolshevikN',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_BolshevikBarracks',[3,0],[],3] call DZAI_static_spawn; + ['DZAI_OstrovYBarracks',[3,0],[],3] call DZAI_static_spawn; + ['DZAI_KrasnoflotskiyeBarracks',[2,1],[],3] call DZAI_static_spawn; + ['DZAI_Tobolsk',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_TobolskTowers',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_KronotskyBarracks',[2,0],[],3] call DZAI_static_spawn; + ['DZAI_SonaBarracks',[2,0],[],3,2] call DZAI_static_spawn; + ['DZAI_Protvino',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_ProtvinoBarrack',[1,1],[],3] call DZAI_static_spawn; + ['DZAI_PijmaBarracks',[2,0],[],3] call DZAI_static_spawn; + ['DZAI_BereznikiE',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_BereznikiW',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Kirsanov',[0,1],[],1] call DZAI_static_spawn; + ['DZAI_BoronukBarracks',[2,1],[],3] call DZAI_static_spawn; + ['DZAI_Kovrov',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Zirnitra',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_Sona',[1,1],[],3] call DZAI_static_spawn; + //end of spawns +}; + +#include "custom_markers\cust_markers_podagorsk.sqf" +#include "custom_spawns\cust_spawns_podagorsk.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Podagorsk static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_isladuala.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_isladuala.sqf new file mode 100755 index 0000000..260f395 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_isladuala.sqf @@ -0,0 +1,589 @@ +/* + Isladuala static spawn configuration + + Last updated: 11:08 PM 7/5/2013 + +*/ + +#include "spawn_markers\markers_isladuala.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + _this = createTrigger ["EmptyDetector", [7037.2319, 8564.9844]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Xibo"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_0 = _this; + + _this = createTrigger ["EmptyDetector", [5725.9712, 8119.5439, 3.0922403]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Casinda"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_2 = _this; + + _this = createTrigger ["EmptyDetector", [6016.4268, 7584.5688]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Pumado"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_4 = _this; + + _this = createTrigger ["EmptyDetector", [5568.6484, 7631.1821]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Pumado Mil Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_6 = _this; + + _this = createTrigger ["EmptyDetector", [6820.5537, 7584.5029, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Maluri"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_8 = _this; + + _this = createTrigger ["EmptyDetector", [6807.4512, 7064.249, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Maluri Mil Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_10 = _this; + + _this = createTrigger ["EmptyDetector", [4519.145, 6590.1211]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bolabongo"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_12 = _this; + + _this = createTrigger ["EmptyDetector", [4185.3545, 6802.4468, 7.5758514]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bolabongo West"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_14 = _this; + + _this = createTrigger ["EmptyDetector", [4138.4946, 7735.9121]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Molisana"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_16 = _this; + + _this = createTrigger ["EmptyDetector", [2950.7937, 7018.6011]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Swonto"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,0,200,thisTrigger,[],2,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_20 = _this; + + _this = createTrigger ["EmptyDetector", [2247.2288, 6960.4482]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Caspal"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_22 = _this; + + _this = createTrigger ["EmptyDetector", [1641.5251, 8206.0977]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ashlake Resort"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_24 = _this; + + _this = createTrigger ["EmptyDetector", [1229.1614, 8805.7842]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Pinley"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_26 = _this; + + _this = createTrigger ["EmptyDetector", [1054.5686, 8457.3525]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Pinley Mil Base S"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_28 = _this; + + _this = createTrigger ["EmptyDetector", [863.87537, 9030.4551]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Pinley Mil Base N"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_30 = _this; + + _this = createTrigger ["EmptyDetector", [860.87988, 7986.5264]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Upseesdi"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,200,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_32 = _this; + + _this = createTrigger ["EmptyDetector", [1343.1869, 7728.1333, 6.6202183]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Porto Hazena"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_34 = _this; + + _this = createTrigger ["EmptyDetector", [1236.2723, 6510.9922]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Forteza"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_38 = _this; + + _this = createTrigger ["EmptyDetector", [4612.4248, 8122.7363]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Engor"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],2,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_40 = _this; + + _this = createTrigger ["EmptyDetector", [2116.0154, 5784.1045]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kwako"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_42 = _this; + + _this = createTrigger ["EmptyDetector", [2100.9089, 6115.0566]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kwako North"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_44 = _this; + + _this = createTrigger ["EmptyDetector", [2549.093, 6296.291]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bay of Swonto Shoreline"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_46 = _this; + + _this = createTrigger ["EmptyDetector", [2588.8691, 5813.2559, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kwako Mil Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_48 = _this; + + _this = createTrigger ["EmptyDetector", [1391.9092, 4827.4482]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Spookdorp"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_50 = _this; + + _this = createTrigger ["EmptyDetector", [1332.7949, 4268.3154]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Simbala"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,200,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_52 = _this; + + _this = createTrigger ["EmptyDetector", [2134.0449, 3748.551, 1.9073486e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "De Boor"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_54 = _this; + + _this = createTrigger ["EmptyDetector", [3186.4597, 3830.7688]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Djolan"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_56 = _this; + + _this = createTrigger ["EmptyDetector", [3503.8848, 3089.8181]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Test Road"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,250,thisTrigger,[],2,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_58 = _this; + + _this = createTrigger ["EmptyDetector", [3192.5005, 2651.5388, 2.9124184]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kinsella West"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_60 = _this; + + _this = createTrigger ["EmptyDetector", [3617.105, 2509.2744]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kinsella Center"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_62 = _this; + + _this = createTrigger ["EmptyDetector", [3966.3867, 2457.2327]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kinsella East"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_64 = _this; + + _this = createTrigger ["EmptyDetector", [4159.0742, 2195.8318]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Aeroporto Kinsella Intl."; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_66 = _this; + + _this = createTrigger ["EmptyDetector", [4211.3032, 1585.1396]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Orellan"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_68 = _this; + + _this = createTrigger ["EmptyDetector", [3330.8101, 1440.3333]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Fishala"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_70 = _this; + + _this = createTrigger ["EmptyDetector", [2572.7119, 1806.7396]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Cainna Wind"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_72 = _this; + + _this = createTrigger ["EmptyDetector", [1546.9948, 1429.2065]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Camara W"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_74 = _this; + + _this = createTrigger ["EmptyDetector", [1897.2008, 1451.3766]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Camara E"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_76 = _this; + + _this = createTrigger ["EmptyDetector", [1390.5886, 656.09509]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ramons Plantation"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_78 = _this; + + _this = createTrigger ["EmptyDetector", [2147.4277, 833.31445]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ramons East"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_80 = _this; + + _this = createTrigger ["EmptyDetector", [2689.5605, 1327.381]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Isla Vixena"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_82 = _this; + + _this = createTrigger ["EmptyDetector", [1807.9236, 2234.9602]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Lina"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_84 = _this; + + _this = createTrigger ["EmptyDetector", [2603.1567, 3554.3096, 0.080730438]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Zemanovo Mil Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_86 = _this; + + _this = createTrigger ["EmptyDetector", [5307.6777, 3312.4048, 3.5966721]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Numbo"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_88 = _this; + + _this = createTrigger ["EmptyDetector", [5987.3306, 3325.0396, 6.6718788]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Mawimbella"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],0,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_90 = _this; + + _this = createTrigger ["EmptyDetector", [6259.168, 3077.2568, -2.7656555e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Miwimbela South"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_92 = _this; + + _this = createTrigger ["EmptyDetector", [5447.4229, 2539.6992]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Refugee Camp"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_94 = _this; + + _this = createTrigger ["EmptyDetector", [6380.1587, 2323.3037, 2.8518009]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Larenga"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_96 = _this; + + _this = createTrigger ["EmptyDetector", [6159.2109, 1259.9026, -1.9073486e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kingala"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_98 = _this; + + _this = createTrigger ["EmptyDetector", [6705.4351, 4188.5449, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Cova"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_100 = _this; + + _this = createTrigger ["EmptyDetector", [7507.7754, 3148.8276, 4.6916485]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ursana"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_102 = _this; + + _this = createTrigger ["EmptyDetector", [7428.209, 1597.6958, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kimbaka Mil Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_104 = _this; + + _this = createTrigger ["EmptyDetector", [8594.1143, 1151.1523]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "St Trisha"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_106 = _this; + + _this = createTrigger ["EmptyDetector", [8960.042, 1309.5997]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "St Trisha East"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_108 = _this; + + _this = createTrigger ["EmptyDetector", [8516.2217, 3298.2988, 3.1227856]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kirabo"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_110 = _this; + + _this = createTrigger ["EmptyDetector", [8195.1934, 5621.1445, 8.006115]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Canto"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_112 = _this; + + _this = createTrigger ["EmptyDetector", [8687.1006, 5429.0845]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Canto East"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,200,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_114 = _this; + + _this = createTrigger ["EmptyDetector", [8670.2432, 6519.6104]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Zeelor Mil Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_116 = _this; + + _this = createTrigger ["EmptyDetector", [8471.4863, 7130.4678, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Zeelor"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_118 = _this; + + _this = createTrigger ["EmptyDetector", [9397.6182, 8927.667, 5.7950001]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Chaba"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_120 = _this; + + _this = createTrigger ["EmptyDetector", [8728.6035, 8919.666]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Mangomak Island West"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],2,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_122 = _this; + + _this = createTrigger ["EmptyDetector", [5746.0171, 6091.6694]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Aeroporto Molatia Intl"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_124 = _this; + + _this = createTrigger ["EmptyDetector", [5083.896, 5162.3945, 3.3981285]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Nubak"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_126 = _this; + + _this = createTrigger ["EmptyDetector", [5209.27, 4590.9551]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Obmeya"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_128 = _this; + + _this = createTrigger ["EmptyDetector", [5859.8735, 4757.6616, 1.6802704]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sheds"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_130 = _this; + + _this = createTrigger ["EmptyDetector", [3926.9272, 3643.1035]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ambush Alley"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_132 = _this; + + _this = createTrigger ["EmptyDetector", [3746.7529, 6240.0151]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bolabongo SW"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,200,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_134 = _this; + + _this = createTrigger ["EmptyDetector", [2949.1892, 6128.9204]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Aeroporto Swonto Pinley"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_136 = _this; + + _this = createTrigger ["EmptyDetector", [3506.4365, 5702.2222, 6.2364159]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Gerenuk Desert"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_138 = _this; + + _this = createTrigger ["EmptyDetector", [6472.6265, 4921.207]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Coya Mil Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_144 = _this; + + _this = createTrigger ["EmptyDetector", [608.96344, 7185.2656, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Minesini"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,0,225,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_146 = _this; + + _this = createTrigger ["EmptyDetector", [5445.5176, 4843.4492, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Obmeya Mil Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_149 = _this; + + //end trigger + +}; + +#include "custom_markers\cust_markers_isladuala.sqf" +#include "custom_spawns\cust_spawns_isladuala.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Isladuala static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_lingor.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_lingor.sqf new file mode 100755 index 0000000..295c3ae --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_lingor.sqf @@ -0,0 +1,607 @@ +/* + Lingor static spawn configuration + + Last updated: 12:19 AM 7/23/2013 + +*/ + +#include "spawn_markers\markers_lingor.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + //begin triggers + _this = createTrigger ["EmptyDetector", [1698.2728, 608.19336]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Medlina"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_0 = _this; + + _this = createTrigger ["EmptyDetector", [1203.9924, 592.44324]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Alma"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,200,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_2 = _this; + + _this = createTrigger ["EmptyDetector", [534.57129, 931.08551, 1.5258789e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Mercadio"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_4 = _this; + + _this = createTrigger ["EmptyDetector", [971.86395, 1766.6132]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Drassen"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,225,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_8 = _this; + + _this = createTrigger ["EmptyDetector", [2104.4998, 1086.9586]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Verto"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_10 = _this; + + _this = createTrigger ["EmptyDetector", [2896.8037, 1324.5605]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Rock Cafe"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_12 = _this; + + _this = createTrigger ["EmptyDetector", [3286.209, 1515.5829]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ralon"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_14 = _this; + + _this = createTrigger ["EmptyDetector", [3828.3474, 1472.7954]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Calamar"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_16 = _this; + + _this = createTrigger ["EmptyDetector", [4297.3359, 1690.4199, 0.080739975]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sargento (Markers)"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,['Sargento1','Sargento2','Sargento3','Sargento4','Sargento5'],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_20 = _this; + + _this = createTrigger ["EmptyDetector", [4705.125, 1870.5652, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Melana Resort"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_22 = _this; + + _this = createTrigger ["EmptyDetector", [4060.7, 2345.0037]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bilbado"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_24 = _this; + + _this = createTrigger ["EmptyDetector", [2954.6436, 3723.2271, 6.1199799]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "DZAI Trigger"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_26 = _this; + + _this = createTrigger ["EmptyDetector", [3421.1252, 3766.6194]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Research Lab 102"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,140,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_28 = _this; + + _this = createTrigger ["EmptyDetector", [1922.6033, 4517.4087]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Motodrom Rapido"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_30 = _this; + + _this = createTrigger ["EmptyDetector", [927.57318, 5021.5088]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Regina Tributa"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_32 = _this; + + _this = createTrigger ["EmptyDetector", [856.64136, 5598.0586, 3.8349648]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Benio"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_36 = _this; + + _this = createTrigger ["EmptyDetector", [2785.6826, 5370.9512]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Vidora"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_38 = _this; + + _this = createTrigger ["EmptyDetector", [3405.3394, 5096.249, 5.9604645e-008]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Rosalia"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_40 = _this; + + _this = createTrigger ["EmptyDetector", [4011.7578, 5033.6431]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Distrito Turistico"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_42 = _this; + + _this = createTrigger ["EmptyDetector", [4791.3721, 5078.8423]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Calapedro"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_44 = _this; + + _this = createTrigger ["EmptyDetector", [4149.0122, 4544.4688]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "San Arulco"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_46 = _this; + + _this = createTrigger ["EmptyDetector", [3711.9893, 4556.1895]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Centro Esencia"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_48 = _this; + + _this = createTrigger ["EmptyDetector", [3144.592, 4587.4668]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Morada"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_50 = _this; + + _this = createTrigger ["EmptyDetector", [4723.3696, 3143.2578]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Faunaverde"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,185,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_52 = _this; + + _this = createTrigger ["EmptyDetector", [3585.9399, 2795.4971]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Montehofo"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_54 = _this; + + _this = createTrigger ["EmptyDetector", [4913.4629, 2696.5176]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Negrosa"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_56 = _this; + + _this = createTrigger ["EmptyDetector", [5436.3374, 2104.5081]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Lagosa"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_58 = _this; + + _this = createTrigger ["EmptyDetector", [5597.6309, 3267.8198, -0.00015449524]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Prospero"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,185,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_60 = _this; + + _this = createTrigger ["EmptyDetector", [6621.3857, 3326.3127]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Victorin"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_62 = _this; + + _this = createTrigger ["EmptyDetector", [6811.1563, 2144.3533, 2.9927869]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Marcella"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_66 = _this; + + _this = createTrigger ["EmptyDetector", [7500.8418, 1913.8586, -4.7683716e-007]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "El Villon"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_68 = _this; + + _this = createTrigger ["EmptyDetector", [7671.9023, 2902.4526, 4.7683716e-007]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Monga-Tamba-Pachi"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,225,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_72 = _this; + + _this = createTrigger ["EmptyDetector", [8318.8057, 2860.9172, 2.969995]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Palida"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,200,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_74 = _this; + + _this = createTrigger ["EmptyDetector", [6069.5698, 1760.6586, 0.047464609]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Building"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_76 = _this; + + _this = createTrigger ["EmptyDetector", [5827.6191, 4638.3301]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Corazon"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,225,thisTrigger,[],2,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_78 = _this; + + _this = createTrigger ["EmptyDetector", [6808.8735, 4703.7256]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Manteria"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_82 = _this; + + _this = createTrigger ["EmptyDetector", [6589.0029, 4349.2559]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sanvigado"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_84 = _this; + + _this = createTrigger ["EmptyDetector", [7016.9897, 5735.5288]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Cafe Prada South"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_86 = _this; + + _this = createTrigger ["EmptyDetector", [6418.1719, 5793.4741]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Tres Palmas Inn"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,225,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_88 = _this; + + _this = createTrigger ["EmptyDetector", [6587.939, 6538.291, 4.6562405]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Maruko"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_92 = _this; + + _this = createTrigger ["EmptyDetector", [6099.6914, 6766.8203]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Airport Terminal W"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_94 = _this; + + _this = createTrigger ["EmptyDetector", [8637.2393, 7845.1719]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Conoteta"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_98 = _this; + + _this = createTrigger ["EmptyDetector", [8372.5771, 8785.4121, 2.9700069]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Cemarin"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_100 = _this; + + _this = createTrigger ["EmptyDetector", [5118.2563, 6945.5122]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "San Isabel"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_102 = _this; + + _this = createTrigger ["EmptyDetector", [4364.9629, 6769.4038, 4.095047]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Research Lab 101"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,0,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_104 = _this; + + _this = createTrigger ["EmptyDetector", [3687.0007, 6459.0557]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Aculto-Garibosa"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_106 = _this; + + _this = createTrigger ["EmptyDetector", [3923.0681, 5904.8486]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Gayucca"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_108 = _this; + + _this = createTrigger ["EmptyDetector", [4467.5986, 5669.1431]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Tucos"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_112 = _this; + + _this = createTrigger ["EmptyDetector", [5187.9038, 5476.7856]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Barracks"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_114 = _this; + + _this = createTrigger ["EmptyDetector", [5398.9761, 5077.6099]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Checkpoint Oeste"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_116 = _this; + + _this = createTrigger ["EmptyDetector", [3275.8403, 6209.2446]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Calixo"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_118 = _this; + + _this = createTrigger ["EmptyDetector", [3045.7483, 6477.4067]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "FOB Eddie"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_120 = _this; + + _this = createTrigger ["EmptyDetector", [2758.9204, 6864.7163]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "FOB Eddie 2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,225,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_122 = _this; + + _this = createTrigger ["EmptyDetector", [3091.5913, 8037.5361]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Prison (Markers)"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,150,thisTrigger,['Prison1','Prison2','Prison3','Prison4','Prison5'],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_124 = _this; + + _this = createTrigger ["EmptyDetector", [4260.1558, 7507.1646]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "DZAI Trigger"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_126 = _this; + + _this = createTrigger ["EmptyDetector", [1364.8784, 1412.1613]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Pintosa"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_128 = _this; + + _this = createTrigger ["EmptyDetector", [648.92084, 4687.8394, -1.9073486e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Villa Oscura"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,140,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_130 = _this; + + _this = createTrigger ["EmptyDetector", [3081.7029, 5971.0171]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Fernando"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_136 = _this; + + _this = createTrigger ["EmptyDetector", [6869.2939, 6409.1436]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "PresidentePalace (Markers)"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,100,thisTrigger,['Palace1','Palace2','Palace3'],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_138 = _this; + + _this = createTrigger ["EmptyDetector", [528.13885, 1397.0074, 3.0798817]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Zuela"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_140 = _this; + + _this = createTrigger ["EmptyDetector", [4418.1411, 4931.6899]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Zona Residencial"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_143 = _this; + + _this = createTrigger ["EmptyDetector", [6819.8062, 6067.6177]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Cafe Prada"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,225,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_146 = _this; + + _this = createTrigger ["EmptyDetector", [6560.959, 6837.7388, 6.413044]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Airport Terminal E"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_149 = _this; + + _this = createTrigger ["EmptyDetector", [4455.2627, 6040.2598, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Tucos N"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_152 = _this; + + if ((DZAI_modName == "lingorskaro") || (DZAI_modName == "huntinggrounds")) then { + _this = createTrigger ["EmptyDetector", [4027.7668, 9277.6094]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Gatoro"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_155 = _this; + + _this = createTrigger ["EmptyDetector", [3247.5833, 9433.7051]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Medicolin"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_157 = _this; + + _this = createTrigger ["EmptyDetector", [1286.6865, 7435.5381, 1.7642975e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Zanjeer"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_159 = _this; + + _this = createTrigger ["EmptyDetector", [913.44141, 8188.9297, 2.3841858e-007]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Arapesca"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_161 = _this; + + _this = createTrigger ["EmptyDetector", [9286.9316, 4032.8284]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Fantasmo"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_163 = _this; + + _this = createTrigger ["EmptyDetector", [9243.4004, 5055.9131, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bantanam North"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_165 = _this; + + _this = createTrigger ["EmptyDetector", [1935.9822, 8777.6797, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "NMilBase1"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,['NMB1_1','NMB1_2','NMB1_3','NMB1_4','NMB1_5'],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_168 = _this; + + _this = createTrigger ["EmptyDetector", [2522.0386, 9178.0166, 9.5367432e-007]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "NMilBase2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,['NMB2_1','NMB2_2','NMB2_3','NMB2_4','NMB2_5'],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_171 = _this; + + _this = createTrigger ["EmptyDetector", [832.84277, 7705.6685, -9.5367432e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "NMilBase3"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,165,thisTrigger,['NMB3_1','NMB3_2','NMB3_3','NMB3_4','NMB3_5'],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_177 = _this; + + }; + //end triggers +}; + +#include "custom_markers\cust_markers_lingor.sqf" +#include "custom_spawns\cust_spawns_lingor.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Lingor static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_mbg_celle2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_mbg_celle2.sqf new file mode 100755 index 0000000..c8ec23d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_mbg_celle2.sqf @@ -0,0 +1,381 @@ +/* + Celle static spawn configuration + + Last updated: 11:57 PM 6/6/2013 + +*/ + +#include "spawn_markers\markers_mbg_celle2.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + + //begin triggers + _this = createTrigger ["EmptyDetector", [2356.353, 1182.4937, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Mellendorf"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_5 = _this; + + _this = createTrigger ["EmptyDetector", [1703.3657, 2045.8821]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Lindwedel"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_7 = _this; + + _this = createTrigger ["EmptyDetector", [334.01779, 3851.7898]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Schwarmstedt"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_9 = _this; + + _this = createTrigger ["EmptyDetector", [563.29688, 5061.6577, 9.5367432e-007]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "DZAI Trigger"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_13 = _this; + + _this = createTrigger ["EmptyDetector", [610.13916, 8719.7695, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Dushorn"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_15 = _this; + + _this = createTrigger ["EmptyDetector", [1651.0822, 9451.3926, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Fallingbostel"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_17 = _this; + + _this = createTrigger ["EmptyDetector", [2968.6587, 10919.845]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Dorfmark"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_19 = _this; + + _this = createTrigger ["EmptyDetector", [753.26855, 11076.064, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Benefeld"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,100,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_23 = _this; + + _this = createTrigger ["EmptyDetector", [6723.4248, 7989.394]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bergen"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],2,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_25 = _this; + + _this = createTrigger ["EmptyDetector", [8517.1914, 8122.8779, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Beckedorf"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_27 = _this; + + _this = createTrigger ["EmptyDetector", [9078.0566, 8908.0117]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Hermannsburg"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_29 = _this; + + _this = createTrigger ["EmptyDetector", [8311.7725, 9614.6348, 7.6293945e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bonstorf"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,0,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_31 = _this; + + _this = createTrigger ["EmptyDetector", [9576.0068, 10109.783, 3.9004173]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Muden"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_33 = _this; + + _this = createTrigger ["EmptyDetector", [10467.522, 10704.588]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Fassberg"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,125,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_35 = _this; + + _this = createTrigger ["EmptyDetector", [10886.337, 10966.786]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "ETHS"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_37 = _this; + + _this = createTrigger ["EmptyDetector", [10437.518, 11522.051, 9.5367432e-007]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Fassberg Barracks"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [3,2,125,thisTrigger,[],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_41 = _this; + + _this = createTrigger ["EmptyDetector", [7095.8955, 11341.207, 9.5367432e-007]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Wietzendorf"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_43 = _this; + + _this = createTrigger ["EmptyDetector", [8375.2324, 6201.9375]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Eversen"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_49 = _this; + + _this = createTrigger ["EmptyDetector", [6972.5615, 6634.1411, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Offen"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_51 = _this; + + _this = createTrigger ["EmptyDetector", [6048.7246, 5733.2813, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Walle"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_53 = _this; + + _this = createTrigger ["EmptyDetector", [7049.1787, 4662.458, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Wolthausen"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_55 = _this; + + _this = createTrigger ["EmptyDetector", [8176.6689, 4471.7256, 3.4234772]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "157_677"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_57 = _this; + + _this = createTrigger ["EmptyDetector", [9032.9219, 3941.7026, 0.16929245]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Scheuen"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_61 = _this; + + _this = createTrigger ["EmptyDetector", [8490.8213, 3295.0876]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Gross Hehlen"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_63 = _this; + + _this = createTrigger ["EmptyDetector", [9365.8906, 3105.7207, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Vorwerk"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_65 = _this; + + _this = createTrigger ["EmptyDetector", [8974.5664, 2647.6582, 7.9469242]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Hehlentor"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,150,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_69 = _this; + + _this = createTrigger ["EmptyDetector", [8360.9912, 2662.6626]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Klein Hehlen"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_71 = _this; + + _this = createTrigger ["EmptyDetector", [8947.2207, 2085.5581]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Celle"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,150,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_73 = _this; + + _this = createTrigger ["EmptyDetector", [7629.2075, 1394.094, 7.0633612]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "ETHC"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_81 = _this; + + _this = createTrigger ["EmptyDetector", [7087.311, 2571.6694]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "DZAI Trigger"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_83 = _this; + + _this = createTrigger ["EmptyDetector", [6155.9063, 2613.449, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ovelgonne"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_85 = _this; + + _this = createTrigger ["EmptyDetector", [5631.1216, 3690.1201]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sudwinsen"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_87 = _this; + + _this = createTrigger ["EmptyDetector", [5748.4819, 4174.6763]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Winsen(Aller)"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,180,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_89 = _this; + + _this = createTrigger ["EmptyDetector", [4645.0244, 3038.4998, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Wietze"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,0,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_95 = _this; + + _this = createTrigger ["EmptyDetector", [4563.7964, 5537.4448, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Meissendorf"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_97 = _this; + + _this = createTrigger ["EmptyDetector", [4663.7559, 484.27148, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Fuhrberg"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_99 = _this; + + _this = createTrigger ["EmptyDetector", [6024.9541, 1322.4375]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "GasStation"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_101 = _this; + + _this = createTrigger ["EmptyDetector", [10888.66, 853.16016]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Wienhausen"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_103 = _this; + + _this = createTrigger ["EmptyDetector", [11969.814, 2345.9883, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Lachendorf"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_105 = _this; + + _this = createTrigger ["EmptyDetector", [11822.666, 5783.8203, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Eschede"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_107 = _this; + + _this = createTrigger ["EmptyDetector", [2694.0867, 4061.2859, 3.232378]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Thoren"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_109 = _this; + + _this = createTrigger ["EmptyDetector", [5822.7529, 9192.2129, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "SmallFarm"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_111 = _this; + + _this = createTrigger ["EmptyDetector", [8622.5078, 2102.4631]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Celle West"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_113 = _this; + + _this = createTrigger ["EmptyDetector", [11154.374, 11190.324]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "ETHS East"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_115 = _this; + + _this = createTrigger ["EmptyDetector", [10489.306, 11469.34]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Fassberg Barracks"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [3,2,300,thisTrigger,['ETHS1','ETHS2','ETHS3','ETHS4'],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_118 = _this; + //end triggers +}; + +#include "custom_markers\cust_markers_mbg_celle2.sqf" +#include "custom_spawns\cust_spawns_mbg_celle2.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Celle static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_namalsk.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_namalsk.sqf new file mode 100755 index 0000000..9a4a762 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_namalsk.sqf @@ -0,0 +1,229 @@ +/* + Namalsk static spawn configuration + + Last updated: 11:11 PM 7/5/2013 + +*/ + +#include "spawn_markers\markers_namalsk.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + _this = createTrigger ["EmptyDetector", [4157.5698, 6636.252]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Seraja Army Base (Markers)"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,100,thisTrigger,['Seraja1','Seraja2','Seraja3','Seraja4','Seraja5'],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_0 = _this; + + _this = createTrigger ["EmptyDetector", [3558.3298, 6664.4048]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Southern Army Base (Markers)"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,0,125,thisTrigger,['SebMine1','SebMine2','SebMine3'],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_2 = _this; + + _this = createTrigger ["EmptyDetector", [3940.0078, 7536.5967]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Norinsk"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_4 = _this; + + _this = createTrigger ["EmptyDetector", [4976.6655, 6619.644, 42.068932]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Object A2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,150,thisTrigger,['ObjectA2_1','ObjectA2_2','ObjectA2_3','ObjectA2_4','ObjectA2_5'],2,3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_6 = _this; + + _this = createTrigger ["EmptyDetector", [4845.8853, 6201.1484, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Brensk Railway Station"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_8 = _this; + + _this = createTrigger ["EmptyDetector", [4081.9597, 9224.0859, 2.600769]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Western Army Checkpoint"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_10 = _this; + + _this = createTrigger ["EmptyDetector", [4690.1934, 8916.7041, 5.2387733]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sebjan Warehouse"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_12 = _this; + + _this = createTrigger ["EmptyDetector", [5781.0708, 9809.7734, -7.6293945e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sebjan dam"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_14 = _this; + + _this = createTrigger ["EmptyDetector", [6308.022, 9307.7139]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sebjan Chemical Factory (Markers)"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,150,thisTrigger,['SebChem1','SebChem2','SebChem3','SebChem4'],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_16 = _this; + + _this = createTrigger ["EmptyDetector", [5807.0181, 8676.9521, 12.870121]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sebjan (Markers)"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,['Seb1','Seb2','Seb3','Seb4','Seb5']] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_18 = _this; + + _this = createTrigger ["EmptyDetector", [7293.3511, 7967.5581, 3.7465744]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Old Hospital"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,150,thisTrigger,[]] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_20 = _this; + + _this = createTrigger ["EmptyDetector", [7694.8877, 7602.1001, 1.2397766e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Tara harbor (Markers)"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,200,thisTrigger,['Harb1','Harb2','Harb3','Harb4','Harb5'],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_22 = _this; + + _this = createTrigger ["EmptyDetector", [7046.0806, 5808.7622]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Old Sawmill"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_26 = _this; + + _this = createTrigger ["EmptyDetector", [5986.1616, 6641.3848, -1.1444092e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Nitija Army Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,100,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_28 = _this; + + _this = createTrigger ["EmptyDetector", [4947.3247, 8158.6709, -3.8146973e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sebjan Mine (Markers)"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,200,thisTrigger,['SebMine1','SebMine2','SebMine3','SebMine4','SebMine5'],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_30 = _this; + + _this = createTrigger ["EmptyDetector", [8199.6846, 10729.502]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Jalovisko"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],0,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_32 = _this; + + _this = createTrigger ["EmptyDetector", [4829.1992, 10839.983, 2.8610229e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Northern Army Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,150,thisTrigger,[],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_38 = _this; + + _this = createTrigger ["EmptyDetector", [4498.3965, 11127.151, -1.2159348e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Lubjansk (Markers)"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,150,thisTrigger,['Lub1','Lub2','Lub3','Lub4','Lub5'],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_40 = _this; + + _this = createTrigger ["EmptyDetector", [4407.7451, 10748.695]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Lubjansk South"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_42 = _this; + + _this = createTrigger ["EmptyDetector", [6784.3296, 11291.731, 5.5010681]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Vorkuta Central"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,0,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_44 = _this; + + _this = createTrigger ["EmptyDetector", [7668.0474, 8760.8672, 12.067543]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Nemsk Factory"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_46 = _this; + + _this = createTrigger ["EmptyDetector", [3173.5461, 7504.5532]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "CrashedC130"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,0,150,thisTrigger,['CrashedC1301','CrashedC1302','CrashedC1303'],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_73 = _this; + + _this = createTrigger ["EmptyDetector", [6943.7725, 11424.083]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Vorkuta North"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,0,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_75 = _this; + + _this = createTrigger ["EmptyDetector", [5777.3901, 10784.223, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Alakit"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_77 = _this; + + _this = createTrigger ["EmptyDetector", [6719.9434, 11113.122, 20.099487]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Vorkuta South"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_80 = _this; + //End Triggers +}; + +#include "custom_markers\cust_markers_namalsk.sqf" +#include "custom_spawns\cust_spawns_namalsk.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +//AI hostility to Bloodsuckers by decreasing their leader's rating (untested). Required because Bloodsuckers will aggro on AI. +_nul = [] spawn { + sleep 120; + _bsLeader = [78.115158,112.9837,1.8671114] nearEntities ["TK_INS_Soldier_EP1",50]; + { + _x addRating -30000; + diag_log "DZAI: Marked bloodsucker leader unit as hostile!"; + } forEach _bsLeader; +}; + +diag_log "Namalsk static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_napf.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_napf.sqf new file mode 100755 index 0000000..dc25190 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_napf.sqf @@ -0,0 +1,98 @@ +/* + Napf static spawn configuration + + + +*/ + +#include "spawn_markers\markers_napf.sqf" //Load manual spawn point definitions file. + +if ((DZAI_maxHeliPatrols > 0) or {(DZAI_maxLandPatrols > 0)}) then { + "DZAI_centerMarker" setMarkerPos [10725.096, 9339.918]; + "DZAI_centerMarker" setMarkerSize [8500, 8500]; +}; + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + if (DZAI_modName == "unleashed") then { + call compile preprocessFileLineNumbers format ["%1\init\world_spawn_configs\world_dayzunleashed.sqf",DZAI_directory]; + } else { + //Generic Napf static spawns begin here + #include "spawn_areas\areas_napf.sqf" //Load spawn area definitions file. + + //marker name, [minimum AI, max additional AI], [markers for manual spawn points] (leave as empty array to use nearby buildings as spawn points), equipType (optional, required if number of AI groups is defined), number of AI groups (optional) + //Auto Generated + ['DZAI_Lenzburg',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Trueb',[2,1],[],0] call DZAI_static_spawn; + ['DZAI_Seltisberg',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Neue_Welt',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Bubendorf',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Huttwil',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Ruchfeld',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_Oberdorf',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Muttenz',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Muenchenstein',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Chatzbach',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Bruderholz',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Freidorf',[2,1],[],0] call DZAI_static_spawn; + ['DZAI_Olten',[1,1],[],0,2] call DZAI_static_spawn; + ['DZAI_Ruemlingen',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Hirsegg',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Lausen',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Unterdorf',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_Luzern',[2,1],[],1,2] call DZAI_static_spawn; + ['DZAI_Emmen',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Wolhusen',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Horw',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Meggen',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Liestal',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Sachseln',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Eggwil',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Pfeffikon',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Signau',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Schangen',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Hasle',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_Worb',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Munsingen',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Ittingen',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Hindelbank',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Homburg',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Sorenberg',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Romoos',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_South_Airstrip',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_Froburg',[2,1],[],2] call DZAI_static_spawn; + ['DZAI_Brienz',[1,1],[],0] call DZAI_static_spawn; + //Manually added + ['DZAI_WorbE',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_WorbN',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_WorbIndustrial',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_MuenchensteinS',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_MuenchensteinE',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_MuttenzN',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_SuhrenfeldMilitary',[2,1],[],3,2] call DZAI_static_spawn; + ['DZAI_SuhrenfeldBarracks',[1,1],[],3] call DZAI_static_spawn; + ['DZAI_TruebN',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Harbour',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Magden',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_LenzburgW',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_LenzburgE',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_LenzburgIndustrial',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_LuzernW',[1,1],[],0,2] call DZAI_static_spawn; + ['DZAI_LuzernS',[1,1],[],0,2] call DZAI_static_spawn; + ['DZAI_Airport',[2,1],[],3] call DZAI_static_spawn; + ['DZAI_AirportE',[2,0],[],2] call DZAI_static_spawn; + ['DZAI_Airbase',[2,1],[],3] call DZAI_static_spawn; + ['DZAI_AirbaseHangars',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_MilanMilitary',[2,0],[],3] call DZAI_static_spawn; + ['DZAI_Nordstern',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_SouthAirbaseBarracks',[2,0],[],3] call DZAI_static_spawn; + ['DZAI_SuhrenfeldHotels',[1,1],[],2] call DZAI_static_spawn; + }; +}; + +#include "custom_markers\cust_markers_napf.sqf" +#include "custom_spawns\cust_spawns_napf.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Napf static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_oring.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_oring.sqf new file mode 100755 index 0000000..d41fc2c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_oring.sqf @@ -0,0 +1,277 @@ +/* + Oring static spawn configuration + + Last updated: 11:57 PM 6/6/2013 + +*/ + +#include "spawn_markers\markers_oring.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + //begin triggers + _this = createTrigger ["EmptyDetector", [2109.7009, 3037.5085, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Trinidad"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_0 = _this; + + _this = createTrigger ["EmptyDetector", [4255.7202, 1848.056, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Harfleur"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_4 = _this; + + _this = createTrigger ["EmptyDetector", [903.17896, 1973.7341, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ferme Dumahis"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_6 = _this; + + _this = createTrigger ["EmptyDetector", [1793.7174, 7077.8032, 3.687088]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Loring"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [3,2,175,thisTrigger,[],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_8 = _this; + + _this = createTrigger ["EmptyDetector", [1615.6993, 7398.9482, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Loring AF"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [3,2,200,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_10 = _this; + + _this = createTrigger ["EmptyDetector", [3322.5818, 7188.7842, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "ZICampoVallone"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_12 = _this; + + _this = createTrigger ["EmptyDetector", [4954.312, 7560.8706]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Honfleur"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_14 = _this; + + _this = createTrigger ["EmptyDetector", [7214.5273, 6882.5146, 3.8146973e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Paradisio"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_18 = _this; + + _this = createTrigger ["EmptyDetector", [7854.2119, 7714.7266, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bigels"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_20 = _this; + + _this = createTrigger ["EmptyDetector", [8095.9414, 6379.8096, 3.399765]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Pandora"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_22 = _this; + + _this = createTrigger ["EmptyDetector", [8456.9492, 6106.2788, 9.6538696]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Pandora E"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,200,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_24 = _this; + + _this = createTrigger ["EmptyDetector", [8456.9492, 4995.2568, 0.080738068]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "SaintGatien"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_28 = _this; + + _this = createTrigger ["EmptyDetector", [9225.7803, 4175.5137, 3.8146973e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Etretat"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_30 = _this; + + _this = createTrigger ["EmptyDetector", [8441.1152, 3486.0835, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Eperlecques"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_32 = _this; + + _this = createTrigger ["EmptyDetector", [7231.4136, 3401.5955]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "DZAI Trigger"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_34 = _this; + + _this = createTrigger ["EmptyDetector", [7826.7637, 2218.7578, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "SaintSauveur"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_36 = _this; + + _this = createTrigger ["EmptyDetector", [9489.3105, 2666.5474, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "CampDeThil"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_38 = _this; + + _this = createTrigger ["EmptyDetector", [6887.0757, 1667.5647, -3.8146973e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Villa Costa"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_40 = _this; + + _this = createTrigger ["EmptyDetector", [6441.8311, 2239.8804, -4.5776367e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Meynac"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_42 = _this; + + _this = createTrigger ["EmptyDetector", [7139.5737, 2077.24]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Houses"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_44 = _this; + + _this = createTrigger ["EmptyDetector", [2780.0024, 2779.5513, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Barns"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_46 = _this; + + _this = createTrigger ["EmptyDetector", [4428.5361, 5605.5215, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ocana"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_48 = _this; + + _this = createTrigger ["EmptyDetector", [4962.626, 5775.061]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Paillote"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_50 = _this; + + _this = createTrigger ["EmptyDetector", [5584.4702, 5275.5249, 3.8146973e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "La Tilleul"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_52 = _this; + + _this = createTrigger ["EmptyDetector", [5710.0488, 4835.0244, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Intrapresa"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_54 = _this; + + _this = createTrigger ["EmptyDetector", [5090.564, 5124.5967]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "FortDesDunes"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_56 = _this; + + _this = createTrigger ["EmptyDetector", [2629.6626, 7045.5703, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ramparts Nord"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_58 = _this; + + _this = createTrigger ["EmptyDetector", [4381.6455, 8948.3672, 8.1376801]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Splendor Villa"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [3,2,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_61 = _this; + + _this = createTrigger ["EmptyDetector", [9458.9238, 9772.5234]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "WeedyardPyratbay"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [3,2,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_63 = _this; + + _this = createTrigger ["EmptyDetector", [1671.5439, 9790.3477, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "CastOld"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_65 = _this; + + _this = createTrigger ["EmptyDetector", [6969.0796, 2697.3589, 2.1821136]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Lumbery"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_67 = _this; + + _this = createTrigger ["EmptyDetector", [6200.1318, 3191.5637, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "061 031"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_70 = _this; + + //end of triggers +}; + +#include "custom_markers\cust_markers_oring" +#include "custom_spawns\cust_spawns_oring" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Oring static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_panthera2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_panthera2.sqf new file mode 100755 index 0000000..7c66dd4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_panthera2.sqf @@ -0,0 +1,397 @@ +/* + Panthera static spawn configuration + + Last updated: 11:57 PM 6/6/2013 + +*/ + +#include "spawn_markers\markers_panthera2.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + //begin triggers + _this = createTrigger ["EmptyDetector", [5914.6289, 900.07263]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Zappado"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_0 = _this; + + _this = createTrigger ["EmptyDetector", [6758.5488, 552.89001]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Cato"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,0,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_2 = _this; + + _this = createTrigger ["EmptyDetector", [6833.3301, 1568.0164, 3.3663206]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "DZAI Trigger"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_6 = _this; + + _this = createTrigger ["EmptyDetector", [7085.292, 1081.9348]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Foxhill"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_8 = _this; + + _this = createTrigger ["EmptyDetector", [6539.8252, 2130.3657]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "FOB Brown"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_10 = _this; + + _this = createTrigger ["EmptyDetector", [4423.5254, 2160.9336]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sela Pri Volcah"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_12 = _this; + + _this = createTrigger ["EmptyDetector", [5357.6982, 2328.0098, 2.3841858e-007]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Klavze-Kneza"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_16 = _this; + + _this = createTrigger ["EmptyDetector", [4589.9326, 2591.6555]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Tolmin"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_18 = _this; + + _this = createTrigger ["EmptyDetector", [3360.4993, 3305.9607]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kobarid-Idrsko-Ladra-Dreznica"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_20 = _this; + + _this = createTrigger ["EmptyDetector", [2577.917, 3409.4309]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "FOD Boriana"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_22 = _this; + + _this = createTrigger ["EmptyDetector", [3076.8096, 4517.7603]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bovec"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_24 = _this; + + _this = createTrigger ["EmptyDetector", [2354.2358, 5206.5747]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sella Nevea"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_26 = _this; + + _this = createTrigger ["EmptyDetector", [3184.2334, 5881.1704]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Cave del Predil"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_28 = _this; + + _this = createTrigger ["EmptyDetector", [3330.5935, 6610.6641]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Tarvisio"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_30 = _this; + + _this = createTrigger ["EmptyDetector", [4339.5234, 6547.2886]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Fusine-Ratece"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_32 = _this; + + _this = createTrigger ["EmptyDetector", [5027.188, 6414.1445]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Podkoren-KranjskaGora"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_34 = _this; + + _this = createTrigger ["EmptyDetector", [6409.5239, 6158.3359, -4.196167e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Belca-Dovje-Mojstrana"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_36 = _this; + + _this = createTrigger ["EmptyDetector", [7382.3384, 5790.9922]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Jesenice"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_38 = _this; + + _this = createTrigger ["EmptyDetector", [8181.6089, 5274.54, 0.00017166138]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "VariousTowns"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_40 = _this; + + _this = createTrigger ["EmptyDetector", [7842.8076, 4903.4058]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bled"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_42 = _this; + + _this = createTrigger ["EmptyDetector", [8433.1504, 4729.8979, 9.3561516]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Radovljica"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_46 = _this; + + _this = createTrigger ["EmptyDetector", [6255.8013, 7280.0347]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Senzatoka"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_48 = _this; + + _this = createTrigger ["EmptyDetector", [6803.1948, 7232.2603]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Pantherian Racing Park"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_51 = _this; + + _this = createTrigger ["EmptyDetector", [5105.6035, 7246.2339]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Hoopsberg"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_53 = _this; + + _this = createTrigger ["EmptyDetector", [4276.8823, 7359.7427]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Arnoldstein"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,200,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_56 = _this; + + _this = createTrigger ["EmptyDetector", [7447.7817, 4569.2896]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "BohBela-Obrne"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_58 = _this; + + _this = createTrigger ["EmptyDetector", [6469.8677, 3828.0728, 7.1597528]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "VariousTowns"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_60 = _this; + + _this = createTrigger ["EmptyDetector", [6486.9561, 4627.1382]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "MrzliStudenec"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_62 = _this; + + _this = createTrigger ["EmptyDetector", [8392.4355, 3147.1743, 5.815485]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Zelezniki"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_64 = _this; + + _this = createTrigger ["EmptyDetector", [8599.7998, 4254.0479]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kamna Gorica"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_66 = _this; + + _this = createTrigger ["EmptyDetector", [7865.2095, 1427.2308]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "New Skooma"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,165,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_68 = _this; + + _this = createTrigger ["EmptyDetector", [7818.9136, 1951.8015]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Smugglers Den"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_70 = _this; + + _this = createTrigger ["EmptyDetector", [5574.4717, 6388.4761]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Gozd Mar."; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_72 = _this; + + _this = createTrigger ["EmptyDetector", [8456.0684, 2174.2231]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Unnamed Military"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_74 = _this; + + _this = createTrigger ["EmptyDetector", [2350.344, 4189.5439]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Zaga-Srpenica"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_77 = _this; + + _this = createTrigger ["EmptyDetector", [6914.355, 4137.5229]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Koprivnik-Gorjuse-Nomenj"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_80 = _this; + + _this = createTrigger ["EmptyDetector", [7196.7983, 3137.9199]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sorica"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_82 = _this; + + _this = createTrigger ["EmptyDetector", [7222.1123, 1481.817, 4.7683716e-007]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Rockburn"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_84 = _this; + + _this = createTrigger ["EmptyDetector", [6918.874, 782.67761, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Asaband Army Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_87 = _this; + + _this = createTrigger ["EmptyDetector", [4807.9546, 1799.9658]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Taff Grove"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_90 = _this; + + _this = createTrigger ["EmptyDetector", [4782.7339, 1617.6208]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ramon's Villa"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_93 = _this; + + _this = createTrigger ["EmptyDetector", [4987.9629, 1665.6824]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ramon's Villa 2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_96 = _this; + + _this = createTrigger ["EmptyDetector", [5837.4697, 2345.4644]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Koritnica"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_99 = _this; + + _this = createTrigger ["EmptyDetector", [4828.8105, 2199.0718]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Modrej-MostnaSoci-Baca"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_102 = _this; + + _this = createTrigger ["EmptyDetector", [3146.4441, 6214.7422, 0.45965576]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Riofreddo"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_108 = _this; + + _this = createTrigger ["EmptyDetector", [4768.561, 6838.5864, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Podkoren-KranjskaGora"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_114 = _this; + + _this = createTrigger ["EmptyDetector", [8608.5, 4952.2651]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Begunje"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_118 = _this; + + //end of triggers +}; + +#include "custom_markers\cust_markers_panthera2.sqf" +#include "custom_spawns\cust_spawns_panthera2.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Panthera static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_sara.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_sara.sqf new file mode 100755 index 0000000..48c76b1 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_sara.sqf @@ -0,0 +1,541 @@ +/* + Sahrani static spawn configuration + + Last updated: 11:57 PM 6/6/2013 + +*/ + +#include "spawn_markers\markers_sara.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + //begin triggers + _this = createTrigger ["EmptyDetector", [9567.4844, 9819.4053, 0.00024414063]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Paraiso Military Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_0 = _this; + + _this = createTrigger ["EmptyDetector", [9836.3662, 9964.916, 0.080734253]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Paraiso Military Base 2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_2 = _this; + + _this = createTrigger ["EmptyDetector", [10556.573, 9628.2139]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Paraiso North"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,175,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_5 = _this; + + _this = createTrigger ["EmptyDetector", [10657.162, 9098.8779, 0.036804199]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Paraiso South"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,200,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_8 = _this; + + _this = createTrigger ["EmptyDetector", [10292.688, 9383.8066]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Paraiso West"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,175,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_11 = _this; + + _this = createTrigger ["EmptyDetector", [10748.605, 9488.3633, 6.7463531]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Paraiso East"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,175,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_15 = _this; + + _this = createTrigger ["EmptyDetector", [11562.466, 9200.8262]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Paraiso South"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [0,1,150,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_18 = _this; + + _this = createTrigger ["EmptyDetector", [11186.234, 8862.3135]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bonanza"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [0,1,150,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_20 = _this; + + _this = createTrigger ["EmptyDetector", [10151.598, 8410.0957, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Pesto"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [0,1,125,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_23 = _this; + + _this = createTrigger ["EmptyDetector", [9784.5107, 8696.3291, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Yoro"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [0,1,125,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_26 = _this; + + _this = createTrigger ["EmptyDetector", [9157.2334, 8319.3779, 0.036804199]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Somato"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,175,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_29 = _this; + + _this = createTrigger ["EmptyDetector", [8217.6494, 9031.8418]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Chantico"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,200,thisTrigger,[],0] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_31 = _this; + + _this = createTrigger ["EmptyDetector", [8065.3569, 9300.1055, 6.7385035]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Balmopan"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,2,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_34 = _this; + + _this = createTrigger ["EmptyDetector", [8308.2803, 9548.1729, 4.2521825]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Playa de Palomas"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [0,2,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_37 = _this; + + _this = createTrigger ["EmptyDetector", [7423.0586, 8711.1533, 4.7683716e-007]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Cedras"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [0,1,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_40 = _this; + + _this = createTrigger ["EmptyDetector", [8884.1748, 7772.5942]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Gulan"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [0,2,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_43 = _this; + + _this = createTrigger ["EmptyDetector", [8134.5352, 7818.9639, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Gulan West Military"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_46 = _this; + + _this = createTrigger ["EmptyDetector", [6885.5239, 8090.2144]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Estrella"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [0,1,150,thisTrigger,[],0] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_49 = _this; + + _this = createTrigger ["EmptyDetector", [12352.392, 7259.4155]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "OretgoN"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,175,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_52 = _this; + + _this = createTrigger ["EmptyDetector", [12267.043, 7086.6909, 6.721674]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ortego W"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,175,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_56 = _this; + + _this = createTrigger ["EmptyDetector", [12499.284, 7094.917, 15.620382]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ortego E"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,175,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_58 = _this; + + _this = createTrigger ["EmptyDetector", [12392.56, 8487.3535, 3.5483532]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "OretgoN"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,125,thisTrigger,[],2] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_61 = _this; + + _this = createTrigger ["EmptyDetector", [13236.584, 6909.2681, 0.10199928]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Geraldo"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [0,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_64 = _this; + + _this = createTrigger ["EmptyDetector", [10292.604, 7294.0884, 17.75]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Vallejo"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,125,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_67 = _this; + + _this = createTrigger ["EmptyDetector", [7660.1509, 6418.7959, -4.7683716e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Arcadia"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,185,thisTrigger,[],1] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_70 = _this; + + _this = createTrigger ["EmptyDetector", [9348.5732, 5948.7441, 8.5356789]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Cayo"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,185,thisTrigger,[],1] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_73 = _this; + + _this = createTrigger ["EmptyDetector", [9305.9141, 5226.0352]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Tiberia"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,130,thisTrigger,[],0] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_76 = _this; + + _this = createTrigger ["EmptyDetector", [10764.443, 4986.6172, 0.10199928]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Iguana"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,130,thisTrigger,[],0] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_79 = _this; + + _this = createTrigger ["EmptyDetector", [10583.896, 4708.0063]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Iguana S"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [0,1,125,thisTrigger,[],0] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_82 = _this; + + _this = createTrigger ["EmptyDetector", [11282.022, 5287.4814]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Parato"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [0,1,130,thisTrigger,[],0] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_85 = _this; + + _this = createTrigger ["EmptyDetector", [11333.451, 5865.9644, 1.9073486e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Dolores S"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_88 = _this; + + _this = createTrigger ["EmptyDetector", [11597.621, 5836.9849]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Dolores SE"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_91 = _this; + + _this = createTrigger ["EmptyDetector", [11515.357, 6209.0894, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Dolores N"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_94 = _this; + + _this = createTrigger ["EmptyDetector", [11237.285, 6124.4678, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Dolores W"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_97 = _this; + + _this = createTrigger ["EmptyDetector", [12968.272, 8848.2959, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,2,150,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_103 = _this; + + _this = createTrigger ["EmptyDetector", [13305.436, 8848.2959, 7.512887]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,175,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_105 = _this; + + _this = createTrigger ["EmptyDetector", [13605.523, 9058.1143, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,175,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_107 = _this; + + _this = createTrigger ["EmptyDetector", [14299.234, 9441.1152, 0.00024795532]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,150,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_109 = _this; + + _this = createTrigger ["EmptyDetector", [14461.982, 8517.3066, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,125,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_111 = _this; + + _this = createTrigger ["EmptyDetector", [16535.064, 9339.3643]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,150,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_113 = _this; + + _this = createTrigger ["EmptyDetector", [14476.567, 10791.867, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,125,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_115 = _this; + + _this = createTrigger ["EmptyDetector", [17759.131, 12396.316, 7.6293945e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,125,thisTrigger,[],2] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_117 = _this; + + _this = createTrigger ["EmptyDetector", [14118.253, 12510.203]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,2,150,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_119 = _this; + + _this = createTrigger ["EmptyDetector", [13194.992, 11317.268, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,125,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_121 = _this; + + _this = createTrigger ["EmptyDetector", [17289.807, 14199.624]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,150,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_123 = _this; + + _this = createTrigger ["EmptyDetector", [19173.025, 13964.805]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_125 = _this; + + _this = createTrigger ["EmptyDetector", [11955.264, 15329.761]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Pesadas"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,2,125,thisTrigger,[],3] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_127 = _this; + + _this = createTrigger ["EmptyDetector", [12550.743, 14988.896]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,200,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_129 = _this; + + _this = createTrigger ["EmptyDetector", [7736.0464, 15805.851, 0.00024795532]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,125,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_131 = _this; + + _this = createTrigger ["EmptyDetector", [8166.4893, 17013.783]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,90,thisTrigger,[],2] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_133 = _this; + + _this = createTrigger ["EmptyDetector", [12160.592, 17656.854]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,125,thisTrigger,[],2] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_135 = _this; + + _this = createTrigger ["EmptyDetector", [15399.514, 13750.813, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,125,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_137 = _this; + + _this = createTrigger ["EmptyDetector", [4896.603, 15654.142, -3.0517578e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,125,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_139 = _this; + + _this = createTrigger ["EmptyDetector", [4469.1465, 15512.637, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,125,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_141 = _this; + + _this = createTrigger ["EmptyDetector", [14214.354, 11860.975, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,125,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_143 = _this; + + _this = createTrigger ["EmptyDetector", [13774.11, 11517.231, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,125,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_145 = _this; + + _this = createTrigger ["EmptyDetector", [17560.428, 9583.8975, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,125,thisTrigger,[],2] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_147 = _this; + + _this = createTrigger ["EmptyDetector", [18941.666, 13876.968, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_149 = _this; + + _this = createTrigger ["EmptyDetector", [19156.404, 13614.881, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_152 = _this; + + _this = createTrigger ["EmptyDetector", [18823.875, 13691.387, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,1,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_154 = _this; + + _this = createTrigger ["EmptyDetector", [12461.436, 13390.605, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,150,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_157 = _this; + + _this = createTrigger ["EmptyDetector", [11747.727, 14414.795]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,2,175,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_160 = _this; + + _this = createTrigger ["EmptyDetector", [14377.003, 12504.138]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [2,2,150,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_163 = _this; + + _this = createTrigger ["EmptyDetector", [14022.031, 12680.978]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Default"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,2,150,thisTrigger,[]] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_166 = _this; + + _this = createTrigger ["EmptyDetector", [2886.6123, 2875.6104, -3.8146973e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Rahmadi"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "0 = [1,1,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_169 = _this; + + //end of triggers +}; + +#include "custom_markers\cust_markers_sara.sqf" +#include "custom_spawns\cust_spawns_sara.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Sahrani static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_sauerland.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_sauerland.sqf new file mode 100755 index 0000000..508f09e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_sauerland.sqf @@ -0,0 +1,95 @@ +/* + Sauerland static spawn configuration + + Last updated: 9:07 PM 1/23/2014 + +*/ + +#include "spawn_markers\markers_sauerland.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + #include "spawn_areas\areas_sauerland.sqf" //Load spawn area definitions file. + //marker name, [minimum AI, max additional AI], [markers for manual spawn points] (leave as empty array to use nearby buildings as spawn points), equipType (optional, required if number of AI groups is defined), number of AI groups (optional) + //AUTO GENERATED + ['DZAI_Wenden_Airfield',[2,1],[],2] call DZAI_static_spawn; + ['DZAI_Old_Airfield',[2,1],[],3] call DZAI_static_spawn; + ['DZAI_Fernsehturm',[0,2],[],3] call DZAI_static_spawn; + ['DZAI_Heidermuehle',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Arnsberg',[2,0],[],1,2] call DZAI_static_spawn; + ['DZAI_Suederbarup',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Klein_Sodenau',[0,1],[],1] call DZAI_static_spawn; + ['DZAI_Reine',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Heggen',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_Berghausen',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_Moosbach',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_Strelingen',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_Garbow',[2,1],[],1,2] call DZAI_static_spawn; + ['DZAI_Ihrhofen',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Ihren',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Berghoven',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Grossenfelde',[1,2],[],0] call DZAI_static_spawn; + ['DZAI_Oberdorf',[1,1],[],1,2] call DZAI_static_spawn; + ['DZAI_Oeventrop',[2,1],[],1,2] call DZAI_static_spawn; + ['DZAI_Schmallenberg',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_Schueren',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_Hoeinghausen',[0,2],[],0] call DZAI_static_spawn; + ['DZAI_Fahrenbrecht',[2,1],[],2] call DZAI_static_spawn; + ['DZAI_Meschede',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Uhlenbusch',[2,0],[],1] call DZAI_static_spawn; + ['DZAI_Niederbergbach',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Rhaude',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_Osterholz',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Remblinghausen',[1,1],[],0,2] call DZAI_static_spawn; + ['DZAI_Buersfeld',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Seedorf',[1,1],[],0,2] call DZAI_static_spawn; + ['DZAI_Niedersalvey',[1,1],[],1] call DZAI_static_spawn; + //MANUAL GENERATED + ['DZAI_Old_Airfield2',[2,1],[],2] call DZAI_static_spawn; + ['DZAI_OldAirfieldTown',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_OldAirfieldVillage',[0,1],[],1] call DZAI_static_spawn; + ['DZAI_Fahrenbrecht2',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Fahrenbrecht3',[2,0],[],1] call DZAI_static_spawn; + ['DZAI_Fahrenbrecht4',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Fahrenbrecht5',[2,0],[],1] call DZAI_static_spawn; + ['DZAI_Fahrenbrecht6',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Niedersalvey2',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Uhlenbusch2',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Uhlenbusch3',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_WestMilBase',[2,1],[],3] call DZAI_static_spawn; + ['DZAI_Loc332',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_Arnsberg2',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Nordern',[2,0],[],1] call DZAI_static_spawn; + ['DZAI_NordernBarracks',[2,0],[],3] call DZAI_static_spawn; + ['DZAI_Nordern2',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Loc80',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_RiverRailway',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_NorthMilBase',[2,1],[],3,2] call DZAI_static_spawn; + ['DZAI_TownWithChurch',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_WendenBarracks',[2,0],[],3] call DZAI_static_spawn; + ['DZAI_Meschede1',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Meschede2',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Meschede3',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Meschede4',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Meschede5',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Meschede6',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Meschede7',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Meschede8',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Meschede9',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Meschede10',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Meschede11',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Meschede12',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_Meschede13',[2,1],[],1] call DZAI_static_spawn; + ['DZAI_NorthMilBase2',[2,1],[],3] call DZAI_static_spawn; + ['DZAI_Reine2',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_SEMilBase',[2,0],[],2] call DZAI_static_spawn; + ['DZAI_GarbowMilBase',[2,1],[],3] call DZAI_static_spawn; + ['DZAI_GarbowIndustrial',[1,1],[],0] call DZAI_static_spawn; +}; + +#include "custom_markers\cust_markers_sauerland.sqf" +#include "custom_spawns\cust_spawns_sauerland.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Sauerland static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_smd_sahrani_a2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_smd_sahrani_a2.sqf new file mode 100755 index 0000000..c047b90 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_smd_sahrani_a2.sqf @@ -0,0 +1,10 @@ +/* + Sahrani static spawn configuration + + Last updated: 11:57 PM 6/6/2013 + +*/ + +#include "world_sara.sqf" + +//This file is used only for redirection purposes. Refer to world_sara.sqf to edit Sahrani spawn configs. \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_takistan.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_takistan.sqf new file mode 100755 index 0000000..b5bfe77 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_takistan.sqf @@ -0,0 +1,486 @@ +/* + Takistan static spawn configuration + + Last updated: 11:58 PM 6/6/2013 + +*/ + +#include "spawn_markers\markers_takistan.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { +//begin triggers + + _this = createTrigger ["EmptyDetector", [1999.8049, 333.89359, 0.68896484]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Landay"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_0 = _this; + + _this = createTrigger ["EmptyDetector", [3599.5557, 1262.9868, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ahmaday"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_2 = _this; + + _this = createTrigger ["EmptyDetector", [4440.0664, 667.60712]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "ChakChak"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_4 = _this; + + _this = createTrigger ["EmptyDetector", [3752.6982, 4460.8936]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sakhe"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_6 = _this; + + _this = createTrigger ["EmptyDetector", [3284.1165, 3675.4705]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sakhe2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_8 = _this; + + _this = createTrigger ["EmptyDetector", [2565.6787, 5079.543]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Jilavur"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,150,thisTrigger,[],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_10 = _this; + + _this = createTrigger ["EmptyDetector", [1538.7018, 5681.293, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Khushab"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_12 = _this; + + _this = createTrigger ["EmptyDetector", [1475.2213, 3576.6296, 5.2146301]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Shukurkalay"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_14 = _this; + + _this = createTrigger ["EmptyDetector", [548.4129, 2759.2986]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Chaman"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_16 = _this; + + _this = createTrigger ["EmptyDetector", [1009.7563, 3189.5881, 1.3997345]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Chaman2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_18 = _this; + + _this = createTrigger ["EmptyDetector", [2005.9639, 7654.5181]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Mulladost"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_20 = _this; + + _this = createTrigger ["EmptyDetector", [3662.0393, 8584.4795]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Gospandi"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_22 = _this; + + _this = createTrigger ["EmptyDetector", [4497.4453, 9376.4346, 4.9902496]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Lalezar"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_26 = _this; + + _this = createTrigger ["EmptyDetector", [3025.105, 9925.2148, -3.8146973e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Nagara"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_28 = _this; + + _this = createTrigger ["EmptyDetector", [4191.394, 10836.333, 1.1444092e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Nagara OilfieldEast"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_30 = _this; + + _this = createTrigger ["EmptyDetector", [4165.9824, 11759.761, 3.8146973e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Shamali"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_32 = _this; + + _this = createTrigger ["EmptyDetector", [5799.0752, 11206.194, 7.6293945e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Rasman Military1"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [3,2,250,thisTrigger,[],3,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_34 = _this; + + _this = createTrigger ["EmptyDetector", [6288.9844, 11246.689, -7.6293945e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Rasman"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,250,thisTrigger,[],2,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_36 = _this; + + _this = createTrigger ["EmptyDetector", [6045.0684, 11653.766, 7.6293945e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Rasman Military2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],3,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_38 = _this; + + _this = createTrigger ["EmptyDetector", [6842.2051, 12252.953, 1.1444092e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Safid Ab"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_40 = _this; + + _this = createTrigger ["EmptyDetector", [6037.6655, 10469.76, 7.6293945e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Rasman South"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_42 = _this; + + _this = createTrigger ["EmptyDetector", [5741.624, 9899.874, 6.8212051]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Rasman-Bastam"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_44 = _this; + + _this = createTrigger ["EmptyDetector", [5602.1592, 9325.6768, 7.6293945e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bastam North"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_46 = _this; + + _this = createTrigger ["EmptyDetector", [5640.9932, 8909.7793, -1.5258789e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bastam"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,150,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_48 = _this; + + _this = createTrigger ["EmptyDetector", [6788.7056, 8918.7549, -7.6293945e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bastam East"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_50 = _this; + + _this = createTrigger ["EmptyDetector", [9167.0332, 6688.6724]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Garmarud"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_54 = _this; + + _this = createTrigger ["EmptyDetector", [10846.38, 6323.3657]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Garmsar"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_56 = _this; + + _this = createTrigger ["EmptyDetector", [10432.103, 6378.3984]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "GarmsarMilitary"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [3,2,175,thisTrigger,[],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_60 = _this; + + _this = createTrigger ["EmptyDetector", [11830.018, 2589.0579, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Hazar Bagh"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_62 = _this; + + _this = createTrigger ["EmptyDetector", [10974.319, 2452.8206]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Chardarakht East"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_64 = _this; + + _this = createTrigger ["EmptyDetector", [10201.649, 2379.0244, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Chardarakht West"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_66 = _this; + + _this = createTrigger ["EmptyDetector", [9237.1113, 1841.6443, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Jaza East"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_68 = _this; + + _this = createTrigger ["EmptyDetector", [8752.9492, 1864.3501, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Jaza West"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_70 = _this; + + _this = createTrigger ["EmptyDetector", [8464.0469, 2413.1255]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Loy Manara"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_72 = _this; + + _this = createTrigger ["EmptyDetector", [8215.832, 2114.9724]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Airfield"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [3,2,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_74 = _this; + + _this = createTrigger ["EmptyDetector", [7556.0806, 1802.1805, -3.0517578e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Airfield East"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_76 = _this; + + _this = createTrigger ["EmptyDetector", [7095.9995, 1070.2653]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Loy Manara Oilfield Town"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,2,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_78 = _this; + + _this = createTrigger ["EmptyDetector", [6506.8423, 2019.0903]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sultansafe"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_80 = _this; + + _this = createTrigger ["EmptyDetector", [6079.6367, 1155.9662]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Huzrutimam"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_82 = _this; + + _this = createTrigger ["EmptyDetector", [8919.7119, 5345.1431, 3.7972412]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Timurkalay"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_84 = _this; + + _this = createTrigger ["EmptyDetector", [5964.4966, 5669.4463]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Anar"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_86 = _this; + + _this = createTrigger ["EmptyDetector", [6816.8599, 6055.4316]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Anar East"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_88 = _this; + + _this = createTrigger ["EmptyDetector", [5258.0444, 6120.1489]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Feruz Abad"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,125,thisTrigger,[],3,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_90 = _this; + + _this = createTrigger ["EmptyDetector", [5325.3687, 4722.5317]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kakaru"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_92 = _this; + + _this = createTrigger ["EmptyDetector", [1810.3278, 11795.336, 0.42770386]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Nur"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,250,thisTrigger,[],2,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_94 = _this; + + _this = createTrigger ["EmptyDetector", [9853.1455, 11435.367, 7.6293945e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Zavarak"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_96 = _this; + + _this = createTrigger ["EmptyDetector", [10476.996, 11003.627]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Zavarak2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_98 = _this; + + _this = createTrigger ["EmptyDetector", [12258.796, 11098.416, 1.5258789e-005]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "KarachinarNorth"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_100 = _this; + + _this = createTrigger ["EmptyDetector", [12312.442, 10419.859]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Karachinar"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_102 = _this; + + _this = createTrigger ["EmptyDetector", [11510.062, 8340.0977]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ravanay"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_104 = _this; + + _this = createTrigger ["EmptyDetector", [8016.6895, 2954.416]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Airfield North Town"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_106 = _this; + + _this = createTrigger ["EmptyDetector", [8283.3564, 7785.1221, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Imarat"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_109 = _this; + + _this = createTrigger ["EmptyDetector", [7038.3872, 11500.55, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Rasman East"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_112 = _this; + + _this = createTrigger ["EmptyDetector", [3246.991, 8140.3496, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Gospandi2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_115 = _this; + + _this = createTrigger ["EmptyDetector", [5105.1289, 5353.0151]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Daryache"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_118 = _this; + + _this = createTrigger ["EmptyDetector", [5976.4209, 7275.0044, 7.6293945e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Falar"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_123 = _this; + + _this = createTrigger ["EmptyDetector", [12202.271, 9978.0322, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Karachinar SW"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_126 = _this; + + _this = createTrigger ["EmptyDetector", [12538.564, 9980.1094, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Karachinar SE"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_128 = _this; +}; +//end of triggers + + +#include "custom_markers\cust_markers_takistan.sqf" +#include "custom_spawns\cust_spawns_takistan.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Takistan static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_tavi.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_tavi.sqf new file mode 100755 index 0000000..ddf7ca1 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_tavi.sqf @@ -0,0 +1,96 @@ +/* + Taviana static spawn configuration + + Last updated: 11:58 PM 6/6/2013 + +*/ + +#include "spawn_markers\markers_tavi.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + #include "spawn_areas\areas_taviana.sqf" //Load spawn area definitions file. + ['DZAI_Blato',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_Seven',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_Marina',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_Topolka',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Branibor',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Branibor2',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Branibor3',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Branibor4',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_BashkaLukaMilBase',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_Kryvoe',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Krasnoz1',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Krasnoz2',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_KrasnozAirport',[2,0],[],2] call DZAI_static_spawn; + ['DZAI_KrasnozMilBase',[2,1],[],2] call DZAI_static_spawn; + ['DZAI_Vedich',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_Chernovar',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Bilgrad',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Bilgrad2',[0,1],[],1] call DZAI_static_spawn; + ['DZAI_Shtangrad',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_ShtangradMilBase',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_Mitrovice',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Mitrovice2',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Komarovo',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_KomarovoMilBase',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_ZhutaMilBase',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_StarePoleMilBase',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_SwampMilBase',[2,1],[],3] call DZAI_static_spawn; + ['DZAI_DubovoAirport',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_DubovoAirport2',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_Dubovo',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_StariSad',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_Byelov',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Kopech',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_Boye',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Postoyna',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Molotovsk',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Martin',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_MillMilBase',[2,1],[],2] call DZAI_static_spawn; + ['DZAI_Gorka',[0,1],[],1] call DZAI_static_spawn; + ['DZAI_SevastopolMilBase',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_Sevastopol',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Sevastopol2',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Dalnogorsk',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_DalnogorskMilBase',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_Ekaterinburg',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Ekaterinburg2',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Yaroslav',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_YaroslavMilBase',[2,1],[],2] call DZAI_static_spawn; + ['DZAI_JaroslavskiAirport',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_Lyubol',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Etanovsk',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Etanovsk2',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Vishkov',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_StariGrad',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Dubravka',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Lyepestok',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Zelenogorod',[2,0],[],2] call DZAI_static_spawn; + ['DZAI_Bori',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Nina',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_NinaMilBae',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_Kustik',[0,1],[],1] call DZAI_static_spawn; + ['DZAI_ChrveniGradok',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_VinogradFactory',[1,0],[],1] call DZAI_static_spawn; + ['DZAI_Doriyanov',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Solibor',[1,1],[],2] call DZAI_static_spawn; + ['DZAI_Prilep',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_NoviBor',[0,1],[],0] call DZAI_static_spawn; + ['DZAI_SabinaCenter',[1,1],[],0] call DZAI_static_spawn; + ['DZAI_Uyezd',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Podgorica',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Sabina',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Dyelnica',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Slovany',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Slovany2',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_Dyelnica2',[1,1],[],1] call DZAI_static_spawn; + ['DZAI_NekhayMilSpecial',[1,1],[],3] call DZAI_static_spawn; +}; + +#include "custom_markers\cust_markers_tavi.sqf" +#include "custom_spawns\cust_spawns_tavi.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Taviana static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_tavi_old.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_tavi_old.sqf new file mode 100755 index 0000000..ad17e06 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_tavi_old.sqf @@ -0,0 +1,635 @@ +/* + Taviana static spawn configuration + + Last updated: 11:58 PM 6/6/2013 + +*/ + +#include "spawn_markers\markers_tavi.sqf" //Load manual spawn point definitions file. + +if ((DZAI_maxHeliPatrols > 0) or {(DZAI_maxLandPatrols > 0)}) then { + "DZAI_centerMarker" setMarkerPos [10887.825, 11084.657, 1.5322094]; + "DZAI_centerMarker" setMarkerSize [8500, 8500]; +}; + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + //begin triggers + + _this = createTrigger ["EmptyDetector", [11734.696, 781.97327, 6.7572432]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Blato"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_0 = _this; + + _this = createTrigger ["EmptyDetector", [11751.494, 1381.3889, 2.0023861]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Vodice"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_2 = _this; + + _this = createTrigger ["EmptyDetector", [11014.68, 755.75409, 1.0374718]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Seven"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,250,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_4 = _this; + + _this = createTrigger ["EmptyDetector", [10035.064, 1392.801]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Marina"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_6 = _this; + + _this = createTrigger ["EmptyDetector", [8934.3516, 2353.9155]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Topolka"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_8 = _this; + + _this = createTrigger ["EmptyDetector", [8284.0742, 3034.5012, 4.7683716e-006]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Zhabinka"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_10 = _this; + + _this = createTrigger ["EmptyDetector", [7584.9932, 4550.4028]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Branibor1"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,275,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_12 = _this; + + _this = createTrigger ["EmptyDetector", [9482.4277, 4466.2095]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "DZAI Trigger"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,125,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_16 = _this; + + _this = createTrigger ["EmptyDetector", [9207.54, 5346.5391]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kryvoe"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_18 = _this; + + _this = createTrigger ["EmptyDetector", [3872.2354, 7168.2588, 3.733963]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Mitrovice"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,275,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_20 = _this; + + _this = createTrigger ["EmptyDetector", [3412.3313, 7647.2749]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Shtangrad"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_22 = _this; + + _this = createTrigger ["EmptyDetector", [5515.6328, 8710.6641]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bilgrad Na Moru"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,275,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_24 = _this; + + _this = createTrigger ["EmptyDetector", [5870.9624, 9862.3135, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Chernovar"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,275,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_26 = _this; + + _this = createTrigger ["EmptyDetector", [6720.0957, 9862.3135, 13.534454]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Vedich"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_28 = _this; + + _this = createTrigger ["EmptyDetector", [7766.8154, 9092.8164, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "DZAI Trigger"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_30 = _this; + + _this = createTrigger ["EmptyDetector", [7567.3975, 7984.5015]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Krasnonamensk Airport"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,250,thisTrigger,[],2,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_32 = _this; + + _this = createTrigger ["EmptyDetector", [8996.4238, 8179.5488, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Krasnoznamensk"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,225,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_34 = _this; + + _this = createTrigger ["EmptyDetector", [9318.1143, 7923.0483]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Krasnoznamensk"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,225,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_36 = _this; + + _this = createTrigger ["EmptyDetector", [7966.0332, 6699.373, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Novi Dor"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_38 = _this; + + _this = createTrigger ["EmptyDetector", [10553.928, 6644.4155]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Komarovo"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,250,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_40 = _this; + + _this = createTrigger ["EmptyDetector", [13353.063, 8663.6504]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Chertova Styena"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,125,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_42 = _this; + + _this = createTrigger ["EmptyDetector", [15166.025, 7882.5688, 0.0070037842]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Boye"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_44 = _this; + + _this = createTrigger ["EmptyDetector", [15558.876, 8494.04, 0.0070037842]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Postoyna"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_46 = _this; + + _this = createTrigger ["EmptyDetector", [16540.574, 8242.8887, 0.0070037842]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kopech"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_48 = _this; + + _this = createTrigger ["EmptyDetector", [17309.504, 7487.4419, 0.0070037842]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Byelov"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,225,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_50 = _this; + + _this = createTrigger ["EmptyDetector", [16243.915, 7409.8955, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Krushevich"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_52 = _this; + + _this = createTrigger ["EmptyDetector", [17607.768, 6319.5176, 3.035965]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Stari Sad"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_54 = _this; + + _this = createTrigger ["EmptyDetector", [16785.719, 6279.2632]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Stare Pole Military Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_56 = _this; + + _this = createTrigger ["EmptyDetector", [17178.059, 5636.2168, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Nizhina Military Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_58 = _this; + + _this = createTrigger ["EmptyDetector", [15411.401, 9192.4111]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Slovany"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_60 = _this; + + _this = createTrigger ["EmptyDetector", [15581.011, 9501.9443, 12.227304]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Dyelnica"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_62 = _this; + + _this = createTrigger ["EmptyDetector", [15041.86, 9504.9785]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sabina"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_64 = _this; + + _this = createTrigger ["EmptyDetector", [14699.001, 9733.9551]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Podgorica"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_66 = _this; + + _this = createTrigger ["EmptyDetector", [14565.152, 10315.566]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sabina NW"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_68 = _this; + + _this = createTrigger ["EmptyDetector", [15288.469, 10002.771, 0.36575985]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Uyezd"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_70 = _this; + + _this = createTrigger ["EmptyDetector", [16553.207, 9717.3398, 3.4304581]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Swamp"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_72 = _this; + + _this = createTrigger ["EmptyDetector", [16682.039, 10491.062]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Airport Dubovo"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_74 = _this; + + _this = createTrigger ["EmptyDetector", [16264.657, 10039.261, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Swamp Military Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_76 = _this; + + _this = createTrigger ["EmptyDetector", [16299.946, 10543.948, 6.0764122]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Dubovo Hotel"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_78 = _this; + + _this = createTrigger ["EmptyDetector", [14384.788, 11321.178]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Novy Bor"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_80 = _this; + + _this = createTrigger ["EmptyDetector", [14022.118, 12230.344]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Solibor"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_82 = _this; + + _this = createTrigger ["EmptyDetector", [12669.788, 11850.409]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Etanovsk"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_84 = _this; + + _this = createTrigger ["EmptyDetector", [12647.921, 12185.382]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Etanovsk N"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_86 = _this; + + _this = createTrigger ["EmptyDetector", [12489.873, 13687.467]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Doriyanov"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_88 = _this; + + _this = createTrigger ["EmptyDetector", [13687.382, 13561.73]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Vinograd"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_90 = _this; + + _this = createTrigger ["EmptyDetector", [12782.429, 14425.008]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Chrveni Gradok"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_92 = _this; + + _this = createTrigger ["EmptyDetector", [12551.948, 15040.908]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Nina"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_94 = _this; + + _this = createTrigger ["EmptyDetector", [12973.898, 15009.991]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kustik"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_96 = _this; + + _this = createTrigger ["EmptyDetector", [12257.277, 15375.631]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Zelenogorod"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_98 = _this; + + _this = createTrigger ["EmptyDetector", [11665.791, 14927.813]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Bori"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_100 = _this; + + _this = createTrigger ["EmptyDetector", [11286.337, 15285.716, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Stari Grad"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_102 = _this; + + _this = createTrigger ["EmptyDetector", [11741.102, 15547.986]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Dubravka"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],2,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_104 = _this; + + _this = createTrigger ["EmptyDetector", [11267.508, 15808.808]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Vishkov"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_106 = _this; + + _this = createTrigger ["EmptyDetector", [10442.477, 16961.795, 1.7702827]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Krakov"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_108 = _this; + + _this = createTrigger ["EmptyDetector", [10137.112, 19032.467]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Yaroslav"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,250,thisTrigger,[],2,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_110 = _this; + + _this = createTrigger ["EmptyDetector", [10958.767, 18733.195]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Ekaterinburg"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_112 = _this; + + _this = createTrigger ["EmptyDetector", [8858.2344, 19440.977, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kameni"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_114 = _this; + + _this = createTrigger ["EmptyDetector", [8137.5273, 21314.248, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Helfenburg"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_116 = _this; + + _this = createTrigger ["EmptyDetector", [14682.983, 18566.318, 5.151721]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Dalnogorsk Docks"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_120 = _this; + + _this = createTrigger ["EmptyDetector", [15013.731, 18175.184]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Dalnogorsk"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_122 = _this; + + _this = createTrigger ["EmptyDetector", [15460.476, 16249.696, 0.0069999695]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sevastopol"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_124 = _this; + + _this = createTrigger ["EmptyDetector", [15128.147, 14856.958, 0.10200119]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Gorka"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_126 = _this; + + _this = createTrigger ["EmptyDetector", [15057.672, 15907.486]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Sevastopol Mil Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_128 = _this; + + _this = createTrigger ["EmptyDetector", [16450.443, 14297.641, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Martin Mil Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_130 = _this; + + _this = createTrigger ["EmptyDetector", [16848.723, 14094.778, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Padynya"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_132 = _this; + + _this = createTrigger ["EmptyDetector", [16173.891, 13632.278]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Martin"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_134 = _this; + + _this = createTrigger ["EmptyDetector", [15601.142, 13334.228]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Church of St Ivan"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_136 = _this; + + _this = createTrigger ["EmptyDetector", [16876.166, 12693.863, 0.071762085]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Molotovsk"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_138 = _this; + + _this = createTrigger ["EmptyDetector", [17310.246, 13042.589]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Molotovski Zlaiv"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,150,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_140 = _this; + + _this = createTrigger ["EmptyDetector", [16260.256, 11591.832, 0.42528534]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "DZAI Trigger"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,200,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_142 = _this; + + _this = createTrigger ["EmptyDetector", [8186.0859, 4996.0801]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Treshnyovo"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_144 = _this; + + _this = createTrigger ["EmptyDetector", [8496.291, 5617.8115, 9.3921585]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Polyanka"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_147 = _this; + + _this = createTrigger ["EmptyDetector", [10257.061, 18503.709]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Jaroslavski Airport"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,250,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_150 = _this; + + _this = createTrigger ["EmptyDetector", [13478.163, 19380.889, 0]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Khotanovsk"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [0,1,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_152 = _this; + + _this = createTrigger ["EmptyDetector", [7846.5747, 4316.5571, 18.379284]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Branibor2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,275,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_154 = _this; + + _this = createTrigger ["EmptyDetector", [7634.6709, 4093.155]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Branibor3"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,275,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_157 = _this; + + //end of triggers +}; + +#include "custom_markers\cust_markers_tavi.sqf" +#include "custom_spawns\cust_spawns_tavi.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Taviana static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_trinity.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_trinity.sqf new file mode 100755 index 0000000..1244e54 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_trinity.sqf @@ -0,0 +1,71 @@ +/* + Trinity Island static spawn configuration + + Last updated: 11:44 AM 6/7/2013 + +*/ + +#include "spawn_markers\markers_trinity.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + #include "spawn_areas\areas_trinity.sqf" //Load spawn area definitions file. + + //marker name, [minimum AI, max additional AI], [markers for manual spawn points] (leave as empty array to use nearby buildings as spawn points), equipType (optional, required if number of AI groups is defined), number of AI groups (optional) + ["DZAI_StansfieldAirport",[2,2],[],2] call DZAI_static_spawn; + ["DZAI_FarmArea",[0,2],[],0] call DZAI_static_spawn; + ["DZAI_HouseArea1",[0,2],[],0] call DZAI_static_spawn; + ["DZAI_HouseArea2",[0,2],[],0] call DZAI_static_spawn; + ["DZAI_Edan"] call DZAI_static_spawn; + ["DZAI_Barracks1",[2,1]] call DZAI_static_spawn; + ["DZAI_ChapelHill",[0,1]] call DZAI_static_spawn; + ["DZAI_SarasotaS"] call DZAI_static_spawn; + ["DZAI_Sarasota"] call DZAI_static_spawn; + ["DZAI_CoastalHouse",[0,1]] call DZAI_static_spawn; + ["DZAI_Rivlin",[2,2]] call DZAI_static_spawn; + ["DZAI_RivlinChurch"] call DZAI_static_spawn; + ["DZAI_MilBase",[1,1],[],3] call DZAI_static_spawn; + ["DZAI_Ellesmere"] call DZAI_static_spawn; + ["DZAI_Bree",[1,2]] call DZAI_static_spawn; + ["DZAI_Helm",[1,2]] call DZAI_static_spawn; + ["DZAI_HelmE"] call DZAI_static_spawn; + ["DZAI_MilBase2"] call DZAI_static_spawn; + ["DZAI_MilBase3"] call DZAI_static_spawn; + ["DZAI_Abbeyfield",[2,1]] call DZAI_static_spawn; + ["DZAI_StFrances"] call DZAI_static_spawn; + ["DZAI_StFrancesW",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Contra",[2,1]] call DZAI_static_spawn; + ["DZAI_ContraNW"] call DZAI_static_spawn; + ["DZAI_Richmond",[2,1]] call DZAI_static_spawn; + ["DZAI_Totley",[1,2],[],1,2] call DZAI_static_spawn; + ["DZAI_Koul"] call DZAI_static_spawn; + ["DZAI_DurrasHights"] call DZAI_static_spawn; + ["DZAI_LodgeMoor"] call DZAI_static_spawn; + ["DZAI_MilBase4",[2,1],[],2] call DZAI_static_spawn; + ["DZAI_MilBase5"] call DZAI_static_spawn; + ["DZAI_Deepcut",[2,2]] call DZAI_static_spawn; + ["DZAI_FarmArea2"] call DZAI_static_spawn; + ["DZAI_LibertyAirport",[2,1],[],2] call DZAI_static_spawn; + ["DZAI_Maine",[1,2]] call DZAI_static_spawn; + ["DZAI_Eastwick"] call DZAI_static_spawn; + ["DZAI_HessIsland",[0,2]] call DZAI_static_spawn; + ["DZAI_StattonPort"] call DZAI_static_spawn; + ["DZAI_HarleyW"] call DZAI_static_spawn; + ["DZAI_Harley"] call DZAI_static_spawn; + ["DZAI_MilBarracks",[2,2],[],3] call DZAI_static_spawn; + ["DZAI_Yale",[2,1]] call DZAI_static_spawn; + ["DZAI_YaleS",[0,1],[],0] call DZAI_static_spawn; + ["DZAI_Madison"] call DZAI_static_spawn; + ["DZAI_MilBase6"] call DZAI_static_spawn; + ["DZAI_Lavayette"] call DZAI_static_spawn; + ["DZAI_TimberlandN",[2,1]] call DZAI_static_spawn; + ["DZAI_MilBase7"] call DZAI_static_spawn; + ["DZAI_TimberlandIndustrial"] call DZAI_static_spawn; +}; + +#include "custom_markers\cust_markers_trinity.sqf" +#include "custom_spawns\cust_spawns_trinity.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Trinity Island static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_utes.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_utes.sqf new file mode 100755 index 0000000..e93f9c5 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_utes.sqf @@ -0,0 +1,62 @@ +/* + Utes static spawn configuration + + Last updated: 11:44 AM 6/7/2013 + +*/ + +#include "spawn_markers\markers_utes.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + + //begin triggers + _this = createTrigger ["EmptyDetector", [3389.5076, 4330.6724]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kamenyy"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_0 = _this; + + _this = createTrigger ["EmptyDetector", [3561.8384, 3708.8481]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Airbase 1"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,175,thisTrigger,[],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_2 = _this; + + _this = createTrigger ["EmptyDetector", [3798.3088, 3443.5945]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Airbase 2"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,200,thisTrigger,[],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_4 = _this; + + _this = createTrigger ["EmptyDetector", [4355.46, 3207.3979, 0.34515762]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Strelka"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_6 = _this; + + _this = createTrigger ["EmptyDetector", [2989.5833, 4469.9492]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Kamenyy Mil Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_8 = _this; + +//end of triggers +}; + +#include "custom_markers\cust_markers_utes.sqf" +#include "custom_spawns\cust_spawns_utes.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Utes static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_zargabad.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_zargabad.sqf new file mode 100755 index 0000000..c6e3b7c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/init/world_spawn_configs/world_zargabad.sqf @@ -0,0 +1,127 @@ +/* + Zargabad static spawn configuration + + Last updated: 11:44 AM 6/7/2013 + +*/ + +#include "spawn_markers\markers_zargabad.sqf" //Load manual spawn point definitions file. + +waitUntil {sleep 0.1; !isNil "DZAI_classnamesVerified"}; //Wait for DZAI to finish verifying classname arrays or finish building classname arrays if verification is disabled. + +if (DZAI_staticAI) then { + +//begin triggers + + _this = createTrigger ["EmptyDetector", [2873.4944, 4976.3965]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Nango"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_0 = _this; + + _this = createTrigger ["EmptyDetector", [3416.9648, 4627.6279]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Road to Zargabad"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_3 = _this; + + _this = createTrigger ["EmptyDetector", [3631.8796, 4171.1382]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Zargabad Airfield"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],2,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_5 = _this; + + _this = createTrigger ["EmptyDetector", [4136.916, 4173.3862]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "ZargabadCenter"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],1,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_9 = _this; + + _this = createTrigger ["EmptyDetector", [4179.103, 3560.9189, 2.7623634]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Yarum"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,250,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_11 = _this; + + _this = createTrigger ["EmptyDetector", [3937.438, 2765.1133]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Barracks"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [3,2,175,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_13 = _this; + + _this = createTrigger ["EmptyDetector", [3512.5876, 1975.5415]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Shahbaz"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,175,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_15 = _this; + + _this = createTrigger ["EmptyDetector", [4146.8389, 4593.7168]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "ZargabadN"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],1] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_17 = _this; + + _this = createTrigger ["EmptyDetector", [4888.5908, 4581.9858]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "The Villa"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,2,150,thisTrigger,[],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_19 = _this; + + _this = createTrigger ["EmptyDetector", [4890.0259, 6153.4834]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Military Base"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [3,2,125,thisTrigger,[],3] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_21 = _this; + + _this = createTrigger ["EmptyDetector", [4001.5908, 6074.7681]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Hazar Bagh"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_23 = _this; + + _this = createTrigger ["EmptyDetector", [1988.1465, 4677.229]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "Azizyt"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [2,1,250,thisTrigger,[],2,2] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_25 = _this; + + _this = createTrigger ["EmptyDetector", [4731.5024, 3923.0283]]; + _this setTriggerArea [600, 600, 0, false]; + _this setTriggerActivation ["ANY", "PRESENT", true]; + _this setTriggerTimeout [10, 15, 20, true]; + _this setTriggerText "ZargabadE"; + _this setTriggerStatements ["{isPlayer _x} count thisList > 0;", "nul = [1,1,200,thisTrigger,[],0] call DZAI_spawnBandits_init;", "nul = [thisTrigger] spawn fnc_despawnBandits;"]; + _trigger_27 = _this; + +//end triggers +}; + +#include "custom_markers\cust_markers_zargabad.sqf" +#include "custom_spawns\cust_spawns_zargabad.sqf" +//----------------------------Do not edit anything below this line ----------------------------------------- +DZAI_customSpawnsReady = true; +diag_log "Zargabad static spawn configuration loaded."; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/DZAI_serverMonitor.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/DZAI_serverMonitor.sqf new file mode 100755 index 0000000..208adb4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/DZAI_serverMonitor.sqf @@ -0,0 +1,200 @@ +//Function frequency definitions +#define CLEANDEAD_FREQ 600 +#define VEHICLE_CLEANUP_FREQ 900 +#define LOCATION_CLEANUP_FREQ 360 +#define RANDSPAWN_CHECK_FREQ 360 +#define RANDSPAWN_EXPIRY_TIME 1080 +#define SIDECHECK_TIME 900 + +if (DZAI_debugLevel > 0) then {diag_log "DZAI Server Monitor will start in 1 minute."}; + +//Initialize timer variables +_cleanDead = diag_tickTime; +_monitorReport = diag_tickTime; +_deleteObjects = diag_tickTime; +_dynLocations = diag_tickTime; +_checkRandomSpawns = diag_tickTime; +_sideCheck = diag_tickTime; + +//Define settings +_reportDynOrVehicles = (DZAI_dynAISpawns || ((DZAI_maxHeliPatrols > 0) or {(DZAI_maxLandPatrols > 0)}) || (DZAI_maxRandomSpawns > 0)); +_debugMarkers = ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}); + +//Local functions +_getUptime = { + private ["_currentSec","_outSec","_outMin","_outHour"]; + _currentSec = diag_tickTime; + _outHour = floor (_currentSec/3600); + _outMin = floor ((_currentSec - (_outHour*3600))/60); + _outSec = floor (_currentSec - (_outHour*3600) - (_outMin*60)); + + [_outHour,_outMin,_outSec] +}; + +_purgeEH = { + {_this removeAllEventHandlers _x} count ["Killed","HandleDamage","GetIn","GetOut","Fired"]; +}; + +uiSleep 60; + +while {true} do { + //Main cleanup loop + if ((diag_tickTime - _cleanDead) > CLEANDEAD_FREQ) then { + _bodiesCleaned = 0; + _vehiclesCleaned = 0; + _nullObjects = 0; + + //Body/vehicle cleanup loop + { + _deathTime = _x getVariable "DZAI_deathTime"; + /* + if (!isNil "_deathTime") then { + diag_log format ["DZAI Cleanup Debug: Checking unit %1 (%2). diag_tickTime: %3. deathTime: %4.",_x,typeOf _x,diag_tickTime,_deathTime]; + diag_log format ["DZAI Cleanup Debug: is CAManBase: %1. Timer complete: %2. No players: %3.",(_x isKindOf "CAManBase"),((diag_tickTime - _deathTime) > DZAI_cleanupDelay),(({isPlayer _x} count (_x nearEntities [["CAManBase","AllVehicles"],30])) == 0)]; + };*/ + if (!isNil "_deathTime") then { + if (_x isKindOf "CAManBase") then { + //diag_log "DZAI Cleanup Debug: Unit type is CAManBase"; + if ((diag_tickTime - _deathTime) > DZAI_cleanupDelay) then { + //diag_log "DZAI Cleanup Debug: Timer complete, checking for nearby players"; + if (({isPlayer _x} count (_x nearEntities [["CAManBase","AllVehicles"],30])) == 0) then { + //diag_log "DZAI Cleanup Debug: No nearby players. Deleting unit"; + _soundflies = _x getVariable "sound_flies"; + if (!isNil "_soundflies") then { + detach _soundflies; + deleteVehicle _soundflies; + }; + _x call _purgeEH; + //diag_log format ["DEBUG :: Deleting object %1 (type: %2).",_x,typeOf _x]; + deleteVehicle _x; + _bodiesCleaned = _bodiesCleaned + 1; + }; + }; + } else { + if (_x isKindOf "AllVehicles") then { + if ((diag_tickTime - _deathTime) > VEHICLE_CLEANUP_FREQ) then { + if (({isPlayer _x} count (_x nearEntities [["CAManBase","AllVehicles"],75])) == 0) then { + if (_x in DZAI_monitoredObjects) then { + { + if (!(alive _x)) then { + deleteVehicle _x; + }; + } forEach (crew _x); + //diag_log format ["DEBUG :: Object %1 (type: %2) found in server object monitor.",_x,typeOf _x]; + }; + _x call _purgeEH; + //diag_log format ["DEBUG :: Deleting object %1 (type: %2).",_x,typeOf _x]; + deleteVehicle _x; + _vehiclesCleaned = _vehiclesCleaned + 1; + }; + }; + }; + }; + }; + uiSleep 0.025; + } count allDead; + + //Clean abandoned AI vehicles + { + if (!isNull _x) then { + private ["_deathTime"]; + _deathTime = _x getVariable "DZAI_deathTime"; + if (!isNil "_deathTime") then { + if ((diag_tickTime - _deathTime) > VEHICLE_CLEANUP_FREQ) then { + _x call _purgeEH; + //diag_log format ["DEBUG :: Deleting object %1 (type: %2).",_x,typeOf _x]; + { + if (!alive _x) then { + deleteVehicle _x; + }; + } forEach (crew _x); + deleteVehicle _x; + _vehiclesCleaned = _vehiclesCleaned + 1; + _nullObjects = _nullObjects + 1; + }; + }; + } else { + _nullObjects = _nullObjects + 1; + }; + uiSleep 0.025; + } count DZAI_monitoredObjects; + + //Clean server object monitor + if (_nullObjects > 4) then { + missionNamespace setVariable [DZAI_serverObjectMonitor,((missionNamespace getVariable DZAI_serverObjectMonitor) - [objNull])]; + DZAI_monitoredObjects = DZAI_monitoredObjects - [objNull]; + diag_log format ["DZAI Cleanup: Cleaned up %1 null objects from server object monitor.",_nullObjects]; + }; + if ((_bodiesCleaned + _vehiclesCleaned) > 0) then {diag_log format ["DZAI Cleanup: Cleaned up %1 dead units and %2 destroyed vehicles.",_bodiesCleaned,_vehiclesCleaned]}; + _cleanDead = diag_tickTime; + }; + + //Main location cleanup loop + if ((diag_tickTime - _dynLocations) > LOCATION_CLEANUP_FREQ) then { + _locationsDeleted = 0; + DZAI_tempBlacklist = DZAI_tempBlacklist - [locationNull]; + //diag_log format ["DEBUG :: DZAI_tempBlacklist: %1",DZAI_tempBlacklist]; + { + _deletetime = _x getVariable "deletetime"; + if (diag_tickTime > _deletetime) then { + deleteLocation _x; + _locationsDeleted = _locationsDeleted + 1; + }; + uiSleep 0.025; + } count DZAI_tempBlacklist; + DZAI_tempBlacklist = DZAI_tempBlacklist - [locationNull]; + if (_locationsDeleted > 0) then {diag_log format ["DZAI Cleanup: Cleaned up %1 expired temporary blacklist areas.",_locationsDeleted]}; + _dynLocations = diag_tickTime; + }; + + if ((diag_tickTime - _checkRandomSpawns) > RANDSPAWN_CHECK_FREQ) then { + DZAI_randTriggerArray = DZAI_randTriggerArray - [objNull]; + { + if ((((triggerStatements _x) select 1) != "") && {(diag_tickTime - (_x getVariable ["timestamp",diag_tickTime])) > RANDSPAWN_EXPIRY_TIME}) then { + deleteLocation (_x getVariable ["triggerLocation",locationNull]); + if (_debugMarkers) then {deleteMarker (str _x)}; + deleteVehicle _x; + }; + if ((_forEachIndex % 3) == 0) then {uiSleep 0.05}; + } forEach DZAI_randTriggerArray; + DZAI_randTriggerArray = DZAI_randTriggerArray - [objNull]; + _spawnsAvailable = DZAI_maxRandomSpawns - (count DZAI_randTriggerArray); + if (_spawnsAvailable > 0) then { + _nul = _spawnsAvailable spawn DZAI_createRandomSpawns; + }; + _checkRandomSpawns = diag_tickTime; + }; + + if ((diag_tickTime - _sideCheck) > SIDECHECK_TIME) then { + if ((east getFriend west) > 0) then { + east setFriend [west, 0]; + }; + if ((west getFriend east) > 0) then { + west setFriend [east,0]; + }; + _sideCheck = diag_tickTime; + }; + + if (_debugMarkers) then { + { + if ((getMarkerColor _x) != "") then { + _x setMarkerPos (getMarkerPos _x); + } else { + DZAI_mapMarkerArray set [_forEachIndex,""]; + }; + if ((_forEachIndex % 3) == 0) then {uiSleep 0.05}; + } forEach DZAI_mapMarkerArray; + DZAI_mapMarkerArray = DZAI_mapMarkerArray - [""]; + }; + + //Report statistics to RPT log + if ((DZAI_monitorRate > 0) && {((diag_tickTime - _monitorReport) > DZAI_monitorRate)}) then { + _uptime = [] call _getUptime; + diag_log format ["DZAI Monitor :: Server Uptime: %1:%2:%3. Active AI Groups: %4.",_uptime select 0, _uptime select 1, _uptime select 2,({!isNull _x} count DZAI_activeGroups)]; + diag_log format ["DZAI Monitor :: Static Spawns: %1. Respawn Queue: %2 groups queued.",(count DZAI_staticTriggerArray),(count DZAI_respawnQueue)]; + if (_reportDynOrVehicles) then {diag_log format ["DZAI Monitor :: Dynamic Spawns: %1. Random Spawns: %2. Air Patrols: %3. Land Patrols: %4.",(count DZAI_dynTriggerArray),(count DZAI_randTriggerArray),DZAI_curHeliPatrols,DZAI_curLandPatrols];}; + _monitorReport = diag_tickTime; + }; + + uiSleep 30; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/DZAI_startup.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/DZAI_startup.sqf new file mode 100755 index 0000000..838dad5 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/DZAI_startup.sqf @@ -0,0 +1,148 @@ +/* + DZAI Startup + + Description: Handles post-initialization tasks and starts DZAI cleanup procedure + + Last updated: 12:11 AM 6/17/2014 +*/ + +if (DZAI_debugLevel > 0) then {diag_log "DZAI Debug: DZAI Startup is running required script files..."}; + +//Set internal-use variables +DZAI_weaponGrades = [0,1,2,3]; //All possible weapon grades (does not include custom weapon grades). A "weapon grade" is a tiered classification of gear. 0: Civilian, 1: Military, 2: MilitarySpecial, 3: Heli Crash. Weapon grade also influences the general skill level of the AI unit. +DZAI_weaponGradesAll = [0,1,2,3,4,5,6,7,8,9]; //All possible weapon grades (including custom weapon grades). +DZAI_curHeliPatrols = 0; //Current number of active air patrols +DZAI_curLandPatrols = 0; //Current number of active land patrols +DZAI_dynTriggerArray = []; //List of all generated dynamic triggers. +DZAI_staticTriggerArray = []; //List of all static triggers +DZAI_respawnQueue = []; //Queue of AI groups that require respawning. Group ID is removed from queue after it is respawned. +DZAI_gradeIndices0 = []; +DZAI_gradeIndices1 = []; +DZAI_gradeIndices2 = []; +DZAI_gradeIndices3 = []; +DZAI_gradeIndicesDyn = []; +DZAI_dynEquipType = 4; +DZAI_tempBlacklist = []; //Queue of temporary dynamic spawn area blacklists for deletion +DZAI_reinforcePlaces = []; //AI helicopter patrols will periodically check this array for dynamic trigger objects to use as reinforcement positions. +DZAI_checkedClassnames = [[],[],[]]; //Classnames verified - Weapons/Magazines/Vehicles +DZAI_invalidClassnames = [[],[],[]]; //Classnames known as invalid - Weapons/Magazines/Vehicles +DZAI_respawnTimeVariance = (abs (DZAI_respawnTimeMax - DZAI_respawnTimeMin)); +DZAI_respawnTimeVarAir = (abs (DZAI_respawnTMaxA - DZAI_respawnTMinA)); +DZAI_respawnTimeVarLand = (abs (DZAI_respawnTMaxL - DZAI_respawnTMinL)); +DZAI_baseBlood = (DZAI_unitBloodLevel select 0); +DZAI_bonusBlood = ((DZAI_unitBloodLevel select 1) - (DZAI_unitBloodLevel select 0)); +DZAI_customSpawnQueue = []; +DZAI_serverObjectMonitorArray = []; //dummy array in case DayZ's server object monitor can't be found +DZAI_monitoredObjects = []; //used to cleanup AI vehicles that may not be destroyed. +DZAI_activeGroups = []; +DZAI_locations = []; +DZAI_locationsLand = []; +DZAI_heliTypesUsable = []; +DZAI_vehTypesUsable = []; +DZAI_randTriggerArray = []; +DZAI_mapMarkerArray = []; + +if (DZAI_verifyTables) then { + DZAI_tableChecklist = ["DZAI_Rifles0","DZAI_Rifles1","DZAI_Rifles2","DZAI_Rifles3","DZAI_Pistols0","DZAI_Pistols1","DZAI_Pistols2","DZAI_Pistols3", + "DZAI_Backpacks0","DZAI_Backpacks1","DZAI_Backpacks2","DZAI_Backpacks3","DZAI_Edibles","DZAI_Medicals1","DZAI_Medicals2", + "DZAI_MiscItemS","DZAI_MiscItemL","DZAI_BanditTypes","DZAI_launcherTypes"]; +}; + +//Create gamelogic to act as default trigger object if AI is spawned without trigger object specified (ie: for custom vehicle AI groups) +_nul = [] spawn { + DZAI_defaultTrigger = createTrigger ["EmptyDetector",(getMarkerPos 'center')]; + DZAI_defaultTrigger setVariable ["isCleaning",true]; + DZAI_defaultTrigger setVariable ["patrolDist",100]; + DZAI_defaultTrigger setVariable ["equipType",1]; + DZAI_defaultTrigger setVariable ["locationArray",[]]; + DZAI_defaultTrigger setVariable ["maxUnits",[0,0]]; + DZAI_defaultTrigger setVariable ["GroupSize",0]; + DZAI_defaultTrigger setVariable ["initialized",true]; + DZAI_defaultTrigger setTriggerText "Default Trigger Object"; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Default trigger check result: %1",[!(isNull DZAI_defaultTrigger),(typeOf DZAI_defaultTrigger),(getPosASL DZAI_defaultTrigger)]]}; +}; + +//Configure AI health system +if (isNil "DZAI_useHealthSystem") then {DZAI_useHealthSystem = true}; +if (DZAI_useHealthSystem) then { + DZAI_healthType = "HandleDamage"; //DZAI will manage individual unit health and death. + DZAI_healthStatements = if (isNil "DDOPP_taser_handleHit") then {"_this call DZAI_AI_handledamage"} else {"_this call DDOPP_taser_handleHit;_this call DZAI_AI_handledamage"}; //Check if DDOP Taser Mod is installed +} else { + DZAI_healthType = "Killed"; //DZAI will process individual unit deaths only. + DZAI_healthStatements = "_this call DZAI_unitDeath;"; +}; + +//Find DayZ server object monitor (to prevent AI vehicles from being destroyed due to hacker check) +DZAI_serverObjectMonitor = call { + if (!isNil "dayz_serverObjectMonitor") exitWith {"dayz_serverObjectMonitor"}; + "DZAI_serverObjectMonitorArray" +}; + +[] call compile preprocessFileLineNumbers format ["%1\scripts\buildWeightedTables.sqf",DZAI_directory]; + +//If serverside object patch enabled, then spawn in serverside objects. +if (DZAI_objPatch) then { + _nul = [] execVM format ['%1\scripts\buildingpatch_all.sqf',DZAI_directory]; +}; + +//Build DZAI weapon classname tables from CfgBuildingLoot data if DZAI_dynamicWeapons = true; +if (DZAI_dynamicWeaponList) then { + _weaponlist = [] execVM format ['%1\scripts\buildWeaponArrays.sqf',DZAI_directory]; //Overwrite default weapon tables with classnames found in DayZ's loot tables. + waitUntil {uiSleep 0.25; scriptDone _weaponlist}; +} else { + DZAI_weaponsInitialized = true; //Use default weapon tables defined in global_classnames.sqf +}; + +//Load additional classname configuration from per-map config file. Weapons are read from loot tables so they are not included here +if (!isNil "DZAI_BanditTypesNew") then {[DZAI_BanditTypes,DZAI_BanditTypesNew] call DZAI_append}; +if (!isNil "DZAI_Backpacks0New") then {[DZAI_Backpacks0,DZAI_Backpacks0New] call DZAI_append}; +if (!isNil "DZAI_Backpacks1New") then {[DZAI_Backpacks1,DZAI_Backpacks1New] call DZAI_append}; +if (!isNil "DZAI_Backpacks2New") then {[DZAI_Backpacks2,DZAI_Backpacks2New] call DZAI_append}; +if (!isNil "DZAI_Backpacks3New") then {[DZAI_Backpacks3,DZAI_Backpacks3New] call DZAI_append}; +if (!isNil "DZAI_EdiblesNew") then {[DZAI_Edibles,DZAI_EdiblesNew] call DZAI_append}; +if (!isNil "DZAI_Medicals1New") then {[DZAI_Medicals1,DZAI_Medicals1New] call DZAI_append}; +if (!isNil "DZAI_Medicals2New") then {[DZAI_Medicals2,DZAI_Medicals2New] call DZAI_append}; +if (!isNil "DZAI_MiscItemSNew") then {[DZAI_MiscItemS,DZAI_MiscItemSNew] call DZAI_append}; +if (!isNil "DZAI_MiscItemLNew") then {[DZAI_MiscItemL,DZAI_MiscItemLNew] call DZAI_append}; + +//Check classname tables if enabled +if (DZAI_verifyTables) then { + _verify = [] execVM format ["%1\scripts\verifyTables.sqf",DZAI_directory]; + waitUntil {uiSleep 0.5; scriptDone _verify}; //wait for verification to complete before proceeding +} else { + DZAI_classnamesVerified = true; //skip classname verification if disabled +}; + +//Build map location list. If using an unknown map, DZAI will automatically generate basic static triggers at cities and towns. +_nul = [] execVM format ['%1\scripts\setup_locations.sqf',DZAI_directory]; +uiSleep 0.1; + +if (DZAI_dynAISpawns) then { + if ((count DZAI_dynAreaBlacklist) > 0) then { + _nul = [] execVM format ['%1\scripts\setup_blacklist_areas.sqf',DZAI_directory]; + }; + if (DZAI_freshSpawnSafeArea) then { + _nul = [] execVM format ['%1\scripts\setup_playerspawn_areas.sqf',DZAI_directory]; + }; + _dynManagerV2 = [] execVM format ['%1\scripts\dynamicSpawn_manager.sqf',DZAI_directory]; +}; + +if ((DZAI_maxHeliPatrols > 0) or {(DZAI_maxLandPatrols > 0)}) then { + _nul = [] execVM format ['%1\scripts\setup_veh_patrols.sqf',DZAI_directory]; +}; + +_nul = [] spawn { + //diag_log "DEBUG :: Waiting for custom spawn config to be loaded."; + waitUntil {uiSleep 1; !isNil "DZAI_customSpawnsReady"}; + if ((count DZAI_customSpawnQueue) == 0) exitWith {}; + //diag_log format ["DEBUG :: Custom vehicle spawn queue contents: %1",DZAI_customSpawnQueue]; + { + _nul = _x spawn DZAI_spawnVehicle_custom; + uiSleep 1; + } forEach DZAI_customSpawnQueue; + DZAI_customSpawnQueue = nil; //Cleanup used functions + DZAI_customSpawnsReady = nil; + DZAI_spawn_vehicle = nil; +}; + +_nul = [] execVM format ['%1\scripts\DZAI_serverMonitor.sqf',DZAI_directory]; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/buildWeaponArrays.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/buildWeaponArrays.sqf new file mode 100755 index 0000000..7cada91 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/buildWeaponArrays.sqf @@ -0,0 +1,151 @@ +/* + buildWeaponArrays + + Description: Do not edit anything in this file unless instructed by the developer. + + Last updated: 11:53 AM 6/25/2014 +*/ + +private ["_bldgClasses","_lootItem","_aiWeaponBanList","_lootList","_cfgBuildingLoot","_startTime","_lootConfigFile"]; + +if (!isNil "DZAI_weaponsInitialized") exitWith {}; + +_startTime = diag_tickTime; + +_lootConfigFile = if !((DZAI_customLootTables) && {(isClass (missionConfigFile >> "CfgBuildingLoot"))}) then { + if (DZAI_debugLevel > 0) then {diag_log "DZAI Debug: Building DZAI weapon arrays using CfgBuildingLoot data."}; + configFile +} else { + if (DZAI_debugLevel > 0) then {diag_log "DZAI Debug: Building DZAI weapon arrays using custom CfgBuildingLoot data."}; + missionConfigFile +}; + +_bldgClasses = [ + ["Residential","Farm"], //weapongrade 0 + ["Military"], //weapongrade 1 + ["MilitarySpecial"], //weapongrade 2 + ["HeliCrash"]]; //weapongrade 3 + +//Built-in weapon ban list for melee weapons and nonweapon items +_aiWeaponBanList = + [ + "Crossbow_DZ","Crossbow","MeleeHatchet","MeleeCrowbar","MeleeMachete","MeleeBaseball","MeleeBaseBallBat","MeleeBaseBallBatBarbed","MeleeBaseBallBatNails","Chainsaw", //Melee weapons + "ItemMap","Binocular","ItemWatch","ItemCompass","ItemFlashlight","ItemKnife","NVGoggles","ItemGPS","ItemEtool","Binocular_Vector","ItemMatchbox","ItemToolbox", //Non-weapon items + "ItemKeyKit","ItemMatchbox" //Epoch items + ]; + +//Add user-specified banned weapons to DZAI weapon banlist. +{ + if !(_x in _aiWeaponBanList) then { + _aiWeaponBanList set [count _aiWeaponBanList,_x]; + }; +} count DZAI_banAIWeapons; +DZAI_banAIWeapons = nil; +//diag_log format ["DEBUG :: List of weapons to be removed from DZAI classname tables: %1",_aiWeaponBanList]; + +//Compatibility with Namalsk's selectable loot table feature. +if (isNil "dayzNam_buildingLoot") then { + _cfgBuildingLoot = "cfgBuildingLoot"; + if (isClass (_lootConfigFile >> _cfgBuildingLoot >> "Barracks")) then { + (_bldgClasses select 2) set [((_bldgClasses select 2) find "MilitarySpecial"),"Barracks"]; + }; +} else { + _cfgBuildingLoot = dayzNam_buildingLoot; + (_bldgClasses select 3) set [((_bldgClasses select 3) find "HeliCrash"),"HeliCrashNamalsk"]; +}; +//diag_log format ["DEBUG :: _cfgBuildingLoot: %1",_cfgBuildingLoot]; + +//Compatibility with DayZ 1.7.7's new HeliCrash tables +if ((isClass (_lootConfigFile >> _cfgBuildingLoot >> "HeliCrashWEST")) && {(isClass (_lootConfigFile >> _cfgBuildingLoot >> "HeliCrashEAST"))}) then { + _bldgClasses set [3,["HeliCrashWEST","HeliCrashEAST"]]; + //diag_log format ["DEBUG :: HeliCrash tables modified: %1",(_bldgClasses select 3)]; +}; + +_lootList = call { + if (isArray (_lootConfigFile >> _cfgBuildingLoot >> "Default" >> "lootTypeSmall")) exitWith {["lootType","lootTypeSmall"]}; //Epoch 1.0.5 new loot table structure + if (isArray (_lootConfigFile >> _cfgBuildingLoot >> "Default" >> "lootType")) exitWith {["lootType"]}; //DayZ 1.8.1 and pre-Epoch 1.0.5 loot table structure + ["itemType"] //Old DayZ loot table structure. +}; +//diag_log format ["DEBUG :: _lootList: %1",_lootList]; + +//Declare all temporary DZAI weapon arrays. DO NOT EDIT. +_DZAI_Pistols0_temp = []; +_DZAI_Pistols1_temp = []; +_DZAI_Pistols2_temp = []; +_DZAI_Pistols3_temp = []; + +_DZAI_Rifles0_temp = []; +_DZAI_Rifles1_temp = []; +_DZAI_Rifles2_temp = []; +_DZAI_Rifles3_temp = []; + +//Build the weapon arrays. +for "_i" from 0 to (count _bldgClasses - 1) do { //_i = weapongrade + for "_j" from 0 to (count (_bldgClasses select _i) - 1) do { //If each weapongrade has more than 1 building class, investigate them all + _bldgLoot = []; + { + _bldgLoot = _bldgLoot + (getArray (_lootConfigFile >> _cfgBuildingLoot >> ((_bldgClasses select _i) select _j) >> _x)); + } count _lootList; + { + call { + if ((_x select 1) == "weapon") exitWith { + _weaponItem = _x select 0; + if (!(_weaponItem in _aiWeaponBanList)) then { + _itemType = (getNumber (configFile >> "CfgWeapons" >> _weaponItem >> "type")); + call { + if (_itemType == 1) exitWith { + call compile format ["_DZAI_Rifles%1_temp set [(count _DZAI_Rifles%1_temp),'%2'];",_i,_weaponItem] + }; + if (_itemType == 2) exitWith { + call compile format ["_DZAI_Pistols%1_temp set [(count _DZAI_Pistols%1_temp),'%2'];",_i,_weaponItem]; + }; + }; + }; + }; + if ((_x select 1) == "cfglootweapon") exitWith { + { + _weaponItem = _x select 0; + if (!(_weaponItem in _aiWeaponBanList)) then { + _itemType = (getNumber (configFile >> "CfgWeapons" >> _weaponItem >> "type")); + call { + if (_itemType == 1) exitWith { + call compile format ["_DZAI_Rifles%1_temp set [(count _DZAI_Rifles%1_temp),'%2'];",_i,_weaponItem] + }; + if (_itemType == 2) exitWith { + call compile format ["_DZAI_Pistols%1_temp set [(count _DZAI_Pistols%1_temp),'%2'];",_i,_weaponItem]; + }; + }; + }; + } count (getArray (_lootConfigFile >> "cfgLoot" >> (_x select 0))); + }; + }; + } forEach _bldgLoot; + }; +}; + +//Redefine each prebuilt weapon array if new table is not empty +if ((count _DZAI_Pistols0_temp) > 0) then {DZAI_Pistols0 = _DZAI_Pistols0_temp}; +if ((count _DZAI_Pistols1_temp) > 0) then {DZAI_Pistols1 = _DZAI_Pistols1_temp}; //else {DZAI_Pistols1 = [] + DZAI_Pistols0}; +if ((count _DZAI_Pistols2_temp) > 0) then {DZAI_Pistols2 = _DZAI_Pistols2_temp}; //else {DZAI_Pistols2 = [] + DZAI_Pistols1}; +if ((count _DZAI_Pistols3_temp) > 0) then {DZAI_Pistols3 = _DZAI_Pistols3_temp} else {DZAI_Pistols3 = [] + DZAI_Pistols2}; +if ((count _DZAI_Rifles0_temp) > 0) then {DZAI_Rifles0 = _DZAI_Rifles0_temp}; +if ((count _DZAI_Rifles1_temp) > 0) then {DZAI_Rifles1 = _DZAI_Rifles1_temp}; //else {DZAI_Rifles1 = [] + DZAI_Rifles0}; +if ((count _DZAI_Rifles2_temp) > 0) then {DZAI_Rifles2 = _DZAI_Rifles2_temp}; //else {DZAI_Rifles2 = [] + DZAI_Rifles1}; +if ((count _DZAI_Rifles3_temp) > 0) then {DZAI_Rifles3 = _DZAI_Rifles3_temp} else {DZAI_Rifles3 = [] + DZAI_Rifles2}; + +if (DZAI_debugLevel > 0) then { + if (DZAI_debugLevel > 1) then { + //Display finished weapon arrays + diag_log format ["Contents of DZAI_Pistols0: %1",DZAI_Pistols0]; + diag_log format ["Contents of DZAI_Pistols1: %1",DZAI_Pistols1]; + diag_log format ["Contents of DZAI_Pistols2: %1",DZAI_Pistols2]; + diag_log format ["Contents of DZAI_Pistols3: %1",DZAI_Pistols3]; + diag_log format ["Contents of DZAI_Rifles0: %1",DZAI_Rifles0]; + diag_log format ["Contents of DZAI_Rifles1: %1",DZAI_Rifles1]; + diag_log format ["Contents of DZAI_Rifles2: %1",DZAI_Rifles2]; + diag_log format ["Contents of DZAI_Rifles3: %1",DZAI_Rifles3]; + }; + diag_log format ["DZAI Debug: Weapon classname tables created in %1 seconds.",(diag_tickTime - _startTime)]; +}; + +DZAI_weaponsInitialized = true; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/buildWeightedTables.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/buildWeightedTables.sqf new file mode 100755 index 0000000..8ef578c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/buildWeightedTables.sqf @@ -0,0 +1,63 @@ +private ["_startTime","_getWeightedIndices"]; + +_startTime = diag_tickTime; + +//Function exerpt from fn_selectRandomWeighted.sqf written by Joris-Jan van 't Land +_getWeightedIndices = { + private ["_array", "_weights","_index","_weighted","_i"]; + _array = _this select 0; + _weights = _this select 1; + + //Parameter validation. + if ((typeName _array) != (typeName [])) exitWith {debugLog "Log: [selectRandomWeighted] Array (0) must be an Array!"; nil}; + if ((typeName _weights) != (typeName [])) exitWith {debugLog "Log: [selectRandomWeighted] Weights (1) must be an Array!"; nil}; + if ((count _array) > (count _weights)) exitWith {debugLog "Log: [selectRandomWeighted] There must be at least as many elements in Weights (1) as there are in Array (0)!"; nil}; + + //Created weighted array of indices. + private ["_weighted"]; + _weighted = []; + for "_i" from 0 to ((count _weights) - 1) do + { + private ["_weight"]; + _weight = _weights select _i; + + //Ensure the weight is a Number. + //If it's not, set weight to 0 to exclude it. + if ((typeName _weight) != (typeName 0)) then {debugLog "Log: [selectRandomWeighted] Weights should be Numbers; weight set to 0!"; _weight = 0}; + + //The weight should be a Number between 0 and 1. + if (_weight < 0) then {debugLog "Log: [selectRandomWeighted] Weights should be more than or equal to 0; weight set to 0!"; _weight = 0}; + //if (_weight > 1) then {debugLog "Log: [selectRandomWeighted] Weights should be less than or equal to 1; weight set to 1!"; _weight = 1}; + + //Normalize the weight for a precision of hundreds. + _weight = round(_weight * 100); + + for "_k" from 0 to (_weight - 1) do + { + //_weighted = _weighted + [_i]; + _weighted set [count _weighted,_i]; + }; + }; + + _weighted +}; + +{ + private ["_weightedTable","_gradeChances"]; + _gradeChances = missionNamespace getVariable (_x select 0); + _weightedTable = [DZAI_weaponGrades,_gradeChances] call _getWeightedIndices; + missionNamespace setVariable [_x select 1,_weightedTable]; + missionNamespace setVariable [_x select 0,nil]; +} count [ + //Input variable - Gradechances array, Output variable - Gradeindices array + ["DZAI_gradeChances0","DZAI_gradeIndices0"], + ["DZAI_gradeChances1","DZAI_gradeIndices1"], + ["DZAI_gradeChances2","DZAI_gradeIndices2"], + ["DZAI_gradeChances3","DZAI_gradeIndices3"], + ["DZAI_gradeChancesDyn","DZAI_gradeIndicesDyn"] + ]; + +if (DZAI_debugLevel > 0) then {diag_log format ["[DZAI] DZAI finished building weighted weapongrade tables in %1 seconds.",(diag_tickTime - _startTime)]}; + +true + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/buildingpatch_all.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/buildingpatch_all.sqf new file mode 100755 index 0000000..559f076 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/buildingpatch_all.sqf @@ -0,0 +1,52 @@ +private ["_startTime","_generatorStr","_cfgLocation","_locationArray","_config","_spawnServerObj"]; + +_generatorStr = format ["CfgTownGenerator%1",worldName]; +_configExists = ((isClass (configFile >> _generatorStr)) or {isClass (configFile >> "CfgTownGenerator")}); + +if (_configExists) then { + _startTime = diag_tickTime; + + _cfgLocation = configFile >> _generatorStr; + if ((count _cfgLocation) < 1) then {_generatorStr = "CfgTownGenerator";_cfgLocation = configFile >> "CfgTownGenerator";}; + _locationArray = []; + + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Spawning in serverside objects... Reading from file %1.",_generatorStr];}; + + for "_i" from 0 to ((count _cfgLocation) - 1) do { + _locationArray set [count _locationArray,configName (_cfgLocation select _i)]; + }; + + /////////////////////////////////////////////////////////////// + + _spawnServerObj = { + private ["_config","_objType","_objPos","_objDir","_object"]; + + for "_i" from ((count _this) - 1) to 0 step -1 do { + _config = _this select _i; + if (isClass (_config)) then { + _objType = getText (_config >> "type"); + _objPos = [] + getArray (_config >> "position"); + _objDir = getNumber (_config >> "direction"); + + //diag_log format ["OBJECT PATCH :: Creating object %1 at %2.",_objType,_objPos]; + _object = _objType createVehicleLocal [_objPos select 0,_objPos select 1,0]; + _object setDir _objDir; + _object setPos [_objPos select 0,_objPos select 1,0]; + _object allowDamage false; + _object enableSimulation false; + if ((_i % 25) == 0) then {uiSleep 0.01;}; + }; + }; + }; + + /////////////////////////////////////////////////////////////// + { + _config = configFile >> _generatorStr >> _x; + _config call _spawnServerObj; + uiSleep 0.001; + } forEach _locationArray; + + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Serverside object patch completed in %1 seconds.",(diag_tickTime - _startTime)]}; +} else { + if (DZAI_debugLevel > 0) then {diag_log "DZAI Debug: CfgTownGenerator not found. Aborting serverside object patch. (This is not an error)";}; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/dynamicSpawn_manager.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/dynamicSpawn_manager.sqf new file mode 100755 index 0000000..30cc3af --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/dynamicSpawn_manager.sqf @@ -0,0 +1,131 @@ +/* + DZAI Dynamic Spawn Manager + + Last updated: 6:45 PM 2/28/2014 +*/ + +if (DZAI_debugLevel > 0) then {diag_log "Starting DZAI Dynamic Spawn Manager in 5 minutes.";}; +uiSleep 300; +//uiSleep 30; //FOR DEBUGGING +if (DZAI_debugLevel > 0) then {diag_log "DZAI V2 Dynamic Spawn Manager started.";}; + +//Maximum chance to be selected for spawn condition check. Prevents unfairly high probability when few players are online. +#define CHANCE_CAP 0.5 + +//Maximum number of players to select each cycle. If number of online players is less than SPAWN_MAX, all online players will be selected. +#define SPAWN_MAX 10 + +//Proportion of online players to select each cycle. +#define SELECT_RATIO 0.3 + +//Frequency of each cycle +#define SLEEP_DELAY 300 +//#define SLEEP_DELAY 60 //FOR DEBUGGING + +//Cycle frequency variance. +#define SLEEP_VARY 120 +//#define SLEEP_VARY 30 //FOR DEBUGGING + +_playerUIDs = []; //Array of all collected playerUIDs +_timestamps = []; //Array of timestamps for each corresponding playerUID +//_playerData = []; +_maxSpawnTime = DZAI_maxSpawnTime; //Time required for maximum % spawn probability. (seconds) +//_maxSpawnTime = 1; //FOR DEBUGGING +_retainMaxSpawnTime = DZAI_maxSpawnTime + DZAI_keepMaxSpawnTime; +_debugMarkers = ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}); + +while {true} do { + if (({isPlayer _x} count playableUnits) > 0) then { + _allPlayers = []; //Do not edit + { + if (isPlayer _x) then { + _allPlayers set [count _allPlayers,_x]; + _playerUID = getPlayerUID _x; + if (!(_playerUID in _playerUIDs)) then { + _index = (count _playerUIDs); + _playerUIDs set [_index,_playerUID]; + _timestamps set [_index,diag_tickTime]; + }; + //diag_log format ["DZAI Debug: Found a player at %1 (%2).",mapGridPosition _x,name _x]; + }; + uiSleep 0.05; + } forEach playableUnits; + + _activeDynamicSpawns = (count DZAI_dynTriggerArray); + _playerCount = (count _allPlayers); + _maxSpawnsPossible = (((ceil (SELECT_RATIO * _playerCount)) min SPAWN_MAX) - _activeDynamicSpawns); + _chanceAdjust = (((_maxSpawnsPossible/_playerCount)/CHANCE_CAP) max 1); + + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Preparing to spawn dynamic triggers using selection probability limit %1, %2 dynamic spawns are possible.",(1/_chanceAdjust),_maxSpawnsPossible];}; + + while {_allPlayers = _allPlayers - [objNull]; (((_maxSpawnsPossible - _activeDynamicSpawns) > 0) && {(count _allPlayers) > 0})} do { //_spawns: Have we created enough spawns? _allPlayers: Are there enough players to create spawns for? + _time = diag_tickTime; + _player = _allPlayers call BIS_fnc_selectRandom2; + //[_player,"DEBUG :: Selected for dynamic spawn."] call DZAI_radioSend; + if ((alive _player) && {((random _chanceAdjust) < 1)}) then { + _playername = name _player; + _index = _playerUIDs find (getPlayerUID _player); + if (_index < 0) then { //Failsafe: Add player UID at last minute if not found + _index = (count _playerUIDs); + _playerUIDs set [_index,(getPlayerUID _player)]; + _timestamps set [_index,diag_tickTime]; + }; + _lastSpawned = _timestamps select _index; + _spawnChance = (((diag_tickTime - _lastSpawned) % _retainMaxSpawnTime) / _maxSpawnTime); + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Player %1 has %2 probability of generating dynamic spawn.",_playername,_spawnChance];}; + if (_spawnChance call DZAI_chance) then { + _playerPos = ASLtoATL getPosASL _player; + if ( + (((vehicle _player) isKindOf "Man") or {(vehicle _player) isKindOf "Land"}) && //Player must be on foot or in land vehicle + {(!(_playerPos in (nearestLocation [_playerPos,"Strategic"])))} && //Player must not be in blacklisted area + {(!(surfaceIsWater _playerPos))} && //Player must not be on water position + {((_playerPos distance getMarkerpos "respawn_west") > 2000)} && //Player must not be in debug area + {((count (_playerPos nearObjects ["DZE_Base_Object",100])) == 0)} //Player must not be near Epoch buildables + ) then { + _timestamps set [_index,diag_tickTime + (0.10 * DZAI_maxSpawnTime)]; + _trigger = createTrigger ["EmptyDetector",_playerPos]; + _trigger setTriggerArea [600, 600, 0, false]; + _trigger setTriggerActivation ["ANY", "PRESENT", true]; + _trigger setTriggerTimeout [3, 3, 3, true]; + _trigger setTriggerText (format ["Dynamic Trigger (Target: %1)",_playername]); + _trigger setVariable ["targetplayer",_player]; + _trigActStatements = format ["0 = [175,thisTrigger,%1] call fnc_spawnBandits_dynamic;",_spawnChance]; + _trigger setTriggerStatements ["{isPlayer _x} count thisList > 0;",_trigActStatements, "[thisTrigger] spawn fnc_despawnBandits_dynamic;"]; + if (_debugMarkers) then { + _nul = _trigger spawn { + _marker = str(_this); + if ((getMarkerColor _marker) != "") then {deleteMarker _marker}; + _marker = createMarker[_marker,(getPosASL _this)]; + _marker setMarkerShape "ELLIPSE"; + _marker setMarkerType "Flag"; + _marker setMarkerBrush "SOLID"; + _marker setMarkerSize [600, 600]; + _marker setMarkerAlpha 0; + }; + }; + if (((count DZAI_reinforcePlaces) < DZAI_curHeliPatrols) && {DZAI_heliReinforceChance call DZAI_chance}) then { + DZAI_reinforcePlaces set [(count DZAI_reinforcePlaces),_trigger]; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Sending AI helicopter patrol to search for %1.",_playername];}; + }; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Created dynamic trigger at %1. Target player: %2.",(mapGridPosition _trigger),_playername];}; + } else { + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Dynamic spawn conditions failed for player %1.",_playername];}; + }; + } else { + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Dynamic spawn probability check failed for player %1.",_playername];}; + }; + } else { + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Cancel dynamic spawn check for player %1 (Reason: Probability reduction or Player death).",_player]}; + }; + _allPlayers = _allPlayers - [_player]; + _activeDynamicSpawns = _activeDynamicSpawns + 1; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Processed a spawning probability check in %1 seconds.",diag_tickTime - _time]}; + uiSleep 5; + }; + } else { + if (DZAI_debugLevel > 1) then {diag_log "DZAI Extended Debug: No players online. Dynamic spawn manager is entering waiting state.";}; + }; + _nextSpawn = SLEEP_DELAY + random(SLEEP_VARY); + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Dynamic spawn manager is sleeping for %1 seconds.",_nextSpawn];}; + uiSleep (_nextSpawn); +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_autoStaticSpawns.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_autoStaticSpawns.sqf new file mode 100755 index 0000000..db570e2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_autoStaticSpawns.sqf @@ -0,0 +1,143 @@ +//Generates static spawns for maps that DZAI is not configured to support + +waitUntil {uiSleep 3; !isNil "DZAI_locations_ready"}; + +if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: DZAI is generating static spawns..."];}; + +{ + private ["_placeName","_placePos","_placeType"]; + _placeName = _x select 0; + _placePos = _x select 1; + _placeType = _x select 2; + + if ((_placeType != "NameLocal") && {!(surfaceIsWater _placePos)}) then { + private ["_nearbldgs"]; + _nearbldgs = _placePos nearObjects ["HouseBase",250]; + if ((count _nearbldgs) > 19) then { + _ignoredObj = missionNamespace getVariable ["DayZ_SafeObjects",[]]; + _spawnPositions = []; + _spawnPoints = 0; + { + scopeName "bldgloop"; + _pos = ASLtoATL getPosASL _x; + if (!((typeOf _x) in _ignoredObj) && {!(surfaceIsWater _pos)}) then { + _spawnPositions set [(count _spawnPositions),_pos]; + _spawnPoints = _spawnPoints + 1; + }; + if (_spawnPoints >= 150) then { + breakOut "bldgloop"; + }; + } forEach _nearbldgs; + _blacklist = createLocation ["Strategic",_placePos,600,600]; + _trigger = createTrigger ["EmptyDetector", _placePos]; + _trigger setTriggerArea [600, 600, 0, false]; + _trigger setTriggerActivation ["ANY", "PRESENT", true]; + _trigger setTriggerTimeout [10, 15, 20, true]; + _trigger setTriggerText _placeName; + private ["_aiCount","_equipType","_patrolRad"]; + switch (_placeType) do { + case "NameCityCapital": + { + _aiCount = [2,1]; + _equipType = 1; + _patrolRad = 200; + }; + case "NameCity": + { + _aiCount = [1,2]; + _equipType = 1; + _patrolRad = 175; + }; + case "NameVillage": + { + _aiCount = [1,1]; + _equipType = 0; + _patrolRad = 125; + }; + }; + _statements = format ["0 = [%1,%2,%3,thisTrigger,[],%4] call fnc_spawnBandits;",_aiCount select 0,_aiCount select 1,_patrolRad,_equipType]; + _trigger setTriggerStatements ["{isPlayer _x} count thisList > 0;", _statements, "0 = [thisTrigger] spawn fnc_despawnBandits;"]; + 0 = [0,_trigger,[],_patrolRad,_equipType,_spawnPositions,_aiCount] call DZAI_setTrigVars; + }; + }; + uiSleep 0.1; +} forEach DZAI_locations; + +if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: DZAI has finished generating static spawns."]; + if (!isNil "DZAI_devMode") then { + _outputMarkerCode = { + _markerName = _this select 0; + _markerPos = _this select 1; + _markerSize = _this select 2; + + diag_log text format ['POSITION="%1";',_markerPos]; + diag_log text format ['NAME="DZAI_%1";',_markerName]; + diag_log text format ['A="%1";',_markerSize]; + diag_log text format ['B="%1";',_markerSize]; + + true + }; + + _outputSpawnConfig = { + _markerName = _this select 0; + _aiCount = _this select 1; + _equipType = _this select 2; + + diag_log text format ["['DZAI_%1',%2,[],%3] call DZAI_static_spawn;",_markerName,_aiCount,_equipType]; + + true + }; + + diag_log format ["DEBUG :: Output configs for areas_%1.sqf.",toLower worldName]; + { + private ["_placeName","_placePos"]; + _placeName = _x select 0; + _placePos = _x select 1; + _placeType = _x select 2; + _markerSize = switch (_placeType) do { + case "NameCityCapital": {200}; + case "NameCity": {175}; + case "NameVillage": {150}; + case "NameLocal": {150}; + case default {0}; + }; + + _output = [_placeName,_placePos,_markerSize] call _outputMarkerCode; + uiSleep 0.1; + } forEach DZAI_locations; + + diag_log format ["DEBUG :: Output configs for world_%1.sqf.",toLower worldName]; + { + private ["_placeName","_aiCount","_equipType","_placeType"]; + _placeName = _x select 0; + _placeType = _x select 2; + _aiCount = [0,1]; + _equipType = 0; + + switch (_placeType) do { + case "NameCityCapital": { + _aiCount = [2,1]; + _equipType = 1; + }; + case "NameCity": { + _aiCount = [1,2]; + _equipType = 1; + }; + case "NameVillage": { + _aiCount = [1,1]; + _equipType = 0; + }; + case "NameLocal": { + _aiCount = [1,1]; + _equipType = 1; + }; + case default { + _aiCount = [1,2]; + _equipType = 1; + }; + }; + _output = [_placeName,_aiCount,_equipType] call _outputSpawnConfig; + uiSleep 0.1; + } forEach DZAI_locations; + }; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_blacklist_areas.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_blacklist_areas.sqf new file mode 100755 index 0000000..dd3417c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_blacklist_areas.sqf @@ -0,0 +1,16 @@ + +waitUntil {uiSleep 1; !isNil "DZAI_locations_ready"}; + +for "_i" from 0 to ((count DZAI_dynAreaBlacklist) -1) do { + private ["_area"]; + + _area = DZAI_dynAreaBlacklist select _i; + if (((typeName _area) == "STRING") && {((getMarkerColor _area) != "")}) then { + private ["_areaSize","_sizeX","_sizeY","_blacklist"]; + _areaSize = getMarkerSize _area; + _sizeX = if ((_areaSize select 0) > 0) then {_areaSize select 0} else {100}; + _sizeY = if ((_areaSize select 1) > 0) then {_areaSize select 1} else {100}; + _blacklist = createLocation ["Strategic",getMarkerPos _area,_sizeX,_sizeY]; + }; + uiSleep 0.001; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_locations.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_locations.sqf new file mode 100755 index 0000000..58f79cf --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_locations.sqf @@ -0,0 +1,81 @@ +/* + Reads from CfgWorlds config and extracts information about city/town names, positions, and types. + + Used to generate waypoint positions for AI vehicle patrols. +*/ + +private ["_location","_cfgWorldName","_startTime","_trader_markers","_allPlaces"]; + +_startTime = diag_tickTime; +_allPlaces = []; +_cfgWorldName = configFile >> "CfgWorlds" >> worldName >> "Names"; +_trader_markers = []; + +if (DZAI_modName == "epoch") then { + _worldName = (toLower worldName); + _trader_markers = call { + if (_worldName == "chernarus") exitWith {["Tradercitystary","wholesaleSouth","boatTraderEast","BoatDealerSouth","AirVehicles","BanditDen","Klen","BoatDealerEast","TradercityBash","HeroTrader"]}; + if (_worldName == "napf") exitWith {["NeutralTraderCity","FriendlyTraderCity","HeroVendor","UnarmedAirVehicles","West Wholesaler","NorthWholesaler","NorthBoatVendor","BanditVendor","SouthBoatVendor","NeutralTraderCIty2"]}; + if (_worldName == "sauerland") exitWith {["NeutralTraderCity","FriendlyTraderCity","HeroVendor","UnarmedAirVehicles","SouthWholesaler","NorthWholesaler","BanditVendor","NeutralTraderCIty2"]}; + if (_worldName == "tavi") exitWith {["TraderCityLyepestok","TraderCitySabina","TraderCityBilgrad","TraderCityBranibor","BanditVendor","HeroVendor","AircraftDealer","AircraftDealer2","Misc.Vendor","Misc.Vendor2","BoatDealer","BoatDealer2","BoatDealer3","BoatDealer4","Wholesaler","Wholesaler2"]}; + if (_worldName == "namalsk") exitWith {["GerneralPartsSupplies","WholesalerNorth","Doctor","HighEndWeaponsAmmo","HeroVendor","VehicleFriendly","NeutralVendors","WholesalerSouth","LowEndWeaponsAmmo","BoatVendor","Bandit Trader","PlaneVendor"]}; + if (_worldName == "panthera2") exitWith {["AirVehiclesF","WholesalerWest","HeroVehicles","NeutralAirVehicles","Boats","NeutralTraders","NeutralTraderCity2","WholesaleSouth","PlanicaTraders","IslandVehiclePartsVendors"]}; + if (_worldName == "smd_sahrani_a2") exitWith {["Tradercitycorazol","wholesaleSouth","boatTraderEast","BoatDealerSouth","AirVehicles","BanditDen","Ixel","BoatDealerEast","TradercityBag","HeroTrader"]}; + if (_worldName == "sara") exitWith {["Tradercitycorazol","wholesaleSouth","boatTraderEast","BoatDealerSouth","AirVehicles","BanditDen","Ixel","BoatDealerEast","TradercityBag","HeroTrader"]}; + if (_worldName == "fdf_isle1_a") exitWith {["wholesaleSouth","boatTraderEast","BoatDealerSouth","AirVehicles","BanditDen","Jesco","TradercityBash","HeroTrader"]}; + if (_worldName == "caribou") exitWith {["boatTraderEast","BoatDealerSouth","AirVehicles","BanditDen","NorthNeutralVendors","SouthNeutralVendors","HeroTrader","BlackMarket","SouthWestWholesale"]}; + if (_worldName == "lingor") exitWith {["RaceTrack","RepairGuy","PlaneVendor","Wholesale","HighWeapons/ammo","Parts","Choppers","lowEndCars","LowEndWeapons","HighEndCars","MedicalandBags","Wholesaler","BagsNFood","Wholesalers","DirtTrackVendor","OffRoad4x4","BoatVendor","BoatVendor1","BoatVendor2","BagVendor1","BagVendor2","Doctor2","BanditTrader","HeroTrader"]}; + if (_worldName == "dingor") exitWith {["RaceTrack","RepairGuy","PlaneVendor","Wholesale","HighWeapons/ammo","Parts","Choppers","lowEndCars","LowEndWeapons","HighEndCars","MedicalandBags","Wholesaler","BagsNFood","Wholesalers","DirtTrackVendor","OffRoad4x4","BoatVendor","BoatVendor1","BoatVendor2","BagVendor1","BagVendor2","Doctor2","BanditTrader","HeroTrader"]}; + if (_worldName == "takistan") exitWith {["tradercitykush","Trader_City_Nur","Trader_City_Garm","Wholesaler","Wholesaler_1","Airplane Dealer","BanditTrader","BlackMarketVendor"]}; + if (_worldName == "fapovo") exitWith {["BanditTrader","AirVehicleUnarmed","TraderCity1","TraderCity2","Wholesaler","BanditVendor","HeroVendor","BoatVendor"]}; + if (_worldName == "zargabad") exitWith {["HeroCamp","BanditCamp"]}; + if (_worldName == "isladuala") exitWith {["Trader City Camara","st_3","st_4","st_3_1","st_3_1_1","st_3_1_1_1","st_3_2","st_3_2_1","st_3_2_2","st_3_2_3","st_3_2_3_1"]}; + if (_worldName == "cmr_ovaron") exitWith {["AirVehiclesF","WholesalerWest","HeroVehicles","NeutralAirVehicles","Boats","NeutralTraders","NeutralTraderCity2","WholesaleSouth","PlanicaTraders","IslandVehiclePartsVendors"]}; + if (_worldName == "shapur_baf") exitWith {["Safe Zone","test"]}; + [] + }; + + _scanTargets = if (!isNil "serverTraders") then {serverTraders} else {["CAManBase"]}; + + for "_i" from 0 to ((count _trader_markers) - 1) do { + _traderPos = (getMarkerPos (_trader_markers select _i)); + if (((_traderPos select 0) != 0) && {((_traderPos select 1) != 0)}) then { + if (DZAI_dynAISpawns) then {_blacklist = createLocation ["Strategic",_traderPos,250,250];}; + _nearbyUnits = _traderPos nearEntities [_scanTargets,250]; + { + if ((local _x) && {!simulationEnabled _x}) then { + _x setCaptive true; + }; + } count _nearbyUnits; + }; + uiSleep 0.01; + }; +}; + +for "_i" from 0 to ((count _cfgWorldName) -1) do { + _allPlaces set [(count _allPlaces),configName (_cfgWorldName select _i)]; + //diag_log format ["DEBUG :: Added location %1 to allPlaces array.",configName (_cfgWorldName select _i)]; +}; + +{ + _placeType = getText (_cfgWorldName >> _x >> "type"); + if (_placeType in ["NameCityCapital","NameCity","NameVillage","NameLocal"]) then { + _placeName = getText (_cfgWorldName >> _x >> "name"); + _placePos = [] + getArray (_cfgWorldName >> _x >> "position"); + _isAllowedPos = ((({(_placePos distance (getMarkerPos _x)) < 300} count _trader_markers) == 0) && {({(_placePos distance (getMarkerPos _x)) < ((getMarkerSize _x) select 0)} count DZAI_waypointBlacklist) == 0}); + if (_placeType != "NameLocal") then { + _blacklist = createLocation ["Strategic",_placePos,600,600]; + if (_isAllowedPos) then { + DZAI_locationsLand set [(count DZAI_locationsLand),[_placeName,_placePos,_placeType]]; //Location Name, Position, Type. + }; + }; + if (_isAllowedPos) then { + DZAI_locations set [(count DZAI_locations),[_placeName,_placePos,_placeType]]; //Location Name, Position, Type. + }; + }; + if ((_forEachIndex % 10) == 0) then {uiSleep 0.05}; +} forEach _allPlaces; + +DZAI_locations_ready = true; + +if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Location configuration completed with %1 locations found in %2 seconds.",(count DZAI_locations),(diag_tickTime - _startTime)]}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_playerspawn_areas.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_playerspawn_areas.sqf new file mode 100755 index 0000000..5ab55f5 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_playerspawn_areas.sqf @@ -0,0 +1,9 @@ + +_index = 0; +while {(getMarkerColor ("spawn" + (str _index))) != ""} do { + _markerPos = getMarkerPos ("spawn" + (str _index)); + _blacklist = createLocation ["Strategic",_markerPos,600,600]; + _index = _index + 1; + uiSleep 0.5; +}; +if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Created %1 dynamic spawn blacklist areas for new player spawn areas.",_index]}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_veh_patrols.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_veh_patrols.sqf new file mode 100755 index 0000000..76cbbe3 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/setup_veh_patrols.sqf @@ -0,0 +1,61 @@ + +waitUntil {uiSleep 0.1; (!isNil "DZAI_locations_ready" && {!isNil "DZAI_classnamesVerified"})}; + +if (DZAI_maxHeliPatrols > 0) then { + _nul = [] spawn { + for "_i" from 0 to ((count DZAI_heliList) - 1) do { + _heliType = (DZAI_heliList select _i) select 0; + _amount = (DZAI_heliList select _i) select 1; + + if ([_heliType,"vehicle"] call DZAI_checkClassname) then { + for "_j" from 1 to _amount do { + DZAI_heliTypesUsable set [count DZAI_heliTypesUsable,_heliType]; + }; + } else { + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: %1 attempted to spawn invalid vehicle type %2.",__FILE__,_heliType];}; + }; + }; + + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Assembled helicopter list: %1",DZAI_heliTypesUsable];}; + + _maxHelis = (DZAI_maxHeliPatrols min (count DZAI_heliTypesUsable)); + for "_i" from 1 to _maxHelis do { + _index = floor (random (count DZAI_heliTypesUsable)); + _heliType = DZAI_heliTypesUsable select _index; + _nul = _heliType spawn DZAI_spawnVehiclePatrol; + DZAI_heliTypesUsable set [_index,objNull]; + DZAI_heliTypesUsable = DZAI_heliTypesUsable - [objNull]; + if (_i < _maxHelis) then {uiSleep 20}; + }; + }; + uiSleep 5; +}; + +if (DZAI_maxLandPatrols > 0) then { + _nul = [] spawn { + for "_i" from 0 to ((count DZAI_vehList) - 1) do { + _vehType = (DZAI_vehList select _i) select 0; + _amount = (DZAI_vehList select _i) select 1; + + if ([_vehType,"vehicle"] call DZAI_checkClassname) then { + for "_j" from 1 to _amount do { + DZAI_vehTypesUsable set [count DZAI_vehTypesUsable,_vehType]; + }; + } else { + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: %1 attempted to spawn invalid vehicle type %2.",__FILE__,_vehType];}; + }; + }; + + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Assembled vehicle list: %1",DZAI_vehTypesUsable];}; + + _maxVehicles = (DZAI_maxLandPatrols min (count DZAI_vehTypesUsable)); + for "_i" from 1 to _maxVehicles do { + _index = floor (random (count DZAI_vehTypesUsable)); + _vehType = DZAI_vehTypesUsable select _index; + _nul = _vehType spawn DZAI_spawnVehiclePatrol; + DZAI_vehTypesUsable set [_index,objNull]; + DZAI_vehTypesUsable = DZAI_vehTypesUsable - [objNull]; + if (_i < _maxVehicles) then {uiSleep 20}; + }; + }; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/verifyTables.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/verifyTables.sqf new file mode 100755 index 0000000..b705e5c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/scripts/verifyTables.sqf @@ -0,0 +1,101 @@ +#define WEAPON_BANNED_STRING "bin\config.bin/CfgWeapons/FakeWeapon" +#define VEHICLE_BANNED_STRING "bin\config.bin/CfgVehicles/Banned" +#define MAGAZINE_BANNED_STRING "bin\config.bin/CfgMagazines/FakeMagazine" + +private["_verified","_errorFound","_startTime"]; +//waitUntil {sleep 0.5; !isNil "DZAI_weaponsInitialized"}; + +_startTime = diag_tickTime; + +_verified = []; + +_index = 4; +while {(typeName (missionNamespace getVariable ("DZAI_Rifles"+str(_index)))) == "ARRAY"} do { + DZAI_tableChecklist set [count DZAI_tableChecklist,("DZAI_Rifles"+str(_index))]; + _index = _index + 1; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Found custom weapon array %1.",("DZAI_Rifles"+str(_index))]}; +}; + +{ + _array = missionNamespace getVariable [_x,[]]; + _errorFound = false; + { + if !(_x in _verified) then { + call { + if (isClass (configFile >> "CfgWeapons" >> _x)) exitWith { + if (((str(inheritsFrom (configFile >> "CfgWeapons" >> _x))) == WEAPON_BANNED_STRING) or {(getNumber (configFile >> "CfgWeapons" >> _x >> "scope")) == 0}) then { + diag_log format ["[DZAI] Removing invalid classname: %1.",_x]; + _array set [_forEachIndex,""]; + if (!_errorFound) then {_errorFound = true}; + } else { + _verified set [count _verified,_x]; + }; + }; + if (isClass (configFile >> "CfgMagazines" >> _x)) exitWith { + if (((str(inheritsFrom (configFile >> "CfgMagazines" >> _x))) == MAGAZINE_BANNED_STRING) or {(getNumber (configFile >> "CfgMagazines" >> _x >> "scope")) == 0}) then { + diag_log format ["[DZAI] Removing invalid classname: %1.",_x]; + _array set [_forEachIndex,""]; + if (!_errorFound) then {_errorFound = true}; + } else { + _verified set [count _verified,_x]; + }; + }; + if (isClass (configFile >> "CfgVehicles" >> _x)) exitWith { + if (((str(inheritsFrom (configFile >> "CfgVehicles" >> _x))) == VEHICLE_BANNED_STRING) or {(getNumber (configFile >> "CfgVehicles" >> _x >> "scope")) == 0}) then { + diag_log format ["[DZAI] Removing banned classname: %1.",_x]; + _array set [_forEachIndex,""]; + if (!_errorFound) then {_errorFound = true}; + } else { + _verified set [count _verified,_x]; + }; + }; + diag_log format ["[DZAI] Removing invalid classname: %1.",_x]; //Default case - if classname doesn't exist at all + _array set [_forEachIndex,""]; + if (!_errorFound) then {_errorFound = true}; + }; + }; + } forEach _array; + if (_errorFound) then { + _array = _array - [""]; + missionNamespace setVariable [_x,_array]; + diag_log format ["[DZAI] Contents of %1 failed verification. Invalid entries removed.",_x]; + //diag_log format ["DEBUG :: Corrected contents of %1: %2.",_x,_array]; + //diag_log format ["DEBUG :: Comparison check of %1: %2.",_x,missionNamespace getVariable [_x,[]]]; + }; +} forEach DZAI_tableChecklist; + +if (DZAI_extendedVerify) then { + { + if ( + !(_x isKindOf "CAManBase") or + {(getNumber (configFile >> "CfgVehicles" >> _x >> "side")) != 1} or + {(getNumber (configFile >> "CfgVehicles" >> _x >> "canCarryBackPack")) != 1} + ) then { + diag_log format ["[DZAI] Removing invalid classname from DZAI_BanditTypes array: %1.",_x]; + DZAI_BanditTypes set [_forEachIndex,""]; + }; + } forEach DZAI_BanditTypes; + + { + if !((_x select 0) isKindOf "Air") then { + diag_log format ["[DZAI] Removing invalid classname from DZAI_heliList array: %1.",(_x select 0)]; + DZAI_heliList set [_forEachIndex,""]; + }; + } forEach DZAI_heliList; + DZAI_heliList = DZAI_heliList - [""]; + + { + if !((_x select 0) isKindOf "LandVehicle") then { + diag_log format ["[DZAI] Removing invalid classname from DZAI_vehList array: %1.",(_x select 0)]; + DZAI_vehList set [_forEachIndex,""]; + }; + } forEach DZAI_vehList; + DZAI_vehList = DZAI_vehList - [""]; +}; + +//Anticipate cases where all elements of an array are invalid +if ((count DZAI_BanditTypes) == 0) then {DZAI_BanditTypes = ["Survivor2_DZ"]}; //Failsafe in case all AI skin classnames are invalid. + +diag_log format ["[DZAI] Verified %1 unique classnames in %2 seconds.",(count _verified),(diag_tickTime - _startTime)]; + +DZAI_classnamesVerified = true; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/despawnBandits.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/despawnBandits.sqf new file mode 100755 index 0000000..a4e207a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/despawnBandits.sqf @@ -0,0 +1,98 @@ +/* + despawnBandits + + Description: Deletes all AI units spawned by a trigger once all players leave the trigger area. + + Usage: Called by a static trigger when all players have left the trigger area. + + Last updated: 10:16 PM 5/26/2014 + +*/ +private ["_trigger","_grpArray","_isCleaning","_grpCount","_debugMarkers","_triggerStatements","_deactStatements","_permDelete"]; +if (!isServer) exitWith {}; //Execute script only on server. + +_trigger = _this select 0; //Get the trigger object + +_grpArray = _trigger getVariable ["GroupArray",[]]; //Find the groups spawned by the trigger. +_isCleaning = _trigger getVariable ["isCleaning",true]; //Find whether or not the trigger has been marked for cleanup. Triggers will flag themselves for cleaning after a successful spawn/respawn with setVariable ["isCleaning",false]; +_triggerStatements = triggerStatements _trigger; +_grpCount = count _grpArray; + +if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Trigger %1 Group Array: %2. isCleaning: %3. In static trigger array: %4",triggerText _trigger,_grpArray,_isCleaning,(_trigger in DZAI_staticTriggerArray)];}; +if (!(_trigger in DZAI_staticTriggerArray) or {_isCleaning}) exitWith {if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Trigger %1 has a despawn script already running. Exiting despawn script.",triggerText _trigger];};}; + +_trigger setVariable["isCleaning",true]; //Mark the trigger as being in a cleanup state so that subsequent requests to despawn for the same trigger will not run. +_deactStatements = _triggerStatements select 2; +_triggerStatements set [2,""]; +_trigger setTriggerStatements _triggerStatements; +_debugMarkers = ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}); + +if (DZAI_debugLevel > 1) then {diag_log format["DZAI Extended Debug: No players remain in trigger area at %3. Deleting %1 AI groups in %2 seconds.",_grpCount, DZAI_despawnWait,(triggerText _trigger)];}; + +if (_debugMarkers) then { + _nul = _trigger spawn { + _tMarker = str (_this); + _tMarker setMarkerText "STATIC TRIGGER (DESPAWNING)"; + _tMarker setMarkerColor "ColorOrange"; + }; +}; + +if (({isNull _x} count _grpArray) < _grpCount) then {uiSleep DZAI_despawnWait}; + +if (isNull _trigger) exitWith {[_trigger,"DZAI_staticTriggerArray"] call DZAI_updateSpawnCount}; + +if ((triggerActivated _trigger) && {({isNull _x} count _grpArray) < _grpCount}) exitWith { //Exit script if trigger has been reactivated since DZAI_despawnWait seconds has passed. + _trigger setVariable ["isCleaning",false]; //Allow next despawn request. + _triggerStatements set [2,_deactStatements]; + _trigger setTriggerStatements _triggerStatements; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: A player has entered the trigger area at %1. Cancelling despawn script.",(triggerText _trigger)];}; + if (_debugMarkers) then { + _nul = _trigger spawn { + _tMarker = str (_this); + _tMarker setMarkerText "STATIC TRIGGER (ACTIVE)"; + _tMarker setMarkerColor "ColorRed"; + }; + }; +}; + +_trigger setTriggerStatements ["this","true","false"]; //temporarily disable trigger from activating or deactivating while cleanup is performed +_permDelete = _trigger getVariable ["permadelete",false]; +{ + if (!isNull _x) then { + _groupSize = (_x getVariable ["groupSize",0]); + if ((_groupSize > 0) or {_permDelete}) then { //If trigger is not set to permanently despawn, then ignore empty groups. + //(DZAI_numAIUnits - _groupSize) call DZAI_updateUnitCount; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Despawning group %1 with %2 active units.",_x,(_x getVariable ["groupSize",0])];}; + //_x call DZAI_deleteGroup; + _x setVariable ["GroupSize",-1]; + _grpArray set [_forEachIndex,grpNull]; + }; + }; +} forEach _grpArray; + +[_trigger,"DZAI_staticTriggerArray"] call DZAI_updateSpawnCount; +if !(_permDelete) then { + //Cleanup variables attached to trigger + _trigger setVariable ["GroupArray",_grpArray - [grpNull]]; + _trigger setVariable ["isCleaning",false]; + _trigger setTriggerArea [600,600,0,false]; + _trigger setTriggerStatements (_trigger getVariable "triggerStatements"); //restore original trigger statements + if (_debugMarkers) then { + _nul = _trigger spawn { + _tMarker = str (_this); + _tMarker setMarkerText "STATIC TRIGGER (INACTIVE)"; + _tMarker setMarkerColor "ColorGreen"; + }; + }; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Despawned AI units at %1. Reset trigger's group array to: %2.",(triggerText _trigger),_trigger getVariable "GroupArray"];}; + //diag_log format ["DEBUG :: Despawned trigger %1 has statements %2.",triggerText _trigger,triggerStatements _trigger]; +} else { + if (_debugMarkers) then { + deleteMarker (str (_trigger)); + }; + deleteMarker (_trigger getVariable ["spawnmarker",""]); + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Permanently deleting a static spawn at %1.",triggerText _trigger]}; + deleteVehicle _trigger; +}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/despawnBandits_dynamic.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/despawnBandits_dynamic.sqf new file mode 100755 index 0000000..9f9e4d8 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/despawnBandits_dynamic.sqf @@ -0,0 +1,87 @@ +/* + despawnBandits_dynamic + + Last updated: 10:57 PM 3/10/2014 + +*/ + +private ["_trigger","_triggerLocation","_isForceDespawn","_grpArray","_canDespawn","_triggerExists","_debugMarkers","_triggerStatements","_deactStatements"]; +if (!isServer) exitWith {}; //Execute script only on server. + +_trigger = _this select 0; //Get the trigger object +_isForceDespawn = if ((count _this) > 1) then {_this select 1} else {false}; + +_triggerStatements = triggerStatements _trigger; +_grpArray = _trigger getVariable ["GroupArray",[]]; //Find the groups spawned by the trigger. Or set an empty group array if none are found. + +if ((_trigger getVariable ["isCleaning",false]) && (!_isForceDespawn)) exitWith {if (DZAI_debugLevel > 1) then {diag_log "DZAI Extended Debug: Despawn script is already running. Exiting despawn script.";};}; + +_trigger setVariable["isCleaning",true]; //Mark the trigger as being in a cleanup state so that subsequent requests to despawn for the same trigger will not run. +_deactStatements = _triggerStatements select 2; +_trigger setTriggerStatements (_triggerStatements set [2,""]); +_canDespawn = true; +_triggerExists = true; +_debugMarkers = ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}); + +if (_isForceDespawn) then { + _trigger setTriggerStatements ["this","",""]; + if (DZAI_debugLevel > 1) then {diag_log format["DZAI Extended Debug: All units of dynamic AI group spawned by trigger %1 have been killed. Starting force despawn in 30 seconds.",triggerText _trigger];}; + uiSleep 30; +} else { + if (DZAI_debugLevel > 1) then {diag_log format["DZAI Extended Debug: No players remain in %1. Deleting spawned AI in %2 seconds.",triggerText _trigger,DZAI_dynDespawnWait];}; + if (_debugMarkers) then { + _nul = _trigger spawn { + _marker = str(_this); + _marker setMarkerColor "ColorGreenAlpha"; + _marker setMarkerAlpha 0.7; //Light green: Active trigger awaiting despawn. + }; + }; + uiSleep DZAI_dynDespawnWait; //Wait some time before deleting units. (amount of time to allow units to exist when the trigger area has no players) + + if !(isNull _trigger) then { //Check if dynamic spawn area has been force-despawned (deleted). Force despawn will happen when all units have been killed. + _canDespawn = ((!triggerActivated _trigger) or {isNull (_grpArray select 0)}); //Can despawn dynamic spawn area if trigger isn't activated or spawned group is null + } else { + _triggerExists = false; + }; +}; + +if !(_triggerExists) exitWith {}; //Cancel despawn process if it has already happened + +if (_canDespawn) then { + _trigger setTriggerStatements ["this","",""]; //temporarily disable trigger from activating or deactivating while cleanup is performed + _grpArray = _grpArray - [grpNull]; + { + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Deleting group %1 with %2 active units.",_x,(_x getVariable ["groupSize",0])];}; + //(DZAI_numAIUnits - (_x getVariable ["groupSize",0])) call DZAI_updateUnitCount; + //_x call DZAI_deleteGroup; + _x setVariable ["GroupSize",-1]; + } forEach _grpArray; + + //Remove dynamic trigger from global dyn trigger array and clean up trigger + [_trigger,"DZAI_dynTriggerArray"] call DZAI_updateSpawnCount; + if (_debugMarkers) then {deleteMarker str(_trigger)}; + + //Begin deletion timer for temporary blacklist area and add it to global dyn location array to allow deletion + _triggerLocation = _trigger getVariable "triggerLocation"; + _triggerLocation setVariable ["deletetime",(diag_tickTime + 900)]; + DZAI_tempBlacklist set [(count DZAI_tempBlacklist),_triggerLocation]; + if (_trigger in DZAI_reinforcePlaces) then {DZAI_reinforcePlaces = DZAI_reinforcePlaces - [_trigger]}; + + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Removing expired dynamic trigger at %1.",mapGridPosition _trigger];}; + deleteVehicle _trigger; + + true +} else { + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: A player has entered the trigger area at %1. Cancelling despawn script.",(triggerText _trigger)];}; //Exit script if trigger has been reactivated since DZAI_dynDespawnWait seconds has passed. + _trigger setVariable ["isCleaning",false]; //Allow next despawn request. + _triggerStatements set [2,_deactStatements]; + _trigger setTriggerStatements _triggerStatements; + if (_debugMarkers) then { + _nul = _trigger spawn { + _marker = str(_this); + _marker setMarkerColor "ColorOrange"; + _marker setMarkerAlpha 0.9; //Reset trigger indicator color to Active. + }; + }; + false +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/despawnBandits_random.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/despawnBandits_random.sqf new file mode 100755 index 0000000..bc4474f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/despawnBandits_random.sqf @@ -0,0 +1,78 @@ + +private ["_trigger","_triggerLocation","_isForceDespawn","_grpArray","_canDespawn","_triggerExists","_debugMarkers","_triggerStatements","_deactStatements"]; +if (!isServer) exitWith {}; //Execute script only on server. + +_trigger = _this select 0; //Get the trigger object +_isForceDespawn = if ((count _this) > 1) then {_this select 1} else {false}; + +_triggerStatements = triggerStatements _trigger; +_grpArray = _trigger getVariable ["GroupArray",[]]; //Find the groups spawned by the trigger. Or set an empty group array if none are found. + +if ((_trigger getVariable ["isCleaning",false]) && (!_isForceDespawn)) exitWith {if (DZAI_debugLevel > 1) then {diag_log "DZAI Extended Debug: Despawn script is already running. Exiting despawn script.";};}; + +_trigger setVariable["isCleaning",true]; //Mark the trigger as being in a cleanup state so that subsequent requests to despawn for the same trigger will not run. +_deactStatements = _triggerStatements select 2; +_trigger setTriggerStatements (_triggerStatements set [2,""]); +_canDespawn = true; +_triggerExists = true; +_debugMarkers = ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}); + +if (_isForceDespawn) then { + _trigger setTriggerStatements ["this","",""]; + if (DZAI_debugLevel > 1) then {diag_log format["DZAI Extended Debug: All units of random AI group spawned by trigger %1 have been killed. Starting force despawn in 30 seconds.",triggerText _trigger];}; + uiSleep 30; +} else { + if (DZAI_debugLevel > 1) then {diag_log format["DZAI Extended Debug: No players remain in %1. Deleting spawned AI in %2 seconds.",triggerText _trigger,DZAI_randDespawnWait];}; + if (_debugMarkers) then { + _nul = _trigger spawn { + _marker = str(_this); + _marker setMarkerColor "ColorGreenAlpha"; + _marker setMarkerAlpha 0.7; //Light green: Active trigger awaiting despawn. + }; + }; + uiSleep DZAI_randDespawnWait; //Wait some time before deleting units. (amount of time to allow units to exist when the trigger area has no players) + + if !(isNull _trigger) then { //Check if random spawn area has been force-despawned (deleted). Force despawn will happen when all units have been killed. + _canDespawn = ((!triggerActivated _trigger) or {isNull (_grpArray select 0)}); //Can despawn random spawn area if trigger isn't activated or spawned group is null + } else { + _triggerExists = false; + }; +}; + +if !(_triggerExists) exitWith {}; //Cancel despawn process if it has already happened + +if (_canDespawn) then { + _trigger setTriggerStatements ["this","",""]; //temporarily disable trigger from activating or deactivating while cleanup is performed + _grpArray = _grpArray - [grpNull]; + { + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Deleting group %1 with %2 active units.",_x,(_x getVariable ["groupSize",0])];}; + _x setVariable ["GroupSize",-1]; + } forEach _grpArray; + + //Remove random trigger from global dyn trigger array and clean up trigger + [_trigger,"DZAI_randTriggerArray"] call DZAI_updateSpawnCount; + if (_debugMarkers) then {deleteMarker str(_trigger)}; + + //Begin deletion timer for temporary blacklist area and add it to global dyn location array to allow deletion + _triggerLocation = _trigger getVariable "triggerLocation"; + _triggerLocation setVariable ["deletetime",(diag_tickTime + 900)]; + DZAI_tempBlacklist set [(count DZAI_tempBlacklist),_triggerLocation]; + + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Removing expired random trigger at %1.",mapGridPosition _trigger];}; + deleteVehicle _trigger; + + true +} else { + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: A player has entered the trigger area at %1. Cancelling despawn script.",(triggerText _trigger)];}; //Exit script if trigger has been reactivated since DZAI_randDespawnWait seconds has passed. + _trigger setVariable ["isCleaning",false]; //Allow next despawn request. + _triggerStatements set [2,_deactStatements]; + _trigger setTriggerStatements _triggerStatements; + if (_debugMarkers) then { + _nul = _trigger spawn { + _marker = str(_this); + _marker setMarkerColor "ColorOrange"; + _marker setMarkerAlpha 0.9; //Reset trigger indicator color to Active. + }; + }; + false +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/respawnBandits.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/respawnBandits.sqf new file mode 100755 index 0000000..27a319f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/respawnBandits.sqf @@ -0,0 +1,56 @@ +/* + respawnBandits + + Usage: [_unitGroup,_trigger,_maxUnits] call respawnBandits; + + Description: Called internally by fnc_banditAIRespawn. Calls fnc_createAI to respawn a unit near a randomly selected building from a stored reference location. + + Last updated: 8:38 AM 10/23/2013 +*/ + +private ["_unitGroup","_trigger","_grpArray","_patrolDist","_equipType","_spawnPositions","_spawnPos","_unit","_pos","_startTime","_maxUnits","_totalAI","_aiGroup","_weapongrade"]; +if (!isServer) exitWith {}; + +_startTime = diag_tickTime; + +_unitGroup = _this select 0; +_trigger = _this select 1; +_maxUnits = _this select 2; + +_patrolDist = _trigger getVariable ["patrolDist",150]; +_equipType = _trigger getVariable ["equipType",1]; +_spawnPositions = _trigger getVariable ["locationArray",[]]; + +_totalAI = 0; +_spawnPos = []; +if ((_trigger getVariable ["spawnChance",1]) call DZAI_chance) then { + _totalAI = ((_maxUnits select 0) + round(random (_maxUnits select 1))); + _spawnPos = if ((count _spawnPositions) > 0) then {_spawnPositions call DZAI_findSpawnPos} else {[(ASLtoATL getPosASL _trigger),random (_patrolDist),random(360),0] call SHK_pos}; +}; + +if ((_totalAI == 0) or {((count _spawnPos) == 0)}) exitWith { + [0,_trigger,_unitGroup] call fnc_respawnHandler; + false +}; + +//Respawn the group +_weapongrade = _equipType call DZAI_getWeapongrade; +_aiGroup = [_totalAI,_unitGroup,_spawnPos,_trigger,_weapongrade] call DZAI_setup_AI; +if (isNull _unitGroup) then {diag_log format ["DZAI Error :: Respawned group at %1 was null group. New group reassigned: %2.",triggerText _trigger,_aiGroup]; _unitGroup = _aiGroup}; + +if (_patrolDist > 1) then { + if ((count (waypoints _unitGroup)) > 1) then { + _unitGroup setCurrentWaypoint ((waypoints _unitGroup) call BIS_fnc_selectRandom2); + } else { + _nul = [_unitGroup,(ASLtoATL getPosASL _trigger),_patrolDist] spawn DZAI_BIN_taskPatrol; + }; +} else { + [_unitGroup, 0] setWaypointType "HOLD"; +}; + +if ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}) then { + _nul = _trigger call DZAI_addMapMarker; +}; +if (DZAI_debugLevel > 0) then {diag_log format["DZAI Debug: %1 AI units respawned for group %2 (weapongrade %3) at %4 in %5 seconds (respawnBandits).",_totalAI,_unitGroup,_weapongrade,(triggerText _trigger),diag_tickTime - _startTime];}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/respawnHandler1.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/respawnHandler1.sqf new file mode 100755 index 0000000..cc68199 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/respawnHandler1.sqf @@ -0,0 +1,61 @@ +//Respawn handler stage 1 + +private ["_respawnSleep","_nextRespawnTime","_mode"]; + +_respawnSleep = 0; +_nextRespawnTime = 0; +_mode = _this select 0; + +call { + if (_mode == 0) exitWith { + //Infantry AI respawn + _trigger = _this select 1; //spawn area to respawn + _unitGroup = _this select 2; //infantry group to respawn + _fastMode = if ((count _this) > 3) then {_this select 3} else {false}; //shorter wait time if retrying a spawn + _respawnSleep = _trigger getVariable ["respawnTime",(DZAI_respawnTimeMin + (random DZAI_respawnTimeVariance))]; //Calculate wait time for respawn. Respawn time may be individually defined for custom spawns. + if (_fastMode) then {_respawnSleep = (_respawnSleep/2) max 60}; + _nextRespawnTime = (diag_tickTime + _respawnSleep); //Determine time of next respawn + DZAI_respawnQueue set [(count DZAI_respawnQueue),[diag_tickTime + _respawnSleep,_mode,_trigger,_unitGroup]]; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Added group %1 to respawn queue. Queue position %2. Wait Time %3 (respawnHandler)",_unitGroup,(count DZAI_respawnQueue),_respawnSleep];}; + }; + if (_mode == 1) exitWith { + //Custom vehicle AI respawn + _spawnParams = _this select 1; //parameters used to call DZAI_spawn_vehicle + _respawnSleep = if ((count _spawnParams) > 5) then {_spawnParams select 5} else {600}; //calculate respawn time + _nextRespawnTime = (diag_tickTime + _respawnSleep); //Determine time of next respawn + DZAI_respawnQueue set [(count DZAI_respawnQueue),[diag_tickTime + _respawnSleep,_mode,_spawnParams]]; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Added custom AI vehicle %1 patrol to respawn queue. Queue position %2. Wait Time %3 (respawnHandler)",(_spawnParams select 1),(count DZAI_respawnQueue),_respawnSleep];}; + }; + if (_mode == 2) exitWith { + //Vehicle patrol AI respawn + _vehicleType = _this select 1; + _fastMode = if ((count _this) > 2) then {_this select 2} else {false}; //shorter wait time if retrying a spawn + if (_vehicleType isKindOf "Air") then { + _respawnSleep = (DZAI_respawnTMinA + random DZAI_respawnTimeVarAir); + } else { + _respawnSleep = (DZAI_respawnTMinL + random DZAI_respawnTimeVarLand); + if (_fastMode) then {_respawnSleep = (_respawnSleep/2) max 180}; + }; + _nextRespawnTime = (diag_tickTime + _respawnSleep); //Determine time of next respawn + DZAI_respawnQueue set [(count DZAI_respawnQueue),[diag_tickTime + _respawnSleep,_mode,_vehicleType]]; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Added AI vehicle patrol type %1 to respawn queue. Queue position %2. Wait Time %3 (respawnHandler)",_vehicleType,(count DZAI_respawnQueue),_respawnSleep];}; + }; +}; + +if (!isNil "DZAI_respawnActive") exitWith {}; //If the first respawn has already occured, no need to modify the initial wait time. + +if (!isNil "DZAI_nextRespawnTime") then { + if (_nextRespawnTime < DZAI_nextRespawnTime) then { //If the newest respawn is scheduled to happen sooner than the next closest respawn, reduce the initial wait time appropriately. + DZAI_nextRespawnTime = _nextRespawnTime; //Time of next spawn + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Decreased time to next respawn to %1 seconds.",_respawnSleep];}; + }; +} else { + DZAI_nextRespawnTime = _nextRespawnTime; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Time to first respawn set to %1 seconds.",_respawnSleep];}; +}; + +if (!isNil "DZAI_queueActive") exitWith {}; +DZAI_queueActive = true; //The respawn queue is established, so don't create another one until it's finished. +DZAI_respawnHandlerHandle = [] spawn fnc_respawnHandler2; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/respawnHandler2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/respawnHandler2.sqf new file mode 100755 index 0000000..eff4e4a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/respawnHandler2.sqf @@ -0,0 +1,129 @@ +//Respawn handler stage 2 +#define PROCESSING_WAIT_TIME 5 //Minimum time delay between respawns. + +waitUntil {uiSleep 3; diag_tickTime > DZAI_nextRespawnTime}; + +DZAI_respawnActive = true; //First respawn is now being processed, so deny subsequent attempts to modify the initial wait time. +DZAI_queueActive = nil; +DZAI_nextRespawnTime = nil; + +while {(count DZAI_respawnQueue) > 0} do { + private ["_minDelay","_delay"]; + + _minDelay = -1; + //diag_log format ["DEBUG: Contents of respawn queue before cleanup stage 1: %1.",DZAI_respawnQueue]; + //Remove expired entries before proceeding. + { + if (((typeName (_x select 3)) == "GROUP") && {(isNull (_x select 3))}) then { + DZAI_respawnQueue set [_forEachIndex,objNull]; + }; + } forEach DZAI_respawnQueue; + //diag_log format ["DEBUG: Contents of respawn queue before cleanup stage 2: %1.",DZAI_respawnQueue]; + if (objNull in DZAI_respawnQueue) then { + DZAI_respawnQueue = DZAI_respawnQueue - [objNull]; + //diag_log "DEBUG :: Cleaned despawned groups from respawn queue."; + }; + //diag_log format ["DEBUG: Contents of respawn queue after cleanup: %1.",DZAI_respawnQueue]; + + //Begin examining queue entries. + for "_i" from 0 to ((count DZAI_respawnQueue) - 1) do { + _timeToRespawn = (DZAI_respawnQueue select _i) select 0; + //If enough time has passed to respawn the group. + if (diag_tickTime > _timeToRespawn) then { + _mode = (DZAI_respawnQueue select _i) select 1; + call { + if (_mode == 0) exitWith { + //Infantry AI respawn + _trigger = (DZAI_respawnQueue select _i) select 2; + _unitGroup = (DZAI_respawnQueue select _i) select 3; + _grpArray = _trigger getVariable ["GroupArray",[]]; + if ((_unitGroup in _grpArray) && {((_unitGroup getVariable ["GroupSize",0]) == 0)}) then { + if (((triggerStatements _trigger) select 1) == "") then { + //Trigger is active, so respawn the group + _maxUnits = _trigger getVariable ["maxUnits",[1,0]]; + _respawned = [_unitGroup,_trigger,_maxUnits] call fnc_respawnBandits; + if ((DZAI_debugLevel > 0) && {!_respawned}) then {diag_log format ["DZAI Debug: No units were respawned for group %1 at %2. Group %1 reinserted into respawn queue.",_unitGroup,(triggerText _trigger)];}; + } else { + //Trigger is inactive (despawned or deleted) so clean up group instead + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Spawn area %1 has already been despawned. Cleaning up group %2.",triggerText _trigger,_unitGroup]}; + _unitGroup call DZAI_deleteGroup; + if (!isNull _trigger) then { + _trigger setVariable ["GroupArray",_grpArray - [grpNull]]; + }; + }; + }; + }; + if (_mode == 1) exitWith { + //Custom vehicle AI respawn + _respawnParams = (DZAI_respawnQueue select _i) select 2; + _nul = _respawnParams spawn DZAI_spawnVehicle_custom; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Respawning custom AI vehicle patrol with params %1",((DZAI_respawnQueue select _i) select 2)]}; + }; + if (_mode == 2) exitWith { + //Vehicle AI patrol respawn + _vehicleTypeOld = (DZAI_respawnQueue select _i) select 2; + if (_vehicleTypeOld isKindOf "Air") then { + //Air-type vehicle AI patrol respawn + if ((count DZAI_heliTypesUsable) == 0) then { + _nul = _vehicleTypeOld spawn DZAI_spawnVehiclePatrol; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Respawning AI air vehicle patrol type %1.",_vehicleTypeOld]}; + } else { + DZAI_heliTypesUsable set [(count DZAI_heliTypesUsable),_vehicleTypeOld]; + _index = floor (random (count DZAI_heliTypesUsable)); + _vehicleTypeNew = DZAI_heliTypesUsable select _index; + _nul = _vehicleTypeNew spawn DZAI_spawnVehiclePatrol; + DZAI_heliTypesUsable set [_index,objNull]; + DZAI_heliTypesUsable = DZAI_heliTypesUsable - [objNull]; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Respawning AI air vehicle type patrol %1.",_vehicleTypeNew]}; + }; + } else { + if (_vehicleTypeOld isKindOf "LandVehicle") then { + //Land-type vehicle AI patrol respawn + if ((count DZAI_heliTypesUsable) == 0) then { + _nul = _vehicleTypeOld spawn DZAI_spawnVehiclePatrol; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Respawning AI land vehicle patrol type %1.",_vehicleTypeOld]}; + } else { + DZAI_vehTypesUsable set [(count DZAI_vehTypesUsable),_vehicleTypeOld]; + _index = floor (random (count DZAI_vehTypesUsable)); + _vehicleTypeNew = DZAI_vehTypesUsable select _index; + _nul = _vehicleTypeNew spawn DZAI_spawnVehiclePatrol; + DZAI_vehTypesUsable set [_index,objNull]; + DZAI_vehTypesUsable = DZAI_vehTypesUsable - [objNull]; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Respawning AI land vehicle patrol type %1.",_vehicleTypeNew]}; + }; + }; + }; + }; + }; + DZAI_respawnQueue set [_i,objNull]; + uiSleep PROCESSING_WAIT_TIME; + } else { + //Find shortest delay to next group respawn. + _delay = ((_timeToRespawn - diag_tickTime) max PROCESSING_WAIT_TIME); + //diag_log format ["DEBUG :: Comparing new respawn time %1 with previous %2.",_delay,_minDelay]; + if (_minDelay > 0) then { + //If next delay time is smaller than the current minimum delay, use it instead. + if (_delay < _minDelay) then { + _minDelay = _delay; + //diag_log format ["DEBUG :: Found shorter respawn interval: %1 seconds.",_minDelay]; + }; + } else { + //Initialize minimum delay to first found delay. + _minDelay = _delay; + //diag_log format ["DEBUG :: Set respawn interval to %1 seconds.",_minDelay]; + }; + }; + }; + //Remove processed entries + if (objNull in DZAI_respawnQueue) then { + DZAI_respawnQueue = DZAI_respawnQueue - [objNull]; + //diag_log "DEBUG :: Cleaned respawned groups from respawn queue."; + }; + if (_minDelay > -1) then { + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: %1 groups left in respawn queue. Next group is scheduled to respawn in %2 seconds.",(count DZAI_respawnQueue),_minDelay];}; + uiSleep _minDelay; + }; +}; + +DZAI_respawnActive = nil; +if (DZAI_debugLevel > 0) then {diag_log "DZAI Debug: Respawn queue is empty. Exiting respawn handler. (respawnHandler)";}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits.sqf new file mode 100755 index 0000000..9d3036c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits.sqf @@ -0,0 +1,99 @@ +/* + spawnBandits + + Usage: [_minAI, _addAI, _patrolDist, _trigger, _numGroups (optional)] spawn spawnBandits; + + Description: Called through (mapname)_config.sqf when a static trigger is activated by a player. + + Last updated: 8:38 AM 10/23/2013 +*/ + +private ["_minAI","_addAI","_patrolDist","_trigger","_equipType","_numGroups","_grpArray","_triggerPos","_startTime","_totalSpawned","_debugMarkers","_triggerStatements","_groupsActive"]; +if (!isServer) exitWith {}; + +_minAI = _this select 0; //Mandatory minimum number of AI units to spawn +_addAI = _this select 1; //Maximum number of additional AI units to spawn +_patrolDist = _this select 2; //Patrol radius from trigger center. +_trigger = _this select 3; //The trigger calling this script. +//_positionArray = _this select 4; //Array of manually-defined spawn points (markers). If empty, nearby buildings are used as spawn points. +_equipType = if ((count _this) > 5) then {_this select 5} else {1}; //(Optional) Select the item probability table to use +_numGroups = if ((count _this) > 6) then {_this select 6} else {1}; //(Optional) Number of groups of x number of units each to spawn + +_startTime = diag_tickTime; + +_grpArray = _trigger getVariable ["GroupArray",[]]; +_groupsActive = count _grpArray; +_debugMarkers = ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}); + +if (_groupsActive == _numGroups) exitWith { + _triggerStatements = (triggerStatements _trigger); + _triggerStatements set [1,""]; + _trigger setTriggerStatements _triggerStatements; + _trigger setTriggerArea [750,750,0,false]; + [_trigger,"DZAI_staticTriggerArray"] call DZAI_updateSpawnCount; + if (_debugMarkers) then { + _nul = _trigger call DZAI_addMapMarker; + }; + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Maximum number of groups already spawned at %1. Exiting spawn script (spawnBandits)",(triggerText _trigger)];}; +}; + +_trigger setTriggerArea [750,750,0,false]; //Expand trigger area to prevent players from quickly leaving and start respawn process immediately +_triggerPos = ASLtoATL getPosASL _trigger; + +//If trigger already has defined spawn points, then reuse them instead of recalculating new ones. +_locationArray = _trigger getVariable ["locationArray",[]]; +_totalSpawned = 0; + +//Spawn groups +for "_j" from 1 to (_numGroups - _groupsActive) do { + private ["_unitGroup","_spawnPos","_totalAI"]; + _totalAI = 0; + _spawnPos = []; + if ((_trigger getVariable ["spawnChance",1]) call DZAI_chance) then { + _totalAI = (_minAI + round(random _addAI)); + _spawnPos = if ((count _locationArray) > 0) then {_locationArray call DZAI_findSpawnPos} else {[(ASLtoATL getPosASL _trigger),random (_patrolDist),random(360),0] call SHK_pos}; + }; + + //If non-zero unit amount and valid spawn position, spawn group, otherwise add it to respawn queue. + _unitGroup = grpNull; + if ((_totalAI > 0) && {(count _spawnPos) > 1}) then { + _weapongrade = _equipType call DZAI_getWeapongrade; + _unitGroup = [_totalAI,_unitGroup,_spawnPos,_trigger,_weapongrade] call DZAI_setup_AI; + _totalSpawned = _totalSpawned + _totalAI; + if (_patrolDist > 1) then { + 0 = [_unitGroup,_triggerPos,_patrolDist] spawn DZAI_BIN_taskPatrol; + } else { + [_unitGroup, 0] setWaypointType "HOLD"; + }; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Spawned group %1 (weapongrade: %2) with %3 units.",_unitGroup,_weapongrade,_totalAI];}; + } else { + _unitGroup = [] call DZAI_createGroup; + _dummy = _unitGroup call DZAI_protectGroup; + _unitGroup setVariable ["GroupSize",0]; + _unitGroup setVariable ["trigger",_trigger]; + 0 = [0,_trigger,_unitGroup] call fnc_respawnHandler; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: No units spawned for group %1. Added group to respawn queue.",_unitGroup];}; + }; + + //Set group variables and add it to trigger's group array + _unitGroup setVariable ["unitType","static"]; + _unitGroup allowFleeing 0; + _grpArray set [count _grpArray,_unitGroup]; +}; + +_triggerStatements = (triggerStatements _trigger); +if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Trigger group array updated to: %1.",_trigger getVariable "GroupArray"]}; +_trigger setVariable ["isCleaning",false]; +_triggerStatements set [1,""]; +_trigger setTriggerStatements _triggerStatements; +[_trigger,"DZAI_staticTriggerArray"] call DZAI_updateSpawnCount; + +if (DZAI_debugLevel > 0) then {diag_log format["DZAI Debug: Spawned %1 new AI groups (%2 units total) in %3 seconds at %4 (spawnBandits).",_numGroups,_totalSpawned,(diag_tickTime - _startTime),(triggerText _trigger)];}; + +if (_debugMarkers) then { + _nul = _trigger call DZAI_addMapMarker; +}; + +//diag_log format ["DEBUG :: Activated trigger %1 has statements %2.",triggerText _trigger,triggerStatements _trigger]; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_custom.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_custom.sqf new file mode 100755 index 0000000..927cf8d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_custom.sqf @@ -0,0 +1,75 @@ +/* + spawnBandits_custom + + Usage: + + Description: DZAI custom spawn function (DZAI_spawn). + + Last updated: 6:00 PM 10/24/2013 +*/ + +private ["_patrolDist","_trigger","_grpArray","_triggerPos","_equipType","_weapongrade","_totalAI","_startTime","_tMarker","_unitGroup","_spawnPos","_totalAI"]; +if (!isServer) exitWith {}; + +_startTime = diag_tickTime; + +_totalAI = _this select 0; +//_this select 1; +_patrolDist = _this select 2; +_trigger = _this select 3; +_weapongrade = _this select 4; +//_spawnMarker = _this select 5; + +_grpArray = _trigger getVariable ["GroupArray",[]]; +if (count _grpArray > 0) exitWith {if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Active groups found at %1. Exiting spawn script (spawnBandits)",(triggerText _trigger)];};}; + +_trigger setTriggerArea [750,750,0,false]; +_triggerPos = ASLtoATL getPosASL _trigger; + +if (DZAI_debugLevel > 0) then {diag_log format["DZAI Debug: Processed static trigger spawn data in %1 seconds (Custom Spawn).",(diag_tickTime - _startTime)];}; + +_startTime = diag_tickTime; + +if !(_trigger getVariable ["respawn",true]) then { + _maxUnits = _trigger getVariable ["maxUnits",[0,0]]; + _totalAINew = (_maxUnits select 0); + if (_totalAINew > 0) then {_totalAI = _totalAINew}; //Retrieve AI amount if it was updated from initial value (for non-respawning custom spawns only) +}; +_spawnPos = [(ASLtoATL getPosASL _trigger),random (_patrolDist),random(360),0] call SHK_pos; +_unitGroup = [_totalAI,grpNull,_spawnPos,_trigger,_weapongrade] call DZAI_setup_AI; + +//Set group variables +_unitGroup setVariable ["unitType","static"]; +_unitGroup allowFleeing 0; + +if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Group %1 has group size %2.",_unitGroup,_totalAI];}; + +if (_patrolDist > 1) then { + 0 = [_unitGroup,_triggerPos,_patrolDist] spawn DZAI_BIN_taskPatrol; +} else { + [_unitGroup, 0] setWaypointType "HOLD"; +}; + +if (DZAI_debugLevel > 0) then {diag_log format["DZAI Debug: Spawned a group of %1 units in %2 seconds at %3 (Custom Spawn).",_totalAI,(diag_tickTime - _startTime),(triggerText _trigger)];}; + +_equipType = if (_weapongrade in DZAI_weaponGrades) then {(_weapongrade max 0)} else {3}; +_grpArray set [count _grpArray,_unitGroup]; + +_triggerStatements = (triggerStatements _trigger); +if (!(_trigger getVariable ["initialized",false])) then { + 0 = [0,_trigger,_grpArray,_patrolDist,_equipType,[],[_totalAI,0]] call DZAI_setTrigVars; + _trigger setVariable ["triggerStatements",+_triggerStatements]; +} else { + _trigger setVariable ["isCleaning",false]; + _trigger setVariable ["maxUnits",[_totalAI,0]]; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Trigger group array updated to: %1.",_grpArray]}; +}; +_triggerStatements set [1,""]; +_trigger setTriggerStatements _triggerStatements; +[_trigger,"DZAI_staticTriggerArray"] call DZAI_updateSpawnCount; + +if ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}) then { + _nul = _trigger call DZAI_addMapMarker; +}; + +_unitGroup diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_dynamic.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_dynamic.sqf new file mode 100755 index 0000000..2730960 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_dynamic.sqf @@ -0,0 +1,99 @@ +/* + spawnBandits_dynamic + + Usage: Called by an activated dynamic trigger when a player unit enters the trigger area. + + Description: Spawns a group of AI units some distance from a dynamically-spawned trigger. These units do not respawn after death. + + Last updated: 10:58 PM 6/6/2014 +*/ + +private ["_patrolDist","_trigger","_totalAI","_unitGroup","_targetPlayer","_playerPos","_playerDir","_spawnPos","_startTime","_baseDist","_distVariance","_dirVariance","_behavior","_triggerStatements","_spawnDist"]; +if (!isServer) exitWith {}; + +_startTime = diag_tickTime; + +_patrolDist = _this select 0; +_trigger = _this select 1; + +_targetPlayer = _trigger getVariable ["targetplayer",objNull]; +if (isNull _targetPlayer) exitWith { + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Cancelling dynamic spawn for target player. Reason: Player does not exist (logged out?).",name _targetPlayer]}; + _nul = _trigger call DZAI_abortDynSpawn; + + false +}; + +_baseDist = 200; //On foot distance: 200-275 +_distVariance = 75; +_dirVariance = 90; +if (!((vehicle _targetPlayer) isKindOf "Man")) then { + _baseDist = _baseDist - 50; //In vehicle distance: 150-225m + _dirVariance = 67.5; +}; + +_playerPos = ASLtoATL getPosASL _targetPlayer; +_playerDir = getDir _targetPlayer; +_spawnDist = (_baseDist + random (_distVariance)); +_spawnPos = [_playerPos,_spawnDist,[(_playerDir-_dirVariance),(_playerDir+_dirVariance)],0] call SHK_pos; +if ( + (surfaceIsWater _spawnPos) or + {({(isPlayer _x) && {_x != _targetPlayer}} count (_spawnPos nearEntities [["CAManBase","LandVehicle"],125])) > 0} or + {(_spawnPos in (nearestLocation [_spawnPos,"Strategic"]))} + ) exitWith { + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Canceling dynamic spawn for target player %1. Possible reasons: Spawn position has water, player nearby, or is blacklisted.",name _targetPlayer]}; + _nul = _trigger call DZAI_abortDynSpawn; + + false +}; + +//Calculate group weapongrade and spawn units +_weapongrade = DZAI_dynEquipType call DZAI_getWeapongrade; +_totalAI = call { + if (_weapongrade == 0) exitWith {2 + floor (random 2)}; //2-3 units + if (_weapongrade == 1) exitWith {2 + floor (random 2)}; //2-3 units + if (_weapongrade == 2) exitWith {1 + floor (random 2)}; //1-2 units + if (_weapongrade == 3) exitWith {1 + floor (random 2)}; //1-2 units + 1 +}; + +_unitGroup = [_totalAI,grpNull,_spawnPos,_trigger,_weapongrade] call DZAI_setup_AI; + +//Set group variables +_unitGroup setVariable ["unitType","dynamic"]; +_unitGroup setBehaviour "AWARE"; +//_unitGroup setCombatMode "RED"; //Handled by fn_createGroup.sqf +_unitGroup setSpeedMode "FULL"; +_unitGroup allowFleeing 0; + +//Begin hunting player or patrolling area +_behavior = if (DZAI_huntingChance call DZAI_chance) then { + _unitGroup reveal [_targetPlayer,4]; + 0 = [_unitGroup,_spawnPos,_patrolDist,_targetPlayer,ASLtoATL getPosASL _trigger] spawn DZAI_dyn_huntPlayer; + "HUNTING" +} else { + 0 = [_unitGroup,_playerPos,_patrolDist] spawn DZAI_BIN_taskPatrol; + "PATROLLING" +}; +if (DZAI_debugLevel > 0) then { + diag_log format["DZAI Debug: Spawned 1 new AI groups of %1 units each in %2 seconds at %3 using behavior mode %4. Distance from target: %5 meters.",_totalAI,(diag_tickTime - _startTime),(mapGridPosition _trigger),_behavior,_spawnDist]; +}; + +_triggerStatements = (triggerStatements _trigger); +if (!(_trigger getVariable ["initialized",false])) then { + 0 = [1,_trigger,[_unitGroup]] call DZAI_setTrigVars; //set dynamic trigger variables and create dynamic area blacklist + _trigger setVariable ["triggerStatements",+_triggerStatements]; +}; +_triggerStatements set [1,""]; +_trigger setTriggerStatements _triggerStatements; +[_trigger,"DZAI_dynTriggerArray"] call DZAI_updateSpawnCount; + +if ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}) then { + _nul = _trigger spawn { + _marker = str(_this); + _marker setMarkerColor "ColorOrange"; + _marker setMarkerAlpha 0.9; //Dark orange: Activated trigger + }; +}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_dynamicV2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_dynamicV2.sqf new file mode 100755 index 0000000..b9e32dd --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_dynamicV2.sqf @@ -0,0 +1,99 @@ +/* + spawnBandits_dynamic + + Usage: Called by an activated dynamic trigger when a player unit enters the trigger area. + + Description: Spawns a group of AI units some distance from a dynamically-spawned trigger. These units do not respawn after death. + + Last updated: 10:58 PM 6/6/2014 +*/ + +private ["_patrolDist","_trigger","_totalAI","_unitGroup","_targetPlayer","_playerPos","_playerDir","_spawnPos","_startTime","_baseDist","_distVariance","_dirVariance","_behavior","_triggerStatements","_spawnDist"]; +if (!isServer) exitWith {}; + +_startTime = diag_tickTime; + +_patrolDist = _this select 0; +_trigger = _this select 1; + +_targetPlayer = _trigger getVariable ["targetplayer",objNull]; +if (isNull _targetPlayer) exitWith { + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Cancelling dynamic spawn for target player. Reason: Player does not exist (logged out?).",name _targetPlayer]}; + _nul = _trigger call DZAI_abortDynSpawn; + + false +}; + +_baseDist = 200; //On foot distance: 200-275 +_distVariance = 75; +_dirVariance = 90; +if (!((vehicle _targetPlayer) isKindOf "Man")) then { + _baseDist = _baseDist - 50; //In vehicle distance: 150-225m + _dirVariance = 67.5; +}; + +_playerPos = ASLtoATL getPosASL _targetPlayer; +_playerDir = getDir _targetPlayer; +_spawnDist = (_baseDist + random (_distVariance)); +_spawnPos = [_playerPos,_spawnDist,[(_playerDir-_dirVariance),(_playerDir+_dirVariance)],0] call SHK_pos; +if ( + (surfaceIsWater _spawnPos) or + {({(isPlayer _x) && {_x != _targetPlayer}} count (_spawnPos nearEntities [["CAManBase","LandVehicle"],125])) > 0} or + {(_spawnPos in (nearestLocation [_spawnPos,"Strategic"]))} + ) exitWith { + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Canceling dynamic spawn for target player %1. Possible reasons: Spawn position has water, player nearby, or is blacklisted.",name _targetPlayer]}; + _nul = _trigger call DZAI_abortDynSpawn; + + false +}; + +//Calculate group weapongrade and spawn units +_weapongrade = DZAI_dynEquipType call DZAI_getWeapongrade; +_totalAI = call { + if (_weapongrade == 0) exitWith {2 + floor (random 2)}; //2-3 units + if (_weapongrade == 1) exitWith {2 + floor (random 2)}; //2-3 units + if (_weapongrade == 2) exitWith {1 + floor (random 2)}; //1-2 units + if (_weapongrade == 3) exitWith {1 + floor (random 2)}; //1-2 units + 1 +}; + +_unitGroup = [_totalAI,grpNull,_spawnPos,_trigger,_weapongrade] call DZAI_setup_AI; + +//Set group variables +_unitGroup setVariable ["unitType","dynamic"]; +_unitGroup setBehaviour "AWARE"; +//_unitGroup setCombatMode "RED"; //Handled by fn_createGroup.sqf +_unitGroup setSpeedMode "FULL"; +_unitGroup allowFleeing 0; + +//Begin hunting player or patrolling area +_behavior = if (DZAI_huntingChance call DZAI_chance) then { + _unitGroup reveal [_targetPlayer,4]; + 0 = [_unitGroup,_spawnPos,_patrolDist,_targetPlayer,ASLtoATL getPosASL _trigger] spawn DZAI_dyn_huntPlayer; + "HUNTING" +} else { + 0 = [_unitGroup,_playerPos,_patrolDist] spawn DZAI_BIN_taskPatrol; + "PATROLLING" +}; +if (DZAI_debugLevel > 0) then { + diag_log format["DZAI Debug: Spawned 1 new AI groups of %1 units each in %2 seconds at %3 using behavior mode %4. Distance from target: %5 meters.",_totalAI,(diag_tickTime - _startTime),(mapGridPosition _trigger),_behavior,_spawnDist]; +}; + +_triggerStatements = (triggerStatements _trigger); +if (!(_trigger getVariable ["initialized",false])) then { + 0 = [_trigger,[_unitGroup]] call DZAI_setTrigVars; //set dynamic trigger variables and create dynamic area blacklist + _trigger setVariable ["triggerStatements",+_triggerStatements]; +}; +_triggerStatements set [1,""]; +_trigger setTriggerStatements _triggerStatements; +_trigger call DZAI_updDynSpawnCount; + +if ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}) then { + _nul = _trigger spawn { + _marker = str(_this); + _marker setMarkerColor "ColorOrange"; + _marker setMarkerAlpha 0.9; //Dark orange: Activated trigger + }; +}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_initialize.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_initialize.sqf new file mode 100755 index 0000000..fb83201 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_initialize.sqf @@ -0,0 +1,71 @@ +/* + spawnBandits_initialize + +*/ + +private ["_minAI","_addAI","_patrolDist","_trigger","_equipType","_numGroups","_triggerPos","_locationArray","_positionArray","_startTime","_triggerStatements","_newTrigger"]; + +if (!isServer) exitWith {}; + +_startTime = diag_tickTime; + +_minAI = _this select 0; //Mandatory minimum number of AI units to spawn +_addAI = _this select 1; //Maximum number of additional AI units to spawn +_patrolDist = _this select 2; //Patrol radius from trigger center. +_trigger = _this select 3; //The trigger calling this script. +_positionArray = _this select 4; //Array of manually-defined spawn points (markers). If empty, nearby buildings are used as spawn points. +_equipType = if ((count _this) > 5) then {_this select 5} else {1}; //(Optional) Select the item probability table to use +_numGroups = if ((count _this) > 6) then {_this select 6} else {1}; //(Optional) Number of groups of x number of units each to spawn + +_triggerPos = ASLtoATL getPosASL _trigger; +_locationArray = []; +//If no markers specified in position array, then generate spawn points using building positions (search for buildings within 250m. generate a maximum of 150 positions). +if ((count _positionArray) == 0) then { + private["_nearbldgs"]; + _nearbldgs = _triggerPos nearObjects ["HouseBase",250]; + { + scopeName "bldgloop"; + _pos = ASLtoATL getPosASL _x; + if (!(surfaceIsWater _pos)) then { + _locationCount = (count _locationArray); + _locationArray set [_locationCount,_pos]; + if (_locationCount >= 150) then { + breakOut "bldgloop"; + }; + }; + } count _nearbldgs; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Spawn trigger %1 is generating spawn positions from nearby buildings.",triggerText _trigger];}; +} else { + { + if ((getMarkerColor _x) != "") then { + _pos = getMarkerPos _x; + if !(surfaceIsWater _pos) then { + _locationArray set [(count _locationArray),_pos]; + deleteMarker _x; + }; + }; + } count _positionArray; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Spawn trigger %1 is generating spawn positions from provided markers.",triggerText _trigger];}; +}; + +_newTrigger = createTrigger ["EmptyDetector", _triggerPos]; +_newTrigger setTriggerArea [600, 600, 0, false]; +_newTrigger setTriggerActivation ["ANY", "PRESENT", true]; +_newTrigger setTriggerTimeout [10, 15, 20, true]; +_newTrigger setTriggerText (triggerText _trigger); +_triggerStatements = [ + "{isPlayer _x} count thisList > 0;", //Activation condition + format ["_nul = [%1,%2,%3,thisTrigger,%4,%5,%6] call fnc_spawnBandits;",_minAI,_addAI,_patrolDist,_positionArray,_equipType,_numGroups], //Activation statement + "_nul = [thisTrigger] spawn fnc_despawnBandits;" //Deactivation statement +]; +_newTrigger setVariable ["respawnLimit",(missionNamespace getVariable ["DZAI_respawnLimit"+str(_equipType),5])]; +_newTrigger setTriggerStatements _triggerStatements; +0 = [0,_newTrigger,[],_patrolDist,_equipType,_locationArray,[_minAI,_addAI]] call DZAI_setTrigVars; +//diag_log format ["DEBUG :: Created trigger %1 has statements %2.",triggerText _newTrigger,triggerStatements _newTrigger]; +//diag_log format ["DEBUG :: Created trigger %1 has saved statements %2.",triggerText _newTrigger,(_newTrigger getVariable "triggerStatements")]; + +deleteVehicle _trigger; + +if (DZAI_debugLevel > 0) then {diag_log format["DZAI Debug: Processed static trigger spawn data in %1 seconds (spawnBandits).",(diag_tickTime - _startTime)];}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_random.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_random.sqf new file mode 100755 index 0000000..b367efe --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnBandits_random.sqf @@ -0,0 +1,83 @@ + +private ["_patrolDist","_trigger","_totalAI","_unitGroup","_targetPlayer","_playerPos","_playerDir","_spawnPos","_startTime","_baseDist","_extraDist","_distVariance","_dirVariance","_behavior","_triggerStatements","_spawnDist","_thisList","_debugMarkers"]; +if (!isServer) exitWith {}; + +_startTime = diag_tickTime; + +_patrolDist = _this select 0; +_trigger = _this select 1; +_thisList = _this select 2; + +//Calculate group weapongrade and spawn units +_weapongrade = DZAI_dynEquipType call DZAI_getWeapongrade; +_totalAI = call { + if (_weapongrade == 0) exitWith {2 + floor (random 2)}; //2-3 units + if (_weapongrade == 1) exitWith {1 + floor (random 2)}; //1-2 units + if (_weapongrade == 2) exitWith {1 + floor (random 2)}; //1-2 units + if (_weapongrade == 3) exitWith {1}; //1 unit + 1 +}; + +_checkArea = true; +_nearAttempts = 1; +_spawnPos = [0,0,0]; +_debugMarkers = ((!isNil "DZAI_debugMarkersEnabled") && {DZAI_debugMarkersEnabled}); +_baseDist = 0; +_extraDist = 400; + +{ + if (isPlayer _x) exitWith { + _playerPos = getPosASL _x; + if (count ((nearestLocations [_playerPos, ["Strategic"], 600])) < 2) then { //< 2: Don't count the Strategic area assigned to this spawn + _trigger setPosASL _playerPos; + _baseDist = 175; + _extraDist = 225; + if (_debugMarkers) then { + (str (_trigger)) setMarkerPos _playerPos; + }; + }; + }; +} forEach _thisList; + +_triggerPos = getPosASL _trigger; + +while {_checkArea && {_nearAttempts < 4}} do { + _spawnPos = [_triggerPos,(_baseDist + (random _extraDist)),(random 360),0] call SHK_pos; + _checkArea = ({isPlayer _x} count (_spawnPos nearEntities [["CAManBase","Land"], 175]) > 0); + _nearAttempts = _nearAttempts + 1; +}; + +if (_nearAttempts > 3) exitWith {_nul = _trigger call DZAI_abortRandSpawn}; + +_unitGroup = [_totalAI,grpNull,_spawnPos,_trigger,_weapongrade] call DZAI_setup_AI; + +//Set group variables +_unitGroup setVariable ["unitType","randomspawn"]; +_unitGroup setBehaviour "AWARE"; +_unitGroup setSpeedMode "FULL"; +_unitGroup allowFleeing 0; + +0 = [_unitGroup,_triggerPos,_patrolDist] spawn DZAI_BIN_taskPatrol; + +if (DZAI_debugLevel > 0) then { + diag_log format["DZAI Debug: Spawned 1 new AI groups of %1 units each in %2 seconds at %3 (Random Spawn).",_totalAI,(diag_tickTime - _startTime),(mapGridPosition _trigger)]; +}; + +_triggerStatements = (triggerStatements _trigger); +if (!(_trigger getVariable ["initialized",false])) then { + 0 = [2,_trigger,[_unitGroup]] call DZAI_setTrigVars; + _trigger setVariable ["triggerStatements",+_triggerStatements]; +}; +_triggerStatements set [1,""]; +_trigger setTriggerStatements _triggerStatements; +//[_trigger,"DZAI_randTriggerArray"] call DZAI_updateSpawnCount; + +if (_debugMarkers) then { + _nul = _trigger spawn { + _marker = str(_this); + _marker setMarkerColor "ColorOrange"; + _marker setMarkerAlpha 0.9; //Dark orange: Activated trigger + }; +}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnVehiclePatrol.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnVehiclePatrol.sqf new file mode 100755 index 0000000..5cde113 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnVehiclePatrol.sqf @@ -0,0 +1,201 @@ +private ["_marker","_vehicleType","_weapongrade","_unitGroup","_driver","_vehicle","_gunnerSpots","_markerPos","_markerSize","_isAirVehicle","_unitType","_vehSpawnPos","_isArmed","_maxUnits","_maxCargoUnits","_maxGunnerUnits","_keepLooking"]; + +if (!isServer) exitWith {}; + +_vehicleType = _this; + +_maxCargoUnits = 0; +_maxGunnerUnits = 0; +_weapongrade = 0; +_isAirVehicle = (_vehicleType isKindOf "Air"); +_vehSpawnPos = []; +_spawnMode = "NONE"; +_keepLooking = true; +_error = false; + +call { + if (_vehicleType isKindOf "Air") exitWith { + //Note: no cargo units for air vehicles + _maxGunnerUnits = DZAI_heliGunnerUnits; + _weapongrade = DZAI_heliUnitLevel call DZAI_getWeapongrade; + _vehSpawnPos = [(getMarkerPos "DZAI_centerMarker"),300 + (random((getMarkerSize "DZAI_centerMarker") select 0)),random(360),1] call SHK_pos; + _vehSpawnPos set [2,150]; + _spawnMode = "FLY"; + }; + if (_vehicleType isKindOf "LandVehicle") exitWith { + _maxGunnerUnits = DZAI_vehGunnerUnits; + _maxCargoUnits = DZAI_vehCargoUnits; + _weapongrade = DZAI_vehUnitLevel call DZAI_getWeapongrade; + while {_keepLooking} do { + _vehSpawnPos = [(getMarkerPos "DZAI_centerMarker"),300 + random((getMarkerSize "DZAI_centerMarker") select 0),random(360),0,[2,750]] call SHK_pos; + if ((count _vehSpawnPos) > 1) then { + _playerNear = ({isPlayer _x} count (_vehSpawnPos nearEntities [["CAManBase","Land","Air"], 300]) > 0); + if(!_playerNear) then { + _keepLooking = false; //Found road position, stop searching + }; + } else { + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Unable to find road position to spawn AI %1. Retrying in 30 seconds.",_vehicleType]}; + uiSleep 30; //Couldnt find road, search again in 30 seconds. + }; + }; + }; + _error = true; +}; + +if (_error) exitWith {diag_log format ["DZAI Error: %1 attempted to spawn unsupported vehicle type %2.",__FILE__,_vehicleType]}; + +_unitGroup = [] call DZAI_createGroup; +_driver = _unitGroup createUnit [(DZAI_BanditTypes call BIS_fnc_selectRandom2), [0,0,0], [], 1, "NONE"]; +[_driver] joinSilent _unitGroup; + +_vehicle = createVehicle [_vehicleType, _vehSpawnPos, [], 0, _spawnMode]; +_vehicle setPos _vehSpawnPos; +_driver moveInDriver _vehicle; + +//Run high-priority commands to set up group vehicle +//_vehicle setFuel 1; +//_vehicle setVehicleAmmo 1; +//_vehicle engineOn true; +_nul = _vehicle call DZAI_protectObject; +if !(_vehicle isKindOf "Plane") then { + _vehicle setDir (random 360); +}; + +//Set variables +_vehicle setVariable ["unitGroup",_unitGroup]; + +//Determine vehicle armed state +_turretCount = count (configFile >> "CfgVehicles" >> _vehicleType >> "turrets"); +_isArmed = ((({!(_x in ["CarHorn","BikeHorn","TruckHorn","TruckHorn2","SportCarHorn","MiniCarHorn"])} count (weapons _vehicle)) > 0) or {(_turretCount > 0)}); + +//Determine vehicle type and add needed eventhandlers +if (_isAirVehicle) then { + _vehicle setVariable ["durability",[0,0,0]]; //[structural, engine, tail rotor] + _vehicle addEventHandler ["Killed",{_this call DZAI_heliDestroyed;}]; //Begin despawn process when heli is destroyed. + _vehicle addEventHandler ["GetOut",{_this call DZAI_airLanding;}]; //Converts AI crew to ground AI units. + _vehicle addEventHandler ["HandleDamage",{_this call DZAI_hHandleDamage}]; +} else { + _vehicle addEventHandler ["Killed",{_this call DZAI_vehDestroyed;}]; + _vehicle addEventHandler ["HandleDamage",{_this call DZAI_vHandleDamage}]; +}; +_vehicle allowCrewInImmobile (!_isAirVehicle); +_vehicle setVehicleLock "LOCKED"; +clearWeaponCargoGlobal _vehicle; +clearMagazineCargoGlobal _vehicle; + +//Setup group and crew +0 = [_driver,_weapongrade] call DZAI_setSkills; +0 = [_driver,_weapongrade] call DZAI_setupLoadout; +_driver setVariable ["unithealth",[(DZAI_baseBlood + (random DZAI_bonusBlood)),0,false]]; +_driver setVariable ["unconscious",false]; +_driver setVariable ["bodyName",(name _driver)]; +if (!(_driver hasWeapon "NVGoggles")) then { + _nvg = _driver call DZAI_addTempNVG; +}; +_driver addEventHandler [DZAI_healthType, DZAI_healthStatements]; +_driver assignAsDriver _vehicle; +_driver setVariable ["isDriver",true]; +_unitGroup selectLeader _driver; + +_cargoSpots = _vehicle emptyPositions "cargo"; +for "_i" from 0 to ((_cargoSpots min _maxCargoUnits) - 1) do { + _cargo = _unitGroup createUnit [(DZAI_BanditTypes call BIS_fnc_selectRandom2), [0,0,0], [], 1, "NONE"]; + [_cargo] joinSilent _unitGroup; + 0 = [_cargo,_weapongrade] call DZAI_setSkills; + 0 = [_cargo,_weapongrade] call DZAI_setupLoadout; + _cargo setVariable ["unithealth",[(DZAI_baseBlood + (random DZAI_bonusBlood)),0,false]]; + _cargo setVariable ["unconscious",false]; + _cargo setVariable ["bodyName",(name _cargo)]; + if (!(_cargo hasWeapon "NVGoggles")) then { + _nvg = _cargo call DZAI_addTempNVG; + }; + _cargo addEventHandler [DZAI_healthType, DZAI_healthStatements]; + _cargo assignAsCargo _vehicle; + _cargo moveInCargo [_vehicle,_i]; +}; +if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Spawned %1 cargo units for %2 vehicle %3.",(_cargoSpots min _maxCargoUnits),_unitGroup,_vehicleType]}; + +for "_i" from 0 to ((_turretCount min _maxGunnerUnits) - 1) do { + _gunner = _unitGroup createUnit [(DZAI_BanditTypes call BIS_fnc_selectRandom2), [0,0,0], [], 1, "NONE"]; + [_gunner] joinSilent _unitGroup; + 0 = [_gunner,_weapongrade] call DZAI_setSkills; + 0 = [_gunner,_weapongrade] call DZAI_setupLoadout; + _gunner setVariable ["unithealth",[(DZAI_baseBlood + (random DZAI_bonusBlood)),0,false]]; + _gunner setVariable ["unconscious",false]; + _gunner setVariable ["bodyName",(name _gunner)]; + if (!(_gunner hasWeapon "NVGoggles")) then { + _nvg = _gunner call DZAI_addTempNVG; + }; + _gunner addEventHandler [DZAI_healthType, DZAI_healthStatements]; + _gunner assignAsGunner _vehicle; + _gunner moveInTurret [_vehicle,[_i]]; +}; +if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Spawned %1 gunner units for %2 vehicle %3.",(_turretCount min _maxGunnerUnits),_unitGroup,_vehicleType]}; + +_unitGroup allowFleeing 0; +_unitGroup setBehaviour "AWARE"; +_unitGroup setSpeedMode "NORMAL"; +_unitGroup setCombatMode "YELLOW"; + +_unitType = if (_isAirVehicle) then {"air"} else {"land"}; +_unitGroup setVariable ["unitType",_unitType]; +_unitGroup setVariable ["weapongrade",_weapongrade]; +_unitGroup setVariable ["assignedVehicle",_vehicle]; +_unitGroup setVariable ["isArmed",_isArmed]; +(units _unitGroup) allowGetIn true; + +//If vehicle is air type and unarmed, check if user config has weapons specified. +if (_isAirVehicle && {!_isArmed}) then { + _index = (DZAI_airWeapons select 0) find _vehicleType; + if (_index > -1) then { + _vehWeapon = (DZAI_airWeapons select 1) select _index; + if ([_vehWeapon,"weapon"] call DZAI_checkClassname) then { + _vehicle addWeapon _vehWeapon; + _vehMag = getArray (configFile >> "CfgWeapons" >> _vehWeapon >> "magazines") select 0; + _vehicle addMagazine _vehMag; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Added weapon %1 and ammo %2 to AI %3 (Group: %1).",_vehWeapon,_vehMag,_vehicleType,_unitGroup]}; + }; + }; +}; + +_rearm = [_unitGroup,_weapongrade] spawn DZAI_autoRearm_group; //start group-level manager +//if (daytime < 6 or {daytime > 20}) then {_vehicle action ["lightOn", _vehicle]}; + +if (_isAirVehicle) then { + //Set initial waypoint and begin patrol + [_unitGroup,0] setWaypointType "MOVE"; + [_unitGroup,0] setWaypointTimeout [0.5,0.5,0.5]; + [_unitGroup,0] setWaypointCompletionRadius 200; + [_unitGroup,0] setWaypointStatements ["true","[(group this)] spawn DZAI_heliDetectPlayers;"]; + + _waypoint = _unitGroup addWaypoint [_vehSpawnPos,0]; + _waypoint setWaypointType "MOVE"; + _waypoint setWaypointTimeout [3,6,9]; + _waypoint setWaypointCompletionRadius 150; + _waypoint setWaypointStatements ["true","[(group this)] spawn DZAI_heliRandomPatrol;"]; + + [_unitGroup] spawn DZAI_heliRandomPatrol; + //if (DZAI_heliReinforceChance > 0) then {_oncall = [_vehicle,_unitGroup] spawn DZAI_heliOnCall}; //helicopter listen for reinforcement summons + _vehicle flyInHeight 125; + + if ((!isNull _vehicle) && {!isNull _unitGroup}) then { + DZAI_curHeliPatrols = DZAI_curHeliPatrols + 1; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Created AI helicopter crew group %1 is now active and patrolling.",_unitGroup];}; + }; +} else { + //Set initial waypoint and begin patrol + [_unitGroup,0] setWaypointType "MOVE"; + [_unitGroup,0] setWaypointTimeout [5,10,15]; + [_unitGroup,0] setWaypointCompletionRadius 150; + [_unitGroup,0] setWaypointStatements ["true","[(group this)] spawn DZAI_vehPatrol;"]; + [_unitGroup] spawn DZAI_vehPatrol; + + if ((!isNull _vehicle) && {!isNull _unitGroup}) then { + DZAI_curLandPatrols = DZAI_curLandPatrols + 1; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Created AI land vehicle crew group %1 is now active and patrolling.",_unitGroup];}; + }; +}; + +if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Created AI vehicle patrol at %1 with vehicle type %2 with %3 crew units.",_vehSpawnPos,_vehicleType,(count (units _unitGroup))]}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnVehicle_custom.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnVehicle_custom.sqf new file mode 100755 index 0000000..f8a61ef --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZAI/spawn_functions/spawnVehicle_custom.sqf @@ -0,0 +1,181 @@ +private ["_marker","_vehicleType","_weapongrade","_unitGroup","_driver","_vehicle","_gunnerSpots","_markerPos","_markerSize","_isAirVehicle","_unitType","_vehSpawnPos","_isArmed","_maxUnits","_maxCargoUnits","_maxGunnerUnits","_keepLooking"]; + +if (!isServer) exitWith {}; + +_marker = _this select 0; +_vehicleType = _this select 1; +_maxUnits = _this select 2; +_weapongrade = _this select 3; +//_respawnSelect = _this select 4; //Value not used in this script. Holds respawn settings. + +//Calculate needed values +_markerPos = (getMarkerPos _marker); +if ((markerAlpha _marker) > 0) then {_marker setMarkerAlpha 0}; +_markerSize = ((getMarkerSize _marker) select 0); +_maxCargoUnits = _maxUnits select 0; +_maxGunnerUnits = _maxUnits select 1; + +_isAirVehicle = (_vehicleType isKindOf "Air"); +_vehSpawnPos = []; +_roadSearching = 1; //SHK_pos will search for roads, and return random position if none found. +_waterPosAllowed = 0; //do not allow water position for land vehicles. +_spawnMode = "NONE"; + +if (_isAirVehicle) then { + _roadSearching = 0; //No need to search for road positions for air vehicles + _waterPosAllowed = 1; //Allow water position for air vehicles + _spawnMode = "FLY"; //set flying mode for air vehicles + _vehSpawnPos set [2,180]; //spawn air vehicles in air + _markerPos set [2,150]; //set marker height in air + if (_maxCargoUnits != 0) then {_maxCargoUnits = 0}; //disable cargo units for air vehicles +}; + +_keepLooking = true; +_waitTime = 10; +while {_keepLooking} do { + _vehSpawnPos = [_markerPos,random _markerSize,random(360),_waterPosAllowed,[_roadSearching,200]] call SHK_pos; + if (({isPlayer _x} count (_vehSpawnPos nearEntities [["CAManBase","Land","Air"],300])) == 0) then { + _keepLooking = false; //safe area found, continue to spawn the vehicle and crew + } else { + if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Waiting %1 seconds for area at %2 to have no players nearby to spawn custom AI vehicle %3.",_waitTime,_marker,_vehicleType]}; + uiSleep _waitTime; //wait a while before checking spawn area again. Scaling wait time from 10-30 seconds. + _waitTime = ((_waitTime + 5) min 60); + }; +}; + +_unitGroup = [] call DZAI_createGroup; +_driver = _unitGroup createUnit [(DZAI_BanditTypes call BIS_fnc_selectRandom2), [0,0,0], [], 1, "NONE"]; +[_driver] joinSilent _unitGroup; + +_vehicle = createVehicle [_vehicleType, _vehSpawnPos, [], 0, _spawnMode]; +_vehicle setPos _vehSpawnPos; +_driver moveInDriver _vehicle; + +//Run needed commands to set up group vehicle +//_vehicle setFuel 1; +//_vehicle setVehicleAmmo 1; +//_vehicle engineOn true; +_nul = _vehicle call DZAI_protectObject; +if !(_vehicle isKindOf "Plane") then { + _vehicle setDir (random 360); +}; + +//Set variables +_vehicle setVariable ["unitGroup",_unitGroup]; + +//Determine vehicle armed state +_turretCount = count (configFile >> "CfgVehicles" >> _vehicleType >> "turrets"); +_isArmed = ((({!(_x in ["CarHorn","BikeHorn","TruckHorn","TruckHorn2","SportCarHorn","MiniCarHorn"])} count (weapons _vehicle)) > 0) or {(_turretCount > 0)}); + +//Determine vehicle type and add needed eventhandlers +if (_isAirVehicle) then { + _vehicle setVariable ["durability",[0,0,0]]; //[structural, engine, tail rotor] + _vehicle addEventHandler ["Killed",{_this call DZAI_heliDestroyed;}]; //Begin despawn process when heli is destroyed. + _vehicle addEventHandler ["GetOut",{_this call DZAI_airLanding;}]; //Converts AI crew to ground AI units. + _vehicle addEventHandler ["HandleDamage",{_this call DZAI_hHandleDamage}]; +} else { + _vehicle addEventHandler ["Killed",{_this call DZAI_vehDestroyed;}]; + _vehicle addEventHandler ["HandleDamage",{_this call DZAI_vHandleDamage}]; +}; +_vehicle allowCrewInImmobile (!_isAirVehicle); +_vehicle setVehicleLock "LOCKED"; +clearWeaponCargoGlobal _vehicle; +clearMagazineCargoGlobal _vehicle; + +//Setup group and crew +0 = [_driver,_weapongrade] call DZAI_setSkills; +0 = [_driver,_weapongrade] call DZAI_setupLoadout; +_driver setVariable ["unithealth",[(DZAI_baseBlood + (random DZAI_bonusBlood)),0,false]]; +_driver setVariable ["unconscious",false]; +_driver setVariable ["bodyName",(name _driver)]; +if (!(_driver hasWeapon "NVGoggles")) then { + _nvg = _driver call DZAI_addTempNVG; +}; +_driver addEventHandler [DZAI_healthType, DZAI_healthStatements]; +_driver assignAsDriver _vehicle; +_driver setVariable ["isDriver",true]; +_unitGroup selectLeader _driver; + +if (_isAirVehicle) then {_vehicle flyInHeight 115}; + +_cargoSpots = _vehicle emptyPositions "cargo"; +for "_i" from 0 to ((_cargoSpots min _maxCargoUnits) - 1) do { + _cargo = _unitGroup createUnit [(DZAI_BanditTypes call BIS_fnc_selectRandom2), [0,0,0], [], 1, "NONE"]; + [_cargo] joinSilent _unitGroup; + 0 = [_cargo,_weapongrade] call DZAI_setSkills; + 0 = [_cargo,_weapongrade] call DZAI_setupLoadout; + _cargo setVariable ["unithealth",[(DZAI_baseBlood + (random DZAI_bonusBlood)),0,false]]; + _cargo setVariable ["unconscious",false]; + _cargo setVariable ["bodyName",(name _cargo)]; + if (!(_cargo hasWeapon "NVGoggles")) then { + _nvg = _cargo call DZAI_addTempNVG; + }; + _cargo addEventHandler [DZAI_healthType, DZAI_healthStatements]; + _cargo assignAsCargo _vehicle; + _cargo moveInCargo [_vehicle,_i]; +}; +if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Spawned %1 cargo units for %2 vehicle %3.",(_cargoSpots min _maxCargoUnits),_unitGroup,_vehicleType]}; + +for "_i" from 0 to ((_turretCount min _maxGunnerUnits) - 1) do { + _gunner = _unitGroup createUnit [(DZAI_BanditTypes call BIS_fnc_selectRandom2), [0,0,0], [], 1, "NONE"]; + [_gunner] joinSilent _unitGroup; + 0 = [_gunner,_weapongrade] call DZAI_setSkills; + 0 = [_gunner,_weapongrade] call DZAI_setupLoadout; + _gunner setVariable ["unithealth",[(DZAI_baseBlood + (random DZAI_bonusBlood)),0,false]]; + _gunner setVariable ["unconscious",false]; + _gunner setVariable ["bodyName",(name _gunner)]; + if (!(_gunner hasWeapon "NVGoggles")) then { + _nvg = _gunner call DZAI_addTempNVG; + }; + _gunner addEventHandler [DZAI_healthType, DZAI_healthStatements]; + _gunner assignAsGunner _vehicle; + _gunner moveInTurret [_vehicle,[_i]]; +}; +if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Spawned %1 gunner units for %2 vehicle %3.",(_turretCount min _maxGunnerUnits),_unitGroup,_vehicleType]}; + +_unitGroup allowFleeing 0; +_unitGroup setBehaviour "AWARE"; +_unitGroup setSpeedMode "NORMAL"; +_unitGroup setCombatMode "YELLOW"; + +_unitType = if (_isAirVehicle) then {"aircustom"} else {"landcustom"}; +_unitGroup setVariable ["unitType",_unitType]; +_unitGroup setVariable ["weapongrade",_weapongrade]; +_unitGroup setVariable ["assignedVehicle",_vehicle]; +_unitGroup setVariable ["isArmed",_isArmed]; +_unitGroup setVariable ["spawnParams",_this]; +[_unitGroup,0] setWaypointPosition [_markerPos,0]; //Move group's initial waypoint position away from [0,0,0] (initial spawn position). +(units _unitGroup) allowGetIn true; + +0 = [_unitGroup,_weapongrade] spawn DZAI_autoRearm_group; +0 = [_unitGroup,_markerPos,_markerSize,false] spawn DZAI_BIN_taskPatrol; +//if (daytime < 6 or {daytime > 20}) then {_vehicle action ["lightOn", _vehicle]}; + +if (_isAirVehicle) then { + _awareness = [_vehicle,_unitGroup] spawn DZAI_heliAwareness; + if (!_isArmed) then { + _index = (DZAI_airWeapons select 0) find _vehicleType; + if (_index > -1) then { + _vehWeapon = (DZAI_airWeapons select 1) select _index; + if ([_vehWeapon,"weapon"] call DZAI_checkClassname) then { + _vehicle addWeapon _vehWeapon; + _vehMag = getArray (configFile >> "CfgWeapons" >> _vehWeapon >> "magazines") select 0; + _vehicle addMagazine _vehMag; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Added weapon %1 and ammo %2 to AI %3 (Group: %1).",_vehWeapon,_vehMag,_vehicleType,_unitGroup]}; + }; + }; + }; + if ((!isNull _vehicle) && {!isNull _unitGroup}) then { + DZAI_curHeliPatrols = DZAI_curHeliPatrols + 1; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Custom AI helicopter crew group %1 is now active and patrolling.",_unitGroup];}; + }; +} else { + if ((!isNull _vehicle) && {!isNull _unitGroup}) then { + DZAI_curLandPatrols = DZAI_curLandPatrols + 1; + if (DZAI_debugLevel > 1) then {diag_log format ["DZAI Extended Debug: Custom AI land vehicle crew group %1 is now active and patrolling.",_unitGroup];}; + }; +}; + +if (DZAI_debugLevel > 0) then {diag_log format ["DZAI Debug: Created custom vehicle spawn at %1 with vehicle type %2 with %3 crew units.",_marker,_vehicleType,(count (units _unitGroup))]}; + +true diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/DZMSConfig.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/DZMSConfig.sqf new file mode 100755 index 0000000..00d18d6 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/DZMSConfig.sqf @@ -0,0 +1,186 @@ +/* + DayZ Mission System Config by Vampire + DZMS: https://github.com/SMVampire/DZMS-DayZMissionSystem + Updated for DZMS 2.0 by JasonTM +*/ + +/////////////////////////////////////////////////////////////////////// +// Do you want to see how many AI are at the mission in the mission marker? +// This option may cause excessive network traffic on high pop. servers as markers are refreshed every 2 seconds. +DZMSAICount = true; + +// If players are not near the AI behavior is disabled and the NPCs are hidden. +DZMSAICaching = false; + +// Time in minutes for a mission to timeout. +DZMSMissionTimeOut = 40; + +// Distance in meters from a mission to scan for players for timeout. +DZMSTimeoutDistance = 1200; + +// This is how many bandit missions are allowed to run simultaneously +DZMSBanditLimit = 4; + +// This is how many hero missions are allowed to run simultaneously +DZMSHeroLimit = 4; + +// Do you want to turn off damage to the mission objects? +DZMSObjectsDamageOff = false; + +// Mission announcement style. Options: "Hint","TitleText","rollingMessages","DynamicText". +//Note: The "Hint" messages will appear in the same area as common debug monitors. +DZMSAnnounceType = "TitleText"; + +// Turn this on to enable troubleshooting. RPT entries might show where problems occur. +DZMSDebug = false; + +// Do you want your players to gain or lose humanity from killing mission AI? +DZMSMissHumanity = true; + +// How much humanity should a player lose for killing a hero AI? +DZMSHeroHumanity = 50; + +// How much humanity should a player gain for killing a bandit AI? +DZMSBanditHumanity = 50; + +// Do you want the players to get AI kill messages? +DZMSKillFeed = false; + +// Do You Want AI to use NVGs? +//(They are deleted on death) +DZMSUseNVG = true; + +// Do you want bandit or hero AI kills to count towards player total? +DZMSCntKills = true; + +// Do you want AI to disappear instantly when killed? +DZMSCleanDeath = false; + +// Do you want AI that players run over to not have gear? +// (If DZMSCleanDeath is true, this doesn't matter) +DZMSRunGear = false; + +// How long before bodies disappear? (in minutes) (default = 30) +// Also used by WAI. Make sure they are the same if both are installed. +DZE_NPC_CleanUp_Time = 30; + +// Percentage of AI that must be dead before mission completes (default = 0) +//( 0 is 0% of AI / 0.50 is 50% / 1 is 100% ) +DZMSRequiredKillPercent = 1; + +// How long in minutes before mission scenery disappears (default = 30 / 0 = disabled) +DZMSSceneryDespawnTimer = 30; + +// Should crates despawn with scenery? (default = false) +DZMSSceneryDespawnLoot = true; + +////////////////////////////////////////////////////////////////////////////////////////// +// You can adjust AI gear/skills and crate loot in files contained in the ExtConfig folder. +////////////////////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////////////////////// +// Do you want to use static coords for missions? +// Leave this false unless you know what you are doing. +DZMSStaticPlc = false; + +// Array of static locations. X,Y +DZMSStatLocs = call { +/*475 Positions*/if (toLower worldName in ["chernarus","chernarus_winter"]) exitWith {[[7799.17,11502.8],[5682.2,8713.45],[4042.5,7253.45],[7088.84,9570.31],[6230.92,8338.9],[8596.73,11183.3],[8008.01,12055.4],[12156.9,8546.7],[10470.9,8574.72],[3122.48,9849.65],[5144.53,3538.41],[5019.55,3703.74],[7665.34,8249.58],[3302.39,9793.31],[4341.28,8591.47],[5329.04,10360],[5802.65,7769.07],[6376.84,8126.08],[4310.27,10816.8],[4925.12,8620.5],[5120.21,8946.94],[4127.88,9569.24],[8777.68,10099.9],[11672.9,12562.5],[6882.23,8352.39],[6059.67,8279.8],[3732.6,7149.41],[9711.38,11623],[13082.6,6937.48],[9409.3,12855.5],[4466.85,10133.9],[7912.78,9635.89],[6806.61,10032.6],[4242.57,8021.31],[8940.72,10005.2],[3347.4,9664.6],[5541.03,7851.62],[5625.43,10218.4],[4122.07,7922.29],[4783.2,8626.48],[5432.74,10511.1],[2941.04,8375.69],[5762.03,7908.29],[3720.38,10454.9],[5812.42,10824.1],[11339.4,9605.34],[3732.83,7030.78],[3394.36,8076.2],[6487.41,10087.5],[8733.36,9159.71],[7131.88,8385.2],[3953.14,4848.25],[4428.27,7888.68],[5133.26,10731.1],[3946.27,7399.39],[3128.96,5024.94],[4253.09,8647.28],[4357.46,8478.1],[4364.67,8353.79],[5063.67,9119.25],[4130.71,12904.1],[3029.63,8289.95],[6233.49,8222.73],[5162.16,10409.3],[7036.93,7496.88],[5316.59,8394.78],[3542.57,8068.03],[2851.47,8562.15],[3686.54,7530.46],[6643.58,3561.24],[7967,13630.9],[3677.97,6795.47],[5056.86,8173.08],[7418.78,9483.13],[5737.49,9613.75],[5093.99,7547.25],[3689.14,6901.95],[9617.06,11391.3],[12269.5,12667.1],[10108.6,13461.3],[3480.04,7903.94],[4260.54,6372.61],[12705.2,9025.35],[3207.88,8982.16],[5879.71,13519.1],[5197.96,8386.93],[7195.1,9419.24],[4773.11,5772.96],[3467.42,5428.55],[5796.96,7503.37],[4666.24,8390.75],[12702.4,8898.62],[5767.59,9177.26],[9180.27,11353],[4634.87,5853.75],[7304.27,8344.95],[2837.51,8802.67],[3484.69,9649.02],[4875.07,10032.9],[7136.49,8858.17],[6772.99,9435.69],[3735.81,7734.06],[8149.77,13441.7],[7376.65,10681.6],[4654.92,10179.1],[2813.72,9640.34],[6083.21,7590.76],[3837.59,7202.61],[4304.63,9736.19],[9422.71,11082.7],[5650.47,7855.74],[11784,9570.23],[6698.83,7383.68],[10023.1,5953.64],[4747.91,6238.35],[4011.58,10945.3],[2646.19,9379.18],[8185.7,8545.16],[12697.7,8540.94],[6304.28,8022.81],[5713.68,8034.49],[4129.57,6926.06],[3547.75,10799],[6802.96,8280.44],[6777.37,5840.17],[7350.93,5230.5],[5880.3,7421.09],[4193.83,9763.97],[3179.7,8738.37],[3804.15,10245.1],[3632.77,8178.62],[3305.05,8950.76],[8342.5,12723.1],[6407.1,8390.98],[5906.31,9039.78],[2960.61,9741.18],[5794.15,11343],[9322.11,11337.1],[3967.19,6935.48],[4995.4,7454.07],[3276.81,6987.63],[5507.38,10233],[6043.24,9180.2],[11303.7,7823.53],[4065.26,8360.14],[12613.7,8963.77],[6954.07,9628.47],[4772.88,11380.4],[5319.73,3846.47],[11717.2,12442],[4184.95,8481.47],[5101.17,9242.48],[12363.1,12829.7],[6542.46,7296.54],[4442.68,8648.98],[12328.3,12923.4],[9991.48,8671.71],[4924.55,5712.25],[3739.91,9464.64],[6754.05,8069.78],[5704.5,9376.33],[6237.46,6893.11],[4164.45,8309.07],[7268.03,9812.92],[9176.98,11155.1],[4018.28,7698.71],[3454,6735.96],[6661.29,4743.14],[5864.36,7217.91],[9017.75,9150.02],[3436.28,7257.51],[3283.67,8066.6],[10668.4,8784.42],[5131.96,9527.4],[5681.55,7454.81],[12161.6,12707.9],[3799.02,4858.68],[7316,9506.9],[8435.24,6330],[7873.6,3359.29],[10039.9,8794.42],[8334.02,6931.65],[6957.06,5717.19],[3017.12,8768.88],[3169.82,9475.7],[6058.5,8402.42],[12050.1,12715.1],[5744.64,8817.38],[8066.75,13663.5],[4262.76,10520.2],[12419.2,8767.53],[4217.73,9619.35],[6977.93,9085.19],[9763.38,10559.9],[4175.41,9433.74],[6271.95,8560.47],[2608.37,13012.9],[5601.47,11134.4],[5676.14,8336.67],[9794.94,11563.5],[9587.56,11640.1],[6039.75,7287.61],[10080.7,13356.2],[5218.37,8486.53],[3489.79,8176.19],[4549.65,10390.7],[3581.91,7438.98],[3335.82,9445.02],[7451.73,7835.34],[8596.86,6475.7],[4675.1,8093.05],[4411.06,9872.14],[6621.88,9450.58],[8566.07,9300.61],[5640.05,10443.6],[6146.9,8846.21],[4525.41,9162.48],[8139.29,9900.37],[3268.83,6740.06],[4106.08,11074.2],[5934.23,13619.7],[3844.36,6982.55],[3047.42,8081.76],[7345.17,7885.3],[4528.07,10612],[5558.44,10368.8],[4970.62,8497.54],[5235.14,8965.67],[7363.32,7508.87],[6876.98,9731.42],[5781.92,10435.6],[12595.9,9187.68],[4368.52,8814.37],[10846.2,8290.96],[3700.13,10202.2],[3300.23,7773.56],[8215.09,13358],[5996.08,12400.3],[3676.42,7296.08],[12057,11096.4],[6478.6,8169.8],[12513.9,9330.9],[9381.05,11697.1],[5269.87,8148.47],[5631.98,8463.25],[5108.29,10929],[3441.75,8943.55],[10622,8311.33],[9388.93,12175.2],[8659.81,10116.7],[10097.4,8693.6],[2676.25,12094.3],[5234.12,8829.32],[12077.2,10601.9],[6200.36,8455.24],[11244.9,8345.91],[4453.62,7752.54],[4789.63,8309.21],[4519.84,8320.14],[10594.6,8424.5],[2923.11,6693.79],[3794.22,6879.02],[4778.66,9686.77],[6919.94,7557.01],[5461.5,11081.2],[3306.76,8773.89],[2783.02,7241.23],[3083.82,8616.49],[4350.54,9644.92],[3255.1,7400.8],[3913.81,8389.22],[3118.37,9091.28],[4280.59,9452.8],[12723.4,10334.6],[4665.4,7284.39],[3140.65,4462.85],[3692.41,4775.84],[3790.35,8108.43],[10674.7,8636.13],[3439.92,6847.16],[8812.25,12527.1],[10806.2,8645.02],[3930.43,8086.77],[4835.21,3958.52],[5855.93,7679.31],[3791.54,7441.86],[4045.94,6635.06],[5403.74,9044.05],[5077.62,12095.9],[8804.57,12789.5],[2940.76,8238.27],[2887.74,6922.38],[4887.49,8075.59],[4982.5,6705.49],[3156.66,10876.7],[5831.25,12320.6],[8005.9,8173.4],[5626.52,9243.53],[13080.1,7580],[3467.69,7566.49],[6392.09,8270.32],[5984.04,9879.01],[4039.48,8518.26],[2915.94,8870.84],[10337.9,8213.99],[12291.4,8590.87],[5115.81,10547],[5753.82,11068.5],[8525.86,12693.1],[4482.11,8501.2],[6577.4,7393.74],[7585.89,8800.8],[5350.81,9324.26],[8649.91,12686.7],[7757.88,8803.12],[7844.35,13649.7],[4532.19,8168.12],[9246.49,11635.4],[4862.99,8810.87],[5139.04,7637.45],[9147.83,11854.6],[5548.78,8007.25],[4758.67,9087.56],[13063.9,8071.43],[3908.4,11055.1],[7126.69,9680.15],[10414.1,8730.57],[3607.13,7141.9],[4823.4,9198.24],[6694.86,7914.11],[5009.5,8985.91],[3852.24,9969.66],[10281.8,8622.63],[2817.91,8965.58],[5981.32,7429.15],[9139.06,11617.9],[6968.06,8187.84],[3371.36,6561.53],[3857.52,9534.05],[3335.55,10652.4],[2841.14,6545.85],[9207.69,11020.7],[7563.27,7595.52],[8274.41,9784.96],[3498.63,7697.52],[4040.61,9032.03],[3802.69,11108.9],[5152.16,8241.7],[7347.71,9669.68],[3553.56,4919.49],[3687.37,10309.1],[9563.04,12089.3],[3806.48,12843],[4753.93,10131.8],[7874.79,5028.24],[11951.1,9822.97],[12615.4,8840.56],[5231.56,10804.2],[5705.13,7560.65],[5416.46,5533.77],[10324.5,8096.45],[3505.03,10414.2],[5665.34,10899.6],[6695.83,8996.15],[4721.32,10705.9],[3512.3,10280.5],[11972,12280],[2680.72,10219],[5637.09,8186.65],[3367.55,7632.59],[5516.14,10958.7],[11691.3,13119.4],[12509.3,13472.1],[4598.42,8637.38],[3229.14,9111.25],[12609.7,13422],[2667.38,7225.2],[6997.58,5381.12],[4169.82,9928.62],[8072.59,6608.32],[5744.41,9834.35],[10052.2,8583.86],[4899.76,8396.74],[9364.9,11217.5],[5884.65,9139.34],[4421.84,10839],[12342.3,9302.54],[7504.04,8187.63],[4142.63,8654.95],[8436.6,12634.3],[10763,12333.8],[5618.54,10798.6],[2874.36,10307],[4527.32,7100.29],[3290.59,7271.12],[7760.55,8685.49],[11728.2,12965],[5534.47,11371.4],[6149.35,7504.06],[6733.46,9336.83],[12075.2,12908.2],[3852.97,7737.73],[7179.41,9054.8],[6255.1,6250.19],[8341.93,9647.8],[10476.8,8385.57],[11537.6,9655.87],[3747.49,8558.96],[6265.47,9036.89],[2907.99,9857.44],[4487.71,10714],[8139.76,7073.58],[5782.39,8308.85],[3922.86,7047.63],[3136.63,6744.08],[10455.2,10180],[6430.84,7017.95],[5530.5,8575.52],[2762.58,9401.68],[6294.75,8417.67],[6733.22,9560.53],[3213.83,6435.83],[5236.18,7189.23],[3986.08,7146.6],[7210.97,9600.61],[5788.5,10137.9],[12152.3,9929.2],[4511.77,12330.3],[5440.36,7445.78],[7640.43,9069.69],[2639.34,11906.2],[5256.43,10496],[4840.12,6323.76],[3804.38,9339.56],[3850.02,5016.59],[12468.4,9931.49],[7385.11,10797.8],[7925.64,7303.83],[9720.78,13023.9],[8301.33,6752.26],[6246.58,9191.19],[11154.7,7935.82],[1989.56,3983.87],[1953.11,4111.87],[2139.47,4102.4],[1384.2,4523.72],[1263.92,4683.09],[1415.68,4376.28],[1902.83,5353.61],[1986.22,5163.8],[1695.14,5234.37],[1421.79,5235.87],[1101.99,3795.9],[1149.06,3878.55],[1259.11,4044.03],[1134.75,4207.94],[953.839,4238.65],[1001.07,4445.2],[839.208,4638.53],[3197.78,3229.35],[3170.97,3341.39],[3982.13,3005.38],[3889.89,2923.18],[3762.15,2834.78],[1930.46,2863.78],[1840.56,2993.93],[11653.2,5637.37],[11147.3,4785.1],[10310,5827.85],[7368.85,11448.2],[7824.14,12193.7],[8270.72,9096.08],[8070.95,8992.47],[12286.2,6891.63],[11988.9,10037.7]]}; + [[0,0],[0,0]]; +}; + +////////////////////////////////////////////////////////////////////////////////////////// +// Do you want to place some static AI in a base or similar? +// Leave this false unless you know what you are doing. +DZMSStaticAI = false; + +// How long before they respawn? (in seconds) (default 2 hours) +// If set longer than the amount of time before a server restart, they respawn at restart +DZMSStaticAITime = 7200; + +// How many AI in a group? (Past 6 in a group it's better to just add more positions) +DZMSStaticAICnt = 4; + +// Array of Static AI Locations +DZMSStaticSpawn = [ + [0,0,0], + [0,0,0] +]; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Do you want vehicles from missions to save to the Database? (this means they will stay after a restart) +// If False, vehicles will disappear on restart. It will warn a player who gets inside of a vehicle. +DZMSSaveVehicles = false; + +// Setting this to true will prevent the mission vehicles from taking damage during the mission. +DZMSVehDamageOff = true; + +/*/////////////////////////////////////////////////////////////////////////////////////////// +There are two types of missions that run simultaneously on a the server. +The two types are Bandit and Hero missions. + +Below is the array of mission file names and the minimum and maximum times they run. +If you don't want a certain mission to run on the server, comment out it's line. +Remember that the last mission in the list should not have a comma after it. +*/ + +DZMSMissionArray = [ + "AN2_Cargo_Drop", // Weapons + "Ural_Ambush", // Weapons, Medical Supplies, Building Supplies + "Squad", // No crate + "Humvee_Crash", // Weapons + "APC_Mission", // Only uncomment for Epoch/Overpoch + "Armed_Vehicles", // Vehicle ammo and parts + "C130_Crash", // Building Supplies + "Construction_Site", // Building Supplies + "Firebase", // Building Supplies + "Helicopter_Crash", // Weapons + "Helicopter_Landing", // Weapons, Building Supplies + "General_Store", // Survival items found in supermarket + "Medical_Cache", // Medical Supplies + "Medical_Camp", // Medical Supplies + "Medical_Outpost", // Medical Supplies, Weapons + "Weapons_Cache", // Weapons + "Stash_house", // Weapons + "Weapons_Truck" // Weapons + //"SMA1","SMA2","SMA3","SMA4","SMA5","SMA6", + //"SMI1","SMI2","SMI3","SMI4","SM5I","SMI6" +]; + +///////////////////////////////////////////////////////////////////////////////////////////// +// The Minumum time in minutes before a bandit mission will run. +// At least this much time will pass between bandit missions. Default = 5 minutes. +DZMSBanditMin = 4; + +// Maximum time in seconds before a bandit mission will run. +// A bandit mission will always run before this much time has passed. Default = 10 minutes. +DZMSBanditMax = 10; + +// Time in seconds before a hero mission will run. +// At least this much time will pass between hero missions. Default = 5 minutes. +DZMSHeroMin = 4; + +// Maximum time in seconds before a hero mission will run. +// A hero mission will always run before this much time has passed. Default = 10 minutes. +DZMSHeroMax = 10; + +// Blacklist Zone Array -- missions will not spawn in these areas +// format: [[x,y,z],[x,y,z]] +// The first set of xyz coordinates is the upper left corner of a box +// The second set of xyz coordinates is the lower right corner of a box +DZMSBlacklistZones = [ + //[[0,0,0],[0,0,0]] +]; + +DZMSDistanceBetweenMissions = 2000; // Minimum distance in meters to check for other missions. + +// Autoclaim is a PVE feature that lets players know who is currently engaged in a mission. +DZMSAutoClaim = false; +DZMSAutoClaimAlertDistance = 800; // Distance from the mission that auto-claim uses to alert closest player +DZMSAutoClaimDelayTime = 30; // Time that the auto-claim waits until it declares a claim and places a marker - time in seconds +DZMSAutoClaimTimeout = 60; // If the claimer leaves the mission area he/she has this much time to return - time in seconds + +/*=============================================================================================*/ +// Do Not Edit Below This Line +/*=============================================================================================*/ +DZMSVersion = "2.1"; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/DZMSInit.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/DZMSInit.sqf new file mode 100755 index 0000000..68f6b45 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/DZMSInit.sqf @@ -0,0 +1,129 @@ +/* + DZMSInit.sqf by Vampire + This is the file that every other file branches off from. + It checks that it is safe to run, sets relations, and starts mission timers. + Updated for DZMS 2.0 by JasonTM +*/ + +// Global for other scripts to check if DZMS is installed. +DZMSInstalled = true; + +diag_log text "[DZMS]: Starting DayZ Mission System."; + +DZMSRelations = []; +if (!isNil "DZAI_isActive") then {DZMSRelations = DZMSRelations + ["DZAI"];}; +if (!isNil "SAR_version") then {DZMSRelations = DZMSRelations + ["SargeAI"];}; +if (!isNil "WAIconfigloaded") then {DZMSRelations = DZMSRelations + ["WickedAI"];}; + +call { + + // If we have multiple relations running, lets warn the user + if (count DZMSRelations > 1) exitWith { + diag_log text "[DZMS]: Multiple Relations Detected! Unwanted AI Behaviour May Occur!"; + diag_log text "[DZMS]: If Issues Arise, Decide on a Single AI System! (DZAI, SargeAI, or WickedAI)"; + }; + + // If only one set of relations were found, let the user know which one is being used. + if (count DZMSRelations == 1) exitWith {diag_log text format["[DZMS]: Using %1 Relations.",(DZMSRelations select 0)];}; + + // They weren't found, so let's set relationships + diag_log text "[DZMS]: Relations not found! Using DZMS Relations."; + + // Create the groups if they aren't created already + createCenter east; + // Make AI Hostile to Survivors + WEST setFriend [EAST,0]; + EAST setFriend [WEST,0]; + // Make AI Hostile to Zeds + EAST setFriend [CIVILIAN,0]; + CIVILIAN setFriend [EAST,0]; +}; + +//Destroy the global variable +DZMSRelations = nil; + +// This variable is used to lock the mission spawning to avoid data collisions +DZMSMarkerReady = true; + +// This array will store the data for missions +DZMSMissionData = []; + +// Let's initialize the mission count variables +DZMSBanditRunning = 0; +DZMSHeroRunning = 0; + +// Let's initialize the mission end times +DZMSBanditEndTime = diag_tickTime; +DZMSHeroEndTime = diag_tickTime; + +// We need to check for Epoch and OverWatch to adjust vehicle spawning, and configurations +DZMSEpoch = isClass (configFile >> "CfgWeapons" >> "Chainsaw"); +DZMSOverwatch = isClass (configFile >> "CfgWeapons" >> "USSR_cheytacM200"); + +// Let's Load the General Mission Configuration +call compile preprocessFileLineNumbers "\z\addons\dayz_server\DZMS\DZMSConfig.sqf"; + +// Report the version +if (DZMSDebug) then {diag_log text format ["[DZMS]: Currently Running Version: %1", DZMSVersion];}; + +// Lets check for a copy-pasted config file +if (DZMSVersion != "2.1") then { + diag_log text format ["[DZMS]: Outdated Configuration Detected! Please Update DZMS!"]; + diag_log text format ["[DZMS]: Old Versions are not supported by the Mod Author!"]; +}; + +// These variables are initialized here because they are not used in all versions. +DZMSMakeVehKey = false; +DZMSAICheckWallet = false; +DZMSUseRPG = false; +DZMSM2Static = false; +DZMS_HeroDogTag = 0; +DZMS_BanditDogTag = 0; +DZMS_AllowThermal = false; +DZMSHighValue = []; + +call { + // Epoch + Overwatch = Overpoch + if (DZMSEpoch && DZMSOverwatch) exitWith { + call compile preprocessFileLineNumbers "\z\addons\dayz_server\DZMS\ExtConfig\OverpochExtConfig.sqf"; + diag_log text "[DZMS]: DayZ Overpoch Detected! Overpoch Configs loaded"; + }; + // Epoch detected! + if (DZMSEpoch && !DZMSOverwatch) exitWith { + call compile preprocessFileLineNumbers "\z\addons\dayz_server\DZMS\ExtConfig\EpochExtConfig.sqf"; + diag_log text "[DZMS]: DayZ Epoch Detected! Epoch Configs loaded!"; + }; + // Epoch and Overwatch not detected, load Vanilla Mod configs. + call compile preprocessFileLineNumbers "\z\addons\dayz_server\DZMS\ExtConfig\VanillaExtConfig.sqf"; + diag_log text "[DZMS]: DayZ Vanilla Mod Detected! Vanilla Configs loaded!"; +}; + +// Lets compile our functions +call compile preprocessFileLineNumbers "\z\addons\dayz_server\DZMS\Scripts\DZMSFunctions.sqf"; +DZMSAIKilled = compile preprocessFileLineNumbers "\z\addons\dayz_server\DZMS\Scripts\DZMSAIKilled.sqf"; +DZMSAISpawn = compile preprocessFileLineNumbers "\z\addons\dayz_server\DZMS\Scripts\DZMSAISpawn.sqf"; +DZMSM2Spawn = compile preprocessFileLineNumbers "\z\addons\dayz_server\DZMS\Scripts\DZMSM2Spawn.sqf"; +DZMSBoxSetup = compile preprocessFileLineNumbers "\z\addons\dayz_server\DZMS\Scripts\DZMSBox.sqf"; +DZMSSpawnVeh = compile preprocessFileLineNumbers "\z\addons\dayz_server\DZMS\Scripts\DZMSSpawnVeh.sqf"; +DZMSWaitMissionComp = compile preprocessFileLineNumbers "\z\addons\dayz_server\DZMS\Scripts\DZMSWaitMissionComp.sqf"; +DZMSFindPos = compile preprocessFileLineNumbers "\z\addons\dayz_server\DZMS\Scripts\DZMSFindPos.sqf"; +DZMSSpawnObjects = compile preprocessFileLineNumbers "\z\addons\dayz_server\DZMS\Scripts\DZMSSpawnObjects.sqf"; + +DZMSAddMajMarker = "\z\addons\dayz_server\DZMS\Scripts\DZMSAddMajMarker.sqf"; +DZMSAddMinMarker = "\z\addons\dayz_server\DZMS\Scripts\DZMSAddMinMarker.sqf"; + +// Get the static AI spawned (if applicable) +if (DZMSStaticAI) then { + [] spawn { + while {true} do { + { + if !((_x select 0 == 0) && (_x select 1 == 0)) then { + [_x,DZMSStaticAICnt,2,"Bandit"] call DZMSAISpawn; + }; + sleep 2; + } forEach DZMSStaticSpawn; + + sleep DZMSStaticAITime; + }; + }; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/ExtConfig/0-ExtConfigReadme.txt b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/ExtConfig/0-ExtConfigReadme.txt new file mode 100755 index 0000000..f420729 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/ExtConfig/0-ExtConfigReadme.txt @@ -0,0 +1,3 @@ +This directory consists of extended configuration files. +Modifying these are not required, and are for users who want a customized setup. +- Vampire \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/ExtConfig/EpochExtConfig.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/ExtConfig/EpochExtConfig.sqf new file mode 100755 index 0000000..adc1bec --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/ExtConfig/EpochExtConfig.sqf @@ -0,0 +1,156 @@ +/* + EpochExtConfig.sqf + This config file is loaded in DZMSInit.sqf if the Epoch mod is detected. + It contains specific AI, Crate, and Vehicle configurations for DayZ Epoch. +*/ + +// Generates keys for mission vehicles and places it in the gear. Only works if DZMSSaveVehicles is set to true and Epoch is detected. +DZMSMakeVehKey = false; + +//If you have ZSC installed then you can set this to true to place money in ai wallets. +DZMSAICheckWallet = false; + +// Do you want AI to use RPG7V's? +// Odd numbered AI will spawn with one if enabled. +DZMSUseRPG = true; + +// Do you want static M2 heavy machine gunners at the missions? (Some of the easier missions don't have them). +DZMSM2Static = true; + +// Attachment_Tws can spawn on the AI and in crates if true. +DZMS_AllowThermal = true; + +/////////////////////////////////////////////// +// Arrays of skin classnames for the AI to use +DZMSBanditSkins = ["Bandit1_DZ","BanditW1_DZ","TK_INS_Warlord_EP1_DZ","GUE_Commander_DZ"]; +DZMSHeroSkins = ["Soldier_Sniper_PMC_DZ","Survivor2_DZ","SurvivorW2_DZ","Soldier1_DZ","Camo1_DZ","UN_CDF_Soldier_EP1_DZ"]; + +//////////////////////// +// Array of AI Skills +DZMSSkills0 = [ + ["aimingAccuracy",0.10], + ["aimingShake",0.45], + ["aimingSpeed",0.45], + ["endurance",0.40], + ["spotDistance",0.30], + ["spotTime",0.30], + ["courage",0.40], + ["reloadSpeed",0.50], + ["commanding",0.40], + ["general",0.40] +]; + +DZMSSkills1 = [ + ["aimingAccuracy",0.125], + ["aimingShake",0.60], + ["aimingSpeed",0.60], + ["endurance",0.55], + ["spotDistance",0.45], + ["spotTime",0.45], + ["courage",0.55], + ["reloadSpeed",0.60], + ["commanding",0.55], + ["general",0.55] +]; + +DZMSSkills2 = [ + ["aimingAccuracy",0.15], + ["aimingShake",0.75], + ["aimingSpeed",0.70], + ["endurance",0.70], + ["spotDistance",0.60], + ["spotTime",0.60], + ["courage",0.70], + ["reloadSpeed",0.70], + ["commanding",0.70], + ["general",0.70] +]; + +DZMSSkills3 = [ + ["aimingAccuracy",0.20], + ["aimingShake",0.85], + ["aimingSpeed",0.80], + ["endurance",0.80], + ["spotDistance",0.70], + ["spotTime",0.70], + ["courage",0.80], + ["reloadSpeed",0.80], + ["commanding",0.80], + ["general",0.80] +]; + +// Set the bloodbag type +local _bloodbag = ["bloodBagONEG","ItemBloodbag"] select dayz_classicBloodBagSystem; + +///////////////////////////////////////////////////////////// +// These are gear sets that will be randomly given to the AI +DZMSGear0 = [ + ["ItemBandage","ItemSepsisBandage","ItemAntibiotic6","ItemPainkiller6","ItemSodaGrapeDrink","FoodBaconCooked"], + ["ItemKnife","ItemFlashlight"] +]; + +DZMSGear1 = [ + ["ItemBandage","ItemSepsisBandage","ItemPainkiller6","ItemMorphine","ItemSodaRocketFuel","FoodGoatCooked"], + ["ItemToolbox","ItemEtool"] +]; + +DZMSGear2 = [ + ["ItemBandage","ItemAntibacterialWipe",_bloodbag,"ItemPainkiller6","ItemSodaSacrite","FishCookedTrout"], + ["ItemMatchbox","ItemHatchet"] +]; + +DZMSGear3 = [ + ["ItemBandage","ItemSepsisBandage","ItemMorphine","ItemHeatPack","ItemSodaRabbit","FoodMRE"], + ["ItemCrowbar","ItemMachete"] +]; + +DZMSGear4 = [ + ["ItemBandage","ItemAntibacterialWipe","ItemEpinephrine",_bloodbag,"ItemSodaMtngreen","FoodRabbitCooked"], + ["ItemGPS","Binocular_Vector"] +]; + +// New to DayZ Epoch 1.0.7. "ItemDogTagHero" and "ItemDogTagBandit" can be traded at hero and bandit vendors for +/- humanity. +DZMS_HeroDogTag = .15; // Chance for a dog tag to be added to the inventory of a hero NPC: Between 0 and 1. +DZMS_BanditDogTag = .15; // Chance for a dog tag to be added to the inventory of a bandit NPC: Between 0 and 1. + +///////////////////////////////////////////////////////////////////////////////////////////// +// These are arrays of vehicle classnames for the missions. + +//Armed Choppers +DZMSChoppers = ["BAF_Merlin_DZE","UH60M_MEV_EP1_DZ","CH_47F_EP1_DZE","UH1H_DZE","Mi17_DZE","UH60M_EP1_DZE","UH1Y_DZE","MH60S_DZE","UH1H_CDF_DZE","UH1H_WD_DZE","UH1H_2_DZE","UH1H_DES_DZE","UH1H_GREY_DZE","UH1H_BLACK_DZE","UH1H_SAR_DZE","Mi17_DZE","Mi17_TK_EP1_DZE","Mi17_UN_CDF_EP1_DZE","Mi17_CDF_DZE","Mi17_DES_DZE","Mi17_GREEN_DZE","Mi17_BLUE_DZE","Mi17_BLACK_DZE","Mi171Sh_CZ_EP1_DZE","MH60S_DZE","Ka60_GL_PMC_DZE","AW159_Lynx_BAF_DZE","UH60M_EP1_DZE","UH1Y_DZE","CH_47F_EP1_DZE","CH_47F_EP1_Black_DZE","CH_47F_EP1_GREY_DZE","CH_47F_EP1_DES_DZE","pook_transport_DZE","pook_transport_CDF_DZE","pook_gunship_DZE","pook_gunship_CDF_DZE"]; + +//Small Vehicles +DZMSSmallVic = ["hilux1_civil_3_open_DZE","SUV_TK_CIV_EP1_DZE","HMMWV_DZ","UAZ_Unarmed_UN_EP1_DZE","HMMWV_Ambulance_CZ_DES_EP1_DZE","LandRover_TK_CIV_EP1_DZE","SUV_Camo","Nissan_Orange_DZE","BTR40_TK_INS_EP1_DZE","Jeep_DZE","ScrapAPC_DZE","Tractor_Armored_DZE"]; + +//Large Vehicles +DZMSLargeVic = ["Kamaz_DZE","MTVR_DES_EP1_DZE","Ural_INS_DZE","Ural_CDF_DZE","Ural_TK_CIV_EP1_DZE","Ural_UN_EP1_DZE","V3S_Open_TK_CIV_EP1_DZE","V3S_Open_TK_EP1_DZE","T810A_ACR_DZE","T810A_ACR_DES_DZE","T810A_ACR_OPEN_DZE","T810A_ACR_DES_OPEN_DZE","MTVR_Open_DZE","MTVR_DZE"]; + +//////////////////////////////////////////////////////////////// +// Weapons Arrays - These can be adjusted as desired or make your own custom arrays +DZMSPistol = ["Revolver_DZ","Colt_Revolver_DZ","Colt_Anaconda_DZ","Colt_Bull_DZ","Colt_Python_DZ","DesertEagle_DZ","M1911_DZ","M1911_2_DZ","Kimber_M1911_DZ","Kimber_M1911_SD_DZ","USP_DZ","USP_SD_DZ","PPK_DZ","Tokarew_TT33_DZ","Makarov_DZ","Makarov_SD_DZ","APS_DZ","APS_SD_DZ","P38_DZ","BrowningHP_DZ","MK22_DZ","MK22_SD_DZ","MK22_2_DZ","MK22_2_SD_DZ","P226_DZ","P226_Silver_DZ","M9_DZ","M9_SD_DZ","M9_Camo_DZ","M9_Camo_SD_DZ","M93R_DZ","CZ75P_DZ","CZ75D_DZ","CZ75SP_DZ","CZ75SP_SD_DZ","G17_DZ","G18_DZ","P99_Black_DZ","P99_Black_SD_DZ","P99_Green_DZ","P99_Green_SD_DZ","P99_Silver_DZ","P99_Silver_SD_DZ"]; +DZMSAssault = ["M16A2_DZ","M4A1_DZ","M4A1_SD_DZ","SA58_RIS_DZ","L85A2_DZ","L85A2_SD_DZ","AKM_DZ","G36C_DZ","G36C_SD_DZ","G36A_Camo_DZ","G36K_Camo_DZ","G36K_Camo_SD_DZ","CTAR21_DZ","ACR_WDL_DZ","ACR_WDL_SD_DZ","ACR_BL_DZ","ACR_BL_SD_DZ","ACR_DES_DZ","ACR_DES_SD_DZ","ACR_SNOW_DZ","ACR_SNOW_SD_DZ","AK74_DZ","AK74_SD_DZ","AK107_DZ","CZ805_A1_DZ","CZ805_A1_GL_DZ","CZ805_A2_DZ","CZ805_A2_SD_DZ","CZ805_B_GL_DZ","Famas_DZ","Famas_SD_DZ","G3_DZ","HK53A3_DZ","HK416_DZ","HK416_SD_DZ","HK417_DZ","HK417_SD_DZ","HK417C_DZ","M1A_SC16_BL_DZ","M1A_SC16_TAN_DZ","M1A_SC2_BL_DZ","Masada_DZ","Masada_SD_DZ","Masada_BL_DZ","Masada_BL_SD_DZ","MK14_DZ","MK14_SD_DZ","MK16_DZ","MK16_CCO_SD_DZ","MK16_BL_CCO_DZ","MK16_BL_Holo_SD_DZ","MK17_DZ","MK17_CCO_SD_DZ","MK17_ACOG_SD_DZ","MK17_BL_Holo_DZ","MK17_BL_GL_ACOG_DZ","MR43_DZ","PDR_DZ","RK95_DZ","RK95_SD_DZ","SCAR_H_AK_DZ","SteyrAug_A3_Green_DZ","SteyrAug_A3_Black_DZ","SteyrAug_A3_Blue_DZ","XM8_DZ","XM8_DES_DZ","XM8_GREY_DZ","XM8_GREY_2_DZ","XM8_GL_DZ","XM8_DES_GL_DZ","XM8_GREY_GL_DZ","XM8_Compact_DZ","XM8_DES_Compact_DZ","XM8_GREY_Compact_DZ","XM8_GREY_2_Compact_DZ","XM8_SD_DZ"]; +DZMSLMG = ["L110A1_DZ","M249_DZ","M240_DZ","Mk48_DZ","RPK_DZ","UK59_DZ","PKM_DZ","Mk43_DZ","MK43_M145_DZ","RPK74_DZ","XM8_SAW_DZ","XM8_DES_SAW_DZ","XM8_GREY_SAW_DZ"]; +DZMSSMG = ["Bizon_DZ","Bizon_SD_DZ","MP5_DZ","MP5_SD_DZ","Scorpion_Evo3_DZ","Scorpion_Evo3_CCO_SD_DZ","Groza9_DZ","Groza1_DZ","KAC_PDW_DZ","Kriss_DZ","Kriss_SD_DZ","M31_DZ","MAT49_DZ","MP7_DZ","MP7_SD_DZ","P90_DZ","P90_SD_DZ","Sten_MK_DZ","TMP_DZ","TMP_SD_DZ","UMP_DZ","UMP_SD_DZ","VAL_DZ"]; +DZMSSniper = ["Mosin_PU_DZ","M4SPR_DZE","M14_DZ","M24_DZ","M24_DES_DZ","M40A3_DZ","SVD_DZ","SVD_PSO1_Gh_DES_DZ","FNFAL_DZ","DMR_DZ","L115A3_DZ","L115A3_2_DZ","Barrett_MRAD_Sniper_DZ","CZ750_DZ","Groza9_Sniper_DZ","Groza1_Sniper_DZ","HK417_Sniper_DZ","HK417_Sniper_SD_DZ","M1A_SC16_TAN_Sniper_DZ","M1A_SC16_BL_Sniper_DZ","M1A_SC2_BL_Sniper_DZ","M21_DZ","M21A5_DZ","M21A5_SD_DZ","M200_CheyTac_DZ","M200_CheyTac_SD_DZ","MK14_Sniper_DZ","MK14_Sniper_SD_DZ","MK17_Sniper_DZ","MK17_Sniper_SD_DZ","MSR_DZ","MSR_SD_DZ","MSR_NV_DZ","MSR_NV_SD_DZ","RSASS_DZ","RSASS_SD_DZ","SVU_PSO1_DZ","WA2000_DZ","XM8_Sharpsh_DZ","XM8_DES_Sharpsh_DZ","XM8_GREY_Sharpsh_DZ","XM2010_DZ","XM2010_SD_DZ","XM2010_NV_DZ","XM2010_NV_SD_DZ"]; +DZMSSingleShot = ["Remington870_DZ","M1014_DZ","Winchester1866_DZ","LeeEnfield_DZ","CZ550_DZ","USAS12_DZ"]; +DZMSThermal = ["BAF_L85A2_RIS_TWS_DZ","M249_TWS_EP1_Small","m8_tws","m8_tws_sd","SCAR_L_STD_EGLM_TWS","SCAR_H_STD_TWS_SD","M110_TWS_EP1","MSR_TWS_DZ","MSR_TWS_SD_DZ","XM2010_TWS_DZ","XM2010_TWS_SD_DZ","RSASS_TWS_DZ","RSASS_TWS_SD_DZ","m107_TWS_EP1_Small","BAF_AS50_TWS"]; + +// Weapon arrays that can spawn on the AI +DZMSAIWeps = [DZMSAssault,DZMSSMG,DZMSSingleShot,DZMSLMG,DZMSSniper]; + +// Weapon arrays that can spawn in the crates - Pistols spawn separately +DZMSCrateWeps = [DZMSAssault,DZMSLMG,DZMSSniper]; + +// Items and tools that can be added to crates +DZMSGeneralStore = ["ItemTent","ItemTentWinter","forest_net_kit","ItemMixOil","ItemWaterBottleSafe","ItemSodaCoke","ItemSodaPepsi","ItemSodaMdew","ItemSodaMtngreen","ItemSodaR4z0r","ItemSodaClays","ItemSodaSmasht","ItemSodaDrwaste","ItemSodaFranka","ItemSodaLemonade","ItemSodaLirik","ItemSodaLvg","ItemSodaMzly","ItemSodaPeppsy","ItemSodaRabbit","ItemSodaSacrite","ItemSodaRocketFuel","ItemSodaGrapeDrink","ItemSherbet","FoodPistachio","FoodNutmix","FoodChipsSulahoops","FoodChipsMysticales","FoodChipsChocolate","FoodCandyChubby","FoodCandyAnders","FoodCandyLegacys","FoodCandyMintception","FoodCakeCremeCakeClean","FoodCanBeef","FoodCanPotatoes","FoodCanGriff","FoodCanBadguy","FoodCanBoneboy","FoodCanCorn","FoodCanCurgon","FoodCanDemon","FoodCanFraggleos","FoodCanHerpy","FoodCanDerpy","FoodCanOrlok","FoodCanPowell","FoodCanTylers","FoodCanUnlabeled","FoodCanBakedBeans","FoodCanSardines","FoodCanFrankBeans","FoodCanPasta","FoodCanRusUnlabeled","FoodCanRusStew","FoodCanRusPork","FoodCanRusPeas","FoodCanRusMilk","FoodCanRusCorn","ItemJerrycan"]; +DZMSCrateTools = ["ItemToolbox","ItemFishingPole","ItemGPS","ItemMap","ItemMachete","ItemKnife","ItemFlashlight","ItemMatchbox","ItemHatchet","Binocular_Vector","ItemKeyKit","Binocular","ItemCompass","NVGoggles_DZE","ItemRadio"]; +DZMSMeds = [_bloodbag,"ItemBandage","ItemAntibiotic6","ItemPainkiller6","ItemMorphine","ItemAntibacterialWipe","ItemEpinephrine","ItemSepsisBandage","equip_woodensplint","FoodMRE","ItemWaterBottleSafe"]; +DZMSPacks = ["Patrol_Pack_DZE1","Assault_Pack_DZE1","Czech_Vest_Pouch_DZE1","TerminalPack_DZE1","TinyPack_DZE1","ALICE_Pack_DZE1","TK_Assault_Pack_DZE1","CompactPack_DZE1","British_ACU_DZE1","GunBag_DZE1","NightPack_DZE1","SurvivorPack_DZE1","AirwavesPack_DZE1","CzechBackpack_DZE1","WandererBackpack_DZE1","LegendBackpack_DZE1","CoyoteBackpack_DZE1","LargeGunBag_DZE1"]; +DZMSGrenades = ["HandGrenade_west","FlareGreen_M203","FlareWhite_M203"]; +DZMSBuildSupply = [[7,"CinderBlocks"],[2,"MortarBucket"],[3,"ItemPole"],[3,"PartPlywoodPack"],[3,"PartPlankPack"],[3,"ItemSandbag"],[3,"ItemWire"],[1,"ItemFireBarrel_kit"],[1,"forest_large_net_kit"],[1,"ItemComboLock"],[3,"ItemTankTrap"],[1,"ItemRSJ"]]; // [Number to add to crate,Item] +DZMSCraftingSupply = ["ItemCanvas","equip_tent_poles","equip_nails","ItemScrews","equip_scrapelectronics","equip_floppywire","equip_metal_sheet","equip_1inch_metal_pipe","equip_2inch_metal_pipe","equip_rope","ItemLightBulb","ItemCorrugated","ItemMetalSheet"]; +DZMSBuildTools = ["ItemCrowbar","ItemEtool","ItemToolbox","ItemSledgeHammer","ChainSaw","Hammer_DZE","ItemSledge","Handsaw_DZE","ItemSolder_DZE"]; +DZMSVehAmmo = ["100Rnd_762x51_M240","1500Rnd_762x54_PKT","2000Rnd_762x51_M134","100Rnd_762x54_PK","100Rnd_127x99_M2","150Rnd_127x107_DSHKM"]; +DZMSVehParts = ["PartEngine","PartFueltank","PartGeneric","PartGlass","PartVRotor","PartWheel","ItemFuelcan","ItemJerrycan","ItemFuelBarrel"]; +DZMSHighValue = ["ItemTallSafe","ItemVault","ItemVault2","ItemLockbox","ItemLockbox2","ItemLockboxWinter","ItemLockboxWinter2","plot_pole_kit"]; + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/ExtConfig/OverpochExtConfig.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/ExtConfig/OverpochExtConfig.sqf new file mode 100755 index 0000000..5f3423b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/ExtConfig/OverpochExtConfig.sqf @@ -0,0 +1,161 @@ +/* + OverpochExtConfig.sqf + This config file is loaded in DZMSInit.sqf if both Epoch and Overwatch mods are detected. + It contains specific AI, Crate, and Vehicle configurations for DayZ Overpoch. +*/ + +// Generates keys for mission vehicles and places it in the gear. Only works if DZMSSaveVehicles is set to true and Epoch is detected. +DZMSMakeVehKey = true; + +//If you have ZSC installed then you can set this to true to place money in ai wallets. +DZMSAICheckWallet = false; + +// Do you want AI to use RPG7V's? +// Odd numbered AI will spawn with one if enabled. +DZMSUseRPG = false; + +// Do you want static M2 heavy machine gunners at the missions? (Some of the easier missions don't have them). +DZMSM2Static = false; + +/////////////////////////////////////////////// +// Arrays of skin classnames for the AI to use +DZMSBanditSkins = ["Bandit1_DZ","BanditW1_DZ","TK_INS_Warlord_EP1_DZ","GUE_Commander_DZ"]; +DZMSHeroSkins = ["Survivor3_DZ","Survivor2_DZ","SurvivorW2_DZ","Soldier1_DZ","Camo1_DZ","UN_CDF_Soldier_EP1"]; + +//////////////////////// +// Array of AI Skills +DZMSSkills0 = [ + ["aimingAccuracy",0.10], + ["aimingShake",0.45], + ["aimingSpeed",0.45], + ["endurance",0.40], + ["spotDistance",0.30], + ["spotTime",0.30], + ["courage",0.40], + ["reloadSpeed",0.50], + ["commanding",0.40], + ["general",0.40] +]; + +DZMSSkills1 = [ + ["aimingAccuracy",0.125], + ["aimingShake",0.60], + ["aimingSpeed",0.60], + ["endurance",0.55], + ["spotDistance",0.45], + ["spotTime",0.45], + ["courage",0.55], + ["reloadSpeed",0.60], + ["commanding",0.55], + ["general",0.55] +]; + +DZMSSkills2 = [ + ["aimingAccuracy",0.15], + ["aimingShake",0.75], + ["aimingSpeed",0.70], + ["endurance",0.70], + ["spotDistance",0.60], + ["spotTime",0.60], + ["courage",0.70], + ["reloadSpeed",0.70], + ["commanding",0.70], + ["general",0.70] +]; + +DZMSSkills3 = [ + ["aimingAccuracy",0.20], + ["aimingShake",0.85], + ["aimingSpeed",0.80], + ["endurance",0.80], + ["spotDistance",0.70], + ["spotTime",0.70], + ["courage",0.80], + ["reloadSpeed",0.80], + ["commanding",0.80], + ["general",0.80] +]; + +// Set the bloodbag type +local _bloodbag = ["bloodBagONEG","ItemBloodbag"] select dayz_classicBloodBagSystem; + +///////////////////////////////////////////////////////////// +// These are gear sets that will be randomly given to the AI +DZMSGear0 = [ + ["ItemBandage","ItemSepsisBandage","ItemAntibiotic6","ItemPainkiller6","ItemSodaGrapeDrink","FoodBaconCooked"], + ["ItemKnife","ItemFlashlight"] +]; + +DZMSGear1 = [ + ["ItemBandage","ItemSepsisBandage","ItemPainkiller6","ItemMorphine","ItemSodaRocketFuel","FoodGoatCooked"], + ["ItemToolbox","ItemEtool"] +]; + +DZMSGear2 = [ + ["ItemBandage","ItemAntibacterialWipe",_bloodbag,"ItemPainkiller6","ItemSodaSacrite","FishCookedTrout"], + ["ItemMatchbox","ItemHatchet"] +]; + +DZMSGear3 = [ + ["ItemBandage","ItemSepsisBandage","ItemMorphine","ItemHeatPack","ItemSodaRabbit","FoodMRE"], + ["ItemCrowbar","ItemMachete"] +]; + +DZMSGear4 = [ + ["ItemBandage","ItemAntibacterialWipe","ItemEpinephrine",_bloodbag,"ItemSodaMtngreen","FoodRabbitCooked"], + ["ItemGPS","Binocular_Vector"] +]; + +// New to DayZ Epoch 1.0.7. Dog tags can be traded at hero and bandit vendors for +/- humanity. +DZMS_HeroDogTag = .15; // Chance for a dog tag on hero NPC: Between 0 and 1. +DZMS_BanditDogTag = .15; // Chance for a dog tag on bandit NPC: Between 0 and 1. + +///////////////////////////////////////////////////////////////////////////////////////////// +// These are arrays of vehicle classnames for the missions. + +//Armed Choppers +DZMSChoppers = ["BAF_Merlin_DZE","UH60M_MEV_EP1_DZ","CH_47F_EP1_DZE","UH1H_DZE","Mi17_DZE","UH60M_EP1_DZE","UH1Y_DZE","MH60S_DZE","UH1H_CDF_DZE","UH1H_WD_DZE","UH1H_2_DZE","UH1H_DES_DZE","UH1H_GREY_DZE","UH1H_BLACK_DZE","UH1H_SAR_DZE","Mi17_DZE","Mi17_TK_EP1_DZE","Mi17_UN_CDF_EP1_DZE","Mi17_CDF_DZE","Mi17_DES_DZE","Mi17_GREEN_DZE","Mi17_BLUE_DZE","Mi17_BLACK_DZE","Mi171Sh_CZ_EP1_DZE","MH60S_DZE","Ka60_GL_PMC_DZE","AW159_Lynx_BAF_DZE","UH60M_EP1_DZE","UH1Y_DZE","CH_47F_EP1_DZE","CH_47F_EP1_Black_DZE","CH_47F_EP1_GREY_DZE","CH_47F_EP1_DES_DZE","pook_transport_DZE","pook_transport_CDF_DZE","pook_gunship_DZE","pook_gunship_CDF_DZE"]; + +//Small Vehicles +DZMSSmallVic = ["hilux1_civil_3_open_DZE","SUV_TK_CIV_EP1_DZE","HMMWV_DZ","UAZ_Unarmed_UN_EP1_DZE","HMMWV_Ambulance_CZ_DES_EP1_DZE","LandRover_TK_CIV_EP1_DZE","SUV_Camo","Nissan_Orange_DZE","BTR40_TK_INS_EP1_DZE","Jeep_DZE","ScrapAPC_DZE","Tractor_Armored_DZE"]; + +//Large Vehicles +DZMSLargeVic = ["Kamaz_DZE","MTVR_DES_EP1_DZE","Ural_INS_DZE","Ural_CDF_DZE","Ural_TK_CIV_EP1_DZE","Ural_UN_EP1_DZE","V3S_Open_TK_CIV_EP1_DZE","V3S_Open_TK_EP1_DZE","T810A_ACR_DZE","T810A_ACR_DES_DZE","T810A_ACR_OPEN_DZE","T810A_ACR_DES_OPEN_DZE","MTVR_Open_DZE","MTVR_DZE"]; + +//////////////////////////////////////////////////////////////// +// Weapons that can be added to AI or crates +DZMSPistol = ["RH_m9","RH_m9c","RH_m93r","RH_M9sd","RH_m9csd","RH_browninghp","vil_B_HP","RH_anac","RH_anacg","RH_python","RH_deagle","RH_Deagleg","RH_Deaglem","RH_Deaglemzb","RH_Deaglemz","RH_Deagles","vil_Glock","RH_g17","vil_Glock_o","RH_g17sd","RH_g18","RH_g19","RH_g19t","RH_tec9","RH_m1911","RH_m1911sd","RH_m1911old","RH_mk22","RH_mk22sd","RH_mk22v","RH_mk22vsd","RH_p38","RH_ppk","RH_mk2","RH_p226","RH_p226s","RH_bull","RH_tt33","RH_usp","RH_uspm","RH_uspsd","vil_USP45","vil_USP45SD","vil_USP","vil_USPSD","RH_vz61"]; +DZMSAK = ["vil_AEK2","vil_AEK_GL","vil_AeK_3","vil_AeK_23","vil_AeK_3_K","vil_AK_105","Vil_AK_105_c","vil_AK_101","vil_AK_103","vil_AK_107","Vil_AK_107_c","vil_ak12","vil_ak12_ap","vil_ak12_gp","vil_AK_47","vil_AK_47_49","vil_AK_47_m1","vil_AK_47","vil_AK_74_N","vil_AK_74P","vil_AK_74m","vil_AK_74m_p29","vil_AK_74m_EOT_Alfa","vil_AK_74m_gp_29","vil_AK_74m_gp","vil_AK_74m_EOT","vil_AK_74m_EOT_FSB","vil_AK_74m_EOT_FSB_60","vil_AK_74m_EOT_FSB_45","vil_AK_74m_c","vil_AK_74m_k","vil_AK_74m_PSO","vil_AKM","vil_AKM_GL","vil_AKMS","vil_AKMS_GP25","vil_AKMSB","vil_AKS_47","vil_AKS_74","vil_AKS_74_gp","vil_AKS_74p_gp","vil_AKS_74p","vil_AKS_74p_45","vil_AKs_74_u","vil_AKs_74_u45","Vil_AKS_74_UB","Vil_AKS_74_UN_kobra","vil_AMD63","vil_AMD","vil_Abakan","vil_Abakan_P29","vil_Abakan_gp","vil_AK_nato_m1","vil_ASH82","vil_MPi","vil_PMI74S","vil_PMI","vil_PMIS","vil_type88_1","vil_M64","vil_M70","vil_M70B","vil_AK_nato_m80"]; +DZMSSpare = ["vil_Galil","vil_Galil_arm","vil_SKS","gms_k98","gms_k98_knife","gms_k98_rg","gms_k98zf39"]; +DZMSACRSD = ["FHQ_ACR_BLK_CCO_GL_SD","FHQ_ACR_TAN_CCO_GL_SD","FHQ_ACR_SNW_CCO_GL_SD","FHQ_ACR_WDL_CCO_GL_SD","FHQ_ACR_BLK_CCO_SD","FHQ_ACR_TAN_CCO_SD","FHQ_ACR_SNW_CCO_SD","FHQ_ACR_WDL_CCO_SD","FHQ_ACR_BLK_G33_GL_SD","FHQ_ACR_TAN_G33_GL_SD","FHQ_ACR_SNW_G33_GL_SD","FHQ_ACR_WDL_G33_GL_SD","FHQ_ACR_BLK_G33_SD","FHQ_ACR_TAN_G33_SD","FHQ_ACR_SNW_G33_SD","FHQ_ACR_WDL_G33_SD","FHQ_ACR_BLK_HAMR_GL_SD","FHQ_ACR_TAN_HAMR_GL_SD","FHQ_ACR_SNW_HAMR_GL_SD","FHQ_ACR_WDL_HAMR_GL_SD","FHQ_ACR_BLK_HAMR_SD","FHQ_ACR_TAN_HAMR_SD","FHQ_ACR_SNW_HAMR_SD","FHQ_ACR_WDL_HAMR_SD","FHQ_ACR_BLK_HWS_GL_SD","FHQ_ACR_TAN_HWS_GL_SD","FHQ_ACR_SNW_HWS_GL_SD","FHQ_ACR_WDL_HWS_GL_SD","FHQ_ACR_BLK_HWS_SD","FHQ_ACR_TAN_HWS_SD","FHQ_ACR_SNW_HWS_SD","FHQ_ACR_WDL_HWS_SD","FHQ_ACR_BLK_IRN_GL_SD","FHQ_ACR_TAN_IRN_GL_SD","FHQ_ACR_SNW_IRN_GL_SD","FHQ_ACR_WDL_IRN_GL_SD","FHQ_ACR_BLK_RCO_GL_SD","FHQ_ACR_TAN_RCO_GL_SD","FHQ_ACR_SNW_RCO_GL_SD","FHQ_ACR_WDL_RCO_GL_SD","FHQ_ACR_BLK_RCO_SD","FHQ_ACR_TAN_RCO_SD","FHQ_ACR_SNW_RCO_SD","FHQ_ACR_WDL_RCO_SD","FHQ_ACR_BLK_IRN_SD","FHQ_ACR_TAN_IRN_SD","FHQ_ACR_SNW_IRN_SD","FHQ_ACR_WDL_IRN_SD"]; +DZMSACR = ["FHQ_ACR_BLK_IRN","FHQ_ACR_TAN_IRN","FHQ_ACR_SNW_IRN","FHQ_ACR_WDL_IRN","FHQ_ACR_BLK_CCO","FHQ_ACR_TAN_CCO","FHQ_ACR_SNW_CCO","FHQ_ACR_WDL_CCO","FHQ_ACR_BLK_CCO_GL","FHQ_ACR_TAN_CCO_GL","FHQ_ACR_SNW_CCO_GL","FHQ_ACR_WDL_CCO_GL","FHQ_ACR_BLK_G33","FHQ_ACR_TAN_G33","FHQ_ACR_SNW_G33","FHQ_ACR_WDL_G33","FHQ_ACR_BLK_G33_GL","FHQ_ACR_TAN_G33_GL","FHQ_ACR_SNW_G33_GL","FHQ_ACR_WDL_G33_GL","FHQ_ACR_BLK_HAMR","FHQ_ACR_TAN_HAMR","FHQ_ACR_SNW_HAMR","FHQ_ACR_WDL_HAMR","FHQ_ACR_BLK_HAMR_GL","FHQ_ACR_TAN_HAMR_GL","FHQ_ACR_SNW_HAMR_GL","FHQ_ACR_WDL_HAMR_GL","FHQ_ACR_BLK_HWS","FHQ_ACR_TAN_HWS","FHQ_ACR_SNW_HWS","FHQ_ACR_WDL_HWS","FHQ_ACR_BLK_HWS_GL","FHQ_ACR_TAN_HWS_GL","FHQ_ACR_SNW_HWS_GL","FHQ_ACR_WDL_HWS_GL","FHQ_ACR_BLK_IRN_GL","FHQ_ACR_TAN_IRN_GL","FHQ_ACR_SNW_IRN_GL","FHQ_ACR_WDL_IRN_GL","FHQ_ACR_BLK_RCO","FHQ_ACR_TAN_RCO","FHQ_ACR_SNW_RCO","FHQ_ACR_WDL_RCO","FHQ_ACR_BLK_RCO_GL","FHQ_ACR_TAN_RCO_GL","FHQ_ACR_SNW_RCO_GL","FHQ_ACR_WDL_RCO_GL"]; +DZMSSCAR = ["SCAR_L_CQC_CCO_SD","SCAR_L_CQC","SCAR_L_CQC_Holo","SCAR_L_CQC_EGLM_Holo","SCAR_L_STD_EGLM_RCO","SCAR_L_STD_HOLO","SCAR_L_STD_Mk4CQT","SCAR_H_CQC_CCO","SCAR_H_CQC_CCO_SD","SCAR_H_STD_EGLM_Spect","SCAR_H_LNG_Sniper","SCAR_H_LNG_Sniper_SD"]; +DZMSSMG = ["vil_9a91","vil_9a91_c","vil_9a91_csd","vil_VAL","vil_VAL_C","vil_Groza_HG","vil_Groza_GL","vil_Groza_SC","vil_Groza_SD","vil_Vikhr","vil_vsk94","vil_MP5_EOTech","vil_MP5SD_EOTech","vil_uzimini","vil_uzimini_SD","vil_uzi","vil_uzi_c","vil_uzi_SD"]; +DZMSSniper = ["USSR_cheytacM200","USSR_cheytacM200_sd","vil_SVD_63","vil_SVD_N","vil_SVD_M","vil_SVD_P21","vil_SVD_S","FHQ_MSR_DESERT","FHQ_MSR_NV_DESERT","FHQ_MSR_NV_SD_DESERT","FHQ_MSR_SD_DESERT","FHQ_RSASS_TAN","FHQ_RSASS_SD_TAN","vil_SV_98_69","vil_SV_98","vil_SV_98_SD","vil_SVDK","FHQ_XM2010_DESERT","FHQ_XM2010_NV_DESERT","FHQ_XM2010_NV_SD_DESERT","FHQ_XM2010_SD_DESERT"]; +DZMSTavor = ["RH_ctar21","RH_ctar21glacog","RH_ctar21m","RH_ctar21mgl","RH_star21"]; +DZMSG3 = ["vil_AG3","vil_G3a2","vil_G3a3","vil_G3an","vil_G3anb","vil_G3SG1","vil_G3sg1b","vil_G3TGS","vil_G3TGSb","vil_G3ZF","vil_G3zfb","vil_G3a4","vil_G3a4b"]; +DZMSMasada = ["RH_masacog","RH_masaim","RH_masbaim","RH_masb","RH_masbeotech","RH_mas","RH_massd","RH_massdacog","RH_masbsdacog","RH_massdaim","RH_masbsdaim","RH_masbsd","RH_massdeotech","RH_masbsdeotech"]; +DZMSLMG = ["vil_RPK75_Romania","vil_M240_B","vil_M249_Para","skavil_M60","skavil_M60e3","vil_Mg3","vil_MG4","vil_MG4E","vil_PKP","vil_PKP_EOT","vil_PK","vil_PKM","vil_RPD","vil_RPK","vil_RPK75","vil_RPK74","vil_RPK74M","vil_RPK74M_P29","vil_RPK75_M72","vil_zastava_m84"]; +DZMSHk417 = ["RH_hk417","RH_hk417acog","RH_hk417aim","RH_hk417s","RH_hk417sacog","RH_hk417saim","RH_hk417seotech","RH_hk417eotech","RH_hk417sd","RH_hk417sdacog","RH_hk417sdaim","RH_hk417sdeotech","RH_hk417sdsp","RH_hk417sp","RH_hk417sglacog","RH_hk417sgl","RH_hk417sglaim","RH_hk417sgleotech"]; +DZMSHk416 = ["RH_hk416","RH_hk416glacog","RH_hk416gl","RH_hk416aim","RH_hk416glaim","RH_hk416s","RH_hk416sacog","RH_hk416sglacog","RH_hk416saim","RH_hk416sglaim","RH_hk416seotech","RH_hk416sgleotech","RH_hk416sgl","RH_hk416eotech","RH_hk416gleotech","RH_hk416sd","RH_hk416sdgl","RH_hk416sdglaim","RH_hk416sdeotech","RH_hk416sdgleotech"]; +DZMSG36 = ["vil_AG36KA4","vil_AG36KV","vil_G36KSKdes","vil_G36KA4","vil_G36KSKES","vil_G36KSKdesES","vil_G36KES","vil_G36KVZ","vil_G36KSK","vil_G36VA4Eot","vil_G36KV3","vil_G36KVA4","vil_G36KV3Des","vil_G36VA4","vil_AG36","vil_G36a2","vil_AG36A2","vil_G36CC","vil_G36E"]; +DZMSHkDMR = ["vil_HK417s","vil_M110","vil_M110sd","RH_m14","vil_M14G","RH_m14acog","RH_m14aim","RH_m14eot","RH_m1s","RH_m1sacog","RH_m1saim","RH_m1seot","RH_m1sshd","RH_m1ssp","RH_m1st","RH_m1stacog","RH_m1staim","RH_m1steot","RH_m1stshd","RH_m1stsp","RH_m21","vil_M21G","RH_sc2","RH_sc2acog","RH_sc2aim","RH_sc2eot","RH_sc2shd","RH_sc2sp","vil_SR25","vil_SR25SD"]; + +// Weapon arrays that can spawn on the AI +DZMSAIWeps = [DZMSAK,DZMSSpare,DZMSACRSD,DZMSACR,DZMSSCAR,DZMSSMG,DZMSSniper,DZMSTavor,DZMSG3,DZMSMasada,DZMSLMG,DZMSHk417,DZMSHk416,DZMSG36,DZMSHkDMR]; + +// Weapon arrays that can spawn in the crates - Pistols spawn separately +DZMSCrateWeps = [DZMSAK,DZMSSpare,DZMSACRSD,DZMSACR,DZMSSCAR,DZMSSMG,DZMSSniper,DZMSTavor,DZMSG3,DZMSMasada,DZMSLMG,DZMSHk417,DZMSHk416,DZMSG36,DZMSHkDMR]; + +// Items and tools that can be added to crates +DZMSGeneralStore = ["ItemTent","ItemTentWinter","forest_net_kit","ItemMixOil","ItemWaterBottleSafe","ItemSodaCoke","ItemSodaPepsi","ItemSodaMdew","ItemSodaMtngreen","ItemSodaR4z0r","ItemSodaClays","ItemSodaSmasht","ItemSodaDrwaste","ItemSodaFranka","ItemSodaLemonade","ItemSodaLirik","ItemSodaLvg","ItemSodaMzly","ItemSodaPeppsy","ItemSodaRabbit","ItemSodaSacrite","ItemSodaRocketFuel","ItemSodaGrapeDrink","ItemSherbet","FoodPistachio","FoodNutmix","FoodChipsSulahoops","FoodChipsMysticales","FoodChipsChocolate","FoodCandyChubby","FoodCandyAnders","FoodCandyLegacys","FoodCandyMintception","FoodCakeCremeCakeClean","FoodCanBeef","FoodCanPotatoes","FoodCanGriff","FoodCanBadguy","FoodCanBoneboy","FoodCanCorn","FoodCanCurgon","FoodCanDemon","FoodCanFraggleos","FoodCanHerpy","FoodCanDerpy","FoodCanOrlok","FoodCanPowell","FoodCanTylers","FoodCanUnlabeled","FoodCanBakedBeans","FoodCanSardines","FoodCanFrankBeans","FoodCanPasta","FoodCanRusUnlabeled","FoodCanRusStew","FoodCanRusPork","FoodCanRusPeas","FoodCanRusMilk","FoodCanRusCorn","ItemJerrycan"]; +DZMSCrateTools = ["ItemToolbox","ItemFishingPole","ItemGPS","ItemMap","ItemMachete","ItemKnife","ItemFlashlight","ItemMatchbox","ItemHatchet","Binocular_Vector","ItemKeyKit","Binocular","ItemCompass","NVGoggles_DZE","ItemRadio"]; +DZMSMeds = [_bloodbag,"ItemBandage","ItemAntibiotic6","ItemPainkiller6","ItemMorphine","ItemAntibacterialWipe","ItemEpinephrine","ItemSepsisBandage","equip_woodensplint","FoodMRE","ItemWaterBottleSafe"]; +DZMSPacks = ["Patrol_Pack_DZE1","Assault_Pack_DZE1","Czech_Vest_Pouch_DZE1","TerminalPack_DZE1","TinyPack_DZE1","ALICE_Pack_DZE1","TK_Assault_Pack_DZE1","CompactPack_DZE1","British_ACU_DZE1","GunBag_DZE1","NightPack_DZE1","SurvivorPack_DZE1","AirwavesPack_DZE1","CzechBackpack_DZE1","WandererBackpack_DZE1","LegendBackpack_DZE1","CoyoteBackpack_DZE1","LargeGunBag_DZE1"]; +DZMSGrenades = ["HandGrenade_west","FlareGreen_M203","FlareWhite_M203"]; +DZMSBuildSupply = [[3,"CinderBlocks"],[1,"MortarBucket"],[3,"ItemPole"],[3,"PartPlywoodPack"],[3,"PartPlankPack"],[3,"ItemSandbag"],[3,"ItemWire"],[1,"ItemFireBarrel_kit"],[1,"forest_large_net_kit"],[1,"ItemComboLock"],[3,"ItemTankTrap"],[1,"ItemRSJ"]]; // [Number to add to crate,Item] +DZMSCraftingSupply = ["equip_tent_poles","equip_nails","ItemScrews","equip_scrapelectronics","equip_floppywire","equip_metal_sheet","equip_1inch_metal_pipe","equip_2inch_metal_pipe","equip_rope","ItemLightBulb","ItemCorrugated","ItemMetalSheet"]; +DZMSBuildTools = ["ItemCrowbar","ItemEtool","ItemToolbox","ItemSledgeHammer","ChainSaw","Hammer_DZE","ItemSledge","Handsaw_DZE","ItemSolder_DZE"]; +DZMSVehAmmo = ["100Rnd_762x51_M240","1500Rnd_762x54_PKT","2000Rnd_762x51_M134","100Rnd_762x54_PK","100Rnd_127x99_M2","150Rnd_127x107_DSHKM"]; +DZMSVehParts = ["PartEngine","PartFueltank","PartGeneric","PartGlass","PartVRotor","PartWheel","ItemFuelcan","ItemJerrycan","ItemFuelBarrel"]; +DZMSHighValue = ["ItemTallSafe","ItemVault","ItemVault2","ItemLockbox","ItemLockbox2","ItemLockboxWinter","ItemLockboxWinter2","plot_pole_kit"]; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/ExtConfig/VanillaExtConfig.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/ExtConfig/VanillaExtConfig.sqf new file mode 100755 index 0000000..d7abe64 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/ExtConfig/VanillaExtConfig.sqf @@ -0,0 +1,133 @@ +/* + VanillaExtConfig.sqf + This config file is loaded in DZMSInit.sqf if the Vanilla DayZ Mod is detected. + It contains specific AI, Crate, and Vehicle configurations for DayZ Vanilla Mod. +*/ + +/////////////////////////////////////////////// +// Arrays of skin classnames for the AI to use +DZMSBanditSkins = ["Bandit1_DZ","BanditW1_DZ","TK_GUE_Soldier_Sniper_EP1","TK_Soldier_Officer_EP1"]; +DZMSHeroSkins = ["Survivor3_DZ","Survivor2_DZ","SurvivorW2_DZ","Soldier1_DZ","Camo1_DZ","UN_CDF_Soldier_EP1","CZ_Soldier_DES_EP1","UN_CDF_Soldier_Officer_EP1"]; + +//////////////////////// +// Array of AI Skills +DZMSSkills0 = [ + ["aimingAccuracy",0.10], + ["aimingShake",0.45], + ["aimingSpeed",0.45], + ["endurance",0.40], + ["spotDistance",0.30], + ["spotTime",0.30], + ["courage",0.40], + ["reloadSpeed",0.50], + ["commanding",0.40], + ["general",0.40] +]; + +DZMSSkills1 = [ + ["aimingAccuracy",0.125], + ["aimingShake",0.60], + ["aimingSpeed",0.60], + ["endurance",0.55], + ["spotDistance",0.45], + ["spotTime",0.45], + ["courage",0.55], + ["reloadSpeed",0.60], + ["commanding",0.55], + ["general",0.55] +]; + +DZMSSkills2 = [ + ["aimingAccuracy",0.15], + ["aimingShake",0.75], + ["aimingSpeed",0.70], + ["endurance",0.70], + ["spotDistance",0.60], + ["spotTime",0.60], + ["courage",0.70], + ["reloadSpeed",0.70], + ["commanding",0.70], + ["general",0.70] +]; + +DZMSSkills3 = [ + ["aimingAccuracy",0.20], + ["aimingShake",0.85], + ["aimingSpeed",0.80], + ["endurance",0.80], + ["spotDistance",0.70], + ["spotTime",0.70], + ["courage",0.80], + ["reloadSpeed",0.80], + ["commanding",0.80], + ["general",0.80] +]; + +// Set the bloodbag type +local _bloodbag = ["bloodBagONEG","ItemBloodbag"] select dayz_classicBloodBagSystem; + +///////////////////////////////////////////////////////////// +// These are gear sets that will be randomly given to the AI +DZMSGear0 = [ + ["ItemBandage","ItemBandage","ItemAntibiotic","ItemPainkiller","ItemSodaGrapeDrink","FoodBaconCooked"], + ["ItemKnife","ItemFlashlight"] +]; + +DZMSGear1 = [ + ["ItemBandage","ItemBandage","ItemPainkiller","ItemMorphine","ItemSodaRocketFuel","FoodGoatCooked"], + ["ItemToolbox","ItemEtool"] +]; + +DZMSGear2 = [ + ["ItemBandage","ItemAntibacterialWipe",_bloodbag,"ItemPainkiller","ItemSodaSacrite","FishCookedTrout"], + ["ItemMatchbox","ItemHatchet"] +]; + +DZMSGear3 = [ + ["ItemBandage","ItemBandage","ItemMorphine","ItemHeatPack","ItemSodaRabbit","FoodMRE"], + ["ItemCrowbar","ItemMachete"] +]; + +DZMSGear4 = [ + ["ItemBandage","ItemAntibacterialWipe","ItemEpinephrine",_bloodbag,"ItemSodaMtngreen","FoodRabbitCooked"], + ["ItemGPS","Binocular_Vector"] +]; + +///////////////////////////////////////////////////////////////////////////////////////////// +// These are arrays of vehicle classnames for the missions. + +//Armed Choppers +DZMSChoppers = ["UH1H_DZ","Mi17_DZ","UH1H_2_DZ"]; + +//Small Vehicles +DZMSSmallVic = ["hilux1_civil_3_open_EP1","SUV_TK_CIV_EP1","HMMWV_DZ","UAZ_Unarmed_UN_EP1","BAF_Offroad_D"]; + +//Large Vehicles +DZMSLargeVic = ["Ural_TK_CIV_EP1","Ural_INS","V3S_Civ"]; + +//////////////////////////////////////////////////////////////// +// Weapons Arrays - These can be adjusted as desired or make your own custom arrays +DZMSPistol = ["M9_DZ","M9_SD_DZ","G17_DZ","G17_SD_DZ","Makarov_DZ","Makarov_SD_DZ","Revolver_DZ","M1911_DZ","PDW_DZ"]; +DZMSAssault = ["M16A2_DZ","M4A1_DZ","M4A1_SD_DZ","SA58_RIS_DZ","L85A2_DZ","L85A2_SD_DZ","AKM_DZ","G36C_DZ","G36C_SD_DZ","G36A_Camo_DZ","G36K_Camo_DZ","G36K_Camo_SD_DZ"]; +DZMSLMG = ["L110A1_DZ","M249_DZ","M240_DZ","Mk48_DZ","RPK_DZ","UK59_DZ","PKM_DZ"]; +DZMSSMG = ["Bizon_DZ","Bizon_SD_DZ","MP5_DZ","MP5_SD_DZ"]; +DZMSSniper = ["Mosin_PU_DZ","M4SPR","M14_DZ","M24_DZ","M24_des_EP1","M40A3_DZ","SVD_DZ","SVD_des_EP1","FNFAL_DZ","DMR_DZ","L115A3_DZ","L115A3_2_DZ"]; +DZMSSingleShot = ["Remington870_DZ","M1014_DZ","Winchester1866_DZ","LeeEnfield_DZ","CZ550_DZ"]; + +// Weapon arrays that can spawn on the AI. Because I want mostly assault rifles, I add them to the array multiple times to increase the frequency +DZMSAIWeps = [DZMSAssault,DZMSAssault,DZMSAssault,DZMSAssault,DZMSSMG,DZMSSingleShot,DZMSLMG,DZMSSniper]; + +// Weapon arrays that can spawn in the crates. Pistols spawn separately +DZMSCrateWeps = [DZMSAssault,DZMSAssault,DZMSAssault,DZMSLMG,DZMSSniper]; + +// Items and tools that can be added to crates +DZMSGeneralStore = ["ItemSandbag","equip_string","equip_duct_tape","equip_rope","equip_herb_box","equip_pvc_box","equip_lever","equip_rag","ItemJerrycan","PartWoodPile","ItemTent","ItemDomeTent","ItemWaterBottleSafe","ItemSodaCoke","ItemSodaPepsi","ItemSodaMdew","ItemSodaMtngreen","ItemSodaR4z0r","ItemSodaClays","ItemSodaSmasht","ItemSodaDrwaste","ItemSodaFranka","ItemSodaLemonade","ItemSodaLirik","ItemSodaLvg","ItemSodaMzly","ItemSodaPeppsy","ItemSodaRabbit","ItemSodaSacrite","ItemSodaRocketFuel","ItemSodaGrapeDrink","ItemSherbet","FoodPistachio","FoodNutmix","FoodChipsSulahoops","FoodChipsMysticales","FoodChipsChocolate","FoodCandyChubby","FoodCandyAnders","FoodCandyLegacys","FoodCandyMintception","FoodCakeCremeCakeClean","FoodCanBeef","FoodCanPotatoes","FoodCanGriff","FoodCanBadguy","FoodCanBoneboy","FoodCanCorn","FoodCanCurgon","FoodCanDemon","FoodCanFraggleos","FoodCanHerpy","FoodCanDerpy","FoodCanOrlok","FoodCanPowell","FoodCanTylers","FoodCanUnlabeled","FoodCanBakedBeans","FoodCanSardines","FoodCanFrankBeans","FoodCanPasta","FoodCanRusUnlabeled","FoodCanRusStew","FoodCanRusPork","FoodCanRusPeas","FoodCanRusMilk","FoodCanRusCorn"]; +DZMSCrateTools = ["ItemToolbox","ItemFishingPole","ItemGPS","ItemMap","ItemMachete","ItemKnife","ItemFlashlight","ItemMatchbox","ItemHatchet","Binocular_Vector"]; +DZMSMeds = [_bloodbag,"ItemBandage","ItemAntibiotic","ItemPainkiller","ItemMorphine","ItemAntibacterialWipe","ItemEpinephrine","FoodMRE","ItemWaterBottleSafe"]; +DZMSPacks = ["DZ_Patrol_Pack_EP1","DZ_Assault_Pack_EP1","DZ_Czech_Vest_Pouch","DZ_ALICE_Pack_EP1","DZ_TK_Assault_Pack_EP1","DZ_British_ACU","DZ_CivilBackpack_EP1","DZ_Backpack_EP1"]; +DZMSGrenades = ["HandGrenade_west","FlareGreen_M203","FlareWhite_M203"]; +DZMSBuildSupply = [[2,"equip_1inch_metal_pipe"],[2,"equip_2inch_metal_pipe"],[2,"equip_metal_sheet"],[2,"equip_metal_sheet_rusted"],[5,"ItemStone"],[3,"ItemPlank"],[4,"ItemLog"],[1,"ItemCamonet"]]; // [Number to add to crate,Item] +DZMSCraftingSupply = ["ItemScrews","ItemPadlock","ItemRSJ","ItemConcreteBlock","equip_nails","equip_rag","equip_rope","equip_duct_tape","equip_string","equip_comfreyleafs","equip_herb_box"]; +DZMSBuildTools = ["ItemCrowbar","ItemEtool","ItemToolbox","ItemSledgeHammer","ItemShovel","ItemPickaxe","ItemDIY_wood","ItemDIY_Gate"]; +DZMSVehAmmo = ["100Rnd_762x51_M240","100Rnd_762x54_PK","150Rnd_127x107_DSHKM"]; // Not sure if can use 150Rnd_127x107_DSHKM +DZMSVehParts = ["PartEngine","PartFueltank","PartGeneric","PartGlass","PartVRotor","PartWheel","ItemFuelcan","ItemJerrycan"]; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/AN2_Cargo_Drop.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/AN2_Cargo_Drop.sqf new file mode 100755 index 0000000..151e16f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/AN2_Cargo_Drop.sqf @@ -0,0 +1,281 @@ +/* + AN-2 Bandit Supply Drop by Vampire + Example Code by Halv + Updated for DZMS 2.0 by JasonTM +*/ +uiSleep 2; +local _markBox = true; // Mark the location of the crate once it's on the ground. +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _name = "AN2 Supply Drop"; +local _localName = "STR_CL_DZMS_AN2_TITLE"; +local _coords = call DZMSFindPos; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _dotMarker = "DZMSDot" + str _mission; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,_dotMarker,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_AN2_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_AN2_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +//Lets get the AN2 Flying +local _dist = 8000; // increase or decrease this number to adjust the time it takes the plane to get to the mission. +local _porM = if (random 1 > .5) then {"+"} else {"-"}; +local _porM2 = if (random 1 > .5) then {"+"} else {"-"}; +local _startPos = call compile format ["[(%1 select 0) %2 %4,(%1 select 1) %3 %4, 300]",_coords,_porM,_porM2,_dist]; +local _plane = "AN2_DZ" createVehicle _startPos; +local _dir = [_plane, _coords] call BIS_fnc_relativeDirTo; +_plane setDir _dir; +_plane setPos _startPos; +_plane setVelocity [(sin _dir*150),(cos _dir*150),0]; +_plane engineOn true; +_plane flyInHeight 150; +_plane forceSpeed 175; +dayz_serverObjectMonitor set [count dayz_serverObjectMonitor, _plane]; + +//Lets make AI for the plane and get them in it +local _aiGrp = createGroup east; + +local _pilot = _aiGrp createUnit ["SurvivorW2_DZ",getPos _plane,[],0,"FORM"]; +_pilot moveInDriver _plane; +//_pilot assignAsDriver _plane; + +local _wp = _aiGrp addWaypoint [[(_coords select 0), (_coords select 1),150], 0]; +_wp setWaypointType "MOVE"; +_wp setWaypointBehaviour "CARELESS"; +_wp_pos = waypointPosition [_aiGrp,1]; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[_coords,6,1,_aiType,_mission] call DZMSAISpawn; +[_coords,6,2,_aiType,_mission] call DZMSAISpawn; +[_coords,4,3,_aiType,_mission] call DZMSAISpawn; + +uiSleep 2; + +local _aiCount = (DZMSMissionData select _mission) select 0; +local _groups = (DZMSMissionData select _mission) select 4; +local _staticGuns = (DZMSMissionData select _mission) select 5; +local _killReq = _aiCount - (DZMSRequiredKillPercent * _aiCount); +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _missionName = ["Bandit " + _name,"Hero " + _name] select _hero; +local _text = ""; +local _autoMarkDot = "DZMSAutoDot" + str _mission; +local _autoText = ""; + +// Add AI counter if enabled. +if (DZMSAICount) then { + _text = if (_hero) then { + ["STR_CL_MISSION_HERO_COUNT",_localName,_aiCount,"STR_CL_MISSION_HEROS"]; + } else { + ["STR_CL_MISSION_BANDIT_COUNT",_localName,_aiCount,"STR_CL_MISSION_BANDITS"]; + }; + PVDZ_ServerMarkerSend = ["textSingle",[_dotMarker,_text]]; + publicVariable "PVDZ_ServerMarkerSend"; + (_markers select 1) set [7, _text]; + DZE_ServerMarkerArray set [_markerIndex, _markers]; +}; + +local _half = false; +local _complete = false; +local _dropped = false; +local _crates = []; +local _chute = ""; +local _box = ""; +local _closestPlayer = objNull; +local _acArray = []; +local _claimed = false; +local _acTime = diag_tickTime; +local _claimTime = 0; +local _left = false; +local _leftTime = 0; +local _warnArray = []; +local _playerNear = false; +local _newCount = 0; + +while {!_complete} do { + _newCount = (DZMSMissionData select _mission) select 0; + if (DZMSAICount) then { + // Check to see if the AI count has changed and update the marker. + if (_newCount != _aiCount) then { + _aiCount = _newCount; + _text = if (_hero) then { + ["STR_CL_MISSION_HERO_COUNT",_localName,_aiCount,"STR_CL_MISSION_HEROS"]; + } else { + ["STR_CL_MISSION_BANDIT_COUNT",_localName,_aiCount,"STR_CL_MISSION_BANDITS"]; + }; + (_markers select 1) set [7, _text]; + PVDZ_ServerMarkerSend = ["textSingle",[_dotMarker,_text]]; + publicVariable "PVDZ_ServerMarkerSend"; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + }; + }; + + if (DZMSAutoClaim) then { + #include "\z\addons\dayz_server\DZMS\Scripts\DZMSAutoClaim.sqf" + }; + + if (!alive _plane && !_dropped) exitWith { + deleteVehicle _pilot; + [_coords,_mission,[],[],[],_groups,_staticGuns,_posIndex,true] spawn DZMSCleanupThread; + [_aiType,"STR_CL_DZMS_AN2_TITLE","STR_CL_DZMS_AN2_DEST"] call DZMSMessage; + }; + + if ((_plane distance _wp_pos) <= 1200 && !_half) then { + [_aiType,"STR_CL_DZMS_AN2_TITLE","STR_CL_DZMS_AN2_CLOSE"] call DZMSMessage; + + //Keep on truckin' + _plane forceSpeed 175; + _plane flyInHeight 135; + _plane setSpeedMode "LIMITED"; + _half = true; + }; + + // Check for near players + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + // If player is within range of the mission reset the start timer. + if (_playerNear) then {_startTime = diag_tickTime;}; + + if ((_plane distance _wp_pos) <= 200 && !_dropped) then { + //Drop the package + uiSleep 2; // let the plane get close to the mission center + local _dropDir = getDir _plane; + local _newPos = [(getPosATL _plane select 0) - 15*sin(_dropDir), (getPosATL _plane select 1) - 15*cos(_dropDir), (getPosATL _plane select 2) - 10]; + [_aiType,"STR_CL_DZMS_AN2_TITLE","STR_CL_DZMS_AN2_DROP"] call DZMSMessage; + + _chute = createVehicle ["ParachuteMediumEast", _newPos, [], 0, "FLY"]; + _chute setPos _newPos; + _box = [_mission,_coords,"DZ_AmmoBoxBigUS","weapons",[0,0,200]] call DZMSSpawnCrate; + _box attachTo [_chute, [0, 0, 1]]; + + deleteWaypoint [_aiGrp, 1]; + local _wp2 = _aiGrp addWaypoint [[0,0,150], 0]; + _wp2 setWaypointType "MOVE"; + _wp2 setWaypointBehaviour "CARELESS"; + _plane forceSpeed 350; + _plane setSpeedmode "FULL"; + _dropped = true; + }; + + if (_dropped) then { + //The box was dropped, lets get it on the ground. + // If the descent takes more than 45 seconds the chute is probably stuck in a tree. + if (isNil "_fallCount") then { + local _fallCount = 0; + while {_fallCount < 90} do { + uiSleep .5; + //if ((([_chute] call FNC_GetPos) select 2) < 2) then {_fallCount = 91}; + if ((([_box] call FNC_GetPos) select 2) < 2) then {_fallCount = 91}; + _fallCount = _fallCount + .5; + }; + detach _box; + _coords = [(getPos _box select 0), (getPos _box select 1), 0]; + _box setPos _coords; + deleteVehicle _chute; + + if (_markBox) then { + _markers set [4, [_coords,"DZMSCrateDot" + str _coords,"ColorBlack","Vehicle","","",[],["STR_EPOCH_BULK_NAME"],0]]; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + PVDZ_ServerMarkerSend = ["createSingle",(_markers select 4)]; + publicVariable "PVDZ_ServerMarkerSend"; + }; + }; + + // Timeout the mission if a player is not near + if ((diag_tickTime - _startTime) > (DZMSMissionTimeOut * 60) && !_playerNear) then { + _crates = (DZMSMissionData select _mission) select 3; + [_coords,_mission,[],[],_crates,_groups,_staticGuns,_posIndex,true] spawn DZMSCleanupThread; + [_aiType,"STR_CL_DZMS_AN2_TITLE","STR_CL_DZMS_AN2_FAIL"] call DZMSMessage; + _complete = true; + }; + + // Check for completion + if (_newCount <= _killReq) then { + if ([_coords,10] call DZMSNearPlayer) then { + _complete = true; + [_aiType,"STR_CL_DZMS_AN2_TITLE","STR_CL_DZMS_AN2_WIN"] call DZMSMessage; + + // Spawn loot in the crate + _crates = (DZMSMissionData select _mission) select 3; + { + [(_x select 0),(_x select 1)] call DZMSBoxSetup; + } count _crates; + + if (DZMSSceneryDespawnTimer > 0) then { + [_coords,_mission,[],[],_crates,_groups,_staticGuns,_posIndex,false] spawn DZMSCleanupThread; + }; + }; + }; + }; + uiSleep 2; +}; + +// Tell all clients to remove the markers from the map +local _remove = []; +{ + if (typeName _x == "ARRAY") then { + _remove set [count _remove, (_x select 1)]; + }; +} count _markers; +PVDZ_ServerMarkerSend = ["end",_remove]; +publicVariable "PVDZ_ServerMarkerSend"; + +//Let the timer know the mission is over +if (_hero) then { + DZMSHeroEndTime = diag_tickTime; + DZMSHeroRunning = DZMSHeroRunning - 1; +} else { + DZMSBanditEndTime = diag_tickTime; + DZMSBanditRunning = DZMSBanditRunning - 1; +}; + +// Remove marker and mission data +DZE_ServerMarkerArray set [_markerIndex, -1]; +DZE_MissionPositions set [_posIndex, -1]; +DZMSMissionData set [_mission, -1]; + +//Clean up the pilot and plane (if they exist) +if (!isNull _plane) then {deleteVehicle _plane;}; +if (!isNull _pilot) then {deleteVehicle _pilot;}; + +waitUntil{uiSleep 1; count units _aiGrp == 0}; +deleteGroup _aiGrp; + +diag_log text format["[DZMS]: %1 has Ended.",_missionName]; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/APC_Mission.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/APC_Mission.sqf new file mode 100755 index 0000000..92e64f8 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/APC_Mission.sqf @@ -0,0 +1,84 @@ +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "APCs"; +local _localName = "STR_CL_DZMS_APC_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_APC_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_APC_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +//We create the vehicles like normal +[_mission,_coords,(["BRDM2_WINTER_DZE","BRDM2_RUST_DZE","BRDM2_Desert_ACR_DZE","BTR60_TK_EP1_DZE","BTR60_Gue_DZE","BRDM2_TK_EP1_DZE","BRDM2_CDF_DZE","BRDM2_TK_GUE_EP1_DZE"] call BIS_fnc_selectRandom),[2.4,-4.3],150.5] call DZMSSpawnVeh; +//[_mission,_coords,(["BRDM2_WINTER_DZE","BRDM2_RUST_DZE","BRDM2_Desert_ACR_DZE","BTR60_TK_EP1_DZE","BTR60_Gue_DZE","BRDM2_TK_EP1_DZE","BRDM2_CDF_DZE","BRDM2_TK_GUE_EP1_DZE"] call BIS_fnc_selectRandom),[2.7,4.8],14.2] call DZMSSpawnVeh; +[_mission,_coords,(["HMMWV_Armored_DZE","Dingo_WDL_ACR_DZE","Dingo_DST_ACR_DZE","LAV25_HQ_DZE","HMMWV_Winter_Armored_DZE"] call BIS_fnc_selectRandom),[-6,-0.2],-74] call DZMSSpawnVeh; + +// Put a crate in the middle +[_mission,_coords,"DZ_AmmoBoxMedium1US","ArmedVehicle",[0,0]] call DZMSSpawnCrate; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[[(_coords select 0) - 8.4614,(_coords select 1) - 5.0527,0],6,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) - 8.4614,(_coords select 1) - 5.0527,0],4,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 7.5337,(_coords select 1) + 4.2656,0],4,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 7.5337,(_coords select 1) + 4.2656,0],4,1,_aiType,_mission] call DZMSAISpawn; + +// Spawn Static M2 Gunner positions if enabled. +if (DZMSM2Static) then { + [[ + [(_coords select 0) + 7.3,(_coords select 1) + 17, 0], + [(_coords select 0) - 18.4,(_coords select 1) + 2, 0], + [(_coords select 0) + 8,(_coords select 1) - 14.7, 0] + ],0,_aiType,_mission] call DZMSM2Spawn; +}; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_APC_WIN", + "STR_CL_DZMS_APC_FAIL" +] spawn DZMSWaitMissionComp; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Armed_Vehicles.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Armed_Vehicles.sqf new file mode 100755 index 0000000..833605a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Armed_Vehicles.sqf @@ -0,0 +1,88 @@ +/* + HMMWV Mission by lazyink (Full credit for original code to TheSzerdi & TAW_Tonic) + Updated to New Mission Format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "Armed Vehicles"; +local _localName = "STR_CL_DZMS_AV_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %3.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_AV_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_AV_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +//We create the vehicles like normal +[_mission,_coords,["Offroad_DSHKM_INS",(["HMMWV_GPK_M2_WINTER_DZE","ArmoredSUV_PMC_DZE","LandRover_MG_TK_EP1_DZE","HMMWV_M1114_DSHKM_ACR_DZE"] call BIS_fnc_selectRandom)] select DZMSEpoch,[-6.8,-3.2],-61] call DZMSSpawnVeh; +[_mission,_coords,["Pickup_PK_INS",(["GAZ_Vodnik_DZE","BTR40_MG_TK_INS_EP1_DZE","UAZ_MG_WINTER_DZE","HMMWV_M2_DZE"] call BIS_fnc_selectRandom)] select DZMSEpoch,[6.5,4.2],0] call DZMSSpawnVeh; + +// Put a crate in the middle +[_mission,_coords,"DZ_AmmoBoxMedium1US","ArmedVehicle",[0,0]] call DZMSSpawnCrate; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[[(_coords select 0) - 8.4614,(_coords select 1) - 5.0527,0],4,0,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) - 8.4614,(_coords select 1) - 5.0527,0],4,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 7.5337,(_coords select 1) + 4.2656,0],4,2,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 7.5337,(_coords select 1) + 4.2656,0],4,3,_aiType,_mission] call DZMSAISpawn; + +// Spawn Static M2 Gunner positions if enabled. +if (DZMSM2Static) then { + [[ + [(_coords select 0) + 15.5,(_coords select 1) - 13.2, 0], + [(_coords select 0) - 16,(_coords select 1) + 14.5, 0] + ],0,_aiType,_mission] call DZMSM2Spawn; +}; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_AV_WIN", + "STR_CL_DZMS_AV_FAIL" +] spawn DZMSWaitMissionComp; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/C130_Crash.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/C130_Crash.sqf new file mode 100755 index 0000000..e3de5d6 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/C130_Crash.sqf @@ -0,0 +1,108 @@ +/* + Medical C-130 Crash by lazyink (Full credit for original code to TheSzerdi & TAW_Tonic) + Modified to new format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "C130 Crash"; +local _localName = "STR_CL_DZMS_C130_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_C130_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_C130_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +// Spawn Mission Objects +local _objects = [[ // The last object in the list gets returned. + ["Barrels",[-7.4511,3.8544],61.911976], + ["Misc_palletsfoiled",[4.062,4.7216],-29.273479], + ["Paleta2",[-3.4033,-2.2256],52.402905], + ["Land_Pneu",[1.17,1.249],-117.27345], + ["Land_transport_crates_EP1",[3.9029,-1.8477],-70.372086], + ["Fort_Crate_wood",[-2.1181,5.9765],-28.122475], + ([["C130J_wreck_EP1",[-8.8681,15.3554,-.55],149.834555],["C130J",[-8.8681,15.3554],-30]] select DZMSEpoch) +],_coords,_mission] call DZMSSpawnObjects; + +local _wreck = _objects select 6; + +if (typeOf _wreck == "C130J") then { + _wreck setVehicleLock "LOCKED"; + _wreck animate ["ramp_top",1]; + _wreck animate ["ramp_bottom",1]; +}; + +//We create the mission vehicles +[_mission,_coords,DZMSSmallVic,[14.1426,-0.6202]] call DZMSSpawnVeh; +[_mission,_coords,DZMSSmallVic,[-6.541,-11.5557]] call DZMSSpawnVeh; + +//DZMSBoxFill fills the box, DZMSProtectObj prevents it from disappearing +[_mission,_coords,"DZ_AmmoBoxBigUS","supply",[-1.5547,2.3486]] call DZMSSpawnCrate; +[_mission,_coords,"DZ_AmmoBoxMedium1US","supply2",[0.3428,-1.8985]] call DZMSSpawnCrate; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[[(_coords select 0) - 10.5005,(_coords select 1) - 2.6465,0],6,0,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 4.7027,(_coords select 1) + 12.2138,0],6,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 2.918,(_coords select 1) - 9.0342,0],4,2,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 2.918,(_coords select 1) - 9.0342,0],4,3,_aiType,_mission] call DZMSAISpawn; + +// Spawn Static M2 Gunner positions if enabled. +if (DZMSM2Static) then { + [[ + [(_coords select 0) - 28.4,(_coords select 1) + 6, 0], + [(_coords select 0) + 8.9,(_coords select 1) + 27.43, 0] + ],0,_aiType,_mission] call DZMSM2Spawn; +}; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_C130_WIN", + "STR_CL_DZMS_C130_FAIL" +] spawn DZMSWaitMissionComp; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Construction_Site.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Construction_Site.sqf new file mode 100755 index 0000000..c8056d7 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Construction_Site.sqf @@ -0,0 +1,106 @@ +/* + Constructors Mission by lazyink (Full credit for original code to TheSzerdi & TAW_Tonic) + Updated to New Mission Format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "Construction Site"; +local _localName = "STR_CL_DZMS_CONST_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_CONST_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_CONST_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +// Spawn Mission Objects +local _objects = [[ + ["MAP_A_BuildingWIP",[-2,1,.04],-30], + ["Land_Ind_TankBig",[37,-7]], + ["Land_Ind_TankBig",[-13,-35]], + ["Land_Ind_Workshop01_01",[-27,-15],-31.6], + ["Land_Ind_Workshop01_03",[9,38],-72], + ["Land_Misc_Cargo1Ao",[31,20],99.8], + ["Land_Misc_Cargo1B",[-36,2]], + ["Land_Ind_TankSmall",[18,21],59] +],_coords,_mission] call DZMSSpawnObjects; + +local _wipBuilding = _objects select 0; + +//Create the vehicles +[_mission,_coords,DZMSLargeVic,[-3,28]] call DZMSSpawnVeh; +[_mission,_coords,DZMSSmallVic,[-26,14]] call DZMSSpawnVeh; + +//Create the loot +[_mission,(_wipBuilding modelToWorld [-2.06445,5.56738,-6.51697]),"DZ_AmmoBoxBigUS","supply",[0,0],-30] call DZMSSpawnCrate; +[_mission,(_wipBuilding modelToWorld [6.11914,5.56396,-6.40808]),"DZ_AmmoBoxBigUS","supply2",[0,0],-30] call DZMSSpawnCrate; +[_mission,(_wipBuilding modelToWorld [0.636719,5.57471,-6.43134]),"DZ_AmmoBoxBigUS","supply2",[0,0],-30] call DZMSSpawnCrate; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[[(_coords select 0) - 21,(_coords select 1) + 32,0],6,0,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 56,(_coords select 1) + 27,0],6,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 27,(_coords select 1) - 52,0],6,2,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) - 41,(_coords select 1) - 20,0],6,3,_aiType,_mission] call DZMSAISpawn; + +// Spawn Static M2 Gunner positions if enabled. +if (DZMSM2Static) then { + [[ + (_wipBuilding modelToWorld [3.88672,11.9736,5.3772]), + (_wipBuilding modelToWorld [-25.041,12.5439,5.8855]), + ((_objects select 2) modelToWorld [-5.40625,-4.40625,5.35645]), + ((_objects select 1) modelToWorld [4.62305,2.0127,5.35931]) + ],0,_aiType,_mission] call DZMSM2Spawn; +}; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_CONST_WIN", + "STR_CL_DZMS_CONST_FAIL" +] spawn DZMSWaitMissionComp; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Firebase.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Firebase.sqf new file mode 100755 index 0000000..8ce417d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Firebase.sqf @@ -0,0 +1,104 @@ +/* + Fire Base Camp by lazyink (Full credit for original code to TheSzerdi & TAW_Tonic) + Updated to New Mission Format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "Firebase"; +local _localName = "STR_CL_DZMS_FB_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_FB_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_FB_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +// Spawn Mission Objects +[[ + ["MAP_fort_rampart",[8,-14],-30], + ["MAP_fort_rampart",[-9,15],-210], + ["MAP_fort_rampart",[-16.6,-8.9],60], + ["MAP_fort_rampart",[16,10],-120], + ["MAP_HBarrier5",[2.3,-8.5],-30], + ["MAP_HBarrier5",[-8.9,-2.3],60], + ["MAP_HBarrier5",[6.9,7.2],60], + ["MAP_HBarrier5",[-6.1,6.8],-30], + ["MAP_fort_watchtower",[4.4,14.3],60], + ["MAP_fort_watchtower",[-15.3,2.3],60], + ["MAP_fort_watchtower",[15.7,-2.5],-120], + ["MAP_fort_watchtower",[-4.6,-14.1],-120] +],_coords,_mission] call DZMSSpawnObjects; + +[_mission,_coords,"DZ_AmmoBoxMedium1US","supply",[2,-4],-30] call DZMSSpawnCrate; +[_mission,_coords,"DZ_AmmoBoxMedium1US","supply2",[-2,4],-30] call DZMSSpawnCrate; +[_mission,_coords,"DZ_AmmoBoxMedium1US","weapons",[-5,-2.5],60] call DZMSSpawnCrate; +[_mission,_coords,"DZ_AmmoBoxMedium1US","weapons",[5,3.3],60] call DZMSSpawnCrate; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[[(_coords select 0) + 12,(_coords select 1) - 23,0],6,0,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) - 24,(_coords select 1) - 13,0],4,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) - 13,(_coords select 1) + 25,0],4,2,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 26,(_coords select 1) + 14,0],4,3,_aiType,_mission] call DZMSAISpawn; + +// Spawn Static M2 Gunner positions if enabled. +if (DZMSM2Static) then { + [[ + [(_coords select 0) + 18.45,(_coords select 1) - 8.41, 0], + [(_coords select 0) + 12.85,(_coords select 1) + 18.51, 0], + [(_coords select 0) - 18.09,(_coords select 1) + 9, 0], + [(_coords select 0) - 13.46,(_coords select 1) - 17.78, 0] + ],0,_aiType,_mission] call DZMSM2Spawn; +}; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_FB_WIN", + "STR_CL_DZMS_FB_FAIL" +] spawn DZMSWaitMissionComp; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/General_Store.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/General_Store.sqf new file mode 100755 index 0000000..0b23af3 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/General_Store.sqf @@ -0,0 +1,98 @@ +/* + General Store Mission by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "General Store"; +local _localName = "STR_CL_DZMS_GS_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_GS_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_GS_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +// Spawn Mission Objects +local _objects = [[ + ["MAP_A_GeneralStore_01",[0,0],-120], + ["MAP_Ind_TankSmall",[10.9,-12.9],-30], + ["MAP_t_acer2s",[-6.1,-24.3]], + ["MAP_t_acer2s",[-21.1,2.6]], + ["MAP_t_acer2s",[7.9,19.6]], + ["MAP_t_acer2s",[23,-7.2]] +],_coords,_mission] call DZMSSpawnObjects; + +local _store = _objects select 0; + +// Spawn the crate +[_mission,(_store modelToWorld [-8.94629,-3.66602,-1.2164]),"DZ_AmmoBoxMedium2US","store",[0,0],-30] call DZMSSpawnCrate; +[_mission,(_store modelToWorld [-6.87158,-3.67188,-1.21259]),"DZ_AmmoBoxMedium2US","weapons",[0,0],-30] call DZMSSpawnCrate; + +//Create the vehicle +[_mission,_coords,DZMSSmallVic,[16.8,-17.4],98.6] call DZMSSpawnVeh; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[[(_coords select 0) + 12,(_coords select 1) - 23,0],3,0,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) - 24,(_coords select 1) - 13,0],3,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) - 13,(_coords select 1) + 25,0],3,2,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 26,(_coords select 1) + 14,0],3,3,_aiType,_mission] call DZMSAISpawn; + +// Spawn Static M2 Gunner positions if enabled. +if (DZMSM2Static) then { + [[ + [(_coords select 0) + 25,(_coords select 1) - 25, 0], + (_store modelToWorld [7.69385,11.2803,-1.19305]) + ],0,_aiType,_mission] call DZMSM2Spawn; +}; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_GS_WIN", + "STR_CL_DZMS_GS_FAIL" +] spawn DZMSWaitMissionComp; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Helicopter_Crash.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Helicopter_Crash.sqf new file mode 100755 index 0000000..57af9e3 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Helicopter_Crash.sqf @@ -0,0 +1,79 @@ +/* + Bandit Heli Down! by lazyink (Full credit for code to TheSzerdi & TAW_Tonic) + Updated to new format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "Helicopter Crash"; +local _localName = "STR_CL_DZMS_HC_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_HC_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_HC_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +// Spawn Mission Objects +[[ + ["CrashSite_US",[0,0]] +],_coords,_mission] call DZMSSpawnObjects; + +[_mission,_coords,"DZ_AmmoBoxLong2RU","weapons",[-6,0]] call DZMSSpawnCrate; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[_coords,3,0,_aiType,_mission] call DZMSAISpawn; +[_coords,3,1,_aiType,_mission] call DZMSAISpawn; +[_coords,3,2,_aiType,_mission] call DZMSAISpawn; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_HC_WIN", + "STR_CL_DZMS_HC_FAIL" +] spawn DZMSWaitMissionComp; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Helicopter_Landing.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Helicopter_Landing.sqf new file mode 100755 index 0000000..37c23f8 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Helicopter_Landing.sqf @@ -0,0 +1,95 @@ +/* + Bandit Supply Heli Crash by lazyink (Full credit for original code to TheSzerdi & TAW_Tonic) + New Mission Format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "Helicopter Landing"; +local _localName = "STR_CL_DZMS_HL_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_HL_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_HL_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +// Spawn Mission Objects +[[ + ["Body1",[-3.0185,-0.084]], + ["Body2",[1.9248,2.1201]] +],_coords,_mission] call DZMSSpawnObjects; + +//We create the vehicles like normal +[_mission,_coords,DZMSChoppers,[0,0],-36.279881] call DZMSSpawnVeh; +[_mission,_coords,"HMMWV_DZ",[-8.7802,6.874]] call DZMSSpawnVeh; + +//DZMSBoxFill fills the box, DZMSProtectObj prevents it from disappearing +[_mission,_coords,"DZ_AmmoBoxLongGUE","weapons",[-6.1718,0.6426]] call DZMSSpawnCrate; +[_mission,_coords,"DZ_AmmoBoxFlatUS","store",[-7.1718,1.6426]] call DZMSSpawnCrate; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[[(_coords select 0) - 8.4614,(_coords select 1) - 5.0527,0],4,0,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) - 8.4614,(_coords select 1) - 5.0527,0],4,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 7.5337,(_coords select 1) + 4.2656,0],4,2,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 7.5337,(_coords select 1) + 4.2656,0],4,3,_aiType,_mission] call DZMSAISpawn; + +// Spawn Static M2 Gunner positions if enabled. +if (DZMSM2Static) then { + [[ + [(_coords select 0) + 13.28,(_coords select 1) - 16.46, 0], + [(_coords select 0) - 11.29,(_coords select 1) + 15.89, 0] + ],0,_aiType,_mission] call DZMSM2Spawn; +}; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_HL_WIN", + "STR_CL_DZMS_HL_FAIL" +] spawn DZMSWaitMissionComp; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Humvee_Crash.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Humvee_Crash.sqf new file mode 100755 index 0000000..7ae28c2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Humvee_Crash.sqf @@ -0,0 +1,78 @@ +/* + Hummer Wreck by lazyink (Full credit for code to TheSzerdi & TAW_Tonic) + Updated to new format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "Humvee Crash"; +local _localName = "STR_CL_DZMS_HUM_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_HUM_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_HUM_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +[[ + ["HMMWVwreck",[0,0]] +],_coords,_mission] call DZMSSpawnObjects; + +// Spawn crate +[_mission,_coords,"DZ_AmmoBoxLong2RU","weapons",[-14,0]] call DZMSSpawnCrate; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, AI type, mission number] +[_coords,3,1,_aiType,_mission] call DZMSAISpawn; +[_coords,3,1,_aiType,_mission] call DZMSAISpawn; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_HUM_WIN", + "STR_CL_DZMS_HUM_FAIL" +] spawn DZMSWaitMissionComp; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Medical_Cache.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Medical_Cache.sqf new file mode 100755 index 0000000..4aa8e22 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Medical_Cache.sqf @@ -0,0 +1,87 @@ +/* + Medical Crate by lazyink (Full credit for original code to TheSzerdi & TAW_Tonic) + Updated to new format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "Medical Cache"; +local _localName = "STR_CL_DZMS_MCACHE_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_MCACHE_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_MCACHE_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +//Lets add the scenery +[[ + ["Land_CamoNetB_NATO",[-0.0649,0.6025]] +],_coords,_mission] call DZMSSpawnObjects; + +//We create the vehicles like normal +[_mission,_coords,DZMSSmallVic,[10.0303,-12.2979]] call DZMSSpawnVeh; +[_mission,_coords,DZMSLargeVic,[-6.2764,-14.086]] call DZMSSpawnVeh; + +//[_mission,_coords,"USVehicleBox","medical",[0,0]] call DZMSSpawnCrate; +[_mission,_coords,"DZ_MedBox","medical",[-3.7251,-2.3614]] call DZMSSpawnCrate; +[_mission,_coords,"DZ_MedBox","medical",[-3.4346,0]] call DZMSSpawnCrate; +[_mission,_coords,"DZ_MedBox","medical",[4.0996,3.9072]] call DZMSSpawnCrate; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],4,0,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],4,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],4,2,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],4,3,_aiType,_mission] call DZMSAISpawn; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_MCACHE_WIN", + "STR_CL_DZMS_MCACHE_FAIL" +] spawn DZMSWaitMissionComp; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Medical_Camp.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Medical_Camp.sqf new file mode 100755 index 0000000..b177f1d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Medical_Camp.sqf @@ -0,0 +1,99 @@ +/* + Medical Supply Camp by lazyink (Full credit for original code to TheSzerdi & TAW_Tonic) + Updated to New Mission Format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "Medical Camp"; +local _localName = "STR_CL_DZMS_MCAMP_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_MCAMP_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_MCAMP_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +//Create the scenery +[[ + ["Land_fort_artillery_nest",[-5.939,10.0459],-31.158424], + ["Land_fort_artillery_nest",[6.3374,-11.1944],-211.14516], + ["Land_fort_rampart",[12.2456,6.249],-120.93051], + ["Land_fort_rampart",[-11.4253,-7.628],59.42643], + ["Land_CamoNetVar_EAST",[4.1738,-7.9112],-27.004126], + ["PowGen_Big",[-0.8936,8.1582],-56.044361], + ["Barrel5",[-2.5074,7.3466]], + ["Barrel5",[-3.293,7.9179]], + ["Land_Campfire_burning",[3.1367,-5.087]], + ["FoldChair",[0.8589,-6.2676],-132.43658], + ["FoldChair",[2.6909,-7.4805],-184.45828], + ["FoldChair",[5.4175,-5.4903],96.993355], + ["FoldChair",[4.5722,-7.2305],142.91867], + ["FoldChair",[5.0542,-3.4649],55.969147] +],_coords,_mission] call DZMSSpawnObjects; + +//Create the vehicles +[_mission,_coords,DZMSSmallVic,[-17.5078,5.2578]] call DZMSSpawnVeh; + +//Create the loot +//[_mission,_coords,"USLaunchersBox","weapons",[-6.8277,5.6748]] call DZMSSpawnCrate; +[_mission,_coords,"DZ_MedBox","medical",[-7.1519,1.8144],-29.851013] call DZMSSpawnCrate; +[_mission,_coords,"DZ_MedBox","medical",[-7.4116,2.5244]] call DZMSSpawnCrate; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[[(_coords select 0) - 0.5635,(_coords select 1) + 0.3173,0],3,0,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) - 0.5635,(_coords select 1) + 0.3173,0],3,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) - 0.5635,(_coords select 1) + 0.3173,0],3,2,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) - 0.5635,(_coords select 1) + 0.3173,0],3,3,_aiType,_mission] call DZMSAISpawn; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_MCAMP_WIN", + "STR_CL_DZMS_MCAMP_FAIL" +] spawn DZMSWaitMissionComp; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Medical_Outpost.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Medical_Outpost.sqf new file mode 100755 index 0000000..ca9c709 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Medical_Outpost.sqf @@ -0,0 +1,89 @@ +/* + Medical Outpost by lazyink (Full credit for code to TheSzerdi & TAW_Tonic) + Updated to new format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "Medical Outpost"; +local _localName = "STR_CL_DZMS_MOP_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_MOP_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_MOP_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +// Spawn Mission Objects +[[ + ["US_WarfareBFieldhHospital_Base_EP1",[2,5]], + ["MASH_EP1",[-24,-5]], + ["MASH_EP1",[-17,-5]], + ["MASH_EP1",[-10,-5]] +],_coords,_mission] call DZMSSpawnObjects; + +//We create the vehicles +[_mission,_coords,DZMSSmallVic,[10,-5]] call DZMSSpawnVeh; +[_mission,_coords,DZMSSmallVic,[15,-5]] call DZMSSpawnVeh; + +//We create and fill the crates +[_mission,_coords,"DZ_MedBox","medical",[-3,0,0.15]] call DZMSSpawnCrate; +[_mission,_coords,"DZ_AmmoBoxMedium2US","weapons",[-8,0]] call DZMSSpawnCrate; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[[(_coords select 0) - 20, (_coords select 1) - 15,0],4,0,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 10, (_coords select 1) + 15,0],4,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) - 10, (_coords select 1) - 15,0],4,2,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 20, (_coords select 1) + 15,0],4,3,_aiType,_mission] call DZMSAISpawn; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_MOP_WIN", + "STR_CL_DZMS_MOP_FAIL" +] spawn DZMSWaitMissionComp; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA1.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA1.sqf new file mode 100755 index 0000000..9167e68 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA1.sqf @@ -0,0 +1,71 @@ +/* // + Weapons Cache Mission by lazyink (Original Full Code by TheSzerdi & TAW_Tonic) + New Mission Format by Vampire +*/ // + +private ["_missName","_coords","_net","_veh1","_veh2","_vehicle","_vehicle1","_crate","_crate1","_crate2","_crate3"]; + +//Name of the Mission +_missName = "NATO Weapons Cache"; + +//DZMSFindPos loops BIS_fnc_findSafePos until it gets a valid result +_coords = call DZMSFindPos; + +[nil,nil,rTitleText,"Bandits have Overrun a NATO Weapons Cache!", "PLAIN",10] call RE; + +//DZMSAddMajMarker is a simple script that adds a marker to the location +[_coords,_missname] ExecVM DZMSAddMajMarker; + +//Lets add the scenery +_net = createVehicle ["Land_CamoNetB_NATO",[(_coords select 0) - 0.0649, (_coords select 1) + 0.6025,0],[], 0, "CAN_COLLIDE"]; +[_net] call DZMSProtectObj; + +//We create the vehicles like normal +_veh1 = ["small"] call DZMSGetVeh; +_veh2 = ["large"] call DZMSGetVeh; +_vehicle = createVehicle [_veh1,[(_coords select 0) + 10.0303, (_coords select 1) - 12.2979,10],[], 0, "CAN_COLLIDE"]; +_vehicle1 = createVehicle [_veh2,[(_coords select 0) - 6.2764, (_coords select 1) - 14.086,10],[], 0, "CAN_COLLIDE"]; + +//DZMSSetupVehicle prevents the vehicle from disappearing and sets fuel and such +[_vehicle] call DZMSSetupVehicle; +[_vehicle1] call DZMSSetupVehicle; + +_crate = createVehicle ["USVehicleBox",_coords,[], 0, "CAN_COLLIDE"]; +_crate1 = createVehicle ["AmmoBoxSmall_556",[(_coords select 0) - 3.7251,(_coords select 1) - 2.3614, 0],[], 0, "CAN_COLLIDE"]; +_crate2 = createVehicle ["AmmoBoxSmall_762",[(_coords select 0) - 3.4346, 0, 0],[], 0, "CAN_COLLIDE"]; +_crate3 = createVehicle ["AmmoBoxSmall_556",[(_coords select 0) + 4.0996,(_coords select 1) + 3.9072, 0],[], 0, "CAN_COLLIDE"]; + +//DZMSBoxFill fills the box, DZMSProtectObj prevents it from disappearing +[_crate,"weapons"] ExecVM DZMSBoxSetup; +[_crate] call DZMSProtectObj; +[_crate1] call DZMSProtectObj; +[_crate2] call DZMSProtectObj; +[_crate3] call DZMSProtectObj; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, unitArray] +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],6,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],6,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],4,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],4,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; + +//Wait until the player is within 30 meters and also meets the kill req +[_coords,"DZMSUnitsMajor"] call DZMSWaitMissionComp; + +//Call DZMSSaveVeh to attempt to save the vehicles to the database +//If saving is off, the script will exit. +[_vehicle] ExecVM DZMSSaveVeh; +[_vehicle1] ExecVM DZMSSaveVeh; + +//Let everyone know the mission is over +[nil,nil,rTitleText,"The Weapons Cache is Under Survivor Control!", "PLAIN",6] call RE; +diag_log text format["[DZMS]: Major SM1 Weapon Cache Mission has Ended."]; +deleteMarker "DZMSMajMarker"; +deleteMarker "DZMSMajDot"; + +//Let the timer know the mission is over +DZMSMajDone = true; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA2.sqf new file mode 100755 index 0000000..bc0e2eb --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA2.sqf @@ -0,0 +1,163 @@ +/* + AN-2 Bandit Supply Drop by Vampire + Example Code by Halv +*/ + +private ["_missName","_coords","_plane","_aiGrp","_pilot","_wp","_wp_pos","_loop","_half","_newPos","_plane2","_chute","_box","_dropDir","_wp2","_fallCount","_boxFin"]; + +//Name of the Mission +_missName = "AN-2 w/ Supplies"; + +//DZMSFindPos loops BIS_fnc_findSafePos until it gets a valid result +_coords = call DZMSFindPos; + +[nil,nil,rTitleText,"Dave is flying in with an AN-2.\nCapture him and take his things!", "PLAIN",10] call RE; + +//DZMSAddMajMarker is a simple script that adds a marker to the location +[_coords,_missname] ExecVM DZMSAddMajMarker; + +//Lets get the AN2 Flying +_plane = createVehicle ["AN2_DZ", [0,0,500], [], 0, "FLY"]; +[_plane] call DZMSProtectObj; +_plane engineOn true; +_plane flyInHeight 150; +_plane forceSpeed 175; + +//Empty the plane +clearMagazineCargoGlobal _plane; +clearWeaponCargoGlobal _plane; + +//Lets make AI for the plane and get them in it +_aiGrp = creategroup east; + +_pilot = _aiGrp createUnit ["SurvivorW2_DZ",getPos _plane,[],0,"FORM"]; +_pilot moveindriver _plane; +_pilot assignAsDriver _plane; + +_wp = _aiGrp addWaypoint [[(_coords select 0), (_coords select 1),150], 0]; +_wp setWaypointType "MOVE"; +_wp setWaypointBehaviour "CARELESS"; +_wp_pos = waypointPosition [_aiGrp,1]; + +_pilot addWeapon 'NVGoggles'; +_pilot addWeapon 'ItemCompass'; +_pilot addWeapon 'ItemRadio'; +_pilot addWeapon 'ItemMap'; +_pilot addWeapon 'ItemGPS'; +sleep 5; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, unitArray] +[_coords,6,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[_coords,6,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[_coords,4,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; + +_loop = true; +_half = false; +while {_loop} do { + if (!Alive _plane OR !Alive _pilot) then { + sleep 5; + + // We are going to pretend the plane was shot down nearby + deleteVehicle _plane; + deleteVehicle _pilot; + + _newPos = [(_coords select 0) + (random(2000)),(_coords select 1) - (random(2000)),0]; + + if (surfaceIsWater _newPos) then { + //newPos is water, so lets just drop it on mark + //This is a temporary fix for needed logic + _newPos = _coords; + }; + + //Create the plane and kill it + _plane2 = createVehicle ["AN2_DZ", [(_newPos select 0),(_newPos select 1),200], [], 0, "FLY"]; + [_plane2] call DZMSProtectObj; + _plane2 engineOn true; + _plane2 flyInHeight 150; + _plane2 forceSpeed 175; + sleep 2; + _plane2 setDamage 1; + + //Update the location + [_coords,"AN2 Wreck"] ExecVM DZMSAddMajMarker; + [nil,nil,rTitleText,"The AN2 was shot down by UN Peacekeepers!\nGo Find the Supplies!", "PLAIN",10] call RE; + + _chute = createVehicle ["ParachuteMediumEast", [(_newPos select 0),(_newPos select 1),200], [], 0, "FLY"]; + [_chute] call DZMSProtectObj; + _box = createVehicle ["USVehicleBox", [(_newPos select 0),(_newPos select 1),200],[], 0, "CAN_COLLIDE"]; + [_box] call DZMSProtectObj; + _box attachTo [_chute, [0, 0, 1]]; + + _loop = false; + }; + + if ((Alive _plane) AND (Alive _pilot) AND ((_plane distance _wp_pos) <= 1200) AND (!(_half))) then { + [nil,nil,rTitleText,"The AN2 is only 1200m out from the drop point!", "PLAIN",10] call RE; + + //Keep on truckin' + _plane forceSpeed 175; + _plane flyInHeight 135; + _plane setspeedmode "LIMITED"; + _half = true; + }; + + if ((Alive _plane) AND (Alive _pilot) AND ((_plane distance _wp_pos) <= 200)) then { + //Drop the package + + _dropDir = getDir _plane; + _newPos = [(getPosATL _plane select 0) - 15*sin(_dropDir), (getPosATL _plane select 1) - 15*cos(_dropDir), (getPosATL _plane select 2) - 10]; + + [nil,nil,rTitleText,"The AN2 has reached the location and dropped the cargo!", "PLAIN",10] call RE; + + _chute = createVehicle ["ParachuteMediumEast", _newPos, [], 0, "FLY"]; + [_chute] call DZMSProtectObj; + _box = createVehicle ["USVehicleBox", _newPos,[], 0, "CAN_COLLIDE"]; + [_box] call DZMSProtectObj; + _box attachTo [_chute, [0, 0, 1]]; + + deleteWaypoint [_aiGrp, 1]; + _wp2 = _aiGrp addWaypoint [[0,0,150], 0]; + _wp2 setWaypointType "MOVE"; + _wp2 setWaypointBehaviour "CARELESS"; + _plane forceSpeed 350; + _plane setSpeedmode "FULL"; + + _loop = false; + }; +}; + +//The box was dropped, lets get it on the ground. +_fallCount = 0; +while {_fallCount < 45} do { + if (((getPos _box) select 2) < 1) then {_fallCount = 46}; + sleep 0.1; + _fallCount = _fallCount + 0.1; +}; + +detach _box; +_box setpos [(getpos _box select 0), (getpos _box select 1), 0]; +_boxFin = createVehicle ["USVehicleBox",[(getpos _box select 0),(getpos _box select 1), 0],[],0,"CAN_COLLIDE"]; +deletevehicle _box; +deletevehicle _chute; +[[(getpos _boxFin select 0), (getpos _boxFin select 1), 0],"AN2 Cargo"] ExecVM DZMSAddMajMarker; +clearWeaponCargoGlobal _boxFin; +clearMagazineCargoGlobal _boxFin; +clearBackpackCargoGlobal _boxFin; +[_boxFin,"weapons"] ExecVM DZMSBoxSetup; +[_boxFin] call DZMSProtectObj; + +//Wait until the player is within 30 meters and also meets the kill req +[position _boxFin,"DZMSUnitsMajor"] call DZMSWaitMissionComp; + +//Let everyone know the mission is over +[nil,nil,rTitleText,"The AN2 Cargo has been Secured by Survivors!", "PLAIN",6] call RE; +diag_log text format["[DZMS]: Major SM2 AN2 Drop Mission has Ended."]; +deleteMarker "DZMSMajMarker"; +deleteMarker "DZMSMajDot"; + +//Let the timer know the mission is over +DZMSMajDone = true; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA3.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA3.sqf new file mode 100755 index 0000000..2ebe78f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA3.sqf @@ -0,0 +1,128 @@ +/* + Medical Supply Camp by lazyink (Full credit for original code to TheSzerdi & TAW_Tonic) + Updated to New Mission Format by Vampire +*/ + +private ["_missName","_coords","_base1","_base2","_base3","_base4","_base5","_base6","_base7","_base8","_base9","_base10","_base11","_base12","_base13","_base14","_base15","_base16","_base17","_veh1","_vehicle","_crate"]; + +//Name of the Mission +_missName = "Bandit Medical Camp"; + +//DZMSFindPos loops BIS_fnc_findSafePos until it gets a valid result +_coords = call DZMSFindPos; + +[nil,nil,rTitleText,"Bandits have Opened a Medical Camp!\nStop Them from Re-Supplying the Region!", "PLAIN",10] call RE; + +//DZMSAddMajMarker is a simple script that adds a marker to the location +[_coords,_missname] ExecVM DZMSAddMajMarker; + +//Create the scenery +_base1 = createVehicle ["Land_fort_artillery_nest",[(_coords select 0) - 5.939,(_coords select 1) + 10.0459,0],[], 0, "CAN_COLLIDE"]; +_base1 setDir -31.158424; +[_base1] call DZMSProtectObj; +_base1 setVehicleLock "LOCKED"; +_base1 setPos [(_coords select 0) - 5.939,(_coords select 1) + 10.0459,0]; + +_base2 = createVehicle ["Land_fort_artillery_nest",[(_coords select 0) + 6.3374, (_coords select 1) - 11.1944,0],[], 0, "CAN_COLLIDE"]; +_base2 setDir -211.14516; +[_base2] call DZMSProtectObj; +_base2 setVehicleLock "LOCKED"; +_base2 setPos [(_coords select 0) + 6.3374, (_coords select 1) - 11.1944,0]; + +_base3 = createVehicle ["Land_fort_rampart",[(_coords select 0) + 12.2456, (_coords select 1) + 6.249,0],[], 0, "CAN_COLLIDE"]; +_base3 setDir -120.93051; +[_base3] call DZMSProtectObj; +_base3 setVehicleLock "LOCKED"; +_base3 setPos [(_coords select 0) + 12.2456, (_coords select 1) + 6.249,0]; + +_base4 = createVehicle ["Land_fort_rampart",[(_coords select 0) - 11.4253, (_coords select 1) - 7.628,0],[], 0, "CAN_COLLIDE"]; +_base4 setDir 59.42643; +[_base4] call DZMSProtectObj; +_base4 setVehicleLock "LOCKED"; +_base4 setPos [(_coords select 0) - 11.4253, (_coords select 1) - 7.628,0]; + +_base5 = createVehicle ["MedBox0",[(_coords select 0) - 7.1519, (_coords select 1) + 1.8144,0],[], 0, "CAN_COLLIDE"]; +_base5 setDir -29.851013; +[_base5] call DZMSProtectObj; + +_base6 = createVehicle ["MedBox0",[(_coords select 0) - 7.4116, (_coords select 1) + 2.5244,0],[], 0, "CAN_COLLIDE"]; +[_base6] call DZMSProtectObj; + +_base7 = createVehicle ["WeaponHolder_ItemToolbox",[(_coords select 0) - 7.7041, (_coords select 1) + 3.332,0],[], 0, "CAN_COLLIDE"]; +_base7 setDir -106.46461; +[_base7] call DZMSProtectObj; + +_base8 = createVehicle ["Land_CamoNetVar_EAST",[(_coords select 0) + 4.1738, (_coords select 1) - 7.9112],[], 0, "CAN_COLLIDE"]; +_base8 setDir -27.004126; +[_base8] call DZMSProtectObj; +_base8 setVehicleLock "LOCKED"; +_base8 setPos [(_coords select 0) + 4.1738, (_coords select 1) - 7.9112]; + +_base9 = createVehicle ["PowGen_Big",[(_coords select 0) - 0.8936, (_coords select 1) + 8.1582,0],[], 0, "CAN_COLLIDE"]; +_base9 setDir -56.044361; +[_base9] call DZMSProtectObj; + +_base10 = createVehicle ["Barrel5",[(_coords select 0) - 2.5074, (_coords select 1) + 7.3466,0],[], 0, "CAN_COLLIDE"]; +[_base10] call DZMSProtectObj; + +_base11 = createVehicle ["Barrel5",[(_coords select 0) - 3.293, (_coords select 1) + 7.9179,0],[], 0, "CAN_COLLIDE"]; +[_base11] call DZMSProtectObj; + +_base12 = createVehicle ["Land_Campfire_burning",[(_coords select 0) + 3.1367, (_coords select 1) - 5.087,0],[], 0, "CAN_COLLIDE"]; +[_base12] call DZMSProtectObj; + +_base13 = createVehicle ["FoldChair",[(_coords select 0) + 0.8589, (_coords select 1) - 6.2676,0],[], 0, "CAN_COLLIDE"]; +_base13 setDir -132.43658; +[_base13] call DZMSProtectObj; + +_base14 = createVehicle ["FoldChair",[(_coords select 0) + 2.6909, (_coords select 1) - 7.4805,0],[], 0, "CAN_COLLIDE"]; +_base14 setDir -184.45828; +[_base14] call DZMSProtectObj; + +_base15 = createVehicle ["FoldChair",[(_coords select 0) + 5.4175, (_coords select 1) - 5.4903,0],[], 0, "CAN_COLLIDE"]; +_base15 setDir 96.993355; +[_base15] call DZMSProtectObj; + +_base16 = createVehicle ["FoldChair",[(_coords select 0) + 4.5722, (_coords select 1) - 7.2305,0],[], 0, "CAN_COLLIDE"]; +_base16 setDir 142.91867; +[_base16] call DZMSProtectObj; + +_base17 = createVehicle ["FoldChair",[(_coords select 0) + 5.0542, (_coords select 1) - 3.4649,0],[], 0, "CAN_COLLIDE"]; +_base17 setDir 55.969147; +[_base17] call DZMSProtectObj; + +//Create the vehicles +_veh1 = ["small"] call DZMSGetVeh; +_vehicle = createVehicle [_veh1,[(_coords select 0) - 17.5078, (_coords select 1) + 5.2578,0],[], 0, "CAN_COLLIDE"]; +[_vehicle] call DZMSSetupVehicle; + +//Create the loot +_crate = createVehicle ["USLaunchersBox",[(_coords select 0) - 6.8277, (_coords select 1) + 5.6748,0],[], 0, "CAN_COLLIDE"]; +[_crate,"medical"] ExecVM DZMSBoxSetup; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, unitArray] +[[(_coords select 0) - 0.5635,(_coords select 1) + 0.3173,0],3,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[[(_coords select 0) - 0.5635,(_coords select 1) + 0.3173,0],3,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[[(_coords select 0) - 0.5635,(_coords select 1) + 0.3173,0],3,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[[(_coords select 0) - 0.5635,(_coords select 1) + 0.3173,0],3,1,"DZMSUnitsMajor"] call DZMSAISpawn; + + +//Wait until the player is within 30 meters and also meets the kill req +[_coords,"DZMSUnitsMajor"] call DZMSWaitMissionComp; + +//Call DZMSSaveVeh to attempt to save the vehicles to the database +//If saving is off, the script will exit. +[_vehicle] ExecVM DZMSSaveVeh; + +//Let everyone know the mission is over +[nil,nil,rTitleText,"Survivors have Taken Control of the Camp and Medical Supplies.", "PLAIN",6] call RE; +diag_log text format["[DZMS]: Major SM3 Medical Camp Mission has Ended."]; +deleteMarker "DZMSMajMarker"; +deleteMarker "DZMSMajDot"; + +//Let the timer know the mission is over +DZMSMajDone = true; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA4.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA4.sqf new file mode 100755 index 0000000..999045b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA4.sqf @@ -0,0 +1,71 @@ +/* + Bandit Supply Heli Crash by lazyink (Full credit for original code to TheSzerdi & TAW_Tonic) + New Mission Format by Vampire +*/ + +private ["_missName","_coords","_ranChopper","_chopper","_truck","_trash","_trash2","_crate","_crate2"]; + +//Name of the Mission +_missName = "Helicopter Landing"; + +//DZMSFindPos loops BIS_fnc_findSafePos until it gets a valid result +_coords = call DZMSFindPos; + +[nil,nil,rTitleText,"A Supply Helicopter has been Forced to Land!\nStop the Bandits from Taking Control of it!", "PLAIN",10] call RE; + +//DZMSAddMajMarker is a simple script that adds a marker to the location +[_coords,_missname] ExecVM DZMSAddMajMarker; + +//We create the vehicles like normal +_ranChopper = ["heli"] call DZMSGetVeh; +_chopper = createVehicle [_ranChopper,_coords,[], 0, "NONE"]; + +//DZMSSetupVehicle prevents the vehicle from disappearing and sets fuel and such +[_chopper] call DZMSSetupVehicle; +_chopper setDir -36.279881; + +_truck = createVehicle ["HMMWV_DZ",[(_coords select 0) - 8.7802,(_coords select 1) + 6.874,0],[], 0, "CAN_COLLIDE"]; +[_truck] call DZMSSetupVehicle; + +//Lets add the scenery +_trash = createVehicle ["Body1",[(_coords select 0) - 3.0185,(_coords select 1) - 0.084,0],[], 0, "CAN_COLLIDE"]; +_trash2 = createVehicle ["Body2",[(_coords select 0) + 1.9248,(_coords select 1) + 2.1201,0],[], 0, "CAN_COLLIDE"]; +[_trash] call DZMSProtectObj; +[_trash2] call DZMSProtectObj; + +//DZMSBoxFill fills the box, DZMSProtectObj prevents it from disappearing +_crate = createVehicle ["USLaunchersBox",[(_coords select 0) - 6.1718,(_coords select 1) + 0.6426,0],[], 0, "CAN_COLLIDE"]; +[_crate,"weapons"] ExecVM DZMSBoxSetup; +[_crate] call DZMSProtectObj; + +_crate2 = createVehicle ["USLaunchersBox",[(_coords select 0) - 7.1718,(_coords select 1) + 1.6426,0],[], 0, "CAN_COLLIDE"]; +[_crate2,"weapons"] ExecVM DZMSBoxSetup; +[_crate2] call DZMSProtectObj; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, unitArray] +[[(_coords select 0) - 8.4614,(_coords select 1) - 5.0527,0],6,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[[(_coords select 0) - 8.4614,(_coords select 1) - 5.0527,0],4,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[[(_coords select 0) + 7.5337,(_coords select 1) + 4.2656,0],4,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[[(_coords select 0) + 7.5337,(_coords select 1) + 4.2656,0],4,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; + +//Wait until the player is within 30 meters and also meets the kill req +[_coords,"DZMSUnitsMajor"] call DZMSWaitMissionComp; + +//Call DZMSSaveVeh to attempt to save the vehicles to the database +//If saving is off, the script will exit. +[_chopper] ExecVM DZMSSaveVeh; +[_truck] ExecVM DZMSSaveVeh; + +//Let everyone know the mission is over +[nil,nil,rTitleText,"The Helicopter has been Taken by Survivors!", "PLAIN",6] call RE; +diag_log text format["[DZMS]: Major SM4 Helicopter Landing Mission has Ended."]; +deleteMarker "DZMSMajMarker"; +deleteMarker "DZMSMajDot"; + +//Let the timer know the mission is over +DZMSMajDone = true; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA5.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA5.sqf new file mode 100755 index 0000000..94cacd7 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA5.sqf @@ -0,0 +1,85 @@ +/* + Medical Ural Attack by lazyink (Full credit for original code to TheSzerdi & TAW_Tonic) + Updated to New Format by Vampire +*/ + +private ["_missName","_coords","_crash","_body","_body1","_body2","_body3","_veh1","_vehicle","_vehicle1","_crate","_crate2"]; + +//Name of the Mission +_missName = "Ural Ambush"; + +//DZMSFindPos loops BIS_fnc_findSafePos until it gets a valid result +_coords = call DZMSFindPos; + +[nil,nil,rTitleText,"Bandits have Ambushed a Ural Carrying Supplies!", "PLAIN",10] call RE; + +//DZMSAddMajMarker is a simple script that adds a marker to the location +[_coords,_missname] ExecVM DZMSAddMajMarker; + +//We create the scenery +_crash = createVehicle ["UralWreck",_coords,[], 0, "CAN_COLLIDE"]; +_crash setDir 149.64919; +[_crash] call DZMSProtectObj; + +_body = createVehicle ["Body",[(_coords select 0) - 2.2905,(_coords select 1) - 3.3438,0],[], 0, "CAN_COLLIDE"]; +_body setDir 61.798588; +[_body] call DZMSProtectObj; + +_body1 = createVehicle ["Body",[(_coords select 0) - 2.8511,(_coords select 1) - 2.4346,0],[], 0, "CAN_COLLIDE"]; +_body1 setDir 52.402905; +[_body1] call DZMSProtectObj; + +_body2 = createVehicle ["Body",[(_coords select 0) - 3.435,(_coords select 1) - 1.4297,0],[], 0, "CAN_COLLIDE"]; +_body2 setDir -117.27345; +[_body2] call DZMSProtectObj; + +_body3 = createVehicle ["Body2",[(_coords select 0) - 4.0337,(_coords select 1) + 0.5,0],[], 0, "CAN_COLLIDE"]; +_body3 setDir 23.664057; +[_body3] call DZMSProtectObj; + +//We create the vehicles like normal +_veh1 = ["small"] call DZMSGetVeh; +_vehicle = createVehicle [_veh1,[(_coords select 0) + 5.7534, (_coords select 1) - 9.2149,0],[], 0, "CAN_COLLIDE"]; + +//DZMSSetupVehicle prevents the vehicle from disappearing and sets fuel and such +[_vehicle] call DZMSSetupVehicle; + +//DZMSBoxFill fills the box, DZMSProtectObj prevents it from disappearing +_crate = createVehicle ["USBasicWeaponsBox",[(_coords select 0) + 2.6778,(_coords select 1) - 3.0889,0],[], 0, "CAN_COLLIDE"]; +[_crate,"medical"] ExecVM DZMSBoxSetup; +[_crate] call DZMSProtectObj; +_crate setDir -28.85478; + +_crate2 = createVehicle ["USBasicWeaponsBox",[(_coords select 0) + 1.4805,(_coords select 1) - 3.7432,0],[], 0, "CAN_COLLIDE"]; +[_crate2,"medical"] ExecVM DZMSBoxSetup; +[_crate2] call DZMSProtectObj; +_crate2 setDir 62.744293; + +_crate3 = createVehicle ["USBasicAmmunitionBox",[(_coords select 0) + 2.5405,(_coords select 1) - 4.1612,0],[], 0, "CAN_COLLIDE"]; +[_crate3,"weapons"] ExecVM DZMSBoxSetup; +[_crate3] call DZMSProtectObj; +_crate3 setDir -27.93351; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, unitArray] +[[(_coords select 0) - 6.9458,(_coords select 1) - 3.5352, 0],6,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[[(_coords select 0) + 4.4614,(_coords select 1) + 2.5898, 0],6,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[[(_coords select 0) + 4.4614,(_coords select 1) + 2.5898, 0],4,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; + +//Wait until the player is within 30 meters and also meets the kill req +[_coords,"DZMSUnitsMajor"] call DZMSWaitMissionComp; + +//Call DZMSSaveVeh to attempt to save the vehicles to the database +//If saving is off, the script will exit. +[_vehicle] ExecVM DZMSSaveVeh; + +[nil,nil,rTitleText,"The Ural Supplies have been Secured by Survivors!", "PLAIN",6] call RE; +diag_log text format["[DZMS]: Major SM5 Ural Ambush Mission has Ended."]; +deleteMarker "DZMSMajMarker"; +deleteMarker "DZMSMajDot"; + +//Let the timer know the mission is over +DZMSMajDone = true; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA6.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA6.sqf new file mode 100755 index 0000000..9cb45ec --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMA6.sqf @@ -0,0 +1,71 @@ +/* + Medical Crate by lazyink (Full credit for original code to TheSzerdi & TAW_Tonic) + Updated to new format by Vampire +*/ + +private ["_missName","_coords","_net","_veh1","_veh2","_vehicle","_vehicle1","_crate"]; + +//Name of the Mission +_missName = "Bandit Protection"; + +//DZMSFindPos loops BIS_fnc_findSafePos until it gets a valid result +_coords = call DZMSFindPos; + +[nil,nil,rTitleText,"Sweets broke his legs again.\nGo kill the bandits protecting him.", "PLAIN",10] call RE; + +//DZMSAddMajMarker is a simple script that adds a marker to the location +[_coords,_missname] ExecVM DZMSAddMajMarker; + +//Lets add the scenery +_net = createVehicle ["Land_CamoNetB_NATO",[(_coords select 0) - 0.0649, (_coords select 1) + 0.6025,0],[], 0, "CAN_COLLIDE"]; +[_net] call DZMSProtectObj; + +//We create the vehicles like normal +_veh1 = ["small"] call DZMSGetVeh; +_veh2 = ["large"] call DZMSGetVeh; +_vehicle = createVehicle [_veh1,[(_coords select 0) + 10.0303, (_coords select 1) - 12.2979,10],[], 0, "CAN_COLLIDE"]; +_vehicle1 = createVehicle [_veh2,[(_coords select 0) - 6.2764, (_coords select 1) - 14.086,10],[], 0, "CAN_COLLIDE"]; + +//DZMSSetupVehicle prevents the vehicle from disappearing and sets fuel and such +[_vehicle] call DZMSSetupVehicle; +[_vehicle1] call DZMSSetupVehicle; + +_crate = createVehicle ["USVehicleBox",_coords,[], 0, "CAN_COLLIDE"]; +_crate1 = createVehicle ["MedBox0",[(_coords select 0) - 3.7251,(_coords select 1) - 2.3614, 0],[], 0, "CAN_COLLIDE"]; +_crate2 = createVehicle ["MedBox0",[(_coords select 0) - 3.4346, 0, 0],[], 0, "CAN_COLLIDE"]; +_crate3 = createVehicle ["MedBox0",[(_coords select 0) + 4.0996,(_coords select 1) + 3.9072, 0],[], 0, "CAN_COLLIDE"]; + +//DZMSBoxFill fills the box, DZMSProtectObj prevents it from disappearing +[_crate,"medical"] ExecVM DZMSBoxSetup; +[_crate] call DZMSProtectObj; +[_crate1] call DZMSProtectObj; +[_crate2] call DZMSProtectObj; +[_crate3] call DZMSProtectObj; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, unitArray] +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],6,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],6,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],4,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],4,1,"DZMSUnitsMajor"] call DZMSAISpawn; +sleep 5; + +//Wait until the player is within 30 meters and also meets the kill req +[_coords,"DZMSUnitsMajor"] call DZMSWaitMissionComp; + +//Call DZMSSaveVeh to attempt to save the vehicles to the database +//If saving is off, the script will exit. +[_vehicle] ExecVM DZMSSaveVeh; +[_vehicle1] ExecVM DZMSSaveVeh; + +//Let everyone know the mission is over +[nil,nil,rTitleText,"The Medical Cache is Under Survivor Control!", "PLAIN",6] call RE; +diag_log text format["[DZMS]: Major SM6 Medical Cache Mission has Ended."]; +deleteMarker "DZMSMajMarker"; +deleteMarker "DZMSMajDot"; + +//Let the timer know the mission is over +DZMSMajDone = true; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI1.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI1.sqf new file mode 100755 index 0000000..190f85a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI1.sqf @@ -0,0 +1,39 @@ +/* + Bandit Hunting Party by lazyink (Full credit to TheSzerdi & TAW_Tonic for the code) + Updated to new format by Vampire +*/ +private ["_missName","_coords","_vehicle"]; + +//Name of the Mission +_missName = "Bandit Squad"; + +//DZMSFindPos loops BIS_fnc_findSafePos until it gets a valid result +_coords = call DZMSFindPos; + +[nil,nil,rTitleText,"A Bandit Squad has been spotted!\nStop them from completing their patrol!", "PLAIN",10] call RE; + +//DZMSAddMinMarker is a simple script that adds a marker to the location +[_coords,_missName] ExecVM DZMSAddMinMarker; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, unitArray] +[_coords,2,1,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 5; +[_coords,2,1,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 5; +[_coords,2,1,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 5; +[_coords,2,1,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 1; + +//Wait until the player is within 30 meters and also meets the kill req +[_coords,"DZMSUnitsMinor"] call DZMSWaitMissionComp; + +//Let everyone know the mission is over +[nil,nil,rTitleText,"The Bandit Squad has been Wiped Out!", "PLAIN",6] call RE; +diag_log text format["[DZMS]: Minor SM1 Bandit Squad Mission has Ended."]; +deleteMarker "DZMSMinMarker"; +deleteMarker "DZMSMinDot"; + +//Let the timer know the mission is over +DZMSMinDone = true; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI2.sqf new file mode 100755 index 0000000..aeea92d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI2.sqf @@ -0,0 +1,77 @@ +/* + Medical Outpost by lazyink (Full credit for code to TheSzerdi & TAW_Tonic) + Updated to new format by Vampire +*/ +private ["_missName","_coords","_base","_base1","_base2","_base3","_veh1","_veh2","_vehicle","_vehicle1","_crate","_crate2"]; + +//Name of the Mission +_missName = "Medical Outpost"; + +//DZMSFindPos loops BIS_fnc_findSafePos until it gets a valid result +_coords = call DZMSFindPos; + +[nil,nil,rTitleText,"Bandits have established a Medical Outpost!\nGo Secure their Medical Supplies!", "PLAIN",10] call RE; + +//DZMSAddMinMarker is a simple script that adds a marker to the location +[_coords,_missName] ExecVM DZMSAddMinMarker; + +//We create the scenery +_base = createVehicle ["US_WarfareBFieldhHospital_Base_EP1",[(_coords select 0) +2, (_coords select 1)+5,-0.3],[], 0, "CAN_COLLIDE"]; +_base1 = createVehicle ["MASH_EP1",[(_coords select 0) - 24, (_coords select 1) - 5,0],[], 0, "CAN_COLLIDE"]; +_base2 = createVehicle ["MASH_EP1",[(_coords select 0) - 17, (_coords select 1) - 5,0],[], 0, "CAN_COLLIDE"]; +_base3 = createVehicle ["MASH_EP1",[(_coords select 0) - 10, (_coords select 1) - 5,0],[], 0, "CAN_COLLIDE"]; + +//DZMSProtectObj prevents it from disappearing +[_base] call DZMSProtectObj; +[_base1] call DZMSProtectObj; +[_base2] call DZMSProtectObj; +[_base3] call DZMSProtectObj; + +//We create the vehicles +_veh1 = ["small"] call DZMSGetVeh; +_veh2 = ["small"] call DZMSGetVeh; +_vehicle = createVehicle [_veh1,[(_coords select 0) + 10, (_coords select 1) - 5,0],[], 0, "CAN_COLLIDE"]; +_vehicle1 = createVehicle [_veh2,[(_coords select 0) + 15, (_coords select 1) - 5,0],[], 0, "CAN_COLLIDE"]; + +//DZMSSetupVehicle prevents the vehicle from disappearing and sets fuel and such +[_vehicle] call DZMSSetupVehicle; +[_vehicle1] call DZMSSetupVehicle; + +//We create and fill the crates +_crate = createVehicle ["USVehicleBox",[(_coords select 0) - 3, _coords select 1,0],[], 0, "CAN_COLLIDE"]; + +//DZMSBoxFill fills the box, DZMSProtectObj prevents it from disappearing +[_crate,"medical"] ExecVM DZMSBoxSetup; +[_crate] call DZMSProtectObj; + +_crate2 = createVehicle ["USLaunchersBox",[(_coords select 0) - 8, _coords select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate2,"weapons"] ExecVM DZMSBoxSetup; +[_crate2] call DZMSProtectObj; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, unitArray] +[[(_coords select 0) - 20, (_coords select 1) - 15,0],4,0,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 3; +[[(_coords select 0) + 10, (_coords select 1) + 15,0],4,0,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 3; +[[(_coords select 0) - 10, (_coords select 1) - 15,0],4,0,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 3; +[[(_coords select 0) + 20, (_coords select 1) + 15,0],4,0,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 3; + +//Wait until the player is within 30 meters and also meets the kill req +[_coords,"DZMSUnitsMinor"] call DZMSWaitMissionComp; + +//Call DZMSSaveVeh to attempt to save the vehicles to the database +//If saving is off, the script will exit. +[_vehicle] ExecVM DZMSSaveVeh; +[_vehicle1] ExecVM DZMSSaveVeh; + +//Let everyone know the mission is over +[nil,nil,rTitleText,"The Medical Outpost is under Survivor Control!", "PLAIN",6] call RE; +diag_log text format["[DZMS]: Minor SM2 Medical Outpost Mission has Ended."]; +deleteMarker "DZMSMinMarker"; +deleteMarker "DZMSMinDot"; + +//Let the timer know the mission is over +DZMSMinDone = true; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI3.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI3.sqf new file mode 100755 index 0000000..481de93 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI3.sqf @@ -0,0 +1,66 @@ +/* + Bandit Stash House by lazyink (Full credit for code to TheSzerdi & TAW_Tonic) + Updated to new format by Vampire +*/ +private ["_missName","_coords","_base","_base1","_veh1","_vehicle","_crate","_crate1"]; + +//Name of the Mission +_missName = "Stash House"; + +//DZMSFindPos loops BIS_fnc_findSafePos until it gets a valid result +_coords = call DZMSFindPos; + +[nil,nil,rTitleText,"Bandits have set up a Weapon Stash House!\nGo Empty it Out!", "PLAIN",10] call RE; + +//DZMSAddMinMarker is a simple script that adds a marker to the location +[_coords,_missName] ExecVM DZMSAddMinMarker; + +//We create the scenery +_base = createVehicle ["Land_HouseV_1I4",_coords,[], 0, "CAN_COLLIDE"]; +_base setDir 152.66766; +_base setPos _coords; +_base1 = createVehicle ["Land_kulna",[(_coords select 0) + 5.4585, (_coords select 1) - 2.885,0],[], 0, "CAN_COLLIDE"]; +_base1 setDir -28.282881; +_base1 setPos [(_coords select 0) + 5.4585, (_coords select 1) - 2.885,0]; + +//DZMSProtectObj prevents it from disappearing +[_base] call DZMSProtectObj; +[_base1] call DZMSProtectObj; + +//We create the vehicles +_veh1 = ["small"] call DZMSGetVeh; +_vehicle = createVehicle [_veh1,[(_coords select 0) - 10.6206, (_coords select 1) - 0.49,0],[], 0, "CAN_COLLIDE"]; + +//DZMSSetupVehicle prevents the vehicle from disappearing and sets fuel and such +[_vehicle] call DZMSSetupVehicle; + +//We create and fill the crate +_crate = createVehicle ["USBasicAmmunitionBox",[(_coords select 0) + 0.7408, (_coords select 1) + 1.565, 0.10033049],[], 0, "CAN_COLLIDE"]; +[_crate,"weapons"] ExecVM DZMSBoxSetup; +[_crate] call DZMSProtectObj; +_crate1 = createVehicle ["USBasicAmmunitionBox",[(_coords select 0) - 0.2387, (_coords select 1) + 1.043, 0.10033049],[], 0, "CAN_COLLIDE"]; +[_crate1,"weapons"] ExecVM DZMSBoxSetup; +[_crate1] call DZMSProtectObj; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, unitArray] +[[(_coords select 0) - 4.0796, (_coords select 1) - 11.709,0],6,2,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 3; +[[(_coords select 0) + 2.8872, (_coords select 1) + 18.964,0],6,2,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 3; + +//Wait until the player is within 30 meters and also meets the kill req +[_coords,"DZMSUnitsMinor"] call DZMSWaitMissionComp; + +//Call DZMSSaveVeh to attempt to save the vehicles to the database +//If saving is off, the script will exit. +[_vehicle] ExecVM DZMSSaveVeh; + +//Let everyone know the mission is over +[nil,nil,rTitleText,"The Stash House is under Survivor Control!", "PLAIN",6] call RE; +diag_log text format["[DZMS]: Minor SM3 Stash House Mission has Ended."]; +deleteMarker "DZMSMinMarker"; +deleteMarker "DZMSMinDot"; + +//Let the timer know the mission is over +DZMSMinDone = true; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI4.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI4.sqf new file mode 100755 index 0000000..149cd99 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI4.sqf @@ -0,0 +1,48 @@ +/* + Bandit Heli Down! by lazyink (Full credit for code to TheSzerdi & TAW_Tonic) + Updated to new format by Vampire +*/ +private ["_missName","_coords","_crash","_crate"]; + +//Name of the Mission +_missName = "Helicopter Crash"; + +//DZMSFindPos loops BIS_fnc_findSafePos until it gets a valid result +_coords = call DZMSFindPos; + +[nil,nil,rTitleText,"A Helicopter has Crashed!\nGo Check for Survivors!", "PLAIN",10] call RE; + +//DZMSAddMinMarker is a simple script that adds a marker to the location +[_coords,_missName] ExecVM DZMSAddMinMarker; + +//Add the scenery +_crash = createVehicle ["UH60Wreck_DZ", _coords,[], 0, "CAN_COLLIDE"]; + +//DZMSProtectObj prevents it from disappearing +[_crash] call DZMSProtectObj; + +//We create and fill the crates +_crate = createVehicle ["USLaunchersBox",[(_coords select 0) - 6, _coords select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate,"weapons"] ExecVM DZMSBoxSetup; +[_crate] call DZMSProtectObj; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, unitArray] +[_coords,3,1,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 1; +[_coords,3,1,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 1; +[_coords,3,1,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 1; + +//Wait until the player is within 30 meters and also meets the kill req +[_coords,"DZMSUnitsMinor"] call DZMSWaitMissionComp; + +//Let everyone know the mission is over +[nil,nil,rTitleText,"The Helicopter Crash has been Secured by Survivors!", "PLAIN",6] call RE; +diag_log text format["[DZMS]: Minor SM4 Crash Site Mission has Ended."]; +deleteMarker "DZMSMinMarker"; +deleteMarker "DZMSMinDot"; + +//Let the timer know the mission is over +DZMSMinDone = true; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI5.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI5.sqf new file mode 100755 index 0000000..60f4313 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI5.sqf @@ -0,0 +1,46 @@ +/* + Hummer Wreck by lazyink (Full credit for code to TheSzerdi & TAW_Tonic) + Updated to new format by Vampire +*/ +private ["_missName","_coords","_crash","_crate"]; + +//Name of the Mission +_missName = "Humvee Crash"; + +//DZMSFindPos loops BIS_fnc_findSafePos until it gets a valid result +_coords = call DZMSFindPos; + +[nil,nil,rTitleText,"A Humvee has crashed!\nGo Investigate the Cause of the Wreck!", "PLAIN",10] call RE; + +//DZMSAddMinMarker is a simple script that adds a marker to the location +[_coords,_missName] ExecVM DZMSAddMinMarker; + +//Add the scenery +_crash = createVehicle ["HMMWVwreck",_coords,[], 0, "CAN_COLLIDE"]; + +//DZMSProtectObj prevents it from disappearing +[_crash] call DZMSProtectObj; + +//Add and fill the crate +_crate = createVehicle ["RULaunchersBox",[(_coords select 0) - 14, _coords select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate,"weapons"] ExecVM DZMSBoxSetup; +[_crate] call DZMSProtectObj; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, unitArray] +[_coords,3,1,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 1; +[_coords,3,1,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 1; + +//Wait until the player is within 30 meters and also meets the kill req +[_coords,"DZMSUnitsMinor"] call DZMSWaitMissionComp; + +//Let everyone know the mission is over +[nil,nil,rTitleText,"The Humvee has been Secured by Survivors!", "PLAIN",6] call RE; +diag_log text format["[DZMS]: Minor SM5 Humvee Crash Mission has Ended."]; +deleteMarker "DZMSMinMarker"; +deleteMarker "DZMSMinDot"; + +//Let the timer know the mission is over +DZMSMinDone = true; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI6.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI6.sqf new file mode 100755 index 0000000..f87f054 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/SMI6.sqf @@ -0,0 +1,58 @@ +/* + Weapon Truck Crash by lazyink (Full credit for code to TheSzerdi & TAW_Tonic) + Updated to new format by Vampire +*/ +private ["_missName","_coords","_crash","_crate","_crate1","_crate2"]; + +//Name of the Mission +_missName = "Weapons Truck"; + +//DZMSFindPos loops BIS_fnc_findSafePos until it gets a valid result +_coords = call DZMSFindPos; + +[nil,nil,rTitleText,"A Weapons Truck has Crashed!\nGo Recover the Supplies!", "PLAIN",10] call RE; + +//DZMSAddMinMarker is a simple script that adds a marker to the location +[_coords,_missName] ExecVM DZMSAddMinMarker; + +//Add scenery +_crash = createVehicle ["UralWreck",_coords,[], 0, "CAN_COLLIDE"]; + +//DZMSProtectObj prevents it from disappearing +[_crash] call DZMSProtectObj; + +//Add and fill the boxes +_crate = createVehicle ["USLaunchersBox",[(_coords select 0) + 3, _coords select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate,"weapons"] ExecVM DZMSBoxSetup; +[_crate] call DZMSProtectObj; + +_crate1 = createVehicle ["USLaunchersBox",[(_coords select 0) - 3, _coords select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate1,"weapons"] ExecVM DZMSBoxSetup; +[_crate1] call DZMSProtectObj; + +_crate2 = createVehicle ["RULaunchersBox",[(_coords select 0) - 6, _coords select 1,0],[], 0, "CAN_COLLIDE"]; +[_crate2,"weapons"] ExecVM DZMSBoxSetup; +[_crate2] call DZMSProtectObj; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, unitArray] +[_coords,3,0,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 1; +[_coords,3,0,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 1; +[_coords,3,0,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 1; +[_coords,3,0,"DZMSUnitsMinor"] call DZMSAISpawn; +sleep 1; + +//Wait until the player is within 30 meters and also meets the kill req +[_coords,"DZMSUnitsMinor"] call DZMSWaitMissionComp; + +//Let everyone know the mission is over +[nil,nil,rTitleText,"The Weapons Truck has been Secured by Survivors!", "PLAIN",6] call RE; +diag_log text format["[DZMS]: Minor SM6 Weapons Truck Mission has Ended."]; +deleteMarker "DZMSMinMarker"; +deleteMarker "DZMSMinDot"; + +//Let the timer know the mission is over +DZMSMinDone = true; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Squad.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Squad.sqf new file mode 100755 index 0000000..af8c8a8 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Squad.sqf @@ -0,0 +1,71 @@ +/* + Bandit Hunting Party by lazyink (Full credit to TheSzerdi & TAW_Tonic for the code) + Updated to new format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "Patrol Squad"; +local _localName = "STR_CL_DZMS_PS_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_PS_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_PS_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[_coords,4,1,_aiType,_mission] call DZMSAISpawn; +[_coords,4,1,_aiType,_mission] call DZMSAISpawn; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_PS_WIN", + "STR_CL_DZMS_PS_FAIL" +] spawn DZMSWaitMissionComp; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Stash_House.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Stash_House.sqf new file mode 100755 index 0000000..d5db767 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Stash_House.sqf @@ -0,0 +1,93 @@ +/* + Bandit Stash House by lazyink (Full credit for code to TheSzerdi & TAW_Tonic) + Updated to new format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "Stash House"; +local _localName = "STR_CL_DZMS_STASH_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_STASH_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_STASH_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +//We create the scenery +local _objects = [[ + ["MAP_HouseV_1I4",[0,0],152.66766], + ["Land_kulna",[5.4585,-2.885],-28.282881] +],_coords,_mission] call DZMSSpawnObjects; + + +//We create the vehicle +[_mission,_coords,DZMSSmallVic,[-10.6206,-0.49]] call DZMSSpawnVeh; + +//We create and fill the crate +[_mission,((_objects select 0) modelToWorld [2.19922,-0.253906,-2.78906]),"DZ_AmmoBoxSmallUS","weapons",[0,0],240] call DZMSSpawnCrate; +[_mission,((_objects select 0) modelToWorld [2.22461,-1.58496,-2.7829]),"DZ_AmmoBoxSmallUS","weapons",[0,0],240] call DZMSSpawnCrate; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[[(_coords select 0) - 4.0796, (_coords select 1) - 11.709,0],6,2,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 2.8872, (_coords select 1) + 18.964,0],6,2,_aiType,_mission] call DZMSAISpawn; + +// Spawn Static M2 Gunner positions if enabled. +if (DZMSM2Static) then { + [[ + [(_coords select 0) - 7.9,(_coords select 1) + 13.78, 0], + [(_coords select 0) + 9.34,(_coords select 1) - 14.17, 0] + ],0,_aiType,_mission] call DZMSM2Spawn; +}; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_STASH_WIN", + "STR_CL_DZMS_STASH_FAIL" +] spawn DZMSWaitMissionComp; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Ural_Ambush.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Ural_Ambush.sqf new file mode 100755 index 0000000..4d63334 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Ural_Ambush.sqf @@ -0,0 +1,97 @@ +/* + Medical Ural Attack by lazyink (Full credit for original code to TheSzerdi & TAW_Tonic) + Updated to New Format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "Ural Ambush"; +local _localName = "STR_CL_DZMS_URAL_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_URAL_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_URAL_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +// Spawn Mission Objects +[[ + ["UralWreck",[0,0],149.64919], + ["Body",[-2.2905,-3.3438],61.798588], + ["Body",[-2.8511,-2.4346],52.402905], + ["Body",[-3.435,-1.4297],-117.27345], + ["Body2",[-4.0337,0.5],23.664057] +],_coords,_mission] call DZMSSpawnObjects; + +//We create the vehicles like normal +[_mission,_coords,DZMSSmallVic,[5.7534,-9.2149]] call DZMSSpawnVeh; + +// Spawn crates +[_mission,_coords,"DZ_AmmoBoxMedium1US","supply",[2.6778,-3.0889],-28.85478] call DZMSSpawnCrate; +[_mission,_coords,"DZ_MedBox","medical",[1.4805,-3.7432],62.744293] call DZMSSpawnCrate; +[_mission,_coords,"DZ_AmmoBoxMedium2US","weapons",[2.5405,-4.1612],-27.93351] call DZMSSpawnCrate; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, AI type, mission number] +[[(_coords select 0) - 6.9458,(_coords select 1) - 3.5352, 0],6,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 4.4614,(_coords select 1) + 2.5898, 0],6,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 4.4614,(_coords select 1) + 2.5898, 0],4,1,_aiType,_mission] call DZMSAISpawn; + +// Spawn Static M2 Gunner positions if enabled. +if (DZMSM2Static) then { + [[ + [(_coords select 0) + 11.64,(_coords select 1) + 11.5, 0], + [(_coords select 0) - 9.37,(_coords select 1) - 14.58, 0] + ],0,_aiType,_mission] call DZMSM2Spawn; +}; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_URAL_WIN", + "STR_CL_DZMS_URAL_FAIL" +] spawn DZMSWaitMissionComp; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Weapons_Cache.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Weapons_Cache.sqf new file mode 100755 index 0000000..232b747 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Weapons_Cache.sqf @@ -0,0 +1,92 @@ +/* + Weapons Cache Mission by lazyink (Original Full Code by TheSzerdi & TAW_Tonic) + New Mission Format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "Weapons Cache"; +local _localName = "STR_CL_DZMS_WCACHE_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_WCACHE_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_WCACHE_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +//Lets add the scenery +[[ + ["Land_CamoNetB_NATO",[-0.0649,0.6025]] +],_coords,_mission] call DZMSSpawnObjects; + +//We create the vehicles like normal +[_mission,_coords,DZMSSmallVic,[10.0303,-12.2979]] call DZMSSpawnVeh; +[_mission,_coords,DZMSLargeVic,[-6.2764,-14.086]] call DZMSSpawnVeh; + +[_mission,_coords,"DZ_AmmoBoxBigUS","weapons2",[0,0]] call DZMSSpawnCrate; + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],4,0,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],4,1,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],4,2,_aiType,_mission] call DZMSAISpawn; +[[(_coords select 0) + 0.0352,(_coords select 1) - 6.8799, 0],4,3,_aiType,_mission] call DZMSAISpawn; + +// Spawn Static M2 Gunner positions if enabled. +if (DZMSM2Static) then { + [[ + [(_coords select 0) + 25,(_coords select 1) - 25, 0], + [(_coords select 0) - 25,(_coords select 1) + 25, 0] + ],0,_aiType,_mission] call DZMSM2Spawn; +}; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_WCACHE_WIN", + "STR_CL_DZMS_WCACHE_FAIL" +] spawn DZMSWaitMissionComp; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Weapons_Truck.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Weapons_Truck.sqf new file mode 100755 index 0000000..3639902 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Missions/Weapons_Truck.sqf @@ -0,0 +1,92 @@ +/* + Weapon Truck Crash by lazyink (Full credit for code to TheSzerdi & TAW_Tonic) + Updated to new format by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +local _mission = count DZMSMissionData -1; +local _aiType = _this select 0; +local _coords = call DZMSFindPos; +local _name = "Weapons Truck"; +local _localName = "STR_CL_DZMS_WT_TITLE"; +local _hero = _aiType == "Hero"; +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _startTime = diag_tickTime; + +diag_log format["[DZMS]: %1 %2 starting at %2.",_aiType,_name,_coords]; + +////////////////////// Do not edit this section /////////////////////////// +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +local _markers = [1,1,1,1]; +_markers set [0, [_coords,"DZMS" + str _mission,_markerColor,"","ELLIPSE","Grid",[200,200],[],0]]; +_markers set [1, [_coords,"DZMSDot" + str _mission,"ColorBlack","Vehicle","","",[],[_localized,_localName],0]]; +if (DZMSAutoClaim) then {_markers set [2, [_coords,"DZMSAuto" + str _mission,"ColorRed","","ELLIPSE","Border",[DZMSAutoClaimAlertDistance,DZMSAutoClaimAlertDistance],[],0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; +[_aiType,_localName,"STR_CL_DZMS_WT_START"] call DZMSMessage; +DZMSMarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _coords]; +local _posIndex = count DZE_MissionPositions - 1; + +// Wait until a player is within range or timeout is reached. +local _playerNear = false; +local _timeout = false; +while {!_playerNear && !_timeout} do { + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + if (diag_tickTime - _startTime >= (DZMSMissionTimeOut * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call DZMSAbortMission; + [_aiType,_localName,"STR_CL_DZMS_WT_FAIL"] call DZMSMessage; + diag_log format["DZMS: %1 %2 aborted.",_aiType,_name,_coords]; +}; +//////////////////////////////// End ////////////////////////////////////// + +//Add scenery +[[ + ["UralWreck",[0,0]] +],_coords,_mission] call DZMSSpawnObjects; + +// Spawn crates +[_mission,_coords,"DZ_AmmoBoxLong2RU","weapons",[3,0]] call DZMSSpawnCrate; +[_mission,_coords,"DZ_AmmoBoxLongGUE","weapons",[-3,0]] call DZMSSpawnCrate; +[_mission,_coords,"DZ_AmmoBoxMedium2US","weapons",[-6,0]] call DZMSSpawnCrate; + + +//DZMSAISpawn spawns AI to the mission. +//Usage: [_coords, count, skillLevel, Hero or Bandit, Mission Number] +[_coords,3,0,_aiType,_mission] call DZMSAISpawn; +[_coords,3,1,_aiType,_mission] call DZMSAISpawn; +[_coords,3,2,_aiType,_mission] call DZMSAISpawn; +[_coords,3,3,_aiType,_mission] call DZMSAISpawn; + +// Spawn Static M2 Gunner positions if enabled. +if (DZMSM2Static) then { + [[ + [(_coords select 0) + 3.1,(_coords select 1) - 21.9, 0], + [(_coords select 0) - 0.27,(_coords select 1) + 17.7, 0] + ],0,_aiType,_mission] call DZMSM2Spawn; +}; + +// Start the mission loop. +[ + _mission, + _coords, + _aiType, + _name, + _localName, + _markerIndex, + _posIndex, + "STR_CL_DZMS_WT_WIN", + "STR_CL_DZMS_WT_FAIL" +] spawn DZMSWaitMissionComp; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAIKilled.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAIKilled.sqf new file mode 100755 index 0000000..20aa324 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAIKilled.sqf @@ -0,0 +1,98 @@ +/* + DZMSAIKilled.sqf by Vampire + This function is called when an AI Unit is killed. + It handles the humanity allocation and body cleanup. + Updated for DZMS 2.0 by JasonTM +*/ + +local _unit = _this select 0; +local _player = _this select 1; +local _array = _unit getVariable ["DZMSAI" + dayz_serverKey, nil]; +local _mission = _array select 0; +local _aiType = _array select 1; + +if (typeName(DZMSMissionData select _mission) == "ARRAY") then { + DZMSMissionData select _mission set [0, ((DZMSMissionData select _mission) select 0) - 1]; +}; + +//If the killer is a player, lets handle the humanity +if (isPlayer _player) then { + + //diag_log text format ["[DZMS]: Debug: Unit killed by %1 at %2", _player, mapGridPosition _unit]; + + //Lets grab some info + local _humanity = _player getVariable ["humanity",0]; + local _banditkills = _player getVariable ["banditKills",0]; + local _humankills = _player getVariable["humanKills",0]; + + //If the player gets humanity per config, lets give it + if (DZMSMissHumanity) then { + if (_aiType == "Bandit") then { + _player setVariable ["humanity",(_humanity + DZMSBanditHumanity),true]; + } else { + _player setVariable ["humanity",(_humanity - DZMSHeroHumanity),true]; + }; + + if (DZMSKillFeed) then { + local _humanityReward = if (_aiType == "Hero") then {format["-%1 Humanity",DZMSHeroHumanity];} else {format["+%1 Humanity",DZMSBanditHumanity];}; + local _aiColor = if (_aiType == "Hero") then {"#3333ff";} else {"#ff0000";}; + local _params = [_aiColor,"0.50","#FFFFFF",-.4,.2,2,0.5]; + + RemoteMessage = ["ai_killfeed", [_aiType," AI Kill",_humanityReward],_params]; + (owner _player) publicVariableClient "RemoteMessage"; + }; + }; + + //If this counts as a bandit or hero kill, lets give it + if (DZMSCntKills) then { + if (_aiType == "Bandit") then { + _player setVariable ["banditKills",(_banditkills + 1),true]; + } else { + _player setVariable ["humanKills",(_humankills + 1),true]; + }; + }; + + // If ZSC installed and DZMSAICheckWallet enabled, add money to AI wallets + if (DZMSAICheckWallet && Z_singleCurrency) then { + local _cash = round(random 10) * 500; // adds money to AI wallets in 500x increments. + _unit setVariable["cashMoney",_cash ,true]; + }; + + //Lets inform the nearby AI of roughly the players position + //This makes the AI turn and react instead of laying around + { + if (((position _x) distance (position _unit)) <= 300) then { + _x reveal [_player, 4.0]; + } + } forEach allUnits; + +} else { + + //diag_log text format ["[DZMS]: Debug: Unit killed by %1 at %2", _player, mapGridPosition _unit]; + + if (DZMSRunGear) then { + //Since a player ran them over, or they died from unknown causes + //Lets strip their gear + if (!isNull (unitBackpack _unit)) then {removeBackpack _unit;}; + removeAllWeapons _unit; + { + _unit removeMagazine _x + } forEach magazines _unit; + }; + +}; + +if (DZMSCleanDeath) exitWith { + _unit call sched_co_deleteVehicle; +}; + +_unit setVariable ["bodyName","NPC",false]; // Corpse will be deleted by sched_corpses function according to DZE_NPC_CleanUp_Time + +if (DZMSUseNVG) then { + _unit removeWeapon "NVGoggles"; +}; + +if (DZMSUseRPG && {"RPG7V" in (weapons _unit)}) then { + _unit removeWeapon "RPG7V"; + _unit removeMagazines "PG7V"; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAISpawn.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAISpawn.sqf new file mode 100755 index 0000000..03501bb --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAISpawn.sqf @@ -0,0 +1,162 @@ +/* // + DZMSAISpawn.sqf by Vampire + Updated for DZMS 2.0 by JasonTM + Usage: [position,unitcount,skillLevel,AI type,mission number] call DZMSAISpawn; + Position is the coordinates to spawn at [X,Y,Z] + UnitCount is the number of units to spawn + SkillLevel is the skill number defined in DZMSAIConfig.sqf + AI type is either "Hero" or "Bandit" set in DZMSTimer.sqf + Mission number is the count of the DZMSMissionData array (-1 because arrays are zero indexed) when the mission spawns +*/ // + +local _position = _this select 0; +local _unitcount = _this select 1; +local _skill = _this select 2; +local _aiType = _this select 3; +local _mission = nil; +if (count _this > 4) then { + _mission = _this select 4; +}; + +local _wpRadius = 10; +local _xpos = _position select 0; +local _ypos = _position select 1; +local _aiskin = ""; +local _unitGroup = createGroup east; + +// Add the group to the mission data array +if !(isNil "_mission") then { + ((DZMSMissionData select _mission) select 4) set [count ((DZMSMissionData select _mission) select 4), _unitGroup]; +}; + +for "_x" from 1 to _unitcount do { + + //Lets pick a skin from the array and assign as Hero or Bandit + if (_aiType == "Bandit") then { + _aiskin = DZMSBanditSkins call BIS_fnc_selectRandom;; + } else { + _aiskin = DZMSHeroSkins call BIS_fnc_selectRandom; + }; + + //Lets spawn the unit + local _unit = _unitGroup createUnit [_aiskin, _position, [], 10, "PRIVATE"]; + + //Make him join the correct team + [_unit] joinSilent _unitGroup; + + //Add the behavior + _unit setCombatMode "YELLOW"; + _unit setBehaviour "COMBAT"; + + //Remove the items he spawns with by default + removeAllWeapons _unit; + removeAllItems _unit; + + //Now we need to figure out their loadout, and assign it + local _wepArray = DZMSAIWeps call BIS_fnc_selectRandom; + local _weapon = _wepArray call BIS_fnc_selectRandom; + local _magazine = getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines") select 0; + + for "_i" from 1 to 3 do { + _unit addMagazine _magazine; + }; + + _unit addBackpack (DZMSPacks call BIS_fnc_selectRandom); + _unit addWeapon _weapon; + _unit selectWeapon _weapon; + + if (!DZMSOverwatch) then { + local _attachments = configFile >> "CfgWeapons" >> _weapon >> "Attachments"; + if (isClass _attachments && {count _attachments > 0}) then { + local _attach = configName (_attachments call BIS_fnc_selectRandom); + if (_attach == "Attachment_Tws") then { + if (DZMS_AllowThermal) then { + _unit addMagazine _attach; + }; + } else { + _unit addMagazine _attach; + }; + }; + }; + + if (DZMSUseNVG) then { + _unit addWeapon "NVGoggles"; + }; + + //Get the gear array + local _aigear = [DZMSGear0,DZMSGear1,DZMSGear2,DZMSGear3,DZMSGear4] call BIS_fnc_selectRandom; + + { + _unit addMagazine _x; + } count (_aigear select 0); + + { + _unit addWeapon _x; + } count (_aigear select 1); + + //Lets give a launcher to odd numbered AI if enabled + if (DZMSUseRPG) then { + if !(_x mod 2 == 0) then { // check if AI number is divisible by 2. + _unit addWeapon "RPG7V"; + _unit addMagazine "PG7V"; + _unit addMagazine "PG7V"; + }; + }; + + // New for 1.0.7 - Hero and bandit dog tags that can be traded for +/- humanity. + if (_aitype == "Hero") then { + if (random 1 <= DZMS_HeroDogTag) then { + _unit addMagazine "ItemDogTagHero"; + }; + } else { + if (random 1 <= DZMS_BanditDogTag) then { + _unit addMagazine "ItemDogTagBandit"; + }; + }; + + //Lets set the skills + local _aicskill = call { + if (_skill == 0) exitWith {DZMSSkills0;}; + if (_skill == 1) exitWith {DZMSSkills1;}; + if (_skill == 2) exitWith {DZMSSkills2;}; + if (_skill == 3) exitWith {DZMSSkills3;}; + DZMSSkills1; + }; + + { + _unit setSkill [(_x select 0),(_x select 1)] + } count _aicskill; + + _unit addEventHandler ["Killed",{ [(_this select 0), (_this select 1)] call DZMSAIKilled;}]; + + if !(isNil "_mission") then { + _unit setVariable ["DZMSAI" + dayz_serverKey, [_mission,_aiType]]; + DZMSMissionData select _mission set [0, ((DZMSMissionData select _mission) select 0) + 1]; + } else { + _unit setVariable ["DZMSAI" + dayz_serverKey, [-1,_aiType]]; + }; +}; + +// These are 4 waypoints in a NorthSEW around the center +local _wppos1 = [_xpos, _ypos + 20, 0]; +local _wppos2 = [_xpos + 20, _ypos, 0]; +local _wppos3 = [_xpos, _ypos - 20, 0]; +local _wppos4 = [_xpos - 20, _ypos, 0]; + +_unitGroup allowFleeing 0; + +// We add the 4 waypoints +local _wp1 = _unitGroup addWaypoint [_wppos1, _wpRadius]; +_wp1 setWaypointType "MOVE"; +local _wp2 = _unitGroup addWaypoint [_wppos2, _wpRadius]; +_wp2 setWaypointType "MOVE"; +local _wp3 = _unitGroup addWaypoint [_wppos3, _wpRadius]; +_wp3 setWaypointType "MOVE"; +local _wp4 = _unitGroup addWaypoint [_wppos4, _wpRadius]; +_wp4 setWaypointType "MOVE"; + +// Then we add a center waypoint that tells them to visit the rest +local _wpfin = _unitGroup addWaypoint [[_xpos,_ypos, 0], _wpRadius]; +_wpfin setWaypointType "CYCLE"; + +if (DZMSDebug) then {diag_log text format["[DZMS]: (%2) %1 AI Spawned.",count (units _unitGroup),_aiType];}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAddMajMarker.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAddMajMarker.sqf new file mode 100755 index 0000000..978bfff --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAddMajMarker.sqf @@ -0,0 +1,18 @@ +/* + Adds a marker for Major Missions. Only runs once. + DZMSMarkerLoop.sqf keeps this marker updated. + Usage: [coordinates,missionname] +*/ +private["_nul","_nil"]; +DZMSMajCoords = _this select 0; +DZMSMajName = _this select 1; + +_nul = createMarker ["DZMSMajMarker", DZMSMajCoords]; +"DZMSMajMarker" setMarkerColor "ColorRed"; +"DZMSMajMarker" setMarkerShape "ELLIPSE"; +"DZMSMajMarker" setMarkerBrush "Grid"; +"DZMSMajMarker" setMarkerSize [175,175]; +_nil = createMarker ["DZMSMajDot", DZMSMajCoords]; +"DZMSMajDot" setMarkerColor "ColorBlack"; +"DZMSMajDot" setMarkerType "Vehicle"; +"DZMSMajDot" setMarkerText DZMSMajName; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAddMinMarker.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAddMinMarker.sqf new file mode 100755 index 0000000..c10d6ab --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAddMinMarker.sqf @@ -0,0 +1,18 @@ +/* + Adds a marker for Major Missions. Only runs once. + DZMSMarkerLoop.sqf keeps this marker updated. + Usage: [coordinates,missionname] +*/ +private["_nul","_nil"]; +DZMSMinCoords = _this select 0; +DZMSMinName = _this select 1; + +_nul = createMarker ["DZMSMinMarker", DZMSMinCoords]; +"DZMSMinMarker" setMarkerColor "ColorRed"; +"DZMSMinMarker" setMarkerShape "ELLIPSE"; +"DZMSMinMarker" setMarkerBrush "Grid"; +"DZMSMinMarker" setMarkerSize [150,150]; +_nil = createMarker ["DZMSMinDot", DZMSMinCoords]; +"DZMSMinDot" setMarkerColor "ColorBlack"; +"DZMSMinDot" setMarkerType "Vehicle"; +"DZMSMinDot" setMarkerText DZMSMinName; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAutoClaim.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAutoClaim.sqf new file mode 100755 index 0000000..fd7f8f4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSAutoClaim.sqf @@ -0,0 +1,109 @@ + if (!_claimed) then { + + // Find the closest player and send an alert + if (isNull _closestPlayer) then { + _closestPlayer = _coords call DZMSisClosest; // Find the closest player + [_closestPlayer,_name,"Start"] call DZMSAutoClaimAlert; // Send alert + _claimTime = diag_tickTime; // Set the time variable for countdown + }; + + // After the delay time, check player's location and either claim or not claim + if ((diag_tickTime - _claimTime) > DZMSAutoClaimDelayTime) then { + if ((_closestPlayer distance _coords) > DZMSAutoClaimAlertDistance || {!alive _closestPlayer}) then { + [_closestPlayer,_name,"Stop"] call DZMSAutoClaimAlert; // Send alert to player who is closest + _closestPlayer = objNull; // Set to default + _acArray = []; // Set to default + } else { + _claimed = true; + [_closestPlayer,_name,"Claimed"] call DZMSAutoClaimAlert; // Send alert to all players + diag_log text format ["DZMS Auto Claim: mission %1 has been claimed by %2",_name,(name _closestPlayer)]; + _acArray = [getplayerUID _closestPlayer, name _closestPlayer]; // Add player UID and name to array + _markers set [3, [[(_coords select 0) + 100, (_coords select 1) + 100],_autoMarkDot,"ColorBlack","mil_objective","","",[],["STR_CL_CLAIM_MARKER",(name _closestPlayer)],0]]; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + PVDZ_ServerMarkerSend = ["createSingle",(_markers select 3)]; + publicVariable "PVDZ_ServerMarkerSend"; + }; + }; + }; + + if (_claimed) then { + + // Used in the marker when a player has left the mission area + _leftTime = round (DZMSAutoClaimTimeout - (diag_tickTime - _claimTime)); + + // This marker should run continuously until the mission is unclaimed or the player returns. + if (_left) then { + _autoText = ["STR_CL_TIMEOUT_MARKER",(_acArray select 1),_leftTime]; + (_markers select 3) set [7, _autoText]; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + PVDZ_ServerMarkerSend = ["textSingle",[_autoMarkDot,_autoText]]; + publicVariable "PVDZ_ServerMarkerSend"; + }; + + // If the player dies at the mission, change marker to countdown and set player variable to null + if ((!alive _closestPlayer) && !_left) then { + _closestPlayer = objNull; // Set the variable to null to prevent null player errors + _claimTime = diag_tickTime; // Set the time for countdown + _left = true; // Changes the marker to countdown + }; + + // Check to see if the dead player has returned to the mission + if (isNull _closestPlayer) then { + _closestPlayer = [_coords,_acArray] call DZMSCheckReturningPlayer; + }; + + // Notify the player that he/she is outside the mission area + if (!(isNull _closestPlayer) && !_left && {(_closestPlayer distance _coords) > DZMSAutoClaimAlertDistance}) then { + [_closestPlayer,_name,"Return"] call DZMSAutoClaimAlert; + _claimTime = diag_tickTime; // Set the time for the countdown + _left = true; // Set the mission marker to countdown + }; + + // If the player returns to the mission before the clock runs out then change the marker + if (!(isNull _closestPlayer) && _left && {(_closestPlayer distance _coords) < DZMSAutoClaimAlertDistance}) then { + [_closestPlayer,_name,"Reclaim"] call DZMSAutoClaimAlert; + _left = false; // Change the mission marker back to claim + _autoText = ["STR_CL_CLAIM_MARKER",(name _closestPlayer)]; + (_markers select 3) set [7, _autoText]; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + PVDZ_ServerMarkerSend = ["textSingle",[_autoMarkDot,_autoText]]; + publicVariable "PVDZ_ServerMarkerSend"; + }; + + // Warn other players in mission area + { + if (!(_x in (units group _closestPlayer)) && {(_x distance _coords) < DZMSAutoClaimAlertDistance} && {!(_x in _warnArray)}) then { + RemoteMessage = ["rollingMessages", ["STR_CL_CLAIM_WARNING",_acArray select 1]]; + (owner _x) publicVariableClient "RemoteMessage"; + _warnArray set [count _warnArray, _x]; // add player to temp array so it does not spam the message. + }; + } count playableUnits; + + // If the player lets the clock run out, then set the mission to unclaimed and set the variables to default + // Player left the server + if ((isNull _closestPlayer) && {(diag_tickTime - _claimTime) > DZMSAutoClaimTimeout}) then { + [_acArray ,_name,"Unclaim"] call DZMSAutoClaimAlert; // Send alert to all players + _claimed = false; + _left = false; + _acArray = []; + _warnArray = []; + PVDZ_ServerMarkerSend = ["removeSingle",_autoMarkDot]; + publicVariable "PVDZ_ServerMarkerSend"; + _markers set [3, 1]; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + } else { + // Player is alive but did not return to the mission + if (((diag_tickTime - _claimTime) > DZMSAutoClaimTimeout) && {(_closestPlayer distance _coords) > DZMSAutoClaimAlertDistance}) then { + [_closestPlayer,_name,"Unclaim"] call DZMSAutoClaimAlert; // Send alert to all players + _closestPlayer = objNull; + _claimed = false; + _left = false; + _acArray = []; + _warnArray = []; + PVDZ_ServerMarkerSend = ["removeSingle",_autoMarkDot]; + publicVariable "PVDZ_ServerMarkerSend"; + _markers set [3, 1]; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + }; + }; + }; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSBox.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSBox.sqf new file mode 100755 index 0000000..64b4938 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSBox.sqf @@ -0,0 +1,325 @@ +/* + _crate is the object to fill + _type is the type of crate +*/ +local _crate = _this select 0; +local _type = _this select 1; +local _scount = 0; +local _sSelect = 0; +local _item = ""; +local _ammo = []; +local _cfg = ""; +local _attach = ""; +local _qty = 0; + +////////////////////////////////////////////////////////////////// +// Medical Crates +if (_type == "medical") then { + // load medical + _scount = count DZMSMeds; + for "_x" from 0 to 40 do { + _sSelect = floor(random _sCount); + _item = DZMSMeds select _sSelect; + _crate addMagazineCargoGlobal [_item,1]; + }; + + // load packs + _scount = count DZMSPacks; + for "_x" from 0 to 2 do { + _sSelect = floor(random _sCount); + _item = DZMSPacks select _sSelect; + _crate addBackpackCargoGlobal [_item,1]; + }; +}; + +//////////////////////////////////////////////////////////////// +// General Store Crate +if (_type == "store") then { + // load food/drink + _scount = count DZMSGeneralStore; + for "_x" from 0 to 40 do { + _sSelect = floor(random _sCount); + _item = DZMSGeneralStore select _sSelect; + _crate addMagazineCargoGlobal [_item,1]; + }; + + // load survival tools + _scount = count DZMSCrateTools; + for "_x" from 0 to 4 do { + _sSelect = floor(random _sCount); + _item = DZMSCrateTools select _sSelect; + _crate addWeaponCargoGlobal [_item,1]; + }; + + // load packs + _scount = count DZMSPacks; + for "_x" from 0 to 2 do { + _sSelect = floor(random _sCount); + _item = DZMSPacks select _sSelect; + _crate addBackpackCargoGlobal [_item,1]; + }; + + // load pistols + _scount = count DZMSPistol; + for "_x" from 0 to 2 do { + _sSelect = floor(random _sCount); + _item = DZMSPistol select _sSelect; + _crate addWeaponCargoGlobal [_item,1]; + _ammo = getArray (configFile >> "cfgWeapons" >> _item >> "magazines"); + if (count _ammo > 0) then { + _crate addMagazineCargoGlobal [(_ammo select 0),(round(random 8))]; + }; + if (!DZMSOverwatch) then { + _cfg = configFile >> "CfgWeapons" >> _item >> "Attachments"; + if (isClass _cfg && count _cfg > 0) then { + _attach = configName (_cfg call BIS_fnc_selectRandom); + _crate addMagazineCargoGlobal [_attach,1]; + }; + }; + }; + + +}; + +/////////////////////////////////////////////////////////////////// +// Weapon Crate Small +if (_type == "weapons") then { + // load grenades + _scount = count DZMSGrenades; + for "_x" from 0 to 5 do { + _sSelect = floor(random _sCount); + _item = DZMSGrenades select _sSelect; + _crate addMagazineCargoGlobal [_item,1]; + }; + + // load packs + _scount = count DZMSPacks; + for "_x" from 0 to 3 do { + _sSelect = floor(random _sCount); + _item = DZMSPacks select _sSelect; + _crate addBackpackCargoGlobal [_item,1]; + }; + + // load pistols and attachments + _scount = count DZMSPistol; + for "_x" from 0 to 2 do { + _sSelect = floor(random _sCount); + _item = DZMSPistol select _sSelect; + _crate addWeaponCargoGlobal [_item,1]; + _ammo = getArray (configFile >> "cfgWeapons" >> _item >> "magazines"); + if (count _ammo > 0) then { + _crate addMagazineCargoGlobal [(_ammo select 0),(round(random 8))]; + }; + if (!DZMSOverwatch) then { + _cfg = configFile >> "CfgWeapons" >> _item >> "Attachments"; + if (isClass _cfg && count _cfg > 0) then { + _attach = configName (_cfg call BIS_fnc_selectRandom); + _crate addMagazineCargoGlobal [_attach,1]; + }; + }; + }; + + // Load Weapons and attachments + for "_x" from 0 to 5 do { + _wepArray = DZMSCrateWeps call BIS_fnc_selectRandom; + _item = _wepArray call BIS_fnc_selectRandom; + _crate addWeaponCargoGlobal [_item,1]; + _ammo = getArray (configFile >> "cfgWeapons" >> _item >> "magazines"); + if (count _ammo > 0) then { + _crate addMagazineCargoGlobal [(_ammo select 0),(round(random 8))]; + }; + if (!DZMSOverwatch) then { + _cfg = configFile >> "CfgWeapons" >> _item >> "Attachments"; + if (isClass _cfg && count _cfg > 0) then { + _attach = configName (_cfg call BIS_fnc_selectRandom); + if (_attach == "Attachment_Tws") then { + if (DZMS_AllowThermal) then { + _crate addMagazineCargoGlobal [_attach,1]; + }; + } else { + _crate addMagazineCargoGlobal [_attach,1]; + }; + }; + }; + }; +}; + +/////////////////////////////////////////////////////////////////// +// Weapon Crate Large +if (_type == "weapons2") then { + // load grenades + _scount = count DZMSGrenades; + for "_x" from 0 to 5 do { + _sSelect = floor(random _sCount); + _item = DZMSGrenades select _sSelect; + _crate addMagazineCargoGlobal [_item,1]; + }; + + // load packs + _scount = count DZMSPacks; + for "_x" from 0 to 3 do { + _sSelect = floor(random _sCount); + _item = DZMSPacks select _sSelect; + _crate addBackpackCargoGlobal [_item,1]; + }; + + // load pistols + _scount = count DZMSPistol; + for "_x" from 0 to 3 do { + _sSelect = floor(random _sCount); + _item = DZMSPistol select _sSelect; + _crate addWeaponCargoGlobal [_item,1]; + _ammo = getArray (configFile >> "cfgWeapons" >> _item >> "magazines"); + if (count _ammo > 0) then { + _crate addMagazineCargoGlobal [(_ammo select 0),(round(random 8))]; + }; + }; + + // Load Weapons + for "_x" from 0 to 10 do { + _wepArray = DZMSCrateWeps call BIS_fnc_selectRandom; + _item = _wepArray call BIS_fnc_selectRandom; + _crate addWeaponCargoGlobal [_item,1]; + _ammo = getArray (configFile >> "cfgWeapons" >> _item >> "magazines"); + if (count _ammo > 0) then { + _crate addMagazineCargoGlobal [(_ammo select 0),(round(random 8))]; + }; + if (!DZMSOverwatch) then { + _cfg = configFile >> "CfgWeapons" >> _item >> "Attachments"; + if (isClass _cfg && count _cfg > 0) then { + _attach = configName (_cfg call BIS_fnc_selectRandom); + if (_attach == "Attachment_Tws") then { + if (DZMS_AllowThermal) then { + _crate addMagazineCargoGlobal [_attach,1]; + }; + } else { + _crate addMagazineCargoGlobal [_attach,1]; + }; + }; + }; + }; +}; + +/////////////////////////////////////////////////////////////////// +// Supply Crate +if (_type == "supply") then { + // load tools + _scount = count DZMSBuildTools; + for "_x" from 0 to 3 do { + _sSelect = floor(random _sCount); + _item = DZMSBuildTools select _sSelect; + _crate addWeaponCargoGlobal [_item,1]; + }; + + // load construction supplies + _scount = count DZMSBuildSupply; + for "_x" from 0 to 30 do { + _sSelect = floor(random _sCount); + _item = DZMSBuildSupply select _sSelect; + _qty = _item select 0; + _type = _item select 1; + _crate addMagazineCargoGlobal [_type,_qty]; + }; + + // load crafting supplies + _scount = count DZMSCraftingSupply; + for "_x" from 0 to 20 do { + _sSelect = floor(random _sCount); + _item = DZMSCraftingSupply select _sSelect; + _crate addMagazineCargoGlobal [_item,1]; + }; + + // load high value + _scount = count DZMSHighValue; + if (_scount > 0 && {random 1 < .3}) then { + for "_x" from 0 to 0 do { + _sSelect = floor(random _sCount); + _item = DZMSHighValue select _sSelect; + _crate addMagazineCargoGlobal [_item,1]; + }; + }; + + // load packs + _scount = count DZMSPacks; + for "_x" from 0 to 3 do { + _sSelect = floor(random _sCount); + _item = DZMSPacks select _sSelect; + _crate addBackpackCargoGlobal [_item,1]; + }; +}; + +/////////////////////////////////////////////////////////////////// +// Supply Crate 2 +if (_type == "supply2") then { + // load tools + _scount = count DZMSBuildTools; + for "_x" from 0 to 1 do { + _sSelect = floor(random _sCount); + _item = DZMSBuildTools select _sSelect; + _crate addWeaponCargoGlobal [_item,1]; + }; + + // load construction supplies + _scount = count DZMSBuildSupply; + for "_x" from 0 to 20 do { + _sSelect = floor(random _sCount); + _item = DZMSBuildSupply select _sSelect; + _qty = _item select 0; + _type = _item select 1; + _crate addMagazineCargoGlobal [_type,_qty]; + }; + + // load crafting supplies + _scount = count DZMSCraftingSupply; + for "_x" from 0 to 20 do { + _sSelect = floor(random _sCount); + _item = DZMSCraftingSupply select _sSelect; + _crate addMagazineCargoGlobal [_item,1]; + }; + + // load high value + _scount = count DZMSHighValue; + if (_scount > 0 && {random 1 < .3}) then { + for "_x" from 0 to 0 do { + _sSelect = floor(random _sCount); + _item = DZMSHighValue select _sSelect; + _crate addMagazineCargoGlobal [_item,1]; + }; + }; + + // load packs + _scount = count DZMSPacks; + for "_x" from 0 to 2 do { + _sSelect = floor(random _sCount); + _item = DZMSPacks select _sSelect; + _crate addBackpackCargoGlobal [_item,1]; + }; +}; + +////////////////////////////////////////////////////////////////// +// Vehicle Stuff +if (_type == "ArmedVehicle") then { + // load vehicle ammo + _scount = count DZMSVehAmmo; + for "_x" from 0 to 10 do { + _sSelect = floor(random _sCount); + _item = DZMSVehAmmo select _sSelect; + _crate addMagazineCargoGlobal [_item,1]; + }; + + // load packs + _scount = count DZMSPacks; + for "_x" from 0 to 2 do { + _sSelect = floor(random _sCount); + _item = DZMSPacks select _sSelect; + _crate addBackpackCargoGlobal [_item,1]; + }; + + // load vehicle parts + _scount = count DZMSVehParts; + for "_x" from 0 to 15 do { + _sSelect = floor(random _sCount); + _item = DZMSVehParts select _sSelect; + _crate addMagazineCargoGlobal [_item,1]; + }; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSFindPos.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSFindPos.sqf new file mode 100755 index 0000000..8c9efcf --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSFindPos.sqf @@ -0,0 +1,57 @@ +local _pos = [0,0,0]; +local _num = 1; +local _findRun = true; +local _playerNear = true; +local _isTavi = toLower worldName == "tavi"; + +//We need to loop findSafePos until it doesn't return the map center +while {_findRun} do { + + if (DZMSStaticPlc) then { + _pos = DZMSStatLocs call BIS_fnc_selectRandom; + _pos = [(_pos select 0), (_pos select 1)]; // Position needs to be 2D. + } else { + _pos = [getMarkerPos "center",0,((getMarkerSize "center") select 1) * .75,30,0,.2,0,DZMSBlacklistZones] call BIS_fnc_findSafePos; + }; + local _isOk = true; + // Let's check for nearby water within 100 meters + { + if (surfaceIsWater _x) exitWith {_isOk = false;}; + } count [_pos,[(_pos select 0), (_pos select 1)+100],[(_pos select 0)+100, (_pos select 1)],[(_pos select 0), (_pos select 1)-100],[(_pos select 0)-100, (_pos select 1)]]; + + //Lets test the height on Taviana + if (_isTavi) then { + local _tavTest = createVehicle ["Can_Small",[(_pos select 0),(_pos select 1),0],[], 0, "CAN_COLLIDE"]; + _isOk = (((getPosASL _tavTest) select 2) <= 185); + deleteVehicle _tavTest; + }; + + // Check if position is far enough away from other missions + { + if ((typeName _x) == "ARRAY" && {_pos distance _x < DZMSDistanceBetweenMissions}) exitWith { + _isOk = false; + }; + } count DZE_MissionPositions; + + // Check for near safezones if Epoch/Overpoch + if (DZMSEpoch) then { + { + if (_pos distance (_x select 0) < 700) exitWith { + _isOk = false; + }; + } count DZE_SafeZonePosArray; + }; + + //Check for players within 500 meters + _playerNear = [_pos,500] call DZMSNearPlayer; + + //Lets combine all our checks to possibly end the loop + if (_isOk && !_playerNear && {count _pos == 2}) then { + _findRun = false; + }; + + if (DZMSDebug) then {diag_log format["DZMSFindPos: %1 attempts to find a safe position",_num];}; + _num = _num + 1; +}; +_pos set [2, 0]; +_pos \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSFunctions.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSFunctions.sqf new file mode 100755 index 0000000..58406f3 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSFunctions.sqf @@ -0,0 +1,304 @@ +/* + DayZ Mission System Functions by Vampire + Updated for DZMS 2.0 by JasonTM +*/ + +DZMSSpawnCrate = { + local _mission = _this select 0; + local _cratePos = _this select 1; + local _boxType = _this select 2; + local _lootType = _this select 3; + local _offset = _this select 4; + local _z = [0, (_cratePos select 2)] select (count _cratePos == 3); + local _cratePosition = [(_cratePos select 0) + (_offset select 0), (_cratePos select 1) + (_offset select 1), _z]; + + if (count _offset > 2) then { + _cratePosition set [2, (_offset select 2)]; + }; + + // Override regular crates because of Vanilla blacklisting + if (!DZMSEpoch) then { + if !(_boxType == "DZ_MedBox") then { + _boxType = "AmmoBoxBig"; + }; + }; + + local _crate = _boxType createVehicle _cratePosition; + + if (count _this > 5) then { + _crate setDir (_this select 5); + }; + + _crate setPos _cratePosition; + _crate setVariable ["permaLoot",true]; + clearWeaponCargoGlobal _crate; + clearMagazineCargoGlobal _crate; + _crate addEventHandler ["HandleDamage", {0}]; + _crate enableSimulation false; + ((DZMSMissionData select _mission) select 3) set [count ((DZMSMissionData select _mission) select 3), [_crate,_lootType]]; + _crate // return crate object for AN2 mission +}; + +DZMSNearPlayer = { + local _result = false; + local _position = _this select 0; + local _radius = _this select 1; + { + if ((isPlayer _x) && (_x distance _position <= _radius)) then { + _result = true; + }; + } count playableUnits; + _result +}; + +DZMSCleanupThread = { + local _coords = _this select 0; + local _mission = _this select 1; + local _objects = _this select 2; + local _vehicles = _this select 3; + local _crates = _this select 4; + local _groups = _this select 5; + local _staticGuns = _this select 6; + local _posIndex = _this select 7; + local _time0ut = _this select 8; + local _cleaned = false; + local _time = diag_tickTime; + + while {!_cleaned} do { + + if (DZMSSceneryDespawnTimer > 0 || _time0ut) then { + if ((diag_tickTime - _time) > DZMSSceneryDespawnTimer*60 || _time0ut) then { + + // delete mission objects + { + _x call sched_co_deleteVehicle; + } count _objects; + + // delete vehicles if they are not claimed + { + if (_x getVariable ["DZMSCleanup" + dayz_serverKey,false]) then { + _x call sched_co_deleteVehicle; + }; + + } count _vehicles; + + // Delete Remaining AI that are alive + { + if ((_x getVariable ["DZMSAI" + dayz_serverKey,nil]) select 0 == _mission) then { + _x call sched_co_deleteVehicle; + }; + } count allunits; + + // Delete Static Guns + { + _x call sched_co_deleteVehicle; + } count _staticGuns; + + uiSleep 10; // Need to sleep to let the group count get to zero + + // Remove AI groups if mission times out + { + if (count units _x == 0) then { + deleteGroup _x; + _groups = _groups - [_x]; + //diag_log format ["DZMS: Group %1 deleted.",_x]; + if (count _groups > 0) then { + diag_log format ["DZMS: Group array %1",_groups]; + }; + }; + } count _groups; + + // delete mission crates if enabled + if (DZMSSceneryDespawnLoot || _time0ut) then { + if (count _crates > 0) then { + // Wait until players are at least 50 meters away + if !([_coords,50] call DZMSNearPlayer) then { + { + (_x select 0) call sched_co_deleteVehicle; + } count _crates; + _cleaned = true; + }; + }; + } else { + _cleaned = true; + }; + }; + }; + }; + DZE_MissionPositions set [_posIndex, -1]; + diag_log format ["DZMS: Cleanup for mission %1 complete.",_mission]; +}; + +// Generates the keys for mission vehicles - Epoch/Overpoch only +DZMSVehKey = { + local _vehicle = _this; + local _keyColor = ["Green","Red","Blue","Yellow","Black"] call BIS_fnc_selectRandom; + local _keyNumber = (floor(random 2500)) + 1; + local _keySelected = format["ItemKey%1%2",_keyColor,_keyNumber]; + local _isKeyOK = isClass(configFile >> "CfgWeapons" >> _keySelected); + local _characterID = str(getNumber(configFile >> "CfgWeapons" >> _keySelected >> "keyid")); + + if (_isKeyOK) then { + _vehicle addWeaponCargoGlobal [_keySelected,1]; + _vehicle setVariable ["CharacterID",_characterID,true]; + } else { + _vehicle setVariable ["CharacterID","0",true]; + diag_log format["There was a problem generating a key for vehicle %1",_vehicle]; + }; +}; + +DZMSMessage = { + local _type = _this select 0; + local _title = _this select 1; + local _message = _this select 2; + local _color = ""; + + call { + if (DZMSAnnounceType == "Hint") exitWith { + _color = if (_type == "Hero") then {"#0D00FF";} else {"#990000";}; // Blue and Red + RemoteMessage = ["hintNoImage",[_title,_message],[_color,"1.75"]]; + }; + if (DZMSAnnounceType == "titleText") exitWith { + RemoteMessage = ["titleText",_message]; + }; + if (DZMSAnnounceType == "rollingMessages") exitWith { + RemoteMessage = ["rollingMessages",_message]; + }; + if (DZMSAnnounceType == "DynamicText") exitWith { + _color = if (_type == "Hero") then {"#0D00FF";} else {"#990000";}; // Blue and Red + _params = ["0.40","#FFFFFF","0.60",_color,0,-.35,10,0.5]; + RemoteMessage = ["dynamic_text", ["DZMS",_message],_params]; + }; + }; + publicVariable "RemoteMessage"; +}; + +DZMSisClosest = { + local _position = _this; + local _closest = objNull; + local _scandist = DZMSAutoClaimAlertDistance; + + { + local _dist = vehicle _x distance _position; + if (isPlayer _x && _dist < _scandist) then { + _closest = _x; + _scandist = _dist; + }; + } count playableUnits; + + _closest +}; + +DZMSAutoClaimAlert = { + local _unit = _this select 0; + local _mission = _this select 1; + local _type = _this select 2; + local _name = if (typeName _unit == "ARRAY") then {_unit select 1;} else {name _unit;}; + local _message = call { + if (_type == "Start") exitWith {["STR_CL_AUTOCLAIM_ANNOUNCE",_mission,DZMSAutoClaimDelayTime];}; + if (_type == "Stop") exitWith {["STR_CL_AUTOCLAIM_NOCLAIM",_mission];}; + if (_type == "Return") exitWith {["STR_CL_AUTOCLAIM_RETURN",DZMSAutoClaimTimeout];}; + if (_type == "Reclaim") exitWith {"STR_CL_AUTOCLAIM_RECLAIM";}; + if (_type == "Claimed") exitWith {["STR_CL_AUTOCLAIM_CLAIM",_name,_mission];}; + if (_type == "Unclaim") exitWith {["STR_CL_AUTOCLAIM_ABANDON",_name,_mission];}; + }; + + if (_type == "Claimed" || _type == "Unclaim") exitWith { + RemoteMessage = ["IWAC",_message]; + publicVariable "RemoteMessage"; + }; + + RemoteMessage = ["IWAC",_message]; + (owner _unit) publicVariableClient "RemoteMessage"; +}; + +DZMSCheckReturningPlayer = { + local _position = _this select 0; + local _acArray = _this select 1; + local _playerUID = _acArray select 0; + local _returningPlayer = objNull; + + { + if ((isPlayer _x) && (_x distance _position <= DZMSAutoClaimAlertDistance) && (getplayerUID _x == _playerUID)) then { + _returningPlayer = _x; + }; + } count playableUnits; + + _returningPlayer +}; + +DZMSAbortMission = { + local _mission = _this select 0; + local _aiType = _this select 1; + local _markerIndex = _this select 2; + local _posIndex = _this select 3; + local _remove = []; + + { + if (typeName _x == "ARRAY") then { + _remove set [count _remove, (_x select 1)]; + }; + } count (DZE_ServerMarkerArray select _markerIndex); + + PVDZ_ServerMarkerSend = ["end",_remove]; + publicVariable "PVDZ_ServerMarkerSend"; + + if (_aiType == "Hero") then { + DZMSHeroEndTime = diag_tickTime; + DZMSHeroRunning = DZMSHeroRunning - 1; + } else { + DZMSBanditEndTime = diag_tickTime; + DZMSBanditRunning = DZMSBanditRunning - 1; + }; + + DZMSMissionData set [_mission, -1]; + DZE_ServerMarkerArray set [_markerIndex, -1]; + DZE_MissionPositions set [_posIndex, -1]; +}; + +DZMSFreeze = { + { + if !(_x getVariable ["DoNotFreeze", false]) then { + { + if (alive _x) then { + _x disableAI "TARGET"; + _x disableAI "MOVE"; + _x disableAI "FSM"; + _x setVehicleInit "this hideObject true"; + }; + } count units _x; + processInitCommands; + + { + clearVehicleInit _x; + } count units _x; + + if (DZMSDebug) then {diag_log format ["DZMS: Freezing Units of Group: %1", _x];}; + }; + } count _this; +}; + +DZMSUnFreeze = { + { + if !(_x getVariable ["DoNotFreeze", false]) then { + { + if (alive _x) then { + _x enableAI "TARGET"; + _x enableAI "MOVE"; + _x enableAI "FSM"; + _x setVehicleInit "this hideObject false"; + }; + } count units _x; + processInitCommands; + + { + clearVehicleInit _x; + } count units _x; + + if (DZMSDebug) then {diag_log format ["DZMS: Unfreezing Units of Group: %1", _x];}; + }; + } count _this; +}; + +//------------------------------------------------------------------// +if (DZMSDebug) then {diag_log text format ["[DZMS]: Mission Functions Script Loaded!"];}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSM2Spawn.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSM2Spawn.sqf new file mode 100755 index 0000000..cd77926 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSM2Spawn.sqf @@ -0,0 +1,149 @@ +/* // + DZMSM2Spawn.sqf by JasonTM + Usage: [positions,,skillLevel,AI type,mission number] call DZMSM2Spawn; + Position is the coordinates to spawn at [X,Y,Z] + SkillLevel is the skill number defined in DZMSAIConfig.sqf + AI type is either "Hero" or "Bandit" set in DZMSTimer.sqf + Mission number is the count of the DZMSMissionData array (-1 because arrays are zero indexed) when the mission spawns +*/ + +local _positions = _this select 0; +local _skill = _this select 1; +local _aiType = _this select 2; +local _mission = nil; +if (count _this > 3) then { + _mission = _this select 3; +}; +local _unitGroup = createGroup east; +local _aiskin = ""; + +// Add the group to the mission data array +if !(isNil "_mission") then { + ((DZMSMissionData select _mission) select 4) set [count ((DZMSMissionData select _mission) select 4), _unitGroup]; +}; + +_unitGroup setVariable ["DoNotFreeze", true]; + +{ + + //Lets pick a skin from the array and assign as Hero or Bandit + if (_aiType == "Bandit") then { + _aiskin = DZMSBanditSkins call BIS_fnc_selectRandom;; + } else { + _aiskin = DZMSHeroSkins call BIS_fnc_selectRandom; + }; + + //Lets spawn the unit + local _unit = _unitGroup createUnit [_aiskin, [0,0,0], [], 10, "PRIVATE"]; + + //Make him join the correct team + [_unit] joinSilent _unitGroup; + + //Add the behavior + _unit enableAI "TARGET"; + _unit enableAI "AUTOTARGET"; + _unit enableAI "MOVE"; + _unit enableAI "ANIM"; + _unit enableAI "FSM"; + _unit setCombatMode "YELLOW"; + _unit setBehaviour "COMBAT"; + + //Remove the items he spawns with by default + removeAllWeapons _unit; + removeAllItems _unit; + + //Now we need to figure out their loadout, and assign it + local _wepArray = DZMSAIWeps call BIS_fnc_selectRandom; + local _weapon = _wepArray call BIS_fnc_selectRandom; + local _magazine = getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines") select 0; + + for "_i" from 1 to 3 do { + _unit addMagazine _magazine; + }; + + _unit addBackpack (DZMSPacks call BIS_fnc_selectRandom); + _unit addWeapon _weapon; + + if (!DZMSOverwatch) then { + local _attachments = configFile >> "CfgWeapons" >> _weapon >> "Attachments"; + if (isClass _attachments && {count _attachments > 0}) then { + local _attach = configName (_attachments call BIS_fnc_selectRandom); + if (_attach == "Attachment_Tws") then { + if (DZMS_AllowThermal) then { + _unit addMagazine _attach; + }; + } else { + _unit addMagazine _attach; + }; + }; + }; + + if (DZMSUseNVG) then { + _unit addWeapon "NVGoggles"; + }; + + //Get the gear array + local _aigear = [DZMSGear0,DZMSGear1,DZMSGear2,DZMSGear3,DZMSGear4] call BIS_fnc_selectRandom; + + { + _unit addMagazine _x + } count (_aigear select 0); + + { + _unit addWeapon _x + } count (_aigear select 1); + + // New for 1.0.7 - Hero and bandit dog tags that can be traded for +/- humanity. + if (_aitype == "Hero") then { + if (random 1 <= DZMS_HeroDogTag) then { + _unit addMagazine "ItemDogTagHero"; + }; + } else { + if (random 1 <= DZMS_BanditDogTag) then { + _unit addMagazine "ItemDogTagBandit"; + }; + }; + + //Lets set the skills + local _aicskill = call { + if (_skill == 0) exitWith {DZMSSkills0;}; + if (_skill == 1) exitWith {DZMSSkills1;}; + if (_skill == 2) exitWith {DZMSSkills2;}; + if (_skill == 3) exitWith {DZMSSkills3;}; + DZMSSkills1; + }; + + { + _unit setSkill [(_x select 0),(_x select 1)] + } count _aicskill; + + _unit addEventHandler ["Killed",{ [(_this select 0), (_this select 1)] call DZMSAIKilled;}]; + + // Lets spawn the M2 Static Gun + local _static = "M2StaticMG" createVehicle _x; + + if (surfaceIsWater _x) then { + _static setPosASL _x; + } else { + _static setPosATL _x; + }; + + dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_static]; + + _unit moveInGunner _static; + + _static addEventHandler ["GetOut",{ + _unit = _this select 2; + _static = _this select 0; + if (alive _unit) then {_unit moveInGunner _static}; + }]; + + if !(isNil "_mission") then { + _unit setVariable ["DZMSAI" + dayz_serverKey, [_mission,_aiType]]; + DZMSMissionData select _mission set [0, ((DZMSMissionData select _mission) select 0) + 1]; + ((DZMSMissionData select _mission) select 5) set [count ((DZMSMissionData select _mission) select 5), _static]; + } else { + _unit setVariable ["DZMSAI" + dayz_serverKey, [-1,_aiType]]; + }; + +} forEach _positions; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSSpawnObjects.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSSpawnObjects.sqf new file mode 100755 index 0000000..159a34b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSSpawnObjects.sqf @@ -0,0 +1,49 @@ +// This is a modified version of the DayZ Epoch file fn_spawnObjects.sqf used to spawn mission objects. + +local _objects = _this select 0; +local _pos = _this select 1; +local _mission = _this select 2; +local _object = objNull; +local _list = []; +local _fires = [ + "Base_Fire_DZ", + "flamable_DZ", + "Land_Camp_Fire_DZ", + "Land_Campfire", + "Land_Campfire_burning", + "Land_Fire", + "Land_Fire_burning", + "Land_Fire_DZ", + "Land_Fire_barrel", + "Land_Fire_barrel_burning", + "Misc_TyreHeap" +]; + +{ + local _type = _x select 0; + local _offset = _x select 1; + local _position = [(_pos select 0) + (_offset select 0), (_pos select 1) + (_offset select 1), 0]; + + if (count _offset > 2) then { + _position set [2, (_offset select 2)]; + }; + + _object = _type createVehicle [0,0,0]; + + if (count _x > 2) then { + _object setDir (_x select 2); + }; + + _object setPos _position; + _object setVectorUp surfaceNormal position _object; + + if (DZMSObjectsDamageOff) then { + _object addEventHandler ["HandleDamage",{0}]; + if !(_type in _fires) then {_object enableSimulation false;}; + }; + + _list set [count _list, _object]; + ((DZMSMissionData select _mission) select 1) set [count ((DZMSMissionData select _mission) select 1), _object]; +} forEach _objects; + +_list diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSSpawnVeh.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSSpawnVeh.sqf new file mode 100755 index 0000000..d84a849 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSSpawnVeh.sqf @@ -0,0 +1,137 @@ +local _mission = _this select 0; +local _coords = _this select 1; +local _type = _this select 2; +local _offset = _this select 3; + +if (typeName _type == "ARRAY") then { + _type = _type call BIS_fnc_selectRandom; +}; + +local _position = [(_coords select 0) + (_offset select 0),(_coords select 1) + (_offset select 1),0]; + +if ((count _offset) > 2) then { + _position set [2, (_this select 2)]; +}; + +local _veh = _type createVehicle _position; + +if (count _this > 4) then { + _veh setDir (_this select 4); +} else { + _veh setDir (round(random 360)); +}; +_veh setPos _position; +_veh setVariable ["CharacterID","1",true]; +_veh setVariable ["ObjectID","1", true]; +_veh setVariable ["DZMSCleanup" + dayz_serverKey,true,false]; +dayz_serverObjectMonitor set [count dayz_serverObjectMonitor, _veh]; +clearWeaponCargoGlobal _veh; +clearMagazineCargoGlobal _veh; +_veh setVehicleLock "locked"; +local _ranFuel = random 1; +if (_ranFuel < .1) then {_ranFuel = .1;}; + +if (getNumber(configFile >> "CfgVehicles" >> _type >> "isBicycle") != 1) then { + local _hitpoints = _veh call vehicle_getHitpoints; + { + local _selection = getText(configFile >> "cfgVehicles" >> _type >> "HitPoints" >> _x >> "name"); + local _strH = "hit_" + (_selection); + _veh setHit[_selection,0]; + _veh setVariable [_strH,0,true]; + } count _hitpoints; + + _veh setFuel _ranFuel; +}; + +if (DZMSVehDamageOff) then { + _veh addEventHandler ["HandleDamage",{false}]; +} else { + _veh addEventHandler ["HandleDamage",{_this call fnc_veh_handleDam}]; +}; + +((DZMSMissionData select _mission) select 2) set [count ((DZMSMissionData select _mission) select 2), _veh]; + +// Set "GetIn" event handlers +if (DZMSSaveVehicles) then { + if (DZMSEpoch) then { + _veh addEventHandler ["GetIn", { + local _veh = _this select 0; + local _class = typeOf _veh; + local _worldspace = [getDir _veh, getPosATL _veh]; + _veh setVariable["DZMSCleanup" + dayz_serverKey, nil]; + local _uid = _worldspace call dayz_objectUID2; + format ["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:", dayZ_instance, _class, 0, (_veh getVariable ["CharacterID", "0"]), _worldspace, [getWeaponCargo _veh,getMagazineCargo _veh,getBackpackCargo _veh], [], (fuel _veh), _uid] call server_hiveWrite; + local _result = (format["CHILD:388:%1:", _uid]) call server_hiveReadWrite; + + if ((_result select 0) != "PASS") then { + deleteVehicle _veh; + diag_log format ["DZMS PublishVeh Error: failed to get id for %1 : UID %2.",_class, _uid]; + } else { + _veh setVariable ["ObjectID", (_result select 1), true]; + _veh setVariable ["lastUpdate",diag_tickTime]; + _veh call fnc_veh_ResetEH; + PVDZE_veh_Init = _veh; + publicVariable "PVDZE_veh_Init"; + + if (DZMSDebug) then {diag_log ("DZMS PublishVeh: Created " + (_class) + " with ID " + str(_uid));}; + + // Send message to player + if (DZMSMakeVehKey) then { + RemoteMessage = ["rollingMessages","STR_CL_DZMS_VEH1"]; + (owner (_this select 2)) publicVariableClient "RemoteMessage"; + } else { + RemoteMessage = ["rollingMessages","STR_CL_DZMS_VEH2"]; + (owner (_this select 2)) publicVariableClient "RemoteMessage"; + }; + }; + }]; + } else { + // DayZ Vanilla Mod + _veh addEventHandler ["GetIn", { + local _veh = _this select 0; + _veh setVariable["DZMSCleanup" + dayz_serverKey, nil]; + _veh removeAllEventHandlers "HandleDamage"; + _veh addEventHandler ["HandleDamage",{_this call fnc_veh_handleDam}]; + RemoteMessage = ["rollingMessages","STR_CL_DZMS_VEH3"]; + (owner (_this select 2)) publicVariableClient "RemoteMessage"; + }]; + + // Save the vehicle when the player gets out + _veh addEventHandler ["GetOut", { + local _veh = _this select 0; + local _worldspace = [getDir _veh, getPosATL _veh]; + local _objectUID = _worldspace call dayz_objectUID2; + _object setVariable ["ObjectUID",_objectUID,true]; + + if !((([_veh] call fnc_getPos) select 2) > 2) then { // Prevent helicopters from saving if the player bails out during flight. + format ["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:", dayZ_instance, typeOf _veh, 0, 0, _worldspace, [[[],[]],[[],[]],[[],[]]], [], fuel _veh, _objectUID] call server_hiveWrite; + RemoteMessage = ["rollingMessages","STR_CL_DZMS_VEH4"]; + (owner (_this select 2)) publicVariableClient "RemoteMessage"; + }; + + _veh call fnc_veh_ResetEH; // No PV for this in Vanilla Mod, so I made one to get the repair feature to work before restart. + PVCDZ_veh_Init = _veh; + publicVariable "PVCDZ_veh_Init"; + }]; + }; +} else { + _veh addEventHandler ["GetIn",{ + local _veh = _this select 0; + RemoteMessage = ["rollingMessages","STR_CL_DZMS_VEH5"]; + (owner (_this select 2)) publicVariableClient "RemoteMessage"; + if !(_veh getVariable ["DZMSCleanup" + dayz_serverKey, true]) exitWith {}; // Check to prevent handlers from resetting every time the player exits and re-enters the vehicle. + _veh setVariable["DZMSCleanup" + dayz_serverKey, false]; + + if (DZMSEpoch) then { + PVDZE_veh_Init = _veh; + publicVariable "PVDZE_veh_Init"; + } else { + _veh removeAllEventHandlers "HandleDamage"; + _veh addEventHandler ["HandleDamage",{_this call fnc_veh_handleDam}]; + PVCDZ_veh_Init = _veh; + publicVariable "PVCDZ_veh_Init"; + }; + }]; +}; + +_veh \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSWaitMissionComp.sqf b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSWaitMissionComp.sqf new file mode 100755 index 0000000..177a06b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/DZMS/Scripts/DZMSWaitMissionComp.sqf @@ -0,0 +1,177 @@ +// Start mission monitoring thread + +local _mission = _this select 0; +local _coords = _this select 1; +local _aiType = _this select 2; +local _name = _this select 3; +local _localName = _this select 4; +local _markerIndex = _this select 5; +local _posIndex = _this select 6; +local _msgwin = _this select 7; +local _msglose = _this select 8; +local _complete = false; +local _startTime = diag_tickTime; +local _staticTime = diag_tickTime; +local _hero = _aiType == "Hero"; +local _data = DZMSMissionData select _mission; +local _aiCount = _data select 0; +local _objects = _data select 1; +local _vehicles = _data select 2; +local _crates = _data select 3; +local _groups = _data select 4; +local _staticGuns = _data select 5; +local _killReq = _aiCount - (DZMSRequiredKillPercent * _aiCount); +local _markerColor = ["ColorRed","ColorBlue"] select _hero; +local _missionName = ["Bandit " + _name,"Hero " + _name] select _hero; +local _localized = ["STR_CL_MISSION_BANDIT","STR_CL_MISSION_HERO"] select _hero; +local _text = ""; +local _playerNear = false; +local _closestPlayer = objNull; +local _acArray = []; +local _claimed = false; +local _acTime = diag_tickTime; +local _claimTime = 0; +local _left = false; +local _leftTime = 0; +local _warnArray = []; +local _markers = DZE_ServerMarkerArray select _markerIndex; +local _newCount = 0; +local _dotMarker = "DZMSDot" + str _mission; +local _autoMarkDot = "DZMSAutoDot" + str _mission; +local _autoText = ""; +local _frozen = false; +local _cacheTime = diag_tickTime; + +// Add AI counter if enabled. +if (DZMSAICount) then { + _text = if (_hero) then { + ["STR_CL_MISSION_HERO_COUNT",_localName,_aiCount,"STR_CL_MISSION_HEROS"]; + } else { + ["STR_CL_MISSION_BANDIT_COUNT",_localName,_aiCount,"STR_CL_MISSION_BANDITS"]; + }; + PVDZ_ServerMarkerSend = ["textSingle",[_dotMarker,_text]]; + publicVariable "PVDZ_ServerMarkerSend"; + (_markers select 1) set [7, _text]; + DZE_ServerMarkerArray set [_markerIndex, _markers]; +}; + +while {!_complete} do { + _newCount = (DZMSMissionData select _mission) select 0; + if (DZMSAICount) then { + // Check to see if the AI count has changed and update the marker. + if (_newCount != _aiCount) then { + _aiCount = _newCount; + _text = if (_hero) then { + ["STR_CL_MISSION_HERO_COUNT",_localName,_aiCount,"STR_CL_MISSION_HEROS"]; + } else { + ["STR_CL_MISSION_BANDIT_COUNT",_localName,_aiCount,"STR_CL_MISSION_BANDITS"]; + }; + PVDZ_ServerMarkerSend = ["textSingle",[_dotMarker,_text]]; + publicVariable "PVDZ_ServerMarkerSend"; + (_markers select 1) set [7, _text]; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + }; + }; + + // AI Caching + if (DZMSAICaching) then { + if (!_playerNear && !_frozen && {diag_tickTime - _cacheTime > 15}) then { + _groups call DZMSFreeze; + _cacheTime = diag_tickTime; + _frozen = true; + }; + + if (_playerNear && _frozen && {diag_tickTime - _cacheTime > 15}) then { + _groups call DZMSUnFreeze; + _cacheTime = diag_tickTime; + _frozen = false; + }; + }; + + if (DZMSAutoClaim) then { + #include "\z\addons\dayz_server\DZMS\Scripts\DZMSAutoClaim.sqf" + }; + + // JIP player "invisible static gunner" glitch fix + if ((count _staticGuns) > 0 && {(diag_tickTime - _staticTime) > 180}) then { + { + (gunner _x) action ["getout",_x]; + } count _staticGuns; + _staticTime = diag_tickTime; + }; + + // Replenish the ammo in the static guns and check for dead gunner + { + if (alive _x && ({alive _x} count crew _x > 0)) then { + _x setVehicleAmmo 1; + } else { + _x setDamage 1; + }; + } count _staticGuns; + + // Check for completion + if (_newCount <= _killReq) then { + if ([_coords,30] call DZMSNearPlayer) then { + _complete = true; + [_aiType,_localName,_msgwin] call DZMSMessage; + + // Address mission vehicles + { + if (DZMSSaveVehicles && {DZMSMakeVehKey}) then { + _x call DZMSVehKey; + } else { + _x setVariable ["CharacterID", "0", true]; + }; + _x setVehicleLock "unlocked"; + } count _vehicles; + + // Spawn loot in the crates + { + [(_x select 0),(_x select 1)] call DZMSBoxSetup; + } count _crates; + + if (DZMSSceneryDespawnTimer > 0) then { + [_coords,_mission,_objects,_vehicles,_crates,_groups,_staticGuns,_posIndex,false] spawn DZMSCleanupThread; + }; + diag_log text format["[DZMS]: %1 has been completed.",_missionName]; + }; + }; + + // Check for near players + _playerNear = [_coords,DZMSTimeoutDistance] call DZMSNearPlayer; + + // Timeout the mission if a player is not near + if (diag_tickTime - _startTime > DZMSMissionTimeOut*60 && !_playerNear) then { + _complete = true; + [_coords,_mission,_objects,_vehicles,_crates,_groups,_staticGuns,_posIndex,true] spawn DZMSCleanupThread; + [_aiType,_localName,_msglose] call DZMSMessage; + diag_log text format["[DZMS]: %1 has timed out.",_missionName]; + }; + + // If player is within range of the mission reset the start timer. + if (_playerNear) then {_startTime = diag_tickTime;}; + + uiSleep 2; +}; + +// Tell all clients to remove the markers from the map +local _remove = []; +{ + if (typeName _x == "ARRAY") then { + _remove set [count _remove, (_x select 1)]; + }; +} count _markers; +PVDZ_ServerMarkerSend = ["end",_remove]; +publicVariable "PVDZ_ServerMarkerSend"; + +//Let the timer know the mission is over +if (_hero) then { + DZMSHeroEndTime = diag_tickTime; + DZMSHeroRunning = DZMSHeroRunning - 1; +} else { + DZMSBanditEndTime = diag_tickTime; + DZMSBanditRunning = DZMSBanditRunning - 1; +}; + +DZE_ServerMarkerArray set [_markerIndex, -1]; +DZMSMissionData set [_mission, -1]; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/airdrop_winorfail.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/airdrop_winorfail.sqf new file mode 100755 index 0000000..23f39e0 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/airdrop_winorfail.sqf @@ -0,0 +1,377 @@ +private ["_startDist","_PorM","_PorM2","_msgcrash","_msgdrop","_mission","_position","_difficulty","_name","_missionType","_showMarker","_enableMines","_completionType","_msgstart","_msgwin","_msglose","_mines"]; + +_mission = _this select 0; +_position = _this select 1; +_difficulty = _this select 2; +_name = _this select 3; +_missionType = _this select 4; +_showMarker = _this select 5; +_enableMines = _this select 6; +_completionType = _this select 7; +_airClass = _this select 8; +_vehclass = _this select 9; +_msgstart = (_this select 10) select 0; +_msgcrash = (_this select 10) select 1; +_msgdrop = (_this select 10) select 2; +_msgwin = (_this select 10) select 3; +_msglose = (_this select 10) select 4; + +if(wai_debug_mode) then {diag_log format["WAI: Starting Mission number %1",_mission];}; + +if(wai_enable_minefield && _enableMines) then { + _mines = [_position,50,75,100] call minefield; + wai_mission_data select _mission set [2, _mines]; +}; + +_color = call { + if(_difficulty == "Easy") exitWith {"ColorGreen"}; + if(_difficulty == "Medium") exitWith {"ColorYellow"}; + if(_difficulty == "Hard") exitWith {"ColorRed"}; + if(_difficulty == "Extreme") exitWith {"ColorBlack"}; +}; + +_name = call { + if(_missionType == "MainHero") exitWith {"Bandit " + _name;}; + if(_missionType == "MainBandit") exitWith {"Hero " + _name;}; +}; + +_startDist = 10000; // increase this to delay the time it takes for the plane to arrive at the mission +_PorM = if (random 1 > .5) then {"+"} else {"-"}; +_PorM2 = if (random 1 > .5) then {"+"} else {"-"}; +_startPos = call compile format ["[(%1 select 0) %2 %4,(%1 select 1) %3 %4, 300]",_position,_PorM,_PorM2,_startDist]; + +[_difficulty,_msgstart] call wai_server_message; + +WAI_MarkerReady = true; + +[_position,_mission,_name,_completionType,_color,_showMarker,_airClass,_vehclass,_msgcrash,_msgdrop,_msgwin,_msglose,_enableMines,_missionType,_difficulty,_startPos] spawn { + + private ["_loot","_vehMark","_return","_parachute","_vehPos","_vehicle","_aigroup","_speed","_dir","_wp","_msgcrash","_msgdrop","_dropzone","_plane","_pilot","_left","_leftTime","_claimTime","_acArray","_claimed","_acTime","_acdot","_acMarker","_timeStamp","_unitGroups","_playerArray","_enableMines","_aiVehicles","_aiVehArray","_baseclean","_msgwin","_msglose","_bomb","_position","_timeout","_player_near","_complete","_starttime","_timeout_time","_max_ai","_killpercent","_mission","_missionType","_airemain","_text","_name","_completionType","_marker","_dot","_color","_showMarker","_startPos"]; + + _position = _this select 0; + _mission = _this select 1; + _name = _this select 2; + _completionType = _this select 3; + _color = _this select 4; + _showMarker = _this select 5; + _airClass = _this select 6; + _vehclass = _this select 7; + _msgcrash = _this select 8; + _msgdrop = _this select 9; + _msgwin = _this select 10; + _msglose = _this select 11; + _enableMines = _this select 12; + _missionType = _this select 13; + _difficulty = _this select 14; + _startPos = _this select 15; + + _timeout = false; + _player_near = false; + _complete = false; + _starttime = diag_tickTime; + _timeout_time = (random((wai_mission_timeout select 1) - (wai_mission_timeout select 0)) + (wai_mission_timeout select 0)) * 60; + _max_ai = (wai_mission_data select _mission) select 0; + _unitGroups = (wai_mission_data select _mission) select 1; + _mines = (wai_mission_data select _mission) select 2; + _aiVehicles = (wai_mission_data select _mission) select 4; + _vehicles = (wai_mission_data select _mission) select 5; + _killpercent = _max_ai - (_max_ai * (wai_kill_percent / 100)); + _loot = if (_missionType == "MainHero") then {Loot_VehicleDrop select 0;} else {Loot_VehicleDrop select 1;}; + _playerArray = []; + _timeStamp = diag_tickTime; + _closestPlayer = objNull; + _acArray = []; + _claimed = false; + _acTime = diag_tickTime; + _claimTime = 0; + _left = false; + _leftTime = 0; + _vehDropped = false; + _onGround = false; + _crashed = false; + + _dropzone = "HeliHEmpty" createVehicle [0,0,0]; + _dropzone setPos _position; + + _plane = _airClass createVehicle _startPos; + _dir = [_plane, _dropzone] call BIS_fnc_relativeDirTo; + _plane setDir _dir; + _plane setPos _startPos; + dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_plane]; + _plane engineOn true; + _speed = 150; + _plane setVelocity [(sin _dir*_speed),(cos _dir*_speed),0]; + _plane flyInHeight 200; + + _aigroup = createGroup civilian; + _pilot = _aigroup createUnit ["SurvivorW2_DZ",_startPos,[],0,"FORM"]; + [_pilot] joinSilent _aigroup; + _pilot setSkill 1; + _pilot setCombatMode "BLUE"; + _pilot moveInDriver _plane; + _pilot assignAsDriver _plane; + _aigroup setSpeedMode "LIMITED"; + + _wp = _aigroup addWaypoint [_position, 0]; + _wp setWaypointType "MOVE"; + _wp setWaypointBehaviour "CARELESS"; + _wp setWaypointCompletionRadius 50; + + _t1 = 0; + _dropTime = 0; + + while {!_timeout && !_complete} do { + + if (!alive _plane && {!_vehDropped}) exitWith { + [_difficulty,_msgcrash] call wai_server_message; + _crashed = true; + _timeout = true; + }; + + if ((_plane distance _position < 230) && {!_vehDropped}) then { + uiSleep 1; // This gets the drop near the center of the mission + _planePos = [_plane] call FNC_GetPos; + uiSleep 1; // need to do this otherwise the C130 blows up + _parachute = createVehicle ["ParachuteMediumEast", _planePos, [], 0, "FLY"]; + _parachute setPos _planePos; + _vehicle = [_vehclass,_planePos,_mission] call custom_publish; + _vehicle attachTo [_parachute, [0, 0, 1]]; + _t1 = diag_tickTime; + [_difficulty,_msgdrop] call wai_server_message; + _return = _aigroup addWaypoint [_startPos, 0]; + _return setWaypointType "MOVE"; + _return setWaypointBehaviour "CARELESS"; + [_plane,_position,_aigroup] spawn wai_clean_aircraft; + _vehDropped = true; + }; + + if (_vehDropped && {!_onGround}) then { + _dropTime = diag_tickTime - _t1; // used to override if stuck in a tree or on top of a building + if (((([_parachute] call FNC_GetPos) select 2) < 6) || {_dropTime > 55}) then { + detach _vehicle; + deleteVehicle _parachute; + _vehPos = [_vehicle] call FNC_GetPos; + //_vehPos set [2,0]; + //_position = _vehPos; + _onGround = true; + }; + }; + + if (count _mines > 0) then { + { + if((isPlayer _x) && (vehicle _x != _x) && (vehicle _x distance _position < 275) && !(_x in _playerArray)) then { + _x call wai_minefield_warning; + _playerArray set [count _playerArray, _x]; + }; + + if((isPlayer _x) && (vehicle _x != _x) && (vehicle _x distance _position < 75) && (alive _x) && ((([vehicle _x] call FNC_GetPos) select 2) < 1)) then { + _bomb = "Bo_GBU12_lgb" createVehicle ([vehicle _x] call FNC_GetPos); + uiSleep 3; + deleteVehicle _bomb; + }; + } count playableUnits; + }; + + if ((diag_tickTime - _timeStamp) > 180 && (count _aiVehicles) > 0) then { + { + if (_x isKindOf "StaticWeapon") then { + (gunner _x) action ["getout",_x]; + }; + } forEach _aiVehicles; + + _timeStamp = diag_tickTime; + }; + + if (use_wai_autoclaim && _showMarker) then { + #include "\z\addons\dayz_server\WAI\compile\auto_claim.sqf" + }; + + if (count _aiVehicles > 0) then { + _aiVehicles call wai_monitor_ai_vehicles; + }; + + if (_showMarker) then { + if (ai_show_count) then { + _aiCount = (wai_mission_data select _mission) select 0; + _text = format["%1 (%2 A.I.)",_name,_aiCount]; + } else { + _text = _name; + }; + + _marker = createMarker [_missionType + str(_mission), _position]; + _marker setMarkerColor _color; + _marker setMarkerShape "ELLIPSE"; + _marker setMarkerBrush "Solid"; + _marker setMarkerSize [300,300]; + + _dot = createMarker [_missionType + str(_mission) + "dot", _position]; + _dot setMarkerColor "ColorBlack"; + _dot setMarkerType "mil_dot"; + _dot setMarkerText _text; + + if (_onGround) then { + _vehMark = createMarker [_missionType + str(_mission) + "vehicle", _vehPos]; + _vehMark setMarkerColor "ColorBlack"; + _vehMark setMarkerType "mil_dot"; + _vehMark setMarkerText _vehclass; + }; + + if (use_wai_autoclaim) then { + _acMarker = createMarker [_missionType + str(_mission) + "auto", _position]; + _acMarker setMarkerShape "ELLIPSE"; + _acMarker setMarkerBrush "Border"; + _acMarker setMarkerColor "ColorRed"; + _acMarker setMarkerSize [ac_alert_distance,ac_alert_distance]; + + if (_claimed) then { + _acdot = createMarker [_missionType + str(_mission) + "autodot", [(_position select 0) + 100, (_position select 1) + 100]]; + _acdot setMarkerColor "ColorBlack"; + _acdot setMarkerType "mil_objective"; + if (_left) then { + _acdot setMarkerText format["%1 Claim Timeout [%2]",(_acArray select 1),_leftTime]; + } else { + _acdot setMarkerText format["Claimed by %1",(name _closestPlayer)]; + }; + }; + }; + + uiSleep 1; + deleteMarker _marker; + deleteMarker _dot; + if (!isNil "_acMarker") then {deleteMarker _acMarker;}; + if (!isNil "_acdot") then {deleteMarker _acdot;}; + if (!isNil "_vehMark") then {deleteMarker _vehMark;}; + } else { + uiSleep 1; + }; + + _player_near = [_position,wai_timeout_distance] call isNearPlayer; + + if (diag_tickTime - _starttime >= _timeout_time && !_player_near) then { + _timeout = true; + } else { + if (_player_near) then {_starttime = diag_tickTime;}; + }; + + if (_onGround) then { + _complete = [_mission,_completionType,_killpercent,_vehPos] call wai_completion_check; + }; + }; + + if (_complete) then { + + [_vehicle,_mission,[[_vehicle]]] call wai_generate_vehicle_key; + _vehicle setVehicleLock "unlocked"; + + [_vehicle,_vehclass,2] call load_ammo; + + [_vehicle,_loot] call dynamic_crate; + + if (count _mines > 0) then { + _mines call wai_fnc_remove; + }; + + [_difficulty,_msgwin] call wai_server_message; + + if (_missionType == "MainBandit") then { + b_missionsrunning = b_missionsrunning - 1; + wai_b_starttime = diag_tickTime; + } else { + h_missionsrunning = h_missionsrunning - 1; + wai_h_starttime = diag_tickTime; + }; + + diag_log format["WAI: [Mission: %1]: Ended at %2",_name,_position]; + + if (wai_clean_mission_time > 0) then { + private ["_finish_time","_cleaned","_playernear"]; + _finish_time = diag_tickTime; + _cleaned = false; + + while {!_cleaned} do { + + uiSleep 3; + + if (count _aiVehicles > 0) then { + _aiVehicles call wai_monitor_ai_vehicles; + }; + + if (diag_tickTime - _finish_time >= 60*wai_clean_mission_time) then { + + if (count _aiVehicles > 0) then { + _aiVehicles call wai_fnc_remove; + }; + + _mission call wai_remove_ai; + + if (count _vehicles > 0) then { + [_mission,_vehicles] call wai_remove_vehicles; + }; + + deleteVehicle _dropzone; + + uiSleep 5; + + { + if (count units _x == 0) then { + deleteGroup _x; + }; + } forEach _unitGroups; + + wai_mission_markers = wai_mission_markers - [(_missionType + str(_mission))]; + wai_mission_data set [_mission, -1]; + + _cleaned = true; + }; + }; + }; + }; + + if (_timeout) then { + + if (alive _plane) then { + [_plane,_position,_aigroup] spawn wai_clean_aircraft; + }; + + if (count _mines > 0) then { + _mines call wai_fnc_remove; + }; + + if (count _aiVehicles > 0) then { + _aiVehicles call wai_fnc_remove; + }; + + _mission call wai_remove_ai; + + if (count _vehicles > 0) then { + [_mission,_vehicles] call wai_remove_vehicles; + }; + + deleteVehicle _dropzone; + + if (!_crashed) then { + [_difficulty,_msglose] call wai_server_message; + }; + + if (_missionType == "MainBandit") then { + b_missionsrunning = b_missionsrunning - 1; + wai_b_starttime = diag_tickTime; + } else { + h_missionsrunning = h_missionsrunning - 1; + wai_h_starttime = diag_tickTime; + }; + + uiSleep 5; + + { + if (count units _x == 0) then { + deleteGroup _x; + }; + } forEach _unitGroups; + + wai_mission_markers = wai_mission_markers - [(_missionType + str(_mission))]; + wai_mission_data set [_mission, -1]; + + diag_log format["WAI: [Mission: %1]: Timed out at %2",_name,_position]; + }; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/auto_claim.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/auto_claim.sqf new file mode 100755 index 0000000..ec6dcbf --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/auto_claim.sqf @@ -0,0 +1,82 @@ + if (!_claimed) then { + + // Find the closest player and send an alert + if (isNull _closestPlayer) then { + _closestPlayer = _position call wai_isClosest; // Find the closest player + [_closestPlayer,_name,"Start"] call wai_AutoClaimAlert; // Send alert + _claimTime = diag_tickTime; // Set the time variable for countdown + }; + + // After the delay time, check player's location and either claim or not claim + if ((diag_tickTime - _claimTime) > ac_delay_time) then { + if ((_closestPlayer distance _position) > ac_alert_distance || {!alive _closestPlayer}) then { + [_closestPlayer,_name,"Stop"] call wai_AutoClaimAlert; // Send alert to player who is closest + _closestPlayer = objNull; // Set to default + _acArray = []; // Set to default + } else { + _claimed = true; + [_closestPlayer,_name,"Claimed"] call wai_AutoClaimAlert; // Send alert to all players + diag_log text format ["WAI Auto Claim: mission %1 has been claimed by %2",_name,(name _closestPlayer)]; + _acArray = [getplayerUID _closestPlayer, name _closestPlayer]; // Add player UID and name to array + }; + }; + }; + + if (_claimed) then { + + // Used in the marker when a player has left the mission area + _leftTime = round (ac_timeout - (diag_tickTime - _claimTime)); + + // If the player dies at the mission, change marker to countdown and set player variable to null + if ((!alive _closestPlayer) && !_left) then { + _closestPlayer = objNull; // Set the variable to null to prevent null player errors + _claimTime = diag_tickTime; // Set the time for countdown + _left = true; // Changes the marker to countdown + }; + + // Check to see if the dead player has returned to the mission + if (isNull _closestPlayer) then { + _closestPlayer = [_position,_acArray] call wai_checkReturningPlayer; + }; + + // Notify the player that he/she is outside the mission area + if (!(isNull _closestPlayer) && ((_closestPlayer distance _position) > ac_alert_distance) && !_left) then { + [_closestPlayer,_name,"Return"] call wai_AutoClaimAlert; + _claimTime = diag_tickTime; // Set the time for the countdown + _left = true; // Set the mission marker to countdown + }; + + // If the player returns to the mission before the clock runs out then change the marker + if (!(isNull _closestPlayer) && ((_closestPlayer distance _position) < ac_alert_distance) && _left) then { + [_closestPlayer,_name,"Reclaim"] call wai_AutoClaimAlert; + _left = false; // Change the mission marker back to claim + }; + + // Warn other players in mission area + { + if(!(_x in (units group _closestPlayer)) && ((_x distance _position) < ac_alert_distance )) then { + //warn + RemoteMessage = ["rollingMessages", format["You are in %1's mission. Ask %1 for permission!",_acArray select 1] ]; + (owner _x) publicVariableClient "RemoteMessage"; + }; + } forEach playableUnits; + + // If the player lets the clock run out, then set the mission to unclaimed and set the variables to default + // Player left the server + if ((isNull _closestPlayer) && ((diag_tickTime - _claimTime) > ac_timeout)) then { + [_acArray ,_name,"Unclaim"] call wai_AutoClaimAlert; // Send alert to all players + _claimed = false; + _left = false; + _acArray = []; + } else { + // Player is alive but did not return to the mission + if (((diag_tickTime - _claimTime) > ac_timeout) && ((_closestPlayer distance _position) > ac_alert_distance)) then { + [_closestPlayer,_name,"Unclaim"] call wai_AutoClaimAlert; // Send alert to all players + _closestPlayer = objNull; + _claimed = false; + _left = false; + _acArray = []; + + }; + }; + }; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/custom_publish_vehicle.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/custom_publish_vehicle.sqf new file mode 100755 index 0000000..07aa26d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/custom_publish_vehicle.sqf @@ -0,0 +1,159 @@ +private ["_unit","_ailist","_hit","_count","_vehpos","_max_distance","_vehicle","_position_fixed","_position","_dir","_class","_dam","_damage","_hitpoints","_selection","_fuel","_key","_inventory"]; + +_count = count _this; +_class = _this select 0; +_position = _this select 1; +_mission = _this select 2; +_max_distance = 17; +_position_fixed = false; +_dir = floor(round(random 360)); + +if (typeName _class == "ARRAY") then { + _class = _class call BIS_fnc_selectRandom; +}; + +if (_count > 3) then { + _position_fixed = _this select 3; +}; + +if (_count > 4) then { + _dir = _this select 4; +}; + +if (!_position_fixed) then { + _vehpos = [0,0,0]; + while {count _vehpos > 2} do { + _vehpos = [_position,12,_max_distance,10,0,0.7,0] call BIS_fnc_findSafePos; // Works better + //_vehpos = _position findEmptyPosition[20,_max_distance,_class]; + _max_distance = (_max_distance + 10); + }; +} else { + _vehpos = _position; +}; + +_vehicle = _class createVehicle _vehpos; +_vehicle setDir _dir; +_vehicle setPos _vehpos; +_vehicle setVectorUp surfaceNormal position _vehicle; +_vehicle setVariable ["ObjectID","1",true]; +_vehicle setVariable ["CharacterID","1",true]; // Set character ID to non-zero number so players see the red "Vehicle Locked" message +_vehicle setVariable ["mission" + dayz_serverKey,_mission, false]; +clearWeaponCargoGlobal _vehicle; +clearMagazineCargoGlobal _vehicle; +_vehicle setVehicleLock "locked"; + +((wai_mission_data select _mission) select 5) set [count ((wai_mission_data select _mission) select 5), _vehicle]; + +if (wai_debug_mode) then {diag_log format["WAI: Spawned %1 at %2",_class,_vehpos];}; + +if (getNumber(configFile >> "CfgVehicles" >> _class >> "isBicycle") != 1) then { + _hitpoints = _vehicle call vehicle_getHitpoints; + { + _dam = (random((wai_vehicle_damage select 1) - (wai_vehicle_damage select 0)) + (wai_vehicle_damage select 0)) / 100; + _selection = getText(configFile >> "cfgVehicles" >> _class >> "HitPoints" >> _x >> "name"); + + if ((_selection in dayZ_explosiveParts) && _dam > 0.8) then { + _dam = 0.8 + }; + + _isglass = ["glass", _selection] call fnc_inString; + + if(!_isglass && _dam > 0.1) then { + _strH = "hit_" + (_selection); + _vehicle setHit[_selection,_dam]; + _vehicle setVariable [_strH,_dam,true]; + if (wai_debug_mode) then {diag_log format["WAI: Calculated damage for %1 is %2",_selection,_dam];}; + }; + } count _hitpoints; + + _fuel = (random((wai_mission_fuel select 1) - (wai_mission_fuel select 0)) + (wai_mission_fuel select 0)) / 100; + _vehicle setFuel _fuel; + if (wai_debug_mode) then {diag_log format["WAI: Added %1 percent fuel to vehicle",_fuel];}; +}; + +if (wai_godmode_vehicles) then { + _vehicle addEventHandler ["HandleDamage",{0}]; +} else { + _vehicle addEventHandler ["HandleDamage",{_this call fnc_veh_handleDam}]; +}; + +dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_vehicle]; + +if (wai_keep_vehicles) then { + + _vehicle addEventHandler ["GetIn", { + _vehicle = _this select 0; + _unit = _this select 2; + _vehicle setVariable ["mission" + dayz_serverKey,nil]; + + if !(isPlayer _unit) exitWith {}; + + if (wai_debug_mode) then {diag_log "PUBLISH: Attempt " + str(_vehicle);}; + + _class = typeOf _vehicle; + _characterID = _vehicle getVariable ["CharacterID", "0"]; + _worldspace = [getDir _vehicle, getPosATL _vehicle]; + _hitpoints = _vehicle call vehicle_getHitpoints; + _damage = damage _vehicle; + _fuel = fuel _vehicle; + _uid = _worldspace call dayz_objectUID2; + _array = []; + + { + _hit = ([_vehicle,_x] call object_getHit) select 0; //Update for 1.0.7 + _selection = getText (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "HitPoints" >> _x >> "name"); + if (_hit > 0) then {_array set [count _array,[_selection,_hit]]}; + if (wai_debug_mode) then {diag_log format ["Section Part: %1, Dmg: %2",_selection,_hit];}; + } count _hitpoints; + + _inventory = [getWeaponCargo _vehicle, getMagazineCargo _vehicle, getBackpackCargo _vehicle]; + + _key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance,_class,_damage,_characterID,_worldspace,_inventory,_array,_fuel,_uid]; + _key call server_hiveWrite; + _key = format["CHILD:388:%1:",_uid]; + _result = _key call server_hiveReadWrite; + _outcome = _result select 0; + + if (wai_debug_mode) then {diag_log "HIVE: WRITE: "+ (str _key);}; + + if (_outcome != "PASS") then { + deleteVehicle _vehicle; + diag_log "CUSTOM: failed to get id for : " + (str _uid); + } else { + _oid = _result select 1; + _vehicle setVariable ["ObjectID", _oid, true]; + + if (wai_debug_mode) then {diag_log "CUSTOM: Selected " + (str _oid);}; + + _vehicle setVariable ["lastUpdate",diag_tickTime]; + _vehicle call fnc_veh_ResetEH; + PVDZE_veh_Init = _vehicle; + publicVariable "PVDZE_veh_Init"; + + diag_log ("PUBLISH: Created " + (_class) + " with ID " + str(_uid)); + + if (wai_vehicle_message) then { + [nil,(_this select 2),"loc",rTitleText,"This vehicle is saved to the database.","PLAIN",5] call RE; + }; + }; + }]; + +} else { + _vehicle addEventHandler ["GetIn", { + _vehicle = _this select 0; + + if (wai_vehicle_message) then { + [nil,(_this select 2),"loc",rTitleText,"WARNING: This vehicle will be deleted at restart!","PLAIN",5] call RE; + }; + + if (_vehicle getVariable ["claimed",nil] == "yes") exitWith {}; + + _vehicle setVariable ["mission" + dayz_serverKey,nil]; + _vehicle setVariable ["claimed","yes",false]; + _vehicle removeAllEventHandlers "HandleDamage"; + _vehicle addEventHandler ["HandleDamage",{_this call fnc_veh_handleDam}]; + + }]; +}; + +_vehicle diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/dynamic_crate.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/dynamic_crate.sqf new file mode 100755 index 0000000..d782179 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/dynamic_crate.sqf @@ -0,0 +1,171 @@ +private ["_multiArrItem","_multiArrWep","_loot","_vehicles","_complete","_marker","_ammo","_tool","_crate","_weapon","_item","_backpack","_num_tools","_num_items","_num_backpacks","_num_weapons","_weapons_array","_tool_array","_item_array","_backpack_array","_num_pistols","_pistols_array","_pistol","_pistolammo"]; + +_crate = _this select 0; +_loot = _this select 1; +if ((count _this) > 2) then { + _complete = _this select 2; +}; +_multiArrItem = false; +_multiArrWep = false; + +if !(isNil "_complete") then { + if (typeOf _crate in (crates_large + crates_medium + crates_small)) then { + if (wai_crates_smoke && sunOrMoon == 1) then { + _marker = "smokeShellPurple" createVehicle getPosATL _crate; + _marker setPosATL (getPosATL _crate); + _marker attachTo [_crate,[0,0,0]]; + }; + if (wai_crates_flares && sunOrMoon != 1) then { + _marker = "RoadFlare" createVehicle getPosATL _crate; + _marker setPosATL (getPosATL _crate); + _marker attachTo [_crate, [0,0,0]]; + + PVDZ_obj_RoadFlare = [_marker,0]; + publicVariable "PVDZ_obj_RoadFlare"; + }; + }; +}; + +if(typeName (_loot select 0) == "ARRAY") then { + _num_weapons = (_loot select 0) select 0; + _weapons_array = (_loot select 0) select 1; +} else { + _num_weapons = _loot select 0; + _weapons_array = ai_wep_random; + _multiArrWep = true; +}; + +if(typeName (_loot select 1) == "ARRAY") then { + _num_tools = (_loot select 1) select 0; + _tool_array = (_loot select 1) select 1; +} else { + _num_tools = _loot select 1; + _tool_array = crate_tools; +}; + +if(typeName (_loot select 2) == "ARRAY") then { + _num_items = (_loot select 2) select 0; + _item_array = (_loot select 2) select 1; +} else { + _num_items = _loot select 2; + _item_array = crate_items_random; + _multiArrItem = true; +}; + +if(typeName (_loot select 3) == "ARRAY") then { + _num_pistols = (_loot select 3) select 0; + _pistols_array = (_loot select 3) select 1; +} else { + _num_pistols = _loot select 3; + if (WAI_Overpoch) then { + _pistols_array = ai_wep_owpistol; + } else { + _pistols_array = ai_wep_pistol; + }; +}; + +if(typeName (_loot select 4) == "ARRAY") then { + _num_backpacks = (_loot select 4) select 0; + _backpack_array = (_loot select 4) select 1; +} else { + _num_backpacks = _loot select 4; + _backpack_array = crate_backpacks_all; +}; + +if(_num_weapons > 0) then { + + if (_multiArrWep) then { + + for "_i" from 1 to _num_weapons do { + _weapons_array = ai_wep_random select (floor (random (count ai_wep_random))); + _weapon = _weapons_array select (floor (random (count _weapons_array))); + _ammo = _weapon call find_suitable_ammunition; + _crate addWeaponCargoGlobal [_weapon,1]; + _crate addMagazineCargoGlobal [_ammo, (round(random((wai_num_mags select 1) - (wai_num_mags select 0))) + (wai_num_mags select 0))]; + }; + } else { + + for "_i" from 1 to _num_weapons do { + _weapon = _weapons_array select (floor (random (count _weapons_array))); + _ammo = _weapon call find_suitable_ammunition; + _crate addWeaponCargoGlobal [_weapon,1]; + _crate addMagazineCargoGlobal [_ammo, (round(random((wai_num_mags select 1) - (wai_num_mags select 0))) + (wai_num_mags select 0))]; + }; + }; +}; + +if(_num_tools > 0) then { + + for "_i" from 1 to _num_tools do { + _tool = _tool_array select (floor (random (count _tool_array))); + + if(typeName (_tool) == "ARRAY") then { + _crate addWeaponCargoGlobal [_tool select 0,_tool select 1]; + } else { + _crate addWeaponCargoGlobal [_tool,1]; + }; + }; +}; + +if(_num_items > 0) then { + + if (_multiArrItem) then { + + for "_i" from 1 to _num_items do { + _item_array = crate_items_random select (floor (random (count crate_items_random))); + _item = _item_array select (floor (random (count _item_array))); + + if(typeName (_item) == "ARRAY") then { + _crate addMagazineCargoGlobal [_item select 0,_item select 1]; + } else { + _crate addMagazineCargoGlobal [_item,1]; + }; + }; + } else { + + for "_i" from 1 to _num_items do { + _item = _item_array select (floor (random (count _item_array))); + + if(typeName (_item) == "ARRAY") then { + _crate addMagazineCargoGlobal [_item select 0,_item select 1]; + } else { + _crate addMagazineCargoGlobal [_item,1]; + }; + }; + }; +}; + +if(_num_pistols > 0) then { + + for "_i" from 1 to _num_pistols do { + _pistol = _pistols_array select (floor (random (count _pistols_array))); + _pistolammo = _pistol call find_suitable_ammunition; + _crate addWeaponCargoGlobal [_pistol,1]; + _crate addMagazineCargoGlobal [_pistolammo, (round(random((wai_num_mags select 1) - (wai_num_mags select 0))) + (wai_num_mags select 0))]; + }; +}; + +if(_num_backpacks > 0) then { + + for "_i" from 1 to _num_backpacks do { + _backpack = _backpack_array select (floor (random (count _backpack_array))); + + if(typeName (_backpack) == "ARRAY") then { + _crate addBackpackCargoGlobal [_backpack select 0,_backpack select 1]; + } else { + _crate addBackpackCargoGlobal [_backpack,1]; + }; + }; +}; + +if (wai_high_value_chance > 0) then { + + if(random 100 < wai_high_value_chance) then { + _item = crate_items_high_value select (floor (random (count crate_items_high_value))); + _crate addMagazineCargoGlobal [_item,1]; + }; +}; + +if(wai_debug_mode) then { + diag_log format["WAI: Spawning in a dynamic crate with %1 guns, %2 tools, %3 items and %4 pistols and %5 backpacks",_num_weapons,_num_tools,_num_items,_num_pistols,_num_backpacks]; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/find_position.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/find_position.sqf new file mode 100755 index 0000000..cb12901 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/find_position.sqf @@ -0,0 +1,119 @@ +private ["_i","_traders","_safepos","_validspot","_position","_color","_markers"]; + +if (wai_use_blacklist) then { + _safepos = [getMarkerPos "center",150,((getMarkerSize "center") select 1),(_this select 0),0,0.4,0,wai_blacklist]; +} else { + _safepos = [getMarkerPos "center",150,((getMarkerSize "center") select 1),(_this select 0),0,0.4,0]; +}; + +_i = 0; +_validspot = false; + +while {!_validspot} do { + _i = _i + 1; + _position = if (!wai_user_spawnpoints) then {_safepos call BIS_fnc_findSafePos} else {WAI_StaticSpawnPoints call BIS_fnc_selectRandom}; + _validspot = true; + + // if the count of the selected position is more than two BIS_fnc_findSafePos failed + if (!wai_user_spawnpoints) then { + if ((count _position) > 2) then { + _validspot = false; + _color = "ColorBlue"; + }; + }; + + if (wai_avoid_samespot) then { + { + if ((_position distance _x) < 200) then { + _validspot = false; + _color = "ColorBlue"; + }; + } forEach wai_markedPos; + }; + + // If DZMS installed, include the markers + _markers = if (!isNil "DZMSMarkers") then {DZMSMarkers + wai_mission_markers} else {wai_mission_markers}; + + if (_validspot && {wai_avoid_missions != 0}) then { + { + if (getMarkerColor _x != "" && (_position distance (getMarkerPos _x) < wai_avoid_missions)) exitWith { + if (wai_debug_mode) then {diag_log format ["WAI: Invalid Position (Marker: %1)",_x];}; + _validspot = false; + _color = "ColorBlue"; + }; + } count _markers; + }; + + if (_validspot && {wai_avoid_safezones != 0}) then { + { + _szPos = _x select 0; + if (_position distance _szPos < wai_avoid_safezones) exitWith { + if (wai_debug_mode) then {diag_log "WAI: Invalid Position (SafeZone)";}; + _color = "ColorBrown"; + _validspot = false; + }; + } forEach DZE_SafeZonePosArray; + }; + + if (_validspot && {wai_avoid_water != 0}) then { + if ([_position,wai_avoid_water] call isNearWater) then { + if (wai_debug_mode) then {diag_log "WAI: Invalid Position (Water)";}; + _color = "ColorBlue"; + _validspot = false; + }; + }; + + if (_validspot && {wai_avoid_town != 0}) then { + if ([_position,wai_avoid_town] call isNearTown) then { + if (wai_debug_mode) then {diag_log "WAI: Invalid Position (Town)";}; + _color = "ColorGreen"; + _validspot = false; + }; + }; + + if (_validspot && {wai_avoid_road != 0}) then { + if ([_position,wai_avoid_road] call isNearRoad) then { + if (wai_debug_mode) then {diag_log "WAI: Invalid Position (Road)";}; + _color = "ColorGrey"; + _validspot = false; + }; + }; + + if (_validspot && {wai_avoid_players != 0}) then { + if ([_position,wai_avoid_players] call isNearPlayer) then { + if (wai_debug_mode) then {diag_log "WAI: Invalid Position (player)";}; + _color = "ColorPink"; + _validspot = false; + }; + }; + + if (_validspot && {wai_avoid_plots != 0}) then { + if (count (_position nearEntities ["Plastic_Pole_EP1_DZ", wai_avoid_plots]) > 0) then { + if (wai_debug_mode) then {diag_log "WAI: Invalid Position (plot)";}; + _color = "ColorBlack"; + _validspot = false; + }; + }; + + if (!_validspot) then { + if (wai_debug_mode) then { + _marker = createMarkerLocal ["spotMarker" + (str _i),[_position select 0,_position select 1]]; + _marker setMarkerShapeLocal "ICON"; + _marker setMarkerTypeLocal "DOT"; + _marker setMarkerColorLocal _color; + _marker setMarkerSizeLocal [1.0, 1.0]; + _marker setMarkerTextLocal "fail"; + }; + }; + + if (_validspot) then { + if (wai_debug_mode) then {diag_log format ["Loop complete, valid position %1 in %2 attempts.",_position,_i];}; + }; +}; + +if (wai_avoid_samespot) then { + wai_markedPos set [count wai_markedPos, _position]; +}; + +_position set [2, 0]; +_position diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/functions.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/functions.sqf new file mode 100755 index 0000000..525c7a3 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/functions.sqf @@ -0,0 +1,287 @@ +find_suitable_ammunition = { + + private["_weapon","_result","_ammoArray"]; + + _result = false; + _weapon = _this; + _ammoArray = getArray (configFile >> "cfgWeapons" >> _weapon >> "magazines"); + + if (count _ammoArray > 0) then {_result = _ammoArray select 0;}; + if (typeName _result == "BOOL") then {diag_log format["WAI: Cannot find magazine for weapon - %1.",_weapon];}; + _result +}; + +wai_spawnCrate = { + private ["_pos","_crate","_mission","_offset","_type","_loot","_position","_crates"]; + _crates = _this select 0; + _pos = _this select 1; + if (count _this > 2) then { + _mission = _this select 2; + }; + + { + _loot = _x select 0; + _type = _x select 1; + _offset = _x select 2; + + _position = [(_pos select 0) + (_offset select 0), (_pos select 1) + (_offset select 1), 0]; + + if (count _offset > 2) then { + _position set [2, (_offset select 2)]; + }; + + if (typeName _type == "ARRAY") then { + _type = _type call BIS_fnc_selectRandom; + }; + + _crate = _type createVehicle [0,0,0]; + + if (count _x > 3) then { + _crate setDir (_x select 3); + }; + + if (surfaceIsWater _position) then { + _crate setPosASL _position; + } else { + _crate setPos _position; + }; + + _crate setVariable ["permaLoot",true]; + clearWeaponCargoGlobal _crate; + clearMagazineCargoGlobal _crate; + _crate addEventHandler ["HandleDamage", {0}]; + _crate enableSimulation false; + if (!isNil "_mission") then { + ((wai_mission_data select _mission) select 3) set [count ((wai_mission_data select _mission) select 3), [_crate,_loot]]; + } else { + (wai_static_data select 3) set [count (wai_static_data select 3), [_crate,_loot]]; + }; + } count _crates; +}; + +wai_server_message = { + private ["_color","_params","_type"]; + _type = _this select 0; + _message = _this select 1; + + call { + if (wai_mission_announce == "Radio") exitWith { + RemoteMessage = ["radio",_message]; + }; + if (wai_mission_announce == "DynamicText") exitWith { + _color = call { + if(_type == "Easy") exitWith {"#00cc00"}; + if(_type == "Medium") exitWith {"#ffff66"}; + if(_type == "Hard") exitWith {"#990000"}; + if(_type == "Extreme") exitWith {"#33334d"}; + }; + _params = ["0.40","#FFFFFF","0.60",_color,0,-.35,10,0.5]; + RemoteMessage = ["dynamic_text", ["STR_CL_MISSION_ANNOUNCE",_message],_params]; + }; + if (wai_mission_announce == "titleText") exitWith { + RemoteMessage = ["titleText",_message]; + }; + }; + publicVariable "RemoteMessage"; +}; + +wai_minefield_warning = { + private ["_owner","_params"]; + _owner = (owner _this); + _params = ["0","#FFFFFF","0.50","#ff3300",0,.3,10,0.5]; + RemoteMessage = ["dynamic_text",["","STR_CL_MINEFIELD_WARNING"],_params]; + (_owner) publicVariableClient "RemoteMessage"; +}; + +wai_AutoClaimAlert = { + private ["_unit","_owner","_mission","_type","_message","_name"]; + _unit = _this select 0; + _mission = _this select 1; + _type = _this select 2; + if (typeName _unit == "ARRAY") then { + _name = _unit select 1; + } else { + _owner = owner _unit; + _name = name _unit; + }; + + _message = call { + if (_type == "Start") exitWith {["STR_CL_AUTOCLAIM_ANNOUNCE",_mission,ac_delay_time];}; + if (_type == "Stop") exitWith {["STR_CL_AUTOCLAIM_NOCLAIM",_mission];}; + if (_type == "Return") exitWith {["STR_CL_AUTOCLAIM_RETURN",ac_timeout];}; + if (_type == "Reclaim") exitWith {"STR_CL_AUTOCLAIM_RECLAIM";}; + if (_type == "Claimed") exitWith {["STR_CL_AUTOCLAIM_CLAIM",_name,_mission];}; + if (_type == "Unclaim") exitWith {["STR_CL_AUTOCLAIM_ABANDON",_name,_mission];}; + }; + + if (_type == "Claimed" || _type == "Unclaim") exitWith { + RemoteMessage = ["IWAC",_message]; + publicVariable "RemoteMessage"; + }; + + RemoteMessage = ["IWAC",_message]; + (_owner) publicVariableClient "RemoteMessage"; +}; + +wai_monitor_ai_vehicles = { + private "_vehicle"; + { + _vehicle = _x; + if (alive _vehicle && ({alive _x} count crew _vehicle > 0)) then { + _vehicle setVehicleAmmo 1; + _vehicle setFuel 1; + } else { + _vehicle setDamage 1; + }; + } count _this; +}; + +wai_fnc_remove = { + { + deleteVehicle _x; + } count _this; +}; + +wai_remove_vehicles = { + private ["_mission","_vehicles"]; + _mission = _this select 0; + _vehicles = _this select 1; + + { + if (_x getVariable ["mission" + dayz_serverKey, nil] == _mission) then { + deleteVehicle _x; + }; + } count _vehicles; +}; + +wai_remove_ai = { + { + if (_x getVariable ["mission" + dayz_serverKey, nil] == _this) then { + deleteVehicle _x; + }; + } count allUnits; +}; + +wai_generate_vehicle_key = { + private ["_isKeyOK","_crates","_keyColor","_keyNumber","_vehicle","_crate","_keySelected","_mission","_unit","_ailist","_characterID"]; + + _vehicle = _this select 0; + _mission = _this select 1; + _crates = _this select 2; + + if (wai_vehicle_keys == "NoVehicleKey") exitWith { + _vehicle setVariable ["CharacterID","0",true]; + _vehicle setVehicleLock "unlocked"; + }; + + _keyColor = ["Green","Red","Blue","Yellow","Black"] call BIS_fnc_selectRandom; + _keyNumber = (ceil(random 2500)) + 1; + _keySelected = format["ItemKey%1%2",_keyColor,_keyNumber]; + _isKeyOK = isClass(configFile >> "CfgWeapons" >> _keySelected); + _characterID = str(getNumber(configFile >> "CfgWeapons" >> _keySelected >> "keyid")); + + if !(_isKeyOK) exitWith { + _vehicle setVariable ["CharacterID","0",true]; + _vehicle setVehicleLock "unlocked"; + diag_log format["WAI: Failed to generate a key for vehicle %1 at mission %2",_vehicle,_mission]; + }; + + _vehicle setVariable ["CharacterID",_characterID,true]; + + if (wai_vehicle_keys == "KeyinVehicle") exitWith { + _vehicle addWeaponCargoGlobal [_keySelected,1]; + _vehicle setVehicleLock "unlocked"; + }; + if (wai_vehicle_keys == "KeyinCrate") exitWith { + _crate = (_crates select 0) select 0; + _crate addWeaponCargoGlobal [_keySelected, 1]; + }; + if (wai_vehicle_keys == "KeyonAI") exitWith { + _ailist = []; + { + if ((_x getVariable ["mission" + dayz_serverKey,nil] == _mission) && (_x getVariable ["bodyName",nil] == "mission_ai") && !(_x getVariable ["noKey", false])) then { + _ailist set [count _ailist, _x]; + }; + } count allDead; + + _unit = _ailist call BIS_fnc_selectRandom; + _unit addWeapon _keySelected; + + if(wai_debug_mode) then { + diag_log format["There are %1 Dead AI for mission %2 vehicle key",_ailist,_mission]; + diag_log format["Key added to %1 for vehicle %2",_unit,_vehicle]; + }; + }; +}; + +wai_completion_check = { + private ["_completionType","_complete","_position","_mission","_killpercent","_objectivetarget"]; + + _mission = _this select 0; + _completionType = _this select 1; + _killpercent = _this select 2; + _position = _this select 3; + _complete = false; + + call + { + if (_completionType select 0 == "crate") exitWith { + + if(wai_kill_percent == 0) then { + _complete = [_position,20] call isNearPlayer; + } else { + if(((wai_mission_data select _mission) select 0) <= _killpercent) then { + _complete = [_position,20] call isNearPlayer; + }; + }; + }; + + if (_completionType select 0 == "kill") exitWith { + if(((wai_mission_data select _mission) select 0) == 0) then { + _complete = true; + }; + }; + + if (_completionType select 0 == "assassinate") exitWith { + _objectivetarget = _completionType select 1; + { + if !(alive _x) exitWith {_complete = true;}; + } count units _objectivetarget; + }; + + /* no missions are using this function at the moment + if (_completionType == "resource") exitWith { + _node = _completionType select 1; + _resource = _node getVariable ["Resource", 0]; + if (_resource == 0) then { + if ([_position,80] call isNearPlayer) then { + _complete = true; + } else { + _timeout = true; + }; + }; + }; */ + }; + _complete +}; + +wai_clean_aircraft = { + private ["_veh","_position","_group"]; + _veh = _this select 0; + _position = _this select 1; + _group = _this select 2; + + uiSleep 60; + deleteVehicle _veh; + + while {(count (wayPoints _group)) > 0} do { + deleteWaypoint ((wayPoints _group) select 0); + }; + + { + deleteVehicle _x; + } count (units _group); + uiSleep 5; + deleteGroup _group; + if(wai_debug_mode) then {diag_log "WAI: Aircraft Cleaned";}; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/group_waypoints.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/group_waypoints.sqf new file mode 100755 index 0000000..ccde77a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/group_waypoints.sqf @@ -0,0 +1,36 @@ +private ["_wp","_skill","_mission","_wp_rad","_wp","_pos_x","_pos_y","_pos_z","_unitGroup","_position"]; + +_unitGroup = _this select 0; +_position = _this select 1; +_pos_x = _position select 0; +_pos_y = _position select 1; +_pos_z = _position select 2; +_wp_rad = 0; + +if(count _this > 2) then { + + _skill = _this select 2; + + _wp_rad = call { + if (_skill == "easy") exitWith {20;}; + if (_skill == "medium") exitWith {40;}; + if (_skill == "hard") exitWith {80;}; + if (_skill == "extreme") exitWith {120;}; + if (_skill == "random") exitWith {random(100);}; + }; +}; + +// AI is on a building so limit the movement +if (_pos_z > 1) then { + _wp_rad = 0; +}; + +{ + _wp = _unitGroup addWaypoint [_x,10]; + _wp setWaypointType "MOVE"; + +} count [[_pos_x,(_pos_y+_wp_rad),0],[(_pos_x+_wp_rad),_pos_y,0],[_pos_x,(_pos_y-_wp_rad),0],[(_pos_x-_wp_rad),_pos_y,0]]; + +_wp = _unitGroup addWaypoint [[_pos_x,_pos_y,0],_wp_rad]; +_wp setWaypointType "CYCLE"; + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/heli_para.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/heli_para.sqf new file mode 100755 index 0000000..ff4ba6e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/heli_para.sqf @@ -0,0 +1,395 @@ +private ["_rocket","_unarmed","_launcher","_starttodrop","_timebtwdrops","_flyinheight","_distance","_heliStartDir","_start_position","_diag_distance","_rndnum","_mission_data","_pos_x","_pos_y","_ainum","_missionrunning","_aitype","_helipos1","_geartools","_gearmagazines","_cleanheli","_drop","_helipos","_gunner2","_gunner","_player_present","_skillarray","_aicskill","_aiskin","_aigear","_wp","_helipatrol","_gear","_skin","_backpack","_mags","_gun","_triggerdis","_startingpos","_aiweapon","_mission","_heli_class","_aipack","_helicopter","_unitGroup","_pilot","_skill","_paranumber","_position","_wp1"]; + +if (!wai_enable_paradrops) exitWith {}; + +_position = _this select 0; +_pos_x = _position select 0; +_pos_y = _position select 1; +_triggerdis = _this select 1; +_heli_class = _this select 2; +_heliStartDir = _this select 3; +_distance = _this select 4; +_flyinheight = _this select 5; +_timebtwdrops = _this select 6; +_starttodrop = _this select 7; +_paranumber = _this select 8; +_skill = _this select 9; +_gun = _this select 10; +_mags = _this select 11; +_backpack = _this select 12; +_skin = _this select 13; +_gear = _this select 14; +_aitype = _this select 15; +_helipatrol = _this select 16; +_aipack = ""; +_player_present = false; + +if (count _this > 17) then { + _mission = _this select 17; +} else { + _mission = nil; +}; + +if (typeName _gun == "ARRAY") then { + _launcher = _gun select 1; + _gun = _gun select 0; +}; + +_aiweapon = []; +_aigear = []; +_aiskin = ""; +_aicskill = []; +_skillarray = ["aimingAccuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","commanding","general"]; +_unarmed = false; + +if(wai_debug_mode) then {diag_log "WAI: Paradrop waiting for player";}; + + +// Wait until a player is within the trigger distance +while {!_player_present} do { + _player_present = [[_pos_x,_pos_y,0],_triggerdis] call isNearPlayer; + uiSleep 5; +}; + +_aiskin = call { + if (_skin == "random") exitWith {ai_all_skin select (floor (random (count ai_all_skin)));}; + if (_skin == "hero") exitWith {ai_hero_skin select (floor (random (count ai_hero_skin)));}; + if (_skin == "bandit") exitWith {ai_bandit_skin select (floor (random (count ai_bandit_skin)));}; + if (_skin == "special") exitWith {ai_special_skin select (floor (random (count ai_special_skin)));}; + _skin; +}; + +if(typeName _aiskin == "ARRAY") then { + _aiskin = _aiskin select (floor (random (count _aiskin))); +}; + +if(!isNil "_mission") then { + _missionrunning = (typeName (wai_mission_data select _mission) == "ARRAY"); +} else { + _missionrunning = true; +}; + +if(!_missionrunning) exitWith {if (wai_debug_mode) then {diag_log format["WAI: Mission at %1 already ended, aborting para drop",_position];};}; + +if(wai_debug_mode) then {diag_log format ["WAI: Spawning a %1 with %2 units to be para dropped at %3",_heli_class,_paranumber,_position];}; + +if(_aitype == "Hero") then { + _unitGroup = createGroup RESISTANCE; +} else { + _unitGroup = createGroup EAST; +}; + +_pilot = _unitGroup createUnit [_aiskin,[0,0,0],[],1,"NONE"]; +[_pilot] joinSilent _unitGroup; + +// This random number is used to start the helicopter a random distance from the mission +_rndnum = (random ((_distance select 1) - (_distance select 0)) + (_distance select 0)); + +call +{ + if (_heliStartDir == "North") exitWith {_helicopter = createVehicle [_heli_class,[(_position select 0),(_position select 1) + _rndnum,100],[],0,"FLY"];}; + if (_heliStartDir == "South") exitWith {_helicopter = createVehicle [_heli_class,[(_position select 0),(_position select 1) - _rndnum,100],[],0,"FLY"];}; + if (_heliStartDir == "East") exitWith {_helicopter = createVehicle [_heli_class,[(_position select 0) + _rndnum,(_position select 1),100],[],0,"FLY"];}; + if (_heliStartDir == "West") exitWith {_helicopter = createVehicle [_heli_class,[(_position select 0) - _rndnum,(_position select 1),100],[],0,"FLY"];}; +}; + +_start_position = position _helicopter; + +if (wai_debug_mode) then { + _diag_distance = _helicopter distance _position; + diag_log format["WAI: the Paratrooper Drop has started %1 from the mission",_diag_distance]; +}; + +//_helicopter setFuel 1; +_helicopter engineOn true; +//_helicopter setVehicleAmmo 1; +_helicopter flyInHeight _flyinheight; +_helicopter addEventHandler ["GetOut",{(_this select 0) setFuel 0;(_this select 0) setDamage 1;}]; + +_pilot assignAsDriver _helicopter; +_pilot moveInDriver _helicopter; + +_gunner = _unitGroup createUnit [_aiskin,[0,0,0],[],1,"NONE"]; +_gunner assignAsGunner _helicopter; +_gunner moveInTurret [_helicopter,[0]]; +[_gunner] joinSilent _unitGroup; + +_gunner2 = _unitGroup createUnit [_aiskin,[0,0,0],[],1,"NONE"]; +_gunner2 assignAsGunner _helicopter; +_gunner2 moveInTurret [_helicopter,[1]]; +[_gunner2] joinSilent _unitGroup; + +call { + if (_aitype == "Hero") exitWith {{ _x setVariable ["Hero",true]; _x setVariable ["humanity", ai_add_humanity]; } count [_pilot, _gunner, _gunner2];}; + if (_aitype == "Bandit") exitWith {{ _x setVariable ["Bandit",true]; _x setVariable ["humanity", ai_remove_humanity]; } count [_pilot, _gunner, _gunner2];}; + if (_aitype == "Special") exitWith {{ _x setVariable ["Special",true]; _x setVariable ["humanity", ai_special_humanity]; } count [_pilot, _gunner, _gunner2];}; +}; + +{ + _pilot setSkill [_x,1] +} count _skillarray; + +{ + _gunner setSkill [_x,0.7]; + _gunner2 setSkill [_x,0.7]; +} count _skillarray; + + +{ + _x addWeapon "Makarov_DZ"; + _x addMagazine "8Rnd_9x18_Makarov"; + _x addMagazine "8Rnd_9x18_Makarov"; +} count (units _unitgroup); + +dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_helicopter]; + +if (!isNil "_mission") then { + ((wai_mission_data select _mission) select 1) set [count ((wai_mission_data select _mission) select 1), _unitGroup]; + ((wai_mission_data select _mission) select 4) set [count ((wai_mission_data select _mission) select 4), _helicopter]; +} else { + (wai_static_data select 1) set [count (wai_static_data select 1), _unitGroup]; + (wai_static_data select 2) set [count (wai_static_data select 2), _helicopter]; +}; + +_unitGroup allowFleeing 0; +_unitGroup setBehaviour "CARELESS"; +_unitGroup setSpeedMode "FULL"; + +if(_aitype == "Hero") then { + _unitGroup setCombatMode ai_hero_combatmode; + _unitGroup setBehaviour ai_hero_behaviour; +} else { + _unitGroup setCombatMode ai_bandit_combatmode; + _unitGroup setBehaviour ai_bandit_behaviour; +}; + +// Add waypoints to the chopper group. +_wp = _unitGroup addWaypoint [[(_position select 0), (_position select 1)], 0]; +_wp setWaypointType "MOVE"; +_wp setWaypointCompletionRadius 100; + +_drop = true; +//_helipos = getPos _helicopter; + +while {(alive _helicopter) && (_drop)} do { + private ["_magazine","_weapon","_weapon","_chute","_para","_pgroup"]; + uiSleep 1; + _helipos = getPos _helicopter; + + if (_helipos distance [(_position select 0),(_position select 1),100] <= _starttodrop) then { + + if(_aitype == "Hero") then { + _pgroup = createGroup RESISTANCE; + } else { + _pgroup = createGroup EAST; + }; + + if (!isNil "_mission") then { + ((wai_mission_data select _mission) select 1) set [count ((wai_mission_data select _mission) select 1), _pgroup]; + } else { + (wai_static_data select 1) set [count (wai_static_data select 1), _pgroup]; + }; + + for "_x" from 1 to _paranumber do { + + _helipos = getPos _helicopter; + + call { + if(typeName(_gun) == "SCALAR") then { + if(_gun == 0) exitWith {_aiweapon = ai_wep_random select (floor (random (count ai_wep_random)));}; + if(_gun == 1) exitWith {_aiweapon = ai_wep_machine;}; + if(_gun == 2) exitWith {_aiweapon = ai_wep_sniper;}; + } else { + if(_gun == "random") exitWith {_aiweapon = ai_wep_random select (floor (random (count ai_wep_random)));}; + if(_gun == "unarmed") exitWith {_unarmed = true;}; + _aiweapon = _gun; + }; + }; + + if (!_unarmed) then { + _weapon = if (typeName (_aiweapon) == "ARRAY") then {_aiweapon select (floor (random (count _aiweapon)))} else {_aiweapon}; + if !(isClass (configFile >> "CfgWeapons" >> _weapon)) then { + diag_log text format ["WAI Error: Weapon classname (%1) is not valid!",_weapon]; + _weapon = "M16A2_DZ"; // Replace with known good classname. + }; + _magazine = _weapon call find_suitable_ammunition; + }; + + _aigear = call { + if (typeName(_gear) == "SCALAR") then { + if(_gear == 0) exitWith {ai_gear0;}; + if(_gear == 1) exitWith {ai_gear1;}; + if(_gear == 2) exitWith {ai_gear2;}; + if(_gear == 3) exitWith {ai_gear3;}; + if(_gear == 4) exitWith {ai_gear4;}; + } else { + if(_gear == "random") exitWith {ai_gear_random select (floor (random (count ai_gear_random)));}; + }; + }; + + _gearmagazines = _aigear select 0; + _geartools = _aigear select 1; + + call { + if(_backpack == "random") exitWith {_aipack = ai_packs select (floor (random (count ai_packs)));}; + if(_backpack == "none") exitWith {}; + _aipack = _backpack; + }; + + _aiskin = call { + if (_skin == "random") exitWith {ai_all_skin select (floor (random (count ai_all_skin)));}; + if (_skin == "hero") exitWith {ai_hero_skin select (floor (random (count ai_hero_skin)));}; + if (_skin == "bandit") exitWith {ai_bandit_skin select (floor (random (count ai_bandit_skin)));}; + if (_skin == "special") exitWith {ai_special_skin select (floor (random (count ai_special_skin)));}; + _skin; + }; + + //if(typeName _aiskin == "ARRAY") then { + //_aiskin = _aiskin select (floor (random (count _aiskin))); + //}; + + _para = _pgroup createUnit [_aiskin,[0,0,0],[],1,"FORM"]; + + _para enableAI "TARGET"; + _para enableAI "AUTOTARGET"; + _para enableAI "MOVE"; + _para enableAI "ANIM"; + _para enableAI "FSM"; + + removeAllWeapons _para; + removeAllItems _para; + + _para addWeapon _weapon; + + for "_i" from 1 to _mags do { + _para addMagazine _magazine; + }; + + if(_backpack != "none") then { + _para addBackpack _aipack; + }; + + { + _para addMagazine _x + } count _gearmagazines; + + { + _para addWeapon _x + } count _geartools; + + if (sunOrMoon != 1) then { + _para addWeapon "NVGoggles"; + }; + + _aicskill = call { + if(_skill == "easy") exitWith {ai_skill_easy;}; + if(_skill == "medium") exitWith {ai_skill_medium;}; + if(_skill == "hard") exitWith {ai_skill_hard;}; + if(_skill == "extreme") exitWith {ai_skill_extreme;}; + if(_skill == "random") exitWith {ai_skill_random select (floor (random (count ai_skill_random)));}; + ai_skill_random select (floor (random (count ai_skill_random))); + }; + + { + _para setSkill [(_x select 0),(_x select 1)] + } count _aicskill; + + _para addEventHandler ["Killed",{[_this select 0, _this select 1] call on_kill;}]; + _chute = createVehicle ["ParachuteWest", [(_helipos select 0), (_helipos select 1), (_helipos select 2)], [], 0, "NONE"]; + _para moveInDriver _chute; + [_para] joinSilent _pgroup; + + // Adjusting this number changes the spread of the AI para drops + uiSleep _timebtwdrops; + + if(!isNil "_mission") then { + _mission_data = (wai_mission_data select _mission); + + if (typeName _mission_data == "ARRAY") then { + _ainum = _mission_data select 0; + wai_mission_data select _mission set [0, (_ainum + 1)]; + _para setVariable ["mission" + dayz_serverKey, _mission, false]; + }; + } else { + wai_static_data set [0, ((wai_static_data select 0) + 1)]; + }; + }; + + if (!isNil "_launcher" && wai_use_launchers) then { + call { + if (_launcher == "Random") exitWith { _launcher = (ai_launchers_AT + ai_launchers_AA) call BIS_fnc_selectRandom; }; + if (_launcher == "at") exitWith {_launcher = ai_wep_launchers_AT select (floor (random (count ai_wep_launchers_AT)));}; + if (_launcher == "aa") exitWith {_launcher = ai_wep_launchers_AA select (floor (random (count ai_wep_launchers_AA)));}; + }; + _rocket = _launcher call find_suitable_ammunition; + _para addMagazine _rocket; + _para addMagazine _rocket; + _para addWeapon _launcher; + }; + + call { + if (_aitype == "Hero") exitWith {{_x setVariable ["Hero",true,false]; _x setVariable ["humanity", ai_remove_humanity];} count (units _pgroup);}; + if (_aitype == "Bandit") exitWith {{_x setVariable ["Bandit",true,false]; _x setVariable ["humanity", ai_add_humanity];} count (units _pgroup);}; + if (_aitype == "Special") exitWith {{_x setVariable ["Special",true,false]; _x setVariable ["humanity", ai_special_humanity];} count (units _pgroup);}; + }; + + _drop = false; + _pgroup selectLeader ((units _pgroup) select 0); + + if(wai_debug_mode) then {diag_log format ["WAI: Spawned in %1 ai units for paradrop",_paranumber];}; + + [_pgroup,_position,_skill] call group_waypoints; + + if(_aitype == "Hero") then { + _pgroup setCombatMode ai_hero_combatmode; + _pgroup setBehaviour ai_hero_behaviour; + } else { + _pgroup setCombatMode ai_bandit_combatmode; + _pgroup setBehaviour ai_bandit_behaviour; + }; + }; +}; + +if (_helipatrol) then { + + _wp1 = _unitGroup addWaypoint [[(_position select 0),(_position select 1)], 100]; + _wp1 setWaypointType "SAD"; + _wp1 setWaypointCompletionRadius 150; + _unitGroup setBehaviour "AWARE"; + _unitGroup setSpeedMode "FULL"; + + { + _x addEventHandler ["Killed",{[_this select 0, _this select 1] call on_kill;}]; + } forEach (units _unitgroup); + +} else { + + { + _x doMove [(_start_position select 0), (_start_position select 1), 100] + } count (units _unitGroup); + + _unitGroup setBehaviour "CARELESS"; + _unitGroup setSpeedMode "FULL"; + + _cleanheli = true; + + while {_cleanheli} do { + + uiSleep 5; + _helipos1 = getPos _helicopter; + + if ((_helipos1 distance [(_start_position select 0),(_start_position select 1),100] <= 2000) || (!alive _helicopter)) then { + + deleteVehicle _helicopter; + { + deleteVehicle _x; + } count (units _unitgroup); + + deleteGroup _unitGroup; + if(wai_debug_mode) then { diag_log "WAI: Paradrop helicopter cleaned"; }; + _cleanheli = false; + }; + + }; + +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/heli_patrol.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/heli_patrol.sqf new file mode 100755 index 0000000..bbff3be --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/heli_patrol.sqf @@ -0,0 +1,140 @@ +private ["_start_position","_diag_distance","_rndnum","_mission","_aitype","_aiskin","_skin","_aicskill","_wpnum","_radius","_gunner2","_gunner","_skillarray","_startingpos","_heli_class","_startPos","_helicopter","_unitGroup","_pilot","_skill","_position","_wp"]; + +_position = _this select 0; +_radius = _this select 1; +_wpnum = _this select 2; +_heli_class = _this select 3; +_skill = _this select 4; +_skin = _this select 5; +_aitype = _this select 6; + +if (count _this > 7) then { + _mission = _this select 7; +} else { + _mission = nil; +}; + +_skillarray = ["aimingAccuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","commanding","general"]; + +call { + if(_skill == "easy") exitWith { _aicskill = ai_skill_easy; }; + if(_skill == "medium") exitWith { _aicskill = ai_skill_medium; }; + if(_skill == "hard") exitWith { _aicskill = ai_skill_hard; }; + if(_skill == "extreme") exitWith { _aicskill = ai_skill_extreme; }; + if(_skill == "random") exitWith { _aicskill = ai_skill_random call BIS_fnc_selectRandom; }; + _aicskill = ai_skill_random call BIS_fnc_selectRandom; +}; + +call { + if (_skin == "random") exitWith { _aiskin = ai_all_skin call BIS_fnc_selectRandom; }; + if (_skin == "hero") exitWith { _aiskin = ai_hero_skin call BIS_fnc_selectRandom; }; + if (_skin == "bandit") exitWith { _aiskin = ai_bandit_skin call BIS_fnc_selectRandom; }; + if (_skin == "special") exitWith { _aiskin = ai_special_skin call BIS_fnc_selectRandom; }; + _aiskin = _skin; +}; + +if(typeName _aiskin == "ARRAY") then { + _aiskin = _aiskin call BIS_fnc_selectRandom; +}; + +if(_aitype == "Hero") then { + _unitGroup = createGroup RESISTANCE; +} else { + _unitGroup = createGroup EAST; +}; + +_pilot = _unitGroup createUnit [_aiskin, [0,0,0], [], 1, "NONE"]; + +[_pilot] joinSilent _unitGroup; + +// This random number is used to start the helicopter from 3000 to 4000 meters from the mission. +_rndnum = 3000 + round (random 1000); + +_helicopter = createVehicle [_heli_class,[(_position select 0) + _rndnum,(_position select 1),100],[],0,"FLY"]; +_diag_distance = _helicopter distance _position; +if (wai_debug_mode) then { + diag_log format["WAI: the Heli Patrol has started %1 from the mission",_diag_distance]; +}; +_helicopter setFuel 1; +_helicopter engineOn true; +_helicopter setVehicleAmmo 1; +_helicopter flyInHeight 150; +_helicopter lock true; +_helicopter addEventHandler ["GetOut",{(_this select 0) setFuel 0;(_this select 0) setDamage 1;}]; + +_pilot assignAsDriver _helicopter; +_pilot moveInDriver _helicopter; + +_gunner = _unitGroup createUnit [_aiskin, [0,0,0], [], 1, "NONE"]; +_gunner assignAsGunner _helicopter; +_gunner moveInTurret [_helicopter,[0]]; + +[_gunner] joinSilent _unitGroup; + +_gunner2 = _unitGroup createUnit [_aiskin, [0,0,0], [], 1, "NONE"]; +_gunner2 assignAsGunner _helicopter; +_gunner2 moveInTurret [_helicopter,[1]]; +[_gunner2] joinSilent _unitGroup; + +call { + if (_aitype == "Hero") exitWith {{ _x setVariable ["Hero",true,false]; _x setVariable ["humanity", ai_remove_humanity];} count [_pilot, _gunner, _gunner2]; }; + if (_aitype == "Bandit") exitWith {{ _x setVariable ["Bandit",true,false]; _x setVariable ["humanity", ai_add_humanity];} count [_pilot, _gunner, _gunner2]; }; + if (_aitype == "Special") exitWith {{ _x setVariable ["Special",true,false]; _x setVariable ["humanity", ai_special_humanity];} count [_pilot, _gunner, _gunner2]; }; +}; + +{ + _pilot setSkill [_x,1]; +} count _skillarray; + +{ + _gunner setSkill [(_x select 0),(_x select 1)]; + _gunner2 setSkill [(_x select 0),(_x select 1)]; +} count _aicskill; + +{ + _x addWeapon "Makarov_DZ"; + _x addMagazine "8Rnd_9x18_Makarov"; + _x addMagazine "8Rnd_9x18_Makarov"; +} count (units _unitgroup); + +{ + _x addEventHandler ["Killed",{[_this select 0, _this select 1] call on_kill;}]; +} forEach (units _unitgroup); + +dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_helicopter]; + +if (!isNil "_mission") then { + ((wai_mission_data select _mission) select 1) set [count ((wai_mission_data select _mission) select 1), _unitGroup]; + ((wai_mission_data select _mission) select 4) set [count ((wai_mission_data select _mission) select 4), _helicopter]; +} else { + (wai_static_data select 1) set [count (wai_static_data select 1), _unitGroup]; + (wai_static_data select 2) set [count (wai_static_data select 2), _helicopter]; +}; + +_unitGroup allowFleeing 0; +_unitGroup setBehaviour "AWARE"; +_unitGroup setSpeedMode "FULL"; + +if(_aitype == "Hero") then { + _unitGroup setCombatMode ai_hero_combatmode; + _unitGroup setBehaviour ai_hero_behaviour; +} else { + _unitGroup setCombatMode ai_bandit_combatmode; + _unitGroup setBehaviour ai_bandit_behaviour; +}; + +if(_wpnum > 0) then { + + for "_i" from 1 to _wpnum do { + _wp = _unitGroup addWaypoint [[(_position select 0),(_position select 1),0],_radius]; + _wp setWaypointType "MOVE"; + _wp setWaypointCompletionRadius 200; + }; + +}; + +_wp = _unitGroup addWaypoint [[(_position select 0),(_position select 1),0],100]; +_wp setWaypointType "CYCLE"; +_wp setWaypointCompletionRadius 200; + +_unitGroup diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/load_ammo.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/load_ammo.sqf new file mode 100755 index 0000000..6c8889a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/load_ammo.sqf @@ -0,0 +1,103 @@ +private["_vehicle","_type","_inGear"]; +#define GEAR(mag) if !(isNil "_inGear") then {_vehicle addMagazineCargoGlobal [mag,_inGear];}; +#define TURRET(mag,num) _vehicle addMagazineTurret [mag,[num]]; + +_vehicle = _this select 0; +_type = _this select 1; + +if (count _this > 2) then { + _inGear = _this select 2; +}; + +call { + + if(_type == "Mi17_DZE") exitWith { + TURRET("100Rnd_762x54_PK",0) + TURRET("100Rnd_762x54_PK",1) + GEAR("100Rnd_762x54_PK") + }; + + if(_type == "UH1Y_DZE") exitWith { + TURRET("2000Rnd_762x51_M134",0) + TURRET("2000Rnd_762x51_M134",1) + GEAR("2000Rnd_762x51_M134") + }; + + if(_type == "UH1H_DZE") exitWith { + TURRET("100Rnd_762x51_M240",0) + TURRET("100Rnd_762x51_M240",1) + GEAR("100Rnd_762x51_M240") + }; + + if(_type == "CH_47F_EP1_DZE") exitWith { + TURRET("2000Rnd_762x51_M134",0) + TURRET("2000Rnd_762x51_M134",1) + TURRET("100Rnd_762x51_M240",2) + GEAR("2000Rnd_762x51_M134") + }; + + if(_type == "UH60M_EP1_DZE") exitWith { + TURRET("2000Rnd_762x51_M134",0) + TURRET("2000Rnd_762x51_M134",1) + GEAR("2000Rnd_762x51_M134") + }; + + if(_type == "HMMWV_M998A2_SOV_DES_EP1_DZE") exitWith { + TURRET("48Rnd_40mm_MK19",0) + TURRET("100Rnd_762x51_M240",1) + GEAR("48Rnd_40mm_MK19") + }; + + if(_type == "LandRover_Special_CZ_EP1_DZE") exitWith { + TURRET("29Rnd_30mm_AGS30",0) + TURRET("100Rnd_762x54_PK",1) + GEAR("29Rnd_30mm_AGS30") + }; + + if(_type == "GAZ_Vodnik_DZE") exitWith { + TURRET("100Rnd_762x54_PK",0) + TURRET("100Rnd_762x54_PK",1) + GEAR("100Rnd_762x54_PK") + }; + + if(_type == "HMMWV_M1151_M2_CZ_DES_EP1_DZE") exitWith { + TURRET("100Rnd_127x99_M2",0) + GEAR("100Rnd_127x99_M2") + }; + + if(_type == "LandRover_MG_TK_EP1_DZE") exitWith { + TURRET("100Rnd_127x99_M2",0) + GEAR("100Rnd_127x99_M2") + }; + + if(_type == "UAZ_MG_TK_EP1_DZE") exitWith { + TURRET("150Rnd_127x107_DSHKM",0) + GEAR("150Rnd_127x107_DSHKM") + }; + + if(_type == "ArmoredSUV_PMC_DZE") exitWith { + TURRET("2000Rnd_762x51_M134",0) + GEAR("2000Rnd_762x51_M134") + }; + + if(_type == "Offroad_DSHKM_Gue_DZE") exitWith { + TURRET("150Rnd_127x107_DSHKM",0) + GEAR("150Rnd_127x107_DSHKM") + }; + + if(_type == "Pickup_PK_TK_GUE_EP1_DZE") exitWith { + TURRET("100Rnd_762x54_PK",0) + GEAR("100Rnd_762x54_PK") + }; + + if(_type == "Pickup_PK_GUE_DZE") exitWith { + TURRET("100Rnd_762x54_PK",0) + GEAR("100Rnd_762x54_PK") + }; + + if(_type == "Pickup_PK_INS_DZE") exitWith { + TURRET("100Rnd_762x54_PK",0) + GEAR("100Rnd_762x54_PK") + }; + +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/minefield.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/minefield.sqf new file mode 100755 index 0000000..40ef68d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/minefield.sqf @@ -0,0 +1,16 @@ +private["_area_max","_area_min","_position","_num_mines","_mines"]; + +_position = _this select 0; +_area_min = _this select 1; +_area_max = _this select 2; +_num_mines = _this select 3; +_mines = []; + +for "_x" from 1 to _num_mines do { + + _mine_pos = [_position,_area_min,_area_max,10,0,2000,0] call BIS_fnc_findSafePos; + _mine = createVehicle ["Mine", _mine_pos, [], 0, "CAN_COLLIDE"]; + _mines set [(count _mines), _mine]; +}; + +_mines \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/mission_winorfail.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/mission_winorfail.sqf new file mode 100755 index 0000000..a3fa2d8 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/mission_winorfail.sqf @@ -0,0 +1,303 @@ +private ["_mission","_position","_difficulty","_name","_missionType","_showMarker","_enableMines","_completionType","_msgstart","_msgwin","_msglose","_mines"]; + +_mission = _this select 0; +_position = _this select 1; +_difficulty = _this select 2; +_name = _this select 3; +_missionType = _this select 4; +_showMarker = _this select 5; +_enableMines = _this select 6; +_completionType = _this select 7; +_msgstart = (_this select 8) select 0; +_msgwin = (_this select 8) select 1; +_msglose = (_this select 8) select 2; + +if(wai_debug_mode) then {diag_log format["WAI: Starting Mission number %1",_mission];}; + +if(wai_enable_minefield && _enableMines) then { + _mines = [_position,50,75,100] call minefield; + wai_mission_data select _mission set [2, _mines]; +}; + +_color = call { + if(_difficulty == "Easy") exitWith {"ColorGreen"}; + if(_difficulty == "Medium") exitWith {"ColorYellow"}; + if(_difficulty == "Hard") exitWith {"ColorRed"}; + if(_difficulty == "Extreme") exitWith {"ColorBlack"}; +}; + +_name = call { + if(_missionType == "MainHero") exitWith {"Bandit " + _name;}; + if(_missionType == "MainBandit") exitWith {"Hero " + _name;}; +}; + +[_difficulty,_msgstart] call wai_server_message; + +WAI_MarkerReady = true; + +[_position,_mission,_name,_completionType,_color,_showMarker,_msgwin,_msglose,_enableMines,_missionType,_difficulty] spawn { + + private ["_left","_leftTime","_claimTime","_acArray","_claimed","_acTime","_acdot","_acMarker","_timeStamp","_unitGroups","_playerArray","_enableMines","_aiVehicles","_aiVehArray","_baseclean","_msgwin","_msglose","_bomb","_position","_minefieldRadius","_timeout","_player_near","_complete","_starttime","_timeout_time","_max_ai","_killpercent","_mission","_missionType","_airemain","_text","_name","_completionType","_marker","_dot","_objectivetarget","_color","_crateLoot","_crate","_showMarker","_cleanunits"]; + + _position = _this select 0; + _mission = _this select 1; + _name = _this select 2; + _completionType = _this select 3; + _color = _this select 4; + _showMarker = _this select 5; + _msgwin = _this select 6; + _msglose = _this select 7; + _enableMines = _this select 8; + _missionType = _this select 9; + _difficulty = _this select 10; + + _timeout = false; + _player_near = false; + _complete = false; + _starttime = diag_tickTime; + _timeout_time = (random((wai_mission_timeout select 1) - (wai_mission_timeout select 0)) + (wai_mission_timeout select 0)) * 60; + _max_ai = (wai_mission_data select _mission) select 0; + _unitGroups = (wai_mission_data select _mission) select 1; + _mines = (wai_mission_data select _mission) select 2; + _crates = (wai_mission_data select _mission) select 3; + _aiVehicles = (wai_mission_data select _mission) select 4; + _vehicles = (wai_mission_data select _mission) select 5; + _baseclean = (wai_mission_data select _mission) select 6; + _killpercent = _max_ai - (_max_ai * (wai_kill_percent / 100)); + _playerArray = []; + _timeStamp = diag_tickTime; + _closestPlayer = objNull; + _acArray = []; + _claimed = false; + _acTime = diag_tickTime; + _claimTime = 0; + _left = false; + _leftTime = 0; + + while {!_timeout && !_complete} do { + + if (count _mines > 0) then { + { + if((isPlayer _x) && (vehicle _x != _x) && (vehicle _x distance _position < 275) && !(_x in _playerArray)) then { + _x call wai_minefield_warning; + _playerArray set [count _playerArray, _x]; + }; + + if((isPlayer _x) && (vehicle _x != _x) && (vehicle _x distance _position < 75) && (alive _x) && ((([vehicle _x] call FNC_GetPos) select 2) < 1)) then { + _bomb = "Bo_GBU12_lgb" createVehicle ([vehicle _x] call FNC_GetPos); + uiSleep 3; + deleteVehicle _bomb; + }; + } count playableUnits; + }; + + if ((diag_tickTime - _timeStamp) > 180 && (count _aiVehicles) > 0) then { + { + if (_x isKindOf "StaticWeapon") then { + (gunner _x) action ["getout",_x]; + }; + } forEach _aiVehicles; + + _timeStamp = diag_tickTime; + }; + + if (use_wai_autoclaim && _showMarker) then { + #include "\z\addons\dayz_server\WAI\compile\auto_claim.sqf" + }; + + if (count _aiVehicles > 0) then { + _aiVehicles call wai_monitor_ai_vehicles; + }; + + if (_showMarker) then { + if (ai_show_count) then { + _aiCount = (wai_mission_data select _mission) select 0; + _text = format["%1 (%2 A.I.)",_name,_aiCount]; + } else { + _text = _name; + }; + + _marker = createMarker [_missionType + str(_mission), _position]; + _marker setMarkerColor _color; + _marker setMarkerShape "ELLIPSE"; + _marker setMarkerBrush "Solid"; + _marker setMarkerSize [300,300]; + + _dot = createMarker [_missionType + str(_mission) + "dot", _position]; + _dot setMarkerColor "ColorBlack"; + _dot setMarkerType "mil_dot"; + _dot setMarkerText _text; + + if (use_wai_autoclaim) then { + _acMarker = createMarker [_missionType + str(_mission) + "auto", _position]; + _acMarker setMarkerShape "ELLIPSE"; + _acMarker setMarkerBrush "Border"; + _acMarker setMarkerColor "ColorRed"; + _acMarker setMarkerSize [ac_alert_distance,ac_alert_distance]; + + if (_claimed) then { + _acdot = createMarker [_missionType + str(_mission) + "autodot", [(_position select 0) + 100, (_position select 1) + 100]]; + _acdot setMarkerColor "ColorBlack"; + _acdot setMarkerType "mil_objective"; + if (_left) then { + _acdot setMarkerText format["%1 Claim Timeout [%2]",(_acArray select 1),_leftTime]; + } else { + _acdot setMarkerText format["Claimed by %1",(name _closestPlayer)]; + }; + }; + }; + + uiSleep 2; + deleteMarker _marker; + deleteMarker _dot; + if (!isNil "_acMarker") then {deleteMarker _acMarker;}; + if (!isNil "_acdot") then {deleteMarker _acdot;}; + } else { + uiSleep 2; + }; + + _player_near = [_position,wai_timeout_distance] call isNearPlayer; + + if (diag_tickTime - _starttime >= _timeout_time && !_player_near) then { + _timeout = true; + } else { + if (_player_near) then {_starttime = diag_tickTime;}; + }; + + _complete = [_mission,_completionType,_killpercent,_position] call wai_completion_check; + + }; + + if (_complete) then { + + if (count _vehicles > 0) then { + { + [_x,_mission,_crates] call wai_generate_vehicle_key; + } count _vehicles; + }; + + { + [(_x select 0),(_x select 1),_complete] call dynamic_crate; + } count _crates; + + if (count _mines > 0) then { + _mines call wai_fnc_remove; + }; + + [_difficulty,_msgwin] call wai_server_message; + + if (_missionType == "MainBandit") then { + b_missionsrunning = b_missionsrunning - 1; + wai_b_starttime = diag_tickTime; + } else { + h_missionsrunning = h_missionsrunning - 1; + wai_h_starttime = diag_tickTime; + }; + + diag_log format["WAI: [Mission: %1]: Ended at %2",_name,_position]; + + if (wai_clean_mission_time > 0) then { + private ["_finish_time","_cleaned","_playernear"]; + _finish_time = diag_tickTime; + _cleaned = false; + + while {!_cleaned} do { + + uiSleep 3; + + if (count _aiVehicles > 0) then { + _aiVehicles call wai_monitor_ai_vehicles; + }; + + if ((diag_tickTime - _finish_time >= 60*wai_clean_mission_time) || ({[_x,_name] call fnc_inString;} count wai_clean_when_clear) != 0) then { + + if (count _aiVehicles > 0) then { + _aiVehicles call wai_fnc_remove; + }; + + _mission call wai_remove_ai; + + if (count _vehicles > 0) then { + [_mission,_vehicles] call wai_remove_vehicles; + }; + + if (count _baseclean > 0) then { + _baseclean call wai_fnc_remove; + }; + + { + if (count units _x == 0) then { + deleteGroup _x; + }; + } forEach _unitGroups; + + wai_mission_markers = wai_mission_markers - [(_missionType + str(_mission))]; + wai_mission_data set [_mission, -1]; + + if (wai_clean_mission_crate) then { + + _playernear = [_position,75] call isNearPlayer; + + if (!_playernear) then { + { + if ((typeOf (_x select 0)) in (crates_large + crates_medium + crates_small)) then { + deleteVehicle (_x select 0); + }; + } count _crates; + + _cleaned = true; + }; + } else { + _cleaned = true; + }; + }; + }; + }; + }; + + if (_timeout) then { + + if (count _mines > 0) then { + _mines call wai_fnc_remove; + }; + + { + deleteVehicle (_x select 0); + } count _crates; + + if (count _aiVehicles > 0) then { + _aiVehicles call wai_fnc_remove; + }; + + _mission call wai_remove_ai; + + if (count _vehicles > 0) then { + [_mission,_vehicles] call wai_remove_vehicles; + }; + + if (count _baseclean > 0) then { + _baseclean call wai_fnc_remove; + }; + + [_difficulty,_msglose] call wai_server_message; + + if (_missionType == "MainBandit") then { + b_missionsrunning = b_missionsrunning - 1; + wai_b_starttime = diag_tickTime; + } else { + h_missionsrunning = h_missionsrunning - 1; + wai_h_starttime = diag_tickTime; + }; + + { + if (count units _x == 0) then { + deleteGroup _x; + }; + } forEach _unitGroups; + + wai_mission_markers = wai_mission_markers - [(_missionType + str(_mission))]; + wai_mission_data set [_mission, -1]; + + diag_log format["WAI: [Mission: %1]: Timed out at %2",_name,_position]; + }; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/on_kill.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/on_kill.sqf new file mode 100755 index 0000000..8a61bc1 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/on_kill.sqf @@ -0,0 +1,124 @@ +private ["_rockets","_launcher","_type","_skin","_gain","_mission","_ainum","_unit","_player","_humanity","_banditkills","_humankills","_humanitygain","_cash"]; + +_unit = _this select 0; +_player = _this select 1; +//_type = _this select 2; +_launcher = secondaryWeapon _unit; + +_mission = _unit getVariable ["mission" + dayz_serverKey, nil]; + +if (!isNil "_mission") then { + if (typeName(wai_mission_data select _mission) == "ARRAY") then { + wai_mission_data select _mission set [0, ((wai_mission_data select _mission) select 0) - 1]; + }; +} else { + wai_static_data set [0, ((wai_static_data select 0) - 1)]; +}; + +_unit setVariable ["bodyName","mission_ai",false]; //Only needed on server to prevent immediate cleanup in sched_corpses.sqf + +if (ai_hasMoney && Z_singleCurrency) then { + _cash = round(random ai_moneyMultiplier) * 50; + _unit setVariable["cashMoney",_cash ,true]; +}; + +if(ai_add_skin) then { + _skin = (typeOf _unit); + _skin = "Skin_" + _skin; + + if (isClass (configFile >> "CfgMagazines" >> _skin)) then { + [_unit,_skin] call BIS_fnc_invAdd; + }; +}; + +if (isPlayer _player) then { + + private ["_banditkills","_humanity","_humankills"]; + + if (ai_reward_veh_gunner) then { + _player = (effectiveCommander vehicle _player); + }; + + if (ai_killfeed && ai_humanity_gain) then { + _aitype = if (_unit getVariable ["Hero", false]) then {"Hero";} else {"Bandit";}; + _humanityReward = if (_aitype == "Hero") then {format["-%1 Humanity",ai_remove_humanity];} else {format["+%1 Humanity",ai_add_humanity];}; + _aiColor = if (_aitype == "Hero") then {"#3333ff";} else {"#ff0000";}; + _params = [_aiColor,"0.50","#FFFFFF",-.4,.2,2,0.5]; + + RemoteMessage = ["ai_killfeed", [_aitype," AI Kill",_humanityReward],_params]; + (owner _player) publicVariableClient "RemoteMessage"; + }; + + _humanity = _player getVariable["humanity",0]; + _banditkills = _player getVariable["banditKills",0]; + _humankills = _player getVariable["humanKills",0]; + + if (ai_humanity_gain) then { + _gain = _unit getVariable ["humanity", 0]; + call { + if (_unit getVariable ["Hero", false]) exitWith { _player setVariable ["humanity",(_humanity - _gain),true]; }; + if (_unit getVariable ["Bandit", false]) exitWith { _player setVariable ["humanity",(_humanity + _gain),true]; }; + if (_unit getVariable ["Special", false]) exitWith { if (_humanity < 0) then { _player setVariable ["humanity",(_humanity - _gain),true]; } else { _player setVariable ["humanity",(_humanity + _gain),true]; }; }; + }; + }; + + if (ai_kills_gain) then { + if (_unit getVariable ["Hero", false]) then { + _player setVariable ["humanKills",(_humankills + 1),true]; + } else { + _player setVariable ["banditKills",(_banditkills + 1),true]; + }; + }; + + if (ai_clear_body) then { + {_unit removeMagazine _x;} count (magazines _unit); + {_unit removeWeapon _x;} count (weapons _unit); + }; + + if (ai_share_info) then { + { + if (((position _x) distance (position _unit)) <= ai_share_distance) then { + _x reveal [_player, 4.0]; + }; + } count allUnits; + }; + +} else { + + if (ai_clean_roadkill) then { + + removeBackpack _unit; + removeAllWeapons _unit; + + { + _unit removeMagazine _x + } count magazines _unit; + + } else { + + if ((random 100) <= ai_rk_damageweapon) then { + + removeAllWeapons _unit; + + }; + + }; + +}; + +if(wai_remove_launcher && _launcher != "") then { + + _rockets = _launcher call find_suitable_ammunition; + _unit removeWeapon _launcher; + + { + if(_x == _rockets) then { + _unit removeMagazine _x; + }; + } count magazines _unit; + +}; + +if(_unit hasWeapon "NVGoggles" && floor(random 100) < 20) then { + _unit removeWeapon "NVGoggles"; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/patrol_winorfail.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/patrol_winorfail.sqf new file mode 100755 index 0000000..022b7ec --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/patrol_winorfail.sqf @@ -0,0 +1,272 @@ +private ["_location","_countWP","_wp","_mission","_position","_difficulty","_name","_missionType","_showMarker","_numWaypoints","_completionType","_msgstart","_msgwin","_msglose"]; + +_mission = _this select 0; +_position = _this select 1; +_difficulty = _this select 2; +_name = _this select 3; +_missionType = _this select 4; +_showMarker = _this select 5; +_numWaypoints = _this select 6; +_locations = _this select 7; +_completionType = _this select 8; +_msgstart = (_this select 9) select 0; +_msgwin = (_this select 9) select 1; +_msglose = (_this select 9) select 2; +_countWP = []; +_unitGroup = ((wai_mission_data select _mission) select 1) select 0; + +if(wai_debug_mode) then {diag_log format["WAI: Starting Mission number %1",_mission];}; + +_color = call { + if (_difficulty == "Easy") exitWith {"ColorGreen"}; + if (_difficulty == "Medium") exitWith {"ColorYellow"}; + if (_difficulty == "Hard") exitWith {"ColorRed"}; + if (_difficulty == "Extreme") exitWith {"ColorBlack"}; +}; + +_name = call { + if (_missionType == "MainHero") exitWith {"Bandit " + _name;}; + if (_missionType == "MainBandit") exitWith {"Hero " + _name;}; +}; + +for "_i" from 0 to _numWaypoints - 1 do { + _location = _locations call BIS_fnc_selectRandom; + _countWP set [_i, _location]; + _locations set [_i, "rem"]; + _locations = _locations - ["rem"]; + _wp = _unitGroup addWayPoint [position _location,0]; + _wp setWaypointType "MOVE"; + _wp setWaypointSpeed "LIMITED"; + //_wp setWaypointSpeed "FULL"; + _wp setWaypointBehaviour "CARELESS"; + _wp setWaypointCombatMode "YELLOW"; + _wp setWaypointCompletionRadius 300; +}; + +[_difficulty,_msgstart] call wai_server_message; + +WAI_MarkerReady = true; + +[_position,_mission,_name,_completionType,_color,_showMarker,_msgwin,_msglose,_missionType,_difficulty,_countWP] spawn { + + private ["_horb","_crates","_wpReached","_startMarker","_vehicle","_leader","_countWP","_difficulty","_unitGroup","_msgwin","_msglose","_position","_timeout","_player_near","_complete","_starttime","_timeout_time","_max_ai","_killpercent","_mission","_missionType","_airemain","_text","_name","_completionType","_marker","_dot","_color","_showMarker"]; + + _position = _this select 0; + _mission = _this select 1; + _name = _this select 2; + _completionType = _this select 3; + _color = _this select 4; + _showMarker = _this select 5; + _msgwin = _this select 6; + _msglose = _this select 7; + _missionType = _this select 8; + _difficulty = _this select 9; + _countWP = _this select 10; + + _startMarker = false; + _timeout = false; + _player_near = false; + _complete = false; + _starttime = diag_tickTime; + _timeout_time = (random((wai_mission_timeout select 1) - (wai_mission_timeout select 0)) + (wai_mission_timeout select 0)) * 60; + _max_ai = (wai_mission_data select _mission) select 0; + _unitGroup = ((wai_mission_data select _mission) select 1) select 0; + _crates = (wai_mission_data select _mission) select 3; + _vehicle = ((wai_mission_data select _mission) select 5) select 0; + _killpercent = _max_ai - (_max_ai * (wai_kill_percent / 100)); + _leader = leader _unitgroup; + _vehicle setDamage 0; + _vehicle removeAllEventHandlers "HandleDamage"; + _vehicle addEventHandler ["HandleDamage",{_this call fnc_veh_handleDam}]; + _wpReached = true; + _disabled = false; + _currentWP = nil; + _index = 1; + + + { + if (_leader == _x) then { + _x assignAsDriver _vehicle; + _x moveInDriver _vehicle; + } else { + if ((_vehicle emptyPositions "GUNNER") > 0) then { + _x assignAsGunner _vehicle; + _x moveInGunner _vehicle; + } else { + _x moveInCargo _vehicle; + }; + }; + + } count units _unitgroup; + + while {!_timeout && !_complete} do { + + if ((count _countWP == 0) && {_wpReached}) then { + _timeout = true; + }; + + if ((count _countWP > 0) && {_wpReached}) then { + + if (!isNil "_currentWP") then { + _countWP set [0, "rem"]; + _countWP = _countWP - ["rem"]; + }; + + _unitGroup setCurrentWaypoint [_unitGroup, _index]; + _currentWP = _countWP select 0; + _wpReached = false; + uiSleep 10; + [_difficulty,["STR_CL_PATROL_MOVE",(text _currentWP)]] call wai_server_message; + _index = _index + 1; + }; + + if (_showMarker && {_startMarker}) then { + if (ai_show_count) then { + _aiCount = (wai_mission_data select _mission) select 0; + _text = format["%1 (%2 A.I.)",_name,_aiCount]; + } else { + _text = _name; + }; + + _marker = createMarker [_missionType + str(_mission), _position]; + _marker setMarkerColor _color; + _marker setMarkerShape "ELLIPSE"; + _marker setMarkerBrush "Solid"; + _marker setMarkerSize [300,300]; + _dot = createMarker [_missionType + str(_mission) + "dot", _position]; + _dot setMarkerColor "ColorBlack"; + _dot setMarkerType "mil_dot"; + _dot setMarkerText _text; + + uiSleep 2; + deleteMarker _marker; + deleteMarker _dot; + } else { + uiSleep 2; + }; + + if (count crew _vehicle > 0) then { + _vehicle setVehicleAmmo 1; + _vehicle setFuel 1; + }; + + if (!_disabled && (!(canMove _vehicle) || !(alive _leader))) then { + _horb = if (_missionType == "MainHero") then {"Hero"} else {"Bandit"}; + [_difficulty,["STR_CL_PATROL_DISABLED",_horb]] call wai_server_message; + _disabled = true; + _startMarker = true; + _position = getPos _vehicle; + + waitUntil {speed _vehicle < 10}; + + { + _x action ["eject",vehicle _x]; + } count crew _vehicle; + + _unitGroup2 = createGroup EAST; // Creating a new group seems to be the best solution here + {[_x] joinSilent _unitGroup2} forEach (units _unitGroup); + _unitGroup2 selectLeader ((units _unitGroup2) select 0); + _unitGroup2 setFormation "ECH LEFT"; + _unitGroup2 setCombatMode "RED"; + _unitGroup2 setBehaviour "COMBAT"; + [_unitGroup2,_position,"easy"] call group_waypoints; + }; + + if (!_wpReached) then { + if (_vehicle distance (position _currentWP) < 300) then { + _wpReached = true; + [_difficulty,["STR_CL_PATROL_ARRIVE",text _currentWP]] call wai_server_message; + }; + }; + + _player_near = [_position,wai_timeout_distance] call isNearPlayer; + + if (diag_tickTime - _starttime >= _timeout_time && !_player_near) then { + _timeout = true; + } else { + if (_player_near) then {_starttime = diag_tickTime;}; + }; + + _complete = [_mission,_completionType,_killpercent,_position] call wai_completion_check; + + }; + + if (_complete) then { + + [_vehicle,_mission,[[_vehicle]]] call wai_generate_vehicle_key; + _vehicle setVehicleLock "UNLOCKED"; + + { + [(_x select 0),(_x select 1)] call dynamic_crate; + } count _crates; + + [_difficulty,_msgwin] call wai_server_message; + + if (_missionType == "MainBandit") then { + b_missionsrunning = b_missionsrunning - 1; + wai_b_starttime = diag_tickTime; + } else { + h_missionsrunning = h_missionsrunning - 1; + wai_h_starttime = diag_tickTime; + }; + + diag_log format["WAI: [Mission: %1]: Ended at %2",_name,_position]; + + if (wai_clean_mission_time > 0) then { + private ["_finish_time","_cleaned","_playernear"]; + _finish_time = diag_tickTime; + _cleaned = false; + + while {!_cleaned} do { + + uiSleep 3; + + if (diag_tickTime - _finish_time >= 60*wai_clean_mission_time) then { + + _mission call wai_remove_ai; + + deleteVehicle _vehicle; + + uiSleep 5; + + deleteGroup _unitGroup; + + if (!isNil "_unitGroup2") then {deleteGroup _unitGroup2;}; + + wai_mission_markers = wai_mission_markers - [(_missionType + str(_mission))]; + wai_mission_data set [_mission, -1]; + + _cleaned = true; + }; + }; + }; + }; + + if (_timeout) then { + + _mission call wai_remove_ai; + + deleteVehicle _vehicle; + + [_difficulty,_msglose] call wai_server_message; + + if (_missionType == "MainBandit") then { + b_missionsrunning = b_missionsrunning - 1; + wai_b_starttime = diag_tickTime; + } else { + h_missionsrunning = h_missionsrunning - 1; + wai_h_starttime = diag_tickTime; + }; + + uiSleep 5; + + deleteGroup _unitGroup; + + if (!isNil "_unitGroup2") then {deleteGroup _unitGroup2;}; + + wai_mission_markers = wai_mission_markers - [(_missionType + str(_mission))]; + wai_mission_data set [_mission, -1]; + + diag_log format["WAI: [Mission: %1]: Timed out at %2",_name,_position]; + }; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/position_functions.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/position_functions.sqf new file mode 100755 index 0000000..2ea492a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/position_functions.sqf @@ -0,0 +1,133 @@ +isNearWater = { + + private["_result","_position","_radius"]; + + _result = false; + _position = _this select 0; + _radius = _this select 1; + + for "_i" from 0 to 359 step 45 do { + _position = [(_position select 0) + (sin(_i)*_radius), (_position select 1) + (cos(_i)*_radius)]; + if (surfaceIsWater _position) exitWith { + _result = true; + }; + }; + + _result + +}; + +isNearTown = { + + private["_result","_position","_radius","_locations"]; + + _result = false; + _position = _this select 0; + _radius = _this select 1; + + _locations = [["NameCityCapital","NameCity","NameVillage"],[_position,_radius]] call BIS_fnc_locations; + + if (count _locations > 0) then { + _result = true; + }; + + _result + +}; + +isNearRoad = { + + private["_result","_position","_radius","_roads"]; + + _result = false; + _position = _this select 0; + _radius = _this select 1; + + _roads = _position nearRoads _radius; + + if (count _roads > 0) then { + _result = true; + }; + + _result + +}; + +isNearPlayer = { + private["_result","_position","_radius"]; + + _result = false; + _position = _this select 0; + _radius = _this select 1; + + { + if ((isPlayer _x) && (_x distance _position <= _radius)) then { + _result = true; + }; + } count playableUnits; + + _result +}; + +// Player and mission proximity check used in single spawn point missions +wai_validSpotCheck = { + + private ["_position","_validspot"]; + + _position = _this select 0; + _validspot = true; + + if (_validspot && wai_avoid_missions != 0) then { + if(wai_debug_mode) then { diag_log("WAI DEBUG: FINDPOS: Checking nearby mission markers: " + str(wai_mission_markers)); }; + { + if (getMarkerColor _x != "" && (_position distance (getMarkerPos _x) < wai_avoid_missions)) exitWith { if(wai_debug_mode) then {diag_log("WAI: Invalid Position (Marker: " + str(_x) + ")");}; _validspot = false; }; + } count wai_mission_markers; + }; + if (_validspot && {wai_avoid_players != 0}) then { + if ([_position,wai_avoid_players] call isNearPlayer) then { + if (wai_debug_mode) then {diag_log "WAI: Invalid Position (player)";}; + _validspot = false; + }; + }; + if(_validspot) then { + if(wai_debug_mode) then { diag_log("WAI: valid position found at" + str(_position));}; + }; + _validspot +}; + +// Closest player check used in auto-claim +wai_isClosest = { + private ["_closest","_scandist","_dist","_position"]; + + _position = _this; + _closest = objNull; + _scandist = ac_alert_distance; + + { + _dist = vehicle _x distance _position; + if (isPlayer _x && _dist < _scandist) then { + _closest = _x; + _scandist = _dist; + }; + } count playableUnits; + + _closest +}; + +wai_checkReturningPlayer = { + private["_acArray","_position","_playerUID","_returningPlayer"]; + + _position = _this select 0; + _acArray = _this select 1; + _playerUID = _acArray select 0; + _returningPlayer = objNull; + + { + if ((isPlayer _x) && (_x distance _position <= ac_alert_distance) && (getplayerUID _x == _playerUID)) then { + _returningPlayer = _x; + }; + } count playableUnits; + + _returningPlayer +}; + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/spawn_group.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/spawn_group.sqf new file mode 100755 index 0000000..7f0a9c6 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/spawn_group.sqf @@ -0,0 +1,225 @@ +private ["_rocket","_launcher","_pos_x","_pos_y","_pos_z","_aiskin","_unarmed","_gain","_mission","_ainum","_aitype","_mission","_aipack","_aicskill","_position","_unitnumber","_skill","_gun","_mags","_backpack","_skin","_gear","_aiweapon","_aigear","_aiskin","_skillarray","_unitGroup","_weapon","_magazine","_gearmagazines","_geartools","_unit"]; + +_position = _this select 0; +_pos_x = _position select 0; +_pos_y = _position select 1; +_pos_z = _position select 2; +_unitnumber = _this select 1; +_skill = _this select 2; +_gun = _this select 3; +_mags = _this select 4; +_backpack = _this select 5; +_skin = _this select 6; +_gear = _this select 7; +_aitype = _this select 8; + +if (typeName _gun == "ARRAY") then { + _launcher = _gun select 1; + _gun = _gun select 0; +}; + +if (typeName _aitype == "ARRAY") then { + _gain = _aitype select 1; + _aitype = _aitype select 0; +}; + +if (count _this > 9) then { + _mission = _this select 9; +} else { + _mission = nil; +}; + +_aiweapon = []; +_aigear = []; +_aiskin = ""; +_aicskill = []; +_aipack = ""; +_unarmed = false; + +// If zero ai are chosen exit the script +if (_unitnumber == 0) exitWith {}; + +_unitGroup = if(_aitype == "Hero") then {createGroup RESISTANCE;} else {createGroup EAST;}; + +if (!isNil "_mission") then { + ((wai_mission_data select _mission) select 1) set [count ((wai_mission_data select _mission) select 1), _unitGroup]; +} else { + (wai_static_data select 1) set [count (wai_static_data select 1), _unitGroup]; +}; + +if(_pos_z == 0) then { + if(floor(random 2) == 1) then { + _pos_x = _pos_x - (15 + random(10)); + } else { + _pos_x = _pos_x + (15 + random(10)); + }; + + if(floor(random 2) == 1) then { + _pos_y = _pos_y - (15 + random(10)); + } else { + _pos_y = _pos_y + (15 + random(10)); + }; +}; + +for "_x" from 1 to _unitnumber do { + + call { + if(typeName(_gun) == "SCALAR") then { + if(_gun == 0) exitWith {_aiweapon = ai_wep_random select (floor (random (count ai_wep_random)));}; + if(_gun == 1) exitWith {_aiweapon = ai_wep_machine; }; + if(_gun == 2) exitWith {_aiweapon = ai_wep_sniper; }; + } else { + if(_gun == "random") exitWith {_aiweapon = ai_wep_random select (floor (random (count ai_wep_random)));}; + if(_gun == "unarmed") exitWith {_unarmed = true; }; + _aiweapon = _gun; + } + }; + + if (!_unarmed) then { + _weapon = if (typeName (_aiweapon) == "ARRAY") then {_aiweapon select (floor (random (count _aiweapon)))} else {_aiweapon}; + if !(isClass (configFile >> "CfgWeapons" >> _weapon)) then { + diag_log text format ["WAI Error: Weapon classname (%1) is not valid!",_weapon]; + _weapon = "M16A2_DZ"; // Replace with known good classname. + }; + _magazine = _weapon call find_suitable_ammunition; + }; + + _aigear = call { + if(typeName(_gear) == "SCALAR") then { + if (_gear == 0) exitWith {ai_gear0;}; + if (_gear == 1) exitWith {ai_gear1;}; + if (_gear == 2) exitWith {ai_gear2;}; + if (_gear == 3) exitWith {ai_gear3;}; + if (_gear == 4) exitWith {ai_gear4;}; + } else { + if (_gear == "random") exitWith {ai_gear_random select (floor (random (count ai_gear_random)));}; + }; + }; + + _gearmagazines = _aigear select 0; + _geartools = _aigear select 1; + + _aiskin = call { + if (_skin == "random") exitWith {ai_all_skin select (floor (random (count ai_all_skin)));}; + if (_skin == "hero") exitWith {ai_hero_skin select (floor (random (count ai_hero_skin)));}; + if (_skin == "bandit") exitWith {ai_bandit_skin select (floor (random (count ai_bandit_skin)));}; + if (_skin == "special") exitWith {ai_special_skin select (floor (random (count ai_special_skin)));}; + _skin; + }; + + if(typeName _aiskin == "ARRAY") then { + _aiskin = _aiskin select (floor (random (count _aiskin))); + }; + + _unit = _unitGroup createUnit [_aiskin,_position,[],0,"CAN_COLLIDE"]; + + if (surfaceIsWater _position) then { + _unit setPosASL _position; + } else { + _unit setPosATL _position; + }; + + [_unit] joinSilent _unitGroup; + + call { + if (_aitype == "hero") exitWith {_unit setVariable ["Hero",true]; _unit setVariable ["humanity", ai_remove_humanity];}; + if (_aitype == "bandit") exitWith {_unit setVariable ["Bandit",true]; _unit setVariable ["humanity", ai_add_humanity];}; + if (_aitype == "special") exitWith {_unit setVariable ["Special",true]; _unit setVariable ["humanity", ai_special_humanity];}; + }; + + if (!isNil "_gain") then {_unit setVariable ["humanity", _gain];}; + + call { + if (_backpack == "random") exitWith {_aipack = ai_packs select (floor (random (count ai_packs)));}; + if (_backpack == "none") exitWith {}; + _aipack = _backpack; + }; + + _unit enableAI "TARGET"; + _unit enableAI "AUTOTARGET"; + _unit enableAI "MOVE"; + _unit enableAI "ANIM"; + _unit enableAI "FSM"; + + removeAllWeapons _unit; + removeAllItems _unit; + + if (sunOrMoon != 1) then { + _unit addWeapon "NVGoggles"; + }; + + if (!_unarmed) then { + for "_i" from 1 to _mags do { + _unit addMagazine _magazine; + }; + _unit addWeapon _weapon; + _unit selectWeapon _weapon; + }; + + if(_backpack != "none") then { + _unit addBackpack _aipack; + }; + + { + _unit addMagazine _x + } count _gearmagazines; + + { + _unit addWeapon _x + } count _geartools; + + _aicskill = call { + if(_skill == "easy") exitWith {ai_skill_easy;}; + if(_skill == "medium") exitWith {ai_skill_medium;}; + if(_skill == "hard") exitWith {ai_skill_hard;}; + if(_skill == "extreme") exitWith {ai_skill_extreme;}; + if(_skill == "random") exitWith {ai_skill_random select (floor (random (count ai_skill_random)));}; + ai_skill_random select (floor (random (count ai_skill_random))); + }; + + { + _unit setSkill [(_x select 0),(_x select 1)] + } count _aicskill; + + _unit addEventHandler ["Killed",{[_this select 0, _this select 1] call on_kill;}]; + + if (!isNil "_mission") then { + wai_mission_data select _mission set [0, (((wai_mission_data select _mission) select 0) + 1)]; + _unit setVariable ["mission" + dayz_serverKey, _mission, false]; + } else { + wai_static_data set [0, ((wai_static_data select 0) + 1)]; + }; + +}; + +if (!isNil "_launcher" && wai_use_launchers) then { + call { + if (_launcher == "Random") exitWith { _launcher = (ai_launchers_AT + ai_launchers_AA) call BIS_fnc_selectRandom; }; + if (_launcher == "at") exitWith { _launcher = ai_wep_launchers_AT select (floor (random (count ai_wep_launchers_AT))); }; + if (_launcher == "aa") exitWith { _launcher = ai_wep_launchers_AA select (floor (random (count ai_wep_launchers_AA))); }; + }; + _rocket = _launcher call find_suitable_ammunition; + _unit addMagazine _rocket; + _unit addMagazine _rocket; + _unit addWeapon _launcher; +}; + +_unitGroup setFormation "ECH LEFT"; +_unitGroup selectLeader ((units _unitGroup) select 0); + +if(_aitype == "Hero") then { + _unitGroup setCombatMode ai_hero_combatmode; + _unitGroup setBehaviour ai_hero_behaviour; +} else { + _unitGroup setCombatMode ai_bandit_combatmode; + _unitGroup setBehaviour ai_bandit_behaviour; +}; + +_unitGroup allowFleeing 0; + +[_unitGroup,[_pos_x,_pos_y,_pos_z],_skill] call group_waypoints; + + +if(wai_debug_mode) then {diag_log format ["WAI: Spawned a group of %1 AI (%3) at %2",_unitnumber,_position,_aitype];}; + +_unitGroup // this variable is returned for the patrol mission and assassinate missions diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/spawn_objects.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/spawn_objects.sqf new file mode 100755 index 0000000..4d16652 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/spawn_objects.sqf @@ -0,0 +1,63 @@ +// This is a modified version of the DayZ Epoch file fn_spawnObjects.sqf used to spawn WAI mission objects. + +private ["_offset","_fires","_position","_object","_objects","_type","_pos","_mission","_destructables"]; + +_objects = _this select 0; +_pos = _this select 1; +_mission = _this select 2; + +_fires = [ + "Base_Fire_DZ", + "flamable_DZ", + "Land_Camp_Fire_DZ", + "Land_Campfire", + "Land_Campfire_burning", + "Land_Fire", + "Land_Fire_burning", + "Land_Fire_DZ", + "Land_Fire_barrel", + "Land_Fire_barrel_burning", + "Misc_TyreHeap" +]; + +// Override god mode on these objects so they can be destroyed if wai_godmode_objects enabled. +_destructables = [ + "Gold_Vein_DZE", + "Iron_Vein_DZE", + "Silver_Vein_DZE", + "Supply_Crate_DZE" +]; + +{ + _type = _x select 0; + _offset = _x select 1; + + _position = [(_pos select 0) + (_offset select 0), (_pos select 1) + (_offset select 1), 0]; + + if (count _offset > 2) then { + _position set [2, (_offset select 2)]; + }; + _object = _type createVehicle [0,0,0]; + + if (_type == "MQ9PredatorB") then { + _object setVehicleLock "LOCKED"; + }; + + if (count _x > 2) then { + _object setDir (_x select 2); + }; + + _object setPos _position; + _object setVectorUp surfaceNormal position _object; + + if (wai_godmode_objects) then { + if !(_type in _destructables) then { + _object addEventHandler ["HandleDamage",{0}]; + if !(_type in _fires) then {_object enableSimulation false;}; + }; + }; + + ((wai_mission_data select _mission) select 6) set [count ((wai_mission_data select _mission) select 6), _object]; +} forEach _objects; + +_object diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/spawn_static.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/spawn_static.sqf new file mode 100755 index 0000000..499d6d4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/spawn_static.sqf @@ -0,0 +1,211 @@ +private ["_ainum","_unarmed","_aicskill","_aitype","_mission","_aipack","_class","_position2","_static","_position","_unitnumber","_skill","_gun","_mags","_backpack","_skin","_gear","_aiweapon","_aigear","_aiskin","_skillarray","_unitGroup","_weapon","_magazine","_gearmagazines","_geartools","_unit"]; + +if (!wai_enable_static_guns) exitWith {}; + +_position = _this select 0; +_class = _this select 1; +_skill = _this select 2; +_skin = _this select 3; +_aitype = _this select 4; + +if (ai_static_useweapon) then { + _gun = _this select 5; + _mags = _this select 6; + _backpack = _this select 7; + _gear = _this select 8; +}; + +if ((count _this == 10) OR (count _this == 6)) then { + if (count _this == 10) then { _mission = _this select 9; }; + if (count _this == 6) then { _mission = _this select 5; }; +} else { + _mission = nil; +}; + +_aiweapon = []; +_aigear = []; +_aiskin = ""; +_aipack = ""; +_unarmed = false; +_unitnumber = count _position; + +_unitGroup = if(_aitype == "Hero") then {createGroup RESISTANCE;} else {createGroup EAST;}; + +if (!isNil "_mission") then { + ((wai_mission_data select _mission) select 1) set [count ((wai_mission_data select _mission) select 1), _unitGroup]; +} else { + (wai_static_data select 1) set [count (wai_static_data select 1), _unitGroup]; +}; + +{ + + call { + if(_skin == "random") exitWith { _aiskin = ai_all_skin call BIS_fnc_selectRandom;}; + if(_skin == "hero") exitWith { _aiskin = ai_hero_skin call BIS_fnc_selectRandom;}; + if(_skin == "bandit") exitWith { _aiskin = ai_bandit_skin call BIS_fnc_selectRandom;}; + if(_skin == "special") exitWith { _aiskin = ai_special_skin call BIS_fnc_selectRandom;}; + _aiskin = _skin; + }; + + if(typeName _aiskin == "ARRAY") then { + _aiskin = _aiskin call BIS_fnc_selectRandom; + }; + + if (_class == "Random") then {_class = ai_static_weapons call BIS_fnc_selectRandom;}; + + _unit = _unitGroup createUnit [_aiskin, [0,0,0], [], 10, "PRIVATE"]; + + _static = _class createVehicle _x; + + if (surfaceIsWater _x) then { + _static setPosASL _x; + } else { + _static setPosATL _x; + }; + + [_unit] joinSilent _unitGroup; + + call { + if (_aitype == "hero") exitWith {_unit setVariable ["Hero",true,false]; _unit setVariable ["humanity", ai_remove_humanity]; }; + if (_aitype == "bandit") exitWith {_unit setVariable ["Bandit",true,false]; _unit setVariable ["humanity", ai_add_humanity]; }; + if (_aitype == "special") exitWith {_unit setVariable ["Special",true,false]; _unit setVariable ["humanity", ai_special_humanity]; }; + }; + + _unit enableAI "TARGET"; + _unit enableAI "AUTOTARGET"; + _unit enableAI "MOVE"; + _unit enableAI "ANIM"; + _unit enableAI "FSM"; + + removeAllWeapons _unit; + removeAllItems _unit; + + if (ai_static_useweapon) then { + + call { + if(typeName(_gun) == "SCALAR") then { + if(_gun == 0) exitWith { _aiweapon = ai_wep_random call BIS_fnc_selectRandom; }; + if(_gun == 1) exitWith { _aiweapon = ai_wep_machine;}; + if(_gun == 2) exitWith { _aiweapon = ai_wep_sniper;}; + } else { + if(_gun == "random") exitWith { _aiweapon = ai_wep_random call BIS_fnc_selectRandom; }; + if(_gun == "unarmed") exitWith { _unarmed = true; }; + }; + }; + + if (!_unarmed) then { + _weapon = if (typeName (_aiweapon) == "ARRAY") then {_aiweapon select (floor (random (count _aiweapon)))} else {_aiweapon}; + _magazine = _weapon call find_suitable_ammunition; + }; + + _weapon = _aiweapon call BIS_fnc_selectRandom; + if !(isClass (configFile >> "CfgWeapons" >> _weapon)) then { + diag_log text format ["WAI Error: Weapon classname (%1) is not valid!",_weapon]; + _weapon = "M16A2_DZ"; // Replace with known good classname. + }; + _magazine = _weapon call find_suitable_ammunition; + + _aigear = call { + if(typeName(_gear) == "SCALAR") then { + if(_gear == 0) exitWith {ai_gear0;}; + if(_gear == 1) exitWith {ai_gear1;}; + if(_gear == 2) exitWith {ai_gear2;}; + if(_gear == 3) exitWith {ai_gear3;}; + if(_gear == 4) exitWith {ai_gear4;}; + } else { + if(_gear == "random") exitWith {ai_gear_random select (floor (random (count ai_gear_random)));}; + }; + }; + + call { + if(_backpack == "random") exitWith {_aipack = ai_packs call BIS_fnc_selectRandom;}; + if(_backpack == "none") exitWith {}; + _aipack = _backpack; + }; + + _gearmagazines = _aigear select 0; + _geartools = _aigear select 1; + + if (!_unarmed) then { + for "_i" from 1 to _mags do { + _unit addMagazine _magazine; + }; + _unit addWeapon _weapon; + }; + + if (_backpack != "none") then { + _unit addBackpack _aipack; + }; + + { + _unit addMagazine _x + } count _gearmagazines; + + { + _unit addWeapon _x + } count _geartools; + }; + + if (ai_static_skills) then { + + { + _unit setSkill [(_x select 0),(_x select 1)] + } count ai_static_array; + + } else { + + _aicskill = call { + if (_skill == "easy") exitWith {ai_skill_easy;}; + if (_skill == "medium") exitWith {ai_skill_medium;}; + if (_skill == "hard") exitWith {ai_skill_hard;}; + if (_skill == "extreme") exitWith {ai_skill_extreme;}; + if (_skill == "random") exitWith {ai_skill_random call BIS_fnc_selectRandom; }; + ai_skill_random call BIS_fnc_selectRandom; + }; + + { + _unit setSkill [(_x select 0),(_x select 1)] + } count _aicskill; + }; + + _unit addEventHandler ["Killed",{[_this select 0, _this select 1] call on_kill;}]; + + _static addEventHandler ["GetOut",{ + _unit = _this select 2; + _static = _this select 0; + if (alive _unit) then {_unit moveInGunner _static}; + }]; + + dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_static]; + + if (sunOrMoon != 1) then { + _unit addWeapon "NVGoggles"; + }; + + _unit moveInGunner _static; + _unit setVariable ["noKey",true]; + + if (!isNil "_mission") then { + _ainum = (wai_mission_data select _mission) select 0; + wai_mission_data select _mission set [0, (_ainum + 1)]; + ((wai_mission_data select _mission) select 4) set [count ((wai_mission_data select _mission) select 4), _static]; + _static setVariable ["mission" + dayz_serverKey, _mission, false]; + _unit setVariable ["mission" + dayz_serverKey, _mission, false]; + } else { + wai_static_data set [0, ((wai_static_data select 0) + 1)]; + (wai_static_data select 2) set [count (wai_static_data select 2), _static]; + }; + +} forEach _position; + +_unitGroup selectLeader ((units _unitGroup) select 0); + +if(_aitype == "Hero") then { + _unitGroup setCombatMode ai_hero_combatmode; + _unitGroup setBehaviour ai_hero_behaviour; +} else { + _unitGroup setCombatMode ai_bandit_combatmode; + _unitGroup setBehaviour ai_bandit_behaviour; +}; + +if (wai_debug_mode) then {diag_log format ["WAI: Spawned in %1 %2",_unitnumber,_class];}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/static_spawn_manager.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/static_spawn_manager.sqf new file mode 100755 index 0000000..a73cf59 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/static_spawn_manager.sqf @@ -0,0 +1,66 @@ + // For Reference: wai_static_data = [0,[],[],[]]; [AI Count, UnitGroups, Vehicles to Monitor, crates] + +private ["_unitGroups","_aiVehicles","_staticArray","_timeStamp","_running","_crates"]; + +_timeStamp = diag_tickTime; +_running = true; + +// The loop has to wait until there are existing groups to monitor +// 10 seconds initial sleep to allow crates array to populate +waitUntil {uiSleep 10; (count (wai_static_data select 1)) > 0}; + +// Spawn loot in crates +_crates = wai_static_data select 3; +if (count _crates > 0) then { + { + [(_x select 0),(_x select 1)] call dynamic_crate; + } count _crates; +}; + +diag_log "WAI: Initializing static missions"; + +while {_running} do { + + // Refuel and Rearm the AI vehicles until they are destroyed + _aiVehicles = wai_static_data select 2; + if(count _aiVehicles > 0) then { + { + if (alive _x && ({alive _x} count crew _x > 0)) then { + _x setVehicleAmmo 1; + _x setFuel 1; + } else {_x setDamage 1;}; + } count _aiVehicles; + }; + + // Static gun glitch fix + if ((diag_tickTime - _timeStamp) > 180 && (count _aiVehicles) > 0) then { + { + if (_x isKindOf "StaticWeapon") then { + (gunner _x) action ["getout",_x]; + }; + } forEach _aiVehicles; + + _timeStamp = diag_tickTime; + }; + + _unitGroups = wai_static_data select 1; + { + // delete empty groups + if (count units _x == 0) then { + deleteGroup _x + }; + // remove null groups from the array + if (isNull _x) then { + _unitGroups = _unitGroups - [_x]; + }; + } forEach _unitGroups; + + //diag_log _unitGroups; // Used for testing + + // When all null groups have been removed from the array, shut the loop down + if (count _unitGroups == 0) then {_running = false;}; + + uiSleep 5; +}; + +diag_log "WAI: All Static Spawns have been killed."; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/vehicle_patrol.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/vehicle_patrol.sqf new file mode 100755 index 0000000..4405b04 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/compile/vehicle_patrol.sqf @@ -0,0 +1,148 @@ +if (!wai_enable_patrols) exitWith {}; +local _position = _this select 0; +local _startingpos = _this select 1; +local _radius = _this select 2; +local _wpnum = _this select 3; +local _veh_class = _this select 4; +local _skill = _this select 5; +local _skin = _this select 6; +local _aitype = _this select 7; +local _mission = nil; +if (count _this > 8) then { + _mission = _this select 8; +}; +local _unitGroup = grpNull; +local _wp = []; + +local _aicskill = call { + if(_skill == "easy") exitWith {ai_skill_easy;}; + if(_skill == "medium") exitWith {ai_skill_medium;}; + if(_skill == "hard") exitWith {ai_skill_hard;}; + if(_skill == "extreme") exitWith {ai_skill_extreme;}; + if(_skill == "random") exitWith {ai_skill_random call BIS_fnc_selectRandom;}; + ai_skill_random call BIS_fnc_selectRandom; +}; + +local _aiskin = call { + if(_skin == "random") exitWith {ai_all_skin call BIS_fnc_selectRandom;}; + if(_skin == "hero") exitWith {ai_hero_skin call BIS_fnc_selectRandom;}; + if(_skin == "bandit") exitWith {ai_bandit_skin call BIS_fnc_selectRandom;}; + if(_skin == "special") exitWith {ai_special_skin call BIS_fnc_selectRandom;}; + _skin; +}; + +if(typeName _aiskin == "ARRAY") then { + _aiskin = _aiskin call BIS_fnc_selectRandom; +}; + +if(_aitype == "Hero") then { + _unitGroup = createGroup RESISTANCE; +} else { + _unitGroup = createGroup EAST; +}; + +local _driver = _unitGroup createUnit [_aiskin, [0,0,0], [], 1, "NONE"]; +[_driver] joinSilent _unitGroup; + +call { + if (_aitype == "hero") exitWith {_driver setVariable ["Hero",true,false]; _driver setVariable ["humanity", ai_remove_humanity];}; + if (_aitype == "bandit") exitWith {_driver setVariable ["Bandit",true,false]; _driver setVariable ["humanity", ai_add_humanity];}; + if (_aitype == "special") exitWith {_driver setVariable ["Special",true,false]; _driver setVariable ["humanity", ai_special_humanity];}; +}; + +local _vehicle = createVehicle [_veh_class, [(_startingpos select 0),(_startingpos select 1), 0], [], 0, "CAN_COLLIDE"]; +_vehicle setFuel 1; +_vehicle engineOn true; +_vehicle setVehicleAmmo 1; +_vehicle allowCrewInImmobile true; +_vehicle lock true; +_vehicle addEventHandler ["GetOut",{ + local _veh = _this select 0; + local _role = _this select 1; + local _unit = _this select 2; + if (_role == "driver") then { + _unit moveInDriver _veh; + } else { + _unit moveInTurret [_veh,[0]]; + }; +}]; + +dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_vehicle]; + +_driver assignAsDriver _vehicle; +_driver moveInDriver _vehicle; + +local _gunner = _unitGroup createUnit [_aiskin, [0,0,0], [], 1, "NONE"]; +_gunner assignAsGunner _vehicle; +_gunner moveInTurret [_vehicle,[0]]; +[_gunner] joinSilent _unitGroup; + +[_driver, _gunner] orderGetIn true; + +call { + if (_aitype == "hero") exitWith {_gunner setVariable ["Hero",true,false]; _gunner setVariable ["humanity", ai_remove_humanity];}; + if (_aitype == "bandit") exitWith {_gunner setVariable ["Bandit",true,false]; _gunner setVariable ["humanity", ai_add_humanity];}; + if (_aitype == "special") exitWith {_gunner setVariable ["Special",true,false]; _gunner setVariable ["humanity", ai_special_humanity];}; +}; + +{ + _gunner setSkill [(_x select 0),(_x select 1)]; +} count _aicskill; +{ + _driver setSkill [_x,1]; +} count ["aimingAccuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","commanding","general"]; + +{ + _x addWeapon "Makarov_DZ"; + _x addMagazine "8Rnd_9x18_Makarov"; + _x addMagazine "8Rnd_9x18_Makarov"; +} count (units _unitgroup); + +{ + _x addEventHandler ["Killed",{[_this select 0, _this select 1, "vehicle"] call on_kill;}]; +} forEach (units _unitgroup); + +if (!isNil "_mission") then { + _vehicle setVariable ["mission" + dayz_serverKey, _mission, false]; + + ((wai_mission_data select _mission) select 1) set [count ((wai_mission_data select _mission) select 1), _unitGroup]; + ((wai_mission_data select _mission) select 4) set [count ((wai_mission_data select _mission) select 4), _vehicle]; + { + _ainum = (wai_mission_data select _mission) select 0; + wai_mission_data select _mission set [0, (_ainum + 1)]; + _x setVariable ["mission" + dayz_serverKey, _mission, false]; + _x setVariable ["noKey",true]; + } count (crew _vehicle); +} else { + {wai_static_data set [0, ((wai_static_data select 0) + 1)];} count (crew _vehicle); + (wai_static_data select 1) set [count (wai_static_data select 1), _unitGroup]; + (wai_static_data select 2) set [count (wai_static_data select 2), _vehicle]; +}; + +_unitGroup allowFleeing 0; + +if(_aitype == "Hero") then { + _unitGroup setCombatMode ai_hero_combatmode; + _unitGroup setBehaviour ai_hero_behaviour; +} else { + _unitGroup setCombatMode ai_bandit_combatmode; + _unitGroup setBehaviour ai_bandit_behaviour; +}; + +if(_wpnum > 0) then { + + for "_x" from 1 to _wpnum do + { + _wp = _unitGroup addWaypoint [[(_position select 0),(_position select 1),0],_radius]; + _wp setWaypointType "SAD"; + _wp setWaypointCompletionRadius 200; + }; + +}; + +_wp = _unitGroup addWaypoint [[(_position select 0),(_position select 1),0],100]; +_wp setWaypointType "CYCLE"; +_wp setWaypointCompletionRadius 200; + +_unitGroup + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/config.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/config.sqf new file mode 100755 index 0000000..0c7e882 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/config.sqf @@ -0,0 +1,282 @@ +/* GENERAL CONFIG */ + +wai_debug_mode = false; // enable debug +wai_user_spawnpoints = false; // setting this to true will disable the dynamic mission spawning system and enable server owners to define their own mission spawn points in WAI\configs\spawnpoints.sqf. +wai_use_blacklist = true; // You can edit the blacklist per map in file WAI\configs\blacklist.sqf. + +/* END GENERAL CONFIG */ + +/* AI CONFIG */ +ai_show_count = true; //this will show the ai count in the mission markers. +ai_hasMoney = false; //If you have ZSC installed then setting this to true will place random amounts of coins in 50 coin increments in ai wallets. +ai_moneyMultiplier = 200; //This value is multiplied by 50 to set the max amount of ZSC coins in AI wallets. ex. 200x50=10000 max coins. +ai_clear_body = false; // instantly clear bodies +ai_cleanup_time = 120; // time to clear bodies in minutes. Set to -1 to disable AI cleanup. +ai_clean_roadkill = false; // clean bodies that are roadkills +ai_rk_damageweapon = 30; // percentage of chance a roadkill will destroy weapon AI is carrying +ai_bandit_combatmode = "RED"; // combat mode of bandit AI +ai_bandit_behaviour = "COMBAT"; // behavior of bandit AI +ai_hero_combatmode = "RED"; // combat mode of hero AI +ai_hero_behaviour = "COMBAT"; // behavior of hero AI +ai_share_info = true; // AI share info on player position +ai_share_distance = 300; // distance from killed AI for AI to share your rough position +ai_kills_gain = true; // add kill to bandit/human kill score +ai_humanity_gain = true; // gain humanity for killing AI +ai_add_humanity = 50; // amount of humanity gained for killing a bandit AI +ai_remove_humanity = 50; // amount of humanity lost for killing a hero AI +ai_reward_veh_gunner = true; // Allows the gunner or "effectiveCommander" of a vehicle to get humanity and kill rewards +ai_killfeed = false; // Sends personal messages when the player kills an ai - may not be good for network performance + +ai_skill_extreme = [["aimingAccuracy",1.00],["aimingShake",1.00],["aimingSpeed",1.00],["endurance",1.00],["spotDistance",1.00],["spotTime",1.00],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00]]; // Extreme +ai_skill_hard = [["aimingAccuracy",0.80],["aimingShake",0.80],["aimingSpeed",0.80],["endurance",1.00],["spotDistance",0.80],["spotTime",0.80],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00]]; // Hard +ai_skill_medium = [["aimingAccuracy",0.60],["aimingShake",0.60],["aimingSpeed",0.60],["endurance",1.00],["spotDistance",0.60],["spotTime",0.60],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00]]; // Medium +ai_skill_easy = [["aimingAccuracy",0.40],["aimingShake",0.50],["aimingSpeed",0.50],["endurance",1.00],["spotDistance",0.50],["spotTime",0.50],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00]]; // Easy +ai_skill_random = [ai_skill_extreme,ai_skill_hard,ai_skill_hard,ai_skill_hard,ai_skill_hard,ai_skill_medium,ai_skill_medium,ai_skill_medium,ai_skill_medium,ai_skill_easy]; + +ai_static_useweapon = true; // Allows AI on static guns to have a loadout +ai_static_weapons = ["KORD_high_TK_EP1","DSHKM_Ins","M2StaticMG"]; // static guns +ai_static_skills = false; // Allows you to set custom array for AI on static weapons. (true: On false: Off) +ai_static_array = [["aimingAccuracy",0.20],["aimingShake",0.70],["aimingSpeed",0.75],["endurance",1.00],["spotDistance",0.70],["spotTime",0.50],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00]]; + +ai_gear0 = [["ItemBandage","ItemBandage","ItemAntibiotic"],["ItemRadio","ItemMachete","ItemCrowbar"]]; +ai_gear1 = [["ItemBandage","ItemSodaPepsi","ItemMorphine"],["Binocular_Vector"]]; +ai_gear2 = [["ItemDocument","FoodCanFrankBeans","ItemHeatPack"],["ItemToolbox"]]; +ai_gear3 = [["ItemWaterbottle","ItemBloodbag"],["ItemCompass","ItemCrowbar"]]; +ai_gear4 = [["ItemBandage","ItemEpinephrine","ItemPainkiller"],["ItemGPS","ItemKeyKit"]]; +ai_gear_random = [ai_gear0,ai_gear1,ai_gear2,ai_gear3,ai_gear4]; + +// Weapons +ai_wep_ak = ["AK74_Kobra_DZ","AK74_Kobra_SD_DZ","AK74_GL_Kobra_DZ","AK74_GL_Kobra_SD_DZ","AK74_DZ","AK74_SD_DZ","AK74_GL_DZ","AK74_GL_SD_DZ","AK74_PSO1_DZ","AK74_PSO1_SD_DZ","AK74_GL_PSO1_DZ","AK74_GL_PSO1_SD_DZ","AK107_Kobra_DZ","AK107_DZ","AK107_GL_DZ","AK107_PSO_DZ","AK107_GL_PSO_DZ","AK107_GL_Kobra_DZ","AN94_DZ","AN94_GL_DZ","AKS74U_Kobra_DZ","AKS74U_Kobra_SD_DZ","AKS74U_DZ","AKS74U_SD_DZ","AKM_DZ","AKM_Kobra_DZ","AKM_PSO1_DZ","AKS_Gold_DZ","AKS_Silver_DZ","AKS_DZ"]; +ai_wep_rk95 = ["RK95_DZ","RK95_SD_DZ","RK95_CCO_SD_DZ","RK95_ACOG_SD_DZ","RK95_CCO_DZ","RK95_ACOG_DZ"]; +ai_wep_groza = ["Groza9_DZ","Groza9_Sniper_DZ","Groza9_GL_DZ","Groza9_GL_Sniper_DZ","Groza9_SD_DZ","Groza9_Sniper_SD_DZ","Groza1_DZ","Groza1_Sniper_DZ","Groza1_SD_DZ","Groza1_Sniper_SD_DZ"]; +ai_wep_scar = ["SCAR_H_AK_DZ","SCAR_H_AK_CCO_DZ","SCAR_H_B_AK_CCO_DZ","SCAR_H_AK_HOLO_DZ","SCAR_H_AK_ACOG_DZ"]; +ai_wep_sniper = ["WA2000_DZ","Barrett_MRAD_Iron_DZ","Barrett_MRAD_CCO_DZ","Barrett_MRAD_Sniper_DZ","MSR_DZ","MSR_SD_DZ","MSR_NV_DZ","MSR_NV_SD_DZ","XM2010_DZ","XM2010_SD_DZ","XM2010_NV_DZ","XM2010_NV_SD_DZ","XM2010_TWS_DZ","XM2010_TWS_SD_DZ","Anzio_20_DZ","BAF_AS50_scoped_DZ","m107_DZ","M4SPR_DZE","M200_CheyTac_DZ","M200_CheyTac_SD_DZ","L115A3_DZ","L115A3_2_DZ","KSVK_DZE","VSS_vintorez_DZE","M24_DZ","M24_Gh_DZ","M24_DES_DZ","M40A3_Gh_DZ","M40A3_DZ","CZ750_DZ","M110_NV_DZ","MK17_Sniper_DZ","MK17_Sniper_SD_DZ","MK14_Sniper_DZ","MK14_Sniper_SD_DZ","M21_DZ","M21A5_DZ","M21A5_SD_DZ","HK417_Sniper_DZ","HK417_Sniper_SD_DZ","M1A_SC16_BL_Sniper_DZ","M1A_SC2_BL_Sniper_DZ","M1A_SC16_TAN_Sniper_DZ","DMR_DZ","DMR_SKN","DMR_Gh_DZ","DMR_DZE","DMR_Gh_DZE","RSASS_DZ","RSASS_TWS_DZ","RSASS_SD_DZ","RSASS_TWS_SD_DZ","FNFAL_DZ","FNFAL_CCO_DZ","FNFAL_Holo_DZ","FNFAL_ANPVS4_DZ","FN_FAL_ANPVS4_DZE","G3_DZ"]; +ai_wep_g36 = ["G36K_Camo_DZ","G36K_Camo_SD_DZ","G36A_Camo_DZ","G36A_Camo_SD_DZ","G36C_DZ","G36C_SD_DZ","G36C_CCO_DZ","G36C_CCO_SD_DZ","G36C_Holo_DZ","G36C_Holo_SD_DZ","G36C_ACOG_DZ","G36C_ACOG_SD_DZ","G36C_Camo_DZ","G36C_Camo_Holo_SD_DZ"]; +ai_wep_m4 = ["M4A1_DZ","M4A1_FL_DZ","M4A1_MFL_DZ","M4A1_SD_DZ","M4A1_SD_FL_DZ","M4A1_SD_MFL_DZ","M4A1_GL_DZ","M4A1_GL_FL_DZ","M4A1_GL_MFL_DZ","M4A1_GL_SD_DZ","M4A1_GL_SD_FL_DZ","M4A1_GL_SD_MFL_DZ","M4A1_CCO_DZ","M4A1_CCO_FL_DZ","M4A1_CCO_MFL_DZ","M4A1_CCO_SD_DZ","M4A1_CCO_SD_FL_DZ","M4A1_CCO_SD_MFL_DZ","M4A1_GL_CCO_DZ","M4A1_GL_CCO_FL_DZ","M4A1_GL_CCO_MFL_DZ","M4A1_GL_CCO_SD_DZ","M4A1_GL_CCO_SD_FL_DZ","M4A1_GL_CCO_SD_MFL_DZ","M4A1_Holo_DZ","M4A1_Holo_FL_DZ","M4A1_Holo_MFL_DZ","M4A1_Holo_SD_DZ","M4A1_Holo_SD_FL_DZ","M4A1_Holo_SD_MFL_DZ","M4A1_GL_Holo_DZ","M4A1_GL_Holo_FL_DZ","M4A1_GL_Holo_MFL_DZ","M4A1_GL_Holo_SD_DZ","M4A1_GL_Holo_SD_FL_DZ","M4A1_GL_Holo_SD_MFL_DZ","M4A1_ACOG_DZ","M4A1_ACOG_FL_DZ","M4A1_ACOG_MFL_DZ","M4A1_ACOG_SD_DZ","M4A1_ACOG_SD_FL_DZ","M4A1_ACOG_SD_MFL_DZ","M4A1_GL_ACOG_DZ","M4A1_GL_ACOG_FL_DZ","M4A1_GL_ACOG_MFL_DZ","M4A1_GL_ACOG_SD_DZ","M4A1_GL_ACOG_SD_FL_DZ","M4A1_GL_ACOG_SD_MFL_DZ","M4A1_Rusty_DZ","M4A1_Camo_CCO_DZ","M4A1_Camo_CCO_SD_DZ","M4A1_Camo_Holo_GL_DZ","M4A1_Camo_Holo_GL_SD_DZ","M4A3_DES_CCO_DZ","M4A3_ACOG_GL_DZ","M4A3_Camo_DZ","M4A3_Camo_ACOG_DZ"]; +ai_wep_hk416 = ["HK416_DZ","HK416_SD_DZ","HK416_GL_DZ","HK416_GL_SD_DZ","HK416_CCO_DZ","HK416_CCO_SD_DZ","HK416_GL_CCO_DZ","HK416_GL_CCO_SD_DZ","HK416_Holo_DZ","HK416_Holo_SD_DZ","HK416_GL_Holo_DZ","HK416C_DZ","HK416C_GL_DZ","HK416C_CCO_DZ","HK416C_GL_CCO_DZ","HK416C_Holo_DZ","HK416C_GL_Holo_DZ","HK416C_ACOG_DZ","HK416C_GL_ACOG_DZ"]; +ai_wep_steyrAug = ["SteyrAug_A3_Green_DZ","SteyrAug_A3_Black_DZ","SteyrAug_A3_Blue_DZ","SteyrAug_A3_ACOG_Green_DZ","SteyrAug_A3_ACOG_Black_DZ","SteyrAug_A3_ACOG_Blue_DZ","SteyrAug_A3_Holo_Green_DZ","SteyrAug_A3_Holo_Black_DZ","SteyrAug_A3_Holo_Blue_DZ","SteyrAug_A3_GL_Green_DZ","SteyrAug_A3_GL_Black_DZ","SteyrAug_A3_GL_Blue_DZ","SteyrAug_A3_ACOG_GL_Green_DZ","SteyrAug_A3_ACOG_GL_Black_DZ","SteyrAug_A3_ACOG_GL_Blue_DZ","SteyrAug_A3_Holo_GL_Green_DZ","SteyrAug_A3_Holo_GL_Black_DZ","SteyrAug_A3_Holo_GL_Blue_DZ"]; +ai_wep_hk53 = ["HK53A3_DZ","HK53A3_CCO_DZ","HK53A3_Holo_DZ"]; +ai_wep_magpulPDR = ["PDR_DZ","PDR_CCO_DZ","PDR_Holo_DZ"]; +ai_wep_famas = ["Famas_DZ","Famas_CCO_DZ","Famas_Holo_DZ","Famas_SD_DZ","Famas_CCO_SD_DZ","Famas_Holo_SD_DZ"]; +ai_wep_acr = ["ACR_WDL_DZ","ACR_WDL_SD_DZ","ACR_WDL_GL_DZ","ACR_WDL_GL_SD_DZ","ACR_WDL_CCO_DZ","ACR_WDL_CCO_SD_DZ","ACR_WDL_CCO_GL_DZ","ACR_WDL_CCO_GL_SD_DZ","ACR_WDL_Holo_DZ","ACR_WDL_Holo_SD_DZ","ACR_WDL_Holo_GL_DZ","ACR_WDL_Holo_GL_SD_DZ","ACR_WDL_ACOG_DZ","ACR_WDL_ACOG_SD_DZ","ACR_WDL_ACOG_GL_DZ","ACR_WDL_ACOG_GL_SD_DZ","ACR_WDL_TWS_DZ","ACR_WDL_TWS_GL_DZ","ACR_WDL_TWS_SD_DZ","ACR_WDL_TWS_GL_SD_DZ","ACR_WDL_NV_DZ","ACR_WDL_NV_SD_DZ","ACR_WDL_NV_GL_DZ","ACR_WDL_NV_GL_SD_DZ","ACR_BL_DZ","ACR_BL_SD_DZ","ACR_BL_GL_DZ","ACR_BL_GL_SD_DZ","ACR_BL_CCO_DZ","ACR_BL_CCO_SD_DZ","ACR_BL_CCO_GL_DZ","ACR_BL_CCO_GL_SD_DZ","ACR_BL_Holo_DZ","ACR_BL_Holo_SD_DZ","ACR_BL_Holo_GL_DZ","ACR_BL_Holo_GL_SD_DZ","ACR_BL_ACOG_DZ","ACR_BL_ACOG_SD_DZ","ACR_BL_ACOG_GL_DZ","ACR_BL_ACOG_GL_SD_DZ","ACR_BL_TWS_DZ","ACR_BL_TWS_GL_DZ","ACR_BL_TWS_SD_DZ","ACR_BL_TWS_GL_SD_DZ","ACR_BL_NV_DZ","ACR_BL_NV_SD_DZ","ACR_BL_NV_GL_DZ","ACR_BL_NV_GL_SD_DZ","ACR_DES_DZ","ACR_DES_SD_DZ","ACR_DES_GL_DZ","ACR_DES_GL_SD_DZ","ACR_DES_CCO_DZ","ACR_DES_CCO_SD_DZ","ACR_DES_CCO_GL_DZ","ACR_DES_CCO_GL_SD_DZ","ACR_DES_Holo_DZ","ACR_DES_Holo_SD_DZ","ACR_DES_Holo_GL_DZ","ACR_DES_Holo_GL_SD_DZ","ACR_DES_ACOG_DZ","ACR_DES_ACOG_SD_DZ","ACR_DES_ACOG_GL_DZ","ACR_DES_ACOG_GL_SD_DZ","ACR_DES_TWS_DZ","ACR_DES_TWS_GL_DZ","ACR_DES_TWS_SD_DZ","ACR_DES_TWS_GL_SD_DZ","ACR_DES_NV_DZ","ACR_DES_NV_SD_DZ","ACR_DES_NV_GL_DZ","ACR_DES_NV_GL_SD_DZ","ACR_SNOW_DZ","ACR_SNOW_SD_DZ","ACR_SNOW_GL_DZ","ACR_SNOW_GL_SD_DZ","ACR_SNOW_CCO_DZ","ACR_SNOW_CCO_SD_DZ","ACR_SNOW_CCO_GL_DZ","ACR_SNOW_CCO_GL_SD_DZ","ACR_SNOW_Holo_DZ","ACR_SNOW_Holo_SD_DZ","ACR_SNOW_Holo_GL_DZ","ACR_SNOW_Holo_GL_SD_DZ","ACR_SNOW_ACOG_DZ","ACR_SNOW_ACOG_SD_DZ","ACR_SNOW_ACOG_GL_DZ","ACR_SNOW_ACOG_GL_SD_DZ","ACR_SNOW_TWS_DZ","ACR_SNOW_TWS_GL_DZ","ACR_SNOW_TWS_SD_DZ","ACR_SNOW_TWS_GL_SD_DZ","ACR_SNOW_NV_DZ","ACR_SNOW_NV_SD_DZ","ACR_SNOW_NV_GL_DZ","ACR_SNOW_NV_GL_SD_DZ"]; +ai_wep_kac = ["KAC_PDW_DZ","KAC_PDW_CCO_DZ","KAC_PDW_HOLO_DZ","KAC_PDW_ACOG_DZ"]; +ai_wep_tavor = ["CTAR21_DZ","CTAR21_CCO_DZ","CTAR21_ACOG_DZ"]; +ai_wep_masada = ["Masada_DZ","Masada_SD_DZ","Masada_CCO_DZ","Masada_CCO_SD_DZ","Masada_Holo_DZ","Masada_Holo_SD_DZ","Masada_ACOG_DZ","Masada_ACOG_SD_DZ","Masada_BL_DZ","Masada_BL_SD_DZ","Masada_BL_CCO_DZ","Masada_BL_CCO_SD_DZ","Masada_BL_Holo_DZ","Masada_BL_Holo_SD_DZ","Masada_BL_ACOG_DZ","Masada_BL_ACOG_SD_DZ"]; +ai_wep_mk16 = ["MK16_DZ","MK16_CCO_DZ","MK16_Holo_DZ","MK16_ACOG_DZ","MK16_GL_DZ","MK16_GL_CCO_DZ","MK16_GL_Holo_DZ","MK16_GL_ACOG_DZ","MK16_CCO_SD_DZ","MK16_Holo_SD_DZ","MK16_ACOG_SD_DZ","MK16_GL_CCO_SD_DZ","MK16_GL_Holo_SD_DZ","MK16_GL_ACOG_SD_DZ","MK16_BL_CCO_DZ","MK16_BL_GL_ACOG_DZ","MK16_BL_Holo_SD_DZ","MK16_BL_GL_CCO_SD_DZ"]; +ai_wep_xm8 = ["XM8_DZ","XM8_DES_DZ","XM8_GREY_DZ","XM8_GREY_2_DZ","XM8_GL_DZ","XM8_DES_GL_DZ","XM8_GREY_GL_DZ","XM8_Compact_DZ","XM8_DES_Compact_DZ","XM8_GREY_Compact_DZ","XM8_GREY_2_Compact_DZ","XM8_Sharpsh_DZ","XM8_DES_Sharpsh_DZ","XM8_GREY_Sharpsh_DZ","XM8_SAW_DZ","XM8_DES_SAW_DZ","XM8_GREY_SAW_DZ","XM8_SD_DZ"]; +ai_wep_m14 = ["M14_DZ","M14_Gh_DZ","M14_CCO_DZ","M14_CCO_Gh_DZ","M14_Holo_DZ","M14_Holo_Gh_DZ","M1A_SC16_BL_DZ","M1A_SC16_BL_ACOG_DZ","M1A_SC16_BL_CCO_DZ","M1A_SC16_BL_HOLO_DZ","M1A_SC16_BL_PU_DZ","M1A_SC16_TAN_DZ","M1A_SC16_TAN_ACOG_DZ","M1A_SC16_TAN_CCO_DZ","M1A_SC16_TAN_HOLO_DZ","M1A_SC16_TAN_PU_DZ","M1A_SC2_BL_DZ","M1A_SC2_BL_ACOG_DZ","M1A_SC2_BL_CCO_DZ","M1A_SC2_BL_HOLO_DZ","M1A_SC2_BL_PU_DZ"]; +ai_wep_hk417 = ["HK417_DZ","HK417_SD_DZ","HK417_CCO_DZ","HK417_CCO_SD_DZ","HK417_Holo_DZ","HK417_Holo_SD_DZ","HK417_ACOG_DZ","HK417_ACOG_SD_DZ","HK417C_DZ","HK417C_GL_DZ","HK417C_CCO_DZ","HK417C_GL_CCO_DZ","HK417C_Holo_DZ","HK417C_GL_Holo_DZ","HK417C_ACOG_DZ","HK417C_GL_ACOG_DZ"]; +ai_wep_mk14 = ["MK14_DZ","MK14_CCO_DZ","MK14_Holo_DZ","MK14_ACOG_DZ","MK14_SD_DZ","MK14_CCO_SD_DZ","MK14_Holo_SD_DZ","MK14_ACOG_SD_DZ"]; +ai_wep_mk17 = ["MK17_DZ","MK17_CCO_DZ","MK17_Holo_DZ","MK17_ACOG_DZ","MK17_GL_DZ","MK17_GL_CCO_DZ","MK17_GL_Holo_DZ","MK17_GL_ACOG_DZ","MK17_CCO_SD_DZ","MK17_Holo_SD_DZ","MK17_ACOG_SD_DZ","MK17_GL_CCO_SD_DZ","MK17_GL_Holo_SD_DZ","MK17_BL_Holo_DZ","MK17_BL_GL_ACOG_DZ","MK17_BL_CCO_SD_DZ","MK17_BL_GL_Holo_SD_DZ"]; +ai_wep_cz805 = ["CZ805_A1_DZ","CZ805_A1_GL_DZ","CZ805_A2_DZ","CZ805_A2_SD_DZ","CZ805_B_GL_DZ"]; +ai_wep_shotgun = ["MR43_DZ","Winchester1866_DZ","Remington870_DZ","Remington870_FL_DZ","Remington870_MFL_DZ","Saiga12K_DZ","USAS12_DZ","AA12_DZ","M1014_DZ","M1014_CCO_DZ","M1014_Holo_DZ"]; +ai_wep_svd = ["SVD_PSO1_DZ","SVD_PSO1_Gh_DZ","SVD_DZ","SVD_Gh_DZ","SVD_PSO1_Gh_DES_DZ","SVD_NSPU_DZ","SVD_Gold_DZ","SVU_PSO1_DZ"]; +ai_wep_mosin = ["Mosin_DZ","Mosin_FL_DZ","Mosin_MFL_DZ","Mosin_Belt_DZ","Mosin_Belt_FL_DZ","Mosin_Belt_MFL_DZ","Mosin_PU_DZ","Mosin_PU_FL_DZ","Mosin_PU_MFL_DZ","Mosin_PU_Belt_DZ","Mosin_PU_Belt_FL_DZ","Mosin_PU_Belt_MFL_DZ"]; +ai_wep_m16 = ["M16A2_DZ","M16A2_GL_DZ","M16A2_Rusty_DZ","M16A4_DZ","M16A4_FL_DZ","M16A4_MFL_DZ","M16A4_GL_DZ","M16A4_GL_FL_DZ","M16A4_GL_MFL_DZ","M16A4_CCO_DZ","M16A4_CCO_FL_DZ","M16A4_CCO_MFL_DZ","M16A4_GL_CCO_DZ","M16A4_GL_CCO_FL_DZ","M16A4_GL_CCO_MFL_DZ","M16A4_Holo_DZ","M16A4_Holo_FL_DZ","M16A4_Holo_MFL_DZ","M16A4_GL_Holo_DZ","M16A4_GL_Holo_FL_DZ","M16A4_GL_Holo_MFL_DZ","M16A4_ACOG_DZ","M16A4_ACOG_FL_DZ","M16A4_ACOG_MFL_DZ","M16A4_GL_ACOG_DZ","M16A4_GL_ACOG_FL_DZ","M16A4_GL_ACOG_MFL_DZ"]; +ai_wep_sa58 = ["SA58_DZ","SA58_RIS_DZ","SA58_RIS_FL_DZ","SA58_RIS_MFL_DZ","SA58_CCO_DZ","SA58_CCO_FL_DZ","SA58_CCO_MFL_DZ","SA58_Holo_DZ","SA58_Holo_FL_DZ","SA58_Holo_MFL_DZ","SA58_ACOG_DZ","SA58_ACOG_FL_DZ","SA58_ACOG_MFL_DZ","Sa58V_DZ","Sa58V_Camo_CCO_DZ","Sa58V_Camo_ACOG_DZ"]; +ai_wep_l85 = ["L85A2_DZ","L85A2_FL_DZ","L85A2_MFL_DZ","L85A2_SD_DZ","L85A2_SD_FL_DZ","L85A2_SD_MFL_DZ","L85A2_CCO_DZ","L85A2_CCO_FL_DZ","L85A2_CCO_MFL_DZ","L85A2_CCO_SD_DZ","L85A2_CCO_SD_FL_DZ","L85A2_CCO_SD_MFL_DZ","L85A2_Holo_DZ","L85A2_Holo_FL_DZ","L85A2_Holo_MFL_DZ","L85A2_Holo_SD_DZ","L85A2_Holo_SD_FL_DZ","L85A2_Holo_SD_MFL_DZ","L85A2_ACOG_DZ","L85A2_ACOG_FL_DZ","L85A2_ACOG_MFL_DZ","L85A2_ACOG_SD_DZ","L85A2_ACOG_SD_FL_DZ","L85A2_ACOG_SD_MFL_DZ","BAF_L85A2_RIS_TWS_DZ"]; +ai_wep_pistol = ["M9_DZ","M9_SD_DZ","M9_Camo_DZ","M9_Camo_SD_DZ","M93R_DZ","P99_Black_DZ","P99_Black_SD_DZ","P99_Green_DZ","P99_Green_SD_DZ","P99_Silver_DZ","P99_Silver_SD_DZ","BrowningHP_DZ","P226_DZ","P226_Silver_DZ","P38_DZ","PPK_DZ","MK22_DZ","MK22_2_DZ","MK22_SD_DZ","MK22_2_SD_DZ","G17_DZ","G17_FL_DZ","G17_MFL_DZ","G17_SD_DZ","G17_SD_FL_DZ","G17_SD_MFL_DZ","G18_DZ","M1911_DZ","M1911_2_DZ","Kimber_M1911_DZ","Kimber_M1911_SD_DZ","USP_DZ","USP_SD_DZ","Makarov_DZ","Makarov_SD_DZ","Tokarew_TT33_DZ","Ruger_MK2_DZ","APS_DZ","APS_SD_DZ","PDW_DZ","PDW_SD_DZ","TEC9_DZ","Mac10_DZ","Revolver_DZ","Revolver_Gold_DZ","Colt_Anaconda_DZ","Colt_Anaconda_Gold_DZ","Colt_Bull_DZ","Colt_Python_DZ","Colt_Revolver_DZ","CZ75P_DZ","CZ75D_DZ","CZ75SP_DZ","CZ75SP_SD_DZ","DesertEagle_DZ","DesertEagle_Gold_DZ","DesertEagle_Silver_DZ","DesertEagle_Modern_DZ","Sa61_DZ"]; +ai_wep_smg = ["Bizon_DZ","Bizon_Kobra_DZ","Bizon_SD_DZ","Bizon_Kobra_SD_DZ","MP5_DZ","MP5_SD_DZ","Kriss_DZ","Kriss_CCO_DZ","Kriss_Holo_DZ","Kriss_SD_DZ","Kriss_CCO_SD_DZ","Kriss_Holo_SD_DZ","Scorpion_Evo3_DZ","Scorpion_Evo3_CCO_DZ","Scorpion_Evo3_CCO_SD_DZ","MP7_DZ","MP7_FL_DZ","MP7_MFL_DZ","MP7_Holo_DZ","MP7_Holo_FL_DZ","MP7_Holo_MFL_DZ","MP7_CCO_DZ","MP7_CCO_FL_DZ","MP7_CCO_MFL_DZ","MP7_ACOG_DZ","MP7_ACOG_FL_DZ","MP7_ACOG_MFL_DZ","MP7_SD_DZ","MP7_SD_FL_DZ","MP7_SD_MFL_DZ","MP7_Holo_SD_DZ","MP7_Holo_SD_FL_DZ","MP7_Holo_SD_MFL_DZ","MP7_CCO_SD_DZ","MP7_CCO_SD_FL_DZ","MP7_CCO_SD_MFL_DZ","MP7_ACOG_SD_DZ","MP7_ACOG_SD_FL_DZ","MP7_ACOG_SD_MFL_DZ","TMP_DZ","TMP_CCO_DZ","TMP_Holo_DZ","TMP_SD_DZ","TMP_CCO_SD_DZ","TMP_Holo_SD_DZ","UMP_DZ","UMP_CCO_DZ","UMP_Holo_DZ","UMP_SD_DZ","UMP_CCO_SD_DZ","UMP_Holo_SD_DZ","P90_DZ","P90_CCO_DZ","P90_Holo_DZ","P90_SD_DZ","P90_CCO_SD_DZ","P90_Holo_SD_DZ","Sten_MK_DZ","MAT49_DZ","M31_DZ","VAL_DZ","VAL_Kobra_DZ","VAL_PSO1_DZ"]; +ai_wep_machine = ["RPK_DZ","RPK_Kobra_DZ","RPK_PSO1_DZ","MG36_DZ","MG36_Camo_DZ","M249_CCO_DZ","M249_DZ","M249_Holo_DZ","M249_EP1_DZ","M249_m145_EP1_DZE","L110A1_CCO_DZ","L110A1_Holo_DZ","L110A1_DZ","BAF_L110A1_Aim_DZE","M240_DZ","M240_CCO_DZ","M240_Holo_DZ","m240_scoped_EP1_DZE","M60A4_EP1_DZE","Mk43_DZ","MK43_Holo_DZ","MK43_ACOG_DZ","MK43_M145_DZ","Mk48_CCO_DZ","Mk48_DZ","Mk48_Holo_DZ","Mk48_DES_CCO_DZ","PKM_DZ","Pecheneg_DZ","UK59_DZ","RPK74_Kobra_DZ","RPK74_DZ","RPK74_PSO1_DZ","L86A2_LSW_DZ"]; +ai_wep_tws = ["MSR_TWS_DZ","MSR_TWS_SD_DZ","AKS_74_GOSHAWK","BAF_AS50_TWS","BAF_L85A2_RIS_TWS_DZ","M249_TWS_EP1_Small","m107_TWS_EP1_Small","m8_tws","m8_tws_sd","SCAR_L_STD_EGLM_TWS","SCAR_H_STD_TWS_SD","M110_TWS_EP1"]; + +// Random Weapons // By default, most of the mission crates and ai spawn weapons out of the group below. You can remove any weapon array entries from the list if you don't wish to include them. +ai_wep_random = [ai_wep_ak,ai_wep_rk95,ai_wep_groza,ai_wep_scar,ai_wep_sniper,ai_wep_g36,ai_wep_m4,ai_wep_hk416,ai_wep_steyrAug,ai_wep_hk53,ai_wep_magpulPDR,ai_wep_famas,ai_wep_acr,ai_wep_kac,ai_wep_tavor,ai_wep_masada,ai_wep_mk16,ai_wep_xm8,ai_wep_m14,ai_wep_hk417,ai_wep_mk14,ai_wep_mk17,ai_wep_cz805,ai_wep_shotgun,ai_wep_svd,ai_wep_mosin,ai_wep_m16,ai_wep_sa58,ai_wep_l85,ai_wep_smg,ai_wep_machine]; + +ai_wep_launchers_AT = ["M136","RPG18","JAVELIN", "Strela","Igla","STINGER"]; +ai_wep_launchers_AA = ["Strela","Igla","STINGER"]; + +ai_packs = ["Patrol_Pack_DZE1","GymBag_Camo_DZE1","GymBag_Green_DZE1","Czech_Vest_Pouch_DZE1","Assault_Pack_DZE1","TerminalPack_DZE1","TinyPack_DZE1","ALICE_Pack_DZE1","TK_Assault_Pack_DZE1","School_Bag_DZE1","CompactPack_DZE1","British_ACU_DZE1","GunBag_DZE1","PartyPack_DZE1","NightPack_DZE1","SurvivorPack_DZE1","AirwavesPack_DZE1","CzechBackpack_DZE1","CzechBackpack_Camping_DZE1","CzechBackpack_OD_DZE1","CzechBackpack_DES_DZE1","CzechBackpack_3DES_DZE1","CzechBackpack_WDL_DZE1","CzechBackpack_MAR_DZE1","CzechBackpack_DMAR_DZE1","CzechBackpack_UCP_DZE1","CzechBackpack_6DES_DZE1","CzechBackpack_TAK_DZE1","CzechBackpack_NVG_DZE1","CzechBackpack_BLK_DZE1","CzechBackpack_DPM_DZE1","CzechBackpack_FIN_DZE1","CzechBackpack_MTC_DZE1","CzechBackpack_NOR_DZE1","CzechBackpack_WIN_DZE1","CzechBackpack_ATC_DZE1","CzechBackpack_MTL_DZE1","CzechBackpack_FTN_DZE1","WandererBackpack_DZE1","LegendBackpack_DZE1","CoyoteBackpack_DZE1","CoyoteBackpackDes_DZE1","CoyoteBackpackWdl_DZE1","CoyoteBackpack_Camping_DZE1","LargeGunBag_DZE1"]; +ai_hero_skin = ["Soldier_Sniper_PMC_DZ","Drake_Light_DZ","CZ_Special_Forces_GL_DES_EP1_DZ","FR_Rodriguez_DZ","FR_Marksman_DZ","FR_R_DZ","FR_Sapper_DZ","FR_TL_DZ","FR_OHara_DZ","USMC_Soldier_MG_DZ","US_Soldier_EP1_DZ","UN_CDF_Soldier_Guard_EP1_DZ","GER_Soldier_TL_EP1_DZ","BAF_Soldier_Officer_MTP_DZ","BAF_Soldier_N_MTP_DZ"]; +ai_bandit_skin = ["Ins_Soldier_GL_DZ","TK_INS_Soldier_EP1_DZ","TK_INS_Warlord_EP1_DZ","GUE_Commander_DZ","GUE_Soldier_Sniper_DZ","GUE_Soldier_MG_DZ","GUE_Soldier_Crew_DZ","GUE_Soldier_2_DZ","GUE_Soldier_CO_DZ","BanditW1_DZ","BanditW2_DZ","Bandit1_DZ","Bandit2_DZ","MVD_Soldier_DZ","Ins_Soldier_2_DZ","CDF_Soldier_DZ","RUS_Soldier1_DZ"]; +ai_special_skin = ["Functionary2_EP1"]; +ai_all_skin = [ai_hero_skin,ai_bandit_skin,ai_special_skin]; +ai_add_skin = true; // adds unit skin to inventory on death. Should set to false if you have takeclothes installed. + +/* END AI CONFIG */ + +/* WAI MISSIONS CONFIG */ +wai_mission_markers = ["DZMSMajMarker","DZMSMinMarker","DZMSBMajMarker","DZMSBMinMarker"]; // List of DZMS mission markers to check +wai_avoid_samespot = true; // Checks to see that a selected mission spawn point has not been used already - 200m check. +wai_avoid_missions = 2000; // avoid spawning missions this close to other missions, these are defined in wai_mission_markers +wai_avoid_safezones = 1500; // avoid spawning missions this close to safezones +wai_avoid_town = 0; // avoid spawning missions this close to towns, *** doesn't function with infiSTAR enabled *** +wai_avoid_road = 0; // avoid spawning missions this close to roads +wai_avoid_water = 50; // avoid spawning missions this close to water +wai_avoid_players = 500; // avoid spawning missions this close to a player +wai_avoid_plots = 100; // avoid spawning missions near player plots + +wai_mission_timer = [2,15]; // time between missions. Default: 5-15 minutes +wai_mission_timeout = [15,30]; // time each mission takes to timeout if inactive. Default: 15-30 minutes +wai_timeout_distance = 1200; // if a player is this close to a mission then it won't timeout + +wai_clean_mission_time = 40; // time in minutes after a mission is complete to clean mission buildings. Set to -1 to disable mission cleanup. Default: 30 minutes +wai_clean_mission_crate = true; // include the mission crates with the mission cleanup. If a player is within 75 meters of the crates the cleanup script will wait. Does not apply to missions that timeout. +wai_clean_when_clear = ["Road Block"]; // These mission names will get cleaned instantly overriding wai_clean_mission_time + +wai_godmode_objects = true; // prevents mission objects from taking damage +wai_mission_fuel = [5,60]; // fuel inside mission spawned vehicles [min%,max%] +wai_vehicle_damage = [20,70]; // damages to spawn vehicles with [min%,max%] +wai_keep_vehicles = false; // save vehicles to database and keep them after restart +wai_godmode_vehicles = false; // mission vehicles do not take damage until players enter them +wai_vehicle_keys = "NoVehicleKey"; // Options: "KeyonAI", "KeyinVehicle", "KeyinCrate", "NoVehicleKey". +wai_vehicle_message = true; // Shows a warning message to the player when entering a mission vehicle + +wai_crates_smoke = false; // pop smoke on crate when mission is finished during daytime +wai_crates_flares = false; // pop flare on crate when mission is finished during nighttime + +wai_players_online = 1; // number of players online before mission starts +wai_kill_percent = 100; // percentage of AI players that must be killed at "crate" missions to be able to trigger completion +wai_high_value_chance = 10; // chance in percent you find a high value item in the crate. +wai_num_mags = [3,6]; // Number of magazines per weapon in the crate [min,max] + +wai_enable_minefield = false; // enable minefields to better defend missions +wai_enable_static_guns = true; // Enables or disables static gun placements at missions that have them. +wai_enable_paradrops = false; // Enables or disables paratrooper drops at missions that have them. +wai_enable_patrols = true; // Enables or disables armored vehicle patrols at missions that have them. +wai_use_launchers = true; // add a rocket launcher to each spawned AI group +wai_remove_launcher = false; // remove rocket launcher from AI on death +wai_mission_announce = "DynamicText"; // Options: "Radio", "DynamicText", "titleText" +wai_hero_limit = 4; // define how many hero missions can run at once +wai_bandit_limit = 4; // define how many bandit missions can run at once + +// Mission Arrays +// [mission name, chance to spawn] Chance to spawn is 0-1. Example - If you only want your mission to have a 25% chance to spawn enter .25 +wai_hero_missions = [ + ["patrol",1], + ["black_hawk_crash",1], + ["armed_vehicle",1], + ["base",1], + ["captured_mv22",1], + ["scout_patrol",1], + ["ikea_convoy",1], + ["medi_camp",1], + ["broken_down_ural",1], + ["sniper_extraction",1], + ["mayors_mansion",1], + ["weapon_cache",1], + ["gem_tower",1], + ["cannibal_cave",1], + ["crop_raider",1], + ["drone_pilot",1], + ["slaughter_house",1], + ["drugbust",1], + ["armybase",1], + ["abandoned_trader",1], + ["lumberjack",1], + ["presidents_mansion",1], + ["tankcolumn",1], + ["macdonald",1], + ["radioshack",1], + ["junkyard",1], + ["outpost",1], + ["farmer",1], + ["firestation",1], + ["vehicle_drop",1], + ["apc",1], + ["castle_grayskull",1], + ["wuhan_lab",1] + //["fallen_satellite",1], + //["oil_depot",1], + //["refugee",1], + //["gold_mine",1], + //["cargo",1] +]; + +wai_bandit_missions = [ + ["patrol",1], + ["black_hawk_crash",1], + ["armed_vehicle",1], + ["base",1], + ["captured_mv22",1], + ["scout_patrol",1], + ["ikea_convoy",1], + ["medi_camp",1], + ["broken_down_ural",1], + ["sniper_extraction",1], + ["mayors_mansion",1], + ["weapon_cache",1], + ["gem_tower",1], + ["cannibal_cave",1], + ["crop_raider",1], + ["drone_pilot",1], + ["slaughter_house",1], + ["drugbust",1], + ["armybase",1], + ["abandoned_trader",1], + ["lumberjack",1], + ["presidents_mansion",1], + ["tankcolumn",1], + ["macdonald",1], + ["radioshack",1], + ["junkyard",1], + ["outpost",1], + ["farmer",1], + ["firestation",1], + ["vehicle_drop",1], + ["apc",1], + ["castle_grayskull",1], + ["wuhan_lab",1] + //["fallen_satellite",1], + //["oil_depot",1], + //["refugee",1], + //["gold_mine",1], + //["cargo",1] +]; + +// Vehicle arrays +armed_vehicle = ["ArmoredSUV_PMC_DZE","GAZ_Vodnik_DZE","HMMWV_M1151_M2_CZ_DES_EP1_DZE","HMMWV_M998A2_SOV_DES_EP1_DZE","LandRover_MG_TK_EP1_DZE","LandRover_Special_CZ_EP1_DZE","Offroad_DSHKM_Gue_DZE","UAZ_MG_TK_EP1_DZE","Pickup_PK_GUE_DZE","Pickup_PK_INS_DZE","Pickup_PK_TK_GUE_EP1_DZE"]; +armed_chopper = ["CH_47F_EP1_DZE","UH1H_DZE","Mi17_DZE","UH60M_EP1_DZE","UH1Y_DZE","MH60S_DZE"]; +civil_chopper = ["AH6X_DZ","BAF_Merlin_DZE","MH6J_DZ","Mi17_Civilian_DZ"]; +military_unarmed = ["GAZ_Vodnik_MedEvac_DZE","HMMWV_Ambulance_DZE","HMMWV_Ambulance_CZ_DES_EP1_DZE","HMMWV_DES_EP1_DZE","HMMWV_DZ","HMMWV_M1035_DES_EP1_DZE","LandRover_CZ_EP1_DZE","LandRover_TK_CIV_EP1_DZE","UAZ_CDF_DZE","UAZ_INS_DZE","UAZ_RU_DZE","UAZ_Unarmed_TK_CIV_EP1_DZE","UAZ_Unarmed_TK_EP1_DZE","UAZ_Unarmed_UN_EP1_DZE"]; +cargo_trucks = ["Kamaz_DZE","MTVR_DES_EP1_DZE","Ural_INS_DZE","Ural_CDF_DZE","Ural_TK_CIV_EP1_DZE","Ural_UN_EP1_DZE","V3S_Open_TK_CIV_EP1_DZE","V3S_Open_TK_EP1_DZE"]; +refuel_trucks = ["KamazRefuel_DZ","MtvrRefuel_DES_EP1_DZ","UralRefuel_TK_EP1_DZ","V3S_Refuel_TK_GUE_EP1_DZ"]; +civil_vehicles = ["hilux1_civil_1_open_DZE","hilux1_civil_2_covered_DZE","hilux1_civil_3_open_DZE","SUV_Blue","SUV_Camo","SUV_Charcoal","SUV_Green","SUV_Orange","SUV_Pink","SUV_Red","SUV_Silver","SUV_TK_CIV_EP1_DZE","SUV_White","SUV_Yellow"]; + +// Dynamic crate array +crates_large = ["USVehicleBox","RUVehicleBox","TKVehicleBox_EP1"]; +crates_medium = ["USBasicWeaponsBox","RUBasicWeaponsBox","USSpecialWeaponsBox","USSpecialWeapons_EP1","RUSpecialWeaponsBox","SpecialWeaponsBox","TKSpecialWeapons_EP1","UNBasicWeapons_EP1"]; +crates_small = ["GuerillaCacheBox","RULaunchersBox","RUBasicAmmunitionBox","RUOrdnanceBox","USBasicAmmunitionBox","USLaunchersBox","USOrdnanceBox","USOrdnanceBox_EP1","USLaunchers_EP1","USBasicWeapons_EP1","USBasicAmmunitionBox_EP1","UNBasicAmmunitionBox_EP1","TKOrdnanceBox_EP1","TKLaunchers_EP1","TKBasicAmmunitionBox_EP1","GuerillaCacheBox_EP1","GERBasicWeapons_EP1"]; + +// Crate Arrays +crate_weapons_buildables = ["ChainSaw","ChainSawB","ChainSawG","ChainSawP","ChainSawR"]; +crate_tools = ["ItemKeyKit","Binocular","Binocular_Vector","ItemCompass","ItemCrowbar","ItemEtool","ItemFishingPole","ItemFlashlightRed","ItemGPS","ItemHatchet","ItemKnife","ItemMachete","ItemMatchbox","ItemToolbox","NVGoggles"]; +crate_tools_buildable = ["ItemToolbox","ItemEtool","ItemCrowbar","ItemKnife"]; +crate_tools_sniper = ["ItemCompass","Binocular","Binocular_Vector","NVGoggles","ItemGPS"]; +crate_items_misc = ["ItemGoldBar","ItemGoldBar10oz"]; +crate_items_high_value = ["ItemBriefcase100oz","ItemVault","plot_pole_kit","ItemHotwireKit"]; +crate_items_food = ["ItemWaterbottle","FoodNutmix","FoodPistachio","FoodMRE","ItemSodaOrangeSherbet","ItemSodaRbull","ItemSodaR4z0r","ItemSodaMdew","ItemSodaPepsi","ItemSodaCoke","FoodbaconCooked","FoodCanBakedBeans","FoodCanFrankBeans","FoodCanPasta","FoodCanSardines","FoodchickenCooked","FoodmuttonCooked","FoodrabbitCooked","FishCookedTrout","FishCookedTuna","FishCookedSeaBass"]; +crate_items_buildables = ["forest_large_net_kit","cinder_garage_kit",["PartPlywoodPack",5],"ItemSandbagExLarge5X","park_bench_kit","ItemComboLock",["CinderBlocks",10],"ItemCanvas","ItemComboLock",["ItemLightBulb",5],"ItemLockbox",["ItemSandbag",10],["ItemTankTrap",10],["ItemWire",10],["MortarBucket",10],["PartPlankPack",5],"PartWoodPile"]; +crate_items_vehicle_repair = ["PartEngine","PartFueltank","PartGeneric","PartGlass","PartVRotor","PartWheel"]; +crate_items_medical = ["ItemWaterbottle","ItemAntibiotic","ItemBloodbag","ItemEpinephrine","ItemHeatPack","ItemMorphine","ItemBandage","FoodCanFrankBeans","FoodCanPasta"]; +crate_items_chainbullets = ["2000Rnd_762x51_M134","200Rnd_762x51_M240","100Rnd_127x99_M2","150Rnd_127x107_DSHKM"]; +crate_items_sniper = [["ItemPainkiller",5],"Skin_Sniper1_DZ","Skin_CZ_Soldier_Sniper_EP1_DZ","Skin_GUE_Soldier_Sniper_DZ"]; +crate_items_president = ["ItemDocument","ItemGoldBar10oz"]; +crate_items_gems = ["ItemRuby","ItemCitrine","ItemEmerald","ItemAmethyst","ItemSapphire","ItemObsidian","ItemTopaz"]; +crate_items_crop_raider = ["ItemKiloHemp"]; +crate_items_wood = [["ItemWoodFloorQuarter",5],["ItemWoodStairs",2],["ItemWoodLadder",2],["ItemWoodWallThird",5],"ItemWoodWallGarageDoor",["ItemWoodWallLg",3],"ItemWoodWallWithDoorLg","wood_ramp_kit"]; +crate_backpacks_all = ["Patrol_Pack_DZE1","GymBag_Camo_DZE1","GymBag_Green_DZE1","Czech_Vest_Pouch_DZE1","Assault_Pack_DZE1","TerminalPack_DZE1","TinyPack_DZE1","ALICE_Pack_DZE1","TK_Assault_Pack_DZE1","School_Bag_DZE1","CompactPack_DZE1","British_ACU_DZE1","GunBag_DZE1","PartyPack_DZE1","NightPack_DZE1","SurvivorPack_DZE1","AirwavesPack_DZE1","CzechBackpack_DZE1","CzechBackpack_Camping_DZE1","CzechBackpack_OD_DZE1","CzechBackpack_DES_DZE1","CzechBackpack_3DES_DZE1","CzechBackpack_WDL_DZE1","CzechBackpack_MAR_DZE1","CzechBackpack_DMAR_DZE1","CzechBackpack_UCP_DZE1","CzechBackpack_6DES_DZE1","CzechBackpack_TAK_DZE1","CzechBackpack_NVG_DZE1","CzechBackpack_BLK_DZE1","CzechBackpack_DPM_DZE1","CzechBackpack_FIN_DZE1","CzechBackpack_MTC_DZE1","CzechBackpack_NOR_DZE1","CzechBackpack_WIN_DZE1","CzechBackpack_ATC_DZE1","CzechBackpack_MTL_DZE1","CzechBackpack_FTN_DZE1","WandererBackpack_DZE1","LegendBackpack_DZE1","CoyoteBackpack_DZE1","CoyoteBackpackDes_DZE1","CoyoteBackpackWdl_DZE1","CoyoteBackpack_Camping_DZE1","LargeGunBag_DZE1"]; +crate_backpacks_large = ["CzechBackpack_DZE1","CzechBackpack_Camping_DZE1","CzechBackpack_OD_DZE1","CzechBackpack_DES_DZE1","CzechBackpack_3DES_DZE1","CzechBackpack_WDL_DZE1","CzechBackpack_MAR_DZE1","CzechBackpack_DMAR_DZE1","CzechBackpack_UCP_DZE1","CzechBackpack_6DES_DZE1","CzechBackpack_TAK_DZE1","CzechBackpack_NVG_DZE1","CzechBackpack_BLK_DZE1","CzechBackpack_DPM_DZE1","CzechBackpack_FIN_DZE1","CzechBackpack_MTC_DZE1","CzechBackpack_NOR_DZE1","CzechBackpack_WIN_DZE1","CzechBackpack_ATC_DZE1","CzechBackpack_MTL_DZE1","CzechBackpack_FTN_DZE1","WandererBackpack_DZE1","LegendBackpack_DZE1","CoyoteBackpack_DZE1","CoyoteBackpackDes_DZE1","CoyoteBackpackWdl_DZE1","CoyoteBackpack_Camping_DZE1","LargeGunBag_DZE1"]; + +// Random Items // By default, most of the mission crates spawn items out of the list of arrays below. You can remove or add any array entries in the list. +crate_items_random = [crate_items_food,crate_items_vehicle_repair,crate_items_medical,crate_items_chainbullets,crate_items_crop_raider,crate_items_misc]; + +/* END WAI MISSIONS CONFIG */ + +/* AUTO-CLAIM CONFIG */ + +use_wai_autoclaim = false; // Turn on the auto-claim feature. You should increase wai_avoid_missions to more than the distance below +ac_alert_distance = 1000; // Distance from the mission that auto-claim uses to alert closest player +ac_delay_time = 30; // Time that the auto-claim waits until it declares a claim and places a marker - time in seconds +ac_timeout = 60; // If the claimer leaves the mission area he/she has this much time to return - time in seconds + +/* END AUTO-CLAIM CONFIG */ + +/* STATIC MISSIONS CONFIG */ + +wai_static_missions = false; // use static mission file +wai_custom_per_world = true; // use a custom mission file per world + +/* END STATIC MISSIONS CONFIG */ + +WAIconfigloaded = true; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/configs/blacklist.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/configs/blacklist.sqf new file mode 100755 index 0000000..07d3b69 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/configs/blacklist.sqf @@ -0,0 +1,17 @@ + +wai_blacklist = call { + if (toLower worldName == "chernarus") exitWith {[ + [[0,16000,0],[1000,-0,0]], // Left edge of map + [[0,16000,0],[16000.0,14580.3,0]] // Top edge of map + ];}; + if (toLower worldName == "panthera2") exitWith {[ + [[235,686,0],[758,160,0]] // Debug Island + ];}; + []; +}; + +if (count wai_blacklist > 0) then { + diag_log "WAI: blacklist Loaded"; +} else { + diag_log "WAI: You are on an unsupported map! No blacklist available."; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/configs/mission_loot.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/configs/mission_loot.sqf new file mode 100755 index 0000000..ef82bc9 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/configs/mission_loot.sqf @@ -0,0 +1,137 @@ +// This file contains loot array definitions per mission +// Array format [long guns, tools, items, pistols, backpacks] - Either a number or a custom array. +// First array is for Hero missions, second is for bandit missions. Change the values to preferences. +// [[Hero Loot Array], +// [Bandit Loot Array]] + +/***** Easy Missions *****/ +Loot_UralAttack = [ + [4,8,36,3,1], // Hero + [4,8,36,3,1] // Bandit +]; +Loot_Farmer = [ + [6,5,[40,crate_items_medical],3,1], // Hero + [6,5,[40,crate_items_medical],3,1] // Bandit +]; +Loot_MediCamp = [ + [0,0,[70,crate_items_medical],3,1], // Hero + [0,0,[70,crate_items_medical],3,1] // Bandit +]; +Loot_Outpost = [ + [6,4,40,2,1], // Hero + [6,4,40,2,1] // Bandit +]; +Loot_ScoutPatrol = [ + [4,8,36,2,1], // Hero + [4,8,36,2,1] // Bandit +]; +Loot_SlaughterHouse = [ + [6,5,[6,crate_items_chainbullets],2,1], // Hero + [6,5,[6,crate_items_chainbullets],2,1] // Bandit +]; + +/***** Medium Missions *****/ +Loot_AbandonedTrader = [ + [8,5,15,3,1], // Hero + [8,5,15,3,1] // Bandit +]; +Loot_ArmedVehicle = [ + [0,0,[25,crate_items_chainbullets],0,1], // Hero + [0,0,[25,crate_items_chainbullets],0,1] // Bandit +]; +Loot_BHC = [ // Black Hawk Crash + [5,5,10,3,1], // Hero + [5,5,10,3,1] // Bandit +]; +Loot_DrugBust = [ + [5,5,[10,crate_items_crop_raider],3,1], // Hero + [5,5,[10,crate_items_crop_raider],3,1] // Bandit +]; +Loot_Junkyard = [ + [14,5,1,3,1], // Hero + [14,5,1,3,1] // Bandit +]; +Loot_Patrol = [ + [3,0,[2,["ItemBriefcase100oz"]],0,1], // Hero + [3,0,[2,["ItemBriefcase100oz"]],0,1] // Bandit +]; +Loot_VehicleDrop = [ + [3,0,[2,["ItemBriefcase100oz"]],0,1], // Hero + [3,0,[2,["ItemBriefcase100oz"]],0,1] // Bandit +]; +Loot_WeaponCache = [ + [10,4,0,3,1], // Hero + [10,4,0,3,1] // Bandit +]; + +/***** Hard Missions *****/ +Loot_ArmyBase = [ + [10,5,10,3,2], // Hero + [10,5,10,3,2] // Bandit +]; +Loot_Base = [ + [[16,ai_wep_sniper],[8,crate_tools_sniper],[3,crate_items_high_value],3,[4,crate_backpacks_large]], // Hero + [[16,ai_wep_sniper],[8,crate_tools_sniper],[3,crate_items_high_value],3,[4,crate_backpacks_large]] // Bandit +]; +Loot_CannibalCave = [ + [10,8,[2,crate_items_high_value],3,[2,crate_backpacks_large]], // Hero + [10,8,[2,crate_items_high_value],3,[2,crate_backpacks_large]] // Bandit +]; +Loot_CapturedMV22 = [ + [0,0,[80,crate_items_medical],3,1], // Hero + [0,0,[80,crate_items_medical],3,1] // Bandit +]; +Loot_CropRaider = [ + [6,5,[15,crate_items_crop_raider],3,3], // Hero + [6,5,[15,crate_items_crop_raider],3,3] // Bandit +]; +Loot_DronePilot = [ + [14,[8,crate_tools_sniper],[2,crate_items_high_value],3,[2,crate_backpacks_large]], // Hero + [14,[8,crate_tools_sniper],[2,crate_items_high_value],3,[2,crate_backpacks_large]] // Bandit +]; +Loot_GemTower = [ + [8,5,[4,crate_items_gems],3,2], // Hero + [8,5,[4,crate_items_gems],3,2] // Bandit +]; +Loot_IkeaConvoy = [ + [[1,crate_weapons_buildables],[4,crate_tools_buildable],[30,crate_items_buildables],3,4], // Hero + [[1,crate_weapons_buildables],[4,crate_tools_buildable],[30,crate_items_buildables],3,4] // Bandit +]; +Loot_LumberJack = [ + [6,[8,crate_tools_sniper],[15,crate_items_wood],3,[4,crate_backpacks_large]], // Hero + [6,[8,crate_tools_sniper],[15,crate_items_wood],3,[4,crate_backpacks_large]] // Bandit +]; +Loot_MacDonald = [ + [9,5,[15,crate_items_crop_raider],3,2], // Hero + [9,5,[15,crate_items_crop_raider],3,2] // Bandit +]; +Loot_Radioshack = [ + [10,5,30,3,2], // Hero + [10,5,30,3,2] // Bandit +]; +Loot_Extraction = [ + [[10,ai_wep_sniper],[4,crate_tools_sniper],[4,crate_items_sniper],3,2], // Hero + [[10,ai_wep_sniper],[4,crate_tools_sniper],[4,crate_items_sniper],3,2] // Bandit +]; +Loot_TankColumn = [ + [12,5,30,3,2], // Hero + [12,5,30,3,2] // Bandit +]; + +/***** Extreme Missions *****/ +Loot_Firestation1 = [ // Fire Station Crate 1 + [0,0,[4,crate_items_high_value],0,1], // Hero + [0,0,[4,crate_items_high_value],0,1] // Bandit +]; +Loot_Firestation2 = [ // Fire Station Crate 2 + [[10,ai_wep_sniper],3,20,3,1], // Hero + [[10,ai_wep_sniper],3,20,3,1] // Bandit +]; +Loot_Mayors = [ + [10,5,[4,crate_items_high_value],3,[2,crate_backpacks_large]], // Hero + [10,5,[4,crate_items_high_value],3,[2,crate_backpacks_large]] // Bandit +]; +Loot_Presidents = [ + [0,0,[40,crate_items_president],0,1], // Hero + [0,0,[40,crate_items_president],0,1] // Bandit +]; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/configs/overwatch.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/configs/overwatch.sqf new file mode 100755 index 0000000..3189fd8 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/configs/overwatch.sqf @@ -0,0 +1,24 @@ +// This file is not loaded unless the OverWatch mod is detected. + +// OverWatch Weapons +ai_wep_owpistol = ["RH_m9","RH_m9c","RH_m93r","RH_M9sd","RH_m9csd","RH_browninghp","vil_B_HP","RH_anac","RH_anacg","RH_python","RH_deagle","RH_Deagleg","RH_Deaglem","RH_Deaglemzb","RH_Deaglemz","RH_Deagles","vil_Glock","RH_g17","vil_Glock_o","RH_g17sd","RH_g18","RH_g19","RH_g19t","RH_tec9","RH_m1911","RH_m1911sd","RH_m1911old","RH_mk22","RH_mk22sd","RH_mk22v","RH_mk22vsd","RH_p38","RH_ppk","RH_mk2","RH_p226","RH_p226s","RH_bull","RH_tt33","RH_usp","RH_uspm","RH_uspsd","vil_USP45","vil_USP45SD","vil_USP","vil_USPSD","RH_vz61"]; // Overwatch Pistol Variants +ai_wep_owak = ["vil_AEK2","vil_AEK_GL","vil_AeK_3","vil_AeK_23","vil_AeK_3_K","vil_AK_105","Vil_AK_105_c","vil_AK_101","vil_AK_103","vil_AK_107","Vil_AK_107_c","vil_ak12","vil_ak12_ap","vil_ak12_gp","vil_AK_47","vil_AK_47_49","vil_AK_47_m1","vil_AK_47","vil_AK_74_N","vil_AK_74P","vil_AK_74m","vil_AK_74m_p29","vil_AK_74m_EOT_Alfa","vil_AK_74m_gp_29","vil_AK_74m_gp","vil_AK_74m_EOT","vil_AK_74m_EOT_FSB","vil_AK_74m_EOT_FSB_60","vil_AK_74m_EOT_FSB_45","vil_AK_74m_c","vil_AK_74m_k","vil_AK_74m_PSO","vil_AKM","vil_AKM_GL","vil_AKMS","vil_AKMS_GP25","vil_AKMSB","vil_AKS_47","vil_AKS_74","vil_AKS_74_gp","vil_AKS_74p_gp","vil_AKS_74p","vil_AKS_74p_45","vil_AKs_74_u","vil_AKs_74_u45","Vil_AKS_74_UB","Vil_AKS_74_UN_kobra","vil_AMD63","vil_AMD","vil_Abakan","vil_Abakan_P29","vil_Abakan_gp","vil_AK_nato_m1","vil_ASH82","vil_MPi","vil_PMI74S","vil_PMI","vil_PMIS","vil_type88_1","vil_M64","vil_M70","vil_M70B","vil_AK_nato_m80"]; // Overwatch AK Variants +ai_wep_owspare = ["vil_Galil","vil_Galil_arm","vil_SKS","gms_k98","gms_k98_knife","gms_k98_rg","gms_k98zf39"]; +ai_wep_owacrsd = ["FHQ_ACR_BLK_CCO_GL_SD","FHQ_ACR_TAN_CCO_GL_SD","FHQ_ACR_SNW_CCO_GL_SD","FHQ_ACR_WDL_CCO_GL_SD","FHQ_ACR_BLK_CCO_SD","FHQ_ACR_TAN_CCO_SD","FHQ_ACR_SNW_CCO_SD","FHQ_ACR_WDL_CCO_SD","FHQ_ACR_BLK_G33_GL_SD","FHQ_ACR_TAN_G33_GL_SD","FHQ_ACR_SNW_G33_GL_SD","FHQ_ACR_WDL_G33_GL_SD","FHQ_ACR_BLK_G33_SD","FHQ_ACR_TAN_G33_SD","FHQ_ACR_SNW_G33_SD","FHQ_ACR_WDL_G33_SD","FHQ_ACR_BLK_HAMR_GL_SD","FHQ_ACR_TAN_HAMR_GL_SD","FHQ_ACR_SNW_HAMR_GL_SD","FHQ_ACR_WDL_HAMR_GL_SD","FHQ_ACR_BLK_HAMR_SD","FHQ_ACR_TAN_HAMR_SD","FHQ_ACR_SNW_HAMR_SD","FHQ_ACR_WDL_HAMR_SD","FHQ_ACR_BLK_HWS_GL_SD","FHQ_ACR_TAN_HWS_GL_SD","FHQ_ACR_SNW_HWS_GL_SD","FHQ_ACR_WDL_HWS_GL_SD","FHQ_ACR_BLK_HWS_SD","FHQ_ACR_TAN_HWS_SD","FHQ_ACR_SNW_HWS_SD","FHQ_ACR_WDL_HWS_SD","FHQ_ACR_BLK_IRN_GL_SD","FHQ_ACR_TAN_IRN_GL_SD","FHQ_ACR_SNW_IRN_GL_SD","FHQ_ACR_WDL_IRN_GL_SD","FHQ_ACR_BLK_RCO_GL_SD","FHQ_ACR_TAN_RCO_GL_SD","FHQ_ACR_SNW_RCO_GL_SD","FHQ_ACR_WDL_RCO_GL_SD","FHQ_ACR_BLK_RCO_SD","FHQ_ACR_TAN_RCO_SD","FHQ_ACR_SNW_RCO_SD","FHQ_ACR_WDL_RCO_SD","FHQ_ACR_BLK_IRN_SD","FHQ_ACR_TAN_IRN_SD","FHQ_ACR_SNW_IRN_SD","FHQ_ACR_WDL_IRN_SD"]; // Overwatch ACRSD Variants +ai_wep_owacr = ["FHQ_ACR_BLK_IRN","FHQ_ACR_TAN_IRN","FHQ_ACR_SNW_IRN","FHQ_ACR_WDL_IRN","FHQ_ACR_BLK_CCO","FHQ_ACR_TAN_CCO","FHQ_ACR_SNW_CCO","FHQ_ACR_WDL_CCO","FHQ_ACR_BLK_CCO_GL","FHQ_ACR_TAN_CCO_GL","FHQ_ACR_SNW_CCO_GL","FHQ_ACR_WDL_CCO_GL","FHQ_ACR_BLK_G33","FHQ_ACR_TAN_G33","FHQ_ACR_SNW_G33","FHQ_ACR_WDL_G33","FHQ_ACR_BLK_G33_GL","FHQ_ACR_TAN_G33_GL","FHQ_ACR_SNW_G33_GL","FHQ_ACR_WDL_G33_GL","FHQ_ACR_BLK_HAMR","FHQ_ACR_TAN_HAMR","FHQ_ACR_SNW_HAMR","FHQ_ACR_WDL_HAMR","FHQ_ACR_BLK_HAMR_GL","FHQ_ACR_TAN_HAMR_GL","FHQ_ACR_SNW_HAMR_GL","FHQ_ACR_WDL_HAMR_GL","FHQ_ACR_BLK_HWS","FHQ_ACR_TAN_HWS","FHQ_ACR_SNW_HWS","FHQ_ACR_WDL_HWS","FHQ_ACR_BLK_HWS_GL","FHQ_ACR_TAN_HWS_GL","FHQ_ACR_SNW_HWS_GL","FHQ_ACR_WDL_HWS_GL","FHQ_ACR_BLK_IRN_GL","FHQ_ACR_TAN_IRN_GL","FHQ_ACR_SNW_IRN_GL","FHQ_ACR_WDL_IRN_GL","FHQ_ACR_BLK_RCO","FHQ_ACR_TAN_RCO","FHQ_ACR_SNW_RCO","FHQ_ACR_WDL_RCO","FHQ_ACR_BLK_RCO_GL","FHQ_ACR_TAN_RCO_GL","FHQ_ACR_SNW_RCO_GL","FHQ_ACR_WDL_RCO_GL"]; // Overwatch ACR Variants +ai_wep_owscar = ["SCAR_L_CQC_CCO_SD","SCAR_L_CQC","SCAR_L_CQC_Holo","SCAR_L_CQC_EGLM_Holo","SCAR_L_STD_EGLM_RCO","SCAR_L_STD_HOLO","SCAR_L_STD_Mk4CQT","SCAR_H_CQC_CCO","SCAR_H_CQC_CCO_SD","SCAR_H_STD_EGLM_Spect","SCAR_H_LNG_Sniper","SCAR_H_LNG_Sniper_SD"]; // Overwatch SCAR Variants +ai_wep_owsmg = ["vil_9a91","vil_9a91_c","vil_9a91_csd","vil_VAL","vil_VAL_C","vil_Groza_HG","vil_Groza_GL","vil_Groza_SC","vil_Groza_SD","vil_Vikhr","vil_vsk94","vil_MP5_EOTech","vil_MP5SD_EOTech","vil_uzimini","vil_uzimini_SD","vil_uzi","vil_uzi_c","vil_uzi_SD"]; // Overwatch SMG Variants +ai_wep_owsniper = ["USSR_cheytacM200","USSR_cheytacM200_sd","vil_SVD_63","vil_SVD_N","vil_SVD_M","vil_SVD_P21","vil_SVD_S","FHQ_MSR_DESERT","FHQ_MSR_NV_DESERT","FHQ_MSR_NV_SD_DESERT","FHQ_MSR_SD_DESERT","FHQ_RSASS_TAN","FHQ_RSASS_SD_TAN","vil_SV_98_69","vil_SV_98","vil_SV_98_SD","vil_SVDK","FHQ_XM2010_DESERT","FHQ_XM2010_NV_DESERT","FHQ_XM2010_NV_SD_DESERT","FHQ_XM2010_SD_DESERT"]; // Overwatch Sniper Variants +ai_wep_owtar = ["RH_ctar21","RH_ctar21glacog","RH_ctar21m","RH_ctar21mgl","RH_star21"]; // Overwatch TAR Variants +ai_wep_owg3 = ["vil_AG3","vil_G3a2","vil_G3a3","vil_G3an","vil_G3anb","vil_G3SG1","vil_G3sg1b","vil_G3TGS","vil_G3TGSb","vil_G3ZF","vil_G3zfb","vil_G3a4","vil_G3a4b"]; // Overwatch G3 Variants +ai_wep_owmas = ["RH_masacog","RH_masaim","RH_masbaim","RH_masb","RH_masbeotech","RH_mas","RH_massd","RH_massdacog","RH_masbsdacog","RH_massdaim","RH_masbsdaim","RH_masbsd","RH_massdeotech","RH_masbsdeotech"]; // Overwatch MAS Variants +ai_wep_owlmg = ["vil_RPK75_Romania","vil_M240_B","vil_M249_Para","skavil_M60","skavil_M60e3","vil_Mg3","vil_MG4","vil_MG4E","vil_PKP","vil_PKP_EOT","vil_PK","vil_PKM","vil_RPD","vil_RPK","vil_RPK75","vil_RPK74","vil_RPK74M","vil_RPK74M_P29","vil_RPK75_M72","vil_zastava_m84"]; // Overwatch LMG Variants +ai_wep_owhk417 = ["RH_hk417","RH_hk417acog","RH_hk417aim","RH_hk417s","RH_hk417sacog","RH_hk417saim","RH_hk417seotech","RH_hk417eotech","RH_hk417sd","RH_hk417sdacog","RH_hk417sdaim","RH_hk417sdeotech","RH_hk417sdsp","RH_hk417sp","RH_hk417sglacog","RH_hk417sgl","RH_hk417sglaim","RH_hk417sgleotech"]; // Overwatch HK417 Variants +ai_wep_owhk416 = ["RH_hk416","RH_hk416glacog","RH_hk416gl","RH_hk416aim","RH_hk416glaim","RH_hk416s","RH_hk416sacog","RH_hk416sglacog","RH_hk416saim","RH_hk416sglaim","RH_hk416seotech","RH_hk416sgleotech","RH_hk416sgl","RH_hk416eotech","RH_hk416gleotech","RH_hk416sd","RH_hk416sdgl","RH_hk416sdglaim","RH_hk416sdeotech","RH_hk416sdgleotech"]; // Overwatch HK416 +ai_wep_owg36 = ["vil_AG36KA4","vil_AG36KV","vil_G36KSKdes","vil_G36KA4","vil_G36KSKES","vil_G36KSKdesES","vil_G36KES","vil_G36KVZ","vil_G36KSK","vil_G36VA4Eot","vil_G36KV3","vil_G36KVA4","vil_G36KV3Des","vil_G36VA4","vil_AG36","vil_G36a2","vil_AG36A2","vil_G36CC","vil_G36E"]; // Overwatch G36 Variants +ai_wep_owdmr = ["vil_HK417s","vil_M110","vil_M110sd","RH_m14","vil_M14G","RH_m14acog","RH_m14aim","RH_m14eot","RH_m1s","RH_m1sacog","RH_m1saim","RH_m1seot","RH_m1sshd","RH_m1ssp","RH_m1st","RH_m1stacog","RH_m1staim","RH_m1steot","RH_m1stshd","RH_m1stsp","RH_m21","vil_M21G","RH_sc2","RH_sc2acog","RH_sc2aim","RH_sc2eot","RH_sc2shd","RH_sc2sp","vil_SR25","vil_SR25SD"]; // Overwatch DMR Variants + +//This will overwrite the variable of the same name in config.sqf +ai_wep_random = [ai_wep_g36,ai_wep_m16,ai_wep_m4,ai_wep_sa58,ai_wep_l85,ai_wep_ak,ai_wep_sniper,ai_wep_machine,ai_wep_owacr,ai_wep_owak,ai_wep_owspare,ai_wep_owacrsd,ai_wep_owscar,ai_wep_owsmg,ai_wep_owsniper,ai_wep_owtar,ai_wep_owg3,ai_wep_owmas,ai_wep_owlmg,ai_wep_owhk417,ai_wep_owhk416,ai_wep_owg36,ai_wep_owdmr]; + +diag_log "WAI: Overpoch Config File Loaded"; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/configs/spawnpoints.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/configs/spawnpoints.sqf new file mode 100755 index 0000000..3fd733e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/configs/spawnpoints.sqf @@ -0,0 +1,17 @@ +//Arrays of static spawn points per map. You can make your own and replace the existing arrays or just use the defaults. Credit to Ghost, wangtangnoodle, insertcoins, and Turtle II for the default lists. + +WAI_StaticSpawnPoints = call { + if (toLower worldName == "chernarus") exitWith {[[2315.2148,15179.237,0],[2034.8972,14867.109,0],[1136.8536,13931.276,0],[745.72626,13880.461,0],[911.83875,11722.225,0],[2125.1941,10001.5,0],[3642.5815,10292.05,0],[3549.0779,10795.242,0],[4228.2466,10887.752,0],[4090.2322,12586.081,0],[5051.5288,12193.906,0],[7481.916,11562.017,0],[7820.6787,12229.655,0],[8744.8828,12126.147,0],[7408.8931,10712.544,0],[6519.4805,10065.726,0],[5616.6147,10470.094,0],[5066.2383,9286.0625,0],[4138.042,8451.6992,0],[3170.6245,8739.9209,0],[1829.6603,9077.0391,0],[666.38519,9072.5488,0],[1149.8843,10041.044,0],[1185.6119,7592.9346,0],[1208.455,7268.876,0],[2023.7113,5156.7163,0],[3389.3542,5481.0542,0],[4014.0342,5008.3809,0],[1263.1393,4050.5845,0],[928.5365,4499.2109,0],[1765.6619,2875.209,0],[588.56793,1742.9539,0],[818.94293,1898.2073,0],[931.29138,1918.5309,0],[1054.7959,2100.2092,0],[1155.8798,2454.1226,0],[3775.5457,2344.1062,0],[4118.2251,2709.4705,0],[3871.1636,2932.7244,0],[10726.093,8485.4043,0],[10638.246,8677.1592,0],[10572.22,8272.7285,0],[10413.141,8548.5127,0],[10137.179,8717.9033,0],[12630.659,10715.519,0],[13153.437,10668.231,0],[13285.988,10832.267,0],[11891.729,10164.585,0],[12597.392,11007.923,0],[11654.682,13023.149,0],[12338.97,13102.951,0],[13167.36,13996.417,0],[12507.794,13411.979,0],[9772.3174,13278.829,0],[9510.8027,13025.555,0],[8603.2617,12678.364,0],[9332.6992,11238.551,0],[9595.0928,11562.552,0],[9648.9775,11372.09,0],[9519.7236,11230.885,0],[8749.2764,11321.549,0],[8361.9668,9625.4395,0],[8462.2813,9494.8428,0],[8159.6958,9116.4424,0],[8511.0576,9277.6738,0],[8296.3027,9604.3945,0],[9105.5313,9200.832,0],[9581.2051,8596.0859,0],[10122.082,8372.3154,0],[10034.702,7821.2451,0],[10502.62,8367.4473,0],[10335.994,8735.6133,0],[11156.9,8183.3359,0],[12629.327,9090.8232,0],[10391.006,10062.487,0],[10011.696,10463.047,0],[9110.25,11130.945,0],[5914.1826,8742.8848,0],[5665.6929,8697.7354,0],[5576.3481,9000.5215,0],[5861.644,9098.9229,0],[5962.8232,9192.7422,0],[4650.7476,8899.9502,0],[4661.7236,8675.4209,0],[4676.4194,8409.9648,0],[4836.6548,8357.4795,0],[5074.4976,8182.6538,0],[4881.5156,8095.6714,0],[4817.1865,7920.2339,0],[4968.1362,7598.2017,0],[4603.041,7209.0269,0],[4966.1533,7116.8311,0],[7567.1606,7693.5176,0],[7490.8608,7758.4053,0],[7392.9771,7879.1016,0],[7637.2998,8223.8232,0],[7850.4331,8405.8115,0],[7149.0825,8416.0391,0],[7381.6162,8395.9668,0],[8447.7979,6419.4663,0],[7939.2104,7043.3164,0],[8125.3613,7096.6729,0],[7975.0132,7298.4292,0],[7920.1343,5040.4434,0],[7111.1099,5297.0952,0],[6602.5913,5825.9946,0],[6976.853,5738.3608,0],[9380.4893,3987.0256,0],[9314.9238,3156.7678,0],[9109.6533,3614.4863,0],[11374.832,5139.9717,0],[8364.9404,6373.4746,0],[6288.5107,6804.6499,0],[7472.5894,7363.6396,0],[5814.064,7066.8945,0],[3434.1602,7339.4805,0],[3453.0798,7631.2949,0],[3680.7061,7532.3262,0],[3811.5032,7905.4644,0],[3904.8708,7859.3604,0],[4062.3577,7778.5161,0],[4062.3484,7554.5947,0],[2245.8286,6359.3965,0],[2302.4844,6438.3823,0],[3092.3279,5024.8696,0],[5357.5059,5600.9946,0],[5375.4058,5534.5254,0],[5166.1836,5451.188,0],[5051.8457,5414.7148,0],[4751.3857,5799.562,0],[4269.2529,5819.4082,0],[6957.7144,9062.6484,0],[7221.1382,9593.4414,0],[9683.207,13157.512,0],[7301.0864,14128.222,0],[6570.2056,14180.351,0],[4073.6899,14321.525,0],[3989.1885,14205.112,0],[3665.6892,14147.45,0],[3530.3381,14185.913,0],[3872.2158,13965.956,0],[2361.5791,14400.329,0],[2270.1758,14427.65,0],[1760.4128,14390.701,0],[1349.2067,14210.083,0],[1955.0796,12159.005,0],[1960.6328,12052.165,0],[1876.3234,11917.344,0],[2106.8196,11698.755,0],[2137.7456,11544.056,0],[2003.073,11361.028,0],[1564.8004,12276.568,0],[1604.9144,11827.849,0],[2122.0349,10775.484,0],[2013.4841,10837.875,0],[2241.5115,10658.142,0],[2094.0239,10229.329,0],[1974.8375,10043.21,0],[2023.036,9823.6064,0],[2447.8059,10084.295,0],[3143.656,9893.0791,0],[3163.4072,9560.0137,0],[3834.2388,9424.3389,0],[3678.168,9271.7686,0],[3363.8767,8972.5723,0],[2862.8721,8892.9092,0],[3010.3855,8326.7939,0],[3779.0566,7158.1519,0],[3495.4697,6889.6953,0],[3800.6726,6458.8081,0],[3886.4224,6325.9082,0],[1577.9609,5259.3638,0],[1710.3683,5240.3647,0],[1106.187,4099.645,0],[1105.8212,3849.4121,0],[1925.785,3677.0349,0],[2085.3259,4090.1401,0],[2129.7263,4005.2168,0],[4800.335,4762.8008,0],[5322.5771,3909.843,0],[7307.1196,3553.6597,0],[7388.2456,3587.4631,0],[6183.165,3423.5884,0],[5741.7817,2534.0767,0],[11133.82,7755.4043,0],[9734.1826,8558.2549,0],[10328.362,9303.9141,0],[10030.727,9582.373,0],[8875.166,6307.7915,0],[8826.8467,6351.5044,0],[8898.6836,6075.4814,0]];}; + if (toLower worldName == "namalsk") exitWith {[[5694.7422,9735.0088,0],[5257.6714,9697.6172,0],[4734.0674,9685.1377,0],[4686.8013,10009.813,0],[4608.6709,8793.2949,0],[4750.8789,8555.2285,0],[4671.8418,8461.4121,0],[4458.1733,8186.7363,0],[4241.3208,7866.7007,0],[4119.4351,7797.3696,0],[3672.6697,7347.4473,0],[3566.9326,6722.7559,0],[2995.8936,6491.207,0],[2950.6365,7067.709,0],[2806.1296,7140.3394,0],[3398.8364,7579.0605,0],[3767.634,8212.9287,0],[4176.7451,8882.2705,0],[5731.2568,9150.1387,0],[5619.7671,8961.2285,0],[5778.8052,8924.3945,0],[6102.3057,8871.5938,0],[6263.8555,9167.0938,0],[6230.063,9413.8408,0],[6449.8423,9382.7461,0],[6760.2236,9763,0],[6710.8604,10024.153,0],[6792.9253,10448.229,0],[7146.6631,10382.157,0],[7106.1313,10030.694,0],[6915.0405,10653.699,0],[6997.3989,10759.526,0],[7184.4263,10832.728,0],[7361.6655,10811.895,0],[7467.5356,10978.44,0],[7526.293,11041.408,0],[7315.7197,11347.993,0],[7863.0259,11015.958,0],[7710.3706,10867.898,0],[8106.2061,10433.827,0],[8215.0527,10500.124,0],[8330.04,10486.904,0],[8321.1641,10329.293,0],[8488.9678,10186.375,0],[8547.3164,10201.034,0],[8778.5801,10092.499,0],[8743.6436,10021.151,0],[8721.6133,10801.674,0],[8584.6016,10931.59,0],[8255.1172,11409.87,0],[7867.5728,11587.896,0],[7614.1606,11738.618,0],[7084.0518,11738.484,0],[6663.3125,11822.851,0],[6140.3965,11331.512,0],[5864.6899,11520.505,0],[5545.6812,11015.343,0],[5419.6963,10884.508,0],[4907.4814,11129.93,0],[4933.5728,11239.489,0],[4754.4619,11088.833,0],[4542.6929,11083.031,0],[4415.5864,11005.668,0],[4517.0142,10748.262,0],[4588.4478,10837.465,0],[4665.4106,10572.597,0],[4958.7915,10523.558,0],[5981.498,10205.67,0],[7639.5293,10513.593,0],[5267.5093,7273.0762,0],[3858.3164,5846.5283,0],[4598.9023,4869.4395,0],[4097.873,4913.0923,0],[6893.5044,5631.9863,0],[7275.6709,5803.1626,0],[7462.5396,6012.6694,0],[7626.2808,6181.9351,0],[7930.5874,6767.0122,0],[7740.2852,7687.1406,0],[7981.6621,8172.8516,0],[7963.062,8359.7539,0],[8015.7192,8552.2021,0],[8005.2925,8919.8057,0],[7958.6343,9127.6533,0],[7764.8374,9388.873,0],[7426.5479,8917.6191,0],[7520.9658,8136.1108,0],[6638.0767,7602.3965,0],[6711.4531,6674.6348,0],[5173.8032,8985.9775,0]];}; + if (toLower worldName == "panthera") exitWith {[[4435.93,8071.75,0],[1030.03,9551.69,0],[930.673,9061.74,0],[1491.44,9572.38,0],[1562.03,9096.4,0],[267.176,9291.96,0],[2845.52,8866.83,0],[3943.96,8279.46,0],[3368.93,8265.15,0],[3917.03,8534.11,0],[3552.86,7557.49,0],[2124.54,7810.97,0],[2145.78,8263.46,0],[4567.75,8325.53,0],[2770.58,8382.55,0],[4417.76,8193.43,0],[5163.56,7207.6,0],[4362.6,7067.27,0],[4198.68,6843.87,0],[3568.99,7421.38,0],[5155.7,7026.86,0],[5621.15,7338.76,0],[5870.54,7458.46,0],[6308.14,6923.09,0],[6612.08,7328.04,0],[6520.65,6816.27,0],[7197.01,6603.67,0],[6601.09,6349.84,0],[6252.86,6492.12,0],[5430.65,6202.09,0],[4282.54,5748.07,0],[3693.54,6275.21,0],[2929.99,6617.1,0],[2525.27,6907.62,0],[2857.03,6306.39,0],[2730.79,6051.46,0],[3502.99,6184.52,0],[2877.16,5835.92,0],[2543.7,5550.64,0],[3597.79,5761.24,0],[2854.85,5235.78,0],[3025.27,5094,0],[2079.9,5292.15,0],[1871.81,5349.84,0],[3021.46,5093.51,0],[5271.79,5556.27,0],[5274.54,5605.86,0],[5444,5910.02,0],[5292.65,6033.41,0],[5810.14,6083.5,0],[5979.69,6286.04,0],[5822.74,5807.43,0],[5497.81,5297.88,0],[5162.58,5005.08,0],[4881.98,5456.88,0],[5141.12,5701.22,0],[4791.53,5118.6,0],[3808.88,4574.54,0],[3688.04,4951.01,0],[3475.83,4891.29,0],[3921.98,5258.26,0],[4406.96,5078.07,0],[4471.12,4671.73,0],[4845.97,4522.28,0],[5130.66,4358.67,0],[5274.59,4764.75,0],[5352.42,4849.34,0],[5632.63,4809.27,0],[5804.89,5077.89,0],[5751.52,5235.94,0],[5955,5425.15,0],[6213.71,5711.66,0],[6371.78,5696.09,0],[6649.13,5573.15,0],[6488.46,5418.48,0],[6363.09,5172.51,0],[6927.71,6244.37,0],[7188.78,6269.28,0],[7384.06,6397.56,0],[7664.77,6349.91,0],[7747.91,6586.65,0],[8410.92,6506.88,0],[8365.37,6320.81,0],[8288.31,6026.04,0],[8432.8,5885.54,0],[7949.79,6206.48,0],[7714.48,6038.44,0],[7053.98,5950.2,0],[7277.08,5541.01,0],[7895.17,5445.52,0],[8154.86,5321.85,0],[8271.83,5214.41,0],[8405.52,4950.67,0],[8009.83,4844.27,0],[8119.67,4695.22,0],[7010.67,4881.67,0],[6545.73,5200.25,0],[6008.28,4694.16,0],[6017.18,4464.87,0],[6204.7,4462.59,0],[7224.98,4492.12,0],[7660.95,4347.76,0],[8299.33,4402.46,0],[7966.92,3719,0],[7461.8,3799.22,0],[7103.29,3905.94,0],[6755.01,3934.42,0],[6357.66,3754.64,0],[6056.67,3895.78,0],[5257.07,3442.26,0],[5048.93,3521.33,0],[5009.17,3584.46,0],[4959.07,3682.12,0],[4942.1,3777.81,0],[4838.47,3621.32,0],[4796.42,3795,0],[4642.9,4066.05,0],[3708.94,3821.62,0],[3856.65,4002.22,0],[4301.45,4243.21,0],[3135.01,4444.92,0],[2999.16,4453.12,0],[2048.93,4133.27,0],[1799.62,4162.6,0],[1751.9,4595.99,0],[2096.95,5010.74,0],[3566.32,4036.26,0],[4070.81,3818.92,0],[4405.58,3653.3,0],[3807.87,3549.29,0],[3964.87,3477.91,0],[3675.52,3114.89,0],[2885.4,2937.9,0],[2588.21,3164.46,0],[5439.6,3201.59,0],[5075.78,2997.37,0],[4947.79,3252.8,0],[4381.06,2798.54,0],[3852.34,1985.25,0],[4374.36,2194.58,0],[4990.41,2413.22,0],[5531.17,2645.59,0],[6340.77,3335.34,0],[6574.68,3087.93,0],[6493.69,3384.98,0],[6689.15,3358.35,0],[6976.69,3359.93,0],[7254.69,3431.46,0],[8329.72,3980.19,0],[8133.06,3801.52,0],[8116.08,3312,0],[7879.72,3102.62,0],[7579.07,2604.33,0],[7372.71,2234.6,0],[6593.54,2019.52,0],[5785.47,1849.37,0],[7620.3,2341.31,0],[8474.08,2324.33,0],[8109.39,2576.19,0]];}; + if (toLower worldName == "tavi") exitWith {[[8428.0771,20356.59,0],[8422.875,20044.506,0],[8654.3389,20197.945,0],[8487.8926,19698.609,0],[8714.1553,19906.666,0],[8623.0547,19435.301,0],[8922.3809,19567.262,0],[9144.4609,19454.613,0],[9205.6133,19192.301,0],[8816.168,19187.473,0],[8584.4316,19094.135,0],[10198.54,19344.029,0],[10419.606,19392.824,0],[10150.742,19470.496,0],[9919.624,18768.488,0],[10017.305,18549.551,0],[10104.879,18353.066,0],[10220.523,18110.553,0],[10329.431,17884.879,0],[10443.951,17633.381,0],[10538.262,17746.781,0],[10372.095,18095.957,0],[10232.873,18330.611,0],[10166.63,18527.094,0],[10052.109,18733.68,0],[10563.116,18549.678,0],[10381.041,18799.266,0],[10708.368,18250.992,0],[10812.704,17968.672,0],[11277.1,18009.588,0],[11119.573,18089.373,0],[11019.329,17931.848,0],[11174.81,17833.65,0],[11162.534,17678.17,0],[10886.352,17704.764,0],[10749.284,17563.605,0],[10556.979,17453.133,0],[12183.52,19236.047,0],[12426.969,19297.422,0],[12787.028,19174.674,0],[12858.632,19366.979,0],[13087.761,19221.727,0],[13095.944,19434.49,0],[13329.166,19475.406,0],[13318.937,19270.826,0],[13822.201,19387.438,0],[14129.071,19156.26,0],[14307.054,19006.918,0],[14468.672,18841.207,0],[14993.788,18049.17,0],[14974.319,18463.402,0],[14907.213,18502.674,0],[14860.688,18162.35,0],[15167.03,17317.572,0],[15270.396,17131.695,0],[15301.546,16909.268,0],[15209.73,16807.07,0],[15220.112,16623.992,0],[15421.774,16537.098,0],[15362.205,16698.316,0],[15650.699,16187.063,0],[15663.545,15995.807,0],[15509.396,15941.568,0],[15336.692,15960.124,0],[15176.836,16100,0],[15122.597,16012.934,0],[15188.254,15875.912,0],[15112.605,15741.746,0],[15051.232,15571.897,0],[15754.774,15821.484,0],[15917.421,15655.054,0],[15978.559,15607.117,0],[16167.527,15643.939,0],[16061.926,15501.517,0],[15086.879,14874.726,0],[15017.347,14823.525,0],[15006.61,14877.663,0],[15226.323,14750.418,0],[15236.687,14341.202,0],[15361.313,14219.946,0],[15864.31,14411.938,0],[16405.625,14816.879,0],[16382.048,14575.486,0],[16124.936,14642.853,0],[16144.024,14154.454,0],[15992.45,14046.671,0],[16159.741,13968.077,0],[16127.422,13384.481,0],[16400.252,13329.471,0],[16765.146,12678.273,0],[16769.639,12526.701,0],[16588.875,12469.441,0],[16548.455,12028.198,0],[16589.566,11559.546,0],[16642.35,11409.998,0],[16410.697,11360.148,0],[16610.092,11242.857,0],[16416.563,11107.971,0],[16601.297,11034.665,0],[16410.697,10914.439,0],[16613.025,10764.893,0],[16401.9,10726.771,0],[16615.957,10492.189,0],[16404.832,10439.407,0],[16618.889,10242.942,0],[16369.645,10204.823,0],[16657.01,10049.412,0],[16460.545,9940.916,0],[16636.482,9891.0664,0],[15770.709,9817.7109,0],[15951.474,9867.1123,0],[15940.246,10077.067,0],[14491.629,10555.179,0],[17351.748,7723.0625,0],[17489.527,7252.3223,0],[17110.637,7299.1318,0],[17056.762,7555.2549,0],[17183.59,6261.4561,0],[16996.701,6170.7334,0],[16806.184,6116.3008,0],[16635.625,6110.8564,0],[16455.994,6148.959,0],[16953.154,6335.8496,0],[17105.568,6446.5303,0],[17287.014,6535.4395,0],[17150.93,6820.3096,0],[17107.383,7117.8809,0],[17667.24,7227.5742,0],[17650.4,7518.3672,0],[17288.553,5268.1748,0],[17425.574,5166.8359,0],[17392.746,5316.7031,0],[17546.896,5295.2939,0],[17387.037,5465.1426,0],[17605.416,5893.335,0],[16778.018,8318.6006,0],[16334.529,8293.8994,0],[16401.895,8171.5176,0],[16184.079,8156.9229,0],[16121.205,8292.7764,0],[15867.464,8138.959,0],[15921.354,8333.1953,0],[15697.927,8388.21,0],[15617.088,8150.1855,0],[15091.522,7961.2207,0],[15404.815,8621.6738,0],[16376.999,8867.0781,0],[14081.523,11797.979,0],[13864.668,11877.767,0],[14228.82,12248.056,0],[13674.409,11967.781,0],[13664.182,12274.65,0],[13359.356,12260.329,0],[13377.77,11949.37,0],[13103.633,12039.385,0],[13070.901,12301.245,0],[12649.467,12573.337,0],[13034.076,12601.978,0],[13971.05,12530.374,0],[13889.218,12771.779,0],[13381.86,12812.695,0],[13705.097,12599.932,0],[13623.265,12955.899,0],[13594.623,13174.799,0],[13353.22,12534.465,0],[12665.832,12935.441,0],[12812.633,13121.661,0],[13052.902,13125.03,0],[13220.193,12959.985,0],[13402.08,13328.247,0],[12961.96,13453.996,0],[13090.787,13654.608,0],[13500.276,13828.177,0],[12704.868,13823.737,0],[12990.396,14273.889,0],[12904.942,14306.541,0],[13032.08,14393.384,0],[12841.024,14584.439,0],[12621.869,14806.314,0],[12571.233,15246.848,0],[12426.92,15206.339,0],[12094.643,14861.6,0],[11973.94,15047.768,0],[12061.909,15667.643,0],[11951.436,15814.939,0],[6084.0962,9905.3662,0],[6264.3354,9897.4004,0],[10379.656,6532.8721,0],[10093.246,6264.873,0],[9851.8408,6082.7969,0],[9436.5459,5818.8906,0],[10690.617,6172.8125,0],[10416.481,6013.2422,0],[10224.177,5804.5684,0],[9119.2441,5593.1738,0],[9617.7334,5581.4434,0],[9415.4063,5443.625,0],[9585.4785,5241.2969,0],[9295.1816,5147.4629,0],[9670.5166,4895.2852,0],[9779.0107,4563.9355,0],[9784.875,4294.165,0],[9708.6357,4024.3926,0],[9708.6357,3731.1641,0],[9720.3652,3481.918,0],[9890.4385,3297.1836,0],[10063.443,3094.8555,0],[11330.631,958.08984,0],[10592.146,1019.7813,0],[10276.431,1212.1133,0],[10428.846,1262.918,0],[10231.069,1391.7441,0],[9911.7246,1629.4395,0],[9695.8047,1829.0293,0],[9436.3369,2084.8672,0],[9147.8389,2362.4805,0],[8625.2734,2714.4863,0],[8483.7451,2986.6563,0],[8227.9072,3224.3477,0],[7471.144,4795.8799,0],[5588.2578,5953.957,0],[5287.5254,6093.0693,0],[5072.7173,6005.1025,0],[4718.7944,6377.4355,0],[4878.3667,6101.2539,0],[4587.8633,6442.9014,0],[4344.4136,6406.0762,0],[4219.6201,6532.916,0],[1516.0952,7758.4414,0],[1860.8423,7593.3301,0],[1588.3105,7536.293,0],[1629.8013,7284.083,0],[2253.4473,6902.0664,0],[1769.5396,6781.9316,0],[2831.666,7383.7295,0],[4066.0703,7630.3066,0],[3925.3193,7900.0791,0],[4297.7217,7985.1152,0],[4368.0967,7762.2617,0],[4758.0923,7970.4551,0],[4546.9668,8140.5273,0],[4857.7905,8345.7871,0],[4966.2852,8049.626,0],[5162.749,8480.6729,0],[5280.041,8249.0215,0],[5626.0522,8363.3818,0],[5947.5122,8472.1191,0],[6194.3208,8578.2246,0],[5965.9644,8739.6885,0],[5532.3184,9277.1318,0],[5433.1333,9046.4688,0],[5696.0889,9198.708,0],[5772.2075,9420.1445,0],[5880.6191,9620.8223,0],[6060.5356,9717.7002,0],[6934.5024,9786.041,0],[6628.4365,8278.2207,0],[6740.2666,8444.667,0],[6771.4751,8189.7979,0],[6865.1016,8366.6455,0],[6948.3237,8080.5684,0],[7096.5645,8210.6035,0],[7073.1582,7955.7344,0],[7255.208,8075.3662,0],[7221.3989,7825.6973,0],[7387.8447,7973.9375,0],[7398.2476,7737.2725,0],[7528.2837,7864.708,0],[7502.2759,7552.6211,0],[7712.9341,7690.46,0],[7741.542,8124.7803,0],[8467.1406,7797.0898,0],[8656.9932,7700.8623,0],[8823.4395,7586.4316,0],[7312.4243,7531.8164,0],[7429.4565,7386.1777,0],[7590.7007,7180.7207,0],[7746.7437,6946.6553,0],[7806.5605,6655.375,0],[8168.0596,6572.1523,0],[7850.772,7097.498,0],[7999.0127,6460.3223,0],[8097.8403,6265.2695,0],[8277.29,6163.8418,0],[8269.4873,5882.9648,0],[8152.4551,6104.0254,0],[8365.7139,5919.375,0],[8542.5625,5708.7168,0],[8337.1055,5680.1084,0],[8779.2266,5617.6914,0],[8524.3564,5482.4551,0],[9010.6904,5198.9766,0]];}; + if (toLower worldName == "napf") exitWith {[[14161,14136,0],[14184.3,14073.3,0],[14557.5,13822.9,0],[14504.7,13739.8,0],[8690.22,16362,0],[8702.41,16280.8,0],[6458.12,9776.98,0],[6553.54,9782.47,0],[2479.36,8318.09,0],[2468.32,8401.96,0],[12837.9,9748.02,0],[12799.1,9886.52,0],[14056.3,13973.6,0],[14137.6,14031.9,0],[14873.2,16211.3,0],[14909.5,16340.5,0],[8594.03,16124.6,0],[8540.55,16189.2,0],[6449.93,9732.47,0],[6381.16,9798.82,0],[2104.66,7567.42,0],[2117.45,7482.09,0],[14851,13835.7,0],[14785.4,13882.4,0],[9147.45,17294.9,0],[9159.25,17243.2,0],[14305.3,17067.4,0],[14380.3,17100,0],[18138.8,2097.05,0],[18380.5,2026.29,0],[4020.24,4389.06,0],[3861.86,4389.02,0],[1119.07,3435.97,0],[1521.79,2449.31,0],[1156.05,5038.85,0],[911.698,6210.19,0],[700.229,7198.09,0],[1332.85,12107.9,0],[4640.84,16650.9,0],[13097.9,19462.8,0],[16568.6,18244.4,0],[15825.5,13272.9,0],[15723.1,12954.3,0],[14699.2,14443.5,0],[14434.7,14329.6,0],[12313,15558,0],[9174.81,17664.6,0],[9043.79,17404.2,0],[8372.58,16237.7,0],[5297.4,16009,0],[2144.73,7840.98,0],[14566.6,2811.04,0],[14301.4,2801.55,0],[2782.51,7929.54,0],[3147.03,12202.7,0],[3291.35,12173.1,0],[10108.6,16515.4,0],[8412.35,17493.8,0],[5760.94,15248.3,0],[5747.7,15198.8,0],[10787.8,15851.3,0],[10829.8,15784.1,0],[9308.78,5384.54,0],[17218.2,5177.1,0],[14430.9,3195.92,0],[14334.8,3134.73,0],[14575.4,14234.6,0],[14487.5,13927.2,0],[14097.6,13913.8,0],[14937.1,16192.1,0],[8830.34,16231.3,0],[6097.9,10306,0],[6461.96,9694.94,0],[6215.82,9522.63,0],[7673.72,9290.59,0],[6521.78,9564.19,0],[3698.81,7876.06,0],[12979.3,9993.49,0],[14310,12564.3,0],[13918.8,14139.8,0],[14316.5,13207.3,0],[14023.1,14354.4,0],[9267.9,15809.4,0],[9167.82,15652.7,0],[7288.33,14788.5,0],[7515.69,14743.1,0],[6281.15,9884.48,0],[3250.78,7411.73,0],[10305.7,4871.25,0],[10614,4945.51,0],[12189.9,9346.08,0],[9655.02,2955.95,0],[5279.94,4493.4,0],[10962.1,9464.29,0],[16303,18452.1,0],[3547.8,11206.7,0],[4209.86,11476.9,0],[3989.43,11156.9,0],[4133.4,12496.4,0],[4649.34,12505,0],[8016.52,15985.9,0],[10721.6,16674.5,0],[14725.7,4939.47,0],[15903.1,2812.89,0],[10600.7,12059.9,0],[1199.65,12497.1,0],[8143.82,5099.84,0],[16642.6,5542.42,0],[12036,15230.7,0],[12102.9,15107.4,0],[9939.86,16439.7,0],[4310.93,14601.2,0],[6359.46,10234.9,0],[9065.52,1232.42,0],[10197,1611.54,0],[9454.52,1268.24,0],[11539.2,2740.35,0],[13869.4,3239.35,0],[14492.5,2878.56,0],[15727.9,2935.47,0],[16154.4,2994.39,0],[17676.5,2141.91,0],[18588.9,2496.84,0],[18013,2865.61,0],[17715.6,3550.39,0],[18189.8,3928.65,0],[17967.9,4324.23,0],[19112.1,4655.74,0],[19267.4,6089.08,0],[18567.2,6135.06,0],[18462.9,5819.08,0],[17561.8,5870.54,0],[17562.7,5406.63,0],[17562.7,5406.63,0],[17367.3,5153.35,0],[16530,4341.71,0],[16012.4,3126.39,0],[12987.9,4796.02,0],[13358.9,5032.63,0],[10176,5399.18,0],[10361.7,7133.9,0],[9766.26,8251.79,0],[11237.2,8531.68,0],[10979.2,9298.72,0],[9952.19,10189.9,0],[10484.3,10425.3,0],[10141,11855.4,0],[10591.6,12772.2,0],[10547.8,13663.2,0],[11278.9,14751.2,0],[12802.1,14745.3,0],[16246.3,18531.3,0],[14603.7,16732.9,0],[6412.8,14855.7,0],[7608.7,15094.7,0],[9498.9,15812.1,0],[14402.9,11429.6,0],[12967.7,11785.4,0],[17603.7,11890.1,0],[16562.4,12111.7,0],[15389.2,12320.6,0],[12972.2,7478.5,0],[5559.74,2240.5,9.0],[4485.45,3416.86,0],[4843.5,3442.89,0],[3476.45,5608.9,0],[4173.98,5977.31,0],[4479.52,6569.57,0],[8980.72,5770.86,0],[9200.41,5507.75,0],[10203.4,6946.39,0],[12578.3,8318.45,0],[15203.6,12610.6,0],[16475.2,15206.2,0],[11751.4,16152.9,0],[10732.3,15667.2,0],[13174.6,14472.2,0],[8212.34,14633.3,0],[6513.71,11200.7,0]];}; + if (toLower worldName == "sauerland") exitWith {[[3289,5423,0],[9099,5435,0],[12260,4943,0],[15144,3680,0],[19073,3379,0],[23713,3954,0],[23202.8,7387.82,0],[16812,9185,0],[17899,12691,0],[22869,14812,0],[24878,16232,0],[21516,17960,0],[24766,18003,0],[21231,19668,0],[24245,23517,0],[23062,25184,0],[20730,24162,0],[18490,21855,0],[15091,18937,0],[12642,21867,0],[10975,17133,0],[7741,23196,0],[3933,21469,0],[1102,22044,0],[2138,18619,0],[6295,18512,0],[11430,16927,0],[6668,14524,0],[2686,13207,0],[16332,15245,0],[16516,12870,0],[263,10807,0]];}; + []; +}; + +if (count WAI_StaticSpawnPoints > 0) then { + diag_log "WAI: Custom Spawn Points Loaded"; +} else { + diag_log "WAI: You are on an unsupported map! No spawn points available"; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/init.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/init.sqf new file mode 100755 index 0000000..6fbeadb --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/init.sqf @@ -0,0 +1,77 @@ +WAI_Overpoch = isClass (configFile >> "CfgWeapons" >> "USSR_cheytacM200"); + +// Compile all Functions +spawn_group = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\spawn_group.sqf"; +spawn_static = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\spawn_static.sqf"; +group_waypoints = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\group_waypoints.sqf"; +heli_para = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\heli_para.sqf"; +heli_patrol = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\heli_patrol.sqf"; +vehicle_patrol = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\vehicle_patrol.sqf"; +on_kill = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\on_kill.sqf"; +dynamic_crate = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\dynamic_crate.sqf"; +static_spawn_manager = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\static_spawn_manager.sqf"; +find_position = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\find_position.sqf"; +load_ammo = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\load_ammo.sqf"; +patrol_winorfail = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\patrol_winorfail.sqf"; +mission_winorfail = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\mission_winorfail.sqf"; +minefield = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\minefield.sqf"; +custom_publish = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\custom_publish_vehicle.sqf"; +wai_spawnObjects = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\spawn_objects.sqf"; +wai_air_drop = compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\airdrop_winorfail.sqf"; + +call compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\position_functions.sqf"; +call compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\compile\functions.sqf"; + +if(isNil("DZMSInstalled")) then { + + createCenter EAST; + createCenter RESISTANCE; + + WEST setFriend [EAST,0]; + WEST setFriend [RESISTANCE,0]; + + EAST setFriend [WEST,0]; + EAST setFriend [RESISTANCE,0]; + + RESISTANCE setFriend [EAST,0]; + RESISTANCE setFriend [WEST,0]; + +} else { + + createCenter RESISTANCE; + + EAST setFriend [RESISTANCE,0]; + WEST setFriend [RESISTANCE,0]; + + RESISTANCE setFriend [EAST,0]; + RESISTANCE setFriend [WEST,0]; +}; + +WAIconfigloaded = false; +wai_markedPos = []; +wai_static_data = [0,[],[],[]]; // [AI Count, UnitGroups, Vehicles to Monitor, Crates] +WAI_MarkerReady = true; +wai_mission_data = []; +h_missionsrunning = 0; +b_missionsrunning = 0; +wai_h_starttime = diag_tickTime; +wai_b_starttime = diag_tickTime; + +call compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\config.sqf"; +call compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\configs\mission_loot.sqf"; + +if (WAI_Overpoch) then { + call compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\configs\overwatch.sqf"; +}; + +if (wai_user_spawnpoints) then { + call compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\configs\spawnpoints.sqf"; +}; + +if (wai_use_blacklist) then { + call compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\configs\blacklist.sqf"; +}; + +if(wai_static_missions) then { + execVM "\z\addons\dayz_server\WAI\static\init.sqf"; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/MISSION_EXAMPLE.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/MISSION_EXAMPLE.sqf new file mode 100755 index 0000000..bd099a4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/MISSION_EXAMPLE.sqf @@ -0,0 +1,184 @@ +// Updated mission example for DayZ Epoch 1.0.6+. Please review missions in the hero and bandit folder for additional examples. + +// Include local variables in this list +private ["_messages","_missionType","_aiType","_mission","_position","_num"]; + +// Get mission number, important we do this early +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type + +// Get a safe position 80 meters from the nearest object. You can change this number. +_position = [80] call find_position; + +// Sends a message to the server's rpt file +diag_log format["WAI: Mission Test Mission started at %1",_position]; + +// Crate Spawning Format - [loot, position, crate type(array or class name), [x-offset, y-offset,z-coordinate(optional)],direction(optional)] +// Multiple crates can be spawned. See Firestation mission for example. +// See lines 203-205 in config.sqf for crate classname arrays + +// Dynamic loot array example +// Parameters: 0: _crate +// 1: Max number of long guns OR [MAX number of long guns,gun_array] +// 2: Max number of tools OR [MAX number of tools,tool_array] +// 3: Max number of items OR [MAX number of items,item_array] +// 4: Max number of pistols OR [MAX number of pistol,pistol_array] +// 5: Max number of backpacks OR [MAX number of backpacks,backpack_array] +//[16,[8,crate_tools_sniper],[3,crate_items_high_value],3,[4,crate_backpacks_large]] - example of calling custom arrays instead of default + +// Save loot array to a variable +_loot = [[1,crate_weapons_buildables],[4,crate_tools_buildable],[30,crate_items_buildables],3,4]; + +//Spawn Crate with loot variable in first position. +[[ + [_loot,crates_large,[0,0]] // [loot variable, crate array, 2d offsets] +],_position,_mission] call wai_spawnCrate; + +//Spawn Crate with fixed classname and loot array not previously save to variable. It works either way. +[[ + [[8,5,15,3,2],"USBasicWeaponsBox",[.3,0,-.01],30] // [[loot array, crate classname, 3d offests], direction] +],_position,_mission] call wai_spawnCrate; + +// Mission object Spawning Format - [class name, [x-offset, y-offset,z-offset(optional)],direction(optional)] +// Offsets are modifications to the [x,y,z] coordinates relative to the [0,0,0] mission center position. +// If no z-coordinate or direction are provided, then the function will set them to 0. +_baserunover = [[ + ["land_fortified_nest_big",[-40,0],90], + ["land_fortified_nest_big",[40,0],270], + ["land_fortified_nest_big",[0,-40]], + ["land_fortified_nest_big",[0,40],180], + ["Land_Fort_Watchtower",[-10,0]], + ["Land_Fort_Watchtower",[10,0],180], + ["Land_Fort_Watchtower",[0,-10],270], + ["Land_Fort_Watchtower",[0,10],90] +],_position,_mission] call wai_spawnObjects; + +// Group Spawn Examples +// Parameters: 0: Position +// 1: Unit Count +// 2: Unit Skill ("easy","medium","hard","extreme" or "random") +// 3: Guns (gun or [gun,launcher]) +// Guns options : (0 = ai_wep_assault, 1 = ai_wep_machine, 2 = ai_wep_sniper, "random" = random weapon, "Unarmed" = no weapon) +// Launcher options: (at = ai_wep_launchers_AT, aa = ai_wep_launchers_AA or "classname") +// 4: Magazine Count +// 5: Backpack ("random" or "classname") +// 6: Skin ("Hero","bandit","random","special" or "classname") +// 7: Gear (0:ai_gear0, 1:ai_gear1, 2:ai_gear2, 3:ai_gear3, 4:ai_gear4 or "random") +// 8: AI Type ("bandit","Hero","special" or ["type", #] format to overwrite default gain amount) ***Used to determine humanity gain or loss*** +// 9: Mission variable from line 7 (_mission) +_num = round (random 3) + 4; +[[_position select 0, _position select 1, 0],_num,"extreme",["random","at"],4,"random","bandit","random",["bandit",150],_mission] call spawn_group; +[[_position select 0, _position select 1, 0],4,"hard","random",4,"random","bandit","random","bandit",_mission] call spawn_group; +[[_position select 0, _position select 1, 0],4,"random","random",4,"random","bandit","random","bandit",_mission] call spawn_group; +[[_position select 0, _position select 1, 0],4,"random","random",4,"random","bandit","random","bandit",_mission] call spawn_group; +[[_position select 0, _position select 1, 0],4,"random","random",4,"random","bandit","random","bandit",_mission] call spawn_group; + + +// Humvee Patrol Example +// Parameters: 0: Patrol position +// 1: Starting position +// 2: Patrol radius +// 3: Number of Waypoints +// 4: Vehicle classname +// 5: Unit Skill ("easy","medium","hard","extreme" or "random") +// 6: Skin ("Hero","bandit","random","special" or "classname") +// 7: AI Type ("bandit","Hero" or "special") ***Used to determine humanity gain or loss*** +// 8: Mission Variable from line 7 (_mission) +[[(_position select 0) + 100, _position select 1, 0],[(_position select 0) + 100, _position select 1, 0],50,2,"HMMWV_Armored","random","bandit","bandit",_mission] call vehicle_patrol; + +// Static Turret Examples +// Parameters: 0: Spawn positions +// 1: Classname ("classname" or "random" to pick from ai_static_weapons) +// 2: Unit Skill ("easy","medium","hard","extreme" or "random") ***NO effect if ai_static_skills = true;*** +// 3: Skin ("Hero","bandit","random","special" or "classname") +// 4: AI Type ("bandit","Hero" or "special") ***Used to determine humanity gain or loss*** +// 5: Gun (0:ai_wep_assault 1:ai_wep_machine 2:ai_wep_sniper or "random") ***NO effect if ai_static_useweapon = false;*** +// 6: Magazine Count ***NO effect if ai_static_useweapon = false;*** +// 7: Backpack ("random" or "classname") ***NO effect if ai_static_useweapon = false;*** +// 8: Gear (0:ai_gear0, 1:ai_gear1, 2:ai_gear2, 3:ai_gear3, 4:ai_gear4 or "random") ***NO effect if ai_static_useweapon = false;*** +// 9: Mission variable from line 7 (_mission) +}; +[[ + [(_position select 0) - 10, (_position select 1) + 10, 0], + [(_position select 0) + 10, (_position select 1) - 10, 0], + [(_position select 0) + 10, (_position select 1) + 10, 0], + [(_position select 0) - 10, (_position select 1) - 10, 0] +],"M2StaticMG","easy","bandit","bandit",0,2,"random","random",_mission] call spawn_static; + +// Heli Paradrop Example +// Parameters: 0: Paradrop position +// 1: Trigger radius +// 2: Vehicle classname +// 3: Direction of approach for the helicopter. Options: "North","South","East","West" +// 4: Random distance from the mission the helicopter should start. [min distance, max distance]. +// 5: Fly in height of the helicopter. Be careful that the height is not too low or the AI might die when they hit the ground +// 6: Time in seconds between each deployed paratrooper. Higher number means paradropped AI will be more spread apart. Time of 0 means they all jump out rapidly. +// 7: Distance from the mission the helicopter should start dropping paratroopers +// 8: Amount of paratroopers +// 9: Unit Skill ("easy","medium","hard","extreme" or "random") ***NO effect if ai_static_skills = true;*** +// 10: Gun (0:ai_wep_assault 1:ai_wep_machine 2:ai_wep_sniper or "random") +// 11: Magazine Count +// 12: Backpack ("random" or "classname") +// 13: Skin ("Hero","bandit","random","special" or "classname") +// 14: Gear (0:ai_gear0, 1:ai_gear1, 2:ai_gear2, 3:ai_gear3, 4:ai_gear4 or "random") +// 15: AI Type ("bandit","Hero" or "special") ***Used to determine humanity gain or loss*** +// 16: Heli stay and fight after troop deployment? (true or false) +// 17: Mission variable from line 7 (_mission) + +[_position,400,"UH60M_EP1_DZE","East",[3000,4000],150,1.0,200,10,"Random","Random",4,"Random","Hero","Random","Hero",false,_mission] spawn heli_para; + +// Assassination target example +// This is the same as normal group spawns but we assign it to a variable instead for use in the trigger below (if there are multiple units in this group you'll need to kill them all) +_unitGroup = [[_position select 0, _position select 1, 0],1,"hard","random",4,"random","special","random","bandit",_mission] call spawn_group; + +// Spawn Mission Vehicle Example +// Parameters: 0: Classname or Array from config.sqf +// 1: Position +// 2: Mission variable +// 3: Fixed vehicle position? If false the mission will pick a random position for the vehicle +// 4: Optional direction. If no number provided the mission will select a random direction + +["MV22_DZ",[(_position select 0) - 20.5,(_position select 1) - 5.2,0], _mission,true,-82.5] call custom_publish; // with declared vehicle class, optional fixed position, and optional direction +[cargo_trucks,_position,_mission] call custom_publish; // with vehicle array, random position, and random direction +_vehicle = [cargo_trucks,_position,_mission] call custom_publish; // Same as above but saved to variable if necessary + +// Mission messages examples - they go into an array +"A Mission has spawned, hurry up to claim the loot!", // mission announcement - this message displays when the mission starts +"The mission was complete/objective reached", // mission success - this message displays when the mission is completed by a player +"The mission timed out and nobody was in the vicinity" // mission fail - this message displays when a mission times out. + +// Example with localized message strings +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_MISSIONNAME_ANNOUNCE","STR_CL_HERO_MISSIONNAME_WIN","STR_CL_HERO_MISSIONNAME_FAIL"]; +} else { + ["STR_CL_BANDIT_MISSIONNAME_ANNOUNCE","STR_CL_BANDIT_MISSIONNAME_WIN","STR_CL_BANDIT_MISSIONNAME_FAIL"]; +}; + +// Array of options to send to mission_winorfail with non-localized announcements +[ + _mission, // Mission Variable - This is a number. + _position, // Position of mission + "Hard", // Difficulty "Easy", "Medium", "Hard", "Extreme", + "Name of Mission", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission? + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], : crate - you have to get within 20 meters of the crate and kill at least the number of ai defined by variable wai_kill_percent in config.sqf. kill = you have to kill all of the AI. assassinate - you have to kill a special ai (see Mayor's Mansion mission). + _messages +] call mission_winorfail; + + +// Array of options to send to mission_winorfail with localized announcements. You have to create localized strings in the community stringtable for this to work +[ + _mission, // Mission number + _position, // Position of mission + "Hard", // Difficulty + "Lunch break Convoy", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/MISSION_EXAMPLE_WITH_SINGLE_SPAWN_POINT.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/MISSION_EXAMPLE_WITH_SINGLE_SPAWN_POINT.sqf new file mode 100755 index 0000000..f377124 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/MISSION_EXAMPLE_WITH_SINGLE_SPAWN_POINT.sqf @@ -0,0 +1,192 @@ +// Updated single location mission example for DayZ Epoch 1.0.6+ by JasonTM. Please review missions in the hero and bandit folders for additional examples. + +// Include local variables in this list +private ["_messages","_missionType","_aiType","_baserunover","_mission","_directions","_position","_crate","_crate_type","_num"]; + +// Get mission number, important we do this early +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type + +// Declare your static spawn point. You can also use static positions for your buildings, vehicles, and crate. +// Normally with the z coordinate you will just use 0 because 0 means that it is on the ground. +// Round the coordinates you get from the editor to whole numbers to make it easier. Ex. 1783.42963 is just 1783. +_position = [x, y, 0]; + +// If this is a hero mission use this line - delete if not +if !([_position] call wai_validSpotCheck) exitWith {h_missionsrunning = h_missionsrunning - 1; wai_mission_data set [_mission, -1]; WAI_MarkerReady = true;}; +// if this is a bandit mission use this line - delete if not +if !([_position] call wai_validSpotCheck) exitWith {b_missionsrunning = b_missionsrunning - 1; wai_mission_data set [_mission, -1]; WAI_MarkerReady = true;}; + +// Sends a message to the server's rpt file +diag_log format["WAI: Mission Test Mission started at %1",_position]; + +// Crate Spawning Format - [loot, position, crate type(array or class name), [x-offset, y-offset,z-coordinate(optional)],direction(optional)] +// Multiple crates can be spawned. See Firestation mission for example. +// See lines 203-205 in config.sqf for crate classname arrays + +// Dynamic loot array example +// Parameters: 0: _crate +// 1: Max number of long guns OR [MAX number of long guns,gun_array] +// 2: Max number of tools OR [MAX number of tools,tool_array] +// 3: Max number of items OR [MAX number of items,item_array] +// 4: Max number of pistols OR [MAX number of pistol,pistol_array] +// 5: Max number of backpacks OR [MAX number of backpacks,backpack_array] +//[16,[8,crate_tools_sniper],[3,crate_items_high_value],3,[4,crate_backpacks_large]] - example of calling custom arrays instead of default + +// Save loot array to a variable +_loot = [[1,crate_weapons_buildables],[4,crate_tools_buildable],[30,crate_items_buildables],3,4]; + +//Spawn Crate with loot variable in first position. +[[ + [_loot,crates_large,[0,0]] // [loot variable, crate array, 2d offsets] +],_position,_mission] call wai_spawnCrate; + +//Spawn Crate with fixed classname and loot array not previously save to variable. It works either way. +[[ + [[8,5,15,3,2],"USBasicWeaponsBox",[.3,0,-.01],30] // [[loot array, crate classname, 3d offests], direction] +],_position,_mission] call wai_spawnCrate; + +// Mission object Spawning Format - [class name, [x-offset, y-offset,z-offset(optional)],direction(optional)] +// Offsets are modifications to the [x,y,z] coordinates relative to the [0,0,0] mission center position. +// If no z-coordinate or direction are provided, then the function will set them to 0. +_baserunover = [[ + ["land_fortified_nest_big",[-40,0],90], + ["land_fortified_nest_big",[40,0],270], + ["land_fortified_nest_big",[0,-40]], + ["land_fortified_nest_big",[0,40],180], + ["Land_Fort_Watchtower",[-10,0]], + ["Land_Fort_Watchtower",[10,0],180], + ["Land_Fort_Watchtower",[0,-10],270], + ["Land_Fort_Watchtower",[0,10],90] +],_position,_mission] call wai_spawnObjects; + +// Group Spawn Examples +// Parameters: 0: Position +// 1: Unit Count +// 2: Unit Skill ("easy","medium","hard","extreme" or "random") +// 3: Guns (gun or [gun,launcher]) +// Guns options : (0 = ai_wep_assault, 1 = ai_wep_machine, 2 = ai_wep_sniper, "random" = random weapon, "Unarmed" = no weapon) +// Launcher options: (at = ai_wep_launchers_AT, aa = ai_wep_launchers_AA or "classname") +// 4: Magazine Count +// 5: Backpack ("random" or "classname") +// 6: Skin ("Hero","bandit","random","special" or "classname") +// 7: Gear (0:ai_gear0, 1:ai_gear1, 2:ai_gear2, 3:ai_gear3, 4:ai_gear4 or "random") +// 8: AI Type ("bandit","Hero","special" or ["type", #] format to overwrite default gain amount) ***Used to determine humanity gain or loss*** +// 9: Mission variable from line 9 (_mission) +_num = round (random 3) + 4; +[[_position select 0, _position select 1, 0],_num,"extreme",["random","at"],4,"random","bandit","random",["bandit",150],_mission] call spawn_group; +[[_position select 0, _position select 1, 0],4,"hard","random",4,"random","bandit","random","bandit",_mission] call spawn_group; +[[_position select 0, _position select 1, 0],4,"random","random",4,"random","bandit","random","bandit",_mission] call spawn_group; +[[_position select 0, _position select 1, 0],4,"random","random",4,"random","bandit","random","bandit",_mission] call spawn_group; +[[_position select 0, _position select 1, 0],4,"random","random",4,"random","bandit","random","bandit",_mission] call spawn_group; + + +// Humvee Patrol Example +// Parameters: 0: Patrol position +// 1: Starting position +// 2: Patrol radius +// 3: Number of Waypoints +// 4: Vehicle classname +// 5: Unit Skill ("easy","medium","hard","extreme" or "random") +// 6: Skin ("Hero","bandit","random","special" or "classname") +// 7: AI Type ("bandit","Hero" or "special") ***Used to determine humanity gain or loss*** +// 8: Mission Variable +[[(_position select 0) + 100, _position select 1, 0],[(_position select 0) + 100, _position select 1, 0],50,2,"HMMWV_Armored","random","bandit","bandit",_mission] call vehicle_patrol; + +// Static Turret Examples +// Parameters: 0: Spawn positions +// 1: Classname ("classname" or "random" to pick from ai_static_weapons) +// 2: Unit Skill ("easy","medium","hard","extreme" or "random") ***NO effect if ai_static_skills = true;*** +// 3: Skin ("Hero","bandit","random","special" or "classname") +// 4: AI Type ("bandit","Hero" or "special") ***Used to determine humanity gain or loss*** +// 5: Gun (0:ai_wep_assault 1:ai_wep_machine 2:ai_wep_sniper or "random") ***NO effect if ai_static_useweapon = false;*** +// 6: Magazine Count ***NO effect if ai_static_useweapon = false;*** +// 7: Backpack ("random" or "classname") ***NO effect if ai_static_useweapon = false;*** +// 8: Gear (0:ai_gear0, 1:ai_gear1, 2:ai_gear2, 3:ai_gear3, 4:ai_gear4 or "random") ***NO effect if ai_static_useweapon = false;*** +// 9: Mission variable from line 7 (_mission) + +[[ + [(_position select 0) - 10, (_position select 1) + 10, 0], + [(_position select 0) + 10, (_position select 1) - 10, 0], + [(_position select 0) + 10, (_position select 1) + 10, 0], + [(_position select 0) - 10, (_position select 1) - 10, 0] +],"M2StaticMG","easy","bandit","bandit",0,2,"random","random",_mission] call spawn_static; + + +// Heli Paradrop Example +// Parameters: 0: Paradrop position +// 1: Trigger radius +// 2: Vehicle classname +// 3: Direction of approach for the helicopter. Options: "North","South","East","West" +// 4: Random distance from the mission the helicopter should start. [min distance, max distance]. +// 5: Fly in height of the helicopter. Be careful that the height is not too low or the AI might die when they hit the ground +// 6: Time in seconds between each deployed paratrooper. Higher number means paradropped AI will be more spread apart. Time of 0 means they all jump out rapidly. +// 7: Distance from the mission the helicopter should start dropping paratroopers +// 8: Amount of paratroopers +// 9: Unit Skill ("easy","medium","hard","extreme" or "random") ***NO effect if ai_static_skills = true;*** +// 10: Gun (0:ai_wep_assault 1:ai_wep_machine 2:ai_wep_sniper or "random") +// 11: Magazine Count +// 12: Backpack ("random" or "classname") +// 13: Skin ("Hero","bandit","random","special" or "classname") +// 14: Gear (0:ai_gear0, 1:ai_gear1, 2:ai_gear2, 3:ai_gear3, 4:ai_gear4 or "random") +// 15: AI Type ("bandit","Hero" or "special") ***Used to determine humanity gain or loss*** +// 16: Heli stay and fight after troop deployment? (true or false) +// 17: Mission variable from line 7 (_mission) + +[_position,400,"UH60M_EP1_DZE","East",[3000,4000],150,1.0,200,10,"Random","Random",4,"Random","Hero","Random","Hero",false,_mission] spawn heli_para; + +// Assassination target example +// This is the same as normal group spawns but we assign it to a variable instead for use in the trigger below (if there are multiple units in this group you'll need to kill them all) +_unitGroup = [[_position select 0, _position select 1, 0],1,"hard","random",4,"random","special","random","bandit",_mission] call spawn_group; + +// Spawn Mission Vehicle Example +// Parameters: 0: Classname or Array from config.sqf +// 1: Position +// 2: Mission variable +// 3: Fixed vehicle position? If false the mission will pick a random position for the vehicle +// 4: Optional direction. If no number provided the mission will select a random direction + +["MV22_DZ",[(_position select 0) - 20.5,(_position select 1) - 5.2,0], _mission,true,-82.5] call custom_publish; // with declared vehicle class, optional fixed position, and optional direction +[cargo_trucks,_position,_mission] call custom_publish; // with vehicle array, random position, and random direction +_vehicle = [cargo_trucks,_position,_mission] call custom_publish; // Same as above but saved to variable if necessary + +// Mission messages examples - they go into an array +"A Mission has spawned, hurry up to claim the loot!", // mission announcement - this message displays when the mission starts +"The mission was complete/objective reached", // mission success - this message displays when the mission is completed by a player +"The mission timed out and nobody was in the vicinity" // mission fail - this message displays when a mission times out. + +// Example with localized message strings +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_MISSIONNAME_ANNOUNCE","STR_CL_HERO_MISSIONNAME_WIN","STR_CL_HERO_MISSIONNAME_FAIL"]; +} else { + ["STR_CL_BANDIT_MISSIONNAME_ANNOUNCE","STR_CL_BANDIT_MISSIONNAME_WIN","STR_CL_BANDIT_MISSIONNAME_FAIL"]; +}; + +// Array of options to send to mission_winorfail with non-localized announcements +[ + _mission, // Mission Variable - This is a number. + _position, // Position of mission + "Hard", // Difficulty "Easy", "Medium", "Hard", "Extreme", + "Name of Mission", // Name of Mission + _missionType, // Mission Type: Hero or Bandit + true, // show mission marker? + true, // make minefields available for this mission? + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], : crate - you have to get within 20 meters of the crate and kill at least the number of ai defined by variable wai_kill_percent in config.sqf. kill = you have to kill all of the AI. assassinate - you have to kill a special ai (see Mayor's Mansion mission). + _messages +] call mission_winorfail; + + +// Array of options to send to mission_winorfail with localized announcements. You have to create localized strings in the community stringtable for this to work +[ + _mission, // Mission number + _position, // Position of mission + "Hard", // Difficulty + "Lunch break Convoy", // Name of Mission + _missionType, // Mission Type: Hero or Bandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/abandoned_trader.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/abandoned_trader.sqf new file mode 100755 index 0000000..6065188 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/abandoned_trader.sqf @@ -0,0 +1,69 @@ +private ["_mission","_position","_rndnum","_messages","_aiType","_missionType","_loot"]; + +// Get mission number, important we do this early +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] Abandoned Trader]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_AbandonedTrader select 0;} else {Loot_AbandonedTrader select 1;}; + +//Spawn Crates +[[ + [_loot,crates_medium,[.3,0]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["Land_Misc_Garb_Heap_EP1",[-0.9,4.2,-0.01]], + ["Land_Misc_Garb_Heap_EP1",[-18,1.5,-0.01]], + ["Land_Shed_W03_EP1",[-4,4.7,-0.01]], + ["Land_Shed_M01_EP1",[-10,5,-0.01]], + ["Land_Market_shelter_EP1",[-10,-0.4,-0.01]], + ["Land_Market_stalls_02_EP1",[-10,-5.8,-0.01],-2.5], + ["Land_Market_stalls_01_EP1",[11,5,-0.01],-0.34], + ["Land_Market_stalls_02_EP1",[10,-5.8,-0.01]], + ["Land_Market_shelter_EP1",[10,-0.4,-0.01],2.32], + ["Land_transport_crates_EP1",[22,2,-0.01],-43.88], + ["Fort_Crate_wood",[18,-1,-0.01]], + ["UralWreck",[27,-3,-0.01],-67.9033], + ["Land_Canister_EP1",[18,1.4,-0.01],28.73], + ["MAP_ground_garbage_square5",[13.6,-2,-0.01]], + ["MAP_ground_garbage_square5",[-16,-2,-0.01]], + ["MAP_ground_garbage_long",[-0.4,-2,-0.01]], + ["MAP_garbage_misc",[-8,-2,-0.01]] +],_position,_mission] call wai_spawnObjects; + +//Troops +[_position,5,"Medium",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Medium","Random",4,"Random","Hero","Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 4); +[_position,_rndnum,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 4); +[_position,_rndnum,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Static Guns +[[ + [(_position select 0) + 0.1, (_position select 1) + 20, 0], + [(_position select 0) + 0.1, (_position select 1) - 20, 0] +],"M2StaticMG","Easy",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_ABANDONEDTRADER_ANNOUNCE","STR_CL_HERO_ABANDONEDTRADER_WIN","STR_CL_HERO_ABANDONEDTRADER_FAIL"]; +} else { + ["STR_CL_BANDIT_ABANDONEDTRADER_ANNOUNCE","STR_CL_BANDIT_ABANDONEDTRADER_WIN","STR_CL_BANDIT_ABANDONEDTRADER_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Medium", // Difficulty + "Abandoned Trader", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/apc.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/apc.sqf new file mode 100755 index 0000000..687c781 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/apc.sqf @@ -0,0 +1,97 @@ +local _mission = count WAI_MissionData -1; +local _aiType = _this select 0; // "Bandit" or "Hero" +local _position = [30] call WAI_FindPos; +local _vehclass = WAI_APC call BIS_fnc_selectRandom; //Armed Land Vehicle +local _vehname = getText (configFile >> "CfgVehicles" >> _vehclass >> "displayName"); +local _name = format["Disabled %1",_vehname]; +local _startTime = diag_tickTime; +local _difficulty = "Medium"; +local _localized = ["STR_CL_MISSION_BANDIT", "STR_CL_MISSION_HERO"] select (_aiType == "Hero"); +local _localName = ["STR_CL_ARMEDVEHICLE_TITLE",_vehname]; +local _text = [_localized,_localName]; + +diag_log format["WAI: %1 %2 started at %3.",_aiType,_name,_position]; + +local _messages = if (_aiType == "Hero") then { + ["STR_CL_HERO_ARMEDVEHICLE_ANNOUNCE","STR_CL_HERO_ARMEDVEHICLE_WIN","STR_CL_HERO_ARMEDVEHICLE_FAIL"]; +} else { + ["STR_CL_BANDIT_ARMEDVEHICLE_ANNOUNCE","STR_CL_BANDIT_ARMEDVEHICLE_WIN","STR_CL_BANDIT_ARMEDVEHICLE_FAIL"]; +}; + +////////////////////// Do not edit this section /////////////////////////// +local _markers = [1,1,1,1]; +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +_markers set [0, [_position, "WAI" + str(_mission), "ColorYellow", "", "ELLIPSE", "Solid", [300,300], [], 0]]; +_markers set [1, [_position, "WAI" + str(_mission) + "dot", "ColorBlack", "mil_dot", "", "", [], _text, 0]]; +if (WAI_AutoClaim) then {_markers set [2, [_position, "WAI" + str(_mission) + "auto", "ColorRed", "", "ELLIPSE", "Border", [WAI_AcAlertDistance,WAI_AcAlertDistance], [], 0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +_markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; + +WAI_MarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _position]; +local _posIndex = count DZE_MissionPositions - 1; + +// Send announcement +[_difficulty,(_messages select 0)] call WAI_Message; + +// Wait until a player is within range or timeout is reached. +local _timeout = false; +local _claimPlayer = objNull; + +while {WAI_WaitForPlayer && !_timeout && {isNull _claimPlayer}} do { + _claimPlayer = [_position, WAI_TimeoutDist] call isClosestPlayer; + + if (diag_tickTime - _startTime >= (WAI_Timeout * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call WAI_AbortMission; + [_difficulty,(_messages select 2)] call WAI_Message; + diag_log format["WAI: %1 %2 aborted.",_aiType,_name,_position]; +}; +//////////////////////////////// End ////////////////////////////////////// + +//Spawn Crates +[[ + [[0,0,[20,WAI_VehAmmo],0,1],WAI_CrateMd,[0,5]] +],_position,_mission] call WAI_SpawnCrate; + +//Troops +[_position, 5, _difficulty, "Random", "AT", "Random", _aiType, "Random", _aiType, _mission] call WAI_SpawnGroup; +[_position, 5, _difficulty, "Random", "AA", "Random", "Hero", "Random", _aiType, _mission] call WAI_SpawnGroup; +[_position,(ceil random 4),_difficulty,"Random","","Random",_aiType,"Random",_aiType,_mission] call WAI_SpawnGroup; +[_position,(ceil random 4),_difficulty,"Random","","Random",_aiType,"Random",_aiType,_mission] call WAI_SpawnGroup; + +//Static Guns +[[ + [(_position select 0) + 29,(_position select 1) + 7, 0], + [(_position select 0) + 13,(_position select 1) + 42, 0], + [(_position select 0),(_position select 1) + 10, 0] +],"Random",_difficulty,_aiType,_aiType,"Random","Random","Random",_mission] call WAI_SpawnStatic; + +//Spawn vehicles +local _vehicle = [_vehclass,_position,_mission] call WAI_PublishVeh; +[_vehicle,_vehclass,2] call WAI_LoadAmmo; + +[ + _mission, // Mission number + _position, // Position of mission + _difficulty, // Difficulty + _name, // Name of Mission + _localName, // localized marker text + _aiType, // "Bandit" or "Hero" + _markerIndex, + _posIndex, + _claimPlayer, + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] spawn WAI_MissionMonitor; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/armed_vehicle.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/armed_vehicle.sqf new file mode 100755 index 0000000..b7eed3f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/armed_vehicle.sqf @@ -0,0 +1,55 @@ +private ["_mission","_rndnum","_vehname","_position","_vehclass","_messages","_aiType","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +//Armed Land Vehicle +_vehclass = armed_vehicle call BIS_fnc_selectRandom; +_vehname = getText (configFile >> "CfgVehicles" >> _vehclass >> "displayName"); + +diag_log format["WAI: [Mission:[%2] Armed Vehicle]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_ArmedVehicle select 0;} else {Loot_ArmedVehicle select 1;}; + +//Spawn Crates +[[ + [_loot,crates_small,[0,5]] +],_position,_mission] call wai_spawnCrate; + +//Troops +[_position,5,"Medium",["Random","AT"],3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Medium","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 4); +[_position,_rndnum,"Medium","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 4); +[_position,_rndnum,"Medium","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Static Guns +[[[(_position select 0),(_position select 1) + 10, 0]],"Random","Medium",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +//Spawn vehicles +[_vehclass,_position,_mission] call custom_publish; + +if(wai_debug_mode) then { + diag_log format["WAI: [%2] armed_vehicle spawned a %1",_vehname,_missionType]; +}; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_ARMEDVEHICLE_ANNOUNCE","STR_CL_HERO_ARMEDVEHICLE_WIN","STR_CL_HERO_ARMEDVEHICLE_FAIL"]; +} else { + ["STR_CL_BANDIT_ARMEDVEHICLE_ANNOUNCE","STR_CL_BANDIT_ARMEDVEHICLE_WIN","STR_CL_BANDIT_ARMEDVEHICLE_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Medium", // Difficulty + format["Disabled %1",_vehname], // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/armybase.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/armybase.sqf new file mode 100755 index 0000000..f0c7b54 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/armybase.sqf @@ -0,0 +1,92 @@ +private ["_rndnum","_mission","_position","_aiType","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] ARMY Base]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_ArmyBase select 0;} else {Loot_ArmyBase select 1;}; + +//Spawn Crates +[[ + [_loot,crates_small,[1.2,0]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["WarfareBCamp",[-1,-12.4,-0.12]], + ["Base_WarfareBBarrier10xTall",[15,-16,-0.64]], + ["Base_WarfareBBarrier10xTall",[-15,-16,-0.64]], + ["Base_WarfareBBarrier10xTall",[15,16,-0.64]], + ["Base_WarfareBBarrier10xTall",[-15,16,-0.64]], + ["MAP_posed",[17,11]], + ["MAP_posed",[-20,11]], + ["MAP_fort_artillery_nest",[-1,-31,-0.56],-178.615], + ["MAP_Fortress_02",[-27,-13]], + ["MAP_Fortress_02",[25,-13],-89.16], + ["MAP_fortified_nest_big",[26,13],-180.55], + ["MAP_fortified_nest_big",[-26,13],-179.808], + ["MAP_Barbedwire",[10,-20]], + ["MAP_Barbedwire",[-11,-20]], + ["MAP_Barbedwire",[16,-20]], + ["MAP_Barbedwire",[-17,-20]], + ["WarfareBDepot",[-0.02,20,-0.1],-179.832], + ["T72Wreck",[29,-30],82.75], + ["T72WreckTurret",[20,-36]], + ["MAP_T34",[2,5],-71.49], + ["Land_Fort_Watchtower_EP1",[26,-4],-180.097], + ["Land_Fort_Watchtower_EP1",[-28,-6],0.999], + ["Land_transport_crates_EP1",[-18,-9],52.43], + ["MAP_Barel4",[-16,-10]], + ["MAP_Barel1",[-16,-11]], + ["MAP_t_picea3f",[-8,-6]], + ["MAP_t_picea3f",[16,20]], + ["MAP_t_pinusS2f",[14,9]], + ["MAP_t_pinusS2f",[-3,-6],-99.19], + ["MAP_t_picea3f",[10,-13]], + ["MAP_t_pinusN2s",[14,-8]], + ["MAP_t_pinusN2s",[12,19],-73.36], + ["MAP_t_pinusN2s",[-21,-13],52.65], + ["MAP_t_pinusS2f",[-34,12]], + ["MAP_t_picea3f",[-13,21]], + ["MAP_t_picea2s",[-17,21]], + ["MAP_t_picea2s",[13,-12]], + ["MAP_t_picea1s",[30,-0.01]], + ["MAP_t_picea2s",[-47,-21]], + ["MAP_t_picea2s",[34,-48]], + ["MAP_t_pinusN2s",[31,-52]], + ["MAP_t_pinusS2f",[12,-5]], + ["Land_Fire_barrel_burning",[-0.01,-0.01]] +],_position,_mission] call wai_spawnObjects; + +//Troops +[[(_position select 0) - 12, (_position select 1) + 2, 0],5,"Hard",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 2, (_position select 1) + 2, 0],5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 14, (_position select 1) - 35, 0],5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) + 13, (_position select 1) + 35, 0],_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) + 13, (_position select 1) + 35, 0],_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Humvee Patrol +[[(_position select 0) - 22, (_position select 1) - 56, 0],[(_position select 0) + 22, (_position select 1) + 56, 0],50,2,"HMMWV_Armored","Hard",_aiType,_aiType,_mission] call vehicle_patrol; + +//Static Guns +[[ + [(_position select 0) - 0.01, (_position select 1) + 41, 0], + [(_position select 0) + 0.1, (_position select 1) - 25, 0] +],"M2StaticMG","Hard",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +[ + _mission, // Mission number + _position, // Position of mission + "Hard", // Difficulty + "Army Base", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + ["STR_CL_GENERAL_ARMYBASE_ANNOUNCE","STR_CL_GENERAL_ARMYBASE_WIN","STR_CL_GENERAL_ARMYBASE_FAIL"] +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/base.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/base.sqf new file mode 100755 index 0000000..6687073 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/base.sqf @@ -0,0 +1,69 @@ +private ["_mission","_position","_rndnum","_aiType","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [80] call find_position; + +diag_log format["WAI: [Mission:[%2] Base]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_Base select 0;} else {Loot_Base select 1;}; + +//Spawn Crates +[[ + [_loot,crates_large,[0,0]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["land_fortified_nest_big",[-40,0],90], + ["land_fortified_nest_big",[40,0],270], + ["land_fortified_nest_big",[0,-40]], + ["land_fortified_nest_big",[0,40],180], + ["Land_Fort_Watchtower",[-10,0]], + ["Land_Fort_Watchtower",[10,0],180], + ["Land_Fort_Watchtower",[0,-10],270], + ["Land_Fort_Watchtower",[0,10],90] +],_position,_mission] call wai_spawnObjects; + +//Troops +[_position,5,"Hard",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[_position,_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[_position,_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Humvee Patrol +[[(_position select 0) + 100, _position select 1, 0],[(_position select 0) + 100, _position select 1, 0],50,2,"HMMWV_Armored","Hard",_aiType,_aiType,_mission] call vehicle_patrol; + +//Static Guns +[[ + [(_position select 0) - 10, (_position select 1) + 10, 0], + [(_position select 0) + 10, (_position select 1) - 10, 0], + [(_position select 0) + 10, (_position select 1) + 10, 0], + [(_position select 0) - 10, (_position select 1) - 10, 0] +],"M2StaticMG","Hard",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +//Heli Paradrop +[_position,400,"UH1H_DZ","East",[3000,4000],150,1.0,200,10,"Hard","Random",4,"Random",_aiType,"Random",_aiType,true,_mission] spawn heli_para; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_BANDITBASE_ANNOUNCE","STR_CL_HERO_BANDITBASE_WIN","STR_CL_HERO_BANDITBASE_FAIL"]; + +} else { + ["STR_CL_BANDIT_HEROBASE_ANNOUNCE","STR_CL_BANDIT_HEROBASE_WIN","STR_CL_BANDIT_HEROBASE_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Hard", // Difficulty + "Base", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/black_hawk_crash.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/black_hawk_crash.sqf new file mode 100755 index 0000000..2a411ff --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/black_hawk_crash.sqf @@ -0,0 +1,52 @@ +private ["_mission","_position","_rndnum","_aiType","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] Black Hawk Crash]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_BHC select 0;} else {Loot_BHC select 1;}; + +//Spawn Crates +[[ + [_loot,crates_medium,[0,0]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["UH60_ARMY_Wreck_burned_DZ",[5,5]] +],_position,_mission] call wai_spawnObjects; + +//Troops +[_position,5,"Medium",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 4); +[_position,_rndnum,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 4); +[_position,_rndnum,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Static Guns +[[ + [(_position select 0) + 25, (_position select 1) + 25, 0], + [(_position select 0) - 25, (_position select 1) - 25, 0] +],"M2StaticMG","Easy",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_BHCRASH_ANNOUNCE","STR_CL_HERO_BHCRASH_WIN","STR_CL_HERO_BHCRASH_FAIL"]; +} else { + ["STR_CL_BANDIT_BHCRASH_ANNOUNCE","STR_CL_BANDIT_BHCRASH_WIN","STR_CL_BANDIT_BHCRASH_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Medium", // Difficulty + "Black Hawk Crash", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/broken_down_ural.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/broken_down_ural.sqf new file mode 100755 index 0000000..6c34e5d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/broken_down_ural.sqf @@ -0,0 +1,46 @@ +private ["_mission","_position","_rndnum","_messages","_aiType","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] Ural Attack]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_UralAttack select 0;} else {Loot_UralAttack select 1;}; + +//Spawn Crates +[[ + [_loot,crates_medium,[-5,-5]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["UralWreck",[0,0]] +],_position,_mission] call wai_spawnObjects; + +//Troops +_rndnum = round (random 5); +[_position,5,"Easy",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 3); +[_position,_rndnum,"Easy","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 3); +[_position,_rndnum,"Easy","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_URAL_ANNOUNCE","STR_CL_HERO_URAL_WIN","STR_CL_HERO_URAL_FAIL"]; +} else { + ["STR_CL_BANDIT_URAL_ANNOUNCE","STR_CL_BANDIT_URAL_WIN","STR_CL_BANDIT_URAL_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Easy", // Difficulty + "Ural Attack", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["kill"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/cannibal_cave.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/cannibal_cave.sqf new file mode 100755 index 0000000..a40c1c0 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/cannibal_cave.sqf @@ -0,0 +1,63 @@ +private ["_mission","_position","_rndnum","_aiType","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [80] call find_position; + +diag_log format["WAI: Mission:[%2] Cannibal started at %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_CannibalCave select 0;} else {Loot_CannibalCave select 1;}; + +//Spawn Crates +[[ + [_loot,crates_large,[5,7]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["MAP_R2_RockWall",[10,28,-4.15]], + ["MAP_R2_RockWall",[-23,9,-6.55],-96.315], + ["MAP_R2_RockWall",[25,4,-7.74],262.32], + ["MAP_R2_RockWall",[1,7,10.81],-29.29], + ["MAP_R2_RockWall",[18,-11,-5.509],-222.72], + ["MAP_R2_RockWall",[-22,6,-11.55],-44.01], + ["MAP_t_picea2s",[-13,-32,-0.1]], + ["MAP_t_picea2s",[-17,6,-0.2]], + ["MAP_t_pinusN2s",[-24,-53,-0.2]], + ["MAP_t_pinusN1s",[-22,-42,-0.2]], + ["MAP_t_picea1s",[-22.3,-35,-0.2]], + ["MAP_t_picea2s",[-33,-53,-0.2]], + ["MAP_t_picea2s",[-3,-43,-0.2]], + ["MAP_t_picea2s",[28,-39,-0.2]], + ["MAP_t_picea2s",[13,43,-0.2]], + ["MAP_t_picea1s",[57,11,-0.2]], + ["MAP_t_quercus3s",[31,49.3,-0.2]], + ["MAP_t_quercus3s",[-47,20,-0.2]], + ["MAP_R2_Rock1",[-47,-45,-14.29]], + ["Land_Campfire_burning",[-0.01,-0.01]], + ["Mass_grave",[-6,-7,-0.02],-50.94], + ["SKODAWreck",[-11,-46],151.15], + ["datsun01Wreck",[-2,-60],34.54], + ["UralWreck",[-41.3,-26],19.15] +],_position,_mission] call wai_spawnObjects; + +[[(_position select 0) + 12, (_position select 1) + 42.5, .01],5,"extreme",["random","AT"],4,"random",_aiType,"random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 11, (_position select 1) + 41, .01],5,"hard","random",4,"random",_aiType,"random",_aiType,_mission] call spawn_group; +[[(_position select 0) - 12, (_position select 1) - 43, .01],5,"random","random",4,"random",_aiType,"random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) - 13, (_position select 1) - 43, .01],_rndnum,"random","random",4,"random",_aiType,"random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) - 20, (_position select 1) - 43, .01],_rndnum,"random","random",4,"random",_aiType,"random",_aiType,_mission] call spawn_group; + +[ + _mission, + _position, // Position of mission + "Hard", // Difficulty + "Cannibal Cave", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + ["STR_CL_GENERAL_CANNIBALCAVE_ANNOUNCE","STR_CL_GENERAL_CANNIBALCAVE_WIN","STR_CL_GENERAL_CANNIBALCAVE_FAIL"] +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/captured_mv22.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/captured_mv22.sqf new file mode 100755 index 0000000..8c163fb --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/captured_mv22.sqf @@ -0,0 +1,66 @@ +private ["_mission","_position","_rndnum","_loot","_aiType","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] Captured MV22]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_CapturedMV22 select 0;} else {Loot_CapturedMV22 select 1;}; + +//Spawn Crates +[[ + [_loot,"USBasicWeaponsBox",[11.2,12.2,.1]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["USMC_WarfareBFieldhHospital",[12.7,6.5],-210], + ["Barrack2",[16,-11],150], + ["Misc_cargo_cont_small",[2.8,17.4],12.5], + ["Barrack2",[9,-15],150], + ["Misc_cargo_cont_small",[6.7,18.3],12.5] +],_position,_mission] call wai_spawnObjects; + +//Troops +[[_position select 0,_position select 1,0],5,"Hard",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 33,(_position select 1) - 7,0.1],5,"Hard","Random",4,"Random","RU_Doctor","Random",[_aiType,100],_mission] call spawn_group; +[[(_position select 0) - 33,(_position select 1) - 18,0.1],5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) + 1,(_position select 1) + 29,0.1],_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) + 1,(_position select 1) + 29,0.1],_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + + + +//Static Guns +[[ + [(_position select 0) - 9.3, (_position select 1) + 11.2, 0], + [(_position select 0) - 6, (_position select 1) - 21.4, 0] +],"M2StaticMG","Hard",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +//Spawn vehicles +["MV22_DZ",[(_position select 0) - 20.5,(_position select 1) - 5.2,0], _mission,true,-82.5] call custom_publish; + +if(wai_debug_mode) then { + diag_log format["WAI: [%2] captured_mv22 spawned a MV22 at %1", _position,_missionType]; +}; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_MV22_ANNOUNCE","STR_CL_HERO_MV22_WIN","STR_CL_HERO_MV22_FAIL"]; +} else { + ["STR_CL_BANDIT_MV22_ANNOUNCE","STR_CL_BANDIT_MV22_WIN","STR_CL_BANDIT_MV22_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Hard", // Difficulty + "Captured MV22", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/cargo.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/cargo.sqf new file mode 100755 index 0000000..c1e4461 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/cargo.sqf @@ -0,0 +1,77 @@ +private ["_rndnum","_crate_type","_mission","_position","_crate","_baserunover","_baserunover0","_baserunover1","_baserunover2","_baserunover3","_baserunover4","_baserunover5","_baserunover6","_baserunover7","_baserunover8","_baserunover9","_baserunover10","_baserunover11","_baserunover12","_baserunover13","_baserunover14","_baserunover15","_baserunover16","_baserunover17","_baserunover18","_baserunover19","_baserunover20","_baserunover21","_baserunover22"]; + +// Get mission number, important we do this early +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[Hero] Cargo]: Starting... %1",_position]; + +//Setup the crate +_crate_type = crates_small call BIS_fnc_selectRandom; +_crate = createVehicle [_crate_type,[(_position select 0) + 0.2,(_position select 1),0], [], 0, "CAN_COLLIDE"]; +_crate call wai_crate_setup; +//Buildings +_baserunover0 = createVehicle ["MAP_Misc_Cargo1Bo",[(_position select 0)+14, (_position select 1) -10, 0],[], 0, "CAN_COLLIDE"]; +_baserunover1 = createVehicle ["MAP_Misc_Cargo2A",[(_position select 0) +18, (_position select 1) -10, 0],[], 0, "CAN_COLLIDE"]; +_baserunover2 = createVehicle ["MAP_Misc_Cargo2B",[(_position select 0) +20, (_position select 1) - 3, 0],[], 0, "CAN_COLLIDE"]; +_baserunover3 = createVehicle ["MAP_Misc_Cargo2C", [(_position select 0) +14, (_position select 1) +1, 0],[], 0, "CAN_COLLIDE"]; +_baserunover4 = createVehicle ["MAP_Misc_Cargo2C", [(_position select 0) +21, (_position select 1) -17, 0],[], 0, "CAN_COLLIDE"]; +_baserunover5 = createVehicle ["MAP_Misc_Cargo1G", [(_position select 0) +9, (_position select 1) -1, 0],[], 0, "CAN_COLLIDE"]; +_baserunover6 = createVehicle ["MAP_Misc_Cargo1E",[(_position select 0) + 11, (_position select 1) +7, 0],[], 0, "CAN_COLLIDE"]; +_baserunover7 = createVehicle ["MAP_Misc_Cargo1C",[(_position select 0) +2, (_position select 1) -15, 0],[], 0, "CAN_COLLIDE"]; +_baserunover8 = createVehicle ["MAP_Misc_Cargo1B",[(_position select 0) +6, (_position select 1) -8, 0],[], 0, "CAN_COLLIDE"]; +_baserunover9 = createVehicle ["MAP_Misc_Cargo2E", [(_position select 0) +3.5, (_position select 1) +6, 0],[], 0, "CAN_COLLIDE"]; +_baserunover10 = createVehicle ["MAP_Misc_Cargo2D", [(_position select 0) -2, (_position select 1) -10, 0],[], 0, "CAN_COLLIDE"]; +_baserunover11 = createVehicle ["MAP_Misc_Cargo1F", [(_position select 0) -11, (_position select 1) +10, 0],[], 0, "CAN_COLLIDE"]; +_baserunover12 = createVehicle ["MAP_Misc_Cargo1E",[(_position select 0) -9, (_position select 1) -4, 0],[], 0, "CAN_COLLIDE"]; +_baserunover13 = createVehicle ["MAP_Misc_Cargo1D",[(_position select 0) +21, (_position select 1) +6, 0],[], 0, "CAN_COLLIDE"]; +_baserunover14 = createVehicle ["MAP_Misc_Cargo1Bo",[(_position select 0) -6, (_position select 1) +6, 0],[], 0, "CAN_COLLIDE"]; +_baserunover15 = createVehicle ["MAP_Misc_Cargo1B",[(_position select 0) -19, (_position select 1) -7, 0],[], 0, "CAN_COLLIDE"]; +_baserunover16 = createVehicle ["MAP_Misc_Cargo1A",[(_position select 0) -15, (_position select 1) -1, 0],[], 0, "CAN_COLLIDE"]; +_baserunover17 = createVehicle ["MAP_Misc_Cargo1G", [(_position select 0) -4, (_position select 1) +16, 0],[], 0, "CAN_COLLIDE"]; +_baserunover18 = createVehicle ["MAP_Misc_Cargo2C", [(_position select 0) +7, (_position select 1) +11, 0],[], 0, "CAN_COLLIDE"]; +_baserunover19 = createVehicle ["MAP_Misc_Cargo2B", [(_position select 0) +4, (_position select 1) -24, 0],[], 0, "CAN_COLLIDE"]; +_baserunover20 = createVehicle ["MAP_Misc_Cargo2C",[(_position select 0) +4, (_position select 1) +20, 0],[], 0, "CAN_COLLIDE"]; +_baserunover21 = createVehicle ["MAP_Misc_Cargo2A",[(_position select 0) -12, (_position select 1) -13, 0],[], 0, "CAN_COLLIDE"]; +_baserunover22 = createVehicle ["MAP_A_CraneCon",[(_position select 0) -21, (_position select 1) +10, 0],[], 0, "CAN_COLLIDE"]; + +_baserunover = [_baserunover0,_baserunover1,_baserunover2,_baserunover3,_baserunover4,_baserunover5,_baserunover6,_baserunover7,_baserunover8,_baserunover9,_baserunover10,_baserunover11,_baserunover12,_baserunover13,_baserunover14,_baserunover15,_baserunover16,_baserunover17,_baserunover18,_baserunover19,_baserunover20,_baserunover21,_baserunover22]; + +_directions = [0,-89,2,0,119,39,86,0,111,-40,0,0,0,-48,-139,-41,14,109,-114,-74,-44,-22,0]; +{ _x setDir (_directions select _forEachIndex) } forEach _baserunover; + +{ _x setVectorUp surfaceNormal position _x; } count _baserunover; + +//Troops +_rndnum = round (random 5); +[[(_position select 0) +3, (_position select 1) +25, 0],5,"Hard",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) -27, (_position select 1) -4, 0],5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) +33, (_position select 1) -2, 0],5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) +10, (_position select 1) -37, 0],_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Humvee Patrol +[[(_position select 0) +60, _position select 1, 0],[(_position select 0) -60, _position select 1, 0],50,2,"HMMWV_Armored","Hard",_aiType,_aiType,_mission] call vehicle_patrol; + +//Static Guns +[[[(_position select 0) +80, (_position select 1) -28, 0]],"KORD_high_TK_EP1","Easy",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; +[[[(_position select 0) +27, (_position select 1) -40, 0]],"KORD_high_TK_EP1","Easy",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +// Array of mission variables to send +[ + _mission, // Mission number + _position, // Position of mission + "Medium", // Difficulty + "Cargo", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + _crate, // crate object info + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + [_baserunover], // cleanup objects + "STR_CL_HERO_CARGO_ANNOUNCE", // mission announcement + "STR_CL_HERO_CARGO_WIN", // mission success + "STR_CL_HERO_CARGO_FAIL", // mission fail + [10,5,20,3,2] // Dynamic crate array +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/castle_grayskull.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/castle_grayskull.sqf new file mode 100755 index 0000000..6090a58 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/castle_grayskull.sqf @@ -0,0 +1,168 @@ +local _mission = count WAI_MissionData -1; +local _aiType = _this select 0; // "Bandit" or "Hero" +local _hero = _aiType == "Hero"; +local _name = "Castle Grayskull"; +local _supportedMaps = ["chernarus","chernarus_winter"]; // The default positions listed below are for Chernarus. If you wish to use this mission on another map then you must gather your own list of flat terrain positions. +local _flatPositions = [[4277.94,9457.53],[4144.92,9439.12],[4229.24,9749.14],[3314.31,10614.7],[2152.91,10467.1],[1956.85,10338.3],[4138.71,12630.3],[3999.11,12659.3],[3733.19,14063.7],[3505.19,14168.2],[5191.49,13994.6],[5986.83,14403.1],[6282.33,14097.3],[6497.14,13582.8],[14255.6,14169.6],[13231.9,10718.3],[12080.6,9895.28],[10612.5,8441.86],[8737.68,9200.67],[7137.15,9483.91],[7406.85,3487.04],[7139.72,5321.27],[5227.21,2202.33],[4149.34,2772.77],[1143.01,2439.9],[1230.53,2526.4],[1157.66,4245.54],[1246.03,4612.52],[4436.68,8472.96],[4748.81,5867.21],[5852.48,11010.3]]; // Chernarus +local _position = [_flatPositions] call isValidSpot; + +if (count _position < 1 || {!(toLower worldName in _supportedMaps)}) exitWith { + if (_hero) then { + WAI_HeroRunning = WAI_HeroRunning - 1; WAI_MissionData set [_mission, -1]; WAI_MarkerReady = true; + } else { + WAI_BanditRunning = WAI_BanditRunning - 1; WAI_MissionData set [_mission, -1]; WAI_MarkerReady = true; + }; +}; + +local _startTime = diag_tickTime; +local _difficulty = "Extreme"; +local _localized = ["STR_CL_MISSION_BANDIT", "STR_CL_MISSION_HERO"] select _hero; +local _localName = "STR_CL_GRAYSKULL_TITLE"; + +diag_log format["[WAI]: %1 %2 started at %3.",_aiType,_name,_position]; + +local _messages = ["STR_CL_GRAYSKULL_ANNOUNCE","STR_CL_GRAYSKULL_WIN","STR_CL_GRAYSKULL_FAIL"]; + +////////////////////// Do not edit this section /////////////////////////// +local _markers = [1,1,1,1]; +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +_markers set [0, [_position, "WAI" + str(_mission), "ColorBlack", "", "ELLIPSE", "Solid", [300,300], [], 0]]; +_markers set [1, [_position, "WAI" + str(_mission) + "dot", "ColorBlack", "mil_dot", "", "", [], [_localized,_localName], 0]]; +if (WAI_AutoClaim) then {_markers set [2, [_position, "WAI" + str(_mission) + "auto", "ColorRed", "", "ELLIPSE", "Border", [WAI_AcAlertDistance,WAI_AcAlertDistance], [], 0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +_markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; + +WAI_MarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _position]; +local _posIndex = count DZE_MissionPositions - 1; + +// Send announcement +[_difficulty,(_messages select 0)] call WAI_Message; + +// Wait until a player is within range or timeout is reached. +local _timeout = false; +local _claimPlayer = objNull; + +while {WAI_WaitForPlayer && !_timeout && {isNull _claimPlayer}} do { + _claimPlayer = [_position, WAI_TimeoutDist] call isClosestPlayer; + + if (diag_tickTime - _startTime >= (WAI_Timeout * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call WAI_AbortMission; + [_difficulty,(_messages select 2)] call WAI_Message; + diag_log format["WAI: %1 %2 aborted.",_aiType,_name,_position]; +}; +//////////////////////////////// End ////////////////////////////////////// + +// Spawn Objects +local _objects = [[ + ["MAP_A_Castle_Bergfrit",[0, 0, 0],-118], + ["Land_A_Castle_Donjon",[-9.9136, -56.3155, -6.9],150], + ["Land_A_Castle_Donjon",[48.269, -23.5899, -6.9],150], + ["Land_A_Castle_Gate",[19.6933, -39.376, 0.16360788],150], + ["Land_A_Castle_Stairs_A",[-3.2178, -9.418, -0.15027224],-27], + ["Land_A_Castle_Wall1_20",[35.7534, -31.0733, -1.0470082],150], + ["Land_A_Castle_Wall1_20",[-22.2061, 31.915, 0],-30], + ["Land_A_Castle_Wall2_30",[-19.3956,-39.5801, -0.5399434],-120], + ["Land_A_Castle_Wall2_30",[38.3569, -9.7383, -0.53297883],-300], + ["Land_A_Castle_Bastion",[-42.6607, 20.5839, 0],-76], + ["Land_A_Castle_Bastion",[-0.7754, 41.1093, 0],33], + ["Land_A_Castle_WallS_End",[11.0483, -8.8145, 0]], + ["Land_A_Castle_Wall2_End_2",[-28.252, -15.7022, 0],60], + ["Land_A_Castle_Wall2_End_2",[25.1665, 13.6259, 0],53], + ["Land_A_Castle_Wall2_Corner_2",[10.893, 25.8378, 0],7], + ["Land_A_Castle_Wall2_Corner_2",[-35.1402, 2.0625, 0],-107], + ["Land_A_Castle_Wall2_End",[-15.6451, -1.5752, 0],-30], + ["Land_A_Castle_Wall2_End",[-12.125, 12.2656, 0],60], + ["Land_A_Castle_Bergfrit",[0, 0, 0],-118], + ["Land_A_Castle_Wall1_20_Turn_ruins",[1.5449, -49.2315, -1.810002],-18], + ["Land_fortified_nest_big",[-4.6485, 11.4218, 0],-29], + ["Land_Fort_Watchtower",[31.0649, -20.5664, 0],-120], + ["Land_Fort_Watchtower",[-2.4654, -40.1768, 0],-120], + ["Land_Fort_Watchtower",[17.6709, 5.6084, 0],-210], + ["Land_HBarrier_large",[-20.0684, 9.3222, -0.16],-114], + ["Land_HBarrier_large",[-8.1246, 29.4492, -0.16],30], + ["Land_HBarrier_large",[0.5297, -31.6856, -0.16],-67], + ["Land_HBarrier_large",[21.2143, -20.9278, -0.16],5], + ["Land_HBarrier_large",[-29.604, 17.0527, -0.16],-74], + ["Land_fort_artillery_nest",[-32.8667, 50.4794, 0.4],-30], + ["Land_fort_artillery_nest",[42.645, 18.2978, 0.4],58], + ["Land_fort_artillery_nest",[-48.6299, -29.17, 0.4],-120], + ["Land_fort_artillery_nest",[18.1303, 64.9013, 0.4],34], + ["Land_fort_artillery_nest",[-72.543, 15.9394, 0.4],-90], + ["Land_fort_artillery_nest",[11.02, -81.7247, 0.4],-180], + ["Land_fort_artillery_nest",[59.4721, -53.6338, 0.4],-240] +],_position,_mission] call WAI_SpawnObjects; + +//Spawn Crates +local _loot1 = [Loot_GraySkull1 select 1, Loot_GraySkull1 select 0] select _hero; +local _loot2 = [Loot_GraySkull2 select 1, Loot_GraySkull2 select 0] select _hero; +local _loot3 = [Loot_GraySkull3 select 1, Loot_GraySkull3 select 0] select _hero; +local _loot4 = [Loot_GraySkull4 select 1, Loot_GraySkull4 select 0] select _hero; + +[[ // Crate in the tower + [_loot1, WAI_CrateMd, [0,0], -32] +],((_objects select 0) modelToWorld [0.341797,-1.85889,8.7569]),_mission] call WAI_SpawnCrate; + +[[ + [_loot2, WAI_CrateMd, [31.7817, -20.461], -34], + [_loot3, WAI_CrateMd, [17.4746, 6.5839], -118], + [_loot4, WAI_CrateMd, [-1.4278, -40.1006], -30] +],_position,_mission] call WAI_SpawnCrate; + +// External Troops +[[(_position select 0) + 37, (_position select 1) + 15, 0],5,_difficulty,"Random","AA","Random",WAI_ApocalypticSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; +[[(_position select 0) + 15, (_position select 1) + 60, 0],5,_difficulty,"Random","AT","Random",WAI_ApocalypticSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; +[[(_position select 0) - 30, (_position select 1) + 45, 0],5,_difficulty,"Random","","Random",WAI_ApocalypticSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; +//[[(_position select 0) - 66, (_position select 1) + 15, 0],5,_difficulty,"Random","","Random",WAI_ApocalypticSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; +//[[(_position select 0) - 43, (_position select 1) - 26, 0],5,_difficulty,"Random","","Random",WAI_ApocalypticSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; +//[[(_position select 0) + 10, (_position select 1) - 77, 0],5,_difficulty,"Random","","Random",WAI_ApocalypticSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; +//[[(_position select 0) + 55, (_position select 1) - 51, 0],5,_difficulty,"Random","","Random",WAI_ApocalypticSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; + +// Internal Troops - these use "SENTRY" waypoint type +[[(_position select 0) - 10, (_position select 1) - 29, .25],5,_difficulty,"Random","AT","Random",WAI_ApocalypticSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; +[[(_position select 0) + 22, (_position select 1) - 11, .25],5,_difficulty,"Random","AA","Random",WAI_ApocalypticSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; +[[(_position select 0) - 1, (_position select 1) + 39, .25],5,_difficulty,"Random","","Random",WAI_ApocalypticSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; +//[[(_position select 0) - 16, (_position select 1) + 25, .25],5,_difficulty,"Random","","Random",WAI_ApocalypticSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; +//[[(_position select 0) - 17, (_position select 1) + 3, .25],5,_difficulty,"Random","","Random",WAI_ApocalypticSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; + +// Vehicle Patrol +[[(_position select 0) + 100, _position select 1, 0],[(_position select 0) + 100, _position select 1, 0],50,2,"BAF_Jackal2_L2A1_D_DZ","Random",_aiType,_aiType,_mission] call WAI_VehPatrol; + +[WAI_UnarmedTrackedVeh,[(_position select 0) - 9.7, (_position select 1) - 8],_mission, true, -209] call WAI_PublishVeh; + +//Static guns +[[ + [(_position select 0) + 27.3671, (_position select 1) - 30.6905, 0], + ((_objects select 2) modelToWorld [-6.04492,6.05078,13.6449]), + [(_position select 0) - 55.6475, (_position select 1) + 33.6943, 0], + [(_position select 0) - 5.6695, (_position select 1) + 59.6269, 0], + ((_objects select 1) modelToWorld [6.00293,6.05811,13.7865]), + [(_position select 0) - 39.3331, (_position select 1) + 19.7656, 0], + [(_position select 0) - 2.6773, (_position select 1) + 7.0332, 0] +],"Random",_difficulty,WAI_ApocalypticSkin,_aiType,"Random","Random","Random",_mission] call WAI_SpawnStatic; + +[ + _mission, // Mission number + _position, // Position of mission + _difficulty, // Difficulty + _name, // Name of Mission + _localName, + _aiType, // "Bandit" or "Hero" + _markerIndex, + _posIndex, + _claimPlayer, + true, // show mission marker? + false, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] spawn WAI_MissionMonitor; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/crop_raider.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/crop_raider.sqf new file mode 100755 index 0000000..078da28 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/crop_raider.sqf @@ -0,0 +1,77 @@ +private ["_mission","_position","_rndnum","_aiType","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [80] call find_position; + +diag_log format["WAI: [Mission:[%2] Hippy Commune]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_CropRaider select 0;} else {Loot_CropRaider select 1;}; + +//Spawn Crates +[[ + [_loot,crates_small,[2,0,.1]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["fiberplant",[-10.8,-16.3]], + ["fiberplant",[16.2,-17.6]], + ["fiberplant",[-17.3,21]], + ["fiberplant",[28.6,29]], + ["fiberplant",[-29.8,-31.1]], + ["fiberplant",[30.2,-33]], + ["fiberplant",[-32,28.7]], + ["fiberplant",[-32,-1.1]], + ["fiberplant",[1.3,-28]], + ["fiberplant",[27,2]], + ["fiberplant",[-0.3,26]], + ["fiberplant",[35.9,39]], + ["fiberplant",[-39,-40.3]], + ["fiberplant",[-36.9,-38.6]], + ["fiberplant",[38,-38.9]], + ["fiberplant",[-37,39.7]], + ["fiberplant",[-0.1,42.3]], + ["fiberplant",[42.1,-0.1]], + ["fiberplant",[0.1,-40.2]], + ["hruzdum",[-0.01,-0.01]], + ["fiberplant",[-10,-11]], + ["fiberplant",[13,12.2]], + ["fiberplant",[12.3,-10.6]], + ["fiberplant",[-11.3,12.7]], + ["fiberplant",[15,10]] +],_position,_mission] call wai_spawnObjects; + +//Group Spawning +[[(_position select 0) + 9, (_position select 1) - 13, 0],5,"Hard",["Random","AT"],4,"Random","Rocker3_DZ","Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 13, (_position select 1) + 15, 0],5,"Hard","Random",4,"Random","Rocker1_DZ","Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 13, (_position select 1) + 15, 0],5,"Hard","Random",4,"Random","Rocker1_DZ","Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) - 13, (_position select 1) + 15, 0],_rndnum,"Hard","Random",4,"Random","Policeman","Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[_position select 0, _position select 1, 0],_rndnum,"Hard","Random",4,"Random","Policeman","Random",_aiType,_mission] call spawn_group; + +//Humvee Patrol +[[(_position select 0) + 55, _position select 1, 0],[(_position select 0) + 50, _position select 1, 0],50,2,"HMMWV_Armored","Hard",_aiType,_aiType,_mission] call vehicle_patrol; + +//Static Guns +[[ + [(_position select 0) - 48, (_position select 1) + 0.1, 0], + [(_position select 0) + 2, (_position select 1) + 48, 0] +],"M2StaticMG","Hard","Policeman",_aiType,0,2,"Random","Random",_mission] call spawn_static; + +//Heli Paradrop +[_position,200,"UH1H_DZ","East",[3000,4000],150,1.0,200,10,"Hard","Random",4,"Random",_aiType,"Random",_aiType,true,_mission] spawn heli_para; + +[ + _mission, // Mission number + _position, // Position of mission + "Hard", // Difficulty + "Crop Raider", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + ["STR_CL_GENERAL_CROPRAIDER_ANNOUNCE","STR_CL_GENERAL_CROPRAIDER_WIN","STR_CL_GENERAL_CROPRAIDER_FAIL"] +] call mission_winorfail; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/drone_pilot.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/drone_pilot.sqf new file mode 100755 index 0000000..2b09aec --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/drone_pilot.sqf @@ -0,0 +1,69 @@ +private ["_mission","_position","_rndnum","_aiType","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [80] call find_position; + +diag_log format["WAI: [Mission:[%2] Drone Pilot]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_DronePilot select 0;} else {Loot_DronePilot select 1;}; + +//Spawn Crates +[[ + [_loot,crates_large,[2,0]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["MQ9PredatorB",[11,-28]], + ["TK_WarfareBUAVterminal_EP1",[-6,-15],-153.81], + ["Land_budova4_in",[-13,3.5]], + ["Land_Vysilac_FM",[-10,-7]], + ["MAP_runway_poj_draha",[10,5]], + ["ClutterCutter_EP1",[10,36]], + ["ClutterCutter_EP1",[10,30]], + ["ClutterCutter_EP1",[10,24]], + ["ClutterCutter_EP1",[10,18]], + ["ClutterCutter_EP1",[10,12]], + ["ClutterCutter_EP1",[10,6]], + ["ClutterCutter_EP1",[10,0.1]], + ["ClutterCutter_EP1",[10,-6]], + ["ClutterCutter_EP1",[10,-12]], + ["ClutterCutter_EP1",[10,-18]], + ["ClutterCutter_EP1",[10,-24]], + ["ClutterCutter_EP1",[-4,-5]] +],_position,_mission] call wai_spawnObjects; + +// Troops +[[(_position select 0) + 17, (_position select 1) - 18, 0],5,"Hard",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) - 11, (_position select 1) + 9, 0],5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 15, (_position select 1) - 15, 0],5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) + 2, (_position select 1) + 18, 0],_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) + 2, (_position select 1) + 18, 0],_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Humvee Patrol +[[(_position select 0) + 55, _position select 1, 0],[(_position select 0) + 17, _position select 1, 0],50,2,"HMMWV_Armored","Hard",_aiType,_aiType,_mission] call vehicle_patrol; + +//Static Guns +[[[(_position select 0) - 7, (_position select 1) + 19, 0]],"KORD_high_TK_EP1","Hard",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_DRONE_ANNOUNCE","STR_CL_HERO_DRONE_WIN","STR_CL_HERO_DRONE_FAIL"]; +} else { + ["STR_CL_BANDIT_DRONEPILOT_ANNOUNCE","STR_CL_BANDIT_DRONEPILOT_WIN","STR_CL_BANDIT_DRONEPILOT_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Hard", // Difficulty + "Drone Pilot", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/drugbust.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/drugbust.sqf new file mode 100755 index 0000000..186a58b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/drugbust.sqf @@ -0,0 +1,69 @@ +private ["_rndnum","_mission","_position","_aiType","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] Drug Bust]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_DrugBust select 0;} else {Loot_DrugBust select 1;}; + +//Spawn Crates +[[ + [_loot,crates_medium,[2.3,-3,.1]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["Land_dum_zboreny",[-0.01,0.02,-0.1]], + ["Land_Misc_Garb_Heap_EP1",[5.6,3.4,-0.01]], + ["MAP_Kitchenstove_Elec",[2,5,-0.1]], + ["MAP_P_toilet_b_02",[-4.4,-3.3,-0.01],-90.84], + ["MAP_P_bath",[-4.9,-5,-0.01]], + ["MAP_armchair",[-1.7,-4.6,-0.01],179.92], + ["MAP_SmallTable",[2.6,1.4,-0.15]], + ["MAP_kitchen_chair_a",[2.5,2.2,-0.01]], + ["Land_Boots_EP1",[8.4,-1.5,-0.01],-170.27], + ["Land_Blankets_EP1",[-6.3,4.8,0.01],-170.27], + ["Land_Bench_EP1",[-3.2,-2.2,0.015]], + ["Land_Water_pipe_EP1",[-1.4,-3,0.01],105.15], + ["Land_Bag_EP1",[-5.9,1.9,0.01]], + ["LADAWreck",[-8,-4,-0.01],-119.578], + ["SKODAWreck",[11,-3,-0.01]], + ["MAP_tv_a",[-2.7,-0.1,0.01]], + ["MAP_Dkamna_uhli",[-0.01,5,-0.1]], + ["MAP_Skrin_opalena",[1.2,0.1,0.05]], + ["MAP_Dhangar_whiteskrin",[0.9,1.6,0.05],91.19], + ["MAP_garbage_paleta",[5.3,-2,-0.01]], + ["MAP_t_salix2s",[-0.01,15,-0.01],47.639], + ["MAP_t_salix2s",[-0.01,-17,-0.01]], + ["MAP_t_salix2s",[25,-0.01,-0.01]], + ["MAP_t_salix2s",[-24,-0.01,-0.01]] +],_position,_mission] call wai_spawnObjects; + +//Troops +[[(_position select 0) - 12, (_position select 1) - 15,0],5,"Medium",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 12, (_position select 1) + 15,0],5,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 4); +[[(_position select 0), (_position select 1), 0],_rndnum,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 4); +[[(_position select 0), (_position select 1), 0],_rndnum,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_DRUGBUST_ANNOUNCE","STR_CL_HERO_DRUGBUST_WIN","STR_CL_HERO_DRUGBUST_FAIL"]; +} else { + ["STR_CL_BANDIT_DRUGBUST_ANNOUNCE","STR_CL_BANDIT_DRUGBUST_WIN","STR_CL_BANDIT_DRUGBUST_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Medium", // Difficulty + "Drug Bust", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/fallen_satellite.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/fallen_satellite.sqf new file mode 100755 index 0000000..2f9ebc3 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/fallen_satellite.sqf @@ -0,0 +1,65 @@ +private ["_crate_type","_mission","_position","_crate","_rndnum","_baserunover","_baserunover0","_baserunover1","_baserunover2","_baserunover3","_baserunover4","_baserunover5"]; + +// Get mission number, important we do this early +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[Hero] Fallen Satellite]: Starting... %1",_position]; + +//Setup the crate +_crate_type = crates_small call BIS_fnc_selectRandom; +_crate = createVehicle [_crate_type,[5935.9839,12235.38,0],[],0,"CAN_COLLIDE"]; +_crate call wai_crate_setup; + + +//Buildings +_baserunover0 = createVehicle ["Satelit",[(_position select 0) - 8.41, (_position select 1) + 3.37, -0.013],[], 0, "CAN_COLLIDE"]; +_baserunover1 = createVehicle ["MAP_rubble_metal_plates_03",[(_position select 0) - 8.1, (_position select 1) - 3.8, 0.01],[], 0, "CAN_COLLIDE"]; +_baserunover2 = createVehicle ["MAP_rubble_metal_plates_01",[(_position select 0) - 6.8, (_position select 1) - 1.6, -0.015],[], 0, "CAN_COLLIDE"]; +_baserunover3 = createVehicle ["Land_Dirthump01",[(_position select 0) - 7.4, (_position select 1) -2.8, -1.96],[], 0, "CAN_COLLIDE"]; +_baserunover4 = createVehicle ["Land_Dirthump01",[(_position select 0) - 6.6, (_position select 1) -2.8, -1.99],[], 0, "CAN_COLLIDE"]; +_baserunover5 = createVehicle ["Land_Fire_barrel_burning",[(_position select 0) -6.1, (_position select 1) -3.8, -0.85],[], 0, "CAN_COLLIDE"]; + + +// Adding buildings to one variable just for tidiness +_baserunover = [_baserunover0,_baserunover1,_baserunover2,_baserunover3,_baserunover4,_baserunover5]; + +// Set some directions for our buildings +_directions = [0,0,61.76,-2.706,-66.12,0]; +{ _x setDir (_directions select _forEachIndex) } forEach _baserunover; + +// Make buildings flat on terrain surface +{ _x setVectorUp surfaceNormal position _x; } count _baserunover; + +//Troops +_rndnum = round (random 5); +[[(_position select 0) - 22, (_position select 1) +7,0],5,"Easy",["Random","AT"],3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) +15, (_position select 1) -19,0],5,"Easy","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) +15, (_position select 1) +3,0],4,"Easy","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) - 16, (_position select 1) -13,0],_rndnum,"Easy","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Static Guns +[[ + [(_position select 0) - 8, (_position select 1) + 12, 0.1], + [(_position select 0) - 4.7, (_position select 1) - 16, 0.1] +],"M2StaticMG","Easy",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +// Array of mission variables to send +[ + _mission, // Mission number + _position, // Position of mission + "Medium", // Difficulty + "Fallen Satellite", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + _crate, // crate object info + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + [], // cleanup objects + "STR_CL_HERO_FALLENSATELLITE_ANNOUNCE", // mission announcement + "STR_CL_HERO_FALLENSATELLITE_WIN", // mission success + "STR_CL_HERO_FALLENSATELLITE_FAIL", // mission fail + [10,4,0,3,2] // Dynamic crate array +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/farmer.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/farmer.sqf new file mode 100755 index 0000000..ce5cff8 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/farmer.sqf @@ -0,0 +1,58 @@ +private ["_rndnum","_mission","_position","_messages","_aiType","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] Farmer]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_Farmer select 0;} else {Loot_Farmer select 1;}; + +//Spawn Crates +[[ + [_loot,crates_medium,[.3,0,.4]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["MAP_HouseV2_01A",[-37,15],-107], + ["MAP_Farm_WTower",[-17,32]], + ["MAP_sara_stodola3",[12,36.5],20.6], + ["MAP_Misc_Cargo1C",[17,4],5.9], + ["MAP_Misc_Cargo1C",[15,12],-41.2], + ["MAP_t_picea2s",[-17.5,9]], + ["MAP_t_picea2s",[-1,-13]], + ["MAP_t_picea2s",[-8.5,51.5]], + ["MAP_t_picea2s",[18.5,-9.4]], + ["Haystack",[7,24.5],15.3], + ["MAP_stodola_old_open",[0,-2,0.4],-80.8] +],_position,_mission] call wai_spawnObjects; + +//Troops +[[(_position select 0) -17,(_position select 1) +29,0],5,"Easy",["Random","AT"],4,"Random","RU_Villager2","Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 3); +[[(_position select 0) -12,(_position select 1) +20,0],_rndnum,"Random","Random",4,"Random","Citizen2_EP1","Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 3); +[[(_position select 0) -17,(_position select 1) +29,0],_rndnum,"Easy",["Random","AT"],4,"Random","RU_Villager2","Random",_aiType,_mission] call spawn_group; + +//Spawn vehicles +["Tractor_DZE",[(_position select 0) -6.5, (_position select 1) +12.7],_mission,true,46.7] call custom_publish; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_FARMER_ANNOUNCE","STR_CL_HERO_FARMER_WIN","STR_CL_HERO_FARMER_FAIL"]; +} else { + ["STR_CL_BANDIT_FARMER_ANNOUNCE","STR_CL_BANDIT_FARMER_WIN","STR_CL_BANDIT_FARMER_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Easy", // Difficulty + "Farmer", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["kill"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/firestation.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/firestation.sqf new file mode 100755 index 0000000..6bd2783 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/firestation.sqf @@ -0,0 +1,69 @@ +private ["_rndnum","_mission","_position","_messages","_aiType","_missionType","_loot1","_loot2"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [50] call find_position; + +diag_log format["WAI: [Mission:[%2] Fire Station]: Starting... %1",_position,_missionType]; + +_loot1 = if (_missionType == "MainHero") then {Loot_Firestation1 select 0;} else {Loot_Firestation1 select 1;}; +_loot2 = if (_missionType == "MainHero") then {Loot_Firestation2 select 0;} else {Loot_Firestation2 select 1;}; + +//Spawn Crates +[[ + [_loot1,crates_large,[-3.6,-4.4],-30], + [_loot2,crates_large,[2,-1.1],-30] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["MAP_a_stationhouse",[0,0],-210], + ["Land_fort_bagfence_round",[3.5,-20],68], + ["Land_fort_bagfence_round",[-1,-23.3],219] +],_position,_mission] call wai_spawnObjects; + +//Troops +[_position,5,"Extreme",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[_position,_rndnum,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[_position,_rndnum,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +// Spawn Vehicle +[armed_vehicle,[(_position select 0) -9.5, (_position select 1) -6.8],_mission,true,-29] call custom_publish; + +//Humvee Patrol +[[(_position select 0) + 100, _position select 1, 0],[(_position select 0) + 100, _position select 1, 0],50,2,"HMMWV_Armored","Random",_aiType,_aiType,_mission] call vehicle_patrol; + +//Heli Paradrop +[_position,400,"UH60M_EP1_DZE","East",[3000,4000],150,1.0,200,10,"Random","Random",4,"Random",_aiType,"Random",_aiType,false,_mission] spawn heli_para; + +//Static guns +[[ + [(_position select 0) + 4.9, (_position select 1) + 6.5, 17.94], + [(_position select 0) - 12.8, (_position select 1) - 4.2, 4.97], + [(_position select 0) + 0.9, (_position select 1) - 20.9, 0], + [(_position select 0) + 23.5, (_position select 1) + 1.1, 8.94] +],"M2StaticMG","Extreme",_aiType,_aiType,1,2,"Random","Random",_mission] call spawn_static; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_FIRESTATION_ANNOUNCE","STR_CL_HERO_FIRESTATION_WIN","STR_CL_HERO_FIRESTATION_FAIL"]; +} else { + ["STR_CL_BANDIT_FIRESTATION_ANNOUNCE","STR_CL_BANDIT_FIRESTATION_WIN","STR_CL_BANDIT_FIRESTATION_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Extreme", // Difficulty + "Fire Station", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/gem_tower.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/gem_tower.sqf new file mode 100755 index 0000000..af0b77f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/gem_tower.sqf @@ -0,0 +1,55 @@ +private ["_mission","_position","_aiType","_rndnum","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [80] call find_position; + +diag_log format["WAI: [Mission:[%2] Gem Tower]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_GemTower select 0;} else {Loot_GemTower select 1;}; + +//Spawn Crates +[[ + [_loot,crates_medium,[-20,11]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["Land_Misc_Coltan_Heap_EP1",[-3.41,16.4,-2.5],-82.16], + ["Land_Ind_SiloVelke_01",[-0.01,-0.01,-0.25]], + ["Land_Ind_SiloVelke_01",[-21,-0.4,-0.25],182.209], + ["Land_Misc_Coltan_Heap_EP1",[-31,12,-2],8.27], + ["Land_A_Castle_Bastion",[-21,11,-0.2]], + ["Land_Misc_Coltan_Heap_EP1",[-26,34,-2]] +],_position,_mission] call wai_spawnObjects; + +//Troops +[[(_position select 0) + 29, (_position select 1) - 21, 0],5,"Hard",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 21, (_position select 1) + 19, 0],5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) - 23, (_position select 1) - 19, 0],5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) - 12, (_position select 1) + 23, 0],_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) - 12, (_position select 1) + 23, 0],_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Humvee Patrol +[[(_position select 0) + 50, _position select 1, 0],[(_position select 0) - 60, _position select 1, 0],50,2,"HMMWV_Armored","Hard",_aiType,_aiType,_mission] call vehicle_patrol; + +//Static Guns +[[ + [(_position select 0) - 1, (_position select 1) + 39, 0], + [(_position select 0) + 33, (_position select 1) - 21, 0] +],"KORD_high_TK_EP1","Easy",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +[ + _mission, // Mission number + _position, // Position of mission + "Hard", // Difficulty + "Gem Tower", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + ["STR_CL_GENERAL_GEMTOWER_ANNOUNCE","STR_CL_GENERAL_GEMTOWER_WIN","STR_CL_GENERAL_GEMTOWER_FAIL"] +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/gold_mine.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/gold_mine.sqf new file mode 100755 index 0000000..67bc759 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/gold_mine.sqf @@ -0,0 +1,84 @@ +private ["_rndnum","_crate_type","_mission","_position","_crate","_baserunover","_baserunover0","_baserunover1","_baserunover2","_baserunover3","_baserunover4","_baserunover5","_baserunover6","_baserunover7","_baserunover8","_baserunover9","_baserunover10","_baserunover11","_baserunover12","_baserunover13","_baserunover14","_baserunover15","_baserunover16","_baserunover17","_baserunover18","_baserunover19","_baserunover20","_baserunover21","_baserunover22","_baserunover23","_baserunover24","_baserunover25","_baserunover26","_baserunover27","_baserunover28","_baserunover29","_baserunover30"]; + +// Get mission number, important we do this early +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[Hero] Gold Mine]: Starting... %1",_position]; + +//Setup the crate +_crate_type = crates_small call BIS_fnc_selectRandom; +_crate = createVehicle [_crate_type,[(_position select 0) + 0.2,(_position select 1),0], [], 0, "CAN_COLLIDE"]; +_crate call wai_crate_setup; +//Buildings +_baserunover0 = createVehicle ["MAP_R2_RockWall",[(_position select 0) -24, (_position select 1) +11,-7.1],[], 0, "CAN_COLLIDE"]; +_baserunover1 = createVehicle ["MAP_R2_RockWall",[(_position select 0) +6, (_position select 1) +16, -5.9],[], 0, "CAN_COLLIDE"]; +_baserunover2 = createVehicle ["MAP_R2_RockWall",[(_position select 0) + 30, (_position select 1) + 3, -7.1],[], 0, "CAN_COLLIDE"]; +_baserunover3 = createVehicle ["MAP_R2_RockWall", [(_position select 0) +45, (_position select 1) -18, -7.1],[], 0, "CAN_COLLIDE"]; +_baserunover4 = createVehicle ["MAP_R2_RockWall", [(_position select 0) - 29, (_position select 1) -12, -7.1],[], 0, "CAN_COLLIDE"]; +_baserunover5 = createVehicle ["MAP_R2_RockWall", [(_position select 0) - 0.1, (_position select 1) +15, +16.85],[], 0, "CAN_COLLIDE"]; +_baserunover6 = createVehicle ["MAP_R2_RockWall",[(_position select 0) + 19, (_position select 1) -9, +17.6],[], 0, "CAN_COLLIDE"]; +_baserunover7 = createVehicle ["MAP_R2_RockWall",[(_position select 0) -11, (_position select 1) -3, +14.8],[], 0, "CAN_COLLIDE"]; +_baserunover8 = createVehicle ["MAP_R2_RockWall",[(_position select 0) -3, (_position select 1) -9, +20.37],[], 0, "CAN_COLLIDE"]; +_baserunover9 = createVehicle ["MAP_R2_RockWall", [(_position select 0) -29, (_position select 1) -27, -7.1],[], 0, "CAN_COLLIDE"]; +_baserunover10 = createVehicle ["MAP_R2_RockWall", [(_position select 0) -20, (_position select 1) -36, -7.1],[], 0, "CAN_COLLIDE"]; +_baserunover11 = createVehicle ["MAP_R2_RockWall", [(_position select 0) - 2, (_position select 1) - 25, +16.2],[], 0, "CAN_COLLIDE"]; +_baserunover12 = createVehicle ["MAP_R2_RockWall",[(_position select 0) + 11, (_position select 1) - 30, +16.2],[], 0, "CAN_COLLIDE"]; +_baserunover13 = createVehicle ["MAP_R2_RockTower",[(_position select 0) +7, (_position select 1) - 24, -20.4],[], 0, "CAN_COLLIDE"]; +_baserunover14 = createVehicle ["MAP_R2_Boulder2",[(_position select 0) +14, (_position select 1) - 27, -0.015],[], 0, "CAN_COLLIDE"]; +_baserunover15 = createVehicle ["MAP_R2_Boulder1",[(_position select 0) +18, (_position select 1) - 37, -0.015],[], 0, "CAN_COLLIDE"]; +_baserunover16 = createVehicle ["MAP_R2_Rock1",[(_position select 0) - 2, (_position select 1) - 7, -25.05],[], 0, "CAN_COLLIDE"]; +_baserunover17 = createVehicle ["MAP_Ind_HammerMill", [(_position select 0) +30, (_position select 1) - 53,-6.1],[], 0, "CAN_COLLIDE"]; +_baserunover18 = createVehicle ["UralWreck", [(_position select 0) +34, (_position select 1) -59,-0.01],[], 0, "CAN_COLLIDE"]; +_baserunover19 = createVehicle ["MAP_Ind_Conveyer", [(_position select 0) + 22, (_position select 1) -45, 0.1],[], 0, "CAN_COLLIDE"]; +_baserunover20 = createVehicle ["Land_Dirthump01",[(_position select 0) +13, (_position select 1) - 38,-1.41],[], 0, "CAN_COLLIDE"]; +_baserunover21 = createVehicle ["Land_Dirthump01",[(_position select 0) +13, (_position select 1) - 39,-1.45],[], 0, "CAN_COLLIDE"]; +_baserunover22 = createVehicle ["MAP_R2_RockTower",[(_position select 0) + 60, (_position select 1) -55,-26.69],[], 0, "CAN_COLLIDE"]; +_baserunover23 = createVehicle ["MAP_R2_RockTower", [(_position select 0) + 12, (_position select 1) -121,-0.02],[], 0, "CAN_COLLIDE"]; +_baserunover24 = createVehicle ["Gold_Vein_DZE", [(_position select 0) +13, (_position select 1) -14,-0.01],[], 0, "CAN_COLLIDE"]; +_baserunover25 = createVehicle ["Gold_Vein_DZE", [(_position select 0) - 6, (_position select 1) - 25,-0.01],[], 0, "CAN_COLLIDE"]; +_baserunover26 = createVehicle ["Gold_Vein_DZE",[(_position select 0) - 8, (_position select 1) -17,-0.01],[], 0, "CAN_COLLIDE"]; +_baserunover27 = createVehicle ["fiberplant",[(_position select 0) +7, (_position select 1) -1,-0.02],[], 0, "CAN_COLLIDE"]; +_baserunover28 = createVehicle ["fiberplant",[(_position select 0) +5, (_position select 1) -6,-0.02],[], 0, "CAN_COLLIDE"]; +_baserunover29 = createVehicle ["fiberplant",[(_position select 0) - 13, (_position select 1) -21,-0.02],[], 0, "CAN_COLLIDE"]; +_baserunover30 = createVehicle ["fiberplant", [(_position select 0) + 19, (_position select 1) -21,-0.02],[], 0, "CAN_COLLIDE"]; + +_baserunover = [_baserunover0,_baserunover1,_baserunover2,_baserunover3,_baserunover4,_baserunover5,_baserunover6,_baserunover7,_baserunover8,_baserunover9,_baserunover10,_baserunover11,_baserunover12,_baserunover13,_baserunover14,_baserunover15,_baserunover16,_baserunover17,_baserunover18,_baserunover19,_baserunover20,_baserunover21,_baserunover22,_baserunover23,_baserunover24,_baserunover25,_baserunover26,_baserunover27,_baserunover28,_baserunover29,_baserunover30]; + +_directions = [-85.388,-151.6,40.18,131.1,-258.57,0,-128.72,165.8,0,66.4,23.5,-13.9,-28.07,0,0,0,-4.74,-69.97,14.54,116.29,92.4,42.23,0,98.4,0,0,0,0,0,0,0]; +{ _x setDir (_directions select _forEachIndex) } forEach _baserunover; + +{ _x setVectorUp surfaceNormal position _x; } count _baserunover; + +//Troops +_rndnum = round (random 5); +[[(_position select 0) +20, (_position select 1) - 54, 0],5,"Medium",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) - 15, (_position select 1) - 70, 0],5,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 60, (_position select 1) - 38, 0],4,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 33, (_position select 1) + 20, 0],_rndnum,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Static Guns +[[ + [(_position select 0) + 44, (_position select 1) - 55, 0], + [(_position select 0) + 4, (_position select 1) - 70, 0] +],"M2StaticMG","Hard",_aiType,_aiType,1,2,"Random","Random",_mission] call spawn_static; + +// Array of mission variables to send +[ + _mission, // Mission number + _position, // Position of mission + "Medium", // Difficulty + "Gold Mine", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + _crate, // crate object info + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + [_baserunover], // cleanup objects + "STR_CL_HERO_GOLDMINE_ANNOUNCE", // mission announcement + "STR_CL_HERO_GOLDMINE_WIN", // mission success + "STR_CL_HERO_GOLDMINE_FAIL", // mission fail + [10,5,20,3,2] // Dynamic crate array +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/ikea_convoy.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/ikea_convoy.sqf new file mode 100755 index 0000000..386b395 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/ikea_convoy.sqf @@ -0,0 +1,56 @@ +private ["_rndnum","_mission","_position","_aiType","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [40] call find_position; + +diag_log format["WAI: [Mission:[%2] Lunch break Convoy]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_IkeaConvoy select 0;} else {Loot_IkeaConvoy select 1;}; + +//Spawn Crates +[[ + [_loot,crates_large,[0,0]] +],_position,_mission] call wai_spawnCrate; + +//Troops +[_position,5,"Hard",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[_position,_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[_position,_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Static Guns +[[ + [(_position select 0) - 30, (_position select 1) + 4, 0], + [(_position select 0) + 10, (_position select 1) - 30, 0], + [(_position select 0) + 8, (_position select 1) + 30, 0] +],"M2StaticMG","Hard",_aiType,_aiType,1,2,"Random","Random",_mission] call spawn_static; + +//Heli Para Drop +[_position,400,"BAF_Merlin_HC3_D","North",[3000,4000],150,1.0,200,10,"Random","Random",4,"Random",_aiType,"Random",_aiType,false,_mission] spawn heli_para; + +[cargo_trucks,[(_position select 0) + 19,(_position select 1) + 11],_mission,true,90] call custom_publish; +[refuel_trucks,[(_position select 0) - 14,(_position select 1) - 14],_mission,true,-90] call custom_publish; +[military_unarmed,[(_position select 0) - 20,(_position select 1) - 6],_mission,true,-90] call custom_publish; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_IKEA_ANNOUNCE","STR_CL_HERO_IKEA_WIN","STR_CL_HERO_IKEA_FAIL"]; +} else { + ["STR_CL_BANDIT_IKEA_ANNOUNCE","STR_CL_BANDIT_IKEA_WIN","STR_CL_BANDIT_IKEA_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Hard", // Difficulty + "IKEA Convoy", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/junkyard.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/junkyard.sqf new file mode 100755 index 0000000..0433632 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/junkyard.sqf @@ -0,0 +1,77 @@ +private ["_rndnum","_mission","_position","_aiType","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] Junk Yard]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_Junkyard select 0;} else {Loot_Junkyard select 1;}; + +//Spawn Crates +[[ + [_loot,crates_small,[.2,0]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["Mi8Wreck",[31,-12.4,-0.12]], + ["UralWreck",[-7,-9,-0.04],-49.99], + ["UralWreck",[23,4,-0.04],201.46], + ["UralWreck",[-7,23,-0.04],80.879], + ["HMMWVWreck",[-8,7,-0.04],44.77], + ["BMP2Wreck",[-4,24,-0.02],-89], + ["T72Wreck",[11,-13,-0.02],27], + ["UralWreck",[14,10,-0.02],162], + ["T72Wreck",[4,16,-0.02]], + ["UH60_ARMY_Wreck_DZ",[7,1.3,-0.02],-41], + ["Land_Dirthump01",[9,1,-1.59],25], + ["Land_Dirthump01",[8,0.2,-1.59],53], + ["Mi8Wreck",[5,-34,-0.02],94], + ["BRDMWreck",[-1,-20,-0.12],-1.7], + ["T72Wreck",[-9,-21,-0.02],-75], + ["Mi8Wreck",[-21,-5,-0.02],-24], + ["Land_Misc_Rubble_EP1",[-10.02,7,-0.1]], + ["Land_Shed_W03_EP1",[-7,-1.4,-0.02],-99], + ["Land_Misc_Garb_Heap_EP1",[-6,1,-0.02]], + ["Land_Misc_Garb_Heap_EP1",[18,10,-0.02]], + ["Land_Misc_Garb_Heap_EP1",[-10,-12,-0.02]], + ["MAP_garbage_misc",[5,-21,-0.02]], + ["MAP_garbage_misc",[7,18,-0.02],-178], + ["MAP_garbage_paleta",[-12,14,-0.02],-91], + ["MAP_Kitchenstove_Elec",[-11,1.5,-0.02],146], + ["MAP_tv_a",[-12,-0.01,-0.02],108], + ["MAP_washing_machine",[-11,-1,-0.02],100], + ["MAP_P_toilet_b_02",[-16,0.01,-0.02],36], + ["Land_Misc_Garb_Heap_EP1",[-17,-3,-0.02],93], + ["MAP_garbage_paleta",[-11,-0.01,-0.02],21], + ["Land_Fire_barrel_burning",[-13,-3,-0.02]], + ["Land_Fire_barrel_burning",[2,-9,-0.02]] +],_position,_mission] call wai_spawnObjects; + +//Troops +[[(_position select 0) - 2, (_position select 1) - 5, 0],5,"Medium",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) - 19, (_position select 1) + 19, 0],5,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 4); +[[(_position select 0) + 17, (_position select 1) + 21, 0],_rndnum,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 4); +[[(_position select 0) + 17, (_position select 1) + 21, 0],_rndnum,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_JUNKYARD_ANNOUNCE","STR_CL_HERO_JUNKYARD_WIN","STR_CL_HERO_JUNKYARD_FAIL"]; +} else { + ["STR_CL_BANDIT_JUNKYARD_ANNOUNCE","STR_CL_BANDIT_JUNKYARD_WIN","STR_CL_BANDIT_JUNKYARD_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Medium", // Difficulty + "Junk Yard", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/lumberjack.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/lumberjack.sqf new file mode 100755 index 0000000..05cbd8c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/lumberjack.sqf @@ -0,0 +1,55 @@ +private ["_mission","_position","_loot","_rndnum","_aiType","_messages","_missionType"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [80] call find_position; + +diag_log format["WAI: Mission:[%2] Lumber Mill started at %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_LumberJack select 0;} else {Loot_LumberJack select 1;}; + +//Spawn Crates +[[ + [_loot,crates_large,[5,7]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["Land_Ind_SawMill",[-2.4,24]], + ["Land_Ind_Timbers",[11,8.6,-.1]], + ["Land_Ind_Timbers",[16,12,-.1],-10.45], + ["Land_Ind_Timbers",[6,-15],104.95], + ["Misc_palletsfoiled",[5,-9,-0.009]], + ["Misc_palletsfoiled_heap",[9,-8,-0.05]], + ["Land_water_tank",[-10,-7]], + ["UralWreck",[-17,5],59.2], + ["MAP_t_quercus3s",[22,25,-0.2]] +],_position,_mission] call wai_spawnObjects; + +// Troops +[[(_position select 0) + 12, (_position select 1) + 22.5, 0],5,"extreme",["random","at"],4,"random",_aiType,"random",[_aiType,150],_mission] call spawn_group; +[[(_position select 0) + 21, (_position select 1) + 11, 0],5,"hard","random",4,"random",_aiType,"random",_aiType,_mission] call spawn_group; +[[(_position select 0) - 1.12, (_position select 1) - 0.43, 0],5,"random","random",4,"random",_aiType,"random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) - 13, (_position select 1) - 23, 0],_rndnum,"random","random",4,"random",_aiType,"random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) - 13, (_position select 1) - 23, 0],_rndnum,"random","random",4,"random",_aiType,"random",_aiType,_mission] call spawn_group; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_LUMBER_ANNOUNCE","STR_CL_HERO_LUMBER_WIN","STR_CL_HERO_LUMBER_FAIL"]; +} else { + ["STR_CL_BANDIT_LUMBERMILL_ANNOUNCE","STR_CL_BANDIT_LUMBERMILL_WIN","STR_CL_BANDIT_LUMBERMILL_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Hard", // Difficulty + "Lumber Mill", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/macdonald.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/macdonald.sqf new file mode 100755 index 0000000..9ce9d95 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/macdonald.sqf @@ -0,0 +1,61 @@ +private ["_rndnum","_mission","_position","_aiType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] The Farm]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_MacDonald select 0;} else {Loot_MacDonald select 1;}; + +//Spawn Crates +[[ + [_loot,crates_small,[.02,0,.15]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["MAP_sara_stodola",[4,-5,-0.12]], + ["MAP_HouseV_2T2",[18,-11,-0.14]], + ["MAP_t_quercus3s",[32.4,-32,-0.14]], + ["MAP_t_quercus2f",[14,-3,-0.14]], + ["MAP_t_pinusN2s",[-12,5,-0.14]], + ["datsun01Wreck",[-10,-1,-0.02]], + ["Haystack",[-1,-32,-0.02]], + ["Haystack_small",[-25,-36,-0.16]], + ["Haystack_small",[33,-43,-0.02]], + ["Haystack_small",[10,-49,-0.02]], + ["Haystack_small",[13,60,-0.02]], + ["Haystack_small",[-33,-51,-0.02]], + ["Haystack_small",[20,-67,-0.02]], + ["Land_Shed_wooden",[10,-24,-0.02]], + ["fiberplant",[12,-23,-0.02]] +],_position,_mission] call wai_spawnObjects; + +//Troops +[[(_position select 0) - 1, (_position select 1) - 10, 0],5,"Hard",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) - 2, (_position select 1) - 50, 0],5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) - 1, (_position select 1) + 11, 0],5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) - 1, (_position select 1) + 11, 0],_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) - 1, (_position select 1) + 11, 0],_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Humvee Patrol +[[(_position select 0) - 27, (_position select 1) - 18, 0],[(_position select 0) + 32, (_position select 1) + 1, 0],50,2,"Offroad_DSHKM_Gue_DZ","Hard",_aiType,_aiType,_mission] call vehicle_patrol; + +//Static Guns +[[[(_position select 0) - 12, (_position select 1) - 18, 0]],"M2StaticMG","Hard",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +[ + _mission, // Mission number + _position, // Position of mission + "Hard", // Difficulty + "The Farm", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + ["STR_CL_GENERAL_FARM_ANNOUNCE","STR_CL_GENERAL_FARM_WIN","STR_CL_GENERAL_FARM_FAIL"] +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/mayors_mansion.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/mayors_mansion.sqf new file mode 100755 index 0000000..fa5ac7a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/mayors_mansion.sqf @@ -0,0 +1,75 @@ +private ["_rndnum","_room","_mayor_himself","_mission","_position","_mansion","_mayor","_aiType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [40] call find_position; + +diag_log format["WAI: [Mission:[%2] Mayors Mansion]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_Mayors select 0;} else {Loot_Mayors select 1;}; + +//Spawn Crates +[[ + [_loot,crates_large,[0,0,.25]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +_mansion = [[ + ["Land_A_Villa_EP1",[0,0]] +],_position,_mission] call wai_spawnObjects; + +//Troops +[_position,5,"Extreme",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[_position,_rndnum,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[_position,_rndnum,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//The Mayor Himself +_mayor = [_position,1,"Extreme","Random",4,"Random","Special","Random",[_aiType,300],_mission] call spawn_group; +_mayor_himself = (units _mayor) select 0; + +//Put the Mayor in his room +_room = (6 + ceil(random(3))); +_mayor_himself disableAI "MOVE"; +_mayor_himself setPos (_mansion buildingPos _room); + +//Let him move once player is near +_mayor_himself spawn { + private ["_mayor","_player_near"]; + _mayor = _this; + _player_near = false; + while {!_player_near} do { + _player_near = [(position _mayor),30] call isNearPlayer; + uiSleep 1; + }; + _mayor enableAI "MOVE"; +}; + +//Humvee Patrol +[[(_position select 0) + 100, _position select 1, 0],[(_position select 0) + 100, _position select 1, 0],50,2,"HMMWV_Armored","Random",_aiType,_aiType,_mission] call vehicle_patrol; + +//Heli Paradrop +[_position,400,"UH60M_EP1_DZE","North",[3000,4000],150,1.0,100,10,"Random","Random",4,"Random",_aiType,"Random",_aiType,false,_mission] spawn heli_para; + +//Static mounted guns +[[ + [(_position select 0) - 15, (_position select 1) + 15, 8], + [(_position select 0) + 15, (_position select 1) - 15, 8] +],"M2StaticMG","Extreme",_aiType,_aiType,1,2,"Random","Random",_mission] call spawn_static; + +[ + _mission, // Mission number + _position, // Position of mission + "Extreme", // Difficulty + "Mayors Mansion", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["assassinate",_mayor], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + ["STR_CL_MAYOR_ANNOUNCE","STR_CL_MAYOR_WIN","STR_CL_MAYOR_FAIL"] +] call mission_winorfail; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/medi_camp.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/medi_camp.sqf new file mode 100755 index 0000000..e246e59 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/medi_camp.sqf @@ -0,0 +1,50 @@ +private ["_rndnum","_mission","_position","_aiType","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] Medical Supply Camp]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_MediCamp select 0;} else {Loot_MediCamp select 1;}; + +//Spawn Crates +[[ + [_loot,"USVehicleBox",[0,0],60] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["MAP_fort_watchtower",[1.5,12.6],-210], + ["MAP_MASH",[-17,5.3],60], + ["MAP_Stan_east",[-16.5,15.9],-30], + ["USMC_WarfareBFieldhHospital",[3,-4.4],60], + ["MAP_Stan_east",[-10,19.6],-30], + ["MAP_MASH",[-14,-0.4],60] +],_position,_mission] call wai_spawnObjects; + +//Troops +[[(_position select 0) - 7.5,(_position select 1) + 7.9,0],5,"Easy",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 3); +[[(_position select 0) - 26,(_position select 1) - 2.4,0],_rndnum,"Easy","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 3); +[[(_position select 0) - 26,(_position select 1) - 2.4,0],_rndnum,"Easy","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_MSC_ANNOUNCE","STR_CL_HERO_MSC_WIN","STR_CL_HERO_MSC_FAIL"]; +} else { + ["STR_CL_BANDIT_MSC_ANNOUNCE","STR_CL_BANDIT_MSC_WIN","STR_CL_BANDIT_MSC_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Easy", // Difficulty + "Medical Supply Camp", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["kill"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/oil_depot.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/oil_depot.sqf new file mode 100755 index 0000000..40f973e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/oil_depot.sqf @@ -0,0 +1,73 @@ +private ["_rndnum","_crate_type","_mission","_position","_crate","_baserunover","_baserunover0","_baserunover1","_baserunover2","_baserunover3","_baserunover4","_baserunover5","_baserunover6","_baserunover7","_baserunover8","_baserunover9","_baserunover10","_baserunover11","_baserunover12","_baserunover13","_baserunover14","_baserunover15"]; + +// Get mission number, important we do this early +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[Hero] Oil Depot]: Starting... %1",_position]; + +//Setup the crate +_crate_type = crates_small call BIS_fnc_selectRandom; +_crate = createVehicle [_crate_type,[(_position select 0) + 0.2,(_position select 1),0], [], 0, "CAN_COLLIDE"]; +_crate call wai_crate_setup; + +//Buildings +_baserunover0 = createVehicle ["MAP_Ind_TankBig",[(_position select 0) - 9.5, (_position select 1) +7,-0.15],[], 0, "CAN_COLLIDE"]; +_baserunover1 = createVehicle ["MAP_Ind_TankBig",[(_position select 0) + 11, (_position select 1) +4,-0.15],[], 0, "CAN_COLLIDE"]; +_baserunover2 = createVehicle ["MAP_Ind_TankBig",[(_position select 0) +8, (_position select 1) -6,-0.15],[], 0, "CAN_COLLIDE"]; +_baserunover3 = createVehicle ["MAP_Ind_TankBig",[(_position select 0) -11, (_position select 1) -12,-0.15],[], 0, "CAN_COLLIDE"]; +_baserunover4 = createVehicle ["MAP_Ind_TankBig",[(_position select 0) -28.5, (_position select 1) -1.2,-0.15],[], 0, "CAN_COLLIDE"]; +_baserunover5 = createVehicle ["MAP_Ind_TankBig",[(_position select 0) - 26.2, (_position select 1) +20,-0.15],[], 0, "CAN_COLLIDE"]; +_baserunover6 = createVehicle ["MAP_Ind_TankBig",[(_position select 0) - 6, (_position select 1) +28,-0.015],[], 0, "CAN_COLLIDE"]; +_baserunover7 = createVehicle ["GUE_WarfareBVehicleServicePoint",[(_position select 0) -30, (_position select 1) -15,-0.015],[], 0, "CAN_COLLIDE"]; +_baserunover8 = createVehicle ["GUE_WarfareBVehicleServicePoint",[(_position select 0) +21, (_position select 1) +3,-0.015],[], 0, "CAN_COLLIDE"]; +_baserunover9 = createVehicle ["GUE_WarfareBVehicleServicePoint",[(_position select 0) - 7, (_position select 1) +43,-0.015],[], 0, "CAN_COLLIDE"]; +_baserunover10 = createVehicle ["Barrels",[(_position select 0) +0.1, (_position select 1) +6,-0.015],[], 0, "CAN_COLLIDE"]; + +_baserunover11 = createVehicle ["Barrels",[(_position select 0) - 17, (_position select 1) +15,-0.015],[], 0, "CAN_COLLIDE"]; +_baserunover12 = createVehicle ["Barrels",[(_position select 0) +18, (_position select 1) -2,-0.015],[], 0, "CAN_COLLIDE"]; +_baserunover13 = createVehicle ["Barrel1",[(_position select 0) -16, (_position select 1) -2,-0.015],[], 0, "CAN_COLLIDE"]; +_baserunover14 = createVehicle ["Barrel1",[(_position select 0) +3, (_position select 1) +6,-0.015],[], 0, "CAN_COLLIDE"]; +_baserunover15 = createVehicle ["Barrel1",[(_position select 0) -11.6, (_position select 1) +18,-0.015],[], 0, "CAN_COLLIDE"]; + + +// Adding buildings to one variable just for tidiness +_baserunover = [_baserunover0,_baserunover1,_baserunover2,_baserunover3,_baserunover4,_baserunover5,_baserunover6,_baserunover7,_baserunover8,_baserunover9,_baserunover10,_baserunover11,_baserunover12,_baserunover13,_baserunover14,_baserunover15]; + +// Set some directions for our buildings +_directions = [0,0,0,0,0,0,0,-176.24,122.11,-0.11,82.81,-0.5,-48,0,0,0]; +{ _x setDir (_directions select _forEachIndex) } forEach _baserunover; + +// Make buildings flat on terrain surface +{ _x setVectorUp surfaceNormal position _x; } count _baserunover; + +//Troops +_rndnum = round (random 5); +[[(_position select 0) - 25, (_position select 1) - 21, 0],5,"Medium",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 32, (_position select 1) + 2, 0],5,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 9, (_position select 1) +40, 0],4,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) -41, (_position select 1) +6, 0],_rndnum,"Medium","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Static Guns +[[[(_position select 0) +6.2, (_position select 1) -28, 0]],"KORD_high_TK_EP1","Easy",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; +[[[(_position select 0) -26, (_position select 1) +47, 0]],"KORD_high_TK_EP1","Easy",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +// Array of mission variables to send +[ + _mission, // Mission number + _position, // Position of mission + "Medium", // Difficulty + "Oil Depot", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + _crate, // crate object info + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + [_baserunover], // cleanup objects + "STR_CL_HERO_OIL_ANNOUNCE", // mission announcement + "STR_CL_HERO_OIL_WIN", // mission success + "STR_CL_HERO_OIL_FAIL", // mission fail + [10,5,20,3,2] // Dynamic crate array +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/outpost.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/outpost.sqf new file mode 100755 index 0000000..fadf902 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/outpost.sqf @@ -0,0 +1,51 @@ +private ["_rndnum","_mission","_position","_aiType","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] Hero Outpost]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_Outpost select 0;} else {Loot_Outpost select 1;}; + +//Spawn Crates +[[ + [_loot,crates_large,[0,0]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["MAP_76n6_ClamShell",[-6,25],172], + ["MAP_budova4_in",[-29,18],0.24], + ["MAP_budova4_in",[-29,8],0.24], + ["MAP_Mil_Barracks_L",[-23,-13],-119], + ["MAP_CamoNetB_NATO",[1.6,0],-203], + ["MAP_fort_watchtower",[19,11],-185], + ["MAP_fort_watchtower",[4,-20],-103] +],_position,_mission] call wai_spawnObjects; + +//Troops +[[(_position select 0) + 2,_position select 1,0],5,"Easy",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 3); +[[(_position select 0) - 2,_position select 1,0],_rndnum,"Easy","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 3); +[[(_position select 0),(_position select 1) + 15,0],_rndnum,"Easy","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_BANDITOUTPOST_ANNOUNCE","STR_CL_HERO_BANDITOUTPOST_WIN","STR_CL_HERO_BANDITOUTPOST_FAIL"]; +} else { + ["STR_CL_BANDIT_HEROOUTPOST_ANNOUNCE","STR_CL_BANDIT_HEROOUTPOST_WIN","STR_CL_BANDIT_HEROOUTPOST_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Easy", // Difficulty + "Outpost", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["kill"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/patrol.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/patrol.sqf new file mode 100755 index 0000000..9f5949a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/patrol.sqf @@ -0,0 +1,60 @@ +private ["_mission","_vehname","_vehicle","_position","_vehclass","_name","_locations","_location","_blacklist","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type + +_loot = if (_missionType == "MainHero") then {Loot_Patrol select 0;} else {Loot_Patrol select 1;}; + +//Armed Land Vehicle +_vehclass = armed_vehicle call BIS_fnc_selectRandom; +_vehname = getText (configFile >> "CfgVehicles" >> _vehclass >> "displayName"); + +_locations = nearestLocations [getMarkerPos "center", ["NameCityCapital","NameCity","NameVillage"],15000]; +_location = _locations call BIS_fnc_selectRandom; +_position = position _location; +_name = text _location; +_blacklist = ["Stary Sobor"]; + +{ + if ((text _x) == (text _location) || (text _x) in _blacklist) then { + _locations set [_forEachIndex, "rem"]; + _locations = _locations - ["rem"]; + }; +} forEach _locations; + +diag_log format["WAI: [Mission:[%2] Patrol]: Starting... %1",_position,_missionType]; + +//Spawn units +[[(_position select 0) + 4,(_position select 1),0.1],3,"Hard","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Spawn vehicles +_vehicle = [_vehclass,_position,_mission] call custom_publish; + +// load the guns +[_vehicle,_vehclass] call load_ammo; + +((wai_mission_data select _mission) select 3) set [count ((wai_mission_data select _mission) select 3), [_vehicle,_loot]]; + +if(wai_debug_mode) then { + diag_log format["WAI: [%2] patrol spawned a %1",_vehname,_missionType]; +}; + +_messages = if (_missionType == "MainHero") then { + [["STR_CL_HERO_PATROL_ANNOUNCE",_name],"STR_CL_HERO_PATROL_WIN","STR_CL_HERO_PATROL_FAIL"]; +} else { + [["STR_CL_BANDIT_PATROL_ANNOUNCE",_name],"STR_CL_BANDIT_PATROL_WIN","STR_CL_BANDIT_PATROL_FAIL"]; +}; + +[ + _mission, + _position, // Position of mission + "Medium", // Difficulty + format["Patrol %1",_vehname], // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + 3, // Number of wayPoints + _locations, // WayPoints + ["kill"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call patrol_winorfail; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/presidents_mansion.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/presidents_mansion.sqf new file mode 100755 index 0000000..4367ac4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/presidents_mansion.sqf @@ -0,0 +1,74 @@ +private ["_rndnum","_president_himself","_mission","_position","_president","_firstlady","_aiType","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [50] call find_position; + +diag_log format["WAI: [Mission:[%2] Presidents in Town]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_Presidents select 0;} else {Loot_Presidents select 1;}; + +//Spawn Crates +[[ + [_loot,crates_large,[0,0,.25]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["Land_A_Office01",[0,0]] +],_position,_mission] call wai_spawnObjects; + +//Troops +[_position,5,"Extreme",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[_position,_rndnum,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[_position,_rndnum,"Extreme","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//The President Himself +_president = [[((_position select 0) + 5), _position select 1, 4.1],1,"Extreme","Random",4,"none","Special","Random",[_aiType,500],_mission] call spawn_group; +_firstlady = [[((_position select 0) + 5), _position select 1, 4.1],1,"Extreme","Unarmed",4,"none","Secretary1","Random",[_aiType,0],_mission] call spawn_group; + +_president_himself = (units _president) select 0; +_president_himself disableAI "MOVE"; + +//Let him move once player is near +_president_himself spawn { + private ["_president","_player_near"]; + _president = _this; + _player_near = false; + while {!_player_near} do { + _player_near = [(position _president),50] call isNearPlayer; + uiSleep 1; + }; + _president enableAI "MOVE"; +}; + +//Humvee Patrol +[[(_position select 0) + 100, _position select 1, 0],[(_position select 0) + 100, _position select 1, 0],50,2,"HMMWV_Armored","Random",_aiType,_aiType,_mission] call vehicle_patrol; + +//Heli Paradrop +[_position,400,"UH60M_EP1_DZE","East",[3000,4000],150,1.0,200,10,"Random","Random",4,"Random",_aiType,"Random",_aiType,false,_mission] spawn heli_para; + +//Static guns +[[ + [(_position select 0) - 13.135, (_position select 1) + 5.025, 5.27], + [(_position select 0) + 14.225, (_position select 1) + 5.025, 5.27], + [(_position select 0) + 1.97, (_position select 1) - 2.368, 10.54] +],"M2StaticMG","Extreme",_aiType,_aiType,1,2,"Random","Random",_mission] call spawn_static; + +[ + _mission, // Mission number + _position, // Position of mission + "Extreme", // Difficulty + "President's in Town", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["assassinate",_president], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + ["STR_CL_PRESIDENT_ANNOUNCE","STR_CL_PRESIDENT_WIN","STR_CL_PRESIDENT_FAIL"] +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/radioshack.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/radioshack.sqf new file mode 100755 index 0000000..5260627 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/radioshack.sqf @@ -0,0 +1,61 @@ +private ["_mission","_position","_rndnum","_aiType","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [80] call find_position; + +diag_log format["WAI: Mission:[%2] Radio Tower started at %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_Radioshack select 0;} else {Loot_Radioshack select 1;}; + +//Spawn Crates +[[ + [_loot,"UNBasicWeapons_EP1",[.01,.01]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["Land_cihlovej_dum_in",[-3,-1]], + ["Land_Com_tower_ep1",[5,-2]], + ["LADAWreck",[-7.5,-3]], + ["FoldTable",[-1.2,-4]], + ["FoldChair",[-1,-3]], + ["SmallTV",[-1.7,-4,0.82]], + ["SatPhone",[-0.8,-4,0.82],-201.34], + ["MAP_t_picea2s",[-4.5,7]], + ["MAP_t_picea2s",[13,10]], + ["MAP_t_pinusN2s",[3,9]], + ["MAP_t_pinusN1s",[8,17]], + ["MAP_t_picea1s",[7,10]], + ["MAP_t_picea2s",[34,-29]], + ["MAP_t_fraxinus2s",[-14,1]], + ["MAP_t_carpinus2s",[28,-13]] +],_position,_mission] call wai_spawnObjects; + +// Troops +[[(_position select 0) - 1.2, (_position select 1) - 20, 0],5,"extreme",["random","at"],4,"random",_aiType,"random",[_aiType,150],_mission] call spawn_group; +[[(_position select 0) - 4, (_position select 1) + 16, 0],5,"hard","random",4,"random",_aiType,"random",_aiType,_mission] call spawn_group; +[[(_position select 0) - 17, (_position select 1) - 4, 0],5,"random","random",4,"random",_aiType,"random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) + 14, (_position select 1) - 3, 0],_rndnum,"random","random",4,"random",_aiType,"random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) + 14, (_position select 1) - 3, 0],_rndnum,"random","random",4,"random",_aiType,"random",_aiType,_mission] call spawn_group; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_RADIO_ANNOUNCE","STR_CL_HERO_RADIO_WIN","STR_CL_HERO_RADIO_FAIL"]; +} else { + ["STR_CL_BANDIT_RADIOTOWER_ANNOUNCE","STR_CL_BANDIT_RADIOTOWER_WIN","STR_CL_BANDIT_RADIOTOWER_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Hard", // Difficulty + "Radio Tower", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/refugee.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/refugee.sqf new file mode 100755 index 0000000..2895f3b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/refugee.sqf @@ -0,0 +1,64 @@ +private ["_crate_type","_mission","_position","_crate","_rndnum","_baserunover","_baserunover0","_baserunover1","_baserunover2","_baserunover3","_baserunover4","_baserunover5","_baserunover6","_baserunover7","_baserunover8","_baserunover9","_baserunover10"]; + +// Get mission number, important we do this early +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [80] call find_position; + +diag_log format["WAI: [Mission:[Hero] Refugee Camp]: Starting... %1",_position]; + +//Setup the crate +_crate_type = crates_large call BIS_fnc_selectrandom; // Choose between crates_large, crates_medium and crates_small +_crate = createVehicle [_crate_type,[(_position select 0) - 0.01, (_position select 1) - 0.01,-0.15],[],0,"CAN_COLLIDE"]; +_crate call wai_crate_setup; + +//Buildings +_baserunover0 = createVehicle ["MAP_Astan",[(_position select 0) - 3, (_position select 1) -5.4,-0.15],[], 0, "CAN_COLLIDE"]; +_baserunover1 = createVehicle ["MAP_A_tent",[(_position select 0) + 3.8, (_position select 1) -1,-0.15],[], 0, "CAN_COLLIDE"]; +_baserunover2 = createVehicle ["Land_Campfire_burning",[(_position select 0) - 2, (_position select 1) -1,-0.15],[], 0, "CAN_COLLIDE"]; +_baserunover3 = createVehicle ["Fuel_can",[(_position select 0) +0.1, (_position select 1) +3,-0.15],[], 0, "CAN_COLLIDE"]; +_baserunover4 = createVehicle ["Land_Blankets_EP1",[(_position select 0) - 4, (_position select 1) +0.4,-0.15],[], 0, "CAN_COLLIDE"]; +_baserunover5 = createVehicle ["Park_bench1",[(_position select 0) - 1, (_position select 1) +4,-0.15],[], 0, "CAN_COLLIDE"]; + +_baserunover6 = createVehicle ["MAP_Astan",[(_position select 0) - 4, (_position select 1) +10,-0.015],[], 0, "CAN_COLLIDE"]; +_baserunover7 = createVehicle ["Land_Bag_EP1",[(_position select 0) +1, (_position select 1) +7,-0.015],[], 0, "CAN_COLLIDE"]; +_baserunover8 = createVehicle ["Land_A_tent",[(_position select 0) - 10, (_position select 1) -6,-0.015],[], 0, "CAN_COLLIDE"]; +_baserunover9 = createVehicle ["LADAWreck",[(_position select 0) - 11, (_position select 1) +2,-0.015],[], 0, "CAN_COLLIDE"]; +_baserunover10 = createVehicle ["Land_transport_cart_EP1",[(_position select 0) - 9, (_position select 1) +7,-0.015],[], 0, "CAN_COLLIDE"]; + + +// Adding buildings to one variable just for tidiness +_baserunover = [_baserunover0,_baserunover1,_baserunover2,_baserunover3,_baserunover4,_baserunover5,_baserunover6,_baserunover7,_baserunover8,_baserunover9,_baserunover10]; + +// Set some directions for our buildings +_directions = [0,64,0,0,0,0,128,0,-166.5,16.4,23]; +{ _x setDir (_directions select _forEachIndex) } forEach _baserunover; + +// Make buildings flat on terrain surface +{ _x setVectorUp surfaceNormal position _x; } count _baserunover; + +//Troops +_rndnum = round (random 5); +[[(_position select 0) - 13, (_position select 1) - 7,0],5,"Easy",["Random","AT"],3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 7, (_position select 1) + 15,0],5,"Easy","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 4, (_position select 1)- 14,0],_rndnum,"Easy","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + + +// Array of mission variables to send +[ + _mission, // Mission number + _position, // Position of mission + "Medium", // Difficulty + "Refugee Camp", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + _crate, // crate object info + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + [], // cleanup objects + "STR_CL_HERO_REFUGEE_ANNOUNCE", // mission announcement + "STR_CL_HERO_REFUGEE_WIN", // mission success + "STR_CL_HERO_REFUGEE_FAIL", // mission fail + [10,4,0,3,2] // Dynamic crate array +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/scout_patrol.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/scout_patrol.sqf new file mode 100755 index 0000000..a16326c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/scout_patrol.sqf @@ -0,0 +1,43 @@ +private ["_mission","_position","_rndnum","_aiType","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] Scout Patrol]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_ScoutPatrol select 0;} else {Loot_ScoutPatrol select 1;}; + +// Spawn crates +[[ + [_loot,crates_medium,[0,0]] +],_position,_mission] call wai_spawnCrate; + +//Troops +[_position,5,"Easy",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 3); +[_position,_rndnum,"Easy","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 3); +[_position,_rndnum,"Easy","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Spawn vehicle +[civil_vehicles,_position,_mission] call custom_publish; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_BANDITPATROL_ANNOUNCE","STR_CL_HERO_BANDITPATROL_WIN","STR_CL_HERO_BANDITPATROL_FAIL"]; +} else { + ["STR_CL_BANDIT_HEROPATROL_ANNOUNCE","STR_CL_BANDIT_HEROPATROL_WIN","STR_CL_BANDIT_HEROPATROL_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Easy", // Difficulty + "Scout Patrol", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["kill"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/slaughter_house.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/slaughter_house.sqf new file mode 100755 index 0000000..654c901 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/slaughter_house.sqf @@ -0,0 +1,51 @@ +private ["_rndnum","_mission","_position","_aiType","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] Slaughter House]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_SlaughterHouse select 0;} else {Loot_SlaughterHouse select 1;}; + +//Spawn Crates +[[ + [_loot,crates_medium,[2.5,0,.1]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["Land_aif_tovarna1",[-0.01,-0.01,-0.02]], + ["Land_stand_meat_EP1",[-4,2,-0.02],0.3693], + ["Land_stand_meat_EP1",[-2,2,-0.02],0.3693], + ["Land_stand_meat_EP1",[0.001,2,-0.02],0.3693], + ["Land_stand_meat_EP1",[-1,2,-0.02],0.3693], + ["Land_stand_meat_EP1",[2,2,-0.02],0.3693], + ["Land_stand_meat_EP1",[4,2,-0.02],0.3693], + ["Mass_grave",[-3,20,-0.02]], + ["Mass_grave",[4,18,-0.02]], + ["Mass_grave",[0,-15,-0.02]], + ["Axe_woodblock",[-4,-14,-0.02],-25], + ["Land_Table_EP1",[2,-2,-0.02]], + ["MAP_icebox",[-2,-0.01,-0.02]] +],_position,_mission] call wai_spawnObjects; + +//Troops +[[(_position select 0) + 9, (_position select 1) - 13, 0],5,"Easy",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 3); +[[(_position select 0) + 13, (_position select 1) + 15, 0],_rndnum,"Easy","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 3); +[[(_position select 0) + 13, (_position select 1) + 15, 0],_rndnum,"Easy","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +[ + _mission, // Mission number + _position, // Position of mission + "Easy", // Difficulty + "Slaughter House", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + ["STR_CL_GENERAL_SLAUGHTERHOUSE_ANNOUNCE","STR_CL_GENERAL_SLAUGHTERHOUSE_WIN","STR_CL_GENERAL_SLAUGHTERHOUSE_FAIL"] +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/sniper_extraction.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/sniper_extraction.sqf new file mode 100755 index 0000000..94c4592 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/sniper_extraction.sqf @@ -0,0 +1,62 @@ +private ["_rndnum","_mission","_vehname","_vehicle","_position","_vehclass","_aiType","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +//Military Chopper +_vehclass = armed_chopper call BIS_fnc_selectRandom; +_vehname = getText (configFile >> "CfgVehicles" >> _vehclass >> "displayName"); + +diag_log format["WAI: [Mission:[%2] Sniper Extraction]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_Extraction select 0;} else {Loot_Extraction select 1;}; + +//Spawn Crates +[[ + [_loot,crates_medium,[0,10]] +],_position,_mission] call wai_spawnCrate; + +//Troops +[_position,5,"Hard",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[_position,_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[_position,_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Static Guns +[[ + [(_position select 0) + 30, (_position select 1) - 30, 0], + [(_position select 0) + 30, (_position select 1) + 30, 0], + [(_position select 0) - 30, (_position select 1) - 30, 0], + [(_position select 0) - 30, (_position select 1) + 30, 0] +],"M2StaticMG","Hard",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +//Spawn vehicle +[_vehclass,_position,_mission] call custom_publish; + +if(wai_debug_mode) then { + diag_log format["WAI: [%2] sniper_extraction spawned a %1",_vehname,_missionType]; +}; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_MILCHOPPER_ANNOUNCE","STR_CL_HERO_MILCHOPPER_WIN","STR_CL_HERO_MILCHOPPER_FAIL"]; +} else { + ["STR_CL_BANDIT_EXTRACTION_ANNOUNCE","STR_CL_BANDIT_EXTRACTION_WIN","STR_CL_BANDIT_EXTRACTION_FAIL"]; +}; + +// Array of mission variables to send +[ + _mission, // Mission number + _position, // Position of mission + "Hard", // Difficulty + format["Sniper Extraction %1", _vehname], // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/tankcolumn.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/tankcolumn.sqf new file mode 100755 index 0000000..dc91e3c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/tankcolumn.sqf @@ -0,0 +1,67 @@ +private ["_rndnum","_mission","_position","_aiType","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] Tank Column]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_TankColumn select 0;} else {Loot_TankColumn select 1;}; + +//Spawn Crates +[[ + [_loot,crates_small,[.02,0]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["MAP_T34",[2.2,-12],91.28], + ["MAP_T34",[12.2,-12],92.01], + ["MAP_T34",[21,-13],108.4], + ["MAP_T34",[29,-16],112.3], + ["GUE_WarfareBVehicleServicePoint",[10,-19]], + ["MAP_Hlidac_budka",[10,-7]], + ["Land_tent_east",[-0.3,0.3],90], + ["MAP_t_picea2s",[-3,12]], + ["MAP_t_pinusN1s",[-12,3]], + ["MAP_t_pinusN2s",[-10,13,-0.02]], + ["MAP_t_acer2s",[9,2]], + ["Land_Fire_barrel_burning",[-9,-1]] +],_position,_mission] call wai_spawnObjects; + +//Troops +[[(_position select 0) - 7, (_position select 1) - 10, 0],5,"Hard",["Random","AT"],4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 16, (_position select 1) - 5, 0],5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) + 4, (_position select 1) + 18, 0],5,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) + 4, (_position select 1) + 18, 0],_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 5); +[[(_position select 0) + 4, (_position select 1) + 18, 0],_rndnum,"Hard","Random",4,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Humvee Patrol +[[(_position select 0) + 22, (_position select 1) + 32, 0],[(_position select 0) + 15, (_position select 1) - 33, 0],50,2,"HMMWV_Armored","Hard",_aiType,_aiType,_mission] call vehicle_patrol; + +//Static Guns +[[ + [(_position select 0) + 8, (_position select 1) - 29, 0], + [(_position select 0) + 12, (_position select 1) + 24, 0] +],"M2StaticMG","Hard",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_TANK_ANNOUNCE","STR_CL_HERO_TANK_WIN","STR_CL_HERO_TANK_FAIL"]; +} else { + ["STR_CL_BANDIT_TANK_ANNOUNCE","STR_CL_BANDIT_TANK_WIN","STR_CL_BANDIT_TANK_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Hard", // Difficulty + "Tank Column", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/vehicle_drop.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/vehicle_drop.sqf new file mode 100755 index 0000000..0ed8d66 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/vehicle_drop.sqf @@ -0,0 +1,48 @@ +private ["_missionType","_messages","_aiType","_mission","_rndnum","_vehname","_position","_vehclass","_plane","_startArray","_startPos","_dropzone","_aigroup","_pilot","_wp","_complete","_timeout","_vehDropped","_vehicle","_parachute","_missionType","_color"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +//Armed Land Vehicle +_vehclass = armed_vehicle call BIS_fnc_selectRandom; +_vehname = getText (configFile >> "CfgVehicles" >> _vehclass >> "displayName"); + +// Plane +_airClass = ["C130J_US_EP1_DZ","MV22_DZ"] call BIS_fnc_selectRandom; +_airName = getText (configFile >> "CfgVehicles" >> _airClass >> "displayName"); + +diag_log format["WAI: [Mission:[%3] %1 Vehicle Drop]: Starting... %2",_airName,_position,_missionType]; + +//Troops +[_position,5,"Medium",["Random","AT"],3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[_position,5,"Medium","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 4); +[_position,_rndnum,"Medium","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 4); +[_position,_rndnum,"Medium","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +if(wai_debug_mode) then { + diag_log format["WAI: [%3] %1 Vehicle Drop spawned a %2",_airName,_vehname,_missionType]; +}; + +_messages = if (_missionType == "MainHero") then { + [["STR_CL_HERO_AIRDROP_ANNOUNCE",_airName,_vehname],["STR_CL_HERO_AIRDROP_CRASH",_airName],["STR_CL_HERO_AIRDROP_DROP",_vehname],["STR_CL_HERO_AIRDROP_WIN",_vehname],["STR_CL_HERO_AIRDROP_FAIL",_vehname]]; +} else { + [["STR_CL_BANDIT_AIRDROP_ANNOUNCE",_airName,_vehname],["STR_CL_BANDIT_AIRDROP_CRASH",_airName],["STR_CL_BANDIT_AIRDROP_DROP",_vehname],["STR_CL_BANDIT_AIRDROP_WIN",_vehname],["STR_CL_BANDIT_AIRDROP_FAIL",_vehname]]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Medium", // Difficulty + format["%1 Air Drop",_airName], // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _airClass, // Class of plane to deliver the vehicle + _vehclass, // Class of vehicle to air drop + _messages +] call wai_air_drop; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/weapon_cache.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/weapon_cache.sqf new file mode 100755 index 0000000..18421c4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/weapon_cache.sqf @@ -0,0 +1,58 @@ +private ["_mission","_position","_rndnum","_aiType","_messages","_missionType","_loot"]; + +_mission = count wai_mission_data -1; +_missionType = _this select 0; // Type of mission: "MainHero" or "MainBandit" +_aiType = _this select 1; // Type of AI - opposite of mission type +_position = [30] call find_position; + +diag_log format["WAI: [Mission:[%2] Weapons Cache]: Starting... %1",_position,_missionType]; + +_loot = if (_missionType == "MainHero") then {Loot_WeaponCache select 0;} else {Loot_WeaponCache select 1;}; + +// Spawn crates +[[ + [_loot,crates_large,[0,0]] +],_position,_mission] call wai_spawnCrate; + +// Spawn Objects +[[ + ["Land_fortified_nest_big_EP1",[-14,23.5],-210], + ["Land_fortified_nest_big_EP1",[12,-24,-0.01],-390], + ["Land_HBarrier_large",[-18,1,-0.3],90], + ["Land_HBarrier_large",[-8,-16,-0.3],30], + ["Land_HBarrier_large",[18,-1.5,-0.3],90], + ["Land_HBarrier_large",[7,16,-0.3],30], + ["DesertLargeCamoNet_DZ",[-1,0],-26] +],_position,_mission] call wai_spawnObjects; + +//Troops +[[(_position select 0) + 6.5,(_position select 1) - 12,0],5,"Easy",["Random","AT"],3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +[[(_position select 0) - 8,(_position select 1) + 14,0],5,"Easy","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 4); +[[(_position select 0) - 21,(_position select 1) - 12.5,0],_rndnum,"Easy","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; +_rndnum = ceil (random 4); +[[(_position select 0) - 21,(_position select 1) - 12.5,0],_rndnum,"Easy","Random",3,"Random",_aiType,"Random",_aiType,_mission] call spawn_group; + +//Static Guns +[[ + [(_position select 0) + 18, (_position select 1) - 13, 0], + [(_position select 0) - 19.5, (_position select 1) + 12, 0] +],"M2StaticMG","Easy",_aiType,_aiType,0,2,"Random","Random",_mission] call spawn_static; + +_messages = if (_missionType == "MainHero") then { + ["STR_CL_HERO_WEAPONCACHE_ANNOUNCE","STR_CL_HERO_WEAPONCACHE_WIN","STR_CL_HERO_WEAPONCACHE_FAIL"]; +} else { + ["STR_CL_BANDIT_WEAPONCACHE_ANNOUNCE","STR_CL_BANDIT_WEAPONCACHE_WIN","STR_CL_BANDIT_WEAPONCACHE_FAIL"]; +}; + +[ + _mission, // Mission number + _position, // Position of mission + "Medium", // Difficulty + "Weapon Cache", // Name of Mission + _missionType, // Mission Type: MainHero or MainBandit + true, // show mission marker? + true, // make minefields available for this mission + ["crate"], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] call mission_winorfail; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/wuhan_lab.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/wuhan_lab.sqf new file mode 100755 index 0000000..4991be9 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/missions/missions/wuhan_lab.sqf @@ -0,0 +1,182 @@ +local _mission = count WAI_MissionData -1; +local _aiType = _this select 0; // "Bandit" or "Hero" +local _name = "Wuhan Lab"; +local _supportedMaps = ["chernarus","chernarus_winter"]; // The default positions listed below are for Chernarus. If you wish to use this mission on another map then you must gather your own list of flat terrain positions. +local _flatPositions = [[4277.94,9457.53],[4144.92,9439.12],[4229.24,9749.14],[3314.31,10614.7],[2152.91,10467.1],[1956.85,10338.3],[4138.71,12630.3],[3999.11,12659.3],[3733.19,14063.7],[3505.19,14168.2],[5191.49,13994.6],[5986.83,14403.1],[6282.33,14097.3],[6497.14,13582.8],[14255.6,14169.6],[13231.9,10718.3],[12080.6,9895.28],[10612.5,8441.86],[8737.68,9200.67],[7137.15,9483.91],[7406.85,3487.04],[7139.72,5321.27],[5227.21,2202.33],[4149.34,2772.77],[1143.01,2439.9],[1230.53,2526.4],[1157.66,4245.54],[1246.03,4612.52],[4436.68,8472.96],[4748.81,5867.21],[5852.48,11010.3]]; // Chernarus +local _position = [_flatPositions] call isValidSpot; + +if (count _position < 1 || {!(toLower worldName in _supportedMaps)}) exitWith { + if (_aiType == "Hero") then { + WAI_HeroRunning = WAI_HeroRunning - 1; WAI_MissionData set [_mission, -1]; WAI_MarkerReady = true; + } else { + WAI_BanditRunning = WAI_BanditRunning - 1; WAI_MissionData set [_mission, -1]; WAI_MarkerReady = true; + }; +}; + +local _startTime = diag_tickTime; +local _difficulty = "Extreme"; +local _localized = ["STR_CL_MISSION_BANDIT", "STR_CL_MISSION_HERO"] select (_aiType == "Hero"); +local _localName = "STR_CL_WUHAN_TITLE"; + +diag_log format["[WAI]: %1 %2 started at %3.",_aiType,_name,_position]; + +local _messages = ["STR_CL_WUHAN_ANNOUNCE","STR_CL_WUHAN_WIN","STR_CL_WUHAN_FAIL"]; + +////////////////////// Do not edit this section /////////////////////////// +local _markers = [1,1,1,1]; +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +_markers set [0, [_position, "WAI" + str(_mission), "ColorBlack", "", "ELLIPSE", "Solid", [300,300], [], 0]]; +_markers set [1, [_position, "WAI" + str(_mission) + "dot", "ColorBlack", "mil_dot", "", "", [], [_localized,_localName], 0]]; +if (WAI_AutoClaim) then {_markers set [2, [_position, "WAI" + str(_mission) + "auto", "ColorRed", "", "ELLIPSE", "Border", [WAI_AcAlertDistance,WAI_AcAlertDistance], [], 0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +_markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; + +WAI_MarkerReady = true; + +// Add the mission's position to the global array so that other missions do not spawn near it. +DZE_MissionPositions set [count DZE_MissionPositions, _position]; +local _posIndex = count DZE_MissionPositions - 1; + +// Send announcement +[_difficulty,(_messages select 0)] call WAI_Message; + +// Wait until a player is within range or timeout is reached. +local _timeout = false; +local _claimPlayer = objNull; + +while {WAI_WaitForPlayer && !_timeout && {isNull _claimPlayer}} do { + _claimPlayer = [_position, WAI_TimeoutDist] call isClosestPlayer; + + if (diag_tickTime - _startTime >= (WAI_Timeout * 60)) then { + _timeout = true; + }; + uiSleep 1; +}; + +if (_timeout) exitWith { + [_mission, _aiType, _markerIndex, _posIndex] call WAI_AbortMission; + [_difficulty,(_messages select 2)] call WAI_Message; + diag_log format["WAI: %1 %2 aborted.",_aiType,_name,_position]; +}; +//////////////////////////////// End ////////////////////////////////////// + +// Random position for doctor and loot crate pair. +local _pos1 = [[0.791992,-2.81055,-6.12189],[1.79688,-1.57813,-6.12915]]; +local _pos2 = [[-8.97363,10.8223,-6.01758],[-6.66406,13.3125,-6.1272]]; +local _pos3 = [[2.0957,11.3994,-6.0177],[3.22754,13.25,-6.1203]]; +local _pos4 = [[1.17383,7.71289,-6.12878],[-0.625,8.07324,-6.1272]]; +local _pos5 = [[4.36523,4.60059,-6.01764],[3.87012,8.42773,-6.12732]]; +local _pos6 = [[5.82227,13.2188,-6.12933],[5.83398,10.6621,-6.01636]]; +local _pos7 = [[12.3428,13.1719,-6.1283],[12.2422,10.1768,-6.01428]]; +local _pos8 = [[11.7949,6.40527,-6.11945],[8.39355,4.33887,-6.02197]]; +local _random = [_pos1,_pos2,_pos3,_pos4,_pos5,_pos6,_pos7,_pos8] call BIS_fnc_selectRandom; +local _drPos = _random select 0; +local _cratePos = _random select 1; + +// Spawn Objects +local _objects = [[ + ["Land_Fort_Watchtower",[-4.4077, -60.0694, 0],-120], + ["Land_Fort_Watchtower",[56.2158, -25.0235, 0],-120], + ["Land_MBG_Warehouse",[12.1426, -16.8252, 0],150], + ["Land_fortified_nest_big",[0,0,-0.15467919],-30.100697], + ["Land_MBG_Shoothouse_1",[13.271, -19.3584, 0.28743303],60], + ["Land_MBG_Cinderwall_5",[4.0615, -33.7168, 0],60], // MBG_Cinderwall_5_InEditor + ["Land_MBG_Cinderwall_5",[1.5293, -29.4073, 0],60], + ["Land_MBG_Cinderwall_5",[-1.0054, -25.0909, 0],60], + ["Land_MBG_Cinderwall_5",[-3.5005, -20.8243, 0],60], + ["Land_MBG_Killhouse_3",[-22.3096, -0.5235, 0],-120], + ["Land_MBG_Killhouse_4",[-13.5767, 30.7295, 0],150], + ["Land_MBG_Killhouse_3",[15.9302, 20.9648, 0],-300], + ["Land_MBG_Cinderwall_5_Corner",[3.478, 37.1357, 0],150], // MBG_Cinderwall_5_Corner_InEditor + ["Land_MBG_Cinderwall_5_Gate",[-0.2002, 36.3154, 0],-30], // MBG_Cinderwall_5_Gate_InEditor + ["Land_MBG_Cinderwall_5_Gate",[-26.4517, 21.4033, 0],-30], + ["Land_MBG_Cinderwall_5_Corner",[-29.0083, 18.5996, 0],60], + ["Land_MBG_Cinderwall_5",[-28.1431, 14.999, 0],60], + ["Land_MBG_Cinderwall_5",[6.2939, 34.4404, 0],60], + ["Land_MBG_Cinderwall_5",[-4.4482, 33.8613, 0],-30], + ["Land_MBG_Cinderwall_5",[-22.2583, 23.8632, 0],-30], + ["MAP_Misc_Cargo1B",[24.9292, 0.9345, 0],-30], + ["MAP_Misc_Cargo1B",[34.9565, -15.6846, 0],-30], + ["MAP_Misc_Cargo1B",[6.5254, -41.9004, 0],60], + ["Land_fort_bagfence_round",[-37.1982, 23.5771, -0.14746886],-70], + ["Land_fort_bagfence_round",[3.3857, 45.7832, -0.14746886],14], + ["Land_fortified_nest_small",[-9.4155, -0.4756, -0.14746886],183], + ["MetalFloor4x_DZ",[8.9087, -26.669, 3.24],-30], + ["MetalFloor4x_DZ",[18.0439, -21.3194, 3.24],-30], + ["MetalFloor4x_DZ",[4.6528, -19.3653, 3.24],-30], + ["MetalFloor4x_DZ",[13.7612, -14.1309, 3.24],-30], + ["MetalFloor4x_DZ",[21.3423, -19.4834, 3.24],-30], + ["MetalFloor4x_DZ",[17.272, -12.2481, 3.24],-30], + ["Base_WarfareBBarrier10xTall",[26.7978, 41.8203, 0],60], + ["Base_WarfareBBarrier10xTall",[39.0347, 20.0703, 0],60], + ["Base_WarfareBBarrier10xTall",[51.9346, -2.4209, 0],60], + ["Base_WarfareBBarrier10xTall",[-50.4038, 0.7959, 0],60], + ["Base_WarfareBBarrier10xTall",[-36.96, -21.9727, 0],60], + ["Base_WarfareBBarrier10xTall",[-23.4951, -44.9912, 0],60], + ["Base_WarfareBBarrier10xTall",[30.8892, -53.1153, 0],-30], + ["Base_WarfareBBarrier10xTall",[-26.7476, 52.0547, 0],150] +],_position,_mission] call WAI_SpawnObjects; + +//Spawn Crates +local _loot = if (_aiType == "Hero") then {Loot_Wuhan select 0;} else {Loot_Wuhan select 1;}; +[[ + [_loot,WAI_CrateSm,[0,0]] +],((_objects select 2) modelToWorld _cratePos),_mission] call WAI_SpawnCrate; + +// The doctor +local _drGrp = [((_objects select 2) modelToWorld _drPos),1,"Easy","Random","","none","Gardener_DZ","Random",[_aiType,500],_mission] call WAI_SpawnGroup; +_drGrp setVariable ["DoNotFreeze", true]; +local _doctor = leader _drGrp; +_doctor disableAI "MOVE"; + +// External Troops +[[(_position select 0) - 26.7149, (_position select 1) + 44.2705, 0],5,_difficulty,"Random","AA","Random",WAI_ScientistSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; +[[(_position select 0) - 35.6089, (_position select 1) - 11.2735, 0],5,_difficulty,"Random","","Random",WAI_ScientistSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; +[[(_position select 0) - 26.1333, (_position select 1) - 45.6035, 0],5,_difficulty,"Random","","Random",WAI_ScientistSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; +//[[(_position select 0) + 34.8667, (_position select 1) + 7.6396, 0],5,_difficulty,"Random","","Random",WAI_ScientistSkin,"Random",_aiType,_mission] call WAI_SpawnGroup; + +// Internal Troops - these use "SENTRY" waypoint type +//[[(_position select 0) - 14.0933, (_position select 1) + 8.5674, .25],5,_difficulty,"Random","AT","Random","RU_Doctor","Random",_aiType,_mission] call WAI_SpawnGroup; +[[(_position select 0) + 4.646, (_position select 1) + 18.4238, .25],5,_difficulty,"Random","","Random","RU_Doctor","Random",_aiType,_mission] call WAI_SpawnGroup; +[[(_position select 0) + 2.5156, (_position select 1) - 10.1075, .25],5,_difficulty,"Random","","Random","RU_Doctor","Random",_aiType,_mission] call WAI_SpawnGroup; +[[(_position select 0) + 28.0249, (_position select 1) - 12.8565, .25],5,_difficulty,"Random","","Random","RU_Doctor","Random",_aiType,_mission] call WAI_SpawnGroup; +//[[(_position select 0) + 14.7788, (_position select 1) - 20.7061, .25],5,_difficulty,"Random","","Random","RU_Doctor","Random",_aiType,_mission] call WAI_SpawnGroup; + +// Vehicle Patrol +[[(_position select 0) + 100, _position select 1, 0],[(_position select 0) + 100, _position select 1, 0],50,2,"T810A_PKT_DES_ACR_DZ","Random",_aiType,_aiType,_mission] call WAI_VehPatrol; + +//Static guns +[[ + ((_objects select 0) modelToWorld [-0.0166016,2.62402,0.558044]), + ((_objects select 1) modelToWorld [-0.0166016,2.62402,0.558044]), + [(_position select 0) - 35.5835, (_position select 1) + 23.0283, 0], + [(_position select 0) + 2.835, (_position select 1) + 44.1552, 0], + ((_objects select 2) modelToWorld [15.1514,-2.4043,-6.13165]), + [(_position select 0) - 10.0166, (_position select 1) + 0.2011, 0], + ((_objects select 2) modelToWorld [19.4072,16.3848,-6.10211]) +],"KORD_high",_difficulty,_aiType,_aiType,"Random","Random","Random",_mission] call WAI_SpawnStatic; + +// Spawn Vehicles +local _vehicle = [WAI_APC,[(_position select 0) + 5.4551, (_position select 1) + 5.9316], _mission, true, -30] call WAI_PublishVeh; +[_vehicle,(typeOf _vehicle),2] call WAI_LoadAmmo; +uiSleep 1; // the warehouse needs to be fully spawned in to place the heli on the roof. +_vehicle = [WAI_ArmedHeli,[(_position select 0) + 2.1392, (_position select 1) - 21.5498, 11.75], _mission, true, -30] call WAI_PublishVeh; +[_vehicle,(typeOf _vehicle),2] call WAI_LoadAmmo; + +[ + _mission, // Mission number + _position, // Position of mission + _difficulty, // Difficulty + _name, // Name of Mission + _localName, + _aiType, // "Bandit" or "Hero" + _markerIndex, + _posIndex, + _claimPlayer, + true, // show mission marker? + false, // make minefields available for this mission + ["assassinate",_doctor], // Completion type: ["crate"], ["kill"], or ["assassinate", _unitGroup], + _messages +] spawn WAI_MissionMonitor; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/static/chernarus.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/static/chernarus.sqf new file mode 100755 index 0000000..b233936 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/static/chernarus.sqf @@ -0,0 +1,210 @@ +//Custom Spawns file// + +// These custom spawns are for use in static mission locations. You can set markers in mission.sqm if you want them. + +/* +Custom group spawns Eg. + +[ + [953.237,4486.48,0.001], // Position + 4, // Number Of units + "Random", // Skill level of unit (easy, medium, hard, extreme, Random) + "Random", or ["Random","at"], // Primary gun set number and rocket launcher. "Random" for random weapon set, "at" for anti-tank, "aa" for anti-air launcher + 4, // Number of magazines + "Random", // Backpack classname, use "Random" or classname here + "Random", // Skin classname, use "Random" or classname here + "Random", // Gearset number. "Random" for random gear set + "Bandit" // AI Type, "Hero" or "Bandit". +] call spawn_group; + +Place your custom group spawns below +*/ + + + + + +/* +Custom static weapon spawns Eg. (with multiple positions) + +[ + [ // Position(s) (can be multiple) + [911.21,4532.76,2.62], + [921.21,4542.76,2.62] + ], + "M2StaticMG", // Classname of turret + "easy", // Skill level of unit (easy, medium, hard, extreme, Random) + "Bandit2_DZ", // Skin classname, use "Random" or classname here + "Bandit", // AI Type, "Hero" or "Bandit". + "Random", // Primary gun set number. "Random" for random weapon set + 2, // Number of magazines + "Random", // Backpack classname, use "Random" or classname here + "Random" // Gearset classname, use "Random" or classname here +] call spawn_static; + +Place your custom static weapon spawns below +*/ + + + + + +/* +Custom Chopper Patrol spawn Eg. + +[ + [725.391,4526.06,0], // Position to patrol + 700, // Radius of patrol + 10, // Number of waypoints to give + "UH1H_DZ", // Classname of vehicle (make sure it has driver and two gunners) + "Random", // Skill level of units (easy, medium, hard, extreme, Random) + "Random", // Skin classname, use "Random" or classname here + "Bandit" // AI Type, "Hero" or "Bandit". +] call heli_patrol; + + +Place your heli patrols below +*/ + + + + + +/* +Custom Vehicle patrol spawns Eg. (Watch out they are stupid) + +[ + [725.391,4526.06,0], // Position to patrol + [725.391,4526.06,0], // Position to spawn at + 200, // Radius of patrol + 10, // Number of waypoints to give + "HMMWV_Armored", // Classname of vehicle (make sure it has driver and gunner) + "Random", // Skill level of units (easy, medium, hard, extreme, Random) + "Random", // Skin classname, use "Random" or classname here + "Bandit" // AI Type, "Hero" or "Bandit". +] call vehicle_patrol; + +Place your vehicle patrols below this line +*/ + + + + +/* +Custom Boat patrol spawns + +[ + [725.391,4526.06,0], // Position to patrol + [725.391,4526.06,0], // Position to spawn at + 150, // Radius of patrol. Your spawn point should be at least this distance from shore. + 10, // Number of waypoints to give + "RHIB", // Classname of armed boat (make sure it has driver and gunner) + "Random", // Skill level of units (easy, medium, hard, extreme, Random) + "Random", // Skin classname, use "Random" or classname here + "Bandit" // AI Type, "Hero" or "Bandit". +] call vehicle_patrol; + +Place your boat patrols below this line +*/ + + + + + +/* Uncomment this section for Skalisty Island Boat Patrols +[ + [13117.2,2866.65,0], // Position to patrol + [13117.2,2866.65,0], // Position to spawn at, can be same as patrol location + 150, // Radius of patrol + 10, // Number of waypoints to give + "RHIB", // Classname of armed boat (make sure it has driver and gunner) + "Random", // Skill level of units (easy, medium, hard, extreme, Random) + "Random", // Skin classname, use "Random" or classname here + "Bandit" // AI Type, "Hero" or "Bandit". +] call vehicle_patrol; + +[ + [13552.5,2566.86,0], // Position to patrol + [13552.5,2566.86,0], // Position to spawn at, can be same as patrol location + 150, // Radius of patrol + 10, // Number of waypoints to give + "RHIB", // Classname of armed boat (make sure it has driver and gunner) + "Random", // Skill level of units (easy, medium, hard, extreme, Random) + "Random", // Skin classname, use "Random" or classname here + "Bandit" // AI Type, "Hero" or "Bandit". +] call vehicle_patrol; + +[ + [13908.3,3259.23,0], // Position to patrol + [13908.3,3259.23,0], // Position to spawn at, can be same as patrol location + 150, // Radius of patrol + 10, // Number of waypoints to give + "RHIB", // Classname of armed boat (make sure it has driver and gunner) + "Random", // Skill level of units (easy, medium, hard, extreme, Random) + "Random", // Skin classname, use "Random" or classname here + "Bandit" // AI Type, "Hero" or "Bandit". +] call vehicle_patrol; +*/ + +/* +Paradropped unit custom spawn Eg. + +[ + [911.21545,4532.7612,2.6292224], // Position that units will be dropped by + 400, // Radius from drop position a player has to be to spawn chopper + "UH1H_DZ", // Classname of chopper (Make sure it has 2 gunner seats!) + "North", // Direction of approach for the helicopter. Options: "North","South","East","West" + [3000,4000], // Random distance from the mission the helicopter should start. [min distance, max distance]. + 150, // Fly in height of the helicopter. Be careful that the height is not too low or the AI might die when they hit the ground + 1.0, // Time in seconds between each deployed paratrooper. Higher number means paradropped AI will be more spread apart. Time of 0 means they all jump out rapidly. + 200, // Distance from the mission the helicopter should start dropping paratroopers + 5, // Number of units to be para dropped + "Random", // Skill level of units (easy, medium, hard, extreme, Random) + "Random", or ["Random","at"], // Primary gun set number and rocket launcher. "Random" for random weapon set, "at" for anti-tank, "aa" for anti-air launcher + 4, // Number of magazines + "Random", // Backpack classname, use "Random" or classname here + "Bandit2_DZ", // Skin classname, use "Random" or classname here + "Random", // Gearset number. "Random" for random gear set. + "Bandit", // AI Type, "Hero" or "Bandit". + true // true: Aircraft will stay at position and fight. false: Heli will leave if not under fire. +] spawn heli_para; + +Place your paradrop spawns under this line +*/ + + + + +/* Custom Crate Spawns + +_position = [911.21545,4532.7612,0]; // Position of the crate + +_loot = +[ + 0, // Max number of long guns OR [MAX number of long guns,gun_array] + 0, // Max number of tools OR [MAX number of tools,tool_array] + 0, // Max number of items OR [MAX number of items,item_array] + 0, // Max number of pistols OR [MAX number of pistol,pistol_array] + 0 // Max number of backpacks OR [MAX number of backpacks,backpack_array] +]; + +// Spawn one crate - Best option for static positions because offsets are not needed. +[[ + [_loot,crates_large,[0,0]] // [loot variable, crate array, 2d offsets] +],_position] call wai_spawnCrate; + + +// Multiple crate spawning option +[[ + [_loot,"USVehicleBox",[0,0]], // [loot variable, crate classname, 2d offsets] + [[0,0,[3,crate_items_crop_raider],0,0],crates_large,[0,0,0]], // [loot variable, crate array, 3d offsets] + [[0,0,0,0,0],crates_large,[0,0],60] // [loot array, crate array, 2d offsets, optional direction] +],_position] call wai_spawnCrate; + +Place your crate spawns under this line +*/ + + + + +diag_log format["WAI: Static mission for %1 loaded", missionName]; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/static/default.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/static/default.sqf new file mode 100755 index 0000000..ac529c3 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/static/default.sqf @@ -0,0 +1,171 @@ +//Custom Spawns file// + +// These custom spawns are for use in static mission locations. You can set markers in mission.sqm if you want them. + +/* +Custom group spawns Eg. + +[ + [953.237,4486.48,0.001], // Position + 4, // Number Of units + "Random", // Skill level of unit (easy, medium, hard, extreme, Random) + "Random", or ["Random","at"], // Primary gun set number or gun and rocket launcher. Syntax is "Random", for gun only or ["Random","AT"], for gun and launcher + 4, // Number of magazines + "Random", // Backpack classname, use "Random" or classname here + "Random", // Skin classname, use "Random" or classname here + "Random", // Gearset number. "Random" for random gear set + "Bandit" // AI Type, "Hero" or "Bandit". +] call spawn_group; + +Place your custom group spawns below +*/ + + + + + +/* +Custom static weapon spawns Eg. (with mutiple positions) + +[ + [ // Position(s) (can be multiple) + [911.21,4532.76,2.62], + [921.21,4542.76,2.62] + ], + "M2StaticMG", // Classname of turret + "easy", // Skill level of unit (easy, medium, hard, extreme, Random) + "Bandit2_DZ", // Skin classname, use "Random" or classname here + "Bandit", // AI Type, "Hero" or "Bandit". + "Random", // Primary gun set number. "Random" for random weapon set + 2, // Number of magazines + "Random", // Backpack classname, use "Random" or classname here + "Random" // Gearset classname, use "Random" or classname here +] call spawn_static; + +Place your custom static weapon spawns below +*/ + + + + + +/* +Custom Chopper Patrol spawn Eg. + +[ + [725.391,4526.06,0], // Position to patrol + 2000, // Radius of patrol + 10, // Number of waypoints to give + "UH1H_DZ", // Classname of vehicle (make sure it has driver and two gunners) + "Random", // Skill level of units (easy, medium, hard, extreme, Random) + "Random", // Skin classname, use "Random" or classname here + "Bandit" // AI Type, "Hero" or "Bandit". +] call heli_patrol; + +Place your heli patrols below +*/ + + + + + +/* +Custom Vehicle patrol spawns Eg. (Watch out they are stupid) + +[ + [725.391,4526.06,0], // Position to patrol + [725.391,4526.06,0], // Position to spawn at + 200, // Radius of patrol + 10, // Number of waypoints to give + "HMMWV_Armored", // Classname of vehicle (make sure it has driver and gunner) + "Random", // Skill level of units (easy, medium, hard, extreme, Random) + "Random", // Skin classname, use "Random" or classname here + "Bandit" // AI Type, "Hero" or "Bandit". +] call vehicle_patrol; + +Place your vehicle patrols below this line +*/ + + + + +/* +Custom Boat patrol spawns + +[ + [725.391,4526.06,0], // Position to patrol + [725.391,4526.06,0], // Position to spawn at + 150, // Radius of patrol. Your spawn point should be at least this distance from shore. + 10, // Number of waypoints to give + "RHIB", // Classname of armed boat (make sure it has driver and gunner) + "Random", // Skill level of units (easy, medium, hard, extreme, Random) + "Random", // Skin classname, use "Random" or classname here + "Bandit" // AI Type, "Hero" or "Bandit". +] call vehicle_patrol; + +Place your boat patrols below this line +*/ + + + + + +/* +Paradropped unit custom spawn Eg. + +[ + [911.21545,4532.7612,2.6292224], // Position that units will be dropped by + 400, // Radius from drop position a player has to be to spawn chopper + "UH1H_DZ", // Classname of chopper (Make sure it has 2 gunner seats!) + "North", // Direction of approach for the helicopter. Options: "North","South","East","West" + [3000,4000], // Random distance from the mission the helicopter should start. [min distance, max distance]. + 150, // Fly in height of the helicopter. Be careful that the height is not too low or the AI might die when they hit the ground + 1.0, // Time in seconds between each deployed paratrooper. Higher number means paradropped AI will be more spread apart. Time of 0 means they all jump out rapidly. + 200, // Distance from the mission the helicopter should start dropping paratroopers + 5, // Number of units to be para dropped + "Random", // Skill level of units (easy, medium, hard, extreme, Random) + "Random", or ["Random","at"], // Primary gun set number and rocket launcher. "Random" for random weapon set, "at" for anti-tank, "aa" for anti-air launcher + 4, // Number of magazines + "Random", // Backpack classname, use "Random" or classname here + "Bandit2_DZ", // Skin classname, use "Random" or classname here + "Random", // Gearset number. "Random" for random gear set. + "Bandit", // AI Type, "Hero" or "Bandit". + true // true: Aircraft will stay at position and fight. false: Heli will leave if not under fire. +] spawn heli_para; + +Place your paradrop spawns under this line +*/ + + + +/* Custom Crate Spawns + +_position = [911.21545,4532.7612,0]; // Position of the crate + +_loot = +[ + 0, // Max number of long guns OR [MAX number of long guns,gun_array] + 0, // Max number of tools OR [MAX number of tools,tool_array] + 0, // Max number of items OR [MAX number of items,item_array] + 0, // Max number of pistols OR [MAX number of pistol,pistol_array] + 0 // Max number of backpacks OR [MAX number of backpacks,backpack_array] +]; + +// Spawn one crate - Best option for static positions because offsets are not needed. +[[ + [_loot,crates_large,[0,0]] // [loot variable, crate array, 2d offsets] +],_position] call wai_spawnCrate; + + +// Multiple crate spawning option +[[ + [_loot,"USVehicleBox",[0,0]], // [loot variable, crate classname, 2d offsets] + [[0,0,[3,crate_items_crop_raider],0,0],crates_large,[0,0,0]], // [loot variable, crate array, 3d offsets] + [[0,0,0,0,0],crates_large,[0,0],60] // [loot array, crate array, 2d offsets, optional direction] +],_position] call wai_spawnCrate; + +Place your crate spawns under this line +*/ + + +diag_log "WAI: Static mission loaded"; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/WAI/static/init.sqf b/@DayZ_Epoch_Server/addons/dayz_server/WAI/static/init.sqf new file mode 100755 index 0000000..598696e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/WAI/static/init.sqf @@ -0,0 +1,9 @@ +if(wai_custom_per_world) then { + ExecVM format["\z\addons\dayz_server\WAI\static\%1.sqf",toLower(worldName)]; +} else { + ExecVM "\z\addons\dayz_server\WAI\static\default.sqf"; +}; + +[] spawn static_spawn_manager; + +wai_staticloaded = true; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/bankTraders/init.sqf b/@DayZ_Epoch_Server/addons/dayz_server/bankTraders/init.sqf new file mode 100755 index 0000000..effc312 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/bankTraders/init.sqf @@ -0,0 +1,15 @@ +private "_worldName"; + +_worldName = toLower worldName; + +switch _worldName do { + case "napf": { + [ + ["Functionary1_EP1_DZ",[12399.83,5054.3413,0.2068495],52], + ["Functionary1_EP1_DZ",[15529.827,13236.555,2.3841858e-006],164], + ["Functionary1_EP1_DZ",[8252.4922,15494.612,0.22058211],24.5], + ["Functionary1_EP1_DZ",[2123.4653,7806.499,0.28556034],52.873837] + ] call server_spawnTraders; + }; + default {diag_log format ["[ZSC] The map this server is running (%1) is currently not supported by ZSC for global banking traders.",_worldName];}; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/EAT_crateSpawn.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/EAT_crateSpawn.sqf new file mode 100755 index 0000000..438f4c9 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/EAT_crateSpawn.sqf @@ -0,0 +1,221 @@ +private ["_playerUID","_clientKey","_worldspace","_selectDelay","_crate","_pos","_dir","_activatingPlayer","_bloodBag","_cfgweapons","_weapon","_key_colors","_wpn_type","_cfgmagazines","_magazine","_mag_type","_classname","_spawnCrate"]; + +#define EAT_CrateSetup _spawnCrate = _classname createVehicle _pos; _spawnCrate setposATL _pos; _spawnCrate setDir _dir; clearWeaponCargoGlobal _spawnCrate; clearMagazineCargoGlobal _spawnCrate; clearBackpackCargoGlobal _spawnCrate; _spawnCrate setVariable ["ObjectID","1",true]; dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_spawnCrate]; + +// Backpack crate +EAT_backpackCrateContents = [["DZ_Backpack_EP1", 1],["DZ_British_ACU", 1],["DZ_CivilBackpack_EP1", 1],["DZ_GunBag_EP1", 1],["DZ_LargeGunBag_EP1", 1]]; + +// Items Crate +_bloodBag = "ItemBloodbag"; +if(dayz_classicBloodBagSystem) then {_bloodBag = "bloodBagONEG";}; +EAT_itemCrateWeapons = [["Binocular", 5],["Binocular_Vector", 5],["ItemCompass", 5],["ItemCrowbar", 5],["ItemEtool", 5],["ItemFishingPole", 5],["ItemFlashlight", 5],["ItemFlashlightRed", 5],["ItemGPS", 5],["ItemHatchet", 5],["ItemKeyKit", 5],["ItemKnife", 5],["ItemMap", 5],["ItemMatchBox", 5],["ItemRadio", 5],["ItemSledge", 5],["ItemToolbox", 5],["ItemWatch", 5],["Laserdesignator", 5],["NVGoggles", 5]]; +EAT_itemCrateMagazines = [["FoodbeefCooked", 10],["HandChemBlue", 10],["HandChemGreen", 10],["HandChemRed", 10],["HandRoadFlare", 10],["ItemAntibiotic", 10],["ItemBandage", 10],[_bloodBag, 10],["ItemBriefcase100oz", 10],["ItemBriefcaseEmpty", 10],["ItemCopperBar", 10],["ItemCopperBar10oz", 10],["ItemEpinephrine", 10],["ItemFuelBarrel", 10],["ItemGoldBar", 10],["ItemGoldBar10oz", 10],["ItemHeatPack", 10],["ItemJerrycan", 10],["ItemMorphine", 10],["ItemOilBarrel", 10],["ItemPainkiller", 10],["ItemSilverBar", 10],["ItemSilverBar10oz", 10],["ItemSodaMdew", 10],["PartEngine", 10],["PartFueltank", 10],["PartGeneric", 10],["PartGlass", 10],["PartVRotor", 10],["PartWheel", 10],["Skin_Bandit1_DZ", 10],["Skin_Bandit2_DZ", 10],["Skin_BanditW1_DZ", 10],["Skin_BanditW2_DZ", 10],["Skin_CZ_Soldier_Sniper_EP1_DZ", 10],["Skin_CZ_Special_Forces_GL_DES_EP1_DZ", 10],["Skin_Drake_Light_DZ", 10],["Skin_FR_OHara_DZ", 10],["Skin_FR_Rodriguez_DZ", 10],["Skin_Functionary1_EP1_DZ", 10],["Skin_Graves_Light_DZ", 10],["Skin_GUE_Commander_DZ", 10],["Skin_GUE_Soldier_2_DZ", 10],["Skin_GUE_Soldier_CO_DZ", 10],["Skin_GUE_Soldier_Crew_DZ", 10],["Skin_GUE_Soldier_MG_DZ", 10],["Skin_GUE_Soldier_Sniper_DZ", 10],["Skin_Haris_Press_EP1_DZ", 10],["Skin_Ins_Soldier_GL_DZ", 10],["Skin_Pilot_EP1_DZ", 10],["Skin_Priest_DZ", 10],["Skin_Rocker1_DZ", 10],["Skin_Rocker2_DZ", 10],["Skin_Rocker3_DZ", 10],["Skin_Rocker4_DZ", 10],["Skin_Rocket_DZ", 10],["Skin_RU_Policeman_DZ", 10],["Skin_Sniper1_DZ", 10],["Skin_Soldier_Bodyguard_AA12_PMC_DZ", 10],["Skin_Soldier_Sniper_PMC_DZ", 10],["Skin_Soldier_TL_PMC_DZ", 10],["Skin_SurvivorW2_DZ", 10],["Skin_SurvivorW3_DZ", 10],["Skin_SurvivorWcombat_DZ", 10],["Skin_SurvivorWdesert_DZ", 10],["Skin_SurvivorWpink_DZ", 10],["Skin_SurvivorWurban_DZ", 10],["Skin_Assistant_DZ", 10],["Skin_TK_INS_Soldier_EP1_DZ", 10],["Skin_TK_INS_Warlord_EP1_DZ", 10],["TrapBear", 10],["TrashJackDaniels", 10],["TrashTinCan", 10]]; + +// Building Crates +EAT_buildingCrateWeapons = [["ItemCrowbar", 5],["ItemEtool", 5],["ItemHatchet", 5],["ItemMatchBox", 5],["ItemSledge", 5],["ItemToolbox", 5]]; +EAT_smallBuildingCrateWeapons = [["ItemCrowbar", 1],["ItemEtool", 1],["ItemHatchet", 1],["ItemMatchBox", 1],["ItemSledge", 1],["ItemToolbox", 1],["ChainSaw", 1]]; + +EAT_buildingCrateMagazines = [["plot_pole_kit", 10],["bulk_empty", 10],["bulk_ItemTankTrap", 20],["bulk_ItemWire", 10],["CinderBlocks", 30],["cinder_door_kit", 10],["cinder_garage_kit", 10],["full_cinder_wall_kit", 60],["deer_stand_kit", 10],["desert_large_net_kit", 10],["desert_net_kit", 10],["forest_large_net_kit", 10],["forest_net_kit", 10],["fuel_pump_kit", 10],["ItemBurlap", 10],["ItemCanvas", 10],["ItemComboLock", 10],["ItemCorrugated", 10],["ItemFireBarrel_Kit", 10],["ItemFuelBarrelEmpty", 10],["ItemGenerator", 10],["ItemGunRackKit", 10],["ItemHotwireKit", 10],["ItemJerrycan", 10],["ItemLockbox", 10],["ItemPole", 10],["ItemSandbag", 50],["ItemSandbagExLarge", 20],["ItemSandbagExLarge5x", 20],["ItemSandbagLarge", 20],["ItemScaffoldingKit", 10],["BagFenceRound_DZ_kit",20],["ItemTankTrap", 10],["ItemTent", 5],["ItemDesertTent", 5],["ItemVault", 10],["ItemWire", 10],["ItemWoodFloor", 30],["ItemWoodFloorHalf", 30],["ItemWoodFloorQuarter", 30],["ItemWoodLadder", 30],["ItemWoodStairs", 10],["ItemWoodStairsSupport", 10],["ItemWoodWall", 30],["ItemWoodWallDoor", 10],["ItemWoodWallDoorLg", 10],["ItemWoodWallGarageDoor", 10],["ItemWoodWallGarageDoorLocked", 10],["ItemWoodWallLg", 30],["ItemWoodWallThird", 20],["ItemWoodWallWindow", 20],["ItemWoodWallWindowLg", 30],["ItemWoodWallWithDoor", 10],["ItemWoodWallwithDoorLg", 10],["ItemWoodWallWithDoorLgLocked", 10],["ItemWoodWallWithDoorLocked", 10],["light_pole_kit", 10],["m240_nest_kit", 5],["metal_floor_kit", 60],["metal_panel_kit", 20],["MortarBucket", 5],["outhouse_kit", 5],["park_bench_kit", 5],["PartGeneric", 30],["PartPlankPack", 30],["PartPlywoodPack", 30],["PartWoodLumber", 30],["PartWoodPile", 30],["PartWoodPlywood", 30],["rusty_gate_kit", 5],["sandbag_nest_kit", 30],["stick_fence_kit", 5],["storage_shed_kit", 10],["sun_shade_kit", 10],["wooden_shed_kit", 10],["wood_ramp_kit", 10],["wood_shack_kit", 10],["workbench_kit", 5]]; +EAT_smallCinderBuildingKit = [["plot_pole_kit", 1],["bulk_ItemTankTrap", 1],["ItemPole", 4],["bulk_ItemWire", 1],["CinderBlocks", 32],["MortarBucket", 8],["cinder_door_kit", 1],["cinder_garage_kit", 1],["full_cinder_wall_kit", 8],["half_cinder_wall_kit", 8],["metal_floor_kit", 8],["ItemComboLock", 2],["bulk_ItemSandbag", 1],["ItemVault", 1],["ItemGunRackKit", 1],["workbench_kit", 1],["ItemWoodCrateKit",1],["ItemFireBarrel_Kit",1],["metal_panel_kit", 8],["ItemCorrugated",8],["ItemMixOil", 1],["ItemJerrycan", 1],["storage_shed_kit", 1],["light_pole_kit", 1]]; +EAT_mediumCinderBuildingKit = [["plot_pole_kit", 1],["bulk_ItemTankTrap", 2],["ItemPole", 8],["bulk_ItemWire", 2],["CinderBlocks", 64],["MortarBucket", 16],["cinder_door_kit", 2],["cinder_garage_kit", 2],["full_cinder_wall_kit", 16],["half_cinder_wall_kit", 16],["metal_floor_kit", 16],["ItemComboLock", 4],["bulk_ItemSandbag", 2],["ItemVault", 2],["ItemGunRackKit", 2],["workbench_kit", 1],["ItemWoodCrateKit",2],["ItemFireBarrel_Kit",1],["metal_panel_kit", 16],["ItemCorrugated",16],["ItemMixOil", 2],["ItemJerrycan", 1],["storage_shed_kit", 2],["light_pole_kit", 2]]; +EAT_largeCinderBuildingKit = [["plot_pole_kit", 1],["bulk_ItemTankTrap", 3],["ItemPole", 12],["bulk_ItemWire", 3],["CinderBlocks", 96],["MortarBucket", 24],["cinder_door_kit", 3],["cinder_garage_kit", 3],["full_cinder_wall_kit", 24],["half_cinder_wall_kit", 24],["metal_floor_kit", 24],["ItemComboLock", 6],["bulk_ItemSandbag", 3],["ItemVault", 3],["ItemGunRackKit", 3],["workbench_kit", 1],["ItemWoodCrateKit",3],["ItemFireBarrel_Kit",1],["metal_panel_kit", 24],["ItemCorrugated",24],["ItemMixOil", 3],["ItemJerrycan", 1],["storage_shed_kit", 3],["light_pole_kit", 3]]; +EAT_smallWoodBuildingKit = [["ItemWoodFloor", 4],["ItemWoodFloorHalf", 4],["ItemWoodFloorQuarter", 4],["ItemWoodLadder", 2],["ItemWoodStairs", 2],["ItemWoodWallDoorLg", 1],["ItemWoodWallGarageDoor", 1],["ItemWoodWallLg", 4],["ItemWoodWallThird", 3],["ItemWoodWallWindowLg", 4],["ItemWoodWallwithDoorLg", 1],["ItemComboLock", 2],["ItemLockbox", 1],["ItemGunRackKit", 1],["workbench_kit", 1],["ItemWoodCrateKit",1],["ItemFireBarrel_Kit",1],["ItemMixOil", 1],["ItemJerrycan", 1]]; +EAT_mediumWoodBuildingKit = [["ItemWoodFloor", 8],["ItemWoodFloorHalf", 8],["ItemWoodFloorQuarter", 8],["ItemWoodLadder", 4],["ItemWoodStairs", 4],["ItemWoodWallDoorLg", 2],["ItemWoodWallGarageDoor", 2],["ItemWoodWallLg", 8],["ItemWoodWallThird", 6],["ItemWoodWallWindowLg", 8],["ItemWoodWallwithDoorLg", 2],["ItemComboLock", 4],["ItemLockbox", 2],["ItemGunRackKit", 2],["workbench_kit", 1],["ItemWoodCrateKit",2],["ItemFireBarrel_Kit",1],["ItemMixOil", 2],["ItemJerrycan", 2]]; +EAT_largeWoodBuildingKit = [["ItemWoodFloor", 16],["ItemWoodFloorHalf", 16],["ItemWoodFloorQuarter", 16],["ItemWoodLadder", 6],["ItemWoodStairs", 6],["ItemWoodWallDoorLg", 3],["ItemWoodWallGarageDoor", 3],["ItemWoodWallLg", 16],["ItemWoodWallThird", 12],["ItemWoodWallWindowLg", 16],["ItemWoodWallwithDoorLg", 3],["ItemComboLock", 6],["ItemVault", 1],["ItemGunRackKit", 3],["workbench_kit", 1],["ItemWoodCrateKit",3],["ItemFireBarrel_Kit",1],["ItemMixOil", 3],["ItemJerrycan", 3]]; + +// Weapons Crate +EAT_weaponCrateWeapons = [["G36C_DZ", 5],["G36C_CCO_DZ", 5],["G36C_Holo_DZ", 5],["G36C_ACOG_DZ", 5],["G36C_SD_DZ", 5],["G36C_CCO_SD_DZ", 5],["G36C_Holo_SD_DZ", 5],["G36C_ACOG_SD_DZ", 5],["G36C_camo", 5],["G36A_Camo_DZ", 5],["G36K_Camo_DZ", 5],["G36K_Camo_SD_DZ", 5],["M16A2_DZ", 5],["M16A2_GL_DZ", 5],["M16A4_DZ", 5],["M16A4_CCO_DZ", 5],["M16A4_Holo_DZ", 5],["M16A4_ACOG_DZ", 5],["M16A4_GL_DZ", 5],["M16A4_FL_DZ", 5],["M16A4_MFL_DZ", 5],["M16A4_CCO_FL_DZ", 5],["M16A4_Holo_FL_DZ", 5],["M16A4_ACOG_FL_DZ", 5],["M16A4_GL_FL_DZ", 5],["M16A4_CCO_MFL_DZ", 5],["M16A4_Holo_MFL_DZ", 5],["M16A4_ACOG_MFL_DZ", 5],["M16A4_GL_MFL_DZ", 5],["M16A4_GL_CCO_DZ", 5],["M16A4_GL_Holo_DZ", 5],["M16A4_GL_ACOG_DZ", 5],["M16A4_GL_CCO_FL_DZ", 5],["M16A4_GL_Holo_FL_DZ", 5],["M16A4_GL_ACOG_FL_DZ", 5],["M16A4_GL_CCO_MFL_DZ", 5],["M16A4_GL_Holo_MFL_DZ", 5],["M16A4_GL_ACOG_MFL_DZ", 5],["M4A1_DZ", 5],["M4A1_FL_DZ", 5],["M4A1_MFL_DZ", 5],["M4A1_SD_DZ", 5],["M4A1_SD_FL_DZ", 5],["M4A1_SD_MFL_DZ", 5],["M4A1_CCO_DZ", 5],["M4A1_CCO_FL_DZ", 5],["M4A1_CCO_MFL_DZ", 5],["M4A1_CCO_SD_DZ", 5],["M4A1_CCO_SD_FL_DZ", 5],["M4A1_CCO_SD_MFL_DZ", 5],["M4A1_Holo_DZ", 5],["M4A1_Holo_FL_DZ", 5],["M4A1_Holo_MFL_DZ", 5],["M4A1_Holo_SD_DZ", 5],["M4A1_Holo_SD_FL_DZ", 5],["M4A1_Holo_SD_MFL_DZ", 5],["M4A1_ACOG_DZ", 5],["M4A1_ACOG_FL_DZ", 5],["M4A1_ACOG_MFL_DZ", 5],["M4A1_ACOG_SD_DZ", 5],["M4A1_ACOG_SD_FL_DZ", 5],["M4A1_ACOG_SD_MFL_DZ", 5],["M4A1_GL_DZ", 5],["M4A1_GL_FL_DZ", 5],["M4A1_GL_MFL_DZ", 5],["M4A1_GL_SD_DZ", 5],["M4A1_GL_SD_FL_DZ", 5],["M4A1_GL_SD_MFL_DZ", 5],["M4A1_GL_CCO_DZ", 5],["M4A1_GL_CCO_FL_DZ", 5],["M4A1_GL_CCO_MFL_DZ", 5],["M4A1_GL_CCO_SD_DZ", 5],["M4A1_GL_CCO_SD_FL_DZ", 5],["M4A1_GL_CCO_SD_MFL_DZ", 5],["M4A1_GL_Holo_DZ", 5],["M4A1_GL_Holo_FL_DZ", 5],["M4A1_GL_Holo_MFL_DZ", 5],["M4A1_GL_Holo_SD_DZ", 5],["M4A1_GL_Holo_SD_FL_DZ", 5],["M4A1_GL_Holo_SD_MFL_DZ", 5],["M4A1_GL_ACOG_DZ", 5],["M4A1_GL_ACOG_FL_DZ", 5],["M4A1_GL_ACOG_MFL_DZ", 5],["M4A1_GL_ACOG_SD_DZ", 5],["M4A1_GL_ACOG_SD_FL_DZ", 5],["M4A1_GL_ACOG_SD_MFL_DZ", 5],["M4A1_HWS_GL_camo", 5],["M4A1_HWS_GL_SD_Camo", 5],["M4A3_CCO_EP1", 5],["SCAR_L_CQC", 5],["SCAR_L_CQC_CCO_SD", 5],["SCAR_L_CQC_Holo", 5],["SCAR_L_CQC_EGLM_Holo", 5],["SCAR_L_STD_EGLM_RCO", 5],["SCAR_L_STD_HOLO", 5],["SCAR_L_STD_Mk4CQT", 5],["SA58_DZ", 5],["SA58_RIS_DZ", 5],["SA58_RIS_FL_DZ", 5],["SA58_RIS_MFL_DZ", 5],["SA58_CCO_DZ", 5],["SA58_CCO_FL_DZ", 5],["SA58_CCO_MFL_DZ", 5],["SA58_Holo_DZ", 5],["SA58_Holo_FL_DZ", 5],["SA58_Holo_MFL_DZ", 5],["SA58_ACOG_DZ", 5],["SA58_ACOG_FL_DZ", 5],["SA58_ACOG_MFL_DZ", 5],["Sa58V_CCO_EP1", 5],["Sa58V_RCO_EP1", 5],["AKS74U_DZ", 5],["AKS74U_Kobra_DZ", 5],["AKS74U_SD_DZ", 5],["AKS74U_Kobra_SD_DZ", 5],["AKM_DZ", 5],["AKM_Kobra_DZ", 5],["AKM_PSO1_DZ", 5],["AK74_DZ", 5],["AK74_Kobra_DZ", 5],["AK74_PSO1_DZ", 5],["AK74_GL_DZ", 5],["AK74_SD_DZ", 5],["AK74_Kobra_SD_DZ", 5],["AK74_PSO1_SD_DZ", 5],["AK74_GL_SD_DZ", 5],["AK74_GL_Kobra_DZ", 5],["AK74_GL_PSO1_DZ", 5],["AK74_GL_Kobra_SD_DZ", 5],["AK74_GL_PSO1_SD_DZ", 5],["FNFAL_DZ", 5],["FNFAL_CCO_DZ", 5],["FNFAL_Holo_DZ", 5],["BAF_L86A2_ACOG", 5],["L110A1_DZ", 5],["L110A1_CCO_DZ", 5],["L110A1_Holo_DZ", 5],["M249_DZ", 5],["M249_CCO_DZ", 5],["M249_Holo_DZ", 5],["M240_DZ", 5],["M240_CCO_DZ", 5],["M240_Holo_DZ", 5],["Mk48_DZ", 5],["Mk48_CCO_DZ", 5],["Mk48_Holo_DZ", 5],["RPK_DZ", 5],["RPK_Kobra_DZ", 5],["RPK_PSO1_DZ", 5],["RPK74_DZ", 5],["RPK74_Kobra_DZ", 5],["RPK74_PSO1_DZ", 5],["UK59_DZ", 5],["PKM_DZ", 5],["Pecheneg_DZ", 5],["Crossbow_DZ", 5],["Crossbow_CCO_DZ", 5],["Crossbow_FL_DZ", 5],["Crossbow_MFL_DZ", 5],["Crossbow_Scope_DZ", 5],["Crossbow_CCO_FL_DZ", 5],["Crossbow_Scope_FL_DZ", 5],["Crossbow_CCO_MFL_DZ", 5],["Crossbow_Scope_MFL_DZ", 5],["RedRyder", 5],["MR43_DZ", 5],["Winchester1866_DZ", 5],["M1014_DZ", 5],["M1014_CCO_DZ", 5],["M1014_Holo_DZ", 5],["Remington870_DZ", 5],["Remington870_FL_DZ", 5],["Remington870_MFL_DZ", 5],["LeeEnfield_DZ", 5],["Mosin_DZ", 5],["Mosin_FL_DZ", 5],["Mosin_MFL_DZ", 5],["Mosin_Belt_DZ", 5],["Mosin_Belt_FL_DZ", 5],["Mosin_Belt_MFL_DZ", 5],["Mosin_PU_DZ", 5],["Mosin_PU_FL_DZ", 5],["Mosin_PU_MFL_DZ", 5],["Mosin_PU_Belt_DZ", 5],["Mosin_PU_Belt_FL_DZ", 5],["Mosin_PU_Belt_MFL_DZ", 5],["M4SPR", 5],["M14_DZ", 5],["M14_Gh_DZ", 5],["M14_CCO_DZ", 5],["M14_Holo_DZ", 5],["M14_CCO_Gh_DZ", 5],["M14_Holo_Gh_DZ", 5],["CZ550_DZ", 5],["M24_DZ", 5],["M24_Gh_DZ", 5],["M24_des_EP1", 5],["M40A3_DZ", 5],["M40A3_Gh_DZ", 5],["SVD_DZ", 5],["SVD_Gh_DZ", 5],["SVD_PSO1_DZ", 5],["SVD_PSO1_Gh_DZ", 5],["SVD_des_EP1", 5],["Sa61_EP1", 5],["PDW_DZ", 5],["UZI_SD_EP1", 5],["MP5_DZ", 5],["MP5_SD_DZ", 5],["Bizon_DZ", 5],["Bizon_SD_DZ", 5],["MeleeBaseBallBat", 5],["Saiga12K", 5],["AA12_PMC", 5],["m8_compact", 5],["m8_sharpshooter", 5],["m8_holo_sd", 5],["m8_carbine", 5],["M8_SAW", 5],["SCAR_H_CQC_CCO", 5],["SCAR_H_CQC_CCO_SD", 5],["SCAR_H_STD_EGLM_Spect", 5],["MG36", 5],["MG36_camo", 5],["M249_m145_EP1_DZE", 5],["M60A4_EP1_DZE", 5],["m240_scoped_EP1_DZE", 5],["VSS_vintorez", 5],["KSVK_DZE", 5],["M9_DZ", 5],["M9_SD_DZ", 5],["G17_DZ", 5],["G17_FL_DZ", 5],["G17_MFL_DZ", 5],["G17_SD_DZ", 5],["G17_SD_FL_DZ", 5],["G17_SD_MFL_DZ", 5],["Makarov_DZ", 5],["Makarov_SD_DZ", 5],["Revolver_DZ", 5],["revolver_gold_EP1", 5],["M1911_DZ", 5],["G36_C_SD_camo", 5],["M4A1_AIM_SD_camo", 5],["FN_FAL_ANPVS4_DZE", 5],["SCAR_H_LNG_Sniper", 5],["SCAR_H_LNG_Sniper_SD", 5],["M110_NVG_EP1", 5],["DMR_DZ", 5],["DMR_Gh_DZ", 5],["BAF_LRR_scoped", 5],["BAF_LRR_scoped_W", 5],["m107_DZ", 5],["Anzio_20_DZ", 5],["BAF_AS50_scoped_DZ", 5],["L85A2_DZ", 5],["L85A2_FL_DZ", 5],["L85A2_MFL_DZ", 5],["L85A2_SD_DZ", 5],["L85A2_SD_FL_DZ", 5],["L85A2_SD_MFL_DZ", 5],["L85A2_CCO_DZ", 5],["L85A2_CCO_FL_DZ", 5],["L85A2_CCO_MFL_DZ", 5],["L85A2_CCO_SD_DZ", 5],["L85A2_CCO_SD_FL_DZ", 5],["L85A2_CCO_SD_MFL_DZ", 5],["L85A2_Holo_DZ", 5],["L85A2_Holo_FL_DZ", 5],["L85A2_Holo_MFL_DZ", 5],["L85A2_Holo_SD_DZ", 5],["L85A2_Holo_SD_FL_DZ", 5],["L85A2_Holo_SD_MFL_DZ", 5],["L85A2_ACOG_DZ", 5],["L85A2_ACOG_FL_DZ", 5],["L85A2_ACOG_MFL_DZ", 5],["L85A2_ACOG_SD_DZ", 5],["L85A2_ACOG_SD_FL_DZ", 5],["L85A2_ACOG_SD_MFL_DZ", 5]]; +EAT_weaponCrateMagazines = [["2Rnd_12Gauge_Slug", 20],["2Rnd_12Gauge_Buck", 20],["5Rnd_127x108_KSVK", 20],["5Rnd_127x99_as50", 20],["5Rnd_762x51_M24", 20],["5Rnd_86x70_L115A1", 20],["5x_22_LR_17_HMR", 20],["6Rnd_45ACP", 20],["7Rnd_45ACP_1911", 20],["8Rnd_9x18_Makarov", 20],["8Rnd_9x18_MakarovSD", 20],["8Rnd_B_Beneli_74Slug", 20],["8Rnd_B_Beneli_Pellets", 20],["8Rnd_B_Saiga12_74Slug", 20],["8Rnd_B_Saiga12_Pellets", 20],["10Rnd_127x99_M107", 20],["3rnd_Anzio_20x102mm", 20],["10Rnd_762x54_SVD", 20],["10x_303", 20],["15Rnd_9x19_M9", 20],["15Rnd_9x19_M9SD", 20],["15Rnd_W1866_Slug", 20],["17Rnd_9x19_glock17", 20],["20Rnd_556x45_Stanag", 40],["20Rnd_762x51_DMR", 20],["20Rnd_762x51_FNFAL", 20],["20Rnd_B_765x17_Ball", 20],["30Rnd_545x39_AK", 20],["30Rnd_545x39_AKSD", 20],["30Rnd_556x45_G36", 30],["30Rnd_556x45_G36SD", 30],["30Rnd_556x45_Stanag", 40],["30Rnd_556x45_StanagSD", 20],["30Rnd_762x39_AK47", 20],["30Rnd_9x19_MP5", 20],["30Rnd_9x19_MP5SD", 20],["30Rnd_9x19_UZI", 20],["30Rnd_9x19_UZI_SD", 20],["50Rnd_127x108_KORD", 20],["64Rnd_9x19_Bizon", 20],["64Rnd_9x19_SD_Bizon", 20],["75Rnd_545x39_RPK", 20],["100Rnd_762x51_M240", 20],["100Rnd_762x54_PK", 20],["100Rnd_556x45_BetaCMag", 20],["100Rnd_556x45_M249", 20],["200Rnd_556x45_L110A1", 20],["200Rnd_556x45_M249", 20],["1Rnd_Bolt_Tranquilizer", 20],["1Rnd_Bolt_Explosive", 20],["12Rnd_Quiver_Wood", 20],["1Rnd_HE_M203", 20],["HandGrenade_west", 20],["SmokeShell", 20],["SmokeShellGreen", 20],["SmokeShellRed", 20],["PipeBomb", 20]]; + +if (EAT_isOverpoch) then { + EAT_OverwatchWeaponCrateWeapons = [["RH_m9",1],["RH_m9c",1],["RH_m93r",1],["RH_M9sd",1],["RH_m9csd",1],["RH_browninghp",1],["vil_B_HP",1],["RH_anac",1],["RH_anacg",1],["RH_python",1],["RH_deagle",1],["RH_Deagleg",1],["RH_Deaglem",1],["RH_Deaglemzb",1],["RH_Deaglemz",1],["RH_Deagles",1],["vil_Glock",1],["RH_g17",1],["vil_Glock_o",1],["RH_g17sd",1],["RH_g18",1],["RH_g19",1],["RH_g19t",1],["RH_tec9",1],["RH_m1911",1],["RH_m1911sd",1],["RH_m1911old",1],["RH_mk22",1],["RH_mk22sd",1],["RH_mk22v",1],["RH_mk22vsd",1],["RH_p38",1],["RH_ppk",1],["RH_mk2",1],["RH_p226",1],["RH_p226s",1],["RH_bull",1],["RH_tt33",1],["RH_usp",1],["RH_uspm",1],["RH_uspsd",1],["vil_USP45",1],["vil_USP45SD",1],["vil_USP",1],["vil_USPSD",1],["RH_vz61",1], + ["vil_AEK2",1],["vil_AEK_GL",1],["vil_AeK_3",1],["vil_AeK_23",1],["vil_AeK_3_K",1],["vil_AK_105",1],["Vil_AK_105_c",1],["vil_AK_101",1],["vil_AK_103",1],["vil_AK_107",1],["Vil_AK_107_c",1],["vil_ak12",1],["vil_ak12_ap",1],["vil_ak12_gp",1],["vil_AK_47",1],["vil_AK_47_49",1],["vil_AK_47_m1",1],["vil_AK_47",1],["vil_AK_74_N",1],["vil_AK_74P",1],["vil_AK_74m",1],["vil_AK_74m_p29",1],["vil_AK_74m_EOT_Alfa",1],["vil_AK_74m_gp_29",1],["vil_AK_74m_gp",1],["vil_AK_74m_EOT",1],["vil_AK_74m_EOT_FSB",1],["vil_AK_74m_EOT_FSB_60",1],["vil_AK_74m_EOT_FSB_45",1],["vil_AK_74m_c",1],["vil_AK_74m_k",1],["vil_AK_74m_PSO",1],["vil_AKM",1],["vil_AKM_GL",1],["vil_AKMS",1],["vil_AKMS_GP25",1],["vil_AKMSB",1],["vil_AKS_47",1],["vil_AKS_74",1],["vil_AKS_74_gp",1],["vil_AKS_74p_gp",1],["vil_AKS_74p",1],["vil_AKS_74p_45",1],["vil_AKs_74_u",1],["vil_AKs_74_u45",1],["Vil_AKS_74_UB",1],["Vil_AKS_74_UN_kobra",1],["vil_AMD63",1],["vil_AMD",1],["vil_Abakan",1],["vil_Abakan_P29",1],["vil_Abakan_gp",1],["vil_AK_nato_m1",1],["vil_ASH82",1],["vil_MPi",1],["vil_PMI74S",1],["vil_PMI",1],["vil_PMIS",1],["vil_type88_1",1],["vil_M64",1],["vil_M70",1],["vil_M70B",1],["vil_AK_nato_m80",1], + ["vil_Galil",1],["vil_Galil_arm",1],["vil_SKS",1],["gms_k98",1],["gms_k98_knife",1],["gms_k98_rg",1],["gms_k98zf39",1], + ["FHQ_ACR_BLK_CCO_GL_SD",1],["FHQ_ACR_TAN_CCO_GL_SD",1],["FHQ_ACR_SNW_CCO_GL_SD",1],["FHQ_ACR_WDL_CCO_GL_SD",1],["FHQ_ACR_BLK_CCO_SD",1],["FHQ_ACR_TAN_CCO_SD",1],["FHQ_ACR_SNW_CCO_SD",1],["FHQ_ACR_WDL_CCO_SD",1],["FHQ_ACR_BLK_G33_GL_SD",1],["FHQ_ACR_TAN_G33_GL_SD",1],["FHQ_ACR_SNW_G33_GL_SD",1],["FHQ_ACR_WDL_G33_GL_SD",1],["FHQ_ACR_BLK_G33_SD",1],["FHQ_ACR_TAN_G33_SD",1],["FHQ_ACR_SNW_G33_SD",1],["FHQ_ACR_WDL_G33_SD",1],["FHQ_ACR_BLK_HAMR_GL_SD",1],["FHQ_ACR_TAN_HAMR_GL_SD",1],["FHQ_ACR_SNW_HAMR_GL_SD",1],["FHQ_ACR_WDL_HAMR_GL_SD",1],["FHQ_ACR_BLK_HAMR_SD",1],["FHQ_ACR_TAN_HAMR_SD",1],["FHQ_ACR_SNW_HAMR_SD",1],["FHQ_ACR_WDL_HAMR_SD",1],["FHQ_ACR_BLK_HWS_GL_SD",1],["FHQ_ACR_TAN_HWS_GL_SD",1],["FHQ_ACR_SNW_HWS_GL_SD",1],["FHQ_ACR_WDL_HWS_GL_SD",1],["FHQ_ACR_BLK_HWS_SD",1],["FHQ_ACR_TAN_HWS_SD",1],["FHQ_ACR_SNW_HWS_SD",1],["FHQ_ACR_WDL_HWS_SD",1],["FHQ_ACR_BLK_IRN_GL_SD",1],["FHQ_ACR_TAN_IRN_GL_SD",1],["FHQ_ACR_SNW_IRN_GL_SD",1],["FHQ_ACR_WDL_IRN_GL_SD",1],["FHQ_ACR_BLK_RCO_GL_SD",1],["FHQ_ACR_TAN_RCO_GL_SD",1],["FHQ_ACR_SNW_RCO_GL_SD",1],["FHQ_ACR_WDL_RCO_GL_SD",1],["FHQ_ACR_BLK_RCO_SD",1],["FHQ_ACR_TAN_RCO_SD",1],["FHQ_ACR_SNW_RCO_SD",1],["FHQ_ACR_WDL_RCO_SD",1],["FHQ_ACR_BLK_IRN_SD",1],["FHQ_ACR_TAN_IRN_SD",1],["FHQ_ACR_SNW_IRN_SD",1],["FHQ_ACR_WDL_IRN_SD",1], + ["FHQ_ACR_BLK_IRN",1],["FHQ_ACR_TAN_IRN",1],["FHQ_ACR_SNW_IRN",1],["FHQ_ACR_WDL_IRN",1],["FHQ_ACR_BLK_CCO",1],["FHQ_ACR_TAN_CCO",1],["FHQ_ACR_SNW_CCO",1],["FHQ_ACR_WDL_CCO",1],["FHQ_ACR_BLK_CCO_GL",1],["FHQ_ACR_TAN_CCO_GL",1],["FHQ_ACR_SNW_CCO_GL",1],["FHQ_ACR_WDL_CCO_GL",1],["FHQ_ACR_BLK_G33",1],["FHQ_ACR_TAN_G33",1],["FHQ_ACR_SNW_G33",1],["FHQ_ACR_WDL_G33",1],["FHQ_ACR_BLK_G33_GL",1],["FHQ_ACR_TAN_G33_GL",1],["FHQ_ACR_SNW_G33_GL",1],["FHQ_ACR_WDL_G33_GL",1],["FHQ_ACR_BLK_HAMR",1],["FHQ_ACR_TAN_HAMR",1],["FHQ_ACR_SNW_HAMR",1],["FHQ_ACR_WDL_HAMR",1],["FHQ_ACR_BLK_HAMR_GL",1],["FHQ_ACR_TAN_HAMR_GL",1],["FHQ_ACR_SNW_HAMR_GL",1],["FHQ_ACR_WDL_HAMR_GL",1],["FHQ_ACR_BLK_HWS",1],["FHQ_ACR_TAN_HWS",1],["FHQ_ACR_SNW_HWS",1],["FHQ_ACR_WDL_HWS",1],["FHQ_ACR_BLK_HWS_GL",1],["FHQ_ACR_TAN_HWS_GL",1],["FHQ_ACR_SNW_HWS_GL",1],["FHQ_ACR_WDL_HWS_GL",1],["FHQ_ACR_BLK_IRN_GL",1],["FHQ_ACR_TAN_IRN_GL",1],["FHQ_ACR_SNW_IRN_GL",1],["FHQ_ACR_WDL_IRN_GL",1],["FHQ_ACR_BLK_RCO",1],["FHQ_ACR_TAN_RCO",1],["FHQ_ACR_SNW_RCO",1],["FHQ_ACR_WDL_RCO",1],["FHQ_ACR_BLK_RCO_GL",1],["FHQ_ACR_TAN_RCO_GL",1],["FHQ_ACR_SNW_RCO_GL",1],["FHQ_ACR_WDL_RCO_GL",1], + ["SCAR_L_CQC_CCO_SD",1],["SCAR_L_CQC",1],["SCAR_L_CQC_Holo",1],["SCAR_L_CQC_EGLM_Holo",1],["SCAR_L_STD_EGLM_RCO",1],["SCAR_L_STD_HOLO",1],["SCAR_L_STD_Mk4CQT",1],["SCAR_H_CQC_CCO",1],["SCAR_H_CQC_CCO_SD",1],["SCAR_H_STD_EGLM_Spect",1],["SCAR_H_LNG_Sniper",1],["SCAR_H_LNG_Sniper_SD",1], + ["vil_9a91",1],["vil_9a91_c",1],["vil_9a91_csd",1],["vil_VAL",1],["vil_VAL_C",1],["vil_Groza_HG",1],["vil_Groza_GL",1],["vil_Groza_SC",1],["vil_Groza_SD",1],["vil_Vikhr",1],["vil_vsk94",1],["vil_MP5_EOTech",1],["vil_MP5SD_EOTech",1],["vil_uzimini",1],["vil_uzimini_SD",1],["vil_uzi",1],["vil_uzi_c",1],["vil_uzi_SD",1], + ["USSR_cheytacM200",1],["USSR_cheytacM200_sd",1],["vil_SVD_63",1],["vil_SVD_N",1],["vil_SVD_M",1],["vil_SVD_P21",1],["vil_SVD_S",1],["FHQ_MSR_DESERT",1],["FHQ_MSR_NV_DESERT",1],["FHQ_MSR_NV_SD_DESERT",1],["FHQ_MSR_SD_DESERT",1],["FHQ_RSASS_TAN",1],["FHQ_RSASS_SD_TAN",1],["vil_SV_98_69",1],["vil_SV_98",1],["vil_SV_98_SD",1],["vil_SVDK",1],["FHQ_XM2010_DESERT",1],["FHQ_XM2010_NV_DESERT",1],["FHQ_XM2010_NV_SD_DESERT",1],["FHQ_XM2010_SD_DESERT",1], + ["RH_ctar21",1],["RH_ctar21glacog",1],["RH_ctar21m",1],["RH_ctar21mgl",1],["RH_star21",1], + ["vil_AG3",1],["vil_G3a2",1],["vil_G3a3",1],["vil_G3an",1],["vil_G3anb",1],["vil_G3SG1",1],["vil_G3sg1b",1],["vil_G3TGS",1],["vil_G3TGSb",1],["vil_G3ZF",1],["vil_G3zfb",1],["vil_G3a4",1],["vil_G3a4b",1], + ["RH_masacog",1],["RH_masaim",1],["RH_masbaim",1],["RH_masb",1],["RH_masbeotech",1],["RH_mas",1],["RH_massd",1],["RH_massdacog",1],["RH_masbsdacog",1],["RH_massdaim",1],["RH_masbsdaim",1],["RH_masbsd",1],["RH_massdeotech",1],["RH_masbsdeotech",1], + ["vil_RPK75_Romania",1],["vil_M240_B",1],["vil_M249_Para",1],["skavil_M60",1],["skavil_M60e3",1],["vil_Mg3",1],["vil_MG4",1],["vil_MG4E",1],["vil_PKP",1],["vil_PKP_EOT",1],["vil_PK",1],["vil_PKM",1],["vil_RPD",1],["vil_RPK",1],["vil_RPK75",1],["vil_RPK74",1],["vil_RPK74M",1],["vil_RPK74M_P29",1],["vil_RPK75_M72",1],["vil_zastava_m84",1], + ["RH_hk417",1],["RH_hk417acog",1],["RH_hk417aim",1],["RH_hk417s",1],["RH_hk417sacog",1],["RH_hk417saim",1],["RH_hk417seotech",1],["RH_hk417eotech",1],["RH_hk417sd",1],["RH_hk417sdacog",1],["RH_hk417sdaim",1],["RH_hk417sdeotech",1],["RH_hk417sdsp",1],["RH_hk417sp",1],["RH_hk417sglacog",1],["RH_hk417sgl",1],["RH_hk417sglaim",1],["RH_hk417sgleotech",1], + ["RH_hk416",1],["RH_hk416glacog",1],["RH_hk416gl",1],["RH_hk416aim",1],["RH_hk416glaim",1],["RH_hk416s",1],["RH_hk416sacog",1],["RH_hk416sglacog",1],["RH_hk416saim",1],["RH_hk416sglaim",1],["RH_hk416seotech",1],["RH_hk416sgleotech",1],["RH_hk416sgl",1],["RH_hk416eotech",1],["RH_hk416gleotech",1],["RH_hk416sd",1],["RH_hk416sdgl",1],["RH_hk416sdglaim",1],["RH_hk416sdeotech",1],["RH_hk416sdgleotech",1], + ["vil_AG36KA4",1],["vil_AG36KV",1],["vil_G36KSKdes",1],["vil_G36KA4",1],["vil_G36KSKES",1],["vil_G36KSKdesES",1],["vil_G36KES",1],["vil_G36KVZ",1],["vil_G36KSK",1],["vil_G36VA4Eot",1],["vil_G36KV3",1],["vil_G36KVA4",1],["vil_G36KV3Des",1],["vil_G36VA4",1],["vil_AG36",1],["vil_G36a2",1],["vil_AG36A2",1],["vil_G36CC",1],["vil_G36E",1] + ]; + EAT_OverwatchWeaponCrateMagazines = [["vil_usp45_mag",20],["vil_bhp_mag",20],["RH_10Rnd_22LR_mk2",20],["RH_12Rnd_45cal_usp",20],["RH_13Rnd_9x19_bhp",20],["RH_15Rnd_9x19_usp",20],["RH_17Rnd_9x19_g17",20],["RH_19Rnd_9x19_g18",20],["RH_20Rnd_32cal_vz61",20],["RH_20Rnd_9x19_M93",20],["RH_30Rnd_9x19_tec",20],["RH_6Rnd_357_Mag",20],["RH_6Rnd_44_Mag",20],["RH_7Rnd_32cal_ppk",20],["RH_7Rnd_50_AE",20],["RH_8Rnd_45cal_m1911",20],["RH_8Rnd_762_tt33",20],["RH_8Rnd_9x19_Mk",20],["RH_8Rnd_9x19_P38",20],["vil_usp45sd_mag",20],["RH_15Rnd_9x19_uspsd",20],["RH_17Rnd_9x19_g17SD",20],["RH_8Rnd_9x19_Mksd",20],["vil_32Rnd_uzi",20],["vil_32Rnd_UZI_SD",20],["RH_32Rnd_9x19_Muzi",20],["vil_20Rnd_9x39_SP6_VAL",20],["vil_20Rnd_9x39_SP6ns_OC",20],["vil_20Rnd_9x39_SP6_OC",20],["vil_40Rnd_762x39_AK47",50],["vil_60Rnd_545x39_AK",50],["vil_30Rnd_762x39_AKSD",20],["VIL_30Rnd_556x45_AK",20],["vil_20Rnd_762x51_G3",30],["RH_20Rnd_762x51_hk417",30],["RH_20Rnd_762x51_SD_hk417",30],["FHQ_rem_30Rnd_680x43_ACR",50],["FHQ_rem_30Rnd_680x43_ACR_SD",50],["5x_22_LR_17_HMR",20],["USSR_5Rnd_408",20],["FHQ_rem_5Rnd_300Win_XM2010_NT",20],["FHQ_rem_5Rnd_300Win_XM2010_NT_SD",20],["FHQ_rem_7Rnd_338Lapua_MSR_NT_SD",20],["FHQ_rem_7Rnd_338Lapua_MSR_NT",20],["vil_10Rnd_762x54_SV",30],["vil_10Rnd_SVDK",20],["FHQ_rem_20Rnd_762x51_PMAG_NT",20],["FHQ_rem_20Rnd_762x51_PMAG_NT_SD",20],["200Rnd_556x45_M249",40],["100Rnd_762x51_M240",40],["100Rnd_762x54_PK",30],["gms_k98_mag",30],["vil_10Rnd_762x39_SKS",20],["30Rnd_556x45_Stanag",50],["30Rnd_556x45_StanagSD",50],["30Rnd_556x45_G36",30],["30Rnd_556x45_G36SD",30],["20rnd_762x51_B_SCAR",20],["20Rnd_762x51_SB_SCAR",20]]; +}; + +_selectDelay = _this select 0; +_crate = _this select 1; +_worldspace = _this select 2; +_activatingPlayer = _this select 3; +_clientKey = _this select 4; +_playerUID = getPlayerUID _activatingPlayer; +_pos = _worldspace select 1; +_dir = _worldspace select 0; +_spawnCrate = ""; + + +_exitReason = [_this,"EAT_crateSpawn",(_worldspace select 1),_clientKey,_playerUID,_activatingPlayer] call server_verifySender; +if (_exitReason != "") exitWith {diag_log _exitReason}; + +if (!(_playerUID in EAT_adminList)) exitWith {diag_log format["Unauthorized player (%1 - %2) trying to spawn crates",_activatingPlayer,_playerUID];}; + +call +{ + if (_crate == "AllWeapons") exitWith { + if (isNil "EAT_weapons_list") then + { + EAT_weapons_list = []; + _cfgweapons = configFile >> 'cfgWeapons'; + for "_i" from 0 to (count _cfgweapons)-1 do + { + _weapon = _cfgweapons select _i; + if (isClass _weapon) then + { + _key_colors = ["ItemKeyYellow","ItemKeyBlue","ItemKeyRed","ItemKeyGreen","ItemKeyBlack"]; + if (getNumber (_weapon >> "scope") == 2 and getText(_weapon >> "picture") != "" and !(configName(inheritsFrom(_weapon)) in _key_colors)) then + { + _wpn_type = configName _weapon; + EAT_weapons_list set [count EAT_weapons_list, _wpn_type]; + }; + }; + }; + }; + if (isNil "magazines_list") then + { + magazines_list = []; + _cfgmagazines = configFile >> 'cfgMagazines'; + for "_i" from 0 to (count _cfgmagazines)-1 do + { + _magazine = _cfgmagazines select _i; + if (isClass _magazine) then + { + if (getNumber (_magazine >> "scope") == 2 and getText(_magazine >> "picture") != "") then + { + _mag_type = configName _magazine; + magazines_list set [count magazines_list, _mag_type]; + }; + }; + }; + }; + _classname = "USOrdnanceBox"; + EAT_CrateSetup; + if (EAT_isOverpoch) then { + { + if(_x != "MeleeBaseBallBat") then{ + _spawnCrate addWeaponCargoGlobal [_x, 1]; + }; + } forEach EAT_weapons_list; + { + if(_x != "AngelCookies") then{ + _spawnCrate addMagazineCargoGlobal [_x, 10]; + }; + } forEach magazines_list; + } else { + { + if(_x != "MeleeBaseBallBat") then{ + _spawnCrate addWeaponCargoGlobal [_x, 5]; + }; + } forEach EAT_weapons_list; + { + if(_x != "AngelCookies") then{ + _spawnCrate addMagazineCargoGlobal [_x, 20]; + }; + } forEach magazines_list; + }; + }; + if (_crate == "Backpack") exitWith { + _classname = "TentStorage"; + EAT_CrateSetup; + // Add gear + {_spawnCrate addBackpackCargoGlobal _x;}forEach EAT_backpackCrateContents; + }; + if (_crate == "AllItemsBuilding") exitWith { + _classname = "USOrdnanceBox"; + EAT_CrateSetup; + // Add gear + {_spawnCrate addWeaponCargoGlobal _x;}forEach EAT_buildingCrateWeapons; + {_spawnCrate addMagazineCargoGlobal _x;}forEach EAT_buildingCrateMagazines; + _spawnCrate addBackpackCargoGlobal ["DZ_LargeGunBag_EP1", 1]; + }; + if (_crate == "smallCinderBuildingKit") exitWith { + _classname = "USOrdnanceBox"; + EAT_CrateSetup; + // Add gear + {_spawnCrate addWeaponCargoGlobal _x;}forEach EAT_smallBuildingCrateWeapons; + {_spawnCrate addMagazineCargoGlobal _x;}forEach EAT_smallCinderBuildingKit; + _spawnCrate addBackpackCargoGlobal ["DZ_LargeGunBag_EP1", 1]; + }; + if (_crate == "mediumCinderBuildingKit") exitWith { + _classname = "USOrdnanceBox"; + EAT_CrateSetup; + // Add gear + {_spawnCrate addWeaponCargoGlobal _x;}forEach EAT_smallBuildingCrateWeapons; + {_spawnCrate addMagazineCargoGlobal _x;}forEach EAT_mediumCinderBuildingKit; + _spawnCrate addBackpackCargoGlobal ["DZ_LargeGunBag_EP1", 1]; + }; + if (_crate == "largeCinderBuildingKit") exitWith { + _classname = "USOrdnanceBox"; + EAT_CrateSetup; + // Add gear + {_spawnCrate addWeaponCargoGlobal _x;}forEach EAT_smallBuildingCrateWeapons; + {_spawnCrate addMagazineCargoGlobal _x;}forEach EAT_largeCinderBuildingKit; + _spawnCrate addBackpackCargoGlobal ["DZ_LargeGunBag_EP1", 1]; + }; + if (_crate == "smallWoodBuildingKit") exitWith { + _classname = "USOrdnanceBox"; + EAT_CrateSetup; + // Add gear + {_spawnCrate addWeaponCargoGlobal _x;}forEach EAT_smallBuildingCrateWeapons; + {_spawnCrate addMagazineCargoGlobal _x;}forEach EAT_smallWoodBuildingKit; + _spawnCrate addBackpackCargoGlobal ["DZ_LargeGunBag_EP1", 1]; + }; + if (_crate == "mediumWoodBuildingKit") exitWith { + _classname = "USOrdnanceBox"; + EAT_CrateSetup; + // Add gear + {_spawnCrate addWeaponCargoGlobal _x;}forEach EAT_smallBuildingCrateWeapons; + {_spawnCrate addMagazineCargoGlobal _x;}forEach EAT_mediumWoodBuildingKit; + _spawnCrate addBackpackCargoGlobal ["DZ_LargeGunBag_EP1", 1]; + }; + if (_crate == "largeWoodBuildingKit") exitWith { + _classname = "USOrdnanceBox"; + EAT_CrateSetup; + // Add gear + {_spawnCrate addWeaponCargoGlobal _x;}forEach EAT_smallBuildingCrateWeapons; + {_spawnCrate addMagazineCargoGlobal _x;}forEach EAT_largeWoodBuildingKit; + _spawnCrate addBackpackCargoGlobal ["DZ_LargeGunBag_EP1", 1]; + }; + if (_crate == "Items") exitWith { + _classname = "USOrdnanceBox"; + EAT_CrateSetup; + // Add gear + {_spawnCrate addWeaponCargoGlobal _x;}forEach EAT_itemCrateWeapons; + {_spawnCrate addMagazineCargoGlobal _x;}forEach EAT_itemCrateMagazines; + _spawnCrate addBackpackCargoGlobal ["DZ_LargeGunBag_EP1", 1]; + }; + if (_crate == "EpochWeapons") exitWith { + _classname = "USOrdnanceBox"; + EAT_CrateSetup; + // Add gear + {_spawnCrate addWeaponCargoGlobal _x;}forEach EAT_weaponCrateWeapons; + {_spawnCrate addMagazineCargoGlobal _x;}forEach EAT_weaponCrateMagazines; + _spawnCrate addBackpackCargoGlobal ["DZ_LargeGunBag_EP1", 1]; + }; + if (_crate == "OverwatchWeapons") exitWith { + _classname = "USOrdnanceBox"; + EAT_CrateSetup; + // Add gear + {_spawnCrate addWeaponCargoGlobal _x;}forEach EAT_OverwatchWeaponCrateWeapons; + {_spawnCrate addMagazineCargoGlobal _x;}forEach EAT_OverwatchWeaponCrateMagazines; + _spawnCrate addBackpackCargoGlobal ["DZ_LargeGunBag_EP1", 1]; + }; +}; + +if (_selectDelay != 0) then { +uiSleep _selectDelay; +deletevehicle _spawnCrate; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/EAT_serverAiSpawn.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/EAT_serverAiSpawn.sqf new file mode 100755 index 0000000..2e8ffe0 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/EAT_serverAiSpawn.sqf @@ -0,0 +1,119 @@ +private ["_aiPosition","_divisor","_playerUID","_clientKey","_playerPos","_activatingPlayer","_exitReason","_aiArea","_aiCount","_aiBags","_aiRandomWep","_aiSkill","_aiAssault","_aiMachine","_aiSniper","_weaponandmag","_weapon","_magazine","_aiItems","_aiTools","_unitGroup","_unit","_deadai","_banditSkin","_heroSkin","_killer"]; + +EAT_BanditorHero = _this select 0; +_aiArea = _this select 1; +_aiCount = _this select 2; +_divisor = _this select 3; +_aiPosition = _this select 4; +_activatingPlayer = _this select 5; +_playerPos = _this select 6; +_clientKey = _this select 7; +_playerUID = getPlayerUID _activatingPlayer; + + +_exitReason = [_this,"EAT_AiSpawn",_playerPos,_clientKey,_playerUID,_activatingPlayer] call server_verifySender; +if (_exitReason != "") exitWith {diag_log _exitReason}; + +if (!(_playerUID in EAT_adminList)) exitWith {diag_log format["Unauthorized player (%1 - %2) trying to spawn AI",_activatingPlayer,_playerUID];}; + +_aiSkill = [["aimingAccuracy",0.60],["aimingShake",0.60],["aimingSpeed",0.60],["endurance",1.00],["spotDistance",0.60],["spotTime",0.60],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00]]; +_aiAssault = [["M16A4_ACOG_DZ","30Rnd_556x45_Stanag"],["Sa58V_RCO_EP1","30Rnd_762x39_AK47"],["SCAR_L_STD_Mk4CQT","30Rnd_556x45_Stanag"],["M8_sharpshooter","30Rnd_556x45_Stanag"],["M4A1_Holo_MFL_DZ","30Rnd_556x45_Stanag"],["SCAR_L_STD_HOLO","30Rnd_556x45_Stanag"],["M4A1_CCO_DZ","30Rnd_556x45_Stanag"],["G36C_ACOG_DZ","30Rnd_556x45_G36"],["AKM_Kobra_DZ","30Rnd_762x39_AK47"],["SA58_Holo_DZ","30Rnd_762x39_SA58"],["m8_carbine","30Rnd_556x45_Stanag"],["L85A2_CCO_FL_DZ","30Rnd_556x45_Stanag"],["AK74_GL_PSO1_DZ","30Rnd_545x39_AK"]]; +_aiMachine = [["RPK74_Kobra_DZ","75Rnd_545x39_RPK"],["Mk48_CCO_DZ","100Rnd_762x51_M240"],["M249_DZ","200Rnd_556x45_M249"],["Pecheneg_DZ","100Rnd_762x54_PK"],["M240_DZ","100Rnd_762x51_M240"]]; +_aiSniper = [["M14_Holo_DZ","20Rnd_762x51_DMR"],["SCAR_H_LNG_Sniper_SD","20Rnd_762x51_SB_SCAR"],["M110_NVG_EP1","20rnd_762x51_B_SCAR"],["SVD_PSO1_Gh_DZ","10Rnd_762x54_SVD"],["VSS_Vintorez","20Rnd_9x39_SP5_VSS"],["DMR_DZ","20Rnd_762x51_DMR"],["M40A3_DZ","5Rnd_762x51_M24"]]; +_aiRandomWep = [_aiAssault,_aiAssault,_aiAssault,_aiSniper,_aiMachine]; +_aiBags = ["DZ_Czech_Vest_Pouch","DZ_ALICE_Pack_EP1","DZ_TK_Assault_Pack_EP1","DZ_British_ACU","DZ_GunBag_EP1","DZ_CivilBackpack_EP1","DZ_Backpack_EP1","DZ_LargeGunBag_EP1"]; +_banditSkin = ["Ins_Soldier_GL_DZ","TK_INS_Soldier_EP1_DZ","TK_INS_Warlord_EP1_DZ","GUE_Commander_DZ","GUE_Soldier_Sniper_DZ","GUE_Soldier_MG_DZ","GUE_Soldier_Crew_DZ","GUE_Soldier_2_DZ","GUE_Soldier_CO_DZ","BanditW1_DZ","BanditW2_DZ","Bandit1_DZ","Bandit2_DZ"]; +_heroSkin = ["Soldier_Sniper_PMC_DZ","FR_OHara_DZ","Soldier_Bodyguard_AA12_PMC_DZ","FR_R_DZ","FR_Sapper_DZ","FR_Marksman_DZ","FR_Assault_R_DZ","UN_CDF_Soldier_Guard_EP1_DZ","UN_CDF_Soldier_EP1_DZ","BAF_Soldier_N_MTP_DZ"]; +_weaponandmag = (_aiRandomWep call BIS_fnc_selectRandom) call BIS_fnc_selectRandom; +_weapon = _weaponandmag select 0; +_magazine = _weaponandmag select 1; +_aiItems = ["ItemBandage","ItemAntibiotic","ItemPainkiller","ItemAntibacterialWipe","ItemMorphine","ItemEpinephrine","FoodCanBakedBeans","FoodCanPotatoes","ItemSodaMtngreen","ItemSodaLemonade"]; +_aiTools = ["ItemKnife","ItemMap","ItemMatchbox","ItemHatchet","ItemToolbox","ItemCrowbar"]; + +EAT_unitWaypoints = { + private ["_wp","_pos_x","_pos_y","_pos_z","_unitGroup","_position","_waypoint"]; + + _unitGroup = _this select 0; + _position = _this select 1; + _pos_x = _position select 0; + _pos_y = _position select 1; + _pos_z = _position select 2; + _waypoint = _this select 2; + + { + _wp = _unitGroup addWaypoint [_x,10]; + _wp setWaypointType "MOVE"; + + } count [[_pos_x,(_pos_y+_waypoint),0],[(_pos_x+_waypoint),_pos_y,0],[_pos_x,(_pos_y-_waypoint),0],[(_pos_x-_waypoint),_pos_y,0]]; + + _wp = _unitGroup addWaypoint [[_pos_x,_pos_y,0],_waypoint]; + _wp setWaypointType "CYCLE"; +}; + +_unitGroup = createGroup EAST; + +for "_x" from 1 to (_aiCount/_divisor) do { + if (EAT_BanditorHero == "Hero") then { + _unit = _unitGroup createUnit [(_heroSkin call BIS_fnc_selectRandom),_aiPosition,[],(_aiArea/2),"CAN COLLIDE"]; + } else { + _unit = _unitGroup createUnit [(_banditSkin call BIS_fnc_selectRandom),_aiPosition,[],(_aiArea/2),"CAN COLLIDE"]; + }; + [_unit] joinSilent _unitGroup; + //_unit setVariable ["Bandit",true]; + _unit enableAI "TARGET"; + _unit enableAI "AUTOTARGET"; + _unit enableAI "MOVE"; + _unit enableAI "ANIM"; + _unit enableAI "FSM"; + _unit setCombatMode "YELLOW"; + _unit setBehaviour "COMBAT"; + removeAllWeapons _unit; + removeAllItems _unit; + if (sunOrMoon != 1) then { + _unit addweapon "NVGoggles"; + }; + _i = 0; + _j = 0; + + // Magazine count 3 + for "_i" from 1 to 3 do { + _unit addMagazine _magazine; + }; + + _unit addweapon _weapon; + _unit selectWeapon _weapon; + _unit addBackpack (_aiBags call BIS_fnc_selectRandom); + _unit addWeapon (_aiTools call BIS_fnc_selectRandom); + + for "_j" from 1 to 3 do { + _unit addMagazine (_aiItems call BIS_fnc_selectRandom); + }; + + { + _unit setSkill [(_x select 0),(_x select 1)] + } count _aiSkill; + + _unit addEventHandler ["Killed",{ + _deadai = _this select 0; + _killer = _this select 1; + _deadai setVariable ["bodyName","unknown",false]; + [_deadai,_killer] spawn { + private ["_humanity","_humankills","_banditkills","_player"]; + _player = _this select 1; + if (isPlayer _player) then { + _humanity = _player getVariable["humanity",0]; + if (EAT_BanditorHero == "Hero") then { + _humankills = _player getVariable["humanKills",0]; + _player setVariable ["humanKills",(_humankills + 1),true]; + _player setVariable ["humanity",(_humanity - EAT_HumanityGainLoss),true]; + } else { + _banditkills = _player getVariable ["banditKills", 0]; + _player setVariable ["banditKills",(_banditkills + 1),true]; + _player setVariable ["humanity",(_humanity + EAT_HumanityGainLoss),true]; + }; + }; + uiSleep EAT_aiDeleteTimer; deleteVehicle (_this select 0);};}]; +}; +_unitGroup setFormation "ECH LEFT"; +_unitGroup selectLeader ((units _unitGroup) select 0); +[_unitGroup, _aiPosition, _aiArea] spawn EAT_unitWaypoints; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/EAT_vehSpawn.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/EAT_vehSpawn.sqf new file mode 100755 index 0000000..830b1b4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/EAT_vehSpawn.sqf @@ -0,0 +1,23 @@ +private ["_exitReason","_playerUID","_clientKey","_vehtospawn","_worldspace","_pos","_dir","_veh","_activatingPlayer"]; + +_vehtospawn = _this select 0; +_worldspace = _this select 1; +_activatingPlayer = _this select 2; +_clientKey = _this select 3; +_playerUID = getPlayerUID _activatingPlayer; +_dir = _worldspace select 0; +_pos = _worldspace select 1; + + +_exitReason = [_this,"EAT_vehSpawn",_pos,_clientKey,_playerUID,_activatingPlayer] call server_verifySender; +if (_exitReason != "") exitWith {diag_log _exitReason}; + +if (!(_playerUID in EAT_adminModList)) exitWith {diag_log format["Unauthorized player (%1 - %2) trying to spawn vehicles",_activatingPlayer,_playerUID];}; + +_veh = _vehtospawn createVehicle _pos; +//_veh setDir _dir; +_veh setVariable ["ObjectID", "1", true]; +_veh setVariable ["ObjectUID", "1", true]; +_veh setVariable ["EAT_Veh",1,true]; +clearMagazineCargoGlobal _veh; +clearWeaponCargoGlobal _veh; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/KK_Functions.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/KK_Functions.sqf new file mode 100755 index 0000000..df999f1 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/KK_Functions.sqf @@ -0,0 +1,32 @@ +// KK_Functions +// +// by KillZoneKid (http://killzonekid.com/) +// +// + +// Precise positioning functions. + +KK_fnc_floatToString = { + private "_arr"; + if (abs (_this - _this % 1) == 0) exitWith { str _this }; + _arr = toArray str abs (_this % 1); + _arr set [0, 32]; + toString (toArray str ( + abs (_this - _this % 1) * _this / abs _this + ) + _arr - [32]) +}; + +KK_fnc_positionToString = { + format [ + "[%1,%2,%3]", + _this select 0 call KK_fnc_floatToString, + _this select 1 call KK_fnc_floatToString, + _this select 2 call KK_fnc_floatToString + ] +}; + +AN_fnc_formatWorldspace = { + private "_ws"; + _ws = toArray str _this; + format ["[%1,%2%3]", _this select 0 call KK_fnc_floatToString, _this select 1 call KK_fnc_positionToString, toString ([_ws, (_ws find 93) + 1, count _ws - 2] call BIS_fnc_subSelect)] +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/init.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/init.sqf new file mode 100755 index 0000000..0ce53c1 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/init.sqf @@ -0,0 +1,54 @@ +server_queryVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\server_queryVehicle.sqf"; +server_spawnVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\server_spawnVehicle.sqf"; +server_storeVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\server_storeVehicle.sqf"; +server_maintainGarage = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\server_maintainVehicles.sqf"; + +"PVDZE_queryVehicle" addPublicVariableEventHandler {(_this select 1) spawn server_queryVehicle}; +"PVDZE_spawnVehicle" addPublicVariableEventHandler {(_this select 1) spawn server_spawnVehicle}; +"PVDZE_storeVehicle" addPublicVariableEventHandler {(_this select 1) spawn server_storeVehicle}; +"PVDZE_maintainGarage" addPublicVariableEventHandler {(_this select 1) spawn server_maintainGarage}; + +// Thanks to icomrade/DayZ Epoch for this code: https://github.com/EpochModTeam/DayZ-Epoch/commit/8035df0ba0cd928b84085e288c5cb88260870a3e#diff-ad0636fc2328a27bd80bad9f46126307 +VG_RandomizeMyKey = { + _randomInput = toArray "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; + _return = []; + for "_i" from 0 to (_this) do { + _return set [count _return, (_randomInput call BIS_fnc_selectRandom)]; + }; + _return; +}; +vg_serverKey = toString (8 call VG_RandomizeMyKey); +vg_alreadySpawned = []; + +VG_ClearTurrets = { + //By denvdmj (probably, I found it on the biki) + private ["_weaponArray","_findRecurse","_class","_obj","_turret","_mags"]; + _obj = _this; + + _weaponArray = []; + _weaponArray set [count _weaponArray,[-1]]; + + _findRecurse = { + private ["_root", "_class", "_path", "_currentPath", "_thisThis"]; + _root = (_this select 0); + _path = +(_this select 1); + _thisThis = _this select 2; + for "_i" from 0 to count _root -1 do { + _class = _root select _i; + if (isClass _class) then { + _currentPath = _path + [_i]; + {_weaponArray set [count _weaponArray, _currentPath];} count getArray (_class >> "weapons"); + _class = _class >> "turrets"; + if (isClass _class) then {[_class, _currentPath, _thisThis] call _findRecurse;}; + }; + }; + }; + + [configFile >> "CfgVehicles" >> typeOf (_obj) >> "turrets", [], _this] call _findRecurse; + + { + _turret = _x; + _mags = _obj magazinesTurret _turret; + {_obj removeMagazinesTurret[_x,_turret];} count _mags; + } forEach _weaponArray; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/server_maintainVehicles.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/server_maintainVehicles.sqf new file mode 100755 index 0000000..f70711f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/server_maintainVehicles.sqf @@ -0,0 +1,9 @@ +private ["_player","_playerUID","_key","_message"]; +_player = _this select 0; +_playerUID = if (count _this > 1) then {_this select 1} else {getPlayerUID _player}; + +_key = format["CHILD:803:%1:",_playerUID]; +_key call server_hiveWrite; + +_message = format["GARAGE: %1 (%2) maintained vehicles linked to UID: %3 @%4 %5",if (alive _player) then {name _player} else {"DeadPlayer"},getPlayerUID _player,_playerUID,mapGridPosition _player,getPosATL _player]; +diag_log _message; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/server_queryVehicle.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/server_queryVehicle.sqf new file mode 100755 index 0000000..9784acf --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/server_queryVehicle.sqf @@ -0,0 +1,12 @@ +private ["_player","_query","_result","_clientID","_playerUID"]; + +_player = _this select 0; +_clientID = owner _player; +_playerUID = if (count _this > 1) then {_this select 1} else {getPlayerUID _player}; + +_key = format["CHILD:800:%1:%2:",_playerUID,vg_sortColumn]; +_result = _key call server_hiveReadWrite; + +PVDZE_queryVehicleResult = _result; + +if (!isNull _player) then {_clientID publicVariableClient "PVDZE_queryVehicleResult";}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/server_spawnVehicle.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/server_spawnVehicle.sqf new file mode 100755 index 0000000..df3919b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/server_spawnVehicle.sqf @@ -0,0 +1,112 @@ +private ["_isAir","_VG_ObjID","_characterID","_class","_clientID","_clrinit","_clrinit2","_colour","_colour2","_dam","_damage","_dir","_fuel","_hitpoints","_id","_inventory","_key","_location","_message","_object","_oid","_outcome","_player","_result","_selection","_serverKey","_uid","_worldSpace"]; + +_worldSpace = _this select 0; +_player = _this select 1; +_id = _this select 2; +_dir = _worldSpace select 0; +_location = _worldSpace select 1; +_worldSpace = [_dir,_location]; +_uid = _worldSpace call dayz_objectUID2; +_key = str formatText["CHILD:801:%1:%2:%3:",_id,_worldSpace,_uid]; + +_result = _key call server_hiveReadWrite; +_outcome = _result select 0; +if (_outcome != "PASS") exitWith {diag_log("HIVE VIRTUAL GARAGE SPAWN VEHICLE FAILED TO EXECUTE: " + _key);}; +_class = _result select 1; +_characterID = _result select 2; +_inventory = _result select 3; +_hitpoints = _result select 4; +_fuel = _result select 5; +_damage = _result select 6; +_colour = _result select 7; +_colour2 = _result select 8; +_serverKey = _result select 9; +_VG_ObjID = _result select 10; +_clientID = owner _player; + +if (_VG_ObjID in vg_alreadySpawned) exitWith { + diag_log format["VG ERROR: Vehicle with VGObjID = %1 has already been spawned and will not be spawned again. PlayerUID: %2", _VG_ObjID, (getPlayerUID _player)]; +}; + +_key = format["CHILD:388:%1:",_uid]; + +#ifdef OBJECT_DEBUG +diag_log ("HIVE: WRITE: "+ str(_key)); +#endif + +_result = _key call server_hiveReadWrite; +_outcome = _result select 0; + +if (_outcome != "PASS") then { + diag_log("CUSTOM: failed to get id for : " + str(_uid)); +} else { + _VG_ObjID = (toString (18 call VG_RandomizeMyKey)); //new ID + vg_alreadySpawned set [(count vg_alreadySpawned), _VG_ObjID]; + _oid = _result select 1; + + #ifdef OBJECT_DEBUG + diag_log("CUSTOM: Selected " + str(_oid)); + #endif + + _object = _class createVehicle _location; + if (surfaceIsWater _location && {({_x != _object} count (_location nearEntities ["Ship",8])) == 0}) then { + _object setPos _location; + }; + + _object addEventHandler ["HandleDamage",{false}]; + + clearWeaponCargoGlobal _object; + clearMagazineCargoGlobal _object; + if (vg_clearAmmo && {vg_serverKey == _serverKey}) then {_object call VG_ClearTurrets;}; + + _object setFuel _fuel; + _object setDamage _damage; + + [_inventory select 0,_inventory select 1,_inventory select 2,_object] call fn_addCargo; + + _object setVariable ["ObjectID", _oid, true]; + _object setVariable ["lastUpdate",diag_tickTime]; + _object setVariable ["VGObjectID",_VG_ObjID, false]; + + if (_colour != "0") then { + _object setVariable ["Colour",_colour,true]; + _clrinit = format ["#(argb,8,8,3)color(%1)",_colour]; + _object setVehicleInit "this setObjectTexture [0,"+str _clrinit+"];"; + }; + + if (_colour2 != "0") then { + _object setVariable ["Colour2",_colour2,true]; + _clrinit2 = format ["#(argb,8,8,3)color(%1)",_colour2]; + _object setVehicleInit "this setObjectTexture [1,"+str _clrinit2+"];"; + }; + + processInitCommands; + + _characterID = str(_characterID); + _object setVariable ["CharacterID", _characterID, true]; + + if (_characterID != "0" && !(_object isKindOf "Bicycle")) then {_object setVehicleLock "LOCKED";}; + _isAir = _object isKindOf "Air"; + + { + _selection = _x select 0; + _dam = _x select 1; + _dam = [_x select 1,(_x select 1) min 0.8] select (!_isAir && {_selection in dayZ_explosiveParts}); + [_object,_selection,_dam] call fnc_veh_setFixServer; + } forEach _hitpoints; + + dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object]; + + _object call fnc_veh_ResetEH; + {if (_object isKindOf _x) exitWith {_object disableTIEquipment true;}} count vg_disableThermal; + + PVDZE_veh_Init = _object; + publicVariable "PVDZE_veh_Init"; + + PVDZE_spawnVehicleResult = _characterID; + + if (!isNull _player) then {_clientID publicVariableClient "PVDZE_spawnVehicleResult";}; + + _message = format["%1 (%2) retrieved %3 @%4 %5",if (alive _player) then {name _player} else {"DeadPlayer"},getPlayerUID _player,_class,mapGridPosition _player,getPosATL _player]; + diag_log _message; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/server_storeVehicle.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/server_storeVehicle.sqf new file mode 100755 index 0000000..3e969e0 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/garage/server_storeVehicle.sqf @@ -0,0 +1,92 @@ +private ["_damageVeh","_VGobjID","_array","_backPack","_backPackCount","_charID","_class","_clientID","_colour","_colour2","_damage","_displayName","_fnc_sanitizeInput","_fuel","_gearCount","_hit","_hitpoints","_index","_inventory","_inventoryCount","_key","_magazine","_magazineCount","_message","_name","_objectID","_objectUID","_player","_playerUID","_selection","_vehicle","_weapons","_weaponsCount","_woGear"]; + +_vehicle = _this select 0; +_player = _this select 1; +_woGear = _this select 2; +_clientID = owner _player; +_playerUID = if (count _this > 3) then {_this select 3} else {getPlayerUID _player}; + +_gearCount = { + private ["_counter"]; + _counter = 0; + {_counter = _counter + _x;} count _this; + _counter; +}; + +_fnc_sanitizeInput = { + private ["_input","_badChars"]; + + _input = _this; + _input = toArray (_input); + _badChars = [60,62,38,123,125,91,93,59,58,39,96,126,44,46,47,63,124,92,34]; + + { + _input = _input - [_x]; + } forEach _badChars; + + _input = toString (_input); + _input +}; + +_class = typeOf _vehicle; +_displayName = (getText(configFile >> "cfgVehicles" >> _class >> "displayName")) call _fnc_sanitizeInput; +_name = if (alive _player) then {(name _player) call _fnc_sanitizeInput;} else {"unknown player";}; + +_charID = _vehicle getVariable ["CharacterID","0"]; +_objectID = _vehicle getVariable ["ObjectID","0"]; +_objectUID = _vehicle getVariable ["ObjectUID","0"]; +_VGobjID = _vehicle getVariable ["VGObjectID","0"]; +if (_VGobjID == "0") then { + _VGobjID = (toString (18 call VG_RandomizeMyKey)); //normally spawned vehicle +} else { + _index = vg_alreadySpawned find _VGobjID; + if (_index >= 0) then { + vg_alreadySpawned = vg_alreadySpawned - [_VGobjID]; + } else { + diag_log format["VG Error: Could not find vehicle with VGobjUID = %1 in vg_alreadySpawned array (server_storeVehicle.sqf) - possible duplicate vehicle being stored. PlayerUID: %2", _VGobjID, (getPlayerUID _player)]; + }; +}; +_damageVeh = damage _vehicle; +_fuel = fuel _vehicle; +_colour = _vehicle getVariable ["Colour","0"]; +_colour2 = _vehicle getVariable ["Colour2","0"]; + +_array = []; +_inventory = [[[],[]],[[],[]],[[],[]]]; +_inventoryCount = [0,0,0]; + +if (isNil "_colour") then {_colour = "0";}; +if (isNil "_colour2") then {_colour2 = "0";}; + +_hitpoints = _vehicle call vehicle_getHitpoints; + +{ + _hit = [_vehicle,_x] call object_getHit; + _damage = _hit select 0; + _selection = getText (configFile >> "CfgVehicles" >> _class >> "HitPoints" >> _x >> "name"); + if (_damage > 0) then {_array set [count _array,[_selection,_damage]]}; +} count _hitpoints; + +if (!_woGear) then { + _weapons = getWeaponCargo _vehicle; + _magazine = getMagazineCargo _vehicle; + _backPack = getBackpackCargo _vehicle; + _weaponsCount = (_weapons select 1) call _gearCount; + _magazineCount = (_magazine select 1) call _gearCount; + _backPackCount = (_backPack select 1) call _gearCount; + _inventory = [_weapons, _magazine, _backPack]; + _inventoryCount = [_weaponsCount, _magazineCount, _backPackCount]; +}; + +_key = str formatText["CHILD:802:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:",_playerUID,_name,_displayName,_class,_charID,_inventory,_array,_fuel,_damageVeh,_colour,_colour2,vg_serverKey,_VGobjID,_inventoryCount]; +_key call server_hiveWrite; + +PVDZE_storeVehicleResult = true; + +[_objectID,_objectUID,_vehicle] call server_deleteObjDirect; +deleteVehicle _vehicle; + +if (!isNull _player) then {_clientID publicVariableClient "PVDZE_storeVehicleResult";}; + +_message = format["GARAGE: %1 (%2) stored %3 @%4 %5",_name,_playerUID,_class,mapGridPosition _player,getPosATL _player]; +diag_log _message; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_changeCode.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_changeCode.sqf new file mode 100755 index 0000000..37ac06a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_changeCode.sqf @@ -0,0 +1,78 @@ +/* + changeCode - Safe, Lockbox and Door code changing script by salival (https://github.com/oiad) +*/ + +private ["_backpacks","_charID","_characterID","_clientID","_coins","_dir","_holder","_inventory","_key","_lockedClass","_magazines","_message","_name","_object","_objectID","_objectUID","_ownerID","_ownerPUID","_player","_playerUID","_pos","_typeOf","_vector","_weapons","_worldSpace","_clientKey","_exitReason"]; + +if (count _this < 4) exitWith {diag_log "server_changeCode error: Improper parameter format";}; + +_player = _this select 0; +_object = _this select 1; +_characterID = _this select 2; +_clientKey = _this select 3; + +_typeOf = typeOf _object; +if !(_typeOf in DZE_unlockedStorage) exitWith {diag_log "server_changeCode called with invalid storage object!"}; + +_lockedClass = getText (configFile >> "CfgVehicles" >> _typeOf >> "lockedClass"); +_pos = _object getVariable ["OEMPos",getPosATL _object]; +_dir = getDir _object; +_vector = [vectorDir _object, vectorUp _object]; +_charID = _object getVariable ["CharacterID","0"]; +_objectID = _object getVariable ["ObjectID","0"]; +_objectUID = _object getVariable ["ObjectUID","0"]; +_ownerID = _object getVariable ["ownerPUID","0"]; +_name = ["unknown player",name _player] select (alive _player); +_clientID = owner _player; +_playerUID = getPlayerUID _player; + +if (isNull _player) then {diag_log "ERROR: server_changeCode called with Null player object";}; +if (isNull _object) exitWith {diag_log format["ERROR: server_changeCode called with Null object by %1 (%2).",_name,_playerUID];}; + +_exitReason = [_this,"changeCode",_pos,_clientKey,_PlayerUID,_player] call server_verifySender; +if (_exitReason != "") exitWith {diag_log _exitReason}; + +_weapons = getWeaponCargo _object; +_magazines = getMagazineCargo _object; +_backpacks = getBackpackCargo _object; +if (Z_singleCurrency) then {_coins = _object getVariable ["cashMoney",0];}; + +[_objectID,_objectUID,_object] call server_deleteObjDirect; + +_holder = _lockedClass createVehicle [0,0,0]; +_holder setDir _dir; +_holder setVariable ["memDir",_dir,true]; +_holder setVectorDirAndUp _vector; +_holder setPosATL _pos; +_holder setVariable ["CharacterID",_characterID,true]; +_holder setVariable ["OEMPos",_pos,true]; + +if (DZE_permanentPlot) then { + _ownerPUID = if (_charID == "0000" || _charID == "10000") then {_playerUID} else {_ownerID}; + _worldSpace = [_dir,_pos,_ownerPUID,_vector]; + _holder setVariable ["ownerPUID",_ownerPUID,true]; +} else { + _worldSpace = [_dir,_pos]; +}; + +if (Z_singleCurrency) then {_holder setVariable ["cashMoney",_coins,true];}; + +_objectUID = _worldSpace call dayz_objectUID2; +_holder setVariable ["ObjectUID",_objectUID,true]; + +deleteVehicle _object; + +_inventory = [_weapons,_magazines,_backpacks]; +_holder setVariable ["WeaponCargo",_weapons,false]; +_holder setVariable ["MagazineCargo",_magazines,false]; +_holder setVariable ["BackpackCargo",_backpacks,false]; + +[_characterID,_holder,_worldSpace,_inventory,_player,_clientKey] call server_publishObj; + +if (Z_singleCurrency) then { + _key = format["CHILD:309:%1:",_objectUID] + str _inventory + ":" + str _coins + ":"; + _key call server_hiveWrite; +}; + +_message = format ["CHANGE CODE: %1 (%2) changed the code for %3 to %4 @%5 %6",_name,_playerUID,_lockedClass,_characterID,mapGridPosition _player,_pos]; +diag_log _message; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_checkIfTowed.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_checkIfTowed.sqf new file mode 100755 index 0000000..99cf27c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_checkIfTowed.sqf @@ -0,0 +1,13 @@ +private ["_vehicle","_player","_attached"]; + +if (DZE_HeliLift) then { + _vehicle = _this select 0; + _player = _this select 2; + _attached = _vehicle getVariable ["attached",false]; + if (typeName _attached == "OBJECT") then { + _player action ["eject",_vehicle]; + detach _vehicle; + _vehicle setVariable ["attached",false,true]; + _attached setVariable ["hasAttached",false,true]; + }; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_deleteObj.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_deleteObj.sqf new file mode 100755 index 0000000..a5f08d6 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_deleteObj.sqf @@ -0,0 +1,38 @@ +/* +[_objectID,_objectUID,_activatingPlayer,_objPos,dayz_authKey] call server_deleteObj; +For PV calls from the client use this function, otherwise if calling directly from the server use server_deleteObjDirect +*/ +private["_id","_uid","_key","_activatingPlayer","_objPos","_clientKey","_exitReason","_PlayerUID","_processDelete"]; + +if (count _this < 5) exitWith {diag_log "Server_DeleteObj error: Improper parameter format";}; +_id = _this select 0; +_uid = _this select 1; +_activatingPlayer = _this select 2; +_objPos = _this select 3; //Can be object or position if _processDelete is false +_clientKey = _this select 4; +_processDelete = [true,_this select 5] select (count _this > 5); +_PlayerUID = getPlayerUID _activatingPlayer; + +_exitReason = [_this,"DeleteObj",_objPos,_clientKey,_PlayerUID,_activatingPlayer] call server_verifySender; +if (_exitReason != "") exitWith {diag_log _exitReason}; + +if (isServer) then { + if (_processDelete) then {deleteVehicle _objPos}; + + if (typeName _objPos != "ARRAY") then { + _objPos = typeof _objPos; + }; + + //remove from database + if (parseNumber _id > 0) then { + //Send request + _key = format["CHILD:304:%1:",_id]; + _key call server_hiveWrite; + diag_log format["DELETE: Player %1(%2) deleted %4 with ID: %3",(_activatingPlayer call fa_plr2str), _PlayerUID, _id, _objPos]; + } else { + //Send request + _key = format["CHILD:310:%1:",_uid]; + _key call server_hiveWrite; + diag_log format["DELETE: Player %1(%2) deleted %4 with UID: %3",(_activatingPlayer call fa_plr2str), _PlayerUID, _uid, _objPos]; + }; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_deleteObjDirect.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_deleteObjDirect.sqf new file mode 100755 index 0000000..19bac0f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_deleteObjDirect.sqf @@ -0,0 +1,23 @@ +/* +[_objectID,_objectUID,_obj] call server_deleteObjDirect; +*/ +private ["_id","_uid","_key","_obj"]; + +_id = _this select 0; +_uid = _this select 1; +_obj = ["Object",typeof (_this select 2)] select (count _this > 2); + +if (isServer) then { + //remove from database + if (parseNumber _id > 0) then { + //Send request + _key = format["CHILD:304:%1:",_id]; + _key call server_hiveWrite; + diag_log format["DELETE DIRECT: SERVER deleted %2 with ID: %1", _id, _obj]; + } else { + //Send request + _key = format["CHILD:310:%1:",_uid]; + _key call server_hiveWrite; + diag_log format["DELETE DIRECT: SERVER deleted %2 with UID: %1", _uid, _obj]; + }; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_handleSafeGear.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_handleSafeGear.sqf new file mode 100755 index 0000000..8426c41 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_handleSafeGear.sqf @@ -0,0 +1,171 @@ +private ["_exitReason","_clientKey","_backpacks","_charID","_clientID","_dir","_holder","_lockCode","_lockedClass","_magazines","_name","_obj","_objectID","_objectUID","_ownerID","_packedClass","_player","_playerUID","_pos","_status","_statusText","_type","_unlockedClass","_vector","_weapons","_message","_suppliedCode","_damage","_coins","_wealth"]; + +_player = _this select 0; +_obj = _this select 1; +_status = _this select 2; + +_name = ["Dead Player",name _player] select (alive _player); +_type = typeOf _obj; +_pos = _obj getVariable ["OEMPos",getPosATL _obj]; +_dir = direction _obj; +_vector = [vectorDir _obj, vectorUp _obj]; +_charID = _obj getVariable ["CharacterID","0"]; +_objectID = _obj getVariable ["ObjectID","0"]; +_objectUID = _obj getVariable ["ObjectUID","0"]; +_ownerID = _obj getVariable ["ownerPUID","0"]; +_lockCode = _charID; +_suppliedCode = [_charID,_this select 3] select (count _this > 3); +_exitReason = ""; + +if (_status != 3 && {_status != 6}) then {_lockCode = _suppliedCode;}; + +// Player may have disconnected or died before message send. Attempt lock/unlock/pack/save procedure anyway +if (isNull _player) then {diag_log "ERROR: server_handleSafeGear called with Null player object";}; + +_clientID = owner _player; +_playerUID = getPlayerUID _player; + +_statusText = call { + if (_status == 0) exitwith {"UNLOCKED"}; // unlock safe/lockbox + if (_status == 1) exitwith {"LOCKED"}; // lock safe/lockbox + if (_status == 5) exitwith {"UNLOCKED"}; // unlock door + if (_status == 4) exitwith {_lockCode = _charID; "LOCKED"}; // lock door + if (_status == 3) exitwith {"FAILED unlocking"}; // failed unlock safe/lockbox + if (_status == 6) exitwith {"FAILED unlocking"}; // failed unlocking door + if (_status == 2) exitwith {"PACKED"}; // pack safe/lockbox +}; + +if (isNull _obj) exitWith { + diag_log format["ERROR: server_handleSafeGear called with Null object by %1 (%2). %3 attempt failed.",_name,_playerUID,_statusText]; + if (_status < 3) then { + dze_waiting = "fail"; + _clientID publicVariableClient "dze_waiting"; + }; +}; + +if !(_type in DZE_DoorsLocked) then { + _clientKey = _this select 4; + _exitReason = [_this,_statusText,(getPosATL _obj),_clientKey,_playerUID,_player] call server_verifySender; +}; + +if (_exitReason != "") exitWith {diag_log _exitReason}; + +call { + if (_status == 0) exitwith { //Unlocking + _unlockedClass = getText (configFile >> "CfgVehicles" >> _type >> "unlockedClass"); + _weapons = _obj getVariable ["WeaponCargo",[]]; + _magazines = _obj getVariable ["MagazineCargo",[]]; + _backpacks = _obj getVariable ["BackpackCargo",[]]; + if (Z_singleCurrency) then {_coins = _obj getVariable ["cashMoney",0];}; + _damage = damage _obj; + + // Create new unlocked safe, then delete old locked safe + _holder = _unlockedClass createVehicle [0,0,0]; + _holder setDir _dir; + _holder setVariable ["memDir",_dir,true]; + _holder setVectorDirAndUp _vector; + _holder setPosATL _pos; + _holder setVariable ["CharacterID",_charID,true]; + _holder setVariable ["ObjectID",_objectID,true]; + _holder setVariable ["ObjectUID",_objectUID,true]; + _holder setVariable ["OEMPos",_pos,true]; + _holder setDamage _damage; + if (DZE_permanentPlot) then {_holder setVariable ["ownerPUID",_ownerID,true];}; + if (Z_singleCurrency) then {_holder setVariable ["cashMoney",_coins,true];}; + deleteVehicle _obj; + + [_weapons,_magazines,_backpacks,_holder] call fn_addCargo; + }; + if (_status == 1) exitwith { //Locking + _lockedClass = getText (configFile >> "CfgVehicles" >> _type >> "lockedClass"); + + // Save to database (also happens if a player is within 10m in server_playerSync and server_onPlayerDisconnect) + [_obj,"gear"] call server_updateObject; + _weapons = getWeaponCargo _obj; + _magazines = getMagazineCargo _obj; + _backpacks = getBackpackCargo _obj; + if (Z_singleCurrency) then {_coins = _obj getVariable ["cashMoney",0];}; + _damage = damage _obj; + + // Create new locked safe, then delete old unlocked safe + _holder = _lockedClass createVehicle [0,0,0]; + _holder setDir _dir; + _holder setVariable ["memDir",_dir,true]; + _holder setVectorDirAndUp _vector; + _holder setPosATL _pos; + _holder setVariable ["CharacterID",_charID,true]; + _holder setVariable ["ObjectID",_objectID,true]; + _holder setVariable ["ObjectUID",_objectUID,true]; + _holder setVariable ["OEMPos",_pos,true]; + _holder setDamage _damage; + if (DZE_permanentPlot) then {_holder setVariable ["ownerPUID",_ownerID,true];}; + if (Z_singleCurrency) then {_holder setVariable ["cashMoney",_coins,true];}; + deleteVehicle _obj; + + // Local setVariable gear onto new locked safe for easy access on next unlock + // Do not send big arrays over network! Only server needs these + _holder setVariable ["WeaponCargo",_weapons,false]; + _holder setVariable ["MagazineCargo",_magazines,false]; + _holder setVariable ["BackpackCargo",_backpacks,false]; + }; + if (_status == 2) exitwith { //Packing + _packedClass = getText (configFile >> "CfgVehicles" >> _type >> "packedClass"); + if (_packedClass == "") exitWith {diag_log format["Server_HandleSafeGear Error: invalid object type: %1",_type];}; + _weapons = getWeaponCargo _obj; + _magazines = getMagazineCargo _obj; + _backpacks = getBackpackCargo _obj; + if (Z_singleCurrency) then {_coins = _obj getVariable ["cashMoney",0];}; + + _holder = _packedClass createVehicle [0,0,0]; + deleteVehicle _obj; + _holder setDir _dir; + _holder setPosATL _pos; + _holder addMagazineCargoGlobal [getText(configFile >> "CfgVehicles" >> _packedClass >> "seedItem"),1]; + [_weapons,_magazines,_backpacks,_holder] call fn_addCargo; + if (Z_singleCurrency && {_coins > 0}) then { + private "_displayName"; + + _displayName = getText (configFile >> "CfgVehicles" >> _type >> "displayName"); + _wealth = _player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0]; + _player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),_wealth + _coins,true]; + + RemoteMessage = ["systemChat",["STR_CL_ZSC_PACK_WARNING",_displayName,[_coins] call BIS_fnc_numberText,CurrencyName]]; + (owner _player) publicVariableClient "RemoteMessage"; + }; + + // Delete safe from database + [_objectID,_objectUID,_obj] call server_deleteObjDirect; + }; +}; + +if (_status < 4) then { + _type = call { + if (_type in ["VaultStorageLocked","VaultStorage","VaultStorage2Locked","VaultStorage2","TallSafe"]) exitwith { + if (_ownerID == _playerUID) then {_lockCode = format["%1 - Owner",_lockCode];}; + "Safe" + }; + if (_type in ["LockboxStorage","LockboxStorageLocked","LockboxStorage2","LockboxStorage2Locked","LockboxStorageWinterLocked","LockboxStorageWinter2Locked","LockboxStorageWinter","LockboxStorageWinter2"]) exitwith { + if (_ownerID == _playerUID) then { + _lockCode = _charID call fnc_lockCode; + _lockCode = format["%1 - Owner",_lockCode]; + } else { + _lockCode = _charID call fnc_lockCode; + }; + + if (_status == 3) then {_suppliedCode = _suppliedCode call fnc_lockCode;}; + "LockBox" + }; + }; +}; + +if (_statusText == "FAILED unlocking") then { + _message = format["%1 (%2) %3 %4 with code: %5 (actual: %8) @%6 %7, ObjectID: %8, ObjectUID: %9",_name,_playerUID,_statusText,_type,_suppliedCode,mapGridPosition _pos,_pos,_lockCode,_objectID,_objectUID]; +} else { + _message = format["%1 (%2) %3 %4 with code: %5 @%6 %7, ObjectID: %8, ObjectUID: %9",_name,_playerUID,_statusText,_type,_lockCode,mapGridPosition _pos,_pos,_objectID,_objectUID]; +}; + +diag_log _message; +if (_status < 3) then { + dze_waiting = "success"; + _clientID publicVariableClient "dze_waiting"; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_maintainArea.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_maintainArea.sqf new file mode 100755 index 0000000..0dae078 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_maintainArea.sqf @@ -0,0 +1,47 @@ +/* Maintain Area - written by Skaronator */ +/* +1: PVDZE_maintainArea = [player,1,[[Object, _objectID, _objectUID],[Object, _objectID, _objectUID]...etc]]; +2: PVDZE_maintainArea = [player,2,[Object, _objectID, _objectUID]]; +*/ + +private ["_player","_option","_obj","_name","_objectsInfo","_UID","_ID","_key"]; + +_player = _this select 0; +_option = _this select 1; +_objectsInfo = _this select 2; + +if (_option == 1) then { + { + _obj = _x select 0; + _ID = _x select 1; + _UID = _x select 2; + if (_ID == "0") then { + if (_UID != "0") then { + _obj setDamage 0; + _key = format["CHILD:397:%1:", _UID]; + _key call server_hiveWrite; + }; + } else { + _obj setDamage 0; + _key = format["CHILD:396:%1:", _ID]; + _key call server_hiveWrite; + }; + } count _objectsInfo; + _name = if (alive _player) then { name _player; } else { "Dead Player"; }; + diag_log format ["MAINTAIN AREA BY %1 - %2 Objects at %3, Grid: %4", _name, (count _objectsInfo), (getPosATL _player), mapGridPosition(getPosATL _player)]; +} else { + _obj = _objectsInfo select 0; + _ID = _objectsInfo select 1; + _UID = _objectsInfo select 2; + if (_ID == "0") then { + if (_UID != "0") then { + _obj setDamage 0; + _key = format["CHILD:397:%1:", _UID]; + _key call server_hiveWrite; + }; + } else { + _obj setDamage 0; + _key = format["CHILD:396:%1:", _ID]; + _key call server_hiveWrite; + }; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_onPlayerDisconnect.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_onPlayerDisconnect.sqf new file mode 100755 index 0000000..eda688a --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_onPlayerDisconnect.sqf @@ -0,0 +1,98 @@ +/* + WARNING: Alive player objects are deleted by Arma shortly after onPlayerDisconnected fires + because DayZ uses disabledAI=1 https://community.bistudio.com/wiki/Description.ext#disabledAI + + References to the player object after that point will return objNull, so this function + and server_playerSync must be fast or the player will not save. +*/ +private ["_playerObj","_playerUID","_playerPos","_playerName","_characterID","_inCombat","_Sepsis"]; + +_playerUID = _this select 0; +_playerName = _this select 1; +_playerObj = nil; + +//Lets search all players looking for the object that matches our UID +//If the player just died then the new unit they respawned into will be found (respawnDelay=0 in description.ext) +{ + if ((getPlayerUID _x) == _playerUID) exitWith { _playerObj = _x; _playerPos = getPosATL _playerObj;}; +} count playableUnits; + +//If playerObj is not in playableUnits then lets exit the disconnect system. +if (isNil "_playerObj") exitWith { + diag_log format["INFO: OnPlayerDisconnect exiting. Player is not in playableUnits. %1", _this]; +}; + +//Player object is alive in debug zone. The player most likely just respawned. +if (_playerPos distance respawn_west_original < 1500) exitWith { + diag_log format["INFO: OnPlayerDisconnect exiting. Player is near respawn_west. This is normal after death. %1", _this]; + if (!isNull _playerObj) then { + _playerObj call sched_co_deleteVehicle; + }; +}; + +//diag_log format["get: %1 (%2), sent: %3 (%4)",typeName (getPlayerUID _playerObj), getPlayerUID _playerObj, typeName _playerUID, _playerUID]; + +//If the the playerObj exists lets run all sync systems + +_characterID = _playerObj getVariable["characterID", "?"]; +_inCombat = _playerObj getVariable ["inCombat",false]; +_Sepsis = _playerObj getVariable["USEC_Sepsis",false]; + +//Login processing do not sync +if (_playerUID in dayz_ghostPlayers) exitWith { + //Note player is alive (see set in dayz_ghostPlayers below) + diag_log format["ERROR: Cannot Sync Character [%1,%2] Still processing login",_playerName,_playerUID]; + + //Lets remove the object. + if (!isNull _playerObj) then { + _playerObj call sched_co_deleteVehicle; + }; +}; + +//Make sure we know the ID of the object before we try and sync any info to the DB +if (_characterID != "?") then { + //If the player has sepsis before logging off lets give them infected status. + if (_Sepsis) then { + _playerObj setVariable["USEC_infected",true,true]; + }; + + //if player object is alive lets sync the player and remove the body and if ghosting is active add the player id to the array + if (alive _playerObj) then { + // High priority. Sync must finish fast before player object isNull + [_playerObj,nil,nil,nil,_inCombat] call server_playerSync; + + /* + Low priority code below this point where + _playerObj is no longer needed and may be Null. + */ + + //Punish combat log + if (_inCombat) then { + // Moved setVariables to server_playerSync since they are high priority + // Messages are low priority. Player object not needed + diag_log format["PLAYER COMBAT LOGGED: %1(%3) at location %2",_playerName,_playerPos,_playerUID]; + [nil, nil, rTitleText, format["Player %1 combat logged at location %2.",_playerName, mapGridPosition _playerPos], "PLAIN"] call RE; // Message whole server + }; + + if (dayz_enableGhosting) then { + //diag_log format["GhostPlayers: %1, ActivePlayers: %2",dayz_ghostPlayers,dayz_activePlayers]; + if (!(_playerUID in dayz_ghostPlayers)) then { + dayz_ghostPlayers set [count dayz_ghostPlayers, _playerUID]; + dayz_activePlayers set [count dayz_activePlayers, [_playerUID,diag_ticktime]]; + + //diag_log format["playerID %1 added to ghost list",_playerUID]; + }; + }; + } else { + //Done in server_playerSync above if player is alive + {[_x,"gear"] call server_updateObject} count (nearestObjects [[_playerObj] call FNC_GetPos,DayZ_GearedObjects,10]); + }; + + [_playerUID,_characterID,3,_playerName,(_playerPos call fa_coor2str)] call dayz_recordLogin; +}; + +missionNamespace setVariable [_playerUID,nil]; + +if (alive _playerObj) then { + _playerObj call sched_co_deleteVehicle; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_plantSpawner.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_plantSpawner.sqf new file mode 100755 index 0000000..3e35059 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_plantSpawner.sqf @@ -0,0 +1,21 @@ +private ["_SWcorner","_NEcorner","_amount","_a","_b","_c"]; + +_SWcorner = [0,1360]; +_NEcorner = [14400,13560]; + +_a = [(_SWcorner select 0), (_SWcorner select 1), (_NEcorner select 0) - (_SWcorner select 0), (_NEcorner select 1) - (_SWcorner select 1) ] call psrnd_init; +_b = [ -15, -15, 30, 30 ] call psrnd_init; +_c = [ 0, 0, 3, 360 ] call psrnd_init; + +PVCDZ_plr_plantSpawner = [ _a, _b, _c, [] ]; +//diag_log [ __FILE__, _a, _b, _c ]; + +"PVDZ_objgather_Delete" addPublicVariableEventHandler { + private [ "_pos", "_blacklist"]; + _pos = (_this select 1); + + _blacklist = PVCDZ_plr_plantSpawner select 3; + _blacklist set [ count _blacklist, _pos ]; + //diag_log [ __FILE__, _this, _blacklist ]; +}; + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerDeaths.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerDeaths.sqf new file mode 100755 index 0000000..1a8ee9d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerDeaths.sqf @@ -0,0 +1,19 @@ +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +private["_character","_clientID"]; + +_character = _this select 0; +_clientID = owner _character; + +#ifdef SERVER_DEBUG +diag_log ("HIVE: Player Death list Request by ClientID: "+ str(_clientID)); +diag_log(PlayerDeaths); +#endif + +PVDZE_plr_DeathBResult = PlayerDeaths; + +if(!isNull _character) then { + _clientID publicVariableClient "PVDZE_plr_DeathBResult"; +}; + +PlayerDeaths \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerDied.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerDied.sqf new file mode 100755 index 0000000..a54f6fb --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerDied.sqf @@ -0,0 +1,90 @@ +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +private ["_characterID","_minutes","_newObject","_playerID","_playerName","_key","_pos","_infected","_sourceName","_sourceWeapon","_distance","_message","_method","_suicide","_bodyName","_type","_sourceID"]; +//[unit, weapon, muzzle, mode, ammo, magazine, projectile] + +_characterID = _this select 0; +_minutes = _this select 1; +_newObject = _this select 2; +_playerID = _this select 3; +_playerName = toString (_this select 4); //Sent as array to avoid publicVariable value restrictions +_infected = _this select 5; +_sourceName = toString (_this select 6); +_sourceWeapon = _this select 7; +_distance = _this select 8; +_method = _this select 9; +_sourceID = _this select 10; + +//Mark player as dead so we bypass the ghost system +dayz_died set [count dayz_died, _playerID]; + +_newObject setVariable ["bodyName",_playerName,true]; +_newObject setVariable ["bodyUID",_playerID,true]; +_pos = getPosATL _newObject; + +// force to follow the terrain slope in sched_corpses.sqf +//if (_pos select 2 < 0.1) then {_pos set [2,0];}; +//_newObject setVariable ["deathPos",_pos]; + +if (typeName _minutes == "STRING") then {_minutes = parseNumber _minutes;}; + +if (_characterID != "0") then { + _key = format["CHILD:202:%1:%2:%3:",_characterID,_minutes,_infected]; + //diag_log ("HIVE: WRITE: "+ str(_key)); + _key call server_hiveWrite; +}; + +diag_log format ["Player %1(%3) died as %5 at %2 CharID: %4", + _newObject call fa_plr2str, _pos call fa_coor2str, + _playerID, _characterID, + typeOf _newObject +]; + +// DEATH MESSAGES +_suicide = ((_sourceName == _playerName) or (_method == "suicide")); + +if (_method in ["explosion","melee","shot","shothead","shotheavy","suicide"] && {!(_method == "explosion" && {_suicide || {_sourceName == "unknown"}})}) then { + if (_suicide) then { + _message = ["suicide",_playerName]; + } else { + if (_sourceWeapon == "") then {_sourceWeapon = "unknown weapon";}; + _message = ["killed",_playerName,_sourceName,_sourceWeapon,_distance]; + // Store death messages to allow viewing at message board in trader citys. + PlayerDeaths set [count PlayerDeaths,[_playerName,_sourceName,_sourceWeapon,_distance,[(ServerCurrentTime select 3), (ServerCurrentTime select 4)]]]; + }; +} else { + // No source name, distance or weapon needed: "%1 died from %2" str_death_%1 (see stringtable) + // Possible methods: ["bled","combatlog","crash","crushed","dehyd","eject","fall","starve","sick","rad","runover","unknown","zombie"] + _message = ["died",_playerName,_method]; +}; + +if (_playerName != "unknown" || {_sourceName != "unknown"}) then { + if (toLower DZE_DeathMsgChat != "none" || {DZE_DeathMsgRolling} || {DZE_DeathMsgDynamicText}) then { + PVDZE_deathMessage = _message; + //Don't use regular PV here since JIP clients don't need it + owner _newObject publicVariableClient "PVDZE_deathMessage"; //Send to dead player (not in playableUnits) + { + if !(getPlayerUID _x in ["",_playerID]) then { + owner _x publicVariableClient "PVDZE_deathMessage"; + }; + } count playableUnits; + }; + + _type = _message select 0; + _bodyName = _message select 1; + + if (_type == "killed" && {_sourceName == "AI"}) then { + _message set [2, (localize "STR_PLAYER_AI")]; + }; + + _message = call { + if (_type == "died") exitwith {format ["%1(%3) died from %2", _bodyName, localize format["str_death_%1",_message select 2],_playerID]}; + if (_type == "killed") exitwith {format ["%1(%5) was killed by %2(%6) with %3 from %4m", _bodyName, _message select 2, _message select 3, _message select 4,_playerID,_sourceID]}; + if (_type == "suicide") exitwith {format ["%1(%2) committed suicide", _bodyName,_playerID]}; + }; + diag_log format["DeathMessage: %1",_message]; +}; + +_newObject setDamage 1; +_newObject setOwner 0; +//dead_bodyCleanup set [count dead_bodyCleanup,_newObject]; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerLogin.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerLogin.sqf new file mode 100755 index 0000000..dc2b801 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerLogin.sqf @@ -0,0 +1,201 @@ +private ["_playerID","_endMission","_0","_1","_timeleft","_doLoop","_key","_primary","_model","_inventory","_backpack","_survival","_CharacterCoins","_group","_playerCoins","_BankCoins","_hiveVer","_mags","_wpns","_bcpk","_config","_isInfected","_remaining","_playerObj","_playerName","_newPlayer","_isNew","_charID","_isHiveOk"]; + +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +_playerID = _this select 0; +_playerObj = _this select 1; +_playerName = name _playerObj; +if (_playerName == '__SERVER__' || _playerID == '' || local player) exitWith {}; + +// Cancel any login until server_monitor terminates. +// This is mandatory since all vehicles must be spawned before the first players spawn on the map. +// Otherwise, all vehicle event handlers won't be created on players' client side. +if (isNil "sm_done") exitWith { diag_log ("Login cancelled, server is not ready. " + str(_playerObj)); }; + +_inventory = []; +_backpack = []; +_survival = [0,0,0,0]; +_model = ""; +_isInfected = 0; +_CharacterCoins = 0; +_group = []; +_playerCoins = 0; +_BankCoins = 0; + +if (_playerID == "") then { + _playerID = getPlayerUID _playerObj; +}; + +if ((_playerID == "") or (isNil "_playerID")) exitWith { + diag_log ("LOGIN FAILED: Player [" + _playerName + "] has no login ID"); +}; + +_endMission = false; +_timeleft = 0; +{ + //if ((_playerID select _i) in activePlayers) exitWith { diag_log ("Login cancelled, player has logged out within the past 2 mins. " + str(_playerObj)); }; + _0 = _x select 0; + _1 = _x select 1; + _timeleft = diag_ticktime - _1; + + if (_playerID == _0) then { + //If players last logoff is about the ghost timer remove player from ghost que. + if ((_timeleft > dayz_ghostTimer) or (_timeleft < 0)) then { + dayz_ghostPlayers = dayz_ghostPlayers - [_0]; + dayz_activePlayers set [_forEachIndex, _0]; + dayz_activePlayers = dayz_activePlayers - [_0]; + } else { + //if player is in died allow them passage. + if (_playerID in dayz_died) then { + dayz_died = dayz_died - [_playerID]; + dayz_ghostPlayers = dayz_ghostPlayers - [_0]; + dayz_activePlayers set [_forEachIndex, _0]; + dayz_activePlayers = dayz_activePlayers - [_0]; + } else { + // Logoff time is not beyond ghost time and player didn't die + _endMission = true; + }; + }; + }; +} forEach dayz_activePlayers; + +//Do Connection Attempt +_doLoop = 0; +while {_doLoop < 5} do { + _key = format["CHILD:101:%1:%2:%3:",_playerID,dayZ_instance,_playerName]; + _primary = _key call server_hiveReadWrite; + if (count _primary > 0) then { + if ((_primary select 0) != "ERROR") then { + _doLoop = 9; + }; + }; + _doLoop = _doLoop + 1; +}; + +if (isNull _playerObj or !isPlayer _playerObj) exitWith { + diag_log ("LOGIN RESULT: Exiting, player object null: " + str(_playerObj)); +}; + +if ((_primary select 0) == "ERROR") exitWith { + diag_log format ["LOGIN RESULT: Exiting, failed to load _primary: %1 for player: %2 ",_primary,_playerID]; +}; + +//Process request +_newPlayer = _primary select 1; +_isNew = count _primary < 10; //_result select 1; +_charID = _primary select 2; +//diag_log ("LOGIN RESULT: " + str(_primary)); + +/* PROCESS */ +_hiveVer = 0; + +if (!_isNew) then { + //RETURNING CHARACTER + _inventory = _primary select 4; + _backpack = _primary select 5; + _survival = _primary select 6; + _CharacterCoins = _primary select 7; + _model = _primary select 8; + _group = _primary select 9; + _playerCoins = _primary select 10; + _BankCoins = _primary select 11; + _hiveVer = _primary select 12; + if !(_model in AllPlayers) then {_model = "Survivor2_DZ";}; +} else { + _isInfected = if (DZE_PlayerZed) then {_primary select 3} else {0}; + _model = _primary select 4; + _group = _primary select 5; + _playerCoins = _primary select 6; + _BankCoins = _primary select 7; + _hiveVer = _primary select 8; + if (isNil "_model") then { + _model = "Survivor2_DZ"; + } else { + if (_model == "") then {_model = "Survivor2_DZ";}; + }; + + //Record initial inventory only if not player zombie + if (_isInfected != 1) then { + _config = configFile >> "CfgSurvival" >> "Inventory" >> "Default"; + _mags = getArray (_config >> "magazines"); + _wpns = getArray (_config >> "weapons"); + _bcpk = getText (_config >> "backpack"); + if (!isNil "DefaultMagazines") then {_mags = DefaultMagazines;}; + if (!isNil "DefaultWeapons") then {_wpns = DefaultWeapons;}; + if (!isNil "DefaultBackpack") then {_bcpk = DefaultBackpack;}; + + //Wait for HIVE to be free + _key = str formatText["CHILD:203:%1:%2:%3:",_charID,[_wpns,_mags],[_bcpk,[],[]]]; + _key call server_hiveWrite; + }; +}; + +_isHiveOk = (_hiveVer >= dayz_hiveVersionNo); //EDITED + +/* + if (count _inventory > 2 && {typeName (_inventory select 2) != "STRING"}) then { + //Pre 1.0.6 character with Zupa 3.0 coins where dayz_onBack should be. Wipe coins and log playerID and amount to RPT. + diag_log format["%1 - Updating pre 1.0.6 character inventory to add dayz_onBack. Coins have been wiped for PlayerID: %2 PreviousCoins:%3",__FILE__,_playerID,(_inventory select 2)]; + _inventory set [2,""]; + }; +*/ + +PVCDZ_plr_Login = [_charID,_inventory,_backpack,_survival,_isNew,dayz_versionNo,_model,_isHiveOk,_newPlayer,_isInfected,_group,_CharacterCoins,_playerCoins,_BankCoins]; +(owner _playerObj) publicVariableClient "PVCDZ_plr_Login"; + +//Make player wait until ghost timer is up. +if (_endMission) exitwith { + _remaining = dayz_ghostTimer - _timeleft; + + //Log For GhostMode + diag_log format["INFO - Player:%1(UID:%2/CID%3) Status: LOGIN CANCELLED, GHOSTMODE. Time remianing: %4",_playerName,_playerID,_charID,_remaining]; + + PVCDZ_plr_Ghost = [_remaining]; + (owner _playerObj) publicVariableClient "PVCDZ_plr_Ghost"; +}; + +//Sync chopped trees for JIP player +{_x setDamage 1} count dayz_choppedTrees; + +if (toLower worldName in ["chernarus","chernarus_winter"]) then { + //Destroy glitched map objects which can not be deleted or hidden + {(_x select 0) nearestObject (_x select 1) setDamage 1} count [ + //Clipped benches in barracks hallway + [[4654,9595,0],145259], + [[4654,9595,0],145260], + //Clip into Land_houseV_2T2 + [[3553,2563,0],327203], //popelnice.p3d trash can + [[9649,10412,0],240641], //popelnice.p3d trash can + [[12085,3581,0],373017], //popelnice.p3d trash can + [[2632,5064,0],188661], //popelnice.p3d trash can + [[11772,12195,0],251224], //lavicka_1.p3d bench + [[2581,3456,0],1019127], //lavicka_2.p3d bench + //Clip into zero_building Land_HouseV_3I3 + [[2800,5202,0],187548], //popelnice.p3d trash can + [[12876,8031,0],294873], //popelnice.p3d trash can + //Clip into zero_building Land_HouseV_1L2 + [[3656,2429,0],327885], //plot_rust_draty.p3d fence + [[3656,2429,0],328107], //plot_rust_draty.p3d fence + [[3656,2429,0],328108], //plot_rust_draty.p3d fence + [[3656,2429,0],328109], //plot_rust_draty.p3d fence + [[3656,2429,0],328110], //plot_rust_draty.p3d fence + //Floating stump misc_stub1.p3d + [[9084,8654,0],244480] + ]; +}; + +//Sync active group invites to JIP player +if (count dayz_activeInvites > 0) then { + (owner _playerObj) publicVariableClient "dayz_activeInvites"; +}; + +//Record Player Login/LogOut +[_playerID,_charID,2,(_playerObj call fa_plr2str),((getPosATL _playerObj) call fa_coor2str)] call dayz_recordLogin; + +PVCDZ_plr_PlayerAccepted = [_playerName,diag_ticktime]; +(owner _playerObj) publicVariableClient "PVCDZ_plr_PlayerAccepted"; + +if ((count DZE_ServerMarkerArray) > 0) then { + PVDZ_ServerMarkerSend = ["JIP",DZE_ServerMarkerArray]; + (owner _playerObj) publicVariableClient "PVDZ_ServerMarkerSend"; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerSetup.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerSetup.sqf new file mode 100755 index 0000000..aa7579f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerSetup.sqf @@ -0,0 +1,250 @@ +private ["_dir","_IslandMap","_pos","_randomKey","_findIndex","_characterID","_playerObj","_spawnSelection","_inventory","_playerID","_dummy","_worldspace","_state","_doLoop","_key","_primary","_medical","_stats","_humanity","_randomSpot","_position","_distance","_fractures","_score","_findSpot","_mkr","_j","_isIsland","_w","_clientID","_lastInstance"]; + +_characterID = _this select 0; +_playerObj = _this select 1; +_spawnSelection = _this select 3; +_inventory = _this select 4; +_playerID = getPlayerUID _playerObj; + +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +if (isNull _playerObj) exitWith { + diag_log ("SETUP INIT FAILED: Exiting, player object null: " + str(_playerObj)); +}; + +if (_playerID == "") then { + _playerID = getPlayerUID _playerObj; +}; + +if (_playerID == "") exitWith { + diag_log ("SETUP INIT FAILED: Exiting, no player ID: " + str(_playerObj)); +}; + +_dummy = getPlayerUID _playerObj; +if (_playerID != _dummy) then { + diag_log format["DEBUG: _playerID miscompare with UID! _playerID:%1",_playerID]; + _playerID = _dummy; +}; + +_worldspace = []; +_state = []; + +//Do Connection Attempt +_doLoop = 0; +while {_doLoop < 5} do { + _key = format["CHILD:102:%1:",_characterID]; + _primary = _key call server_hiveReadWrite; + if (count _primary > 0) then { + if ((_primary select 0) != "ERROR") then { + _doLoop = 9; + }; + }; + _doLoop = _doLoop + 1; +}; + +if (isNull _playerObj || !isPlayer _playerObj) exitWith { + diag_log ("SETUP RESULT: Exiting, player object null: " + str(_playerObj)); +}; + +//Wait for HIVE to be free +//diag_log ("SETUP: RESULT: Successful with " + str(_primary)); + +_medical = _primary select 1; +_stats = _primary select 2; +_worldspace = _primary select 4; +_humanity = _primary select 5; +_lastInstance = _primary select 6; +_randomSpot = false; //Set position +_state = [["",""],_primary select 3 select 0] select (count _primary >= 4); +_dir = 0; +//diag_log ("WORLDSPACE: " + str(_worldspace)); + +if (count _worldspace > 0) then { + _dir = _worldspace select 0; + _position = _worldspace select 1; + if (count _position < 3) exitWith {_randomSpot = true;}; //prevent debug world! + + _distance = respawn_west_original distance _position; + if (_distance < 2000) then {_randomSpot = true;}; + + _distance = [0,0,0] distance _position; + if (_distance < 500) then {_randomSpot = true;}; + //_playerObj setPosATL _position; + + // Came from another server force random spawn + if (_lastInstance != dayZ_instance) then {_randomSpot = true;}; +} else { + _randomSpot = true; +}; + +//diag_log ("LOGIN: Location: " + str(_worldspace) + " doRnd?: " + str(_randomSpot)); + +//set medical values +if (count _medical > 0) then { + _playerObj setVariable ["USEC_isDead",(_medical select 0),true]; + _playerObj setVariable ["NORRN_unconscious",(_medical select 1),true]; + _playerObj setVariable ["USEC_infected",(_medical select 2),true]; + _playerObj setVariable ["USEC_injured",(_medical select 3),true]; + _playerObj setVariable ["USEC_inPain",(_medical select 4),true]; + _playerObj setVariable ["USEC_isCardiac",(_medical select 5),true]; + _playerObj setVariable ["USEC_lowBlood",(_medical select 6),true]; + _playerObj setVariable ["USEC_BloodQty",(_medical select 7),true]; + + //Add bleeding wounds + { + _playerObj setVariable ["hit_"+_x,true,true]; + } forEach (_medical select 8); + + //Add fractures + _fractures = _medical select 9; + _playerObj setVariable ["hit_legs",(_fractures select 0),true]; + _playerObj setVariable ["hit_hands",(_fractures select 1),true]; + _playerObj setVariable ["unconsciousTime",(_medical select 10),true]; + _playerObj setVariable ["messing",if (count _medical >= 14) then {(_medical select 13)} else {[0,0,0]},true]; + _playerObj setVariable ["blood_testdone",if (count _medical >= 15) then {(_medical select 14)} else {false},true]; + if (count _medical > 12 && {typeName (_medical select 11) == "STRING"}) then { //Old character had no "messing" OR "messing" in place of blood_type + _playerObj setVariable ["blood_type",(_medical select 11),true]; + _playerObj setVariable ["rh_factor",(_medical select 12),true]; +// diag_log [ "Character data: blood_type,rh_factor,testdone=", +// _playerObj getVariable ["blood_type", "?"],_playerObj getVariable ["rh_factor", "?"], _playerObj getVariable ["blood_testdone", false] +// ]; + } else { + _playerObj call player_bloodCalc; + diag_log [ "Character upgrade to 1.8.3: blood_type,rh_factor=",_playerObj getVariable ["blood_type", "?"],_playerObj getVariable ["rh_factor", "?"]]; + }; +} else { + //Reset bleeding wounds + call fnc_usec_resetWoundPoints; + //Reset fractures + _playerObj setVariable ["hit_legs",0,true]; + _playerObj setVariable ["hit_hands",0,true]; + _playerObj setVariable ["USEC_injured",false,true]; + _playerObj setVariable ["USEC_inPain",false,true]; + _playerObj call player_bloodCalc; // will set blood_type and rh_factor according to real population statitics + //diag_log [ "New character setup: blood_type,rh_factor=",_playerObj getVariable ["blood_type", "?"],_playerObj getVariable ["rh_factor", "?"]]; + _playerObj setVariable ["messing",[0,0,0],true]; + _playerObj setVariable ["blood_testdone",false,true]; +}; + +if (count _stats > 0) then { + //register stats Global + _playerObj setVariable ["zombieKills",(_stats select 0),true]; + _playerObj setVariable ["headShots",(_stats select 1),true]; + _playerObj setVariable ["humanKills",(_stats select 2),true]; + _playerObj setVariable ["banditKills",(_stats select 3),true]; + + //ConfirmedKills + _playerObj setVariable ["ConfirmedHumanKills",(_stats select 2),true]; + _playerObj setVariable ["ConfirmedBanditKills",(_stats select 3),true]; + + _playerObj addScore (_stats select 1); + + //Save Score + _score = score _playerObj; + _playerObj addScore ((_stats select 0) - _score); + + missionNamespace setVariable [_playerID,[_humanity,(_stats select 0),(_stats select 1),(_stats select 2),(_stats select 3)]]; +} else { + //register stats + _playerObj setVariable ["zombieKills",0,true]; + _playerObj setVariable ["humanKills",0,true]; + _playerObj setVariable ["banditKills",0,true]; + _playerObj setVariable ["headShots",0,true]; + + //ConfirmedKills + _playerObj setVariable ["ConfirmedHumanKills",0,true]; + _playerObj setVariable ["ConfirmedBanditKills",0,true]; + + missionNamespace setVariable [_playerID,[_humanity,0,0,0,0]]; +}; + +if (_randomSpot) then { + if (!isDedicated) then {endLoadingScreen;}; + _IslandMap = (toLower worldName in ["caribou","cmr_ovaron","dayznogova","dingor","dzhg","fallujah","fapovo","fdf_isle1_a","isladuala","lingor","mbg_celle2","namalsk","napf","oring","panthera2","ruegen","sara","sauerland","smd_sahrani_a2","tasmania2010","tavi","taviana","trinity","utes"]); + + //spawn into random + _findSpot = true; + _mkr = []; + _position = [0,0,0]; + _j = 0; + while {_findSpot && _j <= 100} do { + if (_spawnSelection == 9) then { + // random spawn location selected, lets get the marker and spawn in somewhere + if (dayz_spawnselection == 1) then {_mkr = getMarkerPos ("spawn" + str(floor(random 6)));} else {_mkr = getMarkerPos ("spawn" + str(floor(random actualSpawnMarkerCount)));}; + } else { + // spawn is not random, lets spawn in our location that was selected + _mkr = getMarkerPos ("spawn" + str(_spawnSelection)); + }; + _position = ([_mkr,0,spawnArea,10,0,2,spawnShoremode] call BIS_fnc_findSafePos); + if ((count _position >= 2) // !bad returned position + && {(_position distance _mkr < spawnArea)}) then { // !ouside the disk + _position set [2, 0]; + if (((ATLtoASL _position) select 2 > 2.5) //! player's feet too wet + && {({alive _x} count (_position nearEntities ["CAManBase",150]) == 0)}) then { // !too close from other players/zombies + _pos = +(_position); + _isIsland = false; //Can be set to true during the Check + // we check over a 809-meter cross line, with an effective interlaced step of 5 meters + _w = 0; + while {_w != 809} do { + //if (_w < 17) then { diag_log format[ "%1 loop starts with _w=%2", __FILE__, _w]; }; + _pos = [((_pos select 0) - _w),((_pos select 1) + _w),(_pos select 2)]; + if ((surfaceisWater _pos) && !_IslandMap) exitWith {_isIsland = true;}; + _w = ((_w + 17) % 811); + }; + if (!_isIsland) then {_findSpot = false}; + }; + }; + //diag_log format["%1: pos:%2 _findSpot:%3", __FILE__, _position, _findSpot]; + _j = _j + 1; + }; + if (_findSpot && !_IslandMap) exitWith { + diag_log format["%1: Error, failed to find a suitable spawn spot for player. area:%2",__FILE__, _mkr]; + }; + _worldspace = [_dir,_position]; + + //Fresh spawn, clear animationState so anim from last sync does not play on login + _state = ["","reset"]; +}; + +//record player pos locally for server checking +_playerObj setVariable ["characterID",_characterID,true]; +_playerObj setVariable ["humanity",_humanity,true]; +_playerObj setVariable ["lastPos",_position]; + +_clientID = owner _playerObj; +_randomKey = []; +for "_i" from 0 to 12 do { + _randomKey set [_i, (ceil(random 128)) + 256]; //Latin Extended-A characters not filtered in publicvariableval.txt +}; +_randomKey = toString _randomKey; +_findIndex = dayz_serverPUIDArray find _playerID; +if (_findIndex > -1) then { + dayz_serverClientKeys set [_findIndex, [_clientID,_randomKey]]; +} else { + dayz_serverPUIDArray set [(count dayz_serverPUIDArray), _playerID]; + dayz_serverClientKeys set [(count dayz_serverClientKeys), [_clientID,_randomKey]]; +}; + +// Sync weather settings for JIP player +_clientID publicVariableClient "PVDZE_SetWeather"; + +//PVCDZ_plr_Login2 = [_worldspace,_state,_randomKey]; +PVCDZ_plr_Login2 = [[0,respawn_west_original],_state,_randomKey,_worldspace,_randomSpot,([_randomSpot,_playerID] call spawn_config)]; +_clientID publicVariableClient "PVCDZ_plr_Login2"; +if (dayz_townGenerator) then { + _clientID publicVariableClient "PVCDZ_plr_plantSpawner"; +}; + +//record time started +_playerObj setVariable ["lastTime",diag_ticktime]; + +//set server-side inventory variable to monitor player gear +if (count _inventory > 2) then { + _playerObj setVariable["ServerMagArray",[_inventory select 1,_inventory select 2,_inventory select 0], false]; +}; + +//Record Player Login/LogOut +[_playerID,_characterID,1,(_playerObj call fa_plr2str),((_worldspace select 1) call fa_coor2str)] call dayz_recordLogin; + +PVDZ_plr_Login1 = null; +PVDZ_plr_Login2 = null; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerSync.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerSync.sqf new file mode 100755 index 0000000..90aeefb --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_playerSync.sqf @@ -0,0 +1,237 @@ +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +local _character = _this select 0; +local _magazines = _this select 1; +local _dayz_onBack = _this select 2; +local _weaponsPlayer = _this select 3; +local _characterID = _character getVariable ["characterID","0"]; +local _playerUID = getPlayerUID _character; +local _charPos = getPosATL _character; +local _isInVehicle = vehicle _character != _character; +local _timeSince = 0; +local _humanity = 0; +local _name = if (alive _character) then {name _character} else {"Dead Player"}; +local _inDebug = (respawn_west_original distance _charPos) < 1500; + +local _exitReason = call { + if (isNil "_characterID") exitwith {("ERROR: Cannot Sync Character " + _name + " has nil characterID")}; //Unit is null + if (_inDebug) exitwith {format["INFO: Cannot Sync Character %1 near respawn_west %2. This is normal when relogging or changing clothes.",_name,_charPos]}; + if (_characterID == "0") exitwith {("ERROR: Cannot Sync Character " + _name + " has no characterID")}; + if (_character isKindOf "Animal") exitwith {("ERROR: Cannot Sync Character " + _name + " is an Animal class")}; + "none"; +}; + +if (_exitReason != "none") exitWith { + diag_log _exitReason; +}; + +//Check for player initiated updates +local _playerPos = []; +local _playerGear = []; +local _playerBackp = []; +local _medical = []; +local _distanceFoot = 0; + +//all getVariable immediately +local _globalCoins = _character getVariable ["globalMoney", -1]; +local _bankCoins = _character getVariable ["bankMoney", -1]; +local _coins = _character getVariable ["cashMoney", -1]; //should getting coins fail set the variable to an invalid value to prevent overwritting the in the DB +local _lastPos = _character getVariable ["lastPos",_charPos]; +local _usec_Dead = _character getVariable ["USEC_isDead",false]; +local _lastTime = _character getVariable ["lastTime",-1]; +local _modelChk = _character getVariable ["model_CHK",""]; +local _temp = round (_character getVariable ["temperature",100]); +local _lastMagazines = _character getVariable ["ServerMagArray",[[],"",[]]]; +//Get difference between current stats and stats at last sync +local _statsDiff = [_character,_playerUID] call server_getStatsDiff; +_humanity = _statsDiff select 0; +local _kills = _statsDiff select 1; +local _headShots = _statsDiff select 2; +local _killsH = _statsDiff select 3; +local _killsB = _statsDiff select 4; + +local _charPosLen = count _charPos; +local _magTemp = []; + +if (!isNil "_magazines") then { + _playerGear = [_weaponsPlayer,_magazines,_dayz_onBack]; + _character setVariable["ServerMagArray",[_magazines,_dayz_onBack,_weaponsPlayer], false]; +} else { + //check Magazines everytime they aren't sent by player_forceSave + _magTemp = (_lastMagazines select 0); + if (isNil "_dayz_onBack") then { + _dayz_onBack = _lastMagazines select 1; + }; + if (isNil "_weaponsPlayer") then { + _weaponsPlayer = _lastMagazines select 2; + }; + if (count _magTemp > 0) then { + _magazines = [(magazines _character),20] call array_reduceSize; + { + local _class = _x; + if (typeName _x == "ARRAY") then { + _class = _x select 0; + }; + if (_class in _magazines) then { + local _MatchedCount = {_compare = if (typeName _x == "ARRAY") then {_x select 0;} else {_x}; _compare == _class} count _magTemp; + local _CountedActual = {_x == _class} count _magazines; + if (_MatchedCount > _CountedActual) then { + _magTemp set [_forEachIndex, "0"]; + }; + } else { + _magTemp set [_forEachIndex, "0"]; + }; + } forEach (_lastMagazines select 0); + _magazines = _magTemp - ["0"]; + _magazines = [_magazines,_dayz_onBack,_weaponsPlayer]; + _character setVariable["ServerMagArray",_magazines, false]; + _playerGear = [_magazines select 2,_magazines select 0,_magazines select 1]; + } else { + _magazines = [_magTemp,_dayz_onBack,_weaponsPlayer]; + }; + _character setVariable["ServerMagArray",_magazines, false]; + _playerGear = [_magazines select 2,_magazines select 0,_magazines select 1]; +}; + +//Check if update is requested +if !((_charPos select 0 == 0) && (_charPos select 1 == 0)) then { + //Position is not zero + _playerPos = [round (direction _character),_charPos]; + if (count _lastPos > 2 && {_charPosLen > 2}) then { + if (!_isInVehicle) then {_distanceFoot = round (_charPos distance _lastPos);}; + _character setVariable["lastPos",_charPos]; + }; + if (_charPosLen < 3) then {_playerPos = [];}; +}; + +//Check player backpack each time sync runs +local _backpack = unitBackpack _character; +_playerBackp = [typeOf _backpack,getWeaponCargo _backpack,getMagazineCargo _backpack]; + +if (!_usec_Dead) then { + _medical = _character call player_sumMedical; +}; + +_character addScore _kills; +/* + Assess how much time has passed, for recording total time on server + Note "lastTime" is -1 after clothes change +*/ +local _timeLeft = 0; +if (_lastTime == -1) then { + _character setVariable ["lastTime",diag_tickTime,false]; +} else { + local _timeGross = (diag_tickTime - _lastTime); + _timeSince = floor (_timeGross / 60); + _timeLeft = (_timeGross - (_timeSince * 60)); +}; +/* + Get character state details +*/ +local _currentWpn = currentMuzzle _character; +local _currentAnim = animationState _character; +local _config = configFile >> "CfgMovesMaleSdr" >> "States" >> _currentAnim; +local _onLadder = (getNumber (_config >> "onLadder")) == 1; +local _isTerminal = (getNumber (_config >> "terminal")) == 1; +//_wpnDisabled = (getNumber (_config >> "disableWeapons")) == 1; +local _currentModel = typeOf _character; +if (_currentModel == _modelChk) then { + _currentModel = ""; +} else { + _currentModel = str _currentModel; + _character setVariable ["model_CHK",typeOf _character]; +}; + +// If player is in a vehicle, keep its position updated +if (vehicle _character != _character) then { + [vehicle _character, "position"] call server_updateObject; +}; + +if (count _this > 4) then { //calling from player_onDisconnect + if (_this select 4) then { //combat logged + _medical set [1, true]; //set unconcious to true + _medical set [10, 150]; //combat timeout + //_character setVariable ["NORRN_unconscious",true,true]; // Set status to unconscious + //_character setVariable ["unconsciousTime",150,true]; // Set knock out timer to 2 minutes 30 seconds + //_character setVariable ["USEC_injured",true]; // Set status to bleeding + //_character setVariable ["USEC_BloodQty",3000]; // Set blood to 3000 + }; + if (_isInVehicle) then { + //if the player object is inside a vehicle lets eject the player + local _relocate = ((vehicle _character isKindOf "Air") && (_charPos select 2 > 1.5)); + _character action ["eject", vehicle _character]; + + // Prevent relog in parachute, heli or plane above base exploit to get inside + if (_relocate) then { + local _count = 0; + local _maxDist = 800; + local _newPos = [_charPos, 80, _maxDist, 10, 1, 0, 0, [], [_charPos,_charPos]] call BIS_fnc_findSafePos; + + while {_newPos distance _charPos == 0} do { + _count = _count + 1; + if (_count > 4) exitWith {_newPos = _charPos;}; // Max 4km away fail safe (needs to finish fast so server_playerSync runs below) + _newPos = [_charPos, 80, (_maxDist + 800), 10, 1, 0, 0, [], [_charPos,_charPos]] call BIS_fnc_findSafePos; + }; + _newPos set [2,0]; //findSafePos only returns two elements + _charPos = _newPos; + diag_log format["%1(%2) logged out in air vehicle. Relocated to safePos %3 - %4.",_name,_playerUID,mapGridPosition _charPos,_charPos]; + }; + }; +}; +if (_onLadder or _isInVehicle or _isTerminal) then { + _currentAnim = ""; + //If position to be updated, make sure it is at ground level! + if ((count _playerPos > 0) && !_isTerminal) then { + _charPos set [2,0]; + _playerPos set [1,_charPos]; + }; +}; +if (_isInVehicle) then { + _currentWpn = ""; +} else { + if (typeName _currentWpn == "STRING") then { + local _muzzles = getArray (configFile >> "cfgWeapons" >> _currentWpn >> "muzzles"); + if (count _muzzles > 1) then {_currentWpn = currentMuzzle _character;}; + } else { + //diag_log ("DW_DEBUG: _currentWpn: " + str(_currentWpn)); + _currentWpn = ""; + }; +}; +local _currentState = [[_currentWpn,_currentAnim,_temp],[]]; + +//Reset timer +if (_timeSince > 0) then { + _character setVariable ["lastTime",(diag_ticktime - _timeLeft)]; +}; + +/* + Everything is ready, now publish to HIVE + Low priority code below this point where _character object is no longer needed and may be Null. +*/ +if (count _playerPos > 0) then { + local _array = []; + { + if (_x > dayz_minpos && _x < dayz_maxpos) then {_array set [count _array,_x];}; + } forEach (_playerPos select 1); + _playerPos set [1,_array]; +}; + +//Wait for HIVE to be free and send request +local _key = if (Z_SingleCurrency) then { + str formatText["CHILD:201:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:",_characterID,_playerPos,_playerGear,_playerBackp,_medical,false,false,_kills,_headShots,_distanceFoot,_timeSince,_currentState,_killsH,_killsB,_currentModel,_humanity,_coins] +} else { + str formatText["CHILD:201:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:",_characterID,_playerPos,_playerGear,_playerBackp,_medical,false,false,_kills,_headShots,_distanceFoot,_timeSince,_currentState,_killsH,_killsB,_currentModel,_humanity] +}; + +#ifdef PLAYER_DEBUG + diag_log str formatText["INFO - %2(UID:%4,CID:%3) PlayerSync, %1",_key,_name,_characterID,_playerUID]; +#endif +_key call server_hiveWrite; + +if (Z_SingleCurrency) then { //update global coins + _key = str formatText["CHILD:205:%1:%2:%3:%4:",_playerUID,dayZ_instance,_globalCoins,_bankCoins]; + _key call server_hiveWrite; +}; + +// Force gear updates for nearby vehicles/tents +{[_x,"gear"] call server_updateObject;} count nearestObjects [[_character] call FNC_GetPos,DayZ_GearedObjects,10]; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_publishObject.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_publishObject.sqf new file mode 100755 index 0000000..a9d736b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_publishObject.sqf @@ -0,0 +1,52 @@ +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +private ["_type","_objectUID","_characterID","_object","_worldspace","_key","_ownerArray","_inventory","_clientKey","_exitReason","_player","_playerUID"]; + +if (count _this < 6) exitWith {diag_log "Server_PublishObj error: Wrong parameter format";}; + +_characterID = _this select 0; +_object = _this select 1; +_worldspace = _this select 2; +_inventory = _this select 3; +_player = _this select 4; +_clientKey = _this select 5; +_type = typeOf _object; +_playerUID = getPlayerUID _player; + +_exitReason = [_this,"PublishObj",(_worldspace select 1),_clientKey,_playerUID,_player] call server_verifySender; +if (_exitReason != "") exitWith {diag_log _exitReason}; + +if ([_object, "Server"] call check_publishobject) then { + //diag_log ("PUBLISH: Attempt " + str(_object)); + + _objectUID = _worldspace call dayz_objectUID2; + _object setVariable [ "ObjectUID", _objectUID, true ]; + // we can't use getVariable because only the object creation is known from the server (position,direction,variables are not sync'ed yet) + //_characterID = _object getVariable [ "characterID", 0 ]; + //_ownerArray = _object getVariable [ "ownerArray", [] ]; + //_key = str formatText["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:", dayZ_instance, _type, 0, _characterID, _worldspace, _inventory, [], 0,_objectUID]; + _key = str formatText["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _type, 0, _characterID, _worldspace call AN_fnc_formatWorldspace, _inventory, [], 0,_objectUID]; // Precise Base Building 1.0.5 + + _key call server_hiveWrite; + + if !(_object isKindOf "TrapItems") then { + if (DZE_GodModeBase && {!(_type in DZE_GodModeBaseExclude)}) then { + _object addEventHandler ["HandleDamage", {false}]; + } else { + _object addMPEventHandler ["MPKilled",{_this call vehicle_handleServerKilled;}]; + }; + }; + // Test disabling simulation server side on buildables only. + _object enableSimulation false; + + dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object]; + + #ifdef OBJECT_DEBUG + diag_log format["PUBLISH: Player %1(%2) created %3 with UID:%4 CID:%5 @%6 inventory:%7",(_player call fa_plr2str),_playerUID,_type,_objectUID,_characterID,((_worldspace select 1) call fa_coor2str),_inventory]; + #endif +} +else { + #ifdef OBJECT_DEBUG + diag_log ("PUBLISH: *NOT* created " + (_type ) + " (not allowed)"); + #endif +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_publishVehicle.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_publishVehicle.sqf new file mode 100755 index 0000000..67414bd --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_publishVehicle.sqf @@ -0,0 +1,92 @@ +private ["_object","_worldspace","_location","_dir","_class","_uid","_dam","_hitpoints","_selection","_array","_damage","_fuel","_key","_totaldam","_spawnDMG","_characterID","_result","_outcome","_oid"]; +//[_veh,[_dir,_location],"V3S_Civ",true] +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +_object = _this select 0; +_worldspace = _this select 1; +_class = _this select 2; +_spawnDMG = _this select 3; +_characterID = _this select 4; + +_fuel = 1; +_damage = 0; +_array = []; + +#ifdef OBJECT_DEBUG +diag_log ("PUBLISH: Attempt " + str(_object)); +#endif + +_dir = _worldspace select 0; +_location = _worldspace select 1; +_uid = _worldspace call dayz_objectUID2; + +if (_spawnDMG) then { + _fuel = 0; + if (getNumber(configFile >> "CfgVehicles" >> _class >> "isBicycle") != 1) then { + _totaldam = 0; + _hitpoints = _object call vehicle_getHitpoints; + { + _dam = call generate_new_damage; + _selection = getText(configFile >> "cfgVehicles" >> _class >> "HitPoints" >> _x >> "name"); + if (_dam > 0) then { + _array set [count _array,[_selection,_dam]]; + _totaldam = _totaldam + _dam; + }; + } count _hitpoints; + _damage = 0; + _fuel = (random(DynamicVehicleFuelHigh-DynamicVehicleFuelLow)+DynamicVehicleFuelLow) / 100; + }; +}; + +_key = str formatText["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance,_class,_damage,_characterID,_worldspace,[],_array,_fuel,_uid]; + +#ifdef OBJECT_DEBUG +diag_log ("HIVE: WRITE: "+ str(_key)); +#endif + +_key call server_hiveWrite; + +dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object]; + +// GET DB ID +_key = format["CHILD:388:%1:",_uid]; + +#ifdef OBJECT_DEBUG +diag_log ("HIVE: WRITE: "+ str(_key)); +#endif + +_result = _key call server_hiveReadWrite; +_outcome = _result select 0; + +if (_outcome != "PASS") then { + deleteVehicle _object; + diag_log("CUSTOM: failed to get id for : " + str(_uid)); +} else { + _oid = _result select 1; + _object setVariable ["ObjectID", _oid, true]; + + #ifdef OBJECT_DEBUG + diag_log("CUSTOM: Selected " + str(_oid)); + #endif + + _object setVariable ["lastUpdate",diag_tickTime]; + _object setVariable ["CharacterID", _characterID, true]; + _object setDamage _damage; + + { + _selection = _x select 0; + _dam = _x select 1; + if (_selection in dayZ_explosiveParts && _dam > 0.8) then {_dam = 0.8}; + [_object,_selection,_dam] call fnc_veh_setFixServer; + } count _array; + + _object setFuel _fuel; + _object setvelocity [0,0,1]; + _object call fnc_veh_ResetEH; + + PVDZE_veh_Init = _object; + publicVariable "PVDZE_veh_Init"; + + diag_log ("PUBLISH: Created " + (_class) + " with ID " + str(_uid)); +}; + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_publishVehicle2.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_publishVehicle2.sqf new file mode 100755 index 0000000..8dbacea --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_publishVehicle2.sqf @@ -0,0 +1,105 @@ +private ["_activatingPlayer","_isOK","_worldspace","_location","_dir","_class","_uid","_key","_keySelected","_characterID","_donotusekey","_object","_result","_outcome","_oid","_object_para","_clientKey","_exitReason","_playerUID"]; +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +if (count _this < 6) exitWith {diag_log "Server_PublishVehicle2 error: Wrong parameter format";}; + +_worldspace = _this select 0; +_class = _this select 1; +_donotusekey = _this select 2; +_keySelected = _this select 3; +_activatingPlayer = _this select 4; +_clientKey = _this select 5; +_playerUID = getPlayerUID _activatingPlayer; + +_exitReason = [_this,"PublishVehicle2",(_worldspace select 1),_clientKey,_playerUID,_activatingPlayer] call server_verifySender; +if (_exitReason != "") exitWith {diag_log _exitReason}; + +if(_donotusekey) then { + _isOK = true; +} else { + _isOK = isClass(configFile >> "CfgWeapons" >> _keySelected); +}; + +if(!_isOK) exitWith {diag_log ("HIVE: CARKEY DOES NOT EXIST: "+ str(_keySelected));}; + +if(_donotusekey) then { + _characterID = _keySelected; +} else { + _characterID = str(getNumber(configFile >> "CfgWeapons" >> _keySelected >> "keyid")); +}; + +_dir = _worldspace select 0; +_location = _worldspace select 1; +_uid = _worldspace call dayz_objectUID2; + +_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _characterID, _worldspace, [], [], 1,_uid]; + +#ifdef OBJECT_DEBUG +diag_log ("HIVE: WRITE: "+ str(_key)); +#endif + +_key call server_hiveWrite; + +_key = format["CHILD:388:%1:",_uid]; + +#ifdef OBJECT_DEBUG +diag_log ("HIVE: WRITE: "+ str(_key)); +#endif + +_result = _key call server_hiveReadWrite; +_outcome = _result select 0; + +if (_outcome != "PASS") then { + diag_log("CUSTOM: failed to get id for : " + str(_uid)); +} else { + _oid = _result select 1; + + #ifdef OBJECT_DEBUG + diag_log("CUSTOM: Selected " + str(_oid)); + #endif + + if(DZE_TRADER_SPAWNMODE) then { + _object_para = "ParachuteMediumWest" createVehicle [0,0,0]; + _object_para setPos [_location select 0, _location select 1,(_location select 2) + 65]; + _object = _class createVehicle [0,0,0]; + } else { + // Don't use setPos or CAN_COLLIDE here. It will spawn inside other vehicles + _object = _class createVehicle _location; + if (surfaceIsWater _location && {({_x != _object} count (_location nearEntities ["Ship",8])) == 0}) then { + //createVehicle "NONE" is especially inaccurate in water + _object setPos _location; + }; + }; + + if(!_donotusekey) then { + _object setvehiclelock "locked"; + //_object setVariable ["MF_Tow_Cannot_Tow",true,true]; + }; + + clearWeaponCargoGlobal _object; + clearMagazineCargoGlobal _object; + dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object]; + _object setVariable ["ObjectID", _oid, true]; + _object setVariable ["lastUpdate",diag_tickTime]; + _object setVariable ["CharacterID", _characterID, true]; + + if(DZE_TRADER_SPAWNMODE) then { + _object attachTo [_object_para, [0,0,-1.6]]; + [_object,_object_para] spawn { + _object = _this select 0; + _object_para = _this select 1; + uiSleep 1; + waitUntil {([_object] call fnc_getPos) select 2 < 0.1}; + detach _object; + deleteVehicle _object_para; + }; + }; + + _object call fnc_veh_ResetEH; + _object setVariable ["Owner", [_playerUID], true]; + + PVDZE_veh_Init = _object; + publicVariable "PVDZE_veh_Init"; + + diag_log format["PUBLISH: %1(%2) bought %3 with UID %4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,(_location call fa_coor2str)]; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_publishVehicle3.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_publishVehicle3.sqf new file mode 100755 index 0000000..b23d9bc --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_publishVehicle3.sqf @@ -0,0 +1,205 @@ +private ["_coins","_activatingPlayer","_object","_worldspace","_location","_dir","_class","_uid","_key","_keySelected" +,"_characterID","_result","_outcome","_oid","_objectID","_objectUID","_newobject","_weapons","_magazines","_backpacks" +,"_clientKey","_exitReason","_playerUID","_isAir","_fuel","_selection","_dam","_hitpoints","_newHitpoints","_damage" +,"_hit","_inv","_action","_clearTurrets","_message"]; +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +if (count _this < 6) exitWith { + diag_log "Server_PublishVehicle3 error: Wrong parameter format"; + dze_waiting = "fail"; + (owner (_this select 4)) publicVariableClient "dze_waiting"; +}; + +_object = _this select 0; +_worldspace = _this select 1; +_class = _this select 2; +_keySelected = _this select 3; +_activatingPlayer = _this select 4; +_clientKey = _this select 5; +_action = if (count _this > 6) then {_this select 6} else {""}; +_playerUID = getPlayerUID _activatingPlayer; +_characterID = _keySelected; + +_exitReason = [_this,"PublishVehicle3",(_worldspace select 1),_clientKey,_playerUID,_activatingPlayer] call server_verifySender; +if (_exitReason != "") exitWith { + diag_log _exitReason; + dze_waiting = "fail"; + (owner _activatingPlayer) publicVariableClient "dze_waiting"; +}; + +if (!(isClass(configFile >> "CfgVehicles" >> _class)) || isNull _object) exitWith { + diag_log ("HIVE-PublishVehicle3 Error: Vehicle does not exist: "+ str(_class)); + dze_waiting = "fail"; + (owner _activatingPlayer) publicVariableClient "dze_waiting"; +}; + +_objectID = _object getVariable ["ObjectID","0"]; +_objectUID = _object getVariable ["ObjectUID","0"]; +_location = [_object] call fnc_getPos; +_fuel = fuel _object; +_hitpoints = _object call vehicle_getHitpoints; +_newHitpoints = []; +_damage = damage _object; + +// add items from previous vehicle here +_weapons = getWeaponCargo _object; +_magazines = getMagazineCargo _object; +_backpacks = getBackpackCargo _object; +_inv = [_weapons,_magazines,_backpacks]; + +if (Z_SingleCurrency && ZSC_VehicleMoneyStorage) then { + _coins = _object getVariable ["cashMoney",0]; +}; + +{ + _hit = [_object,_x] call object_getHit; + if ((_hit select 0) > 0) then { + _newHitpoints set [count _newHitpoints,[(_hit select 1),(_hit select 0)]]; + } else { + _newHitpoints set [count _newHitpoints,[(_hit select 1),0]]; + }; +} count _hitpoints; + +#ifdef OBJECT_DEBUG +diag_log ("PUBLISH: Attempt " + str(_object)); +#endif + +_dir = _worldspace select 0; +_uid = _worldspace call dayz_objectUID2; + +_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, _damage , _characterID, _worldspace, _inv, _newHitpoints, _fuel,_uid]; +#ifdef OBJECT_DEBUG +diag_log ("HIVE: WRITE: "+ str(_key)); +#endif + +_key call server_hiveWrite; + +// GET DB ID +_key = format["CHILD:388:%1:",_uid]; +#ifdef OBJECT_DEBUG +diag_log ("HIVE: WRITE: "+ str(_key)); +#endif +_result = _key call server_hiveReadWrite; +_outcome = _result select 0; + +if (_outcome != "PASS") then { + diag_log("HIVE-pv3: failed to get id for : " + str(_uid)); + _key = format["CHILD:310:%1:",_uid]; + _key call server_hiveWrite; + dze_waiting = "fail"; + (owner _activatingPlayer) publicVariableClient "dze_waiting"; +} else { + _oid = _result select 1; + #ifdef OBJECT_DEBUG + diag_log("CUSTOM: Selected " + str(_oid)); + #endif + + _colour = _object getVariable ["Colour","0"]; + _colour2 = _object getVariable ["Colour2","0"]; + + deleteVehicle _object; + [_objectID,_objectUID,_object] call server_deleteObjDirect; + + uiSleep 3; + + _newobject = _class createVehicle [0,0,0]; + + // switch var to new vehicle at this point. + _object = _newobject; + + _object setVariable ["ObjectID", _oid, true]; + _object setVariable ["lastUpdate",diag_tickTime]; + _object setVariable ["CharacterID", _characterID, true]; + + if (Z_SingleCurrency && ZSC_VehicleMoneyStorage && {_coins > 0}) then { + _object setVariable ["cashMoney",_coins,true]; + }; + + dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object]; + + clearWeaponCargoGlobal _object; + clearMagazineCargoGlobal _object; + clearBackpackCargoGlobal _object; + + _object setDir _dir; + _object setPosATL _location; + _object setVectorUp surfaceNormal _location; + _object setDamage _damage; + + if (_colour != "0") then { + _object setVariable ["Colour",_colour,true]; + _clrinit = format ["#(argb,8,8,3)color(%1)",_colour]; + _object setVehicleInit "this setObjectTexture [0,"+str _clrinit+"];"; + }; + + if (_colour2 != "0") then { + _object setVariable ["Colour2",_colour2,true]; + _clrinit2 = format ["#(argb,8,8,3)color(%1)",_colour2]; + _object setVehicleInit "this setObjectTexture [1,"+str _clrinit2+"];"; + }; + + processInitCommands; + [_weapons,_magazines,_backpacks,_object] call fn_addCargo; + + _clearTurrets = { + //By denvdmj (probably, I found it on the biki) + private ["_weaponArray","_findRecurse","_class","_obj","_turret","_mags"]; + _obj = _this; + + _weaponArray = []; + _weaponArray set [count _weaponArray,[-1]]; + + _findRecurse = { + private ["_root", "_class", "_path", "_currentPath", "_thisThis"]; + _root = (_this select 0); + _path = +(_this select 1); + _thisThis = _this select 2; + for "_i" from 0 to count _root -1 do { + _class = _root select _i; + if (isClass _class) then { + _currentPath = _path + [_i]; + {_weaponArray set [count _weaponArray, _currentPath];} count getArray (_class >> "weapons"); + _class = _class >> "turrets"; + if (isClass _class) then {[_class, _currentPath, _thisThis] call _findRecurse;}; + }; + }; + }; + + [configFile >> "CfgVehicles" >> typeOf (_obj) >> "turrets", [], _this] call _findRecurse; + + { + _turret = _x; + _mags = _obj magazinesTurret _turret; + {_obj removeMagazinesTurret[_x,_turret];} count _mags; + } forEach _weaponArray; + }; + + _isAir = _object isKindOf "Air"; + { + _selection = _x select 0; + _dam = [_x select 1,(_x select 1) min 0.8] select (!_isAir && {_selection in dayZ_explosiveParts}); + _object setHit [_selection,_dam]; + } count _newHitpoints; + + _object setFuel _fuel; + + [_object,"all",true] call server_updateObject; + + _object call fnc_veh_ResetEH; + // for non JIP users this should make sure everyone has eventhandlers for vehicles. + PVDZE_veh_Init = _object; + publicVariable "PVDZE_veh_Init"; + + {if (_object isKindOf _x) exitWith {_object disableTIEquipment true;}} count vkc_disableThermal; + if (vkc_clearAmmo) then {_object call _clearTurrets;}; + + dze_waiting = "success"; + (owner _activatingPlayer) publicVariableClient "dze_waiting"; + + if (_action == "") then { + _message = format["PUBLISH: %1(%2) upgraded %3 with UID %4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,(_location call fa_coor2str)]; + } else { + _message = format["PUBLISH: %1(%2) %6 %3 with UID %4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,(_location call fa_coor2str),_action]; + }; + diag_log _message; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_spawnTraders.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_spawnTraders.sqf new file mode 100755 index 0000000..678c215 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_spawnTraders.sqf @@ -0,0 +1,24 @@ +private "_trader"; +{ + _trader = createAgent [_x select 0,_x select 1,[],0,"CAN_COLLIDE"]; + {_trader removeMagazine _x;} count magazines _trader; + removeAllItems _trader; + removeAllWeapons _trader; + removeBackpack _trader; + _trader switchMove ""; + _trader setDir (_x select 2); + _trader setVehicleInit "this disableAI 'ANIM'; this disableAI 'AUTOTARGET'; this disableAI 'FSM'; this disableAI 'MOVE'; this disableAI 'TARGET'; this setBehaviour 'CARELESS'; this forceSpeed 0; this allowDamage false;"; + _trader setUnitAbility 0.6; + _trader disableAI "ANIM"; + _trader disableAI "AUTOTARGET"; + _trader disableAI "FSM"; + _trader disableAI "MOVE"; + _trader disableAI "TARGET"; + _trader setBehaviour "CARELESS"; + _trader setcaptive true; + _trader forceSpeed 0; + _trader allowDamage false; + _trader enableSimulation false; +} count _this; + +processInitCommands; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_swapObject.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_swapObject.sqf new file mode 100755 index 0000000..8e99ed6 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_swapObject.sqf @@ -0,0 +1,117 @@ +private ["_gearClasses","_coins","_class","_uid","_charID","_object","_worldspace","_key","_allowed","_obj","_inv","_objectID","_objectUID","_proceed","_activatingplayer","_clientKey","_exitReason","_playerUID","_weapons","_magazines","_backpacks"]; + +if (count _this < 8) exitWith {diag_log format ["Server_SwapObject error: Wrong parameter format from player %1",_this select 5];}; + +_charID = _this select 0; +_object = _this select 1; +_worldspace = _this select 2; +_class = _this select 3; +_obj = _this select 4; +_activatingplayer = _this select 5; +_inv = _this select 6; +_clientKey = _this select 7; +_proceed = false; +_objectID = "0"; +_objectUID = "0"; +_playerUID = getPlayerUID _activatingPlayer; + +_exitReason = [_this,"SwapObject",(_worldspace select 1),_clientKey,_playerUID,_activatingPlayer] call server_verifySender; +if (_exitReason != "") exitWith {diag_log _exitReason}; + +if (!isNull(_obj)) then { + // Find objectID + _objectID = _obj getVariable ["ObjectID","0"]; + // Find objectUID + _objectUID = _obj getVariable ["ObjectUID","0"]; + if !(DZE_GodModeBase) then { + _obj removeAllMPEventHandlers "MPKilled"; + }; + if ((_class isKindOf "Land_A_tent" || {_class in DZE_isNewStorage}) && !(_class in DZE_isLockedStorageUpgrade)) then { + _weapons = getWeaponCargo _obj; + _magazines = getMagazineCargo _obj; + _backpacks = getBackpackCargo _obj; + _inv = [_weapons,_magazines,_backpacks]; + }; + if (_class in DZE_isLockedStorageUpgrade) then { + _weapons = _obj getVariable ["WeaponCargo",[]]; + _magazines = _obj getVariable ["MagazineCargo",[]]; + _backpacks = _obj getVariable ["BackpackCargo",[]]; + _inv = [_weapons,_magazines,_backpacks]; + }; + if (Z_SingleCurrency && {_class in DZE_MoneyStorageClasses}) then { + _coins = _obj getVariable ["cashMoney",0]; + }; + + // Remove old object + deleteVehicle _obj; + + _proceed = true; +}; + +if (isNull(_object)) then { + _proceed = false; +}; + +if (_objectID == "0" && {_objectUID == "0"}) then { + _proceed = false; +} else { + [_objectID,_objectUID,_obj] call server_deleteObjDirect; +}; + +_allowed = [_object, "Server"] call check_publishobject; +if (!_allowed || !_proceed) exitWith { + if(!isNull(_object)) then { + deleteVehicle _object; + }; + diag_log ("Invalid object swap by playerUID:" + _playerUID); +}; + +// Publish variables +_object setVariable ["CharacterID",_charID,true]; + +//_object setVariable ["ObjectUID",_objectUID,true]; +_object setVariable ["OEMPos",(_worldspace select 1),true]; + +//diag_log ("PUBLISH: Attempt " + str(_object)); + +//get UID +_uid = _worldspace call dayz_objectUID2; + +//Send request +_key = str formatText["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0, _charID, _worldspace call AN_fnc_formatWorldspace, _inv, [], 0,_uid]; + +//diag_log ("HIVE: WRITE: "+ str(_key)); +_key call server_hiveWrite; + +_object setVariable ["lastUpdate",diag_tickTime]; +_object setVariable ["ObjectUID", _uid,true]; +// _object setVariable ["CharacterID",_charID,true]; +if (DZE_GodModeBase && {!(_class in DZE_GodModeBaseExclude)}) then { + _object addEventHandler ["HandleDamage",{false}]; +} else { + _object addMPEventHandler ["MPKilled",{_this call vehicle_handleServerKilled;}]; +}; + +_gearClasses = ["Wooden_shed2_DZ","WoodShack2_DZ","StorageShed2_DZ","GunRack2_DZ","WoodCrate2_DZ","TentStorage0","TentStorage1","TentStorage2","TentStorage3","TentStorage4""DomeTentStorage0","DomeTentStorage1","DomeTentStorage2","DomeTentStorage3","DomeTentStorage4","DesertTentStorage0","DesertTentStorage1","DesertTentStorage2","DesertTentStorage3","DesertTentStorage4","StashSmall1","StashSmall2","StashSmall3","StashSmall4","StashMedium","StashMedium1","StashMedium2","StashMedium3","StashMedium4","TentStorageWinter0","TentStorageWinter1","TentStorageWinter2","TentStorageWinter3","TentStorageWinter4","WinterDomeTentStorage0","WinterDomeTentStorage1","WinterDomeTentStorage2","WinterDomeTentStorage3","WinterDomeTentStorage4"]; + +if (count _inv > 0 && {_class in _gearClasses}) then { + [_weapons,_magazines,_backpacks,_object] call fn_addCargo; +}; +if (_class in DZE_isLockedStorageUpgrade) then { + _object setVariable ["WeaponCargo",_weapons,false]; + _object setVariable ["MagazineCargo",_magazines,false]; + _object setVariable ["BackpackCargo",_backpacks,false]; +}; + +// Test disabling simulation server side on buildables only. +_object enableSimulation false; + +dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object]; + +if (Z_SingleCurrency && {_class in DZE_MoneyStorageClasses && {_coins > 0}}) then { //Do not use server_updateObject, safes and lockboxes need a different handling + _object setVariable ["cashMoney",_coins,true]; + _key = format["CHILD:309:%1:",_uid] + str _inv + ":" + str _coins + ":"; + _key call server_hiveWrite; +}; + +diag_log format["PUBLISH: Player %1(%2) upgraded or downgraded object to %3 with UID:%4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,((_worldspace select 1) call fa_coor2str)]; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_toggle_debug.hpp b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_toggle_debug.hpp new file mode 100755 index 0000000..64247b7 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_toggle_debug.hpp @@ -0,0 +1,19 @@ +/* +Created exclusively for ArmA2:OA - DayZMod. +Please request permission to use/alter/distribute from project leader (R4Z0R49) +*/ + +//// TOGGLE DEBUGS //// + +// comment this out if you don't want any LOGIN related debug +#define LOGIN_DEBUG + +// comment this out if you don't want any VEHICLE/TENT/OBJECT related debug +//#define OBJECT_DEBUG + +// comment this out if you don't want any PLAYER (WORLDSPACE/INVENTORY/ETC) related debug +//#define PLAYER_DEBUG + +// comment this out if you don't want any misc SERVER (ZOMBIE, LOOT, CLEANUP) related debug +//#define SERVER_DEBUG + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_tradeObject.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_tradeObject.sqf new file mode 100755 index 0000000..b5355a0 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_tradeObject.sqf @@ -0,0 +1,40 @@ +local _player = _this select 0; +local _traderID = _this select 1; +local _buyorsell = _this select 2; //0 > Buy // 1 > Sell +local _classname = _this select 3; +local _traderCity = _this select 4; +local _currency = _this select 5; +local _price = _this select 6; + +local _message = ""; +local _playerUID = getPlayerUID _player; +local _name = if (alive _player) then {name _player} else {"Dead Player"}; +local _quantity = 1; +local _container = "gear"; + +if (count _this > 7) then { + _quantity = _this select 7; + _container = _this select 8; +}; + +local _checkItems = true; // Activate this to log all items within the '_watchClasses'. Specify the quantity with '_watchNumber' when the sold items will be logged. + +if (_checkItems) then { + local _watchClasses = ["ItemBriefcase40oz","ItemBriefcase50oz","ItemBriefcase60oz","ItemBriefcase70oz","ItemBriefcase80oz","ItemBriefcase90oz","ItemBriefcase100oz","ItemTopaz","ItemObsidian","ItemSapphire","ItemAmethyst","ItemEmerald","ItemCitrine","ItemRuby"]; // Items to be logged + local _watchNumber = 4; // Minimum number of quantity before logging occurs + + if (_quantity >= _watchNumber && {_className in _watchClasses} && {_buyOrSell == 1}) then { + _message = format ["%1 (%2) could be duping! Selling %3x %4",_name,_playerUID,_quantity,_className]; + diag_log _message; + }; +}; + +if (typeName _currency == "STRING") then {_price = format ["%1 %2",_price,_currency];}; + +if (_buyorsell == 0) then { // Buy + _message = format["Trader Menu: %1 (%2) purchased %3x %4 into %5 at %6 for %7",_name,_playerUID,_quantity,_classname,_container,_traderCity,_price]; +} else { // Sell + _message = format["Trader Menu: %1 (%2) sold %3x %4 from %5 at %6 for %7",_name,_playerUID,_quantity,_classname,_container,_traderCity,_price]; +}; + +diag_log _message; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_updateObject.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_updateObject.sqf new file mode 100755 index 0000000..7cf7f5c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_updateObject.sqf @@ -0,0 +1,76 @@ +// [_object,_type] spawn server_updateObject; +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" +//if (isNil "sm_done") exitWith {diag_log "sm_done is nil";}; + +local _object = _this select 0; +if ((isNil "_object") || isNull _object) exitWith {diag_log "server_updateObject.sqf _object null or nil, could not update object"}; + +local _type = _this select 1; +local _forced = if (count _this > 2) then {_this select 2} else {false}; +local _totalDmg = if (count _this > 3) then {_this select 3} else {false}; +local _isNotOk = false; +local _objectID = "0"; +local _objectUID = "0"; + +_objectID = _object getVariable ["ObjectID","0"]; +_objectUID = _object getVariable ["ObjectUID","0"]; +local _class = typeOf _object; + +if (typeName _objectID != "STRING" || {typeName _objectUID != "STRING"}) then { + #ifdef OBJECT_DEBUG + diag_log (format["Non-string Object: ID %1 UID %2", _objectID, _objectUID]); + #endif + //force fail + _objectID = nil; + _objectUID = nil; +}; + +if (!(_class in DZE_safeVehicle) && {!locked _object}) then { + //diag_log format["Object: %1, ObjectID: %2, ObjectUID: %3",_object,_objectID,_objectUID]; + if (!(_objectID in dayz_serverIDMonitor) && {isNil "_objectUID"}) then { + //force fail + _objectID = nil; + _objectUID = nil; + }; + if (isNil "_objectID" && {isNil "_objectUID"}) then { + #ifdef OBJECT_DEBUG + diag_log format["Object %1 with invalid ID at pos %2",_class,getPosATL _object]; + #endif + _isNotOk = true; + }; +}; + +if (_isNotOk) exitWith { + //deleteVehicle _object; +}; + +call { + if (_type == "all") exitwith { + [_object,_objectID,_class] call server_obj_pos; + [_object,_objectID,_objectUID,_class] call server_obj_inv; + [_object,_objectID,_objectUID,_forced,_totalDmg] call server_obj_dam; + }; + if (_type == "position") exitwith { + [_object,_objectID,_class] call server_obj_pos; + }; + if (_type == "gear") exitwith { + [_object,_objectID,_objectUID,_class] call server_obj_inv; + }; + if (_type == "damage" || _type == "repair") exitwith { + [_object,_objectID,_objectUID,_forced,_totalDmg] call server_obj_dam; + }; + if (_type == "killed") exitwith { + if (count _this != 6) exitWith { + diag_log "Server_UpdateObject error: wrong parameter format"; + }; + + local _playerUID = _this select 4; + local _clientKey = _this select 5; + [_object,_objectID,_objectUID,_playerUID,_clientKey,_class] call server_obj_killed; + }; + if (_type == "coins") exitwith { + _object setVariable ["lastInventory",["forceUpdate"]]; + [_object,_objectID,_objectUID,_class] call server_obj_inv; + }; + ""; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/server_verifySender.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_verifySender.sqf new file mode 100755 index 0000000..8acc15b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/server_verifySender.sqf @@ -0,0 +1,35 @@ +/* + PVEH does not provide any information about the sender in A2, so + this is necessary to verify the sender was not spoofed. + + This is useful to hinder and identify cheaters who attempt mass deletion or creation of hive objects via PVS. +*/ + +private ["_clientKey","_exitReason","_function","_index","_objPos","_params","_player","_playerUID"]; + +_params = _this select 0; +_function = "Server_" + (_this select 1); +_objPos = _this select 2; //Can be object or position +_clientKey = _this select 3; +_playerUID = _this select 4; +_player = _this select 5; + +_index = dayz_serverPUIDArray find _playerUID; + +_exitReason = call { + //If object or player is null distance returns 9999+ + //If object or player was moved with setPos on client, position takes a second to update on server + //Coordinates can be used in place of object + if (_objPos distance _player > (Z_VehicleDistance + 10)) exitwith { + format["%1 error: Verification failed, player is too far from object. Distance: %2m/%3m limit PV ARRAY: %4",_function,round (_objPos distance _player),Z_VehicleDistance + 10,_params] + }; + if (_index < 0) exitwith { + format["%1 error: PUID NOT FOUND ON SERVER. PV ARRAY: %2",_function,_params] + }; + if (((dayz_serverClientKeys select _index) select 0 != owner _player) or ((dayz_serverClientKeys select _index) select 1 != _clientKey)) exitwith { + format["%1 error: CLIENT AUTH KEY INCORRECT OR UNRECOGNIZED. PV ARRAY: %2",_function,_params] + }; + ""; +}; + +_exitReason diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/spawn_ammosupply.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/spawn_ammosupply.sqf new file mode 100755 index 0000000..5e77a4d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/spawn_ammosupply.sqf @@ -0,0 +1,24 @@ +/* + Spawns several random "Supply_Crate_DZE" across map. + Lootable by destroying and then opening with crowbar. + Currently outputs vehicle ammo defined in Land_ammo_supply_wreck CfgVehicles class +*/ + +private ["_position","_veh","_istoomany"]; +// do not make _roadList or _buildingList private in this function + +_position = _roadList call BIS_fnc_selectRandom; +_position = _position modelToWorld [0,0,0]; +_position = [_position,5,20,5,0,2000,0] call BIS_fnc_findSafePos; + +if ((count _position) == 2) then { + _istoomany = _position nearObjects ["All",5]; + if ((count _istoomany) > 0) exitWith {}; + + //_veh = createVehicle ["Supply_Crate_DZE",_position, [], 0, "CAN_COLLIDE"]; + _veh = "Supply_Crate_DZE" createVehicle [0,0,0]; + _veh enableSimulation false; + _veh setDir round(random 360); + _veh setPos _position; + _veh setVariable ["ObjectID","1",true]; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/spawn_mineveins.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/spawn_mineveins.sqf new file mode 100755 index 0000000..5329dfc --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/spawn_mineveins.sqf @@ -0,0 +1,26 @@ +private ["_position","_veh","_istoomany","_spawnveh","_positions"]; + +_position = [getMarkerPos "center",0,(((getMarkerSize "center") select 1)*0.75),10,0,2000,0] call BIS_fnc_findSafePos; + +if ((count _position) == 2) then { + _positions = selectBestPlaces [_position, 500, "(1 + forest) * (1 + hills) * (1 - houses) * (1 - sea)", 10, 5]; + _position = (_positions call BIS_fnc_selectRandom) select 0; + _istoomany = _position nearObjects ["All",10]; + if (((count _istoomany) > 0) or (isOnRoad _position)) exitWith {}; + + _spawnveh = ["Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Silver_Vein_DZE","Silver_Vein_DZE","Silver_Vein_DZE","Gold_Vein_DZE","Gold_Vein_DZE"] call BIS_fnc_selectRandom; + //diag_log("DEBUG: Spawning a crashed " + _spawnveh + " with " + _spawnloot + " at " + str(_position)); + + _veh = _spawnveh createVehicle [0,0,0]; + _veh enableSimulation false; + _veh setDir round(random 360); + _veh setPos _position; + _veh setVariable ["ObjectID","1",true]; + _veh addEventHandler ["HandleDamage",{ + local _damage = _this select 2; + if ((_this select 4) == "Sledge_Swing_Ammo") then { + _damage = _damage*1.2; + }; + _damage + } ]; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/spawn_roadblocks.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/spawn_roadblocks.sqf new file mode 100755 index 0000000..1530415 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/spawn_roadblocks.sqf @@ -0,0 +1,19 @@ +private ["_position","_veh","_istoomany","_spawnveh"]; +// do not make _roadList or _buildingList private in this function + +_position = _roadList call BIS_fnc_selectRandom; +_position = _position modelToWorld [0,0,0]; +_position = [_position,0,10,5,0,2000,0] call BIS_fnc_findSafePos; + +if ((count _position) == 2) then { + _istoomany = _position nearObjects ["All",5]; + if ((count _istoomany) > 0) exitWith {}; + + _spawnveh = DZE_isWreck call BIS_fnc_selectRandom; + //_veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"]; + _veh = _spawnveh createVehicle [0,0,0]; + _veh enableSimulation false; + _veh setDir round(random 360); + _veh setPos _position; + _veh setVariable ["ObjectID","1",true]; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/spawn_vehicles.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/spawn_vehicles.sqf new file mode 100755 index 0000000..a740e4d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/spawn_vehicles.sqf @@ -0,0 +1,106 @@ +private ["_random","_lastIndex","_index","_vehicle","_velimit","_qty","_isCessna","_isMV22","_isShip","_isHeli","_isC130","_isPlane","_position","_dir","_istoomany","_veh","_objPosition","_iClass","_num","_allCfgLoots"]; +// do not make _roadList, _buildingList or _serverVehicleCounter private in this function +#include "\z\addons\dayz_code\loot\Loot.hpp" + +while {count AllowedVehiclesList > 0} do { + // BIS_fnc_selectRandom replaced because the index may be needed to remove the element + _index = floor random count AllowedVehiclesList; + _random = AllowedVehiclesList select _index; + _vehicle = _random select 0; + _velimit = _random select 1; + + _qty = {_x == _vehicle} count _serverVehicleCounter; + if (_qty <= _velimit) exitWith {}; // If under limit allow to proceed + + // vehicle limit reached, remove vehicle from list + // since elements cannot be removed from an array, overwrite it with the last element and cut the last element of (as long as order is not important) + _lastIndex = (count AllowedVehiclesList) - 1; + if (_lastIndex != _index) then {AllowedVehiclesList set [_index, AllowedVehiclesList select _lastIndex];}; + AllowedVehiclesList resize _lastIndex; +}; + +if (count AllowedVehiclesList == 0) then { + diag_log "DEBUG: unable to find suitable random vehicle to spawn"; +} else { + // add vehicle to counter for next pass + _serverVehicleCounter set [count _serverVehicleCounter,_vehicle]; + + // Find Vehicle Type to better control spawns + _isShip = _vehicle isKindOf "Ship"; // Any type of watercraft. + _isMV22 = _vehicle == "MV22_DZ"; // MV-22 is classified as a plane but it can take off vertically, so it is treated as a helicopter. + _isHeli = _vehicle isKindOf "Helicopter"; // All helicopters. + _isC130 = _vehicle == "C130J_US_EP1_DZ"; // C130s are too large to spawn in hangars. + _isCessna = _vehicle in ["GNT_C185C_DZ","GNT_C185R_DZ","GNT_C185_DZ","GNT_C185U_DZ"]; // Cessna models are unstable and should not spawn in hangars. + _isPlane = (_vehicle isKindOf "Plane" && {!_isCessna} && {!_isMV22} && {!_isC130}); // Cessna, MV-22, and C130 not allowed to spawn in hangars. + + call { + // Spawn boats anywhere on coast on water + if (_isShip) exitWith {_position = [getMarkerPos "center",0,((getMarkerSize "center") select 1),10,1,2000,1] call BIS_fnc_findSafePos;}; + // Spawn helicopters anywhere that is relatively flat + if (_isHeli || {_isMV22}) exitWith {_position = [getMarkerPos "center",0,((getMarkerSize "center") select 1),10,0,.15,0] call BIS_fnc_findSafePos;}; + // Spawn AN2 and GyroCopter in hangar and runway positions + if (_isPlane) exitWith { + if (count DZE_AllAircraftPositions > 0) then { // Custom airfield positions available + _position = DZE_AllAircraftPositions call BIS_fnc_selectRandom; _dir = _position select 1; _position = _position select 0; + } else { + _position = [getMarkerPos "center",0,((getMarkerSize "center") select 1),10,0,.15,0] call BIS_fnc_findSafePos; + }; + }; + // Spawn C130 and Cessna on runway positions + if (_isCessna || {_isC130}) exitWith { + if (count DZE_Runway_Positions > 0) then { // Custom airfield positions available + _position = DZE_Runway_Positions call BIS_fnc_selectRandom; _dir = _position select 1; _position = _position select 0; + } else { + _position = [getMarkerPos "center",0,((getMarkerSize "center") select 1),10,0,.15,0] call BIS_fnc_findSafePos; + }; + }; + // Spawn land vehicles around buildings and 50% near roads + if ((random 1) > 0.5) then { + _position = _roadList call BIS_fnc_selectRandom; + _position = _position modelToWorld [0,0,0]; + _position = [_position,0,10,10,0,2000,0] call BIS_fnc_findSafePos; + //diag_log("DEBUG: spawning near road " + str(_position)); + } else { + _position = _buildingList call BIS_fnc_selectRandom; + _position = _position modelToWorld [0,0,0]; + _position = [_position,0,40,5,0,2000,0] call BIS_fnc_findSafePos; + //diag_log("DEBUG: spawning around buildings " + str(_position)); + }; + }; + + // only proceed if two params otherwise BIS_fnc_findSafePos failed and may spawn in air + if ((count _position) == 2) then { + _position set [2,0]; + if (isNil "_dir") then { + _dir = round(random 180); + }; + _istoomany = _position nearObjects ["AllVehicles",50]; + if ((count _istoomany) > 0) exitWith {}; + + //_veh = createVehicle [_vehicle, _position, [], 0, "CAN_COLLIDE"]; + //_veh setPos _position; + _veh = _vehicle createVehicle [0,0,0]; + _veh setDir _dir; + _veh setPos _position; + _objPosition = getPosATL _veh; + + clearWeaponCargoGlobal _veh; + clearMagazineCargoGlobal _veh; + + // Add 0-3 loots to vehicle using random loot groups + _num = floor(random 4); + _allCfgLoots = ["Trash","Trash","Consumable","Consumable","Generic","Generic","MedicalLow","MedicalLow","clothes","tents","backpacks","Parts","pistols","AmmoCivilian"]; + + for "_x" from 1 to _num do { + _iClass = _allCfgLoots call BIS_fnc_selectRandom; + _lootGroupIndex = dz_loot_groups find _iClass; + Loot_InsertCargo(_veh, _lootGroupIndex, 1); + }; + + [_veh,[_dir,_objPosition],_vehicle,true,"0"] call server_publishVeh; + + if (_num > 0) then { + _vehiclesToUpdate set [count _vehiclesToUpdate,_veh]; + }; + }; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/ui_selectSlot.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/ui_selectSlot.sqf new file mode 100755 index 0000000..83d5c94 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/ui_selectSlot.sqf @@ -0,0 +1,106 @@ +//private ["_control","_button","_parent","_group","_pos","_item","_conf","_name","_cfgActions","_numActions","_height","_menu","_config","_type","_script","_outputOriented","_compile","_array","_outputClass","_outputType"]; +disableSerialization; +_control = _this select 0; +_button = _this select 1; +_parent = findDisplay 106; + +if (carryClick) then {carryClick = false;}; + +if (_button == 1) then { + if (animationState player in ["ainjppnemstpsnonwnondnon_rolltofront","amovppnemstpsnonwnondnon_healed"]) exitWith { + //Prevent bypassing unconscious wake up animation with bandage or other right click actions + localize "str_player_actionslimit" call dayz_rollingMessages; + }; + + private ["_conf","_name","_compile","_height","_item"]; + _group = _parent displayCtrl 6902; + + _pos = ctrlPosition _group; + + _item = gearSlotData _control; + if ( //No right click action + (!DZE_SelfTransfuse && {_item in ["ItemBloodbag","wholeBloodBagANEG","wholeBloodBagAPOS","wholeBloodBagBNEG","wholeBloodBagBPOS","wholeBloodBagABNEG","wholeBloodBagABPOS","wholeBloodBagONEG","wholeBloodBagOPOS"]}) + ) exitWith {}; + + if (mouseOverCarry) then { + _item = DayZ_onBack; + carryClick = true; + }; + + _pos set [0,((_this select 2) + 0.46)]; + _pos set [1,((_this select 3) + 0.07)]; + + _conf = configFile >> "cfgMagazines" >> _item; + if (!isClass _conf) then { + _conf = configFile >> "cfgWeapons" >> _item; + }; + _name = getText(_conf >> "displayName"); + + _cfgActions = _conf >> "ItemActions"; + _numActions = (count _cfgActions); + _height = 0; + if (!dayz_groupSystem && {_item == "ItemRadio"}) then {_numActions = 1;}; // Used to bypass the group action when not enabled. + + //Populate Menu + for "_i" from 0 to (_numActions - 1) do + { + _menu = _parent displayCtrl (1600 + _i); + _menu ctrlShow true; + _config = (_cfgActions select _i); + _type = getText (_config >> "text"); + _script = getText (_config >> "script"); + _outputOriented = getNumber (_config >> "outputOriented") == 1; + _height = _height + (0.025 * safezoneH); + _compile = format["_id = '%2' %1;",_script,_item]; + uiNamespace setVariable ['uiControl', _control]; + if (_outputOriented) then { + /* + This flag means that the action is output oriented + the output class will then be transferred to the script + and the type used for the name + */ + _array = getArray (_config >> "output"); + _outputClass = _array select 0; + _outputType = _array select 1; + _name = getText (configFile >> _outputType >> _outputClass >> "displayName"); + _compile = format["_id = ['%2',%3] %1;",_script,_item,_array]; + }; + + _menu ctrlSetText format[_type,_name]; + _menu ctrlSetEventHandler ["ButtonClick",_compile]; + }; + + _isKey = ((["ItemKey",_item] call fnc_inString) && (_item != "ItemKeyKit")); + + { + private["_classname","_text","_execute","_condition","_option"]; + _classname = _x select 0; + _text = _x select 1; + _execute = _x select 2; + _condition = _x select 3; + if (count _this > 4) then {_option = _x select 4}; + + if ((_item == _classname || (_isKey && (_className == "ItemKey"))) && (call compile _condition)) then { + _menu = _parent displayCtrl (1600 + _numActions); + _menu ctrlShow true; + _height = _height + (0.025 * safezoneH); + uiNamespace setVariable ['uiControl', _control]; + _menu ctrlSetText _text; + if (_isKey && (_className == "ItemKey")) then { + _menu ctrlSetEventHandler ["ButtonClick",format ["[%1,%2] %3",str _item,_option,_execute]]; + } else { + _menu ctrlSetEventHandler ["ButtonClick",_execute]; + }; + _numActions = _numActions + 1; + }; + } forEach DZE_CLICK_ACTIONS; + + _pos set [3,_height]; + + //hint format["Obj: %1 \nHeight: %2\nPos: %3",_item,_height,_grpPos]; + + _group ctrlShow true; + ctrlSetFocus _group; + _group ctrlSetPosition _pos; + _group ctrlCommit 0; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/updateObject_functions.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/updateObject_functions.sqf new file mode 100755 index 0000000..78adb87 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/updateObject_functions.sqf @@ -0,0 +1,171 @@ +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +server_obj_pos = { + local _object = _this select 0; + local _objectID = _this select 1; + local _class = _this select 2; + + local _position = getPosATL _object; + //_worldspace = [round (direction _object),_position]; + local _worldspace = [getDir _object, _position] call AN_fnc_formatWorldspace; // Precise Base Building 1.0.5 + local _fuel = [0, fuel _object] select (_class isKindOf "AllVehicles"); + + local _key = format["CHILD:305:%1:%2:%3:",_objectID,_worldspace,_fuel]; + _key call server_hiveWrite; + + #ifdef OBJECT_DEBUG + diag_log ("HIVE: WRITE: "+ str(_key)); + #endif +}; + +server_obj_inv = { + local _object = _this select 0; + local _objectID = _this select 1; + local _objectUID = _this select 2; + local _class = _this select 3; + + local _inventory = call { + if (DZE_permanentPlot && {_class == "Plastic_Pole_EP1_DZ"}) exitwith { + _object getVariable ["plotfriends", []] //We're replacing the inventory with UIDs for this item + }; + if (DZE_doorManagement && {_class in DZE_DoorsLocked}) exitwith { + _object getVariable ["doorfriends", []] //We're replacing the inventory with UIDs for this item + }; + if (_class isKindOf "TrapItems") exitwith { + [["armed",_object getVariable ["armed",false]]] + }; + [getWeaponCargo _object, getMagazineCargo _object, getBackpackCargo _object] + }; + + + local _previous = str(_object getVariable["lastInventory",[]]); + if (str _inventory != _previous) then { + local _key = ""; + _object setVariable ["lastInventory",_inventory]; + if (_objectID == "0") then { + _key = format["CHILD:309:%1:",_objectUID] + str _inventory + ":"; + } else { + _key = format["CHILD:303:%1:",_objectID] + str _inventory + ":"; + }; + + if (Z_SingleCurrency) then { + local _coins = _object getVariable ["cashMoney", -1]; //set to invalid value if getVariable fails to prevent overwriting of coins in DB + _key = _key + str _coins + ":"; + }; + + #ifdef OBJECT_DEBUG + diag_log ("HIVE: WRITE: "+ str(_key)); + #endif + + _key call server_hiveWrite; + }; +}; + +server_obj_dam = { + //Allow dmg process + + local _object = _this select 0; + local _objectID = _this select 1; + local _objectUID = _this select 2; + local _forced = _this select 3; + local _totalDmg = _this select 4; + + local _recorddmg = false; + local _hitpoints = _object call vehicle_getHitpoints; + local _damage = damage _object; + local _array = []; + local _allFixed = true; + local _lastUpdate = _object getVariable ["lastUpdate",diag_tickTime]; + + { + local _hit = [_object,_x] call object_getHit; + if ((_hit select 0) > 0) then { + + _allFixed = false; + _array set [count _array,[(_hit select 1),(_hit select 0)]]; + //diag_log format ["Section Part: %1, Dmg: %2",(_hit select 1),(_hit select 0)]; + } else { + _array set [count _array,[(_hit select 1),0]]; + }; + } count _hitpoints; + + if (_allFixed && !_totalDmg && _forced) then {_object setDamage 0;}; + + if (_forced) then { + if (_object in needUpdate_objects) then {needUpdate_objects = needUpdate_objects - [_object];}; + _recorddmg = true; + } else { + //Prevent damage events for the first 10 seconds of the servers live. + if (diag_ticktime - _lastUpdate > 10) then { + if !(_object in needUpdate_objects) then { + //diag_log format["DEBUG: Monitoring: %1",_object]; + needUpdate_objects set [count needUpdate_objects, _object]; + _recorddmg = true; + _object setVariable ["lastUpdate",diag_ticktime]; + }; + }; + }; + + if (_recorddmg) then { + local _key = ""; + if (_objectID == "0") then { + _key = format["CHILD:306:%1:",_objectUID] + str _array + ":" + str _damage + ":"; + } else { + _key = format["CHILD:306:%1:",_objectID] + str _array + ":" + str _damage + ":"; + }; + #ifdef OBJECT_DEBUG + diag_log ("HIVE: WRITE: "+ str(_key)); + #endif + + _key call server_hiveWrite; + }; +}; + +server_obj_killed = { + local _object = _this select 0; + local _objectID = _this select 1; + local _objectUID = _this select 2; + local _playerUID = _this select 3; + local _clientKey = _this select 4; + local _class = _this select 5; + local _key = ""; + + local _index = dayz_serverPUIDArray find _playerUID; + + local _exitReason = call { + //Can't use owner because player may already be dead, can't use distance because player may be far from vehicle wreck + if (_clientKey == dayz_serverKey) exitwith {""}; + if (_index < 0) exitwith { + format["Server_UpdateObject error: PUID NOT FOUND ON SERVER. PV ARRAY: %1",_this] + }; + if ((dayz_serverClientKeys select _index) select 1 != _clientKey) exitwith { + format["Server_UpdateObject error: CLIENT AUTH KEY INCORRECT OR UNRECOGNIZED. PV ARRAY: %1",_this] + }; + if (alive _object and {!(_class isKindOf "TentStorage_base" or _class isKindOf "IC_Tent")}) exitwith { + format["Server_UpdateObject error: object kill request on living object. PV ARRAY: %1",_this] + }; + ""; + }; + + if (_exitReason != "") exitWith {diag_log _exitReason}; + _object setDamage 1; + + if (_objectID == "0") then { + //Need to update hive to make a new call to allow UID to be updated for a killed event + //_key = format["CHILD:306:%1:%2:%3:",_objectUID,[],1]; + _key = format["CHILD:310:%1:",_objectUID]; + } else { + _key = format["CHILD:306:%1:%2:%3:",_objectID,[],1]; + }; + _key call server_hiveWrite; + + if (_playerUID == "SERVER") then { + #ifdef OBJECT_DEBUG + diag_log format["DELETE: Server requested destroy on object %1 ID:%2 UID:%3",_class,_objectID,_objectUID]; + #endif + } else { + diag_log format["DELETE: PUID(%1) requested destroy on object %2 ID:%3 UID:%4",_playerUID,_class,_objectID,_objectUID]; + }; + + if (_class in DayZ_removableObjects || {_class in DZE_isRemovable}) then {[_objectID,_objectUID,_object] call server_deleteObjDirect;}; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/zombie_Wildgenerate.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/zombie_Wildgenerate.sqf new file mode 100755 index 0000000..14fa1be --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/zombie_Wildgenerate.sqf @@ -0,0 +1,50 @@ +private ["_position","_doLoiter","_unitTypes","_array","_agent","_type","_radius","_method","_rndx","_rndy","_counter","_amount","_wildsdone"]; +_unitTypes = _this select 0; +_amount = _this select 1; +//_doLoiter = true; +_wildsdone = true; +_counter = 0; + +while {_counter < _amount} do { + //_loot = ""; + //_array = []; + _agent = objNull; + _type = _unitTypes call BIS_fnc_selectRandom; + + //Create the Group and populate it + //diag_log ("Spawned: " + _type); + //_radius = 0; + _method = "CAN_COLLIDE"; + + _position = [getMarkerPos "center",1,6500,1] call fn_selectRandomLocation; + if ([_position] call DZE_SafeZonePosCheck) exitWith {}; + //Create Zed + _agent = createAgent [_type, _position, [], 1, _method]; + //Set Random Direction + _agent setDir floor(random 360); + //Loiter State + _agent setVariable ["doLoiter",true]; //Might not be used. + //Zed stance + if (random 1 > 0.7) then { + _agent setUnitPos "Middle"; + }; + //Set home location to loiter around + _position = getPosATL _agent; + _agent setVariable ["homePos",_position,true]; + //Store _agentobject + _agent setVariable["agentObject",_agent,true]; + + //add to counter + _counter = _counter + 1; + + //Start behavior + //_id = [_agent] execFSM "\z\AddOns\dayz_code\system\zombie_wildagent.fsm"; + //_agent setVariable [ "fsmid", _id ]; + + //Disable all zed systems + _agent enableSimulation false; + + //diag_log format ["CREATE WILD: Active: %1, Waiting: %2",_counter,(_amount - _counter)] +}; + +_wildsdone diff --git a/@DayZ_Epoch_Server/addons/dayz_server/compile/zombie_findOwner.sqf b/@DayZ_Epoch_Server/addons/dayz_server/compile/zombie_findOwner.sqf new file mode 100755 index 0000000..186f23f --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/compile/zombie_findOwner.sqf @@ -0,0 +1,8 @@ +private["_unit"]; +_unit = _this select 0; +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +#ifdef SERVER_DEBUG +diag_log ("CLEANUP: DELETE UNCONTROLLED ZOMBIE: " + (typeOf _unit) + " OF: " + str(_unit) ); +#endif +deleteVehicle _unit; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/config.cpp b/@DayZ_Epoch_Server/addons/dayz_server/config.cpp new file mode 100755 index 0000000..a8110fd --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/config.cpp @@ -0,0 +1,8 @@ +class CfgPatches { + class dayz_server { + units[] = {}; + weapons[] = {}; + requiredVersion = 0.1; + requiredAddons[] = {"dayz_code"}; + }; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/eventHandlers/server_eventHandler.sqf b/@DayZ_Epoch_Server/addons/dayz_server/eventHandlers/server_eventHandler.sqf new file mode 100755 index 0000000..8c57ccf --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/eventHandlers/server_eventHandler.sqf @@ -0,0 +1,104 @@ +"PVDZ_plr_Death" addPublicVariableEventHandler {_id = (_this select 1) spawn server_playerDied}; +"PVDZ_plr_Save" addPublicVariableEventHandler {_id = (_this select 1) call server_playerSync;}; +"PVDZ_plr_SwitchMove" addPublicVariableEventHandler {((_this select 1) select 0) switchMove ((_this select 1) select 1);}; //Needed to execute switchMove on server machine. rSwitchMove only executes on other clients +"PVDZ_obj_Publish" addPublicVariableEventHandler {(_this select 1) call server_publishObj}; //Used by built items (Epoch and Vanilla) +"PVDZ_veh_Save" addPublicVariableEventHandler {(_this select 1) call server_updateObject}; +"PVDZ_plr_Login1" addPublicVariableEventHandler {_id = (_this select 1) call server_playerLogin}; +"PVDZ_plr_Login2" addPublicVariableEventHandler {(_this select 1) call server_playerSetup}; +"PVDZ_plr_LoginRecord" addPublicVariableEventHandler {_id = (_this select 1) spawn dayz_recordLogin}; +"PVDZ_obj_Destroy" addPublicVariableEventHandler {(_this select 1) call server_deleteObj}; +"PVDZ_plr_Delete" addPublicVariableEventHandler {(_this select 1) spawn sched_co_deleteVehicle}; // Delete hided players +"PVDZ_send" addPublicVariableEventHandler {(_this select 1) call server_sendToClient}; +//"PVDZ_dayzCarBomb" addPublicVariableEventHandler {[_this select 1] execVM "\z\addons\dayz_code\actions\detonate_bomb.sqf";}; +//[player,[medical Array]]; +"PVDZ_playerMedicalSync" addPublicVariableEventHandler { (_this select 1) call server_medicalSync; ((_this select 1) select 0) setVariable["Medical",((_this select 1) select 1),false]; }; //diag_log format["%1 - %2",((_this select 1) select 0),((_this select 1) select 1)]; }; + +// EPOCH ADDITIONS +"PVDZE_maintainArea" addPublicVariableEventHandler {(_this select 1) spawn server_maintainArea}; +"PVDZE_obj_Swap" addPublicVariableEventHandler {(_this select 1) spawn server_swapObject}; //Used to downgrade and upgrade Epoch buildables +"PVDZE_veh_Publish2" addPublicVariableEventHandler {(_this select 1) call server_publishVeh2}; //Used to purchase vehicles at traders +"PVDZE_veh_Upgrade" addPublicVariableEventHandler {(_this select 1) spawn server_publishVeh3}; //Used for car upgrades +"PVDZE_obj_Trade" addPublicVariableEventHandler {(_this select 1) spawn server_tradeObj}; //Logs trading +"PVDZE_plr_DeathB" addPublicVariableEventHandler {(_this select 1) spawn server_deaths}; +"PVDZE_handleSafeGear" addPublicVariableEventHandler {(_this select 1) call server_handleSafeGear}; +"SK_changeCode" addPublicVariableEventHandler {(_this select 1) call server_changeCode}; + +if (dayz_groupSystem) then { + "PVDZ_Server_UpdateGroup" addPublicVariableEventHandler {(_this select 1) spawn server_updateGroup}; +}; + +"PVDZE_PingSend" addPublicVariableEventHandler {PVDZE_PingReceived = 1; (owner (_this select 1)) publicVariableClient "PVDZE_PingReceived";}; + +"PVDZ_Server_Simulation" addPublicVariableEventHandler { + local _agent = (_this select 1) select 0; + local _control = (_this select 1) select 1; + + _agent enableSimulation _control; +}; + +"PVDZ_obj_Delete" addPublicVariableEventHandler { + local _obj = (_this select 1) select 0; + local _player = (_this select 1) select 1; + local _type = typeOf _obj; + local _dis = _player distance _obj; + + if (_type in Dayz_plants) then { + if (_dis < 3) then { + deleteVehicle _obj; + }; + }; + + if (_type == "Blood_Trail_DZ") then { + deleteVehicle _obj; + }; + + //Make sure object is a cardboardbox and make sure the player distance is under 15 meters from object + if (_type iskindOf "CardboardBox") then { + if (_dis < 15) then { + deleteVehicle _obj; + }; + }; +}; + +"PVDZ_serverStoreVar" addPublicVariableEventHandler { + local _obj = (_this select 1) select 0; + local _name = (_this select 1) select 1; + local _value = (_this select 1) select 2; + + _obj setVariable [_name, _value]; +}; + +"PVDZ_sec_atp" addPublicVariableEventHandler { + local _y = _this select 1; + + call { + if (typeName _y == "STRING") exitwith { // just some logs from the client + diag_log _y; + }; + if (count _y == 2) exitwith { // wrong side + diag_log format["P1ayer %1 reports possible 'side' hack. Server may be compromised!",(_y select 1) call fa_plr2Str]; + }; + // player hit + local _source = _y select 1; + if (!isNull _source) then { + local _unit = _y select 0; + diag_log format ["P1ayer %1 hit by %2 %3 from %4 meters in %5 for %6 damage", + _unit call fa_plr2Str, if (!isPlayer _source && alive _source) then {"AI"} else {_source call fa_plr2Str}, _y select 2, _y select 3, _y select 4, _y select 5]; + }; + }; +}; + +"PVDZ_objgather_Knockdown" addPublicVariableEventHandler { + local _tree = (_this select 1) select 0; + local _player = (_this select 1) select 1; + local _dis = _player distance _tree; + local _name = if (alive _player) then {name _player} else {"DeadPlayer"}; + local _uid = getPlayerUID _player; + local _treeModel = _tree call fn_getModelName; + + if (_dis < 30 && {_treeModel in dayz_trees or (_treeModel in dayz_plant)} && {_uid != ""}) then { + _tree setDamage 1; + dayz_choppedTrees set [count dayz_choppedTrees,_tree]; + diag_log format["Server setDamage on tree or plant %1 chopped down by %2(%3)",_treeModel,_name,_uid]; + }; +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/eventHandlers/server_sendToClient.sqf b/@DayZ_Epoch_Server/addons/dayz_server/eventHandlers/server_sendToClient.sqf new file mode 100755 index 0000000..d436485 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/eventHandlers/server_sendToClient.sqf @@ -0,0 +1,163 @@ +private ["_unit","_variable","_arraytosend","_owner","_vehicle","_qty","_exitReason"]; +//Inbound [_unit,"PVCDZ_hlt_Transfuse",[_unit,player,1000]] +_unit = _this select 0; +_variable = _this select 1; +_arraytosend = _this select 2; +_owner = owner _unit; +_exitReason = ""; + +// Add security for higher risk PVDZ_Send usage +if (_variable in ["Unconscious","DragPlayer","DropPlayer","Legs","RemoveObject","CarryPlayer","LoadWounded","UnloadWounded"]) then { + private ["_verifyArray","_objPos","_clientKey","_activatingPlayer","_playerUID"]; + _verifyArray = _this select 3; + _objPos = _verifyArray select 0; // can be object or position + _clientKey = _verifyArray select 1; + _activatingPlayer = _verifyArray select 2; + _playerUID = getPlayerUID _activatingPlayer; + _exitReason = [_verifyArray,_variable,_objPos,_clientKey,_playerUID,_activatingPlayer] call server_verifySender; + //diag_log text format ["server_sendToClient: Player [%1:%2] used function %3 on/at %4.",(name _activatingPlayer),_playerUID,_variable,_objPos]; +}; + +if (_exitReason != "") exitWith {diag_log _exitReason}; + +//diag_log format ["%1, %2, %3, %4", _unit, _variable, _arraytosend, _owner]; + +call { + if (_variable == "VehHandleDam") exitWith { + _vehicle = _arraytosend select 0; + if (local _vehicle) then { + _arraytosend call fnc_veh_handleDam; + } else { + PVCDZ_veh_SH = _arraytosend; + _owner publicVariableClient "PVCDZ_veh_SH"; + }; + }; + + if (_variable == "SetFuel") exitWith { + _vehicle = _arraytosend select 0; + _qty = _arraytosend select 1; + if (local _vehicle) then { + _vehicle setFuel _qty; + } else { + PVCDZ_veh_SetFuel = _arraytosend; + _owner publicVariableClient "PVCDZ_veh_SetFuel"; + }; + }; + + if (_variable == "SetEngineState") exitWith { + _vehicle = _arraytosend select 0; + _state = _arraytosend select 1; + if (local _vehicle) then { + _vehicle engineOn _state; + _vehicle setOwner _owner; + } else { + PVCDZ_veh_engineSwitch = _arraytosend; + _owner publicVariableClient "PVCDZ_veh_engineSwitch"; + }; + }; + + if (_variable == "GutBody") exitWith { + PVCDZ_obj_GutBody = _arraytosend; + _owner publicVariableClient "PVCDZ_obj_GutBody"; + }; + + if (_variable == "Humanity") exitWith { + PVCDZ_plr_Humanity = _arraytosend select 0; + _owner publicVariableClient "PVCDZ_plr_Humanity"; + //diag_log ("Humanity" +str(PVCDZ_plr_Humanity)); + }; + + if (_variable == "dayzSetDate") exitWith { + dayzSetDate = dayz_storeTimeDate; + _owner publicVariableClient "dayzSetDate"; + //diag_log ("Time and date: " +str (dayz_storeTimeDate)); + }; + + if (_variable == "Transfuse") exitWith { + PVCDZ_hlt_Transfuse = _arraytosend; + _owner publicVariableClient "PVCDZ_hlt_Transfuse"; + }; + + if (_variable == "Painkiller") exitWith { + PVCDZ_hlt_PainK = _arraytosend; + _owner publicVariableClient "PVCDZ_hlt_PainK"; + }; + + if (_variable == "Morphine") exitWith { + PVCDZ_hlt_Morphine = _arraytosend; + _owner publicVariableClient "PVCDZ_hlt_Morphine"; + }; + + if (_variable == "Epinephrine") exitWith { + PVCDZ_hlt_Epi = _arraytosend; + _owner publicVariableClient "PVCDZ_hlt_Epi"; + }; + + if (_variable == "Bandage") exitWith { + PVCDZ_hlt_Bandage = _arraytosend; + _owner publicVariableClient "PVCDZ_hlt_Bandage"; + }; + + if (_variable == "Antibiotics") exitWith { + PVCDZ_hlt_AntiB = _arraytosend; + _owner publicVariableClient "PVCDZ_hlt_AntiB"; + }; + + if (_variable == "AntiBacterialWipe") exitWith { + PVCDZ_hlt_Wipe = _arraytosend; + _owner publicVariableClient "PVCDZ_hlt_Wipe"; + }; + + if (_variable == "Legs") exitWith { + PVCDZ_plr_Legs = _arraytosend; + _owner publicVariableClient "PVCDZ_plr_Legs"; + }; + + if (_variable == "tagFriendly") exitWith { + PVDZE_plr_FriendRQ = _arraytosend; + _owner publicVariableClient "PVDZE_plr_FriendRQ"; + }; + + if (_variable == "Unconscious") exitWith { + PVDZ_receiveUnconscious = _arraytosend; + _owner publicVariableClient "PVDZ_receiveUnconscious"; + }; + + if (_variable == "DragPlayer") exitWith { + PVDZ_drg_RaDrag = _arraytosend; + _owner publicVariableClient "PVDZ_drg_RaDrag"; + }; + + if (_variable == "DropPlayer") exitWith { + PVDZ_drg_RaDrop = _arraytosend; + _owner publicVariableClient "PVDZ_drg_RaDrop"; + }; + + if (_variable == "CarryPlayer") exitWith { + PVDZ_drg_RaCarry = _arraytosend; + _owner publicVariableClient "PVDZ_drg_RaCarry"; + }; + + if (_variable == "LoadWounded") exitWith { + PVDZ_drg_RaLW = _arraytosend; + _owner publicVariableClient "PVDZ_drg_RaLW"; + }; + + if (_variable == "UnloadWounded") exitWith { + PVDZ_drg_RaUW = _arraytosend; + _owner publicVariableClient "PVDZ_drg_RaUW"; + }; + + if (_variable == "RemoveObject") exitWith { + PVDZE_obj_Remove = _arraytosend; + { + _pOwner = owner _x; + if (isPlayer _x && {_pOwner != _owner}) then { + _pOwner publicVariableClient "PVDZE_obj_Remove"; + }; + } forEach playableUnits; + }; + + //default + diag_log format ["%1, %2, %3, %4", _unit, _variable, _arraytosend, _owner]; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/init/mission_check.sqf b/@DayZ_Epoch_Server/addons/dayz_server/init/mission_check.sqf new file mode 100755 index 0000000..0ddce1b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/init/mission_check.sqf @@ -0,0 +1,53 @@ +//Temporary check for A2OA mission override exploit. +//This bug should be fixed in the next EOL patch. +//Put this code at the bottom of dayz_server\init\server_functions.sqf + +//List of files in your mission to check. For example, you may want to add 'custom\variables.sqf' etc. +//Remove any you aren't using +_files = [ + 'description.ext','init.sqf','mission.sqm','rules.sqf' +]; + +_list = []; +{ + _file = toArray (toLower(preprocessFile _x)); + _sum = 0; + _count = {_sum = _sum + _x; true} count _file; + if (_count > 999999) then {_count = _count mod 999999}; //Prevent scientific notation when converting to string below + if (_sum > 999999) then {_sum = _sum mod 999999}; + _list set [count _list,[_count,_sum]]; +} forEach _files; + +//Check mission integrity on all clients +_temp = "HeliHEmpty" createVehicle [0,0,0]; +_temp setVehicleInit (str formatText[" + if (isServer) exitWith {}; + + _list = []; + { + _file = toArray (toLower(preprocessFile _x)); + _sum = 0; + _count = {_sum = _sum + _x; true} count _file; + if (_count > 999999) then {_count = _count mod 999999}; + if (_sum > 999999) then {_sum = _sum mod 999999}; + _list set [count _list,[_count,_sum]]; + } forEach %1; + + _file = -1; + { + if ((_x select 0 != (_list select _forEachIndex) select 0) or (_x select 1 != (_list select _forEachIndex) select 1)) then { + _file = _forEachIndex; + }; + } forEach %2; + + if (_file != -1) then { + MISSION_CHECK = if ((_list select _file) select 0 < 49999) then {preprocessFileLineNumbers (%1 select _file)} else {'TOO BIG'}; + publicVariableServer 'MISSION_CHECK'; + [] spawn { + uiSleep 1; + {(findDisplay _x) closeDisplay 2;} count [0,8,12,18,46,70]; + }; + }; +",_files,_list]); + +processInitCommands; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/init/server_functions.sqf b/@DayZ_Epoch_Server/addons/dayz_server/init/server_functions.sqf new file mode 100755 index 0000000..2fd6132 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/init/server_functions.sqf @@ -0,0 +1,246 @@ +#include "\z\addons\dayz_server\adminTools\init.sqf" +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +waitUntil {!isNil "bis_fnc_init"}; + +BIS_MPF_remoteExecutionServer = { + if ((_this select 1) select 2 == "JIPrequest") then { + [nil,(_this select 1) select 0,"loc",rJIPEXEC,[any,any,"per","execVM","ca\Modules\Functions\init.sqf"]] call RE; + }; +}; + +call compile preprocessFileLineNumbers "\z\addons\dayz_code\util\compile.sqf"; +call compile preprocessFileLineNumbers "\z\addons\dayz_code\loot\init.sqf"; + +BIS_Effects_Burn = {}; +dayz_disconnectPlayers = []; +dayz_serverKey = [59]; //makes sure client is kicked by publicvariableval.txt if they try to send it +for "_i" from 1 to 12 do { + dayz_serverKey set [_i, ceil(random 128)]; +}; +dayz_serverKey = toString dayz_serverKey; +server_playerLogin = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerLogin.sqf"; +server_playerSetup = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSetup.sqf"; +server_onPlayerDisconnect = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_onPlayerDisconnect.sqf"; +call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\updateObject_functions.sqf"; +server_updateObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_updateObject.sqf"; +server_playerDied = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDied.sqf"; +server_publishObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishObject.sqf"; //Creates the object in DB +server_deleteObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_deleteObj.sqf"; //Removes the object from the DB +server_deleteObjDirect = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_deleteObjDirect.sqf"; //Removes the object from the DB, NO AUTH, ONLY CALL FROM SERVER, NO PV ACCESS +server_playerSync = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSync.sqf"; +zombie_findOwner = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\zombie_findOwner.sqf"; +//server_Wildgenerate = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\zombie_Wildgenerate.sqf"; +base_fireMonitor = compile preprocessFileLineNumbers "\z\addons\dayz_code\system\fire_monitor.sqf"; +spawnComposition = compile preprocessFileLineNumbers "ca\modules\dyno\data\scripts\objectMapper.sqf"; //"\z\addons\dayz_code\compile\object_mapper.sqf"; +server_sendToClient = compile preprocessFileLineNumbers "\z\addons\dayz_server\eventHandlers\server_sendToClient.sqf"; +server_verifySender = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_verifySender.sqf"; + +// EPOCH ADDITIONS +server_swapObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_swapObject.sqf"; //Used to downgrade and upgrade Epoch buildables +server_publishVeh = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle.sqf"; //Used to spawn random vehicles by server +server_publishVeh2 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle2.sqf"; //Used to purchase vehicles at traders +server_publishVeh3 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3.sqf"; //Used for car upgrades +server_tradeObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_tradeObject.sqf"; +server_deaths = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDeaths.sqf"; +server_maintainArea = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_maintainArea.sqf"; +server_checkIfTowed = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_checkIfTowed.sqf"; +server_handleSafeGear = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_handleSafeGear.sqf"; +server_spawnTraders = compile preprocessFile "\z\addons\dayz_server\compile\server_spawnTraders.sqf"; +server_updateGroup = compile preprocessFileLineNumbers "\z\addons\dayz_code\groups\server_updateGroup.sqf"; +server_changeCode = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_changeCode.sqf"; + +spawn_ammosupply = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\spawn_ammosupply.sqf"; +spawn_mineveins = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\spawn_mineveins.sqf"; +spawn_roadblocks = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\spawn_roadblocks.sqf"; +spawn_vehicles = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\spawn_vehicles.sqf"; +call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\init.sqf"; + +fnc_veh_setFixServer = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\veh_setFixServer.sqf"; //process the hit as a NORMAL damage (useful for persistent vehicles) + +server_medicalSync = { + local _player = _this select 0; + local _array = _this select 1; + + _player setVariable ["USEC_isDead",(_array select 0)]; //0 + _player setVariable ["NORRN_unconscious",(_array select 1)]; //1 + _player setVariable ["USEC_infected",(_array select 2)]; //2 + _player setVariable ["USEC_injured",(_array select 3)]; //3 + _player setVariable ["USEC_inPain",(_array select 4)]; //4 + _player setVariable ["USEC_isCardiac",(_array select 5)]; //5 + _player setVariable ["USEC_lowBlood",(_array select 6)]; //6 + _player setVariable ["USEC_BloodQty",(_array select 7)]; //7 + // _wounds; //8 + // [_legs,_arms]; //9 + _player setVariable ["unconsciousTime",(_array select 10)]; //10 + _player setVariable ["blood_type",(_array select 11)]; //11 + _player setVariable ["rh_factor",(_array select 12)]; //12 + _player setVariable ["messing",(_array select 13)]; //13 + _player setVariable ["blood_testdone",(_array select 14)]; //14 +}; + +vehicle_handleServerKilled = { + local _unit = _this select 0; + + [_unit,"killed",false,false,"SERVER",dayz_serverKey] call server_updateObject; + _unit removeAllMPEventHandlers "MPKilled"; + _unit removeAllEventHandlers "Killed"; + _unit removeAllEventHandlers "HandleDamage"; + _unit removeAllEventHandlers "GetIn"; + _unit removeAllEventHandlers "GetOut"; +}; + +check_publishobject = { + local _object = _this select 0; + local _playername = _this select 1; + local _allowed = false; + + #ifdef OBJECT_DEBUG + diag_log format["DEBUG: Checking if Object: %1 is allowed, published by %2",_object,_playername]; + #endif + + if ((typeOf _object) in DayZ_SafeObjects || (_object getVariable ["EAT_Building",0] == 1)) then { + //if ((typeOf _object) in DayZ_SafeObjects) then { + _allowed = true; + }; + + #ifdef OBJECT_DEBUG + local _saveObject = "DayZ_SafeObjects"; + diag_log format["DEBUG: Object: %1 published by %2 is allowed by %3",_object,_playername,_saveObject]; + #endif + + _allowed +}; + +server_hiveWrite = { + //diag_log ("ATTEMPT WRITE: " + _this); + local _data = "HiveExt" callExtension _this; + //diag_log ("WRITE: " +str(_data)); +}; + +server_hiveReadWrite = { + local _key = _this; + //diag_log ("ATTEMPT READ/WRITE: " + _key); + local _data = "HiveExt" callExtension _key; + //diag_log ("READ/WRITE: " +str(_data)); + local _resultArray = call compile str formatText["%1", _data]; + if (isNil "_resultArray") then {_resultArray = "HIVE CONNECTION ERROR";}; + _resultArray +}; + +onPlayerDisconnected "[_uid,_name] call server_onPlayerDisconnect;"; + +server_getStatsDiff = { + local _player = _this select 0; + local _playerUID = _this select 1; + local _result = []; + local _statsArray = missionNamespace getVariable _playerUID; + local _new = 0; + local _old = 0; + + if (isNil "_statsArray") exitWith { + diag_log format["Server_getStatsDiff error: playerUID %1 not found on server",_playerUID]; + [0,0,0,0,0] + }; + + { + _new = _player getVariable [_x,0]; + _old = _statsArray select _forEachIndex; + _result set [_forEachIndex, (_new - _old)]; + _statsArray set [_forEachIndex, _new]; //updates original var too + } forEach ["humanity","zombieKills","headShots","humanKills","banditKills"]; + + #ifdef PLAYER_DEBUG + diag_log format["Server_getStatsDiff - Object:%1 Diffs:%2 New:%3",_player,_result,_statsArray]; + #endif + + _result +}; + +//seems max is 19 digits +dayz_objectUID2 = { + local _dir = _this select 0; + local _time = round diag_tickTime; + if (_time > 99999) then {_time = round(random 99999);}; //prevent overflow if server isn't restarted + local _key = ""; + local _position = _this select 1; + _key = format["%1%2%3%4", round(_time + abs(_position select 0)), round(_dir), round(abs(_position select 1)), _time]; + _key; +}; + +dayz_recordLogin = { + local _key = format["CHILD:103:%1:%2:%3:",_this select 0,_this select 1,_this select 2]; + _key call server_hiveWrite; + + local _status = call { + if ((_this select 2) == 0) exitwith { "CLIENT LOADED & PLAYING" }; + if ((_this select 2) == 1) exitwith { "LOGIN PUBLISHING, Location " +(_this select 4) }; + if ((_this select 2) == 2) exitwith { "LOGGING IN" }; + if ((_this select 2) == 3) exitwith { "LOGGED OUT, Location " +(_this select 4) }; + }; + + local _name = if (typeName (_this select 3) == "ARRAY") then { toString (_this select 3) } else { _this select 3 }; + diag_log format["INFO - Player: %1(UID:%3/CID:%4) Status: %2",_name,_status,(_this select 0),(_this select 1)]; +}; + +generate_new_damage = { + local _damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100; + _damage +}; + +server_hiveReadWriteLarge = { + local _key = _this; + local _data = "HiveExt" callExtension _key; + local _resultArray = call compile _data; + _resultArray +}; + +// coor2str: convert position to a GPS coordinates +fa_coor2str = { + local _pos = +(_this); + if (count _pos < 1) then { + _pos = [0,0]; + } else { + if (count _pos < 2) then { _pos = [_pos select 0,0]; }; + }; + local _nearestCity = nearestLocations [_pos, ["NameCityCapital","NameCity","NameVillage","NameLocal"],1000]; + local _town = "Wilderness"; + if (count _nearestCity > 0) then {_town = text (_nearestCity select 0)}; + local _res = format["%1 [%2]", _town, mapGridPosition _pos]; + + _res +}; + +// print player player PID and name. If name unknown then print UID. +fa_plr2str = { + local _y = _this; + local _res = "nobody"; + if (!isNil "_y") then { + local _name = _y getVariable ["bodyName", nil]; + if ((isNil "_name" OR {(_name == "")}) AND ({alive _y})) then { _name = name _y; }; + if (isNil "_name" OR {(_name == "")}) then { _name = "UID#"+(getPlayerUID _y); }; + _res = format["PID#%1(%2)", owner _y, _name ]; + }; + _res +}; + +array_reduceSize = { + local _array1 = _this select 0; + local _array = _array1 - ["Hatchet_Swing","Crowbar_Swing","Machete_Swing","Bat_Swing","BatBarbed_Swing","BatNails_Swing","Fishing_Swing","Sledge_Swing","CSGAS"]; + local _count = _this select 1; + local _num = count _array; + if (_num > _count) then { + _array resize _count; + }; + _array +}; + +// Precise base building 1.0.5 +call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\kk_functions.sqf"; +call compile preprocessFileLineNumbers "\z\addons\dayz_server\eventHandlers\server_eventHandler.sqf"; +#include "mission_check.sqf" + +#include "spawn_config.sqf" + +call compile preprocessFileLineNumbers "\z\addons\dayz_server\WAI\init.sqf"; +call compile preprocessFileLineNumbers "\z\addons\dayz_server\DZMS\DZMSInit.sqf"; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/init/spawn_config.sqf b/@DayZ_Epoch_Server/addons/dayz_server/init/spawn_config.sqf new file mode 100755 index 0000000..9f2a13c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/init/spawn_config.sqf @@ -0,0 +1,132 @@ +/* + ESSV3 Server Side Config + + For detailed information about these variables see: + https://github.com/ebayShopper/ESSV3/blob/master/DOCUMENTATION.md +*/ +class_level1 = ["0","0","0"]; +class_level2 = ["0","0","0"]; +class_level3 = ["0","0","0"]; +class_levelCount = 3; //If you add more class levels then increase this number. +// To give higher level VIPs access to lower level VIP classes uncomment the two lines below: +// class_level1 = class_level1 + class_level2 + class_level3; +// class_level2 = class_level2 + class_level3; + +#define VIP_ITEMS "HandRoadFlare","ItemBandage",2,"ItemPainkiller","ItemWaterbottle","FoodPistachio","ItemAntibiotic","ItemBloodbag","ItemEpinephrine","ItemMorphine" // constant example, these can be removed if they are not used below +#define VIP_TOOLS "Binocular_Vector","NVGoggles","ItemCompass","ItemKnife","Itemmatchbox","Itemetool","ItemFlashlightRed","ItemWatch","ItemGPS" +class_private = [ // These are only visible to players in their respective class levels + ["VIP Scout","Camo1_DZ","SurvivorW2_DZ",["30Rnd_556x45_Stanag",2,"15Rnd_9x19_M9SD",3,VIP_ITEMS],["M16A4_ACOG_DZ","M9_SD_DZ","Binocular_Vector"],"DZ_ALICE_Pack_EP1",[],[],1,0,0,"MeleeHatchet"], + ["VIP Specialist","Rocket_DZ","SurvivorW2_DZ",["100Rnd_762x51_M240",2,"15Rnd_9x19_M9SD",3,VIP_ITEMS],["Mk48_CCO_DZ","M9_SD_DZ","Binocular_Vector"],"DZ_British_ACU",[],[],2,0,0,"MeleeHatchet"], + ["VIP Sniper","Sniper1_DZ","SurvivorW2_DZ",["20Rnd_762x51_DMR",2,"15Rnd_9x19_M9SD",3,VIP_ITEMS],["DMR_DZ","M9_SD_DZ","Binocular_Vector"],"DZ_Backpack_EP1",[],[],3,0,0,"MeleeHatchet"] +]; +class_customLoadout = [ + "12345678900000000", // ebay + "0", + "0" +]; +class_customLoadouts = [ // These are only visible to their owner + ["ebay's Loadout","Bandit1_DZ","BanditW1_DZ",["100Rnd_762x51_M240",2,"15Rnd_9x19_M9SD",3,"Skin_Sniper1_DZ",VIP_ITEMS],["Mk48_CCO_DZ","M9_SD_DZ",VIP_TOOLS],"DZ_Backpack_EP1",["20Rnd_762x51_DMR",3],["DMR_DZ"],0,"MeleeHatchet"], + [], + [] +]; + +spawn_level1 = ["0","0","0"]; +spawn_level2 = ["0","0","0"]; +spawn_level3 = ["0","0","0"]; +spawn_levelCount = 3; //If you add more spawn levels then increase this number. +// To give higher level VIPs access to lower level VIP spawns uncomment the two lines below: +// spawn_level1 = spawn_level1 + spawn_level2 + spawn_level3; +// spawn_level2 = spawn_level2 + spawn_level3; + +spawn_private = [ // These are only visible to players in their respective spawn levels + //["VIP Base",[1607,7804,0],1,0], + //["VIP Hideout",[12944,12767,0],2,0] +]; +spawn_base = [ + "12345678900000000", // ebay + "0", + "0" +]; +spawn_bases = [ + ["ebay's base",[2300,15324,0]], + [], + [] +]; + + + + +/* + The function below returns all private classes, private spawns, class levels and spawn levels the player has access to. + The player is sent this data when they respawn. +*/ +spawn_config = { + private ["_classes","_classLevel","_classLevels","_freshSpawn","_index","_playerUID","_return","_spawnLevel","_spawnLevels","_spawns"]; + + _freshSpawn = _this select 0; + _playerUID = _this select 1; + + if (!_freshSpawn) exitWith {false}; + _return = [[],[],[],[]]; + + _index = class_customLoadout find _playerUID; + if (_index != -1) then { + _classes = _return select 0; + _classes set [0,(class_customLoadouts select _index)]; + _return set [0,_classes]; + }; + + _index = spawn_base find _playerUID; + if (_index != -1) then { + _spawns = _return select 1; + _spawns set [0,(spawn_bases select _index)]; + _return set [1,_spawns]; + }; + + _classLevels = []; + _spawnLevels = []; + for "_i" from 1 to class_levelCount do { + if (_playerUID in (call compile format["class_level%1",_i])) then { + _classLevels set [count _classLevels,_i]; + }; + }; + for "_i" from 1 to spawn_levelCount do { + if (_playerUID in (call compile format["spawn_level%1",_i])) then { + _spawnLevels set [count _spawnLevels,_i]; + }; + }; + _return set [2,_classLevels]; + _return set [3,_spawnLevels]; + + { + _classLevel = _x select 8; + if (typeName _classLevel == "ARRAY") then {_classLevel = _x select 19;}; //Random + if (_classLevel == 0 or {_playerUID in (call compile format["class_level%1",_classLevel])}) then { + _classes = _return select 0; + _classes set [count _classes,_x]; + _return set [0,_classes]; + }; + } forEach class_private; + + { + _spawnLevel = _x select 2; + if (_spawnLevel == 0 or {_playerUID in (call compile format["spawn_level%1",_spawnLevel])}) then { + _spawns = _return select 1; + _spawns set [count _spawns,_x]; + _return set [1,_spawns]; + }; + } forEach spawn_private; + + _return +}; + +//Allow extra skins in vanilla +if !(isClass (configFile >> "CfgWeapons" >> "Chainsaw")) then { + AllPlayers = AllPlayers + [ + "Citizen3","CZ_Soldier_DES_EP1","Rocket_DZ","TK_INS_Soldier_EP1", + "US_Soldier_EP1","Villager1","Worker1" + ]; +}; + +//Not defined in 1.8.8 +respawn_west_original = getMarkerPos "respawn_west"; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/modules/Care_Packages.sqf b/@DayZ_Epoch_Server/addons/dayz_server/modules/Care_Packages.sqf new file mode 100755 index 0000000..1a9cadd --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/modules/Care_Packages.sqf @@ -0,0 +1,63 @@ +/* +Spawns care packages. + +Single parameter: + integer Number of care packages to spawn. + +Author: + Foxy +*/ + +#include "\z\addons\dayz_code\util\Math.hpp" +#include "\z\addons\dayz_code\util\Vector.hpp" +#include "\z\addons\dayz_code\loot\Loot.hpp" + +//Number of care packages to spawn +#define SPAWN_NUM 6 + +//Parameters for finding a suitable position to spawn the crash site +#define SEARCH_CENTER getMarkerPos "carepackages" +#define SEARCH_RADIUS (getMarkerSize "carepackages") select 0 +#define SEARCH_DIST_MIN 30 +#define SEARCH_SLOPE_MAX 1000 +#define SEARCH_BLACKLIST [[[12923,3643],[14275,2601]]] + +#define CLUTTER_CUTTER 0 //0 = loot hidden in grass, 1 = loot lifted, 2 = no grass, 3 = debug sphere. + +private ["_typeGroup","_position","_type","_class","_vehicle","_lootGroup","_lootNum","_lootPos","_lootVeh","_size"]; + +_lootGroup = Loot_GetGroup("CarePackage"); +_typeGroup = Loot_GetGroup("CarePackageType"); + +for "_i" from 1 to (SPAWN_NUM) do +{ + _type = Loot_SelectSingle(_typeGroup); + _class = _type select 1; + _lootNum = round Math_RandomRange(_type select 2, _type select 3); + _position = [SEARCH_CENTER, 0, SEARCH_RADIUS, SEARCH_DIST_MIN, 0, SEARCH_SLOPE_MAX, 0, SEARCH_BLACKLIST] call BIS_fnc_findSafePos; + _position set [2, 0]; + + diag_log format ["DEBUG: Spawning a care package (%1) at %2 with %3 items.", _class, _position, _lootNum]; + + //_vehicle = createVehicle [_class, _position, [], 0, "CAN_COLLIDE"]; + _vehicle = _class createVehicle _position; + dayz_serverObjectMonitor set [count dayz_serverObjectMonitor, _vehicle]; + _vehicle setVariable ["ObjectID", 1, true]; + + _size = sizeOf _class; + + { + //Calculate random loot position + _lootPos = Vector_Add(_position, Vector_Multiply(Vector_FromDir(random 360), _size * 0.6 + random _size)); + _lootPos set [2, 0]; + + _lootVeh = Loot_Spawn(_x, _lootPos, ""); + _lootVeh setVariable ["permaLoot", true]; + + call { + if (CLUTTER_CUTTER == 1) exitWith {_lootPos set [2, 0.05]; _lootVeh setPosATL _lootpos;}; + if (CLUTTER_CUTTER == 2) exitWith {"ClutterCutter_small_2_EP1" createVehicle _lootPos;}; + if (CLUTTER_CUTTER == 3) exitWith {"Sign_sphere100cm_EP1" createVehicle _lootPos;}; + }; + } forEach Loot_Select(_lootGroup, _lootNum); +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/modules/CrashSites.sqf b/@DayZ_Epoch_Server/addons/dayz_server/modules/CrashSites.sqf new file mode 100755 index 0000000..3b738c1 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/modules/CrashSites.sqf @@ -0,0 +1,79 @@ +/* +Spawns crash sites at the beginning of mission. + +Author: + Foxy + +Modified for DayZ Epoch Event Spawner by JasonTM +*/ + +#include "\z\addons\dayz_code\util\Math.hpp" +#include "\z\addons\dayz_code\util\Vector.hpp" +#include "\z\addons\dayz_code\loot\Loot.hpp" + +//Chance to spawn a crash site +#define SPAWN_CHANCE 0.75 + +//Parameters for finding a suitable position to spawn the crash site +#define SEARCH_CENTER getMarkerPos "crashsites" +#define SEARCH_RADIUS (getMarkerSize "crashsites") select 0 +#define SEARCH_DIST_MIN 20 +#define SEARCH_SLOPE_MAX 2 +#define SEARCH_BLACKLIST [[[2092,14167],[10558,12505]]] + +//Number of crash sites to spawn +#define NUMBER 3 + +//Number of loot items to spawn per site +#define LOOT_MIN 5 +#define LOOT_MAX 8 + +#define CLUTTER_CUTTER 0 //0 = loot hidden in grass, 1 = loot lifted, 2 = no grass, 3 = debug sphere. + +private ["_spawnCrashSite","_type","_class","_lootGroup","_position","_vehicle","_lootParams","_dir","_mag","_lootNum","_lootPos","_lootVeh"]; + +_spawnCrashSite = +{ + _type = Loot_SelectSingle(Loot_GetGroup("CrashSiteType")); + _class = _type select 1; + _lootGroup = Loot_GetGroup(_type select 2); + _lootNum = round Math_RandomRange(LOOT_MIN, LOOT_MAX); + + _position = [SEARCH_CENTER, 0, SEARCH_RADIUS, SEARCH_DIST_MIN, 0, SEARCH_SLOPE_MAX, 0, SEARCH_BLACKLIST] call BIS_fnc_findSafePos; + _position set [2, 0]; + + diag_log format ["CRASHSPAWNER: Spawning crash site (%1) at %2 with %3 items.", _class, _position, _lootNum]; + + _vehicle = "ClutterCutter_small_2_EP1" createVehicle _position; + _vehicle = _class createVehicle [0,0,0]; + _vehicle setVariable ["ObjectID", 1, true]; + _vehicle setDir random 360; + _vehicle setPos _position; + + _lootParams = getArray (configFile >> "CfgVehicles" >> _class >> "lootParams"); + + { + _dir = random 360; + _mag = random (_lootParams select 4); + _lootPos = [((_lootParams select 2) + _mag) * sin _dir, ((_lootParams select 3) + _mag) * cos _dir, 0]; + _lootPos = Vector_Add(_lootPos, _lootParams select 0); + _lootPos = Vector_Rotate2D(_lootPos, _lootParams select 1); + _lootPos = _vehicle modelToWorld _lootPos; + _lootPos set [2, 0]; + + _lootVeh = Loot_Spawn(_x, _lootPos, ""); + _lootVeh setVariable ["permaLoot", true]; + + call { + if (CLUTTER_CUTTER == 1) exitWith {_lootPos set [2, 0.05]; _lootVeh setPosATL _lootpos;}; + if (CLUTTER_CUTTER == 2) exitWith {"ClutterCutter_small_2_EP1" createVehicle _lootPos;}; + if (CLUTTER_CUTTER == 3) exitWith {"Sign_sphere100cm_EP1" createVehicle _lootPos;}; + }; + } forEach Loot_Select(_lootGroup, _lootNum); +}; + +//Spawn crash sites +for "_i" from 1 to (NUMBER) do +{ + call _spawnCrashSite; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/modules/Infected_Camps.sqf b/@DayZ_Epoch_Server/addons/dayz_server/modules/Infected_Camps.sqf new file mode 100755 index 0000000..87329b4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/modules/Infected_Camps.sqf @@ -0,0 +1,91 @@ +/* +Spawns infected camps + +Author: + Foxy +*/ + +#include "\z\addons\dayz_code\util\Math.hpp" +#include "\z\addons\dayz_code\loot\Loot.hpp" + +//Number of infected camps to spawn +#define CAMP_NUM 3 + +//Minimum distance between camps +#define CAMP_MIN_DIST 300 + +//Base class of objects to add loot to +#define CAMP_CONTAINER_BASE "IC_Tent" + +//Loot per tent +#define LOOT_MIN 10 +#define LOOT_MAX 20 + +//Random objects per camp +#define OBJECT_MIN 4 +#define OBJECT_MAX 12 + +//Radius around the camp in which random objects are spawned +#define OBJECT_RADIUS_MIN 8 +#define OBJECT_RADIUS_MAX 13 + +#define SEARCH_CENTER getMarkerPos "center" +#define SEARCH_RADIUS (getMarkerSize "center") select 0 +#define SEARCH_EXPRESSION "(5 * forest) + (4 * trees) + (3 * meadow) - (20 * houses) - (30 * sea)" //+ (3 * meadow) - (20 * houses) - (30 * sea) +#define SEARCH_PRECISION 30 +#define SEARCH_ATTEMPTS 10 + +private +[ + "_typeGroup", + "_lootGroup", + "_objectGroup", + "_type", + "_position", + "_composition", + "_compositionObjects", + "_objectPos" +]; + +_typeGroup = Loot_GetGroup("InfectedCampType"); +_lootGroup = Loot_GetGroup("InfectedCamp"); +_objectGroup = Loot_GetGroup("InfectedCampObject"); + +for "_i" from 1 to (CAMP_NUM) do +{ + //Select type of camp + _type = Loot_SelectSingle(_typeGroup); + _composition = _type select 1; + + //Find a position + + for "_j" from 1 to (SEARCH_ATTEMPTS) do + { + _position = ((selectBestPlaces [SEARCH_CENTER, SEARCH_RADIUS, SEARCH_EXPRESSION, SEARCH_PRECISION, 1]) select 0) select 0; + _position set [2, 0]; + + //Check if a camp already exists within the minimum distance + if (count (_position nearObjects [CAMP_CONTAINER_BASE,CAMP_MIN_DIST]) < 1) exitWith {}; + }; + + diag_log format ["DEBUG: Spawning an infected camp (%1) at %2", _composition, _position]; + + //Spawn composition + _compositionObjects = [_position, random 360,_composition] call spawnComposition; + + //Add loot to containers + { + if (_x isKindOf (CAMP_CONTAINER_BASE)) then + { + Loot_InsertCargo(_x, _lootGroup, round Math_RandomRange(LOOT_MIN, LOOT_MAX)); + }; + } forEach _compositionObjects; + + //Spawn objects around the camp + { + _objectPos = [_position, OBJECT_RADIUS_MIN, OBJECT_RADIUS_MAX, 5] call fn_selectRandomLocation; + + Loot_Spawn(_x, _objectPos, ""); + + } forEach Loot_Select(_objectGroup, round Math_RandomRange(OBJECT_MIN, OBJECT_MAX)); +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/modules/abandoned_vaults.sqf b/@DayZ_Epoch_Server/addons/dayz_server/modules/abandoned_vaults.sqf new file mode 100755 index 0000000..762b40e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/modules/abandoned_vaults.sqf @@ -0,0 +1,116 @@ +/* + Abandoned player safe mission by Cramps (zfclan.org/forum) + Updated for DayZ Epoch 1.0.6+ by JasonTM + Updated for DayZ Epoch 1.0.7+ by JasonTM + Instructions at the bottom of the file. + Needs an SQL event set up to turn abandoned vault codes to 0000 - bottom of file. + Last update: 06-01-2021 +*/ + +local _spawnChance = 1; // Percentage chance of event happening.The number must be between 0 and 1. 1 = 100% chance. +local _debug = false; // Posts additional diagnostic entries to the rpt +local _toGround = false; // If the safe is more than 2 meters above the ground, this will find a near spot on the ground to move the safe. +local _radius = 150; // Radius used for the marker width +local _type = "TitleText"; // Type of announcement message. Options "Hint","TitleText". +local _timeout = 20; // Time it takes for the event to time out (in minutes). +#define TITLE_COLOR "#669900" // Hint Option: Color of Top Line +#define TITLE_SIZE "1.75" // Hint Option: Size of top line +#define IMAGE_SIZE "4" // Hint Option: Size of the image + +if (random 1 > _spawnChance && !_debug) exitWith {}; + +diag_log "Abandoned Safe Event Starting..."; + +if ((count DZE_LockedSafes) < 1) exitWith {diag_log "There are no safes on the map.";}; +local _vaults = []; +local _current = 0; +local _code = 0; + +for "_i" from 0 to (count DZE_LockedSafes)-1 do { + _current = DZE_LockedSafes select _i; + _code = _current getVariable ["CharacterID", "0"]; + if (_code == "0000") then { + _vaults set [count _vaults, _current]; + }; +}; + +if (count _vaults == 0) exitWith {diag_log "There are no abandoned safes on the map";}; + +if (_debug) then {diag_log format["Total abandoned safes on server = %1",count _vaults];}; + +if (_type == "Hint") then { + local _img = (getText (configFile >> "CfgMagazines" >> "ItemVault" >> "picture")); + RemoteMessage = ["hintWithImage",["STR_CL_ESE_VAULT_TITLE","STR_CL_ESE_VAULT"],[_img,TITLE_COLOR,TITLE_SIZE,IMAGE_SIZE]]; +} else { + RemoteMessage = ["titleText","STR_CL_ESE_VAULT"]; +}; +publicVariable "RemoteMessage"; + +if (_debug) then {diag_log format["Abandoned Vault event setup, waiting for %1 minutes", _timeout];}; + +local _vault = _vaults call BIS_fnc_selectRandom; +local _pos = [_vault] call FNC_GetPos; +local _markers = []; + +if (_toGround) then { + if ((_pos select 2) > 2) then { + _pos = _pos findEmptyPosition[0,100]; + _pos set [2, 0]; + _vault setPos _pos; + _vault setVariable ["OEMPos",_pos,true]; + }; +}; + +if (_debug) then {diag_log format["Location of randomly picked 0000 vault = %1",_pos];}; + +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +_markers set [0, [_pos, format ["safemark_%1", diag_tickTime], "ColorKhaki", "","ELLIPSE", "", [_radius,_radius], [], 0]]; +_markers set [1, [_pos, format ["safedot_%1", diag_tickTime], "ColorBlack", "mil_dot","ICON", "", [], ["STR_CL_ESE_VAULT_TITLE"], 0]]; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; + +uiSleep (_timeout*60); + +// Tell all clients to remove the markers from the map +local _remove = []; +{ + _remove set [count _remove, (_x select 1)]; +} count _markers; +PVDZ_ServerMarkerSend = ["end",_remove]; +publicVariable "PVDZ_ServerMarkerSend"; +DZE_ServerMarkerArray set [_markerIndex, -1]; +diag_log "Abandoned Safe Event Ended"; + +/* + ****Special Instructions**** + Open server_monitor.sqf + + Find this line: + dayz_serverIDMonitor = []; + + Place this line below it: + DZE_LockedSafes = []; + + Find this line: + _isTrapItem = _object isKindOf "TrapItems"; + + Place this line above it: + if (_type in ["VaultStorageLocked","VaultStorage2Locked","TallSafeLocked"]) then {DZE_LockedSafes set [count DZE_LockedSafes, _object];}; + + ****Run this query on your database to reset the code of inactive safes to 0000.**** + + DROP EVENT IF EXISTS resetVaults; CREATE EVENT resetVaults + ON SCHEDULE EVERY 1 DAY + COMMENT 'Sets safe codes to 0000 if not accessed for 14 days' + DO + UPDATE `object_data` SET `CharacterID` = 0 + WHERE + `LastUpdated` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 14 DAY) AND + `Datestamp` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 14 DAY) AND + `CharacterID` > 0 AND + `Classname` IN ('VaultStorageLocked','VaultStorage2Locked','TallSafeLocked') AND + `Inventory` <> '[]' AND + `Inventory` IS NOT NULL +*/ \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/modules/building_supplies.sqf b/@DayZ_Epoch_Server/addons/dayz_server/modules/building_supplies.sqf new file mode 100755 index 0000000..59fe46d --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/modules/building_supplies.sqf @@ -0,0 +1,136 @@ +/* + Original Construction "IKEA" Event by Aidem + Original "crate visited" marker concept and code by Payden + Rewritten and updated for DayZ Epoch 1.0.6+ by JasonTM + Updated for DayZ Epoch 1.0.7+ by JasonTM + Last update: 06-01-2021 +*/ + +local _spawnChance = 1; // Percentage chance of event happening.The number must be between 0 and 1. 1 = 100% chance. +local _chainsawChance = .25; // Chance that a chainsaw with mixed gas will be added to the crate. The number must be between 0 and 1. 1 = 100% chance. +local _vaultChance = .25; // Chance that a safe or lockbox will be added to the crate. The number must be between 0 and 1. 1 = 100% chance. +local _radius = 350; // Radius the loot can spawn and used for the marker. +local _timeout = 20; // Time it takes for the event to time out (in minutes). To disable timeout set to -1. +local _debug = false; // Diagnostic logs used for troubleshooting. +local _nameMarker = true; // Center marker with the name of the mission. +local _markPos = false; // Puts a marker exactly were the loot spawns. +local _lootAmount = 15; // This is the number of times a random loot selection is made. +local _type = "TitleText"; // Type of announcement message. Options "Hint","TitleText". ***Warning: Hint appears in the same screen space as common debug monitors +local _visitMark = true; // Places a "visited" check mark on the mission if a player gets within range of the crate. +local _distance = 20; // Distance in meters from crate before crate is considered "visited" +local _crate = "DZ_AmmoBoxBigUS"; // Class name of loot crate. +#define TITLE_COLOR "#00FF11" // Hint Option: Color of Top Line +#define TITLE_SIZE "1.75" // Hint Option: Size of top line +#define IMAGE_SIZE "4" // Hint Option: Size of the image + +local _lootList = [ // If the item has a number in front of it, then that many will be added to the crate if it is selected one time. Each item can be selected multiple times. Adjust the array configuration to your preferences. + [3,"MortarBucket"],"ItemWoodStairs",[12,"CinderBlocks"],"plot_pole_kit",[12,"PartPlankPack"],[12,"PartPlywoodPack"],"m240_nest_kit","light_pole_kit","ItemWoodCrateKit","ItemFuelBarrel", + [4,"metal_floor_kit"],[4,"ItemWoodFloor"],[4,"half_cinder_wall_kit"],[4,"metal_panel_kit"],"fuel_pump_kit",[4,"full_cinder_wall_kit"],"ItemWoodWallWithDoorLgLocked","storage_shed_kit","sun_shade_kit","wooden_shed_kit", + [2,"ItemComboLock"],[4,"ItemWoodWallLg"],"ItemWoodWallGarageDoorLocked",[4,"ItemWoodWallWindowLg"],"wood_ramp_kit",[8,"ItemWoodFloorQuarter"],"bulk_ItemSandbag","bulk_ItemTankTrap","bulk_ItemWire","bulk_PartGeneric", + "workbench_kit","cinder_garage_kit","cinder_door_kit","wood_shack_kit","deer_stand_kit",[3,"ItemWoodWallThird"],"ItemWoodLadder",[3,"desert_net_kit"],[3,"forest_net_kit"],[2,"ItemSandbagLarge"] +]; + +if (random 1 > _spawnChance and !_debug) exitWith {}; + +local _pos = [getMarkerPos "center",0,(((getMarkerSize "center") select 1)*0.75),10,0,.3,0] call BIS_fnc_findSafePos; + +diag_log format["IKEA Event spawning at %1", _pos]; + +local _lootPos = [_pos,0,(_radius - 100),10,0,2000,0] call BIS_fnc_findSafePos; + +if (_debug) then {diag_log format["IKEA Event: creating ammo box at %1", _lootPos];}; + +local _box = _crate createVehicle [0,0,0]; +_box setPos _lootPos; + +clearMagazineCargoGlobal _box; +clearWeaponCargoGlobal _box; + +if (random 1 < _vaultChance) then { + local _vault = ["ItemVault","ItemLockbox"] call BIS_fnc_selectRandom; + _box addMagazineCargoGlobal [_vault,1]; +}; + +if (random 1 < _chainsawChance) then { + local _saw = ["Chainsaw","ChainSawB","ChainsawG","ChainsawP"] call BIS_fnc_selectRandom; + _box addMagazineCargoGlobal ["ItemJerryMixed",2]; + _box addWeaponCargoGlobal [_saw,1]; +}; + +for "_i" from 1 to _lootAmount do { + local _loot = _lootList call BIS_fnc_selectRandom; + + if ((typeName _loot) == "ARRAY") then { + _box addMagazineCargoGlobal [_loot select 1,_loot select 0]; + } else { + _box addMagazineCargoGlobal [_loot,1]; + }; +}; + +local _pack = ["Patrol_Pack_DZE1","Assault_Pack_DZE1","Czech_Vest_Pouch_DZE1","TerminalPack_DZE1","TinyPack_DZE1","ALICE_Pack_DZE1","TK_Assault_Pack_DZE1","CompactPack_DZE1","British_ACU_DZE1","GunBag_DZE1","NightPack_DZE1","SurvivorPack_DZE1","AirwavesPack_DZE1","CzechBackpack_DZE1","WandererBackpack_DZE1","LegendBackpack_DZE1","CoyoteBackpack_DZE1","LargeGunBag_DZE1"] call BIS_fnc_selectRandom; +_box addBackpackCargoGlobal [_pack,1]; + +if (_type == "Hint") then { + local _img = (getText (configFile >> "CfgVehicles" >> "UralCivil_DZE" >> "picture")); + RemoteMessage = ["hintWithImage",["STR_CL_ESE_IKEA_TITLE","STR_CL_ESE_IKEA"],[_img,TITLE_COLOR,TITLE_SIZE,IMAGE_SIZE]]; +} else { + RemoteMessage = ["titleText","STR_CL_ESE_IKEA"]; +}; +publicVariable "RemoteMessage"; + +if (_debug) then {diag_log format["IKEA Event setup, event will end in %1 minutes", _timeout];}; + +local _time = diag_tickTime; +local _done = false; +local _visited = false; +local _isNear = true; +local _markers = [1,1,1,1]; + +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +_markers set [0, [_pos, format ["eventMark%1", _time], "ColorGreen", "","ELLIPSE", "", [_radius, _radius], [], 0.5]]; +if (_nameMarker) then {_markers set [1, [_pos, format ["eventDot%1",_time], "ColorBlack", "mil_dot","ICON", "", [], ["STR_CL_ESE_IKEA_TITLE"], 0]];}; +if (_markPos) then {_markers set [2, [_lootPos, format ["eventDebug%1",_time], "ColorGreen", "mil_dot","ICON", "", [], [], 0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; + +while {!_done} do { + uiSleep 3; + if (_visitMark && !_visited) then { + { + if (isPlayer _x && {_x distance _box <= _distance}) exitWith { + _visited = true; + _markers set [3, [[(_pos select 0), (_pos select 1) + 25], format ["EventVisit%1", _time], "ColorBlack", "hd_pickup","ICON", "", [], [], 0]]; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + PVDZ_ServerMarkerSend = ["createSingle",(_markers select 3)]; + publicVariable "PVDZ_ServerMarkerSend"; + }; + } count playableUnits; + }; + + if (_timeout != -1) then { + if (diag_tickTime - _time >= _timeout*60) then { + _done = true; + }; + }; +}; + +while {_isNear} do { + uiSleep 3; + {if (isPlayer _x && _x distance _box >= _distance) exitWith {_isNear = false};} count playableUnits; +}; + +// Clean up +deleteVehicle _box; +// Tell all clients to remove the markers from the map +local _remove = []; +{ + if (typeName _x == "ARRAY") then { + _remove set [count _remove, (_x select 1)]; + }; +} count _markers; +PVDZ_ServerMarkerSend = ["end",_remove]; +publicVariable "PVDZ_ServerMarkerSend"; +DZE_ServerMarkerArray set [_markerIndex, -1]; +diag_log "IKEA Event Ended"; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/modules/drop_bombs.sqf b/@DayZ_Epoch_Server/addons/dayz_server/modules/drop_bombs.sqf new file mode 100755 index 0000000..aa44e85 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/modules/drop_bombs.sqf @@ -0,0 +1,4 @@ +// Sample Drop Bomb +private ["_position"]; +_position = [getMarkerPos "center",0,((getMarkerSize "center") select 1),10,0,2000,0] call BIS_fnc_findSafePos; +bomb = createVehicle ["Bo_GBU12_LGB", [(_position select 0),(_position select 1), 1000], [], 0, "CAN_COLLIDE"]; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/modules/fuelstationbomb.sqf b/@DayZ_Epoch_Server/addons/dayz_server/modules/fuelstationbomb.sqf new file mode 100755 index 0000000..9a3c6cd --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/modules/fuelstationbomb.sqf @@ -0,0 +1,220 @@ +/* + Fuel Station Bombing event by JasonTM + Credit to juandayz for original "Random Explosions on Gas Stations" event. + Updated to work with DayZ Epoch 1.0.7 + Last edited 6-1-2021 + ***As of now, this event only has gas station positions for Chernarus. +*/ + +local _timeout = 20; // Time it takes for the event to time out (in minutes). To disable timeout set to -1. +local _delay = 2; // This is the time in minutes it will take for the explosion to occur after announcement +local _lowerGrass = true; // remove grass underneath loot so it is easier to find small objects +local _visitMark = true; // Places a "visited" check mark on the mission if a player gets within range of the vehicle. +local _distance = 20; // Distance from vehicle before event is considered "visited" +local _nameMarker = true; // Center marker with the name of the mission. +local _type = "Hint"; // Type of announcement message. Options "Hint","TitleText". ***Warning: Hint appears in the same screen space as common debug monitors +#define TITLE_COLOR "#ff9933" // Hint Option: Color of Top Line +#define TITLE_SIZE "1.75" // Hint Option: Size of top line + +// You can adjust these loot selections to your liking. Must be magazine/item slot class name, not weapon or tool belt. +// Nested arrays are number of each item and item class name. +/* +local _lootArrays = [ + [[6,"full_cinder_wall_kit"],[1,"cinder_door_kit"],[1,"cinder_garage_kit"],[4,"forest_large_net_kit"]], + [[6,"metal_floor_kit"],[6,"ItemWoodFloor"],[2,"ItemWoodStairs"],[10,"ItemSandbag"]], + [[24,"CinderBlocks"],[8,"MortarBucket"]] +]; +*/ + +// Vehicle Upgrade kits +local _lootArrays = [ +/*Truck*/ [["ItemTruckORP",1],["ItemTruckAVE",1],["ItemTruckLRK",1],["ItemTruckTNK",1],["PartEngine",2],["PartWheel",6],["ItemScrews",8],["PartGeneric",10],["equip_metal_sheet",5],["ItemWoodCrateKit",2],["PartFueltank",3],["ItemGunRackKit",2],["ItemFuelBarrel",2]], +/*Vehicle*/ [["ItemORP",1],["ItemAVE",1],["ItemLRK",1],["ItemTNK",1],["PartEngine",2],["PartWheel",4],["ItemScrews",8],["equip_metal_sheet",6],["PartGeneric",8],["ItemWoodCrateKit",2],["ItemGunRackKit",2],["PartFueltank",2],["ItemFuelBarrel",1]], +/*Helicopter*/ [["ItemHeliAVE",1],["ItemHeliLRK",1],["ItemHeliTNK",1],["equip_metal_sheet",5],["ItemScrews",2],["ItemTinBar",3],["equip_scrapelectronics",5],["equip_floppywire",5],["PartGeneric",4],["ItemWoodCrateKit",1],["ItemGunRackKit",1],["ItemFuelBarrel",1]], +/*Tank-APC*/ [["ItemTankORP",1],["ItemTankAVE",1],["ItemTankLRK",1],["ItemTankTNK",1],["PartEngine",6],["PartGeneric",6],["ItemScrews",6],["equip_metal_sheet",8],["ItemWoodCrateKit",2],["ItemGunRackKit",2],["PartFueltank",6],["ItemFuelBarrel",4]] +]; + +// Select random loot array from above +local _loot = _lootArrays call BIS_fnc_selectRandom; + +// Initialize locations array +if (isNil "FuelStationEventArray") then { + FuelStationEventArray = [ + // Vehicle direction, vehicle position, fuel station name + [96.8,[3640.58,8979.26,0],"Vybor"], + [58.3,[6708.22,2986.89,0],"Cherno"], + [10,[5849.21,10085.1,0],"Grishino"], + [130,[7243.35,7644.83,0],"Novy Sobor"], + [29,[10163.4,5304.94,0],"Staroye"], + [94.6,[9497.25,2016,0],"Elektro"], + [347,[13394.8,6605.09,0],"Solnechiy"], + [200,[2034.43,2242.05,0],"Kamenka"], + [8.5,[2681.41,5604.03,0],"Zelenogorsk"], + [87,[4734.43,6373.43,0],"Pogorevka"], + [329.3,[10456.5,8868.75,0],"Gorka"], + [10.5,[12998.1,10074.4,0],"Berezino"] + ]; +}; + +// Don't spawn the event at a fuel station where a player is refueling/repairing a vehicle +local _validSpot = false; +local _random = []; +local _pos = [0,0,0]; + +while {!_validSpot} do { + _random = FuelStationEventArray call BIS_fnc_selectRandom; + _pos = _random select 1; + {if (isPlayer _x && _x distance _pos >= 100) then {_validSpot = true};} count playableUnits; // players are at least 100 meters away. +}; + +local _dir = _random select 0; +local _name = _random select 2; + +{ // Remove current location from array so there are no repeats + if (_name == (_x select 2)) exitWith { + FuelStationEventArray = [FuelStationEventArray,_forEachIndex] call fnc_deleteAt; + }; +} forEach FuelStationEventArray; + +// If all locations have been removed, reset to original array by destroying global variable +if (count FuelStationEventArray == 0) then {FuelStationEventArray = nil;}; + +if (_type == "Hint") then { + RemoteMessage = ["hintNoImage",["STR_CL_ESE_FUELBOMB_TITLE",["STR_CL_ESE_FUELBOMB_START", _name, _delay]],[TITLE_COLOR,TITLE_SIZE]]; +} else { + RemoteMessage = ["titleText",["STR_CL_ESE_FUELBOMB_START", _name, _delay]]; +}; +publicVariable "RemoteMessage"; + +// Spawn truck +local _truck = "Ural_CDF" createVehicle _pos; +_truck setDir _dir; +_truck setPos _pos; +_truck setVehicleLock "locked"; +_truck setVariable ["CharacterID","9999",true]; + +// Disable damage to near fuel pumps so the explosion doesn't destroy them. +// Otherwise players will complain about not being able to refuel and repair their vehicles. +{ + _x allowDamage false; +} count (_pos nearObjects ["Land_A_FuelStation_Feed", 30]); + +local _time = diag_tickTime; +local _done = false; +local _visited = false; +local _isNear = true; +local _spawned = false; +local _lootArray = []; +local _grassArray = []; +local _lootRad = 0; +local _lootPos = [0,0,0]; +local _lootVeh = objNull; +local _lootArray = []; +local _grass = objNull; +local _grassArray = []; +local _markers = [1,1,1]; + +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +_markers set [0, [_pos, "fuel" + str _time, "ColorRed", "","ELLIPSE", "", [150,150], [], 0.4]]; +if (_nameMarker) then {_markers set [1, [_pos, "explosion" + str _time, "ColorBlack", "mil_dot","ICON", "", [], ["STR_CL_ESE_FUELBOMB_TITLE"], 0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; + +// Start monitoring loop +while {!_done} do { + uiSleep 3; + if (_visitMark && !_visited) then { + { + if (isPlayer _x && {_x distance _pos <= _distance}) exitWith { + _visited = true; + _markers set [2, [[(_pos select 0), (_pos select 1) + 25], "fuelVmarker" + str _time, "ColorBlack", "hd_pickup","ICON", "", [], [], 0]]; + PVDZ_ServerMarkerSend = ["createSingle",(_markers select 2)]; + publicVariable "PVDZ_ServerMarkerSend"; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + }; + } count playableUnits; + }; + + if (!_spawned && {diag_tickTime - _time >= _delay*60}) then { + if (_type == "Hint") then { + RemoteMessage = ["hintNoImage",["STR_CL_ESE_FUELBOMB_TITLE",["STR_CL_ESE_FUELBOMB_END",_name]],[TITLE_COLOR,TITLE_SIZE]]; + } else { + RemoteMessage = ["titleText",["STR_CL_ESE_FUELBOMB_END",_name]]; + }; + publicVariable "RemoteMessage"; + + // Blow the vehicle up + "Bo_GBU12_LGB" createVehicle _pos; + + uiSleep 2; + + /* + // Spawn loot around the destroyed vehicle + { + for "_i" from 1 to (_x select 0) do { + _lootRad = (random 10) + 4; + _lootPos = [_pos, _lootRad, random 360] call BIS_fnc_relPos; + _lootPos set [2, 0]; + _lootVeh = createVehicle ["WeaponHolder", _lootPos, [], 0, "CAN_COLLIDE"]; + _lootVeh setVariable ["permaLoot", true]; + _lootVeh addMagazineCargoGlobal [(_x select 1), 1]; + _lootArray set[count _lootArray, _lootVeh]; + if (_lowerGrass) then { + _grass = createVehicle ["ClutterCutter_small_2_EP1", _lootPos, [], 0, "CAN_COLLIDE"]; + _grassArray set[count _grassArray, _grass]; + }; + }; + } count _loot; + */ + + // Spawn loot around the destroyed vehicle + { + for "_i" from 1 to (_x select 1) do { + _lootRad = (random 10) + 4; + _lootPos = [_pos, _lootRad, random 360] call BIS_fnc_relPos; + _lootPos set [2, 0]; + _lootVeh = createVehicle ["WeaponHolder", _lootPos, [], 0, "CAN_COLLIDE"]; + _lootVeh setVariable ["permaLoot", true]; + _lootVeh addMagazineCargoGlobal [(_x select 0), 1]; + _lootArray set[count _lootArray, _lootVeh]; + if (_lowerGrass) then { + _grass = createVehicle ["ClutterCutter_small_2_EP1", _lootPos, [], 0, "CAN_COLLIDE"]; + _grassArray set[count _grassArray, _grass]; + }; + }; + } count _loot; + + // Reset the timer once loot is spawned + _time = diag_tickTime; + _spawned = true; + }; + + // Timeout timer starts after loot is spawned + if (_spawned && {_timeout != -1}) then { + if (diag_tickTime - _time >= _timeout*60) then { + _done = true; + }; + }; +}; + +// If player is near, don't delete the loot piles +while {_isNear} do { + {if (isPlayer _x && _x distance _pos >= 30) exitWith {_isNear = false};} count playableUnits; +}; + +// Tell all clients to remove the markers from the map +local _remove = []; +{ + if (typeName _x == "ARRAY") then { + _remove set [count _remove, (_x select 1)]; + }; +} count _markers; +PVDZ_ServerMarkerSend = ["end",_remove]; +publicVariable "PVDZ_ServerMarkerSend"; +DZE_ServerMarkerArray set [_markerIndex, -1]; + +// Delete loot piles and grass cutters +{deleteVehicle _x;} count _lootArray; +if (count _grassArray > 0) then {{deleteVehicle _x;} count _grassArray;}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/modules/labyrinth.sqf b/@DayZ_Epoch_Server/addons/dayz_server/modules/labyrinth.sqf new file mode 100755 index 0000000..4802eb5 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/modules/labyrinth.sqf @@ -0,0 +1,193 @@ +/* + Original Labyrinth Event by Caveman + Rewritten and updated for DayZ Epoch 1.0.6+ by JasonTM + Updated for DayZ Epoch 1.0.7+ by JasonTM + Last update: 06-01-2021 +*/ + +local _spawnChance = 1; // Percentage chance of event happening.The number must be between 0 and 1. 1 = 100% chance. +local _numGems = [0,1]; // Random number of gems to add to the crate [minimum, maximum]. For no gems, set to [0,0]. +local _radius = 250; // Radius the loot can spawn and used for the marker +local _timeout = 20; // Time it takes for the event to time out (in minutes). To disable timeout set to -1. +local _debug = false; // Diagnostic logs used for troubleshooting. +local _nameMarker = true; // Center marker with the name of the mission. +local _markPos = false; // Puts a marker exactly where the loot spawns. +local _lootAmount = 4; // This is the number of times a random loot selection is made. +local _messageType = "TitleText"; // Type of announcement message. Options "Hint","TitleText". ***Warning: Hint appears in the same screen space as common debug monitors +local _visitMark = false; // Places a "visited" check mark on the mission if a player gets within range of the crate. +local _distance = 20; // Distance from crate before crate is considered "visited" +local _crate = "GuerillaCacheBox"; +#define TITLE_COLOR "#ccff33" // Hint Option: Color of Top Line +#define TITLE_SIZE "1.75" // Hint Option: Size of top line +#define IMAGE_SIZE "4" // Hint Option: Size of the image + +local _lootList = [[5,"ItemGoldBar"],[3,"ItemGoldBar10oz"],"ItemBriefcase100oz",[20,"ItemSilverBar"],[10,"ItemSilverBar10oz"]]; + +if (random 1 > _spawnChance and !_debug) exitWith {}; + +local _pos = [getMarkerPos "center",0,(((getMarkerSize "center") select 1)*0.75),10,0,.3,0] call BIS_fnc_findSafePos; + +diag_log format["Labyrinth Event Spawning At %1", _pos]; + +local _posarray = [ + [(_pos select 0) + 9, (_pos select 1) + 2.3,-0.012], + [(_pos select 0) - 18.6, (_pos select 1) + 15.6,-0.012], + [(_pos select 0) - 8.5, (_pos select 1) - 21,-0.012], + [(_pos select 0) - 33, (_pos select 1) - 6,-0.012], + [(_pos select 0) + 5, (_pos select 1) - 44,-0.012], + [(_pos select 0) - 23, (_pos select 1) - 20,-0.012], + [(_pos select 0) + 13, (_pos select 1) - 23,-0.012], + [(_pos select 0) + 7, (_pos select 1) - 6,-0.012], + [(_pos select 0) - 5, (_pos select 1) + 1,-0.012], + [(_pos select 0) - 42, (_pos select 1) - 6,-0.012], + [(_pos select 0) - 4.3, (_pos select 1) - 39,-0.012] +]; + +local _spawnObjects = { + local _pos = _this select 1; + local _objArray = []; + local _obj = objNull; + { + local _offset = _x select 1; + local _position = [(_pos select 0) + (_offset select 0), (_pos select 1) + (_offset select 1), 0]; + local _obj = (_x select 0) createVehicle [0,0,0]; + if (count _x > 2) then { + _obj setDir (_x select 2); + }; + _obj setPos _position; + _obj setVectorUp surfaceNormal position _obj; + _obj addEventHandler ["HandleDamage",{0}]; + _obj enableSimulation false; + _objArray set [count _objArray, _obj]; + } count (_this select 0); + _objArray +}; + +local _lootPos = _posarray call BIS_fnc_selectRandom; + +if (_debug) then {diag_log format["Labyrinth Event: creating ammo box at %1", _lootPos];}; + +local _box = _crate createVehicle [0,0,0]; +_box setPos _lootPos; +clearMagazineCargoGlobal _box; +clearWeaponCargoGlobal _box; + +local _clutter = createVehicle ["ClutterCutter_EP1", _lootPos, [], 0, "CAN_COLLIDE"]; +_clutter setPos _lootPos; + +local _objects = [[ + ["Land_MBG_Shoothouse_1",[-35,-6.5,-0.12]], + ["Land_MBG_Shoothouse_1",[-12,9,-0.12]], + ["Land_MBG_Shoothouse_1",[-16,-19.3,-0.12]], + ["Land_MBG_Shoothouse_1",[7,-15,-0.12]], + ["Land_MBG_Shoothouse_1",[3,-39.5,-0.12]], + ["Land_A_Castle_Bergfrit",[9.5,3,-10.52]], + ["Land_A_Castle_Donjon_dam",[4,17,-1.93]], + ["Land_A_Castle_Wall1_20",[-11.6,21.7,-7.28]], + ["Land_A_Castle_Wall1_20",[-35.4,6.4,-7.28]], + ["Land_A_Castle_Donjon",[16,-10.3,-1.93]], + ["Sign_arrow_down_large_EP1",[15,-35,0.52]], + ["Sign_arrow_down_large_EP1",[-8.6,-51,0.52]], + ["Sign_arrow_down_large_EP1",[-27,-30.5,0.52]], + ["Sign_arrow_down_large_EP1",[-46,-17.4,0.52]], + ["Sign_arrow_down_large_EP1",[-22.7,7.7,0.52]], + ["MAP_t_acer2s",[-8,-31,-0.12]], + ["MAP_t_acer2s",[-46.5,-15,-0.12],91.4], + ["MAP_t_acer2s",[-23,10,-0.12],89.09], + ["MAP_t_acer2s",[-27.3,-28,-0.12],90.6], + ["MAP_t_acer2s",[14,-32,-0.12],-88.1], + ["MAP_t_acer2s",[-8.5,-48,-0.12],86.08] +],_pos] call _spawnObjects; + +local _gems = (round(random((_numGems select 1) - (_numGems select 0)))) + (_numGems select 0); + +if (_debug) then {diag_log format["Labyrinth Event: %1 gems added to crate", _gems];}; + +if (_gems > 0) then { + for "_i" from 1 to _gems do { + local _gem = ["ItemTopaz","ItemObsidian","ItemSapphire","ItemAmethyst","ItemEmerald","ItemCitrine","ItemRuby"] call BIS_fnc_selectRandom; + _box addMagazineCargoGlobal [_gem,1]; + }; +}; + +for "_i" from 1 to _lootAmount do { + local _loot = _lootList call BIS_fnc_selectRandom; + + if ((typeName _loot) == "ARRAY") then { + _box addMagazineCargoGlobal [_loot select 1,_loot select 0]; + } else { + _box addMagazineCargoGlobal [_loot,1]; + }; +}; + +local _pack = ["Patrol_Pack_DZE1","Assault_Pack_DZE1","Czech_Vest_Pouch_DZE1","TerminalPack_DZE1","TinyPack_DZE1","ALICE_Pack_DZE1","TK_Assault_Pack_DZE1","CompactPack_DZE1","British_ACU_DZE1","GunBag_DZE1","NightPack_DZE1","SurvivorPack_DZE1","AirwavesPack_DZE1","CzechBackpack_DZE1","WandererBackpack_DZE1","LegendBackpack_DZE1","CoyoteBackpack_DZE1","LargeGunBag_DZE1"] call BIS_fnc_selectRandom; +_box addBackpackCargoGlobal [_pack,1]; + +if (_messageType == "Hint") then { + local _img = (getText (configFile >> "CfgVehicles" >> "Land_MBG_Shoothouse_1" >> "icon")); + RemoteMessage = ["hintWithImage",["STR_CL_ESE_LABYRINTH_TITLE","STR_CL_ESE_LABYRINTH"],[_img,TITLE_COLOR,TITLE_SIZE,IMAGE_SIZE]]; +} else { + RemoteMessage = ["titleText","STR_CL_ESE_LABYRINTH"]; +}; +publicVariable "RemoteMessage"; + +if (_debug) then {diag_log format["Labyrinth event setup, waiting for %1 minutes", _timeout];}; + +local _time = diag_tickTime; +local _finished = false; +local _visited = false; +local _isNear = true; +local _markers = [1,1,1,1]; + +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +_markers set [0, [_pos, format ["eventMark%1", _time], "ColorYellow", "","ELLIPSE", "", [_radius, _radius], [], 0.5]]; +if (_nameMarker) then {_markers set [1, [_pos, format ["eventDot%1",_time], "ColorBlack", "mil_dot","ICON", "", [], ["STR_CL_ESE_LABYRINTH_TITLE"], 0]];}; +if (_markPos) then {_markers set [2, [_lootPos, format ["eventDebug%1",_time], "ColorYellow", "mil_dot","ICON", "", [], [], 0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; + +while {!_finished} do { + uiSleep 3; + if (_visitMark && !_visited) then { + { + if (isPlayer _x && {_x distance _box <= _distance}) exitWith { + _visited = true; + _markers set [3, [[(_pos select 0), (_pos select 1) + 25], format ["EventVisit%1", _time], "ColorBlack", "hd_pickup","ICON", "", [], [], 0]]; + PVDZ_ServerMarkerSend = ["createSingle",(_markers select 3)]; + publicVariable "PVDZ_ServerMarkerSend"; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + }; + } count playableUnits; + }; + + if (_timeout != -1) then { + if (diag_tickTime - _time >= _timeout*60) then { + _finished = true; + }; + }; +}; + +while {_isNear} do { + {if (isPlayer _x && _x distance _box >= _distance) exitWith {_isNear = false};} count playableUnits; +}; + +// Tell all clients to remove the markers from the map +local _remove = []; +{ + if (typeName _x == "ARRAY") then { + _remove set [count _remove, (_x select 1)]; + }; +} count _markers; +PVDZ_ServerMarkerSend = ["end",_remove]; +publicVariable "PVDZ_ServerMarkerSend"; +DZE_ServerMarkerArray set [_markerIndex, -1]; +{ + deleteVehicle _x; +} count _objects; +deleteVehicle _box; +deleteVehicle _clutter; + +diag_log "Labyrinth Event Ended"; + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/modules/mechanics_truck.sqf b/@DayZ_Epoch_Server/addons/dayz_server/modules/mechanics_truck.sqf new file mode 100755 index 0000000..9f0b4eb --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/modules/mechanics_truck.sqf @@ -0,0 +1,200 @@ +/* + Mechanic's Truck event by JasonTM + This event spawns a truck filled with vehicle upgrade parts inside a building of type "Land_Hangar_2" + 7-8-2021 +*/ + +local _timeout = 20; // Time it takes for the event to time out (in minutes). To disable timeout set to -1. +local _key = true; // Issue a key for the truck. The key will be in the gear. +local _visitMark = true; // Places a "visited" check mark on the mission if a player gets within range of the vehicle. +local _numpacks = 2; // Be mindful of how many backpacks cargo trucks can hold. +local _distance = 20; // Distance from vehicle before event is considered "visited" +local _nameMarker = true; // Center marker with the name of the mission. +local _type = "Hint"; // Type of announcement message. Options "Hint","TitleText". ***Warning: Hint appears in the same screen space as common debug monitors +#define TITLE_COLOR "#ff9933" // Hint Option: Color of Top Line +#define TITLE_SIZE "1.75" // Hint Option: Size of top line +#define DEBUG false + +// Get a list of all of the vehicle hangars on the map +local _list = (getMarkerPos "center") nearObjects ["Land_Hangar_2", 15000]; +if (count _list == 0) exitWith {diag_log "Mechanic's Truck Event: No Land_Hangar_2 on the map.";}; +local _garage = objNull; +local _pos = []; +local _i = 1; +local _success = false; + +while {_i < 50} do { + _garage = _list call BIS_fnc_selectRandom; + _pos = getPosATL _garage; + + local _nearPlayer = false; + { + if (_x distance _pos < 50) exitWith { + _nearPlayer = true; + }; + } count playableUnits; + + // Check for near vehicles, players and plots + if (count (_pos nearObjects ["LandVehicle", 20]) == 0 && !_nearPlayer && {count (_pos nearEntities ["Plastic_Pole_EP1_DZ", 100]) == 0}) exitWith { + _success = true; + }; + _i = _i + 1; +}; + +if (!_success) exitWith {diag_log "Mechanic's Truck Event: No suitable locations found.";}; + +local _near = nearestLocations [_pos, ["NameCityCapital","NameCity","NameVillage","NameLocal"],1000]; +local _loc = "Unknown Location"; +if (count _near > 0) then { + _loc = text (_near select 0); +}; + +diag_log format["Mechanic's Truck Event spawning near %1, at %2", _loc, _pos]; + +// Vehicle Upgrade kits - these include all parts to fully upgrade a DZE vehicle. +local _kit = [ + [["ItemTruckORP",1],["ItemTruckAVE",1],["ItemTruckLRK",1],["ItemTruckTNK",1],["PartEngine",2],["PartWheel",6],["ItemScrews",8],["PartGeneric",10],["equip_metal_sheet",5],["ItemWoodCrateKit",2],["PartFueltank",3],["ItemGunRackKit",2],["ItemFuelBarrel",2]], + [["ItemORP",1],["ItemAVE",1],["ItemLRK",1],["ItemTNK",1],["PartEngine",2],["PartWheel",4],["ItemScrews",8],["equip_metal_sheet",6],["PartGeneric",8],["ItemWoodCrateKit",2],["ItemGunRackKit",2],["PartFueltank",2],["ItemFuelBarrel",1]], + [["ItemHeliAVE",1],["ItemHeliLRK",1],["ItemHeliTNK",1],["equip_metal_sheet",5],["ItemScrews",2],["ItemTinBar",3],["equip_scrapelectronics",5],["equip_floppywire",5],["PartGeneric",4],["ItemWoodCrateKit",1],["ItemGunRackKit",1],["PartFueltank",2],["ItemFuelBarrel",1]], + [["ItemTankORP",1],["ItemTankAVE",1],["ItemTankLRK",1],["ItemTankTNK",1],["PartEngine",6],["PartGeneric",6],["ItemScrews",6],["equip_metal_sheet",8],["ItemWoodCrateKit",2],["ItemGunRackKit",2],["PartFueltank",6],["ItemFuelBarrel",4]] +] call BIS_fnc_selectRandom; + +// Tools needed to upgrade vehicles. +local _tools = ["ItemToolbox","ItemCrowbar","ItemSolder_DZE"]; + +if (_type == "Hint") then { + RemoteMessage = ["hintNoImage",["STR_CL_ESE_MECHANIC_TITLE",["STR_CL_ESE_MECHANIC_START",_loc]],[TITLE_COLOR,TITLE_SIZE]]; +} else { + RemoteMessage = ["titleText",["STR_CL_ESE_MECHANIC_START",_loc]]; +}; +publicVariable "RemoteMessage"; + +// Spawn truck +local _class = ["Ural_INS_DZE","Ural_CDF_DZE","UralOpen_CDF_DZE","Ural_TK_CIV_EP1_DZE","Ural_UN_EP1_DZE","UralCivil_DZE","UralCivil2_DZE","UralSupply_TK_EP1_DZE","UralReammo_CDF_DZE","UralReammo_INS_DZE","UralRepair_CDF_DZE","UralRepair_INS_DZE","V3S_Open_TK_CIV_EP1_DZE","V3S_Open_TK_EP1_DZE","V3S_Civ_DZE","V3S_TK_EP1_DZE","V3S_Camper_DZE","V3S_RA_TK_GUE_EP1_DZE","Kamaz_DZE","KamazOpen_DZE","KamazRepair_DZE","KamazReammo_DZE","MTVR_DES_EP1_DZE","MTVR_DZE","MTVR_Open_DZE","MtvrRepair_DZE","MtvrReammo_DZE","T810A_ACR_DZE","T810A_ACR_DES_DZE","T810A_ACR_OPEN_DZE","T810A_ACR_DES_OPEN_DZE","T810_ACR_REAMMO_DZE","T810_ACR_REAMMO_DES_DZE","T810_ACR_REPAIR_DZE","T810_ACR_REPAIR_DES_DZE"] call BIS_fnc_selectRandom; +local _truck = _class createVehicle _pos; +_truck setDir (getDir _garage - 180); // Turn truck around to face the door. +_truck setPosATL (_garage modelToWorld [8.56738,2.10254,-2.55316]); +_truck setVariable ["ObjectID","1", true]; +_truck setVariable ["CharacterID","0",true]; +dayz_serverObjectMonitor set [count dayz_serverObjectMonitor, _truck]; +clearWeaponCargoGlobal _truck; +clearMagazineCargoGlobal _truck; +_truck setVariable["Cleanup" + dayz_serverKey, true]; + +// Assign the hitpoints +{ + local _selection = getText(configFile >> "cfgVehicles" >> _class >> "HitPoints" >> _x >> "name"); + local _strH = "hit_" + (_selection); + _truck setHit[_selection,0]; + _truck setVariable [_strH,0,true]; +} count (_truck call vehicle_getHitpoints); + +// Add key to the gear of the truck +if (_key) then { + local _keyColor = ["Green","Red","Blue","Yellow","Black"] call BIS_fnc_selectRandom; + local _keyNumber = (floor(random 2500)) + 1; + local _keySelected = format["ItemKey%1%2",_keyColor,_keyNumber]; + local _isKeyOK = isClass(configFile >> "CfgWeapons" >> _keySelected); + local _characterID = str(getNumber(configFile >> "CfgWeapons" >> _keySelected >> "keyid")); + + if (_isKeyOK) then { + _truck addWeaponCargoGlobal [_keySelected,1]; + _truck setVariable ["CharacterID",_characterID,true]; + } else { + diag_log format ["Mechanic's Vehicle Event: There was a problem generating a key for the %1", _truck]; + }; +}; + +// Add the loot +{ + _truck addMagazineCargoGlobal [(_x select 0), (_x select 1)]; +} count _kit; + +{ + _truck addWeaponCargoGlobal [_x, 1]; +} count _tools; + +for "_i" from 1 to _numpacks do { + local _pack = ["CzechBackpack_DZE1","WandererBackpack_DZE1","LegendBackpack_DZE1","CoyoteBackpack_DZE1","LargeGunBag_DZE1"] call BIS_fnc_selectRandom; + _truck addBackpackCargoGlobal [_pack,1]; +}; + +// Add the publishing event handler +_truck addEventHandler ["GetIn", { + local _truck = _this select 0; + RemoteMessage = ["rollingMessages","STR_CL_DZMS_VEH1"]; + (owner (_this select 2)) publicVariableClient "RemoteMessage"; + local _class = typeOf _truck; + local _worldspace = [getDir _truck, getPosATL _truck]; + _truck setVariable["Cleanup" + dayz_serverKey, false]; + local _uid = _worldspace call dayz_objectUID2; + format ["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:", dayZ_instance, _class, 0, (_truck getVariable ["CharacterID", "0"]), _worldspace, [getWeaponCargo _truck,getMagazineCargo _truck,getBackpackCargo _truck], [], 1, _uid] call server_hiveWrite; + local _result = (format["CHILD:388:%1:", _uid]) call server_hiveReadWrite; + + if ((_result select 0) != "PASS") then { + deleteVehicle _truck; + diag_log format ["Mechanic's Vehicle Event PublishVeh Error: failed to get id for %1 : UID %2.",_class, _uid]; + } else { + _truck setVariable ["ObjectID", (_result select 1), true]; + _truck setVariable ["lastUpdate",diag_tickTime]; + _truck call fnc_veh_ResetEH; + PVDZE_veh_Init = _truck; + publicVariable "PVDZE_veh_Init"; + if (DEBUG) then {diag_log ("Mechanic's Vehicle Event PublishVeh: Created " + (_class) + " with ID " + str(_uid));}; + }; +}]; + +local _time = diag_tickTime; +local _done = false; +local _visited = false; +local _isNear = true; +local _markers = [1,1,1]; + +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +_markers set [0, [_pos, "MechanicsVeh" + str _time, "ColorBrown", "","ELLIPSE", "", [150,150], [], 0.7]]; +if (_nameMarker) then {_markers set [1, [_pos, "MechanicsVehDot" + str _time, "ColorBlack", "mil_dot","ICON", "", [], ["STR_CL_ESE_MECHANIC_TITLE"], 0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; + +while {!_done} do { + uiSleep 3; + if (_visitMark && !_visited) then { + { + if (isPlayer _x && {_x distance _pos <= _distance}) exitWith { + _visited = true; + _markers set [2, [[(_pos select 0), (_pos select 1) + 25], "MechanicsVehVmarker" + str _time, "ColorBlack", "hd_pickup","ICON", "", [], [], 0]]; + PVDZ_ServerMarkerSend = ["createSingle",(_markers select 2)]; + publicVariable "PVDZ_ServerMarkerSend"; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + }; + } count playableUnits; + }; + + if (_timeout != -1) then { + if (diag_tickTime - _time >= _timeout * 60) then { + _done = true; + }; + }; +}; + +// If player is near, don't delete the truck. +while {_isNear} do { + {if (isPlayer _x && _x distance _pos >= 30) exitWith {_isNear = false;};} count playableUnits; +}; + +// Tell all clients to remove the markers from the map. +local _remove = []; +{ + if (typeName _x == "ARRAY") then { + _remove set [count _remove, (_x select 1)]; + }; +} count _markers; + +// Delete the truck if it has not been claimed. +if (_truck getVariable ("Cleanup" + dayz_serverKey)) then {deleteVehicle _truck;}; + +PVDZ_ServerMarkerSend = ["end",_remove]; +publicVariable "PVDZ_ServerMarkerSend"; +DZE_ServerMarkerArray set [_markerIndex, -1]; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/modules/pirate_treasure.sqf b/@DayZ_Epoch_Server/addons/dayz_server/modules/pirate_treasure.sqf new file mode 100755 index 0000000..7c015c6 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/modules/pirate_treasure.sqf @@ -0,0 +1,139 @@ +/* + Original Treasure Event by Aidem + Original "crate visited" marker concept and code by Payden + Rewritten and updated for DayZ Epoch 1.0.6+ by JasonTM + Updated for DayZ Epoch 1.0.7+ by JasonTM + Last update: 06-01-2021 +*/ + +local _spawnChance = 1; // Percentage chance of event happening.The number must be between 0 and 1. 1 = 100% chance. +local _gemChance = .25; // Chance that a gem will be added to the crate. The number must be between 0 and 1. 1 = 100% chance. +local _radius = 350; // Radius the loot can spawn and used for the marker +local _timeout = 20; // Time it takes for the event to time out (in minutes). To disable timeout set to -1. +local _debug = false; // Diagnostic logs used for troubleshooting. +local _nameMarker = false; // Center marker with the name of the mission. +local _markPos = false; // Puts a marker exactly were the loot spawns. +local _lootAmount = 4; // This is the number of times a random loot selection is made. +local _weapons = 3; // The number of gold and silver guns to include in the crate. +local _type = "TitleText"; // Type of announcement message. Options "Hint","TitleText". ***Warning: Hint appears in the same screen space as common debug monitors +local _visitMark = false; // Places a "visited" check mark on the mission if a player gets within range of the crate. +local _distance = 20; // Distance from crate before crate is considered "visited" +local _crate = "GuerillaCacheBox"; +#define TITLE_COLOR "#FFFF66" // Hint Option: Color of Top Line +#define TITLE_SIZE "1.75" // Hint Option: Size of top line +#define IMAGE_SIZE "4" // Hint Option: Size of the image + +local _lootList = [[5,"ItemGoldBar"],[3,"ItemGoldBar10oz"],"ItemBriefcase100oz",[20,"ItemSilverBar"],[10,"ItemSilverBar10oz"]]; +local _weaponList = ["AKS_Gold_DZ","AKS_Silver_DZ","SVD_Gold_DZ","Revolver_Gold_DZ","Colt_Anaconda_Gold_DZ","DesertEagle_Gold_DZ","DesertEagle_Silver_DZ"]; + +if (random 1 > _spawnChance and !_debug) exitWith {}; + +local _pos = [getMarkerPos "center",0,(((getMarkerSize "center") select 1)*0.75),10,0,.3,0] call BIS_fnc_findSafePos; + +diag_log format["Pirate Treasure Event Spawning At %1", _pos]; + +local _lootPos = [_pos,0,(_radius - 100),10,0,2000,0] call BIS_fnc_findSafePos; + +if (_debug) then {diag_log format["Pirate Treasure Event: creating ammo box at %1", _lootPos];}; + +local _box = _crate createVehicle [0,0,0]; +_box setPos _lootPos; +clearMagazineCargoGlobal _box; +clearWeaponCargoGlobal _box; + +local _cutGrass = createVehicle ["ClutterCutter_EP1", _lootPos, [], 0, "CAN_COLLIDE"]; +_cutGrass setPos _lootPos; + +if (random 1 < _gemChance) then { + local _gem = ["ItemTopaz","ItemObsidian","ItemSapphire","ItemAmethyst","ItemEmerald","ItemCitrine","ItemRuby"] call BIS_fnc_selectRandom; + _box addMagazineCargoGlobal [_gem,1]; +}; + +for "_i" from 1 to _lootAmount do { + local _loot = _lootList call BIS_fnc_selectRandom; + + if ((typeName _loot) == "ARRAY") then { + _box addMagazineCargoGlobal [_loot select 1,_loot select 0]; + } else { + _box addMagazineCargoGlobal [_loot,1]; + }; +}; + +for "_i" from 1 to _weapons do { + local _wep = _weaponList call BIS_fnc_selectRandom; + _box addWeaponCargoGlobal [_wep,1]; + + local _ammoArray = getArray (configFile >> "CfgWeapons" >> _wep >> "magazines"); + if (count _ammoArray > 0) then { + local _mag = _ammoArray select 0; + _box addMagazineCargoGlobal [_mag, (3 + floor(random 3))]; + }; +}; + +local _pack = ["Patrol_Pack_DZE1","Assault_Pack_DZE1","Czech_Vest_Pouch_DZE1","TerminalPack_DZE1","TinyPack_DZE1","ALICE_Pack_DZE1","TK_Assault_Pack_DZE1","CompactPack_DZE1","British_ACU_DZE1","GunBag_DZE1","NightPack_DZE1","SurvivorPack_DZE1","AirwavesPack_DZE1","CzechBackpack_DZE1","WandererBackpack_DZE1","LegendBackpack_DZE1","CoyoteBackpack_DZE1","LargeGunBag_DZE1"] call BIS_fnc_selectRandom; +_box addBackpackCargoGlobal [_pack,1]; + +if (_type == "Hint") then { + local _img = (getText (configFile >> "CfgMagazines" >> "ItemRuby" >> "picture")); + RemoteMessage = ["hintWithImage",["STR_CL_ESE_TREASURE_TITLE","STR_CL_ESE_TREASURE"],[_img,TITLE_COLOR,TITLE_SIZE,IMAGE_SIZE]]; +} else { + RemoteMessage = ["titleText","STR_CL_ESE_TREASURE"]; +}; +publicVariable "RemoteMessage"; + +if (_debug) then {diag_log format["Pirate Treasure event setup, waiting for %1 minutes", _timeout];}; + +local _time = diag_tickTime; +local _done = false; +local _visited = false; +local _isNear = true; +local _markers = [1,1,1,1]; + +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +_markers set [0, [_pos, format ["eventMark%1", _time], "ColorYellow", "","ELLIPSE", "", [_radius, _radius], [], 0.5]]; +if (_nameMarker) then {_markers set [1, [_pos, format ["eventDot%1",_time], "ColorBlack", "mil_dot","ICON", "", [], ["STR_CL_ESE_TREASURE_TITLE"], 0]];}; +if (_markPos) then {_markers set [2, [_lootPos, format ["eventDebug%1",_time], "ColorYellow", "mil_dot","ICON", "", [], [], 0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; + +while {!_done} do { + uiSleep 3; + if (_visitMark && !_visited) then { + { + if (isPlayer _x && {_x distance _box <= _distance}) exitWith { + _visited = true; + _markers set [3, [[(_pos select 0), (_pos select 1) + 25], format ["EventVisit%1", _time], "ColorBlack", "hd_pickup","ICON", "", [], [], 0]]; + PVDZ_ServerMarkerSend = ["createSingle",(_markers select 3)]; + publicVariable "PVDZ_ServerMarkerSend"; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + }; + } count playableUnits; + }; + + if (_timeout != -1) then { + if (diag_tickTime - _time >= _timeout*60) then { + _done = true; + }; + }; +}; + +while {_isNear} do { + {if (isPlayer _x && _x distance _box >= _distance) exitWith {_isNear = false};} count playableUnits; +}; + +// Tell all clients to remove the markers from the map +local _remove = []; +{ + if (typeName _x == "ARRAY") then { + _remove set [count _remove, (_x select 1)]; + }; +} count _markers; +PVDZ_ServerMarkerSend = ["end",_remove]; +publicVariable "PVDZ_ServerMarkerSend"; +DZE_ServerMarkerArray set [_markerIndex, -1]; +deleteVehicle _box; +deleteVehicle _cutGrass; + +diag_log "Pirate Treasure Event Ended"; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/modules/rubble_town.sqf b/@DayZ_Epoch_Server/addons/dayz_server/modules/rubble_town.sqf new file mode 100755 index 0000000..3962be2 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/modules/rubble_town.sqf @@ -0,0 +1,212 @@ +/* + Original Rubble Town Event by Caveman + Rewritten and updated for DayZ Epoch 1.0.6+ by JasonTM + Updated for DayZ Epoch 1.0.7+ by JasonTM + Last update: 06-01-2021 +*/ + +local _spawnChance = 1; // Percentage chance of event happening.The number must be between 0 and 1. 1 = 100% chance. +local _chainsawChance = .5; // Chance that a chainsaw with mixed gas will be added to the crate. The number must be between 0 and 1. 1 = 100% chance. +local _radius = 200; // Radius the loot can spawn and used for the marker +local _timeout = 20; // Time it takes for the event to time out (in minutes). To disable timeout set to -1. +local _debug = false; // Diagnostic logs used for troubleshooting. +local _nameMarker = true; // Center marker with the name of the mission. +local _markPos = false; // Puts a marker exactly where the loot spawns. +local _lootAmount = 30; // This is the number of times a random loot selection is made. +local _wepAmount = 4; // This is the number of times a random weapon selection is made. +local _messageType = "TitleText"; // Type of announcement message. Options "Hint","TitleText". ***Warning: Hint appears in the same screen space as common debug monitors +local _visitMark = false; // Places a "visited" check mark on the mission if a player gets within range of the crate. +local _visitDistance = 20; // Distance from crate before crate is considered "visited" +local _crate = "GuerillaCacheBox"; +#define TITLE_COLOR "#ff9933" // Hint Option: Color of Top Line +#define TITLE_SIZE "1.75" // Hint Option: Size of top line + +local _bloodbag = ["bloodBagONEG","ItemBloodbag"] select dayz_classicBloodBagSystem; + +local _lootList = [ + _bloodbag,"ItemBandage","ItemAntibiotic","ItemEpinephrine","ItemMorphine","ItemPainkiller","ItemAntibacterialWipe","ItemHeatPack","ItemKiloHemp", // meds + "Skin_Camo1_DZ","Skin_CZ_Soldier_Sniper_EP1_DZ","Skin_CZ_Special_Forces_GL_DES_EP1_DZ","Skin_Drake_Light_DZ","Skin_FR_OHara_DZ","Skin_FR_Rodriguez_DZ","Skin_Graves_Light_DZ","Skin_Sniper1_DZ","Skin_Soldier1_DZ","Skin_Soldier_Bodyguard_AA12_PMC_DZ", // skins + "ItemSodaSmasht","ItemSodaClays","ItemSodaR4z0r","ItemSodaPepsi","ItemSodaCoke","FoodCanBakedBeans","FoodCanPasta","FoodCanSardines","FoodMRE","ItemWaterBottleBoiled","ItemSodaRbull","FoodBeefCooked","FoodMuttonCooked","FoodChickenCooked","FoodRabbitCooked","FoodBaconCooked","FoodGoatCooked","FoodDogCooked","FishCookedTrout","FishCookedSeaBass","FishCookedTuna", // food + "PartFueltank","PartWheel","PartEngine","PartGlass","PartGeneric","PartVRotor","ItemJerrycan","ItemFuelBarrel","equip_hose", // vehicle parts + "ItemDesertTent","ItemDomeTent","ItemTent"// tents +]; + +local _weapons = ["M16A2_DZ","M4A1_DZ","M4A1_SD_DZ","SA58_RIS_DZ","L85A2_DZ","L85A2_SD_DZ","AKM_DZ","G36C_DZ","G36C_SD_DZ","G36A_Camo_DZ","G36K_Camo_DZ","G36K_Camo_SD_DZ","CTAR21_DZ","ACR_WDL_DZ","ACR_WDL_SD_DZ","ACR_BL_DZ","ACR_BL_SD_DZ","ACR_DES_DZ","ACR_DES_SD_DZ","ACR_SNOW_DZ","ACR_SNOW_SD_DZ","AK74_DZ","AK74_SD_DZ","AK107_DZ","CZ805_A1_DZ","CZ805_A1_GL_DZ","CZ805_A2_DZ","CZ805_A2_SD_DZ","CZ805_B_GL_DZ","Famas_DZ","Famas_SD_DZ","G3_DZ","HK53A3_DZ","HK416_DZ","HK416_SD_DZ","HK417_DZ","HK417_SD_DZ","HK417C_DZ","M1A_SC16_BL_DZ","M1A_SC16_TAN_DZ","M1A_SC2_BL_DZ","Masada_DZ","Masada_SD_DZ","Masada_BL_DZ","Masada_BL_SD_DZ","MK14_DZ","MK14_SD_DZ","MK16_DZ","MK16_CCO_SD_DZ","MK16_BL_CCO_DZ","MK16_BL_Holo_SD_DZ","MK17_DZ","MK17_CCO_SD_DZ","MK17_ACOG_SD_DZ","MK17_BL_Holo_DZ","MK17_BL_GL_ACOG_DZ","MR43_DZ","PDR_DZ","RK95_DZ","RK95_SD_DZ","SCAR_H_AK_DZ","SteyrAug_A3_Green_DZ","SteyrAug_A3_Black_DZ","SteyrAug_A3_Blue_DZ","XM8_DZ","XM8_DES_DZ","XM8_GREY_DZ","XM8_GREY_2_DZ","XM8_GL_DZ","XM8_DES_GL_DZ","XM8_GREY_GL_DZ","XM8_Compact_DZ","XM8_DES_Compact_DZ","XM8_GREY_Compact_DZ","XM8_GREY_2_Compact_DZ","XM8_SD_DZ"]; + +if (random 1 > _spawnChance and !_debug) exitWith {}; + +local _pos = [getMarkerPos "center",0,(((getMarkerSize "center") select 1)*0.75),10,0,.3,0] call BIS_fnc_findSafePos; + +diag_log format["Rubble Town Event Spawning At %1", _pos]; + +local _posarray = [ + [(_pos select 0) - 39.8, (_pos select 1) + 11], + [(_pos select 0) - 47.7, (_pos select 1) + 37.8], + [(_pos select 0) - 24.3, (_pos select 1) + 38.2], + [(_pos select 0) - 6.6, (_pos select 1) + 42.7], + [(_pos select 0) - 16.5, (_pos select 1) - 6.5], + [(_pos select 0) - 56.8, (_pos select 1) + 30.3], + [(_pos select 0) - 23.3, (_pos select 1) + 22.5], + [(_pos select 0) + 1, (_pos select 1) + 20.7], + [(_pos select 0) - 21.7, (_pos select 1) + 6.7], + [(_pos select 0) - 8.7, (_pos select 1) + 29.6], + [(_pos select 0) + 9.3, (_pos select 1) + 9.4] +]; + +local _spawnObjects = { + local _pos = _this select 1; + local _objArray = []; + local _obj = objNull; + { + local _offset = _x select 1; + local _position = [(_pos select 0) + (_offset select 0), (_pos select 1) + (_offset select 1), 0]; + local _obj = (_x select 0) createVehicle [0,0,0]; + if (count _x > 2) then { + _obj setDir (_x select 2); + }; + _obj setPos _position; + _obj setVectorUp surfaceNormal position _obj; + _obj addEventHandler ["HandleDamage",{0}]; + _obj enableSimulation false; + _objArray set [count _objArray, _obj]; + } count (_this select 0); + _objArray +}; + +local _lootPos = _posarray call BIS_fnc_selectRandom; + +if (_debug) then {diag_log format["Rubble Town Event: creating ammo box at %1", _lootPos];}; + +local _box = _crate createVehicle [0,0,0]; +_box setPos _lootPos; +clearMagazineCargoGlobal _box; +clearWeaponCargoGlobal _box; + +local _clutter = createVehicle ["ClutterCutter_EP1", _lootPos, [], 0, "CAN_COLLIDE"]; +_clutter setPos _lootPos; + +local _objects = [[ + ["MAP_HouseBlock_B2_ruins",[0,0]], + ["MAP_rubble_rocks_01",[-37,-5.8]], + ["MAP_HouseBlock_A1_1_ruins",[-52,13]], + ["MAP_rubble_bricks_02",[-22.5,-7.2]], + ["MAP_rubble_bricks_03",[-22.8,2.8]], + ["MAP_rubble_bricks_04",[-32.7,27.6]], + ["MAP_HouseV_2L_ruins",[-21.3,14.6]], + ["MAP_HouseBlock_B3_ruins",[-12.8,-15.7]], + ["MAP_A_MunicipalOffice_ruins",[26,-1.6]], + ["MAP_HouseBlock_A2_ruins",[-67.3,36.3]], + ["MAP_Ind_Stack_Big_ruins",[15,43.3]], + ["MAP_Nasypka_ruins",[-24,26.7]], + ["MAP_R_HouseV_2L",[-8.2,22.7]], + ["MAP_ruin_01",[.6,41.5]], + ["MAP_ruin_01",[-36.7,35.7]], + ["HMMWVWreck",[-14.4,-7.3]], + ["T72Wreck",[6,-9.7]], + ["UralWreck",[-31.3,36.6],-19.75], + ["UralWreck",[-37,11]], + ["UralWreck",[3.7,20.4],35.5], + ["UH60_ARMY_Wreck_DZ",[-21.7,38.3]] +],_pos] call _spawnObjects; + +if (random 1 < _chainsawChance) then { + local _saw = ["ChainSaw","ChainSawB","ChainSawG","ChainSawP","ChainSawR"] call BIS_fnc_selectRandom; + _box addWeaponCargoGlobal [_saw,1]; + _box addMagazineCargoGlobal ["ItemJerryMixed",2]; +}; + +for "_i" from 1 to _lootAmount do { + local _loot = _lootList call BIS_fnc_selectRandom; + _box addMagazineCargoGlobal [_loot,1]; +}; + +for "_i" from 1 to _wepAmount do { + + local _weapon = _weapons call BIS_fnc_selectRandom; + _box addWeaponCargoGlobal [_weapon,1]; + + local _ammoArray = getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines"); + if (count _ammoArray > 0) then { + local _mag = _ammoArray select 0; + _box addMagazineCargoGlobal [_mag, (3 + round(random 2))]; + }; + + local _cfg = configFile >> "CfgWeapons" >> _weapon >> "Attachments"; + if (isClass _cfg && {count _cfg > 0}) then { + local _attach = configName (_cfg call BIS_fnc_selectRandom); + if !(_attach == "Attachment_Tws") then { // no thermals in regular game + _box addMagazineCargoGlobal [_attach,1]; + }; + }; +}; + +local _pack = ["Patrol_Pack_DZE1","Assault_Pack_DZE1","Czech_Vest_Pouch_DZE1","TerminalPack_DZE1","TinyPack_DZE1","ALICE_Pack_DZE1","TK_Assault_Pack_DZE1","CompactPack_DZE1","British_ACU_DZE1","GunBag_DZE1","NightPack_DZE1","SurvivorPack_DZE1","AirwavesPack_DZE1","CzechBackpack_DZE1","WandererBackpack_DZE1","LegendBackpack_DZE1","CoyoteBackpack_DZE1","LargeGunBag_DZE1"] call BIS_fnc_selectRandom; +_box addBackpackCargoGlobal [_pack,1]; + +if (_messageType == "Hint") then { + RemoteMessage = ["hintNoImage",["STR_CL_ESE_RUBBLETOWN_TITLE","STR_CL_ESE_RUBBLETOWN"],[TITLE_COLOR,TITLE_SIZE]]; +} else { + RemoteMessage = ["titleText","STR_CL_ESE_RUBBLETOWN"]; +}; +publicVariable "RemoteMessage"; + +if (_debug) then {diag_log format["Rubble Town Event setup, waiting for %1 minutes", _timeout];}; + +local _time = diag_tickTime; +local _finished = false; +local _visited = false; +local _isNear = true; +local _markers = [1,1,1,1]; + +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +_markers set [0, [_pos, format ["eventMark%1", _time], "ColorOrange", "","ELLIPSE", "", [(_radius + 50), (_radius + 50)], [], 0.5]]; +if (_nameMarker) then {_markers set [1, [_pos, format ["eventDot%1",_time], "ColorBlack", "mil_dot","ICON", "", [], ["STR_CL_ESE_RUBBLETOWN_TITLE"], 0]];}; +if (_markPos) then {_markers set [2, [_lootPos, format ["eventDebug%1",_time], "ColorOrange", "mil_dot","ICON", "", [], [], 0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; + +while {!_finished} do { + uiSleep 3; + if (_visitMark && !_visited) then { + { + if (isPlayer _x && {_x distance _box <= _distance}) exitWith { + _visited = true; + _markers set [3, [[(_pos select 0), (_pos select 1) + 25], format ["EventVisit%1", _time], "ColorBlack", "hd_pickup","ICON", "", [], [], 0]]; + PVDZ_ServerMarkerSend = ["createSingle",(_markers select 3)]; + publicVariable "PVDZ_ServerMarkerSend"; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + }; + } count playableUnits; + }; + + if (_timeout != -1) then { + if (diag_tickTime - _time >= _timeout*60) then { + _finished = true; + }; + }; +}; + +while {_isNear} do { + {if (isPlayer _x && _x distance _box >= _visitDistance) exitWith {_isNear = false};} count playableUnits; +}; + +deleteVehicle _box; +deleteVehicle _clutter; +// Tell all clients to remove the markers from the map +local _remove = []; +{ + if (typeName _x == "ARRAY") then { + _remove set [count _remove, (_x select 1)]; + }; +} count _markers; +PVDZ_ServerMarkerSend = ["end",_remove]; +publicVariable "PVDZ_ServerMarkerSend"; +DZE_ServerMarkerArray set [_markerIndex, -1]; + +{ + deleteVehicle _x; +} count _objects; + +diag_log "Rubble Town Event Ended"; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/modules/special_forces.sqf b/@DayZ_Epoch_Server/addons/dayz_server/modules/special_forces.sqf new file mode 100755 index 0000000..5d97716 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/modules/special_forces.sqf @@ -0,0 +1,139 @@ +/* + Original Military "Special Forces" Event by Aidem + Original "crate visited" marker concept and code by Payden + Rewritten and updated for DayZ Epoch 1.0.6+ by JasonTM + Updated for DayZ Epoch 1.0.7+ by JasonTM + Last update: 06-01-2021 +*/ + +local _spawnChance = 1; // Percentage chance of event happening.The number must be between 0 and 1. 1 = 100% chance. +local _sniperChance = .25; // Chance that an as50, KSVK, m107, or Anzio 20 will be added to the crate. The number must be between 0 and 1. 1 = 100% chance. +local _radius = 350; // Radius the loot can spawn and used for the marker +local _timeout = 2; // Time it takes for the event to time out (in minutes). To disable timeout set to -1. +local _debug = false; // Diagnostic logs used for troubleshooting. +local _nameMarker = false; // Center marker with the name of the mission. +local _markPos = false; // Puts a marker exactly were the loot spawns. +local _lootAmount = 10; // This is the number of times a random loot selection is made. +local _type = "TitleText"; // Type of announcement message. Options "Hint","TitleText". ***Warning: Hint appears in the same screen space as common debug monitors +local _visitMark = false; // Places a "visited" check mark on the mission if a player gets within range of the crate. +local _distance = 20; // Distance from crate before crate is considered "visited" +local _crate = "DZ_AmmoBoxBigUS"; +local _weapons = ["M16A2_DZ","M4A1_DZ","M4A1_SD_DZ","SA58_RIS_DZ","L85A2_DZ","L85A2_SD_DZ","AKM_DZ","G36C_DZ","G36C_SD_DZ","G36A_Camo_DZ","G36K_Camo_DZ","G36K_Camo_SD_DZ","CTAR21_DZ","ACR_WDL_DZ","ACR_WDL_SD_DZ","ACR_BL_DZ","ACR_BL_SD_DZ","ACR_DES_DZ","ACR_DES_SD_DZ","ACR_SNOW_DZ","ACR_SNOW_SD_DZ","AK74_DZ","AK74_SD_DZ","AK107_DZ","CZ805_A1_DZ","CZ805_A1_GL_DZ","CZ805_A2_DZ","CZ805_A2_SD_DZ","CZ805_B_GL_DZ","Famas_DZ","Famas_SD_DZ","G3_DZ","HK53A3_DZ","HK416_DZ","HK416_SD_DZ","HK417_DZ","HK417_SD_DZ","HK417C_DZ","M1A_SC16_BL_DZ","M1A_SC16_TAN_DZ","M1A_SC2_BL_DZ","Masada_DZ","Masada_SD_DZ","Masada_BL_DZ","Masada_BL_SD_DZ","MK14_DZ","MK14_SD_DZ","MK16_DZ","MK16_CCO_SD_DZ","MK16_BL_CCO_DZ","MK16_BL_Holo_SD_DZ","MK17_DZ","MK17_CCO_SD_DZ","MK17_ACOG_SD_DZ","MK17_BL_Holo_DZ","MK17_BL_GL_ACOG_DZ","MR43_DZ","PDR_DZ","RK95_DZ","RK95_SD_DZ","SCAR_H_AK_DZ","SteyrAug_A3_Green_DZ","SteyrAug_A3_Black_DZ","SteyrAug_A3_Blue_DZ","XM8_DZ","XM8_DES_DZ","XM8_GREY_DZ","XM8_GREY_2_DZ","XM8_GL_DZ","XM8_DES_GL_DZ","XM8_GREY_GL_DZ","XM8_Compact_DZ","XM8_DES_Compact_DZ","XM8_GREY_Compact_DZ","XM8_GREY_2_Compact_DZ","XM8_SD_DZ"]; +local _snipers = ["Anzio_20_DZ","BAF_AS50_scoped_DZ","m107_DZ","KSVK_DZE"]; +#define TITLE_COLOR "#FF0000" // Hint Option: Color of Top Line +#define TITLE_SIZE "1.75" // Hint Option: Size of top line +#define IMAGE_SIZE "4" // Hint Option: Size of the image + +if (random 1 > _spawnChance and !_debug) exitWith {}; + +local _pos = [getMarkerPos "center",0,(((getMarkerSize "center") select 1)*0.75),10,0,.3,0] call BIS_fnc_findSafePos; + +diag_log format["Special Forces Event spawning at %1", _pos]; + +local _lootPos = [_pos,0,(_radius - 100),10,0,2000,0] call BIS_fnc_findSafePos; + +if (_debug) then {diag_log format["Special Forces Event: creating ammo box at %1", _lootPos];}; + + +local _box = _crate createVehicle [0,0,0]; +_box setPos _lootPos; +clearMagazineCargoGlobal _box; +clearWeaponCargoGlobal _box; + +if (random 1 < _sniperChance) then { + local _wep = _snipers call BIS_fnc_selectRandom; + _box addWeaponCargoGlobal [_wep,1]; + + local _ammoArray = getArray (configFile >> "CfgWeapons" >> _wep >> "magazines"); + if (count _ammoArray > 0) then { + local _mag = _ammoArray select 0; + _box addMagazineCargoGlobal [_mag, (3 + round(random 2))]; + }; +}; + +for "_i" from 1 to _lootAmount do { + + local _wep = _weapons call BIS_fnc_selectRandom; + _box addWeaponCargoGlobal [_wep,1]; + + local _ammoArray = getArray (configFile >> "CfgWeapons" >> _wep >> "magazines"); + if (count _ammoArray > 0) then { + local _mag = _ammoArray select 0; + _box addMagazineCargoGlobal [_mag, (3 + floor(random 3))]; + }; + + local _cfg = configFile >> "CfgWeapons" >> _wep >> "Attachments"; + if (isClass _cfg && count _cfg > 0) then { + local _attach = configName (_cfg call BIS_fnc_selectRandom); + if !(_attach == "Attachment_Tws") then { // no thermal optics in regular game + _box addMagazineCargoGlobal [_attach,1]; + }; + }; +}; + +local _pack = ["Patrol_Pack_DZE1","Assault_Pack_DZE1","Czech_Vest_Pouch_DZE1","TerminalPack_DZE1","TinyPack_DZE1","ALICE_Pack_DZE1","TK_Assault_Pack_DZE1","CompactPack_DZE1","British_ACU_DZE1","GunBag_DZE1","NightPack_DZE1","SurvivorPack_DZE1","AirwavesPack_DZE1","CzechBackpack_DZE1","WandererBackpack_DZE1","LegendBackpack_DZE1","CoyoteBackpack_DZE1","LargeGunBag_DZE1"] call BIS_fnc_selectRandom; +_box addBackpackCargoGlobal [_pack,1]; + +if (_type == "Hint") then { + local _img = getText (configFile >> "CfgWeapons" >> "UK59_DZ" >> "picture"); + RemoteMessage = ["hintWithImage",["STR_CL_ESE_MILITARY_TITLE","STR_CL_ESE_MILITARY"],[_img,TITLE_COLOR,TITLE_SIZE,IMAGE_SIZE]]; +} else { + RemoteMessage = ["titleText","STR_CL_ESE_MILITARY"]; +}; +publicVariable "RemoteMessage"; + +if (_debug) then {diag_log format["Special Forces Event setup, waiting for %1 minutes", _timeout];}; + +local _time = diag_tickTime; +local _done = false; +local _visited = false; +local _isNear = true; +local _markers = [1,1,1,1]; + +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +_markers set [0, [_pos, format ["eventMark%1", _time], "ColorRed", "","ELLIPSE", "", [_radius, _radius], [], 0.5]]; +if (_nameMarker) then {_markers set [1, [_pos, format ["eventDot%1",_time], "ColorBlack", "mil_dot","ICON", "", [], ["STR_CL_ESE_MILITARY_TITLE"], 0]];}; +if (_markPos) then {_markers set [2, [_lootPos, format ["eventDebug%1",_time], "ColorRed", "mil_dot","ICON", "", [], [], 0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; + +while {!_done} do { + uiSleep 3; + if (_visitMark && !_visited) then { + { + if (isPlayer _x && {_x distance _box <= _distance}) exitWith { + _visited = true; + _markers set [3, [[(_pos select 0), (_pos select 1) + 25], format ["EventVisit%1", _time], "ColorBlack", "hd_pickup","ICON", "", [], [], 0]]; + PVDZ_ServerMarkerSend = ["createSingle",(_markers select 3)]; + publicVariable "PVDZ_ServerMarkerSend"; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + }; + } count playableUnits; + }; + + if (_timeout != -1) then { + if (diag_tickTime - _time >= _timeout*60) then { + _done = true; + }; + }; +}; + +while {_isNear} do { + {if (isPlayer _x && _x distance _box >= _distance) exitWith {_isNear = false};} count playableUnits; +}; + +deleteVehicle _box; +// Tell all clients to remove the markers from the map +local _remove = []; +{ + if (typeName _x == "ARRAY") then { + _remove set [count _remove, (_x select 1)]; + }; +} count _markers; +PVDZ_ServerMarkerSend = ["end",_remove]; +publicVariable "PVDZ_ServerMarkerSend"; +DZE_ServerMarkerArray set [_markerIndex, -1]; + +diag_log "Special Forces Event Ended"; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/modules/un_supply.sqf b/@DayZ_Epoch_Server/addons/dayz_server/modules/un_supply.sqf new file mode 100755 index 0000000..c045595 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/modules/un_supply.sqf @@ -0,0 +1,132 @@ +/* + Original UN Supply Event by Aidem + Original "crate visited" marker concept and code by Payden + Rewritten and updated for DayZ Epoch 1.0.6+ by JasonTM + Updated for DayZ Epoch 1.0.7+ by JasonTM + Last update: 06-01-2021 +*/ + +local _spawnChance = 1; // Percentage chance of event happening. The number must be between 0 and 1. 1 = 100% chance. +local _vaultChance = .25; // Percentage chance of safe or lockbox being added to the crate. The number must be between 0 and 1. 1 = 100% chance. +local _radius = 350; // Radius the loot can spawn and used for the marker +local _debug = false; // Diagnostic logs used for troubleshooting. +local _nameMarker = false; // Center marker with the name of the mission. +local _timeout = 3; // Time it takes for the event to time out (in minutes). To disable timeout set to -1. +local _markPos = true; // Puts a marker exactly were the loot spawns. +local _lootAmount = 50; // This is the number of times a random loot selection is made. +local _type = "TitleText"; // Type of announcement message. Options "Hint","TitleText". ***Warning: Hint appears in the same screen space as common debug monitors +local _visitMark = false; // Places a "visited" check mark on the mission if a player gets within range of the crate. +local _distance = 20; // Distance from crate before crate is considered "visited" +local _crate = "DZ_AmmoBoxBigUS"; // Class name of loot crate. +#define TITLE_COLOR "#0D00FF" // Hint Option: Color of Top Line +#define TITLE_SIZE "1.75" // Hint Option: Size of top line +#define IMAGE_SIZE "4" // Hint Option: Size of the image + +local _bloodbag = ["bloodBagONEG","ItemBloodbag"] select dayz_classicBloodBagSystem; + +local _lootList = [ + "ItemAntibiotic3","ItemEpinephrine","ItemHeatPack","ItemMorphine","ItemBandage","ItemAntibacterialWipe","ItemPainkiller6","ItemSepsisBandage","equip_woodensplint","ItemKiloHemp",_bloodbag, // meds + "FoodCanBakedBeans","FoodCanFrankBeans","FoodCanPasta","FoodCanSardines","FoodCanBeef","FoodCanPotatoes","FoodCanGriff","FoodCanBadguy","FoodCanBoneboy","FoodCanCorn","FoodCanCurgon","FoodCanDemon","FoodCanFraggleos","FoodCanHerpy","FoodCanDerpy","FoodCanOrlok","FoodCanPowell","FoodCanTylers","FoodCanUnlabeled","FoodCanRusUnlabeled","FoodCanRusStew","FoodCanRusPork","FoodCanRusPeas","FoodCanRusMilk","FoodCanRusCorn","FoodChipsSulahoops","FoodChipsMysticales","FoodChipsChocolate","FoodCandyChubby","FoodCandyAnders","FoodCandyLegacys","FoodCakeCremeCakeClean","FoodCandyMintception","FoodPistachio","FoodNutmix","FoodMRE","FoodbaconCooked","FoodbeefCooked","FoodchickenCooked","FoodGoatCooked","FoodmuttonCooked","FoodrabbitCooked","FishCookedTrout","FishCookedSeaBass","FishCookedTuna", // food + "ItemSodaCoke","ItemSodaPepsi","ItemSodaMdew","ItemSodaMtngreen","ItemSodaR4z0r","ItemSodaClays","ItemSodaSmasht","ItemSodaDrwaste","ItemSodaFranka","ItemSodaLemonade","ItemSodaLirik","ItemSodaLvg","ItemSodaMzly","ItemSodaPeppsy","ItemSodaRabbit","ItemSodaSacrite","ItemSodaRocketFuel","ItemSodaGrapeDrink","ItemSherbet","ItemSodaRbull","ItemSodaOrangeSherbet","ItemWaterbottle","ItemWaterBottleSafe","ItemWaterBottleBoiled","ItemWaterBottleHerbal","ItemPlasticWaterBottleSafe","ItemPlasticWaterBottleBoiled","ItemPlasticWaterBottleHerbal", // drink + "PartFueltank","PartWheel","PartEngine","PartGlass","PartGeneric","PartVRotor","ItemJerrycan","ItemFuelBarrel","equip_hose", // vehicle parts + "ItemCanvas","ItemTent","ItemTentWinter","ItemDomeTent","ItemWinterDomeTent","ItemDesertTent","equip_floppywire","equip_scrapelectronics","equip_rope","equip_tent_poles" // tents and stuff +]; + +local _tools = ["ItemToolbox","ItemToolbox","ItemKnife","ItemEtool","ItemGPS","Binocular_Vector","NVGoggles_DZE","ItemHatchet","ItemCrowbar","ItemSledge"]; + +if (random 1 > _spawnChance and !_debug) exitWith {}; + +local _pos = [getMarkerPos "center",0,(((getMarkerSize "center") select 1)*0.75),10,0,.3,0] call BIS_fnc_findSafePos; + +diag_log format["UN Supply Drop Event spawning at %1", _pos]; + +local _lootPos = [_pos,0,(_radius * .75),10,0,2000,0] call BIS_fnc_findSafePos; + +if (_debug) then {diag_log format["UN Supply Drop: creating ammo box at %1", _lootPos];}; + +local _box = _crate createVehicle [0,0,0]; +_box setPos _lootPos; +clearMagazineCargoGlobal _box; +clearWeaponCargoGlobal _box; + +if (random 1 < _vaultChance) then { + local _vault = ["ItemVault","ItemLockbox"] call BIS_fnc_selectRandom; + _box addMagazineCargoGlobal [_vault,1]; +}; + +for "_i" from 1 to _lootAmount do { + local _loot = _lootList call BIS_fnc_selectRandom; + _box addMagazineCargoGlobal [_loot,1]; +}; + +for "_i" from 1 to 5 do { + local _tool = _tools call BIS_fnc_selectRandom; + _box addWeaponCargoGlobal [_tool,1]; +}; + +local _pack = ["Patrol_Pack_DZE1","Assault_Pack_DZE1","Czech_Vest_Pouch_DZE1","TerminalPack_DZE1","TinyPack_DZE1","ALICE_Pack_DZE1","TK_Assault_Pack_DZE1","CompactPack_DZE1","British_ACU_DZE1","GunBag_DZE1","NightPack_DZE1","SurvivorPack_DZE1","AirwavesPack_DZE1","CzechBackpack_DZE1","WandererBackpack_DZE1","LegendBackpack_DZE1","CoyoteBackpack_DZE1","LargeGunBag_DZE1"] call BIS_fnc_selectRandom; +_box addBackpackCargoGlobal [_pack,1]; + +if (_type == "Hint") then { + local _img = (getText (configFile >> "CfgVehicles" >> "Mi17_UN_CDF_EP1" >> "picture")); + RemoteMessage = ["hintWithImage",["STR_CL_ESE_UNSUPPLY_TITLE","STR_CL_ESE_UNSUPPLY"],[_img,TITLE_COLOR,TITLE_SIZE,IMAGE_SIZE]]; +} else { + RemoteMessage = ["titleText","STR_CL_ESE_UNSUPPLY"]; +}; +publicVariable "RemoteMessage"; + +if (_debug) then {diag_log format["U.N. Supply Drop Event setup, waiting for %1 minutes", _timeout];}; + +local _time = diag_tickTime; +local _done = false; +local _visited = false; +local _isNear = true; +local _markers = [1,1,1,1]; + +//[position,createMarker,setMarkerColor,setMarkerType,setMarkerShape,setMarkerBrush,setMarkerSize,setMarkerText,setMarkerAlpha] +_markers set [0, [_pos, format ["eventMark%1", _time], "ColorBlue", "","ELLIPSE", "", [_radius, _radius], [], 0.5]]; +if (_nameMarker) then {_markers set [1, [_pos, format ["eventDot%1",_time], "ColorBlack", "mil_dot","ICON", "", [], ["STR_CL_ESE_UNSUPPLY_TITLE"], 0]];}; +if (_markPos) then {_markers set [2, [_lootPos, format ["eventDebug%1",_time], "ColorBlue", "mil_dot","ICON", "", [], [], 0]];}; +DZE_ServerMarkerArray set [count DZE_ServerMarkerArray, _markers]; // Markers added to global array for JIP player requests. +local _markerIndex = count DZE_ServerMarkerArray - 1; +PVDZ_ServerMarkerSend = ["start",_markers]; +publicVariable "PVDZ_ServerMarkerSend"; + +while {!_done} do { + uiSleep 3; + if (_visitMark && !_visited) then { + { + if (isPlayer _x && {_x distance _box <= _distance}) exitWith { + _visited = true; + _markers set [3, [[(_pos select 0), (_pos select 1) + 25], format ["EventVisit%1", _time], "ColorBlack", "hd_pickup","ICON", "", [], [], 0]]; + PVDZ_ServerMarkerSend = ["createSingle",(_markers select 3)]; + publicVariable "PVDZ_ServerMarkerSend"; + DZE_ServerMarkerArray set [_markerIndex, _markers]; + }; + } count playableUnits; + }; + + if (_timeout != -1) then { + if (diag_tickTime - _time >= _timeout*60) then { + _done = true; + }; + }; +}; + +while {_isNear} do { + {if (isPlayer _x && _x distance _box >= _distance) exitWith {_isNear = false};} count playableUnits; +}; + +deleteVehicle _box; +// Tell all clients to remove the markers from the map +local _remove = []; +{ + if (typeName _x == "ARRAY") then { + _remove set [count _remove, (_x select 1)]; + }; +} count _markers; +PVDZ_ServerMarkerSend = ["end",_remove]; +publicVariable "PVDZ_ServerMarkerSend"; +DZE_ServerMarkerArray set [_markerIndex, -1]; + +diag_log "EVENT: U.N. Supply Crate Ended"; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/system/dynamic_vehicle.sqf b/@DayZ_Epoch_Server/addons/dayz_server/system/dynamic_vehicle.sqf new file mode 100755 index 0000000..ab34c26 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/system/dynamic_vehicle.sqf @@ -0,0 +1,287 @@ +local _Ratio1 = 1; +local _Ratio2 = 2; +local _Ratio3 = 3; + +if (MaxVehicleLimit > 300) then { + _Ratio1 = round(MaxVehicleLimit * 0.0034); + _Ratio2 = round(MaxVehicleLimit * 0.0067); + _Ratio3 = round(MaxVehicleLimit * 0.01); +}; +AllowedVehiclesList = [ + ["AH6X_DZ",_Ratio3], + ["AN2_DZ",_Ratio1], //Green + ["AN2_2_DZ",_Ratio1], //Red and white + ["An2_2_TK_CIV_EP1_DZ",_Ratio1], //Green and white + ["ArmoredSUV_PMC_DZE",_Ratio1], + ["ATV_CZ_EP1_DZE",_Ratio1], + ["BAF_ATV_W_DZE",_Ratio1], + ["car_hatchback_DZE",_Ratio3], + ["car_sedan_DZE",_Ratio3], + ["CH_47F_EP1_DZE",_Ratio1], + ["CH53_DZE",_Ratio1], + ["CSJ_GyroC_DZE",_Ratio3], + ["CSJ_GyroCover",_Ratio3], + ["CSJ_GyroP",_Ratio3], + ["MTVR_Bird_DZE",_Ratio2], + ["datsun1_civil_1_open_DZE",_Ratio3], + ["datsun1_civil_2_covered_DZE",_Ratio3], + ["datsun1_civil_3_open_DZE",_Ratio3], + ["GAZ_Vodnik_DZE",_Ratio1], + ["GAZ_Vodnik_MedEvac_DZE",_Ratio1], + ["GLT_M300_LT_DZE",_Ratio3], + ["GLT_M300_ST_DZE",_Ratio3], + ["GNT_C185_DZ",_Ratio1], + ["GNT_C185C_DZ",_Ratio1], + ["GNT_C185R_DZ",_Ratio1], + ["GNT_C185U_DZ",_Ratio1], + ["hilux1_civil_1_open_DZE",_Ratio3], + ["hilux1_civil_2_covered_DZE",_Ratio3], + ["hilux1_civil_3_open_DZE",_Ratio3], + ["HMMWV_Ambulance_DZE",_Ratio1], + ["HMMWV_Ambulance_CZ_DES_EP1_DZE",_Ratio1], + ["HMMWV_DES_EP1_DZE",_Ratio3], + ["HMMWV_DZ",_Ratio3], + ["HMMWV_M1035_DES_EP1_DZE",_Ratio1], + ["HMMWV_M1151_M2_CZ_DES_EP1_DZE",_Ratio1], + ["HMMWV_M998A2_SOV_DES_EP1_DZE",_Ratio1], + ["Ikarus_DZE",_Ratio3], + ["Ikarus_TK_CIV_EP1_DZE",_Ratio3], + ["Kamaz_DZE",_Ratio3], + ["KamazRefuel_DZ",_Ratio1], + ["Lada1_DZE",_Ratio3], + ["Lada1_TK_CIV_EP1_DZE",_Ratio3], + ["Lada2_DZE",_Ratio3], + ["Lada2_TK_CIV_EP1_DZE",_Ratio3], + ["LadaLM_DZE",_Ratio3], + ["Jeep_DZE",_Ratio3], + ["LandRover_CZ_EP1_DZE",_Ratio3], + ["LandRover_MG_TK_EP1_DZE",_Ratio1], + ["LandRover_Special_CZ_EP1_DZE",_Ratio1], + ["LandRover_TK_CIV_EP1_DZE",_Ratio3], + ["M1030_US_DES_EP1_DZE",_Ratio3], + ["MH6J_DZ",_Ratio3], + ["Mi17_Civilian_DZ",_Ratio1], + ["Mi17_DZE",_Ratio1], + ["MMT_Civ_DZE",(_Ratio3 * 2)], + ["MtvrRefuel_DES_EP1_DZ",_Ratio1], + ["MTVR_DES_EP1_DZE",_Ratio3], + ["MTVR_DZE",_Ratio3], + ["MTVR_Open_DZE",_Ratio3], + ["MV22_DZ",_Ratio1], + ["Offroad_DSHKM_Gue_DZE",_Ratio3], + ["Old_moto_TK_Civ_EP1_DZE",_Ratio3], + ["Pickup_PK_GUE_DZE",_Ratio3], + ["Pickup_PK_INS_DZE",_Ratio3], + ["Pickup_PK_TK_GUE_EP1_DZE",_Ratio3], + ["S1203_ambulance_EP1_DZE",_Ratio3], + ["S1203_TK_CIV_EP1_DZE",_Ratio3], + ["Skoda_DZE",_Ratio3], + ["SkodaBlue_DZE",_Ratio3], + ["SkodaGreen_DZE",_Ratio3], + ["SkodaRed_DZE",_Ratio3], + ["SUV_Blue",_Ratio1], + ["SUV_Camo",_Ratio1], + ["SUV_Charcoal",_Ratio1], + ["SUV_Green",_Ratio1], + ["SUV_Orange",_Ratio1], + ["SUV_Pink",_Ratio1], + ["SUV_Red",_Ratio1], + ["SUV_Silver",_Ratio1], + ["SUV_TK_CIV_EP1_DZE",_Ratio1], + ["SUV_White",_Ratio1], + ["SUV_Yellow",_Ratio1], + ["Tractor_DZE",_Ratio3], + ["TT650_Civ_DZE",_Ratio3], + ["TT650_Ins_DZE",_Ratio3], + ["TT650_TK_CIV_EP1_DZE",_Ratio3], + ["UAZ_CDF_DZE",_Ratio3], + ["UAZ_INS_DZE",_Ratio3], + ["UAZ_MG_TK_EP1_DZE",_Ratio3], + ["UAZ_RU_DZE",_Ratio3], + ["UAZ_Unarmed_TK_CIV_EP1_DZE",_Ratio3], + ["UAZ_Unarmed_TK_EP1_DZE",_Ratio3], + ["UAZ_Unarmed_UN_EP1_DZE",_Ratio3], + ["UH1H_DZE",_Ratio2], + ["UH1Y_DZE",_Ratio1], + ["UH60M_EP1_DZE",_Ratio1], + ["UralRefuel_TK_EP1_DZ",_Ratio1], + ["Ural_CDF_DZE",_Ratio3], + ["Ural_TK_CIV_EP1_DZE",_Ratio3], + ["Ural_UN_EP1_DZE",_Ratio3], + ["V3S_Open_TK_CIV_EP1_DZE",_Ratio3], + ["V3S_Open_TK_EP1_DZE",_Ratio3], + ["V3S_Camper_DZE",_Ratio3], + ["V3S_Refuel_TK_GUE_EP1_DZ",_Ratio1], + ["V3S_RA_TK_GUE_EP1_DZE",_Ratio1], + ["VolhaLimo_TK_CIV_EP1_DZE",_Ratio3], + ["Volha_1_TK_CIV_EP1_DZE",_Ratio3], + ["Volha_2_TK_CIV_EP1_DZE",_Ratio3], + ["VWGolf_DZE",_Ratio3], + ["Mini_Cooper_DZE",_Ratio3], + ["ScrapAPC_DZE",_Ratio3], + ["ATV_CIV_CP_DZE",_Ratio1], + ["ATV_CIV_Grey_CP_DZE",_Ratio1], + ["ATV_CIV_Red_CP_DZE",_Ratio1], + ["ATV_CIV_Green_CP_DZE",_Ratio1], + ["ATV_CIV_Blue_CP_DZE",_Ratio1], + ["ATV_CIV_Yellow_CP_DZE",_Ratio1], + ["ATV_CIV_Purple_CP_DZE",_Ratio1], + ["ATV_CIV_Black_CP_DZE",_Ratio1], + ["Ikarus_White_DZE",_Ratio1], + ["car_hatchback_red_DZE",_Ratio1], + ["datsun1_red_covered_DZE",_Ratio1], + ["datsun1_green_open_DZE",_Ratio1], + ["Octavia_ACR_DZE",_Ratio1], + ["T810A_ACR_DZE",_Ratio1], + ["T810A_ACR_DES_DZE",_Ratio1], + ["T810A_ACR_OPEN_DZE",_Ratio1], + ["T810A_ACR_DES_OPEN_DZE",_Ratio1], + ["T810A_ACR_REFUEL_DZE",_Ratio1], + ["T810A_ACR_REFUEL_DES_DZE",_Ratio1], + ["T810_ACR_REAMMO_DZE",_Ratio1], + ["T810_ACR_REAMMO_DES_DZE",_Ratio1], + ["T810_ACR_REPAIR_DZE",_Ratio1], + ["T810_ACR_REPAIR_DES_DZE",_Ratio1], + ["CH_47F_EP1_Black_DZE",_Ratio1], + ["CH_47F_EP1_GREY_DZE",_Ratio1], + ["CH_47F_EP1_DES_DZE",_Ratio1], + ["UH1H_2_DZE",_Ratio1], + ["UH1H_CDF_DZE",_Ratio1], + ["UH1H_WD_DZE",_Ratio1], + ["UH1H_DES_DZE",_Ratio1], + ["UH1H_GREY_DZE",_Ratio1], + ["UH1H_BLACK_DZE",_Ratio1], + ["UH1H_SAR_DZE",_Ratio1], + ["Mi17_TK_EP1_DZE",_Ratio1], + ["Mi17_UN_CDF_EP1_DZE",_Ratio1], + ["Mi17_CDF_DZE",_Ratio1], + ["Mi171Sh_CZ_EP1_DZE",_Ratio1], + ["Mi17_DES_DZE",_Ratio1], + ["Mi17_GREEN_DZE",_Ratio1], + ["Mi17_BLUE_DZE",_Ratio1], + ["Mi17_BLACK_DZE",_Ratio1], + ["Mi17_GREEN_DZE",_Ratio1], + ["Mi17_medevac_CDF_DZ",_Ratio1], + ["Mi17_medevac_Ins_DZ",_Ratio1], + ["Mi17_medevac_RU_DZ",_Ratio1], + ["pook_medevac_DZE",_Ratio1], + ["pook_medevac_CDF_DZE",_Ratio1], + ["pook_medevac_CIV_DZE",_Ratio1], + ["pook_gunship_DZE",_Ratio1], + ["pook_gunship_CDF_DZE",_Ratio1], + ["pook_transport_DZE",_Ratio1], + ["pook_transport_CDF_DZE",_Ratio1], + ["pook_H13_civ_DZE",_Ratio1], + ["pook_H13_civ_white_DZE",_Ratio1], + ["pook_H13_civ_slate_DZE",_Ratio1], + ["pook_H13_civ_black_DZE",_Ratio1], + ["pook_H13_civ_yellow_DZE",_Ratio1], + ["MH60S_DZE",_Ratio1], + ["UH60M_MEV_EP1_DZ",_Ratio1], + ["BAF_Merlin_DZE",_Ratio1], + ["Ka60_GL_PMC_DZE",_Ratio1], + ["AW159_Lynx_BAF_DZE",_Ratio1], + ["BTR40_MG_TK_GUE_EP1_DZE",_Ratio1], + ["BTR40_MG_TK_INS_EP1_DZE",_Ratio1], + ["BRDM2_HQ_TK_GUE_EP1_DZE",_Ratio1], + ["HMMWV_Armored_DZE",_Ratio1], + ["HMMWV_M2_DZE",_Ratio1], + ["T810A_PKT_ACR_DZE",_Ratio1], + ["T810A_PKT_DES_ACR_DZE",_Ratio1], + ["BAF_Jackal2_L2A1_D_DZE",_Ratio1], + ["BAF_Jackal2_L2A1_W_DZE",_Ratio1], + ["BAF_Jackal2_GMG_D_DZE",_Ratio1], + ["BAF_Jackal2_GMG_W_DZE",_Ratio1], + ["Hummer_DZE",_Ratio1], + ["Tractor_Armored_DZE",_Ratio1], + ["Ikarus_Armored_DZE",_Ratio1] +]; + +// There are no good spawn locations for C130 on Namalsk or Caribou Frontier. +if !(toLower worldName in ["namalsk","caribou"]) then { + AllowedVehiclesList set [count AllowedVehiclesList, ["C130J_US_EP1_DZ",_Ratio1]]; +}; + +if (toLower worldName in ["caribou","chernarus","cmr_ovaron","dayznogova","dingor","dzhg","fallujah","fapovo","fdf_isle1_a","isladuala","lingor","mbg_celle2","namalsk","napf","oring","panthera2","ruegen","sara","sauerland","smd_sahrani_a2","tasmania2010","tavi","trinity","utes"]) then { + // water map, add boats + + AllowedVehiclesList = AllowedVehiclesList + [ + ["Fishing_Boat_DZE",_Ratio3], + ["JetSkiYanahui_Case_Blue",_Ratio1], + ["JetSkiYanahui_Case_Green",_Ratio1], + ["JetSkiYanahui_Case_Red",_Ratio1], + ["JetSkiYanahui_Case_Yellow",_Ratio1], + ["PBX_DZE",_Ratio3], + ["RHIB_DZE",_Ratio1], + ["RHIB2Turret_DZE",_Ratio1], + ["Smallboat_1_DZE",_Ratio3], + ["Smallboat_2_DZE",_Ratio3], + ["Zodiac_DZE",_Ratio3], + ["Submarine_DZE",_Ratio3] + ]; +}; + +DZE_Hangar_positions = []; +DZE_Runway_Positions = []; + +// Runway and hangar positions for plane spawning +call { + if (toLower worldName in ["chernarus","chernarus_winter"]) exitWith { + DZE_Hangar_positions = [[[4974.1201, 10012.304],240],[[4948.4419, 10055.036],240],[[4927.4048, 10098.72],240],[[4874.5693, 10179.009],240],[[4848.5073, 10218.326],240],[[4899.5508, 10138.02],240],[[4526.0156, 10783.658],240],[[4587.6855, 10685.194],240],[[4796.3179, 2584.4021],210],[[4762.417, 2606.4893],210],[[12007.119, 12628.267],18.522324]]; + DZE_Runway_Positions = [[[4825.3115, 9606.0107],351.2749786],[[4962.5381, 9685.8887],308.361824],[[4244.3516, 10919.782],164.96837],[[4124.9233, 10850.859],122.84861],[[4498.4043, 10694.304],170.83557],[[4452.0508, 10799.156],293.729195],[[11794.814, 12848.633],132.00909],[[12433.607, 12511.798],322],[[4644.8433, 2578.2515],138.79065],[[4598.5522, 2492.5886],80.181107],[[5262.187, 2244.1062],270]]; + }; + if (toLower worldName == "napf") exitWith { + DZE_Hangar_positions = [[[18302.373, 2296.6174],128.92664],[[18219.572, 2201.1204],131.85796],[[18163.936, 2138.0906],130.08537],[[5012.1724, 4871.896],260.887802],[[4651.1582, 4806.9653],77.901695],[[4782.9136, 4831.3003],260.053566],[[14391.086, 16890.748],139.26932],[[14482.736, 16787.213],317.649258]]; + DZE_Runway_Positions = [[[14339.543, 17166.994],138.43173],[[14254.993, 17096.977],78.634995],[[14742.884, 16617.965],135.36357],[[15147.044, 16147.293],345.509653],[[18139.805, 1965.5642],39.729259],[[3902.3901, 4476.9971],79.775864],[[3876.8308, 4604.3208],128.58391],[[3930.5286, 4311.0532],16.60323],[[3888.5801, 4372.7026],51.806969],[[5208.6802, 4621.9556],286.741859]]; + }; + if (toLower worldName == "panthera2") exitWith { + DZE_Hangar_positions = [[[1949.4359, 3594.7795],180],[[793.6474, 9659.5859],270],[[740.60645, 9729.6523],180],[[4215.5635, 7454.7695],0],[[4141.9292, 7458.936],0]]; + DZE_Runway_Positions = [[[1906.2429, 3540.8784],180],[[1863.5885, 3541.5037],180],[[2119.3586, 3533.1587],90],[[2356.3647, 3533.0906],90],[[2610.7517, 3528.6604],180],[[2208.2322, 3389.563],0],[[2162.8445, 3388.5747],0],[[728.3725, 9558.4209],270],[[690.87726, 9716.6924],233],[[690.87726, 9716.6924],270],[[742.43134, 9412.1094],270],[[742.31244, 9453.2158],270],[[746.93304, 9279.5293],270],[[684.96716, 8895.043],310],[[703.25922, 8938.5254],310],[[534.59473, 9684.0137],142],[[4847.2583, 7483.0718],0],[[4847.2583, 7483.0718],337],[[4926.7358, 7521.2285],300],[[4866.1216, 7679.3901],220],[[4783.2251, 7689.8706],191],[[4422.0762, 7677.5386],190],[[4259.5239, 7489.2754],0],[[4179.1602, 7478.1289],0],[[4052.2502, 7517.8276],30]]; + }; + if (toLower worldName in ["tavi","taviana"]) exitWith { + DZE_Hangar_positions = [[[16779.148, 10230.397],270],[[16778.303, 10280.438],270],[[16780.025, 10330.855],270],[[16781.834, 10380.041],270],[[16780.201, 10430.32],270],[[16782.045, 10480.558],270],[[16774.957, 10530.657],270],[[16779.676, 10580.657],270],[[10351.289, 18383.271],244],[[10327.586, 18427.346],244],[[10305.973, 18472.592],244],[[10283.948, 18518.41],244],[[10258.651, 18567.479],244],[[10234.805, 18616.689],244],[[7779.6982, 7893.582],219],[[7746.2954, 7931.6772],220],[[7705.2095, 7963.9487],220],[[7666.1587, 7995.0244],220],[[7628.3447, 8026.1821],220],[[7588.1636, 8055.9268],220],[[7547.3433, 8089.1045],220],[[7507.02, 8118.4521],220]]; + DZE_Runway_Positions = [[[16653.684, 11617.686],180],[[16612.551, 11617.791],180],[[16570.965, 11617.984],180],[[16529.477, 11618.151],180],[[16366.49, 11397.132],119],[[16664.465, 11363.812],240],[[16666.48, 11312.685],240],[[16371.202, 10807.039],0],[[16363.222, 10648.133],0],[[16368.655, 11096.011],0],[[10595.511, 17683.322],244],[[10578.067, 17720],244],[[10560.043, 17756.557],244],[[10541.788, 17792.898],244],[[10317.844, 18244.363],155],[[10192.272, 18643.762],244],[[10175.395, 18680.395],244],[[10050.024, 18803.342],210],[[9991.7871, 18794.641],187],[[7792.293, 7816.6943],236],[[7572.9966, 7544.4141],39],[[7449.0269, 7597.1348],77],[[7408.0615, 7634.4272],77],[[7367.7822, 7673.5029],77],[[7073.5825, 7933.1563],308],[[6590.1455, 8270.4609],39],[[6827.6729, 8570.6074],215],[[6866.8408, 8542.7178],218],[[6935.6777, 8489.0615],218],[[6901.3486, 8515.8848],218],[[7120.8623, 8347.0342],218],[[7253.2144, 8233.7725],189],[[7344.647, 8161.6055],218],[[7381.7729, 8133.5376],218],[[7612.292, 7825.8555],270],[[7583.9072, 7875.2861],270]]; + }; + if (toLower worldName == "namalsk") exitWith { + //DZE_Hangar_positions = []; // No hangars on Namalsk + DZE_Runway_Positions = [[[6290.9497, 9623.7148],262],[[6292.8301, 9602.7422],267],[[6293.0767, 9582.04],269],[[6302.499, 9272.9336],283],[[6298.9512, 9304.6895],265],[[6296.9683, 9527.4414],265],[[6305.7607, 9235.8584],263],[[6305.5845, 9196.5742],258],[[6308.4282, 9171.084],272],[[6316.1602, 9120.333],289]]; + }; + if (toLower worldName == "lingor") exitWith { + DZE_Hangar_positions = [[[4157.8389, 1733.3982],90],[[4159.2427, 1694.8923],90],[[6132.001, 6867.8154],0],[[6171.1382, 6866.2905],0],[[6551.5654, 6747.1553],0],[[6596.1216, 6745.4463],0]]; + DZE_Runway_Positions = [[[4210.1953, 1008.3441],60],[[4195.4409, 1051.4297],60],[[4344.1079, 1135.9297],275],[[4157.6406, 1367.108],90],[[4224.4678, 1908.2092],126],[[4205.958, 1865.4332],123],[[4171.7158, 1768.3271],90],[[4381.0615, 1797.5585],270],[[4378.8569, 1755.0103],270],[[4379.6816, 1577.699],270],[[4346.5088, 1201.3105],272],[[6843.6704, 6906.4585],0],[[6803.332, 6906.2168],0],[[6717.9673, 6906.7051],0],[[6676.981, 6907.2285],0],[[6444.7749, 6863.8208],0],[[6539.0391, 6910.8267],0],[[6093.625, 6887.2275],0],[[6027.8408, 6887.0762],0],[[5956.3789, 6938.2183],24],[[7010.3965, 6939.4941],0],[[3008.9871, 6429.1279],47],[[3098.365, 6597.5874],265],[[2989.0854, 6636.6699],87],[[2986.136, 6677.3818],85],[[2943.5073, 7171.521],112],[[2950.8511, 6930.5005],42]]; + }; + if (toLower worldName == "sauerland") exitWith { + DZE_Hangar_positions = [[[15262.892, 18276.533],0],[[15226.063, 18277.277],0],[[15374.349, 18520.734],270],[[15380.229, 18557.535],270],[[15206.892, 18562.439],270],[[15204.131, 18525.342],270],[[15090.723, 18594.041],90],[[15093.469, 18631.123],90],[[15262.248, 18589.803],90],[[15261.465, 18626.906],90],[[17105.355, 1730.1416],0],[[17064.814, 1726.3314],0],[[16989.188, 1756.3535],0],[[16942.273, 1757.369],0]]; + DZE_Runway_Positions = [[[15359.572, 18635.889],236],[[15255.382, 18536.854],180],[[15595.105, 18334.383],321],[[15532.063, 18447.068],225],[[15487.508, 18335.965],330],[[15391.456, 18302.332],0],[[15173.691, 18314.725],0],[[15081.61, 18312.48],0],[[14944.665, 18320.264],0],[[14773.483, 18339.674],40],[[15091.576, 18540.818],184],[[15189.433, 18640.248],229],[[16782.379, 1774.917],0],[[17181.027, 1798.4741],320],[[17097.693, 1875.9081],180],[[16916.193, 1877.0327],229],[[16612.512, 1797.4282],0],[[16682.809, 1890.4918],181]]; + }; + if (toLower worldName == "fdf_isle1_a") exitWith { // Podagorsk + DZE_Hangar_positions = [[[9788.2529, 4244.8711],184],[[9800.8926, 3881.4368],62],[[9663.9092, 4086.3181],90],[[8109.9312, 4661.8569],31],[[8163.625, 4629.3784],31],[[8370.3965, 4681.3882],110],[[8499.707, 4834.9629],249],[[8479.6836, 4881.9771],249],[[8464.2666, 4930.7236],249],[[8094.8618, 4197.229],270]]; + DZE_Runway_Positions = [[[8268.7236, 4562.5786],70],[[8306.2471, 4505.3193],138],[[8655.916, 4443.8525],252],[[8341.2051, 4915.9854],119],[[8529.582, 4736.3374],349.5],[[8601.5479, 4573.9819],218.5],[[9291.082, 4222.4561],0],[[9749.0908, 4031.1191],28.5],[[9647.9492, 4210.8892],44.6],[[9017.3711, 4345.874],202.5],[[8752.8799, 4343.0947],197.5],[[8559.9521, 4389.9805],30.7],[[8210.1367, 4376.4561],168],[[8467.5479, 4603.2041],203.7]]; + }; + if (toLower worldName == "takistan") exitWith { + DZE_Hangar_positions = [[[8185.729, 2072.853],148],[[8144.0083, 2049.1345],149.5],[[5762.7642, 11248.219],315],[[5804.0205, 11293.321],315],[[5845.9746, 11334.919],315]]; + DZE_Runway_Positions = [[[8097.0645, 1971.9525],96],[[8037.8257, 1941.2324],197],[[7964.6133, 1903.0758],187],[[7847.5947, 1836.0383],208],[[7771.8823, 1784.0323],190],[[7731.0894, 1605.4257],60],[[8181.1729, 1752.5686],330],[[8222.8252, 1776.8198],330],[[8263.2832, 1800.2097],330],[[5944.2656, 11488.032],9],[[6044.8335, 11584.635],0],[[6105.9688, 11646.589],0],[[6139.2588, 11787.021],250],[[5978.5229, 11787.973],187],[[5878.377, 11707.521],134],[[5916.1074, 11746.493],134],[[5840.6494, 11669.358],134],[[5627.48, 11151.527],270],[[5333.2065, 10913.021],320],[[5417.6602, 10938.269],300],[[5480.7227, 11000.981],311],[[5542.3745, 11066.867],317]]; + }; + if (toLower worldName == "caribou") exitWith { + DZE_Hangar_positions = [[[1931.1724, 3222.0276],231]]; + DZE_Runway_Positions = [[[1907.5873, 3248.3806],242],[[1897.8859, 3266.9893],242],[[1804.6925, 3462.7156],87],[[1874.5695, 3857.1729],211],[[1825.8583, 3931.4707],146],[[1747.6074, 3627.5881],90],[[1876.1652, 3567.8455],270],[[1876.1274, 3546.8982],270],[[1876.2861, 3524.1584],270],[[1874.3091, 3470.6697],270],[[1798.4554, 3059.9192],27],[[1884.0266, 3146.2952],321],[[1871.2059, 3344.2656],270],[[1872.6899, 3398.9255],270],[[1873.6082, 3439.7576],270]]; + }; + if (toLower worldName == "cmr_ovaron") exitWith { + DZE_Hangar_positions = [[[484.29846, 7396.8892],88.6],[[484.28625, 7430.1152],88.6],[[508.64578, 7556.8716],124],[[9758.9688, 2844.075],270],[[9759.8779, 2809.9143],270],[[9734.4736, 2680.5979],303.4]]; + DZE_Runway_Positions = [[[641.89874, 7583.2739],270],[[660.71973, 7531.5244],270],[[706.20728, 7412.0298],270],[[663.34924, 7095.9355],270],[[664.23773, 7054.3511],270],[[641.50488, 6885.5479],270],[[658.19489, 6995.0098],242],[[649.28943, 6940.707],242],[[668.6698, 7450.6777],226],[[531.98523, 7361.5596],61],[[536.2215, 7492.4556],90],[[9597.3701, 2655.803],87],[[9571.1973, 2795.7207],73],[[9546.9268, 2840.2507],73],[[9573.9385, 2940.2646],73],[[9580.2891, 3156.8792],87],[[9581.7305, 3248.5847],87],[[9593.2344, 3355.6165],90],[[9717.9961, 2879.8501],240],[[9701.8115, 2755.5862],270]]; + }; + if (toLower worldName == "isladuala") exitWith { + DZE_Hangar_positions = [[[4206.3638, 2137.2808],0],[[4125.5474, 2134.4885],0],[[5952.8066, 6126.1646],0],[[5856.9976, 6154.4399],0],[[5825.5732, 6149.5454],0]]; + DZE_Runway_Positions = [[[4056.5996, 2155.8013],0],[[4092.5444, 2323.322],181],[[4167.5967, 2154.3792],0],[[4251.6528, 2168.9683],0],[[4363.4614, 2159.783],0],[[4419.4434, 2159.2407],0],[[4551.4912, 2157.761],0],[[5082.5586, 2174.3755],0],[[5029.6553, 2174.2185],0],[[4974.084, 2174.7053],0],[[4928.833, 2174.7107],0],[[4881.8442, 2174.7852],0],[[4835.6523, 2175.2559],0],[[4507.2793, 2348.5867],174],[[4551.2729, 2350.7454],180],[[4606.3218, 2351.1897],180],[[4678.4517, 2343.6565],180],[[4732.3481, 2345.4229],177],[[4808.1777, 2350.335],180],[[7134.8789, 2308.7634],77],[[7180.7354, 2194.2275],38],[[7151.7651, 2250.1301],77],[[6806.7422, 6186.7549],0],[[6756.6646, 6186.2607],0],[[6710.748, 6186.0947],0],[[6652.3911, 6187.0112],0],[[6588.5942, 6184.8599],0],[[6016.4927, 6179.5308],0],[[6071.5977, 6177.2432],0],[[6145.7241, 6173.9126],0],[[5759.4888, 6167.3564],0],[[5785.1899, 6347.1733],180],[[5885.7339, 6345.1587],185],[[2934.3931, 6180.5464],110],[[2954.2786, 6238.8765],110],[[3036.1111, 6584.4858],110],[[3106.0913, 6337.4688],294],[[2901.9998, 6026.458],100]]; + }; + if (toLower worldName == "smd_sahrani_a2") exitWith { + DZE_Hangar_positions = [[[9838.8105, 9948.7129],0],[[9804.4814, 9949.8838],0],[[9767.9063, 9960.3486],0],[[19221.193, 13884.556],42.5],[[19196.141, 13909.83],42.5]]; + DZE_Runway_Positions = [[[18968.033, 14320.386],223],[[19008.047, 14295.18],223],[[19046.576, 14255.652],223],[[19122.35, 14216.478],223],[[19187.141, 14165.009],223],[[19225.107, 14119.406],223],[[19306.145, 14021.929],223],[[19273.789, 14078.427],223],[[19017.391, 14124.187],76],[[9627.5947, 9961.833],0],[[9565.3711, 9952.9395],0],[[9495.8574, 9957.5947],0],[[9441.2363, 9959.6631],0],[[9330.1396, 9982.6484],0],[[9250.7705, 10024.167],0],[[9261.8711, 10211.065],180],[[9311.2334, 10200.271],180],[[9674.8145, 10203.702],180],[[9749.0088, 10211.506],180],[[9816.8672, 10206.438],180],[[10162.383, 10202.894],180],[[10229.846, 9974.875],0],[[10178.965, 9975.7041],0],[[10025.214, 9955.583],10],[[10110.359, 9975.7979],353],[[10213.082, 10205.972],180]]; + }; + if (toLower worldName == "ruegen") exitWith { + DZE_Hangar_positions = [[[5152.5142, 21600.607],148.90527],[[5018.2661, 21518.488],148.90527],[[4951.4629, 21472.211],148.90527]]; + DZE_Runway_Positions = [[[5241.4678, 21601.275],148],[[5115.0171, 21508.145],146],[[5009.5713, 21455.387],146],[[4884.1641, 21360.277],146],[[4762.4004, 21271.303],146],[[4702.1157, 21237.779],146],[[4657.9302, 21203.23],146],[[4836.416, 20986.725],356],[[5205.2969, 21224.213],324],[[5259.4844, 21255.742],324],[[5323.1025, 21302.303],324],[[5495.7344, 21422.35],324],[[5664.5303, 21546.35],324],[[5584.3071, 21722.311],145],[[5358.6919, 21663.223],145],[[5630.3857, 21754.127],145]]; + }; +}; + +DZE_AllAircraftPositions = DZE_Hangar_positions + DZE_Runway_Positions; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/system/lit_fireplaces.sqf b/@DayZ_Epoch_Server/addons/dayz_server/system/lit_fireplaces.sqf new file mode 100755 index 0000000..d193c7e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/system/lit_fireplaces.sqf @@ -0,0 +1,46 @@ +// (c) facoptere@gmail.com, licensed to DayZMod for the community +private ["_blocked","_fires","_flame","_position"]; + +_fires = []; + +if (dayz_townGenerator) then { + _fires = _fires + [ + [11911.8,9101.2,0.597935], [11983,9162.89,0.597931], [12013.1,9159.38,0.597931], [12197.2,9499.66,0.603302], [12210.8,9728.83,0.597929], + [12218.7,9752.14,0.597929], [12247,9746.97,0.597929], [12271.7,9719.5,0.597929], [12407.3,9549.83,0.599188], [4889.27,2234.81,0.272388], + [4892.66,2235.29,0.272345], [6043.67,7781.65,0.597931], [6177.52,2125.36,0.598278], [6291.18,7808.69,0.597961], [6317.3,7835.18,0.597961], + [6428.26,2244.95,0.59796], [6513.29,2298.32,0.597929], [6536.12,2639.35,0.597929], [6545.71,2630.16,0.597929], [6663.22,2286.33,0.597929], + [6706.46,3012.04,0.59866], [6725.35,2576.59,0.597929], [6754.5,2780.37,0.597929], [6760.03,2727.7,0.597929], [6789.35,2692.69,0.597929], + [6796.09,2726.09,0.597929], [6810.51,2499.86,0.597929], [6822.79,2482.01,0.597929], [6832.25,2500.24,0.597929], [6833.6,3176.97,0.59797], + [6835.19,2694.23,0.597929], [6856.71,2522.75,0.597929], [6864.41,2464.66,0.597929], [7065.12,2622.94,0.597929], [7095.99,2740.68,0.597929] + ]; +}; + +if (dayz_POIs) then { + _fires = _fires + [ + [11580.2,3391.72,-1.20629], [11604.4,3389.41,0.0161071], [11664.6,3415.82,-0.524297], [11678.4,3421.32,-0.526046], [11681.4,3409.25,0.028707], + [11700.9,3416.6,-0.433657], [11707.7,3431.61,0.597957], [11817.8,12693.7,-0.131821], [11844.7,12749.8,-0.109467], [11845.2,12747.7,-0.119843], + [11846.3,12751.1,-0.234741], [11862.3,12748.1,-0.31282], [11863,12748.5,-0.302368], [11863.9,12749.1,-0.279175], [12698.9,9523.05,0.039454], + [12700.7,9515.4,7.22985], [12701.1,9516.98,7.29042], [12704,9511.34,0.0394101], [12706.2,9510.56,0.0394883], [12706,9513.22,0.0393739], + [12707.3,9520.42,0.03929], [12707.4,9537.02,0.0394235], [12710.4,9548.67,9.79484], [12712.2,9544.37,9.98028], [12714.3,9535.06,-0.634063], + [12715.2,9539.4,0.039432], [12715.5,9536.36,0.0393863], [12718.4,9550.81,-0.633002], [12718.6,9550.53,0.0454731], [12721.6,9502.26,0.0394025], + [1689.3,11754.5,-0.640869], [1693.15,11750.4,0.0564575], [1698.03,11751.3,0.0558929], [1700.78,11733,0.0564728], [1704.94,11761.2,0.0585327], + [1705.92,11728.9,0.0565643], [1709.39,11727.4,0.0566864], [1713.98,11724.6,0.0566711], [1724.37,11729.1,0.054306], [1725.6,11729.7,0.0551147], + [1727.1,11727.7,0.0535278], [1727.33,11724.1,-0.64357], [1728.14,11729.9,-0.644043], [1729.12,11729.2,0.0558777], [1730.91,11729.7,-0.644058], + [1731.99,11728.5,0.0557709], [1746.26,11721.7,0.0542297], [1782.34,11754.6,0.598038] + ]; +}; + +{ + _blocked = false; + _position = _x; + {if (_position distance _x < 150) exitWith {_blocked = true;};} forEach dayz_townGeneratorBlackList; + if (!_blocked && (random 1 < 0.33)) then { + _flame = "flamable_DZ" createVehicle [0,0,0]; //200x faster https://community.bistudio.com/wiki/Code_Optimisation#createVehicle.28Local.29 + _flame setPosATL _x; + _flame inflame true; + _flame setVariable ["permaLoot",true]; // = won't be removed by the cleaner, cf. sched_lootpiles.sqf + }; + uiSleep 0.001; +} count _fires; + +//[6847.45,2360.25,0.597929] removed for now, see https://github.com/DayZMod/DayZ/issues/869 \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_corpses.sqf b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_corpses.sqf new file mode 100755 index 0000000..e680463 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_corpses.sqf @@ -0,0 +1,218 @@ +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +if (isNil "DZE_NPC_CleanUp_Time") then {DZE_NPC_CleanUp_Time = -1;}; + +sched_co_deleteVehicle = { + private "_group"; + _this removeAllMPEventHandlers "mpkilled"; + _this removeAllMPEventHandlers "mphit"; + _this removeAllMPEventHandlers "mprespawn"; + _this removeAllEventHandlers "FiredNear"; + _this removeAllEventHandlers "HandleDamage"; + _this removeAllEventHandlers "Killed"; + _this removeAllEventHandlers "Fired"; + _this removeAllEventHandlers "GetIn"; + _this removeAllEventHandlers "GetOut"; + _this removeAllEventHandlers "Local"; + _this removeAllEventHandlers "Respawn"; + + clearVehicleInit _this; + _group = group _this; + deleteVehicle _this; + if (count units _group == 0) then { + deleteGroup _group; + }; + + _this = nil; +}; + + +sched_corpses = { + private ["_delQtyG","_delQtyZ","_delQtyP","_addFlies","_x","_deathTime","_onoff","_delQtyAnimal","_sound","_deathPos","_cpos","_animal","_nearPlayer","_delQtyV","_delQtyAI"]; + // EVERY 2 MINUTE + // DELETE UNCONTROLLED ZOMBIES --- PUT FLIES ON FRESH PLAYER CORPSES --- REMOVE OLD FLIES & CORPSES + _delQtyZ = 0; + _delQtyP = 0; + _delQtyG = 0; + _delQtyV = 0; + _addFlies = 0; + _delQtyAI = 0; + { + if (local _x && {_x isKindOf "CAManBase"}) then { + if (_x isKindOf "zZombie_Base") then { + _x call sched_co_deleteVehicle; + _delQtyZ = _delQtyZ + 1; + } else { + //Only spawn flies on actual dead player, otherwise delete the body (clean up left over ghost from relogging, sometimes it is not deleted automatically by Arma or onPlayerDisconnect) + //AI mods will need to setVariable "bodyName" on their dead units to prevent them being cleaned up + _deathTime = _x getVariable ["sched_co_deathTime", -1]; + if (_x getVariable["bodyName",""] != "") then { + if (_deathTime == -1) then { + /*_deathPos = _x getVariable ["deathPos",respawn_west_original]; + _cpos = getPosATL _x; + // forbid a move further than 50 meters, or burried body (antihack) + if (_deathPos distance _cpos > 50 or _deathPos select 2 < -0.2) then { + diag_log [ __FILE__, "Corpse should have been moved! CID#",(_x getVariable["characterID", "?"]),"from:", _cpos, "to:", _deathPos ]; + //_x setPosATL _deathPos; + };*/ + _deathTime = diag_tickTime; + _x setVariable ["sched_co_deathTime", _deathTime]; + if (dayz_enableFlies) then { + _x setVariable ["sched_co_fliesAdded", true]; + _addFlies = _addFlies + 1; + }; + }; + // 60 * DZE_NPC_CleanUp_Time = how long an NPC corpse stays on the map + if (DZE_NPC_CleanUp_Time != -1 && {diag_tickTime - _deathTime > (60 * DZE_NPC_CleanUp_Time)} && {_x getVariable["bodyName",""] == "NPC"}) then { + if (_x getVariable["sched_co_fliesDeleted",false] or !dayz_enableFlies) then { + // flies have been switched off, we can delete body + _sound = _x getVariable ["sched_co_fliesSource", nil]; + + if !(isNil "_sound") then { + detach _sound; + deleteVehicle _sound; + }; + + _x call sched_co_deleteVehicle; + _delQtyAI = _delQtyAI + 1; + } else { + PVCDZ_flies = [ 0, _x ]; + publicVariable "PVCDZ_flies"; + _x setVariable ["sched_co_fliesDeleted", true]; + // body will be deleted at next round + }; + }; + // 40 minutes = how long a player corpse stays on the map + if ((diag_tickTime - _deathTime > 40*60) && {_x getVariable["bodyName",""] != "NPC"}) then { + if (_x getVariable["sched_co_fliesDeleted",false] or !dayz_enableFlies) then { + // flies have been switched off, we can delete body + _sound = _x getVariable ["sched_co_fliesSource", nil]; + + if !(isNil "_sound") then { + detach _sound; + deleteVehicle _sound; + }; + + _x call sched_co_deleteVehicle; + _delQtyP = _delQtyP + 1; + } else { + PVCDZ_flies = [ 0, _x ]; + publicVariable "PVCDZ_flies"; + _x setVariable ["sched_co_fliesDeleted", true]; + // body will be deleted at next round + }; + } else { + // Do not spawn flies immediately after death. Wait 10 minutes. + if ((diag_tickTime - _deathTime < 10*60) or !dayz_enableFlies) exitWith {}; + _onoff = 1; + // remove flies on heavy rain. + if (rain > 0.25) then { _onoff = 0; }; + // switch flies sound on/off. + // sound must be deleted/respawned periodically because new players won't ear it otherwise, + // and other players would ear it several times (very loud noise) + _sound = _x getVariable ["sched_co_fliesSource", nil]; + if !(isNil "_sound") then { + detach _sound; + deleteVehicle _sound; + _x setVariable ["sched_co_fliesSource", nil]; + //diag_log "delete sound"; + }; + if (_onoff == 1) then { + _sound = createSoundSource["Sound_Flies",getPosATL _x,[],0]; + _sound attachTo [_x]; + _x setVariable ["sched_co_fliesSource", _sound]; + //diag_log "create sound"; + }; + // broadcast flies status for everyone periodically, to update visible swarm + PVCDZ_flies = [ _onoff, _x ]; + publicVariable "PVCDZ_flies"; + }; + } else { + if (_deathTime == -1) then { + _deathTime = diag_tickTime; + _x setVariable ["sched_co_deathTime", _deathTime]; + } else { + // Wait 30s to make sure the server had time to setVariable "bodyName". PVDZ_plr_Death can be delayed by a few seconds. + if (diag_tickTime - _deathTime > 30) then { + _x call sched_co_deleteVehicle; + _delQtyG = _delQtyG + 1; + }; + }; + }; + }; + }; + + if (_x in vehicles) then { + _deathTime = _x getVariable ["sched_co_deathTime", -1]; + + if (_deathTime == -1) then { + _deathTime = diag_tickTime; + _x setVariable ["sched_co_deathTime", _deathTime]; + }; + + // 5 minutes = how long a destroyed vehicle stays on the map + if (diag_tickTime - _deathTime > 5*60) then { + {deleteVehicle _x} forEach (_x nearObjects ["CraterLong",50]); + _x call sched_co_deleteVehicle; + _delQtyV = _delQtyV + 1; + }; + }; + } forEach allDead; + + _delQtyAnimal = 0; + { + _animal = _x; + if (local _animal) then { + _nearPlayer = {isPlayer _x} count (_animal nearEntities ["CAManBase",150]); + if (_nearPlayer == 0) then { + _animal call sched_co_deleteVehicle; + _delQtyAnimal = _delQtyAnimal + 1; + }; + }; + } forEach entities "CAAnimalBase"; + + _delQtyGrp=0; + { + if (count units _x==0) then { + deleteGroup _x; + _delQtyGrp = _delQtyGrp + 1; + }; + } forEach allGroups; + +#ifdef SERVER_DEBUG + if (_delQtyZ+_delQtyP+_addFlies+_delQtyGrp+_delQtyG+_delQtyV > 0) then { + diag_log format ["%1: Deleted %2 uncontrolled zombies, %3 uncontrolled animals, %4 dead character bodies, %7 ghosts, %8 destroyed vehicles, %9 dead mission ai and %5 empty groups. Added %6 flies.",__FILE__, + _delQtyZ,_delQtyAnimal,_delQtyP,_delQtyGrp,_addFlies,_delQtyG,_delQtyV,_delQtyAI]; + }; +#endif + + objNull +}; + +/* +sched_disconnectedPlayers = { + private ["_x","_disconnectTime"]; + { + diag_log (_x); + if (local _x) then { + _disconnectTime = _x getVariable ["sched_co_disconnectTime", -1]; + if (_disconnectTime == -1) then { + _disconnectTime = diag_tickTime; + _x setVariable ["sched_co_disconnectTime", _disconnectTime]; + }; + if (diag_tickTime - _disconnectTime > dayz_ghostTimer) then { + if (alive _x) then { + [_x,nil] call server_playerSync; + }; + + dayz_disconnectPlayers = dayz_disconnectPlayers - [_x]; + + _x call sched_co_deleteVehicle; + }; + diag_log format["%1 - %2",_x,_disconnectTime]; + }; + } forEach dayz_disconnectPlayers; + + objNull +}; +*/ diff --git a/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_dzms.sqf b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_dzms.sqf new file mode 100755 index 0000000..32ce9cf --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_dzms.sqf @@ -0,0 +1,52 @@ +/* + This scheduled task checks for running DZMS missions and starts them appropriately. +*/ + +sched_dzms_init = { + diag_log("[DZMS]: Scheduler Started"); + local _array = +DZMSMissionArray; + local _timeBandit = ((random(DZMSBanditMax - DZMSBanditMin) + DZMSBanditMin) * 60); + local _timeHero = ((random(DZMSHeroMax - DZMSHeroMin) + DZMSHeroMin) * 60); + [_array,_timeBandit,_timeHero] +}; + +sched_dzms = { + local _array = _this select 0; + local _timeBandit = _this select 1; + local _timeHero = _this select 2; + local _varName = ""; + + // Bandit mission timer + if (((diag_tickTime - DZMSBanditEndTime) >= _timeBandit) && {DZMSBanditRunning < DZMSBanditLimit} && {DZMSMarkerReady}) then { + DZMSMarkerReady = false; + _varName = _array call BIS_fnc_selectRandom; + DZMSMissionData = DZMSMissionData + [[0,[],[],[],[],[]]]; + DZMSBanditEndTime = diag_tickTime; + DZMSBanditRunning = DZMSBanditRunning + 1; + ["Bandit"] execVM format ["\z\addons\dayz_server\DZMS\Missions\%1.sqf",_varName]; + if (DZMSDebug) then {diag_log text format ["[DZMS]: Running Bandit Mission %1.",_varName];}; + }; + + // Hero mission timer + if (((diag_tickTime - DZMSHeroEndTime) >= _timeHero) && {DZMSHeroRunning < DZMSHeroLimit} && {DZMSMarkerReady}) then { + DZMSMarkerReady = false; + _varName = _array call BIS_fnc_selectRandom; + DZMSMissionData = DZMSMissionData + [[0,[],[],[],[],[]]]; + DZMSHeroEndTime = diag_tickTime; + DZMSHeroRunning = DZMSHeroRunning + 1; + ["Hero"] execVM format ["\z\addons\dayz_server\DZMS\Missions\%1.sqf",_varName]; + if (DZMSDebug) then {diag_log text format ["[DZMS]: Running Hero Mission %1.",_varName];}; + }; + + // Remove mission from array and reset array if necessary + _array = _array - [_varName]; + if (count _array == 0) then { + _array = +DZMSMissionArray; + }; + + // Reset times + _timeBandit = ((random(DZMSBanditMax - DZMSBanditMin) + DZMSBanditMin) * 60); + _timeHero = ((random(DZMSHeroMax - DZMSHeroMin) + DZMSHeroMin) * 60); + + [_array,_timeBandit,_timeHero] +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_event.sqf b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_event.sqf new file mode 100755 index 0000000..5b50dff --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_event.sqf @@ -0,0 +1,74 @@ +/* + DayZ Epoch Event Scheduler + Made for DayZ Epoch please ask permission to use/edit/distrubute email vbawol@veteranbastards.com. +*/ + +epoch_eventIsAny = { + private ["_boolReturn","_event","_date","_bool","_index"]; + _event = _this select 0; + _date = _this select 1; + + _boolReturn = false; + + _index = 0; + { + _bool = false; + if (typeName _x == "STRING") then { + _boolReturn = true; + } else { + _boolReturn = ((_date select _index) == _x); + }; + if (!_boolReturn) exitWith {}; + _index = _index + 1; + } count _event; + + _boolReturn +}; + +sched_event_init = { + diag_log("EPOCH EVENTS INIT"); + "" +}; + +sched_event = { + private ["_date","_key","_result","_outcome","_handle","_datestr","_lastTime"]; + // Find current time from server + _lastTime = _this; + _key = "CHILD:307:"; + _result = _key call server_hiveReadWrite; + _outcome = _result select 0; + if(_outcome == "PASS") then { + _date = _result select 1; + _datestr = str(_date); + if (_lastTime != _datestr) then { + + // internal timestamp + ServerCurrentTime = _date; + + // Once a minute. + _lastTime = _datestr; + + //diag_log ("EVENTS: Local Time is: " + _datestr); + if (count EpochEvents == 0) exitWith {}; + { + + // Run event at server start when minutes are set to -1 + if ((_x select 4) == -1) then { + diag_log ("RUNNING EVENT: " + (_x select 5) + " on " + _datestr); + _handle = [] execVM "\z\addons\dayz_server\modules\" + (_x select 5) + ".sqf"; + + // Remove event from array so it doesn't run again. + _lastIndex = (count EpochEvents) - 1; + if (_lastIndex != _forEachIndex) then {EpochEvents set [_forEachIndex, EpochEvents select _lastIndex];}; + EpochEvents resize _lastIndex; + } else { + if([[(_x select 0),(_x select 1),(_x select 2),(_x select 3),(_x select 4)],_date] call epoch_eventIsAny) then { + diag_log ("RUNNING EVENT: " + (_x select 5) + " on " + _datestr); + _handle = [] execVM "\z\addons\dayz_server\modules\" + (_x select 5) + ".sqf"; + }; + }; + } forEach EpochEvents; + }; + }; + _lastTime +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_init.sqf b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_init.sqf new file mode 100755 index 0000000..c4e6160 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_init.sqf @@ -0,0 +1,37 @@ +#define PATH "z\addons\dayz_server\system\scheduler\" + +call compile preprocessFileLineNumbers (PATH+"sched_corpses.sqf"); +call compile preprocessFileLineNumbers (PATH+"sched_lootpiles.sqf"); +call compile preprocessFileLineNumbers (PATH+"sched_sync.sqf"); +call compile preprocessFileLineNumbers (PATH+"sched_safetyVehicle.sqf"); +call compile preprocessFileLineNumbers (PATH+"sched_dzms.sqf"); +call compile preprocessFileLineNumbers (PATH+"sched_wai.sqf"); +call compile preprocessFileLineNumbers (PATH+"sched_event.sqf"); +call compile preprocessFileLineNumbers (PATH+"sched_traps.sqf"); + +[ + // period offset code <-> ctx init code ->ctx + [ 60, 0, sched_event, sched_event_init ], + [ 60, 224, sched_corpses ], + [ 300, 336, sched_lootpiles_5m, sched_lootpiles_5m_init ], + [ 90, 60, sched_dzms, sched_dzms_init ], + [ 90, 60, sched_wai, sched_wai_init ], + [ 6, 340, sched_lootpiles ], + [ 900, 0, sched_sync ], + [ 120, 48, sched_safetyVehicle ], + [ 360, 480, sched_fps ], + [ 30, 60, sched_traps, sched_traps_init ] +] execFSM ("z\addons\dayz_code\system\scheduler\scheduler.fsm"); + +//diag_log [ __FILE__, "Scheduler started"]; + + + + +/* +// (see ViralZeds.hpp -> zombie_agent.fsm -> zombie_findOwner.sqf), called when a zombie becomes "local" to the server after the player disconnected +zombie_findOwner = { + (_this select 0) call fa_deleteVehicle; +}; +*/ + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_lootpiles.sqf b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_lootpiles.sqf new file mode 100755 index 0000000..cb1b061 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_lootpiles.sqf @@ -0,0 +1,115 @@ +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +sched_lootpiles_5m_init = { + sched_lp_state = 0; + sched_lp_var1 = 0; + sched_lp_lootTotal = 0; + sched_lp_delqty = 0; + sched_lp_players = []; + sched_lp_list = []; + + objNull +}; + +sched_lootpiles_5m = { + private ["_created","_kind","_x"]; + if (sched_lp_state == 0) then { + sched_lp_list = []; + sched_lp_lootTotal = 0; + { + _kind = _x; + { + _created = _x getVariable ["created",-1]; + if (_created == -1) then { + _created = diag_tickTime; + _x setVariable ["created",_created]; + }; + if (!(_x getVariable ["permaLoot",false]) AND {(diag_tickTime - _created > 1500)}) then { + sched_lp_list set [ count sched_lp_list, _x ]; + }; + sched_lp_lootTotal = sched_lp_lootTotal + 1; + } forEach allMissionObjects _kind; + } forEach [ "Blood_Trail_DZ", "ReammoBox", "Land_Fire_DZ", "flamable_DZ" ]; +#ifdef SERVER_DEBUG + diag_log ["sched_lootpiles_5mn: reset lootpiles check, total visited:", sched_lp_lootTotal, "listed:", count sched_lp_list]; +#endif + if (count sched_lp_list > 0) then { + sched_lp_state = 1; + sched_lp_var1 = 0; + sched_lp_players = +(playableUnits); + }; + }; + objNull +}; + +sched_lootpiles = { + private ["_plrBatch","_chunkSize","_imax","_plr","_i","_x", "_changed"]; + // EVERY 5 MINUTES, ONE OF THESE TASKS SPACED BY 5 SECONDS: + // LOOK FOR OLD LOOTPILES -OR- IGNORE LOOTPILES NEAR _plrBatch PLAYERS -OR- REMOVE REMAINING _chunkSize LOOTPILES + _chunkSize = 50; + _plrBatch = 10; + switch true do { + case (sched_lp_state == 1): { // forEach players -> ignore nearby loot + _imax = (count sched_lp_players) min (sched_lp_var1 + _plrBatch); + //diag_log format ["%1: lootpiles foreach players from:%2 to:%3 players:%4 old:%5 total:%6", __FILE__, sched_lp_var1, _imax, count sched_lp_players, count sched_lp_list, sched_lp_lootTotal ]; + for "_i" from sched_lp_var1 to _imax-1 do { + _plr = (sched_lp_players select _i); + if (!(isNull _plr) AND {(isPlayer _plr)}) then { + _plr = vehicle _plr; + { + if (_x IN sched_lp_list) then { + sched_lp_list = sched_lp_list - [_x]; + }; + } forEach ((getPosATL _plr) nearObjects ["ReammoBox",250]); + }/* + else { + diag_log format [ "%1 player left? %2", __FILE__, _x ]; + }*/; + }; + sched_lp_var1 = _imax; + _changed = false; + if (_imax == count sched_lp_players) then { // catch the few players who entered meanwhile + { + if !(_x in sched_lp_players) then { + sched_lp_players set [ count sched_lp_players, _x ]; + _changed = true; + }; + } forEach playableUnits; + }; + if (!_changed) then { + sched_lp_state = 2; + sched_lp_var1 = 0; + sched_lp_delqty = count sched_lp_list; +#ifdef SERVER_DEBUG + diag_log [ "sched_lootpiles:Will delete",sched_lp_delqty,"lootpiles"]; +#endif + } + else { +#ifdef SERVER_DEBUG + diag_log [ "sched_lootpiles:Extended loop for new players", _imax, count sched_lp_players]; +#endif + }; + }; + case (sched_lp_state == 2): { // forEAch remaining lootpiles -> delete + _imax = (sched_lp_delqty) min (sched_lp_var1 + _chunkSize); + //diag_log format ["%1: lootpiles foreach loot to del from:%2 to:%3 old:%4 total:%5", __FILE__, sched_lp_var1, _imax, sched_lp_delqty, sched_lp_lootTotal ]; + for "_i" from sched_lp_var1 to _imax-1 do { + _x = sched_lp_list select _i; + if (!isNull _x) then { + deleteVehicle _x; + }; + }; + sched_lp_var1 = _imax; + if (_imax == sched_lp_delqty) then { + sched_lp_state = 0; + sched_lp_list = []; +#ifdef SERVER_DEBUG + diag_log format ["%1: deleted %2 lootpiles from %3 total", __FILE__, sched_lp_delqty, sched_lp_lootTotal ]; +#endif + }; + }; + }; // switch + + objNull +}; + diff --git a/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_safetyVehicle.sqf b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_safetyVehicle.sqf new file mode 100755 index 0000000..4455e09 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_safetyVehicle.sqf @@ -0,0 +1,12 @@ + +sched_safetyVehicle = { + { + if (vehicle _x != _x && !(vehicle _x in dayz_serverObjectMonitor) && !((typeOf vehicle _x) in DZE_safeVehicle)) then { + diag_log [ __FILE__, "KILLING A HACKER", name _x, " IN ", typeOf vehicle _x ]; + (vehicle _x) setDamage 1; + _x setDamage 1; + }; + } forEach allUnits; + + objNull +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_sync.sqf b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_sync.sqf new file mode 100755 index 0000000..591187e --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_sync.sqf @@ -0,0 +1,62 @@ +/* + Instructions for using day/night schedule. + + 1. In your server config folder, edit file HiveExt.ini. Change [Time] Type to Local...Type = Local. + 2. Uncomment line 16 in this file: //#define DAY_NIGHT_SCHEDULE + 3. Adjust the hours of the day that you want to have night time in the arrays. + + NOTES: + The date/time is local to the server's time zone. + The days referred to here are days of the month, not days of the week. + You can configure odd and even days of the month to have different night time hours. + Coordinate the hours with BEC server restarts defined in scheduler.xml. + The default arrays alternate between day and night on a 4 hour schedule based on 0000, 0400, 0800, 1200, 1600, and 2000 restarts. +*/ + +//#define DAY_NIGHT_SCHEDULE // Uncomment this line to enable day/night schedule. +#define EVEN_DAY_NIGHT_HOURS [0,1,2,3,8,9,10,11,16,17,18,19] // These are the hours of the even numbered monthly days you wish to have night. +#define ODD_DAY_NIGHT_HOURS [0,1,2,3,8,9,10,11,16,17,18,19] // These are the hours of the odd numbered monthly days you wish to have night. + + +sched_sync = { + private ["_date","_hour","_minute"]; + // RESYNC TIME ON ALL MACHINES EVERY 15 MINUTES + // Date format [Year,Month,Day of the month,Hour,Minute] + + _date = ServerCurrentTime; // ServerCurrentTime is set at server start in sched_event and updated every 60 seconds. + _day = _date select 2; + _hour = _date select 3; + _minute = _date select 4; + + #ifdef DAY_NIGHT_SCHEDULE + _date set[3, 12]; // daytime unless overwritten below. + + if (_day % 2 == 0) then { // check if day of the month is divisible by 2. + if (_hour in EVEN_DAY_NIGHT_HOURS) then { + _date set[3, 20]; // set hour to 20. + }; + } else { + if (_hour in ODD_DAY_NIGHT_HOURS) then { + _date set[3, 20]; // set hour to 20. + }; + }; + #endif + + if(dayz_ForcefullmoonNights) then { + _date = [2012,8,2,(_date select 3),_minute]; + }; + + dayz_storeTimeDate = _date; // dayz_storeTimeDate is used to set the date on client connections. + + setDate _date; + dayzSetDate = _date; + publicVariable "dayzSetDate"; + diag_log [ __FILE__, "TIME SYNC: Local Time set to:", _date, "Fullmoon:",dayz_ForcefullmoonNights, "Date given by HiveExt.dll:", _date]; + + objNull +}; + +sched_fps = { + diag_log format["SERVER FPS: %1 PLAYERS: %2",round diag_fps,playersNumber west]; + objNull +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_traps.sqf b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_traps.sqf new file mode 100755 index 0000000..f3fd184 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_traps.sqf @@ -0,0 +1,49 @@ +/* + This scheduled task checks for changes in the number of bear traps set by players. + It is set to run every 30 seconds by default in sched_init. + For each of the traps, it gets the "armed" variable and calls the appropriate script + to arm or disarm the bear trap. Lazy eval has been added so that the function evaluates + quickly. Bear traps are not a popular feature in DayZ Epoch. +*/ + +sched_traps_init = { + //diag_log("Bear Trap Monitor Started"); + [str dayz_traps,str dayz_traps_active,str dayz_traps_trigger] +}; + +sched_traps = { + private ["_array","_array2","_array3","_script","_armed"]; + _array = _this select 0; + _array2 = _this select 1; + _array3 = _this select 2; + + if ((str dayz_traps != _array) || {str dayz_traps_active != _array2} || {str dayz_traps_trigger != _array3}) then { + _array = str dayz_traps; + _array2 = str dayz_traps_active; + _array3 = str dayz_traps_trigger; + //diag_log "DEBUG: traps"; + //diag_log format["dayz_traps (%2) -> %1", dayz_traps, count dayz_traps]; + //diag_log format["dayz_traps_active (%2) -> %1", dayz_traps_active, count dayz_traps_active]; + //diag_log format["dayz_traps_trigger (%2) -> %1", dayz_traps_trigger, count dayz_traps_trigger]; + //diag_log "DEBUG: end traps"; + }; + + { + if (isNull _x) then { + dayz_traps = dayz_traps - [_x]; + _armed = false; + _script = {}; + } else { + _armed = _x getVariable ["armed", false]; + _script = call compile getText (configFile >> "CfgVehicles" >> typeOf _x >> "script"); + }; + + if (_armed) then { + if !(_x in dayz_traps_active) then {["arm", _x] call _script;}; + } else { + if (_x in dayz_traps_active) then {["disarm", _x] call _script;}; + }; + } forEach dayz_traps; + + [_array,_array2,_array3] +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_wai.sqf b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_wai.sqf new file mode 100755 index 0000000..314cf6b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/system/scheduler/sched_wai.sqf @@ -0,0 +1,78 @@ +/* + This scheduled task checks for running WAI missions and starts them appropriately. +*/ + +sched_wai_init = { + diag_log("WAI: Scheduler Started"); + local _hArray = +wai_hero_missions; + local _bArray = +wai_bandit_missions; + local _hTime = (random((wai_mission_timer select 1) - (wai_mission_timer select 0)) + (wai_mission_timer select 0)) * 60; + local _bTime = (random((wai_mission_timer select 1) - (wai_mission_timer select 0)) + (wai_mission_timer select 0)) * 60; + [_hArray,_bArray,_bTime,_hTime] +}; + +sched_wai = { + local _hArray = _this select 0; + local _bArray = _this select 1; + local _bTime = _this select 2; + local _hTime = _this select 3; + local _mission = ""; + + // Bandit mission timer + if (WAI_MarkerReady && {diag_tickTime - wai_b_starttime >= _bTime} && {b_missionsrunning < wai_bandit_limit}) then { + WAI_MarkerReady = false; + local _selected = false; + + while {!_selected} do { + if (wai_debug_mode) then {diag_log format["WAI: Bandit Array: %1",_bArray];}; + _mission = _bArray select (floor (random (count _bArray))); + _index = [_bArray, (_mission select 0)] call BIS_fnc_findNestedElement select 0; + _bArray = [_bArray,_index] call fnc_deleteAt; + if (count _bArray == 0) then {_bArray = +wai_bandit_missions;}; + if ((_mission select 1) >= random 1) then { + _selected = true; + if (wai_debug_mode) then {diag_log format["WAI: Bandit mission %1 selected.",(_mission select 0)];}; + } else { + if (wai_debug_mode) then {diag_log format["WAI: Bandit mission %1 NOT selected.",(_mission select 0)];}; + }; + }; + + b_missionsrunning = b_missionsrunning + 1; + wai_b_starttime = diag_tickTime; + wai_mission_markers set [(count wai_mission_markers), ("MainBandit" + str(count wai_mission_data))]; + wai_mission_data = wai_mission_data + [[0,[],[],[],[],[],[]]]; + ["MainBandit","Hero"] execVM format ["\z\addons\dayz_server\WAI\missions\missions\%1.sqf",(_mission select 0)]; + }; + + // Hero mission timer + if (WAI_MarkerReady && {diag_tickTime - wai_h_starttime >= _hTime} && {h_missionsrunning < wai_hero_limit}) then { + WAI_MarkerReady = false; + local _selected = false; + + while {!_selected} do { + if (wai_debug_mode) then {diag_log format["WAI: Hero Array: %1",_hArray];}; + _mission = _hArray select (floor (random (count _hArray))); + _index = [_hArray, (_mission select 0)] call BIS_fnc_findNestedElement select 0; + _hArray = [_hArray,_index] call fnc_deleteAt; + if (count _hArray == 0) then {_hArray = +wai_hero_missions;}; + if ((_mission select 1) >= random 1) then { + _selected = true; + if (wai_debug_mode) then {diag_log format["WAI: Hero mission %1 selected.",(_mission select 0)];}; + } else { + if (wai_debug_mode) then {diag_log format["WAI: Hero mission %1 NOT selected.",(_mission select 0)];}; + }; + }; + + h_missionsrunning = h_missionsrunning + 1; + wai_h_starttime = diag_tickTime; + wai_mission_markers set [(count wai_mission_markers), ("MainHero" + str(count wai_mission_data))]; + wai_mission_data = wai_mission_data + [[0,[],[],[],[],[],[]]]; + ["MainHero","Bandit"] execVM format ["\z\addons\dayz_server\WAI\missions\missions\%1.sqf",(_mission select 0)]; + }; + + // Reset times + _hTime = (random((wai_mission_timer select 1) - (wai_mission_timer select 0)) + (wai_mission_timer select 0)) * 60; + _bTime = (random((wai_mission_timer select 1) - (wai_mission_timer select 0)) + (wai_mission_timer select 0)) * 60; + + [_hArray,_bArray,_bTime,_hTime] +}; \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/system/server_monitor.sqf b/@DayZ_Epoch_Server/addons/dayz_server/system/server_monitor.sqf new file mode 100755 index 0000000..d978e0b --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/system/server_monitor.sqf @@ -0,0 +1,470 @@ +private ["_legacyStreamingMethod","_hiveLoaded","_timeStart","_i","_key","_result","_shutdown","_res","_myArray","_val","_status","_fileName","_lastFN", + "_VehicleQueue","_vQty","_idKey","_type","_ownerID","_worldspace","_inventory","_damage","_storageMoney","_vector","_vecExists","_ownerPUID", + "_wsCount","_ws2TN","_ws3TN","_dir","_posATL","_wsDone","_object","_doorLocked","_isPlot","_isTrapItem","_isSafeObject", + "_weaponcargo","_magcargo","_backpackcargo","_weaponqty","_magqty","_backpackqty","_lockable","_codeCount","_codeCount","_isTrapItem","_xTypeName","_x1", + "_isAir","_selection","_dam","_hitpoints","_fuel","_pos"]; + +#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp" + +waitUntil {!isNil "BIS_MPF_InitDone" && initialized}; +if (!isNil "sm_done") exitWith {}; // prevent server_monitor be called twice (bug during login of the first player) +sm_done = false; + +_legacyStreamingMethod = false; //use old object streaming method, more secure but will be slower and subject to the callExtension return size limitation. + +dayz_serverIDMonitor = []; +dayz_versionNo = getText (configFile >> "CfgMods" >> "DayZ" >> "version"); +dayz_hiveVersionNo = getNumber (configFile >> "CfgMods" >> "DayZ" >> "hiveVersion"); +_hiveLoaded = false; +_serverVehicleCounter = []; +diag_log "HIVE: Starting"; + +//Stream in objects +/* STREAM OBJECTS */ +//Send the key +_timeStart = diag_tickTime; + +for "_i" from 1 to 5 do { + diag_log "HIVE: trying to get objects"; + _key = format["CHILD:302:%1:%2:",dayZ_instance, _legacyStreamingMethod]; + _result = _key call server_hiveReadWrite; + if (typeName _result == "STRING") then { + _shutdown = format["CHILD:400:%1:",(profileNamespace getVariable "SUPERKEY")]; + _res = _shutdown call server_hiveReadWrite; + diag_log ("HIVE: attempt to kill.. HiveExt response:"+str(_res)); + } else { + diag_log ("HIVE: found "+str(_result select 1)+" objects" ); + _i = 99; // break + }; +}; + +if (typeName _result == "STRING") exitWith { + diag_log "HIVE: Connection error. Server_monitor.sqf is exiting."; +}; + +diag_log "HIVE: Request sent"; +_myArray = []; +_val = 0; +_status = _result select 0; //Process result +_val = _result select 1; + +if (_legacyStreamingMethod) then { + if (_status == "ObjectStreamStart") then { + profileNamespace setVariable ["SUPERKEY",(_result select 2)]; + _hiveLoaded = true; + //Stream Objects + diag_log ("HIVE: Commence Object Streaming..."); + for "_i" from 1 to _val do { + _result = _key call server_hiveReadWriteLarge; + _status = _result select 0; + _myArray set [count _myArray,_result]; + }; + }; +} else { + if (_val > 0) then { + _fileName = _key call server_hiveReadWrite; + _lastFN = profileNamespace getVariable["lastFN",""]; + profileNamespace setVariable["lastFN",_fileName]; + saveProfileNamespace; + if (_status == "ObjectStreamStart") then { + profileNamespace setVariable ["SUPERKEY",(_result select 2)]; + _hiveLoaded = true; + _myArray = Call Compile PreProcessFile _fileName; + _key = format["CHILD:302:%1:%2:",_lastFN, _legacyStreamingMethod]; + _result = _key call server_hiveReadWrite; //deletes previous object data dump + }; + } else { + if (_status == "ObjectStreamStart") then { + profileNamespace setVariable ["SUPERKEY",(_result select 2)]; + _hiveLoaded = true; + }; + }; +}; + +//Stream objects first then load in the vehicles +_VehicleQueue = []; +_vQty = 0; +diag_log ("HIVE: Streamed " + str(count _myArray) + " Objects."); + +// Don't spawn objects if no clients are online (createVehicle fails with Ref to nonnetwork object) +if ((playersNumber west + playersNumber civilian) == 0) exitWith { + diag_log "All clients disconnected. Server_monitor.sqf is exiting."; +}; + +//spawn objects +{ + //Parse Array + _idKey = _x select 1; + _type = _x select 2; + _ownerID = _x select 3; + _worldspace = _x select 4; + _inventory = _x select 5; + _damage = _x select 8; + _storageMoney = _x select 9; + + if ((_type isKindOf "AllVehicles")) then { + _VehicleQueue set [_vQty,_x]; + _vQty = _vQty + 1; + } else { + _dir = 90; + _pos = [0,0,0]; + _wsDone = false; + _wsCount = count _worldspace; + + //Vector building + _vector = [[0,0,0],[0,0,0]]; + _vecExists = false; + _ownerPUID = "0"; + + call { + if (_wsCount == 4) exitwith { + _dir = _worldspace select 0; + _posATL = _worldspace select 1; + if (count _posATL == 3) then { + _pos = _posATL; + _wsDone = true; + }; + _ws2TN = typename (_worldspace select 2); + _ws3TN = typename (_worldspace select 3); + if (_ws3TN == "STRING") then { + _ownerPUID = _worldspace select 3; + } else { + if (_ws2TN == "STRING") then { + _ownerPUID = _worldspace select 2; + }; + }; + if (_ws2TN == "ARRAY") then { + _vector = _worldspace select 2; + _vecExists = true; + } else { + if (_ws3TN == "ARRAY") then { + _vector = _worldspace select 3; + _vecExists = true; + }; + }; + }; + if (_wsCount == 3) exitwith { + _dir = _worldspace select 0; + _posATL = _worldspace select 1; + if (count _posATL == 3) then { + _pos = _posATL; + _wsDone = true; + }; + _ws2TN = typename (_worldspace select 2); + _ws3TN = typename (_worldspace select 3); + if (_ws2TN == "STRING") then { + _ownerPUID = _worldspace select 2; + } else { + if (_ws2TN == "ARRAY") then { + _vector = _worldspace select 2; + _vecExists = true; + }; + }; + }; + if (_wsCount == 2) then { + _dir = _worldspace select 0; + _posATL = _worldspace select 1; + if (count _posATL == 3) then { + _pos = _posATL; + _wsDone = true; + }; + }; + if (_wsCount < 2) exitwith { + _worldspace set [count _worldspace, "0"]; + }; + }; + + if (!_wsDone) then { + if ((count _posATL) >= 2) then { + _pos = [_posATL select 0,_posATL select 1,0]; + diag_log format["MOVED OBJ: %1 of class %2 with worldspace array = %3 to pos: %4",_idKey,_type,_worldspace,_pos]; + } else { + diag_log format["MOVED OBJ: %1 of class %2 with worldspace array = %3 to pos: [0,0,0]",_idKey,_type,_worldspace]; + }; + }; + + _object = _type createVehicle [0,0,0]; //more than 2x faster than createvehicle array + _object setDir _dir; + _object setPosATL _pos; + _object setDamage _damage; + if (_vecExists) then { + _object setVectorDirAndUp _vector; + }; + _object enableSimulation false; + + _doorLocked = _type in DZE_DoorsLocked; + _isPlot = _type == "Plastic_Pole_EP1_DZ"; + + // prevent immediate hive write when vehicle parts are set up + _object setVariable ["lastUpdate",diag_ticktime]; + _object setVariable ["ObjectID", _idKey, true]; + _object setVariable ["OwnerPUID", _ownerPUID, true]; + if (Z_SingleCurrency && {_type in DZE_MoneyStorageClasses}) then { + _object setVariable ["cashMoney", _storageMoney, true]; + }; + + dayz_serverIDMonitor set [count dayz_serverIDMonitor,_idKey]; + + if (!_wsDone) then {[_object,"position",true] call server_updateObject;}; + if (_type == "Base_Fire_DZ") then {_object spawn base_fireMonitor;}; + + _isTrapItem = _object isKindOf "TrapItems"; + _isSafeObject = _type in DayZ_SafeObjects; + + //Dont add inventory for traps. + if (!_isTrapItem) then { + clearWeaponCargoGlobal _object; + clearMagazineCargoGlobal _object; + clearBackpackCargoGlobal _object; + if( (count _inventory > 0) && !_isPlot && !_doorLocked) then { + if (_type in DZE_LockedStorage) then { + // Do not send big arrays over network! Only server needs these + _object setVariable ["WeaponCargo",(_inventory select 0),false]; + _object setVariable ["MagazineCargo",(_inventory select 1),false]; + _object setVariable ["BackpackCargo",(_inventory select 2),false]; + } else { + _weaponcargo = _inventory select 0 select 0; + _magcargo = _inventory select 1 select 0; + _backpackcargo = _inventory select 2 select 0; + _weaponqty = _inventory select 0 select 1; + {_object addWeaponCargoGlobal [_x, _weaponqty select _foreachindex];} foreach _weaponcargo; + _magqty = _inventory select 1 select 1; + {if (_x != "CSGAS") then {_object addMagazineCargoGlobal [_x, _magqty select _foreachindex];};} foreach _magcargo; + _backpackqty = _inventory select 2 select 1; + {_object addBackpackCargoGlobal [_x, _backpackqty select _foreachindex];} foreach _backpackcargo; + }; + } else { + if (DZE_permanentPlot && _isPlot) then { + _object setVariable ["plotfriends", _inventory, true]; + }; + if (DZE_doorManagement && _doorLocked) then { + _object setVariable ["doorfriends", _inventory, true]; + }; + }; + }; + + // Fix for leading zero issues on safe codes after restart + _lockable = getNumber (configFile >> "CfgVehicles" >> _type >> "lockable"); + _codeCount = count (toArray _ownerID); + call { + if (_lockable == 4) exitwith { + call { + if (_codeCount == 3) exitwith {_ownerID = format["0%1",_ownerID];}; + if (_codeCount == 2) exitwith {_ownerID = format["00%1",_ownerID];}; + if (_codeCount == 1) exitwith {_ownerID = format["000%1",_ownerID];}; + }; + }; + if (_lockable == 3) exitwith { + call { + if (_codeCount == 2) exitwith {_ownerID = format["0%1",_ownerID];}; + if (_codeCount == 1) exitwith {_ownerID = format["00%1",_ownerID];}; + }; + }; + }; + _object setVariable ["CharacterID", _ownerID, true]; + if (_isSafeObject && !_isTrapItem) then { + _object setVariable["memDir",_dir,true]; + if (DZE_GodModeBase && {!(_type in DZE_GodModeBaseExclude)}) then { + _object addEventHandler ["HandleDamage",{false}]; + } else { + _object addMPEventHandler ["MPKilled",{_this call vehicle_handleServerKilled;}]; + }; + _object setVariable ["OEMPos",_pos,true]; // used for inplace upgrades and lock/unlock of safe + } else { + _object enableSimulation true; + }; + if (_isTrapItem) then { + //Use inventory traps armed state + { + _xTypeName = typeName _x; + if (_xTypeName == "ARRAY") then { + _x1 = _x select 1; + _object setVariable ["armed", _x1, true]; + } else { + _object setVariable ["armed", _x, true]; + }; + } count _inventory; + }; + dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object]; //Monitor the object + }; +} foreach _myArray; + +//spawn vehicles +{ + //Parse Array + _idKey = _x select 1; + _type = _x select 2; + _ownerID = _x select 3; + _worldspace = _x select 4; + _inventory = _x select 5; + _hitPoints = _x select 6; + _fuel = _x select 7; + _damage = _x select 8; + _storageMoney = _x select 9; + + _dir = 90; + _pos = [0,0,0]; + _wsDone = false; + _wsCount = count _worldspace; + + call { + if (_wsCount == 2) exitwith { + _dir = _worldspace select 0; + _posATL = _worldspace select 1; + if (count _posATL == 3) then { + _pos = _posATL; + _wsDone = true; + }; + }; + if (_wsCount < 2) exitwith { + _worldspace set [count _worldspace, "0"]; + }; + }; + + if (!_wsDone) then { + if ((count _posATL) >= 2) then { + _pos = [_posATL select 0,_posATL select 1,0]; + diag_log format["MOVED OBJ: %1 of class %2 with worldspace array = %3 to pos: %4",_idKey,_type,_worldspace,_pos]; + } else { + diag_log format["MOVED OBJ: %1 of class %2 with worldspace array = %3 to pos: [0,0,0]",_idKey,_type,_worldspace]; + }; + }; + + _object = _type createVehicle [0,0,0]; //more than 2x faster than createvehicle array + _object setDir _dir; + _object setPosATL _pos; + _object setDamage _damage; + _object enableSimulation false; + + // prevent immediate hive write when vehicle parts are set up + _object setVariable ["lastUpdate",diag_ticktime]; + _object setVariable ["ObjectID", _idKey, true]; + if (Z_SingleCurrency && ZSC_VehicleMoneyStorage) then { + _object setVariable ["cashMoney", _storageMoney, true]; + }; + + dayz_serverIDMonitor set [count dayz_serverIDMonitor,_idKey]; + + if (!_wsDone) then {[_object,"position",true] call server_updateObject;}; + + clearWeaponCargoGlobal _object; + clearMagazineCargoGlobal _object; + clearBackpackCargoGlobal _object; + if (count _inventory > 0) then { + _weaponcargo = _inventory select 0 select 0; + _magcargo = _inventory select 1 select 0; + _backpackcargo = _inventory select 2 select 0; + _weaponqty = _inventory select 0 select 1; + {_object addWeaponCargoGlobal [_x, _weaponqty select _foreachindex];} foreach _weaponcargo; + _magqty = _inventory select 1 select 1; + {if (_x != "CSGAS") then {_object addMagazineCargoGlobal [_x, _magqty select _foreachindex];};} foreach _magcargo; + _backpackqty = _inventory select 2 select 1; + {_object addBackpackCargoGlobal [_x, _backpackqty select _foreachindex];} foreach _backpackcargo; + }; + + _object setVariable ["CharacterID", _ownerID, true]; + _isAir = _object isKindOf "Air"; + + { + _selection = _x select 0; + _dam = [_x select 1,(_x select 1) min 0.8] select (!_isAir && {_selection in dayZ_explosiveParts}); + _object setHit [_selection,_dam]; + } count _hitpoints; + [_object,"damage"] call server_updateObject; + + _object setFuel _fuel; + _object call fnc_veh_ResetEH; + if (_ownerID != "0" && {!(_object isKindOf "Bicycle")}) then { + _object setVehicleLock "locked"; + //_object setVariable ["MF_Tow_Cannot_Tow",true,true]; + }; + _serverVehicleCounter set [count _serverVehicleCounter,_type]; // total each vehicle + _object enableSimulation true; + _object setVelocity [0,0,1]; + dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object]; //Monitor the object +} foreach _VehicleQueue; + +diag_log ("HIVE: Streamed " + str((count _myArray) -_vQty) + " Objects and " + str(_vQty) + " Vehicles."); + +diag_log format["HIVE: BENCHMARK - Server_monitor.sqf finished streaming %1 objects in %2 seconds (unscheduled)",_val,diag_tickTime - _timeStart]; + +// # END OF STREAMING # +if (dayz_townGenerator) then { + call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_plantSpawner.sqf"; // Draw the pseudo random seeds +}; +#ifndef OBJECT_DEBUG + object_debug = false; +#else + object_debug = true; +#endif +execFSM "\z\addons\dayz_server\system\server_vehicleSync.fsm"; +execVM "\z\addons\dayz_server\system\scheduler\sched_init.sqf"; // launch the new task scheduler +execFSM "\z\addons\dayz_server\system\server_weather.fsm"; // new weather system for 1.0.7 + +createCenter civilian; + +actualSpawnMarkerCount = 0; +// count valid spawn markers, since different maps have different amounts +for "_i" from 0 to 10 do { + if ((getMarkerPos format["spawn%1",_i]) distance [0,0,0] > 0) then { + actualSpawnMarkerCount = actualSpawnMarkerCount + 1; + } else { + _i = 11; // exit since we did not find any further markers + }; +}; +diag_log format["Total Number of spawn locations %1", actualSpawnMarkerCount]; + +if (isDedicated) then {endLoadingScreen;}; +allowConnection = true; +sm_done = true; +publicVariable "sm_done"; + +execVM "\z\addons\dayz_server\system\lit_fireplaces.sqf"; + +if (_hiveLoaded) then { + _serverVehicleCounter spawn { + private ["_startTime","_cfgLootFile","_vehLimit"]; + // spawn_vehicles + // Get all buildings and roads only once. Very taxing, but only on first startup + _serverVehicleCounter = _this; + _vehiclesToUpdate = []; + _startTime = diag_tickTime; + _buildingList = []; + _cfgLootFile = missionConfigFile >> "CfgLoot" >> "Buildings"; + { + if (isClass (_cfgLootFile >> typeOf _x)) then { + _buildingList set [count _buildingList,_x]; + }; + } count (getMarkerPos "center" nearObjects ["building",((getMarkerSize "center") select 1)]); + _roadList = getMarkerPos "center" nearRoads ((getMarkerSize "center") select 1); + //diag_log format ["_serverVehicleCounter: %1",_serverVehicleCounter]; + _vehLimit = MaxVehicleLimit - (count _serverVehicleCounter); + if (_vehLimit > 0) then { + diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit)); + for "_x" from 1 to _vehLimit do {call spawn_vehicles;}; + } else { + diag_log "HIVE: Vehicle Spawn limit reached!"; + _vehLimit = 0; + }; + + if (dayz_townGenerator) then { + // Vanilla town generator spawns debris locally on each client + MaxDynamicDebris = 0; + } else { + // Epoch global dynamic debris + diag_log ("HIVE: Spawning # of Debris: " + str(MaxDynamicDebris)); + for "_x" from 1 to MaxDynamicDebris do {call spawn_roadblocks;}; + }; + + diag_log ("HIVE: Spawning # of Ammo Boxes: " + str(MaxAmmoBoxes)); + for "_x" from 1 to MaxAmmoBoxes do {call spawn_ammosupply;}; + + diag_log ("HIVE: Spawning # of Veins: " + str(MaxMineVeins)); + for "_x" from 1 to MaxMineVeins do {call spawn_mineveins;}; + + diag_log format["HIVE: BENCHMARK - Server finished spawning %1 DynamicVehicles, %2 Debris, %3 SupplyCrates and %4 MineVeins in %5 seconds (scheduled)",_vehLimit,MaxDynamicDebris,MaxAmmoBoxes,MaxMineVeins,diag_tickTime - _startTime]; + + //Update gear last after all dynamic vehicles are created to save random loot to database (low priority) + {[_x,"gear"] call server_updateObject} count _vehiclesToUpdate; + }; +}; diff --git a/@DayZ_Epoch_Server/addons/dayz_server/system/server_vehicleSync.fsm b/@DayZ_Epoch_Server/addons/dayz_server/system/server_vehicleSync.fsm new file mode 100755 index 0000000..ab7d6aa --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/system/server_vehicleSync.fsm @@ -0,0 +1,135 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"init",0,250,-75.000000,-425.000000,25.000000,-375.000000,0.000000,"init"}; +item1[] = {"true",8,218,-75.000000,-200.000000,25.000000,-150.000000,0.000000,"true"}; +item2[] = {"waiting",2,250,-75.000000,-125.000000,25.000000,-75.000000,0.000000,"waiting"}; +item3[] = {"true",8,218,-75.000000,250.000000,25.000000,300.000000,0.000000,"true"}; +item4[] = {"",7,210,-204.000015,271.000000,-195.999985,279.000031,0.000000,""}; +item5[] = {"",7,210,-204.000015,-104.000000,-196.000000,-96.000000,0.000000,""}; +item6[] = {"initialized",4,218,-75.000000,-350.000000,25.000000,-300.000000,0.000000,"initialized"}; +item7[] = {"prepare",2,4346,-75.000000,-275.000000,25.000000,-225.000000,0.000000,"prepare"}; +item8[] = {"update_objects",2,250,-75.220673,77.428261,24.779324,127.428261,0.000000,"update objects"}; +item9[] = {"Objects_need_upd",4,218,-75.220726,-1.214130,24.779320,48.785873,1.000000,"Objects" \n "need update"}; +link0[] = {0,6}; +link1[] = {1,2}; +link2[] = {2,9}; +link3[] = {3,4}; +link4[] = {4,5}; +link5[] = {5,2}; +link6[] = {6,7}; +link7[] = {7,1}; +link8[] = {8,3}; +link9[] = {9,8}; +globals[] = {0.000000,0,0,0,0,640,480,1,15,6316128,1,-285.818726,406.559204,464.760406,-344.050812,779,910,1}; +window[] = {2,-1,-1,-1,-1,858,130,1459,130,3,797}; +*//*%FSM*/ +class FSM +{ + fsmName = "DayZ Server Vehicle Sync"; + class States + { + /*%FSM*/ + class init + { + name = "init"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class initialized + { + priority = 0.000000; + to="prepare"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isnil ""bis_fnc_init"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class waiting + { + name = "waiting"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Objects_need_upd + { + priority = 1.000000; + to="update_objects"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(( (count needUpdate_objects) > 0) && (diag_tickTime -_lastVehicleUpdate> 5) && (!isNil ""sm_done""))"/*%FSM*/; + action=/*%FSM*/"_lastNeedUpdate = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class prepare + { + name = "prepare"; + init = /*%FSM*/"diag_log (""CLEANUP: INITIALIZING Vehicle SCRIPT"");" \n + "" \n + "_lastVehicleUpdate = diag_tickTime;" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + priority = 0.000000; + to="waiting"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class update_objects + { + name = "update_objects"; + init = /*%FSM*/"if (object_debug) then {" \n + " diag_log format[""INFO: needUpdate_objects=%1"",needUpdate_objects];" \n + "};" \n + "" \n + "{" \n + " needUpdate_objects = needUpdate_objects - [_x];" \n + " [_x,""damage"",true] call server_updateObject;" \n + "} forEach needUpdate_objects;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + priority = 0.000000; + to="waiting"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="init"; + finalStates[] = + { + }; +}; +/*%FSM*/ \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/system/server_weather.fsm b/@DayZ_Epoch_Server/addons/dayz_server/system/server_weather.fsm new file mode 100755 index 0000000..4685c2c --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/system/server_weather.fsm @@ -0,0 +1,472 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"Init",0,250,-40.348839,-141.860458,49.651161,-91.860458,0.000000,"Init"}; +item1[] = {"Winter",4,218,-188.538055,-142.324219,-98.538559,-92.324203,0.000000,"Winter"}; +item2[] = {"Summer",4,218,102.997711,-141.329483,192.997635,-91.329491,0.000000,"Summer"}; +item3[] = {"Initial_Weather",2,250,-188.646942,-61.923744,-98.647324,-11.923735,0.000000,"Initial" \n "Weather" \n "Settings"}; +item4[] = {"Initial_Weather_1",2,250,102.293213,-59.535393,192.293106,-9.535398,0.000000,"Initial" \n "Weather" \n "Settings"}; +item5[] = {"Dynamic",4,218,-329.250580,71.166527,-239.250580,121.166656,0.000000,"Dynamic"}; +item6[] = {"Dynamic",4,218,218.953949,71.415863,308.953918,121.415939,0.000000,"Dynamic"}; +item7[] = {"Wait",2,250,-328.546112,168.298981,-238.546051,218.298904,0.000000,"Wait"}; +item8[] = {"Wait_1",2,250,218.914642,170.498108,308.914825,220.498215,0.000000,"Wait"}; +item9[] = {"Ready",4,218,-328.654816,242.721832,-238.654816,292.721832,0.000000,"Ready"}; +item10[] = {"Static",4,218,-157.608826,11.221905,-67.609406,61.222015,0.000000,"Static"}; +item11[] = {"Static",4,218,75.503952,10.589214,165.503632,60.589310,0.000000,"Static"}; +item12[] = {"Ready",4,218,219.836456,249.480164,309.836395,299.480164,0.000000,"Ready"}; +item13[] = {"End",1,250,-40.321423,10.661306,49.678623,60.661461,0.000000,"End"}; +item14[] = {"Invalid_Option",4,218,-40.038357,-66.470139,49.961643,-16.470152,0.000000,"Invalid" \n "Option"}; +item15[] = {"Set_Weather",2,250,-211.722900,243.535065,-121.722931,293.535065,0.000000,"Set Weather"}; +item16[] = {"Return",8,218,-211.614197,168.298981,-121.614273,218.298737,0.000000,"Return"}; +item17[] = {"Set_Weather_1",2,250,106.104187,248.682190,196.104202,298.682190,0.000000,"Set Weather"}; +item18[] = {"Return",8,218,106.772743,172.461502,196.772736,222.461502,0.000000,"Return"}; +item19[] = {"PV_Delay",2,250,-328.769989,335.746979,-238.769974,385.746979,0.000000,"PV Delay"}; +item20[] = {"Delay",4,218,-212.201813,335.746979,-122.201813,385.746979,0.000000,"Delay"}; +item21[] = {"PV_Delay_1",2,4346,219.507141,333.036072,309.507141,383.036072,0.000000,"PV Delay"}; +item22[] = {"Delay",4,218,107.005257,333.713837,197.005264,383.713837,0.000000,"Delay"}; +link0[] = {0,1}; +link1[] = {0,2}; +link2[] = {0,14}; +link3[] = {1,3}; +link4[] = {2,4}; +link5[] = {3,5}; +link6[] = {3,10}; +link7[] = {4,6}; +link8[] = {4,11}; +link9[] = {5,7}; +link10[] = {6,8}; +link11[] = {7,9}; +link12[] = {8,12}; +link13[] = {9,19}; +link14[] = {10,13}; +link15[] = {11,13}; +link16[] = {12,21}; +link17[] = {14,13}; +link18[] = {15,16}; +link19[] = {16,7}; +link20[] = {17,18}; +link21[] = {18,8}; +link22[] = {19,20}; +link23[] = {20,15}; +link24[] = {21,22}; +link25[] = {22,17}; +globals[] = {0.000000,0,0,0,0,640,480,1,26,6316128,1,-441.001495,496.288025,744.435730,-164.875015,1178,910,1}; +window[] = {2,-1,-1,-1,-1,785,26,1466,26,3,1196}; +*//*%FSM*/ +class FSM +{ + fsmName = "dze_weather"; + class States + { + /*%FSM*/ + class Init + { + name = "Init"; + init = /*%FSM*/"_minChangeTime = DZE_WeatherVariables select 0;" \n + "_maxChangeTime = DZE_WeatherVariables select 1;" \n + "_minFog = DZE_WeatherVariables select 2;" \n + "_maxFog = DZE_WeatherVariables select 3;" \n + "_minOvercast = DZE_WeatherVariables select 4;" \n + "_maxOvercast = DZE_WeatherVariables select 5;" \n + "_minRain = DZE_WeatherVariables select 6;" \n + "_maxRain = DZE_WeatherVariables select 7;" \n + "_minWind = DZE_WeatherVariables select 8;" \n + "_maxWind = DZE_WeatherVariables select 9;" \n + "_windProb = DZE_WeatherVariables select 10;" \n + "_minSnow = DZE_WeatherVariables select 11;" \n + "_maxSnow = DZE_WeatherVariables select 12;" \n + "_blizzardProb = DZE_WeatherVariables select 13;" \n + "_blizzardInterval = DZE_WeatherVariables select 14;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Summer + { + priority = 0.000000; + to="Initial_Weather_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"DZE_Weather in [1,2]"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Invalid_Option + { + priority = 0.000000; + to="End"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(DZE_Weather in [1,2,3,4])"/*%FSM*/; + action=/*%FSM*/"diag_log ""Weather Error: invalid option for variable DZE_Weather!"";" \n + "" \n + "DZE_serverWeatherArray = [0, 0, 0, 0, 0, 0, ""none"", false];"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Winter + { + priority = 0.000000; + to="Initial_Weather"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"DZE_Weather in [3,4]"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Initial_Weather + { + name = "Initial_Weather"; + init = /*%FSM*/"_fog = (_minFog + random (_maxFog - _minFog));" \n + "_overcast = (_minOvercast + random (_maxOvercast - _minOvercast));" \n + "_rain = 0;" \n + "_snow = 0;" \n + "_type = ""NONE"";" \n + "_blizzard = false;" \n + "" \n + "if (_overcast > .70) then {" \n + " _snow = (_minSnow + random (_maxSnow - _minSnow));" \n + " if (_blizzardProb > 0) then {_blizzard = (random 1 <= _blizzardProb);};" \n + "};" \n + "" \n + "_windX = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n + "_windY = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n + "" \n + "_changeTime = _minChangeTime * 60 + random ((_maxChangeTime - _minChangeTime) * 60);" \n + "if (_blizzard && {_blizzardInterval > 0}) then {_changeTime = _blizzardInterval * 60};" \n + "" \n + "// Populate the server's global array" \n + "PVDZE_SetWeather = [_overcast, _fog, _rain, _windX, _windY, _snow, _type, _blizzard];" \n + "" \n + "// Set weather parameters locally on the server - I'm not sure if this is necessary because weather is not synced in A2OA." \n + "0 setRain _rain;" \n + "0 setOvercast _overcast;" \n + "0 setFog _fog;" \n + "setWind [_windX, _windY, true];" \n + "" \n + "diag_log text format [""Weather Forecast: Overcast: %1, Fog: %2, Rain: %3, WindX: %4, WindY: %5, Snow: %6, Blizzard: %7, Change Time: %8"",_overcast,_fog,_rain,_windX,_windY,_snow,_blizzard,_changeTime];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Static + { + priority = 0.000000; + to="End"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"DZE_Weather == 3"/*%FSM*/; + action=/*%FSM*/"diag_log ""Static Winter Weather Enabled"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Dynamic + { + priority = 0.000000; + to="Wait"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"DZE_Weather == 4"/*%FSM*/; + action=/*%FSM*/"diag_log ""Dynamic Winter Weather Starting"";" \n + "" \n + "_bypassOvercast = _minOvercast == _maxOvercast; // if values are the same then bypass." \n + "_bypassFog = _minFog == _maxFog; // if values are the same then bypass."/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Initial_Weather_1 + { + name = "Initial_Weather_1"; + init = /*%FSM*/"_fog = (_minFog + random (_maxFog - _minFog));" \n + "_overcast = (_minOvercast + random (_maxOvercast - _minOvercast));" \n + "_rain = 0;" \n + "_snow = 0;" \n + "_type = ""NONE"";" \n + "_blizzard = false;" \n + "" \n + "if (_overcast > .70) then {" \n + " _rain = (_minRain + random (_maxRain - _minRain));" \n + "};" \n + "" \n + "_windX = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n + "_windY = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n + "" \n + "_changeTime = _minChangeTime * 60 + random ((_maxChangeTime - _minChangeTime) * 60);" \n + "" \n + "// Populate the server's global array" \n + "PVDZE_SetWeather = [_overcast, _fog, _rain, _windX, _windY, _snow, _type, _blizzard];" \n + "" \n + "// Set weather parameters locally on the server - I'm not sure if this is necessary because weather is not synced in A2OA." \n + "0 setRain _rain;" \n + "0 setOvercast _overcast;" \n + "0 setFog _fog;" \n + "setWind [_windX, _windY, true];" \n + "" \n + "diag_log text format [""Weather Forecast: Overcast: %1, Fog: %2, Rain: %3, WindX: %4, WindY: %5, Snow: %6, Blizzard: %7, Change Time: %8"",_overcast,_fog,_rain,_windX,_windY,_snow,_blizzard,_changeTime];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Static + { + priority = 0.000000; + to="End"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"DZE_Weather == 1"/*%FSM*/; + action=/*%FSM*/"diag_log ""Static Summer Weather Enabled"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Dynamic + { + priority = 0.000000; + to="Wait_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"DZE_Weather == 2" \n + ""/*%FSM*/; + action=/*%FSM*/"diag_log ""Dynamic Summer Weather Starting"";" \n + "" \n + "_bypassOvercast = _minOvercast == _maxOvercast; // if values are the same then bypass." \n + "_bypassFog = _minFog == _maxFog; // if values are the same then bypass."/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + name = "Wait"; + init = /*%FSM*/"_time = diag_tickTime;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Ready + { + priority = 0.000000; + to="PV_Delay"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _time) > _changeTime"/*%FSM*/; + action=/*%FSM*/"DZE_WeatherEndThread = true; // Used to end existing rain, snow, and blizzard threads on the clients." \n + "publicVariable ""DZE_WeatherEndThread"";"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Wait_1 + { + name = "Wait_1"; + init = /*%FSM*/"_time = diag_tickTime;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Ready + { + priority = 0.000000; + to="PV_Delay_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _time) > _changeTime"/*%FSM*/; + action=/*%FSM*/"DZE_WeatherEndThread = true; // Used to end existing rain, snow, and blizzard threads on the clients." \n + "publicVariable ""DZE_WeatherEndThread"";"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class End + { + name = "End"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Set_Weather + { + name = "Set_Weather"; + init = /*%FSM*/"diag_log ""DEBUG Weather: Setting Weather."";" \n + "" \n + "// Change one type, fog or overcast, per cycle." \n + "_type = call {" \n + " if (_bypassFog && !_bypassOvercast) exitWith {""OVERCAST""};" \n + " if (_bypassOvercast && !_bypassFog) exitWith {""FOG""};" \n + " // Select random type of weather to change if no bypass. Make overcast changes 75% of the time." \n + " [""FOG"",""OVERCAST""] select (random 1 < .75);" \n + "};" \n + "" \n + "if (_type == ""FOG"") then {" \n + " _fog = (_minFog + random (_maxFog - _minFog));" \n + "};" \n + "" \n + "if (_type == ""OVERCAST"") then {" \n + " _overcast = (_minOvercast + random (_maxOvercast - _minOvercast));" \n + " if (_overcast > 0.70) then {" \n + " _snow = (_minSnow + random (_maxSnow - _minSnow));" \n + " if (_blizzardProb > 0) then {_blizzard = (random 1 <= _blizzardProb);};" \n + " } else {" \n + " _snow = 0;" \n + " _blizzard = false;" \n + " };" \n + "};" \n + "" \n + "// On average every one fourth of weather changes, change wind too" \n + "if (random 1 < _windProb) then {" \n + " _windX = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n + " _windY = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n + "};" \n + "" \n + "_changeTime = _minChangeTime * 60 + random ((_maxChangeTime - _minChangeTime) * 60);" \n + "if (_blizzard && {_blizzardInterval > 0}) then {_changeTime = _blizzardInterval * 60};" \n + "" \n + "// Set weather parameters on all clients" \n + "PVDZE_SetWeather = [_overcast, _fog, _rain, _windX, _windY, _snow, _type, _blizzard];" \n + "publicVariable ""PVDZE_SetWeather"";" \n + "" \n + "// Set weather parameters locally on the server - I'm not sure if this is necessary because weather is not synced in A2OA." \n + "0 setRain _rain;" \n + "0 setOvercast _overcast;" \n + "0 setFog _fog;" \n + "setWind [_windX, _windY, true];" \n + "" \n + "diag_log text format [""Weather Forecast: Overcast: %1, Fog: %2, Rain: %3, WindX: %4, WindY: %5, Snow: %6, Blizzard: %7, Change Time: %8"",_overcast,_fog,_rain,_windX,_windY,_snow,_blizzard,_changeTime];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Return + { + priority = 0.000000; + to="Wait"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Set_Weather_1 + { + name = "Set_Weather_1"; + init = /*%FSM*/"// Change one type, fog or overcast, per cycle." \n + "_type = call {" \n + " if (_bypassFog && !_bypassOvercast) exitWith {""OVERCAST""};" \n + " if (_bypassOvercast && !_bypassFog) exitWith {""FOG""};" \n + " // Select random type of weather to change if no bypass. Make overcast changes 75% of the time." \n + " [""FOG"",""OVERCAST""] select (random 1 < .75);" \n + "};" \n + "" \n + "if (_type == ""FOG"") then {" \n + " _fog = (_minFog + random (_maxFog - _minFog));" \n + "};" \n + "" \n + "if (_type == ""OVERCAST"") then {" \n + " _overcast = (_minOvercast + random (_maxOvercast - _minOvercast));" \n + " if (_overcast > 0.70) then {" \n + " _rain = (_minRain + random (_maxRain - _minRain));" \n + " } else {" \n + " _rain = 0;" \n + " };" \n + "};" \n + "" \n + "// On average every one fourth of weather changes, change wind too" \n + "if (random 1 < _windProb) then {" \n + " _windX = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n + " _windY = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n + "};" \n + "" \n + "_changeTime = _minChangeTime * 60 + random ((_maxChangeTime - _minChangeTime) * 60);" \n + "" \n + "// Set weather parameters on all clients" \n + "PVDZE_SetWeather = [_overcast, _fog, _rain, _windX, _windY, _snow, _type, _blizzard];" \n + "publicVariable ""PVDZE_SetWeather"";" \n + "" \n + "// Set weather parameters locally on the server - I'm not sure if this is necessary because weather is not synced in A2OA." \n + "0 setRain _rain;" \n + "0 setOvercast _overcast;" \n + "0 setFog _fog;" \n + "setWind [_windX, _windY, true];" \n + "" \n + "diag_log text format [""Weather Forecast: Overcast: %1, Fog: %2, Rain: %3, WindX: %4, WindY: %5, Snow: %6, Blizzard: %7, Change Time: %8"",_overcast,_fog,_rain,_windX,_windY,_snow,_blizzard,_changeTime];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Return + { + priority = 0.000000; + to="Wait_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class PV_Delay + { + name = "PV_Delay"; + init = /*%FSM*/"_time = diag_tickTime;" \n + "" \n + "// Need to sleep the loop for 5 seconds to ensure that the clients have time to react to the PV"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Delay + { + priority = 0.000000; + to="Set_Weather"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _time) > 5"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class PV_Delay_1 + { + name = "PV_Delay_1"; + init = /*%FSM*/"_time = diag_tickTime;" \n + "" \n + "// Need to sleep the loop for 5 seconds to ensure that the clients have time to react to the PV"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Delay + { + priority = 0.000000; + to="Set_Weather_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _time) > 5"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="Init"; + finalStates[] = + { + "End", + }; +}; +/*%FSM*/ \ No newline at end of file diff --git a/@DayZ_Epoch_Server/addons/dayz_server/traders/napf.sqf b/@DayZ_Epoch_Server/addons/dayz_server/traders/napf.sqf new file mode 100755 index 0000000..ced24a4 --- /dev/null +++ b/@DayZ_Epoch_Server/addons/dayz_server/traders/napf.sqf @@ -0,0 +1,70 @@ +[ + // Hero Vendor + ["FR_AC",[5154.02,4855.44,0],266.032], + // Bandit Vendor + ["GUE_Commander",[10395.6,8270.34,0],214.982], + /******************Lenzburg************************/ + //Black Market + ["GUE_Woodlander2",[8243.29,15505.4,0.25],134.795], + //Weapons + ["RU_Citizen4",[8264.54,15495.9,3.55006],52.1028], + //Ammunition + ["Profiteer1",[8262.31,15499.4,3.55006],52.1128], + //General Store + ["Rita_Ensler_EP1",[8262.27,15499.9,0.250063],228.636], + //Medical Supplies + ["Dr_Hladik_EP1",[8269.49,15490.6,0.250063],255.248], + //Building/Parts + ["Worker2",[8254.95,15509.6,0.250067],189.353], + //Vehicles + ["Villager1",[8266.67,15482.2,0.123269],218.236], + /***********************************************/ + /******************Emmen************************/ + //Weapons + ["CIV_EuroMan01_EP1",[15507.7,13226.1,0],28.48], + //Ammunition + ["CIV_EuroMan02_EP1",[15503.2,13227.2,0],28.48], + //General Store + ["RU_WorkWoman5",[15536.5,13224.5,0],0], + //Medical Supplies + ["Doctor",[15520,13250.7,0.294226],328.894], + //Building/Parts + ["Worker1",[15518.8,13226.5,0],335], + //Vehicles + ["TK_CIV_Worker02_EP1",[15473.2,13187.7,0],34.3503], + /***********************************************/ + /*****************Schratten***********************/ + //Weapons + ["Rocker4",[12427.5,5058.27,3.47403],303], + //Ammunition + ["RU_Citizen3",[12425.6,5054.96,3.49786],303], + //General Store + ["RU_WorkWoman1",[12392.7,5053.99,0.520996],172.955], + //Medical Supplies + ["Dr_Annie_Baker_EP1",[12401.6,5045.47,0.894516],324.168], + //Building/Parts + ["Worker3",[12421.7,5051.93,0.220291],31], + //Vehicles + ["TK_CIV_Worker01_EP1",[12421.8,5058.99,0.225952],24.8034], + /***********************************************/ + //Aircraft Dealer + ["RU_Pilot",[15128.7,16420.9,0.0772419],134.335], + //Boat Vendor + ["RU_Villager3",[16864.951,5273.5635,1.3620883],180], + //Boat Vendor + ["HouseWife1",[6773.4,16950.3,1.79731],328.118], + //Wholesaler + ["Profiteer2",[5371,16091.2,0],0], + //Wholesaler + ["Profiteer3",[2128.3,7807.78,6.99081],260.566] +] call server_spawnTraders; + +// Bankers +if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then { + [ + ["Functionary1_EP1",[12399.83,5054.3413,0.2],52], + ["Functionary1_EP1",[15529.827,13236.555,2.38],164], + ["Functionary1_EP1",[8252.4922,15494.612,0.22],24.5], + ["Functionary1_EP1",[2123.4653,7806.499,0.28],53] + ] call server_spawnTraders; +}; diff --git a/BattlEye/BEClient.dll b/BattlEye/BEClient.dll new file mode 100755 index 0000000..3395921 Binary files /dev/null and b/BattlEye/BEClient.dll differ diff --git a/BattlEye/BELauncher.ini b/BattlEye/BELauncher.ini new file mode 100755 index 0000000..bdf2187 --- /dev/null +++ b/BattlEye/BELauncher.ini @@ -0,0 +1,6 @@ +[Launcher] +GameID=arma2oa +BasePort=2327 +32BitExe=ArmA2OA.exe +SilentInstall=0 +PrivacyBox=2 \ No newline at end of file diff --git a/BattlEye/BEServer.cfg b/BattlEye/BEServer.cfg new file mode 100755 index 0000000..43f1ffa --- /dev/null +++ b/BattlEye/BEServer.cfg @@ -0,0 +1,9 @@ +RConPassword ChangeMe +MaxPing 300 +MaxAddBackpackCargoPerInterval 20 1 +MaxAddMagazineCargoPerInterval 400 1 +MaxAddWeaponCargoPerInterval 75 1 +MaxCreateVehiclePerInterval 150 1 +MaxDeleteVehiclePerInterval 100 1 +MaxSetDamagePerInterval 3 1 +MaxSetPosPerInterval 10 1 \ No newline at end of file diff --git a/BattlEye/BEServer.dll b/BattlEye/BEServer.dll new file mode 100755 index 0000000..fe811f6 Binary files /dev/null and b/BattlEye/BEServer.dll differ diff --git a/BattlEye/BEService.exe b/BattlEye/BEService.exe new file mode 100755 index 0000000..b0f0e69 Binary files /dev/null and b/BattlEye/BEService.exe differ diff --git a/BattlEye/BEService_x64.exe b/BattlEye/BEService_x64.exe new file mode 100755 index 0000000..9252cd6 Binary files /dev/null and b/BattlEye/BEService_x64.exe differ diff --git a/BattlEye/BE_AEG.exe b/BattlEye/BE_AEG.exe new file mode 100755 index 0000000..50eedaa Binary files /dev/null and b/BattlEye/BE_AEG.exe differ diff --git a/BattlEye/addbackpackcargo.txt b/BattlEye/addbackpackcargo.txt new file mode 100755 index 0000000..0fb6e3b --- /dev/null +++ b/BattlEye/addbackpackcargo.txt @@ -0,0 +1,2 @@ +//new +5 "" !DZ_ !CZ_VestPouch_EP1 !_DZE[12]$ diff --git a/BattlEye/addmagazinecargo.txt b/BattlEye/addmagazinecargo.txt new file mode 100755 index 0000000..50aafb0 --- /dev/null +++ b/BattlEye/addmagazinecargo.txt @@ -0,0 +1,4 @@ +//new +1 "" !^[0-9]+Rnd_|^Item|^Trash|^Food|^Fish|^Part|^Attachment_|^equip|swing$|^Hand|^(whole)?blood|^Skin !=Mosin_Nagant_Ammo|transfusionKit|TrapBear|emptyBloodBag|PipeBomb|5x_22_LR_17_HMR|10x_303|Crossbow_EX_Bolt !=Tranquiliser_Bolt|CementBag !=Flare(White|Green)_(M203|GP25) !=SmokeShell(Red|Green|Yellow|Orange|Blue)? !="" !=(Quiver|WoodenArrow|CA_Magazine|CinderBlocks|MortarBucket|fuel_pump_kit|forest_net_kit|CSGAS|MAAWS_HEAT) !_kit$|_locked$|_kit2$ !bulk_ !ACR_30Rnd_680x43 +1 ^[0-9]+Rnd_ !=1Rnd_(((HE|Smoke(Red|Green|Yellow)?)_(M203|GP25))|Arrow_Wood|Bolt_Explosive|Bolt_Tranquilizer) !=2Rnd_12Gauge_(Slug|Buck) !=3rnd_Anzio_20x102mm !=5Rnd_(762x51_M24|86x70_L115A1|762x54_Mosin|17HMR|127x108_KSVK|127x99_as50_CP|762x67_XM2010(_SD)?) !=6Rnd_(45ACP|44Magnum|357Magnum|762x51_WA2000) !=7Rnd_(45ACP_1911(SD)?|86x70_MSR(_SD)?|50AE_Deagle|9x17_PPK) !=75Rnd_(545x39_RPK|762x39_RPK) !=8Rnd_(9x18_Makarov(SD)?|762x25_TT33|9x19_P38|9x19_MK22(SD)?|((12Gauge_|B_Saiga12_)(74Slug|Slug|Pellets|Buck))) !=10Rnd_(303British|762x54_SVD|762x51_CZ750|86x70_MRAD|127x99_m107) !=12Rnd_Quiver_Wood !=15Rnd_(9x19_M9(SD)?|W1866_Slug|9x19_P226|10x22_p99(_sd)?|45ACP_USP(SD)?) !=17Rnd_9x19_glock17(SD)? !=20Rnd_(762x51_(DMR(SD)?|FNFAL|(S)?B_SCAR|RSASS(_SD)?|G3|HK417(SD)?)|9x18_APS(SD)?) !=20Rnd_(B_(765x17_Ball|((Usas12_|AA12_)(74Slug|Pellets)))|9x39_(Groza9(SD)?|SP5_VSS)|9x19_(EVO(SD)?|M93R)) !=30Rnd_(556x45_(STANAG|G36|Aug)(SD)?|545x39_AK(SD)?|6x35_KAC) !=30Rnd_(762x39_(AK47|SA58|RK95(SD)?|Groza1(SD)?)|9x19_(MP5(SD)?|UZI(_SD)?|TMP(SD)?)) !=64Rnd_9x19(_SD)?_Bizon !=100Rnd_(762x(51_M240|54_PK)|556x45_BetaCMag|127x99_M2) !=[12]00Rnd_556x45_(M249|L110A1) !=50Rnd_(762x54_UK59|57x28_P90(SD)?) !=32Rnd_9x19_(TEC9|STEN|MAT49) !=33Rnd_(9x19_G18|45ACP_KRISS(SD)?) !=18Rnd_9x19_Phantom(SD)? !=40Rnd_46x30(_sd)?_mp7 !=350Rnd_BB_Magazine !=13Rnd_9x19_BHP !=25Rnd_45ACP_UMP(SD)? !=70Rnd_9x19_M31 !=2000Rnd_762x51_M134 !=48Rnd_40mm_MK19 !=29Rnd_30mm_AGS30 +1=HandGrenade_Stone diff --git a/BattlEye/addweaponcargo.txt b/BattlEye/addweaponcargo.txt new file mode 100755 index 0000000..b053b0a --- /dev/null +++ b/BattlEye/addweaponcargo.txt @@ -0,0 +1,4 @@ +//new +1 "" !_DZ$|^Melee|^Item|_DZE$ !=Binocular(_Vector)? !=NVGoggles|Winchester1866|MR43|M16A2|Remington870(_lamp)? !=Mosin_Nagant(((_Belt)?(_Scoped)?(_FL)?)|_broken)? !=Crossbow_(Stock|DZ|FL|(CCO|Scoped)(_FL)?) !="" !=AA12_PMC|RedRyder|revolver_gold_EP1|Sa61_EP1|M24_des_EP1|ChainSaw(|[BGPR]) +1=ItemRadio|ItemMap_Debug|Mk_48_DZ +1=m107_DZ|Anzio_20_DZ|BAF_AS50_scoped_DZ|M200_CheyTac_DZ|KSVK_DZE|BAF_L85A2_RIS_TWS_DZ diff --git a/BattlEye/attachto.txt b/BattlEye/attachto.txt new file mode 100755 index 0000000..e02fe33 --- /dev/null +++ b/BattlEye/attachto.txt @@ -0,0 +1,22 @@ +//new +1 "" !"VaultStorageLocked" !"LockboxStorageLocked" !"Generator_DZ" !"Hedgehog_DZ" !"Sandbag1_DZ" !"Fort_RazorWirePreview" !"WoodGate_DZ" !"Land_HBarrier1_DZ" !"TallSafeLocked" !"LockboxStorageWinterLocked" !"LockboxStorage2Locked" !"LockboxStorageWinter2Locked" !"VaultStorage2Locked" !"Server_Rack" !"Sign_sphere10cm_EP1" +5 "Ikarus" +5 "UH1H_DZE" +5 "Mi17_Civilian_DZ" +5 "Mi17_DZE" +5 "KamazRefuel_DZ" +5 "UralRefuel_TK_EP1_DZ" +5 "MtvrRefuel_DES_EP1_DZ" +5 "Ural_UN_EP1" +5 "Ural_TK_CIV_EP1" +5 "Ural_CDF" +5 "Kamaz" +5 "CSJ_GyroP" +5 "MH6J_DZ" +5 "AH6X_DZ" +5 "MTVR_DES_EP1" +5 "V3S_Civ" +5 "Parachute" +5 "VaultStorage" !"VaultStorageLocked" !"VaultStorage2Locked" +5 "LockboxStorage" !"LockboxStorageLocked" !"LockboxStorageWinterLocked" !"LockboxStorage2Locked" !"LockboxStorageWinter2Locked" +5 "TallSafe" !"TallSafeLocked" \ No newline at end of file diff --git a/BattlEye/beserver.so b/BattlEye/beserver.so new file mode 100755 index 0000000..6823eca Binary files /dev/null and b/BattlEye/beserver.so differ diff --git a/BattlEye/createvehicle.txt b/BattlEye/createvehicle.txt new file mode 100755 index 0000000..4e3c8ae --- /dev/null +++ b/BattlEye/createvehicle.txt @@ -0,0 +1,21 @@ +//new +5 !(^DZ_|^z_|^pz_|^WeaponHolder|Box|dog|PZombie_VB|^Smoke|^Chem|^._40mm|_DZ$|^Trap) !=(SeaGull|SmallSecondary|HelicopterExplo(Small|Big)|Stash(Small|Medium)(|[1-4])) !=(CZ_VestPouch_EP1|R_M136_AT|R_MEEWS_HEAT|Wire_cat1) !TentStorage !=(JackDaniels|(Tin|Soda)Can|RoadFlare|WoodenArrowF|zZombie_Base|Parachute(West|C)|Grenade(_|HandTimed)(West|East)) !=(CMflareAmmo|Pipebomb) !=(WildBoar|Rabbit|Sheep|Sheep(01_EP1|02_EP1)|Goat|Goat(01_EP1|02_EP1)|Hen|Cow0[1234]|Cow01_EP1|Cock) !=Blood_Trail_DZ !^(Wooden|Metal)Fence !^WoodenGate_ !=(ShantyHouse(|Stage[2-7])|SurvivorWorkshop(|Stage2|[ABC]Stage[345])|WorkBench) !=explosive_bolt !"Land_" !=Sign_(arrow_down_large|sphere10cm)_EP1 !="MAP_c_fern" !="Grave" !"VaultStorage" !="LaserTargetW" !Fort_ !Nest !CMflare !="GyroGrenade" !="CraterLong" !="pook_camel_HE" !="Fin" !="Pastor" !_DZE[12]$ !"TallSafe" +5 SeaGull //set to its own line so we know which kick we have here with out looking in the logs +1 ^DZ_ !=DZ_(British_ACU|Czech_Vest_Pouch|(TK_Assault_Pack|Patrol_Pack|Assault_Pack|ALICE_Pack|CivilBackpack|Backpack|LargeGunBag|GunBag)_EP1) !=DZ_((AmmoBox|ExplosiveBox)(RU|US)|MedBox|CardboardBox) +1 ^z_ !=z_((|new_)villager[1234]|(|new_)worker[1234]|teacher|hunter|suit[1-6]|soldier(|_pilot|_heavy)|policeman(|2)|doctor|priest) !=z_(citizen[1-4]|profiteer[1-4]|rocker[1-4]|lumberjack[1-4]|hunter[2345]|assistant|pilot|takistani[1-6]) !z_soldier_(usmc|fr|cdf|ru|gue|ins|tk|cz|un|ger|baf|pmc|acr) !=z_(dealer|gardener|mafiaboss|postman[1-4]|prisoner[1-3]|firefighter[1-5]|civilian([1-9]|1[0-5])) +1 ^WeaponHolder !=WeaponHolder !WeaponHolder_part !=WeaponHolder_(Item(DomeTent|CamoNet|Crowbar|Fuelcan|Hatchet|Jerrycan|Tent)|Melee(BaseBallBat(|Nails)|BatBarbed|Machete)) !=WeaponHolder_Part(Engine|Fueltank|Generic|Glass|VRotor|Wheel) !=WeaponHolder_Item(WorkBench|MetalSheet|ConcreteBlock|RSJ|Pickaxe|Generator) +1 Box !=(DZ_((AmmoBox|ExplosiveBox)(RU|US)|MedBox|CardboardBox)|Item(Match|Tool)box|equip_pvc_box|DebugBoxPlayer_DZ|WeaponHolder_ItemLockbox) !=LockboxStorage(Locked|WinterLocked|2Locked|Winter2Locked) +1 ^Smoke !=SmokeShell(|Red|Green|Yellow) !=SmokeLauncherAmmo +1 ^Chem !=Chem(Green|Red|Blue) +1 ^._40mm !=(G_40mm_HE|G_40mm_Smoke|F_40mm_White|F_40mm_Green) +1 _DZ$ !=(BanditW?[12]|Camo1|Sniper1W?|Soldier1|SurvivorW?([123]|desert|pink|combat|urban|winter)|Blood_Trail)_DZ !=(Land_Fire|Sandbag1|Hedgehog|BearTrap|CamoNet|GrenadeHandTimedWest|flamable)_DZ !=(Priest|Doctor|Assistant|Worker[134]|Soldier_(Crew|TL|Sniper|Bodyguard_AA12)_PMC)_DZ !=((Functionary1|Haris_Press|Pilot|US_Soldier)_EP1|Reporter|MafiaBoss|Dealer)_DZ !=pz_(policeman|suit[12]|worker[123]|doctor|teacher|hunter|villager[123]|priest)_DZ !=(GUE_Soldier_(MG|Sniper|Crew|CO|2)|Apo_Rifleman_0[1-6])_DZ !=(UN_CDF_Soldier(_Guard)?_EP1|BAF_Soldier_(Officer|N)_MTP|Nac_Soldier|Tamika)_DZ !=GhillieFull_(Desert0[1-8]|Snow0[1-5]|Urban01|Wood(0[1-9]|1[1-6]))_DZ !=SG_GRU_(TL|Scout|Sniper|Spotter|Assaultman|Medic|Marksman|Operator|MG)(|_W|_D)_DZ !=(Firefighter([1-5]|_Officer[12])|Postman[1-4]|SchoolTeacher|Civilian([1-9]|1[0-4]))_DZ !=((Drake|Graves)_Light|GUE_Commander|Hunter|Gardener|RUS_(Soldier1|Commander))_DZ !=(RU_(Soldier(|_Officer|_Crew)|Policeman2?)|Ins_(Soldier_(2|GL|Crew)|Commander))_DZ !=(MVD_Soldier|CDF_Soldier|Prisoner[123]|Rocker[1-4]|BusinessMan|Rocket)_DZ !=(INS_(Lopotev|Soldier_(AR|CO)|Bardak|Worker2)|USMC_Soldier_(Officer|MG|Pilot))_DZ !=FR_(TL|R|Marksman|Assault_R|OHara|Rodriguez|Sapper)_DZ !=TK_(Special_Forces_MG|Soldier_Sniper|Commander|GUE_Soldier|CIV_Takistani0[1346]|INS_(Soldier(_AR)?|Warlord))_EP1_DZ !=gsc_(military_helmet_|military_head_)(|wdl|grey)_DZ !=gsc_(scientist[12](_head)?|cloth_loner_head)_DZ !=gsc_eco_stalker_(mask|head)_(camo|neutral|head|fred|duty)_DZ !=CZ_(Soldier_(805|Crew|Officer|Recon|Spec([123]|_Demo)|Sniper|Light)(|_Wdl|_Dst)|Soldier805_DES)_ACR_DZ !=CZ_(Special_Forces_GL_DES|Soldier_Sniper|Soldier_SL_DES)_EP1_DZ !=GER_Soldier(_TL)?_EP1(|_des|_wdl)_DZ !=(Plastic_Pole_EP1|Generator|Server_Rack|FuelPump|FireBarrel|GunRack|GunRack2|WoodCrate|WoodCrate2|WorkBench)_DZ !_Preview_DZ !=CamoWinter(1|2|1W|2W)_DZ !=HookerW(1-5)_DZ !=TK_INS_Soldier_EP(1-3)_DZ !=CinderGarageOpenTop(|Frame|Locked)_DZ !=CinderWall(Doorway|Door|DoorLocked|Window|Half)_DZ !=Wood(Ramp|Floor(|Stairs|Half|Quarter|4x)|TriangleFloor|Large(Wall(|Door|Win))|Small(Wall(|Third|Win|Door))|TriangleWall|GateFrame|Stairs(|Rails|Sans)|Ladder|Handrail|Pillar)_DZ !=MetalFloor(|_Half|_Quarter|4x)_DZ !=GlassFloor(|_Half|_Quarter)_DZ !=(DesertLarge|Desert|Winter|WinterLarge|Forest|ForestLarge)CamoNet_DZ !WoodenFence_ !MetalFence_ +1 ^Trap Trap(_Cans|Tripwire(Flare|Grenade|Smoke)|BearTrap(Smoke|Flare)) +1=(SmallSecondary|HelicopterExplo(Small|Big)) // log explosions (optional) +1=(PipeBomb|Grenade(_|HandTimed)(West|East)) // log grenades (optional) +5 (_ied|_CRV7|_MEEWS|B_|_YakB|_acr|MASH_) !="R_MEEWS_HEAT" !=z_soldier_acr_rifle[12] !=CZ_(Soldier_(805|Crew|Officer|Recon|Spec([123]|_Demo)|Sniper|Light)(|_Wdl|_Dst)|Soldier805_DES)_ACR_DZ +5 "Land_" !="Land_coneLight" !=Land_(HBarrier1|HBarrier3|HBarrier5|Fire)_DZ !=Land_(fortified_nest_small|HBarrier1|HBarrier3e|HBarrier5)Preview !=Land_DZE_(WoodDoor|LargeWoodDoor|GarageWoodDoor|WoodDoorLocked|LargeWoodDoorLocked|GarageWoodDoorLocked|WoodGate|WoodGateLocked|WoodOpenTopGarageDoor|WoodOpenTopGarageLocked) +5 "Nest_" !="M240Nest_DZ" !="SandNest_DZ" !="Land_fortified_nest_smallPreview" !="WarfareBMGNest_Preview" +5 "Fort_" !="Fort_RazorWire" !="Fort_RazorWirePreview" +5 (BasicWeapons|SpecialWeapons|_uav) +1 (R_M136_AT|R_MEEWS_HEAT) +1 dog diff --git a/BattlEye/deleteVehicle.txt b/BattlEye/deleteVehicle.txt new file mode 100755 index 0000000..a0220cb --- /dev/null +++ b/BattlEye/deleteVehicle.txt @@ -0,0 +1,4 @@ +//new +1=(BanditW?1|Camo1|Sniper1|Soldier1|Survivor([123]|W2))_DZ +1 !"Blood_Trail_DZ" !"WeaponHolder" +5 "HeliHEmpty" \ No newline at end of file diff --git a/BattlEye/mpeventhandler.txt b/BattlEye/mpeventhandler.txt new file mode 100755 index 0000000..884f1a4 --- /dev/null +++ b/BattlEye/mpeventhandler.txt @@ -0,0 +1,2 @@ +//new +5 !="this enableSimulation false;this allowDamage false;this disableAI 'FSM';this disableAI 'ANIM';this disableAI 'MOVE';" \ No newline at end of file diff --git a/BattlEye/publicvariable.txt b/BattlEye/publicvariable.txt new file mode 100755 index 0000000..1a24302 --- /dev/null +++ b/BattlEye/publicvariable.txt @@ -0,0 +1,6 @@ +//new +5 !=remEx(Field|FP) !=(PVCDZ_obj_GutBody|BIS_effects_gepv) !=PVDZ_(hlt_Bleed|obj_(Delete|Publish|RoadFlare|Destroy|Fire)|veh_Save|veh_SF) !=PVDZ_(plr_(Death|Login[12]|LoginRecord|Save|SwitchMove|Delete)|Server(_Simulation|StoreVar|_UpdateGroup)) !=PVDZ_(playerMedicalSync|groupInvite|send|sec_atp) !=PVDZ_objgather_(Delete|Knockdown) !=PVDZE_(obj_(Swap|Trade)|maintainArea|PingSend|veh_(Lock|Publish2|Upgrade)|handleSafeGear|plr_(DeathB|FriendRQ)) !=SK_changeCode !=PVDZE_(query|store|spawn)Vehicle !=PVDZE_maintainGarage +1=BIS_effects_gepv|PVDZ_(hlt_Bleed|obj_Delete|obj_Destroy|obj_Publish|plr_Death|plr_LoginRecord|sec_atp|send) +1=PVDZ_veh_(Save|SF) +1=PVDZE_obj_Swap +1=PVDZE_veh_(Publish2|Upgrade) diff --git a/BattlEye/publicvariableval.txt b/BattlEye/publicvariableval.txt new file mode 100755 index 0000000..43c05c3 --- /dev/null +++ b/BattlEye/publicvariableval.txt @@ -0,0 +1,271 @@ +//new +5 \{ +5 ; +5 & +5 % +5 \+ !e\+0 +5 (commandRadio|directSay|globalRadio|groupRadio|sideRadio|vehicleRadio) +1 "wrong side" // group hack, ban the first in a row +1 "\"\w*?(init|set|add|action|all|attach|ATL|ASL|eye|exec|group|unit|clear|create|menu|ctrl|display|text|hint|drop)\w*?\"" !"\"(SetFuel|dayzSetDate|titleText|(|with )MeleeBaseball(|Bat(|Barbed|Nails))|StashSmall|smallboat_[12])\"" !Attachment_ !fall !ItemWoodWall +1 "(entit|exit|able|find|fuel|join|frame|move|team|throw)" !"\"(switchmove|ItemFuelcan(|Empty)|ItemFuelBarrel(|Empty)|PartFueltank|SetFuel|z_refuel_0|ItemSodaRocketFuel|cable_tie)\"" !Zombie(Feed|StandingAttack) !mtvr_fuel\.p3d !RemoveObject !fuel_pump_kit !ural_refuel\.p3d !UralRefuel_TK_EP1_DZ +1 "\"say\"" !"say\",\[\"z_" +1 "\"titleText\"" +1 "draw" +1 "delete" +1 "copy" +1 "switch" !="\"switchmove\"" !="\"remExField\" = \[,,\"switchmove\",\"ActsPercMrunSlowWrflDf_FlipFlopPara\"\]" !="\[,,\"switchmove\",\"amovpercmstpsnonwnondnon_zevl\"\]" !="\[,,\"switchmove\",\"amovpercmstpslowwrfldnon_gear\"\]" !="\[,,\"switchmove\",\"aidlpercmstpsnonwnondnon_player_idlesteady03\"\]" !="\[,,\"switchmove\",\"aidlpercmstpsraswpstdnon_player_idlesteady02\"\]" !="\[,,\"switchmove\",\"aidlpercmstpsraswpstdnon_player_idlesteady03\"\]" !="\[,,\"switchmove\",\"aswmpercmstpsnonwnondnon\"\]" !="\[,,\"switchmove\",\"aidlpercmstpslowwrfldnon_player_idlesteady04\"\]" !"REMOTE,\"switchmove\",\"amovpknlmstpsraswrfldnon\"\]" !"\[,,\"switchmove\",\"amovpercmstpsnonwnondnon\"\]" !"REMOTE,\"switchmove\",\"aovrpercmstpsraswrfldf\"\]" !"REMOTE,\"switchmove\",\"aidlpercmstpsraswrfldnon_idlesteady02\"\]" !"REMOTE,\"switchmove\",\"\"\]" !"REMOTE,\"switchmove\",\"AmovPpneMstpSnonWnonDnon_healed\"\]" !"REMOTE,\"switchmove\",\"aidlpercmstpsraswpstdnon_player_idlesteady02\"\]" !"\[,,\"switchmove\",\"amovpercmstpslowwrfldnon\"\]" !"REMOTE,\"switchmove\",\"amovpercmrunsnonwnondf\"\]" !"REMOTE,\"switchmove\",\"amovpknlmstpsraswrfldnon_gear\"\]" !"REMOTE,\"switchmove\",\"aidlpercmstpsraswrfldnon_aiming02\"\]" !"REMOTE,\"switchmove\",\"aidlpercmstpsraswrfldnon_aiming01\"\]" !"REMOTE,\"switchmove\",\"amovpercmrunsraswrfldf\"\]" !"REMOTE,\"switchmove\",\"amovpercmstpsraswrfldnon_gear\"\]" !"REMOTE,\"switchmove\",\"aidlpercmstpsnonwnondnon_player_idlesteady02\"\]" !"REMOTE,\"switchmove\",\"amovppnemstpsraswrfldnon\"\]" !"REMOTE,\"switchmove\",\"amovpercmstpslowwrfldnon\"\]" !"REMOTE,\"switchmove\",\"amovpknlmstpsraswrfldnon_amovppnemstpsraswrfldnon\"\]" !"REMOTE,\"switchmove\",\"amovpknlmstpsraswrfldnon_ainvpknlmstpslaywrfldnon\"\]" !"REMOTE,\"switchmove\",\"amovpercmrunsraswrfldfl\"\]" !"REMOTE,\"switchmove\",\"amovpercmrunslowwrfldf_amovppnemstpsraswrfldnon\"\]" !"REMOTE,\"switchmove\",\"aidlpknlmstpsraswpstdnon_player_idlesteady01\"\]" !"REMOTE,\"switchmove\",\"aidlpercmstpsnonwnondnon_player_idlesteady03\"\]" !"REMOTE,\"switchmove\",\"aidlpercmstpsraswrfldnon_idlesteady04\"\]" !"REMOTE,\"switchmove\",\"aidlpknlmstpsraswpstdnon_player_idlesteady02\"\]" !"REMOTE,\"switchmove\",\"amovpercmstpsraswpstdnon_gear\"\]" !"REMOTE,\"switchmove\",\"aidlpercmstpsnonwnondnon_player_idlesteady04\"\]" !"REMOTE,\"switchmove\",\"aidlpercmstpsnonwnondnon_player_idlesteady01\"\]" !"REMOTE,\"switchmove\",\"aidlpknlmstpsraswpstdnon_player_idlesteady03\"\]" !"REMOTE,\"switchmove\",\"amovppnemstpsnonwnondnon\"\]" !"REMOTE,\"switchmove\",\"amovpercmstpsnonwnondnon\"\]" !"REMOTE,\"switchmove\",\"aidlpercmstpsraswrfldnon_idlesteady01\"\]" !"\"switchmove\",\"AmovPpneMstpSnonWnonDnon_healed\"\]" !"REMOTE,\"switchmove\",\"aidlpercmstpsraswrfldnon_idlesteady03\"\]" !"REMOTE,\"switchmove\",\"amovpercmstpslowwrfldnon_gear\"\]" !"REMOTE,\"switchmove\",\"ainvpknlmstpsnonwnondnon_2\"\]" +1 "icon" +1 "marker" +1 "server" +5 "compile" +5 "loadFile" +5 "call" !="dog_callBack" !="\[,,\"say\",\[\"dog_callBack\",120\]\]" +1 "chat" +1 "fade" +5 "mission" +1 "kb" !"FoodCanFrankBeans" !"kbTell" !"kbReact" !"kbud\.p3d" !"\"ItemLockbox\"" !"\"ItemLockboxWinter\"" !"\"ItemBookBible\"" !"lockbox\.p3d" +1 "side" +1 "show" +1 "task" !"taskHint" +1 "allow" +5 "enable" +5 "spawn" +1 "this" +5 "format" +1 "skip" !"skipTime" +1 "fail" +1 "force" !"Skin_CZ_Special_Forces_GL_DES_EP1_DZ" +5 "parse" +5 "terminate" +1 "start" +5 "eventhandler" +5 "hintC" +5 "hintS" +5 "loading" +1 "jiprequest" !=",,\"JIPrequest\"" !="\[,,\"JIPrequest\"\]" !"REMOTE,any,\"JIPrequest\"\]" +1 "jipexec" //1 "rjipexec" +5 "toString" +5 "toArray" +5 "ctrlset" +5 "rsay" +5 "rland" +5 "_YakB" +1 "player_medInject" +5 "hiveupdateresu" +5 "isServer" +5 "isDedicated" +5 "cutText" +5 "publicVariable" +5 "code" +5 "onPlayer" +5 "select" +5 "while" +5 "count" +5 "markerText" +5 "_bis" +5 "markerType" +5 "teamtype" +5 "composeText" +5 "teamName" +5 "execVM" +5 "fn_swapVars\.sqf" +5 "processInitCommands" +5 "promptRName\.sqf" +5 "\.sqf\"\]" !="init\.sqf\"\]" +5 "norrnRACarUp" +5 "norrnRAPicUp" +5 "markerBrush" +5 "hideObject" +5 "deleteCollection" +5 "forceEnd" +5 "createAgent" +5 "deleteVehicle" +5 "deleteTeam" +5 "getPlayerUID" +5 "getVariable" +5 "addAction" +5 "AddM" +5 "AddP" +5 "AddS" +5 "AddV" +5 "AddW" +5 "setAcc" +5 "setAtt" +5 "setC" +5 "setD" !"dayzSetDate" +5 "setDam" +5 "SetData" +5 "setDe" +5 "setDi" +5 "setDr" +5 "setF" !"SetFuel" +5 "setG" +5 "setH" +5 "setM" +5 "setObj" +5 "setOver" +5 "setP" +5 "setR" +5 "setS" +5 "setT" +5 "setUnit" +5 "setV" +5 "setW" +5 "execFSM" +5 "clearM" +5 "clearV" +5 "clearW" +5 "createD" +5 "createG" +5 "createM" +5 "createS" +5 "createT" +5 "createU" +5 "createV" +5 "debugLog" +5 "debugFSM" +5 "deleteM" +5 "kbTell" +5 "kbReact" +5 "fadeSound" +5 "fadeMusic" +5 "showC" +5 "skipTime" +5 "taskHint" +5 "titleCut" +5 "titleText" !",\"titleText\"," +5 "getM" +5 "getFSMvariable" +5 "getG" +5 "moveIn" +5 "synchronizeO" +5 "synchronizeT" +5 "synchronizeW" +5 "triggerA" +5 "triggerS" +5 "triggerT" +5 "MarkerColor" +5 "MarkerDir" +5 "MarkerPos" +5 "MarkerSize" +5 "onEachFrame" +5 "hasInterface" +5 "onMapS" +5 "OnGroup" +5 "onDouble" +5 "onPreload" +5 "onTeamS" +5 "onShowNew" +5 "setUnconscious" +5 "exec\[" +5 "set\[" +5 "str\[" +5 "exec\"" +5 "set\"" +5 "str\"" +5 "\)exec" +5 "\)set" +5 "\)str" +5 "\]exec" +5 "\]set" +5 "\]str" +5 "\}exec" +5 "\}set" +5 "\}str" +5 "str " +5 "\nstr" +5 "str\n" +5 ",str" +5 "str," +5 "str " +5 "set " +5 "\nset" +5 "set\n" +5 ",set" +5 "set," +5 "set " +5 "exec " +5 "\nexec" +5 "exec\n" +5 ",exec" +5 "exec," +5 "exec " +5 "isNil" +5 "modify" +5 "allowConnection" +5 "check_publishobject" +5 "dayz_disco" +5 "dayz_hiveVersionNo" +5 "dayz_objectUID" +5 "dayz_objectUID2" +5 "dayz_players" +5 "dayz_serverObjectMonitor" +5 "dayz_versionNo" +5 "dayz_zombifiedTowns" +5 "dayzPlayerLogin" +5 "dayzPlayerLogin2" +5 "isSinglePlayer" +5 "needUpdate_objects" +5 "vehicle_handleInteract" +5 "vehicle_handleServerKilled" +5 "allunits" +5 "preprocess" +5 "runinitscript" +5 "'" +5 actionmonitor +5 bis_ +5 dayz !"dayzSetDate" +5 drn_ +5 eh_localcleanup +5 fnc_ +5 fn_nicespot +5 gear_ui_init +5 horde_epeen_determine_humanity_fnc +5 infectedcamps +5 local_eventkill +5 local_gutobject +5 local_setfuel +5 local_zombiedamage +5 object_ +5 player_alertzombies +5 player_animalcheck +5 player_checkstealth +5 player_combatroll +5 player_crossbowbolt +5 player_death +5 player_fired +5 player_firemonitor +5 player_gearset +5 player_gearsync +5 player_guicontrolflash +5 player_humanitychange +5 player_humanitymorph +5 player_medbandage +5 player_medepi +5 player_medmorphine +5 player_medpainkiller +5 player_medtransfuse +5 player_music +5 player_packtent +5 player_projectilenear +5 player_summedical +5 player_switchmodel +5 player_temp_calculation +5 player_throwobject +5 player_updategui +5 player_weaponfirednear +5 player_zombieattack +5 player_zombiecheck +5 r_player_removeactions2 +5 PVDZ_ +5 server !"\"server_rack_kit\"" +5 stream_locationcheck +5 stream_locationdel +5 stream_locationfill +5 ui_changedisplay +5 ui_initdisplay +5 vehicle_gethitpoints +5 world_isday +5 world_sunrise +5 world_surfacenoise +5 zombie_ \ No newline at end of file diff --git a/BattlEye/remotecontrol.txt b/BattlEye/remotecontrol.txt new file mode 100755 index 0000000..7b128bb --- /dev/null +++ b/BattlEye/remotecontrol.txt @@ -0,0 +1,2 @@ +//new +5 "" \ No newline at end of file diff --git a/BattlEye/remoteexec.txt b/BattlEye/remoteexec.txt new file mode 100755 index 0000000..884f1a4 --- /dev/null +++ b/BattlEye/remoteexec.txt @@ -0,0 +1,2 @@ +//new +5 !="this enableSimulation false;this allowDamage false;this disableAI 'FSM';this disableAI 'ANIM';this disableAI 'MOVE';" \ No newline at end of file diff --git a/BattlEye/scripts.txt b/BattlEye/scripts.txt new file mode 100755 index 0000000..bd221b0 --- /dev/null +++ b/BattlEye/scripts.txt @@ -0,0 +1,97 @@ +//new2 +5 addAction !", \"\\z\\addons\\dayz_code\\" !=" = -1;\n};\nif (_s1 > 0) then {\ns_player_toggleSnap = player addaction [format[\"\" + \"Snap: %1\" +\"\",snapAc" !="-1;\n};\n\nif (_s1 > 0) then {\ns_player_toggleVector = player addaction [format[\"\" + localize \"STR_EPOCH_ACTIO" !"\"addAction\", " !"raddAction" !="_costs] call _fnc_actionTitle;\nSP_refuel_action = _vehicle addAction [_actionTitle,_folder + \"servicePointActions.sqf\",[\"refuel\"" +5 addBackpack !"class_bot addBackpack _bag;};\nclass_bot setFace" !"addBackpack _bag;\n_bag = unitBackpack player;\n[_bmags,2,_bag] call class_" !"addBackpackCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} count _objWpnTypes;" !"addBackpack _item;\n};\n};\nformat[localize \"str_c" !"case 3: {_holder addBackpackCargoGlobal [_item,_amount];};\n};\n\n\n" !"}) then {\n_newUnit addBackpack _newBackpackType;\n\nd" !"addBackpack _backpackType; \ndayz_myBackpack = unitBackpack player;\n\n\n\n_backpackWpnT" !"};\n} count _wpns;\n\nif (_bcpk != \"\") then {\nplayer addBackpack" !"1 == \"trade_backpacks\") then {\nDZE_myVehicle addBackpack" !"7 addBackpackCargoGlobal [_create,_qty];\n};\nif (surfaceIsWater" !"case 5: {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else" !="m (2 + 1)];\n};\n};\n\nif (_type == 5) exitWith {\n_container addBackpackCargoGlobal [_item, 1];\n};\n};\n} count ([_group, _count] cal" !="5) exitWith {\nif (isNull unitBackpack _unit) then {\n_unit addBackpack _item;\n};\n};\n};\n} foreach ([_group, _count] call dz_fn_loo" !="al [_itemOut,_countOut]};\nif (_type == 5) exitwith {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else {\n_item addMa" !="addWeapon _x} count _weps;\n\nif (_bag != \"\") then {\nplayer addBackpack _bag;\n_bag = unitBackpack player;\n[_bmags,2,_bag] call cla\"" +1 addMagazine !"};\n\nswitch _type do {\ncase 1: { for \"_i\" from 1 to _amount do {_object addMagazine _item}; };" !raddMagazine !"\"addMagazine\", " !"if (isClass (configfile >> \"cfgmagazines\" >> (_item))) then {_unit addMagazine _item;};\n};\n};\n};\n};" !"_vehicle addMagazineTurret [_ammo,_turret];\nplayer removeMagazine" !"if (dayz_actionInProgress) exitWith {" !"addMagazine _x;\n};\n} foreach _items;\nformat[loc" !"addMagazine \"ItemAntibiotic\" + str(_remain" !"sumeDrop\") == 0) then\n{\nplayer addMagazine" !"ion) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon _item;\n};\ncase \"CfgMagazines\":\n{\nplayer addMagazine" !"addMagazine [\"12Rnd_Quiver_Wood\",_qty_quiv" !" >> \"containerEmpty\")" !"plant) select 1;\n{\n_item addMagazine" !"addMagazineCargoGlobal [_itemtodrop,1];\n\nformat[localize \"str_f" !"addMagazine _attachment;\n\n\n(findDisplay 10" !"addMagazine getText (configFile >> \"CfgMagazines\" >> _x >> _water" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazine" !"do {\n_animalbody addMagazine _rawfoodtype" !"addMagazine _item;\n};\n};\n_idc = _idc" !"_newUnit addMagazine [_x select 0,_x select 1]" !"addMagazine _x } count MeleeMagazines;\n} e" !"_meleeNum < 1) then {\nplayer addMagazine" !"addMagazine _qtyRemaining;\n};\n};\ntrue" !"bag\";\n};\n};\n(_this select 0) addMagazine" !"addMagazine \"wholeBloodBagBNEG\";\n};\n};" !"_qty > 0) then {\n_firePlace addMagazine" !"ONEG\" }; \n};\ndayz_myBackpack addMagazine" !"addMagazine _x;\n_countmags = _countmags +1;\n};\n} count _gmag" !"E\"];\n_lootpile addMagazineCargoGlobal [\"TrapBear\", 1]" !"With\n{\nplayer addMagazine (_this select 1" !"lder addMagazineCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n};\n} co" !"soldItem\"];\n{\n_object addMagazine" !"systemChat localize \"STR_EPOCH_TRADE_" !"if (_silver_1oz > 0) then {\nif (_silver_1oz == 1) then {\nplayer addMagazine" !="Random;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_container addMagazineCargoGlobal [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_c" !="electRandom;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_unit addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _i" !="];\n\ncall {\nif (_humanityBody >= DZE_Hero) exitwith {_body addMagazine \"ItemDogTagHero\";};\nif (_humanityBody <= DZE_Bandit) exitw" !="_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addMagazineCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSp" !"eep 3;\n_finished = true;\n};\n\nif (!_finished) then {\n_unit addMagazine _bagUsed;\n_msg = \"str_actions_medical_transfusion_interrup" +1 addWeapon !"case 3: { _object addWeaponCargoGlobal [_item,_amount]; };\n};\n};\n} forEach _items;" !"x in weapons class_bot) then {\nclass_bot addWeapon _x;" !"_mags,1,player] call class_fillItems;\n{player addWeapon" !raddWeapon !"\"addWeapon\", " !"if (isClass (configfile >> \"cfgweapons\" >> (_item))) then {_unit addWeapon _item;}\nelse" !",0]] call dayz_NutritionSystem;\n" !"Remove) == 1}) then {\nplayer addWeapon _create;" !"Display 0;\n\n\nif (_weaponInUse) then\n{\n_muz" !"failChance) then {\nswitch (_selection) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon" !"addWeapon _fixedItem;\nformat[localize \"str_f" !"_wepcounts = (getWeaponCargo _plant) select 1;\n{\n_item addWeapon" !"addWeapon _repair;\n} else {\n\n[_repair" !"player addWeapon dayz_onBack] select 0;\n};\n\n" !"player addWeapon _addWeapon;\n\nif (vehicle player != player) then {\n_display = find" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazineCargoGlobal [_item,_amount];};\ncase 2: {_holder addWeapon" !"l fn_chance) then {\nplayer removeWeapon _x;\nplayer addWeapon _rem" !"else {\n_body addWeapon dayz_onBack;\n};\n};\n\n\n_infect" !"\" >> _x)) then {\nplayer addWeapon _x;\n};\n} count _wpns;\n};" !"lder addWeaponCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} co" !"WpnQtys = [];\nif (count _backpackWpn > 0) then {\n_backpackWpnTypes = _backpackWpn sel" !"addWeapon (\"Item\"+str(_remain)+\"Matchbox" !"{\nswitch (_x select 0) do\n{\ncase 2:\n{\n(_this select 0) addWeapon" !"addWeaponCargoGlobal [_bcpkWpn, 1];\n};\n};\n};\n};" !"s;\n};\n\n\nplayer addWeapon \"Loot" !"With\n{\nplayer addWeapon (_this select 1" !"\") then {\n_newUnit addWeapon _secweapon;\n};\n\n" !"soldItem\"];\n{\n_object addWeapon" !"then {\nsystemChat format[localize \"STR_EPOCH_" !"DuplicateTool;\n} else {\nplayer addWeapon" !="al [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_container addWeaponCargoGlobal [_item, 1];\n\n_magazines = getArray (configFile >" !=" addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _item;\n};\n\nif (_type == 5) exitWith {\nif (isNull unitBackp" !="ile >> \"CfgWeapons\" >> _x >> \"type\") == 256) then {\nplayer addWeapon _x;\n} else {\n_x call player_addDuplicateTool;\n};\n};\n} count" !="\n_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addWeaponCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSpa" !="ear;\n};\n};\n\n[_mags,1,player] call class_fillItems;\n{player addWeapon _x} count _weps;\n\nif (_bag != \"\") then {\nplayer addBackpack" !="do {_vehicle addMagazineTurret [_ammo,_turret];};\n_vehicle addWeaponTurret [\"CMFlareLauncher\",_turret];\n} else {\n{_vehicle remov" !="CK\",_keyName] call dayz_rollingMessages;};\n} else {\nplayer addWeapon _keyID;\nformat[localize \"STR_CL_VG_ADDED_INVENTORY\",_keyNam" +5 allDead !"allDead;\n{\n_body = _x;\n{\n\nif (count _x == 4" !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {" +5 allGroups !"publicVariableServer \"PVDZ_Server_UpdateGroup\";\n};\n} count allGroups;" +5 allMissionObjects !"[_x,2,0,false,false] spawn BIS_Effects_Burn;\n};\n} count allMissionObjects \"SpawnableWreck\";" +5 allowDammage +5 allUnits !"} count allUnits;\nlbSort _playerList;" !"if (getPlayerUID _x == _this) exitWith {\n_player = _x;\n};\n} count allUnits;" !"owner _x publicVariableClient \"PVDZ_groupInvite\";\n};\n} count allUnits;" !=" select 1 != 0}) exitWith {\n_targeted = true;\n};\n};\n} count allUnits;\nif (_targeted) exitWith {localize \"str_player_fail_wear4\" " +5 attachTo !"(_variation * 2)) - _variation)];\n_bolt attachTo [_hitObject,_val,_hitMemoryPt];" !"player playActionNow \"PutDown\";\nuiSleep 2;\n_flare attachTo [player,[0,0,0],\"granat2\"];" !"tchmove \"ainjpfalmstpsnonwrfldnon_carried_still\";\n_dragee attachto [_unit,[-0.2, 0.2, 0]];" !"_source setDropInterval 0.02;\n_point attachTo [_unit,_modelPos,_wound];" !" attachto [_v,[0,0,0],\"destructionEffect" !"publicVariable \"PVDZ_drg_RaDrag\";\n\n_dragee attachto [_unit,[0.1, 1.01, 0]];" !="_l1 attachTo [_lh,[0,0,0],\"light\"];" !"_objectHelper attachTo [player,_offset];" !"_object attachTo [player,_offset];\n\n_position = getPosATL _object;" !="_vehicle attachTo [_liftHeli,[0,0,-7]];" !="_obj attachTo [_axis];" !"_objectSnapGizmo attachTo [_object,[_x select 0,_x select 1,_x select 2]];" !="_vehicle attachTo [_towTruck,[1.3,-2,2.3]];" !"localize \"STR_EPOCH_ACTIONS_ATTACHTOHELI\"," !=" (getDir _object);\n_objectHelper setPosATL _newPos;\n_object attachTo [_objectHelper];\n_x setobjecttexture [0,\"#(argb,8,8,3)color" !"rInput false; disableUserInput false;\nuiSleep .5;\n\n\n_dragee attachto [_medic,[0.1, 1.01, 0]];\n\n\nPVDZ_send = [_dragee,\"DragPlayer" !="cts, 3];\nif (count _dropObjects > 0) exitWith {};\n\n\n_dragee attachto [_medic,[0.1, 1.01, 0]];\n\n\nPVDZ_send = [_dragee,\"CarryPlaye" +1 bankMoney !=" [\"globalMoney\", _globalCoins, true];\nplayer setVariable [\"bankMoney\", _bankCoins, true];\n};\ndayz_musicH = [] spawn player_music" !="]];\nctrlSetText [23002,format[\"%1 %2\",player getVariable [\"bankMoney\",0] call BIS_fnc_numberText,CurrencyName]];\n};\n\nATMDialogWi" !="ariable [\"cashMoney\",0];\n_bankCoins = player getVariable [\"bankMoney\",0];\n_globalCoins = player getVariable [\"globalMoney\",0];\n}" !=" \nZSC_limitOnBank = true; \nZSC_bankObjects = [\"\"]; \nZSC_maxBankMoney = 500000; \nZSC_defaultStorageMultiplier = 200; \nZSC_MaxMone" !="Z_showBankUI) then {\nlocal _bankAmt = player getVariable [\"bankMoney\",0];\n_string = _string + format [\"%1 > \"" !="wCurrencyUI) then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = for" !=" = [false, [], [], [], 0];\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" !="nfo = [false,[],[],[],0];\n_wealth = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" !="ight = 180;\nDZE_HaloSpawnHeight = 2000;\nZ_MoneyVariable = \"cashMoney\";\n};\n\nif (spawn_selection) then {\ndayz_spawnselection = 0; " !="= [false, [], [], [], 0];\n_wealth = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" !="= [false, [], [], [], 0];\n_wealth = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" +1 clearMagazineCargo !=" true;\n_plane setPosATL _pos;\nclearWeaponCargo _plane;\nclearMagazineCargo _plane;\n_plane setVehicleLock \"LOCKED\";\n_plane flyInHe" !="ddWeaponCargo\", \n\"addMagazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"ti" !="rclearMagazineCargo = 'clearMagazineCargo'" !="rclearMagazineCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearMagazineCargo.sqf')" !=", \"addWeaponCargo\", \"addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMark" !="rclearMagazineCargocode={diag_log(\"WARNING illegal RE rclearMagazineCargocode with args:\"+str(_this));};" !="eeSpace select 5;\n_normalWeaps = _freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_retur" !=" {\n_bpMags = (getMagazineCargo (unitbackpack player));\nclearMagazineCargoGlobal (unitbackpack player);\n\n{\n_count = ((_bpMags sel" !="o {\n\n_ok = false;\n_mags = getMagazineCargo _firePlace;\nclearMagazineCargoGlobal _firePlace;\n\n_fuel = [\"PartWoodPile\",\"ItemLog\",\"" +1 clearWeaponCargo !="ocal _pos;\n_plane engineOn true;\n_plane setPosATL _pos;\nclearWeaponCargo _plane;\nclearMagazineCargo _plane;\n_plane setVehicleLoc" !="Magazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"titleCut\", \n\"titleText\"" !="rclearWeaponCargo = 'clearWeaponCargo'" !="rclearWeaponCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearWeaponCargo.sqf')" !="addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMarkerLocal\", \"createSimp" !="rclearWeaponCargocode={diag_log(\"WARNING illegal RE rclearWeaponCargocode with args:\"+str(_this));};" !="_freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_returnVar = [];\n_returnMag = [];\n_retu" +1 clearBackpackCargo +5 closeDisplay !"'closeDisplay'" !"closeDisplay 0" !"closeDisplay 2" !"if (!isNil \"closeDisplay\") then {" +1 compile !"compile preprocessFileLineNumbers \"spawn\\functions\\" !"ca\\communityconfiguration" !"ca\\Data\\" !"ca\\missions" !"ca\\modules" !"ca\\ui\\" !"ca\\Warfare2\\" !"scriptName \"Functions\\systems\\fn_inv" !"scriptName \"MP\\data\\script" !"code = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands" !"t = missionConfigFile >> \"onMinimapScript" !="_this call (call compile GetText (configFile >> \"CfgAmmo\" >> _amm >> \"muzzleEffect\"));" !"z\\addons\\dayz_code\\" !"_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n};\n_pos set [3" !"{ _x set [1, compile (_x select 1)]; }" !"silver_1oz_b);\n\n{ \nif (!isNil {call compile" !"Var = compile format[\"epoch_death_board_record_" !="RandomSentenceFunc\") then \n{\nBIS_selectRandomSentenceFunc = compile (preprocessFileLineNumbers \"ca\\characters_e\\data\\scripts\\sel" !=" true;\n_plane setPosATL _pos;\nclearWeaponCargo _plane;\nclearMagazineCargo _plane;\n_plane setVehicleLock \"LOCKED\";\n_plane flyInHe" !="ialization;\n\nif (isNil \"vkc_init\") then {\nvkc_vehicleInfo = compile preprocessFileLineNumbers \"scripts\\vkc\\vehicleInfo.sqf\";\nvkc" !="#line 1 \"mpmissions\\__CUR_MP.Napf\\dayz_code\\init\\compiles.sqf\"\nif (isServer) then {\ndiag_log \"Loading custom server compiles\";\n}" !="isplCtl\"];\n\nif (isNil \"vg_init\") then {\nplayer_getVehicle = compile preprocessFileLineNumbers \"scripts\\virtualGarage\\player_getV" !="heck\",\"_sign\",\"_vehicle\"];\n\ncloseDialog 0;\n_vehicle = (call compile format[\"%1\",lbData[2802,(lbCurSel 2802)]]);\n\nif (vg_removeKe" +1 createAgent !"50*(cos _dir),0];\n_unit = createAgent [\"Survivor2_DZ\",_grid,[],0," !"deleteVehicle class_bot;\nclass_bot = createAgent [_model,[0,0,0],[],0," !="_agent = if (_type == \"Pastor\") then {createAgent [_type, _Pos, [], 0, \"NONE\"]} else {createAgent [_type, _Pos, [], 0, \"FORM\"]};" !="_dog = createAgent [_type, _Pos, [], 0, \"NONE\"];" !="\n\n\n_type = _unitTypes call BIS_fnc_selectRandom;\n_agent = createAgent [_type, _position, [], 0, \"CAN_COLLIDE\"];\n_agent setDir (r" !="ocal _pos;\n_plane engineOn true;\n_plane setPosATL _pos;\nclearWeaponCargo _plane;\nclearMagazineCargo _plane;\n_plane setVehicleLoc" +5 createDialog !"spawn_mapPos = [0,0,0];\ncreateDialog \"SpawnDialog\";" !="_region = createDialog \"RscDisplaySpawnSelecter\";" !="_gender = createDialog 'RscDisplayGenderSelect';" !="_dialog = createDialog \"bloodTest\";" !"createDialog 'horde_journal_" !"Z_ResetContainer = true;\ncreateDialog \"AdvancedTrading\";" !"createDialog \"DoorManagement\";\ncall DoorNearbyHumans;" !="createDialog \"ComboLockUI\";" !"createdialog \"PlotManagement\";\ncall PlotNearbyHumans;" !"_ok = createDialog \"KeypadUI\";" !"EpochDeathBoardLoad = {\ncreatedialog \"EpochDeathBoardDialog\";" !="if(DZE_doorManagement) then {createdialog \"DoorAccess\";} else {createdialog \"ComboLockUI\";};" !"\ndisableSerialization;\ncreateDialog \"DZ_GroupDialog\";" !"createDialog _dialog;\n\nwaitUntil {!dialog};\n\nif (keypadCancel) exitWith {" !=";\n};\n\nZSC_CurrentStorage setVariable[\"isBusy\",true,true];\ncreateDialog \"BankDialog\";\ncall BankDialogUpdateAmounts;\n\nwaitUntil {!" !="ANKING_NOT_AVAIL\",_typeOf] call dayz_rollingMessages;\n};\n\ncreateDialog \"atmDialog\";\ncall AtmDialogUpdateAmounts;\n\nwaitUntil {!di" !="!_isBusy) then {\nplayer setVariable[\"isBusy\",true,true]; \ncreateDialog \"GivePlayerDialog\";\n_display = uiNamespace getVariable[\"z" !="ked\",\"VaultStorage2\",\"TallSafe\",\"TallSafeLocked\"]) then {\ncreateDialog \"SafeKeyPad\";\n} else {\ncreateDialog \"KeypadUI\";\n};\n};\n\nda" !="urrencyName]} else {[_amount,true] call z_calcCurrency};\n\ncreateDialog \"vkc\";\n{ctrlShow [_x,false]} count [4803,4850,4851];\n\ncal" !="gress = true;\n\ndisableSerialization;\n\nvg_hasRun = false;\n\ncreateDialog \"virtualGarage\";\n\n{ctrlShow [_x,false]} count [2803,2830," +5 createDisplay +5 createMarker !"\"createMarkerLocal\"," !"rcreateMarkerLocal" !"if (isnil 'BIS_GITA_fnc_createMarkers' || false) then {" !"_marker = createMarkerLocal [format[\"groupMember" +5 createUnit !="_newUnit = _group createUnit [_class,respawn_west_original,[],0,\"NONE\"];" !="BIS_MPF_logic = BIS_MPF_dummygroup createUnit [\"Logic\", [1000,10,0], [], 0, \"NONE\"];" +5 createVehicleLocal !"deleteVehicle class_bot;\nclass_bot = _model createVehicleLocal [0,0,0];" !="_object = (_x select 1) createVehicleLocal [0,0,0];" !="_plant = _x createVehicleLocal (getMarkerPos \"center\");" !="_point = \"Logic\" createVehicleLocal getPosATL _unit;" !"_object = _type createVehicleLocal [0,0,0];" !" = \"#lightpoint\" createVehicleLocal " !" = \"#particlesource\" createVehicleLocal " !="_para = \"ParachuteWest\" createVehicleLocal [0,0,0];" !="_sign = \"Sign_arrow_down_large_EP1\" createVehicleLocal [0,0,0];" !"_obj = \"Sign_sphere10cm_EP1\" createVehicleLocal [0,0,0];" !="_objectSnapGizmo = \"Sign_sphere10cm_EP1\" createVehicleLocal [0,0,0];" +5 ctrlAddEventHandler +5 ctrlSetPosition !="_control ctrlSetPosition [_posX, _posY];" !"3,_h]};\n_control ctrlsetposition _pos;" !="_control ctrlSetPosition [0, (_y + _deltaY)];" !="_disp_ctrl ctrlSetPosition [_posX, _posY];" !="_control ctrlSetPosition _grpPos;" !="_group ctrlSetPosition _pos;" !="((uiNamespace getVariable 'DAYZ_GUI_waiting') displayCtrl 1400) ctrlSetPosition _sandLevel;" !="_delayControl ctrlSetPosition [0, _pos];" !="_icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65];" +5 cutText !"_layer cuttext [\"\",\"plain\"];\n};\nmissionnamespace" !"\n\n\n3100 cuttext [\"\",\"plain\"];" !"} else {\n16 cutText [\"\",\"PLAIN\"];" !"exitWith {\n1 cutText [localize \"" !"progress_monitor.sqf\";\n0 cutText ['','BLACK',0]" !="8 cutText [\"\",\"PLAIN\"];" !="fired;\n};\nplayer_fired = { \ndeleteVehicle (_this select 6);\ncutText [localize \"STR_CL_SZ_FIRE\", \"WHITE IN\"];\n};\n\n[_speedLimit, _" +5 deleteMarker !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {" +5 displayAddEventHandler !"bis_fnc_halo_keydown_eh = (finddisplay 46) displayaddeventhandler [\"keydown\",\"_this call bis_fnc_halo_keydown;\"];" +5 displaySetEventHandler +1 DZE_doorManagementAdmins !="\n\n\n\n\n\n\n\n\n\n\n\nDZE_doorManagementMustBeClose = false; \nDZE_doorManagementAdmins = []; \nDZE_doorManagementAllowManualCode = true; \nD" !="true; };\n} count _doorFriends;\n\n\n\n\nif(_playerUID in DZE_DoorManagementAdmins) then { _isDoorAdmin = true; };\n};\n\n\n\n[ _isOwner\n, " !="ove select 0) == _ownerPUID && (!(dayz_playerUID in DZE_doorManagementAdmins) && !(dayz_playerUID == _ownerPUID))) exitWith {sys" +1 DZE_PlotManagementAdmins !=" = true; \n\n\nDZE_plotManagementMustBeClose = false; \nDZE_PlotManagementAdmins = []; \nDZE_MaxPlotFriends = 10; \nDZE_maintainCurren" !="true; };\n} count _plotFriends;\n\n\n\n\nif(_playerUID in DZE_PlotManagementAdmins) then { _isPlotAdmin = true; };\n};\n\n\n\nif(_targetTyp" !="lot = DZE_requireplot;\n_isAdmin = dayz_playerUID in DZE_PlotManagementAdmins;\n\nif (!canbuild) exitWith {dayz_actionInProgress = " +5 enableEnvironment +5 endMission !"rendMission" !"clearWeaponCargo\",\n\"endMission\"," !"enablesimulation\", \"endMission\"," !"lize \"str_player_login_timeout\", \"PLAIN DOWN\"];\nuiSleep 5;\nendMission" !"\npublicVariableServer \"PVDZ_sec_atp\";\nendMission \"LOSER\";\n};\n" !"Terminate\",\"BACK\"];\ncamDestroy _camera;\n\nendMission" !"endMission \"END1\";\n\n\ndayz_authed = true" +1 entities !"nearEntities" !="\n if (isnil 'BIS_fnc_sceneCreateSoundEntities' || false) then {\n BIS_fnc_sceneCreateSoundEntities = {\n i" !="_loginCompleted = true;\n\n\ndayz_currentGlobalZombies = count entities \"zZombie_Base\";\n\n{\ncall compile preprocessFileLineNumbers (" !="haracterID)) then {\n_plotPoles = _plotPoles +1;\n};\n} count (entities \"Plastic_Pole_EP1_DZ\");\n};\n} else {\n_plotcheck = [player, f" !="VDZ_sec_atp\";\n};\n};\n\nif (isNull _grp) then { _grp = group ((entities 'FunctionsManager') select 0); };\nif (!isNull _grp) then {\n" +1 execVM !";\n};\n\nexecVM \"spawn\\main.sqf\";" !"rexecVM" !"\"execVM\", " !="[] execVM \"initJIPcompatible.sqf\";" !="_script = [] execVM (BIS_MP_Path + BIS_PATH_SQF + \"JIPWaitFor.sqf\");" !"execVM \"\\ca\\Data\\" !"execVM '\\ca\\Data\\" !"execVM \"\\ca\\missions" !"execVM 'ca\\modules\\" !"execVM \"ca\\modules\\" !"'\\ca\\ui\\" !"\"\\ca\\ui\\" !"scriptName \"MP\\data\\script" !"_handle\"];\n_handle = [_display] execVM _script;\n}" !"execVM '\\z\\addons\\dayz_code\\" !"execVM 'z\\addons\\dayz_code\\" !"execVM \"z\\addons\\dayz_code\\" !"execVM \"\\z\\addons\\dayz_code\\" !"execVM (\"\\z\\addons\\dayz_code\\" !="dayz_rulesHandle = execVM \"rules.sqf\";" !"execvm '\\ASC\\" !"\\usec_ch53\\scripts\\" !"execVM (_actionDir + \"warn.sqf" !="_this execVM \"\\GNT_C185\\scr\\C185_Exhaust.sqf\";[_this select 0] execvm \"\\GNT_C185\\scr\\G_CheckEngine.sqf\";" +5 failMission !"rfailMission" !"failMission\",\n\"titleCut\"," !"fadeSound\", \"failMission\"," !"if (_debug == 1) then {\ndiag_log (\"End Mission\");\n};\n\nfailMission" +5 forceEnd +1 globalMoney !="\"cashMoney\", _characterCoins, true];\nplayer setVariable [\"globalMoney\", _globalCoins, true];\nplayer setVariable [\"bankMoney\", _b" !="rency) then {\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\nplayer setVariable[([\"cash" !="13001,format [\"%1 %2\",[player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0]] call BIS_fnc_numberText,Cu" !="Messages};\n\n_myMoney = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_myMoney = _myMoney + _his" !="xitWith {}; \n\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\n_enoughMoney = false;\n\n_m" !="able [\"bankMoney\",0];\n_globalCoins = player getVariable [\"globalMoney\",0];\n};\n\n\n[_model, _charID, _humanity, _zombieKills, _head" !="then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = format [\"> \"CfgVehicles\" >>" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityChange.sqf\"\nprivate [\"_change\",\"_humanity\"];\n\n\n\n\n_change = _this;\n\n_humanity " !"layer]];\npublicVariableServer \"PVDZ_send\";\n\n\n20 call player_humanityChange;\n\nformat[localize \"str_actions_medical_gave_wipes\",(n" !=" [\"_msg\",\"_bagUsed\",\"_bloodResult\",\"_bloodAmount\",\"_unit\",\"_humanityAwarded\",\"_timer\",\"_i\",\"_isClose\",\"_duration\",\"_rhVal\",\"_blo" +5 lbCurSel !"_name = lbText [8888,(lbCurSel 8888)];\n{\nif (_name == (_x" !"_selectedUserIndex = lbCurSel _lbUsersControl;" !="profileNamespace setVariable ['statusUI',(lbCurSel (_this select 0))];" !="profileNamespace setVariable ['streamerMode',(lbCurSel (_this select 0))];" !"_index = lbCurSel _lbcontrol;\n_selectedItem" !"_selected = lbCurSel _list;\n_classname = _list lnbData [_selected, 2];" !="_friendName = _userList lbText (lbCurSel _userList);" !")] call Z_" !"(lbCurSel 7421) call Z_fillCategoryList" !"] call Door" !"] call Plot" !"[(lbCurSel 12001)] " !="[(lbCurSel 21000), ((ctrlParent (_this select 0)) displayCtrl 21001)] spawn EpochDeathBoardClick;" !"((ctrlParent (_this select 0)) closeDisplay 2);" !="_uid = _playerList lbData (lbCurSel _playerList);" !"_myGroup lbData (lbCurSel _myGroup);" !="vkc_charID = (vkc_keyList select 0) select (lbCurSel 4802);vkc_keyName = (vkc_keyList select 1) select (lbCurSel 4802);" !="2800) displayCtrl 2802);\n\n_vehicle = vg_vehicleList select (lbCurSel _control);\n_typeOf = typeOf _vehicle;\n_isLimitArray = typeN" !="Dialog 0;\n_vehicle = (call compile format[\"%1\",lbData[2802,(lbCurSel 2802)]]);\n\nif (vg_removeKey && {_vehicle select 3 != 0} && " +5 lbSet !"lbSetColor [8888,_index, switch true do {\ncase (_level >" !"_lb lbSetColor [_index, switch true do {\ncase (count _x == 2" !"_lbUsersControl lbSetColor [_x, [1,0,0,1]];" !"\n_control lbSetColor [_x, _color];\n};" !"_weaponsLBSetFocus" !="(_this select 0) displayCtrl _idc lbSetCurSel (profileNamespace getVariable [_var,_default]);" !="(_display displayCtrl 105) lbSetColor [_i, [0.06, 0.05, 0.03, 1]];" !" [7421," !"lbSetPicture [7422, _index" !"lbSetPicture [7402, _index" !"lbSetPicture [7401, _index" !="_userList lbSetData [(lbSize _userList) -1,_friendUID];" !" [TraderDialogItemList, _index, " !"_myGroup lbSetData [_index,getPlayerUID _x];" !="bAdd ((vkc_keyList select 1) select _forEachIndex);\n_control lbSetPicture [_index,getText(configFile >> \"CfgWeapons\" >> ((vkc_ke" !=" 1) >> \"displayName\");\n_control lbAdd _displayName;\n_control lbSetData [(lbSize _control)-1,str(_x)];\nvg_vehicleList set [count " +5 loadFile +5 menu !",\"MenuSelected\",\"Draw\",\"VideoStop" !"_menu = _parent displayCtrl (1600 + _i);\n_menu ctrlShow " !"BIS_fnc_commsMenu" !"BIS_fnc_kbMenu" !"call gear_ui_offMenu;" !"dayz_inflame_showMenu" !"\"showCommandingMenu\", " !"rshowCommandingMenu" !"menu_" !"use action menu to " !"\"_menu\",\"_menu1\"" !"fn_gearMenuChecks" !"fn_pauseMenuChecks" +1 nearEntities !="nce _grid) < spawn_radius}\n&& {({isPlayer _x} count (_pos nearEntities [\"CAManBase\",100])) == 0}\n&& {count (_pos nearEntities [\"" !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="ets,false];\n};\n};\n};\n};\n};\n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !="{isPlayer _x} count (([vkc_cursorTarget] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {call _" !="esult = nil;\n\n_localVehicles = ([player] call FNC_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n_heliPa" !="ation;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" +1 nearestObject !="licVariableEventHandler {_pos = (_this select 1); _obj = nearestObjects [_pos, DZE_isWreckBuilding, 5]; if (count _obj > 0) then" !=" 0;\n_whatIwant = _this select 1;\n_ret = false;\n\n_flame = nearestObjects [_fireplace, [\"flamable_DZ\"], 1];\n_flame = if (count _fl" !="Whitelisted = [];\n_pointsNearby = [];\n_findWhitelisted = nearestObjects [_pos,_whitelist,(_radius + DZE_snapExtraRange)]-[_objec" !=".sqf\"\n\n\n\n\n\nprivate \"_object\";\n\n{\n_object = (_x select 0) nearestObject (_x select 1);\n_object hideObject true;\n_object setVariab" !="\ncall dayz_meleeMagazineCheck;\n{player reveal _x} count (nearestObjects [_position,[\"AllVehicles\",\"WeaponHolder\",\"Land_A_tent\",\"" !="ks.sqf\"\nsetMousePosition [0.5, 0.5];\n\nprivate [\"_exit\",\"_nearestObjects\",\"_rID\",\"_display\",\"_cTarget\",\"_dis\",\"_friendlyTo\",\"_las" !="eenMsg = localize 'str_player_setup_completed';\n_torev4l=nearestObjects [_setPos, Dayz_plants + DayZ_GearedObjects + [\"AllVehicl" !=") then {\n_pPos = [player] call FNC_GetPos;\n_fireplaces = nearestObjects [_pPos, [\"flamable_DZ\",\"Land_Fire\",\"Land_Campfire\"], 8];" !=" \n\n)\nmax 0;\n\nif (_scaleLight < 0.9) then {\n\n_nearFlare = nearestObject [getPosATL (vehicle player),\"RoadFlare\"];\nif (!isNull _ne" !=" call _check}) exitWith { \n_inside = true;\n};\n} forEach (nearestObjects [_unit, [\"Building\"], 50]);\n};\n\n\n_inside\n" !="= _this select 0;\n_ammo = _this select 1;\n\n_projectile = nearestObject [_unit, _ammo];\n_pos = getPosATL _projectile;\n\nif (_ammo " !="\n};\nif (\"workshop\" in _needNear) then {\n_isNear = count (nearestObjects [player, DZE_Workshops, _distance]);\nif(_isNear == 0) th" !="ingPlayer = player;\n_dir = round(random 360);\n_helipad = nearestObjects [player, [\"HeliHCivil\",\"HeliHempty\"], 100];\n\n\nif (count " !="1\",\"land_smd_water_pump\"];\n\n_canFill = call {\n\nif (count nearestObjects [_posATL,_wells,4] > 0) exitwith {[true,false]};\nif (toL" !="d) exitWith {\n_nearWaterHole = [true,_pond];\n};\n} count (nearestObjects [_x, [], 1]);\n\nif (_nearWaterHole select 0) exitWith {};" !="bj select 4;\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_endPos = getPosATL _projectile;\n_doWait =" !="_plantOutput select _index;\n_countOut = 1;\n};\n};\n} count nearestObjects [([player] call FNC_getPos), [], 10];\n\nif (count _findNe" !=" !r_player_unconscious && !_onLadder);\n\n_nearByObjects = nearestObjects [player,_objects,_range];\n\nif (count _nearByObjects == 0" !="= \"workshop\") exitwith {\n_distance = 3;\n_isNear = count (nearestObjects [_pos, DZE_Workshops, _distance]);\nif (_isNear == 0) the" !="earestPole) then {_pos} else {_nearestPole};\nif ((count (nearestObjects [_center,_buildables,_distance])) >= DZE_BuildingLimit) " !="_ammo in [\"Dragged\",\"RunOver\"])}) then {\n_vehicleArray = nearestObjects [([vehicle _unit] call fnc_getPos),[\"Air\",\"LandVehicle\"," !="n _rocks) exitWith { _findNearestRock = _x; };\n} foreach nearestObjects [getPosATL player, [], 8];\n\n\nif (!isNull _findNearestRoc" !="modeltoWorld [0,0,0]};\n_holder = objNull;\n\n\n_nearByPile= nearestObjects [_pos, [\"WeaponHolder\",\"WeaponHolderBase\"],2];\n\nif (coun" !="r);\nlocal _uid = getPlayerUID player;\nlocal _nearLight = nearestObject [player,\"LitObject\"];\nlocal _canPickLight = false;\nlocal " !="p = {\nlocal _doors = [];\nif (r_drag_sqf) then {\n_doors = nearestObjects [player, DayZ_DropDrageeObjects, 3]; \nif (count _doors >" !"With {};\nif (!_unconscious) exitWith {};\n\n_dropObjects = nearestObjects [player, DayZ_DropDrageeObjects, 3];\nif (count _dropObje" !"Name) in dayz_trees}) exitWith {\n\n_tree = _x;\n};\n} count nearestObjects [getPosATL player, [], 20];\n\nif (!isNull _tree) then {\n\n" !="ntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestObjects [_target, DZE_maintainClasses, DZE_maintainRange];\n\n_obj" !="E_LockableStorage + [\"DZ_storage_base\"];\n_count = count (nearestObjects [_target,_buildables,_range]);\n\n_colour = \"#ffffff\";\n\nif" !="e;\n_num = ceil (random (player distance _x));\n};\n} count nearestObjects [player, [], 50];\n\nfor \"_i\" from 1 to 10 do {\nif (!_ispo" !="j select 4;\n\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_vUp = vectorUp _projectile;\n_endPos = get" !="player;\nif (_vehicle != player) then {\n_servicePoints = (nearestObjects [getPosATL _vehicle,_servicePointClasses,_maxDistance]) " !="ir\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n_heliPad = nearestObjects [if (_isNearPlot) then {_plotCheck select 2} else {playe" !="ts;\n_isNearPlot = (_plotCheck select 1) > 0;\n\n_heliPad = nearestObjects [if (_isNearPlot) then {_plotCheck select 2} else {playe" !="ocalize \"STR_CL_VG_HELIPAD_REMOVED\",typeOf _x];\n} count (nearestObjects [_plotCheck select 2,vg_heliPads,Z_VehicleDistance]);\n} " +1 nearObjects !="ratorRunning\",false]))} count (([player] call FNC_getPos) nearObjects [\"Generator_DZ\",30]);\nif (_findNearestGen > 0) then {\ns_pl" !="lders = dayz_currentWeaponHolders - 1;\n} count (_worldPos nearObjects [\"ReammoBox\", 1]);\n\nif (_lootChance > random 1 && {dayz_cu" !="rgets == 0) then {\nprivate \"_objects\";\n\n_objects = _agent nearObjects [\"GrenadeHand\", 300]; \n{\nif (!(_x in _targets)) then {\nif " !="er] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pPos nearObjects _distance);\nif(_isNear == 0) then {\n_abort = true;\n_reason" !="s select 0;\n_sign = _this select 1;\n_near = count (player nearObjects [_class,50]);\n\n[_class,_sign,_near] spawn {\n_class = _this" !="with {\n_distance = 3;\n_isNear = {inflamed _x} count (_pos nearObjects _distance);\nif (_isNear == 0) then {\n_abort = true;\n_reaso" !=" (_nearWaterHole select 0) exitWith {};\n} forEach (player nearObjects [\"waterHoleProxy\",50]);\n\n_nearWaterHole" !="unt _zeds;\n\n\ndayz_currentWeaponHolders = count (_position nearObjects [\"ReammoBox\",_radius]);\n\n\nlocal _vehicle = vehicle player;" !="yer] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pos nearObjects 3);\nif (_isNear == 0) exitWith {dayz_actionInProgress = fa" +5 onMapSingleClick +1 playableUnits !"for [{_y=0},{_y < count(playableUnits)},{_y=_y+1}] do {" !"typeName player == \"OBJECT\" && {(player in playableUnits" !"AND {((alive _x) AND {((vehicle _x) distance _obj < 150)})}} count playableUnits)}) then {" !="_local = { _unit distance _x < _dis; } count playableUnits <= 1;" !"ManagementMustBeClose) then { player nearEntities [\"CAManBase\", 10] } else { playableUnits };" !=" = false;\n};\n};\n};\nif (!_isOk) exitWith {false};\n} count playableUnits;\n\n_isOk\n" !="lose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer _x) then {\n_friendUID = getPlayerUID _x" +5 positionCameraToWorld +5 removeAllEventHandlers !"_WarnFuel = false;\n};\n\n};\n\n_vehicle removeAllEventHandlers \"IncomingMissile" !"leep _wait;} else {sleep (_wait * 4);};\n};\n\n_vehicle removeAllEventHandlers \"Dammaged" !"lse\"];\n{\n(findDisplay 12) displayCtrl 51 ctrlRemoveAllEventHandlers" !"select 1,0] nearestObject (_x select 2);\n_building removeAllEventHandlers" !"\n\n\n\nif (_this isKindOf \"AllVehicles\") then {\n\n_this removeAllEventHandlers" !"With {};\n\n_old = player;\n_old removeAllEventHandlers \"FiredN" !"\npublicVariableServer \"PVDZ_veh_Save\";\n};\n};\n\n\n_unit removeAllEventHandlers" !="_vehicle setVariable [\"safezoneEH\", false];\n_vehicle removeAllEventHandlers \"Fired\";\n};\n};\n\nwhile {69 == 69} do\n{\nprivate \"_vehi" +5 selectPlayer !"addSwitchableUnit dayz_originalPlayer;\nsetPlayable dayz_originalPlayer;\nselectPlayer dayz_originalPlayer;" !"addSwitchableUnit _newUnit;\nsetPlayable _newUnit;\nselectPlayer _newUnit;" +5 serverCommand !="_character = if (serverCommandAvailable \"#kick\") then { call sched_tg_follow } else { player };" !"serverCommand (\"#vote kick \" + _selectedName);" !="dle = [dayz_playerUID,dayz_characterID,_model] spawn player_humanityMorph;\nuiSleep 0.2;\nwaitUntil {scriptDone _handle};\ngear_don" +5 setAperture !"select 1);\n\nif(_NVOn == \"ON\") exitwith\n{\nsetaperture -1" !"+_inc;\n\n_NVOn = (_NV select 0);\n\nif(_NVOn == \"ON\") then {\n\nsetAperture" +5 setCamUseTI +5 setDamage !"_this select 1;\n_plane setDamage .8;\nwaitUntil {_plane distance (_this" !"if (_entity isKindOf \"Animal\") then {\n_entity setDamage 1;" !"player setDamage 1;\n};\n\nif (dayz_onBack != \"\") then {\nif (dayz_onBack in w" !"if (_ent isKindOf \"Animal\" || _ent isKindOf \"zZombie_base\") then {\n_ent setDamage 1;" !="Server \"PVDZ_veh_Save\";\n\nif (_allRepaired) then {\n_vehicle setDamage 0;\n_vehicle setVelocity [0,0,1];\n[format[localize \"STR_CL_S" +5 setDammage !="ate [\"_folder\",\"_servicePointClasses\",\"_maxDistance\",\"_actionTitleFormat\",\"_actionCostsFormat\",\"_message\",\"_messageShown\",\"_refu" !="ate [\"_folder\",\"_servicePointClasses\",\"_maxDistance\",\"_actionTitleFormat\",\"_actionCostsFormat\",\"_message\",\"_messageShown\",\"_refu" +5 setDate !rsetDate !"\"setDate\", " !"\n\n\nif (!isDedicated) then {\n\"dayzSetDate\" addPublicVariableEventHandler {" !"if (_x != _newdate select _forEachIndex) exitWith {\nsetDate _newdate" !"plr_Login1]; \nPVDZ_send = [player,\"dayzSetDate\",[player]];\npublicVariableServer" !="!isNil \"dayzSetDate\"" !"diag_log ['Date & time received:', dayzSetDate];\nsetDate dayzSetDate;\ndiag" +5 SetEventHandler !"\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n};" !"inGameUISetEventHandler [\"Action\",\"false\"];" +5 setMarkerAlpha +5 setMarkerBrush +5 setMarkerColor !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" +5 setMarkerDir +5 setMarkerPos !"\"setMarkerPosLocal\"," !"rsetMarkerPosLocal" +5 setMarkerShape +5 setMarkerSize +5 setMarkerText !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" +5 setMarkerType !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" +5 setPosASL !"select 1,0]) then {\nspawn_camera setPosASL _offset;" !="_unit setPosAsl [(_position select 0), (_position select 1), (LHA_height+1)];" !="_flame setPosASL [_pos select 0,_pos select 1,(_pos select 2)+0.2];" !="_fire setPosASL _location;" !"_objectHelper setPosASL _position;\n} else {" !"_b0x1337 setPosASL (getPosASL player);\n} else {" !"_obj setPosASL [_center select 0, _a, _b];" !"_objectSnapGizmo setPosASL " !"_para setposasl [\n" !"_thingy setPosASL (ATLToASL _pos);\n} else {" !="> \"fixWaterPos\");\nif (_fixWaterSpawn == 1) then {\n_vehicle setPosASL (_pos);\n} else {\n_vehicle setPos (_pos);\n}; \n} else {\n_ve" +5 setTerrainGrid +5 setUnitRecoilCoefficient +5 setVehicle !"_plane setVehicleLock \"LOCKED\";\n_plane flyInHeight DZE_HaloSpawnHeight" !"if(_status) then {\n_vehicle setVehicleLock \"LOCKED\";\n} else {\n_vehicle setVehicleLock \"UNLOCKED\";\n};" !="stentMoney),(_wealth - _amount),true];};\n\nvkc_cursorTarget setVehicleLock \"LOCKED\";\nplayer playActionNow \"Medic\";\n\n_position = [" +5 setViewDistance +5 sideLogic !"publicVariable \"BIS_MPF_logic\";" +5 switchCamera !"\"switchCamera\", " !"rswitchCamera" !"player switchCamera _currentCamera;\nif (_currentWpn !=" !"< 150) && random 1 > 0.5) then {\n_killer switchcamera" +1 systemChat !"systemChat format[localize \"STR_ESS_" !="systemChat format[localize \"str_missing_to_do_this\", _x];" !"systemChat (localize " !"systemChat format[localize \"STR_EPOCH_" !"systemChat localize \"STR_EPOCH_" !"case \"system\": {systemChat _message;};" !"systemchat localize \"STR_CRAFTING_NEEDED_ITEMS\";" !"systemChat format[localize \"STR_CL_" !"systemChat localize \"STR_CL_" !=") then {\nif (player getVariable[\"radiostate\",true]) then {\nsystemChat (\"[RADIO] \" + _message);\nplaySound \"Radio_Message_Sound\";\n" !"systemChat localize \"str_cursorTargetNotFound\"" +5 title !"titleCut [\"\", \"BLACK " !"\"titleCut\", " !"\"titleText\"" !="rtitleCut = 'titleCut'" !"rtitleCutc" !="rtitleText = 'titleText'" !"rtitleTextc" !"(_missionTextListPath >> \"titles\")" !"(_display displayCtrl _titleIDC) ctrlShow false;" !"titleText [format[localize \"str_return_lobby\", _x" !",\"_titleText\"" !"localize 'STR_UI_GENDER_TITLE';\n_timeNem" !="scriptName \"MP\\data\\scriptCommands\\titleText.sqf\";" !_fillTradeTitle !_bldTxtStringTitle !"localize \"str_halo_altitude_speed" !="ate [\"_folder\",\"_servicePointClasses\",\"_maxDistance\",\"_actionTitleFormat\",\"_actionCostsFormat\",\"_message\",\"_messageShown\",\"_refu" +5 toString !"_animCheck = toString ([(_animStateArray select 0),(_animStateArray select 1)" !="_skinToModel = toString (_finalArray);" !="{_textArrayTemp = _textArrayTemp + [tostring [_x]]} foreach _line;" !="_cmpt = toString _cmpt;" !="_objName = toLower(toString(_objName));" !"if (toString _hayArr != _needle) then {" !="_type = toString _typeA;" !="_anim4 = toString _anim4;" !"{(count _stance>17)}) then {toString [_stance select 17]}" !"BIS_fnc_timeToString" !"02, if (typeName _name == \"ARRAY\") then {toString _name} else {_name}];" !="s = true;\n\n_array = toArray (animationState player);\n_str = toString [_array select 5,_array select 6,_array select 7];\n_anim = " !=" _input - [_x];\n} forEach _badChars;\n\n_input = parseNumber (toString (_input));\n_input\n};\n\nBankDialogUpdateAmounts = {\nprivate [" +5 worldTo !="_relPos = _building worldToModel _point;" !"_w2m = _x worldToModel (getPosATL player);\n_bb = (boundingbox _x) select 1;" !="_h = _offset + ((_o worldToModel (getPosATL _o)) select 2);" !"_pos set [2,(_pos select 2) + 1.5];\n_screen = worldToScreen _pos;\n_text = composeText [image" !="\n_pos = _this select 1; \n_offset = 1; \n\n_relPos = _building worldToModel _pos;\n_boundingBox = boundingBox _building;\n\n_min = _bo" !="it,_pos,_haloJump] spawn {\n_plane = _this select 1;\n_plane setDamage .8;\nwaitUntil {_plane distance (_this select 0) < (DZE_Halo" + +//The best use of this file is filtering commonly used scripting commands, because they are always the same when compiled and executed. See: https://community.bistudio.com/wiki/Category:Scripting_Commands_ArmA2 +//Filtering strings, variable names and code snippets is less effective because they can easily be changed or obfuscated in a near infinite number of ways + +//Always test after modifying by executing code on yourself. Ensure you are kicked or logged appropriately. One error in this file can break functionality of all filters and exceptions beyond that point. + +//Note ! and != currently behave identically in scripts.txt, there is no advantage to using one over the other +//Note currently scripts.txt does not support regex, so the only characters that need to be escaped are literal double quotes " and literal backslash \ +//Note tabs and spaces used as indents are stripped out automatically and do not need to be included in exceptions +//Note code is filtered as it appears when it is executed. Macros in scripts and % in formats will be replaced with their real values. Double quotes ""x"" or ''x'' nested in strings will appear as single quotes. Formatting characters will be stripped from FSMs. diff --git a/BattlEye/selectplayer.txt b/BattlEye/selectplayer.txt new file mode 100755 index 0000000..ee52817 --- /dev/null +++ b/BattlEye/selectplayer.txt @@ -0,0 +1,2 @@ +//new +1 !(BanditW?[12]|Camo1|Sniper1W?|Soldier1|SurvivorW?([123]|desert|pink|combat|urban)|Blood_Trail)_DZ !(Priest|Doctor|Assistant|Worker[134]|Soldier_(Crew|TL|Sniper|Bodyguard_AA12)_PMC)_DZ !((Functionary1|Haris_Press|Pilot|US_Soldier)_EP1|Reporter|MafiaBoss|Dealer)_DZ !pz_(policeman|suit[12]|worker[123]|doctor|teacher|hunter|villager[123]|priest)_DZ !(GUE_Soldier_(MG|Sniper|Crew|CO|2)|Apo_Rifleman_0[1-6])_DZ !(UN_CDF_Soldier(_Guard)?_EP1|BAF_Soldier_(Officer|N)_MTP|CamoWinterW?|Nac_Soldier|Tamika)_DZ !GhillieFull_(Desert0[1-8]|Snow0[1-5]|Urban01|Wood(0[1-9]|1[1-6]))_DZ !SG_GRU_(TL|Scout|Sniper|Spotter|Assaultman|Medic|Marksman|Operator|MG)(|_W|_D)_DZ !(Firefighter([1-5]|_Officer[12])|Postman[1-4]|SchoolTeacher|Civilian([1-9]|1[0-4]))_DZ !((Drake|Graves)_Light|GUE_Commander|Hunter|Gardener|RUS_(Soldier1|Commander))_DZ !(RU_(Soldier(|_Officer|_Crew)|Policeman2?)|Ins_(Soldier_(2|GL|Crew)|Commander))_DZ !(MVD_Soldier|CDF_Soldier|Prisoner[123]|Rocker[1-4]|BusinessMan|Rocket)_DZ !(INS_(Lopotev|Soldier_(AR|CO)|Bardak|Worker2)|USMC_Soldier_(Officer|MG|Pilot))_DZ !FR_(TL|R|Marksman|Assault_R|OHara|Rodriguez|Sapper)_DZ !TK_(Special_Forces_MG|Soldier_Sniper|Commander|GUE_Soldier|CIV_Takistani0[1346]|INS_(Soldier(_AR)?|Warlord))_EP1_DZ !gsc_(military_helmet_|military_head_)(|wdl|grey)_DZ !gsc_(scientist[12](_head)?|cloth_loner_head)_DZ !gsc_eco_stalker_(mask|head)_(camo|neutral|head|fred|duty)_DZ !CZ_(Soldier_(805|Crew|Officer|Recon|Spec([123]|_Demo)|Sniper|Light)(|_Wdl|_Dst)|Soldier805_DES)_ACR_DZ !CZ_(Special_Forces_GL_DES|Soldier_Sniper|Soldier_SL_DES)_EP1_DZ !GER_Soldier(_TL)?_EP1(|_des|_wdl)_DZ !"" diff --git a/BattlEye/setdamage.txt b/BattlEye/setdamage.txt new file mode 100755 index 0000000..36f7beb --- /dev/null +++ b/BattlEye/setdamage.txt @@ -0,0 +1,2 @@ +//new +5 "" !=(1.000000 1:-1478172820|1.000000 1:-1478172821) \ No newline at end of file diff --git a/BattlEye/setpos.txt b/BattlEye/setpos.txt new file mode 100755 index 0000000..2fefdde --- /dev/null +++ b/BattlEye/setpos.txt @@ -0,0 +1,3 @@ +//new +5 "" !"WeaponHolder" !"FunctionsManager" !"Shot" !"z_doctor" !"z_hunter" !"z_new_villager[1234]" !"z_new_worker[1234]" !"z_policeman" !"z_priest" !"z_soldier_heavy" !"z_soldier_pilot" !"z_soldier" !"z_suit[12]" !"z_teacher" !"z_villager[1234]" !"z_worker[1234]" !"zZombie_Base" !="WoodenArrowF" !"CSJ_GyroCover" !"CSJ_GyroP" +1 "" \ No newline at end of file diff --git a/BattlEye/setvariable.txt b/BattlEye/setvariable.txt new file mode 100755 index 0000000..c57d024 --- /dev/null +++ b/BattlEye/setvariable.txt @@ -0,0 +1,13 @@ +//new +5 '..*' !^(USEC_|NORRN_|BIS_|hit_) !=(actionSet|armed|banditKills|characterID|claimed|combattimeout|deathType|doLoiter|firedDamage) !=(firedHit|headShots|hitRegistered|humanity|humanKills|lastPos|looted|meatHarvested|messing|myDest) !=(owner|remotetargets|temperature|unconsciousTime|zombieKills|zombieSpawn) !=(blood(taken|_type)|rh_factor) !^$ +5 ^USEC_!=USEC_(BloodQty|infected|injured|inPain|isCardiac|isDead|lowBlood|Sepsis) +5 ^NORRN_ !=NORRN_(unconscious|unit_dragged) +5 ^bis_ !=bis_greeted(by(evil|languages|people|times)|languages|people|times) !=BIS_noCoreConversations +5 ^hit_ !=hit_(Pelvis|aimpoint|lelbow|relbow|RightFoot|LeftFoot|neck|pilot|hands|svetlo|vez|zbran) !=hit_(hands|legs) !=hit_arms !="hit_(elektronika|engine|fueltank|glass[0-9]+|karoserie|(mala|velka) vrtule|motor|munice|netrup|palivo)" !="hit_(pravy (predni|zadni) tlumic|[lp] svetlo|sklo predni [lp]|svetlo l|wheel_[12]_[1-4]_steering|wheel_[12]_damper)" !=hit_telo !="hit_\?" !="hit_(light_nav_(right|top|left|back)|light_1_(1_dir|1_pos|2_dir|2_pos)|LandLeft|LandRight)" !="hit_(NEmotor|NEtelo|pas_L|pas_P)" !="hit_door_(fl|rl|fr|rr)" +1=hit_(Pelvis|aimpoint|lelbow|relbow|RightFoot|LeftFoot|neck|pilot) // Bleeding Limbs (optional) +1=hit_(hands|legs) // Breaking Limbs (optional) +1 USEC_ +1=characterID +5 "[+;,{(|&=:!%[]" +5 "\"" +5 "'" diff --git a/BattlEye/setvariableval.txt b/BattlEye/setvariableval.txt new file mode 100755 index 0000000..eb94e16 --- /dev/null +++ b/BattlEye/setvariableval.txt @@ -0,0 +1,259 @@ +//new +5 \{ +5 ; +5 & +5 % +5 \+ !e\+0 +1 "(init|set|add|action|all|attach|ATL|ASL|eye|exec|cam|group|unit|clear|create|menu|ctrl|display|text|hint|drop)" +1 "(entit|exit|able|find|fuel|damage|join|frame|move|team|throw)" +1 "draw" +1 "delete" +1 "copy" +1 "switch" !="\"switchmove\"" +1 "hide" !"hideObject" +1 "icon" +1 "marker" !"PPMarker" +1 "server" +5 "compile" +5 "loadFile" +5 "call" +1 "chat" +1 "fade" +5 "mission" +1 "kb" !="FoodCanFrankBeans" !="\"FoodCanFrankBeans\"" !"kbTell" !"kbReact" +1 "side" +1 "show" +1 "task" !"taskHint" +5 "enable" +5 "spawn" +1 "for" +1 "this" +5 "format" +1 "skip" !"skipTime" +1 "fail" +5 "parse" +5 "terminate" +1 "start" +5 "eventhandler" +5 "hintC" +5 "hintS" +5 "loading" +5 "removeAll" +1 "jiprequest" !=",,\"JIPrequest\"" +1 "remExField" !="\"remExField\" = \[,,\"playmove\",\"ZombieStandingAttack1\"\]" !="\"remExField\" = \[,,\"playmove\",\"ZombieStandingAttack2\"\]" !="\"remExField\" = \[,,\"playmove\",\"ZombieStandingAttack3\"\]" !="\"remExField\" = \[,,\"playmove\",\"ZombieStandingAttack4\"\]" !="\"remExField\" = \[,,\"playmove\",\"ZombieStandingAttack5\"\]" !="\"remExField\" = \[,,\"playmove\",\"ZombieStandingAttack6\"\]" !="\"remExField\" = \[,,\"playmove\",\"ZombieStandingAttack7\"\]" !="\"remExField\" = \[,,\"playmove\",\"ZombieStandingAttack8\"\]" !="\"remExField\" = \[,,\"playmove\",\"ZombieStandingAttack9\"\]" !="\"remExField\" = \[,,\"playmove\",\"ZombieStandingAttack10\"\]" !="\"remExField\" = \[,,\"JIPrequest\"\]" +1 "remExFP" +5 "remoteControl" +5 "toString" +5 "toArray" +5 "ctrlset" +5 "rsay" +5 "rland" +5 "_YakB" +1 "BIS_" +5 "local_gutObject" +1 "player_humanityChange" +1 "player_medBandage" +1 "player_medInject" +1 "player_medEpi" +1 "player_medTransfuse" +1 "player_medMorphine" +1 "player_medPainkiller" +5 "hiveupdateresu" +5 "isServer" +5 "isDedicated" +5 "cutText" +5 "publicVariable" +5 "code" +5 "onPlayer" +5 "select" +5 "while" +1 "count" +5 "markerText" +5 "BIS_fnc" +5 "_bis" +5 "markertype" +5 "teamtype" +5 "composeText" +5 "teamName" +5 "execVM" +5 "fn_swapVars\.sqf" +5 "processInitCommands" +5 "remotecmd" +5 "promptRName\.sqf" +5 "\.sqf\"\]" !="init\.sqf\"\]" +5 "registerBroadcastRpc" +5 "norrnRACarUp" +5 "norrnRAPicUp" +5 "markerBrush" +5 "hideObject" +5 "deleteCollection" +5 "forceEnd" +5 "createAgent" +5 "deleteVehicle" +5 "deleteTeam" +5 "getPlayerUID" +5 "getVariable" +5 "removeM" +5 "removeW" +5 "addAction" +5 "AddM" +5 "AddP" +5 "AddS" +5 "AddV" +5 "AddW" +5 "setAcc" +5 "setAtt" +5 "setC" +5 "setD" +5 "setF" +5 "setG" +5 "setH" +5 "setM" +5 "setObj" +5 "setOver" +5 "setP" +5 "setR" +5 "setS" +5 "setT" +5 "setUnit" +5 "setV" +5 "setW" +5 "execFSM" +5 "clearM" +5 "clearV" +5 "clearW" +5 "createD" +5 "createG" +5 "createM" +5 "createS" +5 "createT" +5 "createU" +5 "createV" +5 "debugLog" +5 "debugFSM" +5 "deleteM" +5 "kbTell" +5 "kbReact" +5 "fadeSound" +5 "fadeMusic" +5 "showC" +5 "skipTime" +5 "taskHint" +5 "titleCut" +5 "titleText" +5 "getM" +5 "getFSMvariable" +5 "getG" +5 "moveIn" +5 "synchronizeO" +5 "synchronizeT" +5 "synchronizeW" +5 "triggerA" +5 "triggerS" +5 "triggerT" +5 "MarkerColor" +5 "MarkerDir" +5 "MarkerPos" +5 "MarkerSize" +5 "onEachFrame" +5 "hasInterface" +5 "onMapS" +5 "OnGroup" +5 "onDouble" +5 "onPreload" +5 "onTeamS" +5 "onShowNew" +5 "setUnconscious" +5 "exec\[" +5 "set\[" +5 "str\[" +5 "exec'" +5 "set'" +5 "str'" +5 "exec\"" +5 "set\"" +5 "str\"" +5 "\)exec" +5 "\)set" +5 "\)str" +5 "\]exec" +5 "\]set" +5 "\]str" +5 "\}exec" +5 "\}set" +5 "\}str" +5 "'exec" +5 "'set" +5 "'str" +5 "str " +5 "\nstr" +5 "str\n" +5 ",str" +5 "str," +5 "str " +5 "set " +5 "\nset" +5 "set\n" +5 ",set" +5 "set," +5 "set " +5 "exec " +5 "\nexec" +5 "exec\n" +5 ",exec" +5 "exec," +5 "exec " +5 "isNil" +5 "modify" +5 "BIS_Alice_fnc_CivilianHit" +5 "BIS_Alice_mainscope" +5 "object_processHit" +5 "object_getHit" +5 "allowConnection" +5 "BIS_Effects_Burn" +5 "BIS_MPF_remoteExecutionServer" +5 "check_publishobject" +5 "dayz_disco" +5 "dayz_hiveVersionNo" +5 "dayz_objectUID" +5 "dayz_objectUID2" +5 "dayz_players" +5 "dayz_recordLogin" +5 "dayz_serverObjectMonitor" +5 "dayz_versionNo" +5 "dayz_zombifiedTowns" +5 "dayzPlayerLogin" +5 "dayzPlayerLogin2" +5 "eh_localCleanup" +5 "isSinglePlayer" +5 "needUpdate_objects" +5 "server_characterSync" +5 "server_deleteObj" +5 "server_getDiff" +5 "server_getDiff2" +5 "server_hiveReadWrite" +5 "server_hiveWrite" +5 "server_playerDied" +5 "server_playerLogin" +5 "server_playerSetup" +5 "server_playerSync" +5 "server_publishObj" +5 "server_updateNearbyObjects" +5 "server_updateObject" +5 "vehicle_handleInteract" +5 "vehicle_handleServerKilled" +5 "zombie_findOwner" +5 "banditKills_CHK" +5 "headShots_CHK" +5 "humanKills_CHK" +5 "humanity_CHK" +5 "lastInventory" +5 "lastPos" +5 "lastTime" +5 "model_CHK" +5 "processedDeath" +5 "zombieKills_CHK" +5 "lastUpdate" +5 "allunits" +5 "preprocess" +5 "runinitscript" diff --git a/BattlEye/teamswitch.txt b/BattlEye/teamswitch.txt new file mode 100755 index 0000000..92bc499 --- /dev/null +++ b/BattlEye/teamswitch.txt @@ -0,0 +1,2 @@ +//new +5 "" diff --git a/BattlEye/waypointcondition.txt b/BattlEye/waypointcondition.txt new file mode 100755 index 0000000..92bc499 --- /dev/null +++ b/BattlEye/waypointcondition.txt @@ -0,0 +1,2 @@ +//new +5 "" diff --git a/BattlEye/waypointstatement.txt b/BattlEye/waypointstatement.txt new file mode 100755 index 0000000..92bc499 --- /dev/null +++ b/BattlEye/waypointstatement.txt @@ -0,0 +1,2 @@ +//new +5 "" diff --git a/DatabaseMySql.dll b/DatabaseMySql.dll new file mode 100755 index 0000000..88ed013 Binary files /dev/null and b/DatabaseMySql.dll differ diff --git a/DatabasePostgre.dll b/DatabasePostgre.dll new file mode 100755 index 0000000..c62bf70 Binary files /dev/null and b/DatabasePostgre.dll differ diff --git a/EATadminLogger.dll b/EATadminLogger.dll new file mode 100755 index 0000000..fa5e816 Binary files /dev/null and b/EATadminLogger.dll differ diff --git a/EATbaseExporter.dll b/EATbaseExporter.dll new file mode 100755 index 0000000..4633f3d Binary files /dev/null and b/EATbaseExporter.dll differ diff --git a/HiveExt.ini b/HiveExt.ini new file mode 100755 index 0000000..5456176 --- /dev/null +++ b/HiveExt.ini @@ -0,0 +1,113 @@ +;This is a comment +;Comments above a certain setting will provide it's description + +;The format for a setting is +;Variable = Value + +;If you see a commented line of that form, it means that the setting is optional, and the Value shows the default +;To change from the default, simply uncomment the line and change the Value + +;This configuration file should be placed inside your server instance's configuration directory (like cfgdayz) + +[Time] +;Possible values: Local, Custom, Static +;You cannot use Static on OFFICIAL Hive, it will just revert to Local +Type = Static +;If using Custom type, offset from UTC in hours (can be negative as well) +;Offset = -8 +;If using Static type (Hour value always the same on every server start), the value (0-24) to set the Hour to +Hour = 13 + +[Database] +;Hostname or IP of the server to connect to +;If you leave this line commented or blank, HiveExt will connect to the OFFICIAL Hive, which requires registration +;See support.dayzmod.com for more information on what OFFICIAL Hive means, what are the rules, etc. +;If using OFFICIAL hive, the rest of the settings in this section have no effect +Host = localhost + +;Currently, only MySQL is supported +Type = MySQL + +;Port to connect to. The default is the default listening port of a server of the selected Type +;Instead of specifying Port, you can specify Socket and set Value to the socket name +Port = 3306 + +;Database name to connect to. +Database = epoch_database + +;Username to connect with +Username = Epoch_User +;Password to authenticate with (default is blank) +Password = root + +;If using OFFICIAL hive, the settings in this section have no effect, appropriate layout will be used +[Characters] +;The field name that Player's IDs are stored in (unique per game license) +;Some table layouts have this as PlayerID, and some as PlayerUID, that's why this is configurable +;IDField = PlayerUID +;The field name that Player's World Position and rotation is stored in +;Enables you to run multiple different maps (different instances) off the same character table +;WSField = Worldspace + +;If using OFFICIAL hive, the settings in this section have no effect, as it will clean up by itself +[Objects] +;Which table should the objects be stored and fetched from ? +;Table = Object_DATA + +;Negative values will disable this feature +;0 means that ALL empty placed items will be deleted every server restart +;A positive number is how old (in days) a placed empty item must be, in order for it to be deleted +;Leaving CleanupPlacedAfterDays below commented (with a ; in front) will NOT disable the cleanup, but will make the objects get cleaned up after the default 6 days. +;CleanupPlacedAfterDays = 6 + +;Flag indicating whether hiveext should detect vehicles out of map boundaries (X < 0, or Y > 15360) and reset their position to [] +;Note: YOU MUST have a proper dayz_server.pbo that supports this feature, otherwise you will get script errors +;You can find that file under the SQF directory for your server version +;ResetOOBVehicles = false + +;A string of comma separated object class names that are to be cleaned up, after the CleanupPlacedAfterDays period, regardless of inventory +;This variable was implemented to compensate for door/plot management storing information in the inventory field +;custom buildables which use the inventory field should be added to this variable +;If you wish to cleaup locked storage objects, instead of letting them zero out, you can add them to the variable +;Do not use double quotation marks, only use single quotation marks ['] +;MaintenanceObjects = 'Land_DZE_GarageWoodDoorLocked','Land_DZE_LargeWoodDoorLocked','Land_DZE_WoodDoorLocked','CinderWallDoorLocked_DZ','CinderWallDoorSmallLocked_DZ','Plastic_Pole_EP1_DZ' + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; VG Addition ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Table name for the virtual garage data to be stored in, default table is 'garage' +;VGTable = garage +; Days for a stored vehicle to be cleaned up after, if set to -1 this feature is disabled. Default 35 days +;CleanupVehStoredDays = 35 +; Log object cleanup DELETE statements (per object), including virtual garage. Default is false +;LogObjectCleanup = false + +;If using OFFICIAL hive, the settings in this section have no effect, it will manage objects on its own +[ObjectDB] +;Setting this to true separates the Object fetches from the Character fetches +;That means that the Object Table must be on this other database +;Use = false + +;The settings here have the same meaning as in [Database], and are only used if the setting above is set to true +;Type = MySQL +;Host = localhost +;Port = 3306 +;Database = dayz +;Username = root +;Password = +[Logger] +;Possible values: trace, debug, information, notice, warning, error, critical, fatal, none +;They are sorted by importance (low to high), with trace being the most verbose, and none would turn off logging +;This controls both the file output level, and the console output level +;Level = trace + +;Uncomment this option to override the logging level for the console only +;The specified level can only be higher than the global one, setting lower values will have no effect +;So for example, if you want to have information-level logs in your file, but only warning-level and higher in your console +;You would uncomment this option and set it to warning +;Leaving it commented out means there's no special level for the console, so it will just use the global one +;ConsoleLevel = trace + +;By default, the HiveExt console log output will go to the Arma2 server window, with colour highlighing by importance +;If you want to use the old style, separate windows console window for the HiveExt log output, set this option to true +;SeparateConsole = false \ No newline at end of file diff --git a/Keys/DayZEpoch107.bikey b/Keys/DayZEpoch107.bikey new file mode 100755 index 0000000..9e85fdc Binary files /dev/null and b/Keys/DayZEpoch107.bikey differ diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/actionmenu_activate.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/actionmenu_activate.sqf new file mode 100755 index 0000000..1143071 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/actionmenu_activate.sqf @@ -0,0 +1,21 @@ +[]spawn +{ +wardrobe = -1; +private["_veh"]; + +while {(alive player)} do +{ + if (wardrobe == -1) then + { + //wardrobe = (vehicle player) addaction [("" + ("Action Menu") +""),"actionmenu\actionmenu_execute.sqf","",5,false,true,"",""]; + wardrobe = (vehicle player) addaction ["Action Menu","actionmenu\actionmenu_execute.sqf","",5,false,true,"",""]; + _veh = vehicle player; + }; + if (_veh != vehicle player) then + { + _veh removeAction wardrobe; + wardrobe = -1; + }; + Sleep 2; +}; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/actionmenu_execute.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/actionmenu_execute.sqf new file mode 100755 index 0000000..562eca2 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/actionmenu_execute.sqf @@ -0,0 +1 @@ +[] execVM "actionmenu\actionmenu_main.sqf"; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/actionmenu_main.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/actionmenu_main.sqf new file mode 100755 index 0000000..3d6f382 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/actionmenu_main.sqf @@ -0,0 +1,125 @@ +pathtoscripts = "actionmenu\tools\"; +pathtocolors = "actionmenu\sky\"; +pathtofog = "actionmenu\fog\"; +pathtodonations = "actionmenu\donations\"; +pathtobuilding = "actionmenu\building\"; +EXECscript1 = 'player execVM "'+pathtoscripts+'%1"'; +EXECscript2 = 'player execVM "'+pathtocolors+'%1"'; +EXECscript4 = 'player execVM "'+pathtofog+'%1"'; +EXECscript5 = 'player execVM "'+pathtodonations+'%1"'; +EXECscript6 = 'player execVM "'+pathtobuilding+'%1"'; + +ActionMenu = +[ + ["",true], + ["Flip Vehicle", [2], "", -5, [["expression", format[EXECscript1,"flipvehicle.sqf"]]], "1", "1"], + ["Commit Suicide", [3], "", -5, [["expression", format[EXECscript1,"suicide.sqf"]]], "1", "1"], + + //["Action Menu", [2], "#USER:ActionMenua", -5, [["expression", ""]], "1", "1"], + //["Deploy Menu", [3], "#USER:DeployMenu", -5, [["expression", ""]], "1", "1"], + //["Color Filters", [4], "#USER:SkyMenu", -5, [["expression", ""]], "1", "1"], + //["View Distance (Fog)", [5], "#USER:FogMenu", -5, [["expression", ""]], "1", "1"], + //["Advanced Building", [6], "#USER:BuildingMenu", -5, [["expression", ""]], "1", "1"], + + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["Exit", [13], "", -3, [["expression", ""]], "1", "1"] +]; + +ActionMenua = +[ + ["",true], + ["Flip Vehicle", [2], "", -5, [["expression", format[EXECscript1,"flipvehicle.sqf"]]], "1", "1"], + //["Self Bloodbag", [3], "", -5, [["expression", format[EXECscript1,"bloodbag.sqf"]]], "1", "1"], + ["Commit Suicide", [3], "", -5, [["expression", format[EXECscript1,"suicide.sqf"]]], "1", "1"], + //["Hints & Tips - Read Me!", [8], "", -5, [["expression", format[EXECscript1,"help.sqf"]]], "1", "1"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["Exit", [13], "", -3, [["expression", ""]], "1", "1"] +]; + +DeployMenu = +[ + ["",true], + ["Deploy Bike", [2], "", -5, [["expression", format[EXECscript1,"bike.sqf"]]], "1", "1"], + ["Deploy Motorcycle", [3], "", -5, [["expression", format[EXECscript1,"motor.sqf"]]], "1", "1"], + ["Deploy Gyrocopter", [4], "", -5, [["expression", format[EXECscript1,"gyro.sqf"]]], "1", "1"], + ["Pack Created Vehicle", [5], "", -5, [["expression", format[EXECscript1,"pack.sqf"]]], "1", "1"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["Exit", [13], "", -3, [["expression", ""]], "1", "1"] +]; + +SkyMenu = +[ +["",true], + ["Color Bluff", [2], "", -5, [["expression", format[EXECscript2 ,"16.sqf"]]], "1", "1"], + ["Let it Snow!", [3], "", -5, [["expression", format[EXECscript2 ,"17.sqf"]]], "1", "1"], + ["Dark Draining", [4], "", -5, [["expression", format[EXECscript2 ,"3.sqf"]]], "1", "1"], + ["Sandy", [5], "", -5, [["expression", format[EXECscript2 ,"4.sqf"]]], "1", "1"], + ["Summer Chernarus", [6], "", -5, [["expression", format[EXECscript2 ,"5.sqf"]]], "1", "1"], + ["Dog Vision", [7], "", -5, [["expression", format[EXECscript2 ,"6.sqf"]]], "1", "1"], + ["Tropical", [8], "", -5, [["expression", format[EXECscript2 ,"7.sqf"]]], "1", "1"], + ["Photo", [9], "", -5, [["expression", format[EXECscript2 ,"8.sqf"]]], "1", "1"], + ["WarZone", [10], "", -5, [["expression", format[EXECscript2 ,"9.sqf"]]], "1", "1"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["Next page", [12], "#USER:SkyMenu2", -5, [["expression", ""]], "1", "1"], + ["Exit", [13], "", -3, [["expression", ""]], "1", "1"] +]; +SkyMenu2 = +[ +["",true], + + ["Operation Flashpoint", [2], "", -5, [["expression", format[EXECscript2 ,"10.sqf"]]], "1", "1"], + ["Africa", [3], "", -5, [["expression", format[EXECscript2 ,"11.sqf"]]], "1", "1"], + ["Blue", [4], "", -5, [["expression", format[EXECscript2 ,"12.sqf"]]], "1", "1"], + ["Arma Mission Colours", [5], "", -5, [["expression", format[EXECscript2 ,"13.sqf"]]], "1", "1"], + ["Heavy Colour Correction", [6], "", -5, [["expression", format[EXECscript2 ,"14.sqf"]]], "1", "1"], + ["Zombie View", [7], "", -5, [["expression", format[EXECscript2 ,"15.sqf"]]], "1", "1"], + ["Wasteland", [8], "", -5, [["expression", format[EXECscript2 ,"2.sqf"]]], "1", "1"], + ["Clear Contrast", [9], "", -5, [["expression", format[EXECscript2 ,"1.sqf"]]], "1", "1"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["Exit", [13], "", -3, [["expression", ""]], "1", "1"] +]; +FogMenu = +[ +["",true], + ["250M", [2], "", -5, [["expression", format[EXECscript4 ,"250.sqf"]]], "1", "1"], + ["500M", [3], "", -5, [["expression", format[EXECscript4 ,"500.sqf"]]], "1", "1"], + ["750M", [4], "", -5, [["expression", format[EXECscript4 ,"750.sqf"]]], "1", "1"], + ["1000M", [5], "", -5, [["expression", format[EXECscript4 ,"1000.sqf"]]], "1", "1"], + ["1250M", [6], "", -5, [["expression", format[EXECscript4 ,"1250.sqf"]]], "1", "1"], + ["1500M", [7], "", -5, [["expression", format[EXECscript4 ,"1500.sqf"]]], "1", "1"], + ["1750M", [8], "", -5, [["expression", format[EXECscript4 ,"1750.sqf"]]], "1", "1"], + ["2000M", [9], "", -5, [["expression", format[EXECscript4 ,"2000.sqf"]]], "1", "1"], + ["2500M", [10], "", -5, [["expression", format[EXECscript4 ,"2500.sqf"]]], "1", "1"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["Next page", [12], "#USER:FogMenu2", -5, [["expression", ""]], "1", "1"], + ["Exit", [13], "", -3, [["expression", ""]], "1", "1"] +]; +FogMenu2 = +[ +["",true], + ["3000M", [2], "", -5, [["expression", format[EXECscript4 ,"3000.sqf"]]], "1", "1"], + ["4000M", [3], "", -5, [["expression", format[EXECscript4 ,"4000.sqf"]]], "1", "1"], + ["5000M", [4], "", -5, [["expression", format[EXECscript4 ,"5000.sqf"]]], "1", "1"], + ["10000M", [5], "", -5, [["expression", format[EXECscript4 ,"10000.sqf"]]], "1", "1"], + ["20000M (Super Computer)", [6], "", -5, [["expression", format[EXECscript4 ,"20000.sqf"]]], "1", "1"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["Exit", [13], "", -3, [["expression", ""]], "1", "1"] +]; +DonatorMenu = +[ +["",true], + ["Tier 3 Supplies", [2], "", -5, [["expression", format[EXECscript5 ,"t3.sqf"]]], "1", "1"], + ["Test", [2], "", -5, [["expression", format[EXECscript5 ,"showpos.sqf"]]], "1", "1"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["Exit", [13], "", -3, [["expression", ""]], "1", "1"] +]; +BuildingMenu = +[ +["",true], + ["Advanced Building Recipes", [2], "", -5, [["expression", format[EXECscript6 ,"build_recipe_dialog.sqf"]]], "1", "1"], + ["Building Help", [3], "", -5, [["expression", format[EXECscript6 ,"build_help.sqf"]]], "1", "1"], + ["Show Flag Markers", [4], "", -5, [["expression", format[EXECscript6 ,"show_flag_markers.sqf"]]], "1", "1"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["Exit", [13], "", -3, [["expression", ""]], "1", "1"] +]; +showCommandingMenu "#USER:ActionMenu"; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/donations/t3.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/donations/t3.sqf new file mode 100755 index 0000000..1794b78 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/donations/t3.sqf @@ -0,0 +1,31 @@ +_crate = "USVehicleBox" createVehicle (position player); +_crate setVariable ["Mission",1,true]; + +clearWeaponCargoGlobal _crate; +clearMagazineCargoGlobal _crate; + +_crate addMagazineCargoGlobal ["ItemVault", 4]; +_crate addMagazineCargoGlobal ["workbench_kit", 4]; +_crate addMagazineCargoGlobal ["ItemComboLock", 4]; +_crate addMagazineCargoGlobal ["ItemTent", 6]; + +_crate addMagazineCargoGlobal ["metal_floor_kit", 120]; +_crate addMagazineCargoGlobal ["cinder_garage_kit", 6]; +_crate addMagazineCargoGlobal ["CinderBlocks", 480]; +_crate addMagazineCargoGlobal ["cinder_wall_kit", 480]; +_crate addMagazineCargoGlobal ["MortarBucket", 480]; +_crate addMagazineCargoGlobal ["sandbag_nest_kit", 2]; +_crate addMagazineCargoGlobal ["forest_large_net_kit", 3]; +_crate addMagazineCargoGlobal ["ItemWoodStairs", 4]; +_crate addMagazineCargoGlobal ["ItemWoodStairsSupport", 6]; +_crate addMagazineCargoGlobal ["ItemWoodLadder", 6]; +_crate addMagazineCargoGlobal ["ItemPole", 6]; +_crate addMagazineCargoGlobal ["ItemTankTrap", 6]; +_crate addMagazineCargoGlobal ["ItemSandbag", 180]; +_crate addMagazineCargoGlobal ["30m_plot_kit", 6]; + + +_crate attachto [player, [0,3,1.7]]; +sleep 5; +detach _crate; +player reveal _crate; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/1000.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/1000.sqf new file mode 100755 index 0000000..43eb2c8 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/1000.sqf @@ -0,0 +1,8 @@ +setviewdistance 1000; +bis_fog = 0; + +setviewdistance 1000; +0 setovercast 0; +0 setrain 1; +//0 setfog 0; +0 setfog bis_fog \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/10000.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/10000.sqf new file mode 100755 index 0000000..9bc6ea8 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/10000.sqf @@ -0,0 +1,8 @@ +setviewdistance 10000; +bis_fog = 0; + +setviewdistance 10000; +0 setovercast 0; +0 setrain 1; +//0 setfog 0; +0 setfog bis_fog \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/1250.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/1250.sqf new file mode 100755 index 0000000..bcf520b --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/1250.sqf @@ -0,0 +1,8 @@ +5setviewdistance 1250; +bis_fog = 0; + +setviewdistance 1250; +0 setovercast 0; +0 setrain 1; +//0 setfog 0; +0 setfog bis_fog \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/1500.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/1500.sqf new file mode 100755 index 0000000..a519b00 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/1500.sqf @@ -0,0 +1,8 @@ +setviewdistance 1500; +bis_fog = 0; + +setviewdistance 1500; +0 setovercast 0; +0 setrain 1; +//0 setfog 0; +0 setfog bis_fog \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/1750.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/1750.sqf new file mode 100755 index 0000000..5314404 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/1750.sqf @@ -0,0 +1,8 @@ +setviewdistance 1750; +bis_fog = 0; + +setviewdistance 1750; +0 setovercast 0; +0 setrain 1; +//0 setfog 0; +0 setfog bis_fog \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/2000.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/2000.sqf new file mode 100755 index 0000000..9825fd4 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/2000.sqf @@ -0,0 +1,8 @@ +setviewdistance 2000; +bis_fog = 0; + +setviewdistance 2000; +0 setovercast 0; +0 setrain 1; +//0 setfog 0; +0 setfog bis_fog \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/20000.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/20000.sqf new file mode 100755 index 0000000..fae0fe1 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/20000.sqf @@ -0,0 +1,8 @@ +setviewdistance 20000; +bis_fog = 0; + +setviewdistance 20000; +0 setovercast 0; +0 setrain 1; +//0 setfog 0; +0 setfog bis_fog \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/250.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/250.sqf new file mode 100755 index 0000000..9a44a77 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/250.sqf @@ -0,0 +1,8 @@ +setviewdistance 250; +bis_fog = 0; + +setviewdistance 250; +0 setovercast 0; +0 setrain 1; +//0 setfog 0; +0 setfog bis_fog \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/2500.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/2500.sqf new file mode 100755 index 0000000..4ff37c9 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/2500.sqf @@ -0,0 +1,8 @@ +setviewdistance 2500; +bis_fog = 0; + +setviewdistance 2500; +0 setovercast 0; +0 setrain 1; +//0 setfog 0; +0 setfog bis_fog \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/3000.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/3000.sqf new file mode 100755 index 0000000..bea93d3 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/3000.sqf @@ -0,0 +1,8 @@ +setviewdistance 3000; +bis_fog = 0; + +setviewdistance 3000; +0 setovercast 0; +0 setrain 1; +//0 setfog 0; +0 setfog bis_fog \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/4000.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/4000.sqf new file mode 100755 index 0000000..d1fa104 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/4000.sqf @@ -0,0 +1,8 @@ +setviewdistance 4000; +bis_fog = 0; + +setviewdistance 4000; +0 setovercast 0; +0 setrain 1; +//0 setfog 0; +0 setfog bis_fog \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/500.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/500.sqf new file mode 100755 index 0000000..d47c03e --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/500.sqf @@ -0,0 +1,8 @@ +setviewdistance 500; +bis_fog = 0; + +setviewdistance 500; +0 setovercast 0; +0 setrain 1; +//0 setfog 0; +0 setfog bis_fog \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/5000.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/5000.sqf new file mode 100755 index 0000000..bcf37e8 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/5000.sqf @@ -0,0 +1,8 @@ +setviewdistance 5000; +bis_fog = 0; + +setviewdistance 5000; +0 setovercast 0; +0 setrain 1; +//0 setfog 0; +0 setfog bis_fog \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/750.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/750.sqf new file mode 100755 index 0000000..412728c --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/fog/750.sqf @@ -0,0 +1,8 @@ +setviewdistance 750; +bis_fog = 0; + +setviewdistance 750; +0 setovercast 0; +0 setrain 1; +//0 setfog 0; +0 setfog bis_fog \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/1.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/1.sqf new file mode 100755 index 0000000..ad2975d --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/1.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [ 1, 1, 0, [0, 0, 0, -0.31],[1.9, 1.9, 1.73, 0.7],[0.2, 1.1, -1.5, 1.64]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/10.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/10.sqf new file mode 100755 index 0000000..dd51f6b --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/10.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [1,1,0,[0,0,0,0],[1,1,1.2,0.85],[1,1,-2.5,0]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/11.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/11.sqf new file mode 100755 index 0000000..77e9e51 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/11.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [ 1, 1.3, 0.001, [-0.11, -0.65, -0.76, 0.015],[-5, -1.74, 0.09, 0.86],[-1.14, -0.73, 1.14, -0.09]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/12.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/12.sqf new file mode 100755 index 0000000..28ac385 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/12.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [ 0.9, 1, 0, [-2.32, 0.17, 0.71, 0],[1.09, 0.91, 1.1, 0.27],[-1.24, 3.03, 0.37, -1.69]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/13.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/13.sqf new file mode 100755 index 0000000..6684b9c --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/13.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [ 1.0, 1, -0.003, [0.2, 0.15, -0.0, 0.125],[-2, -1.5, -1, 0.55],[-0.54, -0.53, 0.4, -0.09]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/14.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/14.sqf new file mode 100755 index 0000000..b00b1dc --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/14.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [1, 1.04, -0.004, [0.0, 0.0, 0.0, 0.0], [1, 0.8, 0.6, 0.5], [0.199, 0.587, 0.114, 0.0]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/15.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/15.sqf new file mode 100755 index 0000000..485ffc8 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/15.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [ 1, 0.75, 0, [-3.16, 5, 5, 0],[-4.3, 5, 5, 1.28],[-2.96, 5, 5, 5]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/16.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/16.sqf new file mode 100755 index 0000000..ddcfd8e --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/16.sqf @@ -0,0 +1,4 @@ +colortheme = ppEffectCreate ["colorCorrections", 1501]; +colortheme ppEffectEnable true; +colortheme ppEffectAdjust [ 1, 1, 0, [0, 0, 0, -0.31],[1.9, 2.5, 1.64, 0.7],[0.2, 0.1, -0.5, 1.64]]; +colortheme ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/17.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/17.sqf new file mode 100755 index 0000000..39d5f56 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/17.sqf @@ -0,0 +1,127 @@ +//Snow Storm +//Modified by Audio Rejectz, all credits go to original creators JW - Snow script / BI - Wind & Dust particles +"filmGrain" ppEffectEnable true; +"filmGrain" ppEffectAdjust [0.02, 1, 1, 0.1, 1, false]; +"filmGrain" ppEffectCommit 5; + +setviewdistance 900; +bis_fog = 0.8; + +setviewdistance 900; +0 setovercast 0.9; +0 setrain 1; +//0 setfog 0.8; +0 setfog bis_fog; + +[] spawn { + _delay = 3; + sleep 0.01; + while {true} do { + _delay setovercast 0.9; + _delay setrain 1; + _delay setfog bis_fog; + sleep _delay ; + }; +}; + +//--- Wind & Dust +[] spawn { + waituntil {isplayer player}; + setwind [0.201112,0.204166,true]; + while {true} do { + _ran = ceil random 5; + playsound format ["wind_%1",_ran]; + _obj = vehicle player; + _pos = position _obj; + + //--- Dust + setwind [0.201112*2,0.204166*2,false]; + _velocity = [random 10,random 10,-1]; + _color = [1.0, 0.9, 0.8]; + _alpha = 0.02 + random 0.02; + _ps = "#particlesource" createVehicleLocal _pos; + _ps setParticleParams [["\Ca\Data\ParticleEffects\Universal\universal.p3d", 16, 12, 8], "", "Billboard", 1, 3, [0, 0, -6], _velocity, 1, 1.275, 1, 0, [9], [_color + [0], _color + [_alpha], _color + [0]], [1000], 1, 0, "", "", _obj]; + _ps setParticleRandom [3, [30, 30, 0], [0, 0, 0], 1, 0, [0, 0, 0, 0.01], 0, 0]; + _ps setParticleCircle [0.1, [0, 0, 0]]; + _ps setDropInterval 0.01; + + sleep (random 1); + deletevehicle _ps; + _delay = 10 + random 20; + sleep _delay; + + }; +}; + +//Snow script + +setWind [0, -5, true]; + +_obj = player; + +_pos = position (vehicle _obj); + +_d = 15; +_h = 12; +_h1 = 8; +_h2 = 4; +_density = 20000; + + + +_fog1 = "#particlesource" createVehicleLocal _pos; +_fog1 setParticleParams [ + ["\Ca\Data\ParticleEffects\Universal\universal.p3d" , 16, 12, 13, 0], "", "Billboard", 1, 10, + [0, 0, -6], [0, 0, 0], 1, 1.275, 1, 0, + [7,6], [[1, 1, 1, 0], [1, 1, 1, 0.04], [1, 1, 1, 0]], [1000], 1, 0, "", "", _obj +]; +_fog1 setParticleRandom [3, [55, 55, 0.2], [0, 0, -0.1], 2, 0.45, [0, 0, 0, 0.1], 0, 0]; +_fog1 setParticleCircle [0.001, [0, 0, -0.12]]; +_fog1 setDropInterval 0.01; + +_fog2 = "#particlesource" createVehicleLocal _pos; +_fog2 setParticleParams [ + ["\Ca\Data\ParticleEffects\Universal\universal.p3d" , 16, 12, 13, 0], "", "Billboard", 1, 10, + [0, 0, -6], [0, 0, 0], 1, 1.275, 1, 0, + [7,6], [[1, 1, 1, 0], [1, 1, 1, 0.04], [1, 1, 1, 0]], [1000], 1, 0, "", "", _obj +]; +_fog2 setParticleRandom [3, [55, 55, 0.2], [0, 0, -0.1], 2, 0.45, [0, 0, 0, 0.1], 0, 0]; +_fog2 setParticleCircle [0.001, [0, 0, -0.12]]; +_fog2 setDropInterval 0.01; + +_fog3 = "#particlesource" createVehicleLocal _pos; +_fog3 setParticleParams [ + ["\Ca\Data\ParticleEffects\Universal\universal.p3d" , 16, 12, 13, 0], "", "Billboard", 1, 10, + [0, 0, -6], [0, 0, 0], 1, 1.275, 1, 0, + [7,6], [[1, 1, 1, 0], [1, 1, 1, 0.04], [1, 1, 1, 0]], [1000], 1, 0, "", "", _obj +]; +_fog3 setParticleRandom [3, [55, 55, 0.2], [0, 0, -0.1], 2, 0.45, [0, 0, 0, 0.1], 0, 0]; +_fog3 setParticleCircle [0.001, [0, 0, -0.12]]; +_fog3 setDropInterval 0.01; + + +while {true} do +{ +_a = 0; +while { _a < _density } do +{ +_pos = position player; +_fog1 setpos _pos; +_fog2 setpos _pos; +_fog3 setpos _pos; +0 setRain 0; + +_dpos = [((_pos select 0) + (_d - (random (2*_d))) + ((velocity vehicle player select 0)*1)),((_pos select 1) + (_d - (random (2*_d))) + ((velocity vehicle player select 0)*1)),((_pos select 2) + _h)]; +drop ["\ca\data\cl_water", "", "Billboard", 1, 7, _dpos, [0,0,-1], 1, 0.0000001, 0.000, 0.7, [0.07], [[1,1,1,0], [1,1,1,1], [1,1,1,1], [1,1,1,1]], [0,0], 0.2, 1.2, "", "", ""]; _a = _a + 1; + + +_dpos = [((_pos select 0) + (_d - (random (2*_d))) + ((velocity vehicle player select 0)*1)),((_pos select 1) + (_d - (random (2*_d))) + ((velocity vehicle player select 0)*1)),((_pos select 2) + _h1)]; +drop ["\ca\data\cl_water", "", "Billboard", 1, 7, _dpos, [0,0,-1], 1, 0.0000001, 0.000, 0.7, [0.07], [[1,1,1,0], [1,1,1,1], [1,1,1,1], [1,1,1,1]], [0,0], 0.2, 1.2, "", "", ""]; + + +_dpos = [((_pos select 0) + (_d - (random (2*_d))) + ((velocity vehicle player select 0)*1)),((_pos select 1) + (_d - (random (2*_d))) + ((velocity vehicle player select 0)*1)),((_pos select 2) + _h2)]; +drop ["\ca\data\cl_water", "", "Billboard", 1, 7, _dpos, [0,0,-1], 1, 0.0000001, 0.000, 0.7, [0.07], [[1,1,1,0], [1,1,1,1], [1,1,1,1], [1,1,1,1]], [0,0], 0.2, 1.2, "", "", ""]; + +}; +sleep 0.2; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/2.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/2.sqf new file mode 100755 index 0000000..e53877e --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/2.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [1, 1, 0, [0.0, 0.0, 0.0, 0.0], [0.8*2, 0.5*2, 0.0, 0.7], [0.9, 0.9, 0.9, 0.0]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/3.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/3.sqf new file mode 100755 index 0000000..f3343de --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/3.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [ 1, 0.21, 0, [0.1, 0, 0, 0],[3.59, 3.49, 3.78, 0.83],[-0.31, 0.08, 3.79, 5]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/4.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/4.sqf new file mode 100755 index 0000000..380579e --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/4.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [ 1, 1, 0, [1.01, -2.46, -1.23, 0],[2.11, 1.6, 0.71, 0.8],[1.43, 0.56, 3.69, 0.31]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/5.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/5.sqf new file mode 100755 index 0000000..f7370b0 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/5.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [1,1,0,[0,0,0,0],[2,0,0,1.25],[2.5,-2.5,0,0]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/6.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/6.sqf new file mode 100755 index 0000000..6072c69 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/6.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [1,0.6,0,[0,0,0,0],[3,3,1,0.75],[2.5,2.5,-2.75,0]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/7.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/7.sqf new file mode 100755 index 0000000..f13cc31 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/7.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [ 1, 1, 0.01, [-0.11, -0.65, -0.76, 0.015],[-5, 2.74, 0.09, 0.95],[-1.14, -0.73, 1.14, -0.09]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/8.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/8.sqf new file mode 100755 index 0000000..38b7a92 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/8.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [ 0.2050, 35, 0, [6.32, 0.57, 10.71, -0.0015],[1.29, 0.81, 1.2, 0.67],[-1.24, 2.03, 0.37, -3.69]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/9.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/9.sqf new file mode 100755 index 0000000..4b4c60a --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/sky/9.sqf @@ -0,0 +1,4 @@ +_hndl = ppEffectCreate ["colorCorrections", 1501]; +_hndl ppEffectEnable true; +_hndl ppEffectAdjust [ .079990001, 7, 0.055, [1.320, 1.57, 1.31, -.022],[2.05, 1.8611, 1.62, .6807],[-1.954, 3.95553, 4.898, 5.19]]; +_hndl ppEffectCommit 0; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/bike.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/bike.sqf new file mode 100755 index 0000000..a25248b --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/bike.sqf @@ -0,0 +1,35 @@ +_itemsPlayer = items player; +_hasToolbox = "ItemToolbox" in _itemsPlayer; +if !(_hasToolbox) exitWith {cutText [format["You need a tool box to create a bike"], "PLAIN DOWN"];}; +if (dayz_combat == 1) then { + cutText [format["You are in Combat and cannot build a bike."], "PLAIN DOWN"]; +} else { + player removeAction s_player_deploybike; + player playActionNow "Medic"; + r_interrupt = false; + player removeWeapon "ItemToolbox"; + _dis=10; + _sfx = "repair"; + [player,_sfx,0,false,_dis] call dayz_zombieSpeak; + [player,_dis,true,(getPosATL player)] spawn player_alertZombies; + + sleep 6; + + _object = "Old_bike_TK_CIV_EP1" createVehicle (position player); + _object setVariable ["MalSar",1,true]; + _object attachto [player,[0.0,3.0,0.5]]; + sleep 3; + detach _object; + player reveal _object; + + cutText [format["You've used your toolbox to build a bike."], "PLAIN DOWN"]; + + r_interrupt = false; + player switchMove ""; + player playActionNow "stop"; + + sleep 10; + + cutText [format["Warning: Spawned Bikes DO NOT SAVE after server restart!"], "PLAIN DOWN"]; + +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/bloodbag.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/bloodbag.sqf new file mode 100755 index 0000000..e27dee0 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/bloodbag.sqf @@ -0,0 +1,153 @@ +////////////////////////////////////////////////////////////////////////////////////////////// +// Script writen by Krixes // +// Infection chance and some comments added by Player2 // +// Combat check added by istealth // +// // +// Version 1.4 // +// // +// Change Log: // +// 1: Added bloodbag use timer // +// 2: Added a timer for the amount of time before player can use self bloodbag again // +////////////////////////////////////////////////////////////////////////////////////////////// + +private ["_bloodAmount","_humanityBool","_infectionChance","_humanityNegBool","_humanityNegAmount","_humanityAmount","_infectedLifeLost","_infectedLifeBool","_lastBloodbag","_bloodbagLastUsedTime","_bloodbagTime","_bloodbagUseTime","_bloodbagUsageTime","_incombat","_timeout","_hasBagItem","_needsBlood"]; + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Config Start-----------------------------------------------------------------------------------------------------------------------// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +_bloodAmount = 12000; // Amount of blood to give to player +_bloodbagUseTime = 5; // Amount of time it takes in second for the player to use the self bloodbag +_bloodbagLastUsedTime = 300; // Amount of time in seconds before player can use self bloodbag again after a succesful use + +_infectionChance = 10; // Percent chance of player infection on self bloodbag (10 = 10% | 2 = 50% | 1 = 100%) +_infectedLifeBool = false; // Whether the player can loose life if infected (True = On | False = off) +_infectedLifeLost = 1000; // Amount of life to loose in becomes infected + +_humanityBool = false; // Whether the player can get humanity from giving self a bloodbag (True = On | False = off) +_humanityAmount = 50; // Amount of humanity to give player if _humanityBool is true (250 is default for normal bloodbags) + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Config End-------------------------------------------------------------------------------------------------------------------------// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + +/////////////////////////////////////////////////////////////////////////////// +// Everything below need not be modified unless you know what you are doing! // +/////////////////////////////////////////////////////////////////////////////// + +_bloodbagTime = time - lastBloodbag; // Variable used for easy reference in determining the self bloodbag cooldown +_bloodbagUsageTime = time; +_hasBagItem = "ItemBloodbag" in magazines player; +_needsBlood = if (r_player_blood < 12000) then { true } else { false }; + +if (!_hasBagItem) exitWith { //If player doesn't have bloodbag then they can't self blood + cutText [format["You need a bloodbag to do this."], "PLAIN DOWN"]; //display text to let player know they need a blood bag +}; + +if (!_needsBlood) exitWith { //If they don't need blood then they can't self blood + cutText [format["Are you crazy? You already have full blood."], "PLAIN DOWN"]; //display text to let player know they have full blood +}; +_timeout = player getVariable["combattimeout", 0]; +_inCombat = if (_timeout >= diag_tickTime) then { true } else { false }; + +if(_bloodbagTime < _bloodbagLastUsedTime) exitWith { // If cooldown is not done then exit script + cutText [format["You may not use Self Bloodbag this soon please wait %1!",(_bloodbagTime - _bloodbagLastUsedTime)], "PLAIN DOWN"]; //display text at bottom center of screen when players cooldown is not done +}; + +if (_inCombat) then { // Check if in combat + cutText [format["You are in Combat and cannot give yourself a Bloodbag"], "PLAIN DOWN"]; //display text at bottom center of screen when in combat +} else { + + player removeAction s_player_selfBloodbag; //remove the action from users scroll menu + + player playActionNow "Medic"; //play bloodbag animation + + //////////////////////////////////////////////// + // Fancy cancel if interrupted addition start // + //////////////////////////////////////////////// + r_interrupt = false; // public interuppt variable + _animState = animationState player; // get the animation state of the player + r_doLoop = true; // while true sets whether to continue self bloodbagging + _started = false; // this starts as false as a check + _finished = false; // this starts as false and when true later sets players blood + while {r_doLoop} do { + _animState = animationState player; // keep checking to make sure player is in correct animation + _isMedic = ["medic",_animState] call fnc_inString; // checking to make sure the animstate is the medic animation still + if (_isMedic) then { + _started = true; // this is a check to make sure everything is still ok + }; + if(!_isMedic && !r_interrupt && (time - _bloodbagUsageTime) < _bloodbagUseTime) then { + player playActionNow "Medic"; //play bloodbag animation + _isMedic = true; + }; + if (_started && !_isMedic && (time - _bloodbagUsageTime) > _bloodbagUseTime) then { + r_doLoop = false; // turns off the loop + _finished = true; // set finished to true to finish the self bloodbag and give player health/humanity + lastBloodbag = time; // the last self bloodbag time + }; + if (r_interrupt) then { + r_doLoop = false; // if interuppted turns loop off early so _finished is never true + }; + sleep 0.1; + }; + r_doLoop = false; // make sure loop is off on successful self bloodbag + /////////////////////////////////////////////// + // Fancy cancel if interrupted addition end // + ////////////////////////////////////////////// + + if (_finished) then { + player removeMagazine "ItemBloodbag"; //remove the used bloodbag from inventory + + r_player_blood = r_player_blood + _bloodAmount; //set players LOCAL blood to a certain ammount + + if(r_player_blood > 12000) then { + r_player_blood = 12000; // If players blood is greater then max amount allowed set it to max allowed (this check keeps an error at bay) + }; + + // check if infected + if (random(_infectionChance) < 1) then { + r_player_infected = true; //set players client to show infection + player setVariable["USEC_infected",true,true]; //tell the server the player is infected + cutText [format["You have used a bloodbag on yourself but the bloodbag was infected!"], "PLAIN DOWN"]; //display text at bottom center of screen if infected + + // check for if loosing life on infection is turned on + if(_infectedLifeBool) then { + r_player_blood = r_player_blood - _infectedLifeLost; //set players LOCAL blood to a certain ammount + player setVariable["USEC_BloodQty",r_player_blood,true]; //save this blood ammount to the database + } else { // if loosing life is turned off + r_player_lowblood = false; //set lowblood setting to false + 10 fadeSound 1; //slowly fade their volume back to maximum + "dynamicBlur" ppEffectAdjust [0]; "dynamicBlur" ppEffectCommit 5; //disable post processing blur effect + "colorCorrections" ppEffectAdjust [1, 1, 0, [1, 1, 1, 0.0], [1, 1, 1, 1], [1, 1, 1, 1]];"colorCorrections" ppEffectCommit 5; //give them their colour back + r_player_lowblood = false; //just double checking their blood isnt low + player setVariable["USEC_BloodQty",r_player_blood,true]; //save this blood ammount to the database + }; + } else { // if not infected + r_player_lowblood = false; //set lowblood setting to false + 10 fadeSound 1; //slowly fade their volume back to maximum + "dynamicBlur" ppEffectAdjust [0]; "dynamicBlur" ppEffectCommit 5; //disable post processing blur effect + "colorCorrections" ppEffectAdjust [1, 1, 0, [1, 1, 1, 0.0], [1, 1, 1, 1], [1, 1, 1, 1]];"colorCorrections" ppEffectCommit 5; //give them their colour back + r_player_lowblood = false; //just double checking their blood isnt low + player setVariable["USEC_BloodQty",r_player_blood,true]; //save this blood ammount to the database + + cutText [format["You have used a bloodbag on yourself!"], "PLAIN DOWN"]; //display text at bottom center of screen on succesful self bloodbag + }; + + // check if giving player humanity is on + if(_humanityBool) then { + [player,_humanityAmount] call player_humanityChange; // Set players humanity based on amount listed in config area + }; + } else { + // this is for handling if interrupted + r_interrupt = false; + player switchMove ""; + player playActionNow "stop"; + cutText [format["You have interrupted giving yourself a bloodbag!"], "PLAIN DOWN"]; //display text at bottom center of screen on interrupt + }; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/flipvehicle.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/flipvehicle.sqf new file mode 100755 index 0000000..0a38fb0 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/flipvehicle.sqf @@ -0,0 +1 @@ +(getPos player nearestObject "LandVehicle") setVectorUp [0, 0, 1]; _temp = (getPos player nearestObject "LandVehicle"); _type_of = typeOf _temp; titleText ["Vehicle flipped.", "PLAIN DOWN"];titleFadeOut 3; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/gyro.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/gyro.sqf new file mode 100755 index 0000000..961bc39 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/gyro.sqf @@ -0,0 +1,41 @@ +_itemsPlayer = items player; +_magazinesPlayer = magazines player; +_hasToolbox = "ItemToolbox" in _itemsPlayer; +_hasEngine = "PartEngine" in _magazinesPlayer; +_hasMainRotor = "PartVRotor" in _magazinesPlayer; +if !(_hasToolbox && _hasEngine && _hasMainRotor) exitWith {cutText [format["You need a Main Rotor Assembly, Engine parts, and a Tool box to create a Gyrocopter"], "PLAIN DOWN"];}; +if (dayz_combat == 1) then { + cutText [format["You are in Combat and cannot build a GyroCopter."], "PLAIN DOWN"]; +} else { + player playActionNow "Medic"; + r_interrupt = false; + player removeMagazine "PartVRotor"; + player removeMagazine "PartEngine"; + player removeWeapon "ItemToolbox"; + _dis=10; + _sfx = "repair"; + [player,_sfx,0,false,_dis] call dayz_zombieSpeak; + [player,_dis,true,(getPosATL player)] spawn player_alertZombies; + + sleep 6; + + _object = "CSJ_GyroC" createVehicle (position player); + _object setVariable ["MalSar",1,true]; + + _object attachto [player,[0.0,3.0,2.5]]; + _object setfuel 0.5; + sleep 3; + detach _object; + player reveal _object; + + cutText [format["You've made a gyrocopter!"], "PLAIN DOWN"]; + + r_interrupt = false; + player switchMove ""; + player playActionNow "stop"; + + sleep 10; + + cutText [format["Warning: Spawned GyroCopters DO NOT SAVE after server restart!"], "PLAIN DOWN"]; + +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/help.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/help.sqf new file mode 100755 index 0000000..9c6b31c --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/help.sqf @@ -0,0 +1,14 @@ +private["_separator1","_txt"]; +cutText ["HOLD LEFT-CLICK ON TEXT AND DRAG UP AND DOWN, PRESS ESCAPE TO CLEAR OR CONTINUE ON BOTTOM!", "PLAIN DOWN"]; +sleep 1; +"Hints & Tips" hintC [ + "*North Airfield is the best place to get loot. "+str(BBFlagRadius)+" meters", + "*Buy empty fuel barrels at Prig, and refuel them there and sell for quick cash.", + "*Mk16's, Mk17's, AS50's, RPG's, AA-12, and all L85's are added in the loot.", + "*You need a plot pole to build.", + "*Press Insert for the debug monitor.", + "*Deploy a bike with your action menu!", + "*You can build anywhere you want, including Castles or Caves!", + "*We also have a DayZ Vanilla server, check the website for info.", + "*Join the teamspeak to group up with a team! 198.100.153.190:7087" + ]; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/motor.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/motor.sqf new file mode 100755 index 0000000..531611a --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/motor.sqf @@ -0,0 +1,40 @@ +_itemsPlayer = items player; +_magazinesPlayer = magazines player; +_hasToolbox = "ItemToolbox" in _itemsPlayer; +_hasEngine = "PartEngine" in _magazinesPlayer; +if !(_hasToolbox && _hasEngine) exitWith {cutText [format["You need Engine parts and a tool box to create a motorcycle"], "PLAIN DOWN"];}; +if (dayz_combat == 1) then { + cutText [format["You are in Combat and cannot build a motorcycle."], "PLAIN DOWN"]; +} else { + + player playActionNow "Medic"; + r_interrupt = false; + player removeMagazine "PartEngine"; + player removeWeapon "itemToolbox"; + _dis=10; + _sfx = "repair"; + [player,_sfx,0,false,_dis] call dayz_zombieSpeak; + [player,_dis,true,(getPosATL player)] spawn player_alertZombies; + + sleep 6; + + _object = "TT650_Civ" createVehicle (position player); + _object setVariable ["MalSar",1,true]; + + _object attachto [player,[0.0,3.0,2.5]]; + _object setfuel 0.5; + sleep 3; + detach _object; + player reveal _object; + + cutText [format["You've made a motorcycle!"], "PLAIN DOWN"]; + + r_interrupt = false; + player switchMove ""; + player playActionNow "stop"; + + sleep 10; + + cutText [format["Warning: Spawned Motorcycles DO NOT SAVE after server restart!"], "PLAIN DOWN"]; + +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/pack.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/pack.sqf new file mode 100755 index 0000000..74ed862 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/pack.sqf @@ -0,0 +1,91 @@ +_cursorTarget = cursorTarget; +_typeOfCursorTarget = typeOf _cursorTarget; + +if !(_typeOfCursorTarget == "CSJ_GyroC") then { + cutText [format["You must be looking at the created vehicle to repack it"], "PLAIN DOWN"]; +}; + +if !(_typeOfCursorTarget == "TT650_Civ") then { + cutText [format["You must be looking at the created vehicle to repack it"], "PLAIN DOWN"]; +}; + +if !(_typeOfCursorTarget == "Old_bike_TK_CIV_EP1") then { + cutText [format["You must be looking at the created vehicle to repack it"], "PLAIN DOWN"]; +}; + +if(_typeOfCursorTarget == "CSJ_GyroC") then { + if (dayz_combat == 1) then { + cutText [format["You are in Combat and cannot Re-Pack your gyrocopter"], "PLAIN DOWN"]; + } else { + player removeAction s_player_deploybike6; + player playActionNow "Medic"; + r_interrupt = false; + deletevehicle cursortarget; + _dis=10; + _sfx = "repair"; + [player,_sfx,0,false,_dis] call dayz_zombieSpeak; + [player,_dis,true,(getPosATL player)] spawn player_alertZombies; + + sleep 6; + + player addWeapon "ItemToolbox"; + player addMagazine "PartEngine"; + player addMagazine "PartVRotor"; + + cutText [format["You have packed your gyrocopter. Your parts have been added to your inventory."], "PLAIN DOWN"]; + + r_interrupt = false; + player switchMove ""; + player playActionNow "stop"; + }; +}; + +if(_typeOfCursorTarget == "TT650_Civ") then { + if (dayz_combat == 1) then { + cutText [format["You are in Combat and cannot Re-Pack your motorcycle"], "PLAIN DOWN"]; + } else { + player removeAction s_player_deploybike4; + player playActionNow "Medic"; + r_interrupt = false; + deletevehicle cursortarget; + _dis=10; + _sfx = "repair"; + [player,_sfx,0,false,_dis] call dayz_zombieSpeak; + [player,_dis,true,(getPosATL player)] spawn player_alertZombies; + + sleep 6; + + player addWeapon "ItemToolbox"; + player addMagazine "PartEngine"; + + cutText [format["You have packed your motorcylce. Your parts have been added to your inventory."], "PLAIN DOWN"]; + + r_interrupt = false; + player switchMove ""; + player playActionNow "stop"; + }; +}; + +if(_typeOfCursorTarget == "Old_bike_TK_CIV_EP1") then { + if (dayz_combat == 1) then { + cutText [format["You are in Combat and cannot re-pack your bike."], "PLAIN DOWN"]; + } else { + player removeAction s_player_deploybike2; + player playActionNow "Medic"; + r_interrupt = false; + player addWeapon "ItemToolbox"; + deletevehicle cursortarget; + _dis=10; + _sfx = "repair"; + [player,_sfx,0,false,_dis] call dayz_zombieSpeak; + [player,_dis,true,(getPosATL player)] spawn player_alertZombies; + + sleep 6; + + cutText [format["You have packed your bike and been given back your toolbox"], "PLAIN DOWN"]; + + r_interrupt = false; + player switchMove ""; + player playActionNow "stop"; + }; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/suicide.sqf b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/suicide.sqf new file mode 100755 index 0000000..9550219 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/ActionMenu/tools/suicide.sqf @@ -0,0 +1,30 @@ +private ["_Secondary"]; +_Secondary = currentWeapon player; +suicide_answer=nil; +canAbort = true; +DamiSpawn = +[ + ["Suicide Confirmation",true], + ["Are you sure?", [-1], "", -5, [["expression", ""]], "1", "0"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["No", [2], "", -5, [["expression", "suicide_answer=false;"]], "1", "1"], + ["Yes", [3], "", -5, [["expression", "suicide_answer=true;"]], "1", "1"], + ["", [-1], "", -5, [["expression", ""]], "1", "0"], + ["Exit", [-1], "", -3, [["expression", "suicide_answer=false;"]], "1", "1"] +]; +showCommandingMenu "#USER:DamiSpawn"; +waitUntil {((!isNil 'suicide_answer')||(commandingMenu == ""))}; +if (isNil 'suicide_answer') then {suicide_answer=false;}; +if (suicide_answer) then +{ + canAbort = false; + player playmove "ActsPercMstpSnonWpstDnon_suicide1B"; + sleep 8.4; + player fire _Secondary; + _unit = player; + _selection = "body"; + _damage = 1; + _unit setHit[_selection,_damage]; +} else { + systemChat ("Suicide canceled."); +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/AirVehicles.hpp b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/AirVehicles.hpp new file mode 100755 index 0000000..474f36d --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/AirVehicles.hpp @@ -0,0 +1,43 @@ +//Planes +class Category_46 { + class GNT_C185U_DZ {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class GNT_C185_DZ {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class GNT_C185R_DZ {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class GNT_C185C_DZ {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + //Green + class AN2_DZ {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + //Red and white + class AN2_2_DZ {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + //Green and white + class An2_2_TK_CIV_EP1_DZ {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class C130J_US_EP1_DZ {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class MV22_DZ {type = "trade_any_vehicle";buy[] = {50000,"worth"};sell[] = {20000,"worth"};}; + class L39_ACR {type = "trade_any_vehicle";buy[] = {100000,"worth"};sell[] = {50000,"worth"};}; +}; + +//Helicopters +class Category_47 { + class CSJ_GyroC_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class CSJ_GyroC_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class CSJ_GyroC {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class CSJ_GyroCover {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class CSJ_GyroP {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class AH6X_DZ {type = "trade_any_vehicle";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class MH6J_DZ {type = "trade_any_vehicle";buy[] = {8000,"worth"};sell[] = {4000,"worth"};}; + class MTVR_Bird_DZE {type = "trade_any_vehicle";buy[] = {8000,"worth"};sell[] = {4000,"worth"};}; + class pook_H13_civ_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {6000,"worth"};}; + class pook_H13_civ_white_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {6000,"worth"};}; + class pook_H13_civ_slate_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {6000,"worth"};}; + class pook_H13_civ_black_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {6000,"worth"};}; + class pook_H13_civ_yellow_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {6000,"worth"};}; + class pook_medevac_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {6000,"worth"};}; + class pook_medevac_CDF_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {6000,"worth"};}; + class pook_medevac_CIV_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {6000,"worth"};}; + class Mi17_Civilian_DZ {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_medevac_CDF_DZ {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_medevac_Ins_DZ {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_medevac_RU_DZ {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH60M_MEV_EP1_DZ {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BAF_Merlin_DZE {type = "trade_any_vehicle";buy[] = {30000,"worth"};sell[] = {10000,"worth"};}; + class CH53_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Ammunition.hpp b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Ammunition.hpp new file mode 100755 index 0000000..4e59218 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Ammunition.hpp @@ -0,0 +1,163 @@ +//Pistol Ammo +class Category_19 { + class 7Rnd_9x17_PPK {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class 8Rnd_9x18_Makarov {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class 8Rnd_9x18_MakarovSD {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 20Rnd_9x18_APS {type = "trade_items";buy[] = {8,"worth"};sell[] = {4,"worth"};}; + class 20Rnd_9x18_APSSD {type = "trade_items";buy[] = {80,"worth"};sell[] = {40,"worth"};}; + class 8Rnd_762x25_TT33 {type = "trade_items";buy[] = {6,"worth"};sell[] = {3,"worth"};}; + class 8Rnd_9x19_P38 {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class 13Rnd_9x19_BHP {type = "trade_items";buy[] = {8,"worth"};sell[] = {4,"worth"};}; + class 15Rnd_9x19_P226 {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class 8Rnd_9x19_MK22 {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class 8Rnd_9x19_MK22SD {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 15Rnd_9x19_M9 {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class 15Rnd_9x19_M9SD {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 17Rnd_9x19_glock17 {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class 17Rnd_9x19_glock17SD {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 18Rnd_9x19_Phantom {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class 18Rnd_9x19_PhantomSD {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 20Rnd_9x19_M93R {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 32Rnd_9x19_TEC9 {type = "trade_items";buy[] = {30,"worth"};sell[] = {10,"worth"};}; + class 33Rnd_9x19_G18 {type = "trade_items";buy[] = {30,"worth"};sell[] = {10,"worth"};}; + class 15Rnd_10x22_p99 {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class 15Rnd_10x22_p99_sd {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 7Rnd_45ACP_1911 {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class 7Rnd_45ACP_1911SD {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class 15Rnd_45ACP_USP {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class 15Rnd_45ACP_USPSD {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class 7Rnd_50AE_Deagle {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class 6Rnd_45ACP {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class 6Rnd_44Magnum {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class 6Rnd_357Magnum {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; +}; + +//Submachine Gun Ammo +class Category_20 { + class 20Rnd_B_765x17_Ball {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 30Rnd_9x19_UZI {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 30Rnd_9x19_UZI_SD {type = "trade_items";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class 30Rnd_9x19_MP5 {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 30Rnd_9x19_MP5SD {type = "trade_items";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class 30Rnd_9x19_TMP {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 30Rnd_9x19_TMPSD {type = "trade_items";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class 32Rnd_9x19_STEN {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 32Rnd_9x19_MAT49 {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 70Rnd_9x19_M31 {type = "trade_items";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class 64Rnd_9x19_Bizon {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 64Rnd_9x19_SD_Bizon {type = "trade_items";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class 40Rnd_46x30_mp7 {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 40Rnd_46x30_sd_mp7 {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class 33Rnd_45ACP_KRISS {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class 33Rnd_45ACP_KRISSSD {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class 25Rnd_45ACP_UMP {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class 25Rnd_45ACP_UMPSD {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class 50Rnd_57x28_P90 {type = "trade_items";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class 50Rnd_57x28_P90SD {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; +}; + +//Single-shot/Shotgun Ammo +class Category_21 { + class 1Rnd_Bolt_Tranquilizer {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class 12Rnd_Quiver_Wood {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class 350Rnd_BB_Magazine {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class 2Rnd_12Gauge_Buck {type = "trade_items";buy[] = {1,"worth"};sell[] = {1,"worth"};}; + class 2Rnd_12Gauge_Slug {type = "trade_items";buy[] = {1,"worth"};sell[] = {1,"worth"};}; + class 8Rnd_12Gauge_Slug {type = "trade_items";buy[] = {4,"worth"};sell[] = {4,"worth"};}; + class 8Rnd_12Gauge_Buck {type = "trade_items";buy[] = {4,"worth"};sell[] = {4,"worth"};}; + class 15Rnd_W1866_Slug {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class 10Rnd_303British {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class 5Rnd_762x54_Mosin {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; +}; + +//Assault Rifle Ammo +class Category_22 { + class 30Rnd_6x35_KAC {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class 30Rnd_556x45_Aug {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class 30Rnd_556x45_Stanag {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class 30Rnd_556x45_StanagSD {type = "trade_items";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class 30Rnd_556x45_G36 {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class 30Rnd_556x45_G36SD {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 30Rnd_545x39_AK {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class 30Rnd_545x39_AKSD {type = "trade_items";buy[] = {30,"worth"};sell[] = {10,"worth"};}; + class 30Rnd_762x39_AK47 {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 30Rnd_762x39_SA58 {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 30Rnd_762x39_RK95 {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 30Rnd_762x39_RK95SD {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class 30Rnd_762x39_Groza1 {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 30Rnd_762x39_Groza1SD {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class 20Rnd_9x39_Groza9 {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class 20Rnd_9x39_Groza9SD {type = "trade_items";buy[] = {300,"worth"};sell[] = {100,"worth"};}; + class 20Rnd_9x39_SP5_VSS {type = "trade_items";buy[] = {300,"worth"};sell[] = {100,"worth"};}; + class 20Rnd_762x51_FNFAL {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class 20Rnd_762x51_G3 {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class ACR_30Rnd_680x43 {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class ACR_30Rnd_680x43_SD {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class 20Rnd_762x51_DMR {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class 20Rnd_762x51_DMRSD {type = "trade_items";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class 20Rnd_762x51_B_SCAR {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class 20Rnd_762x51_SB_SCAR {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class 20Rnd_762x51_HK417 {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class 20Rnd_762x51_HK417SD {type = "trade_items";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; +}; + +//Sniper Rifle Ammo +class Category_23 { + class 5Rnd_17HMR {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class 20Rnd_9x39_SP5_VSS {type = "trade_items";buy[] = {300,"worth"};sell[] = {100,"worth"};}; + class 10Rnd_762x54_SVD {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class 5Rnd_762x51_M24 {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class 10Rnd_762x51_CZ750 {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class 20Rnd_762x51_DMR {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class 20Rnd_762x51_B_SCAR {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class 20Rnd_762x51_SB_SCAR {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; +}; + +//Light Machine Gun Ammo +class Category_24 { + class 100Rnd_556x45_BetaCMag {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class 100Rnd_556x45_M249 {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class 200Rnd_556x45_M249 {type = "trade_items";buy[] = {-1,"worth"};sell[] = {200,"worth"};}; + class 200Rnd_556x45_L110A1 {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class 100Rnd_762x51_M240 {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class 200Rnd_762x51_M240 {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class 50Rnd_762x54_UK59 {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class 75Rnd_545x39_RPK {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class 75Rnd_762x39_RPK {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class 100Rnd_762x54_PK {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; +}; + +//Smoke Grenades +class Category_25 { + class SmokeShell {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class SmokeShellGreen {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class SmokeShellRed {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class SmokeShellYellow {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class SmokeShellPurple {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class SmokeShellBlue {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class SmokeShellOrange {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class 1Rnd_Smoke_M203 {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class 1Rnd_SmokeYellow_M203 {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class 1Rnd_SmokeGreen_M203 {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class 1Rnd_SmokeRed_M203 {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class 1Rnd_Smoke_GP25 {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class 1Rnd_SmokeRed_GP25 {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class 1Rnd_SmokeYellow_GP25 {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class 1Rnd_SmokeGreen_GP25 {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; +}; + +//Chem-lites/Flares +class Category_26 { + class HandRoadFlare {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class HandChemBlue {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class HandChemGreen {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class HandChemRed {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FlareGreen_M203 {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FlareWhite_M203 {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FlareYellow_M203 {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FlareRed_M203 {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FlareWhite_GP25 {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FlareGreen_GP25 {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FlareRed_GP25 {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FlareYellow_GP25 {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Bandit.hpp b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Bandit.hpp new file mode 100755 index 0000000..ee84308 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Bandit.hpp @@ -0,0 +1,493 @@ +//Air Vehicles +class Category_6 { + class pook_transport_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class pook_transport_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class pook_transport_CDF_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class pook_transport_CDF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class pook_gunship_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {10000,"worth"};}; + class pook_gunship_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class pook_gunship_CDF_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {10000,"worth"};}; + class pook_gunship_CDF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class AH6J_EP1_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class AH6J_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_CDF_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_CDF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_WD_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_WD_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_2_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_2_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_DES_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_DES_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_GREY_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_GREY_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_BLACK_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_BLACK_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_SAR_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_SAR_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_WINTER_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_TK_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_UN_CDF_EP1_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_UN_CDF_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_CDF_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_CDF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_DES_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_DES_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_GREEN_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_GREEN_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_BLUE_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_BLUE_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_BLACK_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_BLACK_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi171Sh_CZ_EP1_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi171Sh_CZ_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_WINTER_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class MH60S_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class MH60S_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Ka60_GL_PMC_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Ka60_GL_PMC_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class AW159_Lynx_BAF_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class AW159_Lynx_BAF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH60M_EP1_DZE {type = "trade_any_vehicle";buy[] = {30000,"worth"};sell[] = {10000,"worth"};}; + class UH60M_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1Y_DZE {type = "trade_any_vehicle";buy[] = {30000,"worth"};sell[] = {10000,"worth"};}; + class UH1Y_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class CH_47F_EP1_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class CH_47F_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {20000,"worth"};}; + class CH_47F_EP1_Black_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class CH_47F_EP1_Black_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {20000,"worth"};}; + class CH_47F_EP1_GREY_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class CH_47F_EP1_GREY_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {20000,"worth"};}; + class CH_47F_EP1_DES_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class CH_47F_EP1_DES_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {20000,"worth"};}; + class AH1Z_DZE {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {300000,"worth"};}; + class F35B {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {400000,"worth"};}; +}; + +//Ground Vehicles +class Category_7 { + class Pickup_PK_TK_GUE_EP1_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class Pickup_PK_TK_GUE_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class Pickup_PK_GUE_DZE {type = "trade_any_vehicle";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class Pickup_PK_GUE_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class Pickup_PK_INS_DZE {type = "trade_any_vehicle";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class Pickup_PK_INS_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class Offroad_DSHKM_Gue_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class Offroad_DSHKM_Gue_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class ArmoredSUV_PMC_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class ArmoredSUV_PMC_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class LandRover_MG_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class LandRover_MG_TK_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {3000,"worth"};}; + class LandRover_Special_CZ_EP1_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class LandRover_Special_CZ_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class UAZ_MG_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class UAZ_MG_TK_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {3000,"worth"};}; + class UAZ_MG_CDF_DZE {type = "trade_any_vehicle";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class UAZ_MG_CDF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {3000,"worth"};}; + class UAZ_MG_INS_DZE {type = "trade_any_vehicle";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class UAZ_MG_INS_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {3000,"worth"};}; + class UAZ_AGS30_CDF_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_CDF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_INS_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_INS_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_TK_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_RU_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_RU_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_RUST_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_RUST_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_WINTER_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_WINTER_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class BAF_Jackal2_L2A1_D_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BAF_Jackal2_L2A1_D_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class BAF_Jackal2_L2A1_W_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BAF_Jackal2_L2A1_W_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class BAF_Jackal2_GMG_D_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BAF_Jackal2_GMG_D_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class BAF_Jackal2_GMG_W_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BAF_Jackal2_GMG_W_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class BTR40_MG_TK_GUE_EP1_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class BTR40_MG_TK_GUE_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class BTR40_MG_TK_INS_EP1_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class BTR40_MG_TK_INS_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class GAZ_Vodnik_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class GAZ_Vodnik_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class GAZ_Vodnik_HMG_DZE {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {200000,"worth"};}; + class BMP2_Ambul_CDF_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class BMP2_Ambul_INS_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class BMP2_Ambul_Winter_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class BMP2_HQ_CDF_DZE {type = "trade_any_vehicle";buy[] = {80000,"worth"};sell[] = {40000,"worth"};}; + class BMP2_HQ_INS_DZE {type = "trade_any_vehicle";buy[] = {80000,"worth"};sell[] = {40000,"worth"};}; + class BMP2_HQ_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {80000,"worth"};sell[] = {40000,"worth"};}; + class BRDM2_HQ_TK_GUE_EP1_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BRDM2_HQ_TK_GUE_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class BRDM2_HQ_CDF_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BRDM2_HQ_RUST_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BRDM2_HQ_WINTER_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BRDM2_HQ_CDF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class BRDM2_CDF_DZE {type = "trade_any_vehicle";buy[] = {250000,"worth"};sell[] = {130000,"worth"};}; + class BRDM2_Desert_ACR_DZE {type = "trade_any_vehicle";buy[] = {250000,"worth"};sell[] = {130000,"worth"};}; + class BRDM2_RUST_DZE {type = "trade_any_vehicle";buy[] = {250000,"worth"};sell[] = {130000,"worth"};}; + class BRDM2_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {250000,"worth"};sell[] = {130000,"worth"};}; + class BRDM2_TK_GUE_EP1_DZE {type = "trade_any_vehicle";buy[] = {250000,"worth"};sell[] = {130000,"worth"};}; + class BRDM2_WINTER_DZE {type = "trade_any_vehicle";buy[] = {250000,"worth"};sell[] = {130000,"worth"};}; + class Dingo_DST_ACR_DZE {type = "trade_any_vehicle";buy[] = {300000,"worth"};sell[] = {150000,"worth"};}; + class Dingo_GL_DST_ACR_DZE {type = "trade_any_vehicle";buy[] = {300000,"worth"};sell[] = {150000,"worth"};}; + class Dingo_GL_Wdl_ACR_DZE {type = "trade_any_vehicle";buy[] = {300000,"worth"};sell[] = {150000,"worth"};}; + class Dingo_WDL_ACR_DZE {type = "trade_any_vehicle";buy[] = {300000,"worth"};sell[] = {150000,"worth"};}; + class HMMWV_Armored_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class HMMWV_Armored_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class HMMWV_M2_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_M2_DZ_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_M998A2_SOV_DES_EP1_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class HMMWV_M998A2_SOV_DES_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class HMMWV_MK19_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_MK19_DZ {type = "trade_any_vehicle";buy[] = {-20000,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_DES_MK19_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_DES_MK19_DZ {type = "trade_any_vehicle";buy[] = {-20000,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_M1151_M2_CZ_DES_EP1_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_M1151_M2_CZ_DES_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_Winter_Armored_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_GPK_M2_WINTER_DZE {type = "trade_any_vehicle";buy[] = {25000,"worth"};sell[] = {12500,"worth"};}; + class HMMWV_M1114_DSHKM_ACR_DZE {type = "trade_any_vehicle";buy[] = {30000,"worth"};sell[] = {15000,"worth"};}; + class T810A_PKT_ACR_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class T810A_PKT_ACR_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class T810A_PKT_DES_ACR_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class T810A_PKT_DES_ACR_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class LAV25_HQ_DZE {type = "trade_any_vehicle";buy[] = {200000,"worth"};sell[] = {100000,"worth"};}; + class LAV25 {type = "trade_any_vehicle";buy[] = {700000,"worth"};sell[] = {250000,"worth"};}; + class M113_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {100000,"worth"};sell[] = {50000,"worth"};}; + class M113_UN_EP1_DZE {type = "trade_any_vehicle";buy[] = {100000,"worth"};sell[] = {50000,"worth"};}; + class BTR60_Gue_DZE {type = "trade_any_vehicle";buy[] = {300000,"worth"};sell[] = {150000,"worth"};}; + class BTR60_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {300000,"worth"};sell[] = {150000,"worth"};}; + class BTR90_HQ_DZE {type = "trade_any_vehicle";buy[] = {150000,"worth"};sell[] = {75000,"worth"};}; + class T34 {type = "trade_any_vehicle";buy[] = {1000000,"worth"};sell[] = {350000,"worth"};}; + class T55_TK_EP1 {type = "trade_any_vehicle";buy[] = {1200000,"worth"};sell[] = {450000,"worth"};}; + class T72_INS {type = "trade_any_vehicle";buy[] = {1500000,"worth"};sell[] = {600000,"worth"};}; + class T90 {type = "trade_any_vehicle";buy[] = {2000000,"worth"};sell[] = {800000,"worth"};}; +}; + +//Weapons +class Category_8 { + //Holo SD desert camo + class G36C_Camo_Holo_SD_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class G36A_Camo_DZ {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class G36A_Camo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class G36K_Camo_DZ {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class G36K_Camo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + //CCO green camo + class M4A1_Camo_CCO_DZ {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class M4A1_Camo_CCO_SD_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + //GL Holo Green Camo + class M4A1_Camo_Holo_GL_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class M4A1_Camo_Holo_GL_SD_DZ {type = "trade_weapons";buy[] = {1200,"worth"};sell[] = {600,"worth"};}; + //CCO FL Desert Camo + class M4A3_DES_CCO_DZ {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + //Camo + class M4A3_Camo_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + //ACOG Camo + class M4A3_Camo_ACOG_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + //ACOG GL Grey + class M4A3_ACOG_GL_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class FNFAL_ANPVS4_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + // FN_FAL_ANPVS4_DZE has toggleable night vision, attachment support + class FN_FAL_ANPVS4_DZE {type = "trade_weapons";buy[] = {3000,"worth"};sell[] = {1000,"worth"};}; + class Mk43_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class MK43_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class MK43_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class M240_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class M240_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M240_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class Mk48_DZ {type = "trade_weapons";buy[] = {3000,"worth"};sell[] = {1000,"worth"};}; + class Mk48_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class Mk48_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class Mk48_DES_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M249_m145_EP1_DZE {type = "trade_weapons";buy[] = {5000,"worth"};sell[] = {2000,"worth"};}; + class MK43_M145_DZ {type = "trade_weapons";buy[] = {5000,"worth"};sell[] = {2000,"worth"};}; + class m240_scoped_EP1_DZE {type = "trade_weapons";buy[] = {5000,"worth"};sell[] = {2000,"worth"};}; + class Pecheneg_DZ {type = "trade_weapons";buy[] = {5000,"worth"};sell[] = {2000,"worth"};}; + class VSS_vintorez_DZE {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class WA2000_DZ {type = "trade_weapons";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class MK17_Sniper_DZ {type = "trade_weapons";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class MK17_Sniper_SD_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class M110_NV_DZ {type = "trade_weapons";buy[] = {7000,"worth"};sell[] = {4000,"worth"};}; + class RSASS_DZ {type = "trade_weapons";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class RSASS_SD_DZ {type = "trade_weapons";buy[] = {7000,"worth"};sell[] = {3500,"worth"};}; + class RSASS_TWS_DZ {type = "trade_weapons";buy[] = {14000,"worth"};sell[] = {7000,"worth"};}; + class RSASS_TWS_SD_DZ {type = "trade_weapons";buy[] = {15000,"worth"};sell[] = {8000,"worth"};}; + class HK417_Sniper_DZ {type = "trade_weapons";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class HK417_Sniper_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {3000,"worth"};}; + class MK14_Sniper_DZ {type = "trade_weapons";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class MK14_Sniper_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {3000,"worth"};}; + class DMR_DZ {type = "trade_weapons";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class DMR_Gh_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {3100,"worth"};}; + class M21_DZ {type = "trade_weapons";buy[] = {5000,"worth"};sell[] = {3000,"worth"};}; + class XM2010_DZ {type = "trade_weapons";buy[] = {8000,"worth"};sell[] = {4000,"worth"};}; + class XM2010_SD_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class XM2010_NV_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class XM2010_NV_SD_DZ {type = "trade_weapons";buy[] = {12000,"worth"};sell[] = {6000,"worth"};}; + class XM2010_TWS_DZ {type = "trade_weapons";buy[] = {15000,"worth"};sell[] = {8000,"worth"};}; + class XM2010_TWS_SD_DZ {type = "trade_weapons";buy[] = {16000,"worth"};sell[] = {9000,"worth"};}; + class BAF_LRR_scoped {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class BAF_LRR_scoped_W {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + //Tan Lapua // DayZ Mod version + class L115A3_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + //Green Lapua // DayZ Mod version + class L115A3_2_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class MSR_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class MSR_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class Barrett_MRAD_Iron_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class Barrett_MRAD_CCO_DZ {type = "trade_weapons";buy[] = {12000,"worth"};sell[] = {5200,"worth"};}; + class Barrett_MRAD_Sniper_DZ {type = "trade_weapons";buy[] = {14000,"worth"};sell[] = {6000,"worth"};}; + class m107_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {6000,"worth"};}; + class Anzio_20_DZ {type = "trade_weapons";buy[] = {15000,"worth"};sell[] = {8000,"worth"};}; + class BAF_AS50_scoped_DZ {type = "trade_weapons";buy[] = {15000,"worth"};sell[] = {8000,"worth"};}; + class M200_CheyTac_DZ {type = "trade_weapons";buy[] = {15000,"worth"};sell[] = {8000,"worth"};}; + class M200_CheyTac_SD_DZ {type = "trade_weapons";buy[] = {16000,"worth"};sell[] = {9000,"worth"};}; + class KSVK_DZE {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {6000,"worth"};}; + class BAF_L85A2_RIS_TWS_DZ {type = "trade_weapons";buy[] = {15000,"worth"};sell[] = {8000,"worth"};}; +}; + +//Ammunition +class Category_9 { + class 30Rnd_556x45_StanagSD {type = "trade_items";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class 6Rnd_762x51_WA2000 {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class 20Rnd_762x51_B_SCAR {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class 20Rnd_762x51_SB_SCAR {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class 20Rnd_762x51_FNFAL {type = "trade_items";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class 20Rnd_762x51_DMR {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class 20Rnd_762x51_RSASS {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class 20Rnd_762x51_RSASS_SD {type = "trade_items";buy[] = {1200,"worth"};sell[] = {600,"worth"};}; + class 5Rnd_762x67_XM2010 {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class 5Rnd_762x67_XM2010_SD {type = "trade_items";buy[] = {700,"worth"};sell[] = {350,"worth"};}; + class 5Rnd_86x70_L115A1 {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class 7Rnd_86x70_MSR {type = "trade_items";buy[] = {700,"worth"};sell[] = {300,"worth"};}; + class 7Rnd_86x70_MSR_SD {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class 10Rnd_86x70_MRAD {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class 10Rnd_127x99_M107 {type = "trade_items";buy[] = {800,"worth"};sell[] = {500,"worth"};}; + class 3rnd_Anzio_20x102mm {type = "trade_items";buy[] = {1800,"worth"};sell[] = {900,"worth"};}; + class 5Rnd_127x99_AS50 {type = "trade_items";buy[] = {1600,"worth"};sell[] = {800,"worth"};}; + class 5Rnd_127x99_as50_CP {type = "trade_items";buy[] = {1700,"worth"};sell[] = {850,"worth"};}; + class 5Rnd_127x108_KSVK {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class 5Rnd_408_CheyTac {type = "trade_items";buy[] = {1600,"worth"};sell[] = {800,"worth"};}; + class 5Rnd_408_CheyTac_SD {type = "trade_items";buy[] = {1700,"worth"};sell[] = {1000,"worth"};}; + class 50Rnd_127x107_DSHKM {type = "trade_items";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class 200Rnd_556x45_M249 {type = "trade_items";buy[] = {1600,"worth"};sell[] = {800,"worth"};}; + class 100Rnd_762x51_M240 {type = "trade_items";buy[] = {1600,"worth"};sell[] = {800,"worth"};}; + class 100Rnd_762x54_PK {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class 100Rnd_127x99_M2 {type = "trade_items";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class 500Rnd_145x115_KPVT {type = "trade_items";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class 48Rnd_40mm_MK19 {type = "trade_items";buy[] = {60000,"worth"};sell[] = {30000,"worth"};}; + class 29Rnd_30mm_AGS30 {type = "trade_items";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class pook_1300Rnd_762x51_M60 {type = "trade_items";buy[] = {2800,"worth"};sell[] = {1400,"worth"};}; + class 220Rnd_25mm_GAU22 {type = "trade_items";buy[] = {60000,"worth"};sell[] = {30000,"worth"};}; + class 150Rnd_30mmAP_2A42 {type = "trade_items";buy[] = {60000,"worth"};sell[] = {30000,"worth"};}; + class 750Rnd_M197_AH1 {type = "trade_items";buy[] = {150000,"worth"};sell[] = {75000,"worth"};}; + class 28Rnd_FFAR {type = "trade_items";buy[] = {500000,"worth"};sell[] = {250000,"worth"};}; +}; + +//Clothes +class Category_10 { + class Skin_CamoWinter1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_CamoWinter1W_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_CamoWinter2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_CamoWinter2W_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Bandit1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Bandit2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Bandit3_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Bandit4_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Bandit5_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_BanditW1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_BanditW2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_GUE_Commander_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_GUE_Soldier_Sniper_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_SniperBanditW_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_TK_Soldier_Sniper_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_TK_Soldier_Sniper_EP1W_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_SniperWinter_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_SniperWinterW_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_GUE_Soldier_2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_GUE_Soldier_CO_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_GUE_Soldier_Crew_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Ins_Soldier_GL_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_TK_INS_Soldier_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_TK_INS_Soldier_EP2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_TK_INS_Soldier_EP3_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_TK_INS_Warlord_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_RU_Soldier_Crew_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_TK_INS_Soldier_AR_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_TK_GUE_Soldier_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_RU_Soldier_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_RU_Soldier_Officer_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_RUS_Soldier1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_RUS_Commander_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_MVD_Soldier_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Ins_Soldier_2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Ins_Commander_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Ins_Soldier_Crew_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_CDF_Soldier_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Nac_Soldier_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Nac_SoldierW_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_GunnerW_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + + //Normal military skins sell only + class Skin_SniperW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert01_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert02_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert03_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert04_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert05_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert06_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert07_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert08_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow01_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow02_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow03_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow04_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow05_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Urban01_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood01_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood02_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood03_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood04_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood05_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood06_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood07_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood08_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood09_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood10_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood11_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood12_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood13_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood14_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood15_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood16_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert01W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert02W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert03W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert04W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert05W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert06W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert07W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert08W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow01W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow02W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow03W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow04W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow05W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Urban01W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood01W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood02W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood03W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood04W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood05W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood06W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood07W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood08W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood09W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood10W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood11W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood12W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood13W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood14W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood15W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood16W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Sniper_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Sniper_ACRW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_military_helmet_wdl_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_military_helmet_wdlW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_military_head_wdl_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_military_helmet_grey_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_military_helmet_greyW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_military_head_grey_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_scientist1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_scientist1W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_scientist1_head_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_scientist2_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_scientist2W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_scientist2_head_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_cloth_loner_head_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_neutral_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_neutralW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_head_neutral_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_fred_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_fredW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_head_fred_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_duty_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_dutyW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_head_duty_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_camo_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_camoW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_head_camo_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_Apo_Rifleman_01_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_Apo_Rifleman_02_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_Apo_Rifleman_03_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_Apo_Rifleman_04_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_Apo_Rifleman_05_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_Apo_Rifleman_06_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_TL_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Scout_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Sniper_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Spotter_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_TL_W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Scout_W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Assaultman_W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Medic_W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_TL_D_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Scout_D_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Marksman_D_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Operator_D_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_MG_D_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier805_DES_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_805_Wdl_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Crew_Dst_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Officer_Wdl_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Recon_Wdl_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Spec1_Wdl_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Spec2_Wdl_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Spec3_Wdl_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Spec_Demo_Dst_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Light_Wdl_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GER_Soldier_EP1_des_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GER_Soldier_TL_EP1_des_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GER_Soldier_EP1_wdl_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GER_Soldier_TL_EP1_wdl_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + + //Hero Skins sell only + class Skin_CZ_Special_Forces_GL_DES_EP1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Drake_Light_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Soldier_Sniper_PMC_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_FR_OHara_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_FR_Rodriguez_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_CZ_Soldier_Sniper_EP1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_CZ_Soldier_Sniper_EP1W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Graves_Light_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Soldier_Bodyguard_AA12_PMC_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Camo1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Rocket_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Sniper1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Sniper1W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Soldier1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Soldier_TL_PMC_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_USMC_Soldier_Officer_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_USMC_Soldier_MG_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_USMC_Soldier_Pilot_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_FR_TL_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_FR_R_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_FR_Sapper_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_FR_Marksman_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_FR_Assault_R_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_CZ_Soldier_SL_DES_EP1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_US_Soldier_EP1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_UN_CDF_Soldier_Guard_EP1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_UN_CDF_Soldier_EP1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_GER_Soldier_TL_EP1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_BAF_Soldier_Officer_MTP_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_BAF_Soldier_N_MTP_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Tamika_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_OperatorW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/BlackMarket.hpp b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/BlackMarket.hpp new file mode 100755 index 0000000..3f357df --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/BlackMarket.hpp @@ -0,0 +1,54 @@ +class Category_11 { + class Skin_GhillieFull_Urban01_DZ {type = "trade_items";buy[] = {1200,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood16_DZ {type = "trade_items";buy[] = {1200,"worth"};sell[] = {100,"worth"};}; + class MeleeBaseBallBat {type = "trade_weapons";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class MeleeBaseballbatBarbed {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2,"worth"};}; + class MeleeBaseballbatNails {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2,"worth"};}; + class RSASS_DZ {type = "trade_weapons";buy[] = {20000,"worth"};sell[] = {2000,"worth"};}; + class XM2010_DZ {type = "trade_weapons";buy[] = {23000,"worth"};sell[] = {3000,"worth"};}; + class Barrett_MRAD_Iron_DZ {type = "trade_weapons";buy[] = {30000,"worth"};sell[] = {4000,"worth"};}; + class 20Rnd_762x51_RSASS {type = "trade_items";buy[] = {1800,"worth"};sell[] = {300,"worth"};}; + class 5Rnd_762x67_XM2010 {type = "trade_items";buy[] = {1600,"worth"};sell[] = {200,"worth"};}; + class 10Rnd_86x70_MRAD {type = "trade_items";buy[] = {1800,"worth"};sell[] = {300,"worth"};}; + class Saiga12K_DZ {type = "trade_weapons";buy[] = {300,"worth"};sell[] = {100,"worth"};}; + class AA12_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {500,"worth"};}; + class USAS12_DZ {type = "trade_weapons";buy[] = {700,"worth"};sell[] = {400,"worth"};}; + class Revolver_Gold_DZ {type = "trade_weapons";buy[] = {5000,"worth"};sell[] = {2000,"worth"};}; + class Colt_Anaconda_Gold_DZ {type = "trade_weapons";buy[] = {9000,"worth"};sell[] = {5000,"worth"};}; + class SVD_Gold_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class AKS_GOLD {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {4000,"worth"};}; + class AKS_Gold_DZ {type = "trade_weapons";buy[] = {8000,"worth"};sell[] = {4000,"worth"};}; + class AKS_Silver_DZ {type = "trade_weapons";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class MAAWS {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {4000,"worth"};}; + class 8Rnd_B_Saiga12_74Slug {type = "trade_items";buy[] = {5,"worth"};sell[] = {3,"worth"};}; + class 8Rnd_B_Saiga12_Pellets {type = "trade_items";buy[] = {5,"worth"};sell[] = {3,"worth"};}; + class 20Rnd_B_Usas12_74Slug {type = "trade_items";buy[] = {8,"worth"};sell[] = {5,"worth"};}; + class 20Rnd_B_Usas12_Pellets {type = "trade_items";buy[] = {8,"worth"};sell[] = {5,"worth"};}; + class 20Rnd_B_AA12_Pellets {type = "trade_items";buy[] = {8,"worth"};sell[] = {5,"worth"};}; + class 20Rnd_B_AA12_74Slug {type = "trade_items";buy[] = {8,"worth"};sell[] = {5,"worth"};}; + class 1Rnd_Bolt_Explosive {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class HandGrenade_west {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class HandGrenade_east {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class 1Rnd_HE_M203 {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class 1Rnd_HE_GP25 {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class MAAWS_HEAT {type = "trade_items";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class PipeBomb {type = "trade_items";buy[] = {40000,"worth"};sell[] = {2000,"worth"};}; + class ItemHotwireKit {type = "trade_items";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class ItemC4Charge {type = "trade_items";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class ItemTallSafe {type = "trade_items";buy[] = {200000,"worth"};sell[] = {100000,"worth"};}; + + //Vehicle Ammo + class 200Rnd_762x51_M240 {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class pook_12Rnd_Grenade_Camel {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class pook_1300Rnd_762x51_M60 {type = "trade_items";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class 3Rnd_GyroGrenade {type = "trade_items";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class 2000Rnd_762x51_M134 {type = "trade_items";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class 29Rnd_30mm_AGS30 {type = "trade_items";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class 50Rnd_127x107_DSHKM {type = "trade_items";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class 150Rnd_127x107_DSHKM {type = "trade_items";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class 48Rnd_40mm_MK19 {type = "trade_items";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class pook_250Rnd_762x51 {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class 100Rnd_127x99_M2 {type = "trade_items";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + // Weed Seeds + class ItemHempSeed {type = "trade_items";buy[] = {-1,"worth"};sell[] = {20,"worth"};}; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Boats.hpp b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Boats.hpp new file mode 100755 index 0000000..bbae787 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Boats.hpp @@ -0,0 +1,21 @@ +//Armed Boats +class Category_48 { + class RHIB_DZE {type = "trade_any_boat";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class RHIB_DZ {type = "trade_any_boat";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class RHIB2Turret_DZE {type = "trade_any_boat";buy[] = {8000,"worth"};sell[] = {4000,"worth"};}; + class RHIB2Turret_DZ {type = "trade_any_boat";buy[] = {-1,"worth"};sell[] = {4000,"worth"};}; +}; + +//Unarmed Boats +class Category_49 { + class Submarine_DZE {type = "trade_any_boat";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Smallboat_1_DZE {type = "trade_any_boat";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class Smallboat_2_DZE {type = "trade_any_boat";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class Fishing_Boat_DZE {type = "trade_any_boat";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class PBX_DZE {type = "trade_any_boat";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class Zodiac_DZE {type = "trade_any_boat";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class JetSkiYanahui_Case_Red {type = "trade_any_boat";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class JetSkiYanahui_Case_Yellow {type = "trade_any_boat";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class JetSkiYanahui_Case_Green {type = "trade_any_boat";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class JetSkiYanahui_Case_Blue {type = "trade_any_boat";buy[] = {600,"worth"};sell[] = {300,"worth"};}; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Currency.hpp b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Currency.hpp new file mode 100755 index 0000000..f3218cd --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Currency.hpp @@ -0,0 +1,237 @@ +class Category_51 { + class ItemSilverBar { + type = "trade_items"; + buy[] = {1,"worth"}; + sell[] = {1,"worth"}; + }; + class ItemSilverBar2oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {2,"worth"}; + }; + class ItemSilverBar3oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {3,"worth"}; + }; + class ItemSilverBar4oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {4,"worth"}; + }; + class ItemSilverBar5oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {5,"worth"}; + }; + class ItemSilverBar6oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {6,"worth"}; + }; + class ItemSilverBar7oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {7,"worth"}; + }; + class ItemSilverBar8oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {8,"worth"}; + }; + class ItemSilverBar9oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {9,"worth"}; + }; + class ItemSilverBar10oz { + type = "trade_items"; + buy[] = {10,"worth"}; + sell[] = {10,"worth"}; + }; + class ItemBriefcaseS10oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {10,"worth"}; + }; + class ItemBriefcaseS20oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {20,"worth"}; + }; + class ItemBriefcaseS30oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {30,"worth"}; + }; + class ItemBriefcaseS40oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {40,"worth"}; + }; + class ItemBriefcaseS50oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {50,"worth"}; + }; + class ItemBriefcaseS60oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {60,"worth"}; + }; + class ItemBriefcaseS70oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {70,"worth"}; + }; + class ItemBriefcaseS80oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {80,"worth"}; + }; + class ItemBriefcaseS90oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {90,"worth"}; + }; + class ItemBriefcaseS100oz { + type = "trade_items"; + buy[] = {100,"worth"}; + sell[] = {100,"worth"}; + }; + class ItemGoldBar { + type = "trade_items"; + buy[] = {100,"worth"}; + sell[] = {100,"worth"}; + }; + class ItemGoldBar2oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {200,"worth"}; + }; + class ItemGoldBar3oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {300,"worth"}; + }; + class ItemGoldBar4oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {400,"worth"}; + }; + class ItemGoldBar5oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {500,"worth"}; + }; + class ItemGoldBar6oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {600,"worth"}; + }; + class ItemGoldBar7oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {700,"worth"}; + }; + class ItemGoldBar8oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {800,"worth"}; + }; + class ItemGoldBar9oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {900,"worth"}; + }; + class ItemGoldBar10oz { + type = "trade_items"; + buy[] = {1000,"worth"}; + sell[] = {1000,"worth"}; + }; + class ItemBriefcase10oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {1000,"worth"}; + }; + class ItemBriefcase20oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {2000,"worth"}; + }; + class ItemBriefcase30oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {3000,"worth"}; + }; + class ItemBriefcase40oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {4000,"worth"}; + }; + class ItemBriefcase50oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {5000,"worth"}; + }; + class ItemBriefcase60oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {6000,"worth"}; + }; + class ItemBriefcase70oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {7000,"worth"}; + }; + class ItemBriefcase80oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {8000,"worth"}; + }; + class ItemBriefcase90oz { + type = "trade_items"; + buy[] = {-1,"worth"}; + sell[] = {9000,"worth"}; + }; + class ItemBriefcase100oz { + type = "trade_items"; + buy[] = {10000,"worth"}; + sell[] = {10000,"worth"}; + }; + class ItemTopaz { + type = "trade_items"; + buy[] = {15000,"worth"}; + sell[] = {15000,"worth"}; + }; + class ItemObsidian { + type = "trade_items"; + buy[] = {20000,"worth"}; + sell[] = {20000,"worth"}; + }; + class ItemSapphire { + type = "trade_items"; + buy[] = {25000,"worth"}; + sell[] = {25000,"worth"}; + }; + class ItemAmethyst { + type = "trade_items"; + buy[] = {30000,"worth"}; + sell[] = {30000,"worth"}; + }; + class ItemEmerald { + type = "trade_items"; + buy[] = {35000,"worth"}; + sell[] = {35000,"worth"}; + }; + class ItemCitrine { + type = "trade_items"; + buy[] = {40000,"worth"}; + sell[] = {40000,"worth"}; + }; + class ItemRuby { + type = "trade_items"; + buy[] = {45000,"worth"}; + sell[] = {45000,"worth"}; + }; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/GeneralStore.hpp b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/GeneralStore.hpp new file mode 100755 index 0000000..b48c46b --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/GeneralStore.hpp @@ -0,0 +1,263 @@ +//Packaged Food +class Category_27 { + class FoodCanBakedBeans {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanFrankBeans {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanPasta {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanSardines {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanBeef {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanPotatoes {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanGriff {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanBadguy {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanBoneboy {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanCorn {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanCurgon {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanDemon {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanFraggleos {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanHerpy {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanDerpy {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanOrlok {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanPowell {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanTylers {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanUnlabeled {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanRusUnlabeled {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanRusStew {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanRusPork {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanRusPeas {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanRusMilk {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCanRusCorn {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodChipsSulahoops {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodChipsMysticales {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodChipsChocolate {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCandyChubby {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCandyAnders {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCandyLegacys {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCakeCremeCakeClean {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodCandyMintception {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodPistachio {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodNutmix {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class FoodMRE {type = "trade_items";buy[] = {-1,"worth"};sell[] = {5,"worth"};}; +}; + +//Cooked Meats +class Category_28 { + class FoodbaconCooked {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class FoodbeefCooked {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class FoodchickenCooked {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class FoodGoatCooked {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class FoodmuttonCooked {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class FoodrabbitCooked {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + // most common + class FishCookedTrout {type = "trade_items";buy[] = {200,"worth"};sell[] = {10,"worth"};}; + // less common + class FishCookedSeaBass {type = "trade_items";buy[] = {300,"worth"};sell[] = {20,"worth"};}; + // rarest + class FishCookedTuna {type = "trade_items";buy[] = {400,"worth"};sell[] = {100,"worth"};}; +}; + +//Drinks +class Category_29 { + class ItemWaterbottleUnfilled {type = "trade_items";buy[] = {3,"worth"};sell[] = {1,"worth"};}; + class ItemPlasticWaterbottleUnfilled {type = "trade_items";buy[] = {3,"worth"};sell[] = {1,"worth"};}; + class ItemSodaCoke {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class ItemSodaPepsi {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class ItemSodaMdew {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class ItemSodaMtngreen {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSodaR4z0r {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class ItemSodaClays {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSodaSmasht {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSodaDrwaste {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSodaFranka {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSodaLemonade {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSodaLirik {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSodaLvg {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSodaMzly {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSodaPeppsy {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSodaRabbit {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSodaSacrite {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSodaRocketFuel {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSodaGrapeDrink {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSherbet {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ItemSodaRbull {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class ItemSodaOrangeSherbet {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class ItemWaterbottle {type = "trade_items";buy[] = {-1,"worth"};sell[] = {2,"worth"};}; + class ItemWaterBottleInfected {type = "trade_items";buy[] = {-1,"worth"};sell[] = {2,"worth"};}; + class ItemWaterBottleSafe {type = "trade_items";buy[] = {-1,"worth"};sell[] = {2,"worth"};}; + class ItemWaterBottleBoiled {type = "trade_items";buy[] = {-1,"worth"};sell[] = {3,"worth"};}; + class ItemWaterBottleHerbal {type = "trade_items";buy[] = {-1,"worth"};sell[] = {50,"worth"};}; + class ItemPlasticWaterbottle {type = "trade_items";buy[] = {-1,"worth"};sell[] = {2,"worth"};}; + class ItemPlasticWaterBottleInfected {type = "trade_items";buy[] = {-1,"worth"};sell[] = {2,"worth"};}; + class ItemPlasticWaterBottleSafe {type = "trade_items";buy[] = {-1,"worth"};sell[] = {2,"worth"};}; + class ItemPlasticWaterBottleBoiled {type = "trade_items";buy[] = {-1,"worth"};sell[] = {3,"worth"};}; + class ItemPlasticWaterBottleHerbal {type = "trade_items";buy[] = {-1,"worth"};sell[] = {50,"worth"};}; +}; + +//Clothes +class Category_30 { + class Skin_SurvivorW2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_SurvivorW3_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_SurvivorWpink_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_SurvivorWurban_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_SurvivorWcombat_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_SurvivorWwinter_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_SurvivorWdesert_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_DoctorW_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_WorkerW_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_PolicemanW_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_PriestW_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Urban01W_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood16W_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_HookerW1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_HookerW2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_HookerW3_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_HookerW4_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_HookerW5_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Functionary1_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Haris_Press_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Priest_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Survivor2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Rocker1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Rocker2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Rocker3_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Rocker4_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_RU_Policeman_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_RU_Policeman2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Pilot_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_INS_Lopotev_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Doctor_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Assistant_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Worker1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Worker3_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Worker4_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_TK_CIV_Takistani01_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_TK_CIV_Takistani03_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_TK_CIV_Takistani04_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_TK_CIV_Takistani06_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Firefighter1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Firefighter2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Firefighter3_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Firefighter4_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Firefighter5_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Firefighter_Officer1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Firefighter_Officer2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Postman1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Postman2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Postman3_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Postman4_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Hunter_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Gardener_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_SchoolTeacher_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Civilian1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Civilian2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Civilian3_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Civilian4_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Civilian5_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Civilian6_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Civilian7_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Civilian8_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Civilian9_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Civilian10_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Civilian11_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Civilian12_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Civilian13_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Civilian14_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Prisoner1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Prisoner2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Prisoner3_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Reporter_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_MafiaBoss_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Dealer_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_BusinessMan_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; +}; + +//Backpacks +class Category_31 { + /* New Backpacks */ + class GymBag_Camo_DZE1 {type = "trade_backpacks";buy[] = {8,"worth"};sell[] = {4,"worth"};}; + class GymBag_Green_DZE1 {type = "trade_backpacks";buy[] = {8,"worth"};sell[] = {4,"worth"};}; + class Patrol_Pack_DZE1 {type = "trade_backpacks";buy[] = {8,"worth"};sell[] = {4,"worth"};}; + class Czech_Vest_Pouch_DZE1 {type = "trade_backpacks";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class Assault_Pack_DZE1 {type = "trade_backpacks";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class TerminalPack_DZE1 {type = "trade_backpacks";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class TinyPack_DZE1 {type = "trade_backpacks";buy[] = {60,"worth"};sell[] = {30,"worth"};}; + class ALICE_Pack_DZE1 {type = "trade_backpacks";buy[] = {80,"worth"};sell[] = {40,"worth"};}; + class TK_Assault_Pack_DZE1 {type = "trade_backpacks";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class School_Bag_DZE1 {type = "trade_backpacks";buy[] = {150,"worth"};sell[] = {75,"worth"};}; + class CompactPack_DZE1 {type = "trade_backpacks";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class British_ACU_DZE1 {type = "trade_backpacks";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class GunBag_DZE1 {type = "trade_backpacks";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class PartyPack_DZE1 {type = "trade_backpacks";buy[] = {700,"worth"};sell[] = {350,"worth"};}; + class NightPack_DZE1 {type = "trade_backpacks";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class SurvivorPack_DZE1 {type = "trade_backpacks";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class AirwavesPack_DZE1 {type = "trade_backpacks";buy[] = {1200,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_DZE1 {type = "trade_backpacks";buy[] = {-1200,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_Camping_DZE1 {type = "trade_backpacks";buy[] = {1200,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_OD_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_DES_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_3DES_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_WDL_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_MAR_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_DMAR_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_UCP_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_6DES_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_TAK_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_NVG_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_BLK_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_DPM_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_FIN_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_MTC_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_NOR_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_WIN_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_ATC_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_MTL_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CzechBackpack_FTN_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class WandererBackpack_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class LegendBackpack_DZE1 {type = "trade_backpacks";buy[] = {1800,"worth"};sell[] = {800,"worth"};}; + class CoyoteBackpack_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + class CoyoteBackpack_Camping_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + class CoyoteBackpackDes_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + class CoyoteBackpackWdl_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + class LargeGunBag_DZE1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + /* Old Backpacks - sell only */ + class DZ_Czech_Vest_Pouch {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {2,"worth"};}; + class DZ_Patrol_Pack_EP1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {4,"worth"};}; + class DZ_Assault_Pack_EP1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {5,"worth"};}; + class DZ_TerminalPack_EP1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {10,"worth"};}; + class DZ_ALICE_Pack_EP1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {30,"worth"};}; + class DZ_TK_Assault_Pack_EP1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {40,"worth"};}; + class DZ_CompactPack_EP1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {50,"worth"};}; + class DZ_British_ACU {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {200,"worth"};}; + class DZ_GunBag_EP1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class DZ_CivilBackpack_EP1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class DZ_Backpack_EP1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class DZ_LargeGunBag_EP1 {type = "trade_backpacks";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; +}; + +//Miscellaneous +class Category_32 { + class ItemKosmosSmokes {type = "trade_items";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class ItemKosmosSmokesOpen {type = "trade_items";buy[] = {-1,"worth"};sell[] = {10,"worth"};}; + class ItemNewspaper {type = "trade_items";buy[] = {-1,"worth"};sell[] = {1,"worth"};}; + class ItemBookBible {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class ItemBook1 {type = "trade_items";buy[] = {-1,"worth"};sell[] = {5,"worth"};}; + class ItemBook2 {type = "trade_items";buy[] = {-1,"worth"};sell[] = {5,"worth"};}; + class ItemBook3 {type = "trade_items";buy[] = {-1,"worth"};sell[] = {5,"worth"};}; + class ItemBook4 {type = "trade_items";buy[] = {-1,"worth"};sell[] = {5,"worth"};}; + class ItemTrashPaperMusic {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class ItemTrashPaper {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class ItemLetter {type = "trade_items";buy[] = {-1,"worth"};sell[] = {50,"worth"};}; + class ItemCards {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class ItemORP {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class ItemARM {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class ItemAVE {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class ItemLRK {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class ItemTNK {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class ItemTruckORP {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class ItemTruckARM {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class ItemTruckAVE {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class ItemTruckLRK {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class ItemTruckTNK {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class ItemHeliAVE {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class ItemHeliLRK {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class ItemHeliTNK {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class ItemPlotDeed {type = "trade_items";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Hero.hpp b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Hero.hpp new file mode 100755 index 0000000..6c11396 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Hero.hpp @@ -0,0 +1,493 @@ +//Air Vehicles +class Category_1 { + class pook_transport_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class pook_transport_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class pook_transport_CDF_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class pook_transport_CDF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class pook_gunship_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {10000,"worth"};}; + class pook_gunship_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class pook_gunship_CDF_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {10000,"worth"};}; + class pook_gunship_CDF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class AH6J_EP1_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class AH6J_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_CDF_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_CDF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_WD_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_WD_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_2_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_2_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_DES_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_DES_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_GREY_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_GREY_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_BLACK_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_BLACK_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_SAR_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class UH1H_SAR_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1H_WINTER_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_TK_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_UN_CDF_EP1_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_UN_CDF_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_CDF_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_CDF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_DES_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_DES_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_GREEN_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_GREEN_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_BLUE_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_BLUE_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_BLACK_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi17_BLACK_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi171Sh_CZ_EP1_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Mi171Sh_CZ_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Mi17_WINTER_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class MH60S_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class MH60S_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class Ka60_GL_PMC_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class Ka60_GL_PMC_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class AW159_Lynx_BAF_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class AW159_Lynx_BAF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH60M_EP1_DZE {type = "trade_any_vehicle";buy[] = {30000,"worth"};sell[] = {10000,"worth"};}; + class UH60M_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class UH1Y_DZE {type = "trade_any_vehicle";buy[] = {30000,"worth"};sell[] = {10000,"worth"};}; + class UH1Y_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class CH_47F_EP1_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class CH_47F_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {20000,"worth"};}; + class CH_47F_EP1_Black_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class CH_47F_EP1_Black_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {20000,"worth"};}; + class CH_47F_EP1_GREY_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class CH_47F_EP1_GREY_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {20000,"worth"};}; + class CH_47F_EP1_DES_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class CH_47F_EP1_DES_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {20000,"worth"};}; + class AH1Z_DZE {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {300000,"worth"};}; + class F35B {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {400000,"worth"};}; +}; + +//Ground Vehicles +class Category_2 { + class Pickup_PK_TK_GUE_EP1_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class Pickup_PK_TK_GUE_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class Pickup_PK_GUE_DZE {type = "trade_any_vehicle";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class Pickup_PK_GUE_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class Pickup_PK_INS_DZE {type = "trade_any_vehicle";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class Pickup_PK_INS_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class Offroad_DSHKM_Gue_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class Offroad_DSHKM_Gue_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class ArmoredSUV_PMC_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class ArmoredSUV_PMC_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class LandRover_MG_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class LandRover_MG_TK_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {3000,"worth"};}; + class LandRover_Special_CZ_EP1_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class LandRover_Special_CZ_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class UAZ_MG_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class UAZ_MG_TK_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {3000,"worth"};}; + class UAZ_MG_CDF_DZE {type = "trade_any_vehicle";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class UAZ_MG_CDF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {3000,"worth"};}; + class UAZ_MG_INS_DZE {type = "trade_any_vehicle";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class UAZ_MG_INS_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {3000,"worth"};}; + class UAZ_AGS30_CDF_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_CDF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_INS_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_INS_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_TK_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_RU_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_RU_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_RUST_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_RUST_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_WINTER_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class UAZ_AGS30_WINTER_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class BAF_Jackal2_L2A1_D_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BAF_Jackal2_L2A1_D_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class BAF_Jackal2_L2A1_W_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BAF_Jackal2_L2A1_W_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class BAF_Jackal2_GMG_D_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BAF_Jackal2_GMG_D_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class BAF_Jackal2_GMG_W_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BAF_Jackal2_GMG_W_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class BTR40_MG_TK_GUE_EP1_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class BTR40_MG_TK_GUE_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class BTR40_MG_TK_INS_EP1_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class BTR40_MG_TK_INS_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class GAZ_Vodnik_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class GAZ_Vodnik_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class GAZ_Vodnik_HMG_DZE {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {200000,"worth"};}; + class BMP2_Ambul_CDF_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class BMP2_Ambul_INS_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class BMP2_Ambul_Winter_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class BMP2_HQ_CDF_DZE {type = "trade_any_vehicle";buy[] = {80000,"worth"};sell[] = {40000,"worth"};}; + class BMP2_HQ_INS_DZE {type = "trade_any_vehicle";buy[] = {80000,"worth"};sell[] = {40000,"worth"};}; + class BMP2_HQ_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {80000,"worth"};sell[] = {40000,"worth"};}; + class BRDM2_HQ_TK_GUE_EP1_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BRDM2_HQ_TK_GUE_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class BRDM2_HQ_CDF_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BRDM2_HQ_RUST_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BRDM2_HQ_WINTER_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class BRDM2_HQ_CDF_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class BRDM2_CDF_DZE {type = "trade_any_vehicle";buy[] = {250000,"worth"};sell[] = {130000,"worth"};}; + class BRDM2_Desert_ACR_DZE {type = "trade_any_vehicle";buy[] = {250000,"worth"};sell[] = {130000,"worth"};}; + class BRDM2_RUST_DZE {type = "trade_any_vehicle";buy[] = {250000,"worth"};sell[] = {130000,"worth"};}; + class BRDM2_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {250000,"worth"};sell[] = {130000,"worth"};}; + class BRDM2_TK_GUE_EP1_DZE {type = "trade_any_vehicle";buy[] = {250000,"worth"};sell[] = {130000,"worth"};}; + class BRDM2_WINTER_DZE {type = "trade_any_vehicle";buy[] = {250000,"worth"};sell[] = {130000,"worth"};}; + class Dingo_DST_ACR_DZE {type = "trade_any_vehicle";buy[] = {300000,"worth"};sell[] = {150000,"worth"};}; + class Dingo_GL_DST_ACR_DZE {type = "trade_any_vehicle";buy[] = {300000,"worth"};sell[] = {150000,"worth"};}; + class Dingo_GL_Wdl_ACR_DZE {type = "trade_any_vehicle";buy[] = {300000,"worth"};sell[] = {150000,"worth"};}; + class Dingo_WDL_ACR_DZE {type = "trade_any_vehicle";buy[] = {300000,"worth"};sell[] = {150000,"worth"};}; + class HMMWV_Armored_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class HMMWV_Armored_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class HMMWV_M2_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_M2_DZ_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_M998A2_SOV_DES_EP1_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class HMMWV_M998A2_SOV_DES_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class HMMWV_MK19_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_MK19_DZ {type = "trade_any_vehicle";buy[] = {-20000,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_DES_MK19_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_DES_MK19_DZ {type = "trade_any_vehicle";buy[] = {-20000,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_M1151_M2_CZ_DES_EP1_DZE {type = "trade_any_vehicle";buy[] = {40000,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_M1151_M2_CZ_DES_EP1_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_Winter_Armored_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class HMMWV_GPK_M2_WINTER_DZE {type = "trade_any_vehicle";buy[] = {25000,"worth"};sell[] = {12500,"worth"};}; + class HMMWV_M1114_DSHKM_ACR_DZE {type = "trade_any_vehicle";buy[] = {30000,"worth"};sell[] = {15000,"worth"};}; + class T810A_PKT_ACR_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class T810A_PKT_ACR_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class T810A_PKT_DES_ACR_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class T810A_PKT_DES_ACR_DZ {type = "trade_any_vehicle";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class LAV25_HQ_DZE {type = "trade_any_vehicle";buy[] = {200000,"worth"};sell[] = {100000,"worth"};}; + class LAV25 {type = "trade_any_vehicle";buy[] = {700000,"worth"};sell[] = {250000,"worth"};}; + class M113_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {100000,"worth"};sell[] = {50000,"worth"};}; + class M113_UN_EP1_DZE {type = "trade_any_vehicle";buy[] = {100000,"worth"};sell[] = {50000,"worth"};}; + class BTR60_Gue_DZE {type = "trade_any_vehicle";buy[] = {300000,"worth"};sell[] = {150000,"worth"};}; + class BTR60_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {300000,"worth"};sell[] = {150000,"worth"};}; + class BTR90_HQ_DZE {type = "trade_any_vehicle";buy[] = {150000,"worth"};sell[] = {75000,"worth"};}; + class T34 {type = "trade_any_vehicle";buy[] = {1000000,"worth"};sell[] = {350000,"worth"};}; + class T55_TK_EP1 {type = "trade_any_vehicle";buy[] = {1200000,"worth"};sell[] = {450000,"worth"};}; + class T72_INS {type = "trade_any_vehicle";buy[] = {1500000,"worth"};sell[] = {600000,"worth"};}; + class T90 {type = "trade_any_vehicle";buy[] = {2000000,"worth"};sell[] = {800000,"worth"};}; +}; + +//Weapons +class Category_3 { + //Holo SD desert camo + class G36C_Camo_Holo_SD_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class G36A_Camo_DZ {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class G36A_Camo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class G36K_Camo_DZ {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class G36K_Camo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + //CCO green camo + class M4A1_Camo_CCO_DZ {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class M4A1_Camo_CCO_SD_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + //GL Holo Green Camo + class M4A1_Camo_Holo_GL_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class M4A1_Camo_Holo_GL_SD_DZ {type = "trade_weapons";buy[] = {1200,"worth"};sell[] = {600,"worth"};}; + //CCO FL Desert Camo + class M4A3_DES_CCO_DZ {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + //Camo + class M4A3_Camo_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + //ACOG Camo + class M4A3_Camo_ACOG_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + //ACOG GL Grey + class M4A3_ACOG_GL_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class FNFAL_ANPVS4_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + // FN_FAL_ANPVS4_DZE has toggleable night vision, attachment support + class FN_FAL_ANPVS4_DZE {type = "trade_weapons";buy[] = {3000,"worth"};sell[] = {1000,"worth"};}; + class Mk43_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class MK43_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class MK43_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class M240_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class M240_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M240_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class Mk48_DZ {type = "trade_weapons";buy[] = {3000,"worth"};sell[] = {1000,"worth"};}; + class Mk48_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class Mk48_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class Mk48_DES_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M249_m145_EP1_DZE {type = "trade_weapons";buy[] = {5000,"worth"};sell[] = {2000,"worth"};}; + class MK43_M145_DZ {type = "trade_weapons";buy[] = {5000,"worth"};sell[] = {2000,"worth"};}; + class m240_scoped_EP1_DZE {type = "trade_weapons";buy[] = {5000,"worth"};sell[] = {2000,"worth"};}; + class Pecheneg_DZ {type = "trade_weapons";buy[] = {5000,"worth"};sell[] = {2000,"worth"};}; + class VSS_vintorez_DZE {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class WA2000_DZ {type = "trade_weapons";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class MK17_Sniper_DZ {type = "trade_weapons";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class MK17_Sniper_SD_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class M110_NV_DZ {type = "trade_weapons";buy[] = {7000,"worth"};sell[] = {4000,"worth"};}; + class RSASS_DZ {type = "trade_weapons";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class RSASS_SD_DZ {type = "trade_weapons";buy[] = {7000,"worth"};sell[] = {3500,"worth"};}; + class RSASS_TWS_DZ {type = "trade_weapons";buy[] = {14000,"worth"};sell[] = {7000,"worth"};}; + class RSASS_TWS_SD_DZ {type = "trade_weapons";buy[] = {15000,"worth"};sell[] = {8000,"worth"};}; + class HK417_Sniper_DZ {type = "trade_weapons";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class HK417_Sniper_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {3000,"worth"};}; + class MK14_Sniper_DZ {type = "trade_weapons";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class MK14_Sniper_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {3000,"worth"};}; + class DMR_DZ {type = "trade_weapons";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; + class DMR_Gh_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {3100,"worth"};}; + class M21_DZ {type = "trade_weapons";buy[] = {5000,"worth"};sell[] = {3000,"worth"};}; + class XM2010_DZ {type = "trade_weapons";buy[] = {8000,"worth"};sell[] = {4000,"worth"};}; + class XM2010_SD_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class XM2010_NV_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class XM2010_NV_SD_DZ {type = "trade_weapons";buy[] = {12000,"worth"};sell[] = {6000,"worth"};}; + class XM2010_TWS_DZ {type = "trade_weapons";buy[] = {15000,"worth"};sell[] = {8000,"worth"};}; + class XM2010_TWS_SD_DZ {type = "trade_weapons";buy[] = {16000,"worth"};sell[] = {9000,"worth"};}; + class BAF_LRR_scoped {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class BAF_LRR_scoped_W {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + //Tan Lapua // DayZ Mod version + class L115A3_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + //Green Lapua // DayZ Mod version + class L115A3_2_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class MSR_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class MSR_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {5000,"worth"};}; + class Barrett_MRAD_Iron_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class Barrett_MRAD_CCO_DZ {type = "trade_weapons";buy[] = {12000,"worth"};sell[] = {5200,"worth"};}; + class Barrett_MRAD_Sniper_DZ {type = "trade_weapons";buy[] = {14000,"worth"};sell[] = {6000,"worth"};}; + class m107_DZ {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {6000,"worth"};}; + class Anzio_20_DZ {type = "trade_weapons";buy[] = {15000,"worth"};sell[] = {8000,"worth"};}; + class BAF_AS50_scoped_DZ {type = "trade_weapons";buy[] = {15000,"worth"};sell[] = {8000,"worth"};}; + class M200_CheyTac_DZ {type = "trade_weapons";buy[] = {15000,"worth"};sell[] = {8000,"worth"};}; + class M200_CheyTac_SD_DZ {type = "trade_weapons";buy[] = {16000,"worth"};sell[] = {9000,"worth"};}; + class KSVK_DZE {type = "trade_weapons";buy[] = {10000,"worth"};sell[] = {6000,"worth"};}; + class BAF_L85A2_RIS_TWS_DZ {type = "trade_weapons";buy[] = {15000,"worth"};sell[] = {8000,"worth"};}; +}; + +//Ammunition +class Category_4 { + class 30Rnd_556x45_StanagSD {type = "trade_items";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class 6Rnd_762x51_WA2000 {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class 20Rnd_762x51_B_SCAR {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class 20Rnd_762x51_SB_SCAR {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class 20Rnd_762x51_FNFAL {type = "trade_items";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class 20Rnd_762x51_DMR {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class 20Rnd_762x51_RSASS {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class 20Rnd_762x51_RSASS_SD {type = "trade_items";buy[] = {1200,"worth"};sell[] = {600,"worth"};}; + class 5Rnd_762x67_XM2010 {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class 5Rnd_762x67_XM2010_SD {type = "trade_items";buy[] = {700,"worth"};sell[] = {350,"worth"};}; + class 5Rnd_86x70_L115A1 {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class 7Rnd_86x70_MSR {type = "trade_items";buy[] = {700,"worth"};sell[] = {300,"worth"};}; + class 7Rnd_86x70_MSR_SD {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class 10Rnd_86x70_MRAD {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class 10Rnd_127x99_M107 {type = "trade_items";buy[] = {800,"worth"};sell[] = {500,"worth"};}; + class 3rnd_Anzio_20x102mm {type = "trade_items";buy[] = {1800,"worth"};sell[] = {900,"worth"};}; + class 5Rnd_127x99_AS50 {type = "trade_items";buy[] = {1600,"worth"};sell[] = {800,"worth"};}; + class 5Rnd_127x99_as50_CP {type = "trade_items";buy[] = {1700,"worth"};sell[] = {850,"worth"};}; + class 5Rnd_127x108_KSVK {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class 5Rnd_408_CheyTac {type = "trade_items";buy[] = {1600,"worth"};sell[] = {800,"worth"};}; + class 5Rnd_408_CheyTac_SD {type = "trade_items";buy[] = {1700,"worth"};sell[] = {1000,"worth"};}; + class 50Rnd_127x107_DSHKM {type = "trade_items";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class 200Rnd_556x45_M249 {type = "trade_items";buy[] = {1600,"worth"};sell[] = {800,"worth"};}; + class 100Rnd_762x51_M240 {type = "trade_items";buy[] = {1600,"worth"};sell[] = {800,"worth"};}; + class 100Rnd_762x54_PK {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class 100Rnd_127x99_M2 {type = "trade_items";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class 500Rnd_145x115_KPVT {type = "trade_items";buy[] = {20000,"worth"};sell[] = {10000,"worth"};}; + class 48Rnd_40mm_MK19 {type = "trade_items";buy[] = {60000,"worth"};sell[] = {30000,"worth"};}; + class 29Rnd_30mm_AGS30 {type = "trade_items";buy[] = {40000,"worth"};sell[] = {20000,"worth"};}; + class pook_1300Rnd_762x51_M60 {type = "trade_items";buy[] = {2800,"worth"};sell[] = {1400,"worth"};}; + class 220Rnd_25mm_GAU22 {type = "trade_items";buy[] = {60000,"worth"};sell[] = {30000,"worth"};}; + class 150Rnd_30mmAP_2A42 {type = "trade_items";buy[] = {60000,"worth"};sell[] = {30000,"worth"};}; + class 750Rnd_M197_AH1 {type = "trade_items";buy[] = {150000,"worth"};sell[] = {75000,"worth"};}; + class 28Rnd_FFAR {type = "trade_items";buy[] = {500000,"worth"};sell[] = {250000,"worth"};}; +}; + +//Clothes +class Category_5 { + class Skin_CamoWinter1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_CamoWinter1W_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_CamoWinter2_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_CamoWinter2W_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Special_Forces_GL_DES_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Drake_Light_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Soldier_Sniper_PMC_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_FR_OHara_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_FR_Rodriguez_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Sniper1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Sniper1W_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Sniper_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Sniper_EP1W_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_SniperWinter_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_SniperWinterW_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Graves_Light_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Soldier_Bodyguard_AA12_PMC_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Camo1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Rocket_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Soldier1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Soldier_TL_PMC_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_USMC_Soldier_Officer_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_USMC_Soldier_MG_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_USMC_Soldier_Pilot_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_FR_TL_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_FR_R_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_FR_Sapper_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_FR_Marksman_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_FR_Assault_R_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_SL_DES_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_US_Soldier_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_UN_CDF_Soldier_Guard_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_UN_CDF_Soldier_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_GER_Soldier_TL_EP1_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_BAF_Soldier_Officer_MTP_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_BAF_Soldier_N_MTP_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_Tamika_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skin_OperatorW_DZ {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + + //Normal military skins sell only + class Skin_SniperW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert01_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert02_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert03_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert04_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert05_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert06_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert07_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert08_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow01_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow02_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow03_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow04_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow05_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Urban01_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood01_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood02_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood03_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood04_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood05_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood06_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood07_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood08_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood09_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood10_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood11_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood12_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood13_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood14_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood15_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood16_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert01W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert02W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert03W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert04W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert05W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert06W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert07W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Desert08W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow01W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow02W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow03W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow04W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Snow05W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Urban01W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood01W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood02W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood03W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood04W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood05W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood06W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood07W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood08W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood09W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood10W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood11W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood12W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood13W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood14W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood15W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GhillieFull_Wood16W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Sniper_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Sniper_ACRW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_military_helmet_wdl_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_military_helmet_wdlW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_military_head_wdl_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_military_helmet_grey_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_military_helmet_greyW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_military_head_grey_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_scientist1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_scientist1W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_scientist1_head_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_scientist2_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_scientist2W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_scientist2_head_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_cloth_loner_head_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_neutral_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_neutralW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_head_neutral_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_fred_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_fredW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_head_fred_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_duty_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_dutyW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_head_duty_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_camo_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_mask_camoW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_gsc_eco_stalker_head_camo_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_Apo_Rifleman_01_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_Apo_Rifleman_02_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_Apo_Rifleman_03_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_Apo_Rifleman_04_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_Apo_Rifleman_05_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_Apo_Rifleman_06_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_TL_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Scout_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Sniper_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Spotter_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_TL_W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Scout_W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Assaultman_W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Medic_W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_TL_D_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Scout_D_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Marksman_D_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_Operator_D_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_SG_GRU_MG_D_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier805_DES_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_805_Wdl_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Crew_Dst_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Officer_Wdl_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Recon_Wdl_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Spec1_Wdl_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Spec2_Wdl_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Spec3_Wdl_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Spec_Demo_Dst_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_CZ_Soldier_Light_Wdl_ACR_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GER_Soldier_EP1_des_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GER_Soldier_TL_EP1_des_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GER_Soldier_EP1_wdl_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Skin_GER_Soldier_TL_EP1_wdl_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + + //Bandit Skins sell only + class Skin_Bandit1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Bandit2_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Bandit3_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Bandit4_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Bandit5_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_BanditW1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_BanditW2_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_GUE_Commander_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_GUE_Soldier_2_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_GUE_Soldier_CO_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_GUE_Soldier_Crew_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_GUE_Soldier_Sniper_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_SniperBanditW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Ins_Soldier_GL_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_TK_INS_Soldier_EP1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_TK_INS_Soldier_EP2_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_TK_INS_Soldier_EP3_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_TK_INS_Warlord_EP1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_RU_Soldier_Crew_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_TK_INS_Soldier_AR_EP1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_TK_GUE_Soldier_EP1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_RU_Soldier_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_RU_Soldier_Officer_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_RUS_Soldier1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_RUS_Commander_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_MVD_Soldier_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Ins_Soldier_2_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Ins_Commander_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Ins_Soldier_Crew_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_CDF_Soldier_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_TK_Soldier_Sniper_EP1_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_TK_Soldier_Sniper_EP1W_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Nac_Soldier_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_Nac_SoldierW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; + class Skin_GunnerW_DZ {type = "trade_items";buy[] = {-1,"worth"};sell[] = {70,"worth"};}; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/MedicalSupplies.hpp b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/MedicalSupplies.hpp new file mode 100755 index 0000000..a6a99ff --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/MedicalSupplies.hpp @@ -0,0 +1,29 @@ +class Category_33 { + class ItemAntibiotic {type = "trade_items";buy[] = {400,"worth"};sell[] = {100,"worth"};}; + class ItemBandage {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class ItemSepsisBandage {type = "trade_items";buy[] = {-1,"worth"};sell[] = {20,"worth"};}; + class ItemAntibacterialWipe {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + // bloodBagONEG is automatically swapped with ItemBloodbag if dayz_classicBloodBagSystem = true; Other typed bags and bloodTester are ignored. + class bloodBagONEG {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class bloodBagANEG {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class bloodBagAPOS {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class bloodBagBNEG {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class bloodBagBPOS {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class bloodBagABNEG {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class bloodBagABPOS {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class bloodBagOPOS {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class bloodTester {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class transfusionKit {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class emptyBloodBag {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class ItemEpinephrine {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class ItemHeatPack {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class ItemMorphine {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class equip_woodensplint {type = "trade_items";buy[] = {-1,"worth"};sell[] = {5,"worth"};}; + class ItemPainkiller {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class equip_gauze {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class equip_gauzepackaged {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class equip_rag {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class equip_string {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class equip_herb_box {type = "trade_items";buy[] = {-1,"worth"};sell[] = {5,"worth"};}; + class ItemKiloHemp {type = "trade_items";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Parts.hpp b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Parts.hpp new file mode 100755 index 0000000..96e9511 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Parts.hpp @@ -0,0 +1,101 @@ +//Tools +class Category_34 { + class ItemWatch {type = "trade_weapons";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class ItemCompass {type = "trade_weapons";buy[] = {6,"worth"};sell[] = {3,"worth"};}; + class ItemMap {type = "trade_weapons";buy[] = {6,"worth"};sell[] = {3,"worth"};}; + class ItemGPS {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class ItemRadio {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Binocular {type = "trade_weapons";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class Binocular_Vector {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class NVGoggles {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class NVGoggles_DZE {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class ItemFlashlight {type = "trade_weapons";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class MeleeFlashlight {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1,"worth"};}; + class ItemFlashlightRed {type = "trade_weapons";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class MeleeFlashlightRed {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {5,"worth"};}; + class ItemMatchbox {type = "trade_weapons";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class ItemEtool {type = "trade_weapons";buy[] = {90,"worth"};sell[] = {60,"worth"};}; + class ItemShovel {type = "trade_weapons";buy[] = {90,"worth"};sell[] = {60,"worth"};}; + class ItemHatchet {type = "trade_weapons";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class MeleeHatchet {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1,"worth"};}; + class ItemKnife {type = "trade_weapons";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class ItemToolbox {type = "trade_weapons";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class Handsaw_DZE {type = "trade_weapons";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class Hammer_DZE {type = "trade_weapons";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class ItemCrowbar {type = "trade_weapons";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class MeleeCrowbar {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1,"worth"};}; + class ItemMachete {type = "trade_weapons";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class MeleeMachete {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1,"worth"};}; + class ItemFishingPole {type = "trade_weapons";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class MeleeFishingPole {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {10,"worth"};}; + class ItemPickaxe {type = "trade_weapons";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class ItemSledge {type = "trade_weapons";buy[] = {80,"worth"};sell[] = {40,"worth"};}; + class MeleeSledge {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {40,"worth"};}; + class ItemKeyKit {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {100,"worth"};}; + class ItemSolder_DZE {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class ChainSaw {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {100,"worth"};}; + class ChainSawB {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {100,"worth"};}; + class ChainSawG {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {100,"worth"};}; + class ChainSawP {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {100,"worth"};}; + class ChainSawR {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {100,"worth"};}; +}; + +//Building Supplies +class Category_35 { + class TrapBear {type = "trade_items";buy[] = {-1,"worth"};sell[] = {60,"worth"};}; + class equip_tent_poles {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class ItemDesertTent {type = "trade_items";buy[] = {60,"worth"};sell[] = {30,"worth"};}; + class ItemDomeTent {type = "trade_items";buy[] = {60,"worth"};sell[] = {30,"worth"};}; + class ItemTent {type = "trade_items";buy[] = {80,"worth"};sell[] = {40,"worth"};}; + class ItemTentWinter {type = "trade_items";buy[] = {80,"worth"};sell[] = {40,"worth"};}; + class ItemWinterDomeTent {type = "trade_items";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class ItemLightBulb {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class ItemGenerator {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class equip_brick {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class equip_duct_tape {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class equip_rope {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class equip_hose {type = "trade_items";buy[] = {6,"worth"};sell[] = {3,"worth"};}; + class equip_lever {type = "trade_items";buy[] = {6,"worth"};sell[] = {3,"worth"};}; + class equip_nails {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class ItemScrews {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class equip_scrapelectronics {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class equip_floppywire {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class equip_metal_sheet {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class equip_1inch_metal_pipe {type = "trade_items";buy[] = {6,"worth"};sell[] = {3,"worth"};}; + class equip_2inch_metal_pipe {type = "trade_items";buy[] = {8,"worth"};sell[] = {4,"worth"};}; + class ItemWire {type = "trade_items";buy[] = {6,"worth"};sell[] = {3,"worth"};}; + class ItemSandbag {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class ItemTankTrap {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class ItemPole {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class ItemMetalSheet {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class ItemCorrugated {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class plot_pole_kit {type = "trade_items";buy[] = {15000,"worth"};sell[] = {6000,"worth"};}; + class ItemComboLock {type = "trade_items";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class ItemLockbox {type = "trade_items";buy[] = {-100,"worth"};sell[] = {4000,"worth"};}; + class ItemLockbox2 {type = "trade_items";buy[] = {-100,"worth"};sell[] = {6000,"worth"};}; + class ItemLockboxWinter {type = "trade_items";buy[] = {-100,"worth"};sell[] = {4000,"worth"};}; + class ItemLockboxWinter2 {type = "trade_items";buy[] = {-100,"worth"};sell[] = {6000,"worth"};}; + class ItemVault {type = "trade_items";buy[] = {10000,"worth"};sell[] = {10000,"worth"};}; + class ItemVault2 {type = "trade_items";buy[] = {-10000,"worth"};sell[] = {15000,"worth"};}; + class ItemMixOil {type = "trade_items";buy[] = {8,"worth"};sell[] = {4,"worth"};}; + class helipad_civil_kit {type = "trade_items";buy[] = {10000,"worth"};sell[] = {2000,"worth"};}; + class helipad_rescue_kit {type = "trade_items";buy[] = {10000,"worth"};sell[] = {2000,"worth"};}; + class helipad_army_kit {type = "trade_items";buy[] = {10000,"worth"};sell[] = {2000,"worth"};}; + class helipad_cross_kit {type = "trade_items";buy[] = {10000,"worth"};sell[] = {2000,"worth"};}; + class helipad_parkborder_kit {type = "trade_items";buy[] = {10000,"worth"};sell[] = {2000,"worth"};}; +}; + +//Vehicle Parts +class Category_36 { + class PartGeneric {type = "trade_items";buy[] = {200,"worth"};sell[] = {6,"worth"};}; + class PartWheel {type = "trade_items";buy[] = {200,"worth"};sell[] = {2,"worth"};}; + class PartGlass {type = "trade_items";buy[] = {100,"worth"};sell[] = {1,"worth"};}; + class PartEngine {type = "trade_items";buy[] = {500,"worth"};sell[] = {10,"worth"};}; + class PartVRotor {type = "trade_items";buy[] = {500,"worth"};sell[] = {10,"worth"};}; + class PartFueltank {type = "trade_items";buy[] = {200,"worth"};sell[] = {5,"worth"};}; + class ItemFuelcan {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; + class ItemFuelcanEmpty {type = "trade_items";buy[] = {1,"worth"};sell[] = {1,"worth"};}; + class ItemJerrycan {type = "trade_items";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class ItemJerrycanEmpty {type = "trade_items";buy[] = {2,"worth"};sell[] = {1,"worth"};}; +}; + diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Vehicles.hpp b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Vehicles.hpp new file mode 100755 index 0000000..1fde29a --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Vehicles.hpp @@ -0,0 +1,179 @@ +//Bikes/ATV +class Category_37 { + class MMT_Civ_DZE {type = "trade_any_bicycle";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class Old_bike_TK_CIV_EP1_DZE {type = "trade_any_bicycle";buy[] = {4,"worth"};sell[] = {2,"worth"};}; + class Old_moto_TK_Civ_EP1_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class M1030_US_DES_EP1_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class TT650_Civ_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class TT650_Ins_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class TT650_TK_CIV_EP1_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ATV_CZ_EP1_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ATV_CIV_CP_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ATV_CIV_Grey_CP_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ATV_CIV_Red_CP_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ATV_CIV_Green_CP_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class BAF_ATV_W_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ATV_CIV_Blue_CP_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ATV_CIV_Yellow_CP_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ATV_CIV_Purple_CP_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class ATV_CIV_Black_CP_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; +}; + +//Cars +class Category_38 { + class Octavia_ACR_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Skoda_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class SkodaBlue_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class SkodaGreen_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class SkodaRed_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class VolhaLimo_TK_CIV_EP1_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Volha_1_TK_CIV_EP1_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Volha_2_TK_CIV_EP1_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class VWGolf_DZE {type = "trade_any_vehicle";buy[] = {300,"worth"};sell[] = {200,"worth"};}; + class Mini_Cooper_DZE {type = "trade_any_vehicle";buy[] = {300,"worth"};sell[] = {200,"worth"};}; + class car_hatchback_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class car_hatchback_red_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class car_sedan_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class GLT_M300_ST_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class GLT_M300_LT_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Lada1_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Lada1_TK_CIV_EP1_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Lada2_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Lada2_TK_CIV_EP1_DZE {type = "trade_any_vehicle";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class LadaLM_DZE {type = "trade_any_vehicle";buy[] = {300,"worth"};sell[] = {200,"worth"};}; +}; + +//Pick-ups +class Category_39 { + class datsun1_civil_3_open_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class datsun1_civil_1_open_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class datsun1_green_open_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class datsun1_civil_2_covered_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class datsun1_red_covered_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class hilux1_civil_1_open_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class hilux1_civil_3_open_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class hilux1_civil_2_covered_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; +}; + +//UAZs +class Category_40 { + class UAZ_CDF_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class UAZ_INS_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class UAZ_RU_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class UAZ_Unarmed_TK_CIV_EP1_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class UAZ_Unarmed_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class UAZ_Unarmed_UN_EP1_DZE {type = "trade_any_vehicle";buy[] = {800,"worth"};sell[] = {400,"worth"};}; +}; + +//SUVs/Nissans +class Category_41 { + class SUV_TK_CIV_EP1_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {500,"worth"};}; + class SUV_Blue {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {500,"worth"};}; + class SUV_Charcoal {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {500,"worth"};}; + class SUV_Green {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {500,"worth"};}; + class SUV_Orange {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {500,"worth"};}; + class SUV_Pink {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {500,"worth"};}; + class SUV_Red {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {500,"worth"};}; + class SUV_Silver {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {500,"worth"};}; + class SUV_White {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {500,"worth"};}; + class SUV_Yellow {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {500,"worth"};}; + class SUV_Camo {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class Nissan_Orange_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class Nissan_Blue_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class Nissan_Mod_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class Nissan_Gold_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class Nissan_Green_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class Nissan_Black_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class Nissan_Pink_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class Nissan_Red_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class Nissan_Ruben_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class Nissan_V_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class Nissan_Yellow_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; +}; + +//Cargo Trucks +class Category_42 { + class Ural_INS_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class Ural_CDF_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class UralOpen_CDF_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class Ural_TK_CIV_EP1_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class Ural_UN_EP1_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class UralCivil_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class UralCivil2_DZE {type = "trade_any_vehicle";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class UralSupply_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class UralReammo_CDF_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class UralReammo_INS_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class UralRepair_CDF_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class UralRepair_INS_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class V3S_Open_TK_CIV_EP1_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class V3S_Open_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class V3S_Civ_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class V3S_TK_EP1_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class V3S_Camper_DZE {type = "trade_any_vehicle";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class V3S_RA_TK_GUE_EP1_DZE {type = "trade_any_vehicle";buy[] = {8000,"worth"};sell[] = {4000,"worth"};}; + class Kamaz_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class KamazOpen_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class KamazRepair_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class KamazReammo_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class MTVR_DES_EP1_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class MTVR_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class MTVR_Open_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class MtvrRepair_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class MtvrReammo_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class T810A_ACR_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class T810A_ACR_DES_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class T810A_ACR_OPEN_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class T810A_ACR_DES_OPEN_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class T810_ACR_REAMMO_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class T810_ACR_REAMMO_DES_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class T810_ACR_REPAIR_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class T810_ACR_REPAIR_DES_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; +}; + +//Fuel Trucks +class Category_43 { + class UralRefuel_TK_EP1_DZ {type = "trade_any_vehicle";buy[] = {7000,"worth"};sell[] = {3000,"worth"};}; + class UralRefuel_INS_DZE {type = "trade_any_vehicle";buy[] = {7000,"worth"};sell[] = {3000,"worth"};}; + class UralRefuel_CDF_DZE {type = "trade_any_vehicle";buy[] = {7000,"worth"};sell[] = {3000,"worth"};}; + class V3S_Refuel_TK_GUE_EP1_DZ {type = "trade_any_vehicle";buy[] = {7000,"worth"};sell[] = {3000,"worth"};}; + class KamazRefuel_DZ {type = "trade_any_vehicle";buy[] = {7000,"worth"};sell[] = {3000,"worth"};}; + class MtvrRefuel_DES_EP1_DZ {type = "trade_any_vehicle";buy[] = {7000,"worth"};sell[] = {3000,"worth"};}; + class MtvrRefuel_DZ {type = "trade_any_vehicle";buy[] = {7000,"worth"};sell[] = {3000,"worth"};}; + class T810A_ACR_REFUEL_DZE {type = "trade_any_vehicle";buy[] = {7000,"worth"};sell[] = {3000,"worth"};}; + class T810A_ACR_REFUEL_DES_DZE {type = "trade_any_vehicle";buy[] = {7000,"worth"};sell[] = {3000,"worth"};}; +}; + +//Military Unarmed +class Category_44 { + class Jeep_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class LandRover_CZ_EP1_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class LandRover_TK_CIV_EP1_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class LandRover_ACR_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class BAF_Offroad_D_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class BAF_Offroad_W_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class LandRover_Ambulance_ACR_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class LandRover_Ambulance_Des_ACR_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class BTR40_TK_INS_EP1_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class BTR40_TK_GUE_EP1_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class GAZ_Vodnik_MedEvac_DZE {type = "trade_any_vehicle";buy[] = {10000,"worth"};sell[] = {5000,"worth"};}; + class HMMWV_M1035_DES_EP1_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class HMMWV_Ambulance_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class HMMWV_Ambulance_CZ_DES_EP1_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class HMMWV_DES_EP1_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class HMMWV_DZ {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; + class Hummer_DZE {type = "trade_any_vehicle";buy[] = {4000,"worth"};sell[] = {2000,"worth"};}; +}; + +//Miscellaneous +class Category_45 { + class Ikarus_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class Ikarus_TK_CIV_EP1_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class Ikarus_White_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class Ikarus_Armored_DZE {type = "trade_any_vehicle";buy[] = {-2000,"worth"};sell[] = {5000,"worth"};}; + class S1203_TK_CIV_EP1_DZE {type = "trade_any_vehicle";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class S1203_ambulance_EP1_DZE {type = "trade_any_vehicle";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class Tractor_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class TractorOld_DZE {type = "trade_any_vehicle";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class Tractor_Armored_DZE {type = "trade_any_vehicle";buy[] = {-2000,"worth"};sell[] = {6000,"worth"};}; + class ScrapAPC_DZE {type = "trade_any_vehicle";buy[] = {6000,"worth"};sell[] = {3000,"worth"};}; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Weapons.hpp b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Weapons.hpp new file mode 100755 index 0000000..bc3f23b --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Weapons.hpp @@ -0,0 +1,697 @@ +//Attachments +class Category_12 { + class Attachment_BELT {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class Attachment_SA58RIS {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class Attachment_Ghillie {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Attachment_Ghillie_Desert {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Attachment_FL_Pist {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Attachment_MFL_Pist {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class Attachment_FL {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Attachment_MFL {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class Attachment_CCO {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class Attachment_Holo {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class Attachment_Kobra {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class Attachment_SCOPED {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class Attachment_ACOG {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class Attachment_ANPVS4 {type = "trade_items";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class Attachment_Tws {type = "trade_items";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class Attachment_PSO1 {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class Attachment_NSPU {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class Attachment_Sup9 {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class Attachment_Sup10 {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class Attachment_Sup45 {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class Attachment_Sup545 {type = "trade_items";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class Attachment_Sup556 {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class Attachment_Sup762 {type = "trade_items";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class Attachment_Sup68 {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class Attachment_Sup939 {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class Attachment_Sup57 {type = "trade_items";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class Attachment_GP25 {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class Attachment_M203 {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; +}; + +//Pistols +class Category_13 { + class Revolver_DZ {type = "trade_weapons";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class Colt_Revolver_DZ {type = "trade_weapons";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class Colt_Anaconda_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class Colt_Bull_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class Colt_Python_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class DesertEagle_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class M1911_DZ {type = "trade_weapons";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class M1911_2_DZ {type = "trade_weapons";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class Kimber_M1911_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class Kimber_M1911_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {250,"worth"};}; + class USP_DZ {type = "trade_weapons";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class USP_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class PPK_DZ {type = "trade_weapons";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class Tokarew_TT33_DZ {type = "trade_weapons";buy[] = {30,"worth"};sell[] = {10,"worth"};}; + class Makarov_DZ {type = "trade_weapons";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class Makarov_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {210,"worth"};}; + class APS_DZ {type = "trade_weapons";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class APS_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {210,"worth"};}; + class P38_DZ {type = "trade_weapons";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class BrowningHP_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class MK22_DZ {type = "trade_weapons";buy[] = {60,"worth"};sell[] = {30,"worth"};}; + class MK22_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {230,"worth"};}; + class MK22_2_DZ {type = "trade_weapons";buy[] = {60,"worth"};sell[] = {30,"worth"};}; + class MK22_2_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {230,"worth"};}; + class P226_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class P226_Silver_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class M9_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class M9_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {250,"worth"};}; + class M9_Camo_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class M9_Camo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {250,"worth"};}; + class M93R_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class CZ75P_DZ {type = "trade_weapons";buy[] = {50,"worth"};sell[] = {20,"worth"};}; + class CZ75D_DZ {type = "trade_weapons";buy[] = {50,"worth"};sell[] = {20,"worth"};}; + class CZ75SP_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class CZ75SP_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {250,"worth"};}; + class G17_DZ {type = "trade_weapons";buy[] = {50,"worth"};sell[] = {20,"worth"};}; + class G17_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {120,"worth"};}; + class G17_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {220,"worth"};}; + class G17_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {220,"worth"};}; + class G17_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {320,"worth"};}; + class G17_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {420,"worth"};}; + class G18_DZ {type = "trade_weapons";buy[] = {80,"worth"};sell[] = {40,"worth"};}; + class P99_Black_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class P99_Black_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {250,"worth"};}; + class P99_Green_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class P99_Green_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {250,"worth"};}; + class P99_Silver_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class P99_Silver_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {250,"worth"};}; +}; + +//Submachine Guns +class Category_14 { + class Sa61_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class Mac10_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class TEC9_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class PDW_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class PDW_SD_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class MP5_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {20,"worth"};}; + class MP5_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {220,"worth"};}; + class Scorpion_Evo3_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {20,"worth"};}; + class Scorpion_Evo3_CCO_DZ {type = "trade_weapons";buy[] = {100,"worth"};sell[] = {20,"worth"};}; + class Scorpion_Evo3_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {220,"worth"};}; + class Bizon_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class Bizon_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class Bizon_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class Bizon_Kobra_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class Sten_MK_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class MAT49_DZ {type = "trade_weapons";buy[] = {300,"worth"};sell[] = {100,"worth"};}; + class M31_DZ {type = "trade_weapons";buy[] = {700,"worth"};sell[] = {300,"worth"};}; + class MP7_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class MP7_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class MP7_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class MP7_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class MP7_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + class MP7_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class MP7_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class MP7_CCO_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class MP7_CCO_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class MP7_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class MP7_CCO_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1100,"worth"};}; + class MP7_CCO_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class MP7_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class MP7_Holo_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class MP7_Holo_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class MP7_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class MP7_Holo_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1100,"worth"};}; + class MP7_Holo_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class MP7_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class MP7_ACOG_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class MP7_ACOG_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class MP7_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class MP7_ACOG_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1100,"worth"};}; + class MP7_ACOG_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class Kriss_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class Kriss_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class Kriss_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class Kriss_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class Kriss_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class Kriss_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class TMP_DZ {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class TMP_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class TMP_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class TMP_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class TMP_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class TMP_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class UMP_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class UMP_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class UMP_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class UMP_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class UMP_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class UMP_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class P90_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class P90_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class P90_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class P90_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class P90_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class P90_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; +}; + +//Single-shot/Shotguns +class Category_15 { + class Crossbow_DZ {type = "trade_weapons";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class Crossbow_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {200,"worth"};}; + class Crossbow_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class Crossbow_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {200,"worth"};}; + class Crossbow_Scope_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class Crossbow_CCO_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class Crossbow_Scope_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class Crossbow_CCO_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class Crossbow_Scope_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class RedRyder {type = "trade_weapons";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class MR43_DZ {type = "trade_weapons";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class Winchester1866_DZ {type = "trade_weapons";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class M1014_DZ {type = "trade_weapons";buy[] = {300,"worth"};sell[] = {200,"worth"};}; + class M1014_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class M1014_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class Remington870_DZ {type = "trade_weapons";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class Remington870_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {200,"worth"};}; + class Remington870_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class LeeEnfield_DZ {type = "trade_weapons";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class Mosin_DZ {type = "trade_weapons";buy[] = {40,"worth"};sell[] = {20,"worth"};}; + class Mosin_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {120,"worth"};}; + class Mosin_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {220,"worth"};}; + class Mosin_Belt_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {220,"worth"};}; + class Mosin_Belt_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {320,"worth"};}; + class Mosin_Belt_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {420,"worth"};}; + class Mosin_PU_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {320,"worth"};}; + class Mosin_PU_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {420,"worth"};}; + class Mosin_PU_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {520,"worth"};}; + class Mosin_PU_Belt_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {520,"worth"};}; + class Mosin_PU_Belt_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {620,"worth"};}; + class Mosin_PU_Belt_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {720,"worth"};}; +}; + +//Assault Rifles +class Category_16 { + class KAC_PDW_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class KAC_PDW_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class KAC_PDW_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class KAC_PDW_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class CTAR21_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class CTAR21_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class CTAR21_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class XM8_Compact_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class XM8_DES_Compact_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class XM8_GREY_Compact_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class XM8_GREY_2_Compact_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class XM8_DZ {type = "trade_weapons";buy[] = {500,"worth"};sell[] = {200,"worth"};}; + class XM8_DES_DZ {type = "trade_weapons";buy[] = {500,"worth"};sell[] = {200,"worth"};}; + class XM8_GREY_DZ {type = "trade_weapons";buy[] = {500,"worth"};sell[] = {200,"worth"};}; + class XM8_GREY_2_DZ {type = "trade_weapons";buy[] = {500,"worth"};sell[] = {200,"worth"};}; + class XM8_GL_DZ {type = "trade_weapons";buy[] = {900,"worth"};sell[] = {400,"worth"};}; + class XM8_DES_GL_DZ {type = "trade_weapons";buy[] = {900,"worth"};sell[] = {400,"worth"};}; + class XM8_GREY_GL_DZ {type = "trade_weapons";buy[] = {900,"worth"};sell[] = {400,"worth"};}; + class XM8_Sharpsh_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class XM8_DES_Sharpsh_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class XM8_GREY_Sharpsh_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class XM8_SD_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class CZ805_A1_DZ {type = "trade_weapons";buy[] = {500,"worth"};sell[] = {200,"worth"};}; + class CZ805_A1_GL_DZ {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class CZ805_A2_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class CZ805_A2_SD_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class HK53A3_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class HK53A3_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class HK53A3_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class Masada_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class Masada_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class Masada_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class Masada_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class Masada_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class Masada_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class Masada_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class Masada_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class Masada_BL_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class Masada_BL_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class Masada_BL_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class Masada_BL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class Masada_BL_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class Masada_BL_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class Masada_BL_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class Masada_BL_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class PDR_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class PDR_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class PDR_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class Famas_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class Famas_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class Famas_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class Famas_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class Famas_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class Famas_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class SteyrAug_A3_Green_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class SteyrAug_A3_Black_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class SteyrAug_A3_Blue_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class SteyrAug_A3_Holo_Green_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class SteyrAug_A3_Holo_Black_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class SteyrAug_A3_Holo_Blue_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class SteyrAug_A3_ACOG_Green_DZ {type = "trade_weapons";buy[] = {1200,"worth"};sell[] = {600,"worth"};}; + class SteyrAug_A3_ACOG_Black_DZ {type = "trade_weapons";buy[] = {1200,"worth"};sell[] = {600,"worth"};}; + class SteyrAug_A3_ACOG_Blue_DZ {type = "trade_weapons";buy[] = {1200,"worth"};sell[] = {600,"worth"};}; + class SteyrAug_A3_GL_Green_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class SteyrAug_A3_GL_Black_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class SteyrAug_A3_GL_Blue_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class SteyrAug_A3_Holo_GL_Green_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class SteyrAug_A3_Holo_GL_Black_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class SteyrAug_A3_Holo_GL_Blue_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class SteyrAug_A3_ACOG_GL_Green_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class SteyrAug_A3_ACOG_GL_Black_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class SteyrAug_A3_ACOG_GL_Blue_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class G36C_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class G36C_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class G36C_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class G36C_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class G36C_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class G36C_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class G36C_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class G36C_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + //Iron sight desert camo + class G36C_Camo_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class M16A2_DZ {type = "trade_weapons";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class M16A2_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class M16A4_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class M16A4_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class M16A4_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class M16A4_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class M16A4_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class M16A4_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class M16A4_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class M16A4_CCO_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class M16A4_Holo_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class M16A4_ACOG_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class M16A4_GL_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class M16A4_CCO_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class M16A4_Holo_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class M16A4_ACOG_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class M16A4_GL_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class M16A4_GL_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class M16A4_GL_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class M16A4_GL_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class M16A4_GL_CCO_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class M16A4_GL_Holo_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class M16A4_GL_ACOG_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + class M16A4_GL_CCO_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class M16A4_GL_Holo_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class M16A4_GL_ACOG_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class M4A1_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class M4A1_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class M4A1_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class M4A1_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class M4A1_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class M4A1_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class M4A1_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class M4A1_CCO_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class M4A1_CCO_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class M4A1_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class M4A1_CCO_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + class M4A1_CCO_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class M4A1_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class M4A1_Holo_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class M4A1_Holo_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class M4A1_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class M4A1_Holo_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + class M4A1_Holo_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class M4A1_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class M4A1_ACOG_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class M4A1_ACOG_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class M4A1_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class M4A1_ACOG_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1100,"worth"};}; + class M4A1_ACOG_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M4A1_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class M4A1_GL_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class M4A1_GL_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class M4A1_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class M4A1_GL_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + class M4A1_GL_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class M4A1_GL_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class M4A1_GL_CCO_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class M4A1_GL_CCO_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class M4A1_GL_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class M4A1_GL_CCO_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1100,"worth"};}; + class M4A1_GL_CCO_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M4A1_GL_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class M4A1_GL_Holo_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class M4A1_GL_Holo_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class M4A1_GL_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class M4A1_GL_Holo_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1100,"worth"};}; + class M4A1_GL_Holo_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M4A1_GL_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class M4A1_GL_ACOG_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + class M4A1_GL_ACOG_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class M4A1_GL_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M4A1_GL_ACOG_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1300,"worth"};}; + class M4A1_GL_ACOG_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class HK416_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class HK416_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class HK416_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class HK416_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class HK416_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class HK416_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class HK416_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class HK416_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class HK416_GL_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class HK416_GL_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class HK416_GL_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class HK416_GL_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class HK416C_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class HK416C_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class HK416C_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class HK416C_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class HK416C_GL_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class HK416C_GL_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class HK416C_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class HK416C_GL_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class MK16_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class MK16_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class MK16_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class MK16_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class MK16_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class MK16_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class MK16_GL_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class MK16_GL_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class MK16_GL_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class MK16_GL_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class MK16_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class MK16_GL_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class MK16_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class MK16_GL_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class L85A2_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class L85A2_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class L85A2_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class L85A2_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class L85A2_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class L85A2_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class L85A2_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class L85A2_CCO_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class L85A2_CCO_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class L85A2_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class L85A2_CCO_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + class L85A2_CCO_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class L85A2_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class L85A2_Holo_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class L85A2_Holo_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class L85A2_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class L85A2_Holo_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + class L85A2_Holo_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class L85A2_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class L85A2_ACOG_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class L85A2_ACOG_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class L85A2_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class L85A2_ACOG_SD_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1100,"worth"};}; + class L85A2_ACOG_SD_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class SA58_DZ {type = "trade_weapons";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class SA58_RIS_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class SA58_RIS_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class SA58_RIS_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class SA58_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class SA58_CCO_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class SA58_CCO_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class SA58_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class SA58_Holo_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class SA58_Holo_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class SA58_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class SA58_ACOG_FL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class SA58_ACOG_MFL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + //Desert camo no attachment support + class Sa58V_Camo_CCO_DZ {type = "trade_weapons";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + //Desert camo no attachment support + class Sa58V_Camo_ACOG_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class AKM_DZ {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class AKM_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class AKM_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class RK95_DZ {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class RK95_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class RK95_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class RK95_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {100,"worth"};}; + class RK95_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + class RK95_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1100,"worth"};}; + class Groza1_DZ {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class Groza1_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class Groza1_Sniper_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1300,"worth"};}; + class Groza1_Sniper_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class Groza9_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class Groza9_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class Groza9_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class Groza9_Sniper_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1500,"worth"};}; + class Groza9_GL_Sniper_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class Groza9_Sniper_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class VAL_DZ {type = "trade_weapons";buy[] = {3000,"worth"};sell[] = {1000,"worth"};}; + class VAL_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class VAL_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class AKS74U_DZ {type = "trade_weapons";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class AKS74U_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class AKS74U_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class AKS74U_Kobra_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class AK74_DZ {type = "trade_weapons";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class AK74_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class AK74_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class AK74_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class AK74_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {400,"worth"};}; + class AK74_Kobra_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class AK74_PSO1_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class AK74_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {600,"worth"};}; + class AK74_GL_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class AK74_GL_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class AK74_GL_Kobra_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class AK74_GL_PSO1_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class AK107_DZ {type = "trade_weapons";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class AK107_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class AK107_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class AK107_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class AK107_GL_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};}; + class AK107_GL_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class AN94_DZ {type = "trade_weapons";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class AN94_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};}; + class SCAR_H_AK_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};}; + class SCAR_H_AK_CCO_DZ {type = "trade_weapons";buy[] = {-8,"worth"};sell[] = {600,"worth"};}; + class SCAR_H_AK_HOLO_DZ {type = "trade_weapons";buy[] = {-8,"worth"};sell[] = {600,"worth"};}; + class SCAR_H_AK_ACOG_DZ {type = "trade_weapons";buy[] = {-8,"worth"};sell[] = {800,"worth"};}; + class G3_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class FNFAL_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class FNFAL_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class FNFAL_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M14_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class M14_Gh_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1100,"worth"};}; + class M14_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M14_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M14_CCO_Gh_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1300,"worth"};}; + class M14_Holo_Gh_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1300,"worth"};}; + class MK14_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class MK14_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class MK14_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class MK14_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1500,"worth"};}; + class MK14_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1700,"worth"};}; + class MK14_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1700,"worth"};}; + class MK14_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class MK14_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1900,"worth"};}; + class M1A_SC16_BL_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class M1A_SC16_BL_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M1A_SC16_BL_HOLO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M1A_SC16_BL_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class M1A_SC16_BL_PU_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class M1A_SC16_BL_Sniper_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class M1A_SC16_TAN_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class M1A_SC16_TAN_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M1A_SC16_TAN_HOLO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M1A_SC16_TAN_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class M1A_SC16_TAN_PU_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class M1A_SC16_TAN_Sniper_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class M1A_SC2_BL_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class M1A_SC2_BL_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M1A_SC2_BL_HOLO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M1A_SC2_BL_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class M1A_SC2_BL_PU_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class M1A_SC2_BL_Sniper_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class MK17_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class MK17_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class MK17_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class MK17_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class MK17_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class MK17_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class MK17_GL_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class MK17_GL_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class MK17_GL_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class MK17_GL_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class MK17_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class MK17_GL_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class MK17_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class CZ805_B_GL_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class HK417_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class HK417_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class HK417_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class HK417_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1500,"worth"};}; + class HK417_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1700,"worth"};}; + class HK417_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1700,"worth"};}; + class HK417_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class HK417_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1900,"worth"};}; + class HK417C_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class HK417C_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class HK417C_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class HK417C_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class HK417C_GL_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class HK417C_GL_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class HK417C_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class HK417C_GL_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + //ACR Woodland + class ACR_WDL_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class ACR_WDL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_WDL_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class ACR_WDL_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_WDL_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class ACR_WDL_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_WDL_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_WDL_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_WDL_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class ACR_WDL_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_WDL_CCO_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_WDL_CCO_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_WDL_Holo_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_WDL_Holo_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_WDL_ACOG_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_WDL_ACOG_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class ACR_WDL_TWS_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_WDL_TWS_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_WDL_TWS_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_WDL_TWS_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class ACR_WDL_NV_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_WDL_NV_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_WDL_NV_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_WDL_NV_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + //ACR Black + class ACR_BL_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class ACR_BL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_BL_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class ACR_BL_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_BL_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class ACR_BL_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_BL_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_BL_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_BL_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class ACR_BL_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_BL_CCO_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_BL_CCO_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_BL_Holo_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_BL_Holo_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_BL_ACOG_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_BL_ACOG_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class ACR_BL_TWS_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_BL_TWS_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_BL_TWS_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_BL_TWS_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class ACR_BL_NV_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_BL_NV_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_BL_NV_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_BL_NV_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + //ACR Desert + class ACR_DES_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class ACR_DES_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_DES_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class ACR_DES_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_DES_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class ACR_DES_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_DES_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_DES_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_DES_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class ACR_DES_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_DES_CCO_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_DES_CCO_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_DES_Holo_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_DES_Holo_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_DES_ACOG_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_DES_ACOG_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class ACR_DES_TWS_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_DES_TWS_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_DES_TWS_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_DES_TWS_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class ACR_DES_NV_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_DES_NV_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_DES_NV_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_DES_NV_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + //ACR Snow + class ACR_SNOW_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class ACR_SNOW_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_SNOW_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class ACR_SNOW_CCO_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_SNOW_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class ACR_SNOW_Holo_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_SNOW_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_SNOW_ACOG_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_SNOW_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class ACR_SNOW_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_SNOW_CCO_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_SNOW_CCO_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_SNOW_Holo_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_SNOW_Holo_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_SNOW_ACOG_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_SNOW_ACOG_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class ACR_SNOW_TWS_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_SNOW_TWS_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_SNOW_TWS_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_SNOW_TWS_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; + class ACR_SNOW_NV_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class ACR_SNOW_NV_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1600,"worth"};}; + class ACR_SNOW_NV_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1800,"worth"};}; + class ACR_SNOW_NV_GL_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {2000,"worth"};}; +}; + +//Sniper Rifles +class Category_17 { + class CZ550_DZ {type = "trade_weapons";buy[] = {600,"worth"};sell[] = {300,"worth"};}; + class M4SPR_DZE {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {600,"worth"};}; + class CZ750_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {600,"worth"};}; + class M24_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {600,"worth"};}; + class M24_Gh_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + // desert camo + class M24_Des_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {600,"worth"};}; + class M40A3_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {600,"worth"};}; + class M40A3_Gh_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + // iron sights + class SVD_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {600,"worth"};}; + // iron sights and ghillie + class SVD_Gh_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class SVD_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class SVD_PSO1_Gh_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1100,"worth"};}; + // desert camo + class SVD_PSO1_Gh_DES_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1100,"worth"};}; + class SVD_NSPU_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class SVU_PSO1_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; +}; + +//Light Machine Guns +class Category_18 { + class RPK74_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class RPK74_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class RPK74_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {900,"worth"};}; + class RPK_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class RPK_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class RPK_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class UK59_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class PKM_DZ {type = "trade_weapons";buy[] = {3000,"worth"};sell[] = {1000,"worth"};}; + class XM8_SAW_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {600,"worth"};}; + class XM8_DES_SAW_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {600,"worth"};}; + class XM8_GREY_SAW_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {600,"worth"};}; + class L86A2_LSW_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class MG36_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {600,"worth"};}; + class MG36_Camo_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {600,"worth"};}; + class L110A1_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class L110A1_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class L110A1_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};}; + class M249_EP1_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {600,"worth"};}; + class M249_DZ {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {600,"worth"};}; + class M249_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class M249_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {800,"worth"};}; + class M60A4_EP1_DZE {type = "trade_weapons";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class Mk43_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class MK43_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class MK43_ACOG_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1400,"worth"};}; + class M240_DZ {type = "trade_weapons";buy[] = {2000,"worth"};sell[] = {1000,"worth"};}; + class M240_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class M240_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class Mk48_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};}; + class Mk48_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class Mk48_Holo_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; + class Mk48_DES_CCO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1200,"worth"};}; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Wholesale.hpp b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Wholesale.hpp new file mode 100755 index 0000000..9c44c8e --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/Category/Wholesale.hpp @@ -0,0 +1,19 @@ +class Category_50 { + class bulk_17Rnd_9x19_glock17 {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class bulk_15Rnd_9x19_M9SD {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; + class bulk_30Rnd_9x19_MP5SD {type = "trade_items";buy[] = {300,"worth"};sell[] = {300,"worth"};}; + class bulk_30Rnd_556x45_StanagSD {type = "trade_items";buy[] = {400,"worth"};sell[] = {400,"worth"};}; + class bulk_ItemSandbag {type = "trade_items";buy[] = {3000,"worth"};sell[] = {3000,"worth"};}; + class bulk_ItemTankTrap {type = "trade_items";buy[] = {200,"worth"};sell[] = {200,"worth"};}; + class bulk_ItemWire {type = "trade_items";buy[] = {50,"worth"};sell[] = {50,"worth"};}; + class bulk_PartGeneric {type = "trade_items";buy[] = {800,"worth"};sell[] = {800,"worth"};}; + class PartPlywoodPack {type = "trade_items";buy[] = {20,"worth"};sell[] = {10,"worth"};}; + class PartPlankPack {type = "trade_items";buy[] = {10,"worth"};sell[] = {5,"worth"};}; + class ItemConcreteBlock {type = "trade_items";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class CementBag {type = "trade_items";buy[] = {400,"worth"};sell[] = {200,"worth"};}; + class CinderBlocks {type = "trade_items";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class MortarBucket {type = "trade_items";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class ItemRSJ {type = "trade_items";buy[] = {1000,"worth"};sell[] = {500,"worth"};}; + class ItemFuelBarrelEmpty {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};}; + class ItemFuelBarrel {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};}; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/DayZ Epoch Currency Values.txt b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/DayZ Epoch Currency Values.txt new file mode 100755 index 0000000..cd2e851 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/DayZ Epoch Currency Values.txt @@ -0,0 +1,65 @@ +DayZ Epoch Currency Values + +Item Worth +**Silver Bars** +ItemSilverBar 1 +ItemSilverBar2oz 2 +ItemSilverBar3oz 3 +ItemSilverBar4oz 4 +ItemSilverBar5oz 5 +ItemSilverBar6oz 6 +ItemSilverBar7oz 7 +ItemSilverBar8oz 8 +ItemSilverBar9oz 9 +ItemSilverBar10oz 10 + +**Silver Briefcases** +ItemBriefcaseS10oz 10 +ItemBriefcaseS20oz 20 +ItemBriefcaseS30oz 30 +ItemBriefcaseS40oz 40 +ItemBriefcaseS50oz 50 +ItemBriefcaseS60oz 60 +ItemBriefcaseS70oz 70 +ItemBriefcaseS80oz 80 +ItemBriefcaseS90oz 90 +ItemBriefcaseS100oz 100 + +**Gold Bars** +ItemGoldBar 100 +ItemGoldBar2oz 200 +ItemGoldBar3oz 300 +ItemGoldBar4oz 400 +ItemGoldBar5oz 500 +ItemGoldBar6oz 600 +ItemGoldBar7oz 700 +ItemGoldBar8oz 800 +ItemGoldBar9oz 900 +ItemGoldBar10oz 1000 + +**Gold Briefcases** +ItemBriefcase10oz 1000 +ItemBriefcase20oz 2000 +ItemBriefcase30oz 3000 +ItemBriefcase40oz 4000 +ItemBriefcase50oz 5000 +ItemBriefcase60oz 6000 +ItemBriefcase70oz 7000 +ItemBriefcase80oz 8000 +ItemBriefcase90oz 9000 +ItemBriefcase100oz 10000 + +**Gems** +ItemTopaz 15000 +ItemObsidian 20000 +ItemSapphire 25000 +ItemAmethyst 30000 +ItemEmerald 35000 +ItemCitrine 40000 +ItemRuby 45000 + +The values of gems are configurable in DZE_GemWorthArray in configVariables.sqf +Aluminum bars, bronze bars, and copper bars have no assigned worth and are unused in DayZ Epoch. +Tin bars have no assigned worth, but can be used for making spare keys with the key maker's kit. +Tin bars can be smelted from 6 empty tin cans at a fire source. + diff --git a/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/cfgServerTrader.hpp b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/cfgServerTrader.hpp new file mode 100755 index 0000000..9c6b78e --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/CfgServerTraderZSC/cfgServerTrader.hpp @@ -0,0 +1,15 @@ +class CfgTraderCategory { + #include "Category\Hero.hpp" + #include "Category\Bandit.hpp" + #include "Category\BlackMarket.hpp" + #include "Category\Weapons.hpp" + #include "Category\Ammunition.hpp" + #include "Category\GeneralStore.hpp" + #include "Category\MedicalSupplies.hpp" + #include "Category\Parts.hpp" + #include "Category\Vehicles.hpp" + #include "Category\AirVehicles.hpp" + #include "Category\Boats.hpp" + #include "Category\Wholesale.hpp" + #include "Category\Currency.hpp" +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/Stats/PLEASE READ ME.txt b/MPMissions/DayZ_Epoch_24.Napf/Stats/PLEASE READ ME.txt new file mode 100755 index 0000000..aff6a68 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/Stats/PLEASE READ ME.txt @@ -0,0 +1,52 @@ +Please use Notepad++ + + + + + + + + +How to install J0k3r5 Stats Panel + +1. Copy + Paste the 'Stats' into your mission root folder. +2. Locate your 'init.sqf' in your mission folder +3. Put this code at the very bottom of the file + + +if (!isDedicated) then {[] execVM "Stats\j0k3r5_stats.sqf"}; + + + + + + + + + + + +How to change the countdown timer, to server restart. + + +1. goto line 92 +2. change the 180 to what suits your needs. +for example, 180 = 3hr / 120 = 2hrs + +3. finished + + + + + + + + + + + +How to change the Message 1 + Message 2 + +1. goto line 59 + 60 +2. replace the text with yours. +3. finished \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/Stats/j0k3r5_stats.sqf b/MPMissions/DayZ_Epoch_24.Napf/Stats/j0k3r5_stats.sqf new file mode 100755 index 0000000..173ecbe --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/Stats/j0k3r5_stats.sqf @@ -0,0 +1,105 @@ +/* + + /////Tweaked j0k3r5 / Original work done by Matt L / and to anyone else that is involved that Ive forgotten//// + ////www.j0k3r5.com//// + If modified and released give credits where due, thank you. + +*/ + + +dayz_spaceInterrupt = { + private ["_dikCode", "_handled"]; + _dikCode = _this select 1; + _handled = false; + + if (_dikCode == 0x44) then { + if (j0k3r5_stats) then { + j0k3r5_stats = false; + hintSilent ""; + } else {[] spawn fnc_debug;}; + }; + _handled +}; + +fnc_debug = { + j0k3r5_stats = true; + while {j0k3r5_stats} do + { + _logo = "Stats\stats_logo.paa"; + _pic = (gettext (configFile >> 'CfgVehicles' >> (typeof vehicle player) >> 'picture')); + + _nearestCity = nearestLocations [getPos player, ["NameCityCapital","NameCity","NameVillage","NameLocal"],750]; + _textCity = "Wilderness"; + if (count _nearestCity > 0) then {_textCity = text (_nearestCity select 0)}; + + if (player == vehicle player) then + { + _pic = (gettext (configFile >> 'cfgWeapons' >> (currentWeapon player) >> 'picture')); + } + else + { + _pic = (gettext (configFile >> 'CfgVehicles' >> (typeof vehicle player) >> 'picture')); + }; + + _timeleft= _combattimeout-time; + _kills = player getVariable["zombieKills",0]; + _killsH = player getVariable["humanKills",0]; + _killsB = player getVariable["banditKills",0]; + _humanity = player getVariable["humanity",0]; + _headShots = player getVariable["headShots",0]; + _zombies = count entities "zZombie_Base"; + _zombiesA = {alive _x} count entities "zZombie_Base"; + + + hintSilent parseText format + [ + " + +
+ Enjoy your stay at SDS
+ TS: 198.100.153.190:7087 +
+
+ Location:%11
+ Blood:%1
+ Humanity:%2
+ Headshots:%6
+ Heroes Killed:%3
+ Bandits Killed:%4
+ Zombies Killed:%5
+ Zeds (alive/total): %13/%12
+ FPS: %14
+ Survived:%7 Dayz +
+
+ Restart in %8 minutes! +
+ +
+ Use F10 to Toggle +
+ + + + ", + r_player_blood, //1 + round _humanity, //2 + _killsH, //3 + _killsB, //4 + _kills, //5 + _headShots, //6 + (dayz_Survived), //7 + (240-(round(serverTime/60))), //8 change the 180 to suit your server mins for restarts + _pic, //9 + _logo, //10 + _textCity, //11 + count entities "zZombie_Base", //12 + {alive _x} count entities "zZombie_Base", //13 + diag_fps //14 + + ]; + sleep 5; + }; +}; + +[] spawn fnc_debug; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/Stats/stats_logo.paa b/MPMissions/DayZ_Epoch_24.Napf/Stats/stats_logo.paa new file mode 100755 index 0000000..9a11b80 Binary files /dev/null and b/MPMissions/DayZ_Epoch_24.Napf/Stats/stats_logo.paa differ diff --git a/MPMissions/DayZ_Epoch_24.Napf/dayz_code/compile/fn_selfActions.sqf b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/compile/fn_selfActions.sqf new file mode 100755 index 0000000..51c4bde --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/compile/fn_selfActions.sqf @@ -0,0 +1,1164 @@ +scriptName "Functions\misc\fn_selfActions.sqf"; +/*********************************************************** + ADD ACTIONS FOR SELF + - Function + - [] call fnc_usec_selfActions; +************************************************************/ + +local _vehicle = vehicle player; +local _inVehicle = (_vehicle != player); +local _cursorTarget = cursorTarget; +local _primaryWeapon = primaryWeapon player; +local _currentWeapon = currentWeapon player; +local _magazinesPlayer = magazines player; +local _onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1; +local _canDo = (!r_drag_sqf && !r_player_unconscious && !_onLadder); +local _uid = getPlayerUID player; +local _nearLight = nearestObject [player,"LitObject"]; +local _canPickLight = false; +local _myCharID = player getVariable ["CharacterID","0"]; +local _vehicleOwnerID = _vehicle getVariable ["CharacterID","0"]; +local _hasHotwireKit = "ItemHotwireKit" in _magazinesPlayer; +local _isMan = _cursorTarget isKindOf "Man"; //includes animals and zombies +local _isZombie = _cursorTarget isKindOf "zZombie_base"; +local _isPZombie = player isKindOf "PZombie_VB"; +local _isClose = (player distance _cursorTarget < 3); +local _dogHandle = player getVariable ["dogID",0]; +local _text = ""; + +if (!isNull _nearLight) then { + if (_nearLight distance player < 4) then { + _canPickLight = isNull (_nearLight getVariable ["owner",objNull]); + }; +}; + +//Grab Flare +if (_canPickLight && !dayz_hasLight && !_isPZombie) then { + if (s_player_grabflare < 0) then { + _text = getText (configFile >> "CfgAmmo" >> (typeOf _nearLight) >> "displayName"); + s_player_grabflare = player addAction [format[localize "str_actions_medical_15",_text], "\z\addons\dayz_code\actions\flare_pickup.sqf",_nearLight, 1, false, true]; + s_player_removeflare = player addAction [format[localize "str_actions_medical_17",_text], "\z\addons\dayz_code\actions\flare_remove.sqf",_nearLight, 1, false, true]; + }; +} else { + player removeAction s_player_grabflare; + player removeAction s_player_removeflare; + s_player_grabflare = -1; + s_player_removeflare = -1; +}; + +if (s_player_equip_carry < 0) then { + if (dayz_onBack != "" && !_inVehicle && !_onLadder && !r_player_unconscious) then { + dz_plr_carryActionItem = dayz_onBack; + _text = getText (configFile >> "CfgWeapons" >> dz_plr_carryActionItem >> "displayName"); + s_player_equip_carry = player addAction [format [localize "STR_ACTIONS_WEAPON", _text],"\z\addons\dayz_code\actions\player_switchWeapon_action.sqf",nil, 0.5, false, true]; + }; +} else { + if (dayz_onBack != dz_plr_carryActionItem || _inVehicle || _onLadder || r_player_unconscious) then { + player removeAction s_player_equip_carry; + s_player_equip_carry = -1; + }; +}; + +//fishing +if ((_currentWeapon in Dayz_fishingItems) && !dayz_fishingInprogress && !_inVehicle && !dayz_isSwimming) then { + if (s_player_fishing < 0) then { + s_player_fishing = player addAction [localize "STR_ACTION_CAST", "\z\addons\dayz_code\actions\player_goFishing.sqf",player, 0.5, false, true]; + }; +} else { + player removeAction s_player_fishing; + s_player_fishing = -1; +}; +if ((_primaryWeapon in Dayz_fishingItems) && !dayz_fishingInprogress && _inVehicle && {driver _vehicle != player}) then { + if (s_player_fishing_veh < 0) then { + s_player_fishing_veh = _vehicle addAction [localize "STR_ACTION_CAST", "\z\addons\dayz_code\actions\player_goFishing.sqf",_vehicle, 0.5, false, true]; + }; +} else { + _vehicle removeAction s_player_fishing_veh; + s_player_fishing_veh = -1; +}; + +/* //Allows drinking from hands at ponds and ambient wells, but may negatively impact performance +if (_canDo && !_inVehicle && !dayz_isSwimming && ((call fn_nearWaterHole) select 0)) then { + if (s_player_Drinkfromhands < 0) then { + s_player_Drinkfromhands = player addAction [localize "STR_ACTIONS_DRINK2", "\z\addons\dayz_code\actions\water_fill.sqf","hands", 0.5, false, true]; + }; +} else { + if (s_player_Drinkfromhands >= 0) then { + player removeAction s_player_Drinkfromhands; + s_player_Drinkfromhands = -1; + }; +}; +*/ + +if (_inVehicle) then { + DZE_myVehicle = _vehicle; + if ((_vehicleOwnerID != "0") && _canDo) then { + if (s_player_lockUnlockInside_ctrl < 0) then { + local _totalKeys = call epoch_tempKeys; + local _temp_keys = _totalKeys select 0; + local _temp_keys_names = _totalKeys select 1; + local _hasKey = _vehicleOwnerID in _temp_keys; + local _oldOwner = (_vehicleOwnerID == _uid); + local _unlock = []; + + _text = getText (configFile >> "CfgVehicles" >> (typeOf DZE_myVehicle) >> "displayName"); + if (locked DZE_myVehicle) then { + if (_hasKey || _oldOwner) then { + _unlock = DZE_myVehicle addAction [format[localize "STR_EPOCH_ACTIONS_UNLOCK",_text], "\z\addons\dayz_code\actions\unlock_veh.sqf",[DZE_myVehicle,(_temp_keys_names select (_temp_keys find _vehicleOwnerID))], 2, false, true]; + s_player_lockUnlockInside set [count s_player_lockUnlockInside,_unlock]; + s_player_lockUnlockInside_ctrl = 1; + } else { + if (_hasHotwireKit) then { + _unlock = DZE_myVehicle addAction [format[localize "STR_EPOCH_ACTIONS_HOTWIRE",_text], "\z\addons\dayz_code\actions\hotwire_veh.sqf",DZE_myVehicle, 2, true, true]; + } else { + _unlock = DZE_myVehicle addAction [format["%1",localize "STR_EPOCH_ACTIONS_VEHLOCKED"], "",DZE_myVehicle, 2, true, true]; + }; + s_player_lockUnlockInside set [count s_player_lockUnlockInside,_unlock]; + s_player_lockUnlockInside_ctrl = 1; + }; + } else { + if (_hasKey || _oldOwner) then { + _lock = DZE_myVehicle addAction [format[localize "STR_EPOCH_ACTIONS_LOCK",_text], "\z\addons\dayz_code\actions\lock_veh.sqf",DZE_myVehicle, 1, false, true]; + s_player_lockUnlockInside set [count s_player_lockUnlockInside,_lock]; + s_player_lockUnlockInside_ctrl = 1; + }; + }; + }; + } else { + {DZE_myVehicle removeAction _x} count s_player_lockUnlockInside;s_player_lockUnlockInside = []; + s_player_lockUnlockInside_ctrl = -1; + }; +} else { + {DZE_myVehicle removeAction _x} count s_player_lockUnlockInside;s_player_lockUnlockInside = []; + s_player_lockUnlockInside_ctrl = -1; +}; + +if (DZE_HeliLift) then { + local _hasAttached = _vehicle getVariable["hasAttached",false]; + if (_inVehicle && {_vehicle isKindOf "Air"} && {(([_vehicle] call FNC_getPos) select 2) < 30} && {speed _vehicle < 5} && {typeName _hasAttached == "OBJECT"}) then { + if (s_player_heli_detach < 0) then { + dayz_myLiftVehicle = _vehicle; + s_player_heli_detach = dayz_myLiftVehicle addAction [localize "STR_EPOCH_ACTIONS_DETACHVEHICLE","\z\addons\dayz_code\actions\player_heliDetach.sqf",[dayz_myLiftVehicle,_hasAttached],2,false,true]; + }; + } else { + dayz_myLiftVehicle removeAction s_player_heli_detach; + s_player_heli_detach = -1; + }; +}; + +if (DZE_HaloJump) then { + if (_inVehicle && {_vehicle isKindOf "Air"} && {(([_vehicle] call FNC_getPos) select 2) > 400}) then { + if (s_halo_action < 0) then { + DZE_myHaloVehicle = _vehicle; + s_halo_action = DZE_myHaloVehicle addAction [localize "STR_EPOCH_ACTIONS_HALO","\z\addons\dayz_code\actions\halo_jump.sqf",[],2,false,true]; + }; + } else { + DZE_myHaloVehicle removeAction s_halo_action; + s_halo_action = -1; + }; +}; + +if (DZE_NameTags > 0) then { + if (s_player_showname < 0 && !_isPZombie) then { + if (DZE_NameTags < 2) then { + s_player_showname = 1; + player setVariable["DZE_display_name",true,true]; + } else { + s_player_showname = player addAction [localize "STR_EPOCH_ACTIONS_NAMEYES", "\z\addons\dayz_code\actions\display_name.sqf",true, 0, true, false]; + s_player_showname1 = player addAction [localize "STR_EPOCH_ACTIONS_NAMENO", "\z\addons\dayz_code\actions\display_name.sqf",false, 0, true, false]; + }; + }; +}; + +if (_isPZombie) then { + if (s_player_attack < 0) then { + s_player_attack = player addAction [localize "STR_EPOCH_ACTIONS_ATTACK", "\z\addons\dayz_code\actions\pzombie\pz_attack.sqf", _cursorTarget, 6, false, true]; + }; + if (s_player_callzombies < 0) then { + s_player_callzombies = player addAction [localize "STR_EPOCH_ACTIONS_RAISEHORDE", "\z\addons\dayz_code\actions\pzombie\call_zombies.sqf",player, 5, true, false]; + }; + if (s_player_pzombiesvision < 0) then { + s_player_pzombiesvision = player addAction [localize "STR_EPOCH_ACTIONS_NIGHTVIS", "\z\addons\dayz_code\actions\pzombie\pz_vision.sqf", [], 4, false, true, "nightVision", "_this == _target"]; + }; + if (!isNull _cursorTarget && _isClose) then { + local _isHarvested = _cursorTarget getVariable["meatHarvested",false]; + if (!alive _cursorTarget && _isMan && !_isZombie && !_isHarvested) then { + if (s_player_pzombiesfeed < 0) then { + s_player_pzombiesfeed = player addAction [localize "STR_EPOCH_ACTIONS_FEED", "\z\addons\dayz_code\actions\pzombie\pz_feed.sqf",_cursorTarget, 3, true, false]; + }; + } else { + player removeAction s_player_pzombiesfeed; + s_player_pzombiesfeed = -1; + }; + } else { + player removeAction s_player_pzombiesfeed; + s_player_pzombiesfeed = -1; + }; +}; + +// Increase distance only if AIR, SHIP or TANK +local _allowedDistance = [4, 8] select ((_cursorTarget isKindOf "Air") || {_cursorTarget isKindOf "Ship"} || {_cursorTarget isKindOf "Tank"}); + +if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player distance _cursorTarget < _allowedDistance}) then { + local _typeOfCursorTarget = typeOf _cursorTarget; + local _isVehicle = _cursorTarget isKindOf "AllVehicles"; + local _isBicycle = _cursorTarget isKindOf "Bicycle"; + local _isDestructable = _cursorTarget isKindOf "BuiltItems"; + local _isGenerator = _typeOfCursorTarget == "Generator_DZ"; + local _isLocked = locked _cursorTarget; + local _isFuel = false; + local _hasBarrel = "ItemFuelBarrel" in _magazinesPlayer; + local _hasFuel20 = "ItemJerrycan" in _magazinesPlayer; + local _hasFuel5 = "ItemFuelcan" in _magazinesPlayer; + local _hasEmptyFuelCan = (("ItemJerrycanEmpty" in _magazinesPlayer) || ("ItemFuelcanEmpty" in _magazinesPlayer) || ("ItemFuelBarrelEmpty" in _magazinesPlayer)); + local _itemsPlayer = items player; + local _weaponsPlayer = weapons player; + local _hasCrowbar = "ItemCrowbar" in _itemsPlayer || "MeleeCrowbar" in _weaponsPlayer || dayz_onBack == "MeleeCrowbar"; + local _hasToolbox = "ItemToolbox" in _itemsPlayer; + local _isAlive = alive _cursorTarget; + local _text = getText (configFile >> "CfgVehicles" >> _typeOfCursorTarget >> "displayName"); + local _isPlant = _typeOfCursorTarget in Dayz_plants; + local _istypeTent = (_cursorTarget isKindOf "TentStorage_base") or (_cursorTarget isKindOf "IC_Tent"); + local _characterID = _cursorTarget getVariable ["CharacterID","0"]; + local _id = ""; + local _ownerID = ""; + local _hasAccess = []; + + if (DZE_permanentPlot) then { + _id = _uid; + _ownerID = _cursorTarget getVariable ["ownerPUID","0"]; + } else { + _id = _myCharID; + _ownerID = _characterID; + }; + + local _isDog = (_cursorTarget isKindOf "Pastor" || _cursorTarget isKindOf "Fin"); + local _isModular = _cursorTarget isKindOf "ModularItems"; + local _isModularDoor = _typeOfCursorTarget in ["Land_DZE_WoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_GarageWoodDoor","CinderWallDoor_DZ","CinderWallDoorSmall_DZ","WoodenGate_foundation_DZ","WoodenGate_1_DZ","WoodenGate_2_DZ","WoodenGate_3_DZ","WoodenGate_4_DZ","Land_DZE_WoodGate","Land_DZE_WoodOpenTopGarageDoor","CinderGate_DZ","CinderGarageOpenTop_DZ","CinderDoorHatch_DZ","Door_DZ","Concrete_Bunker_DZ","Metal_Drawbridge_DZ"]; + local _player_deleteBuild = false; + local _player_lockUnlock_crtl = false; + + //fuel tanks + if (_hasEmptyFuelCan) then { + { + if (_cursorTarget isKindOf _x) exitWith {_isFuel = true;}; + } count dayz_fuelsources; + }; + + //remove gathered plant if empty + if (_isPlant) then { + _cursorTarget call player_gather; + }; + + //flip vehicle + if (_isVehicle && !_isMan && _isAlive && {!(canMove _cursorTarget)} && {player distance _cursorTarget >= 2} && {(count (crew _cursorTarget))== 0} && {((vectorUp _cursorTarget) select 2) < 0.5}) then { + if (s_player_flipveh < 0) then { + s_player_flipveh = player addAction [format[localize "str_actions_flipveh",_text], "\z\addons\dayz_code\actions\player_flipvehicle.sqf",_cursorTarget, 1, true, true]; + }; + } else { + player removeAction s_player_flipveh; + s_player_flipveh = -1; + }; + + //Allow player to fill Fuel can + if (_hasEmptyFuelCan && _isFuel && _isAlive) then { + if (s_player_fillfuel < 0) then { + s_player_fillfuel = player addAction [localize "str_actions_self_10", "\z\addons\dayz_code\actions\jerry_fill.sqf",_cursorTarget, 1, false, true]; + }; + } else { + player removeAction s_player_fillfuel; + s_player_fillfuel = -1; + }; + + if (_isVehicle && {!_isMan && damage _cursorTarget < 1}) then { + + local _isDisallowRefuel = _typeOfCursorTarget in ["M240Nest_DZ","MMT_Civ","MMT_USMC","Old_bike_TK_CIV_EP1","Old_bike_TK_INS_EP1"]; + //Allow player to fill vehicle 210L + if (_hasBarrel && {fuel _cursorTarget < 1 && !_isDisallowRefuel}) then { + if (s_player_fillfuel210 < 0) then { + s_player_fillfuel210 = player addAction [format[localize "str_actions_medical_10",_text,"210"], "\z\addons\dayz_code\actions\refuel.sqf",["ItemFuelBarrel",_cursorTarget], 0, true, true]; + }; + } else { + player removeAction s_player_fillfuel210; + s_player_fillfuel210 = -1; + }; + + //Allow player to fill vehicle 20L + if (_hasFuel20 && {fuel _cursorTarget < 1 && !_isDisallowRefuel}) then { + if (s_player_fillfuel20 < 0) then { + s_player_fillfuel20 = player addAction [format[localize "str_actions_medical_10",_text,"20"], "\z\addons\dayz_code\actions\refuel.sqf",["ItemJerrycan",_cursorTarget], 0, true, true]; + }; + } else { + player removeAction s_player_fillfuel20; + s_player_fillfuel20 = -1; + }; + + //Allow player to fill vehicle 5L + if (_hasFuel5 && {fuel _cursorTarget < 1 && !_isDisallowRefuel}) then { + if (s_player_fillfuel5 < 0) then { + s_player_fillfuel5 = player addAction [format[localize "str_actions_medical_10",_text,"5"], "\z\addons\dayz_code\actions\refuel.sqf",["ItemFuelcan",_cursorTarget], 0, true, true]; + }; + } else { + player removeAction s_player_fillfuel5; + s_player_fillfuel5 = -1; + }; + + //Allow player to siphon vehicles + if (_hasEmptyFuelCan && !_isBicycle && {fuel _cursorTarget > 0}) then { + if (s_player_siphonfuel < 0) then { + s_player_siphonfuel = player addAction [format[localize "str_siphon_start"], "\z\addons\dayz_code\actions\siphonFuel.sqf",_cursorTarget, 0, true, true]; + }; + } else { + player removeAction s_player_siphonfuel; + s_player_siphonfuel = -1; + }; + } else { + player removeAction s_player_fillfuel210; + s_player_fillfuel210 = -1; + player removeAction s_player_fillfuel20; + s_player_fillfuel20 = -1; + player removeAction s_player_fillfuel5; + s_player_fillfuel5 = -1; + player removeAction s_player_siphonfuel; + s_player_siphonfuel = -1; + }; + + //Fireplace Actions check + if ((_cursorTarget call isInflamed) or (inflamed _cursorTarget)) then { + local _hasRawMeat = {_x in Dayz_meatraw} count _magazinesPlayer > 0; + local _hasunboiledwater = {_x in ["ItemWaterBottleInfected","ItemWaterBottle","ItemWaterBottleSafe","ItemWaterbottle1oz","ItemWaterbottle2oz","ItemWaterbottle3oz","ItemWaterbottle4oz","ItemWaterbottle5oz","ItemWaterbottle6oz","ItemWaterbottle7oz","ItemWaterbottle8oz","ItemWaterbottle9oz","ItemPlasticWaterBottle","ItemPlasticWaterBottleInfected","ItemPlasticWaterBottleSafe","ItemPlasticWaterbottle1oz","ItemPlasticWaterbottle2oz","ItemPlasticWaterbottle3oz","ItemPlasticWaterbottle4oz","ItemPlasticWaterbottle5oz","ItemPlasticWaterbottle6oz","ItemPlasticWaterbottle7oz","ItemPlasticWaterbottle8oz","ItemPlasticWaterbottle9oz"]} count _magazinesPlayer > 0; + + + //Cook Meat + if (_hasRawMeat && !a_player_cooking) then { + if (s_player_cook < 0) then { + s_player_cook = player addAction [localize "str_actions_self_05", "\z\addons\dayz_code\actions\cook.sqf",_cursorTarget, 3, true, true]; + }; + }; + //Boil Water + if (_hasunboiledwater && !a_player_boil) then { + if (s_player_boil < 0) then { + s_player_boil = player addAction [localize "str_actions_boilwater", "\z\addons\dayz_code\actions\boil.sqf",_cursorTarget, 3, true, true]; + }; + }; + } else { + if (a_player_cooking) then { + player removeAction s_player_cook; + s_player_cook = -1; + }; + if (a_player_boil) then { + player removeAction s_player_boil; + s_player_boil = -1; + }; + }; + + if (_isAlive) then { + local _restrict = _typeOfCursorTarget in DZE_restrictRemoval; + + //Allow player to remove objects with no ownership or access required + if (!_restrict && {_isDestructable || {_typeOfCursorTarget in DZE_isWreck} || {_typeOfCursorTarget in DZE_isWreckBuilding} || {_typeOfCursorTarget in DZE_isRemovable}}) then { + if (_hasToolbox && _hasCrowbar) then { + _player_deleteBuild = true; + }; + }; + //Allow player to remove objects only if they have proper ownership or access + if (_restrict || _isModular || _isModularDoor || _isGenerator || {_typeOfCursorTarget in DZE_isDestroyableStorage}) then { + if (_hasToolbox && _hasCrowbar) then { + _hasAccess = [player, _cursorTarget] call FNC_check_access; + if ((_hasAccess select 0) || {_hasAccess select 2} || {_hasAccess select 3}) then { + _player_deleteBuild = true; + }; + }; + }; + if (_isVehicle) then { + if ((_characterID != "0") && !_isMan) then { + _player_lockUnlock_crtl = true; + }; + }; + }; + + if (_player_deleteBuild) then { + if (s_player_deleteBuild < 0) then { + s_player_deleteBuild = player addAction [format[localize "STR_EPOCH_REMOVE",_text], "\z\addons\dayz_code\actions\remove.sqf",_cursorTarget, 1, false, true]; + }; + } else { + player removeAction s_player_deleteBuild; + s_player_deleteBuild = -1; + }; + + //remove Own objects + if (_ownerID == _id) then { + if (_istypeTent) then { + //Packing my tent + if (s_player_packtent < 0) then { + s_player_packtent = player addAction [localize "str_actions_self_07", "\z\addons\dayz_code\actions\tent_pack.sqf",_cursorTarget, 0, false, true]; + }; + } else { + player removeAction s_player_packtent; + s_player_packtent = -1; + }; + } else { + player removeAction s_player_packtent; + s_player_packtent = -1; + }; + + //other tents + if (_istypeTent) then { + local _hasIgnitors = {_x in DayZ_Ignitors} count _itemsPlayer > 0; + if ((_hasFuel20 || _hasFuel5 || _hasBarrel) && _hasIgnitors) then { + if (s_player_destroytent < 0) then { + s_player_destroytent = player addAction [localize "str_actions_self_destroytent", "\z\addons\dayz_code\actions\player_destroyTent.sqf",_cursorTarget, 0, false, true]; + }; + } else { + player removeAction s_player_destroytent; + s_player_destroytent = -1; + }; + if (_typeOfCursorTarget in ["IC_DomeTent","IC_Tent"]) then { + if (s_player_packtentinfected < 0) then { + s_player_packtentinfected = player addAction [localize "str_actions_self_07", "\z\addons\dayz_code\actions\tent_pack.sqf",_cursorTarget, 0, false, true]; + }; + } else { + player removeAction s_player_packtentinfected; + s_player_packtentinfected = -1; + }; + //sleep + if (s_player_sleep < 0) then { + s_player_sleep = player addAction [localize "str_actions_self_sleep", "\z\addons\dayz_code\actions\player_sleep.sqf",_cursorTarget, 0, false, true]; + }; + } else { + player removeAction s_player_sleep; + s_player_sleep = -1; + }; + + //Study Body + if (_cursorTarget getVariable["bodyName",""] != "") then { + if (s_player_studybody < 0) then { + s_player_studybody = player addAction [localize "str_action_studybody", "\z\addons\dayz_code\actions\study_body.sqf",_cursorTarget, 0, false, true]; + }; + } else { + player removeAction s_player_studybody; + s_player_studybody = -1; + }; +/* + //Carbomb + local _hasCarBomb = "ItemCarBomb" in _magazinesPlayer; + if (((_cursorTarget isKindOf "Car") || (_cursorTarget isKindOf "Air") || (_cursorTarget isKindOf "Motorcycle")) && _hasCarBomb) then { + if (s_player_attach_bomb < 0) then { + s_player_attach_bomb = player addAction [localize "str_bombAttach", "\z\addons\dayz_code\actions\player_attach_bomb.sqf",_cursorTarget, 3, true, true]; + }; + } else { + player removeAction s_player_attach_bomb; + s_player_attach_bomb = -1; + }; +*/ + //Repairing Vehicles + if (_isVehicle && {!_isMan && _hasToolbox && {dayz_myCursorTarget != _cursorTarget} && {damage _cursorTarget < 1} && {_typeOfCursorTarget != "M240Nest_DZ"}}) then { + if (s_player_repair_crtl < 0) then { + dayz_myCursorTarget = _cursorTarget; + local _menu = dayz_myCursorTarget addAction [localize "str_actions_repairveh", "\z\addons\dayz_code\actions\repair_vehicle.sqf",_cursorTarget, 0, true, false]; + if (!_isBicycle) then { //Bike wheels should not give full size tires. Also model does not update to show removed wheels. + local _menu1 = []; + if (!DZE_salvageLocked) then { + if (!_isLocked) then { + _menu1 = dayz_myCursorTarget addAction [localize "str_actions_salvageveh", "\z\addons\dayz_code\actions\salvage_vehicle.sqf",_cursorTarget, 0, true, false]; + s_player_repairActions set [count s_player_repairActions,_menu1]; + }; + } else { + _menu1 = dayz_myCursorTarget addAction [localize "str_actions_salvageveh", "\z\addons\dayz_code\actions\salvage_vehicle.sqf",_cursorTarget, 0, true, false]; + s_player_repairActions set [count s_player_repairActions,_menu1]; + }; + }; + s_player_repairActions set [count s_player_repairActions,_menu]; + s_player_repair_crtl = 1; + } else { + {dayz_myCursorTarget removeAction _x} forEach s_player_repairActions; + s_player_repairActions = []; + s_player_repair_crtl = -1; + }; + }; + + if ((_typeOfCursorTarget == "Plastic_Pole_EP1_DZ") && {speed player <= 1}) then { + _hasAccess = [player, _cursorTarget] call FNC_check_access; + local _allowed = ((_hasAccess select 0) || _hasAccess select 2 || _hasAccess select 3 || _hasAccess select 4); + if (DZE_permanentPlot) then { + if (s_player_plotManagement < 0 && _allowed) then { + s_player_plotManagement = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_MANAGEPLOT"], "\z\addons\dayz_code\actions\plotManagement\initPlotManagement.sqf", [], 5, false]; + }; + } else { + if (s_player_maintain_area < 0) then { + s_player_maintain_area = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_MAINTAREA"], "\z\addons\dayz_code\actions\maintain_area.sqf", "maintain", 5, false]; + s_player_maintain_area_force = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_FORCE_MAINTAREA"], "\z\addons\dayz_code\actions\maintain_area.sqf", "force", 5, false]; + s_player_maintain_area_preview = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_MAINTPREV"], "\z\addons\dayz_code\actions\maintain_area.sqf", "preview", 5, false]; + }; + }; + if (s_player_plot_boundary < 0 && {_allowed || (_hasAccess select 1)}) then { + s_player_plot_boundary = player addAction [localize "STR_EPOCH_PLOTMANAGEMENT_SHOW_BOUNDARY", "\z\addons\dayz_code\actions\plotManagement\plotToggleMarkers.sqf", "", 1, false]; + }; + } else { + player removeAction s_player_plotManagement; + s_player_plotManagement = -1; + player removeAction s_player_maintain_area; + s_player_maintain_area = -1; + player removeAction s_player_maintain_area_force; + s_player_maintain_area_force = -1; + player removeAction s_player_maintain_area_preview; + s_player_maintain_area_preview = -1; + player removeAction s_player_plot_boundary; + s_player_plot_boundary = -1; + }; + + if (DZE_HeliLift) then { + local _liftHeli = objNull; + local _found = false; + local _allowTow = false; + if ((count (crew _cursorTarget)) == 0) then { + { + if (!_allowTow) then { + _allowTow = _cursorTarget isKindOf _x; + }; + } count DZE_HeliAllowToTow; + }; + + if (_allowTow) then { + { + if (!_found) then { + local _posL = [_x] call FNC_getPos; + local _posC = [_cursorTarget] call FNC_getPos; + local _height = (_posL select 2) - (_posC select 2); + local _hasAttached = _x getVariable["hasAttached",false]; + if ((_height < 15) && {_height > 5} && {typeName _hasAttached != "OBJECT"}) then { + if (((abs((_posL select 0) - (_posC select 0))) < 10) && {(abs((_posL select 1) - (_posC select 1))) < 10}) then { + _liftHeli = _x; + _found = true; + }; + }; + }; + } count (player nearEntities [DZE_HeliAllowTowFrom,15]); + }; + + local _attached = _cursorTarget getVariable["attached",false]; + if (_found && _allowTow && !_isLocked && {typeName _attached != "OBJECT"}) then { + if (s_player_heli_lift < 0) then { + s_player_heli_lift = player addAction [localize "STR_EPOCH_ACTIONS_ATTACHTOHELI", "\z\addons\dayz_code\actions\player_heliLift.sqf",[_liftHeli,_cursorTarget], -10, false, true]; + }; + } else { + player removeAction s_player_heli_lift; + s_player_heli_lift = -1; + }; + }; + + // Allow Owner to lock and unlock vehicle + if (_player_lockUnlock_crtl) then { + local _totalKeys = call epoch_tempKeys; + local _temp_keys = _totalKeys select 0; + local _temp_keys_names = _totalKeys select 1; + local _hasKey = _characterID in _temp_keys; + + if (s_player_lockUnlock_crtl < 0) then { + local _oldOwner = (_characterID == _uid); + local _unlock = []; + + if (_isLocked) then { + if (_hasKey || _oldOwner) then { + _unlock = player addAction [format[localize "STR_EPOCH_ACTIONS_UNLOCK",_text], "\z\addons\dayz_code\actions\unlock_veh.sqf",[_cursorTarget,(_temp_keys_names select (_temp_keys find _characterID))], 2, true, true]; + s_player_lockunlock set [count s_player_lockunlock,_unlock]; + s_player_lockUnlock_crtl = 1; + } else { + if (_hasHotwireKit) then { + _unlock = player addAction [format[localize "STR_EPOCH_ACTIONS_HOTWIRE",_text], "\z\addons\dayz_code\actions\hotwire_veh.sqf",_cursorTarget, 2, true, true]; + } else { + _unlock = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_VEHLOCKED"], "",_cursorTarget, 2, false, true]; + }; + s_player_lockunlock set [count s_player_lockunlock,_unlock]; + s_player_lockUnlock_crtl = 1; + }; + } else { + if (_hasKey || _oldOwner) then { + _lock = player addAction [format[localize "STR_EPOCH_ACTIONS_LOCK",_text], "\z\addons\dayz_code\actions\lock_veh.sqf",_cursorTarget, 1, true, true]; + s_player_lockunlock set [count s_player_lockunlock,_lock]; + s_player_lockUnlock_crtl = 1; + }; + }; + }; + if (s_player_copyToKey < 0) then { + if ((_hasKey && !_isLocked && {"ItemKeyKit" in weapons player} && {(count _temp_keys) > 1}) || {_cursorTarget getVariable ["hotwired",false]}) then { + s_player_copyToKey = player addAction [format["%1",localize "STR_CL_VKC_CHANGE_ACTION"],"scripts\vkc\vehicleKeyChanger.sqf",[_cursorTarget,_characterID,if (_cursorTarget getVariable ["hotwired",false]) then {"claim"} else {"change"}],5,false,true]; + }; + }; + } else { + {player removeAction _x} count s_player_lockunlock;s_player_lockunlock = []; + s_player_lockUnlock_crtl = -1; + player removeAction s_player_copyToKey; + s_player_copyToKey = -1; + }; + + if (DZE_Hide_Body && {_isMan && !_isAlive}) then { + if (s_player_hide_body < 0) then { + s_player_hide_body = player addAction [localize "str_action_hide_body", "\z\addons\dayz_code\actions\hide_body.sqf",_cursorTarget, 1, true, true]; + }; + } else { + player removeAction s_player_hide_body; + s_player_hide_body = -1; + }; + + // gear access on surrendered player + if (isPlayer _cursorTarget && _isAlive && {_cursorTarget getVariable ["DZE_Surrendered",false]}) then { + if (s_player_SurrenderedGear < 0) then { + s_player_SurrenderedGear = player addAction [localize "STR_UI_GEAR", "\z\addons\dayz_code\actions\surrender_gear.sqf",_cursorTarget, 1, true, true]; + }; + } else { + player removeAction s_player_SurrenderedGear; + s_player_SurrenderedGear = -1; + }; + + // Allow manage door + if (DZE_doorManagement && {_typeOfCursorTarget in DZE_DoorsLocked}) then { + // Check player access + _hasAccess = [player, _cursorTarget] call FNC_check_access; + if (s_player_manageDoor < 0 && {(_hasAccess select 0) || {_hasAccess select 2} || {_hasAccess select 3} || {_hasAccess select 4} || {_hasAccess select 5} || {_hasAccess select 6}}) then { + s_player_manageDoor = player addAction [format["%1", localize "STR_EPOCH_ACTIONS_MANAGEDOOR"], "\z\addons\dayz_code\actions\doorManagement\initDoorManagement.sqf", _cursorTarget, 5, false]; + }; + } else { + player removeAction s_player_manageDoor; + s_player_manageDoor = -1; + }; + + //Allow owner to unlock vault + if (_isClose && !keypadCancel && {(_typeOfCursorTarget in DZE_LockedStorage) && {_characterID != "0"}}) then { + if (s_player_unlockvault < 0) then { + local _combi = []; + if (_typeOfCursorTarget in DZE_LockedStorage) then { + if ((_characterID == dayz_combination) || {_ownerID == _uid}) then { + _combi = player addAction [format[localize "STR_EPOCH_ACTIONS_OPEN",_text], "\z\addons\dayz_code\actions\vault_unlock.sqf",_cursorTarget, 0, false, true]; + s_player_combi set [count s_player_combi,_combi]; + } else { + _combi = player addAction [format[localize "STR_EPOCH_ACTIONS_UNLOCK",_text], "\z\addons\dayz_code\actions\vault_combination_1.sqf",_cursorTarget, 0, false, true]; + s_player_combi set [count s_player_combi,_combi]; + }; + s_player_unlockvault = 1; + } else { + if ((_characterID != dayz_combination) && {_ownerID != _uid}) then { + _combi = player addAction [localize "STR_EPOCH_ACTIONS_RECOMBO", "\z\addons\dayz_code\actions\vault_combination_1.sqf",_cursorTarget, 0, false, true]; + s_player_combi set [count s_player_combi,_combi]; + s_player_unlockvault = 1; + }; + }; + }; + } else { + {player removeAction _x} count s_player_combi;s_player_combi = []; + s_player_unlockvault = -1; + }; + + //Allow owner to pack vault + if (_isClose && !keypadCancel && {(_typeOfCursorTarget in DZE_UnLockedStorage) && {_characterID != "0"} && {(_characterID == dayz_combination || _ownerID == _uid)}}) then { + if (s_player_lockvault < 0) then { + s_player_lockvault = player addAction [format[localize "STR_EPOCH_ACTIONS_LOCK",_text], "\z\addons\dayz_code\actions\vault_lock.sqf",_cursorTarget, 0, false, true]; + }; + if (s_player_packvault < 0) then { + s_player_packvault = player addAction [format["%1",format[localize "STR_EPOCH_ACTIONS_PACK",_text]], "\z\addons\dayz_code\actions\vault_pack.sqf",_cursorTarget, 0, false, true]; + }; + if (s_player_changeVaultCode < 0 && (_characterID == dayz_combination || _ownerID == _uid)) then { + s_player_changeVaultCode = player addAction [format[localize "STR_CL_CC_CODE_CHANGE",_text], "\z\addons\dayz_code\actions\changeCode.sqf",_cursorTarget, 0, false, true]; + }; + } else { + player removeAction s_player_packvault; + s_player_packvault = -1; + player removeAction s_player_lockvault; + s_player_lockvault = -1; + player removeAction s_player_changeVaultCode; + s_player_changeVaultCode = -1; + }; + + //Player Deaths + if (_typeOfCursorTarget == "Info_Board_EP1") then { + if (s_player_information < 0) then { + s_player_information = player addAction [localize "STR_EPOCH_ACTIONS_MURDERS", "\z\addons\dayz_code\actions\list_playerDeaths.sqf",[], 7, false, true]; + }; + } else { + player removeAction s_player_information; + s_player_information = -1; + }; + + //Fuel Pump + if (_typeOfCursorTarget in dayz_fuelpumparray) then { + if (s_player_fuelauto < 0) then { + local _findNearestGen = {((alive _x) && (_x getVariable ["GeneratorRunning",false]))} count (([player] call FNC_getPos) nearObjects ["Generator_DZ",30]); + if (_findNearestGen > 0) then { + s_player_fuelauto = player addAction [localize "STR_EPOCH_ACTIONS_FILLVEH", "\z\addons\dayz_code\actions\fill_nearestVehicle.sqf",objNull, 0, false, true]; + } else { + s_player_fuelauto = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_NEEDPOWER"], "",[], 0, false, true]; + }; + }; + } else { + player removeAction s_player_fuelauto; + s_player_fuelauto = -1; + }; + + //Fuel Pump on truck + if (_isAlive && {_typeOfCursorTarget in DZE_fueltruckarray}) then { + if (s_player_fuelauto2 < 0) then { + if (isEngineOn _cursorTarget) then { + s_player_fuelauto2 = player addAction [localize "STR_EPOCH_ACTIONS_FILLVEH", "\z\addons\dayz_code\actions\fill_nearestVehicle.sqf",_cursorTarget, 0, false, true]; + } else { + s_player_fuelauto2 = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_NEEDPOWER"], "",[], 0, false, true]; + }; + }; + } else { + player removeAction s_player_fuelauto2; + s_player_fuelauto2 = -1; + }; + + // inplace upgrade tool + if (((_cursorTarget isKindOf "ModularItems") || (_cursorTarget isKindOf "Land_DZE_WoodDoor_Base") || (_cursorTarget isKindOf "CinderWallDoor_DZ_Base") || (_cursorTarget isKindOf "DZE_Housebase") || (_cursorTarget isKindOf "DZ_storage_base") || (_typeOfCursorTarget in DZE_UpgradableStorage)) && !(_typeOfCursorTarget in DZE_DisableUpgrade)) then { + if ((s_player_lastTarget select 0) != _cursorTarget) then { + if (s_player_upgrade_build > 0) then { + player removeAction s_player_upgrade_build; + s_player_upgrade_build = -1; + }; + }; + local _upgrade = getArray (configFile >> "CfgVehicles" >> (typeOf _cursorTarget) >> "upgradeBuilding"); + if ((s_player_upgrade_build < 0) && {(count _upgrade) > 0}) then { + _hasAccess = [player, _cursorTarget] call FNC_check_access; + if ((_hasAccess select 0) || (_hasAccess select 2) || (_hasAccess select 3) || (_typeOfCursorTarget in DZE_UpgradableStorage) || (_typeOfCursorTarget isKindOf "DZ_storage_base")) then { + s_player_lastTarget set [0,_cursorTarget]; + s_player_upgrade_build = player addAction [format[localize "STR_EPOCH_UPGRADE",_text], "\z\addons\dayz_code\actions\player_upgrade.sqf",_cursorTarget, -1, false, true]; + }; + }; + } else { + player removeAction s_player_upgrade_build; + s_player_upgrade_build = -1; + }; + + // downgrade system + if (DZE_Lock_Door == _characterID && !keypadCancel) then { + if (_cursorTarget isKindOf "Land_DZE_WoodDoorLocked_Base" || _cursorTarget isKindOf "CinderWallDoorLocked_DZ_Base") then { + if ((s_player_lastTarget select 1) != _cursorTarget) then { + if (s_player_downgrade_build > 0) then { + player removeAction s_player_downgrade_build; + s_player_downgrade_build = -1; + }; + }; + if (s_player_downgrade_build < 0) then { + _hasAccess = [player, _cursorTarget] call FNC_check_access; + if ((_hasAccess select 0) || {_hasAccess select 2} || {_hasAccess select 3}) then { + s_player_lastTarget set [1,_cursorTarget]; + s_player_downgrade_build = player addAction [format[localize "STR_EPOCH_ACTIONS_REMLOCK",_text], "\z\addons\dayz_code\actions\player_buildingDowngrade.sqf",_cursorTarget, -2, false, true]; + }; + }; + }; + if (s_player_changeDoorCode < 0 && {_typeOfCursorTarget in DZE_DoorsLocked}) then { + s_player_changeDoorCode = player addAction [format[localize "STR_CL_CC_CODE_CHANGE",_text], "\z\addons\dayz_code\actions\changeCode.sqf",_cursorTarget, 0, false, true]; + }; + } else { + player removeAction s_player_downgrade_build; + s_player_downgrade_build = -1; + player removeAction s_player_changeDoorCode; + s_player_changeDoorCode = -1; + }; + + // inplace maintenance tool + if ((damage _cursorTarget >= DZE_DamageBeforeMaint) && {_cursorTarget isKindOf "ModularItems" || {_cursorTarget isKindOf "DZE_Housebase"} || {_typeOfCursorTarget == "LightPole_DZ"}}) then { + if ((s_player_lastTarget select 2) != _cursorTarget) then { + if (s_player_maint_build > 0) then { + player removeAction s_player_maint_build; + s_player_maint_build = -1; + }; + }; + if (s_player_maint_build < 0) then { + _hasAccess = [player, _cursorTarget] call FNC_check_access; + if ((_hasAccess select 0) || {_hasAccess select 2} || {_hasAccess select 3}) then { + local _text2 = _text + " (" + str(round ((damage _cursorTarget) * 100)) + "% damaged)"; + s_player_lastTarget set [2,_cursorTarget]; + s_player_maint_build = player addAction [format["%1 %2",localize "STR_EPOCH_ACTIONS_MAINTAIN",_text2], "\z\addons\dayz_code\actions\player_buildingMaint.sqf",_cursorTarget, -2, false, true]; + }; + }; + } else { + player removeAction s_player_maint_build; + s_player_maint_build = -1; + }; + + //Start Generator + if (_isGenerator) then { + if (s_player_fillgen < 0) then { + // check if not running + if (_cursorTarget getVariable ["GeneratorRunning", false]) then { + s_player_fillgen = player addAction [localize "STR_EPOCH_ACTIONS_GENERATOR1", "\z\addons\dayz_code\actions\stopGenerator.sqf",_cursorTarget, 0, false, true]; + } else { + // check if not filled and player has jerry. + if (_cursorTarget getVariable ["GeneratorFilled", false]) then { + s_player_fillgen = player addAction [localize "STR_EPOCH_ACTIONS_GENERATOR2", "\z\addons\dayz_code\actions\fill_startGenerator.sqf",_cursorTarget, 0, false, true]; + } else { + if (_hasFuel20 || _hasFuel5 || _hasBarrel) then { + s_player_fillgen = player addAction [localize "STR_EPOCH_ACTIONS_GENERATOR3", "\z\addons\dayz_code\actions\fill_startGenerator.sqf",_cursorTarget, 0, false, true]; + }; + }; + }; + }; + } else { + player removeAction s_player_fillgen; + s_player_fillgen = -1; + }; + + //Towing with tow truck + /* + if(_typeOfCursorTarget == "TOW_DZE") then { + if (s_player_towing < 0) then { + if(!(_cursorTarget getVariable ["DZEinTow", false])) then { + s_player_towing = player addAction [localize "STR_EPOCH_ACTIONS_ATTACH" "\z\addons\dayz_code\actions\tow_AttachStraps.sqf",_cursorTarget, 0, false, true]; + } else { + s_player_towing = player addAction [localize "STR_EPOCH_ACTIONS_DETACH", "\z\addons\dayz_code\actions\tow_DetachStraps.sqf",_cursorTarget, 0, false, true]; + }; + }; + } else { + player removeAction s_player_towing; + s_player_towing = -1; + }; + */ + if (_isVehicle && !_isMan && _isAlive && {_characterID == "0"} && {"ItemKeyKit" in weapons player}) then { + if (s_player_claimVehicle < 0) then { + _totalKeys = call epoch_tempKeys; + if (count (_totalKeys select 0) > 0) then { + s_player_claimVehicle = player addAction [format["%1",format[localize "STR_CL_VKC_CLAIM_ACTION",_text]],"scripts\vkc\vehicleKeyChanger.sqf",[_cursorTarget,_characterID,"claim"],5,false,true]; + }; + }; + } else { + player removeAction s_player_claimVehicle; + s_player_claimVehicle = -1; + }; + + if (_typeOfCursorTarget in vg_List) then { + if (s_garage_dialog < 0) then { + local _hasAccess = [player,_cursorTarget] call FNC_check_access; + local _plotCheck = [player, false] call FNC_find_plots; + local _isNearPlot = ((_plotCheck select 1) > 0); + + if ((_isNearPlot && ((_hasAccess select 0) || (_hasAccess select 2) || (_hasAccess select 3) || (_hasAccess select 4))) || !_isNearPlot) then { + s_garage_dialog = player addAction [format["%1",localize "STR_CL_VG_VIRTUAL_GARAGE"],"scripts\virtualGarage\virtualGarage.sqf",_cursorTarget,3,false,true]; + }; + }; + } else { + player removeAction s_garage_dialog; + s_garage_dialog = -1; + }; + + if (_isMan && !_isAlive && !_isZombie && {!(_cursorTarget isKindOf "Animal")} && {!(_cursorTarget getVariable["clothesTaken",false])}) then { + if (s_player_clothes < 0) then { + s_player_clothes = player addAction [format["%1",localize "STR_CL_TC_TAKE_CLOTHES"],"scripts\takeClothes.sqf",_cursorTarget,0, false,true]; + }; + } else { + player removeAction s_player_clothes; + s_player_clothes = -1; + }; + + // ZSC + if (Z_singleCurrency) then { + if (_isMan && !_isAlive && {(!(_cursorTarget isKindOf "Animal") && !_isZombie) || (_isZombie && ZSC_ZombieCoins select 0)}) then { + if (s_player_checkWallet < 0) then { + s_player_checkWallet = player addAction [format["%1",localize "STR_CL_ZSC_CHECK_WALLET"],"\z\addons\dayz_code\actions\zsc\checkWallet.sqf",_cursorTarget,0,false,true]; + }; + } else { + player removeAction s_player_checkWallet; + s_player_checkWallet = -1; + }; + + if (!_isLocked && {_typeOfCursorTarget in DZE_MoneyStorageClasses} && {!(_typeOfCursorTarget in DZE_LockedStorage)}) then { + if (s_bank_dialog < 0) then { + s_bank_dialog = player addAction [format["%1",localize "STR_CL_ZSC_ACCESS_BANK"],"\z\addons\dayz_code\actions\zsc\bankDialog.sqf",_cursorTarget,1,true,true]; + }; + } else { + player removeAction s_bank_dialog; + s_bank_dialog = -1; + }; + if (ZSC_VehicleMoneyStorage) then { + if (_isVehicle && !_isMan && !_isLocked && _isAlive && !_isBicycle) then { + if (s_bank_dialog3 < 0) then { + s_bank_dialog3 = player addAction [format["%1",localize "STR_CL_ZSC_ACCESS_BANK"],"\z\addons\dayz_code\actions\zsc\vehDialog.sqf",_cursorTarget,1,true,true]; + }; + } else { + player removeAction s_bank_dialog3; + s_bank_dialog3 = -1; + }; + }; + if (_isAlive && {_typeOfCursorTarget in AllPlayers} && {isPlayer _cursorTarget}) then { + if (s_givemoney_dialog < 0) then { + s_givemoney_dialog = player addAction [format["%1",format [localize "STR_CL_ZSC_TRADE_COINS",CurrencyName,name _cursorTarget]],"\z\addons\dayz_code\actions\zsc\givePlayer.sqf",_cursorTarget,3,true,true]; + }; + } else { + player removeAction s_givemoney_dialog; + s_givemoney_dialog = -1; + }; + if (Z_globalBanking) then { + if (_isMan && {!(isPlayer _cursorTarget)} && {_typeOfCursorTarget in ZSC_bankTraders}) then { + if (s_bank_dialog1 < 0) then { + s_bank_dialog1 = player addAction [format["%1",localize "STR_CL_ZSC_BANK_TELLER"],"\z\addons\dayz_code\actions\zsc\atmDialog.sqf",_cursorTarget,3,true,true]; + }; + } else { + player removeAction s_bank_dialog1; + s_bank_dialog1 = -1; + }; + if (_typeOfCursorTarget in ZSC_bankObjects) then { + if (s_bank_dialog2 < 0) then { + s_bank_dialog2 = player addAction [format["%1",localize "STR_CL_ZSC_BANK_ATM"],"\z\addons\dayz_code\actions\zsc\atmDialog.sqf",_cursorTarget,3,true,true]; + }; + } else { + player removeAction s_bank_dialog2; + s_bank_dialog2 = -1; + }; + }; + }; + + // All Traders + if (_isMan && {!(isPlayer _cursorTarget)} && {_typeOfCursorTarget in serverTraders}) then { + if (s_player_parts_crtl < 0) then { + local _humanity = player getVariable ["humanity",0]; + local _traderMenu = call compile format["menu_%1;",_typeOfCursorTarget]; + local _low_high = localize "STR_EPOCH_ACTIONS_HUMANITY_LOW"; + local _humanity_logic = false; + if ((_traderMenu select 2) == "friendly") then { + _humanity_logic = (_humanity < DZE_Bandit); + }; + if ((_traderMenu select 2) == "hostile") then { + _low_high = localize "STR_EPOCH_ACTIONS_HUMANITY_HIGH"; + _humanity_logic = (_humanity > DZE_Bandit); + }; + if ((_traderMenu select 2) == "hero") then { + _humanity_logic = (_humanity < DZE_Hero); + }; + if (_humanity_logic) then { + local _cancel = player addAction [format[localize "STR_EPOCH_ACTIONS_HUMANITY",_low_high], "","", 0, true, false]; + s_player_parts set [count s_player_parts,_cancel]; + } else { + local _buy = []; + { + local _itemName2 = getText (configFile >> "CfgMagazines" >> (_x select 1) >> "displayName"); + if (_x select 1 in ["ItemDogTagBandit","ItemDogTagHero"]) then { + _buy = player addAction [format[localize "STR_EPOCH_TRADER_CATEGORY_TRADE_ITEMS",(_x select 3),_itemName2,(_x select 4),localize "str_actions_stats_hm"], "\z\addons\dayz_code\actions\trade_items_wo_db.sqf",[(_x select 0),(_x select 1),(_x select 2),(_x select 3),(_x select 4)],1, true, true]; + } else { + local _itemName1 = getText (configFile >> "CfgMagazines" >> (_x select 0) >> "displayName"); + _buy = player addAction [format[localize "STR_EPOCH_TRADER_CATEGORY_TRADE_ITEMS",(_x select 3),_itemName2,(_x select 2),_itemName1], "\z\addons\dayz_code\actions\trade_items_wo_db.sqf",[(_x select 0),(_x select 1),(_x select 2),(_x select 3),(_x select 4)],1, true, true]; + }; + s_player_parts set [count s_player_parts,_buy]; + } count (_traderMenu select 1); + local _buyV = player addAction [localize "STR_EPOCH_PLAYER_289", "\z\addons\dayz_code\actions\AdvancedTrading\init.sqf",(_traderMenu select 0), 999, true, false]; + s_player_parts set [count s_player_parts,_buyV]; + }; + s_player_parts_crtl = 1; + }; + } else { + {player removeAction _x} count s_player_parts;s_player_parts = []; + s_player_parts_crtl = -1; + }; + + //Dog + if (dayz_tameDogs) then { + local _hasRawMeat = {_x in Dayz_meatraw} count _magazinesPlayer > 0; + + if (_isDog && {_hasRawMeat && _isAlive && {_ownerID == "0"} && {player getVariable ["dogID",0] == 0}}) then { + if (s_player_tamedog < 0) then { + s_player_tamedog = player addAction [localize "str_actions_tamedog", "\z\addons\dayz_code\actions\dog\tame_dog.sqf", _cursorTarget, 1, false, true]; + }; + } else { + player removeAction s_player_tamedog; + s_player_tamedog = -1; + }; + if (_isDog && _isAlive && {_ownerID == _id}) then { + local _hasbottleitem = ({_x in ["ItemWaterBottle","ItemWaterBottleInfected","ItemWaterBottleSafe","ItemWaterBottleBoiled","ItemPlasticWaterBottle","ItemPlasticWaterBottleInfected","ItemPlasticWaterBottleSafe","ItemPlasticWaterBottleBoiled"]} count _magazinesPlayer) > 0; + + if (s_player_feeddog < 0 && _hasRawMeat) then { + s_player_feeddog = player addAction [localize "str_actions_feeddog","\z\addons\dayz_code\actions\dog\feed.sqf",[_dogHandle,0], 0, false, true]; + }; + if (s_player_waterdog < 0 && _hasbottleitem) then { + s_player_waterdog = player addAction [localize "str_actions_waterdog","\z\addons\dayz_code\actions\dog\feed.sqf",[_dogHandle,1], 0, false, true]; + }; + if (s_player_staydog < 0) then { + if (_dogHandle getFSMVariable "_actionLieDown") then { _text = "str_actions_liedog"; } else { _text = "str_actions_sitdog"; }; + s_player_staydog = player addAction [localize _text,"\z\addons\dayz_code\actions\dog\stay.sqf", _dogHandle, 5, false, true]; + }; + if (s_player_trackdog < 0) then { + s_player_trackdog = player addAction [localize "str_actions_trackdog","\z\addons\dayz_code\actions\dog\track.sqf", _dogHandle, 4, false, true]; + }; + if (s_player_barkdog < 0) then { + s_player_barkdog = player addAction [localize "str_actions_barkdog","\z\addons\dayz_code\actions\dog\speak.sqf", _cursorTarget, 3, false, true]; + }; + if (s_player_warndog < 0) then { + local _warn = _dogHandle getFSMVariable "_watchDog"; + if (_warn) then { _text = localize "str_epoch_player_247"; _warn = false; } else { _text = localize "str_epoch_player_248"; _warn = true; }; + s_player_warndog = player addAction [format[localize "str_actions_warndog",_text],"\z\addons\dayz_code\actions\dog\warn.sqf",[_dogHandle, _warn], 2, false, true]; + }; + if (s_player_followdog < 0) then { + s_player_followdog = player addAction [localize "str_actions_followdog","\z\addons\dayz_code\actions\dog\follow.sqf",[_dogHandle,true], 6, false, true]; + }; + } else { + player removeAction s_player_feeddog; + s_player_feeddog = -1; + player removeAction s_player_waterdog; + s_player_waterdog = -1; + player removeAction s_player_staydog; + s_player_staydog = -1; + player removeAction s_player_trackdog; + s_player_trackdog = -1; + player removeAction s_player_barkdog; + s_player_barkdog = -1; + player removeAction s_player_warndog; + s_player_warndog = -1; + player removeAction s_player_followdog; + s_player_followdog = -1; + }; + }; +} else { + //Engineering + player removeAction s_player_plot_boundary; + s_player_plot_boundary = -1; + player removeAction s_player_plotManagement; + s_player_plotManagement = -1; + {dayz_myCursorTarget removeAction _x} count s_player_repairActions;s_player_repairActions = []; + player removeAction s_player_repair_crtl; + s_player_repair_crtl = -1; + dayz_myCursorTarget = objNull; + player removeAction s_player_flipveh; + s_player_flipveh = -1; + player removeAction s_player_sleep; + s_player_sleep = -1; + player removeAction s_player_deleteBuild; + s_player_deleteBuild = -1; + player removeAction s_player_cook; + s_player_cook = -1; + player removeAction s_player_boil; + s_player_boil = -1; + player removeAction s_player_packtent; + s_player_packtent = -1; + player removeAction s_player_packtentinfected; + s_player_packtentinfected = -1; + player removeAction s_player_fillfuel; + s_player_fillfuel = -1; + player removeAction s_player_studybody; + s_player_studybody = -1; + //fuel + player removeAction s_player_fillfuel210; + s_player_fillfuel210 = -1; + player removeAction s_player_fillfuel20; + s_player_fillfuel20 = -1; + player removeAction s_player_fillfuel5; + s_player_fillfuel5 = -1; + //Allow player to siphon vehicle fuel + player removeAction s_player_siphonfuel; + s_player_siphonfuel = -1; + //Allow player to gather + player removeAction s_player_gather; + s_player_gather = -1; + player removeAction s_player_destroytent; + s_player_destroytent = -1; + // player removeAction s_player_attach_bomb; + // s_player_attach_bomb = -1; + {player removeAction _x} count s_player_combi;s_player_combi = []; + s_player_lastTarget = [objNull,objNull,objNull,objNull,objNull]; + {player removeAction _x} count s_player_parts;s_player_parts = []; + s_player_parts_crtl = -1; + {player removeAction _x} count s_player_lockunlock;s_player_lockunlock = []; + s_player_lockUnlock_crtl = -1; + player removeAction s_player_SurrenderedGear; + s_player_SurrenderedGear = -1; + player removeAction s_player_maintain_area; + s_player_maintain_area = -1; + player removeAction s_player_maintain_area_force; + s_player_maintain_area_force = -1; + player removeAction s_player_maintain_area_preview; + s_player_maintain_area_preview = -1; + player removeAction s_player_tamedog; + s_player_tamedog = -1; + player removeAction s_player_feeddog; + s_player_feeddog = -1; + player removeAction s_player_waterdog; + s_player_waterdog = -1; + player removeAction s_player_staydog; + s_player_staydog = -1; + player removeAction s_player_trackdog; + s_player_trackdog = -1; + player removeAction s_player_barkdog; + s_player_barkdog = -1; + player removeAction s_player_warndog; + s_player_warndog = -1; + player removeAction s_player_followdog; + s_player_followdog = -1; + player removeAction s_player_unlockvault; + s_player_unlockvault = -1; + player removeAction s_player_packvault; + s_player_packvault = -1; + player removeAction s_player_lockvault; + s_player_lockvault = -1; + player removeAction s_player_information; + s_player_information = -1; + player removeAction s_player_fillgen; + s_player_fillgen = -1; + player removeAction s_player_upgrade_build; + s_player_upgrade_build = -1; + player removeAction s_player_maint_build; + s_player_maint_build = -1; + player removeAction s_player_downgrade_build; + s_player_downgrade_build = -1; + player removeAction s_player_towing; + s_player_towing = -1; + player removeAction s_player_fuelauto; + s_player_fuelauto = -1; + player removeAction s_player_fuelauto2; + s_player_fuelauto2 = -1; + player removeAction s_player_manageDoor; + s_player_manageDoor = -1; + player removeAction s_player_hide_body; + s_player_hide_body = -1; + player removeAction s_player_changeDoorCode; + s_player_changeDoorCode = -1; + player removeAction s_player_changeVaultCode; + s_player_changeVaultCode = -1; + player removeAction s_givemoney_dialog; + s_givemoney_dialog = -1; + player removeAction s_bank_dialog; + s_bank_dialog = -1; + player removeAction s_bank_dialog1; + s_bank_dialog1 = -1; + player removeAction s_bank_dialog2; + s_bank_dialog2 = -1; + player removeAction s_bank_dialog3; + s_bank_dialog3 = -1; + player removeAction s_player_checkWallet; + s_player_checkWallet = -1; + player removeAction s_player_clothes; + s_player_clothes = -1; + player removeAction s_player_copyToKey; + s_player_copyToKey = -1; + player removeAction s_player_claimVehicle; + s_player_claimVehicle = -1; + player removeAction s_garage_dialog; + s_garage_dialog = -1; +}; + +//Dog actions on player self +if (_dogHandle > 0) then { + local _dog = _dogHandle getFSMVariable "_dog"; + if (isNil "_dog") exitWith {}; + if (isNil "_ownerID") then {_ownerID = "0"}; + if (_canDo && !_inVehicle && {alive _dog} && {!(_ownerID in [_myCharID,_uid])}) then { + if (s_player_movedog < 0) then { + s_player_movedog = player addAction [localize "str_actions_movedog", "\z\addons\dayz_code\actions\dog\move.sqf", player getVariable ["dogID",0], 1, false, true]; + }; + if (s_player_speeddog < 0) then { + _text = localize "str_epoch_player_249"; + local _speed = 0; + if (_dog getVariable ["currentSpeed",1] == 0) then { _speed = 1; _text = localize "str_epoch_player_250"; }; + s_player_speeddog = player addAction [format[localize "str_actions_speeddog", _text], "\z\addons\dayz_code\actions\dog\speed.sqf",[player getVariable ["dogID",0],_speed], 0, false, true]; + }; + if (s_player_calldog < 0) then { + s_player_calldog = player addAction [localize "str_actions_calldog", "\z\addons\dayz_code\actions\dog\follow.sqf", [player getVariable ["dogID",0], true], 2, false, true]; + }; + }; +} else { + player removeAction s_player_movedog; + s_player_movedog = -1; + player removeAction s_player_speeddog; + s_player_speeddog = -1; + player removeAction s_player_calldog; + s_player_calldog = -1; +}; + +//Monitor +player setVariable ["selfActions", diag_ticktime, false]; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/dayz_code/compile/keyboard.sqf b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/compile/keyboard.sqf new file mode 100755 index 0000000..32bd645 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/compile/keyboard.sqf @@ -0,0 +1,284 @@ +// (c) facoptere@gmail.com, licensed to DayZMod for the community + +#include "\ca\editor\Data\Scripts\dikCodes.h" + +local _dikCode = _this select 1; +local _shiftState = _this select 2; +local _ctrlState = _this select 3; +local _altState = _this select 4; +local _handled = false; + +if (isNil "keyboard_keys") then { + local _cancelBuild = { + DZE_cancelBuilding = true; + call dayz_EjectPlayer; + _handled = false; + if (r_player_dead) then {_handled = true;}; // Disable ESC after death + }; + local _dze_f = { + if (!_ctrlState && !_altState) then {DZE_F = true;}; + }; + local _dze_q = { + if (!_ctrlState && !_altState) then {DZE_Q = true;}; + if (!_ctrlState && _altState) then {DZE_Q_alt = true;}; + if (_ctrlState && !_altState) then {DZE_Q_ctrl = true;}; + }; + local _dze_z = { + if (!_ctrlState && !_altState) then {DZE_Z = true;}; + if (!_ctrlState && _altState) then {DZE_Z_alt = true;}; + if (_ctrlState && !_altState) then {DZE_Z_ctrl = true;}; + }; + local _autoRun = { + if (!dayz_autoRun) then { + dayz_autoRun = true; + dayz_autoRunThread = [] spawn { + local _weapon = currentWeapon player; + while {dayz_autoRun} do { + // SurfaceIsWater does not work for ponds + // Check weapon to detect Arma action (dayz action is handled in dz_fn_switchWeapon) + if (player != vehicle player || {r_fracture_legs || {surfaceIsWater getPosASL player} || {currentWeapon player != _weapon} || {(call fn_nearWaterHole) select 0}}) exitWith { + call dayz_autoRunOff; + }; + player playAction "FastF"; + uiSleep 0.5; + }; + }; + } else { + call dayz_autoRunOff; + }; + _handled = true; + }; + local _filterCheat = { + //Overriding default engine handling does not stop cheat input, need manual disableUserInput too + _handled = [displayNull,_dikCode,_shiftState] call dze_filterCheats; + }; + local _openGroups = { + if (dayz_requireRadio && {!("ItemRadio" in items player)}) then { + localize "STR_EPOCH_NEED_RADIO" call dayz_rollingMessages; + } else { + if (isNull findDisplay 80000) then { + if (!isNil "dayz_groupInit") then {[] spawn dayz_openGroupDialog;}; + } else { + findDisplay 80000 closeDisplay 2; + }; + }; + _handled = true; + }; + local _muteSound = { + call player_toggleSoundMute; + _handled = true; + }; + local _statusUI = { + DZE_UI = DZE_UI + 1; + if (DZE_UI == 6) then {DZE_UI = 0; [format[localize "STR_UI_STATUS_ICONS" + " %1",localize "STR_DISABLED"],1] call dayz_rollingMessages;}; + if (DZE_UI == 1) then {[format[localize "STR_UI_STATUS_ICONS" + " %1",localize "STR_ENABLED"],1] call dayz_rollingMessages;}; + profileNamespace setVariable ["statusUI",DZE_UI]; + saveProfileNamespace; + call ui_changeDisplay; + _handled = true; + }; + local _rifle = { + 2 call dz_fn_switchWeapon; + _handled = true; + }; + local _pistol = { + 3 call dz_fn_switchWeapon; + _handled = true; + }; + local _melee = { // Also works for rifle on back if DZE_TwoPrimaries = 2; + 4 call dz_fn_switchWeapon; + _handled = true; + }; + local _surrender = { + call player_surrender; + _handled = true; + }; + local _gear = { + if ((vehicle player != player) && {!_shiftState && !_ctrlState && !_altState && !dialog}) then { + createGearDialog [player, "RscDisplayGear"]; + _handled = true; + } else { + if ((vehicle player == player) && {speed vehicle player > 0}) then { + //[objNull, player, rSwitchMove,""] call RE; + _handled = true; + }; + }; + }; + local _forcesave = { + if (diag_tickTime - dayz_lastSave > 10) then { + call player_forceSave; + }; + }; + local _drop = { + local _doors = []; + if (r_drag_sqf) then { + _doors = nearestObjects [player, DayZ_DropDrageeObjects, 3]; //Prevent dropping dragged player through objects + if (count _doors > 0) then {_handled = true;}; + force_dropBody = true; + } else { + _doors = nearestObjects [player, DZE_DoorsLocked, 3]; + if (count _doors > 0 && {speed player > 0}) then {_handled = true;}; //Prevent sprint and prone through doors glitch + }; + }; + local _interrupt = { + r_interrupt = true; + if (DZE_Surrender) then {call dze_surrender_off}; + if (dayz_autoRun) then {call dayz_autoRunOff;}; + }; + // TODO: left/right, when gear open: onKeyDown = "[_this,'onKeyDown',0,107,0,107] execVM '\z\addons\dayz_code\system\handleGear.sqf'"; + local _noise = { + //Overriding default engine handling does not stop combination binds, need manual disableUserInput too + _handled = [displayNull,_dikCode,_shiftState] call dze_filterCheats; + + if (diag_ticktime - dayz_lastCheckBit > 10 && {!(_dikCode in channel_keys)}) then { + dayz_lastCheckBit = diag_ticktime; + [player,20,true,(getPosATL player)] call player_alertZombies; + }; + }; + local _journal = { + if (!dayz_isSwimming && !dialog) then { + [player,4,true,(getPosATL player)] call player_alertZombies; + createDialog 'horde_journal_front_cover'; + }; + _handled = true; + }; + + local _bunnyhop = { + r_interrupt = true; + + if (animationState player in ["bunnyhopunarmed","bunnyhoprifle"]) then { + //Fixes invisible weapon switch glitch if double tapping vault with no weapon in hands + _handled = true; + }; + if (player isKindOf "PZombie_VB") then { + _handled = true; // do not allow player zombies to vault or jump + } else { + local _nearbyObjects = nearestObjects [getPosATL player, dayz_disallowedVault, 8]; + if (count _nearbyObjects > 0) then { + if (diag_tickTime - dayz_lastCheckBit > 4) then { + [objNull, player, rSwitchMove,"GetOver"] call RE; + player playActionNow "GetOver"; + dayz_lastCheckBit = diag_tickTime; + } else { + _handled = true; + }; + }; + }; + }; + + _rifle1 = { + 2 call dz_fn_switchWeapon; + _handled = true; + }; + _rifle2 = { + 4 call dz_fn_switchWeapon; + _handled = true; + }; + _pistol = { + 3 call dz_fn_switchWeapon; + _handled = true; + }; + _painkiller = { + [0,0,0,[player]] execVM "rlnt\scripts\Weapon HUD\actions\rlnt_painkiller.sqf"; + _handled = true; + }; + _bandage = { + [0,0,0,[player]] execVM "rlnt\scripts\Weapon HUD\actions\rlnt_bandage.sqf"; + _handled = true; + }; + + local _block = { + _handled = true; + }; + + local _addArray = { + { + if (_x <= 999999) then { + keyboard_keys set [_x, _this select 1]; + }; + } forEach (_this select 0); + }; + + keyboard_keys = []; + channel_keys = []; + voice_keys = []; + {voice_keys = voice_keys + (actionKeys _x)} count voice_actions; + {channel_keys = channel_keys + (actionKeys _x)} count ["NextChannel","PrevChannel"]; + keyboard_keys resize 256; + [[DIK_ESCAPE], _cancelBuild] call _addArray; + [[DIK_INSERT], {DZE_Q_alt = true;}] call _addArray; + [[DIK_A,DIK_D,DIK_LEFT,DIK_RIGHT], _interrupt] call _addArray; + [[DIK_F], _dze_f] call _addArray; + [[DIK_PRIOR], _dze_q] call _addArray; + [[DIK_NEXT], _dze_z] call _addArray; + [[DIK_Q], {DZE_4 = true;}] call _addArray; + [[DIK_E], {DZE_6 = true;}] call _addArray; + [[DIK_0], _autoRun] call _addArray; + [[DIK_NUMPADMINUS,DIK_LSHIFT], _filterCheat] call _addArray; + [[DIK_SPACE], {DZE_5 = true;}] call _addArray; + [actionKeys "User6", {DZE_F = true;}] call _addArray; + [actionKeys "User7", {DZE_Q_ctrl = true;}] call _addArray; + [actionKeys "User8", {DZE_Z_ctrl = true;}] call _addArray; + [actionKeys "User13", {DZE_Q_alt = true;}] call _addArray; + [actionKeys "User14", {DZE_Z_alt = true;}] call _addArray; + [actionKeys "User15", {DZE_Q = true;}] call _addArray; + [actionKeys "User16", {DZE_Z = true;}] call _addArray; + [actionKeys "User17", {DZE_4 = true;}] call _addArray; + [actionKeys "User18", {DZE_6 = true;}] call _addArray; + [actionKeys "User19", {DZE_5 = true;}] call _addArray; + [actionKeys "Surrender", _surrender] call _addArray; + [[DIK_1], _rifle] call _addArray; + [[DIK_2], _pistol] call _addArray; + [[DIK_3], _melee] call _addArray; + [actionKeys "Gear", _gear] call _addArray; + [actionKeys "Prone", _drop] call _addArray; + [actionKeys "Crouch", _drop] call _addArray; + [actionKeys "MoveLeft", _interrupt] call _addArray; + [actionKeys "MoveRight", _interrupt] call _addArray; + [actionKeys "MoveForward", _interrupt] call _addArray; + [actionKeys "MoveBack", _interrupt] call _addArray; + [actionKeys "TurnLeft", _interrupt] call _addArray; + [actionKeys "TurnRight", _interrupt] call _addArray; + [actionKeys "PushToTalk", _noise] call _addArray; + [actionKeys "PushToTalkAll", _noise] call _addArray; + [actionKeys "PushToTalkCommand", _noise] call _addArray; + [actionKeys "PushToTalkDirect", _noise] call _addArray; + [actionKeys "PushToTalkGroup", _noise] call _addArray; + [actionKeys "PushToTalkSide", _noise] call _addArray; + [actionKeys "PushToTalkVehicle", _noise] call _addArray; + [actionKeys "VoiceOverNet", _noise] call _addArray; + [actionKeys "NextChannel", _noise] call _addArray; + [actionKeys "PrevChannel", _noise] call _addArray; + [actionKeys "Chat", _noise] call _addArray; + [actionKeys "User20", _journal] call _addArray; + [actionKeys "Diary", _journal] call _addArray; + [actionKeys "NetworkStats", _journal] call _addArray; + [[DIK_F1], _muteSound] call _addArray; + [[DIK_F3], _statusUI] call _addArray; + [[DIK_F4], {if (diag_tickTime - dayz_lastSave > 10) then {call player_forceSave;};_handled = true;}] call _addArray; + [[DIK_TAB,DIK_DELETE], _forcesave] call _addArray; + [actionKeys "LeanLeft", {DZE_4 = true; dayz_dodge = true;}] call _addArray; + [actionKeys "LeanRight", {DZE_6 = true; dayz_dodge = true;}] call _addArray; + [actionKeys "GetOver", _bunnyhop] call _addArray; // V + [actionKeys "ForceCommandingMode", {DZE_5 = true;_handled = true;}] call _addArray; + [[ DIK_F9,DIK_F10,DIK_F11,DIK_F12, + DIK_F8,DIK_F7,DIK_F6,DIK_F5, + DIK_F2,DIK_9, + DIK_8,DIK_7,DIK_6], _block] call _addArray; + if (dayz_groupSystem) then { + [[DIK_F5], _openGroups] call _addArray; + [[DIK_LWIN,DIK_RWIN], {dayz_groupNameTags = !dayz_groupNameTags;_handled = true;}] call _addArray; + [actionKeys "TacticalView", _block] call _addArray; + }; + [actionKeys "DSInterface", _block] call _addArray; + [[DIK_P], {if (_shiftState) then {_handled = true;};}] call _addArray; + //diag_log "keyboard_keys reset"; +}; + +if (r_player_unconsciousInputDisabled) exitWith {true}; +local _code = keyboard_keys select _dikCode; +if (!isNil "_code") then { + call _code; +}; + +_handled \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/dayz_code/compile/local_lockUnlock.sqf b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/compile/local_lockUnlock.sqf new file mode 100755 index 0000000..827091b --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/compile/local_lockUnlock.sqf @@ -0,0 +1,13 @@ +private ["_vehicle","_status"]; +_vehicle = _this select 0; +_status = _this select 1; + +if (local _vehicle) then { + if(_status) then { + _vehicle setVehicleLock "LOCKED"; + //_vehicle setVariable ["MF_Tow_Cannot_Tow",true,true]; + } else { + _vehicle setVehicleLock "UNLOCKED"; + //_vehicle setVariable ["MF_Tow_Cannot_Tow",false,true]; + }; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/dayz_code/compile/ui_selectSlot.sqf b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/compile/ui_selectSlot.sqf new file mode 100755 index 0000000..83d5c94 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/compile/ui_selectSlot.sqf @@ -0,0 +1,106 @@ +//private ["_control","_button","_parent","_group","_pos","_item","_conf","_name","_cfgActions","_numActions","_height","_menu","_config","_type","_script","_outputOriented","_compile","_array","_outputClass","_outputType"]; +disableSerialization; +_control = _this select 0; +_button = _this select 1; +_parent = findDisplay 106; + +if (carryClick) then {carryClick = false;}; + +if (_button == 1) then { + if (animationState player in ["ainjppnemstpsnonwnondnon_rolltofront","amovppnemstpsnonwnondnon_healed"]) exitWith { + //Prevent bypassing unconscious wake up animation with bandage or other right click actions + localize "str_player_actionslimit" call dayz_rollingMessages; + }; + + private ["_conf","_name","_compile","_height","_item"]; + _group = _parent displayCtrl 6902; + + _pos = ctrlPosition _group; + + _item = gearSlotData _control; + if ( //No right click action + (!DZE_SelfTransfuse && {_item in ["ItemBloodbag","wholeBloodBagANEG","wholeBloodBagAPOS","wholeBloodBagBNEG","wholeBloodBagBPOS","wholeBloodBagABNEG","wholeBloodBagABPOS","wholeBloodBagONEG","wholeBloodBagOPOS"]}) + ) exitWith {}; + + if (mouseOverCarry) then { + _item = DayZ_onBack; + carryClick = true; + }; + + _pos set [0,((_this select 2) + 0.46)]; + _pos set [1,((_this select 3) + 0.07)]; + + _conf = configFile >> "cfgMagazines" >> _item; + if (!isClass _conf) then { + _conf = configFile >> "cfgWeapons" >> _item; + }; + _name = getText(_conf >> "displayName"); + + _cfgActions = _conf >> "ItemActions"; + _numActions = (count _cfgActions); + _height = 0; + if (!dayz_groupSystem && {_item == "ItemRadio"}) then {_numActions = 1;}; // Used to bypass the group action when not enabled. + + //Populate Menu + for "_i" from 0 to (_numActions - 1) do + { + _menu = _parent displayCtrl (1600 + _i); + _menu ctrlShow true; + _config = (_cfgActions select _i); + _type = getText (_config >> "text"); + _script = getText (_config >> "script"); + _outputOriented = getNumber (_config >> "outputOriented") == 1; + _height = _height + (0.025 * safezoneH); + _compile = format["_id = '%2' %1;",_script,_item]; + uiNamespace setVariable ['uiControl', _control]; + if (_outputOriented) then { + /* + This flag means that the action is output oriented + the output class will then be transferred to the script + and the type used for the name + */ + _array = getArray (_config >> "output"); + _outputClass = _array select 0; + _outputType = _array select 1; + _name = getText (configFile >> _outputType >> _outputClass >> "displayName"); + _compile = format["_id = ['%2',%3] %1;",_script,_item,_array]; + }; + + _menu ctrlSetText format[_type,_name]; + _menu ctrlSetEventHandler ["ButtonClick",_compile]; + }; + + _isKey = ((["ItemKey",_item] call fnc_inString) && (_item != "ItemKeyKit")); + + { + private["_classname","_text","_execute","_condition","_option"]; + _classname = _x select 0; + _text = _x select 1; + _execute = _x select 2; + _condition = _x select 3; + if (count _this > 4) then {_option = _x select 4}; + + if ((_item == _classname || (_isKey && (_className == "ItemKey"))) && (call compile _condition)) then { + _menu = _parent displayCtrl (1600 + _numActions); + _menu ctrlShow true; + _height = _height + (0.025 * safezoneH); + uiNamespace setVariable ['uiControl', _control]; + _menu ctrlSetText _text; + if (_isKey && (_className == "ItemKey")) then { + _menu ctrlSetEventHandler ["ButtonClick",format ["[%1,%2] %3",str _item,_option,_execute]]; + } else { + _menu ctrlSetEventHandler ["ButtonClick",_execute]; + }; + _numActions = _numActions + 1; + }; + } forEach DZE_CLICK_ACTIONS; + + _pos set [3,_height]; + + //hint format["Obj: %1 \nHeight: %2\nPos: %3",_item,_height,_grpPos]; + + _group ctrlShow true; + ctrlSetFocus _group; + _group ctrlSetPosition _pos; + _group ctrlCommit 0; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/dayz_code/configVariables.sqf b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/configVariables.sqf new file mode 100755 index 0000000..3e3ac56 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/configVariables.sqf @@ -0,0 +1,7 @@ +if (isServer) then { + diag_log "Loading custom server configVariables"; +}; + +if (!isDedicated) then { + diag_log "Loading custom client configVariables"; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/dayz_code/gui/description.hpp b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/gui/description.hpp new file mode 100755 index 0000000..8a96b3b --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/gui/description.hpp @@ -0,0 +1,114 @@ +class RscText +{ + type = 0; + idc = -1; + x = 0; + y = 0; + h = 0.037; + w = 0.3; + style = 0x100; + font = Zeppelin32; + SizeEx = 0.03921; + colorText[] = {1,1,1,1}; + colorBackground[] = {0, 0, 0, 0}; + linespacing = 1; +}; + +class RscPicture +{ + access=0; + type=0; + idc=-1; + style=48; + colorBackground[]={0,0,0,0}; + colorText[]={1,1,1,1}; + font="TahomaB"; + sizeEx=0; + lineSpacing=0; + text=""; +}; + +class RscLoadingText : RscText +{ + style = 2; + x = 0.323532; + y = 0.666672; + w = 0.352944; + h = 0.039216; + sizeEx = 0.03921; + colorText[] = {0.543,0.5742,0.4102,1.0}; +}; + +class RscProgress +{ + x = 0.344; + y = 0.619; + w = 0.313726; + h = 0.0261438; + texture = "\ca\ui\data\loadscreen_progressbar_ca.paa"; + colorFrame[] = {0,0,0,0}; + colorBar[] = {1,1,1,1}; +}; + +class RscProgressNotFreeze +{ + idc = -1; + type = 45; + style = 0; + x = 0.022059; + y = 0.911772; + w = 0.029412; + h = 0.039216; + texture = "#(argb,8,8,3)color(0,0,0,0)"; +}; + +class DayZ_loadingScreen +{ + idd = -1; + duration = 10e10; + fadein = 0; + fadeout = 0; + name = "loading screen"; + class controlsBackground + { + class blackBG : RscText + { + x = safezoneX; + y = safezoneY; + w = safezoneW; + h = safezoneH; + text = ""; + colorText[] = {0,0,0,0}; + colorBackground[] = {0,0,0,1}; + }; + }; + class controls + { + class Title1 : RscLoadingText + { + text = "$STR_LOADING"; + }; + class CA_Progress : RscProgress + { + idc = 104; + type = 8; + style = 0; + texture = "\ca\ui\data\loadscreen_progressbar_ca.paa"; + }; + class CA_Progress2 : RscProgressNotFreeze + { + idc = 103; + }; + class Name2: RscText + { + idc = 101; + x = 0.05; + y = 0.029412; + w = 0.9; + h = 0.04902; + text = ""; + sizeEx = 0.05; + colorText[] = {0.543,0.5742,0.4102,1.0}; + }; + }; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/dayz_code/init/compiles.sqf b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/init/compiles.sqf new file mode 100755 index 0000000..bec1856 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/init/compiles.sqf @@ -0,0 +1,14 @@ +if (isServer) then { + diag_log "Loading custom server compiles"; +}; + +if (!isDedicated) then { + diag_log "Loading custom client compiles"; + + player_selectSlot = compile preprocessFileLineNumbers "dayz_code\compile\ui_selectSlot.sqf"; + fnc_usec_selfActions = compile preprocessFileLineNumbers "dayz_code\compile\fn_selfActions.sqf"; + locateVehicle = compile preprocessFileLineNumbers "scripts\locateVehicle.sqf"; + remoteVehicle = compile preprocessFileLineNumbers "scripts\remoteVehicle\remoteVehicle.sqf"; +}; + +DZ_KeyDown_EH = compile preprocessFileLineNumbers "dayz_code\compile\keyboard.sqf"; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/dayz_code/init/variables.sqf b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/init/variables.sqf new file mode 100755 index 0000000..618871b --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/dayz_code/init/variables.sqf @@ -0,0 +1,50 @@ +if (isServer) then { + diag_log "Loading custom server variables"; + + vkc_clearAmmo = true; // Clear the ammo of vehicles after they have been rekeyed/claimed? (stops users getting a free rearm) + vkc_disableThermal = [""]; // Array of vehicle config classes as well as vehicle classnames to disable thermal on when being spawned. i.e: ["All","Land","Air","Ship","StaticWeapon","AH1Z","MTVR"]; + + vg_clearAmmo = true; // Clear the ammo of vehicles spawned during the same restart they are stored? (stops users storing a vehicle for a free rearm) + vg_disableThermal = []; // Array of vehicle config classes as well as vehicle classnames to disable thermal on when being spawned. i.e: ["All","Land","Air","Ship","StaticWeapon","AH1Z","MTVR"]; + vg_sortColumn = 0; //0 or an out of range value sorts by the default column 'DisplayName', otherwise 1 = 'DateStored', 2 = 'id', 3 = 'Name' (of storing player), 4 = 'DateMaintained' +}; + +if (!isDedicated) then { + diag_log "Loading custom client variables"; + + vkc_claimPrice = 1000; // Amount in worth for claiming a vehicle. See the top of this script for an explanation. + vkc_changePrice = 5000; // Amount in worth for changing the key for a vehicle. See the top of this script for an explanation. + + vg_list = ["Plastic_Pole_EP1_DZ"]; // List of objects/traders that are allowed to interact with virtual garage. i.e: ["Plastic_Pole_EP1_DZ","Worker2"]; + vg_blackListed = []; // Array of vehicle config classes as well as vehicle classnames that are blacklisted from being stored, i.e ["All","Land","Air","Ship","StaticWeapon","AH1Z","MTVR"] + vg_heliPads = ["Helipad_Civil_DZ","Helipad_Rescue_DZ","Helipad_Army_DZ","Helipad_Cross_DZ","Helipad_ParkBorder_DZ"]; // Array of heli pad classnames + vg_removeKey = true; // Remove the key from the players inventory after storing vehicle? + vg_requireKey = true; // Require the player to have the key when storing a locked vehicle. + vg_storeWithGear = true; // Allow storing vehicles with gear? + vg_tiedToPole = true; // Tie the virtual garage to a local plot pole? If no plot pole is present (i.e a communal garage at a trader etc) the players UID will be used. + vg_pricePer = 100; // Price in worth to store a vehicle per gear item, use 0 if you want it to be free. + vg_maintainCost = 10000; //cost is 1000 per 10oz gold, gem cost is as defined in DZE_GemWorthArray; if you use ZSC then this is an amount of coins. This is a flate rate for all vehicles in the garage/per player depending on vg_tiedToPole + vg_price = [["Land",500],["Air",500],["Ship",500]]; + /* + vg_price can be an array of vehicle config classes as well as vehicle classnames, you need to put these in order of what you prefer to get checked first. + Price is in worth for briefcases or coins for gold based servers (10,000 worth is considered 1 briefcase, 100,000 coins is considered 1 briefcase) + + i.e: + vg_price = [["Land",500],["Air",300],["Ship",100]]; + vg_price = [["350z_red",200],["Land",500],["AH1Z",1000],["Air",300],["Ship",100]]; + */ + vg_limit = [["Land",10],["Air",5],["Ship",5]]; + /* + vg_limit can be an array of vehicle config classes and classnames to narrow down what players can store or it can be a numerical value for a total limit. + These can be classnames as well as config classnames, you need to put these in order of what you prefer to get checked first. + + i.e: + vg_limit = [["Land",5],["Air",3],["Ship",1]]; + vg_limit = [["350z_red",2],["Land",5],["AH1Z",1],["Air",3],["Ship",1]]; + vg_limit = 5; + */ +}; + +Z_singleCurrency = true; +Z_globalBanking = true; +Z_globalBankingTraders = true; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/description.ext b/MPMissions/DayZ_Epoch_24.Napf/description.ext new file mode 100755 index 0000000..87319d9 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/description.ext @@ -0,0 +1,81 @@ +respawn = "BASE"; +respawnDelay = 0; +respawnDialog = 0; +onLoadMission = "DayZ Epoch Napf"; +OnLoadIntro = "Welcome to Napf"; +OnLoadIntroTime = 0; +OnLoadMissionTime = 0; +disabledAI = 1; +disableChannels[] = {0,2,6}; +enableItemsDropping = 0; +onPauseScript = ""; +briefing = 0; +debriefing = 0; + +titleParam1 = "AutoLogin:"; +valuesParam1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 31}; +defValueParam1 = 1; //auto login time limit in seconds, set value to 31 to disable auto login +textsParam1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, "Disabled"}; + +loadScreen = "\z\addons\dayz_code\gui\loadingscreen.paa"; + +class Header +{ + gameType = COOP; //DM, Team, Coop, ... + minPlayers = 1; //min # of players the mission supports + maxPlayers = 100; //Max # of players the mission supports +}; + +aiKills = 1; +diagRadio = 1; +diagHit = 1; + +//#include "\z\addons\dayz_code\gui\description.hpp" +#include "dayz_code\gui\description.hpp" +#include "rlnt\dialogs\rlnt_defines.hpp" /* RLNT - WeaponHUD */ +class RscTitles { +#include "rlnt\dialogs\rlnt_weaponhud.hpp" /* RLNT - WeaponHUD */ + class wm_disp { + idd = -1; + onLoad = "uiNamespace setVariable ['wm_disp', _this select 0]"; + fadein = 0; + fadeout = 0; + duration = 10e10; + controlsBackground[] = {}; + objects[] = {}; + class controls { + class wm_text2 { + idc = 1; + x = safeZoneX+0.027; + y = safeZoneY+safeZoneH-0.16; + w = 0.151*safeZoneH; + h = 0.057*safeZoneH; + shadow = 2; + class Attributes + { + font = "EtelkaNarrowMediumPro"; + color = "#24FFFFFF"; + align = "left"; + valign = "middle"; + shadow = 2; + }; + colorBackground[] = { 1, 0.3, 0, 0 }; + font = "EtelkaNarrowMediumPro"; + size = 0.06*safeZoneH; + type = 13; + style = 0; + text=""; + }; + }; + }; +}; + +#include "\z\addons\dayz_code\Configs\CfgLoot\CfgLoot.hpp" +//#include "\z\addons\dayz_code\Configs\CfgServerTrader\CfgServerTrader.hpp" // Normal traders +//#include "\z\addons\dayz_code\Configs\CfgServerTraderZSC\CfgServerTrader.hpp" // Single currency traders +#include "CfgServerTraderZSC\CfgServerTrader.hpp" // Single currency traders +#include "spawn\dialogs.hpp" +#include "scripts\vkc\vkc.hpp" +#include "scripts\virtualGarage\virtualGarage.hpp" +#include "dialog.hpp" +#include "scripts\remoteVehicle\remoteVehicle.hpp" \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/dialog.hpp b/MPMissions/DayZ_Epoch_24.Napf/dialog.hpp new file mode 100755 index 0000000..42c1d99 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/dialog.hpp @@ -0,0 +1,1013 @@ +// Colors +#define COLOR_WHITE {1,1,1,1} +#define COLOR_BLACK {0,0,0,1} +#define COLOR_TRANSPARENT {0,0,0,0} +#define COLOR_ORANGE {1,0.6392,0.0196,1} + +// Control types + +class EAT_RscText +{ + access = 0; + type = 0; + idc = -1; + colorBackground[] = COLOR_TRANSPARENT; + colorText[] = {0.8784,0.8471,0.651,1}; + text = ""; + fixedWidth = 0; + x = 0; + y = 0; + h = 0.037; + w = 0.3; + style = 0; + shadow = 2; + font = "Zeppelin32"; + SizeEx = 0.03921; +}; + +class EAT_RscFrame +{ + type = 0; + idc = -1; + style = 64; + shadow = 2; + colorBackground[] = COLOR_TRANSPARENT; + colorText[] = COLOR_WHITE; + font = "Zeppelin32"; + sizeEx = 0.02; + text = ""; +}; + +class EAT_RscEdit +{ + style = 0x00 + 0x40; + font = "Zeppelin32"; + type = 2; + shadow = 2; + lineSpacing = 1; + sizeEx = 0.03921; + autocomplete = ""; + colorBackground[] = {0, 0, 0, 1}; + colorText[] = {0.95, 0.95, 0.95, 1}; + colorSelection[] = {0.8784, 0.8471, 0.651, 1.0}; +}; + +class EAT_RscListBox +{ + access = 0; + type = 5; + w = 0.4; + h = 0.4; + rowHeight = 0; + colorText[] = {0.8784,0.8471,0.651,1}; + colorScrollbar[] = {0.95,0.95,0.95,1}; + colorSelect[] = {0.95,0.95,0.95,1}; + colorSelect2[] = {0.95,0.95,0.95,1}; + colorSelectBackground[] = COLOR_BLACK; + colorSelectBackground2[] = {0.8784,0.8471,0.651,1}; + colorBackground[] = COLOR_BLACK; + soundSelect[] = {"",0.1,1}; + arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)"; + arrowFull = "#(argb,8,8,3)color(1,1,1,1)"; + + class ScrollBar + { + color[] = {1,1,1,0.6}; + colorActive[] = COLOR_WHITE; + colorDisabled[] = {1,1,1,0.3}; + shadow = 0; + thumb = "\ca\ui\data\ui_scrollbar_thumb_ca.paa"; + arrowFull = "\ca\ui\data\ui_arrow_top_active_ca.paa"; + arrowEmpty = "\ca\ui\data\ui_arrow_top_ca.paa"; + border = "\ca\ui\data\ui_border_scroll_ca.paa"; + }; + + style = 16; + font = "Zeppelin32"; + shadow = 2; + sizeEx = 0.03921; + color[] = COLOR_WHITE; + period = 1.2; + maxHistoryDelay = 1; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; +}; + +class EAT_RscShortcutButton +{ + type = 16; + x = 0.1; + y = 0.1; + + class HitZone + { + left = 0.004; + top = 0.029; + right = 0.004; + bottom = 0.029; + }; + + class ShortcutPos + { + left = 0.0145; + top = 0.026; + w = 0.0392157; + h = 0.0522876; + }; + + class TextPos + { + left = 0.05; + top = 0.034; + right = 0.005; + bottom = 0.005; + }; + + shortcuts[] = {}; + textureNoShortcut = "#(argb,8,8,3)color(0,0,0,0)"; + color[] = {0.8784,0.8471,0.651,1}; + color2[] = {0.95,0.95,0.95,1}; + colorDisabled[] = {1,1,1,0.25}; + colorBackground[] = COLOR_WHITE; + colorBackground2[] = {1,1,1,0.4}; + + class Attributes + { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + shadow = "true"; + }; + + idc = -1; + style = 0; + default = 0; + shadow = 2; + w = 0.183825; + h = 0.104575; + periodFocus = 1.2; + periodOver = 0.8; + animTextureNormal = "\ca\ui\data\ui_button_normal_ca.paa"; + animTextureDisabled = "\ca\ui\data\ui_button_disabled_ca.paa"; + animTextureOver = "\ca\ui\data\ui_button_over_ca.paa"; + animTextureFocused = "\ca\ui\data\ui_button_focus_ca.paa"; + animTexturePressed = "\ca\ui\data\ui_button_down_ca.paa"; + animTextureDefault = "\ca\ui\data\ui_button_default_ca.paa"; + period = 0.4; + font = "Zeppelin32"; + size = 0.03921; + sizeEx = 0.03921; + text = ""; + soundEnter[] = {"\ca\ui\data\sound\onover",0.09,1}; + soundPush[] = {"\ca\ui\data\sound\new1",0,0}; + soundClick[] = {"\ca\ui\data\sound\onclick",0.07,1}; + soundEscape[] = {"\ca\ui\data\sound\onescape",0.09,1}; + action = ""; + + class AttributesImage + { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + }; +}; + +class EAT_RscButtonMenu : EAT_RscShortcutButton { + idc = -1; + type = 16; + style = "0x02 + 0xC0"; + default = 0; + shadow = 0; + w = 0.095589; + h = 0.039216; + animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; + colorBackground[] = {0,0,0,0.8}; + colorBackgroundFocused[] = COLOR_WHITE; + colorBackground2[] = {0.75,0.75,0.75,1}; + color[] = COLOR_WHITE; + colorFocused[] = COLOR_BLACK; + color2[] = COLOR_BLACK; + colorText[] = COLOR_WHITE; + colorDisabled[] = {1,1,1,0.25}; + period = 1.2; + periodFocus = 1.2; + periodOver = 1.2; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + tooltipColorText[] = COLOR_WHITE; + tooltipColorBox[] = COLOR_WHITE; + tooltipColorShade[] = {0,0,0,0.65}; + class HitZone + { + left = 0.0; + top = 0.0; + right = 0.0; + bottom = 0.0; + }; + class TextPos + { + left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + class Attributes + { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + shadow = "false"; + }; + class ShortcutPos + { + left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005"; + top = 0.005; + w = 0.0225; + h = 0.03; + }; + textureNoShortcut = ""; +}; + +class EAT_Veh_AdminDialog +{ + idd = -1; + movingenable = 0; + + class Controls { + class EAT_veh_RscText_1000: EAT_RscText + { + idc = 1000; + x = 0.283646 * safezoneW + safezoneX; + y = 0.22492 * safezoneH + safezoneY; + w = 0.432709 * safezoneW; + h = 0.55016 * safezoneH; + colorBackground[] = {0,0,0,0.7}; + }; + /* + class EAT_veh_RscText_1001: EAT_RscText + { + idc = 1001; + text = "Pick a vehicle or select a category"; + x = 0.295498 * safezoneW + safezoneX; + y = 0.235917 * safezoneH + safezoneY; + w = 0.170212 * safezoneW; + h = 0.0166935 * safezoneH; + }; + */ + class EAT_veh_RscListBox_1500: EAT_RscListBox + { + idc = 13000; + x = 0.290407 * safezoneW + safezoneX; + y = 0.268674 * safezoneH + safezoneY; + w = 0.419186 * safezoneW; + h = 0.447636 * safezoneH; + }; + + class EAT_veh_RscShortcutButton_1700: EAT_RscShortcutButton + { + idc = -1; + text = "Temp"; + x = 0.297168 * safezoneW + safezoneX; + y = 0.720556 * safezoneH + safezoneY; + w = 0.0651391 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick = "TempDialogSelected = (lbCurSel 13000); ((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + + class EAT_veh_RscShortcutButton_1701: EAT_RscShortcutButton + { + idc = -1; + text = "Perm"; + x = 0.37154 * safezoneW + safezoneX; + y = 0.720556 * safezoneH + safezoneY; + w = 0.0651391 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick = "PermDialogSelected = (lbCurSel 13000); ((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + + class EAT_veh_RscShortcutButton_1702: EAT_RscShortcutButton + { + idc = 12004; + text = "Air"; + x = 0.485168 * safezoneW + safezoneX; + y = 0.218000 * safezoneH + safezoneY; + w = 0.0651391 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick="[""Air""] call LoadSpecificList;"; + }; + + class EAT_veh_RscShortcutButton_1704: EAT_RscShortcutButton + { + idc = 12005; + text = "Land"; + x = 0.55954 * safezoneW + safezoneX; + y = 0.218000 * safezoneH + safezoneY; + w = 0.0651391 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick="[""LandVehicle""] call LoadSpecificList;"; + }; + + class EAT_veh_RscShortcutButton_1705: EAT_RscShortcutButton + { + idc = 12006; + text = "Sea"; + x = 0.633912 * safezoneW + safezoneX; + y = 0.218000 * safezoneH + safezoneY; + w = 0.0651391 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick="[""Ship""] call LoadSpecificList;"; + }; + class EAT_veh_RscShortcutButton_1709: EAT_RscShortcutButton + { + idc = -1; + text = "All Vehicles"; + x = 0.295498 * safezoneW + safezoneX; + y = 0.218000 * safezoneH + safezoneY; + w = 0.085 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick = "call LoadAllVehiclesList; EAT_EpochOnlyVehicles = false;"; + }; + class EAT_veh_RscShortcutButton_1708: EAT_RscShortcutButton + { + idc = -1; + text = "Epoch Vehicles"; + x = 0.380498 * safezoneW + safezoneX; + y = 0.218000 * safezoneH + safezoneY; + w = 0.1 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick = "call LoadEpochOnlyList; EAT_EpochOnlyVehicles = true;"; + }; + class EAT_veh_RscShortcutButton_1710: EAT_RscShortcutButton + { + idc = -1; + text = "Close"; + x = 0.633912 * safezoneW + safezoneX; + y = 0.720556 * safezoneH + safezoneY; + w = 0.0651391 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick = "((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + }; +}; + +class EAT_Veh_ModDialog +{ + idd = -1; + movingenable = 0; + + class Controls { + class EAT_veh_RscText_1002: EAT_RscText + { + idc = 1000; + x = 0.283646 * safezoneW + safezoneX; + y = 0.22492 * safezoneH + safezoneY; + w = 0.432709 * safezoneW; + h = 0.55016 * safezoneH; + colorBackground[] = {0,0,0,0.7}; + }; + class EAT_veh_RscText_1003: EAT_RscText + { + idc = 1001; + text = "Pick a vehicle or select a category"; + x = 0.295498 * safezoneW + safezoneX; + y = 0.235917 * safezoneH + safezoneY; + w = 0.170212 * safezoneW; + h = 0.0166935 * safezoneH; + }; + class EAT_veh_RscListBox_1501: EAT_RscListBox + { + idc = 13000; + x = 0.290407 * safezoneW + safezoneX; + y = 0.268674 * safezoneH + safezoneY; + w = 0.419186 * safezoneW; + h = 0.447636 * safezoneH; + }; + + class EAT_veh_RscShortcutButton_1730: EAT_RscShortcutButton + { + idc = -1; + text = "Temp"; + x = 0.297168 * safezoneW + safezoneX; + y = 0.720556 * safezoneH + safezoneY; + w = 0.0651391 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick = "TempDialogSelected = (lbCurSel 13000); ((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + + class EAT_veh_RscShortcutButton_1731: EAT_RscShortcutButton + { + idc = -1; + text = "Perm"; + x = 0.37154 * safezoneW + safezoneX; + y = 0.720556 * safezoneH + safezoneY; + w = 0.0651391 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick = "PermDialogSelected = (lbCurSel 13000); ((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + + class EAT_veh_RscShortcutButton_1732: EAT_RscShortcutButton + { + idc = 12004; + text = "Air"; + x = 0.485168 * safezoneW + safezoneX; + y = 0.218000 * safezoneH + safezoneY; + w = 0.0651391 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick="[""Air""] call LoadSpecificList;"; + }; + + class EAT_veh_RscShortcutButton_1734: EAT_RscShortcutButton + { + idc = 12005; + text = "Land"; + x = 0.55954 * safezoneW + safezoneX; + y = 0.218000 * safezoneH + safezoneY; + w = 0.0651391 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick="[""LandVehicle""] call LoadSpecificList;"; + }; + + class EAT_veh_RscShortcutButton_1735: EAT_RscShortcutButton + { + idc = 12006; + text = "Sea"; + x = 0.633912 * safezoneW + safezoneX; + y = 0.218000 * safezoneH + safezoneY; + w = 0.0651391 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick="[""Ship""] call LoadSpecificList;"; + }; + class EAT_veh_RscShortcutButton_1736: EAT_RscShortcutButton + { + idc = -1; + text = "Close"; + x = 0.633912 * safezoneW + safezoneX; + y = 0.720556 * safezoneH + safezoneY; + w = 0.0651391 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick = "((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + }; +}; + +class EAT_BaseManager_Dialog +{ + idd = -1; + movingenable = 0; + + class Controls { + class EAT_baseManager_RscText_1050: EAT_RscText + { + idc = 1050; + x = 0.283646 * safezoneW + safezoneX; + y = 0.22492 * safezoneH + safezoneY; + w = 0.432709 * safezoneW; + h = 0.55016 * safezoneH; + colorBackground[] = {0,0,0,0.7}; + }; + class EAT_baseManager_RscText_1051: EAT_RscText + { + idc = 1051; + text = "Epoch Admin Tools Base Manager"; + x = 0.295498 * safezoneW + safezoneX; + y = 0.235917 * safezoneH + safezoneY; + w = 0.170212 * safezoneW; + h = 0.0166935 * safezoneH; + }; + class EAT_baseManager_RscListBox_1552: EAT_RscListBox + { + idc = 14000; + x = 0.290407 * safezoneW + safezoneX; + y = 0.268674 * safezoneH + safezoneY; + w = 0.419186 * safezoneW; + h = 0.447636 * safezoneH; + }; + + class EAT_baseManager_RscShortcutButton_1750: EAT_RscShortcutButton + { + idc = -1; + text = "Close"; + x = 0.297168 * safezoneW + safezoneX; + y = 0.720556 * safezoneH + safezoneY; + w = 0.0651391 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick = "((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + class EAT_baseManager_RscShortcutButton_1710: EAT_RscShortcutButton + { + idc = -1; + text = "Select"; + x = 0.633912 * safezoneW + safezoneX; + y = 0.720556 * safezoneH + safezoneY; + w = 0.0651391 * safezoneW; + h = 0.0590864 * safezoneH; + onButtonClick = "[(lbCurSel 14000)] call fn_BCSelect; ((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + }; +}; + +class EAT_messageBox_Dialog +{ + idd = -1; + movable = 0; + + class Controls { + class EAT_msgBox_Background: EAT_RscText + { + idc = 1000; + x = 0.35677 * safezoneW + safezoneX; + y = 0.382451 * safezoneH + safezoneY; + w = 0.285304 * safezoneW; + h = 0.183649 * safezoneH; + colorBackground[] = {0,0,0,0.7}; + }; + class EAT_msgBox_RscText_1001: EAT_RscText + { + idc = 1001; + text = "PLACEHOLDER"; + x = 0.35677 * safezoneW + safezoneX; + y = 0.382451 * safezoneH + safezoneY; + w = 0.285305 * safezoneW; + h = 0.0247882 * safezoneH; + colorText[] = {1,0.6392,0.196,1}; + colorBackground[] = {0,0,0,1}; + }; + class EAT_msgBox_txtBox: EAT_RscEdit + { + idc = 1400; + type = 2; + x = 0.362278 * safezoneW + safezoneX; + y = 0.417716 * safezoneH + safezoneY; + w = 0.274365 * safezoneW; + h = 0.109082 * safezoneH; + text = ""; + colorSelection[] = {1,1,1,0.25}; + }; + class EAT_msgBox_btnSend: EAT_RscShortcutButton + { + idc = 1700; + text = "Send"; + x = 0.3656 * safezoneW + safezoneX; + y = 0.518526 * safezoneH + safezoneY; + w = 0.0596567 * safezoneW; + h = 0.0535038 * safezoneH; + onButtonClick = "EAT_SendDialogText = ctrlText ((ctrlParent (_this select 0)) displayCtrl 1400);((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + class EAT_msgBox_btnClose: EAT_RscShortcutButton + { + idc = 1701; + text = "Close"; + x = 0.573451 * safezoneW + safezoneX; + y = 0.518526 * safezoneH + safezoneY; + w = 0.0596567 * safezoneW; + h = 0.0525776 * safezoneH; + onButtonClick = "((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + }; +}; + +class EAT_build_SuperAdminDialog +{ + idd = -1; + movingenable = 0; + + class Controls { + class EAT_build_txtBackground: EAT_RscText + { + idc = 1000; + x = 0.312699 * safezoneW + safezoneX; + y = 0.229637 * safezoneH + safezoneY; + w = 0.375427 * safezoneW; + h = 0.521291 * safezoneH; + colorBackground[] = {0,0,0,0.7}; + }; + + class EAT_build_txtL: EAT_RscText + { + idc = 1001; + text = " Building Types"; + x = 0.320278 * safezoneW + safezoneX; + y = 0.235075 * safezoneH + safezoneY; + w = 0.0774524 * safezoneW; + h = 0.0210828 * safezoneH; + colorText[] = COLOR_ORANGE; + colorBackground[] = COLOR_BLACK; + }; + + class EAT_build_txtR: EAT_RscText + { + idc = 1002; + text = "Select a building below"; + x = 0.401543 * safezoneW + safezoneX; + y = 0.235074 * safezoneH + safezoneY; + w = 0.270000 * safezoneW; + h = 0.0213143 * safezoneH; + colorText[] = COLOR_ORANGE; + colorBackground[] = COLOR_BLACK; + }; + + class EAT_build_RscListbox_1500: EAT_RscListbox + { + idc = 13000; + x = 0.40084 * safezoneW + safezoneX; + y = 0.264902 * safezoneH + safezoneY; + w = 0.276449 * safezoneW; + h = 0.464555 * safezoneH; + }; + + class EAT_build_Frame: EAT_RscFrame + { + idc = 1800; + x = 0.400319 * safezoneW + safezoneX; + y = 0.26027 * safezoneH + safezoneY; + w = 0.280617 * safezoneW; + h = 0.476597 * safezoneH; + }; + + class EAT_Build_Frame_L: EAT_RscFrame + { + idc = 1801; + x = 0.318833 * safezoneW + safezoneX; + y = 0.26027 * safezoneH + safezoneY; + w = 0.079015 * safezoneW; + h = 0.361039 * safezoneH; + }; + + class EAT_Build_Frame_BL: EAT_RscFrame + { + idc = 1802; + x = 0.318833 * safezoneW + safezoneX; + y = 0.625052 * safezoneH + safezoneY; + w = 0.0784942 * safezoneW; + h = 0.111861 * safezoneH; + }; + + class EAT_build_btnResident: EAT_RscShortcutButton + { + idc = 1702; + text = "Residential"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.264902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Residential""] call LoadSpecificList;"; + }; + + class EAT_build_btnMilitary: EAT_RscShortcutButton + { + idc = 1703; + text = "Military"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.299902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Military""] call LoadSpecificList;"; + }; + + class EAT_build_btnIndustrial: EAT_RscShortcutButton + { + idc = 1704; + text = "Industrial"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.334902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Industrial""] call LoadSpecificList;"; + }; + + class EAT_build_btnReligious: EAT_RscShortcutButton + { + idc = 1705; + text = "Religious"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.369902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Religious""] call LoadSpecificList;"; + }; + + class EAT_build_btnFarm: EAT_RscShortcutButton + { + idc = 1706; + text = "Farm"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.404902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553564 * safezoneH; + onButtonClick="[""Farm""] call LoadSpecificList;"; + }; + + class EAT_build_btnOres: EAT_RscShortcutButton + { + idc = 1707; + text = "Ores"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.439902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Ores""] call LoadSpecificList;"; + }; + + class EAT_build_btnGraves: EAT_RscShortcutButton + { + idc = 1708; + text = "Graves"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.474902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Graves""] call LoadSpecificList;"; + }; + + class EAT_build_btnRoads: EAT_RscShortcutButton + { + idc = 1709; + text = "Roads"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.509902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Roads""] call LoadSpecificList;"; + }; + + class EAT_build_btnCastle: EAT_RscShortcutButton + { + idc = 1710; + text = "Castle"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.544902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Castle""] call LoadSpecificList;"; + }; + + class EAT_build_btnEpoch: EAT_RscShortcutButton + { + idc = 1710; + text = "Modular"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.579902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Epoch""] call LoadSpecificList;"; + }; + + class EAT_build_btnTemp: EAT_RscShortcutButton + { + idc = -1; + text = "Temp"; + x = 0.329225 * safezoneW + safezoneX; + y = 0.624902 * safezoneH + safezoneY; + w = 0.0540102 * safezoneW; + h = 0.0507248 * safezoneH; + onButtonClick = "TempDialogSelected = (lbCurSel 13000); ((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + + class EAT_build_btnPerm: EAT_RscShortcutButton + { + idc = -1; + text = "Perm"; + x = 0.329225 * safezoneW + safezoneX; + y = 0.653902 * safezoneH + safezoneY; + w = 0.0540102 * safezoneW; + h = 0.0507248 * safezoneH; + onButtonClick = "PermDialogSelected = (lbCurSel 13000); ((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + + class EAT_build_btnClose: EAT_RscShortcutButton + { + idc = 1711; + text = "Close"; + x = 0.329225 * safezoneW + safezoneX; + y = 0.684902 * safezoneH + safezoneY; + w = 0.0540102 * safezoneW; + h = 0.0507248 * safezoneH; + onButtonClick = "((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + class EAT_build_closeBTN: EAT_RscButtonMenu + { + idc = 1600; + text = "X"; + x = 0.670866 * safezoneW + safezoneX; + y = 0.233927 * safezoneH + safezoneY; + w = 0.0140000 * safezoneW; + h = 0.0203776 * safezoneH; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',1])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.2352])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.2352])", 0.5}; // Red + colorText[] = {0.8784,0.8471,0.651,1}; + class Attributes + { + align = "center"; + }; + onButtonClick = "((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + }; +}; + +class EAT_build_AdminDialog +{ + idd = -1; + movingenable = 0; + + class Controls { + class EAT_build_txtBackground: EAT_RscText + { + idc = 1000; + x = 0.312699 * safezoneW + safezoneX; + y = 0.229637 * safezoneH + safezoneY; + w = 0.375427 * safezoneW; + h = 0.521291 * safezoneH; + colorBackground[] = {0,0,0,0.7}; + }; + + class EAT_build_txtL: EAT_RscText + { + idc = 1001; + text = " Building Types"; + x = 0.320278 * safezoneW + safezoneX; + y = 0.235075 * safezoneH + safezoneY; + w = 0.0774524 * safezoneW; + h = 0.0210828 * safezoneH; + colorText[] = COLOR_ORANGE; + colorBackground[] = COLOR_BLACK; + }; + + class EAT_build_txtR: EAT_RscText + { + idc = 1002; + text = "Select a building below"; + x = 0.401543 * safezoneW + safezoneX; + y = 0.235074 * safezoneH + safezoneY; + w = 0.270000 * safezoneW; + h = 0.0213143 * safezoneH; + colorText[] = COLOR_ORANGE; + colorBackground[] = COLOR_BLACK; + }; + + class EAT_build_RscListbox_1500: EAT_RscListbox + { + idc = 13000; + x = 0.40084 * safezoneW + safezoneX; + y = 0.264902 * safezoneH + safezoneY; + w = 0.276449 * safezoneW; + h = 0.464555 * safezoneH; + }; + + class EAT_build_Frame: EAT_RscFrame + { + idc = 1800; + x = 0.400319 * safezoneW + safezoneX; + y = 0.26027 * safezoneH + safezoneY; + w = 0.280617 * safezoneW; + h = 0.476597 * safezoneH; + }; + + class EAT_Build_Frame_L: EAT_RscFrame + { + idc = 1801; + x = 0.318833 * safezoneW + safezoneX; + y = 0.26027 * safezoneH + safezoneY; + w = 0.079015 * safezoneW; + h = 0.361039 * safezoneH; + }; + + class EAT_Build_Frame_BL: EAT_RscFrame + { + idc = 1802; + x = 0.318833 * safezoneW + safezoneX; + y = 0.625052 * safezoneH + safezoneY; + w = 0.0784942 * safezoneW; + h = 0.111861 * safezoneH; + }; + + class EAT_build_btnCinder: EAT_RscShortcutButton + { + idc = 1702; + text = "Cinder"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.264902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Cinder""] call LoadSpecificList;"; + }; + + class EAT_build_btnWood: EAT_RscShortcutButton + { + idc = 1703; + text = "Wood"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.299902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Wood""] call LoadSpecificList;"; + }; + + class EAT_build_btnMetal: EAT_RscShortcutButton + { + idc = 1704; + text = "Metal"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.334902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Metal""] call LoadSpecificList;"; + }; + + class EAT_build_btnNets: EAT_RscShortcutButton + { + idc = 1705; + text = "Camo Nets"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.369902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Nets""] call LoadSpecificList;"; + }; + + class EAT_build_btnStorage: EAT_RscShortcutButton + { + idc = 1706; + text = "Storage"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.404902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553564 * safezoneH; + onButtonClick="[""Storage""] call LoadSpecificList;"; + }; + + class EAT_build_btnSandbags: EAT_RscShortcutButton + { + idc = 1707; + text = "Sandbags"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.439902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Sandbags""] call LoadSpecificList;"; + }; + + class EAT_build_btnMisc: EAT_RscShortcutButton + { + idc = 1708; + text = "Misc"; + x = 0.323404 * safezoneW + safezoneX; + y = 0.474902 * safezoneH + safezoneY; + w = 0.0706801 * safezoneW; + h = 0.0553565 * safezoneH; + onButtonClick="[""Misc""] call LoadSpecificList;"; + }; + class EAT_build_btnTemp: EAT_RscShortcutButton + { + idc = -1; + text = "Temp"; + x = 0.329225 * safezoneW + safezoneX; + y = 0.624902 * safezoneH + safezoneY; + w = 0.0540102 * safezoneW; + h = 0.0507248 * safezoneH; + onButtonClick = "TempDialogSelected = (lbCurSel 13000); ((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + + class EAT_build_btnPerm: EAT_RscShortcutButton + { + idc = -1; + text = "Perm"; + x = 0.329225 * safezoneW + safezoneX; + y = 0.653902 * safezoneH + safezoneY; + w = 0.0540102 * safezoneW; + h = 0.0507248 * safezoneH; + onButtonClick = "PermDialogSelected = (lbCurSel 13000); ((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + + class EAT_build_btnClose: EAT_RscShortcutButton + { + idc = 1711; + text = "Close"; + x = 0.329225 * safezoneW + safezoneX; + y = 0.684902 * safezoneH + safezoneY; + w = 0.0540102 * safezoneW; + h = 0.0507248 * safezoneH; + onButtonClick = "((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + class EAT_build_closeBTN: EAT_RscButtonMenu + { + idc = 1600; + text = "X"; + x = 0.670866 * safezoneW + safezoneX; + y = 0.233927 * safezoneH + safezoneY; + w = 0.0140000 * safezoneW; + h = 0.0203776 * safezoneH; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',1])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.2352])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.2352])", 0.5}; // Red + colorText[] = {0.8784,0.8471,0.651,1}; + class Attributes + { + align = "center"; + }; + onButtonClick = "((ctrlParent (_this select 0)) closeDisplay 9000);"; + }; + }; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/init.sqf b/MPMissions/DayZ_Epoch_24.Napf/init.sqf new file mode 100755 index 0000000..8da8bc7 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/init.sqf @@ -0,0 +1,230 @@ +// For DayZ Epoch + +// EPOCH CONFIG VARIABLES START // +#include "\z\addons\dayz_code\configVariables.sqf" // Don't remove this line +#include "dayz_code\configVariables.sqf" +// See the above file for a full list including descriptions and default values + +// Server only settings +if (isServer) then { + DZE_ServerMarkerArray = []; + DZE_MissionPositions = []; + dayZ_instance = 24; //Instance ID of this server + dayz_POIs = false; //Adds Point of Interest map additions (negatively impacts FPS) + MaxDynamicDebris = 500; // Max number of random road blocks to spawn around the map + MaxVehicleLimit = 500; // Max number of random vehicles to spawn around the map + spawnArea = 1400; // Distance around markers to find a safe spawn position + spawnShoremode = 0; // Random spawn locations 1 = on shores, 0 = inland + EpochEvents = [ //[year,month,day of month, minutes,name of file - .sqf] If minutes is set to -1, the event will run once immediately after server start. + ["any","any","any","any",3,"Infected_Camps"], // (negatively impacts FPS) + ["any","any","any","any",-1,"Care_Packages"], + ["any","any","any","any",5,"abandoned_vaults"], + ["any","any","any","any",9,"building_supplies"], + ["any","any","any","any",13,"fuelstationbomb"], + //["any","any","any","any",20,"labyrinth"], + ["any","any","any","any",15,"mechanics_truck"], + ["any","any","any","any",18,"pirate_treasure"], + ["any","any","any","any",21,"rubble_town"], + ["any","any","any","any",25,"special_forces"], + ["any","any","any","any",29,"un_supply"] + ]; +}; + +// Client only settings +if (!isDedicated) then { + dayz_antihack = 1; // DayZ Antihack / 1 = enabled // 0 = disabled + dayZ_serverName = ""; //Shown to all players in the bottom left of the screen (country code + server number) + dayz_enableRules = false; //Enables a nice little news/rules feed on player login (make sure to keep the lists quick). + dayz_quickSwitch = false; //Turns on forced animation for weapon switch. (hotkeys 1,2,3) False = enable animations, True = disable animations + dayz_randomMaxFuelAmount = 500; //Puts a random amount of fuel in all fuel stations. + dayz_bleedingeffect = 2; //1 = blood on the ground (negatively impacts FPS), 2 = partical effect, 3 = both + dayz_nutritionValuesSystem = true; //true, Enables nutrition system, false, disables nutrition system. + dayz_DamageMultiplier = 2; //1 - 0 = Disabled, anything over 1 will multiply damage. Damage Multiplier for Zombies. + dayz_maxGlobalZeds = 500; //Limit the total zeds server wide. + dayz_temperature_override = true; // Set to true to disable all temperature changes. + DZE_TwoPrimaries = 2; // 0 do not allow primary weapon on back. 1 allow primary weapon on back, but not when holding a primary weapon in hand. 2 allow player to hold two primary weapons, one on back and one in their hands. + dayz_paraSpawn = false; // Halo spawn + DZE_BackpackAntiTheft = true; // Prevent stealing from backpacks in trader zones + DZE_BuildOnRoads = false; // Allow building on roads + DZE_R3F_WEIGHT = false; // Enable R3F weight. Players carrying too much will be overburdened and forced to move slowly. + DZE_StaticConstructionCount = 0; // Steps required to build. If greater than 0 this applies to all objects. + DZE_requireplot = 1; // Require a plot pole to build 0 = Off, 1 = On + DZE_PlotPole = [30,45]; // Radius owned by plot pole [Regular objects,Other plotpoles]. Difference between them is the minimum buffer between bases. + DZE_BuildingLimit = 150; // Max number of built objects allowed in DZE_PlotPole radius + DZE_SelfTransfuse = true; // Allow players to bloodbag themselves + DZE_selfTransfuse_Values = [12000,15,120]; // [blood amount given, infection chance %, cooldown in seconds] + DZE_weaponHUD = true; /* RLNT - WeaponHUD */ + dayz_maxMaxWeaponHolders = 120; // Maximum number of loot piles that can spawn within 200 meters of a player. + DZE_ZombieSpeed = [2,2]; + DZE_StaticConstructionCount = 1; // Number of animations required for building an object. Leaving set at zero will default to the construction count in the configs for each object. + Z_AllowTakingMoneyFromVehicle = false; // Allow traders to take money from vehicles when buying with default currency. + + // HALO Jump + DZE_HaloAltitudeMeter = false; // Display altitude and speed on screen while in halo jump. + + // Group System + dayz_markGroup = 2; // Players can see their group members on the map 0=never, 1=always, 2=With GPS only + dayz_markSelf = 2; // Players can see their own position on the map 0=never, 1=always, 2=With GPS only + dayz_markBody = 0; // Players can see their corpse position on the map 0=never, 1=always, 2=With GPS only + + // Door Management + DZE_doorManagementMustBeClose = true; //Players must be within 10m of door to be added as a door friend. + + + // ---------------- begin: from some server + DZE_maintainCurrencyRate = 100; //The currency rate of what maintaining an item will be, for instance: at 100, 10 items will have a worth of 1000 (1 10oz gold or 1k coins) see actions/maintain_area.sqf for more examples. + DZE_GemOccurance = [["ItemTopaz",10], ["ItemObsidian",8], ["ItemSapphire",6], ["ItemAmethyst",4], ["ItemEmerald",3], ["ItemCitrine",2], ["ItemRuby",1]]; //Sets how rare each gem is in the order shown when mining (whole numbers only) + DZE_GemWorthArray = [["ItemTopaz",15000], ["ItemObsidian",20000], ["ItemSapphire",25000], ["ItemAmethyst",30000], ["ItemEmerald",35000], ["ItemCitrine",40000], ["ItemRuby",45000]]; // Array of gem prices, only works with config traders. Set DZE_GemWorthArray=[]; to disable return change in gems. + Z_AllowTakingMoneyFromBackpack = true; // Allow traders to take money from backpacks when buying with default currency. + Z_AllowTakingMoneyFromVehicle = true; // Allow traders to take money from vehicles when buying with default currency. + + // Death Messages + DZE_DeathMsgChat = "none"; //"none","global","side","system" Display death messages in selected chat channel. + DZE_DeathMsgDynamicText = true; // Display death messages as dynamicText in the top left with weapon icons. + DZE_DeathMsgRolling = false; // Display death messages as rolling messages in bottom center of screen. + DZE_DeathScreen = true; // True=Use Epoch death screen (Trade city obituaries have been amended) False=Use DayZ death screen (You are dead) + + //DZE_PlotManagementAdmins = ["0"]; + DZE_isRemovable = ["Plastic_Pole_EP1_DZ"]; //Items that can be removed with a crowbar with no ownership or access required. To forbid base take overs remove plot pole from this list and add it to DZE_restrictRemoval. It is not necessary to add wrecks or items that inherit from 'BuiltItems' to this list. + DZE_restrictRemoval = ["Fence_corrugated_DZ","M240Nest_DZ","ParkBench_DZ","FireBarrel_DZ","Scaffolding_DZ","CanvasHut_DZ","LightPole_DZ","DeerStand_DZ","MetalGate_DZ","StickFence_DZ"]; //Items that can be removed with a crowbar only with proper ownership or access. It is not necessary to add doors, storage or items that inherit from 'ModularItems' to this list. Items that inherit from 'BuiltItems' can be added to this list if desired. + DZE_Hide_Body = true; + DZE_NameTags = 1; + + Z_showCurrencyUI = true; // Show the currency icon on the screen when Z_SingleCurrency is enabled. + Z_showBankUI = true; // Show the banking icon on the screen when Z_globalBanking is enabled. + ZSC_bankTraders = ["Functionary1_EP1"]; // Array of trader classnames that are available for banking (i.e Functionary1_EP1), do not use _DZ classes - they are used as player skins + ZSC_limitOnBank = true; // Have a limit on the bank? (i.e true or false) limits the global banking to the number below. + ZSC_bankObjects = ["SignM_FARP_Winchester_EP1","ATM_DZ"]; // Array of objects that are available for banking i.e: ["Suitcase","Info_Board_EP1","Laptop_EP1","SatPhone"] + ZSC_maxBankMoney = 5000000; // Default limit for bank objects. + ZSC_defaultStorageMultiplier = 50; // Default magazine count for bank objects that don't have storage slots i.e: ["Suitcase","Info_Board_EP1","Laptop_EP1","SatPhone"] + ZSC_MaxMoneyInStorageMultiplier = 1000; // Multiplier for how much money a bank object can hold, example: 200 magazine slots in the object (or the default value above ^^) multiplied by the 5000 multiplier is 1 million coin storage. (200 * 5000 = 1,000,000 coins) + ZSC_ZombieCoins = [true,[10,500]]; // First value activate coins on zombies, second value from 0 - 1000 coins on each zombie. Coin for zombies are handled directly in check wallet. + + DZE_NoBuildNear = ["Land_Mil_ControlTower","Land_SS_hangar"]; //Array of object class names that are blacklisted to build near. i.e ["Land_Mil_ControlTower","Land_SS_hangar"] etc. + DZE_NoBuildNearDistance = 500; // Distance from blacklisted objects to disallow building near. + DZE_BuildHeightLimit = 50; // 0 = No building height limit | >0 = Height limit in meters | Changing this to 30 would limit the maximum built height to 30 meters. + DZE_salvageLocked = true; //Enable or disable salvaging of locked vehicles, useful for stopping griefing on locked vehicles. + DZE_lockablesHarderPenalty = true; // Enforce an exponential wait on attempts between unlocking a safe/lockbox from a failed code. + DZE_limitPlots = 1; // Limit the amount of plot poles per person, Use 0 to disable. UIDS in the DZE_PlotManagementAdmins array are exempt. + DZE_noRotate = ["ItemWoodLadder","woodfence_foundation_kit","metalfence_foundation_kit","cook_tripod_kit","storage_crate_kit"]; // List of objects (magazine classnames) that cannot be rotated. Example: ["ItemVault","ItemTent","ItemDomeTent","ItemDesertTent"]; + DZE_plotManagementMustBeClose = true; //Players must be within 10m of pole to be added as a plot friend. + DZE_doorManagementHarderPenalty = true; //Enforce an exponential wait on attempts between unlocking a door from a failed code. + // ---------------- end: from some server +}; + +// Settings for both server and client +dayz_REsec = 1; // DayZ RE Security / 1 = enabled // 0 = disabled +dayz_infectiousWaterholes = false; //Randomly adds some bodies, graves and wrecks by ponds (negatively impacts FPS) +dayz_ForcefullmoonNights = false; // Forces night time to be full moon. +dayz_spawnselection = 0; //(Chernarus only) Turn on spawn selection 0 = random only spawns, 1 = spawn choice based on limits +dayz_classicBloodBagSystem = true; // disable blood types system and use the single classic ItemBloodbag +dayz_enableFlies = false; // Enable flies on dead bodies (negatively impacts FPS). +dayz_groupSystem = true; // Enable group system +dayz_requireRadio = false; // Require players to have a radio on their toolbelt to create a group, be in a group and receive invites. +DZE_PlayerZed = false; // Enable spawning as a player zombie when players die with infected status +DZE_GodModeBase = false; // Make player built base objects indestructible +DZE_SafeZonePosArray = [[[8246,15485,0],100],[[15506,13229,0],100],[[12399,5074,0],100],[[10398,8279,0],100],[[5149,4864,0],100],[[15128,16421,0],100]]; // Format is [[[3D POS],RADIUS],[[3D POS],RADIUS]]; Stops loot and zed spawn, salvage and players being killed if their vehicle is destroyed in these zones. +DZE_Weather = 2; // Options: 1 - Summer Static, 2 - Summer Dynamic, 3 - Winter Static, 4 - Winter Dynamic. If static is selected, the weather settings will be set at server startup and not change. Weather settings can be adjusted with array DZE_WeatherVariables in configVariables.sqf. + +// Uncomment the lines below to change the default loadout +//DefaultMagazines = ["HandRoadFlare","ItemBandage","ItemPainkiller","8Rnd_9x18_Makarov","8Rnd_9x18_Makarov"]; +//DefaultWeapons = ["Makarov_DZ","ItemFlashlight"]; +//DefaultBackpack = "DZ_Patrol_Pack_EP1"; +//DefaultBackpackItems = []; // Can include both weapons and magazines i.e. ["PDW_DZ","30Rnd_9x19_UZI"]; + +// EPOCH CONFIG VARIABLES END // + +enableRadio false; +enableSentences false; +//setTerrainGrid 25; + +diag_log 'dayz_preloadFinished reset'; +dayz_preloadFinished=nil; +onPreloadStarted "diag_log [diag_tickTime,'onPreloadStarted']; dayz_preloadFinished = false;"; +onPreloadFinished "diag_log [diag_tickTime,'onPreloadFinished']; dayz_preloadFinished = true;"; +with uiNameSpace do {RscDMSLoad=nil;}; // autologon at next logon + +if (!isDedicated) then { + enableSaving [false, false]; + startLoadingScreen ["","RscDisplayLoadCustom"]; + dayz_progressBarValue = 0; + dayz_loadScreenMsg = localize 'str_login_missionFile'; + progress_monitor = [] execVM "\z\addons\dayz_code\system\progress_monitor.sqf"; + 0 cutText ['','BLACK',0]; + 0 fadeSound 0; + 0 fadeMusic 0; + call compile preprocessFileLineNumbers "scripts\clickActions\config.sqf"; +}; + +initialized = false; +call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\variables.sqf"; +call compile preprocessFileLineNumbers "dayz_code\init\variables.sqf"; +dayz_progressBarValue = 0.05; +call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\publicEH.sqf"; +dayz_progressBarValue = 0.1; +call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; +dayz_progressBarValue = 0.15; +call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; +call compile preprocessFileLineNumbers "dayz_code\init\compiles.sqf"; +call compile preprocessFileLineNumbers "rlnt\client\init\compiles.sqf"; // RLNT - Relentless +dayz_progressBarValue = 0.25; +call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\napf.sqf"; //Add trader city objects locally on every machine early +execVM "scripts\safe_zones.sqf"; +call compile preprocessFileLineNumbers "scripts\deployAnything\init.sqf"; +initialized = true; + +if (dayz_REsec == 1) then {call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\REsec.sqf";}; + +if (isServer) then { + if (dayz_POIs) then {call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\chernarus\poi\init.sqf";}; + call compile preprocessFileLineNumbers "\z\addons\dayz_server\system\dynamic_vehicle.sqf"; + call compile preprocessFileLineNumbers "\z\addons\dayz_server\system\server_monitor.sqf"; + execVM "\z\addons\dayz_server\traders\napf.sqf"; //Add trader agents + //if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {execVM "\z\addons\dayz_server\bankTraders\init.sqf";}; // Add global banking agents + + //Get the server to setup what waterholes are going to be infected and then broadcast to everyone. + if (dayz_infectiousWaterholes) then {execVM "\z\addons\dayz_code\system\mission\chernarus\infectiousWaterholes\init.sqf";}; + + // Lootable objects from CfgTownGeneratorDefault.hpp + if (dayz_townGenerator) then { execVM "\z\addons\dayz_code\system\mission\chernarus\MainLootableObjects.sqf"; }; +}; + +if (!isServer) then { + //RLNT - Relentless + execVM "rlnt\scripts\Weapon HUD\weaponhud_init.sqf"; // RLNT - WeaponHUD +}; + +if (!isDedicated) then { + call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\server_traders\napf.sqf"; + call compile preprocessFileLineNumbers "logistic\init.sqf"; + + if (toLower worldName in ["chernarus","chernarus_winter"]) then { + execVM "\z\addons\dayz_code\system\mission\chernarus\hideGlitchObjects.sqf"; + }; + + //[] execVM "Stats\j0k3r5_stats.sqf"; + + // Enables Plant lib fixes + execVM "\z\addons\dayz_code\system\antihack.sqf"; + + if (dayz_townGenerator) then {execVM "\z\addons\dayz_code\compile\client_plantSpawner.sqf";}; + call compile preprocessFileLineNumbers "spawn\init.sqf"; + + "EAT_login" addPublicVariableEventHandler {call (_this select 1)}; + EAT_clientToServer = ["login", player]; + publicVariableServer "EAT_clientToServer"; + + call compile preprocessFileLineNumbers "scripts\marker_manager.sqf"; + execFSM "\z\addons\dayz_code\system\player_monitor.fsm"; + execVM "scripts\servicePoints\init.sqf"; + //[false,12] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf"; + //[600,.15,30] execVM "\z\addons\dayz_code\compile\fn_chimney.sqf"; // Smoking chimney effects. + if (DZE_R3F_WEIGHT) then {execVM "\z\addons\dayz_code\external\R3F_Realism\R3F_Realism_Init.sqf";}; + waitUntil {scriptDone progress_monitor}; + cutText ["","BLACK IN", 3]; + 3 fadeSound 1; + 3 fadeMusic 1; + endLoadingScreen; +}; + +[] execVM "ActionMenu\actionmenu_activate.sqf"; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/compiles.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/compiles.sqf new file mode 100755 index 0000000..f2804c3 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/compiles.sqf @@ -0,0 +1,88 @@ +if (!isDedicated) then { + + call compile preprocessFileLineNumbers "logistic\config.sqf"; + call compile preprocessFileLineNumbers format ["logistic\lang\%1_lang.sqf", LOG_CFG_lANG]; + + MONI_OBJECT = compile preprocessFileLineNumbers "logistic\monitor\monitor_object.sqf"; + MONI_ACTION = compile preprocessFileLineNumbers "logistic\monitor\monitor_action.sqf"; + LOG_OBJ_INIT = compile preprocessFileLineNumbers "logistic\object\init.sqf"; + LOG_LIFT_INIT = compile preprocessFileLineNumbers "logistic\lift\init.sqf"; + LOG_TOW_INIT = compile preprocessFileLineNumbers "logistic\tow\init.sqf"; + + LOG_FNCT_DETACH_AND_SAVE = { + private ["_object"]; + _object = (_this select 0); + _object setVelocity [0,0,0]; + detach _object; + PVDZ_veh_Save = [_object,"position",true]; + if (isServer) then { + PVDZ_veh_Save call server_updateObject; + } else { + publicVariableServer "PVDZ_veh_Save"; + }; + ["Working",0,[20,40,15,0]] call dayz_NutritionSystem; + player playActionNow "Medic"; + [player,"repair",0,false,20] call dayz_zombieSpeak; + [player,20,true,(getPosATL player)] spawn player_alertZombies; + diag_log format [STR_LOG_UNTOWED, typeOf _object]; + }; + + LOG_FNCT_LOCKED = { + private ["_return","_target"]; + _target = (_this select 0); + _return = true; + if ( !(LOG_CFG_ALLOW_LOCKED) && (locked _target) ) then { + _return = false; + }; + _return + }; + + LOG_FNCT_CHAINING = { + private ["_return","_target"]; + _target = (_this select 0); + _return = true; + if !(LOG_CFG_ALLOW_CHAINING) then { + if ( ( (_this select 1) == 1 ) && !( isNull (_target getVariable "LOG_moves_by") || (!alive (_target getVariable "LOG_moves_by")) ) ) then {_return = false;}; + if ( (_this select 1) == 2 && !isNull (_target getVariable "LOG_trailer") ) then { _return = false;}; + }; + _return + }; + + LOG_FNCT_GETPOS = { + private "_pos"; + if (isNil {_this select 0}) exitWith {[0,0,0]}; + _thingy = _this select 0; + _pos = getPosASL _thingy; + if !(surfaceIsWater _pos) then { _pos = ASLToATL _pos;}; + _pos + }; + + LOG_OBJECT_MOVES = objNull; + LOG_OBJECT_SELECTION = objNull; + LOG_OBJECT_ADDACTION = objNull; + LOG_INPROGRESS = false; + LOG_LOAD_MOVES_VALID = false; + LOG_LOAD_SELECTION_VALID = false; + LOG_CONTENT_VALID = false; + LOG_TRAILER_MOVE_VALID = false; + LOG_TRAILER_SELECT_VALID = false; + LOG_HELI_LIFT_VALID = false; + LOG_HELI_DROP_VALID = false; + LOG_OBJECT_TRAILER_VALID = false; + LOG_DETACH_VALID = false; + + + COLOR_DEFAULT = [(51/255),(181/255),(229/255),1]; + COLOR_SUCCESS = [(153/255),(204/255),0,1]; + COLOR_ERROR = [1,(68/255),(68/255),1]; + + SAM_SAYS = { + private ["_message","_color"]; + _message = _this select 0; + _color = _this select 1; + taskHint [format[_message], _color, "taskNew"]; + _message call dayz_rollingMessages; + }; + +LOG_READY = true; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/config.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/config.sqf new file mode 100755 index 0000000..4fb0c52 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/config.sqf @@ -0,0 +1,37 @@ + +LOG_CFG_lANG = "en"; /* en = english , de = german , fr = french */ +LOG_CFG_ALLOW_LOCKED = false; /* allow to transport locked vehicles */ +LOG_CFG_ALLOW_CHAINING = false; /* allow chain towing */ +LOG_CFG_ALLOW_GETIN = true; /* allow player to get into a towed / lifted object */ + +/*-------------------------------------------------------------------------------------------------------------- + LIST OF VEHICLES WHERE CAN TOW +---------------------------------------------------------------------------------------------------------------*/ + +LOG_CFG_CANTOW=[ +"Car","Tank","Ship","Motorcycle","ReammoBox_EP1" +]; + +/*-------------------------------------------------------------------------------------------------------------- + LIST OF VEHICLES WHERE IS TOWABLE +---------------------------------------------------------------------------------------------------------------*/ + +LOG_CFG_ISTOWABLE=[ +"Car","Tank","Air","Ship","ReammoBox_EP1" +]; + +/*-------------------------------------------------------------------------------------------------------------- + LIST OF HELIS WHERE CAN LIFT +---------------------------------------------------------------------------------------------------------------*/ + +LOG_CFG_CANLIFT=[ +"Plane","Helicopter" +]; + +/*-------------------------------------------------------------------------------------------------------------- + LIST OF VEHICLES WHERE IS LIFTABLE +---------------------------------------------------------------------------------------------------------------*/ + +LOG_CFG_ISLIFTABLE=[ +"Car","Tank","Air","Ship","Motorcycle" +]; diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/init.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/init.sqf new file mode 100755 index 0000000..e421ffa --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/init.sqf @@ -0,0 +1,9 @@ +if (!isDedicated) then { + LOG_READY = false; + call compile preprocessFileLineNumbers "logistic\compiles.sqf"; + waitUntil{LOG_READY}; + [] spawn MONI_OBJECT; + sleep 0.1; + [] spawn MONI_ACTION; +}; + diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/lang/de_lang.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/lang/de_lang.sqf new file mode 100755 index 0000000..cc46007 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/lang/de_lang.sqf @@ -0,0 +1,18 @@ +STR_LOG_LIFT = "OBJEKT KOPPELN"; +STR_LOG_ATTACHED = "OBJEKT '%1' GEKOPPELT."; +STR_LOG_DROPPED = "OBJEKT '%1' ABGEKOPPELT."; +STR_LOG_DROP = "OBJEKT ABKOPPELN"; +STR_LOG_CANT_LIFT_TOWING = "OBJEKT '%1' KANN NICHT HOCHGEZOGEN WERDEN, WEIL ES BEREITS ABGESCHLEPPT WIRD."; +STR_LOG_CANT_LIFT_MOVING = "OBJEKT '%1' IST DICHT AN EINEM ANDEREN SPIELER DRAN."; +STR_LOG_CANT_LIFT_PLAYER = "IM OBJEKT '%1' BEFINDET SICH EIN SPIELER."; +STR_LOG_ALREADY = "DAS OBJEKT '%1' WIRD BEREITS VON EINEM ANDEREN OBJEKT TRANSPORTIERT."; +STR_LOG_NOW_SELECT = "WÄHLE NUN DAS OBJEKT, DAS OBJEKT '%1' ABSCHLEPPEN SOLL..."; +STR_TOW_THIS = "DAS OBJEKT KOPPELN"; +STR_LOG_TUG_SELECT = "... AUSGEWÄHLTES OBJEKT MIT DIESEM ABSCHLEPPEN"; +STR_LOG_TOW = "ABSCHLEPPEN..."; +STR_LOG_UNTOW = "DAS OBJEKT ABKOPPELN"; +STR_LOG_TOO_FAR = "DAS OBJEKT '%1' IST ZU WEIT ENTFERNT ZUM KOPPELN."; +STR_LOG_IMPOSSIBLE_VEHICLE = "NUR DER PILOT KANN DIESE OBJEKT ABKOPPELN."; +STR_LOG_IN_TRANSIT = "DAS OBJEKT '%1' IST IN BEWEGUNG."; +STR_LOG_INPROGRESS = "SORRY, ABER DIE DERZEITIGE AKTION IST NOCH NICHT BEENDET!"; +STR_LOG_UNTOWED = "OBJEKT '%1' WURDE ABGEKOPPELT."; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/lang/en_lang.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/lang/en_lang.sqf new file mode 100755 index 0000000..47da227 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/lang/en_lang.sqf @@ -0,0 +1,18 @@ +STR_LOG_LIFT = "LIFT OBJECT"; +STR_LOG_ATTACHED = "OBJECT '%1' ATTACHED."; +STR_LOG_DROPPED = "OBJECT '%1' DROPPED."; +STR_LOG_DROP = "DROP OBJECT"; +STR_LOG_CANT_LIFT_TOWING = "CAN NOT LIFT OBJECT '%1', BECAUSE IT'S TOWING ANOTHER OBJECT."; +STR_LOG_CANT_LIFT_MOVING = "OBJECT '%1' IS BEING BY A PLAYER."; +STR_LOG_CANT_LIFT_PLAYER = "THERE IS A PLAYER IN OBJECT '%1'."; +STR_LOG_ALREADY = "OBJECT '%1' IS ALREADY TRANSPORTED BY ANOTHER OBJECT."; +STR_LOG_NOW_SELECT = "SELECT THE OBJECT WHICH IS TO TOW WITH '%1'..."; +STR_TOW_THIS = "TOW OBJECT"; +STR_LOG_TUG_SELECT = "... TOW SELECTED OBJECT TO THIS OBJECT"; +STR_LOG_TOW = "TOW..."; +STR_LOG_UNTOW = "UNTOW OBJECT"; +STR_LOG_TOO_FAR = "OBJECT '%1' IS TOO FAR FROM THE OBJECT TO BE TOWED."; +STR_LOG_IMPOSSIBLE_VEHICLE = "ONLY THE PILOT CAN DETACH THIS OBJECT."; +STR_LOG_IN_TRANSIT = "OBJECT '%1' IS IN TRANSIT."; +STR_LOG_INPROGRESS = "SORRY, BUT THE CURRENT OPERATION IS NOT FINISHED YET!"; +STR_LOG_UNTOWED = "OBJECT '%1' UNTOWED."; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/lang/fr_lang.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/lang/fr_lang.sqf new file mode 100755 index 0000000..14d9d07 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/lang/fr_lang.sqf @@ -0,0 +1,18 @@ +STR_LOG_LIFT = "Hélitreuiller l'objet"; +STR_LOG_ATTACHED = "Véhicule '%1' attaché."; +STR_LOG_DROPPED = "Véhicule '%1' détaché."; +STR_LOG_DROP = "Détacher l'objet"; +STR_LOG_CANT_LIFT_TOWING = "Véhicule non hélitreuillable '%1' car il tracte un autre objet."; +STR_LOG_CANT_LIFT_MOVING = "Remorquage du véhicule '%1' en cours par un autre joueur."; +STR_LOG_CANT_LIFT_PLAYER = "Il y a un joueur dans le véhicule '%1'."; +STR_LOG_ALREADY = "Véhicule '%1' est déjà transporté par un autre véhicule."; +STR_LOG_NOW_SELECT = "Sélectionner l'objet à remorquer avec '%1'."; +STR_TOW_THIS = "Remorquer l'objet"; +STR_LOG_TUG_SELECT = "... remorquer le véhicule sélectionné à ce véhicule"; +STR_LOG_TOW = "Remorquage..."; +STR_LOG_UNTOW = "Détacher l'objet"; +STR_LOG_TOO_FAR = "Le véhicule '%1' est trop loin du véhicule à remorquer."; +STR_LOG_IMPOSSIBLE_VEHICLE = "Seulement le conducteur peut détacher ce véhicule."; +STR_LOG_IN_TRANSIT = "Véhicule '%1' est en mouvement."; +STR_LOG_INPROGRESS = "L'opération n'est pas encore terminée!"; +STR_LOG_UNTOWED = "Véhicule '%1' détaché."; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/lift/drop.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/lift/drop.sqf new file mode 100755 index 0000000..64225d4 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/lift/drop.sqf @@ -0,0 +1,13 @@ +if (LOG_INPROGRESS) then{ + [STR_LOG_INPROGRESS,COLOR_ERROR] call SAM_SAYS; +}else{ +LOG_INPROGRESS = true; + private ["_carrier","_object"]; + _carrier = _this select 0; + _object = _carrier getVariable "LOG_heliporte"; + _carrier setVariable ["LOG_heliporte", objNull, true]; + _object setVariable ["LOG_moves_by", objNull, true]; + [_object] call LOG_FNCT_DETACH_AND_SAVE; + [format [STR_LOG_DROPPED, getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "displayName")],COLOR_SUCCESS] call SAM_SAYS; +LOG_INPROGRESS = false; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/lift/init.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/lift/init.sqf new file mode 100755 index 0000000..e6ecb1c --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/lift/init.sqf @@ -0,0 +1,8 @@ +private ["_carrier","_disabled","_object"]; +_carrier = _this select 0; +_disabled = _carrier getVariable "LOG_disabled"; +if (isNil "_disabled") then{ _carrier setVariable ["LOG_disabled",false];}; +_object = _carrier getVariable "LOG_heliporte"; +if (isNil "_object") then{ _carrier setVariable ["LOG_heliporte",objNull,false];}; +_carrier addAction [("" + STR_LOG_LIFT + ""),"logistic\lift\lift.sqf",[],0,true,true,"","LOG_OBJECT_ADDACTION == _target && LOG_HELI_LIFT_VALID"]; +_carrier addAction [("" + STR_LOG_DROP + ""),"logistic\lift\drop.sqf",[],0,true,true,"","LOG_OBJECT_ADDACTION == _target && LOG_HELI_DROP_VALID"]; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/lift/lift.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/lift/lift.sqf new file mode 100755 index 0000000..7f7687c --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/lift/lift.sqf @@ -0,0 +1,35 @@ +if (LOG_INPROGRESS) then{ +[STR_LOG_INPROGRESS,COLOR_ERROR] call SAM_SAYS; +} else { +LOG_INPROGRESS = true; + private ["_heliporteur", "_object","_name"]; + _heliporteur = _this select 0; + _object = nearestObjects [_heliporteur, LOG_CFG_ISLIFTABLE, 20]; + _object = _object - [_heliporteur]; + if (count _object > 0) then{ + _object = _object select 0; + _name = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "displayName"); + if !([_object] call LOG_FNCT_LOCKED) exitWith {LOG_INPROGRESS = false;}; + if !(_object getVariable "LOG_disabled") then { + if (isNull (_object getVariable "LOG_moves_by")) then { + if (count crew _object == 0) then{ + if (isNull (_object getVariable "LOG_moves_by") || (!alive (_object getVariable "LOG_moves_by"))) then{ + private ["_no_trailer", "_trailer"]; + _no_trailer = true; + _trailer = _object getVariable "LOG_trailer"; + if !(isNil "_trailer") then{ + if !(isNull _trailer) then{ _no_trailer = false;}; + }; + if (_no_trailer) then{ + _heliporteur setVariable ["LOG_heliporte", _object, true]; + _object setVariable ["LOG_moves_by", _heliporteur, true]; + _object attachTo [_heliporteur, [0,0,(boundingBox _heliporteur select 0 select 2) - (boundingBox _object select 0 select 2) - (getPos _heliporteur select 2) + 0.5]]; + [ format [STR_LOG_ATTACHED,_name], COLOR_SUCCESS] call SAM_SAYS; + }else{ [ format [STR_LOG_CANT_LIFT_TOWING,_name],COLOR_ERROR] call SAM_SAYS;}; + }else{[ format [STR_LOG_CANT_LIFT_MOVING,_name],COLOR_ERROR] call SAM_SAYS;}; + }else{[ format [STR_LOG_CANT_LIFT_PLAYER,_name],COLOR_ERROR] call SAM_SAYS;}; + }else{[ format [STR_LOG_ALREADY, _name],COLOR_ERROR] call SAM_SAYS;}; + }; + }; +LOG_INPROGRESS = false; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/monitor/monitor_action.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/monitor/monitor_action.sqf new file mode 100755 index 0000000..b4aff35 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/monitor/monitor_action.sqf @@ -0,0 +1,52 @@ +private ["_target"]; +while {true} do{ + + LOG_OBJECT_ADDACTION = objNull; + _target = cursorTarget; + + if ( !(isNull _target) && ( player distance _target < 13 ) ) then{ + LOG_OBJECT_ADDACTION = _target; + + if ({_target isKindOf _x} count LOG_CFG_ISTOWABLE > 0) then { + LOG_OBJECT_TRAILER_VALID = (vehicle player == player && (alive _target) && (count crew _target == 0) && + isNull LOG_OBJECT_MOVES && isNull (_target getVariable "LOG_moves_by") && + (isNull (_target getVariable "LOG_moves_by") || (!alive (_target getVariable "LOG_moves_by"))) && + !(_target getVariable "LOG_disabled") && ( [_target] call LOG_FNCT_LOCKED ) && ( [_target,2] call LOG_FNCT_CHAINING ) ); + + LOG_DETACH_VALID = ( vehicle player == player && (isNull LOG_OBJECT_MOVES) && !isNull (_target getVariable "LOG_moves_by") && !(_target getVariable "LOG_disabled") ); + }; + + + if ({_target isKindOf _x} count LOG_CFG_CANTOW > 0) then { + + LOG_TRAILER_MOVE_VALID = (vehicle player == player && (alive _target) && (!isNull LOG_OBJECT_MOVES) && + (alive LOG_OBJECT_MOVES) && !(LOG_OBJECT_MOVES getVariable "LOG_disabled") && + ({LOG_OBJECT_MOVES isKindOf _x} count LOG_CFG_ISTOWABLE > 0) && + isNull (_target getVariable "LOG_trailer") && ([0,0,0] distance velocity _target < 6) && + (getPos _target select 2 < 2) && !(_target getVariable "LOG_disabled")); + + LOG_TRAILER_SELECT_VALID = ( vehicle player == player && (alive _target) && (isNull LOG_OBJECT_MOVES) && + (!isNull LOG_OBJECT_SELECTION) && (LOG_OBJECT_SELECTION != _target) && + !(LOG_OBJECT_SELECTION getVariable "LOG_disabled") && + ({LOG_OBJECT_SELECTION isKindOf _x} count LOG_CFG_ISTOWABLE > 0) && + isNull (_target getVariable "LOG_trailer") && ([0,0,0] distance velocity _target < 6) && + (getPos _target select 2 < 2) && !(_target getVariable "LOG_disabled") && ( [_target] call LOG_FNCT_LOCKED ) && ( [ _target,1] call LOG_FNCT_CHAINING ) ); + }; + }; + + if ({(vehicle player) isKindOf _x} count LOG_CFG_CANLIFT > 0) then{ + LOG_OBJECT_ADDACTION = vehicle player; + LOG_TRAILER_MOVE_VALID = false; + LOG_TRAILER_SELECT_VALID = false; + + LOG_HELI_LIFT_VALID = (driver LOG_OBJECT_ADDACTION == player && + ({_x != LOG_OBJECT_ADDACTION && !(_x getVariable "LOG_disabled") && [_x] call LOG_FNCT_LOCKED } count (nearestObjects [LOG_OBJECT_ADDACTION, LOG_CFG_ISLIFTABLE, 10]) > 0) && + isNull (LOG_OBJECT_ADDACTION getVariable "LOG_heliporte") && ([0,0,0] distance velocity LOG_OBJECT_ADDACTION < 8 ) && (getPos LOG_OBJECT_ADDACTION select 2 > 1) && + !(LOG_OBJECT_ADDACTION getVariable "LOG_disabled")); + + LOG_HELI_DROP_VALID = (driver LOG_OBJECT_ADDACTION == player && !isNull (LOG_OBJECT_ADDACTION getVariable "LOG_heliporte") && + ([0,0,0] distance velocity LOG_OBJECT_ADDACTION <= 10 ) && (getPos LOG_OBJECT_ADDACTION select 2 <= 40) && !(LOG_OBJECT_ADDACTION getVariable "LOG_disabled")); + }; + +sleep 0.2; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/monitor/monitor_object.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/monitor/monitor_object.sqf new file mode 100755 index 0000000..4c65506 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/monitor/monitor_object.sqf @@ -0,0 +1,20 @@ +sleep 0.1; +private ["_transportable","_known","_list","_count","_i","_object"]; +_transportable = LOG_CFG_ISTOWABLE + LOG_CFG_ISLIFTABLE; +_known = []; +while {true} do{ + if !(isNull player) then{ + _list = (vehicles + nearestObjects [player, ["Static"], 80]) - _known; + _count = count _list; + if (_count > 0) then{ + for [{_i = 0}, {_i < _count}, {_i = _i + 1}] do{ + _object = _list select _i; + if ({_object isKindOf _x} count _transportable > 0) then{[_object] spawn LOG_OBJ_INIT;};//if look at + if ({_object isKindOf _x} count LOG_CFG_CANLIFT > 0) then{[_object] spawn LOG_LIFT_INIT;};//if in + if ({_object isKindOf _x} count LOG_CFG_CANTOW > 0) then{[_object] spawn LOG_TOW_INIT;};//if look at + sleep (18/_count); + }; + _known = _known + _list; + }else{sleep 18;}; + }else{sleep 2;}; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/object/init.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/object/init.sqf new file mode 100755 index 0000000..557440c --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/object/init.sqf @@ -0,0 +1,30 @@ +private ["_object","_moves_by","_trailer","_disabled"]; +_object = _this select 0; +_disabled = _object getVariable "LOG_disabled"; + +if (isNil "_disabled") then{_object setVariable ["LOG_disabled", false];}; + +//_trailer = _object getVariable "LOG_trailer"; +//if (isNil "_trailer") then{_object setVariable ["LOG_trailer", objNull, false];}; + +_moves_by = _object getVariable "LOG_moves_by"; +if (isNil "_moves_by") then{_object setVariable ["LOG_moves_by", objNull, false];}; + +if !(LOG_CFG_ALLOW_GETIN) then { + _object addEventHandler ["GetIn",{ + if (_this select 2 == player) then{ + _this spawn{ + private ["_eject"]; + _eject = false; + if ((!(isNull (_this select 0 getVariable "LOG_moves_by")) && (alive (_this select 0 getVariable "LOG_moves_by")))) then { _eject = true;}; + if ((!(isNull (_this select 0 getVariable "LOG_heliporte")) && (alive (_this select 0 getVariable "LOG_heliporte")))) then { _eject = true;}; + if (_eject) then{ player action ["eject", _this select 0];}; + }; + }; + }]; +}; + +if ({_object isKindOf _x} count LOG_CFG_ISTOWABLE > 0) then{ + _object addAction [("" + STR_LOG_TOW + ""),"logistic\object\isSelected.sqf",[],5,false,true,"","LOG_OBJECT_ADDACTION == _target && LOG_OBJECT_TRAILER_VALID"]; + _object addAction [("" + STR_LOG_UNTOW + ""),"logistic\tow\detach.sqf",[],6,true,true,"","LOG_OBJECT_ADDACTION == _target && LOG_DETACH_VALID"]; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/object/isSelected.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/object/isSelected.sqf new file mode 100755 index 0000000..8552301 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/object/isSelected.sqf @@ -0,0 +1,6 @@ +if (LOG_INPROGRESS) then { +[STR_LOG_INPROGRESS,COLOR_ERROR] call SAM_SAYS; +} else{ +LOG_OBJECT_SELECTION = _this select 0; +[format [STR_LOG_NOW_SELECT, getText (configFile >> "CfgVehicles" >> (typeOf LOG_OBJECT_SELECTION) >> "displayName")],COLOR_DEFAULT] call SAM_SAYS; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/tow/attach.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/tow/attach.sqf new file mode 100755 index 0000000..9287cbd --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/tow/attach.sqf @@ -0,0 +1,46 @@ +if (LOG_INPROGRESS) then{ +[STR_LOG_INPROGRESS,COLOR_ERROR] call SAM_SAYS; +} else { +LOG_INPROGRESS = true; + private ["_object","_tug"]; + _object = LOG_OBJECT_SELECTION; + _tug = _this select 0; + + if (!(isNull _object) && (alive _object) && !(_object getVariable "LOG_disabled")) then{ + if (isNull (_object getVariable "LOG_moves_by") && (isNull (_object getVariable "LOG_moves_by") || (!alive (_object getVariable "LOG_moves_by")))) then{ + if ( _object distance _tug <= 10 ) then{ + + _tug setVariable ["LOG_trailer", _object, true]; + + _object setVariable ["LOG_moves_by", _tug, true]; + + player attachTo [_tug, [ + (boundingBox _tug select 1 select 0), + (boundingBox _tug select 0 select 1) + 2, + (boundingBox _tug select 0 select 2) - (boundingBox player select 0 select 2)]]; + sleep 0.2; + + player setDir 270; + player setPos (getPos player); + [player,"repair",0,false,20] call dayz_zombieSpeak; + player playActionNow "Medic"; + sleep 2; + + _object setVelocity [0,0,0]; + _object attachTo [ _tug, [ + 0, + (boundingBox _tug select 0 select 1) + (boundingBox _object select 0 select 1) - 1, + (boundingBox _tug select 0 select 2) - (boundingBox _object select 0 select 2) + ]]; + + + LOG_OBJECT_SELECTION = objNull; + detach player; + + sleep 3; + [format [STR_LOG_ATTACHED, getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "displayName")],COLOR_SUCCESS] call SAM_SAYS; + }else{[format [STR_LOG_TOO_FAR, getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "displayName")],COLOR_ERROR] call SAM_SAYS;}; + }else{[format [STR_LOG_IN_TRANSIT, getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "displayName")],COLOR_ERROR] call SAM_SAYS;}; + }; +LOG_INPROGRESS = false; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/tow/detach.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/tow/detach.sqf new file mode 100755 index 0000000..6668e06 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/tow/detach.sqf @@ -0,0 +1,16 @@ +if (LOG_INPROGRESS) then { +[STR_LOG_INPROGRESS,COLOR_ERROR] call SAM_SAYS; +} else{ +LOG_INPROGRESS = true; + private ["_tug","_object"]; + _object = _this select 0; + _tug = _object getVariable "LOG_moves_by"; + if ({_tug isKindOf _x} count LOG_CFG_CANTOW > 0) then{ + _tug setVariable ["LOG_trailer", objNull, true]; + _object setVariable ["LOG_moves_by", objNull, true]; + [_object] call LOG_FNCT_DETACH_AND_SAVE; + sleep 3; + [format [STR_LOG_UNTOWED, getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "displayName")],COLOR_SUCCESS] call SAM_SAYS; + }else{[STR_LOG_IMPOSSIBLE_VEHICLE,COLOR_ERROR] call SAM_SAYS;}; +LOG_INPROGRESS = false; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/logistic/tow/init.sqf b/MPMissions/DayZ_Epoch_24.Napf/logistic/tow/init.sqf new file mode 100755 index 0000000..5ec5940 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/logistic/tow/init.sqf @@ -0,0 +1,8 @@ +private ["_tug","_disabled","_trailer"]; +_tug = _this select 0; +_disabled = _tug getVariable "LOG_disabled"; +if (isNil "_disabled") then{_tug setVariable ["LOG_disabled",false];}; +_trailer = _tug getVariable "LOG_trailer"; +if (isNil "_trailer") then{ _tug setVariable ["LOG_trailer",objNull,false];}; +_tug addAction [("" + STR_LOG_UNTOW + ""), "logistic\tow\detach.sqf",[],0,true,true,"","LOG_OBJECT_ADDACTION == _target && LOG_TRAILER_MOVE_VALID"]; +_tug addAction [("" + STR_LOG_TUG_SELECT + ""), "logistic\tow\attach.sqf",[],0,true,true,"","LOG_OBJECT_ADDACTION == _target && LOG_TRAILER_SELECT_VALID"]; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/mission.sqm b/MPMissions/DayZ_Epoch_24.Napf/mission.sqm new file mode 100755 index 0000000..e9af36a --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/mission.sqm @@ -0,0 +1,526 @@ +version=11; +class Mission +{ + addOns[]= + { + "napf", + "aif_arma1buildings", + "map_eu", + "ca_modules_animals", + "dayz_anim", + "dayz_code", + "dayz_communityassets", + "dayz_weapons", + "dayz_equip", + "cacharacters_pmc", + "ca_modules_functions", + "zero_buildings", + "dayz_epoch", + "warfarebuildings", + "glt_m300t", + "pook_h13", + "csj_gyroac", + "jetskiyanahuiaddon", + "redryder", + "Anzio_20" + }; + addOnsAuto[]= + { + "dayz_weapons", + "ca_modules_functions", + "napf" + }; + randomSeed=11171215; + class Intel + { + briefingName="DayZ Epoch Napf"; + briefingDescription="Version 1.0.7"; + startWeather=0; + forecastWeather=0; + year=2008; + month=6; + day=1; + hour=12; + }; + class Groups + { + items=2; + class Item0 + { + side="WEST"; + class Vehicles + { + items=100; + #define PLRDEF position[]={10153,0,-4593};azimut=0;side="WEST";vehicle="Survivor1_DZ";skill=0.6;init="this enableSimulation false;this allowDamage false;this disableAI 'FSM';this disableAI 'ANIM';this disableAI 'MOVE';";player="PLAY CDG"; + class Item0{id=0;PLRDEF}; + class Item1 + { + position[]={10153,0,-4593}; + azimut=0; + id=0; + side="WEST"; + vehicle="Survivor1_DZ"; + player="PLAYER COMMANDER"; + leader=1; + rank="SERGEANT"; + skill=0.6; + init="this enableSimulation false;this allowDamage false;this disableAI 'FSM';this disableAI 'ANIM';this disableAI 'MOVE';"; + }; + class Item2{id=2;PLRDEF}; + class Item3{id=3;PLRDEF}; + class Item4{id=4;PLRDEF}; + class Item5{id=5;PLRDEF}; + class Item6{id=6;PLRDEF}; + class Item7{id=7;PLRDEF}; + class Item8{id=8;PLRDEF}; + class Item9{id=9;PLRDEF}; + class Item10{id=10;PLRDEF}; + class Item11{id=11;PLRDEF}; + class Item12{id=12;PLRDEF}; + class Item13{id=13;PLRDEF}; + class Item14{id=14;PLRDEF}; + class Item15{id=15;PLRDEF}; + class Item16{id=16;PLRDEF}; + class Item17{id=17;PLRDEF}; + class Item18{id=18;PLRDEF}; + class Item19{id=19;PLRDEF}; + class Item20{id=20;PLRDEF}; + class Item21{id=21;PLRDEF}; + class Item22{id=22;PLRDEF}; + class Item23{id=23;PLRDEF}; + class Item24{id=24;PLRDEF}; + class Item25{id=25;PLRDEF}; + class Item26{id=26;PLRDEF}; + class Item27{id=27;PLRDEF}; + class Item28{id=28;PLRDEF}; + class Item29{id=29;PLRDEF}; + class Item30{id=30;PLRDEF}; + class Item31{id=31;PLRDEF}; + class Item32{id=32;PLRDEF}; + class Item33{id=33;PLRDEF}; + class Item34{id=34;PLRDEF}; + class Item35{id=35;PLRDEF}; + class Item36{id=36;PLRDEF}; + class Item37{id=37;PLRDEF}; + class Item38{id=38;PLRDEF}; + class Item39{id=39;PLRDEF}; + class Item40{id=40;PLRDEF}; + class Item41{id=41;PLRDEF}; + class Item42{id=42;PLRDEF}; + class Item43{id=43;PLRDEF}; + class Item44{id=44;PLRDEF}; + class Item45{id=45;PLRDEF}; + class Item46{id=46;PLRDEF}; + class Item47{id=47;PLRDEF}; + class Item48{id=48;PLRDEF}; + class Item49{id=49;PLRDEF}; + class Item50{id=50;PLRDEF}; + class Item51{id=51;PLRDEF}; + class Item52{id=52;PLRDEF}; + class Item53{id=53;PLRDEF}; + class Item54{id=54;PLRDEF}; + class Item55{id=55;PLRDEF}; + class Item56{id=56;PLRDEF}; + class Item57{id=57;PLRDEF}; + class Item58{id=58;PLRDEF}; + class Item59{id=59;PLRDEF}; + class Item60{id=60;PLRDEF}; + class Item61{id=61;PLRDEF}; + class Item62{id=62;PLRDEF}; + class Item63{id=63;PLRDEF}; + class Item64{id=64;PLRDEF}; + class Item65{id=65;PLRDEF}; + class Item66{id=66;PLRDEF}; + class Item67{id=67;PLRDEF}; + class Item68{id=68;PLRDEF}; + class Item69{id=69;PLRDEF}; + class Item70{id=70;PLRDEF}; + class Item71{id=71;PLRDEF}; + class Item72{id=72;PLRDEF}; + class Item73{id=73;PLRDEF}; + class Item74{id=74;PLRDEF}; + class Item75{id=75;PLRDEF}; + class Item76{id=76;PLRDEF}; + class Item77{id=77;PLRDEF}; + class Item78{id=78;PLRDEF}; + class Item79{id=79;PLRDEF}; + class Item80{id=80;PLRDEF}; + class Item81{id=81;PLRDEF}; + class Item82{id=82;PLRDEF}; + class Item83{id=83;PLRDEF}; + class Item84{id=84;PLRDEF}; + class Item85{id=85;PLRDEF}; + class Item86{id=86;PLRDEF}; + class Item87{id=87;PLRDEF}; + class Item88{id=88;PLRDEF}; + class Item89{id=89;PLRDEF}; + class Item90{id=90;PLRDEF}; + class Item91{id=91;PLRDEF}; + class Item92{id=92;PLRDEF}; + class Item93{id=93;PLRDEF}; + class Item94{id=94;PLRDEF}; + class Item95{id=95;PLRDEF}; + class Item96{id=96;PLRDEF}; + class Item97{id=97;PLRDEF}; + class Item98{id=98;PLRDEF}; + class Item99{id=99;PLRDEF}; + }; + }; + class Item1 + { + side="LOGIC"; + class Vehicles + { + items=1; + class Item0 + { + position[]={8810,0,11751}; + id=50; + side="LOGIC"; + vehicle="FunctionsManager"; + leader=1; + lock="UNLOCKED"; + skill=0.6; + }; + }; + }; + }; + class Markers + { + items=25; + class Item0 + { + position[]={10010,0,10448}; + name="center"; + type="Empty"; + a=9000;b=9000; + }; + class Item1 + { + position[]={10153,0,-4593}; + name="respawn_west"; + type="Empty"; + }; + class Item2 + { + position[]={1511,0,11479}; + name="spawn0"; + type="Empty"; + }; + class Item3 + { + position[]={6946,0,17384}; + name="spawn1"; + type="Empty"; + }; + class Item4 + { + position[]={5410,0,16675}; + name="spawn2"; + type="Empty"; + }; + class Item5 + { + position[]={4672,0,14940}; + name="spawn3"; + type="Empty"; + }; + class Item6 + { + position[]={2719,0,12226}; + name="spawn4"; + type="Empty"; + }; + class Item7 + { + position[]={12231,0,16319}; + name="spawn5"; + type="Empty"; + }; + class Item8 + { + position[]={4104,0,13025}; + name="spawn6"; + type="Empty"; + }; + class Item9 + { + position[]={1460,0,10583}; + name="spawn7"; + type="Empty"; + }; + class Item10 + { + position[]={10282,0,18449}; + name="spawn8"; + type="Empty"; + }; + class Item11 + { + position[]={12861,0,14849}; + name="spawn9"; + type="Empty"; + }; + class Item12 + { + position[]={10709,0,17085}; + name="spawn10"; + type="Empty"; + }; + class Item13 + { + position[]={10010,0,10448}; + name="crashsites"; + type="Empty"; + a=9000;b=9000; + }; + class Item14 + { + position[]={10010,0,10448}; + name="carepackages"; + type="Empty"; + a=9000;b=0; + }; + class Item15 + { + position[]={8246,0,15490}; + name="NeutralTraderCity"; + text="Trader City Lenzburg"; + type="mil_circle"; + colorName="ColorBlack"; + }; + class Item16 + { + position[]={12397,0,5068}; + name="FriendlyTraderCity"; + text="Trader City Schratten"; + type="mil_circle"; + colorName="ColorGreen"; + }; + class Item17 + { + position[]={5150,0,4862}; + name="HeroVendor"; + text="Hero Vendor"; + type="mil_dot"; + colorName="ColorBlue"; + }; + class Item18 + { + position[]={15128,0,16421}; + name="Aircraftrader"; + text="Aircraft Trader"; + type="mil_triangle"; + colorName="ColorBlack"; + }; + class Item19 + { + position[]={2125,0,7807}; + name="Wholesaler1"; + text="Wholesaler"; + type="mil_box"; + colorName="ColorBlack"; + }; + class Item20 + { + position[]={5372,0,16091}; + name="Wholesaler2"; + text="Wholesaler"; + type="mil_box"; + colorName="ColorBlack"; + }; + class Item21 + { + position[]={6776,0,16955}; + name="BoatTrader1"; + text="Boat Trader"; + type="mil_box"; + colorName="ColorBlack"; + }; + class Item22 + { + position[]={10404,0,8282}; + name="BanditVendor"; + text="Bandit Vendor"; + type="mil_dot"; + colorName="ColorRed"; + }; + class Item23 + { + position[]={16864,0,5272.3}; + name="BoatTrader2"; + text="Boat Trader"; + type="mil_box"; + colorName="ColorBlack"; + }; + class Item24 + { + position[]={15520,0,13225}; + name="NeutralTraderCIty2"; + text="Trader city Emmen"; + type="mil_circle"; + colorName="ColorBlack"; + }; + }; + class Sensors + { + items=10; + #define TRGDEF a=100;b=100;activationBy="WEST";repeating=1;interruptable=1;age="UNKNOWN";class Effects{}; + class Item0 + { + position[]={8246,0,15485}; + TRGDEF + name="Lenz"; + expCond="(player distance Lenz) < 100;"; + expActiv="[""Trader City Lenzburg"",true,""enter""] call player_traderCity;"; + expDesactiv="[""Trader City Lenzburg"",true,""leave""] call player_traderCity;"; + }; + class Item1 + { + position[]={15506,0,13229}; + TRGDEF + name="Emmen"; + expCond="(player distance Emmen) < 100;"; + expActiv="[""Trader City Emmen"",true,""enter""] call player_traderCity;"; + expDesactiv="[""Trader City Emmen"",true,""leave""] call player_traderCity;"; + }; + class Item2 + { + position[]={12399,0,5074}; + TRGDEF + name="Schratten"; + expCond="(player distance Schratten) < 100;"; + expActiv="[""Trader City Schratten"",true,""enter""] call player_traderCity;"; + expDesactiv="[""Trader City Schratten"",true,""leave""] call player_traderCity;"; + }; + class Item3 + { + position[]={10398,0,8279}; + TRGDEF + name="Bandit"; + expCond="(player distance Bandit) < 100;"; + expActiv="[""Bandit Vendor"",true,""enter""] call player_traderCity;"; + expDesactiv="[""Bandit Vendor"",true,""leave""] call player_traderCity;"; + }; + class Item4 + { + position[]={5149,0,4864}; + TRGDEF + name="Hero"; + expCond="(player distance Hero) < 100;"; + expActiv="[""Hero Vendor"",true,""enter""] call player_traderCity;"; + expDesactiv="[""Hero Vendor"",true,""leave""] call player_traderCity;"; + }; + class Item5 + { + position[]={2122,0,7807}; + TRGDEF + name="Wholesale1"; + expCond="(player distance Wholesale1) < 100;"; + expActiv="[""Wholesaler"",true,""enter""] call player_traderCity;"; + expDesactiv="[""Wholesaler"",true,""leave""] call player_traderCity;"; + }; + class Item6 + { + position[]={5379,0,16103}; + TRGDEF + name="Wholesale2"; + expCond="(player distance Wholesale2) < 100;"; + expActiv="[""Wholesaler"",true,""enter""] call player_traderCity;"; + expDesactiv="[""Wholesaler"",true,""leave""] call player_traderCity;"; + }; + class Item7 + { + position[]={6772,0,16983}; + TRGDEF + name="Boat1"; + expCond="(player distance boat1) < 100;"; + expActiv="[""Boat Trader"",true,""enter""] call player_traderCity;"; + expDesactiv="[""Boat Trader"",true,""leave""] call player_traderCity;"; + }; + class Item8 + { + position[]={16839,0,5264}; + TRGDEF + name="Boat2"; + expCond="(player distance boat2) < 100;"; + expActiv="[""Boat Trader"",true,""enter""] call player_traderCity;"; + expDesactiv="[""Boat Trader"",true,""leave""] call player_traderCity;"; + }; + class Item9 + { + position[]={15128,0,16421}; + TRGDEF + name="AWOL"; + expCond="(player distance awol) < 100;"; + expActiv="[""Aircraft Trader"",true,""enter""] call player_traderCity;"; + expDesactiv="[""Aircraft Trader"",true,""leave""] call player_traderCity;"; + }; + }; +}; +class Intro +{ + addOns[]= + { + "napf" + }; + addOnsAuto[]= + { + "napf" + }; + randomSeed=6913869; + class Intel + { + startWeather=0; + forecastWeather=0; + year=2008; + month=10; + day=11; + hour=9; + minute=20; + }; +}; +class OutroWin +{ + addOns[]= + { + "napf" + }; + addOnsAuto[]= + { + "napf" + }; + randomSeed=4081731; + class Intel + { + startWeather=0; + forecastWeather=0; + year=2008; + month=10; + day=11; + hour=9; + minute=20; + }; +}; +class OutroLoose +{ + addOns[]= + { + "napf" + }; + addOnsAuto[]= + { + "napf" + }; + randomSeed=4975929; + class Intel + { + startWeather=0; + forecastWeather=0; + year=2008; + month=10; + day=11; + hour=9; + minute=20; + }; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/rlnt/client/init/compiles.sqf b/MPMissions/DayZ_Epoch_24.Napf/rlnt/client/init/compiles.sqf new file mode 100755 index 0000000..ab4c75e --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/rlnt/client/init/compiles.sqf @@ -0,0 +1,12 @@ +if (isServer) then { + diag_log "Loading custom rlnt server compiles..."; +}; + +if (!isDedicated) then { + diag_log "Loading custom rlnt client compiles..."; + + //RLNT - Relentless + /* RLNT - WeaponHUD */ + fnc_hud_getImages = compile preprocessFileLineNumbers "rlnt\functions\hud_getImages.sqf"; + fnc_hud_updateImages = compile preprocessFileLineNumbers "rlnt\functions\hud_updateImages.sqf"; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/rlnt/dialogs/rlnt_defines.hpp b/MPMissions/DayZ_Epoch_24.Napf/rlnt/dialogs/rlnt_defines.hpp new file mode 100755 index 0000000..a385785 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/rlnt/dialogs/rlnt_defines.hpp @@ -0,0 +1,213 @@ +/* +Filename: rlnt_defines.hpp +Author: Relentless +Description: Defines for RLNT Classes +Calculation: 1 GUI_GRID = 0.0173 * SafezoneH +*/ +/* RLNT Control Types */ +#define CT_STATIC 0 +#define CT_BUTTON 1 +#define CT_EDIT 2 +#define CT_SLIDER 3 +#define CT_COMBO 4 +#define CT_LISTBOX 5 +#define CT_TOOLBOX 6 +#define CT_CHECKBOXES 7 +#define CT_PROGRESS 8 +#define CT_HTML 9 +#define CT_STATIC_SKEW 10 +#define CT_ACTIVETEXT 11 +#define CT_TREE 12 +#define CT_STRUCTURED_TEXT 13 +#define CT_CONTEXT_MENU 14 +#define CT_CONTROLS_GROUP 15 +#define CT_SHORTCUTBUTTON 16 +#define CT_XKEYDESC 40 +#define CT_XBUTTON 41 +#define CT_XLISTBOX 42 +#define CT_XSLIDER 43 +#define CT_XCOMBO 44 +#define CT_ANIMATED_TEXTURE 45 +#define CT_OBJECT 80 +#define CT_OBJECT_ZOOM 81 +#define CT_OBJECT_CONTAINER 82 +#define CT_OBJECT_CONT_ANIM 83 +#define CT_LINEBREAK 98 +#define CT_USER 99 +#define CT_MAP 100 +#define CT_MAP_MAIN 101 +#define CT_LISTNBOX 102 + +/* RLNT Static Style */ +#define ST_POS 0x0F +#define ST_HPOS 0x03 +#define ST_VPOS 0x0C +#define ST_LEFT 0x00 +#define ST_RIGHT 0x01 +#define ST_CENTER 0x02 +#define ST_DOWN 0x04 +#define ST_UP 0x08 +#define ST_VCENTER 0x0C +#define ST_GROUP_BOX 96 +#define ST_GROUP_BOX2 112 +#define ST_ROUNDED_CORNER ST_GROUP_BOX + ST_CENTER +#define ST_ROUNDED_CORNER2 ST_GROUP_BOX2 + ST_CENTER +#define ST_TYPE 0xF0 +#define ST_SINGLE 0x00 +#define ST_MULTI 0x10 +#define ST_TITLE_BAR 0x20 +#define ST_PICTURE 0x30 +#define ST_FRAME 0x40 +#define ST_BACKGROUND 0x50 +#define ST_GROUP_BOX 0x60 +#define ST_GROUP_BOX2 0x70 +#define ST_HUD_BACKGROUND 0x80 +#define ST_TILE_PICTURE 0x90 +#define ST_WITH_RECT 0xA0 +#define ST_LINE 0xB0 +#define ST_SHADOW 0x100 +#define ST_NO_RECT 0x200 +#define ST_KEEP_ASPECT_RATIO 0x800 +#define ST_TITLE ST_TITLE_BAR + ST_CENTER + +/* RLNT Slider Styles */ +#define SL_DIR 0x400 +#define SL_VERT 0 +#define SL_HORZ 0x400 +#define SL_TEXTURES 0x10 + +/* RLNT Progress Bar */ +#define ST_VERTICAL 0x01 +#define ST_HORIZONTAL 0 + +/* RLNT Listbox Styles */ +#define LB_TEXTURES 0x10 +#define LB_MULTI 0x20 + +/* RLNT Tree Styles */ +#define TR_SHOWROOT 1 +#define TR_AUTOCOLLAPSE 2 + +/* RLNT Message Box Styles */ +#define MB_BUTTON_OK 1 +#define MB_BUTTON_CANCEL 2 +#define MB_BUTTON_USER 4 + + +/* RLNT BASE CLASSES */ +class RLNT_RscText +{ + access = 0; + idc = -1; + type = CT_STATIC; + style = 0; + linespacing = 1; + colorBackground[] = {0,0,0,0}; + colorText[] = {1,1,1,1}; + text = ""; + shadow = 0; + font = "Zeppelin32"; + sizeEx = 0.0173 * SafezoneH; + fixedWidth = 0; + x = 0; + y = 0; + h = 0; + w = 0; +}; + +class RLNT_RscPicture +{ + access = 0; + idc = -1; + type = CT_STATIC; + style = ST_PICTURE; + colorBackground[] = {0,0,0,0}; + colorText[] = {1,1,1,1}; + font = "Zeppelin32"; + sizeEx = 0.0173 * SafezoneH; + lineSpacing = 0; + text = ""; + fixedWidth = 0; + shadow = 0; + x = 0; + y = 0; + w = 0.2; + h = 0.15; +}; + +class RLNT_RscButton_Static +{ + access = 0; + type = 1; + text = ""; + colorText[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.25}; + colorBackground[] = {0.45,0.45,0.45,1}; + colorBackgroundDisabled[] = {0,0,0,0.5}; + colorBackgroundActive[] = {-1,-1,-1,-1}; + colorFocused[] = {-1,-1,-1,-1}; + colorShadow[] = {0,0,0,0}; + colorBorder[] = {0,0,0,1}; + soundEnter[] = {"\ca\ui\data\sound\onover",0.09,1}; + soundPush[] = {"\ca\ui\data\sound\new1",0,0}; + soundClick[] = {"\ca\ui\data\sound\onclick",0.07,1}; + soundEscape[] = {"\ca\ui\data\sound\onescape",0.09,1}; + style = 2; + x = 0; + y = 0; + w = 0.095589; + h = 0.039216; + shadow = 2; + font = "Zeppelin32"; + sizeEx = 0.0173 * SafezoneH; + offsetX = 0.003; + offsetY = 0.003; + offsetPressedX = 0.002; + offsetPressedY = 0.002; + borderSize = 0; +}; + +class RLNT_RscButton_Dynamic +{ + access = 0; + type = 1; + text = ""; + colorText[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.25}; + colorBackground[] = {0.45,0.45,0.45,1}; + colorBackgroundDisabled[] = {0,0,0,0.5}; + colorBackgroundActive[] = {0.75,0.75,0.75,1}; + colorFocused[] = {0.75,0.75,0.75,1}; + colorShadow[] = {0,0,0,0}; + colorBorder[] = {0,0,0,1}; + soundEnter[] = {"\ca\ui\data\sound\onover",0.09,1}; + soundPush[] = {"\ca\ui\data\sound\new1",0,0}; + soundClick[] = {"\ca\ui\data\sound\onclick",0.07,1}; + soundEscape[] = {"\ca\ui\data\sound\onescape",0.09,1}; + style = 2; + x = 0; + y = 0; + w = 0.095589; + h = 0.039216; + shadow = 2; + font = "Zeppelin32"; + sizeEx = 0.0173 * SafezoneH; + offsetX = 0.003; + offsetY = 0.003; + offsetPressedX = 0.002; + offsetPressedY = 0.002; + borderSize = 0; +}; + +class RLNT_RscFrame +{ + type = 0; + idc = -1; + style = 64; + shadow = 2; + colorBackground[] = {0,0,0,0}; + colorText[] = {1,1,1,1}; + font = "Zeppelin32"; + SizeEx = 0.0173 * SafezoneH; + text = ""; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/rlnt/dialogs/rlnt_weaponhud.hpp b/MPMissions/DayZ_Epoch_24.Napf/rlnt/dialogs/rlnt_weaponhud.hpp new file mode 100755 index 0000000..b1154bc --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/rlnt/dialogs/rlnt_weaponhud.hpp @@ -0,0 +1,211 @@ +/* +Filename: rlnt_weaponhud.hpp +Author: Relentless +Description: Dialog for the Weapon HUD +*/ +class rlnt_weaponhud_2_bg { + + idd = 7202; + movingenable = false; + duration = 10e10; + onLoad = ""; + + class controls { + class text_rifle_1: RLNT_RscText + { + idc = 1000; + text = "1"; + x = 0.108258 * safezoneW + safezoneX; + y = 0.939838 * safezoneH + safezoneY; + w = 0.010309 * safezoneW; + h = 0.0439838 * safezoneH; + colorText[] = {255,255,255,1}; + }; + class text_rifle_2: RLNT_RscText + { + idc = 1001; + text = "2"; + x = 0.200008 * safezoneW + safezoneX; + y = 0.939838 * safezoneH + safezoneY; + w = 0.010309 * safezoneW; + h = 0.0439838 * safezoneH; + colorText[] = {255,255,255,1}; + }; + class text_secondary: RLNT_RscText + { + idc = 1002; + text = "3"; + x = 0.291758 * safezoneW + safezoneX; + y = 0.939838 * safezoneH + safezoneY; + w = 0.010309 * safezoneW; + h = 0.0439838 * safezoneH; + colorText[] = {255,255,255,1}; + }; + class text_painkiller: RLNT_RscText + { + idc = 1003; + text = "4"; + x = 0.361859 * safezoneW + safezoneX; + y = 0.939838 * safezoneH + safezoneY; + w = 0.010309 * safezoneW; + h = 0.0439838 * safezoneH; + colorText[] = {255,255,255,1}; + }; + class text_bandage: RLNT_RscText + { + idc = 1004; + text = "5"; + x = 0.431961 * safezoneW + safezoneX; + y = 0.939838 * safezoneH + safezoneY; + w = 0.010309 * safezoneW; + h = 0.0439838 * safezoneH; + colorText[] = {255,255,255,1}; + }; + class bg_rifle_1: RLNT_RscText + { + idc = 1005; + x = 0.108258 * safezoneW + safezoneX; + y = 0.928842 * safezoneH + safezoneY; + w = 0.0876266 * safezoneW; + h = 0.0659757 * safezoneH; + colorBackground[] = {0,0,0,0.4}; + }; + class bg_rifle_2: RLNT_RscText + { + idc = 1006; + x = 0.200008 * safezoneW + safezoneX; + y = 0.928842 * safezoneH + safezoneY; + w = 0.0876266 * safezoneW; + h = 0.0659757 * safezoneH; + colorBackground[] = {0,0,0,0.4}; + }; + class bg_secondary: RLNT_RscText + { + idc = 1007; + x = 0.291758 * safezoneW + safezoneX; + y = 0.928842 * safezoneH + safezoneY; + w = 0.0670085 * safezoneW; + h = 0.0659757 * safezoneH; + colorBackground[] = {0,0,0,0.4}; + }; + class bg_painkiller: RLNT_RscText + { + idc = 1008; + x = 0.361859 * safezoneW + safezoneX; + y = 0.928842 * safezoneH + safezoneY; + w = 0.0670085 * safezoneW; + h = 0.0659757 * safezoneH; + colorBackground[] = {0,0,0,0.4}; + }; + class bg_bandage: RLNT_RscText + { + idc = 1009; + x = 0.43196 * safezoneW + safezoneX; + y = 0.928842 * safezoneH + safezoneY; + w = 0.0670085 * safezoneW; + h = 0.0659757 * safezoneH; + colorBackground[] = {0,0,0,0.4}; + }; + class frame_rifle_1: RLNT_RscText + { + idc = 1010; + x = 0.118567 * safezoneW + safezoneX; + y = 0.928842 * safezoneH + safezoneY; + w = 0.0773175 * safezoneW; + h = 0.0659757 * safezoneH; + colorBackground[] = {0,0,0,0.4}; + }; + class frame_rifle_2: RLNT_RscText + { + idc = 1011; + x = 0.211348 * safezoneW + safezoneX; + y = 0.928842 * safezoneH + safezoneY; + w = 0.0773175 * safezoneW; + h = 0.0659757 * safezoneH; + colorBackground[] = {0,0,0,0.4}; + }; + class frame_secondary: RLNT_RscText + { + idc = 1012; + x = 0.302067 * safezoneW + safezoneX; + y = 0.928842 * safezoneH + safezoneY; + w = 0.0566995 * safezoneW; + h = 0.0659757 * safezoneH; + colorBackground[] = {0,0,0,0.4}; + }; + class frame_painkiller: RLNT_RscText + { + idc = 1013; + x = 0.372168 * safezoneW + safezoneX; + y = 0.928842 * safezoneH + safezoneY; + w = 0.0566995 * safezoneW; + h = 0.0659757 * safezoneH; + colorBackground[] = {0,0,0,0.4}; + }; + class frame_bandage: RLNT_RscText + { + idc = 1014; + x = 0.442269 * safezoneW + safezoneX; + y = 0.928842 * safezoneH + safezoneY; + w = 0.0566995 * safezoneW; + h = 0.0659757 * safezoneH; + colorBackground[] = {0,0,0,0.4}; + }; + }; +}; + +class rlnt_weaponhud_2_items { + + idd = 7203; + movingenable = false; + duration = 10e10; + onLoad = "uiNamespace setVariable ['rlnt_weaponhud_2_items', _this select 0];"; + + class controls { + class img_rifle_1: RLNT_RscPicture + { + idc = 1200; + text = "#(argb,8,8,3)color(0,0,0,0)"; + x = 0.118567 * safezoneW + safezoneX; + y = 0.928842 * safezoneH + safezoneY; + w = 0.0773175 * safezoneW; + h = 0.0659757 * safezoneH; + }; + class img_rifle_2: RLNT_RscPicture + { + idc = 1201; + text = "#(argb,8,8,3)color(0,0,0,0)"; + x = 0.211348 * safezoneW + safezoneX; + y = 0.928842 * safezoneH + safezoneY; + w = 0.0773175 * safezoneW; + h = 0.0659757 * safezoneH; + }; + class img_secondary: RLNT_RscPicture + { + idc = 1202; + text = "#(argb,8,8,3)color(0,0,0,0)"; + x = 0.302067 * safezoneW + safezoneX; + y = 0.928841 * safezoneH + safezoneY; + w = 0.0566995 * safezoneW; + h = 0.0659757 * safezoneH; + }; + class img_painkiller: RLNT_RscPicture + { + idc = 1203; + text = "#(argb,8,8,3)color(0,0,0,0)"; + x = 0.377323 * safezoneW + safezoneX; + y = 0.93544 * safezoneH + safezoneY; + w = 0.0463905 * safezoneW; + h = 0.0549797 * safezoneH; + }; + class img_bandage: RLNT_RscPicture + { + idc = 1204; + text = "#(argb,8,8,3)color(0,0,0,0)"; + x = 0.447424 * safezoneW + safezoneX; + y = 0.935439 * safezoneH + safezoneY; + w = 0.0463905 * safezoneW; + h = 0.0549797 * safezoneH; + }; + }; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/rlnt/functions/hud_getImages.sqf b/MPMissions/DayZ_Epoch_24.Napf/rlnt/functions/hud_getImages.sqf new file mode 100755 index 0000000..ad67b2e --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/rlnt/functions/hud_getImages.sqf @@ -0,0 +1,39 @@ +/* +Filename: hud_getImages.sqf +Author: Relentless +Description: Function to get images for Weapon HUD +*/ +private ["_hasPainkiller","_hasBandage","_display"]; +disableSerialization; + +/* Variables */ +_hasPainkiller = 'ItemPainkiller' in magazines player; +_hasBandage = 'ItemBandage' in magazines player; +_display = uiNamespace getVariable["rlnt_rlnt_weaponhud_2_items", displayNull]; + +/* Delay so the display spawns first */ +sleep 1; + +/* Set Images */ + //Primary Weapon + (_display displayCtrl 1200) ctrlSetText(gettext(configFile >> 'cfgWeapons' >> (primaryWeapon player) >> 'picture')); + + //Seccond Primary Weapon + (_display displayCtrl 1201) ctrlSetText(gettext(configFile >> 'cfgWeapons' >> dayz_onBack >> 'picture')); + + //Handgun Weapon + { + if ((getNumber (configFile >> 'cfgWeapons' >> _x >> 'Type')) == 2) exitWith { + (_display displayCtrl 1202) ctrlSetText(getText(configFile >> 'cfgWeapons' >> _x >> 'picture')); + }; + } forEach weapons player; + + //Painkiller + if (_hasPainkiller) then { + (_display displayCtrl 1203) ctrlSetText(gettext(configFile >> 'cfgMagazines' >> 'itempainkiller' >> 'picture')); + }; + + //Bandage + if (_hasBandage) then { + (_display displayCtrl 1204) ctrlSetText(gettext(configFile >> 'cfgMagazines' >> 'itembandage' >> 'picture')); + }; diff --git a/MPMissions/DayZ_Epoch_24.Napf/rlnt/functions/hud_updateImages.sqf b/MPMissions/DayZ_Epoch_24.Napf/rlnt/functions/hud_updateImages.sqf new file mode 100755 index 0000000..58e0202 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/rlnt/functions/hud_updateImages.sqf @@ -0,0 +1,51 @@ +/* +Filename: hud_updateImages.sqf +Author: Relentless +Description: Function to refresh images for Weapon HUD +*/ +private ["_display","_rifle1Update","_rifle2Update","_secondaryUpdate","_painkillerUpdate","_bandageUpdate","_hasPainkiller","_hasBandage","_handgun"]; +disableSerialization; + +/* Variables */ +_display = uiNamespace getVariable["rlnt_weaponhud_2_items", displayNull]; +_rifle1Update = _display displayCtrl 1200; +_rifle2Update = _display displayCtrl 1201; +_secondaryUpdate = _display displayCtrl 1202; +_painkillerUpdate = _display displayCtrl 1203; +_bandageUpdate = _display displayCtrl 1204; +_hasPainkiller = 'ItemPainkiller' in magazines player; +_hasBandage = 'ItemBandage' in magazines player; +_handgun = ""; + +/* Refresh images */ + //Primary Weapon + _rifle1Update ctrlSetText(gettext(configFile >> 'cfgWeapons' >> (primaryWeapon player) >> 'picture')); + + //Seccond Primary Weapon + _rifle2Update ctrlSetText(gettext(configFile >> 'cfgWeapons' >> dayz_onBack >> 'picture')); + + //Handgun Weapon + { + if ((getNumber(configFile >> 'cfgWeapons' >> _x >> 'Type')) == 2) then { + _handgun = _x; + }; + } forEach weapons player; + if (_handgun == "") then { + _secondaryUpdate ctrlSetText(""); + } else { + _secondaryUpdate ctrlSetText(getText(configFile >> 'cfgWeapons' >> _handgun >> 'picture')); + }; + + //Painkiller + if (_hasPainkiller) then { + _painkillerUpdate ctrlSetText(gettext(configFile >> 'cfgMagazines' >> 'itempainkiller' >> 'picture')); + } else { + _painkillerUpdate ctrlSetText(""); + }; + + //Bandage + if (_hasBandage) then { + _bandageUpdate ctrlSetText(gettext(configFile >> 'cfgMagazines' >> 'itembandage' >> 'picture')); + } else { + _bandageUpdate ctrlSetText(""); + }; diff --git a/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/actions/rlnt_bandage.sqf b/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/actions/rlnt_bandage.sqf new file mode 100755 index 0000000..31ff8ef --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/actions/rlnt_bandage.sqf @@ -0,0 +1,80 @@ +/* +Filename: bandage.sqf +Author: Dayz Epoch Mod - Team +Modifications: Relentless +Description: Custom bandage script to avoid Client errors +*/ +private ["_unit","_item","_hasItem","_animState","_started","_finished","_isMedic","_id"]; + +/* Variables */ +_unit = player; +_item = "ItemBandage"; +_hasItem = _item in magazines player; + +/* Avoid animation if player doesn't have the item */ +if !(_hasItem) exitWith {}; + +/* Take item from player */ +player removeMagazine _item; +closedialog 0; + +/* Reset self_action */ +call fnc_usec_medic_removeActions; +r_action = false; + +/* Perform animation */ +if (vehicle player == player) then { + player playActionNow "Medic"; +}; + +/* Reset variables */ +r_interrupt = false; +_animState = animationState player; +r_doLoop = true; +_started = false; +_finished = false; +[player,"bandage",0,false] call dayz_zombieSpeak; + +/* Error Loop */ +while {r_doLoop} do { + _animState = animationState player; + _isMedic = ["medic",_animState] call fnc_inString; + if (_isMedic) then { + _started = true; + }; + if (_started and !_isMedic) then { + r_doLoop = false; + _finished = true; + }; + if (r_interrupt) then { + r_doLoop = false; + }; + if (vehicle player != player) then { + uiSleep 3; + r_doLoop = false; + _finished = true; + }; + uiSleep 0.1; +}; +r_doLoop = false; + +/* Humanity reward when healing another player */ +if (_finished) then { + if ((_unit == player) or (vehicle player != player)) then { + _id = [player,player] execVM "\z\addons\dayz_code\medical\publicEH\medBandaged.sqf"; + if (_item=="ItemSepsisBandage") then { + r_player_Sepsis = [false, 0]; + player setVariable ["USEC_Sepsis", false, true]; + player setVariable ["sepsisStarted", nil]; + }; + } else { + PVDZ_send = [_unit,"Bandage",[_unit,player]]; + publicVariableServer "PVDZ_send"; + [20,0] call player_humanityChange; + }; +} else { + r_interrupt = false; + [objNull, player, rSwitchMove,""] call RE; + player playActionNow "stop"; + player addMagazine _item; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/actions/rlnt_painkiller.sqf b/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/actions/rlnt_painkiller.sqf new file mode 100755 index 0000000..f52ffff --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/actions/rlnt_painkiller.sqf @@ -0,0 +1,38 @@ +/* +Filename: bandage.sqf +Author: Dayz Epoch Mod - Team +Modifications: Relentless +Description: Custom painkiller script to avoid Client errors +*/ +private ["_unit","_item","_hasItem","_id"]; + +/* Variables */ +_unit = player; +_item = "ItemPainkiller"; +_hasItem = _item in magazines player; + +/* Avoid animation if player doesn't have the item */ +if !(_hasItem) exitWith {}; + +/* Perform animation and take item from player */ +player playActionNow "Gear"; +player removeMagazine _item; + +/* Reset self_action */ +call fnc_usec_medic_removeActions; +r_action = false; + +/* Perform animation */ +if (vehicle player == player) then { + player playActionNow "Gear"; +}; + +/* Humanity reward if giving other player painkillers */ +if ((_unit == player) or (vehicle player != player)) then { + _id = [player,player] execVM "\z\addons\dayz_code\medical\publicEH\medPainkiller.sqf"; +} else { + PVDZ_send = [_unit,_item,[_unit,player]]; + publicVariableServer "PVDZ_send"; + + [20,0] call player_humanityChange; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/style2/hud_bg.sqf b/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/style2/hud_bg.sqf new file mode 100755 index 0000000..9cd7e2d --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/style2/hud_bg.sqf @@ -0,0 +1,13 @@ +/* +Filename: hud_bg.sqf +Author: Relentless +Description: Only gets executed when DZE_TwoPrimaries = 2 +*/ +private ["_layer"]; +disableSerialization; + +/* Variables */ +_layer = 1300; + +/* Create Dialog / Weapon HUD */ +_layer cutRsc ["rlnt_weaponhud_2_bg","PLAIN",1]; diff --git a/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/style2/hud_items.sqf b/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/style2/hud_items.sqf new file mode 100755 index 0000000..f51f634 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/style2/hud_items.sqf @@ -0,0 +1,15 @@ +/* +Filename: hud_items.sqf +Author: Relentless +Description: Only gets executed when DZE_TwoPrimaries = 2 +*/ +private ["_layer"]; +disableSerialization; + +/* Variables */ +_layer = 1301; + +/* Create Dialog / Weapon HUD */ +_layer cutRsc ["rlnt_weaponhud_2_items","PLAIN",1]; +sleep 2; +[] spawn fnc_hud_getImages; diff --git a/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/style2/loop.sqf b/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/style2/loop.sqf new file mode 100755 index 0000000..9063dd6 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/style2/loop.sqf @@ -0,0 +1,17 @@ +/* +Filename: loop.sqf +Author: Relentless +Description: Only gets executed when DZE_TwoPrimaries = 2 +*/ +private ["_i"]; +sleep 5; + +/* Perform loop while weaponHUD is activated */ +while {DZE_weaponHUD} do { + [] spawn fnc_hud_updateImages; + for "_i" from 1 to 6 step 1 do { + if (DZE_weaponHUD) then { + sleep 0.5; + }; + }; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/weaponhud_init.sqf b/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/weaponhud_init.sqf new file mode 100755 index 0000000..2b02ba6 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/rlnt/scripts/Weapon HUD/weaponhud_init.sqf @@ -0,0 +1,27 @@ +/* +Filename: weaponhud_init.sqf +Author: Relentless +Description: Checks for style of the Weapon HUD +*/ +if (DZE_weaponHUD) then { + switch (DZE_TwoPrimaries) do { + case 0: { + //Style 0 == 1 Primary Weapon == 4 Boxes + execVM "rlnt\scripts\Weapon HUD\style1\hud_bg.sqf"; + execVM "rlnt\scripts\Weapon HUD\style1\hud_items.sqf"; + execVM "rlnt\scripts\Weapon HUD\style1\loop.sqf"; + }; + case 1: { + //Style 1 == 1 Primary Weapon == 4 Boxes + execVM "rlnt\scripts\Weapon HUD\style1\hud_bg.sqf"; + execVM "rlnt\scripts\Weapon HUD\style1\hud_items.sqf"; + execVM "rlnt\scripts\Weapon HUD\style1\loop.sqf"; + }; + case 2: { + //Style 2 == 2 Primary Weapon == 5 Boxes + execVM "rlnt\scripts\Weapon HUD\style2\hud_bg.sqf"; + execVM "rlnt\scripts\Weapon HUD\style2\hud_items.sqf"; + execVM "rlnt\scripts\Weapon HUD\style2\loop.sqf"; + }; + }; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/rules.sqf b/MPMissions/DayZ_Epoch_24.Napf/rules.sqf new file mode 100755 index 0000000..573ef03 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/rules.sqf @@ -0,0 +1,29 @@ +private ["_messages","_timeout"]; + +_messages = [ + ["DayZ Epoch", "Welcome "+(name player)] + //["World", worldName], + //["Teamspeak", "some TS info"], + //["Website/Forums", "some website info"], + //["Server Rules", "Duping, glitching or using any
exploit will result in a
permanent ban."], + //["Server Rules", "No talking in side."], + //["Server Rules", "Hackers will be banned permanently
Respect others"], + //["News", "Some random new info!
Random news
"] +]; + +_timeout = 5; +{ + private ["_title","_content","_titleText"]; + uiSleep 2; + _title = _x select 0; + _content = _x select 1; + _titleText = format[("%1
%2"), _title, _content]; + [ + _titleText, + [safezoneX + safezoneW - 0.8,0.50], //DEFAULT: 0.5,0.35 + [safezoneY + safezoneH - 0.8,0.7], //DEFAULT: 0.8,0.7 + _timeout, + 0.5 + ] spawn BIS_fnc_dynamicText; + uiSleep (_timeout * 1.1); +} forEach _messages; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/clickActions/config.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/clickActions/config.sqf new file mode 100755 index 0000000..8633867 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/clickActions/config.sqf @@ -0,0 +1,51 @@ +/* + DZE_CLICK_ACTIONS + This is where you register your right-click actions + FORMAT -- (no comma after last array entry) + [_classname,_text,_execute,_condition], + PARAMETERS + _classname : the name of the class to click on (example = "ItemBloodbag") + _text : the text for the option that is displayed when right clicking on the item (example = "Self Transfuse") + _execute : compiled code to execute when the option is selected (example = "execVM 'my\scripts\self_transfuse.sqf';") + _condition : compiled code evaluated to determine whether or not the option is displayed (example = {true}) +*/ + +DZE_CLICK_ACTIONS = [ + /* + ["ItemGPS",localize "STR_CL_CA_SCAN_NEARBY","if(isNil 'CA_GPS_RANGE') then {CA_GPS_RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((position player) nearEntities ['CAManBase',CA_GPS_RANGE]); format[localize 'STR_CL_CA_SCAN',CA_GPS_RANGE,CA_MAN_COUNT - CA_ZOMBIE_COUNT,count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]),count ((position player) nearEntities ['allVehicles',CA_GPS_RANGE]) - CA_MAN_COUNT] call dayz_rollingMessages;","true"], + ["ItemGPS",localize "STR_CL_CA_RANGE_UP","if(isNil 'CA_GPS_RANGE') then {CA_GPS_RANGE = 1500;};CA_GPS_RANGE = (CA_GPS_RANGE + 100) min 2500; format[localize 'STR_CL_CA_RANGE_GPS',CA_GPS_RANGE] call dayz_rollingMessages;","true"], + ["ItemGPS",localize "STR_CL_CA_RANGE_DOWN","if(isNil 'CA_GPS_RANGE') then {CA_GPS_RANGE = 1500;};CA_GPS_RANGE = (CA_GPS_RANGE - 100) max 1000; format[localize 'STR_CL_CA_RANGE_GPS',CA_GPS_RANGE] call dayz_rollingMessages;","true"] + */ + ["ItemGPS",localize "STR_CL_LV_LOCATE_VEHICLES","[] spawn locateVehicle;","true"], + ["ItemMap",localize "STR_CL_LV_LOCATE_VEHICLES","[] spawn locateVehicle;","true"], + ["ItemKey",localize "STR_CL_RV_CA_EJECT","spawn remoteVehicle;","true",1], + ["ItemKey",localize "STR_CL_RV_CA_ENGINE","spawn remoteVehicle;","true",2], + ["ItemKey",localize "STR_CL_RV_CA_UNLOCK","spawn remoteVehicle;","true",3], + ["ItemKey",localize "STR_CL_RV_CA_LOCK","spawn remoteVehicle;","true",4] + //["ItemKey",localize "STR_CL_RV_CA_LIGHTS","spawn remoteVehicle;","true",5] +]; + +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular_Vector","View Distance:","systemChat('Change View Distance Locally. Click on one of the distance options');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular_Vector","400 Meters","setViewDistance 400; systemChat('ViewDistance: 400'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular_Vector","600 Meters","setViewDistance 600; systemChat('ViewDistance: 600'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular_Vector","800 Meters","setViewDistance 800; systemChat('ViewDistance: 800'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular_Vector","1000 Meters","setViewDistance 1000; systemChat('ViewDistance: 1000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular_Vector","1250 Meters","setViewDistance 1250; systemChat('ViewDistance: 1250'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular_Vector","1500 Meters","setViewDistance 1500; systemChat('ViewDistance: 1500'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular_Vector","1750 Meters","setViewDistance 1750; systemChat('ViewDistance: 1750'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular_Vector","2000 Meters","setViewDistance 2000; systemChat('ViewDistance: 2000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular_Vector","3000 Meters","setViewDistance 3000; systemChat('ViewDistance: 3000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular_Vector","4000 Meters","setViewDistance 4000; systemChat('ViewDistance: 4000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular_Vector","5000 Meters","setViewDistance 5000; systemChat('ViewDistance: 5000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular","View Distance:","systemChat('Change View Distance Locally. Click on one of the distance options');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular","400 Meters","setViewDistance 400; systemChat('ViewDistance: 400'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular","600 Meters","setViewDistance 600; systemChat('ViewDistance: 600'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular","800 Meters","setViewDistance 800; systemChat('ViewDistance: 800'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular","1000 Meters","setViewDistance 1000; systemChat('ViewDistance: 1000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular","1250 Meters","setViewDistance 1250; systemChat('ViewDistance: 1250'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular","1500 Meters","setViewDistance 1500; systemChat('ViewDistance: 1500'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular","1750 Meters","setViewDistance 1750; systemChat('ViewDistance: 1750'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular","2000 Meters","setViewDistance 2000; systemChat('ViewDistance: 2000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular","3000 Meters","setViewDistance 3000; systemChat('ViewDistance: 3000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular","4000 Meters","setViewDistance 4000; systemChat('ViewDistance: 4000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; +DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [["Binocular","5000 Meters","setViewDistance 5000; systemChat('ViewDistance: 5000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]]; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/config.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/config.sqf new file mode 100755 index 0000000..eefbf6a --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/config.sqf @@ -0,0 +1,57 @@ +// **FORMAT** -- (note no comma after last array entry) +// +// DZE_DEPLOYABLES_CONFIG = [ +// [_clickItem,_deployOffset,_packDistance,_damageLimit,_packAny,_cargo,_ammo,_hive,_plot,_simulation,_road,_deployables,_near,_parts,_condition], +// [_clickItem,_deployOffset,_packDistance,_damageLimit,_packAny,_cargo,_ammo,_hive,_plot,_simulation,_road,_deployables,_near,_parts,_condition], +// [...more stuff here...] +// ]; +// +// parameter | description | type | example +// --------------|---------------------------------------------------------------------|--------|-------- +// _clickItem | class name of the item to click on | string | "ItemToolbox" +// _deployOffset | [_side,_front,_up] array to offset the deployable when buiding | array | [0,2,1] +// _packDistance | how close does the packer need to be to pack the object? | number | 5 +// _damageLimit | item can't be repacked if damage is > this. (-1 = no re-packing) | number | 0.1 +// _packAny | can anyone repack the deployable? | bool | false +// _cargo | clear the cargo of the deployable? | bool | false +// _ammo | should vehicle ammo be cleared? (does not persist through restart) | bool | true +// _hive | write deployable to database? | bool | false +// _plot | require a plot from the owner to build the deployable? | bool | false +// _simulation | enable simulation (movement/damage) for the object? (true for cars) | bool | true +// _road | enable road building for this object? | bool | true +// _deployables | array of class names that can be deployed with this method | array | ["MMT_Civ"] +// _near | array of items required nearby to build (workshop/fire/fueltank) | array | [] +// _parts | array of parts required to build (will be taken from player) | array | ["ItemToolbox"] +// _condition | string of code to evaluate to determine whether action is shown | string | "!(isNull player) && {(getPlayerUID player) in DZE_DEPLOYABLE_ADMINS}" + +DZE_DEPLOYABLES_CONFIG = [ + // deploy a non-permanent bike from a toolbox right in front of the player that can be re-packed by the owner as long as it's under 10% damage + ["ItemToolbox",[0,6,1],5,0.1,false,false,false,false,false,true,true,["MMT_Civ"],[],["ItemToolbox"],"true"], + ["ItemToolbox",[0,6,1],5,0.1,false,false,false,false,false,true,true,["CSJ_GyroC"],[],["PartVRotor", "PartEngine", "ItemToolbox"],"true"], + ["ItemToolbox",[0,6,1],5,0.1,false,false,false,false,false,true,true,["TT650_Civ"],[],["PartEngine", "ItemToolbox"],"true"] + // deploy fortifications from etool 3 meters in front of player that are permanent until server restart + //["ItemEtool",[0,3,0],5,-1,false,true,false,true,false,false,["Land_fort_rampart","Fort_StoneWall_EP1","Land_fort_bagfence_round"],[],["ItemEtool"],"true"], + // deploy a permanent helicopter from ruby 5 meters in front of player that can be re-packed by anyone as long as it's under 10% damage + //["ItemEtool",[0,8,0],5,-1,false,true,true,true,false,false,["Land_fortified_nest_big"],[],["ItemSandbagExLarge5x","ItemSandbagExLarge5x","ItemSandbagExLarge5x"],"true"], + //["PartWoodPile",[0,2,0],5,1,true,true,true,true,false,false,["Pile_of_wood"],[],["PartWoodPile","PartWoodPile","PartWoodPile","PartWoodPile","PartWoodPile"],"true"], + //["ItemSapphire",[0,2,0],5,1,true,true,true,true,false,false,["DSHKM_CDF","M2StaticMG","SearchLight_CDF"],[],["ItemSapphire"],"true"] +]; + +// **DZE_DEPLOYABLE_NAME_MAP format +// +// DZE_DEPLOYABLE_NAME_MAP = [ +// [_class,_name], +// [_class,_name], +// [... more ...] +// ]; +// +// parameter | description | type | example +// --------------|---------------------------------------------------------------------|--------|-------- +// _class | class name of the item you want to replace the name of | string | "Notebook" +// _name | new name to display when right clicking | string | "Macbook Pro" +// +DZE_DEPLOYABLE_NAME_MAP = [ + ["Notebook","Macbook Pro"] +]; + +DZE_DEPLOYABLE_ADMINS = []; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/deploy.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/deploy.sqf new file mode 100755 index 0000000..28ab556 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/deploy.sqf @@ -0,0 +1,46 @@ +private["_exitWith","_position","_display","_object","_handle","_deployableName"]; + +_exitWith = "nil"; + +disableSerialization; +_display = findDisplay 106; + +if (!(isNull _display)) then { + _display closeDisplay 0; +}; + +_deployableName = _this call getDeployableDisplay; + +{ + if (_x select 0) exitWith {_exitWith = (_x select 1);}; +} forEach [ + [(dayz_playerUID in DZE_DEPLOYABLE_ADMINS),"admin"], + [!([player,_this] call getHasDeployableParts),format["You need %1 to build %2",str (_this call getDeployableParts),_deployableName]], + [!(call fnc_can_do),format["You can't build a %1 right now.",_deployableName]], + [(player getVariable["inCombat",false]), format["Can't build a %1 while in combat!",(_this call getDeployableDisplay)]], + [DZE_DEPLOYING,"You are already building something!"], + [DZE_PACKING,"You are already packing something!"] +]; + +if (_exitWith != "nil" && {_exitWith != "admin"}) exitWith { + taskHint [_exitWith, DZE_COLOR_DANGER, "taskFailed"]; +}; + +DZE_DEPLOYING = true; +DZE_DEPLOYING_SUCCESSFUL = false; +_handle = (_this call getDeployableClass) spawn player_deploy; +waitUntil {scriptDone _handle;}; + +DZE_DEPLOYING = false; +if (!DZE_DEPLOYING_SUCCESSFUL) then { + taskHint ["Deploying Failed!", DZE_COLOR_DANGER, "taskFailed"]; +} else { + taskHint [format["You've built a %1!",_deployableName], DZE_COLOR_PRIMARY, "taskDone"]; + + uiSleep 10; + if (!(_this call getPermanent)) then { + "Warning: Deployed vehicles DO NOT SAVE after server restart!" call dayz_rollingMessages; + } else { + "This vehicle is permanent and will persist through server restarts!" call dayz_rollingMessages; + }; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/functions.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/functions.sqf new file mode 100755 index 0000000..cc7467a --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/functions.sqf @@ -0,0 +1,84 @@ +// this function checks if play is on ladder/passed out/being drug +fnc_can_do = { + private ["_onLadder"]; + _onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1; + (!r_drag_sqf && !r_player_unconscious && !_onLadder) +}; + +// this goes through a crafting animation until the loop is interrupted until interrupted by a set of conditions fed to the function +// it then returns the result of what broke the loop, or "nil" -- yes, string of "nil" -- if not broken +fnc_bike_crafting_animation = { + private ["_isLoopDone","_isAnimationStarted","_isAnimationCompleted","_animationState","_isAnimationActive","_exitWith"]; + + [player,(getPosATL player),30,"repair"] spawn fnc_alertZombies; + + player playActionNow "Medic"; + r_interrupt = false; + _isLoopDone = false; + _isAnimationStarted = false; + _isAnimationCompleted = false; + _animationState = animationState player; + _isAnimationActive = false; + _exitWith = "nil"; + + while {!_isLoopDone} do { + _animationState = animationState player; + _isAnimationActive = ["medic",_animationState] call fnc_inString; + if (_isAnimationActive) then { + _isAnimationStarted = true; + }; + if (_isAnimationStarted && !_isAnimationActive) then { + _isLoopDone = true; + _isAnimationCompleted = true; + }; + { + if (call compile (_x select 0)) exitWith { + _exitWith = _x select 1; + }; + } forEach _this; + if (_exitWith != "nil") then { + _isLoopDone = true; + player switchMove ""; + player playActionNow "stop"; + }; + sleep 0.3; + }; + _exitWith +}; + +fnc_set_temp_deployable_id = { + _this setVariable ["DeployedBy",call fnc_temp_deployable_id, true]; +}; + +fnc_set_perm_deployable_id = { + _this setVariable ["CharacterID",call fnc_perm_deployable_id, true]; +}; + +fnc_get_perm_deployable_id = { + private["_return","_parse"]; + _return = _this getVariable ["CharacterID","0"]; + _parse = parseNumber _return; + if(_parse < 500000) then { + _return = "nil"; + }; + _return +}; + +fnc_get_temp_deployable_id = { + _this getVariable ["DeployedBy","nil"] +}; + +fnc_perm_deployable_id = { + private["_calc","_return"]; + _calc = 999999 - (parseNumber dayz_characterID); + if(_calc < 500000) then { + _return = "nil"; + } else { + _return = (str _calc); + }; + _return +}; + +fnc_temp_deployable_id = { + getPlayerUID player +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/init.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/init.sqf new file mode 100755 index 0000000..1c35d8a --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/init.sqf @@ -0,0 +1,101 @@ +call compile preprocessFileLineNumbers "scripts\deployAnything\config.sqf"; +call compile preprocessFileLineNumbers "scripts\deployAnything\wrapper.sqf"; +call compile preprocessFileLineNumbers "scripts\deployAnything\functions.sqf"; + +_DZE_DEPLOYABLE_VERSION = "3.0.1"; + +diag_log format["Deploy Anything: loading version %1 ...",_DZE_DEPLOYABLE_VERSION]; + +player_deploy = compile preprocessFileLineNumbers "scripts\deployAnything\player_deploy.sqf"; + +DZE_DEPLOYABLES = []; +{ + private["_class","_distance","_deployables","_packDist","_packOthers","_clearCargo","_clearAmmo","_permanent","_damage","_needNear","_parts","_requirePlot","_enableSim","_road","_condition"]; + _class = _x select 0; + _distance = _x select 1; + _packDist = _x select 2; + _damage = _x select 3; + _packOthers = _x select 4; + _clearCargo = _x select 5; + _clearAmmo = _x select 6; + _permanent = _x select 7; + _requirePlot = _x select 8; + _enableSim = _x select 9; + _road = _x select 10; + _deployables = _x select 11; + _needNear = _x select 12; + _parts = _x select 13; + _condition = _x select 14; + { + DZE_DEPLOYABLES set [count DZE_DEPLOYABLES,[_class,_distance,_packDist,_damage,_packOthers,_clearCargo,_clearAmmo,_permanent,_requirePlot,_enableSim,_road,_x,_needNear,_parts,_condition]]; + } forEach _deployables; +} forEach DZE_DEPLOYABLES_CONFIG; + +if (isServer) exitWith { + diag_log "Deploy Anything: adding deployables to safe vehicle list..."; + { + local _classname = _forEachIndex call getDeployableClass; + DZE_safeVehicle = DZE_safeVehicle + [_classname]; + if (_forEachIndex call getPermanent && (!(_classname isKindof "AllVehicles") || (_classname isKindOf "StaticWeapon"))) then { + DayZ_SafeObjects set [count DayZ_SafeObjects,_classname]; + }; + } forEach DZE_DEPLOYABLES; +}; + +[] spawn { + if (!isDedicated && {isNil "DZE_CLICK_ACTIONS"}) exitWith { + diag_log "Deploy Anything: ERROR -- Click Actions Handler missing!"; + }; + + { + DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [[(_forEachIndex call getDeployableKitClass),format["Deploy %1",(_forEachIndex call getDeployableDisplay)],format["%1 execVM 'scripts\deployAnything\deploy.sqf';",_forEachIndex],(_forEachIndex call getDeployableCondition)]]; + } forEach DZE_DEPLOYABLES; + DZE_DEPLOYING = false; + DZE_PACKING = false; + + DZE_COLOR_PRIMARY = [(51/255),(181/255),(229/255),1]; + DZE_COLOR_SUCCESS = [(153/255),(204/255),0,1]; + DZE_COLOR_DANGER = [1,(68/255),(68/255),1]; + + diag_log "Deploy Anything: waiting for login..."; + waitUntil{!isNil "Dayz_loginCompleted"}; + + [] spawn { + waitUntil {sm_done;}; + { + if (parseNumber(_x getVariable["CharacterID","0"]) > 500000) then { + [_x,false] call local_lockUnlock; + }; + } forEach vehicles; + }; + + while {true} do { + if (!isNull player) then { + { + private ["_cursorTarget"]; + _cursorTarget = cursorTarget; + if (!(isNull _cursorTarget) + && {_forEachIndex call getDeployablePackAny} + && {typeOf _cursorTarget == (_forEachIndex call getDeployableClass)} + && {call fnc_can_do} + && {(((_cursorTarget call fnc_get_temp_deployable_id) != "nil") || ((_cursorTarget call fnc_get_perm_deployable_id) != "nil"))} + && {( + ((_cursorTarget call fnc_get_perm_deployable_id) == (call fnc_perm_deployable_id)) + || ((_cursorTarget call fnc_get_temp_deployable_id) == (call fnc_temp_deployable_id)) + || (_forEachIndex call getDeployablePackOthers) + || ((getPlayerUID player) in DZE_DEPLOYABLE_ADMINS) + )} + && {(player distance _cursorTarget) < (_forEachIndex call getDeployablePackDistance)}) then { + if ((_forEachIndex call getActionId) < 0) then { + [_forEachIndex,player addaction["" + format["Pack %1",(_forEachIndex call getDeployableDisplay)] + "","scripts\deployAnything\pack.sqf",[_forEachIndex,_cursorTarget],0,false,true]] call setActionId; + }; + } else { + player removeAction (_forEachIndex call getActionId); + [_forEachIndex,-1] call setActionId; + }; + } forEach DZE_DEPLOYABLES; + }; + uiSleep 2.5; + }; + +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/pack.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/pack.sqf new file mode 100755 index 0000000..5c87ad7 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/pack.sqf @@ -0,0 +1,60 @@ +private["_isPackingLocked","_lastPackTime","_exitWith","_deployable","_cursorTarget","_deployableName"]; + +_exitWith = "nil"; +_deployable = (_this select 3) select 0; +_cursorTarget = (_this select 3) select 1; +_lastPackTime = _cursorTarget getVariable["lastPackTime",diag_tickTime - 11]; +_isPackingLocked = diag_tickTime - _lastPackTime < 10; +_deployableName = _deployable call getDeployableDisplay; + +{ + if (_x select 0) exitWith {_exitWith = (_x select 1);}; +} forEach [ + [(dayz_playerUID in DZE_DEPLOYABLE_ADMINS),"admin"], + [!(call fnc_can_do),format["You can't pack your %1 right now.",_deployableName]], + [(player getVariable["inCombat",false]),format["Can't pack a %1 while in combat!",_deployableName]], + [(damage cursorTarget > (_deployable call getDamageLimit)),format["The %1 must be under %2 percent damaged to pack!",_deployableName,(_deployable call getDamageLimit) * 100]], + [_isPackingLocked,format["Someone just tried to pack that %1! Try again in a few seconds.",_deployableName]], + [DZE_PACKING,"You are already packing something!"], + [DZE_DEPLOYING,"You are already building something!"] +]; + +if (_exitWith != "nil" && {_exitWith != "admin"}) exitWith { + taskHint [_exitWith, DZE_COLOR_DANGER, "taskFailed"]; +}; + +_cursorTarget setVariable["lastPackTime",diag_tickTime,true]; +DZE_PACKING = true; + +_exitWith = [ + ["dayz_playerUID in DZE_DEPLOYABLE_ADMINS","admin"], + ["r_interrupt",format["Packing %1 interrupted!",_deployableName]], + ["(player getVariable['inCombat',false])",format["You can't pack your %1 while in combat!",_deployableName]] +] call fnc_bike_crafting_animation; + +if (_exitWith != "nil" && {_exitWith != "admin"}) exitWith { + DZE_PACKING = false; + taskHint [_exitWith, DZE_COLOR_DANGER, "taskFailed"]; +}; + +{ + if (isClass(configFile >> "CfgWeapons" >> _x)) then { + player addWeapon _x; + }; + if (isClass(configFile >> "CfgMagazines" >> _x)) then { + player addMagazine _x; + }; +} forEach (_deployable call getDeployableParts); + +if (_deployable call getPermanent) then { + PVDZ_obj_Destroy = [_cursorTarget getVariable["ObjectID","0"],_cursorTarget getVariable["ObjectUID","0"],player,_cursorTarget,dayz_authKey]; + publicVariableServer "PVDZ_obj_Destroy"; +} else { + deleteVehicle _cursorTarget; +}; + +player removeAction (_deployable call getActionId); +[_deployable,-1] call setActionId; +DZE_PACKING = false; + +taskHint [format["You have packed your %1 back into your %2.",_deployableName,(_deployable call getDeployableKitDisplay)], DZE_COLOR_PRIMARY, "taskDone"]; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/player_deploy.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/player_deploy.sqf new file mode 100755 index 0000000..a2e61af --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/player_deploy.sqf @@ -0,0 +1,463 @@ +/* + DayZ Base Building + Made for DayZ Epoch please ask permission to use/edit/distrubute email vbawol@veteranbastards.com. +*/ +private ["_vector","_IsNearPlot","_abort","_animState","_buildables","_buildcheck","_canBuild","_cancel","_classname","_classnametmp","_counter","_dir","_distance","_exitWith","_finished","_friendlies","_hasbuilditem","_hasrequireditem","_hastoolweapon","_index","_inVehicle","_isAllowedUnderGround","_isMedic","_isNear","_isOk","_isfriendly","_isowner","_limit","_location","_location1","_location2","_message","_missing","_nearestPole","_needNear","_needText","_objHDiff","_object","_offset","_onLadder","_ownerID","_plotcheck","_position","_proceed","_reason","_requireplot","_rotate","_started","_text","_tmpbuilt","_vehicle","_zheightchanged","_zheightdirection","_havePad","_heliPad","_charID"]; + +if (dayz_actionInProgress) exitWith {localize "str_epoch_player_40" call dayz_rollingMessages;}; +dayz_actionInProgress = true; + +_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1; +_cancel = false; +_reason = ""; + +_vehicle = vehicle player; +_inVehicle = (_vehicle != player); + +DZE_Q = false; +DZE_Z = false; + +DZE_Q_alt = false; +DZE_Z_alt = false; + +DZE_Q_ctrl = false; +DZE_Z_ctrl = false; + +DZE_5 = false; +DZE_4 = false; +DZE_6 = false; + +DZE_cancelBuilding = false; + +call gear_ui_init; +closeDialog 1; + +if (dayz_isSwimming) exitWith {dayz_actionInProgress = false; localize "str_player_26" call dayz_rollingMessages;}; +if (_inVehicle) exitWith {dayz_actionInProgress = false; localize "str_epoch_player_42" call dayz_rollingMessages;}; +if (_onLadder) exitWith {dayz_actionInProgress = false; localize "str_player_21" call dayz_rollingMessages;}; +if (player getVariable["combattimeout",0] >= diag_tickTime) exitWith {dayz_actionInProgress = false; localize "str_epoch_player_43" call dayz_rollingMessages;}; + +_abort = false; +_reason = ""; + +_index = _this call getDeployableIndex; +_needNear = _index call getDeployableNeedNearBy; + +{ + switch (_x) do { + case "fire": { + _distance = 3; + _isNear = {inflamed _x} count (getPosATL player nearObjects _distance); + if (_isNear == 0) then { + _abort = true; + _reason = localize "STR_EPOCH_FIRE"; + }; + }; + case "workshop": { + _distance = 3; + _isNear = count (nearestObjects [player, ["Wooden_shed_DZ","WoodShack_DZ","WorkBench_DZ"], _distance]); + if (_isNear == 0) then { + _abort = true; + _reason = localize "STR_BLD_name_ItemWorkshop"; + }; + }; + case "fueltank": { + _distance = 30; + _isNear = count (nearestObjects [player, dayz_fuelsources, _distance]); + if (_isNear == 0) then { + _abort = true; + _reason = localize "STR_EPOCH_VEHUP_TNK"; + }; + }; + }; +} forEach _needNear; + +if (_abort) exitWith { + dayz_actionInProgress = false; + format[localize "str_epoch_player_135",_reason,_distance] call dayz_rollingMessages; +}; + +_classname = _index call getDeployableClass; +_classnametmp = _classname; +_text = _index call getDeployableDisplay; + +if (_index call getDeployableRequirePlot) then {_requireplot = 1;} else {_requireplot = 0;}; + +_isAllowedUnderGround = 1; +if (isNumber (configFile >> "CfgVehicles" >> _classname >> "nounderground")) then { + _isAllowedUnderGround = getNumber(configFile >> "CfgVehicles" >> _classname >> "nounderground"); +}; + +_offset = _index call getDeployableDistanceOffset; + +_distance = DZE_PlotPole select 0; +_needText = localize "str_epoch_player_246"; + +_canBuild = false; +_nearestPole = objNull; +_ownerID = 0; +_friendlies = []; + +_plotcheck = [player, false] call FNC_find_plots; +_distance = DZE_PlotPole select 0; + +_IsNearPlot = _plotcheck select 1; +_nearestPole = _plotcheck select 2; + +if (_IsNearPlot == 0) then { + if (_requireplot == 0) then { + _canBuild = true; + } else { + _exitWith = localize "STR_EPOCH_PLAYER_135"; + }; +} else { + if (_requireplot == 0) then { + _canBuild = true; + } else { + _ownerID = _nearestPole getVariable["CharacterID","0"]; + if (dayz_characterID == _ownerID) then { + _canBuild = true; + } else { + if (DZE_permanentPlot) then { + _buildcheck = [player, _nearestPole] call FNC_check_access; + _isowner = _buildcheck select 0; + _isfriendly = ((_buildcheck select 1) or (_buildcheck select 3)); + if (_isowner || _isfriendly) then { + _canBuild = true; + } else { + _exitWith = localize "STR_EPOCH_PLAYER_134"; + }; + } else { + _friendlies = player getVariable ["friendlyTo",[]]; + if (_ownerID in _friendlies) then { + _canBuild = true; + } else { + _exitWith = localize "STR_EPOCH_PLAYER_134"; + }; + }; + }; + }; +}; + +if (!_canBuild) exitWith {dayz_actionInProgress = false; format[_exitWith,_needText,_distance] call dayz_rollingMessages;}; + +_havePad = false; +if !(isNil "vg_list") then { + if (_className in vg_heliPads) then { + _heliPad = nearestObjects [player,vg_heliPads,vg_distance]; + if (count _heliPad > 0) then { + _havePad = true; + }; + }; +}; + +if (_havePad) exitWith { + dayz_actionInProgress = false; + systemChat "You already have a heli pad!"; +}; + +_missing = ""; +_hasrequireditem = true; + +_hastoolweapon = (_index call getDeployableKitClass) in ((weapons player) + (magazines player)); +if (!_hastoolweapon) then { _hasrequireditem = false; _missing = (_index call getDeployableKitDisplay); }; + +_hasbuilditem = [player,_index] call getHasDeployableParts; +if (!_hasbuilditem) exitWith {dayz_actionInProgress = false; format[localize "str_player_31",str (_index call getDeployableParts),"build"] call dayz_rollingMessages; }; + +if (!_hasrequireditem) exitWith {dayz_actionInProgress = false; format[localize "str_epoch_player_137",_missing] call dayz_rollingMessages; }; +if (_hasrequireditem) then { + + _dir = getdir player; + _location = getPos player; + _location = [(_location select 0)+8*sin(_dir),(_location select 1)+8*cos(_dir),0]; + + _isOk = true; + _location1 = getPosATL player; + + _object = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; + _object setVehicleLock "LOCKED"; + _object setVariable["ObjectUID","1",true]; + + _object attachTo [player,_offset]; + _object setDir _dir; + _position = getPosATL _object; + + [localize "str_epoch_player_45",1] call dayz_rollingMessages; + + _objHDiff = 0; + + while {_isOk} do { + + _zheightchanged = false; + _zheightdirection = ""; + _rotate = false; + + if (DZE_Q) then { + DZE_Q = false; + _zheightdirection = "up"; + _zheightchanged = true; + }; + if (DZE_Z) then { + DZE_Z = false; + _zheightdirection = "down"; + _zheightchanged = true; + }; + if (DZE_Q_alt) then { + DZE_Q_alt = false; + _zheightdirection = "up_alt"; + _zheightchanged = true; + }; + if (DZE_Z_alt) then { + DZE_Z_alt = false; + _zheightdirection = "down_alt"; + _zheightchanged = true; + }; + if (DZE_Q_ctrl) then { + DZE_Q_ctrl = false; + _zheightdirection = "up_ctrl"; + _zheightchanged = true; + }; + if (DZE_Z_ctrl) then { + DZE_Z_ctrl = false; + _zheightdirection = "down_ctrl"; + _zheightchanged = true; + }; + if (DZE_4) then { + _rotate = true; + DZE_4 = false; + + _dir = _dir + 30; + }; + if (DZE_6) then { + _rotate = true; + DZE_6 = false; + _dir = _dir - 30; + }; + + if (_rotate) then { + _object setDir _dir; + _object setPosATL _position; + }; + + if (_zheightchanged) then { + detach _object; + + _position = getPosATL _object; + + if (_zheightdirection == "up") then { + _position set [2,((_position select 2)+0.1)]; + _objHDiff = _objHDiff + 0.1; + }; + if (_zheightdirection == "down") then { + _position set [2,((_position select 2)-0.1)]; + _objHDiff = _objHDiff - 0.1; + }; + if (_zheightdirection == "up_alt") then { + _position set [2,((_position select 2)+1)]; + _objHDiff = _objHDiff + 1; + }; + if (_zheightdirection == "down_alt") then { + _position set [2,((_position select 2)-1)]; + _objHDiff = _objHDiff - 1; + }; + if (_zheightdirection == "up_ctrl") then { + _position set [2,((_position select 2)+0.01)]; + _objHDiff = _objHDiff + 0.01; + }; + if (_zheightdirection == "down_ctrl") then { + _position set [2,((_position select 2)-0.01)]; + _objHDiff = _objHDiff - 0.01; + }; + + if ((_isAllowedUnderGround == 0) && ((_position select 2) < 0)) then { + _position set [2,0]; + }; + _object setPosATL _position; + _object attachTo [player]; + _object setDir _dir; + }; + + uiSleep 0.5; + + _location2 = getPosATL player; + + if (DZE_5) exitWith { + _isOk = false; + _position = [_object] call FNC_GetPos; + detach _object; + _dir = getDir _object; + _vector = [(vectorDir _object),(vectorUp _object)]; + deleteVehicle _object; + }; + if (_location1 distance _location2 > DZE_buildMaxMoveDistance) exitWith { + _isOk = false; + _cancel = true; + _reason = format [localize "STR_EPOCH_BUILD_FAIL_MOVED",DZE_buildMaxMoveDistance]; + detach _object; + deleteVehicle _object; + }; + if (abs(_objHDiff) > DZE_buildMaxHeightDistance) exitWith { + _isOk = false; + _cancel = true; + _reason = format [localize "STR_EPOCH_BUILD_FAIL_HEIGHT",DZE_buildMaxHeightDistance]; + detach _object; + deleteVehicle _object; + }; + if (DZE_cancelBuilding) exitWith { + _isOk = false; + _cancel = true; + _reason = localize "STR_EPOCH_PLAYER_46"; + detach _object; + deleteVehicle _object; + }; + }; + + if (!(_index call getDeployableBuildOnRoad)) then {if (isOnRoad [_position select 0, _position select 1, 0]) then { _cancel = true; _reason = localize "STR_EPOCH_BUILD_FAIL_ROAD";};}; + + if (_classname isKindOf "MotorCycle") then { + if (count (nearestObjects [_position, ["Building","DZE_Housebase"], 5]) > 0) then { + _cancel = true; + _reason = format ["%1 can not be built near a wall/door",_text]; + }; + }; + + if (!_cancel) then { + _classname = _classnametmp; + + _tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; + _tmpbuilt setVehicleLock "LOCKED"; + + if (!(_index call getDeployableSimulation)) then { + _tmpbuilt enableSimulation false; + }; + _tmpbuilt setVariable ["ObjectUID", "1", true]; + + if (_index call getPermanent) then { + _tmpbuilt setVectorDirAndUp _vector; + } else { + _tmpbuilt setdir _dir; // setdir is incompatible with setVectorDirAndUp and should not be used together on the same object https://community.bistudio.com/wiki/setVectorDirAndUp + }; + + _location = _position; + + if ((_isAllowedUnderGround == 0) && ((_location select 2) < 0)) then { + _location set [2,0]; + }; + + _tmpbuilt setPosATL _location; + format[localize "str_epoch_player_138",_text] call dayz_rollingMessages; + _limit = 3; + + if (DZE_StaticConstructionCount > 0) then { + _limit = DZE_StaticConstructionCount; + } else { + if (isNumber (configFile >> "CfgVehicles" >> _classname >> "constructioncount")) then { + _limit = getNumber(configFile >> "CfgVehicles" >> _classname >> "constructioncount"); + }; + }; + + _isOk = true; + _proceed = false; + _counter = 0; + + while {_isOk} do { + ["Working",0,[100,15,10,0]] call dayz_NutritionSystem; + if !((getPlayerUID player) in DZE_DEPLOYABLE_ADMINS) then { + player playActionNow "Medic"; + [player,"repair",0,false,20] call dayz_zombieSpeak; + [player,20,true,(getPosATL player)] spawn player_alertZombies; + + r_interrupt = false; + r_doLoop = true; + _started = false; + _finished = false; + + while {r_doLoop} do { + _animState = animationState player; + _isMedic = ["medic",_animState] call fnc_inString; + if (_isMedic) then { + _started = true; + }; + if (_started && !_isMedic) then { + r_doLoop = false; + _finished = true; + }; + if (r_interrupt) then { + r_doLoop = false; + }; + if (DZE_cancelBuilding) exitWith { + r_doLoop = false; + }; + uiSleep 0.1; + }; + r_doLoop = false; + + } else { + _finished = true; + }; + + if (!_finished) exitWith { + _isOk = false; + _proceed = false; + }; + + if (_finished) then { + _counter = _counter + 1; + }; + format[localize "str_epoch_player_139",_text, _counter,_limit] call dayz_rollingMessages; + if (_counter == _limit) exitWith { + _isOk = false; + _proceed = true; + }; + }; + + if (_proceed) then { + if ([player,_index] call getHasDeployableParts) then { + [player,_index] call removeDeployableParts; + [format[localize "str_build_01",_text],1] call dayz_rollingMessages; + _tmpbuilt setVariable ["OEMPos",_location,true]; + if (_index call getPermanent) then { + _charID = dayz_characterID; + _tmpbuilt setVariable ["CharacterID",_charID,true]; + PVDZ_obj_Publish = [_charID,_tmpbuilt,[_dir,_position,dayz_playerUID,_vector],[],player,dayz_authKey]; + publicVariableServer "PVDZ_obj_Publish"; + }; + if (_index call getClearCargo) then { + clearWeaponCargoGlobal _tmpbuilt; + clearMagazineCargoGlobal _tmpbuilt; + }; + if (_index call getDeployableClearAmmo) then { + _tmpbuilt setVehicleAmmo 0; + }; + + _tmpbuilt call fnc_set_temp_deployable_id; + player reveal _tmpbuilt; + _tmpbuilt call fnc_veh_ResetEH; + + // for non JIP users this should make sure everyone has eventhandlers for vehicles. + PVDZE_veh_Init = _tmpbuilt; + publicVariable "PVDZE_veh_Init"; + + _tmpbuilt setVehicleLock "UNLOCKED"; + DZE_DEPLOYING_SUCCESSFUL = true; + } else { + deleteVehicle _tmpbuilt; + localize "str_epoch_player_46" call dayz_rollingMessages; + }; + } else { + r_interrupt = false; + if (vehicle player == player) then { + [objNull, player, rSwitchMove,""] call RE; + player playActionNow "stop"; + }; + deleteVehicle _tmpbuilt; + + localize "str_epoch_player_46" call dayz_rollingMessages; + }; + } else { + format[localize "str_epoch_player_47",_text,_reason] call dayz_rollingMessages; + }; +}; + +dayz_actionInProgress = false; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/wrapper.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/wrapper.sqf new file mode 100755 index 0000000..c87a44e --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/deployAnything/wrapper.sqf @@ -0,0 +1,180 @@ +/* this sqf file is used to manipulate the deployable array to work more like a class than an array */ + +/* this gets the item that makes the deployable */ +getDeployableKitClass = { + (DZE_DEPLOYABLES select _this) select 0 +}; + +/* this gets the distance of the deployable */ +getDeployableDistanceOffset = { + (DZE_DEPLOYABLES select _this) select 1 +}; + +/* this gets the distance a player must be to pack the deployable back up */ +getDeployablePackDistance = { + (DZE_DEPLOYABLES select _this) select 2 +}; + +/* if the damage is higher than this, it can't be packed again */ +getDamageLimit = { + (DZE_DEPLOYABLES select _this) select 3 +}; + +/* should players be allowed to pack deployables placed by others? */ +getDeployablePackOthers = { + (DZE_DEPLOYABLES select _this) select 4 +}; + +/* checks if cargo should be cleared for this item */ +getClearCargo = { + (DZE_DEPLOYABLES select _this) select 5 +}; + +/* should vehicle ammo be cleared when spawned? */ +getDeployableClearAmmo = { + (DZE_DEPLOYABLES select _this) select 6 +}; + +/* should the vehicle be saved permanently to the database */ +getPermanent = { + (DZE_DEPLOYABLES select _this) select 7 +}; + +/* does the deployable require a plot to build ? */ +getDeployableRequirePlot = { + (DZE_DEPLOYABLES select _this) select 8 +}; + +/* does the object have simulation enabled? */ +getDeployableSimulation = { + (DZE_DEPLOYABLES select _this) select 9 +}; + +/* can the object be built on a road? */ +getDeployableBuildOnRoad = { + (DZE_DEPLOYABLES select _this) select 10 +}; + +/* this gets the class of the deployable */ +getDeployableClass = { + (DZE_DEPLOYABLES select _this) select 11 +}; + +getDeployableNeedNearBy = { + (DZE_DEPLOYABLES select _this) select 12 +}; + +/* the parts required to make this item */ +getDeployableParts = { + (DZE_DEPLOYABLES select _this) select 13 +}; + +/* what condition is used to determine whether or not the player sees the option? */ +getDeployableCondition = { + (DZE_DEPLOYABLES select _this) select 14 +}; + +/* should players be allowed to pack deployables at all? */ +getDeployablePackAny = { + ((_this call getDamageLimit) >= 0) || (!(isNull player) && {dayz_playerUID in DZE_DEPLOYABLE_ADMINS}); +}; + +/* this gets what type of item the kit is*/ +getDeployableKitType = { + private["_return"]; + if(isClass(configFile >> "CfgWeapons" >> (_this call getDeployableKitClass))) then { + _return = "CfgWeapons"; + } else { + _return = "CfgMagazines"; + }; + _return +}; + +/* this is a wrapper function for getting the value of the scroll action */ +getActionId = { + call compile format[" + if (isNil 'DZE_ACTION_DEPLOYABLE_PACK_%1') then { + DZE_ACTION_DEPLOYABLE_PACK_%1 = -1; + }; + DZE_ACTION_DEPLOYABLE_PACK_%1 + ",_this]; +}; + +/* this is a wrapper function for setting the value of the scroll action */ +setActionId = { + call compile format["DZE_ACTION_DEPLOYABLE_PACK_%1 = %2;",_this select 0,_this select 1]; +}; + +/* this gets the display name of the kit or falls back to class name if unsuccessful */ +getDeployableKitDisplay = { + private["_display"]; + _display = getText (configFile >> (_this call getDeployableKitType) >> (_this call getDeployableKitClass) >> "displayName"); + if((isNil "_display")||_display == "") then { + _display = (_this call getDeployableKitClass); + }; + _display +}; + +/* this gets the display name of the deployable or falls back to class name if unsuccessful */ +getDeployableDisplay = { + private["_display","_class"]; + _class = (_this call getDeployableClass); + _display = getText (configFile >> "CfgVehicles" >> _class >> "displayName"); + if((isNil "_display")||_display == "") then { + _display = _class; + }; + { + if(_class == (_x select 0)) then { + _display = (_x select 1); + }; + } forEach DZE_DEPLOYABLE_NAME_MAP; + _display +}; + +/* looks up the index of a deployable based on the class */ +getDeployableIndex = { + private["_return"]; + _return = -1; + { + if(_this == (_forEachIndex call getDeployableClass)) then { + _return = _forEachIndex; + } + } forEach DZE_DEPLOYABLES; + _return +}; + +/* check if player has required parts to build the item */ +/* [player,_partIndex] call getHasDeployableParts; */ +getHasDeployableParts = { + private["_player","_weapons","_parts","_item","_params","_index","_part","_return","_inventory"]; + _params = _this; + _player = _params select 0; + _index = _params select 1; + _parts = _index call getDeployableParts; + _inventory = (weapons _player) + (magazines _player); + _return = true; + { + _part = _x; + if(!(_part in _inventory)) exitWith {_return = false;}; + { + _item = _x; + if(_item == _part) exitWith {_inventory set [_forEachIndex,"nil"];}; + } forEach _inventory; + } forEach _parts; + _return +}; + +/* remove this item's parts from the players inventory */ +/* [player,_partIndex] call removeDeployableParts; */ +removeDeployableParts = { + private["_player","_params","_index","_parts","_part"]; + _params = _this; + _player = _params select 0; + _index = _params select 1; + _parts = _index call getDeployableParts; + { + _part = _x; + _player removeWeapon _part; + _player removeMagazine _part; + } forEach _parts; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/locateVehicle.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/locateVehicle.sqf new file mode 100755 index 0000000..c689aa4 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/locateVehicle.sqf @@ -0,0 +1,57 @@ +/* + locateVehicle by salival (https://github.com/oiad) +*/ + +if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; +dayz_actionInProgress = true; + +private ["_characterID","_found","_i","_keyID","_keyIDS","_keyList","_keyName","_keyNames","_locateMarkerDelete","_locateMarkerTime","_marker","_name","_position","_vehicle"]; + +_keyList = call epoch_tempKeys; +_keyIDS = _keyList select 0; +_keyNames = _keyList select 1; + +_locateMarkerDelete = true; // Delete markers after a certain amount of time to avoid cluttering the map? +_locateMarkerTime = 60; // Time in seconds before markers are deleted if enabled above. + +_i = 0; +for "_i" from 0 to 60 do {deleteMarkerLocal ("vehicleMarker"+ (str _i));}; + +if (count _keyIDS < 1) exitWith {dayz_actionInProgress = false; systemChat localize "STR_CL_LV_NO_KEYS";}; + +_i = 0; +{ + _keyID = parseNumber (_keyIDS select _forEachIndex); + _keyName = _keyNames select _forEachIndex; + _found = 0; + { + _vehicle = typeOf _x; + _characterID = parseNumber (_x getVariable ["CharacterID","0"]); + if ((_characterID == _keyID) && {_vehicle isKindOf "Air" || {_vehicle isKindOf "LandVehicle"} || {_vehicle isKindOf "Ship"}}) then { + _found = _found +1; + _i = _i +1; + _position = getPos _x; + _name = getText (configFile >> "CfgVehicles" >> _vehicle >> "displayName"); + _marker = createMarkerLocal ["vehicleMarker" + (str _i),[_position select 0,_position select 1]]; + _marker setMarkerShapeLocal "ICON"; + _marker setMarkerTypeLocal "DOT"; + _marker setMarkerColorLocal "ColorOrange"; + _marker setMarkerSizeLocal [1.0, 1.0]; + _marker setMarkerTextLocal format ["%1",_name]; + systemChat format[localize "STR_CL_LV_BELONGS",_keyName,_name,if (!alive _x) then {toLower (format [" (%1)",localize "str_artdlg_destroyed"])} else {""}]; + }; + } forEach vehicles; + if (_found == 0) then {systemChat format[localize "STR_CL_LV_NO_VEHICLES",_keyName]}; +} forEach _keyIDS; + +if (_i > 0) then { + systemChat format[localize "STR_CL_LV_FOUND",_i]; + if (_locateMarkerDelete) then { + _locateMarkerTime spawn { + uiSleep _this; + for "_i" from 0 to 60 do {deleteMarkerLocal ("vehicleMarker"+ (str _i));}; + }; + }; +}; + +dayz_actionInProgress = false; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/marker_manager.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/marker_manager.sqf new file mode 100755 index 0000000..a33236d --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/marker_manager.sqf @@ -0,0 +1,116 @@ +/* + DayZ Epoch Client-Side Marker Manager + Author: JasonTM + * Manages map markers locally on each client + * Markers are updated on demand instead of on a server side loop + * Localizes marker text + * JIP: request and create all server side markers + * Mission Start: create the markers for the mission + * Mission Update: update the single marker with text. ex. A.I. counter. + * Mission End: remove all markers + + [ + position, - 2D or 3D array + createMarker, - String + setMarkerColor, - String + setMarkerType, - String + setMarkerShape, - String + setMarkerBrush, - String + setMarkerSize, - 2D array + setMarkerText, - Array of Strings and Scalar - can be localized. + setMarkerAlpha - Scalar + ] +*/ + +fnc_localizeMarkerText = { + local _text = _this; + { + local _index = _forEachIndex; + if (typeName _x == "ARRAY") then { + { + if (typeName _x == "STRING") then { + if (["STR_",_x] call fnc_inString) then { + (_text select _index) set [_forEachIndex, localize _x]; + }; + }; + } forEach _x; + _text set [_index, format _x]; + } else { + if (typeName _x == "STRING") then { + if (["STR_",_x] call fnc_inString) then { + _text set [_index, localize _x]; + }; + }; + }; + } forEach _text; + _text = format _text; + _text +}; + +fnc_markerManager = { + local _option = _this select 0; + local _args = _this select 1; // Always an array except for remove single marker option. + + if (_option == "textSingle") exitWith { + (_args select 0) setMarkerTextLocal ((_args select 1) call fnc_localizeMarkerText); + }; + + if (_option == "removeSingle") exitWith { + deleteMarkerLocal _args; + }; + + if (_option == "createSingle") exitWith { + deleteMarkerLocal (_args select 1); // delete marker if it exits. + local _marker = createMarkerLocal [(_args select 1),(_args select 0)]; + if ((_args select 2) != "") then {_marker setMarkerColorLocal (_args select 2);}; + if ((_args select 3) != "") then {_marker setMarkerTypeLocal (_args select 3);}; + if ((_args select 4) != "") then {_marker setMarkerShapeLocal (_args select 4);}; + if ((_args select 5) != "") then {_marker setMarkerBrushLocal (_args select 5);}; + if ( count (_args select 6) > 0) then {_marker setMarkerSizeLocal (_args select 6);}; + if ( count (_args select 7) > 0) then {_marker setMarkerTextLocal ((_args select 7) call fnc_localizeMarkerText);}; + if ((_args select 8) > 0) then {_marker setMarkerAlphaLocal (_args select 8);}; + }; + + if (_option == "start") exitWith { + { + if (typeName _x == "ARRAY") then { + local _marker = createMarkerLocal [(_x select 1),(_x select 0)]; + if ((_x select 2) != "") then {_marker setMarkerColorLocal (_x select 2);}; + if ((_x select 3) != "") then {_marker setMarkerTypeLocal (_x select 3);}; + if ((_x select 4) != "") then {_marker setMarkerShapeLocal (_x select 4);}; + if ((_x select 5) != "") then {_marker setMarkerBrushLocal (_x select 5);}; + if (count (_x select 6) > 0) then {_marker setMarkerSizeLocal (_x select 6);}; + if ( count (_x select 7) > 0) then {_marker setMarkerTextLocal ((_x select 7) call fnc_localizeMarkerText);}; + if ((_x select 8) > 0) then {_marker setMarkerAlphaLocal (_x select 8);}; + }; + } count _args; + }; + + if (_option == "end") exitWith { + { + deleteMarkerLocal _x; + } count _args; + }; + + if (_option == "JIP") exitWith { + for "_i" from 0 to ((count _args) - 1) do { + local _current = _args select _i; + if (typeName _current == "ARRAY") then { + { + if (typeName _x == "ARRAY") then { + local _marker = createMarkerLocal [(_x select 1),(_x select 0)]; + if ((_x select 2) != "") then {_marker setMarkerColorLocal (_x select 2);}; + if ((_x select 3) != "") then {_marker setMarkerTypeLocal (_x select 3);}; + if ((_x select 4) != "") then {_marker setMarkerShapeLocal (_x select 4);}; + if ((_x select 5) != "") then {_marker setMarkerBrushLocal (_x select 5);}; + if (count (_x select 6) > 0) then {_marker setMarkerSizeLocal (_x select 6);}; + if ( count (_x select 7) > 0) then {_marker setMarkerTextLocal ((_x select 7) call fnc_localizeMarkerText);}; + if ((_x select 8) > 0) then {_marker setMarkerAlphaLocal (_x select 8);}; + }; + } count _current; + }; + }; + }; +}; + +"PVDZ_ServerMarkerSend" addPublicVariableEventHandler {(_this select 1) call fnc_markerManager;}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/remoteVehicle/remoteVehicle.hpp b/MPMissions/DayZ_Epoch_24.Napf/scripts/remoteVehicle/remoteVehicle.hpp new file mode 100755 index 0000000..cf89bed --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/remoteVehicle/remoteVehicle.hpp @@ -0,0 +1,304 @@ +class rv_RscText { + idc = -1; + x = 0; + y = 0; + h = 0.037; + w = 0.3; + type = 0; + style = 0; + shadow = 2; + colorShadow[] = {0, 0, 0, 0.5}; + font = "Zeppelin32"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + colorText[] = {1, 1, 1, 1.0}; + colorBackground[] = {0, 0, 0, 0}; + linespacing = 1; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; +}; + +class rv_RscTitle : rv_RscText { + idc = -1; + style = 0; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {0.95, 0.95, 0.95, 1}; +}; + +class rv_RscShortcutButton { + idc = -1; + style = 0; + default = 0; + shadow = 2; + w = 0.183825; + h = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)"; + color[] = {1,1,1,1.0}; + colorFocused[] = {1,1,1,1.0}; + color2[] = {0.95,0.95,0.95,1}; + colorDisabled[] = {1,1,1,0.25}; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackgroundFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackground2[] = {1,1,1,1}; + animTextureDefault = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureNormal = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureDisabled = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureOver = "gza\scripts\gold\gui\over_ca.paa"; + animTextureFocused = "gza\scripts\gold\gui\focus_ca.paa"; + animTexturePressed = "gza\scripts\gold\gui\down_ca.paa"; + periodFocus = 1.2; + periodOver = 0.8; + class HitZone { + left = 0.0; + top = 0.0; + right = 0.0; + bottom = 0.0; + }; + class ShortcutPos { + left = 0; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + }; + class TextPos { + left = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + period = 0.4; + font = "Zeppelin32"; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + action = ""; + class Attributes { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + shadow = "true"; + }; + class AttributesImage { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + }; + soundPush[] = { "", 0, 1 }; + soundEnter[] ={ "", 0, 1 }; + soundClick[] ={ "", 0, 1 }; + soundEscape[] ={ "", 0, 1 }; + sound[] ={ "", 0, 1 }; +}; + +class rv_RscButtonMenu : rv_RscShortcutButton { + idc = -1; + type = 16; + style = "0x02 + 0xC0"; + default = 0; + shadow = 0; + x = 0; + y = 0; + w = 0.095589; + h = 0.039216; + animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; + colorBackground[] = {0,0,0,0.8}; + colorBackgroundFocused[] = {1,1,1,1}; + colorBackground2[] = {0.75,0.75,0.75,1}; + color[] = {1,1,1,1}; + colorFocused[] = {0,0,0,1}; + color2[] = {0,0,0,1}; + colorText[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.25}; + period = 1.2; + periodFocus = 1.2; + periodOver = 1.2; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; + class TextPos { + left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + class Attributes { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "center"; + shadow = "false"; + }; + class ShortcutPos { + left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005"; + top = 0.005; + w = 0.0225; + h = 0.03; + }; + textureNoShortcut = ""; +}; + +class rv_RscListBox { + style = 16; + idc = -1; + type = 5; + w = 0.275; + h = 0.04; + font = "Zeppelin32"; + colorSelect[] = {0.11,0.686,0.831,1}; + colorText[] = {1, 1, 1, 1}; + colorBackground[] = {0.28,0.28,0.28,0.28}; + colorSelect2[] = {1, 1, 1, 1}; + colorSelectBackground[] = {0.95, 0.95, 0.95, 0.5}; + colorSelectBackground2[] = {1, 1, 1, 0.5}; + colorScrollbar[] = {0.2, 0.2, 0.2, 1}; + arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa"; + arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa"; + wholeHeight = 0.45; + rowHeight = 0.04; + color[] = {0.7, 0.7, 0.7, 1}; + colorActive[] = {0,0,0,1}; + colorDisabled[] = {0,0,0,0.3}; + sizeEx = 0.023; + maxHistoryDelay = 1; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; + class ScrollBar { + color[] = {1, 1, 1, 0.6}; + colorActive[] = {1, 1, 1, 1}; + colorDisabled[] = {1, 1, 1, 0.3}; + thumb = "\ca\ui\data\igui_scrollbar_thumb_ca.paa"; + arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa"; + arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa"; + border = "\ca\ui\data\igui_border_scroll_ca.paa"; + }; + soundPush[] = { "", 0, 1 }; + soundEnter[] ={ "", 0, 1 }; + soundClick[] ={ "", 0, 1 }; + soundEscape[] ={ "", 0, 1 }; + sound[] ={ "", 0, 1 }; + soundSelect[] = { "", 0, 1 }; +}; + +class rv_RscStructuredText { + type = 13; + style = 0; + x = 0; + y = 0; + h = 0.035; + w = 0.1; + text = ""; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {1, 1, 1, 1.0}; + shadow = 1; + class Attributes { + font = "Zeppelin32"; + color = "#ffffff"; + align = "left"; + shadow = 1; + }; +}; + +class remoteVehicle { + idd = 8800; + name="remoteVehicle"; + onLoad = "uiNamespace setVariable ['rv_dialog', _this select 0]"; + movingEnabled = 0; + enableSimulation = 1; + + class controlsBackground { + class rv_RscTitleBackground : rv_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class MainBackground : rv_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.7 - (22 / 250); + }; + + class VehicleInfoHeader : rv_RscText { + idc = 8830; + text = $STR_CL_RV_VEHICLE_INFO; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.47; y = 0.26; + w = 0.42; + h = (1 / 25); + }; + + class CloseBtn : rv_RscButtonMenu { + idc = -1; + text = $STR_UI_CLOSE; + onButtonClick = "closeDialog 2;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; + + class controls { + class Title : rv_RscTitle { + idc = 8801; + text = ""; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class VehicleList : rv_RscListBox { + idc = 8802; + text = ""; + sizeEx = 0.04; + colorBackground[] = {0.1,0.1,0.1,0.9}; + onLBSelChanged = "[_this] call rv_vehicleInfo;"; + x = 0.11; y = 0.302; + w = 0.35; h = 0.49; + }; + + class VehicleTitleBox : rv_RscText { + idc = 8804; + text = $STR_CL_RV_VEHICLE_LIST; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.11; y = 0.26; + w = 0.35; + h = (1 / 25); + }; + + class selectVehicle : rv_RscButtonMenu { + idc = 8850; + text = $STR_CL_RV_SELECT_VEHICLE; + onButtonClick = "rv_isOk = true;closeDialog 0;"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 20); + h = (1 / 25); + }; + + class vehicleInfomationList : rv_RscStructuredText { + idc = 8803; + text = ""; + sizeEx = 0.035; + x = 0.47; y = 0.3; + w = 0.41; h = 0.5; + }; + }; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/remoteVehicle/remoteVehicle.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/remoteVehicle/remoteVehicle.sqf new file mode 100755 index 0000000..db265ba --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/remoteVehicle/remoteVehicle.sqf @@ -0,0 +1,157 @@ +/* + Remote vehicle script by salival (https://github.com/oiad) +*/ + +private ["_characterID","_checkDistance","_display","_distance","_fuel","_group","_vehicleFound","_keyID","_keyName","_option","_time","_vehicle","_vehicleType","_index","_control","_keyDisplay","_exit"]; + +if (isNil "rv_init") then { + rv_vehicleInfo = compile preprocessFileLineNumbers "scripts\remoteVehicle\vehicleInfo.sqf"; + rv_init = true; +}; + +if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; +dayz_actionInProgress = true; + +_keyName = _this select 0; +_option = _this select 1; + +_checkDistance = true; // Check to see if the player is too far away from the remote +_distance = 300; // Maximum distance the player can be away from the vehicle to be able to use the remote. + +disableSerialization; + +_exit = { + dayz_actionInProgress = false; + rv_vehicleList = nil; + rv_selected = nil; +}; + +_display = findDisplay 106; +_display closeDisplay 0; + +_keyList = call epoch_tempKeys; +_keyID = 0; + +_keyID = (_keyList select 0) select ((_keyList select 2) find _keyName); +_foundPos = (_keyList select 0) find _keyID; + +if (_foundPos >= 0) then { + _keyDisplay = (_keyList select 1) select _foundPos; +}; + +if (_foundPos == -1) exitWith {systemChat localize "STR_CL_RV_NO_KEYS"; call _exit;}; + +rv_vehicleList = []; +_vehicleFound = false; +{ + _vehicleType = typeOf _x; + _characterID = _x getVariable ["CharacterID","0"]; + if ((_characterID == _keyID) && {_vehicleType isKindOf "Air" || _vehicleType isKindOf "LandVehicle" || _vehicleType isKindOf "Ship"}) then { + _vehicleFound = true; + rv_vehicleList set [count rv_vehicleList,_x]; + }; +} count vehicles; + +if (count rv_vehicleList > 1) then { + rv_isOk = false; + + createDialog "remoteVehicle"; + + _display = uiNamespace getVariable["rv_dialog", displayNull]; + _display displayCtrl 8801 ctrlSetText(format[localize "STR_CL_RV_TITLE",_keyDisplay]); + + _control = ((findDisplay 8800) displayCtrl 8802); + lbClear _control; + { + _control lbAdd getText(configFile >> "CfgVehicles" >> typeOf _x >> "displayName"); + if (!isNull DZE_myVehicle && {local DZE_myVehicle} && {alive DZE_myVehicle} && {DZE_myVehicle == _x}) then { + _control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]]; + }; + } count rv_vehicleList; + _control lbSetCurSel 0; + + waitUntil {!dialog}; + +} else { + rv_selected = rv_vehicleList select 0; + rv_isOk = true; +}; + +if (!rv_isOk) exitWith {call _exit;}; + +if (!_vehicleFound) exitWith {systemChat localize "STR_CL_RV_NO_VEHICLES"; call _exit;}; + +_vehicleType = typeOf rv_selected; +_displayName = getText(configFile >> "CfgVehicles" >> _vehicleType >> "displayName"); + +if (!alive rv_selected) exitWith {systemChat localize "STR_CL_RV_DESTROYED"; call _exit;}; +if (_checkDistance && {(player distance rv_selected) >= _distance}) exitWith {format[localize "STR_CL_RV_RANGE_FAIL",_displayName] call dayz_rollingMessages; call _exit;}; + +if (_option == 1) then { + _group = units group player; + + systemChat format[localize "STR_CL_RV_EJECT",_displayName]; + { + if !(_x in _group) then { + _x action ["eject",rv_selected]; + systemChat format[localize "STR_CL_RV_EJECT_PLAYER",name _x]; + }; + } forEach (crew rv_selected); +}; + +if (_option == 2) then { + systemChat format[localize "STR_CL_RV_ENGINE",if (isEngineOn rv_selected) then {localize "strwfoff"} else {localize "strwfon"},_displayName]; + if (isEngineOn rv_selected) then { + if (rv_selected isKindOf "Helicopter") then { // This is needed because dayz_engineSwitch won't turn off the engine for a helicopter. + _fuel = fuel rv_selected; + rv_selected setFuel 0; + player action ["engineOff",rv_selected]; + uiSleep 4.5; + rv_selected setFuel _fuel; + } else { + [rv_selected,false] call dayz_engineSwitch; + }; + } else { + [rv_selected,true] call dayz_engineSwitch; + }; +}; + +if (_option == 3) then { + systemChat format[localize "STR_BLD_UNLOCKED",_displayName]; + PVDZE_veh_Lock = [rv_selected,false]; + _time = diag_tickTime; + + if (local rv_selected) then { + PVDZE_veh_Lock call local_lockUnlock; + } else { + publicVariable "PVDZE_veh_Lock"; + waitUntil {uiSleep 0.1;(!locked rv_selected or (diag_tickTime - _time > 4))}; + }; +}; + +if (_option == 4) then { + systemChat format[localize "STR_EPOCH_PLAYER_117",_displayName]; + PVDZE_veh_Lock = [rv_selected,true]; + _time = diag_tickTime; + + if (local rv_selected) then { + PVDZE_veh_Lock call local_lockUnlock; + } else { + publicVariable "PVDZE_veh_Lock"; + waitUntil {uiSleep 0.1;(locked rv_selected or (diag_tickTime - _time > 4))}; + }; +}; + +if (_option == 5) then { + if !(rv_selected getVariable["vehicleLights",false]) then { + player action ["lightOn", rv_selected]; + systemChat format[localize "STR_CL_RV_LIGHTS",localize "strwfon",_vehicleType]; + rv_selected setVariable ["vehicleLights",true,true]; + } else { + player action ["lightOff", rv_selected]; + systemChat format[localize "STR_CL_RV_LIGHTS",localize "strwfoff",_vehicleType]; + rv_selected setVariable ["vehicleLights",false,true]; + }; +}; + +call _exit; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/remoteVehicle/vehicleInfo.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/remoteVehicle/vehicleInfo.sqf new file mode 100755 index 0000000..8fc6a23 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/remoteVehicle/vehicleInfo.sqf @@ -0,0 +1,54 @@ +private ["_backPackCount","_backPackCount_raw","_backPackSlots","_formattedText","_gearCount","_magazineCount","_magazineCount_raw","_magazineSlots","_name","_picture","_price","_text","_typeOf","_weaponSlots","_weaponsCount","_weaponsCount_raw","_control","_index"]; + +_gearCount = { + private ["_counter"]; + _counter = 0; + {_counter = _counter + _x;} count _this; + _counter +}; + +_control = (_this select 0) select 0; +_index = (_this select 0) select 1; + +rv_selected = rv_vehicleList select _index; +_typeOf = typeOf rv_selected; + +_weaponsCount_raw = getWeaponCargo rv_selected; +_magazineCount_raw = getMagazineCargo rv_selected; +_backPackCount_raw = getBackpackCargo rv_selected; + +_weaponSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxWeapons"); +_magazineSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxMagazines"); +_backPackSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportmaxbackpacks"); +_name = getText(configFile >> "CfgVehicles" >> _typeOf >> "displayName"); +_picture = getText(configFile >> 'CfgVehicles' >> _typeOf >> 'picture'); + +_weaponsCount = (_weaponsCount_raw select 1) call _gearCount; +_magazineCount = (_magazineCount_raw select 1) call _gearCount; +_backPackCount = (_backPackCount_raw select 1) call _gearCount; + +_formattedText = format [ + "
" + + "%2: %3
" + + "%4: %5
" + + "%6: %13/%10 %14/%11 %15/%12
", + _picture, + localize "STR_EPOCH_NAME", + _name, + localize "STR_EPOCH_CLASS", + _typeOf, + localize "STR_EPOCH_CARGO_SPACE", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_weapons_white.paa", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_items_white.paa", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_backPacks_white.paa", + _weaponSlots, + _magazineSlots, + _backPackSlots, + _weaponsCount, + _magazineCount, + _backPackCount, + _text +]; + +((findDisplay 8800) displayCtrl 8803) ctrlSetStructuredText parseText _formattedText; +ctrlShow [8803,true]; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/safe_zones.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/safe_zones.sqf new file mode 100755 index 0000000..6414fd3 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/safe_zones.sqf @@ -0,0 +1,302 @@ +/* + File: safe_zones.sqf + Creates safe zones in predefined areas (DZE_SafeZonePosArray) + + Author: BigEgg + https://github.com/BigEgg17 +*/ + +private ["_bubbles", "_speedLimit", "_preventTheft", "_timer", "_disableWeps", "_badWeps"]; + +/**************************************************** Config ****************************************************/ +_bubbles = false; // Creates a circle of bubbles marking the circumference of the safe zone. +_speedLimit = 0; // Speed limit in safe zones. Set to 0 to disable speed limit. +_preventTheft = true; // Prevent vehicles from being stolen by assigning them an owner (this includes gear). +_timer = 0; // Delay ending safe zone protection for this many seconds upon leaving. Set to 0 to disable timer. + +_disableWeps = false; // Drops any weapons in _badWeps array. +_badWeps = [ // Will remove these weapons from the player if they try to select them. Only used if _disableWeps = true. + "Vil_RPG29", "Vil_RPO_A", "Vil_RPG16", "Vil_RPG7V_PGO", "Vil_Panzerfaust3", "M136", "RPG7V", "vil_CG84T", "vilas_rpg22", "vilas_rpg26", "MAAWS", "Vil_RPG7d_PGO", + "RPG18", "MeleeHatchet", "MeleeCrowbar","MeleeMachete", "MeleeFishingPole", "MeleeSledge", "MeleeBaseBallBatNails", "MeleeBaseBallBatBarbed", "MeleeBaseBallBat" +]; +/****************************************************************************************************************/ + +// Needed on both client and server for vehicle protection +fnc_veh_handleDam2 = fnc_veh_handleDam; +fnc_veh_handleDam = { + if ({(_this select 0) distance (_x select 0) <= (_x select 1)} count DZE_SafeZonePosArray > 0 || {(_this select 0) getVariable ["sz_immunity", false]}) exitWith {0}; + _this call fnc_veh_handleDam2; +}; + +if (isServer && {_bubbles}) then { + private "_count"; + + _count = 0; + { + private ["_pos", "_rad"]; + + _pos = _x select 0; + _rad = _x select 1; + + for "_i" from 0 to 360 step (1440 / _rad) do + { + private ["_loc", "_obj"]; + + _loc = [(_pos select 0) + ((cos _i) * _rad), (_pos select 1) + ((sin _i) * _rad), 0]; + + _obj = "Sign_sphere100cm_EP1" createVehicle [0,0,0]; + _obj setPosATL _loc; + + _count = _count + 1; + }; + } count DZE_SafeZonePosArray; + + diag_log format["INFO: Created %1 safe zone bubbles", [_count] call BIS_fnc_numberText]; +}; + +if (!isDedicated) then { + private ["_enter", "_exit"]; + + safezone_enabled = false; + + _enter = { + private "_msg"; + + safezone_enabled = true; + isInTraderCity = true; + canbuild = false; + safezone_time = diag_tickTime; + + if (!DZE_BackpackAntiTheft) then {DZE_BackpackAntiTheft = true;}; + + _msg = localize "STR_CL_SZ_ENTER"; + taskHint [_msg, [0,1,0,1], "taskDone"]; + _msg call dayz_rollingMessages; + + if (_preventTheft) then { + private "_vehicle"; + + _vehicle = vehicle player; + + if (isNil "fn_gearMenuChecks1") then { // Make sure vehicle gear checks aren't already disabled + fn_gearMenuChecks1 = fn_gearMenuChecks; + }; + + if (_vehicle != player) then { // Reset owner when entering + if (driver _vehicle == player) then { + private "_owner"; + + _owner = []; + _owner set [count _owner, getPlayerUID player]; + + { + if !(getPlayerUID _x in _owner) then { + _owner set [count _owner, getPlayerUID _x]; + }; + } count (crew _vehicle); + + _vehicle setVariable ["Owner", _owner, true]; + localize "STR_CL_SZ_OWNER" call dayz_rollingMessages; + }; + }; + + fn_gearMenuChecks = { // Prevent player from accessing gear of vehicles that aren't their's + if (vehicle player == player) then { + private ["_cursorTarget", "_dis"]; + disableSerialization; + + _display = _this select 0; + _cursorTarget = cursorTarget; + _dis = if (_cursorTarget isKindOf "USEC_ch53_E" || {_cursorTarget isKindOf "MV22"}) then {25} else {12}; + + if ((player distance _cursorTarget <= _dis) && {_cursorTarget isKindOf "Air" || {_cursorTarget isKindOf "LandVehicle"} || {_cursorTarget isKindOf "Ship"}}) then { + private ["_owner", "_deny"]; + + _owner = _cursorTarget getVariable ["Owner", []]; + + // Allow group members of the owner to access gear + _deny = true; + { + if (getPlayerUID _x == (_owner select 0)) exitWith {_deny = false;}; + } count (units group player); + + if (getPlayerUID player in _owner) then {_deny = false}; + + if (_deny) then { + _display closeDisplay 2; + localize "STR_CL_SZ_GEAR" call dayz_rollingMessages; + }; + }; + }; + + // Pass array on to normal gearMenuChecks + _this call fn_gearMenuChecks1; + }; + }; + + if (isNil "fnc_usec_damageHandler1") then { + fnc_usec_damageHandler1 = fnc_usec_damageHandler; + }; + fnc_usec_damageHandler = {0}; // God mode + + if (isNil "player_zombieCheck1") then { + player_zombieCheck1 = player_zombieCheck; + }; + player_zombieCheck = {false}; // No zombie aggro + + if (isNil "player_fired1") then { + player_fired1 = player_fired; + }; + player_fired = { // Block firing in safe zone + deleteVehicle (_this select 6); + cutText [localize "STR_CL_SZ_FIRE", "WHITE IN"]; + }; + + [_speedLimit, _disableWeps, _badWeps, _preventTheft] spawn { + while {safezone_enabled} do + { + private "_vehicle"; + + _vehicle = vehicle player; + + if (_this select 1) then { + private "_currentWeapon"; + + _currentWeapon = currentWeapon player; + + if (_currentWeapon in (_this select 2)) then { + player action ["dropWeapon", player, _currentWeapon]; // Drops the weapon and the ammo for it + }; + }; + + if (_vehicle != player) then { + // Speed Limit + if ((_this select 0) > 0) then { + if !(_vehicle isKindOf "Air") then { + private "_speed"; + + _speed = abs(speed _vehicle); + + if (_speed > (_this select 0)) then { + private ["_velocity", "_mod"]; + + _velocity = velocity _vehicle; + _mod = if (_speed > 50) then {0.1} else {0.8}; + + _vehicle setVelocity [(_velocity select 0) * _mod, (_velocity select 1) * _mod, (_velocity select 2) * _mod]; + }; + }; + }; + // Remove player from vehicle if they lack ownership or aren't in owner's group + if (_this select 3) then { + private ["_owner", "_deny"]; + + _owner = _vehicle getVariable ["Owner", []]; + + if (driver _vehicle == player && {count _owner == 0}) then { // Set an owner if one doesn't exist + _owner set [count _owner, getPlayerUID player]; + _vehicle setVariable ["Owner", _owner, true]; + localize "STR_CL_SZ_OWNER" call dayz_rollingMessages; + }; + + if (count _owner > 0) then { + _deny = true; + { + if (getPlayerUID _x == (_owner select 0)) exitWith {_deny = false;}; + } count (units group player); + + if (getPlayerUID player in _owner) then {_deny = false;}; + + if (_deny) then { + player action ["Eject", _vehicle]; + }; + }; + }; + // Prevent player from firing vehicle guns in safe zone + if !(_vehicle getVariable ["safezoneEH", false]) then { + _vehicle setVariable ["safezoneEH", true]; + _vehicle addEventHandler ["Fired", {_this call player_fired}]; + }; + }; + + // Prevent player from being unconscious in safe zone + { + player setVariable [_x, false, false]; + } count ["NORRN_unconscious", "USEC_isCardiac"]; + + r_player_unconscious = false; + r_player_cardiac = false; + + uiSleep 0.1; + }; + }; + }; + + _exit = { + private ["_msg", "_time", "_vehicle"]; + + safezone_enabled = false; + isInTraderCity = false; + canbuild = true; + + _msg = localize "STR_CL_SZ_EXIT"; + taskHint [_msg, [1,0,0,1], "taskFailed"]; + _msg call dayz_rollingMessages; + + _time = diag_tickTime - safezone_time; + _vehicle = vehicle player; + + if (_timer > 0) then { + if (_time >= 60) then { + if (_vehicle != player) then { + [_vehicle, _timer] spawn { + (_this select 0) setVariable ["sz_immunity", true, true]; + uiSleep (_this select 1); + (_this select 0) setVariable ["sz_immunity", false, true]; + }; + }; + for "_x" from _timer to 1 step -1 do + { + [format[localize "STR_CL_SZ_ENDING", _x], 1] call dayz_rollingMessages; + uiSleep 1; + if ({_vehicle distance (_x select 0) <= (_x select 1)} count DZE_SafeZonePosArray > 0) exitWith {}; + }; + } else { + format[localize "STR_CL_SZ_TIME", round _time] call dayz_rollingMessages; + }; + }; + + localize "STR_CL_SZ_DISABLED" call dayz_rollingMessages; + + fnc_usec_damageHandler = fnc_usec_damageHandler1; + player_zombieCheck = player_zombieCheck1; + player_fired = player_fired1; + if (_preventTheft) then { + fn_gearMenuChecks = fn_gearMenuChecks1; + }; + + if (_vehicle != player) then { + _vehicle setVariable ["safezoneEH", false]; + _vehicle removeAllEventHandlers "Fired"; + }; + }; + + while {69 == 69} do + { + private "_vehicle"; + + _vehicle = vehicle player; + + if (!safezone_enabled) then { + if ({_vehicle distance (_x select 0) <= (_x select 1)} count DZE_SafeZonePosArray > 0) then { + call _enter; + }; + } else { + if !({_vehicle distance (_x select 0) <= (_x select 1)} count DZE_SafeZonePosArray > 0) then { + call _exit; + }; + }; + + uiSleep 1; + }; +} \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/servicePoints/init.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/servicePoints/init.sqf new file mode 100755 index 0000000..635c30a --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/servicePoints/init.sqf @@ -0,0 +1,279 @@ +/* + Vehicle Service Point by Axe Cop + Rewritten for single currency, gems, briefcase support and 1.0.7 epoch compatibility by salival - https://github.com/oiad/ + + Requires DayZ Epoch 1.0.7 + + This version adds support for both single currency and gems (from the epoch 1.0.7 update) as well as the original epoch briefcase currency system. + Instead of pricing things like the original way, prices are now done on a "worth" similar to how coins are done. The price value of items are below. + + 1 silver = 1 worth + 1 10oz silver = 10 worth + 1 gold = 100 worth + 1 10oz gold = 1,000 worth + 1 briefcase = 10,000 worth + + Please see dayz_code\configVariables.sqf for the value of gems (DZE_GemWorthArray) and their relevant worth if they are enabled. + + Example config settings for _refuel_costs, _repair_costs and _rearm_costs: + + All 3 sections can either be made free, disabled or a specifc price with the following examples: + + ["Air",_freeText] will make the vehicle config class of "Air" free for the specific action. + ["Air",_disabledText] will make the vehicle config class of "Air" disabled for the specific action. + ["Air",2000] will make the vehicle config class of "Air" have a worth of 2000 for the specific action. + ["Armored_SUV_PMC",2000] will make the specific vehicle have a worth of 2000 for the specific action. + ["Armored_SUV_PMC",_freeText] will make the specific vehicle be free for the specific action. + ["Armored_SUV_PMC",_disabledText] will make the specific vehicle be disabled for the specific action. + + Valid vehicle config classes as an example: "Air", "AllVehicles", "All", "APC", "Bicycle", "Car", "Helicopter", "Land", "Motorcycle", "Plane", "Ship", "Tank" +*/ + +private ["_folder","_servicePointClasses","_maxDistance","_actionTitleFormat","_actionCostsFormat","_message","_messageShown","_refuel_enable","_refuel_costs","_refuel_updateInterval","_refuel_amount","_repair_enable","_repair_costs","_repair_repairTime","_rearm_enable","_rearm_defaultcost","_rearm_costs","_rearm_magazineCount","_lastVehicle","_lastRole","_fnc_removeActions","_fnc_getCostsWep","_fnc_getCostsWep","_fnc_actionTitle","_fnc_isArmed","_fnc_getWeapons","_rearm_ignore","_cycleTime","_servicePoints","_vehicle","_role","_costs","_actionTitle","_weapons","_weaponName","_disabledText","_freeText"]; + +diag_log "Service Points: loading config..."; + +// general settings +_folder = "scripts\servicePoints\"; // folder where the service point scripts are saved, relative to the mission file +_servicePointClasses = ["Map_A_FuelStation_Feed","Land_A_FuelStation_Feed","FuelPump_DZ"]; // service point classes, You can also use dayz_fuelpumparray by its self for all the default fuel pumps. +_maxDistance = 50; // maximum distance from a service point for the options to be shown +_actionTitleFormat = "%1 (%2)"; // text of the vehicle menu, %1 = action name (Refuel, Repair, Rearm), %2 = costs (see format below) +_actionCostsFormat = "%2 %1"; // %1 = item name, %2 = item count +_message = localize "STR_CL_SP_MESSAGE"; // This is translated from your stringtable.xml in your mission folder root. Set to "" to disable +_cycleTime = 5; // Time in sections for how often the action menu will be refreshed and how often it will search for a nearby fuel station (setting this too low can make a lot of lag) +_disabledText = (localize "str_temp_param_disabled"); // Disabled text to show up when items are disabled, DO NOT CHANGE. +_freeText = (localize "strwffree"); // Free text to show up when items are free, DO NOT CHANGE. + +// refuel settings +_refuel_enable = true; // enable or disable the refuel option +_refuel_costs = [ + ["Land",_freeText], // All vehicles are free to refuel. + ["Air",1000] //1000 worth is 1 10oz gold for all air vehicles +]; +_refuel_updateInterval = 1; // update interval (in seconds) +_refuel_amount = 0.05; // amount of fuel to add with every update (in percent) + +// repair settings +_repair_enable = true; // enable or disable the repair option +_repair_repairTime = 2; // time needed to repair each damaged part (in seconds) +_repair_costs = [ + ["Air",4000], // 4000 worth is 4 10oz gold. + ["AllVehicles",2000] // 2000 worth is 2 10oz gold for all other vehicles +]; + +// rearm settings +_rearm_enable = true; // enable or disable the rearm option +_rearm_defaultcost = 10000; // Default cost to rearm a weapon. (10000 worth == 1 briefcase) +_rearm_magazineCount = 2; // amount of magazines to be added to the vehicle weapon +_rearm_ignore = [(localize "str_dn_horn"),(localize "str_dn_laser_designator")]; // Array of weapon display names that are ignored in the rearm listing. + +/* + _ream_costs is an array based on the AMMO type. I.e M240, MK19, PKM, PKT, M134 etc. + You can disable certain ammo types from being able to be rearmed by making the price _disabledText + example: ["M134",_disabledText] +*/ + +_rearm_costs = [ + [(localize "str_mn_40rnd_grad"),_disabledText], // BM-21 Grad is disabled (ammo is broken) + [(localize "str_dn_flarelauncher"),2000], // Flares + [(localize "str_ep1_dn_smokelauncher"),2000], // Smokes + [(localize "str_dn_pk"),5000], // PKM + [(localize "str_dn_pkt"),5000], // PKT + [(localize "str_sn_m134"),5000], // M134 + [(localize "str_dn_ags30"),5000], // AGS-30 + [(localize "str_dn_dshkm"),5000], // DSHKM + [(localize "str_DN_VIKHR_CCP"),5000], // Vikhr 9A4172 + [(localize "str_baf_baf_l94a10"),5000], // L94A1 Chain Gun + [(localize "str_baf_crv70"),5000], // CRV7 + [(localize "str_baf_ctws0"),5000], // CTWS + [(localize "str_baf_m621_manual0"),5000], // M621 + [(localize "str_dn_2a38m"),5000], // 2A38M Gun + [(localize "str_dn_2a42"),5000], // 2A42 + [(localize "str_dn_2a46m"),5000], // 2A46M Cannon + [(localize "str_dn_2a46m_rocket"),5000], // 9M119M Refleks rocket + [(localize "str_dn_2a70"),5000], // 2A70 100mm + [(localize "str_dn_2a70_rocket"),5000], // 9M117M1 Arkan + [(localize "str_dn_2a72"),5000], // 2A72 30mm + [(localize "str_dn_80mmlauncher_burst"),5000], // S-8 + [(localize "str_dn_9m311laucher"),5000], // Tunguska 9M311 + [(localize "str_dn_ags17"),5000], // AGS-17 + [(localize "str_dn_d81"),5000], // D-81 + [(localize "str_dn_dt_veh"),5000], // DT + [(localize "str_dn_hellfire"),5000], // AGM-114 Hellfire + [(localize "str_dn_kord"),5000], // KORD + [(localize "str_dn_m197"),5000], // M197 + [(localize "str_dn_m240"),5000], // M240 + [(localize "str_dn_m242"),5000], // M242 + [(localize "str_dn_m256"),5000], // M256 + [(localize "str_dn_sidewinderlaucher"),5000], // AIM-9L Sidewinder + [(localize "str_dn_zis_s_53"),5000], // ZiS-S-53 + [(localize "str_ep1_dn_57mmlauncher"),5000], // S-5 + [(localize "str_ep1_dn_azp85"),5000], // AZP-23 + [(localize "str_ep1_dn_ffarlauncher"),5000], // Hydra + [(localize "str_ep1_dn_m2"),5000], // M2 Machinegun + [(localize "str_ep1_dn_m230"),5000], // M230 + [(localize "str_ep1_dn_m32_ep1"),5000], // M32 + [(localize "str_ep1_dn_mk19"),5000], // Mk19 + [(localize "str_ep1_dn_yakb"),5000], // Yak-B + [(localize "str_mn_at2_mi24d"),5000], // Falanga 3M11 + [(localize "str_mn_at5_bmp2"),5000], // Konkurs 9M113 + [(localize "str_mn_stinger"),5000], // FIM-92F Stinger + [(localize "str_mn_12rnd_mlrs"),5000], // MLRS + [(localize "str_baf_baf_l2a10"),5000], // L111A1 + [(localize "STR_DN_D10_CCP"),5000], // D-10 + [(localize "str_dn_tow"),5000], // M220 TOW + [(localize "str_dn_zu23"),5000], // ZU-23 + [(localize "str_dn_kpvt"),5000], // KPVT + [(localize "str_dn_m3p"),5000], // M3P + [(localize "str_dn_spg9"),5000], // SPG-9 + [(localize "str_dn_gau8"),5000], // GAU-8 + [(localize "str_dn_maverick"),5000], // AGM-65 Maverick + [(localize "str_dn_gbu12"),5000], // GBU-12 + [(localize "str_dn_gau12"),5000], // GAU-12 + [(localize "STR_DN_KH29_CCP"),5000], // Kh-29L + [(localize "str_dn_r73"),5000], // R-73 + [(localize "str_mn_fab250"),5000], // FAB-250 + [(localize "str_dn_gsh301"),5000], // GSh-301 + [(localize "str_mn_23mm_gsh23l"),5000], // GSh-23L + [(localize "str_sn_grenade"),5000], // Grenade + [(localize "str_mn_at9_mi24p"),5000], // Ataka-V 9M120 + [(localize "str_mn_at6_mi24v"),5000], // Shturm 9K114 + + ["SGMT",5000], // SGMT no localization available + ["M68",5000], // M68 no localization available + ["GAU-22",5000], // GAU-22 no localization available + ["GSh-30",5000], // GSh-30 no localization available + ["M60",5000], // M60 no localization available + ["GSh-30K",5000] // GSh-30K no localization available +]; + +_lastVehicle = objNull; +_lastRole = []; +_messageShown = false; + +SP_refuel_action = -1; +SP_repair_action = -1; +SP_rearm_actions = []; + +_fnc_removeActions = { + if (isNull _lastVehicle) exitWith {}; + _lastVehicle removeAction SP_refuel_action; + SP_refuel_action = -1; + _lastVehicle removeAction SP_repair_action; + SP_repair_action = -1; + { + _lastVehicle removeAction _x; + } forEach SP_rearm_actions; + SP_rearm_actions = []; + _lastVehicle = objNull; + _lastRole = []; +}; + +_fnc_getCosts = { + private ["_getVehicle","_getCosts","_cost","_getTypeName"]; + _getVehicle = _this select 0; + _getCosts = _this select 1; + _cost = []; + { + _getTypeName = _x select 0; + if (_getVehicle isKindOf _getTypeName) exitWith { + _cost = _x select 1; + }; + } forEach _getCosts; + _cost +}; + +_fnc_getCostsWep = { + private ["_weapon","_getCostsWep","_returnCostWep","_typeName"]; + _weapon = _this select 0; + _getCostsWep = _this select 1; + _returnCostWep = _rearm_defaultcost; + { + _typeName = _x select 0; + if (_weapon == _typeName) exitWith { + _returnCostWep = _x select 1; + }; + } forEach _getCostsWep; + _returnCostWep +}; + +_fnc_actionTitle = { + private ["_actionName","_actionCosts","_costsText","_return"]; + _actionName = _this select 0; + _actionCosts = _this select 1; + if (typeName _actionCosts == "STRING") then { + _costsText = _actionCosts; + } else { + _costsText = if (Z_SingleCurrency) then {format ["%1 %2",[_actionCosts] call BIS_fnc_numberText,CurrencyName]} else {format ["%1",[_actionCosts,true] call z_calcCurrency]}; + }; + _return = format [_actionTitleFormat,_actionName,_costsText]; + _return +}; + +_fnc_getWeapons = { + private ["_gWeaponsVehicle","_gWeaponsRole","_gWeapons","_gWeaponName","_gTurret","_gWeaponsTurret"]; + _gWeaponsVehicle = _this select 0; + _gWeaponsRole = _this select 1; + _gWeapons = []; + if (count _gWeaponsRole > 1) then { + _gTurret = _gWeaponsRole select 1; + _gWeaponsTurret = _gWeaponsVehicle weaponsTurret _gTurret; + { + _gWeaponName = getText (configFile >> "CfgWeapons" >> _x >> "displayName"); + if !(_gWeaponName in _rearm_ignore) then { + _gWeapons set [count _gWeapons, [_x,_gWeaponName,_gTurret]]; + }; + } forEach _gWeaponsTurret; + }; + _gWeapons +}; + +while {true} do { + _vehicle = vehicle player; + if (_vehicle != player) then { + _servicePoints = (nearestObjects [getPosATL _vehicle,_servicePointClasses,_maxDistance]) - [_vehicle]; + if (count _servicePoints > 0) then { + if (assignedDriver _vehicle == player) then { + _role = ["Driver", [-1]]; + } else { + _role = assignedVehicleRole player; + }; + if (((str _role) != (str _lastRole)) || {_vehicle != _lastVehicle}) then { + call _fnc_removeActions; + }; + _lastVehicle = _vehicle; + _lastRole = _role; + if ((SP_refuel_action < 0) && _refuel_enable) then { + _costs = [_vehicle,_refuel_costs] call _fnc_getCosts; + _actionTitle = [localize "config_depot.sqf8",_costs] call _fnc_actionTitle; + SP_refuel_action = _vehicle addAction [_actionTitle,_folder + "servicePointActions.sqf",["refuel",_costs,_refuel_updateInterval,_refuel_amount],-1,false,true]; + }; + if ((SP_repair_action < 0) && _repair_enable) then { + _costs = [_vehicle,_repair_costs] call _fnc_getCosts; + _actionTitle = [localize "config_depot.sqf1",_costs] call _fnc_actionTitle; + SP_repair_action = _vehicle addAction [_actionTitle,_folder + "servicePointActions.sqf",["repair",_costs,_repair_repairTime],-1,false,true]; + }; + if ((count _role > 1) && _rearm_enable && {count SP_rearm_actions == 0}) then { + _weapons = [_vehicle,_role] call _fnc_getWeapons; + { + _weaponName = _x select 1; + _costs = [_weaponName,_rearm_costs] call _fnc_getCostsWep; + _actionTitle = [format["%1 %2",localize "config_depot.sqf5",_weaponName],_costs] call _fnc_actionTitle; + SP_rearm_action = _vehicle addAction [_actionTitle,_folder + "servicePointActions.sqf",["rearm",_costs,_rearm_magazineCount,_x],-1,false,true]; + SP_rearm_actions set [count SP_rearm_actions, SP_rearm_action]; + } forEach _weapons; + }; + if (!_messageShown && {_message != ""}) then { + _messageShown = true; + _vehicle vehicleChat _message; + }; + } else { + call _fnc_removeActions; + _messageShown = false; + }; + } else { + call _fnc_removeActions; + _messageShown = false; + }; + uiSleep _cycleTime; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/servicePoints/servicePointActions.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/servicePoints/servicePointActions.sqf new file mode 100755 index 0000000..3a9108f --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/servicePoints/servicePointActions.sqf @@ -0,0 +1,143 @@ +// Vehicle Service Point (Rearm) by Axe Cop +// Rewritten for single currency, gems, briefcase support and 1.0.7 epoch compatibility by salival - https://github.com/oiad/ +// Requires DayZ Epoch 1.0.7 for gem support. + +private ["_vehicle","_costs","_fuel","_magazineCount","_weapon","_type","_name","_weaponType","_weaponName","_turret","_magazines","_ammo","_textMissing","_pos","_message","_action","_damage","_selection","_strH","_disabled","_amount","_enoughMoney","_moneyInfo","_wealth","_success","_reason","_cmpt"]; + +_vehicle = _this select 0; + +_ammo = ""; +_reason = ""; + +_action = (_this select 3) select 0; + +_type = typeOf _vehicle; +_disabled = false; +_name = getText(configFile >> "cfgVehicles" >> _type >> "displayName"); + +_amount = (_this select 3) select 1; + +if (_action == "rearm") then { + _magazineCount = (_this select 3) select 2; + _weapon = (_this select 3) select 3; + + _weaponType = _weapon select 0; + _weaponName = _weapon select 1; + _turret = _weapon select 2; +}; + +if (typeName _amount == "STRING") then { + if (_amount == (localize "str_temp_param_disabled")) then { + if (_action == "rearm") then {_reason = format[localize "STR_CL_SP_UNABLE_REARM",_weaponName]; _disabled = true}; + if (_action == "repair") then {_reason = format[localize "STR_CL_SP_UNABLE_REPAIR",_name]; _disabled = true}; + if (_action == "refuel") then {_reason = format[localize "STR_CL_SP_UNABLE_REFUEL",_name]; _disabled = true}; + }; + if (_amount == (localize "strwffree")) then {_amount = 0}; +}; + +if (_disabled) exitWith {[_reason,1] call dayz_rollingMessages}; + +_enoughMoney = false; +_moneyInfo = [false, [], [], [], 0]; +_wealth = player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0]; + +if (Z_SingleCurrency) then { + _enoughMoney = (_wealth >= _amount); +} else { + Z_Selling = false; + if (Z_AllowTakingMoneyFromVehicle) then {false call Z_checkCloseVehicle}; + _moneyInfo = _amount call Z_canAfford; + _enoughMoney = _moneyInfo select 0; +}; + +_success = if (Z_SingleCurrency) then {true} else {[player,_amount,_moneyInfo,true,0] call Z_payDefault}; + +if (!_success && _enoughMoney) exitWith {systemChat localize "STR_EPOCH_TRADE_GEAR_AND_BAG_FULL"}; // Not enough room in gear or bag to accept change + +if (_enoughMoney) then { + _success = if (Z_SingleCurrency) then {_amount <= _wealth} else {[player,_amount,_moneyInfo,false,0] call Z_payDefault}; + if (_success) then { + if (Z_SingleCurrency) then { + player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth - _amount),true]; + }; + + [player,(getPosATL player),50,"refuel"] spawn fnc_alertZombies; + _vehicle engineOn false; + if (_action == "refuel") then { + [format[localize "STR_CL_SP_REFUELING",_name],1] call dayz_rollingMessages; + + while {vehicle player == _vehicle} do { + if ([0,0,0] distance (velocity _vehicle) > 1) exitWith {[format[localize "STR_CL_SP_REFUELING_STOPPED",_name],1] call dayz_rollingMessages}; + _fuel = (fuel _vehicle) + ((_this select 3) select 3); + if (_fuel > 0.99) exitWith { + _vehicle setFuel 1; + [format[localize "STR_CL_SP_REFUEL_OK",_name],1] call dayz_rollingMessages; + }; + _vehicle setFuel _fuel; + uiSleep ((_this select 3) select 2); + }; + }; + if (_action == "repair") then { + [_vehicle,"repair",0,false] call dayz_zombieSpeak; + + _hitpoints = _vehicle call vehicle_getHitpoints; + _allRepaired = true; + { + if ((vehicle player != _vehicle) || {[0,0,0] distance (velocity _vehicle) > 1}) exitWith { + _allRepaired = false; + [format[localize "STR_CL_SP_REPAIRING_STOPPED",_name],1] call dayz_rollingMessages; + }; + _hits = [_vehicle,_x] call object_getHit; + _damage = _hits select 0; + if (_damage > 0) then { + _cmpt = []; + { + if (_forEachIndex > 2) then {_cmpt set [count _cmpt,_x]}; + } forEach toArray (_x); + _cmpt = toString _cmpt; + [format[localize "STR_CL_SP_REPAIRING",_cmpt],1] call dayz_rollingMessages; + _selection = getText(configFile >> "cfgVehicles" >> _type >> "HitPoints" >> _x >> "name"); + _strH = "hit_" + (_selection); + _vehicle setHit[_selection,0]; + _vehicle setVariable [_strH,0,true]; + uiSleep ((_this select 3) select 2); + }; + } forEach _hitpoints; + PVDZ_veh_Save = [_vehicle,"repair",true]; + publicVariableServer "PVDZ_veh_Save"; + + if (_allRepaired) then { + _vehicle setDamage 0; + _vehicle setVelocity [0,0,1]; + [format[localize "STR_CL_SP_REPAIR_OK",_name],1] call dayz_rollingMessages; + }; + }; + + if (_action == "rearm") then { + _magazines = getArray (configFile >> "CfgWeapons" >> _weaponType >> "magazines"); + _ammo = _magazines select 0; + + if (_weaponType == "CMFlareLauncher") then { + _vehicle removeWeaponTurret ["CMFlareLauncher",_turret]; + for "_i" from 1 to _magazineCount do {_vehicle addMagazineTurret [_ammo,_turret];}; + _vehicle addWeaponTurret ["CMFlareLauncher",_turret]; + } else { + {_vehicle removeMagazinesTurret [_x,_turret];} forEach _magazines; + + for "_i" from 1 to _magazineCount do {_vehicle addMagazineTurret [_ammo,_turret];}; + }; + + [format[localize "STR_CL_SP_REARMED",_weaponName,_name],1] call dayz_rollingMessages; + }; + call player_forceSave; + } else { + systemChat localize "STR_EPOCH_TRADE_DEBUG"; + }; +} else { + _itemText = if (Z_SingleCurrency) then {CurrencyName} else {[_amount,true] call z_calcCurrency}; + if (Z_SingleCurrency) then { + systemChat format[localize "STR_CL_SP_FAIL_COINS",[_amount] call BIS_fnc_numberText,_itemText,_action,_name]; + } else { + systemChat format[localize "STR_CL_SP_FAIL_BRIEFCASES",_itemText,_action,_name]; + }; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/takeClothes.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/takeClothes.sqf new file mode 100755 index 0000000..144471d --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/takeClothes.sqf @@ -0,0 +1,57 @@ +/* + Originally by Zabn + Modified for DayZ Epoch 1.0.7+ by salival (https://github.com/oiad) +*/ + +if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; +dayz_actionInProgress = true; + +private ["_body","_clothesTaken","_finished","_itemNew","_itemNewName","_okSkin","_playerNear","_result","_skin"]; + +_body = _this select 3; + +player removeAction s_player_clothes; +s_player_clothes = -1; + +if (isNull _body) exitWith {dayz_actionInProgress = false; systemChat localize "str_cursorTargetNotFound";}; + +_playerNear = {isPlayer _x} count (([_body] call FNC_GetPos) nearEntities ["CAManBase", 10]) > 1; +if (_playerNear) exitWith {dayz_actionInProgress = false; localize "str_pickup_limit_5" call dayz_rollingMessages;}; + +_skin = typeOf _body; + +_itemNew = _skin; + +switch (_itemNew) do { + case "Survivor3_DZ": { + _itemNew = "Survivor2_DZ"; + }; + case "Bandit1_DZ": { + _itemNew = "Survivor2_DZ"; + }; +}; + +_itemNew = "Skin_" + _itemNew; +_clothesTaken = _body getVariable["clothesTaken",false]; + +if (_clothesTaken) exitWith {dayz_actionInProgress = false; localize "STR_CL_TC_ALREADY_TAKEN" call dayz_rollingMessages;}; + +_okSkin = isClass (configFile >> "CfgMagazines" >> _itemNew); + +if (!_okSkin) exitWith {dayz_actionInProgress = false; format[localize "STR_CL_TC_NOT_SUPPORTED",_skin] call dayz_rollingMessages;}; + +_finished = ["Medic",1] call fn_loopAction; +if (_finished) then { + _itemNewName = getText (configFile >> "CfgMagazines" >> _itemNew >> "displayName"); + _result = [player,_itemNew] call BIS_fnc_invAdd; + if (_result) then { + _body setVariable["clothesTaken",true,true]; + format[localize "STR_CL_TC_ADD_OK",_itemNewName] call dayz_rollingMessages; + } else { + format[localize "STR_CL_TC_ADD_FAIL",_itemNewName] call dayz_rollingMessages; + }; +} else { + localize "str_epoch_player_26" call dayz_rollingMessages; +}; + +dayz_actionInProgress = false; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/player_MaintainVG.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/player_MaintainVG.sqf new file mode 100755 index 0000000..b00b1d5 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/player_MaintainVG.sqf @@ -0,0 +1,42 @@ +// Written by icomrade (https://github.com/icomrade) + +private ["_hasAccess","_heliPad","_objectID","_objectUID","_plotCheck"]; + +closeDialog 0; + +_itemText = if (Z_SingleCurrency) then {CurrencyName} else {[vg_maintainCost,true] call z_calcCurrency}; +_enoughMoney = false; +_moneyInfo = [false, [], [], [], 0]; +_wealth = player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0]; + +if (Z_SingleCurrency) then { + _enoughMoney = (_wealth >= vg_maintainCost); +} else { + Z_Selling = false; + _moneyInfo = vg_maintainCost call Z_canAfford; + _enoughMoney = _moneyInfo select 0; +}; + +_success = true; +if (vg_maintainCost > 0) then { + _success = if (Z_SingleCurrency) then {_enoughMoney} else {[player,vg_maintainCost,_moneyInfo,false,0] call Z_payDefault}; +}; + +if (!_success && _enoughMoney) exitWith {systemChat localize "STR_EPOCH_TRADE_GEAR_AND_BAG_FULL";}; + +if (_enoughMoney || vg_maintainCost < 1) then { + if (Z_SingleCurrency) then { + player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth - vg_maintainCost),true]; + }; + localize "STR_CL_VG_MAINTAINSUCCESS" call dayz_rollingMessages; + PVDZE_maintainGarage = if (vg_tiedToPole) then { + _plotCheck = [player,false] call FNC_find_plots; + _ownerPUID = if (_plotCheck select 1 > 0) then {(_plotCheck select 2) getVariable ["ownerPUID","0"]} else {dayz_playerUID}; + [player,_ownerPUID] + } else { + [player] + }; + publicVariableServer "PVDZE_maintainGarage"; +} else { + localize "STR_CL_VG_MAINTAINFAIL" call dayz_rollingMessages; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/player_getVehicle.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/player_getVehicle.sqf new file mode 100755 index 0000000..409bfcf --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/player_getVehicle.sqf @@ -0,0 +1,69 @@ +// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/) +// Rewritten by salival (https://github.com/oiad) + +private ["_backPack","_charID","_dir","_heliPad","_inventory","_isNearPlot","_keyID","_keyName","_location","_plotCheck","_sign","_vehicle"]; + +closeDialog 0; +_vehicle = (call compile format["%1",lbData[2802,(lbCurSel 2802)]]); + +if (vg_removeKey && {_vehicle select 3 != 0} && {({getNumber (configFile >> "CfgWeapons" >> _x >> "type") == 131072} count (weapons player)) == 12}) exitWith {localize "str_epoch_player_107" call dayz_rollingMessages;}; + +_dir = round(random 360); +_backPack = []; + +_plotCheck = [player,false] call FNC_find_plots; +_isNearPlot = (_plotCheck select 1) > 0; + +_heliPad = nearestObjects [if (_isNearPlot) then {_plotCheck select 2} else {player},vg_heliPads,if (_isNearPlot) then {DZE_maintainRange} else {Z_VehicleDistance}]; +if ((count _heliPad == 0) && ((_vehicle select 1) isKindOf "Air")) exitWith {localize "STR_CL_VG_NEED_HELIPAD" call dayz_rollingMessages;}; +if (count _heliPad > 0) then { + _location = [(_heliPad select 0)] call FNC_GetPos; +} else { + _location = [(position player),0,400,10,0,2000,0] call BIS_fnc_findSafePos; + _location set [2,0]; +}; + +_sign = "Sign_arrow_down_large_EP1" createVehicleLocal [0,0,0]; +_sign setPos _location; + +if (surfaceIsWater _location && {count (_location nearEntities ["Ship",8]) > 0}) then { + deleteVehicle _sign; + localize "STR_EPOCH_TRADE_OBSTRUCTED" call dayz_rollingMessages; +} else { + [_vehicle select 1,_sign] call fn_waitForObject; +}; + +PVDZE_spawnVehicle = [[_dir,_location],player,_vehicle select 0]; +publicVariableServer "PVDZE_spawnVehicle"; + +waitUntil {!isNil "PVDZE_spawnVehicleResult"}; + +if (PVDZE_spawnVehicleResult != "0") then { + _keyID = ""; + _charID = parseNumber PVDZE_spawnVehicleResult; + if ((_charID > 0) && (_charID <= 2500)) then {_keyID = format["ItemKeyGreen%1",_charID];}; + if ((_charID > 2500) && (_charID <= 5000)) then {_keyID = format["ItemKeyRed%1",_charID-2500];}; + if ((_charID > 5000) && (_charID <= 7500)) then {_keyID = format["ItemKeyBlue%1",_charID-5000];}; + if ((_charID > 7500) && (_charID <= 10000)) then {_keyID = format["ItemKeyYellow%1",_charID-7500];}; + if ((_charID > 10000) && (_charID <= 12500)) then {_keyID = format["ItemKeyBlack%1",_charID-10000];}; + _keyName = getText(configFile >> "CfgWeapons" >> _keyID >> "displayName"); + + if (vg_removeKey) then { + _inventory = weapons player; + dayz_myBackpack = unitBackpack player; + if (!isNull dayz_myBackpack) then {_backPack = (getWeaponCargo dayz_myBackpack) select 0;}; + if (_keyID in (_inventory+_backPack)) then { + if (_keyID in _inventory) then {format[localize "STR_CL_VG_IN_INVENTORY",_keyName] call dayz_rollingMessages;}; + if (_keyID in _backPack) then {format[localize "STR_CL_VG_IN_BACKPACK",_keyName] call dayz_rollingMessages;}; + } else { + player addWeapon _keyID; + format[localize "STR_CL_VG_ADDED_INVENTORY",_keyName] call dayz_rollingMessages; + }; + }; +}; + +PVDZE_spawnVehicle = nil; +PVDZE_spawnVehicleResult = nil; +vg_vehicleList = nil; + +localize "STR_CL_VG_VEHICLE_SPAWNED" call dayz_rollingMessages; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/player_removePad.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/player_removePad.sqf new file mode 100755 index 0000000..fd0e542 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/player_removePad.sqf @@ -0,0 +1,24 @@ +// Written by salival (https://github.com/oiad) + +private ["_hasAccess","_objectID","_objectUID","_plotCheck"]; + +closeDialog 0; + +_plotCheck = [player, false] call FNC_find_plots; +_hasAccess = [player,_plotCheck select 2] call FNC_check_access; + +if ((_hasAccess select 0) or (_hasAccess select 2) or (_hasAccess select 3) or (_hasAccess select 4)) then { + + { + _objectID = _x getVariable ["ObjectID","0"]; + _objectUID = _x getVariable ["ObjectUID","0"]; + + PVDZ_obj_Destroy = [_objectID,_objectUID,player,_x,dayz_authKey]; + publicVariableServer "PVDZ_obj_Destroy"; + + deleteVehicle _x; + systemChat format[localize "STR_CL_VG_HELIPAD_REMOVED",typeOf _x]; + } count (nearestObjects [_plotCheck select 2,vg_heliPads,Z_VehicleDistance]); +} else { + systemChat localize "STR_EPOCH_PLAYER_134"; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/player_storeVehicle.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/player_storeVehicle.sqf new file mode 100755 index 0000000..9d04fc1 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/player_storeVehicle.sqf @@ -0,0 +1,171 @@ +// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/) +// Rewritten by salival (https://github.com/oiad) + +private ["_amount","_backPackCount","_backPackGear","_cargoAmount","_charID","_control","_counter","_display","_enoughMoney","_gearCount","_hasKey","_isLimitArray","_itemText","_items","_keyName","_limit","_magazineCount","_matchedCount","_moneyInfo","_name","_overLimit","_storedVehicles","_success","_typeName","_typeOf","_vehicle","_vehicleID","_vehicleUID","_wealth","_weaponsCount","_woGear","_playerNear","_ownerPUID","_plotCheck"]; + +disableSerialization; + +_display = findDisplay 2800; +_control = ((findDisplay 2800) displayCtrl 2802); + +_vehicle = vg_vehicleList select (lbCurSel _control); +_typeOf = typeOf _vehicle; +_isLimitArray = typeName vg_limit == "ARRAY"; + +_overLimit = false; +_matchedCount = 0; +_storedVehicles = []; + +{if (_typeOf isKindOf _x) exitWith {_overLimit = true;}} count vg_blackListed; +if (_overLimit) exitWith {localize "STR_CL_VG_BLACKLISTED" call dayz_rollingMessages;}; + +{ + if (typeName _x == "ARRAY") then { + _storedVehicles set [count _storedVehicles,_x select 1]; + }; +} count vg_vehicleList; + +_gearCount = { + private ["_counter"]; + _counter = 0; + {_counter = _counter + _x;} count _this; + _counter +}; + +if (_isLimitArray) then { + { + _typeName = _x select 0; + _limit = _x select 1; + if (typeName _x == "ARRAY") then { + if (_typeOf isKindOf _typeName) then { + { + if (_x isKindOf _typeName) then {_matchedCount = _matchedCount +1}; + if (_matchedCount >= _limit) then {_overLimit = true;}; + } count _storedVehicles; + }; + }; + if (_overLimit) exitWith {}; + } count vg_limit; +} else { + if (count _storedVehicles >= vg_limit) then {_overLimit = true;}; +}; + +if (_overLimit) exitWith { + if (_isLimitArray) then { + systemChat localize "STR_CL_VG_LIMIT_ARRAY"; + } else { + systemChat localize "STR_CL_VG_LIMIT_NUMBER"; + }; +}; + +vg_vehicleList = nil; + +_woGear = _this select 0; +closeDialog 0; +if (!vg_storeWithGear && !_woGear) exitWith {localize "STR_CL_VG_NOSTOREWITHGEAR" call dayz_rollingMessages;}; + +_charID = _vehicle getVariable ["CharacterID","0"]; +_vehicleID = _vehicle getVariable ["ObjectID","0"]; +_vehicleUID = _vehicle getVariable ["ObjectUID","0"]; +_weaponsCount = ((getWeaponCargo _vehicle) select 1) call _gearCount; +_magazineCount = ((getMagazineCargo _vehicle) select 1) call _gearCount; +_backPackCount = ((getBackpackCargo _vehicle) select 1) call _gearCount; +_cargoAmount = (_weaponsCount + _magazineCount + _backPackCount); + +if (_vehicleID == "1" || _vehicleUID == "1") exitWith {localize "STR_CL_VG_STORE_MISSION" call dayz_rollingMessages;}; +if (isNull DZE_myVehicle || !local DZE_myVehicle) exitWith {localize "STR_EPOCH_PLAYER_245" call dayz_rollingMessages;}; + +_hasKey = false; + +_items = items player; +dayz_myBackpack = unitBackpack player; + +if (!isNull dayz_myBackpack) then { + _backPackGear = (getWeaponCargo dayz_myBackpack) select 0; + _items = _items + _backPackGear; +}; + +if (_charID != "0") then { + { + if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _x)) in DZE_itemKeys) then { + if (str(getNumber(configFile >> "CfgWeapons" >> _x >> "keyid")) == _charID) then { + _keyName = _x; + _hasKey = true; + }; + }; + } count _items; +} else { + _hasKey = true; +}; + +if (vg_requireKey && {!_hasKey}) exitWith {localize "STR_CL_VG_REQUIRE_KEY" call dayz_rollingMessages;}; + +_name = getText(configFile >> "cfgVehicles" >> _typeOf >> "displayName"); + +{ + if (_typeOf isKindOf (_x select 0)) exitWith {_amount = _x select 1}; +} forEach vg_price; + +if (_cargoAmount > 0) then {_amount = _amount + (_cargoAmount * vg_pricePer);}; + +if (!isNil "sk_dualCurrency") then {_amount = if (z_singleCurrency) then {_amount * 10} else {_amount};}; + +/* +_playerNear = {isPlayer _x && (_x != player)} count (([_vehicle] call FNC_GetPos) nearEntities ["CAManBase", 15]) > 0; +if (_playerNear) exitWith {localize "STR_CL_VG_PLAYERNEARVEHICLE" call dayz_rollingMessages;}; +*/ + +if (count (crew _vehicle) > 0) exitWith {localize "STR_CL_VG_PLAYERINVEHICLE" call dayz_rollingMessages;}; + +_enoughMoney = false; +_moneyInfo = [false,[],[],[],0]; +_wealth = player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0]; + +if (Z_SingleCurrency) then { + _enoughMoney = (_wealth >= _amount); +} else { + Z_Selling = false; + if (Z_AllowTakingMoneyFromVehicle) then {false call Z_checkCloseVehicle}; + _moneyInfo = _amount call Z_canAfford; + _enoughMoney = _moneyInfo select 0; +}; + +_success = if (Z_SingleCurrency) then {true} else {[player,_amount,_moneyInfo,true,0] call Z_payDefault}; + +if (!_success && {_enoughMoney}) exitWith {systemChat localize "STR_EPOCH_TRADE_GEAR_AND_BAG_FULL"}; + +if (_enoughMoney) then { + _success = if (Z_SingleCurrency) then {_amount <= _wealth} else {[player,_amount,_moneyInfo,false,0] call Z_payDefault}; + if (_success) then { + if (Z_SingleCurrency) then {player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth - _amount),true];}; + + [_vehicle,true] call local_lockUnlock; + DZE_myVehicle = objNull; + + PVDZE_storeVehicle = if (vg_tiedToPole) then { + _plotCheck = [player,false] call FNC_find_plots; + _ownerPUID = if (_plotCheck select 1 > 0) then {(_plotCheck select 2) getVariable ["ownerPUID","0"]} else {dayz_playerUID}; + [_vehicle,player,_woGear,_ownerPUID] + } else { + [_vehicle,player,_woGear] + }; + + publicVariableServer "PVDZE_storeVehicle"; + waitUntil {!isNil "PVDZE_storeVehicleResult"}; + + PVDZE_storeVehicle = nil; + PVDZE_storeVehicleResult = nil; + + format[localize "STR_CL_VG_VEHICLE_STORED",_name] call dayz_rollingMessages; + if (vg_removeKey && {_charID != "0"}) then {[player,_keyName,1] call BIS_fnc_invRemove;}; + } else { + systemChat localize "STR_EPOCH_TRADE_DEBUG"; + }; +} else { + _itemText = if (Z_SingleCurrency) then {CurrencyName} else {[_amount,true] call z_calcCurrency}; + if (Z_SingleCurrency) then { + systemChat format[localize "STR_CL_VG_NEED_COINS",[_amount] call BIS_fnc_numberText,_itemText,_name]; + } else { + systemChat format[localize "STR_CL_VG_NEED_BRIEFCASES",_itemText,_name]; + }; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/vehicleInfo.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/vehicleInfo.sqf new file mode 100755 index 0000000..9b75277 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/vehicleInfo.sqf @@ -0,0 +1,110 @@ +// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/) +// Rewritten by salival (https://github.com/oiad) + +private ["_backPackCount","_backPackSlots","_cargoAmount","_control","_counter","_DateStored","_formattedText","_index","_inventory","_localVehicle","_magazineCount","_magazineSlots","_name","_picture","_price","_typeOf","_vehicle","_weaponSlots","_weaponsCount","_MaintainDays","_DateMaintained"]; + +disableSerialization; + +_control = (_this select 0) select 0; +_index = (_this select 0) select 1; +_localVehicle = typeName (vg_vehicleList select _index) == "OBJECT"; +_DateMaintained = ""; +_MaintainDays = -1; +_gearCount = { + private ["_counter"]; + _counter = 0; + {_counter = _counter + _x;} count _this; + _counter; +}; + +if (_localVehicle) then { + _vehicle = vg_vehicleList select _index; + _typeOf = typeOf _vehicle; + _weaponsCount = ((getWeaponCargo _vehicle) select 1) call _gearCount; + _magazineCount = ((getMagazineCargo _vehicle) select 1) call _gearCount; + _backPackCount = ((getBackpackCargo _vehicle) select 1) call _gearCount; + ctrlShow[2852,false]; // getVehicle + ctrlShow[2850,true]; // storeVehicle + ctrlShow[2851,true]; // storeVehicleWithGear +} else { + _vehicle = (vg_vehicleList select _index) select 1; + _inventory = (vg_vehicleList select _index) select 2; + _DateStored = (vg_vehicleList select _index) select 4; + _DateMaintained = (vg_vehicleList select _index) select 5; + _MaintainDays = (vg_vehicleList select _index) select 6; + _typeOf = _vehicle; + _weaponsCount = _inventory select 0; + _magazineCount = _inventory select 1; + _backPackCount = _inventory select 2; + + ctrlShow[2852,true]; // getVehicle + ctrlShow[2850,false]; // storeVehicle + ctrlShow[2851,false]; // storeVehicleWithGear +}; + +_weaponSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxWeapons"); +_magazineSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxMagazines"); +_backPackSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportmaxbackpacks"); +_name = getText(configFile >> "CfgVehicles" >> _typeOf >> "displayName"); +_picture = getText (configFile >> 'CfgVehicles' >> _typeOf >> 'picture'); + +_cargoAmount = (_weaponsCount + _magazineCount + _backPackCount); + +if (_localVehicle) then { + { + if (_typeOf isKindOf (_x select 0)) exitWith {_price = _x select 1;}; + } forEach vg_price; + if (_cargoAmount > 0) then { + _price = _price + (_cargoAmount * vg_pricePer); + ctrlShow[2850,false]; + } else { + ctrlShow[2851,false]; + }; + _price = if (_price == 0) then {localize "strwffree"} else { + if (!isNil "sk_dualCurrency") then {_price = if (z_singleCurrency) then {_price * 10} else {_price};}; + if (z_singleCurrency) then { + format ["%1 %2",[_price] call BIS_fnc_numberText,currencyName] + } else { + [_price,true] call z_calcCurrency + }; + }; +}; + +_formattedText = format [ + "
" + + "%2: %3
" + + "%4: %5
" + + "%6: %13/%10 %14/%11 %15/%12
", + _picture, + localize "STR_EPOCH_NAME", + _name, + localize "STR_EPOCH_CLASS", + _typeOf, + localize "STR_EPOCH_CARGO_SPACE", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_weapons_white.paa", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_items_white.paa", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_backPacks_white.paa", + _weaponSlots, + _magazineSlots, + _backPackSlots, + _weaponsCount, + _magazineCount, + _backPackCount +]; + +if (_localVehicle) then {_formattedText = _formattedText + format ["%1: %2
",localize "STR_CL_VG_PRICE",_price];}; +if (!_localVehicle) then { + if (_DateStored != "old") then { + _formattedText = _formattedText + format ["%1: %2
",localize "STR_CL_VG_STOREDATE",_DateStored]; + if (_MaintainDays >= 0) then { + _formattedText = _formattedText + format ["%1: %2
%3: %4
",localize "STR_CL_VG_MAINTAINDATE",_DateMaintained,localize "STR_CL_VG_MAINTAININTERVAL",_MaintainDays]; + }; + } else { + _formattedText = _formattedText + format ["%1: %2
",localize "STR_CL_VG_STOREDATE",localize "STR_CL_VG_STOREDATE_INVALID"]; + }; +}; + +((findDisplay 2800) displayCtrl 2803) ctrlSetStructuredText parseText _formattedText; + +ctrlShow [2803,true]; +ctrlShow [2830,true]; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/virtualGarage.hpp b/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/virtualGarage.hpp new file mode 100755 index 0000000..975259e --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/virtualGarage.hpp @@ -0,0 +1,367 @@ +// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/) +// Rewritten by salival (https://github.com/oiad) + +class vg_RscText { + idc = -1; + x = 0; + y = 0; + h = 0.037; + w = 0.3; + type = 0; + style = 0; + shadow = 2; + colorShadow[] = {0, 0, 0, 0.5}; + font = "Zeppelin32"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + colorText[] = {1, 1, 1, 1.0}; + colorBackground[] = {0, 0, 0, 0}; + linespacing = 1; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; +}; + +class vg_RscTitle : vg_RscText { + idc = -1; + style = 0; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {0.95, 0.95, 0.95, 1}; +}; + +class vg_RscShortcutButton { + idc = -1; + style = 0; + default = 0; + shadow = 2; + w = 0.183825; + h = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)"; + color[] = {1,1,1,1.0}; + colorFocused[] = {1,1,1,1.0}; + color2[] = {0.95,0.95,0.95,1}; + colorDisabled[] = {1,1,1,0.25}; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackgroundFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackground2[] = {1,1,1,1}; + animTextureDefault = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureNormal = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureDisabled = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureOver = "gza\scripts\gold\gui\over_ca.paa"; + animTextureFocused = "gza\scripts\gold\gui\focus_ca.paa"; + animTexturePressed = "gza\scripts\gold\gui\down_ca.paa"; + periodFocus = 1.2; + periodOver = 0.8; + class HitZone { + left = 0.0; + top = 0.0; + right = 0.0; + bottom = 0.0; + }; + class ShortcutPos { + left = 0; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + }; + class TextPos { + left = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + period = 0.4; + font = "Zeppelin32"; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + action = ""; + class Attributes { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + shadow = 1; + }; + class AttributesImage { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + }; + soundPush[] = { "", 0, 1 }; + soundEnter[] ={ "", 0, 1 }; + soundClick[] ={ "", 0, 1 }; + soundEscape[] ={ "", 0, 1 }; + sound[] ={ "", 0, 1 }; +}; + +class vg_RscButtonMenu : vg_RscShortcutButton { + idc = -1; + type = 16; + style = "0x02 + 0xC0"; + default = 0; + shadow = 0; + x = 0; + y = 0; + w = 0.095589; + h = 0.039216; + animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; + colorBackground[] = {0,0,0,0.8}; + colorBackgroundFocused[] = {1,1,1,1}; + colorBackground2[] = {0.75,0.75,0.75,1}; + color[] = {1,1,1,1}; + colorFocused[] = {0,0,0,1}; + color2[] = {0,0,0,1}; + colorText[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.25}; + period = 1.2; + periodFocus = 1.2; + periodOver = 1.2; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; + class TextPos { + left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + class Attributes { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "center"; + shadow = 0; + }; + class ShortcutPos { + left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005"; + top = 0.005; + w = 0.0225; + h = 0.03; + }; + textureNoShortcut = ""; +}; + +class vg_RscListBox { + style = 16; + idc = -1; + type = 5; + w = 0.275; + h = 0.04; + font = "Zeppelin32"; + colorSelect[] = {0.11,0.686,0.831,1}; + colorText[] = {1, 1, 1, 1}; + colorBackground[] = {0.28,0.28,0.28,0.28}; + colorSelect2[] = {1, 1, 1, 1}; + colorSelectBackground[] = {0.95, 0.95, 0.95, 0.5}; + colorSelectBackground2[] = {1, 1, 1, 0.5}; + colorScrollbar[] = {0.2, 0.2, 0.2, 1}; + arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa"; + arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa"; + wholeHeight = 0.45; + rowHeight = 0.04; + color[] = {0.7, 0.7, 0.7, 1}; + colorActive[] = {0,0,0,1}; + colorDisabled[] = {0,0,0,0.3}; + sizeEx = 0.023; + maxHistoryDelay = 1; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; + class ScrollBar { + color[] = {1, 1, 1, 0.6}; + colorActive[] = {1, 1, 1, 1}; + colorDisabled[] = {1, 1, 1, 0.3}; + thumb = "\ca\ui\data\igui_scrollbar_thumb_ca.paa"; + arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa"; + arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa"; + border = "\ca\ui\data\igui_border_scroll_ca.paa"; + }; + soundPush[] = { "", 0, 1 }; + soundEnter[] ={ "", 0, 1 }; + soundClick[] ={ "", 0, 1 }; + soundEscape[] ={ "", 0, 1 }; + sound[] ={ "", 0, 1 }; + soundSelect[] = { "", 0, 1 }; +}; + +class vg_RscStructuredText { + type = 13; + style = 0; + x = 0; + y = 0; + h = 0.035; + w = 0.1; + text = ""; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {1, 1, 1, 1.0}; + shadow = 1; + class Attributes { + font = "Zeppelin32"; + color = "#ffffff"; + align = "left"; + shadow = 1; + }; +}; + +class virtualGarage { + idd = 2800; + name="virtualGarage"; + onload = "player setVariable['isBusy',true,true]; [] spawn vg_maintainSetText;"; + onUnload = "player setVariable['isBusy',false,true];dayz_actionInProgress = false;"; + movingEnabled = 0; + enableSimulation = 1; + + class controlsBackground { + class vg_RscTitleBackground : vg_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class MainBackground : vg_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.7 - (22 / 250); + }; + + class Title : vg_RscTitle { + idc = 2801; + text = $STR_CL_VG_VIRTUAL_GARAGE; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class VehicleInfoHeader : vg_RscText { + idc = 2830; + text = $STR_CL_VG_VEHICLE_INFO; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.47; y = 0.26; + w = 0.42; + h = (1 / 25); + }; + + class CloseBtn : vg_RscButtonMenu { + idc = -1; + text = $STR_UI_CLOSE; + onButtonClick = "closeDialog 2;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; + + class controls { + class VehicleList : vg_RscListBox { + idc = 2802; + text = ""; + sizeEx = 0.04; + colorBackground[] = {0.1,0.1,0.1,0.9}; + onLBSelChanged = "[_this] call vehicleInfo;"; + x = 0.11; y = 0.302; + w = 0.35; h = 0.49; + }; + + class VehicleTitleBox : vg_RscText { + idc = 2804; + text = ""; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.11; y = 0.26; + w = 0.35; + h = (1 / 25); + }; + + class storeVehicle : vg_RscButtonMenu { + idc = 2850; + text = $STR_CL_VG_STORE_VEHICLE; + onButtonClick = "if (!vg_hasRun) then {vg_hasRun = true;[true] spawn player_storeVehicle;};"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 36); + h = (1 / 25); + }; + + class storeVehicleGear : vg_RscButtonMenu { + idc = 2851; + text = $STR_CL_VG_STORE_VEHICLE_GEAR; + onButtonClick = "if (!vg_hasRun) then {vg_hasRun = true;[false] spawn player_storeVehicle;};"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 15.85); + h = (1 / 25); + }; + + class getVehicle : vg_RscButtonMenu { + idc = 2852; + text = $STR_CL_VG_GET_VEHICLE; + onButtonClick = "if (!vg_hasRun) then {vg_hasRun = true;[] spawn player_getVehicle;};"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 20); + h = (1 / 25); + }; + + class removePad : vg_RscButtonMenu { + idc = 2853; + text = $STR_CL_VG_REMOVE_PAD; + onButtonClick = "call player_removePad;"; + x = 0.5 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = 0.241; + h = (1 / 25); + }; + + class MaintainGarage : vg_RscButtonMenu { + idc = 2854; + text = $STR_CL_VG_MAINTAIN_GARAGE; + onButtonClick = "if (!vg_hasRun) then {vg_hasRun = true;[] spawn Player_MaintainVG;};"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.903; + w = 0.8; + h = (1 / 25); + }; + + class vehicleInfomationList : vg_RscStructuredText { + idc = 2803; + text = ""; + sizeEx = 0.035; + x = 0.47; y = 0.3; + w = 0.41; h = 0.5; + }; + + class MainBackgroundHider : vg_RscText { + colorBackground[] = {0,0,0,1}; + idc = 2810; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.7 - (22 / 250); + }; + + class MainHideText : vg_RscText { + idc = 2811; + text = $STR_CL_VG_SEARCH_VEHICLES; + sizeEx = 0.06; + x = 0.10; + y = 0.5; + w = 0.8; + h = (1 / 15); + }; + }; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/virtualGarage.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/virtualGarage.sqf new file mode 100755 index 0000000..d159d83 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/virtualGarage/virtualGarage.sqf @@ -0,0 +1,90 @@ +// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/) +// Rewritten by salival (https://github.com/oiad) + +private ["_class","_control","_displayName","_heliPad","_isNearPlot","_itemText","_localVehicles","_plotCheck","_storedVehicles","_vgDisplCtl"]; + +if (isNil "vg_init") then { + player_getVehicle = compile preprocessFileLineNumbers "scripts\virtualGarage\player_getVehicle.sqf"; + player_removePad = compile preprocessFileLineNumbers "scripts\virtualGarage\player_removePad.sqf"; + player_storeVehicle = compile preprocessFileLineNumbers "scripts\virtualGarage\player_storeVehicle.sqf"; + Player_MaintainVG = compile preprocessFileLineNumbers "scripts\virtualGarage\player_MaintainVG.sqf"; + vehicleInfo = compile preprocessFileLineNumbers "scripts\virtualGarage\vehicleInfo.sqf"; + vg_maintainSetText = { + disableSerialization; + waituntil {!isNull (findDisplay 2800)}; + _vgDisplCtl = (findDisplay 2800) displayCtrl 2854; + if (vg_maintainCost > 0) then { + _itemText = if (Z_SingleCurrency) then {CurrencyName} else {[vg_maintainCost,true] call z_calcCurrency}; + if (Z_SingleCurrency) then { + _vgDisplCtl ctrlSetText format["%1 (%2 %3)",localize "STR_CL_VG_MAINTAIN_GARAGE",vg_maintainCost,_itemText]; + } else { + _vgDisplCtl ctrlSetText format["%1 (%2)",localize "STR_CL_VG_MAINTAIN_GARAGE",_itemText]; + }; + } else { + _vgDisplCtl ctrlSetText format["%1 (%2)",localize "STR_CL_VG_MAINTAIN_GARAGE",localize "strwffree"]; + }; + }; + vg_init = true; +}; + +if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; +dayz_actionInProgress = true; + +disableSerialization; + +vg_hasRun = false; + +createDialog "virtualGarage"; + +{ctrlShow [_x,false]} count [2803,2830,2850,2851,2852,2853]; + +_plotCheck = [player,false] call FNC_find_plots; +_isNearPlot = (_plotCheck select 1) > 0; + +PVDZE_queryVehicle = if (vg_tiedToPole) then { + [player,if (_isNearPlot) then {(_plotCheck select 2) getVariable ["ownerPUID","0"]} else {dayz_playerUID}] +} else { + [player] +}; + +publicVariableServer "PVDZE_queryVehicle"; +waitUntil {!isNil "PVDZE_queryVehicleResult"}; + +_storedVehicles = PVDZE_queryVehicleResult; +PVDZE_queryVehicle = nil; +PVDZE_queryVehicleResult = nil; + +_localVehicles = ([player] call FNC_getPos) nearEntities [["Air","LandVehicle","Ship"],Z_VehicleDistance]; +_heliPad = nearestObjects [if (_isNearPlot) then {_plotCheck select 2} else {player},vg_heliPads,if (_isNearPlot) then {DZE_maintainRange} else {Z_VehicleDistance}]; + +if (count _heliPad > 0 && {_isNearPlot}) then {ctrlShow[2853,true];}; + +_control = ((findDisplay 2800) displayCtrl 2802); +lbClear _control; + +if (count _storedVehicles == 0 && {isNull DZE_myVehicle || {!(alive DZE_myVehicle)} || {!(local DZE_myVehicle)}}) exitWith {ctrlSetText[2811,localize "STR_CL_VG_NO_VEHICLES"];}; + +vg_vehicleList = []; + +{ + _displayName = getText(configFile >> "CfgVehicles" >> (_x select 1) >> "displayName"); + _control lbAdd _displayName; + _control lbSetData [(lbSize _control)-1,str(_x)]; + vg_vehicleList set [count vg_vehicleList,_x]; +} count _storedVehicles; + +{ + if (!isNull DZE_myVehicle && {local DZE_myVehicle} && {alive DZE_myVehicle} && {DZE_myVehicle == _x}) then { + _class = typeOf _x; + _displayName = getText(configFile >> "CfgVehicles" >> _class >> "displayName"); + _control lbAdd _displayName; + _control lbSetData [(lbSize _control)-1,_class]; + _control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]]; + vg_vehicleList set [count vg_vehicleList,_x]; + }; +} count _localVehicles; + +ctrlShow[2810,false]; +ctrlShow[2811,false]; + +ctrlSetText [2804, format ["%1 (%2 %3)",localize "STR_CL_VG_YOUR_VEHICLES",count (_storedVehicles),localize "STR_CL_VG_VEHICLES"]]; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/vkc/vehicleInfo.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/vkc/vehicleInfo.sqf new file mode 100755 index 0000000..e430206 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/vkc/vehicleInfo.sqf @@ -0,0 +1,68 @@ +private ["_backPackCount","_backPackCount_raw","_backPackSlots","_formattedText","_gearCount","_magazineCount","_magazineCount_raw","_magazineSlots","_name","_picture","_price","_text","_typeOf","_weaponSlots","_weaponsCount","_weaponsCount_raw"]; + +_gearCount = { + private ["_counter"]; + _counter = 0; + {_counter = _counter + _x;} count _this; + _counter +}; + +if (vkc_action == "claim") then { + ctrlShow[4850,true]; + _text = localize "STR_CL_VKC_CLAIM"; + _price = vkc_claimPrice; +} else { + ctrlShow[4851,true]; + _text = localize "STR_CL_VKC_CHANGE"; + _price = vkc_changePrice; +}; + +_typeOf = typeOf vkc_cursorTarget; +_weaponsCount_raw = getWeaponCargo vkc_cursorTarget; +_magazineCount_raw = getMagazineCargo vkc_cursorTarget; +_backPackCount_raw = getBackpackCargo vkc_cursorTarget; + +_weaponSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxWeapons"); +_magazineSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxMagazines"); +_backPackSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportmaxbackpacks"); +_name = getText(configFile >> "CfgVehicles" >> _typeOf >> "displayName"); +_picture = getText(configFile >> 'CfgVehicles' >> _typeOf >> 'picture'); + +_weaponsCount = (_weaponsCount_raw select 1) call _gearCount; +_magazineCount = (_magazineCount_raw select 1) call _gearCount; +_backPackCount = (_backPackCount_raw select 1) call _gearCount; + +if (!isNil "sk_dualCurrency") then {if (z_singleCurrency) then {_price = _price * 10};}; + +_price = if (z_singleCurrency) then { + format ["%1 %2",[_price] call BIS_fnc_numberText,currencyName] +} else { + [_price,true] call z_calcCurrency +}; +_formattedText = format [ + "
" + + "%2: %3
" + + "%4: %5
" + + "%6: %13/%10 %14/%11 %15/%12
" + + "Price to %16: %17
", + _picture, + localize "STR_EPOCH_NAME", + _name, + localize "STR_EPOCH_CLASS", + _typeOf, + localize "STR_EPOCH_CARGO_SPACE", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_weapons_white.paa", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_items_white.paa", + "\z\addons\dayz_code\gui\gear\gear_ui_slots_backPacks_white.paa", + _weaponSlots, + _magazineSlots, + _backPackSlots, + _weaponsCount, + _magazineCount, + _backPackCount, + toLower (_text), + _price +]; + +((findDisplay 4800) displayCtrl 4803) ctrlSetStructuredText parseText _formattedText; +ctrlShow [4803,true]; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/vkc/vehicleKeyChanger.sqf b/MPMissions/DayZ_Epoch_24.Napf/scripts/vkc/vehicleKeyChanger.sqf new file mode 100755 index 0000000..91e4067 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/vkc/vehicleKeyChanger.sqf @@ -0,0 +1,181 @@ +/* + Vehicle Key Changer by salival (https://github.com/oiad) + + This version adds support for both single currency and gems (from the epoch 1.0.6 update) as well as the original epoch briefcase currency system. + Instead of pricing things like the original way, prices are now done on a "worth" similar to how coins are done. The price value of items are below. + If you are using coins, I would recommend using the _currencyModifier variable since coins typically are 10x the value of briefcase based currency (1 brief == 100,000 coins) + + 1 silver = 1 worth + 1 10oz silver = 10 worth + 1 gold = 100 worth + 1 10oz gold = 1,000 worth + 1 briefcase = 10,000 worth + + Please see dayz_code\configVariables.sqf for the value of gems (DZE_GemWorthArray) and their relevant worth if they are enabled. +*/ + +disableSerialization; + +if (isNil "vkc_init") then { + vkc_vehicleInfo = compile preprocessFileLineNumbers "scripts\vkc\vehicleInfo.sqf"; + vkc_init = true; +}; + +private ["_amount","_characterID","_control","_currencyModifier","_enoughMoney","_exit","_foundPos","_index","_itemText","_message","_moneyInfo","_name","_playerNear","_position","_success","_typeOf","_vehicleID","_vehicleUID","_wealth"]; + +if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;}; +dayz_actionInProgress = true; + +vkc_cursorTarget = (_this select 3) select 0; +_characterID = (_this select 3) select 1; +vkc_action = (_this select 3) select 2; + +vkc_isOk = false; + +player removeAction s_player_claimVehicle; +s_player_claimVehicle = 1; +player removeAction s_player_copyToKey; +s_player_copyToKey = 1; + +_exit = { + vkc_action = nil; + vkc_keyList = nil; + vkc_keyName = nil; + vkc_charID = nil; + vkc_isOk = nil; + vkc_cursorTarget = nil; + s_player_copyToKey = -1; + s_player_claimVehicle = -1; + dayz_actionInProgress = false; +}; + +_playerNear = {isPlayer _x} count (([vkc_cursorTarget] call FNC_GetPos) nearEntities ["CAManBase", 10]) > 1; +if (_playerNear) exitWith {call _exit; localize "str_pickup_limit_5" call dayz_rollingMessages;}; + +if (isNull vkc_cursorTarget) exitWith {call _exit; systemChat localize "str_cursorTargetNotFound";}; + +if !(vkc_cursorTarget isKindOf "Air" || {vkc_cursorTarget isKindOf "LandVehicle"} || {vkc_cursorTarget isKindOf "Ship"}) exitWith {call _exit; localize "STR_CL_VKC_FAIL_CURSOR" call dayz_rollingMessages;}; + +if (isNull DZE_myVehicle || {!(alive DZE_myVehicle)} || {!(local DZE_myVehicle)}) exitWith {call _exit; localize "str_epoch_player_245" call dayz_rollingMessages;}; + +_vehicleID = vkc_cursorTarget getVariable ["ObjectID","0"]; +_vehicleUID = vkc_cursorTarget getVariable ["ObjectUID","0"]; + +_typeOf = typeOf vkc_cursorTarget; +_name = getText(configFile >> "cfgVehicles" >> _typeOf >> "displayName"); + +if ((_vehicleID == "0" && {_vehicleUID == "0"}) || {_vehicleID == "1" || _vehicleUID == "1"}) exitWith {call _exit; format[localize "STR_CL_VKC_FAIL_SUPPORT",_name] call dayz_rollingMessages;}; + +if (_vehicleUID == "0") then { + _vehicleUID = ""; + { + _x = _x * 10; + if (_x < 0) then {_x = _x * -10}; + _vehicleUID = _vehicleUID + str(round(_x)); + } forEach getPosATL vkc_cursorTarget; + _vehicleUID = _vehicleUID + str(round((getDir vkc_cursorTarget) + time)); + vkc_cursorTarget setVariable["ObjectUID",_vehicleUID,true]; +}; + +vkc_keyList = call epoch_tempKeys; + +if (vkc_action == "change") then { + _amount = vkc_changePrice; + _message = [localize "STR_CL_VKC_CHANGE_MESSAGE_1",localize "STR_CL_VKC_CHANGE_MESSAGE_2",localize "STR_CL_VKC_CHANGE_MESSAGE_3"]; + _foundPos = (vkc_keyList select 0) find _characterID; + if (_foundPos >= 0) then { + vkc_keyList set [0,(vkc_keyList select 0) - [(vkc_keyList select 0) select _foundPos]]; + vkc_keyList set [1,(vkc_keyList select 1) - [(vkc_keyList select 1) select _foundPos]]; + vkc_keyList set [2,(vkc_keyList select 2) - [(vkc_keyList select 2) select _foundPos]]; + } else { + vkc_keyList = [[],[]]; + }; +} else { + _amount = vkc_claimPrice; + _message = [localize "STR_CL_VKC_CLAIM_MESSAGE_1",localize "STR_CL_VKC_CLAIM_MESSAGE_2",localize "STR_CL_VKC_CLAIM_MESSAGE_3"]; +}; + +if (count (vkc_keyList select 0) == 0) exitWith {systemChat localize "STR_CL_VKC_FAIL_KEYS"; call _exit;}; + +if (!isNil "sk_dualCurrency") then {if (z_singleCurrency) then {_amount = _amount * 10};}; + +_itemText = if (Z_SingleCurrency) then {format ["%1 %2",[_amount] call BIS_fnc_numberText,CurrencyName]} else {[_amount,true] call z_calcCurrency}; + +createDialog "vkc"; +{ctrlShow [_x,false]} count [4803,4850,4851]; + +call vkc_vehicleInfo; + +_control = ((findDisplay 4800) displayCtrl 4802); +lbClear _control; + +{ + _index = _control lbAdd ((vkc_keyList select 1) select _forEachIndex); + _control lbSetPicture [_index,getText(configFile >> "CfgWeapons" >> ((vkc_keyList select 2) select _index) >> "picture")]; +} forEach (vkc_keyList select 0); + +_control lbSetCurSel 0; + +waitUntil {!dialog}; + +if (!vkc_isOk) exitWith {call _exit;}; + +if (isNull DZE_myVehicle || {!(alive DZE_myVehicle)} || {!(local DZE_myVehicle)}) exitWith {call _exit; localize "str_epoch_player_245" call dayz_rollingMessages;}; + +_enoughMoney = false; +_moneyInfo = [false,[],[],[],0]; +_wealth = player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0]; + +if (Z_SingleCurrency) then { + _enoughMoney = (_wealth >= _amount); +} else { + Z_Selling = false; + if (Z_AllowTakingMoneyFromVehicle) then {false call Z_checkCloseVehicle}; + _moneyInfo = _amount call Z_canAfford; + _enoughMoney = _moneyInfo select 0; +}; + +_success = if (Z_SingleCurrency) then {true} else {[player,_amount,_moneyInfo,true,0] call Z_payDefault}; + +if (!_success && {_enoughMoney}) exitWith {call _exit;systemChat localize "STR_EPOCH_TRADE_GEAR_AND_BAG_FULL"}; + +if (_enoughMoney) then { + _success = if (Z_SingleCurrency) then {_amount <= _wealth} else {[player,_amount,_moneyInfo,false,0] call Z_payDefault}; + if (_success) then { + if (Z_SingleCurrency) then {player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth - _amount),true];}; + + vkc_cursorTarget setVehicleLock "LOCKED"; + player playActionNow "Medic"; + + _position = [vkc_cursorTarget] call FNC_GetPos; + + [_typeOf,objNull] call fn_waitForObject; + dze_waiting = nil; + + PVDZE_veh_Upgrade = [vkc_cursorTarget,[getDir vkc_cursorTarget,_position],_typeOf,vkc_charID,player,dayz_authKey,if (vkc_action == "change") then {"changed the key for"} else {"claimed"}]; + publicVariableServer "PVDZE_veh_Upgrade"; + + localize "STR_CL_VKC_WAIT" call dayz_rollingMessages; + + waitUntil {!isNil "dze_waiting"}; + + if (dze_waiting == "fail") then { + systemChat format[localize "STR_CL_VKC_FAIL_UPGRADE",_name]; + if (z_singleCurrency) then { + player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),_wealth,true]; + } else { + Z_Selling = true; + _success = [_amount,0,false,0,[],[],false] call Z_returnChange; + }; + } else { + {player reveal _x;} count (player nearEntities [["LandVehicle"],10]); + [format[_message select 0,_name,vkc_keyName],1] call dayz_rollingMessages; + }; + } else { + systemChat localize "STR_EPOCH_TRADE_DEBUG"; + }; +} else { + systemChat format[localize "STR_CL_VKC_FAIL_MONEY",_itemText,_message select 1,_name]; +}; + +call _exit; diff --git a/MPMissions/DayZ_Epoch_24.Napf/scripts/vkc/vkc.hpp b/MPMissions/DayZ_Epoch_24.Napf/scripts/vkc/vkc.hpp new file mode 100755 index 0000000..1dc0c6f --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/scripts/vkc/vkc.hpp @@ -0,0 +1,315 @@ +class vkc_RscText { + idc = -1; + x = 0; + y = 0; + h = 0.037; + w = 0.3; + type = 0; + style = 0; + shadow = 2; + colorShadow[] = {0, 0, 0, 0.5}; + font = "Zeppelin32"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + colorText[] = {1, 1, 1, 1.0}; + colorBackground[] = {0, 0, 0, 0}; + linespacing = 1; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; +}; + +class vkc_RscTitle : vkc_RscText { + idc = -1; + style = 0; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {0.95, 0.95, 0.95, 1}; +}; + +class vkc_RscShortcutButton { + idc = -1; + style = 0; + default = 0; + shadow = 2; + w = 0.183825; + h = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)"; + color[] = {1,1,1,1.0}; + colorFocused[] = {1,1,1,1.0}; + color2[] = {0.95,0.95,0.95,1}; + colorDisabled[] = {1,1,1,0.25}; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackgroundFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; + colorBackground2[] = {1,1,1,1}; + animTextureDefault = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureNormal = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureDisabled = "gza\scripts\gold\gui\normal_ca.paa"; + animTextureOver = "gza\scripts\gold\gui\over_ca.paa"; + animTextureFocused = "gza\scripts\gold\gui\focus_ca.paa"; + animTexturePressed = "gza\scripts\gold\gui\down_ca.paa"; + periodFocus = 1.2; + periodOver = 0.8; + class HitZone { + left = 0.0; + top = 0.0; + right = 0.0; + bottom = 0.0; + }; + class ShortcutPos { + left = 0; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + }; + class TextPos { + left = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + period = 0.4; + font = "Zeppelin32"; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + action = ""; + class Attributes { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + shadow = "true"; + }; + class AttributesImage { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "left"; + }; + soundPush[] = { "", 0, 1 }; + soundEnter[] ={ "", 0, 1 }; + soundClick[] ={ "", 0, 1 }; + soundEscape[] ={ "", 0, 1 }; + sound[] ={ "", 0, 1 }; +}; + +class vkc_RscButtonMenu : vkc_RscShortcutButton { + idc = -1; + type = 16; + style = "0x02 + 0xC0"; + default = 0; + shadow = 0; + x = 0; + y = 0; + w = 0.095589; + h = 0.039216; + animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; + colorBackground[] = {0,0,0,0.8}; + colorBackgroundFocused[] = {1,1,1,1}; + colorBackground2[] = {0.75,0.75,0.75,1}; + color[] = {1,1,1,1}; + colorFocused[] = {0,0,0,1}; + color2[] = {0,0,0,1}; + colorText[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.25}; + period = 1.2; + periodFocus = 1.2; + periodOver = 1.2; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; + class TextPos { + left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0.0; + }; + class Attributes { + font = "Zeppelin32"; + color = "#E5E5E5"; + align = "center"; + shadow = "false"; + }; + class ShortcutPos { + left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005"; + top = 0.005; + w = 0.0225; + h = 0.03; + }; + textureNoShortcut = ""; +}; + +class vkc_RscListBox { + style = 16; + idc = -1; + type = 5; + w = 0.275; + h = 0.04; + font = "Zeppelin32"; + colorSelect[] = {0.11,0.686,0.831,1}; + colorText[] = {1, 1, 1, 1}; + colorBackground[] = {0.28,0.28,0.28,0.28}; + colorSelect2[] = {1, 1, 1, 1}; + colorSelectBackground[] = {0.95, 0.95, 0.95, 0.5}; + colorSelectBackground2[] = {1, 1, 1, 0.5}; + colorScrollbar[] = {0.2, 0.2, 0.2, 1}; + arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa"; + arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa"; + wholeHeight = 0.45; + rowHeight = 0.04; + color[] = {0.7, 0.7, 0.7, 1}; + colorActive[] = {0,0,0,1}; + colorDisabled[] = {0,0,0,0.3}; + sizeEx = 0.023; + maxHistoryDelay = 1; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + tooltipColorShade[] = {0,0,0,0.65}; + class ScrollBar { + color[] = {1, 1, 1, 0.6}; + colorActive[] = {1, 1, 1, 1}; + colorDisabled[] = {1, 1, 1, 0.3}; + thumb = "\ca\ui\data\igui_scrollbar_thumb_ca.paa"; + arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa"; + arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa"; + border = "\ca\ui\data\igui_border_scroll_ca.paa"; + }; + soundPush[] = { "", 0, 1 }; + soundEnter[] ={ "", 0, 1 }; + soundClick[] ={ "", 0, 1 }; + soundEscape[] ={ "", 0, 1 }; + sound[] ={ "", 0, 1 }; + soundSelect[] = { "", 0, 1 }; +}; + +class vkc_RscStructuredText { + type = 13; + style = 0; + x = 0; + y = 0; + h = 0.035; + w = 0.1; + text = ""; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {1, 1, 1, 1.0}; + shadow = 1; + class Attributes { + font = "Zeppelin32"; + color = "#ffffff"; + align = "left"; + shadow = 1; + }; +}; + +class vkc { + idd = 4800; + name="vkc"; + onload = "player setVariable['isBusy',true,true];"; + onUnload = "player setVariable['isBusy',false,true];"; + movingEnabled = 0; + enableSimulation = 1; + + class controlsBackground { + class vkc_RscTitleBackground : vkc_RscText { + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + idc = -1; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class MainBackground : vkc_RscText { + colorBackground[] = {0,0,0,0.7}; + idc = -1; + x = 0.1; + y = 0.2 + (11 / 250); + w = 0.8; + h = 0.7 - (22 / 250); + }; + + class Title : vkc_RscTitle { + idc = 4801; + text = $STR_CL_VKC_TITLE; + x = 0.1; + y = 0.2; + w = 0.8; + h = (1 / 25); + }; + + class VehicleInfoHeader : vkc_RscText { + idc = 4830; + text = $STR_CL_VKC_INFO; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.47; y = 0.26; + w = 0.42; + h = (1 / 25); + }; + + class CloseBtn : vkc_RscButtonMenu { + idc = -1; + text = $STR_UI_CLOSE; + onButtonClick = "closeDialog 2;"; + x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 40); + h = (1 / 25); + }; + }; + + class controls { + class VehicleList : vkc_RscListBox { + idc = 4802; + text = ""; + sizeEx = 0.04; + colorBackground[] = {0.1,0.1,0.1,0.9}; + onLBSelChanged = "vkc_charID = (vkc_keyList select 0) select (lbCurSel 4802);vkc_keyName = (vkc_keyList select 1) select (lbCurSel 4802);"; + x = 0.11; y = 0.302; + w = 0.35; h = 0.49; + }; + + class VehicleTitleBox : vkc_RscText { + idc = 4804; + text = $STR_CL_VKC_KEYS; + colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"}; + x = 0.11; y = 0.26; + w = 0.35; + h = (1 / 25); + }; + + class claimVehicle : vkc_RscButtonMenu { + idc = 4850; + text = $STR_CL_VKC_CLAIM; + onButtonClick = "vkc_isOk = true;closeDialog 0;"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 20); + h = (1 / 25); + }; + + class changeKey : vkc_RscButtonMenu { + idc = 4851; + text = $STR_CL_VKC_CHANGE; + onButtonClick = "vkc_isOk = true;closeDialog 0;"; + x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); + y = 0.9 - (1 / 25); + w = (6.25 / 20); + h = (1 / 25); + }; + + class vehicleInfomationList : vkc_RscStructuredText { + idc = 4803; + text = ""; + sizeEx = 0.035; + x = 0.47; y = 0.3; + w = 0.41; h = 0.5; + }; + }; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/config.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/config.sqf new file mode 100755 index 0000000..c7ea82b --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/config.sqf @@ -0,0 +1,57 @@ +/* + ESSV3 Client Side Config + + For detailed information about these variables see: + https://github.com/ebayShopper/ESSV3/blob/master/DOCUMENTATION.md +*/ + +class_selection = true; //Enable class selection dialog +#define START_ITEMS "HandRoadFlare","ItemBandage",2,"ItemPainkiller","ItemWaterbottle","FoodPistachio","PartGeneric" +class_public = [ // These are visible to anyone on the server + [(localize "str_playerstats_bandit")+" Lvl1","Bandit1_DZ","BanditW1_DZ",[START_ITEMS,"17Rnd_9x19_glock17",2],["G17_DZ"],"",[],[],0,-5000,0,""], + [(localize "str_playerstats_bandit")+" Lvl2","Bandit1_DZ","BanditW1_DZ",[START_ITEMS,"30Rnd_9x19_UZI",3,"ItemMorphine"],["PDW_DZ"],if (class_epoch) then {"Assault_Pack_DZE1"} else {"DZ_Assault_Pack_EP1"},[],[],0,-15000,0,""], + [(localize "str_playerstats_bandit")+" Lvl3","Bandit1_DZ","BanditW1_DZ",[START_ITEMS,"30Rnd_9x19_UZI_SD",4,"ItemMorphine"],["PDW_SD_DZ"],if (class_epoch) then {"TK_Assault_Pack_DZE1"} else {"DZ_TK_Assault_Pack_EP1"},[],[],0,-25000,0,"MeleeHatchet"], + [(localize "str_playerstats_hero")+" Lvl1",if (class_epoch) then {"Soldier_Sniper_PMC_DZ"} else {"Survivor3_DZ"},"SurvivorW2_DZ",[START_ITEMS,"6Rnd_45ACP",2],["Revolver_DZ"],"",[],[],0,10000,0,""], + [(localize "str_playerstats_hero")+" Lvl2",if (class_epoch) then {"Soldier_Sniper_PMC_DZ"} else {"Survivor3_DZ"},"SurvivorW2_DZ",[START_ITEMS,"30Rnd_9x19_UZI",3,"ItemMorphine"],["PDW_DZ"],if (class_epoch) then {"Assault_Pack_DZE1"} else {"DZ_Assault_Pack_EP1"},[],[],0,20000,0,""], + [(localize "str_playerstats_hero")+" Lvl3",if (class_epoch) then {"Soldier_Sniper_PMC_DZ"} else {"Survivor3_DZ"},"SurvivorW2_DZ",[START_ITEMS,"30Rnd_9x19_UZI_SD",4,"ItemMorphine"],["PDW_SD_DZ"],if (class_epoch) then {"TK_Assault_Pack_DZE1"} else {"DZ_TK_Assault_Pack_EP1"},[],[],0,30000,0,"MeleeHatchet"], + [localize "str_playerstats_survivor","Survivor2_DZ","SurvivorW2_DZ",[START_ITEMS,"8Rnd_9x18_Makarov",2],["Makarov_DZ"],"",[],[],0,0,0] +]; + +halo_selection = true; // Enable HALO selection dialog +halo_force = false; // Skip HALO selection dialog and force HALO spawn. +halo_type = "C130J_US_EP1_DZ"; // Type of plane. Tested with C130J_US_EP1_DZ, AN2_DZ, MV22_DZ. Use "" to disable the plane and use regular HALO. + +spawn_selection = true; // Enable spawn selection dialog +spawn_bodyCheck = 1500; // If a player has a body within this distance of a spawn that spawn will be blocked. Set to -1 to disable. +spawn_nearGroup = false; // Allow players to spawn near their group. BodyCheck can override. +spawn_nearPlot = true; // Allow players to spawn near their plot. BodyCheck can override. +spawn_radius = 1200; // Distance around spawn to find a safe pos. Lower is closer to exact coordinates. Do not set too low or BIS_fnc_findSafePos may fail. + +spawn_public = switch (toLower worldName) do { + case "napf": { + [ + [localize "str_disp_srvsetup_random",[[5411,16676,0],[1511,11479,0],[12231,16319,0],[6946,17385,0],[12862,14850,0],[4672,14940,0],[2720,12226,0],[4104,13026,0],[1461,10584,0],[10283,18449,0],[10709,17085,0]],0,0,1], + ["Seltishafen",[5411,16676,0],0,0], + ["Hubel",[1511,11479,0],0,0], + ["Lausen",[12231,16319,0],0,0], + ["Seewen",[6946,17385,0],0,0], + ["Bunig",[12862,14850,0],0,0], + ["Bubendorf",[4672,14940,0],0,0], + ["Hindelbank",[2720,12226,0],0,0], + ["Huttwil",[4104,13026,0],0,0], + ["Ittingen",[1461,10584,0],0,0], + ["Hordstern",[10283,18449,0],0,0], + ["Magden",[10709,17085,0],0,0], + // Above are defaults + ["South Airstrip",[18291,1790,0],0,0], + ["Buckten",[5906,5637,0],0,0], + ["Giswil",[17101,5282,0],0,0], + ["Horw",[17262,13502,0],0,0], + ["Romoos",[12694,11878,0],0,0], + ["Sachseln",[15554,10651,0],0,0], + ["Schangen",[9412,5882,0],0,0], + ["Sissach",[11111,8326,0],0,0], + ["Waldegg",[8538,852,0],0,0] + ] + }; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/dialogs.hpp b/MPMissions/DayZ_Epoch_24.Napf/spawn/dialogs.hpp new file mode 100755 index 0000000..49e1016 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/dialogs.hpp @@ -0,0 +1,530 @@ +#define ESS_BUTTON borderSize = 0;\ + colorBackground[] = {.4,.4,.4,1};\ + colorBackgroundActive[] = {.5,.5,.5,1};\ + colorBackgroundDisabled[] = {.2,.2,.2,1};\ + colorBorder[] = {.88,.88,.88,1};\ + colorDisabled[] = {.2,.2,.2,1};\ + colorFocused[] = {.4,.4,.4,1};\ + colorShadow[] = {0,0,0,0};\ + colorText[] = {1,1,1,1};\ + font = "Zeppelin32";\ + offsetPressedX = .002;\ + offsetPressedY = .002;\ + offsetX = .003;\ + offsetY = .003;\ + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * .6)";\ + soundClick[] = {"\ca\ui\data\sound\onclick",.07,1};\ + soundEnter[] = {"\ca\ui\data\sound\onover",.09,1};\ + soundEscape[] = {"\ca\ui\data\sound\onescape",.09,1};\ + soundPush[] = {"\ca\ui\data\sound\new1",0,0};\ + style = 2;\ + type = 1 + +#define ESS_LISTBOX autoScrollDelay = 5;\ + autoScrollRewind = 0;\ + autoScrollSpeed = -1;\ + colorSelect[] = {.88,.88,.88,1};\ + colorSelectBackground[] = {.5,.5,.5,1};\ + colorText[] = {.88,.88,.88,1};\ + font = "Zeppelin32";\ + maxHistoryDelay = 1;\ + rowHeight = .04;\ + class ScrollBar\ + {\ + color[] = {.5,.5,.5,.5};\ + colorActive[] = {.5,.5,.5,.3};\ + colorDisabled[] = {.5,.5,.5,.1};\ + thumb = "";\ + arrowFull = "\ca\ui\data\arrow_up_ca.paa";\ + arrowEmpty = "\ca\ui\data\arrow_up_ca.paa";\ + border = "\ca\ui\data\ui_border_scroll_ca.paa";\ + shadow = 0;\ + };\ + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * .6)";\ + soundSelect[] = {"",.1,1};\ + style = 16;\ + type = 5 + +class ClassDialog +{ + idd = -1; + onUnload = "deleteVehicle class_bot; deleteVehicle spawn_light;"; + class controlsBackground + { + class ClassBackground: RscText + { + text = ""; + x = .31 * safezoneW + safezoneX; + y = .335 * safezoneH + safezoneY; + w = .138504 * safezoneW; + h = .325 * safezoneH; + colorBackground[] = {.3,.3,.3,1}; + fixedWidth = 0; + }; + }; + class Controls + { + class ClassSelect: RscText + { + text = $STR_ESS_CLASS_SELECT; + x = .31 * safezoneW + safezoneX; + y = .295 * safezoneH + safezoneY; + w = .138504 * safezoneW; + h = .04025 * safezoneH; + colorText[] = {1,1,1,1}; + colorBackground[] = {.384,.702,.886,.8}; + fixedWidth = 0; + shadow = 1; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * .6)"; + }; + class ClassList + { + idc = 8888; + x = .31 * safezoneW + safezoneX; + y = .339 * safezoneH + safezoneY; + w = .138504 * safezoneW; + h = .25 * safezoneH; + onLBSelChanged = "call class_preview;"; + ESS_LISTBOX; + }; + class ClassButton + { + idc = 8889; + text = $STR_USRACT_MENU_SELECT; + x = .324 * safezoneW + safezoneX; + y = .602 * safezoneH + safezoneY; + w = .109 * safezoneW; + h = .044 * safezoneH; + action = "call class_pick; if (count class_choice > 0) then {closeDialog 0;};"; + ESS_BUTTON; + }; + }; +}; + +class HaloDialog +{ + idd = -1; + class controlsBackground + { + class HaloBackground: RscText + { + text = ""; + x = .370287 * safezoneW + safezoneX; + y = .348822 * safezoneH + safezoneY; + w = .260299 * safezoneW; + h = .3 * safezoneH; + colorBackground[] = {.3,.3,.3,1}; + fixedWidth = 0; + }; + }; + class Controls + { + class HaloSelect: RscText + { + text = $STR_ESS_HALO_SELECT; + x = .370288 * safezoneW + safezoneX; + y = .299 * safezoneH + safezoneY; + w = .260299 * safezoneW; + h = .05 * safezoneH; + colorText[] = {1,1,1,1}; + colorBackground[] = {.384,.702,.886,.8}; + fixedWidth = 0; + shadow = 1; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * .6)"; + }; + class HaloAir: RscPicture + { + fixedWidth = 0; + text = "\ca\ui\data\iconplane_ca.paa"; + x = .403107 * safezoneW + safezoneX; + y = .396064 * safezoneH + safezoneY; + w = .0738056 * safezoneW; + h = .0873141 * safezoneH; + }; + class HaloGround: RscPicture + { + fixedWidth = 0; + text = "\ca\ui\data\icontruck_ca.paa"; + x = .524484 * safezoneW + safezoneX; + y = .396064 * safezoneH + safezoneY; + w = .0732848 * safezoneW; + h = .0868511 * safezoneH; + }; + class HaloButtonAir + { + idc = -1; + text = $STR_ESS_AIR; + x = .402585 * safezoneW + safezoneX; + y = .533 * safezoneH + safezoneY; + w = .0743267 * safezoneW; + h = .0877774 * safezoneH; + action = "halo_choice = 1; closeDialog 0;"; + ESS_BUTTON; + }; + class HaloButtonGround + { + idc = -1; + text = $STR_ESS_GROUND; + x = .524484 * safezoneW + safezoneX; + y = .533 * safezoneH + safezoneY; + w = .0743267 * safezoneW; + h = .0877774 * safezoneH; + action = "halo_choice = 0; closeDialog 0;"; + ESS_BUTTON; + }; + }; +}; + +class SpawnDialog +{ + idd = 88890; + onLoad = "uiNamespace setVariable ['BIS_RscMiniMap',_this select 0];"; //Tell groupMarkers to draw while dialog is open + onUnload = "uiNamespace setVariable ['BIS_RscMiniMap',nil];"; + + class controlsBackground + { + class SpawnBackground: RscText + { + text = ""; + x = .305217 * safezoneW + safezoneX; + y = .269348 * safezoneH + safezoneY; + w = .1185 * safezoneW; + h = .4644 * safezoneH; + colorBackground[] = {.3,.3,.3,1}; + fixedWidth = 0; + }; + }; + class Controls + { + class SpawnSelect: RscText + { + text = $STR_ESS_SPAWN_SELECT; + x = .305218 * safezoneW + safezoneX; + y = .269348 * safezoneH + safezoneY; + w = .1185 * safezoneW; + h = .0405354 * safezoneH; + colorText[] = {1,1,1,1}; + colorBackground[] = {.384,.702,.886,.8}; + fixedWidth = 0; + shadow = 1; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * .6)"; + }; + class SpawnList + { + idc = 8888; + x = .305217 * safezoneW + safezoneX; + y = .314737 * safezoneH + safezoneY; + w = .1185 * safezoneW; + h = .33 * safezoneH; + onLBSelChanged = "[] spawn spawn_map;"; + ESS_LISTBOX; + }; + class SpawnButton + { + idc = 8889; + text = $STR_USRACT_MENU_SELECT; + x = .318 * safezoneW + safezoneX; + y = .6565 * safezoneH + safezoneY; + w = .092 * safezoneW; + h = .067 * safezoneH; + action = "call spawn_pick; if (count spawn_choice > 0) then {closeDialog 0;};"; + ESS_BUTTON; + }; + class SpawnMap + { + idc = 8890; + x = .42315 * safezoneW + safezoneX; + y = .269348 * safezoneH + safezoneY; + w = .293691 * safezoneW; + h = .463997 * safezoneH; + moveOnEdges = 0; + shadow = 0; + maxSatelliteAlpha = .85; + alphaFadeStartScale = .35; + alphaFadeEndScale = .4; + colorOutside[] = {0,0,0,1}; + style = 48; + font = "EtelkaNarrowMediumPro"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * .6)"; + type = 101; + colorBackground[] = {.8,.8,.8,1}; + colorText[] = {0,0,0,1}; + colorRailway[] = {.5,.5,.5,.5}; + colorSea[] = {.56,.8,.98,.5}; + colorForest[] = {.6,.8,.2,.5}; + colorRocks[] = {.5,.5,.5,.5}; + colorCountlines[] = {.65,.45,.27,.5}; + colorMainCountlines[] = {.65,.45,.27,1}; + colorCountlinesWater[] = {0,.53,1,.5}; + colorMainCountlinesWater[] = {0,.53,1,1}; + colorForestBorder[] = {.4,.8,0,1}; + colorRocksBorder[] = {.5,.5,.5,1}; + colorPowerLines[] = {0,0,0,1}; + colorNames[] = {0,0,0,1}; + colorInactive[] = {1,1,1,.5}; + colorLevels[] = {.286,.177,.094,.5}; + fontLabel = "TahomaB"; + sizeExLabel = .04; + fontGrid = "TahomaB"; + sizeExGrid = .04; + fontUnits = "TahomaB"; + sizeExUnits = .04; + fontNames = "TahomaB"; + sizeExNames = .04; + fontInfo = "TahomaB"; + sizeExInfo = .04; + fontLevel = "TahomaB"; + sizeExLevel = .04; + text = "#(argb,8,8,3)color(1,1,1,1)"; + stickX[] = {.2,{"Gamma",1,1.5}}; + stickY[] = {.2,{"Gamma",1,1.5}}; + ptsPerSquareSea = 6; + ptsPerSquareTxt = 8; + ptsPerSquareCLn = 8; + ptsPerSquareExp = 8; + ptsPerSquareCost = 8; + ptsPerSquareFor = "4.0f"; + ptsPerSquareForEdge = "10.0f"; + ptsPerSquareRoad = 2; + ptsPerSquareObj = 10; + showCountourInterval = 0; + onMouseMoving = "mouseX = (_this Select 1);mouseY = (_this Select 2)"; + onMouseButtonDown = "mouseButtonDown = _this Select 1"; + onMouseButtonUp = "mouseButtonUp = _this Select 1"; + class CustomMark { + icon = "\ca\ui\data\map_waypoint_ca.paa"; + color[] = {0,0,1,1}; + size = 18; + importance = 1; + coefMin = 1; + coefMax = 1; + }; + class Bunker { + icon = "\ca\ui\data\map_bunker_ca.paa"; + color[] = {0,0,1,1}; + size = 14; + importance = 1.5 * 14 * .05; + coefMin = .25; + coefMax = 4; + }; + class Bush { + icon = "\ca\ui\data\map_bush_ca.paa"; + color[] = {.55,.64,.43,1}; + size = 14; + importance = .2 * 14 * .05; + coefMin = .25; + coefMax = 4; + }; + class BusStop { + icon = "\ca\ui\data\map_busstop_ca.paa"; + color[] = {0,0,1,1}; + size = 10; + importance = 1 * 10 * .05; + coefMin = .25; + coefMax = 4; + }; + class Command { + icon = "#(argb,8,8,3)color(1,1,1,1)"; + color[] = {0,.9,0,1}; + size = 18; + importance = 1; + coefMin = 1; + coefMax = 1; + }; + class Cross { + icon = "\ca\ui\data\map_cross_ca.paa"; + color[] = {0,0,1,1}; + size = 16; + importance = .7 * 16 * .05; + coefMin = .25; + coefMax = 4; + }; + class Fortress { + icon = "\ca\ui\data\map_bunker_ca.paa"; + color[] = {0,0,1,1}; + size = 16; + importance = 2 * 16 * .05; + coefMin = .25; + coefMax = 4; + }; + class Fuelstation { + icon = "#(argb,8,8,3)color(0,0,0,1)"; + color[] = {0,0,0,1}; + size = 16; + importance = 2 * 16 * .05; + coefMin = .75; + coefMax = 4; + }; + class Fountain { + icon = "\ca\ui\data\map_fountain_ca.paa"; + color[] = {0,.35,.7,1}; + size = 12; + importance = 1 * 12 * .05; + coefMin = .25; + coefMax = 4; + }; + class Hospital { + icon = "\ca\ui\data\map_hospital_ca.paa"; + color[] = {.78,0,.05,1}; + size = 16; + importance = 2 * 16 * .05; + coefMin = .5; + coefMax = 4; + }; + class Chapel { + icon = "\ca\ui\data\map_chapel_ca.paa"; + color[] = {0,0,1,1}; + size = 16; + importance = 1 * 16 * .05; + coefMin = .9; + coefMax = 4; + }; + class Church { + icon = "\ca\ui\data\map_church_ca.paa"; + color[] = {0,0,1,1}; + size = 16; + importance = 2 * 16 * .05; + coefMin = .9; + coefMax = 4; + }; + class Legend { + x = "SafeZoneX"; + y = "SafeZoneY"; + w = .34; + h = .152; + font = "Zeppelin32"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * .6)"; + colorBackground[] = {0,0,0,1}; + color[] = {0,0,0,1}; + }; + class Lighthouse { + icon = "\ca\ui\data\map_lighthouse_ca.paa"; + color[] = {.78,0,.05,1}; + size = 20; + importance = 3 * 16 * .05; + coefMin = .9; + coefMax = 4; + }; + class Quay { + icon = "\ca\ui\data\map_quay_ca.paa"; + color[] = {0,0,1,1}; + size = 16; + importance = 2 * 16 * .05; + coefMin = .5; + coefMax = 4; + }; + class Rock { + icon = "\ca\ui\data\map_rock_ca.paa"; + color[] = {0,0,1,1}; + size = 12; + importance = .5 * 12 * .05; + coefMin = .25; + coefMax = 4; + }; + class Ruin { + icon = "\ca\ui\data\map_ruin_ca.paa"; + color[] = {.78,0,.05,1}; + size = 16; + importance = 1.2 * 16 * .05; + coefMin = 1; + coefMax = 4; + }; + class SmallTree { + icon = "\ca\ui\data\map_smalltree_ca.paa"; + color[] = {.55,.64,.43,1}; + size = 12; + importance = .6 * 12 * .05; + coefMin = .25; + coefMax = 4; + }; + class Stack { + icon = "\ca\ui\data\map_stack_ca.paa"; + color[] = {0,0,1,1}; + size = 20; + importance = 2 * 16 * .05; + coefMin = .9; + coefMax = 4; + }; + class Task { + icon = "\ca\ui\data\ui_taskstate_current_CA.paa"; + iconCreated = "\ca\ui\data\ui_taskstate_new_CA.paa"; + iconCanceled = "#(argb,8,8,3)color(0,0,0,0)"; + iconDone = "\ca\ui\data\ui_taskstate_done_CA.paa"; + iconFailed = "\ca\ui\data\ui_taskstate_failed_CA.paa"; + color[] = {.863,.584,.0,1}; + colorCreated[] = {.95,.95,.95,1}; + colorCanceled[] = {.606,.606,.606,1}; + colorDone[] = {.424,.651,.247,1}; + colorFailed[] = {.706,.0745,.0196,1}; + size = 10; + coefMin = 1; + coefMax = 4; + importance = 1; + }; + class Tree { + icon = "\ca\ui\data\map_tree_ca.paa"; + color[] = {.55,.64,.43,1}; + size = 12; + importance = .9 * 16 * .05; + coefMin = .25; + coefMax = 4; + }; + class Tourism { + icon = "\ca\ui\data\map_tourism_ca.paa"; + color[] = {.78,0,.05,1}; + size = 16; + importance = 1 * 16 * .05; + coefMin = .7; + coefMax = 4; + }; + class Transmitter { + icon = "\ca\ui\data\map_transmitter_ca.paa"; + color[] = {0,0,1,1}; + size = 20; + importance = 2 * 16 * .05; + coefMin = .9; + coefMax = 4; + }; + class ViewTower { + icon = "\ca\ui\data\map_viewtower_ca.paa"; + color[] = {0,0,1,1}; + size = 16; + importance = 2.5 * 16 * .05; + coefMin = .5; + coefMax = 4; + }; + class Watertower { + icon = "\ca\ui\data\map_watertower_ca.paa"; + color[] = {0,.35,.7,1}; + size = 32; + importance = 1.2 * 16 * .05; + coefMin = .9; + coefMax = 4; + }; + class Waypoint { + icon = "\ca\ui\data\map_waypoint_ca.paa"; + color[] = {0,0,1,1}; + size = 14; + importance = 2.5 * 16 * .05; + coefMin = .5; + coefMax = 4; + }; + class WaypointCompleted { + icon = "\ca\ui\data\map_waypoint_completed_ca.paa"; + color[] = {0,0,1,1}; + size = 14; + importance = 2.5 * 16 * .05; + coefMin = .5; + coefMax = 4; + }; + class ActiveMarker { + icon = ""; + color[] = {0,0,1,1}; + size = 14; + importance = 2.5 * 16 * .05; + coefMin = .5; + coefMax = 4; + }; + }; + }; +}; diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_fillItems.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_fillItems.sqf new file mode 100755 index 0000000..7f4130c --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_fillItems.sqf @@ -0,0 +1,29 @@ +private ["_amount","_item","_items","_object","_type"]; + +_items = _this select 0; +_type = _this select 1; +_object = _this select 2; + +{ + _item = _x; + + if (typeName _item == "STRING") then { + _amount = _items select (_forEachIndex + 1); + + if (isNil "_amount" or {typeName _amount == "STRING"}) then { + _amount = 1; + }; + + if (dayz_classicBloodBagSystem) then { + if (_item in dayz_typedBags) then { _item = "ItemBloodbag" }; + } else { + if (_item == "ItemBloodbag") then { _item = "bloodBagONEG" }; // Convert ItemBloodbag into universal blood type/rh bag + }; + + switch _type do { + case 1: { for "_i" from 1 to _amount do {_object addMagazine _item}; }; + case 2: { _object addMagazineCargoGlobal [_item,_amount]; }; + case 3: { _object addWeaponCargoGlobal [_item,_amount]; }; + }; + }; +} forEach _items; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_fillList.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_fillList.sqf new file mode 100755 index 0000000..a017b67 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_fillList.sqf @@ -0,0 +1,39 @@ +private ["_hlevel","_humanity","_index","_level","_lock"]; +disableSerialization; + +_humanity = player getVariable ["humanity",0]; + +lbClear 8888; +{ + switch true do { + case (count _x > 20): { // Random + _level = _x select 19; + _hlevel = _x select 20; + }; + case (count _x > 10): { // Normal public or private + _level = _x select 8; + _hlevel = _x select 9; + }; + default { // Custom loadout by UID + _level = 0; + _hlevel = 0; + }; + }; + + _lock = (_hlevel < 0 && _humanity >= _hlevel) or (_hlevel > 0 && _humanity <= _hlevel) or (_level > 0 && !(_level in class_levels)); + _index = lbAdd [8888,(_x select 0)]; + + if (_lock) then { + lbSetPicture [8888,_index,"\ca\ui\data\ui_task_failed_ca.paa"]; + } else { + lbSetPicture [8888,_index,"\ca\ui\data\ui_task_done_ca.paa"]; + }; + + lbSetColor [8888,_index, switch true do { + case (_level > 0): {[0,1,0,.8]}; + case (_hlevel > 0): {[.38,.7,.9,1]}; + case (_hlevel < 0): {[1,0,0,1]}; + case (count _x > 20): {[.97,.87,.35,1]}; //Random + default {[.88,.88,.88,1]}; + }]; +} forEach class_public; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_pick.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_pick.sqf new file mode 100755 index 0000000..7f91b85 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_pick.sqf @@ -0,0 +1,42 @@ +private ["_block","_class","_hlevel","_humanity","_level","_name"]; +disableSerialization; + +_class = []; +_name = lbText [8888,(lbCurSel 8888)]; +{ + if (_name == (_x select 0)) then { + _class = _x; + }; +} forEach class_public; + +if (count _class == 0) exitWith { + systemChat localize "STR_ESS_NOTHING_SELECTED"; +}; + +switch true do { + case (count _class > 20): { // Random + _level = _class select 19; + _hlevel = _class select 20; + }; + case (count _class > 10): { // Normal public or private + _level = _class select 8; + _hlevel = _class select 9; + }; + default { // Custom loadout by UID + _level = 0; + _hlevel = 0; + }; +}; + +_humanity = player getVariable ["humanity",0]; + +_block = switch true do { + case (_hlevel < 0 && _humanity >= _hlevel): {systemChat format[localize "STR_ESS_HUMANITY_TOO_HIGH",_hlevel]; true}; + case (_hlevel > 0 && _humanity <= _hlevel): {systemChat format[localize "STR_ESS_HUMANITY_TOO_LOW",_hlevel]; true}; + case (_level > 0 && !(_level in class_levels)): {systemChat format[localize "STR_ESS_NEED_CVIP",_level]; true}; + default {false}; +}; + +if (!_block) then { + class_choice = _class; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_preview.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_preview.sqf new file mode 100755 index 0000000..c472de3 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_preview.sqf @@ -0,0 +1,54 @@ +private ["_bag","_class","_female","_model","_name","_offset","_pos","_weps"]; +disableSerialization; + +_class = class_public select 0; +_name = lbText [8888,(lbCurSel 8888)]; +{ + if (_name == (_x select 0)) then { + _class = _x; + }; +} forEach class_public; + +_female = player isKindOf "SurvivorW2_DZ"; +_model = if (_female) then {_class select 2} else {_class select 1}; +_weps = _class select 4; +_bag = _class select 5; + +if (count _class > 20) then { //Random + _model = if (_female) then {(_class select 1) select 1} else {(_class select 1) select 0}; + _model = _model call BIS_fnc_selectRandom; + _weps = _class select 6; + if (count _weps > 0) then {_weps = [(_weps call BIS_fnc_selectRandom)];}; + _bag = _class select 10; + _bag = if (count _bag > 0) then {_bag call BIS_fnc_selectRandom} else {""}; +}; + +deleteVehicle class_bot; +class_bot = _model createVehicleLocal [0,0,0]; +class_bot call class_wipeGear; +{ + if !(_x in weapons class_bot) then { + class_bot addWeapon _x; + }; +} count _weps; + +if (primaryWeapon class_bot == "") then { //Need to use createAgent if no primary to prevent arms glitch + deleteVehicle class_bot; + class_bot = createAgent [_model,[0,0,0],[],0,"CAN_COLLIDE"]; + class_bot call class_wipeGear; +}; + +if (_bag != "") then {class_bot addBackpack _bag;}; +class_bot setFace "Face01"; +class_bot enableSimulation false; +class_bot setPosATL spawn_cameraPos; +spawn_light lightAttachObject [class_bot,[0,2,.1]]; + +_pos = getPosASL class_bot; +_offset = [(_pos select 0)+.4,(_pos select 1)+3,(_pos select 2)+.9]; + +if (surfaceIsWater [_pos select 0,_pos select 1,0]) then { + spawn_camera setPosASL _offset; +} else { + spawn_camera setPosATL (ASLtoATL _offset); +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_randomMags.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_randomMags.sqf new file mode 100755 index 0000000..bb07854 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_randomMags.sqf @@ -0,0 +1,31 @@ +private ["_amount","_index","_magazines","_return","_weapons"]; + +_weapons = _this select 0; +_index = _this select 1; +_return = []; + +if (count _weapons > 0) then { + if (count _this < 3) then { + _magazines = getArray (configFile >> "CfgWeapons" >> (_weapons select 0) >> "magazines"); + if (count _magazines > 0) then { + for "_i" from 1 to (class_choice select _index) do { + _return set [count _return,(_magazines select 0)]; + }; + }; + } else { //Random + while {({typeName _x == "STRING"} count _return) < (class_choice select (_this select 2))} do { + _index = _weapons call BIS_fnc_randomIndex; + _magazines = _weapons select _index; + if (typeName _magazines == "STRING" && {!(_magazines in _return)}) then { + _return set [count _return,_magazines]; + _amount = _weapons select (_index + 1); + if (isNil "_amount" or {typeName _amount == "STRING"}) then { + _amount = 1; + }; + _return set [count _return,_amount]; + }; + }; + }; +}; + +_return \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_randomTools.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_randomTools.sqf new file mode 100755 index 0000000..fa1871e --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_randomTools.sqf @@ -0,0 +1,16 @@ +private ["_tool","_tools","_type"]; + +_type = _this; +_tools = class_choice select _type; + +if (count _tools > 0) then { + _tools = []; + while {count _tools < (class_choice select (_type + 1))} do { + _tool = (class_choice select _type) call BIS_fnc_selectRandom; + if !(_tool in _tools) then { + _tools set [count _tools,_tool]; + }; + }; +}; + +_tools \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_wipeGear.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_wipeGear.sqf new file mode 100755 index 0000000..d5b1a83 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/class_wipeGear.sqf @@ -0,0 +1,10 @@ +removeBackpack _this; +removeAllItems _this; +removeAllWeapons _this; +{_this removeMagazine _x} count (magazines _this); + +if (_this == player) then { + dayz_onBack = ""; +} else { + _this switchMove ""; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/cleanup.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/cleanup.sqf new file mode 100755 index 0000000..61644dc --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/cleanup.sqf @@ -0,0 +1,39 @@ +// All done with these global variables. Clear to free up RAM. + +dayz_enableRulesOriginal = nil; +dayz_maxGlobalAnimalsOriginal = nil; +fnc_usec_damageHandlerOriginal = nil; +player_countMagazinesWBackpackOriginal = nil; +player_spawn_2_original = nil; + +class_bot = nil; +class_choice = nil; +class_epoch = nil; +class_fillItems = nil; +class_fillList = nil; +class_levels = nil; +class_pick = nil; +class_preview = nil; +class_public = nil; +class_randomMags = nil; +class_randomTools = nil; +class_selection = nil; +class_wipeGear = nil; + +halo_choice = nil; +halo_force = nil; +halo_selection = nil; +halo_type = nil; + +spawn_camera = nil; +spawn_cameraPos = nil; +spawn_choice = nil; +spawn_config = nil; +spawn_fill = nil; +spawn_levels = nil; +spawn_light = nil; +spawn_map = nil; +spawn_mapPos = nil; +spawn_pick = nil; +spawn_public = nil; +spawn_selection = nil; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/finish.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/finish.sqf new file mode 100755 index 0000000..f62d050 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/finish.sqf @@ -0,0 +1,26 @@ +if (player distance respawn_west_original < 100) then { + // Ground spawn + player setPosATL _grid; + if (surfaceIsWater respawn_west_original) then {player call fn_exitSwim;}; + + // Show infoText if not in HALO spawn + _nearestCity = nearestLocations [_grid, ["NameCityCapital","NameCity","NameVillage","NameLocal"],1000]; + Dayz_logonTown = "Wilderness"; + if (count _nearestCity > 0) then {Dayz_logonTown = text (_nearestCity select 0)}; + [toUpper worldName,Dayz_logonTown,format[localize "str_player_06",Dayz_logonDate]] spawn { + uiSleep 5; + BIS_fnc_infoText = compile preprocessFileLineNumbers "ca\modules_e\functions\GUI\fn_infoText.sqf"; + _this spawn BIS_fnc_infoText; + }; +}; + +spawn_camera cameraEffect ["terminate","back"]; +camDestroy spawn_camera; + +dayz_enableRules = dayz_enableRulesOriginal; +dayz_maxGlobalAnimals = dayz_maxGlobalAnimalsOriginal; +fnc_usec_damageHandler = fnc_usec_damageHandlerOriginal; +player_spawn_2 = player_spawn_2_original; + +dayz_slowCheck = [] spawn player_spawn_2; +if (dayz_enableRules && (profileNamespace getVariable ["streamerMode",0] == 0)) then { dayz_rulesHandle = execVM "rules.sqf"; }; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/spawn_fill.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/spawn_fill.sqf new file mode 100755 index 0000000..cfe3824 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/spawn_fill.sqf @@ -0,0 +1,96 @@ +private ["_block","_blockGroup","_blockPlot","_bodies","_body","_grid","_hlevel","_humanity","_index","_inGroup","_lb","_level","_name","_uid"]; +disableSerialization; + +_block = []; +_blockGroup = false; +_blockPlot = false; +_lb = (findDisplay 88890) displayCtrl 8888; +_humanity = player getVariable ["humanity",0]; +_inGroup = count units group player > 1; +_uid = getPlayerUID player; +spawn_plot = objNull; + +if (spawn_nearPlot) then { + { + if (_x getVariable ["ownerPUID","0"] == _uid) exitWith { + spawn_plot = _x; + }; + } count (entities "Plastic_Pole_EP1_DZ"); +}; + +if (spawn_bodyCheck > 0) then { + _bodies = []; + { + if (_x getVariable["bodyUID","0"] == _uid) then { + _bodies set [count _bodies,(getPosATL _x)]; + }; + } count allDead; + { + _body = _x; + { + //Never block random or custom base + if (count _x == 4 && {_body distance (_x select 1) < spawn_bodyCheck}) then { + _block set [count _block,(_x select 0)]; + }; + } forEach spawn_public; + if (_inGroup && spawn_nearGroup) then { + _grid = getPosATL leader group player; + if (surfaceIsWater _grid) then {_grid = ATLToASL _grid;}; + if (_body distance _grid < spawn_bodyCheck) then {_blockGroup = true;}; + }; + if (!isNull spawn_plot) then { + _grid = getPosATL spawn_plot; + if (surfaceIsWater _grid) then {_grid = ATLToASL _grid;}; + if (_body distance _grid < spawn_bodyCheck) then {_blockPlot = true;}; + }; + } count _bodies; + + if (count _block > 0 or _blockGroup or _blockPlot) then { + systemChat format[localize "STR_ESS_BLOCKED",spawn_bodyCheck]; + }; +}; + +lbClear _lb; +{ + _name = _x select 0; + if !(_name in _block) then { + if (count _x == 2) then { //Custom base by UID + _level = 0; + _hlevel = 0; + } else { + _level = _x select 2; + _hlevel = _x select 3; + }; + + _index = _lb lbAdd _name; + + if ((_hlevel < 0 && _humanity >= _hlevel) or (_hlevel > 0 && _humanity <= _hlevel) or (_level > 0 && !(_level in spawn_levels))) then { + _lb lbSetPicture [_index,"\ca\ui\data\ui_task_failed_ca.paa"]; + } else { + _lb lbSetPicture [_index,"\ca\ui\data\ui_task_done_ca.paa"]; + }; + + _lb lbSetColor [_index, switch true do { + case (count _x == 2): {[1,1,0,1]}; //Custom base by UID + case (_level > 0): {[0,1,0,.8]}; + case (_hlevel > 0): {[.38,.7,.9,1]}; + case (_hlevel < 0): {[1,0,0,1]}; + case (count _x > 4): {[.97,.87,.35,1]}; //Random + default {[.88,.88,.88,1]}; + }]; + }; +} forEach spawn_public; + +if (_inGroup && spawn_nearGroup && !_blockGroup) then { + _index = _lb lbAdd (localize "STR_ESS_GROUP"); + _lb lbSetColor [_index,[1,.7,.4,1]]; + _lb lbSetPicture [_index,"\ca\ui\data\ui_task_done_ca.paa"]; +}; + +if (!isNull spawn_plot && !_blockPlot) then { + _index = _lb lbAdd (localize "STR_ESS_PLOT"); + _lb lbSetColor [_index,[1,.7,.4,1]]; + _lb lbSetPicture [_index,"\ca\ui\data\ui_task_done_ca.paa"]; +}; + +lbSort _lb; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/spawn_map.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/spawn_map.sqf new file mode 100755 index 0000000..27f3b25 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/spawn_map.sqf @@ -0,0 +1,36 @@ +private ["_ctrl","_grid","_name","_spawn","_zoom"]; +disableSerialization; + +_zoom = 0.35; +_spawn = ["","","","",""]; +_name = lbText [8888,(lbCurSel 8888)]; +{ + if (_name == (_x select 0)) exitWith { + _spawn = _x; + }; +} forEach spawn_public; + +_grid = switch true do { + case (_name == (localize "STR_ESS_GROUP")): {getPosATL leader group player}; + case (_name == (localize "STR_ESS_PLOT")): {getPosATL spawn_plot}; + case (count _spawn > 4): {_zoom = 4; getMarkerPos "center"}; //Random or nothing selected + default {_spawn select 1}; +}; + +if (spawn_mapPos distance _grid > 0) then { + spawn_mapPos = _grid; + _ctrl = (findDisplay 88890) displayCtrl 8890; + + // Zoom out first (avoids visible flashing) + if (_grid distance getMarkerPos "center" > 0) then { + ctrlMapAnimClear _ctrl; + _ctrl ctrlMapAnimAdd [1,.6,_grid]; + ctrlMapAnimCommit _ctrl; + waitUntil {ctrlMapAnimDone _ctrl}; + }; + + // Zoom in to location + ctrlMapAnimClear _ctrl; + _ctrl ctrlMapAnimAdd [2,_zoom,_grid]; + ctrlMapAnimCommit _ctrl; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/spawn_pick.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/spawn_pick.sqf new file mode 100755 index 0000000..ee87128 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/functions/spawn_pick.sqf @@ -0,0 +1,36 @@ +private ["_block","_hlevel","_humanity","_level","_name","_spawn"]; +disableSerialization; + +_block = false; +_spawn = []; + +_name = lbText [8888,(lbCurSel 8888)]; +{ + if (_name == (_x select 0)) then { + _spawn = _x; + }; +} forEach spawn_public; + +if (_name == (localize "STR_ESS_GROUP")) then {_spawn = [0,[],0,0];}; +if (_name == (localize "STR_ESS_PLOT")) then {_spawn = [0,[1],0,0];}; + +if (count _spawn == 0) exitWith { + systemChat localize "STR_ESS_NOTHING_SELECTED"; +}; + +if (count _spawn > 2) then { + _level = _spawn select 2; + _hlevel = _spawn select 3; + _humanity = player getVariable ["humanity",0]; + + _block = switch true do { + case (_hlevel < 0 && _humanity >= _hlevel): {systemChat format[localize "STR_ESS_HUMANITY_TOO_HIGH",_hlevel]; true}; + case (_hlevel > 0 && _humanity <= _hlevel): {systemChat format[localize "STR_ESS_HUMANITY_TOO_LOW",_hlevel]; true}; + case (_level > 0 && !(_level in spawn_levels)): {systemChat format[localize "STR_ESS_NEED_SVIP",_level]; true}; + default {false}; + }; +}; + +if (!_block) then { + spawn_choice = _spawn; +}; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/init.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/init.sqf new file mode 100755 index 0000000..7b1a7ce --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/init.sqf @@ -0,0 +1,42 @@ +class_epoch = isClass (configFile >> "CfgWeapons" >> "Chainsaw"); +#include "config.sqf" + +// Stop rules feed, animal spawning, damage and slow loop until after selection is done +dayz_enableRulesOriginal = dayz_enableRules; +dayz_enableRules = false; +dayz_maxGlobalAnimalsOriginal = dayz_maxGlobalAnimals; +dayz_maxGlobalAnimals = 0; +fnc_usec_damageHandlerOriginal = fnc_usec_damageHandler; +fnc_usec_damageHandler = {}; +player_spawn_2_original = player_spawn_2; +player_spawn_2 = {}; + +dayz_paraSpawn = false; //Disable stock HALO spawn + +if (!class_epoch) then { //Undefined variables in vanilla + BIS_fnc_halo = compile preprocessFileLineNumbers "custom\fn_halo.sqf"; + DZE_HaloAltitudeMeter = false; + DZE_HaloJump = false; + DZE_HaloOpenChuteHeight = 180; + DZE_HaloSpawnHeight = 2000; + Z_MoneyVariable = "cashMoney"; +}; + +if (spawn_selection) then { + dayz_spawnselection = 0; //Skip vanilla spawn selection + spawn_fill = compile preprocessFileLineNumbers "spawn\functions\spawn_fill.sqf"; + spawn_map = compile preprocessFileLineNumbers "spawn\functions\spawn_map.sqf"; + spawn_pick = compile preprocessFileLineNumbers "spawn\functions\spawn_pick.sqf"; +}; + +if (class_selection) then { + class_fillItems = compile preprocessFileLineNumbers "spawn\functions\class_fillItems.sqf"; + class_fillList = compile preprocessFileLineNumbers "spawn\functions\class_fillList.sqf"; + class_pick = compile preprocessFileLineNumbers "spawn\functions\class_pick.sqf"; + class_preview = compile preprocessFileLineNumbers "spawn\functions\class_preview.sqf"; + class_randomMags = compile preprocessFileLineNumbers "spawn\functions\class_randomMags.sqf"; + class_randomTools = compile preprocessFileLineNumbers "spawn\functions\class_randomTools.sqf"; + class_wipeGear = compile preprocessFileLineNumbers "spawn\functions\class_wipeGear.sqf"; +}; + +execVM "spawn\main.sqf"; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/spawn/main.sqf b/MPMissions/DayZ_Epoch_24.Napf/spawn/main.sqf new file mode 100755 index 0000000..9ef6692 --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/spawn/main.sqf @@ -0,0 +1,270 @@ +private ["_bag","_bmags","_bmags2","_bmags3","_bpistol","_btools","_bweps","_coins","_dir","_female", +"_gMags","_grid","_gTools","_haloJump","_handle","_isPZombie","_mags","_mags2","_mags3","_main","_model", +"_muzzle","_myModel","_nearestCity","_onBack","_plane","_pos","_tools","_unit","_wealth","_weps"]; + +waitUntil {uiSleep 0.4; (!isNil "PVCDZ_plr_Login2" && {count PVCDZ_plr_Login2 > 0})}; + +//Stop infoText showing until after selection is done +BIS_fnc_infoText = {}; + +// Worldspace from vanilla spawn selection or server_playerSetup +_grid = (PVCDZ_plr_Login2 select 3) select 1; + +spawn_cameraPos = [(random 99999),(random 99999),99999]; +spawn_camera = "camera" camCreate spawn_cameraPos; +spawn_camera cameraEffect ["external","back"]; +spawn_camera camSetFOV 0.7; +spawn_camera camCommit 0; +waitUntil {camCommitted spawn_camera}; +spawn_camera setDir 180; + +sched_townGenerator_ready = {true}; +waitUntil { + uiSleep 0.4; + if (!dayz_displayGenderSelect) then { + [format[localize "STR_AUTHENTICATING" + " %1",floor(diag_tickTime - dayz_loginTime)],1] call dayz_rollingMessages; + }; + !isNil "Dayz_loginCompleted" +}; + +["",1] call dayz_rollingMessages; + +//Exit if not a fresh spawn +if !(PVCDZ_plr_Login2 select 4) exitWith { + #include "functions\finish.sqf" + #include "functions\cleanup.sqf" +}; + +_isPZombie = player isKindOf "PZombie_VB"; + +//Add private classes and spawns this player has access to. +spawn_config = PVCDZ_plr_Login2 select 5; +class_public = (spawn_config select 0) + class_public; +spawn_public = (spawn_config select 1) + spawn_public; + +//VIP levels this player has access to. +class_levels = spawn_config select 2; +spawn_levels = spawn_config select 3; + +waitUntil {uiSleep 0.1; !isNull findDisplay 46}; +0 fadeSound 0; +0 fadeMusic 0; + +if (class_selection && !_isPZombie) then { + class_bot = objNull; + class_choice = []; + + // Make preview bot visible at night time + spawn_light = "#lightpoint" createVehicleLocal [0,0,0]; + spawn_light setLightBrightness 300; + spawn_light setLightAmbient [1,1,1]; + spawn_light setLightColor [1,1,1]; + + createDialog "ClassDialog"; + call class_fillList; + call class_preview; + waitUntil {uiSleep 0.1; !dialog}; + + _bag = ""; + _bmags = []; + _bweps = []; + _mags = []; + _weps = []; + _onBack = ""; + + if (count class_choice > 0) then { + player call class_wipeGear; + _myModel = typeOf player; + _female = _myModel isKindOf "SurvivorW2_DZ"; + _model = if (_female) then {class_choice select 2} else {class_choice select 1}; + _mags = class_choice select 3; + _weps = class_choice select 4; + _bag = class_choice select 5; + _bmags = class_choice select 6; + _bweps = class_choice select 7; + _onBack = switch true do { + case (count class_choice == 10): {class_choice select 9}; //Custom loadout by UID + case (count class_choice == 12): {class_choice select 11}; //Normal private or public + default {""}; //Not specified, may be V2 config + }; + + if (typeName _model == "ARRAY") then { //Random + _model = if (_female) then {(class_choice select 1) select 1} else {(class_choice select 1) select 0}; + _model = _model call BIS_fnc_selectRandom; + _weps = class_choice select 6; + _pistol = class_choice select 8; + _bag = class_choice select 10; + _bweps = class_choice select 15; + _bpistol = class_choice select 17; + _onBack = if (count class_choice > 22) then {class_choice select 22} else {[]}; + _gMags = if (count class_choice > 23) then {class_choice select 23} else {[]}; + _gTools = if (count class_choice > 24) then {class_choice select 24} else {[]}; + _bag = if (count _bag > 0) then {_bag call BIS_fnc_selectRandom} else {""}; + _onBack = if (count _onBack > 0) then {_onBack call BIS_fnc_selectRandom} else {""}; + if (count _weps > 0) then {_weps = [(_weps call BIS_fnc_selectRandom)];}; + if (count _pistol > 0) then {_pistol = [(_pistol call BIS_fnc_selectRandom)];}; + if (count _bweps > 0) then {_bweps = [(_bweps call BIS_fnc_selectRandom)];}; + if (count _bpistol > 0) then {_bpistol = [(_bpistol call BIS_fnc_selectRandom)];}; + _tools = 4 call class_randomTools; + _btools = 13 call class_randomTools; + _bmags = [(class_choice select 11),11,12] call class_randomMags; + _bmags2 = [_bweps,16] call class_randomMags; + _bmags3 = [_bpistol,18] call class_randomMags; + _mags = [(class_choice select 2),2,3] call class_randomMags; + _mags2 = [_weps,7] call class_randomMags; + _mags3 = [_pistol,9] call class_randomMags; + _mags = _mags + _mags2 + _mags3 + _gMags; + _bmags = _bmags + _bmags2 + _bmags3; + _bweps = _bweps + _btools + _bpistol; + _weps = _weps + _pistol + _tools + _gTools; + }; + + if (_model != _myModel) then { + gear_done = false; + if (!isNil "player_countMagazinesWBackpack") then { //Skip ammo count. Player has no gear yet. + player_countMagazinesWBackpackOriginal = player_countMagazinesWBackpack; + player_countMagazinesWBackpack = {[[],[]]}; + }; + _handle = [dayz_playerUID,dayz_characterID,_model] spawn player_humanityMorph; + uiSleep 0.2; + waitUntil {scriptDone _handle}; + gear_done = true; + player_countMagazinesWBackpack = player_countMagazinesWBackpackOriginal; + player call class_wipeGear; + }; + }; + + [_mags,1,player] call class_fillItems; + {player addWeapon _x} count _weps; + + if (_bag != "") then { + player addBackpack _bag; + _bag = unitBackpack player; + [_bmags,2,_bag] call class_fillItems; + [_bweps,3,_bag] call class_fillItems; + }; + + if (_onBack != "") then {dayz_onBack = _onBack;}; + + _main = primaryWeapon player; + if (_main == "") then { + { + if (getNumber (configFile >> "CfgWeapons" >> _x >> "type") == 2) then {_main = _x;}; + } count (weapons player); + }; + + _muzzle = getArray (configFile >> "CfgWeapons" >> _main >> "muzzles"); + if (count _muzzle > 1) then { + player selectWeapon (_muzzle select 0); + } else { + player selectWeapon _main; + }; + + _coins = switch true do { + case (count class_choice > 20): {class_choice select 21}; //Random + case (count class_choice > 10): {class_choice select 10}; //Normal public or private + case (count class_choice > 0): {class_choice select 8}; //Custom loadout by UID + default {0}; + }; + + _wealth = player getVariable [Z_MoneyVariable,0]; + if (_wealth < _coins) then { + player setVariable [Z_MoneyVariable,(_wealth + _coins),true]; + }; +}; + +if (spawn_selection) then { + dayz_spawnselection = 1; //Set on now, so journal shows correct value + spawn_choice = []; + spawn_mapPos = [0,0,0]; + createDialog "SpawnDialog"; + call spawn_fill; + [] spawn spawn_map; + waitUntil {uiSleep 0.1; !dialog}; + if (count spawn_choice == 0) exitWith {}; + + _grid = spawn_choice select 1; + if (count spawn_choice > 3) then { + _grid = switch true do { + case (count spawn_choice > 4): {_grid call BIS_fnc_selectRandom}; + case (count _grid == 0): {getPosATL leader group player}; + case (count _grid == 1): {getPosATL spawn_plot}; + default {_grid}; + }; + if (surfaceIsWater _grid) then {_grid = ATLToASL _grid;}; + + for "_i" from 0 to 99 do { + _pos = [_grid,0,spawn_radius,10,0,2000,0] call BIS_fnc_findSafePos; + _pos set [2,0]; + if ( + ((ATLtoASL _pos) select 2) > 2.5 + && {(_pos distance _grid) < spawn_radius} + && {({isPlayer _x} count (_pos nearEntities ["CAManBase",100])) == 0} + && {count (_pos nearEntities ["Plastic_Pole_EP1_DZ",45]) == 0} + ) exitWith {_grid = _pos;}; + }; + }; +}; + +preloadCamera _grid; +player switchMove ""; + +if ((halo_selection or halo_force) && !_isPZombie) then { + halo_choice = -1; + + if (halo_force) then { + halo_choice = 1; + } else { + createDialog "HaloDialog"; + waitUntil {uiSleep 0.1; !dialog}; + }; + + if (halo_choice == 1) then { + if (halo_type == "") then { + player setPosATL [_grid select 0,_grid select 1,DZE_HaloSpawnHeight]; + [player,DZE_HaloSpawnHeight] spawn BIS_fnc_halo; + } else { + _haloJump = DZE_HaloJump; //Store original value + DZE_HaloJump = false; //Disable temporarily so player can not jump early + _pos = [(_grid select 0)+1000,(_grid select 1)+1000,DZE_HaloSpawnHeight]; + _plane = halo_type createVehicleLocal _pos; + _plane engineOn true; + _plane setPosATL _pos; + clearWeaponCargo _plane; + clearMagazineCargo _plane; + _plane setVehicleLock "LOCKED"; + _plane flyInHeight DZE_HaloSpawnHeight; + _dir = [_pos,_grid] call BIS_fnc_dirTo; + _plane setDir (90 - _dir); + _plane setVelocity [50*(sin _dir),50*(cos _dir),0]; + _unit = createAgent ["Survivor2_DZ",_grid,[],0,"CAN_COLLIDE"]; + _unit assignAsDriver _plane; + _unit moveInDriver _plane; + player reveal _plane; + player moveInCargo [_plane,2]; + player action ["getInCargo",_plane,2]; + _pos = group player addWaypoint [_grid,0]; + [_grid,_plane,_unit,_pos,_haloJump] spawn { + _plane = _this select 1; + _plane setDamage .8; + waitUntil {_plane distance (_this select 0) < (DZE_HaloSpawnHeight + 200)}; + player spawn BIS_fnc_halo; + player allowDamage false; //Block damage from clipping plane + player action ["eject",_plane]; + player setVelocity [(velocity player) select 0,(velocity player) select 1,-15]; + uiSleep 25; + player allowDamage true; + deleteVehicle _plane; + deleteVehicle (_this select 2); + deleteWayPoint (_this select 3); + DZE_HaloJump = _this select 4; //Reset to original value + }; + }; + }; +}; + +#include "functions\finish.sqf" +3 fadeSound 1; +3 fadeMusic 1; +#include "functions\cleanup.sqf" +call player_forceSave; //Save in case server shuts down or player is kicked before opening gear or abort menu \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_24.Napf/stringtable.xml b/MPMissions/DayZ_Epoch_24.Napf/stringtable.xml new file mode 100755 index 0000000..613856d --- /dev/null +++ b/MPMissions/DayZ_Epoch_24.Napf/stringtable.xml @@ -0,0 +1,1510 @@ + + + + + By my group + Par mon groupe + Von meiner Gruppe + Около группы + Con mi grupo + + + By my plot + Par mon Plot + Von meinem Grundstück + Около базы + En mi parcela + + + Note: some spawns were blocked due to a body of yours within %1m + Note: certains engins ont été bloqués à cause d'un corps à vous a %1m + Anmerkung: Einige Spawnpunkte wurden wegen einer Leiche von dir im Umkreis von %1m blockiert + Ðекоторые точки Ñпавна заблокированы, Ñ‚.к. они в радиуÑе %1м от вашего тела. + algunos spawns fueron bloqueados por que tienes un cuerpo a %1mts + + + Your humanity must be less than %1 for this. + Votre humanité doit être inférieure à %1 pour cela. + Deine Menschlichkeit muss dafür unter %1 sein. + Ваша человечноÑть должна быть меньше %1. + Tu humanidad debe ser menor a %1 para esto. + + + Your humanity must be greater than %1 for this. + Votre humanité doit être supérieur à %1 pour cela. + Deine Menschlichkeit muss dafür über %1 sein. + Ваша человечноÑть должна быть больше %1. + Tu humanidad debe ser mayor a %1 para esto. + + + You need VIP class level %1 for this. + Vous avez besoin du niveau de VIP %1 pour cela. + Du brauchst VIP-Klassen-Level %1 dafür. + Вам нужен VIP-клаÑÑ %1 ÑƒÑ€Ð¾Ð²Ð½Ñ Ð´Ð»Ñ Ñтого. + Necesitas ser Nivel %1 clase VIP para esto. + + + You need VIP spawn level %1 for this. + Vous avez besoin du niveau de VIP %1 pour cela. + Du brauchst VIP-Spawn-Level %1 dafür. + Вам нужен VIP-Ñпавн %1 ÑƒÑ€Ð¾Ð²Ð½Ñ Ð´Ð»Ñ Ñтого. + Necesitas un nivel %1 VIP para esto + + + Nothing selected! + Rien n'a été sélectionné! + Nichts ausgewählt! + Ðичего не выбрано! + Selecciona algo! + + + Class Selection + Sélection de classe + Klassenauswahl + Выбор клаÑÑа + Selector de Clases + + + Spawn Type Selection + Sélection du type + Spawntypauwahl + Выбор типа Ñпавна + Tipo de selector de Spawns + + + Spawn Selection + Sélectionner un spawn + Spawnauswahl + Выбор точки Ñпавна + Selector de Spawns + + + Ground + Térreste + Boden + ЗЕМЛЯ + En Tierra + + + HALO + Air + Fallschirm + ПÐРÐШЮТ + Paracaidas + + + + + Hemp Farm + Hanffarm + + + Fuel Station Bomb + Tankstellenbombe + + + A bomb has been planted on a truck at the %1 fuel station. It will explode in %2 minutes. + An einem Lastwagen nahe der %1 Tankstelle, wurde eine Bombe gelegt. Sie wird in %2 Minuten explodieren. + + + Explosion at the %1 fuel station! Recover the remaining supplies! + Explosion an der %1 Tankstelle! Hole dir die verbleibenden Vorräte! + + + %1 Crash Site + %1 Absturz + + + Mechanic's Vehicle + Fahrzeug des Mechanikers + + + A mechanic has left his truck full of upgrade parts in the large garage near %1. + Ein Mechaniker hat seinen LKW voller Upgrade-Teile in der großen Garage in der Nähe von %1 gelassen. + + + Claimed by %1 + Beansprucht von %1 + + + %1 Claim Timeout [%2] + %1 Anspruchauszeit [%2] + + + You are in %1's mission. Ask %1 for permission! + Du befindest dich in der Mission von %1. Frage %1 um Erlaubnis! + + + Cleared by %1 + Beendet von %1 + + + Hero %1 + Held %1 + + + Bandit %1 + Bandit %1 + + + Heroes + Helden + + + Bandits + Banditen + + + Hero %1 (%2 %3) + Held %1 (%2 %3) + + + Bandit %1 (%2 %3) + Bandit %1 (%2 %3) + + + Military Base + Militärbasis + + + Abandoned Trader + Verlassener Händler + + + Disabled %1 + Deaktiviert %1 + + + Army Base + Armeebasis + + + Black Hawk Crash + Black Hawk Absturz + + + Ural Attack + Ural Angriff + + + Cannibal Cave + Kannibalenhöhle + + + Captured MV-22 + Gekaperte MV-22 + + + %1 Air Drop + %1 Luftlieferung + + + Armed Patrol + Bewaffnete Patrouille + + + Crop Raider + Ernteräuber + + + Drone Pilot + Drohnenpilot + + + Drug Bust + Drogenrazzia + + + Farmer + + + Fire Station + Feuerwehr + + + Gem Tower + Edelsteinturm + + + IKEA Convoy + IKEA-Konvoi + + + Junk Yard + Schrottplatz + + + Lumber Mill + Sägewerk + + + President's in Town + Präsident in der Stadt + + + Sniper Extraction %1 + Scharfschützen-Extraktion %1 + + + The Farm + Der Bauernhof + + + Mayors Mansion + Bürgermeistervilla + + + Medical Supply Camp + Medizincamp + + + Outpost + Vorposten + + + Radio Tower + Funkturm + + + Scout Patrol + Spähpatrouille + + + Slaughter House + Schlachthaus + + + Tank Column + Panzerkolonne + + + Weapon Cache + Waffenversteck + + + Castle Grayskull + Schloss Grayskull + + + Wuhan Lab + Wuhan Labor + + + + + Mission Announcement + Missionsankündigung + Annonce de Mission + Оповещение миÑÑии + Anuncio de Misión + + + WARNING: You are approaching a live minefield! + WARNUNG: Du betrittst ein Minenfeld! + ATTENTION: Vous approcher d'une zone miné! + Ð’ÐИМÐÐИЕ! Ð’Ñ‹ приближаетеÑÑŒ к минному полю! + Advertencia: Te estás aproximando a un campo minado! + + + Heroes are securing an abandoned trader. + Einige Helden wurden bei einem verlassenen Händler gesichtet. + Les Heros on sécuriser le vendeur abandonné. + Герои охранÑÑŽÑ‚ брошенный торговый город. + Héroes están asegurando un mercado abandonado. + + + Bandits have secured the abandoned trader. + Die Banditen haben den verlassenen Händler unter ihrer Kontrolle. + Les Bandits on sécuriser le vendeur abandonné. + Бандиты захватили торговый город. + Bandidos han asegurado el mercado abandonado. + + + Bandits did not secure the abandoned trader. + Die Banditen konnten den verlassenen Händler nicht an sich reißen. + Les Bandits n'ont pas sécuriser le vendeur abandonné. + Бандиты не Ñмогли захватить торговый город. + Los bandidos no han asegurado el mercado abandonado. + + + Heroes have taken an armed vehicle from the bandits. + Helden haben ein bewaffnetes Fahrzeug von den Banditen gestohlen. + Les Heros on pris un véhicule armé au Bandits. + Герои захватили у бандитов вооруженный транÑпорт. + Héroes han tomado un vehículo armado de los bandidos. + + + Bandits have secured the armed vehicle. + Banditen haben das bewaffnete Fahrzeug an sich genommen. + Les Bandits on sécuriser le véhicule armé. + Бандиты отбили вооруженный транÑпорт. + Los bandidos han asegurado el vehículo armado. + + + Bandits did not secure the armed vehicle. + Die Banditen konnten das bewaffnete Fahrzeug nicht für sich gewinnen. + Les Bandits n'ont pas sécuriser le véhicule armé. + Бандиты не Ñмогли отбить вооруженный транÑпорт. + Los bandidos no han asegurado el vehículo armado. + + + The ARMY set up a guarded base! + Die Armee hat ein bewachtes Lager aufgeschlagen! + L'armé a mis en place une base bien gardé! + Обнаружена армейÑÐºÐ°Ñ Ð±Ð°Ð·Ð° под уÑиленной охраной! + La Armada ha asentado una base custodiada! + + + Survivors have secured the ARMY Base. + Überlebende haben das Lager der Armee unter ihre Kontrolle. + Les Survivants on sécuriser la base militaire. + Выжившие захватили армейÑкую базу. + Sobrevivientes han asegurado la base de la Armada + + + Survivors did not secure the ARMY Base. + Die Armee zieht ab. Keine besonderen Vorkommnisse. + Les Survivants n'ont pas sécuriser la base militaire. + Выжившие не Ñмогли захватить армейÑкую базу. + Los Sobrevivientes no han asegurado la base de la Armada + + + Heroes are defending a broken down Ural! + Helden verteidigen einen liegen gebliebenen Ural! + Les Heros défendes un Ural accidenté! + Герои охранÑÑŽÑ‚ Ñломанный Урал! + Los Héroes están defendiendo un Utilitario averiado + + + The supplies have been secured by bandits. + Die Materialien wurden von Banditen gesichert. + Les provitions on été sécuriser par les Bandits. + Груз Ñ Ð£Ñ€Ð°Ð»Ð° был захвачен бандитами. + Los bandidos han asegurado los suministros + + + Bandits failed to secure the supplies. + Die Banditen konnten die Materialien nicht für sich gewinnen. + Les Bandits n'ont pas reussi a sécuriser les provitions. + Бандиты не Ñмогли захватить груз Ñ Ð£Ñ€Ð°Ð»Ð°. + Los bandidos no han asegurado los suministros + + + Cannibals are hiding in a cave! + Kannibalen verstecken sich in einer Höhle! + Des cannibales se cachent dasn une grotte! + Каннибалы прÑчутÑÑ Ð² пещере! + Los caníbales están escondidos en una cueva + + + Survivors secured the Cannibal Cave. + Überlebende haben die Kannibalenhöhle gestürmt. + Les survivants on sécuriser la grotte des cannibales. + Выжившие зачиÑтили Пещеру каннибалов. + Sobrevivientes han asegurado la cueva de los caníbales + + + Survivors did not secure the Cannibal Cave. + Die Kannibalen verlassen die Höhle und ziehen weiter. + Les survivant n'ont pas sécuriser la grotte des cannibales. + Выжившие не Ñмогли зачиÑтить Пещеру каннибалов. + Los Sobrevivientes no han asegurado la cueva de los caníbales. + + + A group of red cross volunteers are giving away medical supplies! + Eine Gruppe Freiwilliger des Roten Kreuzes verteilt Medizin! + Un groupe de volontaires de la croix rouge donnent des provition médicales! + Группа добровольцев из КраÑного КреÑта раздает предметы медицины из захваченного MV22! + Un grupo de voluntarios de la Cruz Roja están entregando suministros médicos + + + Bandits have murdered the volunteers. + Banditen haben die Freiwilligen des Roten Kreuzes getötet. + Les Bandits on tuer tous les volontaires. + Бандиты убили добровольцев и захватили лут. + Los bandidos han asesinado a los voluntarios. + + + The medical supplies have been given away. + Die gesamte Medizin wurde verteilt. Das Rote Kreuz zieht ab. + Les provitions médicales on été donné. + Бандиты не Ñмогли захватить медицинÑкие препараты. + Los suministros médicos han sido entregados. + + + Crooked cops are about to raid the weed crops of a hippie commune! + Korrupte Polizisten sind dabei das Cannabis einer Hippie-Kommune zu stehlen! + Des flics tordus sont sur le point de volé le cannabis de la communautée hippie! + ÐŸÐ¾Ð»Ð¸Ñ†Ð¸Ñ ÑобираетÑÑ Ñовершить налет на общину хиппи! + Policías corruptos están por asaltar la plantación de marihuana de una comunidad hippie! + + + Survivors saved the hippie commune. + Überlebende haben die Hippie-Kommune gerettet. + Les survivants on sauvé la communautée hippie. + Выжившие ÑпаÑли общину хиппи. + Sobrevivientes han salvado la comunidad Hippie. + + + Survivors did not save the hippie commune. + Die Hippie-Kommune wurde ausgeraubt. + Les survivants n'ont pas sauvé la communautée hippie. + Выжившие не Ñмогли ÑпаÑти общину. + Los sobrevivientes no han salvado a la comunidad Hippie + + + Heroes are training drone pilots at a secret airfield! + Helden trainieren Dronenpiloten auf einem geheimen Flugplatz! + Les Heros s'entraine a piloter des drones sur un aéroport secret! + Герои готовÑÑ‚ беÑпилотник на Ñекретном аÑродроме! + Héroes están entrenando pilotos de drones en un campo aereo secreto + + + Survivors have secured the drones. + Überlebende haben die Dronen an sich gerissen. + Les survivants on sécuriser les drones. + Выжившие захватили беÑпилотник. + Los sobrevivientes han asegurado los drones + + + Survivors did not secure the drones. + Die Dronenpiloten haben sich unentdeckt aus dem Staub gemacht. + Les survivant n'ont pas sécuriser les drones. + Выжившие не Ñмогли захватить беÑпилотник. + Los sobrevivientes no aseguraron los drones. + + + Police are about to raid a drug dealer! + Die Polizei ist dabei einen Drogendealer hochzunehmen! + La Police est sur le point de faire une déscente chez un dealer de drogue! + ÐŸÐ¾Ð»Ð¸Ñ†Ð¸Ñ Ñовершила налет на драгдилера! + La policía esta por atacar a un traficante de drogas! + + + Bandits have secured the drugs. + Banditen haben die Drogen für sich beansprucht. + Les Bandits on sécuriser la drogue. + Бандиты захватили наркоту. + Los bandidos han asegurado las drogas. + + + Bandits did not secure the drugs. + Die Polizei hat all die Drogen an sich genommen. + Les Bandits n'ont pas sécuriser la drogue. + Бандиты не Ñмогли захватить наркоту. + Los bandidos no han asegurado las drogas. + + + A farmer is selling supplies at his farm! + Ein Farmer verkauft Materialien auf seiner Farm! + Un fermier vend des provitions dans sa ferme! + Фермер продает товары на ферме! + Un Granjero está vendiendo suministros en su granja! + + + Bandits have killed the farmer's workers. + Banditen haben die Mitarbeiter des Farmers getötet. + Les Bandits on tuer le fermier. + Бандиты убили вÑех рабочих на ферме. + Los bandidos han asesinad a los trabajadores del granjero. + + + The farmer has sold all of his supplies. + Der Farmer hat all seine Materialien verkauft. + Le fermier a vendu toute ses provisions. + Фермер раÑпродал вÑе Ñвои товары. + El granjero ha vendido todos sus suministros. + + + GEM TOWER! Climb up the tower and down the other side to get the loot! + EDELSTEIN-TURM! Klettere den Turm hinauf und auf der anderen Seite herunter, um deine Belohnung zu erhalten! + LA TOUR AUX GEMES: Escalader la tour,déscender de l'autre coter et recupéré les provisions. + БÐШÐЯ! ПоднимиÑÑŒ на Башню и ÑпуÑтиÑÑŒ вниз по другой Ñтороне, чтобы получить добычу! + TORRE DE GEMAS! Escala la torre y desciende por el otro lado para conseguir el botín! + + + Survivors captured the Gem Tower. + Überlebende haben den Edelsteinturm bezwungen. + Les survivants on capturé la tour. + Выжившие захватили Башню. + Sobrevivientes capturaron la Torre de las Gemas + + + Survivors were unable to capture the Gem Tower. + Keiner hat es geschafft den Edelsteinturm zu bezwingen. + Les survivant n'ont pas été capable de capturé la tour. + Выжившие не Ñмогли захватить Башню. + Sobrevivientes no han podido capturar la Torre + + + Heroes have setup a heavily fortified base! + Helden haben ein schwer befestigtes Lager aufgeschlagen! + Les Heros on installer une base fortifier! + Герои оÑновали укрепленную базу! + Héroes han establecido una base fuertemente armada! + + + Bandits have captured the Hero base. + Banditen haben das Heldenlager übernommen. + Les Bandits on capturé la base fortifier. + Бандиты захватили ГеройÑкую базу. + Bandidos han capturado la base de los Héroes + + + Bandits did not capture the Hero base. + Das Heldenlager wird abgerissen. Die Helden ziehen weiter. + Les Bandits n'ont pas capturé la base fortifier. + Бандиты не Ñмогли захватить ГеройÑкую базу. + Los bandidos no han capturado la base de los héroes + + + A Hero Squad has started an outpost! + Ein Heldentrupp hat einen Vorposten aufgeschlagen! + Une escouade Hero on installer un avant-poste. + ОтрÑд героев обоÑновал аванпоÑÑ‚! + Un escuadrón de héroes ha comenzado un puesto de avanzada! + + + Bandits have secured the outpost. + Banditen haben den Vorposten erobert. + Les Bandits on sécuriser l'avant-poste. + Бандиты захватили аванпоÑÑ‚. + ULos bandidos han asegurado el puesto de avanzada. + + + Bandits did not secure the outpost. + Der Vorposten zieht ab. + Les Bandits n'on pas sécuriser l'avant-poste. + Бандиты не Ñмогли захватить аванпоÑÑ‚. + Los bandidos no han asegurado el puesto de avanzada. + + + AN IKEA convoy is taking a lunch break! + Ein Ikea-Convoy hat Mittagspause! + Un convoie IKEA fait une pause dejeuner! + Конвой IKEA Ñделал оÑтановку на обед! + Un convoy de IKEA está tomando un descanso para almorzar! + + + Bandits have ambushed the IKEA convoy. + Banditen haben den Ikea-Convoy überfallen. + Les Bandits on attaquer le convoie IKEA. + Бандиты уÑпешно захватили конвой IKEA. + Bandidos han emboscado al convoy de IKEA. + + + Bandits did not secure the IKEA convoy. + Der Ikea-Convoy setzt seine Reise fort. + Les Bandits n'ont pas sécuriser le convoie IKEA. + Бандитам не удалоÑÑŒ захватить конвой. + Bandidos no han asegurado el convoy de IKEA. + + + Heroes are hiding something in a junk yard! + Die Helden verstecken etwas auf dem Schrottplatz! + Les Héros cache quelque chose dans une décharge! + Герои что-то Ñкрывают на Ñвалке! + Los héroes están escondiendo algo en la chatarrería! + + + Survivors have secured the Junk Yard. + Überlebende haben den Schrottplatz übernommen. + Les Survivants on sécuriser la décharge. + Выжившие захватили Ñвалку. + Sobrevivientes han asegurado la chatarrería. + + + Survivors did not secure the Junk Yard. + Die Helden suchen sich ein neues Versteck. + Les Survivants n'ont pas sécuriser la décharge. + Выжившие не Ñмогли захватить Ñвалку. + Sobrevivientes no han asegurado la chatarrería. + + + Heroes are setting up a lumber mill! + Helden haben ein Sägewerk eingerichtet! + Les Héros on mis en place une scierie! + Герои обоÑновалиÑÑŒ на леÑопилке! + Los Hérores están ensamblando un aserradero! + + + Survivors secured the lumber. + Überlebende haben das Holz an sich gerissen. + Les Survivants on sécuriser la scierie. + Выжившие захватили леÑопилку. + Sobrevivientes han asegurado el aserradero. + + + Survivors did not secure the lumber. + Das Holz des Sägewerkes wird abtransportiert. + Les Survivants n'ont pas sécuriser la scierie. + Выжившие не Ñмогли Ð²Ð¾Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ñ…Ð²Ð°Ñ‚Ð¸Ñ‚ÑŒ леÑопилку. + Sobrevivientes no aseguraron el aserradero. + + + Old MacDonald has a weed farm! + Old MacDonald hat eine Cannabis-Farm! + Le vieux MacDonald a une ferme de cannabis! + Обнаружена ÑÑ‚Ð°Ñ€Ð°Ñ Ñ„ÐµÑ€Ð¼Ð° MacDonald! + El Viejo MacDonald tiene una granja de Marihuana! + + + Survivors have secured the weed farm. + Überlebende haben die Cannabis-Farm eingenommen. + Les survivant on sécuriser la ferme. + Выжившие захватили ферму. + Sobrevivientes han asegurado la granja de marihuana + + + Survivors did not secure the weed farm. + Das Cannabis wurde geerntet. Die Farm ist nun leer. + Les survivant n'ont pas sécuriser la ferme. + Выжившим не удалоÑÑŒ захватить ферму. + Sobrevivientes no han asegurado la granja de marihuana. + + + A soldier squad have set up a medical supply camp! + Eine Soldatengruppe hat ein Medizincamp aufgeschlagen! + Une èscouade de soldats on mis en place un camps de provisions médicale. + Обнаружен медицинÑкий лагерь! + Un escuadrón ha instalado un campamento de suministros médicos! + + + Survivors have taken control of the medical supply camp. + Überlebende haben das Medizincamp unter ihre Kontrolle gebracht. + Les survivant on pris le controle du camps de provisions médicales. + Выжившие взÑли под контроль медицинÑкий лагерь. + Sobrevivientes han tomado control del campamento de suministros médicos. + + + Survivors were unable to capture the medical supply camp. + Das Medizincamp wird abgebaut. + Les survivant n'on pas été capable de prendre le controle du camps de provisions médicale. + Выжившим не удалоÑÑŒ захватить медицинÑкий лагерь. + Sobrevivientes no han controlado el campamento de suministros médicos. + + + Heroes have started to patrol in %1! + Helden haben in %1 eine Patroullie gestartet! + Des Heros on commencer une patrouille dans %1 + Герои начали патрулирование в %1! + Héroes han comenzado a patrullar en %1! + + + Bandits have taken out the hero patrol. + Banditen haben die Heldenpatroullie ausgeschaltet. + Des Bandits on stopper la patrouille. + Бандиты уничтожили ГеройÑкий патруль. + Bandidos han desbaratado la patrulla de héroes. + + + Heroes managed to reach their destination. + Die Heldenpatroullie ist am Zielpunkt angekommen. + Les Heros on réussis a rejoindre leur déstination. + Герои уÑпешно закончили патрулирование. + Los Héroes lograron alcanzar su destino. + + + The President is in town for a press conference! + Der Präsident ist für eine Pressekonferenz in der Stadt! + Le président est en ville pour faire uen conférence de presse! + Президент приехал в город на конференцию! + El Presidednte está en la ciudad por una conferencia de prensa! + + + The President has been assassinated. + Der Präsident wurde ermordet. + Le président a été assasiné. + Президент был убит. + El Presidente ha sido asesinado. + + + The President managed to get away. + Le président a términé sa conférence. + Sicherheitspersonal hat den Präsidenten aus der Stadt geschafft. + Президенту удалоÑÑŒ уйти. + El Presidente logró escapar. + + + Heroes set up a radio tower! + Helden haben einen Funkturm errichtet! + Des Heros on mis en place une tour radio! + Герои поÑтроили радиовышку! + Los héroes han instalado una torre de radio! + + + Survivors secured the Radio Tower. + Überlebende haben den Funkturm für sich beansprucht. + Des Survivants on sécuriser la tour radio. + Выжившие захватили радиовышку. + Sobrevivientes han asegurado la Torre de Radio. + + + Survivors did not secure the Radio Tower. + Der Funkturm wird abgebaut. + Les Survivants n'on pas sécuriser la tour radio. + Выжившим не удалоÑÑŒ захватить радиовышку. + Los sobrevivientes no han asegurado la Torre de Radio. + + + Something smells funky at the Old Slaughter House! + Etwas riecht komisch beim alten Schlachtaus! + Quelque chose sent mauvais pret du vieil abatoir! + КакаÑ-то движуха на Ñтарой бойне! + Algo huele mal en el Viejo Matadero! + + + Survivors have secured the Slaughter House. + Überlebende haben das alte Schlachtaus übernommen. + Les survivant on sécuriser le vieil abatoir. + Выжившие захватили Ñтарую бойню. + Los sobrevivientes han asegurado el Matadero. + + + Survivors have discovered a mass grave. + Überlebende haben ein Massengrab entdeckt. + Les survivant on découvert une fosse commune. + Выжившие обнаружили маÑÑовую могилу. + Los sobrevivientes descubrieron una Fosa común. + + + Heroes are loading captured sniper rifles onto a chopper! + Helden beladen einen Helikopter mit Scharfschützengewehren! + Des Heros sont en train de charger des fusil sniper dans un helico! + Герои загружают ÑнайперÑкое оружие в вертолет! + Los héroes están cargando los rifles de franco tirador a un helicóptero! + + + Bandits have secured the snipers and taken the chopper. + Banditen haben die Scharfschützengewehre geklaut und den Helikopter entwendet. + Des Bandits on sécuriser les fusil sniper et pris l'helico. + Бандиты захватили ÑнайперÑкое оружие и вертолет. + Los bandidos han asegurado los rifles y tomado el helicóptero. + + + Bandits did not secure the sniper rifles. + Die Scharfschützengewehre konnten abtransportiert werden. + Les Bandits n'on pas sécuriser l'helico. + Бандиты не Ñмогли захватить оружие. + Los bandidos no han asegurado los rifles de franco tirador. + + + A U.N tank column stopped to resupply at an outpost! + Eine U.N. Panzerkolonne hält für Nachschub an einem Außenposten! + Une colone de char U.N c'est arreter dasn un avant-poste pour réapprovisionné! + Ð¢Ð°Ð½ÐºÐ¾Ð²Ð°Ñ ÐºÐ¾Ð»Ð¾Ð½Ð½Ð° ООРоÑтановилаÑÑŒ Ð´Ð»Ñ Ð¿Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð°Ñов! + Una columna de tanques de la ONU se a detenido a reabastecerse! + + + Survivors have secured the tank column. + Überlebende haben die Panzerkolonne übernommen. + Les survivant on sécuriser la colone de char. + Выжившие захватили танковую колонну. + Los sobrevivientes han asegurado la columna de tanques. + + + Survivors were unable to secure the tank column. + Die Panzerkolonne setzt ihren Weg fort. + Les survivant n'on pas sécuriser la colone de char. + Выжившим не удалоÑÑŒ захватить танковую колонну. + Los sobrevivientes no han podido asegurar la columna de tanques. + + + Heroes have obtained a weapon cache! + Helden beziehen ein Waffenlager! + Des Heros on trouver une cache d'armes! + Герои обнаружили Ñщик Ñ Ð¾Ñ€ÑƒÐ¶Ð¸ÐµÐ¼! + Los héroes han obtenido un cache de armas! + + + Bandits have secured the weapon cache. + Banditen haben das Waffenlager eingenommen. + Des Bandits on sécuriser la cache d'armes. + Бандиты захватили Ñщик Ñ Ð¾Ñ€ÑƒÐ¶Ð¸ÐµÐ¼. + Los bandidos han asegurado el cache de armas. + + + Bandits did not secure the weapon cache. + Das Waffenlager wird verlegt. + Les Bandits n'on pas sécuriser la cache d'armes. + Бандиты не Ñмогли захватить Ñщик Ñ Ð¾Ñ€ÑƒÐ¶Ð¸ÐµÐ¼. + Los bandidos no aseguraron el cache de armas! + + + A Hero scout patrol is checking out a new base location! + Eine Helden-Patroullie untersucht die Umgebung für einen neuen Stützpunkt! + Разведчики Героев проверÑÑŽÑ‚ меÑто под новую базу! + + + Bandits have killed the scout patrol. + Banditen haben die Heldenpatroullie ausgeschalten. + Бандиты уничтожили ГеройÑких разведчиков. + + + Bandits did not deal with the scout patrol. + Die Helden-Patroullie hat keinen geeigneten Ort gefunden. + Бандиты не Ñмогли уничтожить ГеройÑких разведчиков. + + + Bandits are securing an abandoned trader! + Einige Banditen wurden bei einem verlassenen Händler gesichtet. + Des Bandits sont en train de sécuriser un vendeur abandonné. + Бандиты охранÑÑŽÑ‚ брошенный торговый город! + Bandidos están asegurando un mercado abandonado! + + + Survivors have secured the abandoned trader. + Überlebende haben den verlassenen Händler eingenommen. + Les Survivants on sécuriser le vendeur abandonné. + Выжившие захватили торговый город. + Los sobrevivientes han asegurado el mercado abandonado + + + Survivors did not secure the abandoned trader. + Kein Überlebender konnte den verlassenen Händler an sich reißen. + Les survivant n'on pas sécuriser le vendeur abandonné. + Выжившие не Ñмогли захватить торговый город. + Los Sobrevivientes no aseguraron el mercado abandonado. + + + Bandits have disabled an armed vehicle! + Banditen haben ein bewaffnetes Fahrzeug ausgeschalten! + Des Bandits on stopper un véhicule armé! + Бандиты захватили вооруженный транÑпорт! + Los bandidos han desabilitado un vehículo armado! + + + Survivors have secured the armed vehicle. + Überlebende haben das bewaffnete Fahrzeug gesichert. + Des Survivants on capturé le véhicule armé. + Герои отбили вооруженный транÑпорт. + Los sobrevivientes han asegurado un vehículo armado. + + + Survivors did not secure the armed vehicle. + Das bewaffnete Fahrzeug wurde von den Banditen fort geschafft. + Les Survivants n'on pas sécuriser le véhicule armé. + Герои не Ñмогли отбить вооруженный транÑпорт. + Los sobrevivientes no aseguraron el vehículo armado. + + + A jungle task force have set up a temporary encampment! + Eine Spezialeinheit hat ein temporäres Lager aufgeschlagen! + Une escouade partie dans la jungle a établis un campement! + Обнаружен временный военный лагерь! + Una unidad especial ha establecido un campamento temporal! + + + Survivors captured the encampment. + Überlebende haben das Lager der Spezialeinheiten erobert. + Les survivant on capturé le campement. + Выжившие захватили лагерь. + Los sobrevivientes han capturado el campamento. + + + Survivors were unable to capture the encampment. + Das temporäre Lager wurde abgebaut. + Les survivant n'on pas capturé le campement. + Выжившие не Ñмогли захватить лагерь. + Los sobrevivientes fueron incapaces de capturar el campamento. + + + A Bandit Squad has started an outpost! + Ein Banditentrupp hat einen Vorposten aufgeschlagen! + Une escouade bandit a mis en place un avant-poste! + ОтрÑд бандитов обоÑновал аванпоÑÑ‚! + Un escuadrón de bandidos ha comenzado un puesto de avanzada! + + + Survivors have secured the outpost. + Überlebende haben den Vorposten erobert. + Les survivant on sécuriser l'avant-poste. + Выжившие захватили аванпоÑÑ‚. + Los sobrevivientes han asegurado el puesto de avanzada. + + + Survivors did not secure the outpost. + Der Vorposten zieht ab. + Les survivants n'on pas capturé l'avant-poste. + Выжившие не Ñмогли захватить аванпоÑÑ‚. + Los sobrevivientes no han asegurado el puesto de avanzada. + + + A bandit scout patrol is checking out a new base location! + Eine Banditen-Patroullie untersucht die Umgebung für einen neuen Stützpunkt! + Une patrouille bandit cheche un emplacement pour une nouvelle base! + Патруль бандитÑких разведчиков проверÑет новое меÑто Ð´Ð»Ñ Ð±Ð°Ð·Ñ‹! + Una patrulla de reconocimiento de bandidos está buscando un lugar para una nueva base! + + + Survivors have dealt with the scout patrol. + Überlebende haben sich um die Banditen-Patroullie gekümmert. + Les survivant on tuer la patrouille bandit. + Выжившие уничтожили бандитÑкий патруль. + Los sobrevivientes se han encargado de la patrulla de reconocimiento. + + + Survivors did not deal with the scout patrol. + Die Banditen-Patroullie hat keinen geeigneten Ort gefunden. + La patrouille bandit c'est enfuis. + Выжившим не удалоÑÑŒ уничтожить бандитÑкий патруль. + Los sobrevivientes no se encargaron de la patrulla de reconocimiento. + + + A Black Hawk carrying supplies has crashed! + Ein Black Hawk mit Materialien ist abgestürzt! + Un Black Hawk qui transportai des provitions c'est cracher. + РазбилÑÑ Ð§ÐµÑ€Ð½Ñ‹Ð¹ ЯÑтреб, перевозÑщий предметы ÑнабжениÑ! + Un Black Hawk transportando suministros se ha estrellado! + + + Survivors have secured the crashed Black Hawk. + Überlebende haben den abgestürzten Black Hawk gesichert. + Les survivant on sécuriser le Black Hawk. + Выжившие захватили меÑто ÐºÑ€ÑƒÑˆÐµÐ½Ð¸Ñ Ð§ÐµÑ€Ð½Ð¾Ð³Ð¾ ЯÑтреба. + Los sobrevivientes han asegurado el Black Hawk estrellado. + + + Survivors did not secure the crashed Black Hawk in time. + Der abgestürzte Black Hawk wurde entfernt. + Les survivant n'on pas sécuriser le Black Hawk. + Выжившие не Ñмогли захватить меÑто ÐºÑ€ÑƒÑˆÐµÐ½Ð¸Ñ Ð§ÐµÑ€Ð½Ð¾Ð³Ð¾ ЯÑтреба. + Los sobrevivientes no han asegurado el Black Hawk estrellado a tiempo. + + + Bandits have captured a Red Cross MV-22! + Banditen haben ein MV-22 des Roten Kreuzes gekapert! + Les bandits on capturé un MV-22 de la Croix Rouge! + Бандиты захватили MV-22 КраÑного КреÑта! + Bandidos han capturado un MV-22 de la Cruz Roja! + + + Survivors have secured the MV-22. + Überlebende haben den MV-22 unter ihrer Kontrolle. + Les survivant on capturé le MV-22. + Выжившие убили бандитов и захватили MV-22. + Los sobrevivientes han asegurado el MV-22 de la Cruz Roja. + + + Survivors did not secure the MV-22. + Der MV-22 ist davon gekommen. + Les survivant n'on pas capturé le MV-22. + Выжившие не Ñмогли захватить MV-22. + Los sobrevivientes no han asegurado el MV-22 de la Cruz Roja. + + + Bandits have destroyed a Ural with supplies! + Banditen haben einen Ural mit Materialien zerstört! + Des bandits on détruis un Ural de provisions! + Бандиты охранÑÑŽÑ‚ Ñломанный Урал! + Bandidos han destruido un Ural con suministros! + + + The supplies have been secured by survivors. + Die Materialien wurden von Überlebenden gesichert. + Les provisions on été sécuriser par les survivants. + Груз Ñ Ð£Ñ€Ð°Ð»Ð° был захвачен выжившими. + Los suministros han sido asegurados por los sobrevivientes. + + + Survivors did not secure the supplies in time. + Die Banditen sind mit den Materialien verschwunden. + Les survivants n'ont pas sécuriser les provisions. + Выжившие не Ñмогли захватить груз Ñ Ð£Ñ€Ð°Ð»Ð°. + Los sobrevivientes no han asegurado los suministros a tiempo. + + + A bandit helicopter is taking off with a crate of snipers! + Ein Helikopter der Banditen, besetzt mit Scharfschützen, startet seinen Flug! + Un helico bandit est en train de charger une caisse de fusil de snipers! + БандитÑкий вертолет Ñо ÑнайперÑким оружием готовитÑÑ Ðº вылету! + Un helicóptero bandido está despegando con una caja de rifles de franco tirador! + + + Survivors have secured the armed chopper. + Überlebende haben den bewaffneten Helikopter erobert. + Les survivant on sécuriser l'helico armé. + Выжившие захватили вертолет Ñ Ð¾Ñ€ÑƒÐ¶Ð¸ÐµÐ¼. + Los sobrevivientes han asegurado el helicóptero armado. + + + Survivors did not secure the armed chopper in time. + Der Scharfschützen-Helikopter zieht ab. + Les survivant n'on pas sécuriser l'helico armé dans les temps. + Выжившие не Ñмогли захватить ÑнайперÑкое оружие Ñ Ð²ÐµÑ€Ñ‚Ð¾Ð»ÐµÑ‚Ð°. + Los sobrevivientes no han asegurado el helicóptero armado. + + + Bandits are training drone pilots at a secret airfield. + Banditen trainieren Dronenpiloten auf einem geheimen Flugplatz! + Des bandits s'entraine a piloter des drones sur un aéroport secret! + Бандиты готовÑÑ‚ беÑпилотник на Ñекретном аÑродроме! + Los bandidos están entrenando pilotos de drones en un aeropuerto secreto! + + + Survivors have secured the drones. + Überlebende haben die Dronen an sich gerissen. + Les survivant on sécuriser les drones. + Выжившие захватили беÑпилотник. + Los sobrevivientes han asegurado los drones. + + + Survivors did not secure the drones. + Die Dronenpiloten haben sich unentdeckt aus dem Staub gemacht. + Les survivant n'on pas sécuriser les drones. + Выжившие не Ñмогли захватить беÑпилотник. + Los sobrevivientes no han asegurado los drones. + + + Bandits have set up a Crack House! + Banditen haben ein Drogenlabor aufgeschlagen! + Des bandits on mis en place une maison a crack! + Обнаружен бандитÑкий наркопритон! + Los bandidos han instalado una Casa de Crack! + + + Survivors have secured the Crack House. + Überlebende haben das Drogenlabor gestürmt. + Les survivant on sécuriser la maison a crack. + Выжившие захватили наркопритон. + Los sobrevivientes han asegurado la Casa de Crack. + + + Survivors did not secure the Crack House. + Das Drogenlaber wurde geräumt. + Les survivant n'on pas sécuriser la maison a carck. + Выжившие не Ñмогли захватить наркопритон. + Los sobrevivientes no han asegurado la Casa de Crack. + + + Bandits are attacking a farmer and stealing his supplies! + Banditen attackieren einen Farmer und stehlen seine Materialien! + Des bandit attaque un fermier pour lui voler ses provisions! + Бандиты напали на фермера и крадут его запаÑÑ‹! + Los bandidos están atacando una granja y robando sus suministros! + + + Survivors have secured the farm. + Überlebende haben die Farm gesichert. + Les survivant on sécuriser la ferme. + Выжившие отбили ферму от бандитов. + Los sobrevivientes han asegurado la granja. + + + Bandits robbed the farmer. + Der Farmer wurde ausgeraubt. + Les bandits on voler le fermier. + Бандиты ограбили фермера. + Los bandidos robaron la granja. + + + An IKEA delivery has been hijacked by bandits! + Ein Ikea-Convoy wurde von Banditen hoch genommen! + Un camion de livraison IKEA a été détourné par des bandits! + Конвой IKEA был захвачен бандитами! + Una entrega de IKEA ha sido tomada por los bandidos! + + + Survivors have secured the building supplies. + Überlebende haben die Bauteile gesichert. + Les survivant on sécuriser les matériaux de constructions. + Выжившие уÑпешно захватили конвой IKEA. + Los sobrevivientes han asegurado los suministros de construcción. + + + Survivors did not secure the convoy in time. + Die Banditen sind mit dem Ikea-Convoy davon gefahren. + Les survivants n'on pas sécuriser de camion de livraison. + Выжившим не удалоÑÑŒ захватить конвой. + Los sobrevivientes no han asegurado el convoy a tiempo. + + + Bandits are hiding something in a junk yard! + Die Banditen verstecken etwas auf dem Schrottplatz! + Des bandits cachent quelque chose dans une décharge! + Бандиты что-то Ñкрывают на Ñвалке! + Los bandidos están escondiendo algo en la chatarrería! + + + Survivors have secured the Junk Yard. + Überlebende haben den Schrottplatz übernommen. + Les survivant on sécuriser la décharge. + Выжившие захватили Ñвалку. + Los sobrevivientes han asegurado la chatarrería. + + + Survivors did not secure the Junk Yard. + Die Banditen suchen sich ein neues Versteck. + Personne n'a sécuriser la décharge a temps. + Выжившие не Ñмогли захватить Ñвалку. + Los sobrevivientes no han asegurado la chatarrería. + + + Bandits set up a lumber mill! + Banditen haben ein Sägewerk eingerichtet! + Des bandits on mis en place une scierie! + Бандиты обоÑновалиÑÑŒ на леÑопилке! + Los bandidos están estableciendo un aserradero! + + + Survivors secured the lumber. + Überlebende haben das Holz an sich gerissen. + Les survivant on capturer la scierie. + Выжившие захватили леÑопилку. + Los sobrevivientes han asegurado el aserradero. + + + Survivors did not secure the lumber. + Das Holz des Sägewerkes wird abtransportiert. + Les survivant n'on pas sécuriser la scierie. + Выжившие не Ñмогли Ð²Ð¾Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ñ…Ð²Ð°Ñ‚Ð¸Ñ‚ÑŒ леÑопилку. + Los sobrevivientes no han asegurado el aserradero. + + + The Mayor has gone rogue! + Der Bürgermeister ist korrupt! + Le maire est devenue un voyou! + Коррумпированный МÑÑ€ прÑчетÑÑ Ð² оÑобнÑке! + El Alcalde se ha vuelto deshonesto! + + + The rogue mayor has been taken out. + Der Bürgermeister wurde ausgeschalten. + Le maire a été assasiné. + ОÑобнÑк МÑра под контролем выживших. + El alcalde deshonesto ha sido eliminado. + + + Survivors were unable to take the mayor down. + Der Bürgermeister konnte unentdeckt davon kommen. + Les survivant on mis trop de temps, le maire c'est enfuis. + Выжившие не Ñмогли захватить оÑобнÑк МÑра. + Los sobrevivientes no pudieron eliminar al Alcalde. + + + Bandits have taken over a medical supply camp! + Banditen haben ein Medizincamp übernommen! + Les bandits on capturer un camps médical! + Обнаружен бандитÑкий медицинÑкий лагерь! + Los bandidos han tomado control de un campamento de suministros médicos! + + + Survivors have secured the medical supply camp. + Überlebende haben das Medizincamp unter ihre Kontrolle gebracht. + Les survivant on sécuriser le camps médical. + Выжившие взÑли под контроль медицинÑкий лагерь. + Los sobrevivientes han asegurado el campamento de suministros médicos. + + + Survivors did not secure the medical supply camp. + Das Medizincamp wird abgebaut. + Les survivant n'on pas sécuriser le camps médical a temps. + Выжившим не удалоÑÑŒ захватить медицинÑкий лагерь. + Los sobrevivientes no aseguraron el campamento de suministros médicos. + + + Bandits have started to patrol in %1! + Banditen haben in %1 eine Patroullie gestartet! + Des Bandits on commencer a patrouiller dans %1 + Бандиты начали патрулирование в %1! + Los bandidos han comenzado a patrullar en %1! + + + Heroes have taken out the bandit patrol. + Helden haben die Banditenpatroullie ausgeschalten. + Les Heros on capturer la patrouille. + Герои уничтожили БандитÑкий патруль. + Los héroes han eliminado la patrulla de bandidos. + + + Bandits managed to reach their destination. + Die Banditenpatroullie ist am Zielpunkt angekommen. + Les Bandits sont en route vers une autre destination. + Бандиты уÑпешно закончили патрулирование. + Los bandidos se las arreglaron para alcanzar su destino. + + + Bandits set up a radio tower! + Banditen haben einen Funkturm errichtet! + Des bandits on mis en place une tour radio! + Бандиты поÑтроили радиовышку. + Los bandidos instalaron una Torre de Radio! + + + Survivors secured the radio tower. + Überlebende haben den Funkturm für sich beansprucht. + Les survivant on sécuriser la tour radio. + Выжившие захватили радиовышку. + Los sobrevivientes aseguraron la Torre de Radio. + + + Survivors did not secure the radio tower. + Der Funkturm wird abgebaut. + Les survivant n'on pas sécuriser la tour radio. + Выжившим не удалоÑÑŒ захватить радиовышку. + Los sobrevivientes no aseguraron la Torre de Radio. + + + A bandit tank column stopped to resupply at an outpost! + Eine Panzerkolonne der Banditen muss an einem Außenposten aufmunitionieren! + Une colone de char bandit c'est arreter dasn un avant-poste pour réapprovisionné! + Ð¢Ð°Ð½ÐºÐ¾Ð²Ð°Ñ ÐºÐ¾Ð»Ð¾Ð½Ð½Ð° Бандитов оÑтановилаÑÑŒ Ð´Ð»Ñ Ð¿Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð°Ñов! + Una columna de tanques de bandidos se detuvo para reabastecerse! + + + Survivors have secured the tank column. + Überlebende haben die Panzerkolonne übernommen. + Les survivant on sécuriser la colone de char bandit. + Выжившие захватили танковую колонну. + Sobrevivientes han asegurado la columna de tanques. + + + Survivors did not secure the tank column. + Die Panzerkolonne setzt ihren Weg fort. + Les survivant n'on pas été capable de sécuriser la colone de char bandit. + Выжившим не удалоÑÑŒ захватить танковую колонну. + Los sobrevivientes no aseguraron la columna de tanques. + + + Bandits have obtained a weapon crate! + Banditen haben eine Waffenkiste abgefangen! + Des bandits on obtenue une caisse de munitions! + Бандиты обнаружили Ñщик Ñ Ð¾Ñ€ÑƒÐ¶Ð¸ÐµÐ¼! + Los bandidos han obtenido una caja de armas! + + + Survivors have secured the weapon crate. + Überlebende haben die Waffenkiste für sich beansprucht. + Les survivant on sécuriser la caisse de munitions. + Выжившие захватили Ñщик Ñ Ð¾Ñ€ÑƒÐ¶Ð¸ÐµÐ¼. + Sobrevivientes han asegurado la caja de armas. + + + Survivors did not secure the weapon crate. + Die Banditen haben die Waffenkiste fort geschafft. + Les survivant n'on pas sécuriser la caisse de munitions. + Выжившие не Ñмогли захватить Ñщик Ñ Ð¾Ñ€ÑƒÐ¶Ð¸ÐµÐ¼. + Los sobrevivientes no aseguraron la caja de armas. + + + The patrol arrived at %1! + Eine Patroullie ist in %1! + La patrouille est arrivé a %1! + Патруль прибыл в %1! + La patrulla arrivó a %1! + + + The patrol is seen moving towards %1. + Die Patroullie wurde Richtung %1 gesichtet. + La patrouille se dirige vers %1. + Патруль замечен в направлении %1. + La patrulla ha sido vista moviéndose hacia %1. + + + The %1 Patrol has become disabled! + Die Patroullie %1 wurde ausgeschalten! + Патрульный транÑпорт выведен из ÑтроÑ! + + + AutoClaim: If you want to claim %1, then do not leave the mission area for %2 seconds! + AutoClaim: Wenn du %1 beanspruchen willst, bleib für %2 Sekunden im Missionsbereich! + Réclamation Automatique: Si vous voulez réclamer %1, vous ne devez pas quitter la zone de mission avant %2 secondes! + AutoClaim: ЕÑли вы хотите претендовать на %1, то не покидайте зону миÑÑии в течении %2 Ñек.! + Reclamar: Si quieres reclamar %1, entonces no dejes el area de la misión por %2 segundos! + + + AutoClaim: You did not claim %1! + AutoClaim: Du hast %1 nicht beansprucht! + Réclamation Automatique: Vous n'avez pas réclamer %1! + Ð’Ñ‹ не претендуете %1! + Reclamar: No reclamaste %1! + + + You have left the mission area! You have %1 seconds to return! + Du hast den Missionsbereich verlassen! Du hast %1 um zurückzukehren! + Vous quitter la zone de mission! Vous avez %1 secondes pour revenir! + Ð’Ñ‹ покинули зону миÑÑии! У Ð²Ð°Ñ ÐµÑть %1 Ñек. чтобы вернутьÑÑ! + Has dejado el área de la misión! Tienes %1 segundos para volver! + + + You are back in the mission area! + Du bist wieder im Missionsbereich! + Vous etes de retour dans la zone de mission! + Ð’Ñ‹ вернулиÑÑŒ обратно в зону миÑÑии! + Has regresado al área de la misión! + + + AutoClaim: %1 has claimed %2! A marker has been placed! + AutoClaim: %1 hat %2 beansprucht! Ein Marker wurde gesetzt! + Réclamation Automatique: %1 a réclamé %2! Un markeur a été placer! + AutoClaim: %1 заÑвил о %2! Маркер уÑтановлен! + Reclamar: %1 ha reclamado %2! Un marcador ha sido establedido! + + + AutoClaim: %1 has abandoned %2! The marker has been removed! + AutoClaim: %1 hat %2 verlassen! Der Marker wurde entfernt! + Réclamation Automatique: %1 a abandonné %2! Le markeur a été enlever! + AutoClaim: %1 отказалÑÑ Ð¾Ñ‚ %2! Маркер удален! + Reclamar: %1 ha abandonado %2! El marcador ha sido removido! + + + A %1 is air dropping a %2 for the PMC! + Ein(e) %1 wirft ein(e) für die PMC ab! + %2 будет Ñброшен из %1 Ð´Ð»Ñ Ñ‡Ð°Ñтной военной компании! + + + The %1 has crashed! + %1 ist abgestürzt! + %1 потерпел крушение! + + + The %1 has been dropped! + %1 wurde abgeworfen! + %1 был Ñброшен! + + + Bandits have stolen the %1! + %1 wurde von Banditen gestohlen! + Бандиты похитили %1! + + + Bandits could not steal the %1 + %1 konnte nicht von Banditen gestohlen werden! + Бандиты не Ñмогли украÑть %1. + + + A %1 is air dropping a %2 for the Taliban! + Ein(e) %1 wirft ein(e) für die Talibanen ab! + %2 будет Ñброшен из %1 Ð´Ð»Ñ Ð¢Ð°Ð»Ð¸Ð±Ð¾Ð²! + + + The %1 has crashed! + %1 ist abgestürzt! + %1 потерпел крушение! + + + The %1 has been dropped! + %1 wurde abgeworfen! + %1 был Ñброшен! + + + Survivors have secured the %1! + %1 wurde von Überlebenden gesichert! + Выжившие захватили %1! + + + Survivors did not secure the %1 + %1 konnte nicht von Überlebenden gesichert werden! + Выжившие не Ñмогли захватить %1! + + + Heroes are guarding a fire station! + Helden bewachen eine Feuerwache! + Герои охранÑÑŽÑ‚ пожарную чаÑть! + + + Bandits have taken the fire station! + Banditen haben die Feuerwache eingenommen! + Бандиты захватили пожарную чаÑть! + + + Bandits failed to secure the fire station! + Die Feuerwache konnte nicht von Banditen eingenommen werden! + Бандиты не Ñмогли захватить пожарную чаÑть! + + + Bandits are attacking a fire station! + Banditen greifen die Feuerwache an! + Бандиты атаковали пожарную чаÑть! + + + Survivors have secured the fire station! + Überlebende haben die Feuerwache eingenommen! + Выжившие захватили у бандитов пожарную чаÑть! + + + Survivors failed to secure the fire station! + Die Feuerwache konnte nicht von Überlebenden eingenommen werden! + Выжившие не Ñмогли захватить пожарную чаÑть! + + + Castle Grayskull is under attack! + Castle Grayskull wird angegriffen! + + + Survivors have secured Castle Grayskull. + Überlebende haben Castle Grayskull unter ihre Kontrolle gebracht. + + + Survivors did not secure Castle Grayskull. + Überlebende konnten Castle Grayskull nicht unter ihre Kontrolle bringen. + + + Wuhan Lab scientists are guarding Dr. Fauci. + Wuhan Lab Wissenschaftler bewachen Dr. Fauci. + + + Dr. Fauci has been relieved of duty. + Dr. Fauci wurde für immer von seinen Diensten entbunden. + + + Dr. Fauci is still lying about the virus origins. + Dr. Fauci erzählt noch immer Lügen über die Herkunft des Virus. + + + + "AN2 Supply Drop + + + APCs + + + Armed Vehicles + + + C130 Crash + + + Construction Site + + + Firebase + + + General Store + + + Helicopter Crash + + + Helicopter Landing + + + Humvee Crash + + + Medical Cache + + + Medical Camp + + + Medical Outpost + + + Patrol Squad + + + Stash House + + + Ural Ambush + + + Weapons Cache + + + Weapons Truck + + + diff --git a/Users/server/server.ArmA2OAProfile b/Users/server/server.ArmA2OAProfile new file mode 100755 index 0000000..78de0d1 --- /dev/null +++ b/Users/server/server.ArmA2OAProfile @@ -0,0 +1,143 @@ +class Difficulties +{ + class Recruit + { + class Flags + { + 3rdPersonView=1; + armor=1; + autoAim=0; + autoGuideAT=1; + autoSpot=1; + cameraShake=0; + clockIndicator=1; + deathMessages=1; + enemyTag=0; + friendlyTag=1; + hud=1; + hudGroupInfo=1; + hudPerm=1; + hudWp=1; + hudWpPerm=1; + map=1; + netStats=1; + tracers=1; + ultraAI=0; + unlimitedSaves=1; + vonID=1; + weaponCursor=1; + }; + skillFriendly=1; + precisionFriendly=1; + skillEnemy=0.55000001; + precisionEnemy=0.30000001; + }; + class Regular + { + class Flags + { + 3rdPersonView=1; + armor=1; + autoAim=0; + autoGuideAT=1; + autoSpot=1; + cameraShake=1; + clockIndicator=1; + deathMessages=1; + enemyTag=0; + friendlyTag=1; + hud=1; + hudGroupInfo=1; + hudPerm=1; + hudWp=1; + hudWpPerm=1; + map=1; + netStats=1; + tracers=1; + ultraAI=0; + unlimitedSaves=1; + vonID=1; + weaponCursor=1; + }; + skillFriendly=1; + precisionFriendly=1; + skillEnemy=0.69999999; + precisionEnemy=0.5; + }; + class Veteran + { + class Flags + { + 3rdPersonView=1; + armor=0; + autoAim=0; + autoGuideAT=0; + autoSpot=0; + cameraShake=1; + clockIndicator=0; + deathMessages=1; + enemyTag=0; + friendlyTag=0; + hud=1; + hudGroupInfo=0; + hudPerm=0; + hudWp=1; + hudWpPerm=0; + map=0; + netStats=1; + tracers=0; + ultraAI=0; + unlimitedSaves=0; + vonId=0; + weaponCursor=1; + }; + skillFriendly=1; + precisionFriendly=1; + skillEnemy=0.89999998; + precisionEnemy=0.75; + }; + class Mercenary + { + class Flags + { + 3rdPersonView=0; + armor=0; + autoAim=0; + autoGuideAT=0; + autoSpot=0; + cameraShake=1; + clockIndicator=0; + deathMessages=0; + enemyTag=0; + friendlyTag=0; + hud=0; + hudGroupInfo=0; + hudPerm=0; + hudWp=0; + hudWpPerm=0; + map=0; + netStats=0; + tracers=0; + ultraAI=0; + unlimitedSaves=0; + vonID=0; + weaponCursor=0; + }; + skillFriendly=1; + precisionFriendly=1; + skillEnemy=1; + precisionEnemy=1; + }; +}; +shadingQuality=7; +shadowQuality=3; +singleVoice=0; +maxSamplesPlayed=32; +sceneComplexity=300000; +viewDistance=1600; +terrainGrid=10; +volumeCD=6.5; +volumeFX=8.5; +volumeSpeech=5.5; +volumeVoN=6.5; +vonRecThreshold=0.029999999; diff --git a/Users/server/server.vars.ArmA2OAProfile b/Users/server/server.vars.ArmA2OAProfile new file mode 100755 index 0000000..6765865 Binary files /dev/null and b/Users/server/server.vars.ArmA2OAProfile differ diff --git a/epoch.sql b/epoch.sql new file mode 100755 index 0000000..40ed2a0 --- /dev/null +++ b/epoch.sql @@ -0,0 +1,1120 @@ +-- -------------------------------------------------------- +-- Host: 127.0.0.1 +-- Server version: 10.4.21-MariaDB - mariadb.org binary distribution +-- Server OS: Win64 +-- HeidiSQL Version: 11.3.0.6295 +-- -------------------------------------------------------- + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET NAMES utf8 */; +/*!50503 SET NAMES utf8mb4 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- Dumping structure for table epoch_database.character_data +CREATE TABLE IF NOT EXISTS `character_data` ( + `CharacterID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `PlayerUID` varchar(20) NOT NULL DEFAULT '0', + `InstanceID` int(11) NOT NULL DEFAULT 0, + `Datestamp` datetime DEFAULT NULL, + `LastLogin` datetime NOT NULL, + `Inventory` longtext DEFAULT NULL, + `Backpack` longtext DEFAULT NULL, + `Worldspace` varchar(128) NOT NULL DEFAULT '[]', + `Medical` varchar(300) NOT NULL DEFAULT '[]', + `Alive` tinyint(3) unsigned NOT NULL DEFAULT 1, + `Generation` int(11) unsigned NOT NULL DEFAULT 1, + `LastAte` datetime NOT NULL, + `LastDrank` datetime NOT NULL, + `KillsZ` int(11) unsigned NOT NULL DEFAULT 0, + `HeadshotsZ` int(11) unsigned NOT NULL DEFAULT 0, + `DistanceFoot` int(11) NOT NULL DEFAULT 0, + `Duration` int(11) NOT NULL DEFAULT 0, + `CurrentState` varchar(200) NOT NULL DEFAULT '[]', + `KillsH` int(11) unsigned NOT NULL DEFAULT 0, + `Model` varchar(50) NOT NULL DEFAULT '"Survivor2_DZ"', + `KillsB` int(11) unsigned NOT NULL DEFAULT 0, + `Humanity` int(11) NOT NULL DEFAULT 2500, + `Infected` tinyint(3) DEFAULT 0, + `Coins` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`CharacterID`), + KEY `PlayerUID` (`PlayerUID`) USING BTREE, + KEY `Alive` (`Alive`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1; + +-- Dumping data for table epoch_database.character_data: ~8 rows (approximately) +/*!40000 ALTER TABLE `character_data` DISABLE KEYS */; +INSERT INTO `character_data` (`CharacterID`, `PlayerUID`, `InstanceID`, `Datestamp`, `LastLogin`, `Inventory`, `Backpack`, `Worldspace`, `Medical`, `Alive`, `Generation`, `LastAte`, `LastDrank`, `KillsZ`, `HeadshotsZ`, `DistanceFoot`, `Duration`, `CurrentState`, `KillsH`, `Model`, `KillsB`, `Humanity`, `Infected`, `Coins`) VALUES + (1, '76561198180152023', 24, '2021-09-12 07:20:51', '2021-09-12 10:34:10', '[["Makarov_SD_DZ","ItemKnife"],["ItemBandage","8Rnd_9x18_MakarovSD"],""]', '["",[[],[]],[[],[]]]', '[196,[8672.31,8945.65,0.001]]', '[false,false,false,false,false,false,false,12000,[],[0.115,0],0,"A",true,[745.896,965.691,0],false]', 0, 1, '2021-09-12 07:20:51', '2021-09-12 07:20:51', 23, 16, 5235, 56, '[["Makarov_SD_DZ","aidlpercmstpsraswpstdnon_player_idlesteady03",42],[]]', 0, 'Reporter_DZ', 0, 2615, 0, 0), + (2, '76561198180152023', 24, '2021-09-12 10:45:24', '2021-09-14 15:32:50', '[["M60A4_EP1_DZE","Binocular_Vector","NVGoggles","Makarov_DZ","ItemCompass","ItemHatchet","ItemMap","ItemEtool","ItemToolbox","ItemCrowbar","ItemSledge","ItemKeyKit","ItemKeyGreen2477","ItemGPS"],["ItemSodaPepsi","ItemPainkiller","ItemMorphine","100Rnd_762x51_M240","100Rnd_762x51_M240","100Rnd_762x51_M240","ItemBandage","ItemBandage","ItemBandage","ItemBandage","ItemBandage","ItemBandage"],""]', '["CzechBackpack_WDL_DZE1",[[],[]],[[],[]]]', '[87,[3924.01,4308.17,0]]', '[false,false,false,false,false,false,false,12000,[],[0,0],0,"O",true,[896.5,328.445,313.285],false]', 0, 2, '2021-09-12 10:45:24', '2021-09-12 10:45:24', 7, 4, 12855, 176, '[["M60A4_EP1_DZE","aidlpercmstpsraswrfldnon_idlesteady02",42],[]]', 0, 'CamoWinter1W_DZ', 0, 7650, 0, 127720), + (4, '76561198180152023', 24, '2021-09-14 15:34:05', '2021-09-23 11:20:09', '[["Pecheneg_DZ","NVGoggles","Makarov_DZ","ItemRadio","ItemHatchet","ItemEtool","ItemCrowbar","ItemCompass","ItemGPS","Binocular","ItemToolbox","ItemWatch"],["FoodPistachio","ItemMorphine","ItemSodaLvg","FoodCanPasta","100Rnd_762x54_PK","ItemSodaOrangeSherbet","20Rnd_762x51_DMR","100Rnd_762x54_PK","ItemPainkiller6","8Rnd_9x18_Makarov","8Rnd_9x18_Makarov"],"DMR_Gh_DZE"]', '["LargeGunBag_DZE2",[["BAF_AS50_scoped_DZ"],[1]],[["100Rnd_762x54_PK","20Rnd_762x51_DMR","MAAWS_HEAT","ItemMorphine","ItemSodaLvg"],[4,12,1,1,1]]]', '[103,[6507.89,9619.32,0]]', '[false,false,false,false,false,false,false,12000,[],[0,0],0,"A",true,[129.904,67.561,0],false]', 0, 3, '2021-09-14 15:34:05', '2021-09-14 15:34:05', 36, 21, 52672, 120, '[["","",42],[]]', 0, 'CZ_Soldier_Light_Wdl_ACR_DZ', 28, 9630, 0, 0), + (5, '76561198180152023', 24, '2021-09-23 11:33:13', '2021-09-23 11:33:16', '[["Revolver_DZ"],["HandRoadFlare","ItemPainkiller","ItemWaterBottle","FoodPistachio","ItemBandage","ItemBandage","6Rnd_45ACP","6Rnd_45ACP"],""]', '["",[[],[]],[[],[]]]', '[137,[540.411,11170.5,0.001]]', '[false,false,false,false,false,false,false,12000,[],[0,0],0,"AB",true,[0,12.533,0],false]', 0, 4, '2021-09-23 11:33:13', '2021-09-23 11:33:13', 0, 0, 4655, 3, '[["Revolver_DZ","amovpercmstpsraswpstdnon_gear",37],[]]', 0, 'SurvivorW2_DZ', 0, 9630, 0, 0), + (6, '76561198180152023', 24, '2021-09-23 11:39:14', '2021-09-23 11:39:18', '[["G17_DZ"],["ItemPainkiller","ItemWaterBottle","FoodPistachio","ItemBandage","ItemBandage","17Rnd_9x19_glock17","17Rnd_9x19_glock17"],""]', '["",[[],[]],[[],[]]]', '[121,[10416.9,16932.8,0.001]]', '[false,false,false,false,false,false,false,12000,[],[0,0],0,"A",false,[0,0,0],false]', 0, 5, '2021-09-23 11:39:14', '2021-09-23 11:39:14', 0, 0, 0, 0, '[["G17_DZ","amovpknlmstpsraswpstdnon",37],[]]', 0, 'SurvivorW2_DZ', 0, 9630, 0, 0), + (10, '76561198180152023', 24, '2021-09-23 11:58:16', '2021-09-24 13:18:17', '[["DMR_DZ","Binocular_Vector","NVGoggles","G17_DZ","ItemRadio","ItemCompass","ItemWatch","ItemMap","ItemToolbox","ItemGPS","ItemKeyGreen2477","ItemKeyKit"],["ItemMorphine","ItemSodaMtngreen","ItemBandage","17Rnd_9x19_glock17","17Rnd_9x19_glock17","ItemBandage","ItemBandage","20Rnd_762x51_DMR","ItemBloodbag","ItemPainkillerEmpty","ItemBloodbag","ItemBloodbag","20Rnd_762x51_DMR","20Rnd_762x51_DMR","20Rnd_762x51_DMR","PartVRotor","ItemDocument"],""]', '["LargeGunBag_DZE1",[["Mk48_CCO_DZ","HK417_Holo_DZ","M136"],[1,1,1]],[["100Rnd_762x51_M240","M136"],[3,2]]]', '[292,[6915.02,14059,0]]', '[false,false,false,false,false,false,false,12001.3,[],[0.483,0],0,"O",true,[221.651,105.946,34.786],false]', 0, 6, '2021-09-23 11:58:16', '2021-09-23 11:58:16', 7, 7, 79299, 267, '[["","",37],[]]', 15, 'CamoWinter2W_DZ', 32, 9960, 0, 0), + (11, '76561198180152023', 24, '2021-09-24 13:18:53', '2021-09-27 11:33:19', '[["Binocular_Vector","NVGoggles","G17_DZ","ItemRadio","ItemCompass","ItemWatch","ItemMap","ItemGPS","ItemKeyYellow43","ItemKeyYellow2238","Pecheneg_DZ"],["ItemSodaCoke","20Rnd_762x51_DMR","20Rnd_762x51_DMR","17Rnd_9x19_glock17","17Rnd_9x19_glock17","ItemBandage","ItemBandage","100Rnd_762x54_PK","20Rnd_762x51_DMR","20Rnd_762x51_DMR","20Rnd_762x51_DMR","ItemPainkiller6","100Rnd_762x54_PK","20Rnd_762x51_DMR","ItemMorphine","ItemBloodbag"],"DMR_DZ"]', '["",[[],[]],[[],[]]]', '[22,[2096.79,8345.11,0.001]]', '[false,false,false,false,false,false,false,12000.8,[],[0,0],0,"B",true,[525.363,233.135,0],false]', 0, 7, '2021-09-24 13:18:53', '2021-09-24 13:18:53', 16, 11, 92061, 393, '[["Pecheneg_DZ","amovpknlmstpsraswrfldnon_diary",37],[]]', 67, 'SurvivorW2_DZ', 59, 9390, 0, 0), + (12, '76561198180152023', 24, '2021-09-27 11:33:52', '2021-09-29 10:32:17', '[["Binocular_Vector","NVGoggles","G17_DZ","ItemRadio","ItemCompass","ItemToolbox","ItemWatch","ItemMap","ItemGPS","ItemKeyYellow43","DMR_DZ"],[["20Rnd_762x51_DMR",16],["20Rnd_762x51_DMR",7],["20Rnd_762x51_DMR",9],"20Rnd_762x51_DMR",["100Rnd_762x54_PK",84],"100Rnd_762x54_PK","ItemMorphine","ItemBloodbag","ItemPainkiller5","20Rnd_762x51_DMR","ItemBandage",["17Rnd_9x19_glock17",16],"17Rnd_9x19_glock17","ItemBandage","ItemBandage"],"Pecheneg_DZ"]', '["",[[],[]],[[],[]]]', '[56,[4781.39,7749.16,0.002]]', '[false,false,false,false,false,false,true,11947,[],[0,0],0,"A",true,[856.92,412.536,0],false]', 1, 8, '2021-09-27 11:33:52', '2021-09-27 11:33:52', 3, 3, 67356, 85, '[["DMR_DZ","amovpknlmstpsraswrfldnon",37],[]]', 48, 'SurvivorW2_DZ', 50, 9505, 0, 0); +/*!40000 ALTER TABLE `character_data` ENABLE KEYS */; + +-- Dumping structure for table epoch_database.garage +CREATE TABLE IF NOT EXISTS `garage` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `PlayerUID` varchar(20) NOT NULL DEFAULT '0', + `Name` varchar(50) NOT NULL DEFAULT '', + `DisplayName` varchar(50) NOT NULL DEFAULT '', + `Classname` varchar(50) DEFAULT NULL, + `Datestamp` timestamp NULL DEFAULT current_timestamp(), + `DateStored` varchar(10) NOT NULL DEFAULT 'old', + `DateMaintained` timestamp NOT NULL DEFAULT current_timestamp(), + `CharacterID` bigint(20) unsigned NOT NULL DEFAULT 0, + `StorageCounts` varchar(30) NOT NULL DEFAULT '[0,0,0]', + `Inventory` mediumtext DEFAULT NULL, + `Hitpoints` mediumtext DEFAULT NULL, + `Fuel` double(13,5) NOT NULL DEFAULT 1.00000, + `Damage` double(13,5) NOT NULL DEFAULT 0.00000, + `Colour` varchar(50) NOT NULL, + `Colour2` varchar(50) NOT NULL, + `serverKey` varchar(10) NOT NULL DEFAULT 'old', + `ObjUID` varchar(20) NOT NULL DEFAULT 'old', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; + +-- Dumping data for table epoch_database.garage: ~0 rows (approximately) +/*!40000 ALTER TABLE `garage` DISABLE KEYS */; +/*!40000 ALTER TABLE `garage` ENABLE KEYS */; + +-- Dumping structure for table epoch_database.object_data +CREATE TABLE IF NOT EXISTS `object_data` ( + `ObjectID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `ObjectUID` bigint(24) NOT NULL DEFAULT 0, + `Instance` int(11) unsigned NOT NULL, + `Classname` varchar(50) DEFAULT NULL, + `Datestamp` datetime NOT NULL, + `LastUpdated` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `CharacterID` bigint(20) unsigned NOT NULL DEFAULT 0, + `Worldspace` varchar(128) NOT NULL DEFAULT '[]', + `Inventory` longtext DEFAULT NULL, + `Hitpoints` varchar(1024) NOT NULL DEFAULT '[]', + `Fuel` double(13,5) NOT NULL DEFAULT 1.00000, + `Damage` double(13,5) NOT NULL DEFAULT 0.00000, + `StorageCoins` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`ObjectID`), + KEY `ObjectUID` (`ObjectUID`) USING BTREE, + KEY `Instance` (`Instance`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=519 DEFAULT CHARSET=latin1; + +-- Dumping data for table epoch_database.object_data: ~510 rows (approximately) +/*!40000 ALTER TABLE `object_data` DISABLE KEYS */; +INSERT INTO `object_data` (`ObjectID`, `ObjectUID`, `Instance`, `Classname`, `Datestamp`, `LastUpdated`, `CharacterID`, `Worldspace`, `Inventory`, `Hitpoints`, `Fuel`, `Damage`, `StorageCoins`) VALUES + (2, 3, 24, 'Lada1_DZE', '2021-09-12 07:20:36', '2021-09-12 07:35:07', 0, '[60,[15223.3,13235.7,0.062]]', '[[[],[]],[["ItemDomeTent","PartWheel","ItemTent"],[1,1,1]],[[],[]]]', '[["motor",0.442],["karoserie",0.884],["palivo",0.073],["wheel_1_1_steering",0.02],["wheel_2_1_steering",0.979],["wheel_1_2_steering",0.214],["wheel_2_2_steering",0.774],["glass1",0.267],["glass2",0.646],["glass3",0.134],["glass4",0.091]]', 0.85277, 0.00000, 0), + (3, 4, 24, 'Mini_Cooper_DZE', '2021-09-12 07:20:36', '2021-09-12 08:03:08', 0, '[90.035,[7849.872,9131.21,0.009]]', '[[["Colt_Anaconda_DZ"],[1]],[["ItemPainkiller1","6Rnd_44Magnum"],[1,1]],[[],[]]]', '[["glass1",0.906],["glass2",0.697],["glass3",0.72],["glass4",0.126],["karoserie",0.272],["palivo",0.433],["wheel_1_1_steering",0.571],["wheel_1_2_steering",0.031],["wheel_2_1_steering",0.047],["wheel_2_2_steering",0.484],["motor",0.594]]', 0.08174, 0.00000, 0), + (4, 5, 24, 'SkodaGreen_DZE', '2021-09-12 07:20:37', '2021-09-12 07:35:07', 0, '[11,[5870.97,13259,0.03]]', '[[[],[]],[["FoodCanOrlokEmpty","10Rnd_303British"],[1,1]],[[],[]]]', '[["motor",0.721],["karoserie",0.949],["palivo",0.442],["wheel_1_1_steering",0.497],["wheel_2_1_steering",0.826],["wheel_1_2_steering",0.351],["wheel_2_2_steering",0.536],["glass1",0.633],["glass2",0.185],["glass3",0.246],["glass4",0.116]]', 0.62163, 0.00000, 0), + (5, 6, 24, 'UH1H_SAR_DZE', '2021-09-12 07:20:37', '2021-09-12 07:35:07', 0, '[146,[5540.66,4685.25,0.011]]', '[[[],[]],[["ItemBandage"],[1]],[[],[]]]', '[["glass1",0.114],["glass2",0.764],["glass3",0.555],["glass4",0.395],["glass5",0.809],["motor",0.178],["elektronika",0.359],["mala vrtule",0.214],["velka vrtule",0.611]]', 0.98865, 0.00000, 0), + (6, 7, 24, 'V3S_RA_TK_GUE_EP1_DZE', '2021-09-12 07:20:40', '2021-09-12 07:35:07', 0, '[49,[14039.7,14156,0.006]]', '[[[],[]],[["ItemBook1"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.589],["wheel_1_2_steering",0.172],["wheel_1_3_steering",0.985],["wheel_2_1_steering",0.702],["wheel_2_2_steering",0.526],["wheel_2_3_steering",0.543],["motor",0.31],["glass1",0.03],["glass2",0.656],["glass3",0.009],["glass4",0.212]]', 0.27208, 0.00000, 0), + (7, 8, 24, 'CH_47F_EP1_DES_DZE', '2021-09-12 07:20:41', '2021-09-12 11:36:43', 0, '[128.82,[9310.619,8638.351,0.253]]', '[[["Makarov_DZ","Groza1_Sniper_DZ","SVD_DZ"],[1,1,1]],[["ItemPainkiller3"],[1]],[[],[]]]', '[["motor",0],["sklo predni P",0],["sklo predni L",0],["glass3",0],["glass4",0]]', 0.99096, 0.00000, 0), + (8, 9, 24, 'AH6X_DZ', '2021-09-12 07:20:41', '2021-09-21 15:39:39', 0, '[70,[9649.57,17025.8,0.003]]', '[]', '[["glass1",1],["glass2",1],["glass3",1],["glass4",1],["motor",1],["elektronika",1],["mala vrtule",1],["velka vrtule",1],["munice",1]]', 0.07278, 1.00000, 0), + (9, 10, 24, 'V3S_Open_TK_CIV_EP1_DZE', '2021-09-12 07:20:42', '2021-09-12 07:35:07', 0, '[32,[6265.74,16251.8,0.032]]', '[[["Colt_Revolver_DZ"],[1]],[["Skin_Civilian1_DZ"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.865],["wheel_1_2_steering",0.917],["wheel_1_3_steering",0.807],["wheel_2_1_steering",0.897],["wheel_2_2_steering",0.246],["wheel_2_3_steering",0.527],["motor",0.595],["glass1",0.735],["glass2",0.162],["glass3",0.624],["glass4",0.661]]', 0.96026, 0.00000, 0), + (10, 11, 24, 'ATV_CIV_Blue_CP_DZE', '2021-09-12 07:20:42', '2021-09-12 07:35:07', 0, '[46,[10786.9,12780,0.084]]', '[[[],[]],[["ItemPlotDeed","7Rnd_45ACP_1911"],[1,1]],[[],[]]]', '[["motor",0.441],["palivo",0.415],["wheel_1_1_steering",0.399],["wheel_1_2_steering",0.837],["wheel_2_1_steering",0.529],["wheel_2_2_steering",0.225],["karoserie",0.909]]', 0.94870, 0.00000, 0), + (11, 12, 24, 'GAZ_Vodnik_DZE', '2021-09-12 07:20:42', '2021-09-12 07:35:07', 0, '[114,[2441.41,7711.49,0.006]]', '[]', '[["wheel_1_1_steering",0.414],["wheel_1_2_steering",0.8],["wheel_2_1_steering",0.712],["wheel_2_2_steering",0.844],["palivo",0.547],["glass1",0.597],["glass2",0.847],["glass3",0.127],["glass4",0.73],["motor",0.387],["karoserie",0.197]]', 0.35354, 0.00000, 0), + (12, 13, 24, 'C130J_US_EP1_DZ', '2021-09-12 07:20:43', '2021-09-12 07:35:07', 0, '[79.776,[3902.41,4477.03,0.185]]', '[[[],[]],[["PartGlass"],[1]],[[],[]]]', '[]', 0.81130, 0.00000, 0), + (13, 14, 24, 'Mi17_UN_CDF_EP1_DZE', '2021-09-12 07:20:43', '2021-09-12 07:35:07', 0, '[162,[14298.4,2883.92,0.487]]', '[]', '[["glass1",0.508],["glass2",0.233],["glass3",0.183],["glass4",0.944],["glass5",0.198],["glass6",0.14],["motor",0.797],["elektronika",0.957],["mala vrtule",0.175],["velka vrtule",0.261]]', 0.39283, 0.00000, 0), + (14, 15, 24, 'Jeep_DZE', '2021-09-12 07:20:43', '2021-09-12 07:35:07', 0, '[137,[9646,15463.7,0.01]]', '[[[],[]],[["ItemDomeTent","FoodCanUnlabeledEmpty","PartGlass"],[1,1,1]],[[],[]]]', '[["glass1",0.96],["glass2",0.27],["karoserie",0.105],["palivo",0.409],["wheel_1_1_steering",0.395],["wheel_1_2_steering",0.918],["wheel_2_1_steering",0.272],["wheel_2_2_steering",0.669],["motor",0.081]]', 0.23304, 0.00000, 0), + (15, 16, 24, 'Ka60_GL_PMC_DZE', '2021-09-12 07:20:44', '2021-09-24 10:52:49', 0, '[241.372,[8203.834,13347.064,-0.074]]', '[[["Makarov_DZ"],[1]],[["HandChemGreen","ItemBandage","8Rnd_9x18_Makarov"],[1,1,1]],[[],[]]]', '[["mala vrtule",0.094],["motor",1],["elektronika",0.921],["velka vrtule",1]]', 0.43253, 0.02362, 0), + (16, 17, 24, 'pook_medevac_CIV_DZE', '2021-09-12 07:20:44', '2021-09-12 07:35:07', 0, '[109,[13256.3,19299.3,0.004]]', '[[[],[]],[["ItemDesertTent","ItemHeatPack"],[1,1]],[[],[]]]', '[["glass1",0.118],["engine",0.272],["mala vrtule",0.942],["velka vrtule",0.432]]', 0.00221, 0.00000, 0), + (17, 18, 24, 'UAZ_Unarmed_UN_EP1_DZE', '2021-09-12 07:20:44', '2021-09-12 07:35:07', 0, '[22,[5525.6,15222.9,0.052]]', '[[[],[]],[["ItemBandage"],[2]],[[],[]]]', '[["glass1",0.447],["glass2",0.208],["glass3",0.622],["glass4",0.431],["wheel_1_1_steering",0.107],["wheel_1_2_steering",0.071],["wheel_2_1_steering",0.947],["wheel_2_2_steering",0.165],["motor",0.005],["karoserie",0.542],["palivo",0.911]]', 0.76003, 0.00000, 0), + (18, 19, 24, 'SUV_Orange', '2021-09-12 07:20:44', '2021-09-12 07:35:07', 0, '[110,[4604.96,12237.2,0.008]]', '[[[],[]],[["ItemMorphine","1Rnd_Arrow_Wood","FoodCanUnlabeledEmpty"],[1,1,1]],[[],[]]]', '[["wheel_1_1_steering",0.781],["wheel_1_2_steering",0.348],["wheel_2_1_steering",0.557],["wheel_2_2_steering",0.58],["palivo",0.458],["motor",0.061],["glass1",0.615],["glass2",0.031],["glass3",0.621],["glass4",0.951],["karoserie",0.563]]', 0.68387, 0.00000, 0), + (19, 20, 24, 'Volha_1_TK_CIV_EP1_DZE', '2021-09-12 07:20:45', '2021-09-12 07:35:07', 0, '[40,[8552.48,9203.42,0.154]]', '[[[],[]],[[],[]],[["Patrol_Pack_DZE1"],[1]]]', '[["wheel_1_1_steering",0.5],["wheel_1_2_steering",0.04],["wheel_2_1_steering",0.033],["wheel_2_2_steering",0.881],["palivo",0.05],["motor",0.477],["glass1",0.635],["glass2",0.688],["glass3",0.601],["glass4",0.312],["karoserie",0.703]]', 0.62737, 0.00000, 0), + (20, 21, 24, 'Mi17_Civilian_DZ', '2021-09-12 07:20:45', '2021-09-12 07:35:07', 0, '[39,[13665.5,10834.9,0.48]]', '[[[],[]],[["2Rnd_12Gauge_Buck","8Rnd_9x18_Makarov"],[1,1]],[["Patrol_Pack_DZE1"],[1]]]', '[["glass1",0.295],["glass2",0.587],["glass3",0.094],["glass4",0.302],["glass5",0.664],["glass6",0.89],["motor",0.881],["elektronika",0.235],["mala vrtule",0.391],["velka vrtule",0.309]]', 0.32859, 0.00000, 0), + (21, 22, 24, 'BAF_Jackal2_L2A1_D_DZE', '2021-09-12 07:20:45', '2021-09-12 07:35:07', 0, '[63,[15643.6,13284.6,1.526e-05]]', '[[[],[]],[["HandChemRed","ItemBandage"],[1,1]],[[],[]]]', '[["karoserie",0.32],["motor",0.033],["palivo",0.828],["wheel_1_1_steering",0.685],["wheel_1_2_steering",0.171],["wheel_2_1_steering",0.125],["wheel_2_2_steering",0.853]]', 0.51162, 0.00000, 0), + (22, 23, 24, 'GLT_M300_ST_DZE', '2021-09-12 07:20:45', '2021-09-12 07:35:07', 0, '[129,[6293.39,10246.5,7.067e-04]]', '[[[],[]],[["ItemDomeTent","ItemHeatPack"],[1,1]],[[],[]]]', '[["motor",0.343],["karoserie",0.585],["palivo",0.853],["wheel_1_1_steering",0.336],["wheel_2_1_steering",0.921],["wheel_1_2_steering",0.033],["wheel_2_2_steering",0.642],["glass1",0.333],["glass2",0.487],["glass3",0.726],["glass4",0.353]]', 0.53812, 0.00000, 0), + (23, 24, 24, 'TT650_Ins_DZE', '2021-09-12 07:20:46', '2021-09-12 07:35:07', 0, '[105,[7786.02,9374.18,0.018]]', '[[[],[]],[["ItemSodaClays","FoodChipsSulahoopsEmpty"],[1,1]],[[],[]]]', '[["karoserie",0.505],["palivo",0.483],["Pravy predni tlumic",0.643],["Pravy zadni tlumic",0.392]]', 0.01304, 0.00000, 0), + (24, 25, 24, 'AN2_DZ', '2021-09-12 07:20:46', '2021-09-12 07:35:07', 0, '[317.649,[14483,16786.9,0.714]]', '[[[],[]],[["FoodCanBadguyEmpty"],[1]],[[],[]]]', '[["glass1",0.926],["glass2",0.897],["glass3",0.441],["glass4",0.757]]', 0.90962, 0.00000, 0), + (25, 26, 24, 'T810A_ACR_OPEN_DZE', '2021-09-12 07:20:47', '2021-09-12 07:35:07', 0, '[179,[3312.88,9104.34,0.014]]', '[[[],[]],[["Skin_Firefighter1_DZ","ItemDomeTent"],[1,1]],[[],[]]]', '[["wheel_1_1_steering",0.275],["wheel_1_2_steering",0.06],["wheel_1_3_steering",0.76],["wheel_2_1_steering",0.695],["wheel_2_2_steering",0.459],["wheel_2_3_steering",0.961],["palivo",0.059],["glass1",0.7],["glass2",0.411],["glass3",0.603],["glass4",0.376],["motor",0.203],["karoserie",0.163]]', 0.13319, 0.00000, 0), + (26, 27, 24, 'BAF_Jackal2_L2A1_W_DZE', '2021-09-12 07:20:47', '2021-09-12 07:35:07', 0, '[133,[15692.1,12337.4,0.004]]', '[[[],[]],[["ItemMorphine"],[1]],[[],[]]]', '[["karoserie",0.44],["motor",0.657],["palivo",0.874],["wheel_1_1_steering",0.562],["wheel_1_2_steering",0.371],["wheel_2_1_steering",0.774],["wheel_2_2_steering",0.274]]', 0.66157, 0.00000, 0), + (27, 28, 24, 'pook_medevac_CIV_DZE', '2021-09-12 07:20:47', '2021-09-12 07:35:07', 0, '[92,[9743.55,13813.2,0.002]]', '[]', '[["glass1",0.931],["engine",0.56],["mala vrtule",0.632],["velka vrtule",0.614]]', 0.12894, 0.00000, 0), + (28, 29, 24, 'car_hatchback_DZE', '2021-09-12 07:20:47', '2021-09-12 07:35:07', 0, '[62,[4741.41,12410.7,0.001]]', '[[[],[]],[["ItemSodaSmasht"],[1]],[[],[]]]', '[["motor",0.292],["karoserie",0.18],["palivo",0.612],["wheel_1_1_steering",0.008],["wheel_2_1_steering",0.872],["wheel_1_2_steering",0.775],["wheel_2_2_steering",0.663],["glass1",0.046],["glass2",0.479],["glass3",0.663],["glass4",0.581]]', 0.69636, 0.00000, 0), + (29, 30, 24, 'JetSkiYanahui_Case_Yellow', '2021-09-12 07:20:48', '2021-09-12 07:35:07', 0, '[137,[2899.33,14668.9,39.576]]', '[[[],[]],[["ItemLetter"],[1]],[[],[]]]', '[["motor",0.17]]', 0.34777, 0.00000, 0), + (30, 31, 24, 'UH1H_CDF_DZE', '2021-09-12 07:20:48', '2021-09-12 07:35:07', 0, '[49,[10209.3,6946.74,0.007]]', '[]', '[["glass1",0.701],["glass2",0.74],["glass3",0.673],["glass4",0.637],["glass5",0.862],["motor",0.846],["elektronika",0.821],["mala vrtule",0.563],["velka vrtule",0.299]]', 0.34728, 0.00000, 0), + (31, 32, 24, 'SUV_Camo', '2021-09-12 07:20:49', '2021-09-12 07:35:07', 0, '[157,[6362.35,11500.4,0.086]]', '[]', '[["wheel_1_1_steering",0.35],["wheel_1_2_steering",0.503],["wheel_2_1_steering",0.923],["wheel_2_2_steering",0.727],["palivo",0.276],["motor",0.282],["glass1",0.274],["glass2",0.462],["glass3",0.593],["glass4",0.011],["karoserie",0.102]]', 0.86972, 0.00000, 0), + (32, 33, 24, 'SUV_Green', '2021-09-12 07:20:49', '2021-09-12 07:35:07', 0, '[89,[10510.9,16553.5,0.02]]', '[]', '[["wheel_1_1_steering",0.857],["wheel_1_2_steering",0.96],["wheel_2_1_steering",0.9],["wheel_2_2_steering",0.874],["palivo",0.131],["motor",0.246],["glass1",0.791],["glass2",0.856],["glass3",0.309],["glass4",0.017],["karoserie",0.759]]', 0.18470, 0.00000, 0), + (33, 34, 24, 'V3S_Open_TK_EP1_DZE', '2021-09-12 07:20:49', '2021-09-12 07:35:07', 0, '[95,[14639.4,13624.9,8.154e-05]]', '[[[],[]],[["FoodCanRusMilk","ItemWinterDomeTent","15Rnd_W1866_Slug"],[1,1,1]],[[],[]]]', '[["wheel_1_1_steering",0.846],["wheel_1_2_steering",0.708],["wheel_1_3_steering",0.225],["wheel_2_1_steering",0.53],["wheel_2_2_steering",0.105],["wheel_2_3_steering",0.674],["motor",0.516],["glass1",0.82],["glass2",0.765],["glass3",0.664],["glass4",0.149]]', 0.06896, 0.00000, 0), + (34, 35, 24, 'Tractor_DZE', '2021-09-12 07:20:49', '2021-09-12 07:35:07', 0, '[33,[17279.4,13889.1,0.011]]', '[]', '[["motor",0.265],["karoserie",0.509],["palivo",0.481],["glass1",0.969],["glass2",0.703],["glass3",0.217],["glass4",0.961]]', 0.06589, 0.00000, 0), + (35, 36, 24, 'V3S_Open_TK_CIV_EP1_DZE', '2021-09-12 07:20:49', '2021-09-12 07:35:07', 0, '[78,[10894.3,16162.1,0.006]]', '[[["M1911_DZ"],[1]],[["ItemMorphine","ItemAntibacterialWipe","7Rnd_45ACP_1911"],[1,1,2]],[[],[]]]', '[["wheel_1_1_steering",0.473],["wheel_1_2_steering",0.538],["wheel_1_3_steering",0.141],["wheel_2_1_steering",0.055],["wheel_2_2_steering",0.079],["wheel_2_3_steering",0.189],["motor",0.879],["glass1",0.272],["glass2",0.256],["glass3",0.106],["glass4",0.534]]', 0.71114, 0.00000, 0), + (36, 37, 24, 'TT650_Ins_DZE', '2021-09-12 07:20:49', '2021-09-12 07:35:07', 0, '[124,[14239.4,14363.7,0.002]]', '[]', '[["karoserie",0.064],["palivo",0.23],["Pravy predni tlumic",0.018],["Pravy zadni tlumic",0.346]]', 0.56681, 0.00000, 0), + (37, 38, 24, 'T810A_PKT_ACR_DZE', '2021-09-12 07:20:50', '2021-09-12 07:35:07', 0, '[155,[14476.9,3058.24,0.035]]', '[[[],[]],[["ItemMorphine","TrashTinCan","ItemSodaMzly"],[1,1,1]],[[],[]]]', '[["wheel_1_1_steering",0.438],["wheel_1_2_steering",0.773],["wheel_1_3_steering",0.892],["wheel_2_1_steering",0.008],["wheel_2_2_steering",0.084],["wheel_2_3_steering",0.862],["glass1",0.083],["glass2",0.772],["glass3",0.898],["motor",0.487],["sklo predni L",0.296],["karoserie",0.059]]', 0.76331, 0.00000, 0), + (38, 39, 24, 'HMMWV_Armored_DZE', '2021-09-12 07:20:50', '2021-09-12 07:35:07', 0, '[160,[6481.91,7477.54,0.035]]', '[[[],[]],[["Skin_Bandit1_DZ","ItemHeatPack","6Rnd_45ACP"],[1,1,1]],[[],[]]]', '[["glass1",0.911],["glass2",0.79],["glass3",0.945],["glass4",0.639],["wheel_1_1_steering",0.666],["wheel_1_2_steering",0.273],["wheel_2_1_steering",0.669],["wheel_2_2_steering",0.587],["karoserie",0.75]]', 0.37093, 0.00000, 0), + (39, 40, 24, 'ArmoredSUV_PMC_DZE', '2021-09-12 07:20:50', '2021-09-12 07:35:07', 0, '[22,[8750.68,9547,0.01]]', '[[[],[]],[["ItemDomeTent","ItemSodaOrangeSherbet","FoodCanPasta"],[1,1,1]],[[],[]]]', '[["wheel_1_1_steering",0.733],["wheel_1_2_steering",0.85],["wheel_2_1_steering",0.827],["wheel_2_2_steering",0.53],["palivo",0.316],["motor",0.786],["glass1",0.596],["glass2",0.442],["glass3",0.04],["glass4",0.514],["karoserie",0.242]]', 0.80570, 0.00000, 0), + (40, 41, 24, 'BAF_Jackal2_L2A1_W_DZE', '2021-09-12 07:20:51', '2021-09-12 07:35:07', 0, '[73,[14539.1,14248.5,0.035]]', '[[["Makarov_DZ"],[1]],[[],[]],[[],[]]]', '[["karoserie",0.89],["motor",0.558],["palivo",0.085],["wheel_1_1_steering",0.359],["wheel_1_2_steering",0.62],["wheel_2_1_steering",0.364],["wheel_2_2_steering",0.027]]', 0.90539, 0.00000, 0), + (41, 42, 24, 'UAZ_INS_DZE', '2021-09-12 07:20:51', '2021-09-12 07:35:07', 0, '[2,[15497.8,13420.8,0.01]]', '[[[],[]],[["ItemSodaGrapeDrink"],[1]],[[],[]]]', '[["glass1",0.176],["glass2",0.073],["glass3",0.637],["glass4",0.393],["wheel_1_1_steering",0.769],["wheel_1_2_steering",0.806],["wheel_2_1_steering",0.802],["wheel_2_2_steering",0.333],["motor",0.119],["karoserie",0.291],["palivo",0.817]]', 0.45219, 0.00000, 0), + (42, 43, 24, 'S1203_ambulance_EP1_DZE', '2021-09-12 07:20:51', '2021-09-12 07:35:07', 0, '[24,[9439.22,14006.2,0.021]]', '[[[],[]],[["ItemMorphine"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.922],["wheel_1_2_steering",0.879],["wheel_2_1_steering",0.656],["wheel_2_2_steering",0.616],["motor",0.208],["palivo",0.786],["glass1",0.434],["glass2",0.507],["glass3",0.78],["glass4",0.478]]', 0.80476, 0.00000, 0), + (43, 44, 24, 'MTVR_Bird_DZE', '2021-09-12 07:20:52', '2021-09-24 09:01:18', 0, '[98.488,[14514.321,10766.001,-0.002]]', '[[["Colt_Anaconda_Gold_DZ"],[1]],[["FoodCanBadguyEmpty","6Rnd_44Magnum"],[1,2]],[["TK_Assault_Pack_DZE1"],[1]]]', '[["motor",0.362],["elektronika",0.343],["mala vrtule",0.335],["velka vrtule",0.366],["munice",0.472]]', 0.19439, 0.00000, 0), + (44, 45, 24, 'KamazRefuel_DZ', '2021-09-12 07:20:52', '2021-09-12 07:35:07', 0, '[99,[2591.28,8392.9,0.013]]', '[]', '[["wheel_1_1_steering",0.543],["wheel_2_1_steering",0.202],["wheel_1_3_steering",0.201],["wheel_2_3_steering",0.69],["wheel_1_2_steering",0.09],["wheel_2_2_steering",0.354],["motor",0.357],["karoserie",0.339],["palivo",0.89],["glass1",0.409],["glass2",0.699],["glass3",0.392],["glass4",0.456]]', 0.47826, 0.00000, 0), + (45, 46, 24, 'pook_H13_civ_slate_DZE', '2021-09-12 07:20:52', '2021-09-12 07:35:07', 0, '[103,[1815.85,2840.87,9.599e-04]]', '[[[],[]],[["ItemTent"],[1]],[[],[]]]', '[["glass1",0.399],["engine",0.42],["mala vrtule",0.512],["velka vrtule",0.939]]', 0.36849, 0.00000, 0), + (46, 47, 24, 'RHIB_DZE', '2021-09-12 07:20:52', '2021-09-12 07:35:07', 0, '[111,[6148.65,17183.8,10.287]]', '[[["M1911_2_DZ"],[1]],[["HandChemRed","HandChemGreen"],[1,1]],[[],[]]]', '[["motor",0.388]]', 0.24002, 0.00000, 0), + (47, 48, 24, 'An2_2_TK_CIV_EP1_DZ', '2021-09-12 07:20:53', '2021-09-12 07:35:07', 0, '[51.807,[3888.23,4372.43,0.633]]', '[]', '[["glass1",0.971],["glass2",0.858],["glass3",0.216],["glass4",0.306]]', 0.47115, 0.00000, 0), + (48, 49, 24, 'Mi17_medevac_Ins_DZ', '2021-09-12 07:20:53', '2021-09-12 07:35:07', 0, '[125,[16154.5,15204,0.481]]', '[]', '[["glass1",0.345],["glass2",0.183],["glass3",0.885],["glass4",0.995],["glass5",0.585],["glass6",0.12],["motor",0.088],["elektronika",0.659],["mala vrtule",0.662],["velka vrtule",0.064]]', 0.76089, 0.00000, 0), + (49, 50, 24, 'AH6X_DZ', '2021-09-12 07:20:53', '2021-09-12 07:35:07', 0, '[97,[9910.98,16475.2,0.013]]', '[[[],[]],[["ItemBandage"],[1]],[[],[]]]', '[["glass1",0.48],["glass2",0.423],["glass3",0.892],["glass4",0.239],["motor",0.11],["elektronika",0.808],["mala vrtule",0.859],["velka vrtule",0.091],["munice",0.417]]', 0.32821, 0.00000, 0), + (50, 51, 24, 'ScrapAPC_DZE', '2021-09-12 07:20:53', '2021-09-12 07:35:07', 0, '[135,[12766.6,9366.84,0.019]]', '[[[],[]],[["ItemWinterDomeTent"],[1]],[[],[]]]', '[["karoserie",0.979],["palivo",0.855],["wheel_1_1_steering",0.556],["wheel_1_2_steering",0.218],["wheel_2_1_steering",0.475],["wheel_2_2_steering",0.177],["motor",0.389]]', 0.30403, 0.00000, 0), + (51, 52, 24, 'GNT_C185U_DZ', '2021-09-12 07:20:53', '2021-09-23 12:19:48', 0, '[332.623,[3678.831,9573.361,0.078]]', '[[[],[]],[["FoodCanBakedBeans","HandRoadFlare","TrashJackDaniels"],[1,1,1]],[[],[]]]', '[]', 0.80961, 0.00000, 0), + (52, 53, 24, 'T810_ACR_REPAIR_DES_DZE', '2021-09-12 07:20:54', '2021-09-12 07:35:07', 0, '[52,[14793.4,13879.4,0.002]]', '[[[],[]],[["PartGlass","ItemTent"],[1,1]],[[],[]]]', '[["wheel_1_1_steering",0.781],["wheel_1_2_steering",0.933],["wheel_1_3_steering",0.494],["wheel_2_1_steering",0.342],["wheel_2_2_steering",0.904],["wheel_2_3_steering",0.679],["palivo",0.702],["glass1",0.987],["glass2",0.518],["glass3",0.049],["glass4",0.227],["motor",0.887],["karoserie",0.368]]', 0.26149, 0.00000, 0), + (53, 54, 24, 'Mi17_UN_CDF_EP1_DZE', '2021-09-12 07:20:54', '2021-09-12 07:54:02', 0, '[156.145,[7213.036,9589.507,-0.035]]', '[[[],[]],[[],[]],[[],[]]]', '[["glass1",0.736],["glass2",0.709],["glass3",0.815],["glass4",0.323],["glass5",0.996],["glass6",0.193],["motor",0.866],["elektronika",0.465],["mala vrtule",0.791],["velka vrtule",0.197]]', 0.79900, 0.00000, 0), + (54, 55, 24, 'SUV_Green', '2021-09-12 07:20:54', '2021-09-12 07:35:07', 0, '[34,[15488.3,13311,0.008]]', '[[[],[]],[["FoodCanCorn","PartWheel"],[1,1]],[[],[]]]', '[["wheel_1_1_steering",0.732],["wheel_1_2_steering",0.323],["wheel_2_1_steering",0.71],["wheel_2_2_steering",0.032],["palivo",0.905],["motor",0.242],["glass1",0.569],["glass2",0.169],["glass3",0.342],["glass4",0.614],["karoserie",0.975]]', 0.96992, 0.00000, 0), + (55, 56, 24, 'HMMWV_M1151_M2_CZ_DES_EP1_DZE', '2021-09-12 07:20:55', '2021-09-12 07:35:07', 0, '[128,[3357.62,7011.36,0.043]]', '[]', '[["wheel_1_1_steering",0.449],["wheel_1_2_steering",0.447],["wheel_2_1_steering",0.39],["wheel_2_2_steering",0.181],["karoserie",0.926]]', 0.45239, 0.00000, 0), + (56, 57, 24, 'pook_transport_CDF_DZE', '2021-09-12 07:20:55', '2021-09-12 07:35:07', 0, '[35,[1729.02,2413.84,0.017]]', '[[[],[]],[["ItemBandage","ItemEpinephrine"],[1,1]],[[],[]]]', '[["glass1",0.223],["engine",0.56],["mala vrtule",0.4],["velka vrtule",0.48]]', 0.82997, 0.00000, 0), + (57, 58, 24, 'UralRefuel_TK_EP1_DZ', '2021-09-12 07:20:55', '2021-09-12 07:35:07', 0, '[54,[12026.9,15218.7,0.004]]', '[]', '[["glass1",0.998],["glass2",0.045],["glass3",0.59],["glass4",0.611],["wheel_1_1_steering",0.206],["wheel_2_1_steering",0.52],["wheel_1_3_steering",0.174],["wheel_2_3_steering",0.652],["wheel_1_2_steering",0.034],["wheel_2_2_steering",0.276],["motor",0.438],["karoserie",0.968],["palivo",0.868]]', 0.36412, 0.00000, 0), + (58, 59, 24, 'hilux1_civil_1_open_DZE', '2021-09-12 07:20:56', '2021-09-12 07:35:07', 0, '[138,[15700.4,12788.6,0.006]]', '[[["M1911_2_DZ"],[1]],[["7Rnd_45ACP_1911","10Rnd_303British"],[2,1]],[["Assault_Pack_DZE1"],[1]]]', '[["motor",0.354],["karoserie",0.529],["palivo",0.912],["wheel_1_1_steering",0.176],["wheel_2_1_steering",0.784],["wheel_1_2_steering",0.624],["wheel_2_2_steering",0.023],["glass1",0.697],["glass2",0.898],["glass3",0.749],["glass4",0.121]]', 0.92252, 0.00000, 0), + (59, 60, 24, 'T810A_PKT_DES_ACR_DZE', '2021-09-12 07:20:56', '2021-09-27 11:30:32', 0, '[86,[2347.77,8031.21,0.07]]', '[[[],[]],[[],[]],[[],[]]]', '[["wheel_1_1_steering",0.553],["wheel_1_2_steering",0.648],["wheel_1_3_steering",0.825],["wheel_2_1_steering",0.077],["wheel_2_2_steering",0.845],["wheel_2_3_steering",0.639],["glass1",0.921],["glass2",0.811],["glass3",0.311],["motor",0.085],["sklo predni L",0.734],["karoserie",0.345]]', 0.98678, 0.00000, 0), + (60, 61, 24, 'Pickup_PK_INS_DZE', '2021-09-12 07:20:57', '2021-09-12 07:35:07', 0, '[102,[2667.79,7534.24,0.114]]', '[[[],[]],[[],[]],[["School_Bag_DZE1"],[1]]]', '[["motor",0.897],["karoserie",0.2],["palivo",0.552],["wheel_1_1_steering",0.915],["wheel_2_1_steering",0.741],["wheel_1_2_steering",0.76],["wheel_2_2_steering",0.614],["glass1",0.761],["glass2",0.743]]', 0.54604, 0.00000, 0), + (61, 62, 24, 'Submarine_DZE', '2021-09-12 07:20:57', '2021-09-12 07:35:07', 0, '[61,[17334.6,15093.1,3.943]]', '[]', '[["karoserie",0.574],["motor",0.825],["palivo",0.973]]', 0.47903, 0.00000, 0), + (62, 63, 24, 'UAZ_Unarmed_UN_EP1_DZE', '2021-09-12 07:20:57', '2021-09-12 07:35:07', 0, '[161,[9141.99,17558.9,9.537e-07]]', '[[[],[]],[["ItemCards","FoodChipsSulahoopsEmpty","ItemTent"],[1,1,1]],[[],[]]]', '[["glass1",0.794],["glass2",0.282],["glass3",0.149],["glass4",0.821],["wheel_1_1_steering",0.695],["wheel_1_2_steering",0.173],["wheel_2_1_steering",0.399],["wheel_2_2_steering",0.355],["motor",0.607],["karoserie",0.453],["palivo",0.995]]', 0.71445, 0.00000, 0), + (63, 64, 24, 'UralRefuel_TK_EP1_DZ', '2021-09-12 07:20:57', '2021-09-12 07:35:07', 0, '[144,[7812.75,9233.39,0]]', '[[[],[]],[["Skin_Firefighter_Officer1_DZ"],[1]],[[],[]]]', '[["glass1",0.682],["glass2",0.097],["glass3",0.85],["glass4",0.6],["wheel_1_1_steering",0.841],["wheel_2_1_steering",0.316],["wheel_1_3_steering",0.302],["wheel_2_3_steering",0.342],["wheel_1_2_steering",0.284],["wheel_2_2_steering",0.832],["motor",0.996],["karoserie",0.87],["palivo",0.551]]', 0.82067, 0.00000, 0), + (64, 65, 24, 'pook_transport_CDF_DZE', '2021-09-12 07:20:58', '2021-09-12 07:35:07', 0, '[43,[2750.55,8263.8,0.01]]', '[]', '[["glass1",0.996],["engine",0.133],["mala vrtule",0.867],["velka vrtule",0.067]]', 0.49275, 0.00000, 0), + (65, 66, 24, 'pook_H13_civ_black_DZE', '2021-09-12 07:20:58', '2021-09-24 09:55:24', 0, '[139.953,[8151.853,13298.84,0.034]]', '[[[],[]],[["FoodCanRusUnlabeledEmpty","FoodCanCorn","8Rnd_9x18_Makarov"],[1,1,1]],[[],[]]]', '[["glass1",0.004],["engine",0.067],["mala vrtule",0.85],["velka vrtule",0.843]]', 0.90500, 0.00000, 0), + (66, 67, 24, 'Lada2_TK_CIV_EP1_DZE', '2021-09-12 07:20:58', '2021-09-12 07:35:07', 0, '[123,[8611.41,8915.17,3.09e-04]]', '[[[],[]],[["FoodCanUnlabeled","ItemSodaDrwaste"],[1,1]],[[],[]]]', '[["motor",0.227],["karoserie",0.017],["palivo",0.04],["wheel_1_1_steering",0.554],["wheel_2_1_steering",0.655],["wheel_1_2_steering",0.401],["wheel_2_2_steering",0.595],["glass1",0.741],["glass2",0.595],["glass3",0.443],["glass4",0.075]]', 0.88778, 0.00000, 0), + (67, 68, 24, 'SkodaRed_DZE', '2021-09-12 07:20:58', '2021-09-12 07:35:07', 0, '[62,[6588.47,16877.3,0.012]]', '[[[],[]],[["ItemBookBible","ItemTent"],[1,1]],[["TerminalPack_DZE1"],[1]]]', '[["motor",0.747],["karoserie",0.801],["palivo",0.456],["wheel_1_1_steering",0.042],["wheel_2_1_steering",0.52],["wheel_1_2_steering",0.939],["wheel_2_2_steering",0.863],["glass1",0.638],["glass2",0.563],["glass3",0.645],["glass4",0.976]]', 0.36436, 0.00000, 0), + (68, 69, 24, 'BRDM2_HQ_TK_GUE_EP1_DZE', '2021-09-12 07:20:59', '2021-09-12 07:35:07', 0, '[43,[14622.9,13971.3,0.003]]', '[[["M1911_2_DZ"],[1]],[["7Rnd_45ACP_1911"],[2]],[[],[]]]', '[["motor",0.857],["wheel_1_1_steering",0.428],["wheel_1_2_steering",0.095],["wheel_2_1_steering",0.073],["wheel_2_2_steering",0.917],["karoserie",0.849]]', 0.61244, 0.00000, 0), + (69, 70, 24, 'Smallboat_1_DZE', '2021-09-12 07:20:59', '2021-09-12 07:35:07', 0, '[130,[4846.54,19250.1,91.243]]', '[[[],[]],[["FoodCanRusMilkEmpty","FoodCanRusCorn"],[1,1]],[[],[]]]', '[["motor",0.44]]', 0.45666, 0.00000, 0), + (70, 71, 24, 'Mi17_medevac_CDF_DZ', '2021-09-12 07:20:59', '2021-09-12 07:35:07', 0, '[130,[11544.1,15966.6,0.485]]', '[[[],[]],[["ItemSodaRocketFuelEmpty","ItemTent"],[1,1]],[[],[]]]', '[["glass1",0.399],["glass2",0.296],["glass3",0.331],["glass4",0.225],["glass5",0.741],["glass6",0.764],["motor",0.617],["elektronika",0.922],["mala vrtule",0.737],["velka vrtule",0.7]]', 0.30816, 0.00000, 0), + (71, 72, 24, 'Ikarus_White_DZE', '2021-09-12 07:20:59', '2021-09-12 07:35:07', 0, '[155,[16271.2,15303.4,0.008]]', '[[[],[]],[["ItemSodaGrapeDrink","FoodCanRusUnlabeledEmpty","PartFueltank"],[1,1,1]],[[],[]]]', '[["karoserie",0.545],["palivo",0.139],["motor",0.35],["levy predni tlumic",0.246],["levy zadni tlumic",0.285],["pravy predni tlumic",0.858],["pravy zadni tlumic",0.764],["levy predni tlumic",0.699],["levy predni tlumic",0.886],["levy predni tlumic",0.787],["levy predni tlumic",0.158]]', 0.63668, 0.00000, 0), + (72, 73, 24, 'pook_H13_civ_black_DZE', '2021-09-12 07:21:00', '2021-09-12 07:35:07', 0, '[62,[12556.4,11987.6,4.272e-04]]', '[[[],[]],[["FoodNutmix","ItemSodaLemonade"],[1,1]],[[],[]]]', '[["glass1",0.969],["engine",0.743],["mala vrtule",0.517],["velka vrtule",0.15]]', 0.03439, 0.00000, 0), + (73, 74, 24, 'C130J_US_EP1_DZ', '2021-09-12 07:21:00', '2021-09-12 07:35:07', 0, '[345.51,[15147,16147.3,0.185]]', '[[[],[]],[["ItemTrashPaper"],[1]],[[],[]]]', '[]', 0.10251, 0.00000, 0), + (74, 75, 24, 'ATV_CIV_Yellow_CP_DZE', '2021-09-12 07:21:00', '2021-09-12 07:35:07', 0, '[66,[7425.03,15970.3,0.009]]', '[[[],[]],[["5Rnd_762x54_Mosin","ItemSodaPepsi"],[1,1]],[[],[]]]', '[["motor",0.767],["palivo",0.235],["wheel_1_1_steering",0.453],["wheel_1_2_steering",0.211],["wheel_2_1_steering",0.654],["wheel_2_2_steering",0.213],["karoserie",0.132]]', 0.07032, 0.00000, 0), + (75, 76, 24, 'pook_H13_civ_slate_DZE', '2021-09-12 07:21:00', '2021-09-12 07:35:07', 0, '[54,[4194.05,4596.22,1.602e-04]]', '[[[],[]],[["FoodCanRusStewEmpty","ItemSodaGrapeDrinkEmpty","6Rnd_45ACP"],[1,1,1]],[[],[]]]', '[["glass1",0.722],["engine",0.427],["mala vrtule",0.857],["velka vrtule",0.818]]', 0.30999, 0.00000, 0), + (76, 77, 24, 'GAZ_Vodnik_MedEvac_DZE', '2021-09-12 07:21:00', '2021-09-12 10:51:56', 0, '[14,[6412.62,9287.14,0.003]]', '[[[],[]],[["32Rnd_9x19_TEC9","Skin_Civilian8_DZ","15Rnd_W1866_Slug"],[1,1,1]],[[],[]]]', '[]', 0.33540, 0.00000, 0), + (77, 78, 24, 'UH1H_SAR_DZE', '2021-09-12 07:21:00', '2021-09-24 13:18:18', 0, '[136.431,[6893.563,14095.874,5.58]]', '[[[],[]],[[],[]],[[],[]]]', '[]', 0.65596, 1.00000, 0), + (78, 79, 24, 'CH_47F_EP1_Black_DZE', '2021-09-12 07:21:01', '2021-09-12 11:03:24', 0, '[148,[5715.49,4423.41,0.083]]', '[[[],[]],[["ItemBook2"],[1]],[[],[]]]', '[]', 1.00000, 0.00000, 0), + (79, 80, 24, 'T810A_ACR_DZE', '2021-09-12 07:21:01', '2021-09-12 07:35:07', 0, '[106,[6193.38,10559.3,0.021]]', '[[[],[]],[["6Rnd_357Magnum","ItemFuelcanEmpty"],[1,1]],[[],[]]]', '[["wheel_1_1_steering",0.149],["wheel_1_2_steering",0.502],["wheel_1_3_steering",0.796],["wheel_2_1_steering",0.308],["wheel_2_2_steering",0.869],["wheel_2_3_steering",0.384],["palivo",0.131],["glass1",0.977],["glass2",0.749],["glass3",0.892],["glass4",0.292],["motor",0.356],["karoserie",0.048]]', 0.00879, 0.00000, 0), + (80, 81, 24, 'Mi17_medevac_Ins_DZ', '2021-09-12 07:21:02', '2021-09-12 07:35:07', 0, '[99,[15503.6,15670.7,0.485]]', '[[[],[]],[["5Rnd_762x54_Mosin","ItemSodaMdew","5Rnd_17HMR"],[1,1,1]],[[],[]]]', '[["glass1",0.695],["glass2",0.528],["glass3",0.787],["glass4",0.694],["glass5",0.271],["glass6",0.929],["motor",0.239],["elektronika",0.926],["mala vrtule",0.646],["velka vrtule",0.861]]', 0.50228, 0.00000, 0), + (81, 82, 24, 'BAF_ATV_W_DZE', '2021-09-12 07:21:02', '2021-09-12 07:35:07', 0, '[97,[15713.7,15628.1,0.022]]', '[[[],[]],[["Skin_Worker1_DZ","6Rnd_45ACP"],[1,1]],[["GymBag_Green_DZE1"],[1]]]', '[["motor",0.192],["palivo",0.808],["wheel_1_1_steering",0.587],["wheel_1_2_steering",0.028],["wheel_2_1_steering",0.473],["wheel_2_2_steering",0.757],["karoserie",0.2]]', 0.32432, 0.00000, 0), + (82, 83, 24, 'GLT_M300_LT_DZE', '2021-09-12 07:21:02', '2021-09-12 07:35:07', 0, '[133,[2464.27,7852.63,0.013]]', '[[[],[]],[["FoodChipsChocolate"],[1]],[[],[]]]', '[["motor",0.122],["karoserie",0.42],["palivo",0.385],["wheel_1_1_steering",0.999],["wheel_2_1_steering",0.645],["wheel_1_2_steering",0.981],["wheel_2_2_steering",0.034],["glass1",0.169],["glass2",0.679],["glass3",0.515],["glass4",0.852]]', 0.56573, 0.00000, 0), + (83, 84, 24, 'JetSkiYanahui_Case_Green', '2021-09-12 07:21:02', '2021-09-12 07:35:07', 0, '[135,[1598.98,15152.6,90.914]]', '[[[],[]],[["15Rnd_W1866_Slug","Skin_MafiaBoss_DZ"],[1,1]],[[],[]]]', '[["motor",0.844]]', 0.43531, 0.00000, 0), + (84, 85, 24, 'LandRover_TK_CIV_EP1_DZE', '2021-09-12 07:21:03', '2021-09-12 07:35:07', 0, '[171,[1937.43,9862.09,0.027]]', '[]', '[["glass1",0.633],["glass2",0.359],["glass3",0.883],["motor",0.395],["palivo",0.115],["wheel_1_1_steering",0.157],["wheel_1_2_steering",0.887],["wheel_2_1_steering",0.906],["wheel_2_2_steering",0.373],["karoserie",0.543]]', 0.15388, 0.00000, 0), + (85, 86, 24, 'GLT_M300_ST_DZE', '2021-09-12 07:21:03', '2021-09-12 07:35:07', 0, '[90,[6419.78,10828.4,0.014]]', '[]', '[["motor",0.939],["karoserie",0.213],["palivo",0.488],["wheel_1_1_steering",0.091],["wheel_2_1_steering",0.865],["wheel_1_2_steering",0.12],["wheel_2_2_steering",0.507],["glass1",0.257],["glass2",0.351],["glass3",0.949],["glass4",0.952]]', 0.16199, 0.00000, 0), + (86, 87, 24, 'UAZ_RU_DZE', '2021-09-12 07:21:03', '2021-09-12 07:35:07', 0, '[116,[11330.5,2235.78,0.002]]', '[[[],[]],[["8Rnd_9x18_Makarov","FoodChipsMysticalesEmpty","HandChemBlue"],[1,1,1]],[[],[]]]', '[["glass1",0.718],["glass2",0.144],["glass3",0.355],["glass4",0.986],["wheel_1_1_steering",0.876],["wheel_1_2_steering",0.807],["wheel_2_1_steering",0.105],["wheel_2_2_steering",0.734],["motor",0.403],["karoserie",0.311],["palivo",0.145]]', 0.18491, 0.00000, 0), + (87, 88, 24, 'BAF_Jackal2_GMG_D_DZE', '2021-09-12 07:21:04', '2021-09-12 07:35:07', 0, '[74,[10979.8,7824.02,0.133]]', '[]', '[["karoserie",0.471],["motor",0.582],["palivo",0.092],["wheel_1_1_steering",0.214],["wheel_1_2_steering",0.396],["wheel_2_1_steering",0.412],["wheel_2_2_steering",0.47]]', 0.42318, 0.00000, 0), + (88, 89, 24, 'AH6X_DZ', '2021-09-12 07:21:04', '2021-09-12 07:35:07', 0, '[81,[5100.62,14896.5,0.008]]', '[[[],[]],[["Skin_Bandit4_DZ","Skin_Pilot_EP1_DZ"],[1,1]],[[],[]]]', '[["glass1",0.41],["glass2",0.551],["glass3",0.999],["glass4",0.53],["motor",0.312],["elektronika",0.359],["mala vrtule",0.411],["velka vrtule",0.579],["munice",0.805]]', 0.57276, 0.00000, 0), + (89, 90, 24, 'Mi17_Civilian_DZ', '2021-09-12 07:21:04', '2021-09-24 12:15:45', 0, '[176.945,[8246.835,15574.011,-0.05]]', '[[[],[]],[[],[]],[[],[]]]', '[["glass1",0.835],["glass2",0.26],["glass3",0.732],["glass4",0.941],["glass5",0.035],["glass6",0.248],["motor",0.575],["elektronika",0.811],["mala vrtule",0.756],["velka vrtule",0.098]]', 0.85500, 0.00000, 0), + (90, 91, 24, 'BRDM2_HQ_TK_GUE_EP1_DZE', '2021-09-12 07:21:05', '2021-09-12 07:35:07', 0, '[177,[13342.5,6838.34,0.148]]', '[[[],[]],[[],[]],[["School_Bag_DZE1"],[1]]]', '[["motor",0.216],["wheel_1_1_steering",0.224],["wheel_1_2_steering",0.409],["wheel_2_1_steering",0.782],["wheel_2_2_steering",0.514],["karoserie",0.292]]', 0.63643, 0.00000, 0), + (91, 92, 24, 'BAF_Merlin_DZE', '2021-09-12 07:21:05', '2021-09-12 10:51:43', 0, '[69,[9788.34,15613.4,-0.093]]', '[]', '[]', 0.07266, 0.00000, 0), + (92, 93, 24, 'pook_H13_civ_white_DZE', '2021-09-12 07:21:06', '2021-09-12 07:35:07', 0, '[11,[7701.09,9702.14,0.004]]', '[[["Colt_Revolver_DZ"],[1]],[["ItemMorphine","ItemDocument"],[1,1]],[[],[]]]', '[["glass1",0.019],["engine",0.461],["mala vrtule",0.931],["velka vrtule",0.233]]', 0.79737, 0.00000, 0), + (93, 94, 24, 'hilux1_civil_3_open_DZE', '2021-09-12 07:21:06', '2021-09-12 07:35:07', 0, '[161,[2282.75,7860.1,0.022]]', '[]', '[["motor",0.255],["karoserie",0.51],["palivo",0.028],["wheel_1_1_steering",0.777],["wheel_2_1_steering",0.228],["wheel_1_2_steering",0.618],["wheel_2_2_steering",0.798],["glass1",0.968],["glass2",0.689],["glass3",0.668],["glass4",0.594]]', 0.64062, 0.00000, 0), + (94, 95, 24, 'Skoda_DZE', '2021-09-12 07:21:06', '2021-09-12 07:35:07', 0, '[97,[10244.1,5271.11,0.042]]', '[[[],[]],[["ItemSodaLirik"],[1]],[["Czech_Vest_Pouch_DZE1"],[1]]]', '[["motor",0.331],["karoserie",0.9],["palivo",0.917],["wheel_1_1_steering",0.41],["wheel_2_1_steering",0.116],["wheel_1_2_steering",0.637],["wheel_2_2_steering",0.434],["glass1",0.96],["glass2",0.324],["glass3",0.078],["glass4",0.484]]', 0.36796, 0.00000, 0), + (95, 96, 24, 'Ikarus_TK_CIV_EP1_DZE', '2021-09-12 07:21:06', '2021-09-12 07:35:07', 0, '[126,[13257.9,10433.6,0.002]]', '[[["M1911_DZ"],[1]],[["7Rnd_45ACP_1911"],[2]],[["Czech_Vest_Pouch_DZE1"],[1]]]', '[["glass5",0.43],["glass6",0.973],["motor",0.922],["karoserie",0.57],["palivo",0.456],["wheel_1_1_steering",0.735],["wheel_2_1_steering",0.027],["wheel_1_2_steering",0.255],["wheel_2_2_steering",0.278],["glass1",0.987],["glass2",0.19],["glass3",0.672],["glass4",0.189]]', 0.05120, 0.00000, 0), + (96, 97, 24, 'ATV_CIV_Grey_CP_DZE', '2021-09-12 07:21:07', '2021-09-12 07:35:07', 0, '[111,[15143.5,13519.4,0.002]]', '[]', '[["motor",0.796],["palivo",0.996],["wheel_1_1_steering",0.845],["wheel_1_2_steering",0.115],["wheel_2_1_steering",0.109],["wheel_2_2_steering",0.14],["karoserie",0.857]]', 0.65272, 0.00000, 0), + (97, 98, 24, 'TT650_Civ_DZE', '2021-09-12 07:21:07', '2021-09-12 07:35:07', 0, '[121,[2511.31,7802.75,0.054]]', '[]', '[["karoserie",0.526],["palivo",1.0],["Pravy predni tlumic",0.183],["Pravy zadni tlumic",0.442]]', 0.51216, 0.00000, 0), + (98, 99, 24, 'SUV_Camo', '2021-09-12 07:21:07', '2021-09-12 07:35:07', 0, '[68,[10165.3,16447.2,0.01]]', '[[[],[]],[["FoodCanRusUnlabeled"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.063],["wheel_1_2_steering",0.444],["wheel_2_1_steering",0.341],["wheel_2_2_steering",0.011],["palivo",0.779],["motor",0.078],["glass1",0.635],["glass2",0.022],["glass3",0.459],["glass4",0.415],["karoserie",0.744]]', 0.14545, 0.00000, 0), + (99, 100, 24, 'Tractor_DZE', '2021-09-12 07:21:07', '2021-09-12 07:35:07', 0, '[8,[14355.3,2882.5,4.263e-04]]', '[[[],[]],[["FoodCanCurgon","ItemDomeTent"],[1,1]],[["GymBag_Camo_DZE1"],[1]]]', '[["motor",0.381],["karoserie",0.334],["palivo",0.493],["glass1",0.13],["glass2",0.945],["glass3",0.838],["glass4",0.669]]', 0.05040, 0.00000, 0), + (100, 101, 24, 'VolhaLimo_TK_CIV_EP1_DZE', '2021-09-12 07:21:07', '2021-09-12 07:35:07', 0, '[33,[12213.1,15623.4,0.033]]', '[[[],[]],[["FoodCanCorn"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.888],["wheel_1_2_steering",0.417],["wheel_2_1_steering",0.47],["wheel_2_2_steering",0.496],["palivo",0.819],["motor",0.651],["glass1",0.098],["glass2",0.6],["glass3",0.214],["glass4",0.099],["karoserie",0.07]]', 0.60752, 0.00000, 0), + (101, 102, 24, 'MTVR_Bird_DZE', '2021-09-12 07:21:07', '2021-09-12 07:35:07', 0, '[9,[14356.6,10109.1,0.01]]', '[[[],[]],[["7Rnd_50AE_Deagle","PartEngine"],[1,1]],[[],[]]]', '[["motor",0.195],["elektronika",0.334],["mala vrtule",0.897],["velka vrtule",0.364],["munice",0.38]]', 0.90349, 0.00000, 0), + (102, 103, 24, 'UH1H_WD_DZE', '2021-09-12 07:21:08', '2021-09-12 07:35:07', 0, '[49,[13678,14382.5,0.015]]', '[[[],[]],[["5Rnd_17HMR","ItemSodaLirik"],[1,1]],[[],[]]]', '[["glass1",0.264],["glass2",0.207],["glass3",0.636],["glass4",0.161],["glass5",0.359],["motor",0.863],["elektronika",0.163],["mala vrtule",0.618],["velka vrtule",0.488]]', 0.92641, 0.00000, 0), + (103, 104, 24, 'Lada2_TK_CIV_EP1_DZE', '2021-09-12 07:21:08', '2021-09-12 07:35:07', 0, '[139,[6147.84,10231.6,0.007]]', '[[[],[]],[["Skin_SurvivorW3_DZ","FoodCandyMintception","8Rnd_9x18_Makarov"],[1,1,1]],[[],[]]]', '[["motor",0.622],["karoserie",0.494],["palivo",0.728],["wheel_1_1_steering",0.198],["wheel_2_1_steering",0.595],["wheel_1_2_steering",0.936],["wheel_2_2_steering",0.613],["glass1",0.099],["glass2",0.267],["glass3",0.346],["glass4",0.09]]', 0.35898, 0.00000, 0), + (104, 105, 24, 'MTVR_Bird_DZE', '2021-09-12 07:21:09', '2021-09-12 07:35:07', 0, '[64,[7216,12029.9,0.004]]', '[[[],[]],[["2Rnd_12Gauge_Buck","Skin_Firefighter5_DZ"],[1,1]],[[],[]]]', '[["motor",0.594],["elektronika",0.822],["mala vrtule",0.958],["velka vrtule",0.604],["munice",0.619]]', 0.14678, 0.00000, 0), + (105, 106, 24, 'UH1H_BLACK_DZE', '2021-09-12 07:21:09', '2021-09-12 07:35:07', 0, '[160,[8333.02,17058.9,0.009]]', '[[[],[]],[["TrashTinCan"],[1]],[[],[]]]', '[["glass1",0.594],["glass2",0.181],["glass3",1.0],["glass4",0.646],["glass5",0.973],["motor",0.195],["elektronika",0.832],["mala vrtule",0.072],["velka vrtule",0.239]]', 0.64360, 0.00000, 0), + (106, 107, 24, 'car_sedan_DZE', '2021-09-12 07:21:09', '2021-09-12 07:35:07', 0, '[57,[17040.9,13699.8,0.012]]', '[[[],[]],[["ItemHeatPack","PartWheel"],[1,1]],[[],[]]]', '[["motor",0.059],["karoserie",0.822],["palivo",0.464],["wheel_1_1_steering",0.677],["wheel_2_1_steering",0.644],["wheel_1_2_steering",0.59],["wheel_2_2_steering",0.37],["glass1",0.427],["glass2",0.15],["glass3",0.476],["glass4",0.263]]', 0.80384, 0.00000, 0), + (107, 108, 24, 'Submarine_DZE', '2021-09-12 07:21:09', '2021-09-12 07:35:07', 0, '[173,[8536.53,18705.3,37.423]]', '[[[],[]],[["ItemSodaDrwaste"],[1]],[[],[]]]', '[["karoserie",0.733],["motor",0.649],["palivo",0.061]]', 0.69031, 0.00000, 0), + (108, 109, 24, 'UH1H_BLACK_DZE', '2021-09-12 07:21:09', '2021-09-12 07:35:07', 0, '[94,[16743.2,18793.5,0.01]]', '[[[],[]],[["15Rnd_W1866_Slug","FoodCanHerpy"],[1,1]],[[],[]]]', '[["glass1",0.539],["glass2",0.583],["glass3",0.416],["glass4",0.257],["glass5",0.636],["motor",0.743],["elektronika",0.642],["mala vrtule",0.421],["velka vrtule",0.802]]', 0.10888, 0.00000, 0), + (109, 110, 24, 'Smallboat_1_DZE', '2021-09-12 07:21:09', '2021-09-12 07:35:07', 0, '[116,[2923.52,2608.58,91.344]]', '[[[],[]],[["FoodCanCornEmpty"],[1]],[[],[]]]', '[["motor",0.66]]', 0.89256, 0.00000, 0), + (110, 111, 24, 'pook_H13_civ_DZE', '2021-09-12 07:21:10', '2021-09-12 07:35:07', 0, '[112,[8247.64,3108.07,6.714e-04]]', '[[["M1911_2_DZ"],[1]],[["7Rnd_45ACP_1911","PartFueltank"],[2,1]],[[],[]]]', '[["glass1",0.693],["engine",0.855],["mala vrtule",0.453],["velka vrtule",0.689]]', 0.72223, 0.00000, 0), + (111, 112, 24, 'SUV_Orange', '2021-09-12 07:21:10', '2021-09-12 07:35:07', 0, '[169,[4455.44,14274.2,0.097]]', '[[[],[]],[["10Rnd_303British","PartGlass"],[1,1]],[[],[]]]', '[["wheel_1_1_steering",0.311],["wheel_1_2_steering",0.602],["wheel_2_1_steering",0.113],["wheel_2_2_steering",0.211],["palivo",0.914],["motor",0.887],["glass1",0.462],["glass2",0.691],["glass3",0.333],["glass4",0.868],["karoserie",0.257]]', 0.52523, 0.00000, 0), + (112, 113, 24, 'KamazRefuel_DZ', '2021-09-12 07:21:10', '2021-09-12 07:35:07', 0, '[20,[10436.7,15472.2,0.003]]', '[[[],[]],[["HandChemGreen"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.314],["wheel_2_1_steering",0.979],["wheel_1_3_steering",0.762],["wheel_2_3_steering",0.209],["wheel_1_2_steering",0.374],["wheel_2_2_steering",0.85],["motor",0.346],["karoserie",0.55],["palivo",0.511],["glass1",0.076],["glass2",0.389],["glass3",0.558],["glass4",0.31]]', 0.57072, 0.00000, 0), + (113, 114, 24, 'pook_H13_civ_white_DZE', '2021-09-12 07:21:10', '2021-09-12 07:35:07', 0, '[77,[7780.08,14538,9.651e-04]]', '[[[],[]],[["8Rnd_9x18_Makarov"],[1]],[[],[]]]', '[["glass1",0.664],["engine",0.254],["mala vrtule",0.775],["velka vrtule",0.474]]', 0.58920, 0.00000, 0), + (114, 115, 24, 'car_hatchback_DZE', '2021-09-12 07:21:10', '2021-09-12 07:35:07', 0, '[46,[10696.6,15184.6,0.031]]', '[[[],[]],[["FoodCanRusMilk"],[1]],[[],[]]]', '[["motor",0.017],["karoserie",0.308],["palivo",0.997],["wheel_1_1_steering",0.762],["wheel_2_1_steering",0.845],["wheel_1_2_steering",0.861],["wheel_2_2_steering",0.842],["glass1",0.676],["glass2",0.976],["glass3",0.494],["glass4",0.446]]', 0.58814, 0.00000, 0), + (115, 116, 24, 'MH60S_DZE', '2021-09-12 07:21:11', '2021-09-12 07:35:07', 0, '[112,[11620.2,15035.1,-0.032]]', '[[[],[]],[["FoodCanRusMilk","FoodCanRusPeasEmpty","6Rnd_45ACP"],[1,1,1]],[[],[]]]', '[["motor",0.943],["elektronika",0.107],["mala vrtule",0.545],["velka vrtule",0.834],["glass1",0.488],["glass2",0.377],["glass3",0.729],["glass4",0.516],["glass5",0.889],["glass6",0.079]]', 0.90769, 0.00000, 0), + (116, 117, 24, 'V3S_Open_TK_EP1_DZE', '2021-09-12 07:21:11', '2021-09-12 07:35:07', 0, '[24,[14821.4,14176.2,0.003]]', '[[[],[]],[["Skin_BanditW1_DZ"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.37],["wheel_1_2_steering",0.881],["wheel_1_3_steering",0.847],["wheel_2_1_steering",0.201],["wheel_2_2_steering",0.086],["wheel_2_3_steering",0.126],["motor",0.427],["glass1",0.732],["glass2",0.78],["glass3",0.721],["glass4",0.223]]', 0.90235, 0.00000, 0), + (117, 118, 24, 'AN2_2_DZ', '2021-09-12 07:21:11', '2021-09-12 07:35:07', 0, '[77.902,[4650.72,4806.87,0.714]]', '[[[],[]],[["5Rnd_762x54_Mosin","ItemMorphine","ItemBandage"],[1,1,1]],[[],[]]]', '[["glass1",0.032],["glass2",0.328],["glass3",0.843],["glass4",0.713]]', 0.82679, 0.00000, 0), + (118, 119, 24, 'T810A_PKT_ACR_DZE', '2021-09-12 07:21:11', '2021-09-12 07:35:07', 0, '[98,[15688.7,13581.5,0.055]]', '[[[],[]],[["7Rnd_45ACP_1911"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.946],["wheel_1_2_steering",0.171],["wheel_1_3_steering",0.376],["wheel_2_1_steering",0.194],["wheel_2_2_steering",0.861],["wheel_2_3_steering",0.466],["glass1",0.458],["glass2",0.883],["glass3",0.032],["motor",0.744],["sklo predni L",0.596],["karoserie",0.134]]', 0.19746, 0.00000, 0), + (119, 120, 24, 'Ural_CDF_DZE', '2021-09-12 07:21:11', '2021-09-12 07:35:07', 0, '[168,[15390.3,13366.2,0.003]]', '[[[],[]],[["ItemBandage"],[1]],[[],[]]]', '[["glass1",0.871],["glass2",0.746],["glass3",0.312],["glass4",0.74],["wheel_1_1_steering",0.246],["wheel_2_1_steering",0.33],["wheel_1_3_steering",0.615],["wheel_2_3_steering",0.932],["wheel_1_2_steering",0.094],["wheel_2_2_steering",0.366],["motor",0.689],["karoserie",0.435],["palivo",0.395]]', 0.78147, 0.00000, 0), + (120, 121, 24, 'UH1H_GREY_DZE', '2021-09-12 07:21:12', '2021-09-12 07:35:07', 0, '[92,[13901,17022.5,1.554e-04]]', '[]', '[["glass1",0.077],["glass2",0.074],["glass3",0.397],["glass4",0.435],["glass5",0.2],["motor",0.625],["elektronika",0.032],["mala vrtule",0.968],["velka vrtule",0.052]]', 0.68144, 0.00000, 0), + (121, 122, 24, 'AW159_Lynx_BAF_DZE', '2021-09-12 07:21:12', '2021-09-12 07:35:07', 0, '[106,[15192.2,11103.7,-0.006]]', '[[[],[]],[["ItemTrashPaper","ItemSodaLvg"],[1,2]],[[],[]]]', '[["glass1",0.254],["glass2",0.524],["glass3",0.683],["glass4",0.449],["glass5",0.335],["motor",0.891],["elektronika",0.759],["mala vrtule",0.089],["velka vrtule",0.897],["glass6",0.691],["glass7",0.632],["glass8",0.522],["glass9",0.225],["glass10",0.053],["glass11",0.679],["NEtrup",0.14],["munice",0.697]]', 0.67234, 0.00000, 0), + (122, 123, 24, 'Mi17_medevac_CDF_DZ', '2021-09-12 07:21:13', '2021-09-12 07:35:07', 0, '[37,[14343.4,12959.5,0.486]]', '[[[],[]],[["ItemSodaSherbetEmpty","PartGlass","ItemDomeTent"],[1,1,1]],[[],[]]]', '[["glass1",0.232],["glass2",0.64],["glass3",0.29],["glass4",0.499],["glass5",0.206],["glass6",0.228],["motor",0.547],["elektronika",0.906],["mala vrtule",0.274],["velka vrtule",0.666]]', 0.51153, 0.00000, 0), + (123, 124, 24, 'Mi17_BLACK_DZE', '2021-09-12 07:21:13', '2021-09-12 07:35:07', 0, '[127,[16909.1,14092.5,0.484]]', '[[[],[]],[["15Rnd_W1866_Slug","FoodCanBoneboy"],[1,1]],[["GymBag_Green_DZE1"],[1]]]', '[["glass1",0.232],["glass2",0.831],["glass3",0.711],["glass4",0.384],["glass5",0.945],["glass6",0.403],["motor",0.5],["elektronika",2.362e-06],["mala vrtule",0.32],["velka vrtule",0.074]]', 0.76706, 0.00000, 0), + (124, 125, 24, 'GAZ_Vodnik_MedEvac_DZE', '2021-09-12 07:21:13', '2021-09-12 11:02:20', 0, '[319.017,[5098.921,4723.77,-4.578e-05]]', '[[["M1911_DZ"],[1]],[[],[]],[["Assault_Pack_DZE1"],[1]]]', '[["wheel_1_1_steering",0],["wheel_1_2_steering",0],["wheel_2_1_steering",0],["wheel_2_2_steering",0],["palivo",0],["glass1",0],["glass2",0],["glass3",0],["glass4",0],["motor",0]]', 0.28672, 0.00000, 0), + (125, 126, 24, 'Old_moto_TK_Civ_EP1_DZE', '2021-09-12 07:21:13', '2021-09-12 07:35:07', 0, '[103,[2065.25,9747.76,0]]', '[]', '[["karoserie",0.908],["palivo",0.092],["Pravy predni tlumic",0.007],["Pravy zadni tlumic",0.544]]', 0.81852, 0.00000, 0), + (126, 127, 24, 'Lada1_DZE', '2021-09-12 07:21:14', '2021-09-12 07:35:07', 0, '[86,[6233.02,10387.9,0.015]]', '[[[],[]],[["ItemTent","FoodCanRusCornEmpty","ItemSodaLvgEmpty"],[1,1,1]],[[],[]]]', '[["motor",0.171],["karoserie",0.23],["palivo",0.288],["wheel_1_1_steering",0.766],["wheel_2_1_steering",0.288],["wheel_1_2_steering",0.83],["wheel_2_2_steering",0.13],["glass1",0.823],["glass2",0.269],["glass3",0.251],["glass4",0.891]]', 0.86711, 0.00000, 0), + (127, 128, 24, 'BAF_Jackal2_L2A1_D_DZE', '2021-09-12 07:21:14', '2021-09-12 07:35:07', 0, '[74,[14069.1,14002.6,0.003]]', '[]', '[["karoserie",0.469],["motor",0.716],["palivo",0.633],["wheel_1_1_steering",0.775],["wheel_1_2_steering",0.183],["wheel_2_1_steering",0.652],["wheel_2_2_steering",0.944]]', 0.19203, 0.00000, 0), + (128, 129, 24, 'Smallboat_2_DZE', '2021-09-12 07:21:14', '2021-09-12 07:35:07', 0, '[94,[1340.46,5731.45,3.449]]', '[[["M1911_2_DZ"],[1]],[["FoodCanDemon","PartFueltank"],[1,1]],[[],[]]]', '[["motor",0.196]]', 0.68705, 0.00000, 0), + (129, 130, 24, 'ATV_CZ_EP1_DZE', '2021-09-12 07:21:14', '2021-09-12 07:35:07', 0, '[33,[14808.3,13673.6,0.008]]', '[[[],[]],[["ItemMorphine"],[1]],[[],[]]]', '[["motor",0.396],["palivo",0.531],["wheel_1_1_steering",0.515],["wheel_1_2_steering",0.177],["wheel_2_1_steering",0.531],["wheel_2_2_steering",0.38],["karoserie",0.333]]', 0.71081, 0.00000, 0), + (130, 131, 24, 'SkodaGreen_DZE', '2021-09-12 07:21:14', '2021-09-12 07:35:07', 0, '[12,[5767.71,4764.23,0]]', '[[[],[]],[["Skin_SurvivorWdesert_DZ","FoodCanBadguyEmpty"],[1,1]],[[],[]]]', '[["motor",0.657],["karoserie",0.327],["palivo",0.42],["wheel_1_1_steering",0.049],["wheel_2_1_steering",0.19],["wheel_1_2_steering",0.194],["wheel_2_2_steering",0.955],["glass1",0.976],["glass2",0.048],["glass3",0.763],["glass4",0.305]]', 0.59215, 0.00000, 0), + (131, 132, 24, 'JetSkiYanahui_Case_Green', '2021-09-12 07:21:14', '2021-09-12 07:35:07', 0, '[54,[1862.25,19442.8,91.076]]', '[[[],[]],[["PartGlass","7Rnd_50AE_Deagle"],[1,1]],[[],[]]]', '[["motor",0.788]]', 0.68976, 0.00000, 0), + (132, 133, 24, 'ArmoredSUV_PMC_DZE', '2021-09-12 07:21:15', '2021-09-13 14:31:11', 0, '[234.5,[8910.271,5301.397,-0.011]]', '[[[],[]],[[],[]],[[],[]]]', '[["wheel_1_1_steering",0],["wheel_1_2_steering",0],["wheel_2_1_steering",0],["wheel_2_2_steering",0],["palivo",0],["motor",0],["glass1",0],["glass2",0],["glass3",0],["glass4",0],["karoserie",0]]', 0.99808, 0.00000, 0), + (133, 134, 24, 'CH_47F_EP1_Black_DZE', '2021-09-12 07:21:15', '2021-09-12 11:03:25', 0, '[144,[9256.41,17148.5,0.082]]', '[[[],[]],[["ItemAntibacterialWipe"],[1]],[[],[]]]', '[]', 1.00000, 0.00000, 0), + (134, 135, 24, 'Mi17_GREEN_DZE', '2021-09-12 07:21:15', '2021-09-12 07:35:07', 0, '[103,[17076.4,14426.9,0.483]]', '[]', '[["glass1",0.161],["glass2",0.947],["glass3",0.699],["glass4",0.379],["glass5",0.586],["glass6",0.467],["motor",0.829],["elektronika",0.314],["mala vrtule",0.982],["velka vrtule",0.827]]', 0.27568, 0.00000, 0), + (135, 136, 24, 'JetSkiYanahui_Case_Blue', '2021-09-12 07:21:15', '2021-09-12 07:35:07', 0, '[48,[13696.3,1564.58,90.994]]', '[[["Colt_Revolver_DZ"],[1]],[["ItemBandage","6Rnd_45ACP","ItemPainkiller1"],[1,1,1]],[[],[]]]', '[["motor",0.605]]', 0.44564, 0.00000, 0), + (136, 137, 24, 'SUV_Blue', '2021-09-12 07:21:16', '2021-09-12 07:35:07', 0, '[174,[11944.8,15376.8,0.055]]', '[]', '[["wheel_1_1_steering",0.402],["wheel_1_2_steering",0.653],["wheel_2_1_steering",0.326],["wheel_2_2_steering",0.268],["palivo",0.881],["motor",0.254],["glass1",0.298],["glass2",0.422],["glass3",0.266],["glass4",0.381],["karoserie",0.562]]', 0.91902, 0.00000, 0), + (137, 138, 24, 'Offroad_DSHKM_Gue_DZE', '2021-09-12 07:21:16', '2021-09-12 07:35:07', 0, '[29,[17229.3,14402,0.004]]', '[[[],[]],[["5Rnd_17HMR"],[1]],[[],[]]]', '[["motor",0.676],["karoserie",0.376],["palivo",0.915],["wheel_1_1_steering",0.704],["wheel_2_1_steering",0.147],["wheel_1_2_steering",0.328],["wheel_2_2_steering",0.27],["glass1",0.694],["glass2",0.616]]', 0.03608, 0.00000, 0), + (138, 139, 24, 'VWGolf_DZE', '2021-09-12 07:21:16', '2021-09-12 07:35:07', 0, '[35,[7381.48,16187.8,5.169e-04]]', '[[["M1911_2_DZ"],[1]],[["7Rnd_45ACP_1911"],[2]],[[],[]]]', '[["wheel_1_1_steering",0.42],["wheel_1_2_steering",0.647],["wheel_2_1_steering",0.06],["wheel_2_2_steering",0.453],["motor",0.242],["karoserie",0.587],["palivo",0.055],["glass1",0.262],["glass2",0.993],["glass3",0.419],["glass4",0.227]]', 0.15927, 0.00000, 0), + (139, 140, 24, 'Ikarus_DZE', '2021-09-12 07:21:17', '2021-09-12 07:35:07', 0, '[68,[17115.7,13856.6,5.054e-05]]', '[[[],[]],[["ItemEpinephrine","ItemBandage","FoodCanBeef"],[1,1,1]],[[],[]]]', '[["glass5",0.043],["glass6",0.534],["motor",0.379],["karoserie",0.471],["palivo",0.93],["wheel_1_1_steering",0.792],["wheel_2_1_steering",0.363],["wheel_1_2_steering",0.702],["wheel_2_2_steering",0.053],["glass1",0.167],["glass2",0.984],["glass3",0.878],["glass4",0.337]]', 0.56097, 0.00000, 0), + (140, 141, 24, 'UH1Y_DZE', '2021-09-12 07:21:17', '2021-09-24 11:49:58', 0, '[24.02,[6271.313,14460.098,0.069]]', '[[["Makarov_DZ"],[1]],[["ItemPainkiller1","15Rnd_W1866_Slug","8Rnd_9x18_Makarov"],[1,1,1]],[[],[]]]', '[["motor",0.976],["elektronika",0.661],["mala vrtule",0.031],["velka vrtule",0.472],["glass1",0.937],["glass2",0.598],["glass3",0.272],["glass4",0.307],["glass5",0.646]]', 0.95300, 0.00000, 0), + (141, 142, 24, 'Mi17_GREEN_DZE', '2021-09-12 07:21:18', '2021-09-12 07:35:07', 0, '[58,[10976,15928.7,0.498]]', '[[[],[]],[["ItemSodaLemonade"],[1]],[[],[]]]', '[["glass1",0.61],["glass2",0.356],["glass3",0.609],["glass4",0.716],["glass5",0.747],["glass6",0.439],["motor",0.005],["elektronika",0.634],["mala vrtule",0.863],["velka vrtule",0.907]]', 0.07973, 0.00000, 0), + (142, 143, 24, 'CH_47F_EP1_DZE', '2021-09-12 07:21:18', '2021-09-12 11:03:26', 0, '[166,[16566,12281.8,0.095]]', '[[[],[]],[["FoodCandyMintception","32Rnd_9x19_TEC9"],[1,1]],[[],[]]]', '[]', 1.00000, 0.00000, 0), + (143, 144, 24, 'HMMWV_Ambulance_CZ_DES_EP1_DZE', '2021-09-12 07:21:18', '2021-09-12 07:35:07', 0, '[99,[6394.39,10674.5,0.038]]', '[[[],[]],[["ItemMorphine","HandChemBlue","Skin_TK_CIV_Takistani03_EP1_DZ"],[1,1,1]],[[],[]]]', '[["glass1",0.191],["glass2",0.236],["glass3",0.641],["glass4",0.523],["wheel_1_1_steering",0.992],["wheel_1_2_steering",0.824],["wheel_2_1_steering",0.774],["wheel_2_2_steering",0.105],["engine",0.323],["karoserie",0.49]]', 0.30657, 0.00000, 0), + (144, 145, 24, 'ATV_CZ_EP1_DZE', '2021-09-12 07:21:18', '2021-09-12 07:35:07', 0, '[124,[14866.4,14254.4,0.004]]', '[]', '[["motor",0.068],["palivo",0.074],["wheel_1_1_steering",0.545],["wheel_1_2_steering",0.365],["wheel_2_1_steering",0.749],["wheel_2_2_steering",0.914],["karoserie",0.602]]', 0.40043, 0.00000, 0), + (145, 146, 24, 'Lada1_DZE', '2021-09-12 07:21:18', '2021-09-12 07:35:07', 0, '[5,[16030.7,13474.4,0.015]]', '[[[],[]],[["ItemPainkiller4","8Rnd_9x18_Makarov"],[1,1]],[[],[]]]', '[["motor",0.324],["karoserie",0.034],["palivo",0.827],["wheel_1_1_steering",0.726],["wheel_2_1_steering",0.964],["wheel_1_2_steering",0.698],["wheel_2_2_steering",0.588],["glass1",0.316],["glass2",0.248],["glass3",0.588],["glass4",0.007]]', 0.01730, 0.00000, 0), + (146, 147, 24, 'SUV_TK_CIV_EP1_DZE', '2021-09-12 07:21:19', '2021-09-12 07:35:07', 0, '[170,[13065.8,6946.45,0.008]]', '[]', '[["wheel_1_1_steering",0.441],["wheel_1_2_steering",0.685],["wheel_2_1_steering",0.965],["wheel_2_2_steering",0.763],["palivo",0.55],["motor",0.822],["glass1",0.532],["glass2",0.728],["glass3",0.123],["glass4",0.992],["karoserie",0.185]]', 0.99836, 0.00000, 0), + (147, 148, 24, 'Volha_1_TK_CIV_EP1_DZE', '2021-09-12 07:21:19', '2021-09-12 07:35:07', 0, '[74,[8554.3,17048,0.013]]', '[]', '[["wheel_1_1_steering",0.067],["wheel_1_2_steering",0.069],["wheel_2_1_steering",0.878],["wheel_2_2_steering",0.101],["palivo",0.499],["motor",0.689],["glass1",0.448],["glass2",0.657],["glass3",0.217],["glass4",0.635],["karoserie",0.369]]', 0.50671, 0.00000, 0), + (148, 149, 24, 'JetSkiYanahui_Case_Yellow', '2021-09-12 07:21:20', '2021-09-12 07:35:07', 0, '[50,[8165.5,18746.4,37.755]]', '[[[],[]],[["5Rnd_762x54_Mosin","FoodCandyMintception","HandRoadFlare"],[1,1,1]],[[],[]]]', '[["motor",0.835]]', 0.53958, 0.00000, 0), + (149, 150, 24, 'GNT_C185U_DZ', '2021-09-12 07:21:20', '2021-09-12 07:35:07', 0, '[128.584,[3876.6,4604.51,0.191]]', '[[[],[]],[["32Rnd_9x19_TEC9","15Rnd_W1866_Slug","ItemAntibacterialWipe"],[1,1,1]],[[],[]]]', '[]', 0.23775, 0.00000, 0), + (150, 151, 24, 'Mi17_BLUE_DZE', '2021-09-12 07:21:20', '2021-09-12 07:35:07', 0, '[33,[2197.37,8588.7,0.507]]', '[[[],[]],[["6Rnd_45ACP","ItemSodaPeppsy"],[1,1]],[[],[]]]', '[["glass1",0.715],["glass2",0.04],["glass3",0.097],["glass4",0.184],["glass5",0.613],["glass6",0.944],["motor",0.614],["elektronika",0.552],["mala vrtule",0.88],["velka vrtule",0.252]]', 0.56708, 0.00000, 0), + (151, 152, 24, 'SUV_TK_CIV_EP1_DZE', '2021-09-12 07:21:21', '2021-09-12 07:35:07', 0, '[69,[7265.8,15994.7,0.02]]', '[]', '[["wheel_1_1_steering",0.227],["wheel_1_2_steering",0.668],["wheel_2_1_steering",0.881],["wheel_2_2_steering",0.702],["palivo",0.915],["motor",0.833],["glass1",0.973],["glass2",0.252],["glass3",0.362],["glass4",0.185],["karoserie",0.439]]', 0.38919, 0.00000, 0), + (152, 153, 24, 'pook_H13_civ_DZE', '2021-09-12 07:21:21', '2021-09-12 07:35:07', 0, '[91,[15964.1,11502.9,0.009]]', '[[[],[]],[["PartWheel","PartGlass"],[1,1]],[[],[]]]', '[["glass1",0.284],["engine",0.983],["mala vrtule",0.689],["velka vrtule",0.796]]', 0.22367, 0.00000, 0), + (153, 154, 24, 'Volha_2_TK_CIV_EP1_DZE', '2021-09-12 07:21:21', '2021-09-12 07:35:07', 0, '[57,[9114.4,9218.77,0.035]]', '[[[],[]],[["ItemTent","ItemSodaRbull"],[1,1]],[[],[]]]', '[["wheel_1_1_steering",0.638],["wheel_1_2_steering",0.112],["wheel_2_1_steering",0.718],["wheel_2_2_steering",0.06],["palivo",0.038],["motor",0.137],["glass1",0.342],["glass2",0.603],["glass3",0.313],["glass4",0.171],["karoserie",0.085]]', 0.94782, 0.00000, 0), + (154, 155, 24, 'Kamaz_DZE', '2021-09-12 07:21:21', '2021-09-12 07:35:07', 0, '[9,[3849.66,6969.49,0.021]]', '[[[],[]],[["HandChemGreen","ItemBandage","ItemSodaLirikEmpty"],[1,1,1]],[[],[]]]', '[["wheel_1_1_steering",0.922],["wheel_2_1_steering",0.053],["wheel_1_3_steering",0.156],["wheel_2_3_steering",0.409],["wheel_1_2_steering",0.338],["wheel_2_2_steering",0.012],["motor",0.355],["karoserie",0.387],["palivo",0.525],["glass1",0.465],["glass2",0.827],["glass3",0.164],["glass4",0.069]]', 0.45603, 0.00000, 0), + (155, 156, 24, 'Mi17_BLACK_DZE', '2021-09-12 07:21:21', '2021-09-12 07:35:07', 0, '[128,[10406,10891.1,0.485]]', '[[[],[]],[["8Rnd_9x18_Makarov"],[1]],[["GymBag_Green_DZE1"],[1]]]', '[["glass1",0.611],["glass2",0.84],["glass3",0.91],["glass4",0.714],["glass5",0.523],["glass6",0.586],["motor",0.419],["elektronika",0.094],["mala vrtule",0.338],["velka vrtule",0.825]]', 0.31899, 0.00000, 0), + (156, 157, 24, 'UH1H_DZE', '2021-09-12 07:21:22', '2021-09-12 07:35:07', 0, '[21,[15105.9,13829.9,0.011]]', '[]', '[["glass1",0.868],["glass2",0.052],["glass3",0.814],["glass4",0.11],["glass5",0.929],["motor",0.998],["elektronika",0.925],["mala vrtule",0.71],["velka vrtule",0.669]]', 0.64159, 0.00000, 0), + (157, 158, 24, 'datsun1_civil_3_open_DZE', '2021-09-12 07:21:22', '2021-09-12 07:35:07', 0, '[10,[14657.4,14217.2,0.052]]', '[[[],[]],[["TrashTinCan"],[1]],[[],[]]]', '[["motor",0.387],["karoserie",0.608],["palivo",0.964],["wheel_1_1_steering",0.347],["wheel_2_1_steering",0.739],["wheel_1_2_steering",0.194],["wheel_2_2_steering",0.252],["glass1",0.86],["glass2",0.814]]', 0.45755, 0.00000, 0), + (158, 159, 24, 'V3S_Refuel_TK_GUE_EP1_DZ', '2021-09-12 07:21:22', '2021-09-23 12:04:10', 0, '[65,[12476.6,14668.8,0.022]]', '[[[],[]],[["FoodCanBadguyEmpty"],[1]],[["Patrol_Pack_DZE1"],[1]]]', '[]', 0.32856, 1.00000, 0), + (159, 160, 24, 'MTVR_DES_EP1_DZE', '2021-09-12 07:21:22', '2021-09-12 07:35:07', 0, '[166,[14413.2,13442.4,0.006]]', '[[[],[]],[["FoodPistachio","ItemMorphine"],[1,1]],[[],[]]]', '[["wheel_1_1_steering",0.418],["wheel_1_2_steering",0.575],["wheel_1_3_steering",0.513],["wheel_2_1_steering",0.775],["wheel_2_2_steering",0.958],["wheel_2_3_steering",0.922],["palivo",0.844],["motor",0.47],["glass1",0.734],["glass2",0.804],["glass3",0.46]]', 0.51234, 0.00000, 0), + (160, 161, 24, 'SkodaBlue_DZE', '2021-09-12 07:21:23', '2021-09-12 07:35:07', 0, '[180,[10064.7,7523.06,0.04]]', '[[["M1911_DZ"],[1]],[["7Rnd_45ACP_1911"],[1]],[[],[]]]', '[["motor",0.438],["karoserie",0.443],["palivo",0.344],["wheel_1_1_steering",0.037],["wheel_2_1_steering",0.432],["wheel_1_2_steering",0.075],["wheel_2_2_steering",0.836],["glass1",0.087],["glass2",0.975],["glass3",0.371],["glass4",0.969]]', 0.80893, 0.00000, 0), + (161, 162, 24, 'MTVR_DES_EP1_DZE', '2021-09-12 07:21:23', '2021-09-12 07:35:07', 0, '[101,[2632.36,7735.36,0.012]]', '[[[],[]],[[],[]],[["Czech_Vest_Pouch_DZE1"],[1]]]', '[["wheel_1_1_steering",0.908],["wheel_1_2_steering",0.191],["wheel_1_3_steering",0.196],["wheel_2_1_steering",0.578],["wheel_2_2_steering",0.059],["wheel_2_3_steering",0.52],["palivo",0.937],["motor",0.988],["glass1",0.043],["glass2",0.375],["glass3",0.643]]', 0.79067, 0.00000, 0), + (162, 163, 24, 'JetSkiYanahui_Case_Red', '2021-09-12 07:21:23', '2021-09-12 07:35:07', 0, '[84,[4909.73,11911,5.803]]', '[[[],[]],[["Skin_Civilian6_DZ","FoodCanOrlokEmpty","10Rnd_303British"],[1,1,1]],[[],[]]]', '[["motor",0.428]]', 0.34859, 0.00000, 0), + (163, 164, 24, 'JetSkiYanahui_Case_Blue', '2021-09-12 07:21:23', '2021-09-12 07:35:07', 0, '[171,[2817.31,14843,28.592]]', '[[["Makarov_DZ"],[1]],[["8Rnd_9x18_Makarov","Skin_Firefighter4_DZ","PartGlass"],[2,1,1]],[[],[]]]', '[["motor",0.609]]', 0.52573, 0.00000, 0), + (164, 165, 24, 'VWGolf_DZE', '2021-09-12 07:21:23', '2021-09-12 07:35:07', 0, '[4,[12870.9,9744.33,0.004]]', '[[[],[]],[["7Rnd_45ACP_1911","ItemTentWinter","ItemHeatPack"],[1,1,1]],[[],[]]]', '[["wheel_1_1_steering",0.753],["wheel_1_2_steering",0.336],["wheel_2_1_steering",0.108],["wheel_2_2_steering",0.299],["motor",0.828],["karoserie",0.492],["palivo",0.983],["glass1",0.511],["glass2",0.839],["glass3",0.039],["glass4",0.952]]', 0.81095, 0.00000, 0), + (165, 166, 24, 'M1030_US_DES_EP1_DZE', '2021-09-12 07:21:24', '2021-09-12 07:35:07', 0, '[97,[5994.23,10637.2,0.046]]', '[[[],[]],[["ItemBandage"],[1]],[[],[]]]', '[["karoserie",0.83],["palivo",0.461],["Pravy predni tlumic",0.145],["Pravy zadni tlumic",0.222]]', 0.95896, 0.00000, 0), + (166, 167, 24, 'HMMWV_DES_EP1_DZE', '2021-09-12 07:21:24', '2021-09-12 07:35:07', 0, '[4,[15700.6,13290.8,0.007]]', '[]', '[["glass1",0.956],["glass2",0.488],["glass3",0.938],["glass4",0.911],["wheel_1_1_steering",0.922],["wheel_1_2_steering",0.888],["wheel_2_1_steering",0.031],["wheel_2_2_steering",0.996],["karoserie",0.601]]', 0.32550, 0.00000, 0), + (167, 168, 24, 'Mini_Cooper_DZE', '2021-09-12 07:21:24', '2021-09-12 07:35:07', 0, '[170,[12213.3,15502.1,0.124]]', '[[[],[]],[["ItemTent","ItemSodaPepsi","FoodCakeCremeCakeClean"],[1,1,1]],[[],[]]]', '[["glass1",0.049],["glass2",0.144],["glass3",0.608],["glass4",0.346],["karoserie",0.846],["palivo",0.711],["wheel_1_1_steering",0.926],["wheel_1_2_steering",0.486],["wheel_2_1_steering",0.808],["wheel_2_2_steering",0.077],["motor",0.216]]', 0.45845, 0.00000, 0), + (168, 169, 24, 'GNT_C185R_DZ', '2021-09-12 07:21:25', '2021-09-12 07:35:07', 0, '[135.364,[14742.7,16618.2,0.191]]', '[[[],[]],[["5Rnd_17HMR","7Rnd_45ACP_1911","Skin_Prisoner1_DZ"],[1,1,1]],[[],[]]]', '[]', 0.79712, 0.00000, 0), + (169, 170, 24, 'Ikarus_DZE', '2021-09-12 07:21:25', '2021-09-12 07:35:07', 0, '[141,[9902.25,3077.69,0.334]]', '[[["Colt_Anaconda_DZ"],[1]],[["FoodCanRusUnlabeledEmpty","6Rnd_44Magnum"],[1,1]],[[],[]]]', '[["glass5",0.348],["glass6",0.15],["motor",0.531],["karoserie",0.955],["palivo",0.268],["wheel_1_1_steering",0.503],["wheel_2_1_steering",0.884],["wheel_1_2_steering",0.466],["wheel_2_2_steering",0.934],["glass1",0.539],["glass2",0.677],["glass3",0.615],["glass4",0.423]]', 0.66989, 0.00000, 0), + (170, 171, 24, 'UH1H_2_DZE', '2021-09-12 07:21:25', '2021-09-12 07:35:07', 0, '[10,[4610.95,6331.01,0.005]]', '[[[],[]],[["FoodCanBoneboyEmpty","FoodChipsChocolate"],[1,1]],[[],[]]]', '[["glass1",0.947],["glass2",0.322],["glass3",0.355],["glass4",0.845],["glass5",0.271],["motor",0.504],["elektronika",0.095],["mala vrtule",0.785],["velka vrtule",0.099]]', 0.09913, 0.00000, 0), + (171, 172, 24, 'datsun1_green_open_DZE', '2021-09-12 07:21:25', '2021-09-12 07:35:07', 0, '[170,[14288.2,16895.8,0.015]]', '[[[],[]],[["6Rnd_45ACP","ItemTent"],[1,1]],[[],[]]]', '[["motor",0.799],["sklo predni P",0.357],["karoserie",0.905],["palivo",0.812]]', 0.47822, 0.00000, 0), + (172, 173, 24, 'Mi17_BLUE_DZE', '2021-09-12 07:21:26', '2021-09-12 07:35:07', 0, '[117,[10649.7,8695.94,0.482]]', '[[["M1911_DZ"],[1]],[[],[]],[["TerminalPack_DZE1"],[1]]]', '[["glass1",0.041],["glass2",0.534],["glass3",0.856],["glass4",0.627],["glass5",0.171],["glass6",0.429],["motor",0.695],["elektronika",0.766],["mala vrtule",0.338],["velka vrtule",0.765]]', 0.36528, 0.00000, 0), + (173, 174, 24, 'GLT_M300_LT_DZE', '2021-09-12 07:21:26', '2021-09-12 07:35:07', 0, '[109,[17080.4,13902,0.017]]', '[[[],[]],[["FoodBioMeat","5Rnd_762x54_Mosin","FoodCandyMintception"],[1,1,1]],[[],[]]]', '[["motor",0.838],["karoserie",0.093],["palivo",0.233],["wheel_1_1_steering",0.838],["wheel_2_1_steering",0.688],["wheel_1_2_steering",0.86],["wheel_2_2_steering",0.038],["glass1",0.926],["glass2",0.71],["glass3",0.513],["glass4",0.023]]', 0.82543, 0.00000, 0), + (174, 175, 24, 'LandRover_MG_TK_EP1_DZE', '2021-09-12 07:21:26', '2021-09-12 07:35:07', 0, '[28,[10786.3,15786.1,0.011]]', '[[[],[]],[["8Rnd_9x18_Makarov"],[1]],[["Czech_Vest_Pouch_DZE1"],[1]]]', '[["glass1",0.534],["motor",0.283],["palivo",0.377],["wheel_1_1_steering",0.364],["wheel_1_2_steering",0.45],["wheel_2_1_steering",0.411],["wheel_2_2_steering",0.399],["karoserie",0.904]]', 0.35382, 0.00000, 0), + (175, 176, 24, 'TT650_TK_CIV_EP1_DZE', '2021-09-12 07:21:26', '2021-09-12 07:35:07', 0, '[9,[11986.1,11645.9,0.026]]', '[[[],[]],[["6Rnd_357Magnum"],[1]],[[],[]]]', '[["karoserie",0.391],["palivo",0.671],["Pravy predni tlumic",0.893],["Pravy zadni tlumic",0.44]]', 0.14108, 0.00000, 0), + (177, 178, 24, 'V3S_Refuel_TK_GUE_EP1_DZ', '2021-09-12 07:21:27', '2021-09-12 07:35:07', 0, '[105,[14463.3,12659.6,0.013]]', '[[[],[]],[["ItemMorphine","PartFueltank"],[1,1]],[[],[]]]', '[["wheel_1_1_steering",0.669],["wheel_1_2_steering",0.165],["wheel_1_3_steering",0.132],["wheel_2_1_steering",0.181],["wheel_2_2_steering",0.237],["wheel_2_3_steering",0.481],["motor",0.129],["glass1",0.023],["glass2",0.688],["glass3",0.865],["glass4",0.6]]', 0.02329, 0.00000, 0), + (178, 179, 24, 'UH1H_GREY_DZE', '2021-09-12 07:21:27', '2021-09-12 07:35:07', 0, '[144,[14987.8,16271.8,-1.907e-06]]', '[]', '[["glass1",0.926],["glass2",0.953],["glass3",0.852],["glass4",0.611],["glass5",0.53],["motor",0.948],["elektronika",0.544],["mala vrtule",0.941],["velka vrtule",0.807]]', 0.13211, 0.00000, 0), + (179, 180, 24, 'MH60S_DZE', '2021-09-12 07:21:27', '2021-09-12 07:35:07', 0, '[136,[11032.1,16097.8,-0.035]]', '[[[],[]],[["FoodCanGriff","FoodCanPotatoesEmpty","ItemSodaClaysEmpty"],[1,1,1]],[[],[]]]', '[["motor",0.594],["elektronika",0.233],["mala vrtule",0.027],["velka vrtule",0.501],["glass1",0.409],["glass2",0.864],["glass3",0.508],["glass4",0.669],["glass5",0.767],["glass6",0.211]]', 0.70616, 0.00000, 0), + (180, 181, 24, 'LandRover_Special_CZ_EP1_DZE', '2021-09-12 07:21:27', '2021-09-12 07:35:07', 0, '[3,[5936.65,13564.8,0.009]]', '[]', '[["motor",0.097],["palivo",0.695],["wheel_1_1_steering",0.69],["wheel_1_2_steering",0.616],["wheel_2_1_steering",0.048],["wheel_2_2_steering",0.95],["karoserie",0.314]]', 0.04551, 0.00000, 0), + (181, 182, 24, 'V3S_Camper_DZE', '2021-09-12 07:21:28', '2021-09-12 07:35:07', 0, '[113,[4869.73,7531.79,5.341e-05]]', '[[[],[]],[["HandChemGreen","ItemTent","FoodCanRusUnlabeledEmpty"],[1,1,1]],[[],[]]]', '[["wheel_1_1_steering",0.439],["wheel_1_2_steering",0.235],["wheel_1_3_steering",0.984],["wheel_2_1_steering",0.787],["wheel_2_2_steering",0.869],["wheel_2_3_steering",0.265],["motor",0.066],["glass1",0.923],["glass2",0.579],["glass3",0.994],["glass4",0.008]]', 0.46197, 0.00000, 0), + (182, 183, 24, 'UAZ_Unarmed_TK_EP1_DZE', '2021-09-12 07:21:28', '2021-09-12 07:35:07', 0, '[162,[16518.1,15116.6,0.003]]', '[[[],[]],[["Skin_Assistant_DZ","HandChemRed","10Rnd_303British"],[1,1,1]],[[],[]]]', '[["glass1",0.185],["glass2",0.471],["glass3",0.873],["glass4",0.868],["wheel_1_1_steering",0.333],["wheel_1_2_steering",0.082],["wheel_2_1_steering",0.849],["wheel_2_2_steering",0.302],["motor",0.552],["karoserie",0.859],["palivo",0.069]]', 0.50212, 0.00000, 0), + (183, 184, 24, 'HMMWV_Ambulance_DZE', '2021-09-12 07:21:28', '2021-09-12 07:35:07', 0, '[94,[8797.33,16167.3,0.011]]', '[]', '[["glass1",0.455],["glass2",0.852],["glass3",0.477],["glass4",0.432],["wheel_1_1_steering",0.644],["wheel_1_2_steering",0.629],["wheel_2_1_steering",0.691],["wheel_2_2_steering",0.203],["engine",0.014],["karoserie",0.805]]', 0.32199, 0.00000, 0), + (184, 185, 24, 'ScrapAPC_DZE', '2021-09-12 07:21:28', '2021-09-12 07:35:07', 0, '[6,[17164.1,14555.2,0.014]]', '[[["Colt_Revolver_DZ"],[1]],[["HandChemGreen","6Rnd_45ACP"],[1,1]],[[],[]]]', '[["karoserie",0.661],["palivo",0.799],["wheel_1_1_steering",0.869],["wheel_1_2_steering",0.922],["wheel_2_1_steering",0.265],["wheel_2_2_steering",0.117],["motor",0.35]]', 0.69764, 0.00000, 0), + (185, 186, 24, 'CH_47F_EP1_GREY_DZE', '2021-09-12 07:21:28', '2021-09-24 10:21:52', 0, '[144,[8364.69,15527.1,0.073]]', '[[[],[]],[[],[]],[[],[]]]', '[]', 1.00000, 1.00000, 0), + (186, 187, 24, 'pook_medevac_CDF_DZE', '2021-09-12 07:21:29', '2021-09-12 07:35:07', 0, '[155,[2811.72,6593.19,0.007]]', '[]', '[["glass1",0.825],["engine",0.031],["mala vrtule",0.399],["velka vrtule",0.582]]', 0.48796, 0.00000, 0), + (187, 188, 24, 'TT650_Ins_DZE', '2021-09-12 07:21:29', '2021-09-12 07:35:07', 0, '[31,[5461.24,15504.5,0.003]]', '[[[],[]],[["FoodCanTylers","5Rnd_17HMR"],[1,1]],[[],[]]]', '[["karoserie",0.725],["palivo",0.163],["Pravy predni tlumic",0.822],["Pravy zadni tlumic",0.824]]', 0.18283, 0.00000, 0), + (188, 189, 24, 'Offroad_DSHKM_Gue_DZE', '2021-09-12 07:21:29', '2021-09-12 07:35:07', 0, '[155,[8664.89,16575.1,0.008]]', '[[[],[]],[["PartFueltank","ItemBandage"],[1,1]],[["Assault_Pack_DZE1"],[1]]]', '[["motor",0.099],["karoserie",0.73],["palivo",0.205],["wheel_1_1_steering",0.123],["wheel_2_1_steering",0.308],["wheel_1_2_steering",0.277],["wheel_2_2_steering",0.695],["glass1",0.9],["glass2",0.496]]', 0.16916, 0.00000, 0), + (189, 190, 24, 'UH1H_2_DZE', '2021-09-12 07:21:29', '2021-09-12 07:35:07', 0, '[54,[6929.16,13696.5,0.008]]', '[[[],[]],[["10Rnd_303British","32Rnd_9x19_TEC9","PartWheel"],[1,1,1]],[[],[]]]', '[["glass1",0.401],["glass2",0.359],["glass3",0.909],["glass4",0.519],["glass5",0.835],["motor",0.675],["elektronika",0.516],["mala vrtule",0.329],["velka vrtule",0.762]]', 0.11591, 0.00000, 0), + (190, 191, 24, 'pook_medevac_CDF_DZE', '2021-09-12 07:21:30', '2021-09-12 07:35:07', 0, '[67,[10663.2,9485.87,4.12e-04]]', '[[[],[]],[["ItemSodaSherbetEmpty","8Rnd_9x18_Makarov"],[1,1]],[[],[]]]', '[["glass1",0.562],["engine",0.333],["mala vrtule",0.131],["velka vrtule",0.88]]', 0.72299, 0.00000, 0), + (191, 192, 24, 'Skoda_DZE', '2021-09-12 07:21:30', '2021-09-12 07:35:07', 0, '[6,[4893.7,4487.52,0]]', '[[[],[]],[["ItemDesertTent"],[1]],[[],[]]]', '[["motor",0.352],["karoserie",0.361],["palivo",0.887],["wheel_1_1_steering",0.827],["wheel_2_1_steering",0.514],["wheel_1_2_steering",0.14],["wheel_2_2_steering",0.936],["glass1",0.927],["glass2",0.289],["glass3",0.243],["glass4",0.177]]', 0.02119, 0.00000, 0), + (192, 193, 24, 'SkodaGreen_DZE', '2021-09-12 07:21:30', '2021-09-12 07:35:07', 0, '[19,[8697.07,15949.8,5.589e-04]]', '[]', '[["motor",0.482],["karoserie",0.459],["palivo",0.159],["wheel_1_1_steering",0.402],["wheel_2_1_steering",0.315],["wheel_1_2_steering",0.005],["wheel_2_2_steering",0.94],["glass1",0.302],["glass2",0.131],["glass3",0.985],["glass4",0.241]]', 0.44502, 0.00000, 0), + (193, 194, 24, 'SUV_Charcoal', '2021-09-12 07:21:30', '2021-09-12 07:35:07', 0, '[150,[9120.3,15691.2,0.014]]', '[[[],[]],[["Skin_Civilian4_DZ"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.704],["wheel_1_2_steering",0.157],["wheel_2_1_steering",0.185],["wheel_2_2_steering",0.314],["palivo",0.415],["motor",0.126],["glass1",0.391],["glass2",0.167],["glass3",0.127],["glass4",0.46],["karoserie",0.647]]', 0.45072, 0.00000, 0), + (194, 195, 24, 'Pickup_PK_TK_GUE_EP1_DZE', '2021-09-12 07:21:30', '2021-09-12 11:35:12', 0, '[294.914,[8671.641,8895.344,-0.001]]', '[[[],[]],[["5Rnd_762x54_Mosin","ItemDesertTent","FoodCanOrlok","FoodCanDemon","ItemBloodbag","ItemPainkiller6","FoodCanPasta","FoodCanBeef","equip_scrapelectronics","5Rnd_86x70_L115A1","30Rnd_762x39_Groza1","Attachment_Ghillie","FoodCanRusPeas","ItemPainkiller2","ItemBandage","20Rnd_762x51_B_SCAR","200Rnd_556x45_M249"],[2,1,2,1,2,1,1,1,1,1,2,1,1,1,2,3,1]],[[],[]]]', '[["motor",0.457],["karoserie",0.106],["palivo",0.268],["wheel_1_1_steering",0.421],["wheel_2_1_steering",0.311],["wheel_1_2_steering",0.858],["wheel_2_2_steering",0.339],["glass1",0.13],["glass2",0.122]]', 0.76800, 0.00000, 0), + (195, 196, 24, 'CSJ_GyroC_DZE', '2021-09-12 07:21:31', '2021-09-12 07:35:07', 0, '[116,[6129.85,9208.98,9.518e-04]]', '[[[],[]],[["ItemSodaMtngreen","FoodCanBoneboyEmpty"],[1,1]],[[],[]]]', '[]', 0.64799, 0.00000, 0), + (196, 197, 24, 'UH1H_DZE', '2021-09-12 07:21:31', '2021-09-12 07:35:07', 0, '[149,[10366,13683.7,0.012]]', '[[[],[]],[["Skin_PriestW_DZ"],[1]],[[],[]]]', '[["glass1",0.028],["glass2",0.129],["glass3",0.586],["glass4",0.55],["glass5",0.015],["motor",0.636],["elektronika",0.156],["mala vrtule",0.228],["velka vrtule",0.735]]', 0.03777, 0.00000, 0), + (197, 198, 24, 'CSJ_GyroP', '2021-09-12 07:21:32', '2021-09-12 07:35:07', 0, '[131.858,[18219.6,2201.12,0.082]]', '[]', '[]', 0.51153, 0.00000, 0), + (198, 199, 24, 'Offroad_DSHKM_Gue_DZE', '2021-09-12 07:21:32', '2021-09-12 07:35:07', 0, '[63,[10299.2,16943,0.004]]', '[[[],[]],[["FoodCanHerpy","ItemDomeTent"],[1,1]],[[],[]]]', '[["motor",0.351],["karoserie",0.105],["palivo",0.529],["wheel_1_1_steering",0.083],["wheel_2_1_steering",0.502],["wheel_1_2_steering",0.351],["wheel_2_2_steering",0.393],["glass1",0.721],["glass2",0.044]]', 0.39357, 0.00000, 0), + (199, 200, 24, 'VWGolf_DZE', '2021-09-12 07:21:33', '2021-09-12 07:35:07', 0, '[148,[6628.81,9738.17,5.808e-04]]', '[[[],[]],[["10Rnd_303British"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.835],["wheel_1_2_steering",0.54],["wheel_2_1_steering",0.962],["wheel_2_2_steering",0.327],["motor",0.08],["karoserie",0.025],["palivo",0.812],["glass1",0.572],["glass2",0.532],["glass3",0.22],["glass4",0.366]]', 0.63150, 0.00000, 0), + (200, 201, 24, 'Octavia_ACR_DZE', '2021-09-12 07:21:33', '2021-09-12 07:35:07', 0, '[79,[9007.36,16644.7,0.016]]', '[[[],[]],[["ItemBookBible","HandRoadFlare","ItemBandage"],[1,1,1]],[[],[]]]', '[["wheel_1_1_steering",0.706],["wheel_1_2_steering",0.22],["wheel_2_1_steering",0.313],["wheel_2_2_steering",0.525],["motor",0.187],["karoserie",0.229],["palivo",0.575],["glass1",0.948],["glass2",0.869],["glass3",0.942],["glass4",0.991]]', 0.17746, 0.00000, 0), + (201, 202, 24, 'MH6J_DZ', '2021-09-12 07:21:33', '2021-09-12 07:35:07', 0, '[12,[14715.8,2973.34,1.64e-04]]', '[]', '[["glass1",0.574],["glass2",0.736],["glass3",0.199],["glass4",0.219],["motor",0.801],["elektronika",0.12],["mala vrtule",0.99],["velka vrtule",0.497],["munice",0.861]]', 0.15653, 0.00000, 0), + (202, 203, 24, 'HMMWV_M2_DZE', '2021-09-12 07:21:33', '2021-09-12 07:35:07', 0, '[154,[16333.2,15548.5,0.08]]', '[]', '[["glass1",0.132],["glass2",0.75],["glass3",0.81],["glass4",0.881],["wheel_1_1_steering",0.976],["wheel_1_2_steering",0.718],["wheel_2_1_steering",0.479],["wheel_2_2_steering",0.592],["karoserie",0.447]]', 0.33027, 0.00000, 0), + (203, 204, 24, 'Ural_UN_EP1_DZE', '2021-09-12 07:21:34', '2021-09-12 07:35:07', 0, '[156,[13580.4,5340.49,0.093]]', '[]', '[["glass1",0.71],["glass2",0.949],["glass3",0.347],["glass4",0.288],["wheel_1_1_steering",0.873],["wheel_2_1_steering",0.312],["wheel_1_3_steering",0.334],["wheel_2_3_steering",0.316],["wheel_1_2_steering",0.986],["wheel_2_2_steering",0.842],["motor",0.684],["karoserie",0.716],["palivo",0.565]]', 0.14625, 0.00000, 0), + (204, 205, 24, 'MtvrRefuel_DES_EP1_DZ', '2021-09-12 07:21:34', '2021-09-12 07:35:07', 0, '[35,[2104.59,7605.48,4.768e-07]]', '[[[],[]],[["FoodCanBoneboy","ItemBandage","ItemSodaPeppsy"],[1,1,1]],[[],[]]]', '[["wheel_1_1_steering",0.769],["wheel_1_2_steering",0.981],["wheel_1_3_steering",0.08],["wheel_2_1_steering",0.148],["wheel_2_2_steering",0.313],["wheel_2_3_steering",0.844],["palivo",0.119],["motor",0.674],["glass1",0.111],["glass2",0.08],["glass3",0.287]]', 0.71308, 0.00000, 0), + (205, 206, 24, 'Smallboat_2_DZE', '2021-09-12 07:21:34', '2021-09-12 07:35:07', 0, '[95,[8012.39,18673.1,33.598]]', '[[[],[]],[[],[]],[["School_Bag_DZE1"],[1]]]', '[["motor",0.658]]', 0.60613, 0.00000, 0), + (206, 207, 24, 'BAF_Merlin_DZE', '2021-09-12 07:21:35', '2021-09-12 10:51:42', 0, '[140,[16676,13576.3,-0.085]]', '[]', '[]', 0.06274, 0.00000, 0), + (207, 208, 24, 'AH6X_DZ', '2021-09-12 07:21:35', '2021-09-12 07:35:07', 0, '[79,[5834.57,12208.3,0.01]]', '[[[],[]],[["7Rnd_45ACP_1911","Skin_TK_CIV_Takistani01_EP1_DZ"],[1,1]],[[],[]]]', '[["glass1",0.242],["glass2",0.509],["glass3",0.851],["glass4",0.294],["motor",0.694],["elektronika",0.496],["mala vrtule",0.796],["velka vrtule",0.931],["munice",0.79]]', 0.04983, 0.00000, 0), + (208, 209, 24, 'MTVR_DES_EP1_DZE', '2021-09-12 07:21:35', '2021-09-12 07:35:07', 0, '[125,[14324.2,12702.9,0.025]]', '[[[],[]],[["FoodCandyAnders"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.919],["wheel_1_2_steering",0.813],["wheel_1_3_steering",0.337],["wheel_2_1_steering",0.565],["wheel_2_2_steering",0.619],["wheel_2_3_steering",0.95],["palivo",0.671],["motor",0.995],["glass1",0.122],["glass2",0.239],["glass3",0.548]]', 0.26655, 0.00000, 0), + (209, 210, 24, 'V3S_Open_TK_EP1_DZE', '2021-09-12 07:21:36', '2021-09-12 07:35:07', 0, '[112,[5987.78,10175.2,1.907e-06]]', '[[[],[]],[["ItemDomeTent","PartWheel"],[1,1]],[[],[]]]', '[["wheel_1_1_steering",0.505],["wheel_1_2_steering",0.208],["wheel_1_3_steering",0.31],["wheel_2_1_steering",0.068],["wheel_2_2_steering",0.386],["wheel_2_3_steering",0.975],["motor",0.945],["glass1",0.859],["glass2",0.054],["glass3",0.087],["glass4",0.327]]', 0.94644, 0.00000, 0), + (210, 211, 24, 'GNT_C185C_DZ', '2021-09-12 07:21:36', '2021-09-12 07:35:07', 0, '[138.432,[14339.3,17167.2,0.191]]', '[[[],[]],[["Skin_SurvivorWurban_DZ"],[1]],[[],[]]]', '[]', 0.81862, 0.00000, 0), + (211, 212, 24, 'UAZ_Unarmed_TK_CIV_EP1_DZE', '2021-09-12 07:21:36', '2021-09-12 07:35:07', 0, '[177,[13973.9,12974.9,0.007]]', '[]', '[["glass1",0.103],["glass2",0.169],["glass3",0.093],["glass4",0.985],["wheel_1_1_steering",0.894],["wheel_1_2_steering",0.104],["wheel_2_1_steering",0.927],["wheel_2_2_steering",0.191],["motor",0.381],["karoserie",0.175],["palivo",0.182]]', 0.86664, 0.00000, 0), + (212, 213, 24, 'Mi17_CDF_DZE', '2021-09-12 07:21:36', '2021-09-12 07:35:07', 0, '[27,[5944.67,4541,0.518]]', '[[[],[]],[["PartWheel","FoodCanTylers"],[1,1]],[["TerminalPack_DZE1"],[1]]]', '[["glass1",0.666],["glass2",0.458],["glass3",0.716],["glass4",0.793],["glass5",0.418],["glass6",0.951],["motor",0.848],["elektronika",0.648],["mala vrtule",0.222],["velka vrtule",0.846]]', 0.47977, 0.00000, 0), + (213, 214, 24, 'SUV_Yellow', '2021-09-12 07:21:37', '2021-09-12 07:35:07', 0, '[13,[4106.49,14384.9,0.043]]', '[[[],[]],[["1Rnd_Arrow_Wood","FoodCanRusUnlabeled","ItemBandage"],[1,1,1]],[[],[]]]', '[["wheel_1_1_steering",0.493],["wheel_1_2_steering",0.796],["wheel_2_1_steering",0.86],["wheel_2_2_steering",0.316],["palivo",0.359],["motor",0.88],["glass1",0.704],["glass2",0.259],["glass3",0.344],["glass4",0.929],["karoserie",0.644]]', 0.51623, 0.00000, 0), + (214, 215, 24, 'Mi17_DES_DZE', '2021-09-12 07:21:37', '2021-09-12 07:35:07', 0, '[134,[5160.45,7938.06,0.49]]', '[[[],[]],[["6Rnd_45ACP"],[1]],[[],[]]]', '[["glass1",0.944],["glass2",0.021],["glass3",0.326],["glass4",0.938],["glass5",0.208],["glass6",0.47],["motor",0.289],["elektronika",0.091],["mala vrtule",0.857],["velka vrtule",0.22]]', 0.46427, 0.00000, 0), + (215, 216, 24, 'SUV_White', '2021-09-12 07:21:37', '2021-09-12 07:35:07', 0, '[22,[6846.46,9844.36,0.032]]', '[]', '[["wheel_1_1_steering",0.424],["wheel_1_2_steering",0.964],["wheel_2_1_steering",0.013],["wheel_2_2_steering",0.619],["palivo",0.806],["motor",0.378],["glass1",0.916],["glass2",0.52],["glass3",0.789],["glass4",0.404],["karoserie",0.978]]', 0.71550, 0.00000, 0), + (216, 217, 24, 'S1203_TK_CIV_EP1_DZE', '2021-09-12 07:21:38', '2021-09-12 07:35:07', 0, '[88,[12984.2,5763.29,0.003]]', '[[["M1911_DZ"],[1]],[["7Rnd_45ACP_1911","ItemPainkiller5"],[1,1]],[[],[]]]', '[["wheel_1_1_steering",0.533],["wheel_1_2_steering",0.639],["wheel_2_1_steering",0.188],["wheel_2_2_steering",0.16],["motor",0.532],["palivo",0.288],["glass1",0.696],["glass2",0.616],["glass3",0.835],["glass4",0.706]]', 0.51464, 0.00000, 0), + (217, 218, 24, 'Lada1_TK_CIV_EP1_DZE', '2021-09-12 07:21:38', '2021-09-12 07:35:07', 0, '[15,[12472,14374.4,0.082]]', '[[[],[]],[["ItemTent","ItemEpinephrine"],[1,1]],[[],[]]]', '[["motor",0.466],["karoserie",0.914],["palivo",0.487],["wheel_1_1_steering",0.845],["wheel_2_1_steering",0.32],["wheel_1_2_steering",0.839],["wheel_2_2_steering",0.201],["glass1",0.187],["glass2",0.283],["glass3",0.974],["glass4",0.627]]', 0.04636, 0.00000, 0), + (218, 219, 24, 'Old_moto_TK_Civ_EP1_DZE', '2021-09-12 07:21:38', '2021-09-12 07:35:07', 0, '[155,[5271.87,5675.25,3.433e-04]]', '[[[],[]],[["ItemTentWinter","ItemBandage","ItemSodaRocketFuel"],[1,1,1]],[[],[]]]', '[["karoserie",0.309],["palivo",0.179],["Pravy predni tlumic",0.343],["Pravy zadni tlumic",0.907]]', 0.99587, 0.00000, 0), + (219, 220, 24, 'TT650_TK_CIV_EP1_DZE', '2021-09-12 07:21:38', '2021-09-12 07:35:07', 0, '[10,[4539.01,12295.5,0.027]]', '[]', '[["karoserie",0.145],["palivo",0.903],["Pravy predni tlumic",0.758],["Pravy zadni tlumic",0.129]]', 0.41991, 0.00000, 0), + (220, 221, 24, 'SUV_Yellow', '2021-09-12 07:21:40', '2021-09-12 07:35:07', 0, '[153,[12908.6,10970.1,0.008]]', '[]', '[["wheel_1_1_steering",0.208],["wheel_1_2_steering",0.177],["wheel_2_1_steering",0.363],["wheel_2_2_steering",0.713],["palivo",0.922],["motor",0.084],["glass1",0.15],["glass2",0.558],["glass3",0.704],["glass4",0.078],["karoserie",0.159]]', 0.23154, 0.00000, 0), + (221, 222, 24, 'hilux1_civil_1_open_DZE', '2021-09-12 07:21:40', '2021-09-12 07:35:07', 0, '[57,[16864.8,13799,7.401e-04]]', '[[[],[]],[["ItemSodaEmpty"],[1]],[[],[]]]', '[["motor",0.054],["karoserie",0.065],["palivo",0.715],["wheel_1_1_steering",0.504],["wheel_2_1_steering",0.975],["wheel_1_2_steering",0.938],["wheel_2_2_steering",0.563],["glass1",0.427],["glass2",0.258],["glass3",0.214],["glass4",0.302]]', 0.03717, 0.00000, 0), + (222, 223, 24, 'SUV_Red', '2021-09-12 07:21:40', '2021-09-12 07:35:07', 0, '[8,[14918.3,13246.3,0.075]]', '[[[],[]],[["ItemBandage","ItemDesertTent"],[1,1]],[[],[]]]', '[["wheel_1_1_steering",0.108],["wheel_1_2_steering",0.819],["wheel_2_1_steering",0.589],["wheel_2_2_steering",0.662],["palivo",0.992],["motor",0.716],["glass1",0.885],["glass2",0.32],["glass3",0.165],["glass4",0.603],["karoserie",0.091]]', 0.35202, 0.00000, 0), + (223, 224, 24, 'Mi17_DES_DZE', '2021-09-12 07:21:40', '2021-09-12 07:35:07', 0, '[82,[10254.9,17804.8,0.49]]', '[[[],[]],[["6Rnd_45ACP","10Rnd_303British"],[1,1]],[[],[]]]', '[["glass1",0.23],["glass2",0.4],["glass3",0.726],["glass4",0.18],["glass5",0.436],["glass6",0.552],["motor",0.059],["elektronika",0.217],["mala vrtule",0.098],["velka vrtule",0.813]]', 0.92969, 0.00000, 0), + (224, 225, 24, 'CH_47F_EP1_GREY_DZE', '2021-09-12 07:21:41', '2021-09-12 11:03:27', 0, '[96,[14021.5,11406.2,0.077]]', '[[[],[]],[["ItemTent"],[1]],[[],[]]]', '[]', 1.00000, 0.00000, 0), + (225, 226, 24, 'Mi17_medevac_RU_DZ', '2021-09-12 07:21:41', '2021-09-12 07:35:07', 0, '[129,[7478.32,14376,0.503]]', '[[[],[]],[["ItemDesertTent"],[1]],[[],[]]]', '[["glass1",0.767],["glass2",0.128],["glass3",0.301],["glass4",0.855],["glass5",0.104],["glass6",0.287],["motor",0.698],["elektronika",0.854],["mala vrtule",0.854],["velka vrtule",0.748]]', 0.05673, 0.00000, 0), + (226, 227, 24, 'ScrapAPC_DZE', '2021-09-12 07:21:41', '2021-09-12 07:35:07', 0, '[150,[11603.8,8866.33,0.006]]', '[[[],[]],[["ItemAntibacterialWipe"],[1]],[[],[]]]', '[["karoserie",0.886],["palivo",0.091],["wheel_1_1_steering",0.353],["wheel_1_2_steering",0.489],["wheel_2_1_steering",0.251],["wheel_2_2_steering",0.369],["motor",0.509]]', 0.11848, 0.00000, 0), + (227, 228, 24, 'T810A_ACR_REFUEL_DES_DZE', '2021-09-12 07:21:41', '2021-09-13 13:21:07', 0, '[304.7,[2609.865,9491.564,0.031]]', '[[[],[]],[[],[]],[[],[]]]', '[["wheel_1_1_steering",0.587],["wheel_1_2_steering",0.295],["wheel_1_3_steering",0.63],["wheel_2_1_steering",0.421],["wheel_2_2_steering",0.799],["wheel_2_3_steering",0.752],["palivo",0.264],["glass1",0.469],["glass2",0.705],["glass3",0.075],["glass4",0.961],["motor",0.76],["karoserie",0.665]]', 0.77195, 0.00000, 0), + (228, 229, 24, 'BTR40_MG_TK_INS_EP1_DZE', '2021-09-12 07:21:42', '2021-09-12 07:35:07', 0, '[149,[6871.19,13422.1,2.594e-04]]', '[[[],[]],[["ItemBandage"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.067],["wheel_1_2_steering",0.219],["wheel_2_1_steering",0.961],["wheel_2_2_steering",0.383],["karoserie",0.594]]', 0.49812, 0.00000, 0), + (229, 230, 24, 'V3S_Camper_DZE', '2021-09-12 07:21:42', '2021-09-12 07:35:07', 0, '[125,[4772.2,12162,0.083]]', '[[[],[]],[["FoodCanRusPorkEmpty"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.14],["wheel_1_2_steering",0.789],["wheel_1_3_steering",0.385],["wheel_2_1_steering",0.697],["wheel_2_2_steering",0.372],["wheel_2_3_steering",0.656],["motor",0.157],["glass1",0.075],["glass2",0.269],["glass3",0.524],["glass4",0.163]]', 0.41003, 0.00000, 0), + (230, 231, 24, 'Mi17_CDF_DZE', '2021-09-12 07:21:42', '2021-09-12 07:35:07', 0, '[13,[15928.6,15574,0.486]]', '[]', '[["glass1",0.406],["glass2",0.431],["glass3",0.264],["glass4",0.079],["glass5",0.313],["glass6",0.007],["motor",0.713],["elektronika",0.203],["mala vrtule",0.734],["velka vrtule",0.526]]', 0.68360, 0.00000, 0), + (231, 232, 24, 'CH_47F_EP1_DES_DZE', '2021-09-12 07:21:42', '2021-09-12 11:03:25', 0, '[48,[10150.5,17768.7,0.077]]', '[]', '[]', 1.00000, 0.00000, 0), + (232, 233, 24, 'UH1H_DES_DZE', '2021-09-12 07:21:42', '2021-09-12 07:35:07', 0, '[11,[16356.4,17925.8,0.006]]', '[[[],[]],[["ItemBandage"],[1]],[[],[]]]', '[["glass1",0.46],["glass2",0.401],["glass3",0.832],["glass4",0.628],["glass5",0.957],["motor",0.618],["elektronika",0.627],["mala vrtule",0.131],["velka vrtule",0.426]]', 0.67763, 0.00000, 0), + (233, 234, 24, 'datsun1_red_covered_DZE', '2021-09-12 07:21:43', '2021-09-12 07:35:07', 0, '[119,[14553.7,13685.1,0.015]]', '[[[],[]],[["FoodCandyChubby"],[1]],[["GymBag_Green_DZE1"],[1]]]', '[["motor",0.439],["sklo predni P",0.045],["karoserie",0.97],["palivo",0.106]]', 0.43837, 0.00000, 0), + (234, 235, 24, 'T810A_ACR_REFUEL_DES_DZE', '2021-09-12 07:21:43', '2021-09-12 07:35:07', 0, '[24,[10570.8,14051.1,0.002]]', '[]', '[["wheel_1_1_steering",0.492],["wheel_1_2_steering",0.715],["wheel_1_3_steering",0.987],["wheel_2_1_steering",0.699],["wheel_2_2_steering",0.691],["wheel_2_3_steering",0.435],["palivo",0.031],["glass1",0.031],["glass2",0.427],["glass3",0.47],["glass4",0.563],["motor",0.607],["karoserie",0.039]]', 0.88664, 0.00000, 0), + (235, 236, 24, 'RHIB_DZE', '2021-09-12 07:21:43', '2021-09-12 07:35:07', 0, '[54,[7423.91,18955.8,61.155]]', '[[[],[]],[["PartGlass","6Rnd_45ACP","ItemSodaRocketFuel"],[1,1,1]],[[],[]]]', '[["motor",0.799]]', 0.91162, 0.00000, 0), + (236, 237, 24, 'HMMWV_DES_EP1_DZE', '2021-09-12 07:21:43', '2021-09-12 07:35:07', 0, '[101,[4465.49,14354.4,0.112]]', '[[["M1911_2_DZ"],[1]],[["ItemBandage"],[1]],[[],[]]]', '[["glass1",0.418],["glass2",0.929],["glass3",0.649],["glass4",0.529],["wheel_1_1_steering",0.12],["wheel_1_2_steering",0.547],["wheel_2_1_steering",0.488],["wheel_2_2_steering",0.201],["karoserie",0.127]]', 0.62939, 0.00000, 0), + (237, 238, 24, 'Octavia_ACR_DZE', '2021-09-12 07:21:43', '2021-09-12 07:35:07', 0, '[166,[6839.48,9397.18,0.176]]', '[]', '[["wheel_1_1_steering",0.152],["wheel_1_2_steering",0.895],["wheel_2_1_steering",0.166],["wheel_2_2_steering",0.725],["motor",0.004],["karoserie",0.741],["palivo",0.552],["glass1",0.332],["glass2",0.19],["glass3",0.19],["glass4",0.251]]', 0.25266, 0.00000, 0), + (238, 239, 24, 'ATV_CIV_Red_CP_DZE', '2021-09-12 07:21:44', '2021-09-12 07:35:07', 0, '[138,[10605.6,17081.6,0.008]]', '[]', '[["motor",0.847],["palivo",0.528],["wheel_1_1_steering",0.638],["wheel_1_2_steering",0.369],["wheel_2_1_steering",0.197],["wheel_2_2_steering",0.557],["karoserie",0.294]]', 0.13282, 0.00000, 0), + (239, 240, 24, 'datsun1_red_covered_DZE', '2021-09-12 07:21:44', '2021-09-12 07:35:07', 0, '[163,[14964.2,7768.51,0.058]]', '[[[],[]],[["7Rnd_45ACP_1911"],[1]],[[],[]]]', '[["motor",0.173],["sklo predni P",0.946],["karoserie",0.794],["palivo",0.768]]', 0.55059, 0.00000, 0), + (240, 241, 24, 'Tractor_DZE', '2021-09-12 07:21:44', '2021-09-12 07:35:07', 0, '[160,[6258.81,10442.2,0]]', '[[[],[]],[["ItemPainkiller"],[1]],[[],[]]]', '[["motor",0.557],["karoserie",0.396],["palivo",0.516],["glass1",0.855],["glass2",0.964],["glass3",0.532],["glass4",0.443]]', 0.58242, 0.00000, 0), + (241, 242, 24, 'Volha_1_TK_CIV_EP1_DZE', '2021-09-12 07:21:45', '2021-09-12 07:35:07', 0, '[78,[6645.81,10383.9,0.05]]', '[[[],[]],[["ItemFuelcan","Skin_HookerW3_DZ","FoodCanTylersEmpty"],[1,1,1]],[[],[]]]', '[["wheel_1_1_steering",0.237],["wheel_1_2_steering",0.426],["wheel_2_1_steering",0.34],["wheel_2_2_steering",0.492],["palivo",0.87],["motor",0.448],["glass1",0.027],["glass2",0.636],["glass3",0.906],["glass4",0.226],["karoserie",0.73]]', 0.87058, 0.00000, 0), + (242, 243, 24, 'car_hatchback_red_DZE', '2021-09-12 07:21:45', '2021-09-12 07:35:07', 0, '[123,[4868.57,6095.94,0.002]]', '[[[],[]],[["PartWheel","Skin_SurvivorWdesert_DZ"],[1,1]],[[],[]]]', '[["motor",0.104],["karoserie",0.28],["palivo",0.595],["wheel_1_1_steering",0.26],["wheel_2_1_steering",0.739],["wheel_1_2_steering",0.951],["wheel_2_2_steering",0.837],["glass1",0.78],["glass2",0.098],["glass3",0.342],["glass4",0.643]]', 0.79566, 0.00000, 0), + (243, 244, 24, 'TT650_Civ_DZE', '2021-09-12 07:21:45', '2021-09-12 07:35:07', 0, '[41,[10831.3,5018.22,0.08]]', '[[[],[]],[["FoodCanPowellEmpty","8Rnd_9x18_Makarov"],[1,1]],[[],[]]]', '[["karoserie",0.048],["palivo",0.5],["Pravy predni tlumic",0.127],["Pravy zadni tlumic",0.831]]', 0.41999, 0.00000, 0), + (244, 245, 24, 'LadaLM_DZE', '2021-09-12 07:21:45', '2021-09-12 07:35:07', 0, '[79,[16443.9,9544.2,0.067]]', '[[[],[]],[["FoodPistachio","ItemAntibacterialWipe","ItemSodaSmasht"],[1,1,1]],[[],[]]]', '[["motor",0.901],["karoserie",0.003],["palivo",0.263],["wheel_1_1_steering",0.509],["wheel_2_1_steering",0.842],["wheel_1_2_steering",0.346],["wheel_2_2_steering",0.331],["glass1",0.751],["glass2",0.551],["glass3",0.756],["glass4",0.176]]', 0.65825, 0.00000, 0), + (245, 246, 24, 'LandRover_Special_CZ_EP1_DZE', '2021-09-12 07:35:32', '2021-09-12 08:48:11', 0, '[20,[15766.4,12606,0.115]]', '[[[],[]],[["FoodCanBeef","ItemEpinephrine","ItemMorphine"],[1,1,1]],[[],[]]]', '[["motor",0.488],["palivo",0.133],["wheel_1_1_steering",0.49],["wheel_1_2_steering",0.868],["wheel_2_1_steering",0.319],["wheel_2_2_steering",0.406],["karoserie",0.383]]', 0.96168, 0.00000, 0), + (246, 247, 24, 'UH1H_DES_DZE', '2021-09-12 07:35:33', '2021-09-12 08:48:11', 0, '[102,[8537.83,2600.32,0.002]]', '[]', '[["glass1",0.357],["glass2",0.665],["glass3",0.319],["glass4",0.146],["glass5",0.777],["motor",0.404],["elektronika",0.655],["mala vrtule",0.321],["velka vrtule",0.769]]', 0.55073, 0.00000, 0), + (247, 248, 24, 'GLT_M300_ST_DZE', '2021-09-12 07:35:33', '2021-09-12 08:48:11', 0, '[47,[12800.1,9683.11,0.013]]', '[]', '[["motor",0.683],["karoserie",0.013],["palivo",0.098],["wheel_1_1_steering",0.808],["wheel_2_1_steering",0.882],["wheel_1_2_steering",0.968],["wheel_2_2_steering",0.931],["glass1",0.242],["glass2",0.552],["glass3",0.397],["glass4",0.109]]', 0.92944, 0.00000, 0), + (248, 249, 24, 'Smallboat_1_DZE', '2021-09-12 07:35:33', '2021-09-12 08:48:11', 0, '[65,[1117.05,12639.1,38.574]]', '[[[],[]],[["ItemTentWinter"],[1]],[[],[]]]', '[["motor",0.239]]', 0.35232, 0.00000, 0), + (249, 250, 24, 'datsun1_green_open_DZE', '2021-09-12 07:35:33', '2021-09-12 08:48:11', 0, '[169,[7517.66,11193.7,0.016]]', '[]', '[["motor",0.405],["sklo predni P",0.082],["karoserie",0.136],["palivo",0.446]]', 0.46703, 0.00000, 0), + (250, 251, 24, 'Lada2_TK_CIV_EP1_DZE', '2021-09-12 07:35:33', '2021-09-12 08:48:11', 0, '[72,[13562.4,13846.3,0.011]]', '[[[],[]],[["FoodCanCorn"],[1]],[[],[]]]', '[["motor",0.536],["karoserie",0.746],["palivo",0.273],["wheel_1_1_steering",0.311],["wheel_2_1_steering",0.191],["wheel_1_2_steering",0.11],["wheel_2_2_steering",0.379],["glass1",0.476],["glass2",0.464],["glass3",0.937],["glass4",0.03]]', 0.78134, 0.00000, 0), + (251, 252, 24, 'ATV_CIV_Grey_CP_DZE', '2021-09-12 07:35:34', '2021-09-12 08:48:11', 0, '[5,[14394,13737.1,-4.768e-07]]', '[[[],[]],[["HandChemRed"],[1]],[[],[]]]', '[["motor",0.657],["palivo",0.838],["wheel_1_1_steering",0.022],["wheel_1_2_steering",0.091],["wheel_2_1_steering",0.852],["wheel_2_2_steering",0.942],["karoserie",0.251]]', 0.36462, 0.00000, 0), + (252, 253, 24, 'Zodiac_DZE', '2021-09-12 07:35:34', '2021-09-12 08:48:11', 0, '[116,[7832.27,16462,12.007]]', '[]', '[["motor",0.961]]', 0.84900, 0.00000, 0), + (253, 254, 24, 'MH6J_DZ', '2021-09-12 07:35:34', '2021-09-12 08:48:11', 0, '[165,[16040.2,15597.1,7.553e-04]]', '[[[],[]],[["ItemWaterBottleSafe","ItemSodaRbull"],[1,1]],[[],[]]]', '[["glass1",0.457],["glass2",0.939],["glass3",0.307],["glass4",0.725],["motor",0.183],["elektronika",0.578],["mala vrtule",0.504],["velka vrtule",0.08],["munice",0.314]]', 0.57788, 0.00000, 0), + (254, 255, 24, 'Mi17_DZE', '2021-09-12 07:35:35', '2021-09-12 08:48:11', 0, '[58,[8219.53,13781.1,0.498]]', '[[[],[]],[["PartWheel","FoodCanFrankBeans"],[1,1]],[[],[]]]', '[["glass1",0.738],["glass2",0.703],["glass3",0.707],["glass4",0.329],["glass5",0.11],["glass6",0.878],["motor",0.876],["elektronika",0.365],["mala vrtule",0.365],["velka vrtule",0.078]]', 0.87727, 0.00000, 0), + (255, 256, 24, 'HMMWV_DES_EP1_DZE', '2021-09-12 07:35:35', '2021-09-12 08:48:11', 0, '[32,[14545.7,2907.55,0.002]]', '[[["M1911_DZ"],[1]],[["ItemSodaClays","7Rnd_45ACP_1911","HandRoadFlare"],[1,2,1]],[[],[]]]', '[["glass1",0.004],["glass2",0.571],["glass3",0.192],["glass4",0.486],["wheel_1_1_steering",0.413],["wheel_1_2_steering",0.517],["wheel_2_1_steering",0.667],["wheel_2_2_steering",0.077],["karoserie",0.891]]', 0.92975, 0.00000, 0), + (256, 257, 24, 'VWGolf_DZE', '2021-09-12 07:35:35', '2021-09-12 08:48:11', 0, '[167,[7158.65,5319.76,0.004]]', '[[[],[]],[["8Rnd_9x18_Makarov","FoodCanBadguyEmpty"],[1,1]],[[],[]]]', '[["wheel_1_1_steering",0.47],["wheel_1_2_steering",0.752],["wheel_2_1_steering",0.083],["wheel_2_2_steering",0.716],["motor",0.975],["karoserie",0.13],["palivo",0.672],["glass1",0.895],["glass2",0.371],["glass3",0.176],["glass4",0.853]]', 0.89945, 0.00000, 0), + (257, 258, 24, 'Zodiac_DZE', '2021-09-12 07:35:35', '2021-09-12 08:48:11', 0, '[33,[3496.81,12041.8,0.41]]', '[[[],[]],[["ItemPainkiller3","ItemBandage"],[1,1]],[[],[]]]', '[["motor",0.094]]', 0.48184, 0.00000, 0), + (258, 259, 24, 'T810A_ACR_OPEN_DZE', '2021-09-12 07:35:35', '2021-09-12 08:48:11', 0, '[158,[6919.6,9742.34,0.211]]', '[[["Colt_Bull_DZ"],[1]],[["7Rnd_45ACP_1911"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.414],["wheel_1_2_steering",0.3],["wheel_1_3_steering",0.748],["wheel_2_1_steering",0.141],["wheel_2_2_steering",0.109],["wheel_2_3_steering",0.855],["palivo",0.952],["glass1",0.03],["glass2",0.99],["glass3",0.279],["glass4",0.146],["motor",0.185],["karoserie",0.951]]', 0.58157, 0.00000, 0), + (259, 260, 24, 'HMMWV_M1151_M2_CZ_DES_EP1_DZE', '2021-09-12 07:35:35', '2021-09-12 08:48:11', 0, '[58,[10120.6,16623.3,0.028]]', '[[[],[]],[["ItemAntibacterialWipe"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.453],["wheel_1_2_steering",0.64],["wheel_2_1_steering",0.157],["wheel_2_2_steering",0.779],["karoserie",0.086]]', 0.61384, 0.00000, 0), + (260, 261, 24, 'UH1Y_DZE', '2021-09-12 07:35:36', '2021-09-12 08:48:11', 0, '[170,[11711.5,13289.5,0.006]]', '[]', '[["motor",0.293],["elektronika",0.777],["mala vrtule",0.535],["velka vrtule",0.347],["glass1",0.621],["glass2",0.494],["glass3",0.796],["glass4",0.658],["glass5",0.051]]', 0.20300, 0.00000, 0), + (261, 262, 24, 'TT650_Ins_DZE', '2021-09-12 07:35:36', '2021-09-12 08:48:11', 0, '[12,[4802.83,12090.2,0.064]]', '[[[],[]],[["FoodCanRusUnlabeledEmpty"],[1]],[[],[]]]', '[["karoserie",0.603],["palivo",0.708],["Pravy predni tlumic",0.197],["Pravy zadni tlumic",0.645]]', 0.99023, 0.00000, 0), + (262, 263, 24, 'Hummer_DZE', '2021-09-12 07:35:36', '2021-09-12 08:48:11', 0, '[164,[16411.7,15293.1,0.001]]', '[[[],[]],[["ItemSodaPeppsyEmpty"],[1]],[[],[]]]', '[["karoserie",0.964],["motor",0.885],["palivo",0.023],["glass1",0.48],["glass2",0.335],["glass3",0.217],["glass4",0.525],["levy predni tlumic",0.397],["levy zadni tlumic",0.715],["pravy predni tlumic",0.672],["pravy zadni tlumic",0.209],["sklo predni P",0.898],["sklo predni L",0.429]]', 0.64603, 0.00000, 0), + (263, 264, 24, 'Ka60_GL_PMC_DZE', '2021-09-12 07:35:36', '2021-09-12 08:48:11', 0, '[132,[8662.53,14956.9,0.138]]', '[]', '[["mala vrtule",0.939],["motor",0.395],["elektronika",0.265],["velka vrtule",0.198]]', 0.36912, 0.00000, 0), + (264, 265, 24, 'pook_gunship_CDF_DZE', '2021-09-12 07:35:37', '2021-09-12 08:48:11', 0, '[0,[1426.48,3793.85,0.002]]', '[[[],[]],[["6Rnd_45ACP"],[1]],[[],[]]]', '[["glass1",0.192],["engine",0.84],["mala vrtule",0.58],["velka vrtule",0.871]]', 0.17369, 0.00000, 0), + (265, 266, 24, 'CH53_DZE', '2021-09-12 07:35:37', '2021-09-12 11:03:12', 0, '[95,[2290,10646.2,-0.601]]', '[[[],[]],[["FoodCanUnlabeledEmpty"],[1]],[[],[]]]', '[]', 0.46134, 0.00000, 0), + (266, 267, 24, 'Submarine_DZE', '2021-09-12 07:35:38', '2021-09-12 08:48:11', 0, '[113,[3658.84,18784.5,91.303]]', '[[["M1911_DZ","Colt_Bull_DZ"],[1,1]],[["7Rnd_45ACP_1911","FoodCanCornEmpty"],[2,1]],[[],[]]]', '[["karoserie",0.595],["motor",0.132],["palivo",0.382]]', 0.22335, 0.00000, 0), + (267, 268, 24, 'SUV_Silver', '2021-09-12 07:35:38', '2021-09-12 08:48:11', 0, '[29,[8312.73,10051.5,0.108]]', '[[[],[]],[["FoodCanHerpy"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.874],["wheel_1_2_steering",0.785],["wheel_2_1_steering",0.442],["wheel_2_2_steering",0.118],["palivo",0.411],["motor",0.258],["glass1",0.817],["glass2",0.287],["glass3",0.77],["glass4",0.658],["karoserie",0.689]]', 0.41845, 0.00000, 0), + (268, 269, 24, 'car_hatchback_red_DZE', '2021-09-12 07:35:38', '2021-09-12 08:48:11', 0, '[49,[12859.6,11885.5,0.03]]', '[[[],[]],[["Skin_Hunter_DZ","PartGlass"],[1,1]],[[],[]]]', '[["motor",0.233],["karoserie",0.302],["palivo",0.973],["wheel_1_1_steering",0.111],["wheel_2_1_steering",0.075],["wheel_1_2_steering",0.64],["wheel_2_2_steering",0.829],["glass1",0.947],["glass2",0.011],["glass3",0.122],["glass4",0.071]]', 0.19995, 0.00000, 0), + (269, 270, 24, 'UH60M_EP1_DZE', '2021-09-12 07:35:39', '2021-09-12 08:48:11', 0, '[26,[1436.06,3622.19,0.001]]', '[]', '[["glass1",0.121],["glass2",0.177],["glass3",0.528],["glass4",0.182],["motor",0.046],["mala vrtule",0.895],["velka vrtule",0.598],["munice",0.141]]', 0.99849, 0.00000, 0), + (270, 271, 24, 'UH60M_MEV_EP1_DZ', '2021-09-12 07:35:39', '2021-09-12 08:48:11', 0, '[95,[7547.81,6232.65,0.013]]', '[[["Makarov_DZ"],[1]],[["Skin_Prisoner3_DZ"],[1]],[[],[]]]', '[["glass1",0.447],["glass2",0.394],["glass3",0.691],["glass4",0.417],["motor",0.89],["mala vrtule",0.554],["velka vrtule",0.105],["munice",0.191]]', 0.74565, 0.00000, 0), + (271, 272, 24, 'LadaLM_DZE', '2021-09-12 07:35:39', '2021-09-12 08:48:11', 0, '[151,[10504.2,4974.3,0.008]]', '[[[],[]],[["ItemSodaSacriteEmpty"],[1]],[[],[]]]', '[["motor",0.251],["karoserie",0.107],["palivo",0.963],["wheel_1_1_steering",0.88],["wheel_2_1_steering",0.294],["wheel_1_2_steering",0.81],["wheel_2_2_steering",0.29],["glass1",0.165],["glass2",0.38],["glass3",0.631],["glass4",0.958]]', 0.63845, 0.00000, 0), + (272, 273, 24, 'BAF_Jackal2_GMG_D_DZE', '2021-09-12 07:35:39', '2021-09-12 08:48:11', 0, '[166,[6338.34,15155.2,0.009]]', '[[[],[]],[["7Rnd_45ACP_1911","Skin_INS_Bardak_DZ"],[1,1]],[[],[]]]', '[["karoserie",0.85],["motor",0.452],["palivo",0.486],["wheel_1_1_steering",0.955],["wheel_1_2_steering",0.469],["wheel_2_1_steering",0.523],["wheel_2_2_steering",0.075]]', 0.20378, 0.00000, 0), + (273, 274, 24, 'Fishing_Boat_DZE', '2021-09-12 07:35:39', '2021-09-12 08:48:11', 0, '[36,[11328.1,19137.2,16.166]]', '[]', '[["motor",0.19]]', 0.44855, 0.00000, 0), + (274, 275, 24, 'Pickup_PK_INS_DZE', '2021-09-12 07:35:40', '2021-09-12 08:48:11', 0, '[20,[16262.2,5562.16,0.018]]', '[[[],[]],[["8Rnd_9x18_Makarov","FoodCanPowellEmpty"],[1,1]],[[],[]]]', '[["motor",0.685],["karoserie",0.196],["palivo",0.377],["wheel_1_1_steering",0.359],["wheel_2_1_steering",0.06],["wheel_1_2_steering",0.272],["wheel_2_2_steering",0.88],["glass1",0.584],["glass2",0.864]]', 0.95894, 0.00000, 0), + (275, 276, 24, 'V3S_Open_TK_CIV_EP1_DZE', '2021-09-12 07:35:40', '2021-09-13 13:52:18', 0, '[312.099,[6508.998,9641.243,0.025]]', '[[[],[]],[[],[]],[[],[]]]', '[["wheel_1_1_steering",0],["wheel_1_2_steering",0],["wheel_1_3_steering",0],["wheel_2_1_steering",0],["wheel_2_2_steering",0],["wheel_2_3_steering",0],["motor",0],["glass1",0],["glass2",0],["glass3",0],["glass4",0]]', 0.98584, 0.00000, 0), + (276, 277, 24, 'T810A_ACR_DES_DZE', '2021-09-12 07:35:40', '2021-09-12 08:48:11', 0, '[125,[15453,5789.38,0.009]]', '[[[],[]],[["ItemTent","ItemBandage"],[1,1]],[["School_Bag_DZE1"],[1]]]', '[["wheel_1_1_steering",0.212],["wheel_1_2_steering",0.258],["wheel_1_3_steering",0.535],["wheel_2_1_steering",0.01],["wheel_2_2_steering",0.225],["wheel_2_3_steering",0.173],["palivo",0.088],["glass1",0.391],["glass2",0.938],["glass3",0.445],["glass4",0.699],["motor",0.056],["karoserie",0.675]]', 0.44050, 0.00000, 0), + (277, 278, 24, 'Lada1_TK_CIV_EP1_DZE', '2021-09-12 07:35:40', '2021-09-12 08:48:11', 0, '[15,[14890.1,14128.7,0.003]]', '[]', '[["motor",0.856],["karoserie",0.744],["palivo",0.723],["wheel_1_1_steering",0.546],["wheel_2_1_steering",0.504],["wheel_1_2_steering",0.162],["wheel_2_2_steering",0.058],["glass1",0.243],["glass2",0.554],["glass3",0.551],["glass4",0.409]]', 0.18542, 0.00000, 0), + (278, 279, 24, 'M1030_US_DES_EP1_DZE', '2021-09-12 07:35:41', '2021-09-12 08:48:11', 0, '[169,[8400.95,7774,0.008]]', '[[[],[]],[["ItemMorphine","5Rnd_762x54_Mosin","ItemFuelcan"],[1,1,1]],[[],[]]]', '[["karoserie",0.826],["palivo",0.364],["Pravy predni tlumic",0.207],["Pravy zadni tlumic",0.439]]', 0.96937, 0.00000, 0), + (279, 280, 24, 'Mini_Cooper_DZE', '2021-09-12 07:35:41', '2021-09-12 08:48:11', 0, '[15,[12588.2,9081,0.01]]', '[[[],[]],[["10Rnd_303British","TrashTinCan","ItemPainkiller1"],[1,1,1]],[[],[]]]', '[["glass1",0.392],["glass2",0.106],["glass3",0.675],["glass4",0.293],["karoserie",0.142],["palivo",0.826],["wheel_1_1_steering",0.176],["wheel_1_2_steering",0.236],["wheel_2_1_steering",0.025],["wheel_2_2_steering",0.99],["motor",0.459]]', 0.10330, 0.00000, 0), + (280, 281, 24, 'V3S_Open_TK_EP1_DZE', '2021-09-12 07:35:41', '2021-09-12 08:48:11', 0, '[62,[3936.34,14521.5,0.031]]', '[]', '[["wheel_1_1_steering",0.49],["wheel_1_2_steering",0.178],["wheel_1_3_steering",0.189],["wheel_2_1_steering",0.776],["wheel_2_2_steering",0.706],["wheel_2_3_steering",0.751],["motor",0.453],["glass1",0.83],["glass2",0.807],["glass3",0.469],["glass4",0.212]]', 0.73751, 0.00000, 0), + (281, 282, 24, 'Mi17_DZE', '2021-09-12 07:35:43', '2021-09-12 11:02:00', 0, '[174.164,[5141.033,4583.873,-0.045]]', '[[[],[]],[[],[]],[[],[]]]', '[["glass1",0.799],["glass2",0.602],["glass3",0.461],["glass4",0.114],["glass5",0.22],["glass6",0.803],["motor",0.638],["elektronika",0.075],["mala vrtule",0.953],["velka vrtule",0.953]]', 0.06870, 0.00000, 0), + (282, 283, 24, 'pook_medevac_DZE', '2021-09-12 07:35:43', '2021-09-13 13:51:33', 0, '[84.863,[6300.5,9670.3,0.036]]', '[[[],[]],[["FoodCanRusPeasEmpty"],[1]],[[],[]]]', '[["glass1",0.965],["engine",0.961],["mala vrtule",0.827],["velka vrtule",0.268]]', 0.89400, 0.00000, 0), + (283, 284, 24, 'M1030_US_DES_EP1_DZE', '2021-09-12 07:35:43', '2021-09-12 08:48:11', 0, '[92,[13477.6,3162.14,9.346e-05]]', '[]', '[["karoserie",0.068],["palivo",0.642],["Pravy predni tlumic",0.814],["Pravy zadni tlumic",0.993]]', 0.08719, 0.00000, 0), + (284, 285, 24, 'RHIB2Turret_DZE', '2021-09-12 07:35:44', '2021-09-12 08:48:11', 0, '[69,[8678.63,17755.2,9.365]]', '[[[],[]],[["7Rnd_45ACP_1911","FoodCanUnlabeled"],[1,1]],[[],[]]]', '[["motor",0.029]]', 0.01610, 0.00000, 0), + (285, 286, 24, 'ATV_CIV_Purple_CP_DZE', '2021-09-12 07:35:44', '2021-09-12 08:48:11', 0, '[100,[5066.87,8079.8,3.147e-04]]', '[[["Makarov_DZ"],[1]],[["ItemSodaOrangeSherbet","FoodCanHerpyEmpty"],[1,1]],[[],[]]]', '[["motor",0.666],["palivo",0.537],["wheel_1_1_steering",0.273],["wheel_1_2_steering",0.679],["wheel_2_1_steering",0.459],["wheel_2_2_steering",0.553],["karoserie",0.538]]', 0.32007, 0.00000, 0), + (286, 287, 24, 'HMMWV_M2_DZE', '2021-09-12 07:35:44', '2021-09-12 08:48:11', 0, '[26,[17690.7,10066.2,7.477e-04]]', '[]', '[["glass1",0.942],["glass2",0.706],["glass3",0.413],["glass4",0.533],["wheel_1_1_steering",0.546],["wheel_1_2_steering",0.095],["wheel_2_1_steering",0.267],["wheel_2_2_steering",0.187],["karoserie",0.377]]', 0.86479, 0.00000, 0), + (287, 288, 24, 'T810A_ACR_REFUEL_DZE', '2021-09-12 08:48:35', '2021-09-12 08:52:34', 0, '[29,[10530,16172.5,9.952e-04]]', '[]', '[["wheel_1_1_steering",0.612],["wheel_1_2_steering",0.813],["wheel_1_3_steering",0.929],["wheel_2_1_steering",0.512],["wheel_2_2_steering",0.155],["wheel_2_3_steering",0.603],["palivo",0.906],["glass1",0.391],["glass2",0.007],["glass3",0.323],["glass4",0.747],["motor",0.079],["karoserie",0.935]]', 0.27124, 0.00000, 0), + (288, 289, 24, 'Lada2_TK_CIV_EP1_DZE', '2021-09-12 08:48:36', '2021-09-12 08:52:34', 0, '[25,[7438.94,15713,0.147]]', '[[[],[]],[["5Rnd_762x54_Mosin"],[1]],[[],[]]]', '[["motor",0.885],["karoserie",0.572],["palivo",0.185],["wheel_1_1_steering",0.228],["wheel_2_1_steering",0.7],["wheel_1_2_steering",0.479],["wheel_2_2_steering",0.334],["glass1",0.418],["glass2",0.31],["glass3",0.776],["glass4",0.284]]', 0.77240, 0.00000, 0), + (289, 290, 24, 'BAF_Jackal2_GMG_W_DZE', '2021-09-12 08:48:36', '2021-09-24 11:57:54', 0, '[48.886,[8266.283,15462.103,0.003]]', '[[[],[]],[["HandChemGreen"],[2]],[[],[]]]', '[["karoserie",0.071],["motor",0.657],["palivo",0.071],["wheel_1_1_steering",0.528],["wheel_1_2_steering",0.016],["wheel_2_1_steering",0.839],["wheel_2_2_steering",0.748]]', 0.61270, 0.00000, 0), + (290, 291, 24, 'T810A_ACR_DES_DZE', '2021-09-12 08:48:36', '2021-09-12 08:52:34', 0, '[26,[17390.5,13681.5,0.007]]', '[[[],[]],[["15Rnd_W1866_Slug","ItemTentWinter","10Rnd_303British"],[1,1,1]],[[],[]]]', '[["wheel_1_1_steering",0.43],["wheel_1_2_steering",0.688],["wheel_1_3_steering",0.089],["wheel_2_1_steering",0.747],["wheel_2_2_steering",0.413],["wheel_2_3_steering",0.531],["palivo",0.27],["glass1",0.043],["glass2",0.768],["glass3",0.062],["glass4",0.594],["motor",0.954],["karoserie",0.223]]', 0.09961, 0.00000, 0), + (291, 292, 24, 'Zodiac_DZE', '2021-09-12 08:48:36', '2021-09-12 08:52:34', 0, '[12,[2166.42,14465.6,90.931]]', '[]', '[["motor",0.966]]', 0.88538, 0.00000, 0), + (292, 293, 24, 'T810_ACR_REAMMO_DES_DZE', '2021-09-12 08:48:37', '2021-09-12 08:52:34', 0, '[89,[4381.1,14437.5,0.004]]', '[[[],[]],[["ItemDomeTent","10Rnd_303British","FoodCanRusPorkEmpty"],[1,1,1]],[[],[]]]', '[["wheel_1_1_steering",0.667],["wheel_1_2_steering",0.191],["wheel_1_3_steering",0.114],["wheel_2_1_steering",0.181],["wheel_2_2_steering",0.165],["wheel_2_3_steering",0.964],["palivo",0.038],["glass1",0.196],["glass2",0.083],["glass3",0.775],["glass4",0.893],["motor",0.527],["karoserie",0.062]]', 0.53817, 0.00000, 0), + (293, 294, 24, 'SUV_Pink', '2021-09-12 08:48:37', '2021-09-12 08:52:34', 0, '[20,[8802.31,12464.8,0.01]]', '[[[],[]],[["7Rnd_45ACP_1911"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.845],["wheel_1_2_steering",0.358],["wheel_2_1_steering",0.509],["wheel_2_2_steering",0.741],["palivo",0.019],["motor",0.924],["glass1",0.593],["glass2",0.955],["glass3",0.926],["glass4",0.868],["karoserie",0.17]]', 0.16377, 0.00000, 0), + (294, 295, 24, 'hilux1_civil_3_open_DZE', '2021-09-12 08:48:37', '2021-09-12 08:52:34', 0, '[179,[3514.66,8234.44,0.034]]', '[[[],[]],[["7Rnd_50AE_Deagle","Skin_WorkerW_DZ"],[1,1]],[[],[]]]', '[["motor",0.123],["karoserie",0.165],["palivo",0.195],["wheel_1_1_steering",0.695],["wheel_2_1_steering",0.785],["wheel_1_2_steering",0.775],["wheel_2_2_steering",0.807],["glass1",0.529],["glass2",0.15],["glass3",0.415],["glass4",0.257]]', 0.75990, 0.00000, 0), + (295, 296, 24, 'SUV_White', '2021-09-12 08:48:37', '2021-09-12 08:52:34', 0, '[104,[5711.32,15254.4,0.018]]', '[[[],[]],[["Skin_Postman1_DZ"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.203],["wheel_1_2_steering",0.077],["wheel_2_1_steering",0.695],["wheel_2_2_steering",0.561],["palivo",0.885],["motor",0.829],["glass1",0.767],["glass2",0.745],["glass3",0.312],["glass4",0.785],["karoserie",0.932]]', 0.89120, 0.00000, 0), + (296, 297, 24, 'Smallboat_2_DZE', '2021-09-12 08:48:37', '2021-09-12 08:52:34', 0, '[77,[17784.9,13099.6,56.442]]', '[[[],[]],[["ItemPainkiller3","5Rnd_762x54_Mosin","FoodCanRusPeasEmpty"],[1,1,1]],[[],[]]]', '[["motor",0.307]]', 0.04066, 0.00000, 0), + (297, 298, 24, 'S1203_ambulance_EP1_DZE', '2021-09-12 08:48:38', '2021-09-12 08:52:34', 0, '[105,[9908.13,7661.3,0.019]]', '[[[],[]],[["7Rnd_50AE_Deagle"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.938],["wheel_1_2_steering",0.567],["wheel_2_1_steering",0.954],["wheel_2_2_steering",0.089],["motor",0.433],["palivo",0.993],["glass1",0.664],["glass2",0.612],["glass3",0.92],["glass4",0.235]]', 0.30114, 0.00000, 0), + (298, 299, 24, 'MMT_Civ_DZE', '2021-09-12 08:48:38', '2021-09-12 08:52:34', 0, '[100,[8577.56,14261.3,9.079e-04]]', '[[[],[]],[[],[]],[[],[]]]', '[]', 0.00000, 0.00000, 0), + (299, 300, 24, 'BTR40_MG_TK_INS_EP1_DZE', '2021-09-12 08:48:38', '2021-09-12 08:52:34', 0, '[59,[6438.45,15842,0.006]]', '[[[],[]],[["ItemPainkiller4"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.544],["wheel_1_2_steering",0.893],["wheel_2_1_steering",0.732],["wheel_2_2_steering",0.959],["karoserie",0.411]]', 0.06982, 0.00000, 0), + (300, 301, 24, 'SkodaRed_DZE', '2021-09-12 08:52:59', '2021-09-12 09:57:02', 0, '[136,[6543.21,9602.74,0.005]]', '[[[],[]],[["FoodCanRusPeas"],[1]],[[],[]]]', '[["motor",0.027],["karoserie",0.585],["palivo",0.162],["wheel_1_1_steering",0.536],["wheel_2_1_steering",0.802],["wheel_1_2_steering",0.214],["wheel_2_2_steering",0.174],["glass1",0.49],["glass2",0.006],["glass3",0.316],["glass4",0.159]]', 0.15368, 0.00000, 0), + (306, 307, 24, 'SUV_TK_CIV_EP1_DZE', '2021-09-14 13:59:27', '2021-09-24 13:18:18', 2477, '[59.055,[7019.197,13955.635,0.005]]', '[[["Javelin","BAF_L85A2_RIS_TWS_DZ","M16A4_GL_DZ","M240_CCO_DZ","Mosin_PU_FL_DZ","MK14_ACOG_DZ","MK14_Holo_SD_DZ","M4A1_GL_FL_DZ","AK74_Kobra_SD_DZ"],[2,1,1,1,1,1,1,1,1]],[["ItemMorphine","FoodMuttonCooked","ItemEpinephrine","ItemBandage","ItemSodaPepsi","FoodCanFrankBeans","FoodCanPasta","Javelin","ItemBloodbag","20Rnd_762x51_DMR","ItemKiloHemp","FoodBaconCooked","helipad_army_kit","FishCookedSeaBass","FoodPistachio","FoodMRE","ItemVault","20Rnd_762x51_DMRSD","ItemDocument"],[4,1,1,2,1,2,3,4,1,7,9,1,1,1,2,1,2,4,1]],[["CoyoteBackpackDes_DZE1"],[1]]]', '[]', 0.63744, 1.00000, 0), + (307, 308, 24, 'Ka52Black', '2021-09-21 15:14:35', '2021-09-21 15:17:32', 1718, '[359.776,[937.89,10663.334,28.21]]', '[[[],[]],[[],[]],[[],[]]]', '[]', 0.99771, 1.00000, 0), + (308, 309, 24, 'Lada1_TK_CIV_EP1_DZE', '2021-09-23 10:26:47', '2021-09-23 10:36:26', 0, '[43,[8294.08,16492,0.005]]', '[[[],[]],[["TrashTinCan","ItemWaterBottleSafe","ItemSodaR4z0rEmpty"],[1,1,1]],[[],[]]]', '[["motor",0.316],["karoserie",0.301],["palivo",0.574],["wheel_1_1_steering",0.149],["wheel_2_1_steering",0.333],["wheel_1_2_steering",0.283],["wheel_2_2_steering",0.823],["glass1",0.947],["glass2",0.501],["glass3",0.337],["glass4",0.596]]', 0.82858, 0.00000, 0), + (309, 310, 24, 'SkodaBlue_DZE', '2021-09-23 10:36:59', '2021-09-23 10:39:09', 0, '[159,[10738.2,16087.2,0.005]]', '[]', '[["motor",0.582],["karoserie",0.874],["palivo",0.528],["wheel_1_1_steering",0.651],["wheel_2_1_steering",0.903],["wheel_1_2_steering",0.531],["wheel_2_2_steering",0.865],["glass1",0.563],["glass2",0.801],["glass3",0.389],["glass4",0.553]]', 0.63744, 0.00000, 0), + (310, 311, 24, 'V3S_Camper_DZE', '2021-09-23 10:36:59', '2021-09-23 10:39:09', 0, '[92,[6411.07,9697.89,0.007]]', '[]', '[["wheel_1_1_steering",0.699],["wheel_1_2_steering",0.782],["wheel_1_3_steering",0.703],["wheel_2_1_steering",0.242],["wheel_2_2_steering",0.758],["wheel_2_3_steering",0.634],["motor",0.22],["glass1",0.812],["glass2",0.143],["glass3",0.113],["glass4",0.259]]', 0.43116, 0.00000, 0), + (311, 312, 24, 'Mi17_DES_DZE', '2021-09-23 10:36:59', '2021-09-23 10:39:09', 0, '[14,[12090.8,16247.7,0.487]]', '[]', '[["glass1",0.768],["glass2",0.807],["glass3",0.538],["glass4",0.782],["glass5",0.833],["glass6",0.371],["motor",0.461],["elektronika",0.455],["mala vrtule",0.817],["velka vrtule",0.364]]', 0.04896, 0.00000, 0), + (312, 313, 24, 'VolhaLimo_TK_CIV_EP1_DZE', '2021-09-23 10:36:59', '2021-09-23 10:39:09', 0, '[154,[14227.3,7345.17,0.002]]', '[]', '[["wheel_1_1_steering",0.357],["wheel_1_2_steering",0.993],["wheel_2_1_steering",0.53],["wheel_2_2_steering",0.266],["palivo",0.798],["motor",0.155],["glass1",0.681],["glass2",0.595],["glass3",0.915],["glass4",0.855],["karoserie",0.744]]', 0.37339, 0.00000, 0), + (313, 314, 24, 'T810_ACR_REPAIR_DZE', '2021-09-23 10:36:59', '2021-09-23 10:39:09', 0, '[141,[6274.53,11031.4,9.341e-04]]', '[]', '[["wheel_1_1_steering",0.09],["wheel_1_2_steering",0.729],["wheel_1_3_steering",0.023],["wheel_2_1_steering",0.722],["wheel_2_2_steering",0.012],["wheel_2_3_steering",0.075],["palivo",0.971],["glass1",0.708],["glass2",0.943],["glass3",0.845],["glass4",0.669],["motor",0.765],["karoserie",0.601]]', 0.86960, 0.00000, 0), + (314, 315, 24, 'Smallboat_2_DZE', '2021-09-23 10:37:00', '2021-09-23 10:39:09', 0, '[151,[14733.5,19069,90.948]]', '[]', '[["motor",0.545]]', 0.36813, 0.00000, 0), + (315, 316, 24, 'Fishing_Boat_DZE', '2021-09-23 10:37:00', '2021-09-23 10:39:09', 0, '[141,[16734.4,6265.75,32.061]]', '[]', '[["motor",0.016]]', 0.30303, 0.00000, 0), + (316, 317, 24, 'Hummer_DZE', '2021-09-23 10:37:00', '2021-09-23 10:39:09', 0, '[138,[2923.32,7638.85,0.008]]', '[]', '[["karoserie",0.216],["motor",0.073],["palivo",0.688],["glass1",0.817],["glass2",0.727],["glass3",0.662],["glass4",0.858],["levy predni tlumic",0.7],["levy zadni tlumic",0.314],["pravy predni tlumic",0.31],["pravy zadni tlumic",0.524],["sklo predni P",0.045],["sklo predni L",0.955]]', 0.42200, 0.00000, 0), + (317, 318, 24, 'Ikarus_DZE', '2021-09-23 10:37:01', '2021-09-23 10:39:09', 0, '[15,[6208.09,10775.9,0.014]]', '[]', '[["glass5",0.679],["glass6",0.288],["motor",0.098],["karoserie",0.599],["palivo",0.197],["wheel_1_1_steering",0.272],["wheel_2_1_steering",0.29],["wheel_1_2_steering",0.571],["wheel_2_2_steering",0.848],["glass1",0.511],["glass2",0.181],["glass3",0.807],["glass4",0.472]]', 0.81242, 0.00000, 0), + (318, 319, 24, 'datsun1_green_open_DZE', '2021-09-23 10:37:01', '2021-09-23 10:39:09', 0, '[86,[10069.4,10498.8,0.047]]', '[]', '[["motor",0.262],["sklo predni P",0.967],["karoserie",0.594],["palivo",0.426]]', 0.37467, 0.00000, 0), + (319, 320, 24, 'JetSkiYanahui_Case_Blue', '2021-09-23 10:37:01', '2021-09-23 10:39:09', 0, '[59,[13474.5,18886,38.458]]', '[]', '[["motor",0.007]]', 0.38960, 0.00000, 0), + (320, 321, 24, 'Mi17_GREEN_DZE', '2021-09-23 10:37:01', '2021-09-23 10:39:09', 0, '[61,[18542,16890.7,0.481]]', '[]', '[["glass1",0.523],["glass2",0.767],["glass3",0.625],["glass4",0.084],["glass5",0.386],["glass6",0.064],["motor",0.422],["elektronika",0.281],["mala vrtule",0.052],["velka vrtule",0.269]]', 0.14386, 0.00000, 0), + (321, 322, 24, 'Volha_1_TK_CIV_EP1_DZE', '2021-09-23 10:37:01', '2021-09-23 10:39:09', 0, '[152,[5849,15359.2,3.815e-06]]', '[]', '[["wheel_1_1_steering",0.519],["wheel_1_2_steering",0.463],["wheel_2_1_steering",0.642],["wheel_2_2_steering",0.643],["palivo",0.339],["motor",0.562],["glass1",0.674],["glass2",0.69],["glass3",0.921],["glass4",0.681],["karoserie",0.819]]', 0.26443, 0.00000, 0), + (322, 323, 24, 'ATV_CIV_Grey_CP_DZE', '2021-09-23 10:37:02', '2021-09-23 10:39:09', 0, '[88,[10389.2,7623.35,0]]', '[]', '[["motor",0.016],["palivo",0.879],["wheel_1_1_steering",0.732],["wheel_1_2_steering",0.514],["wheel_2_1_steering",0.61],["wheel_2_2_steering",0.914],["karoserie",0.195]]', 0.13269, 0.00000, 0), + (323, 324, 24, 'MH6J_DZ', '2021-09-23 10:37:02', '2021-09-23 10:39:09', 0, '[86,[16447.3,13444.3,0.003]]', '[]', '[["glass1",0.68],["glass2",0.863],["glass3",0.853],["glass4",0.732],["motor",0.072],["elektronika",0.599],["mala vrtule",0.261],["velka vrtule",0.385],["munice",0.975]]', 0.32939, 0.00000, 0), + (324, 325, 24, 'UH60M_MEV_EP1_DZ', '2021-09-23 10:37:02', '2021-09-23 10:39:09', 0, '[166,[11409.9,15844,0.011]]', '[]', '[["glass1",0.883],["glass2",0.276],["glass3",0.372],["glass4",0.602],["motor",0.593],["mala vrtule",0.575],["velka vrtule",0.949],["munice",0.572]]', 0.88400, 0.00000, 0), + (325, 326, 24, 'SUV_Charcoal', '2021-09-23 10:37:03', '2021-09-23 10:39:09', 0, '[165,[3453.23,14055,0.026]]', '[]', '[["wheel_1_1_steering",0.74],["wheel_1_2_steering",0.234],["wheel_2_1_steering",0.686],["wheel_2_2_steering",0.422],["palivo",0.932],["motor",0.907],["glass1",0.97],["glass2",0.745],["glass3",0.804],["glass4",0.276],["karoserie",0.096]]', 0.57537, 0.00000, 0), + (326, 327, 24, 'T810_ACR_REPAIR_DES_DZE', '2021-09-23 10:37:03', '2021-09-23 10:39:09', 0, '[163,[15718.1,13007.4,0.006]]', '[]', '[["wheel_1_1_steering",0.861],["wheel_1_2_steering",0.883],["wheel_1_3_steering",0.392],["wheel_2_1_steering",0.449],["wheel_2_2_steering",0.554],["wheel_2_3_steering",0.746],["palivo",0.39],["glass1",0.188],["glass2",0.072],["glass3",0.24],["glass4",0.798],["motor",0.292],["karoserie",0.193]]', 0.18442, 0.00000, 0), + (327, 328, 24, 'Ka60_GL_PMC_DZE', '2021-09-23 10:37:03', '2021-09-23 10:39:09', 0, '[64,[4763.02,8199.08,0.136]]', '[]', '[["mala vrtule",0.905],["motor",0.063],["elektronika",0.118],["velka vrtule",0.228]]', 0.34490, 0.00000, 0), + (328, 329, 24, 'Mi17_medevac_RU_DZ', '2021-09-23 10:37:04', '2021-09-24 11:01:44', 0, '[44.016,[7873.376,15045.951,-0.044]]', '[[[],[]],[[],[]],[[],[]]]', '[["glass1",0.441],["glass2",0.445],["glass3",0.969],["glass4",0.406],["glass5",0.465],["glass6",0.862],["motor",0.504],["elektronika",0.709],["mala vrtule",0.441],["velka vrtule",0.772]]', 0.41200, 0.00000, 0), + (329, 330, 24, 'UH1H_BLACK_DZE', '2021-09-23 10:37:04', '2021-09-23 10:39:09', 0, '[1,[10690.4,12567.2,0.009]]', '[]', '[["glass1",0.185],["glass2",0.837],["glass3",0.533],["glass4",0.368],["glass5",0.916],["motor",0.417],["elektronika",0.134],["mala vrtule",0.452],["velka vrtule",0.416]]', 0.68505, 0.00000, 0), + (330, 331, 24, 'MTVR_DES_EP1_DZE', '2021-09-23 10:37:04', '2021-09-23 10:39:09', 0, '[39,[15022.6,13784.2,2.384e-07]]', '[]', '[["wheel_1_1_steering",0.939],["wheel_1_2_steering",0.407],["wheel_1_3_steering",0.1],["wheel_2_1_steering",0.422],["wheel_2_2_steering",0.084],["wheel_2_3_steering",0.943],["palivo",0.593],["motor",0.605],["glass1",0.367],["glass2",0.758],["glass3",0.237]]', 0.84269, 0.00000, 0), + (331, 332, 24, 'CH_47F_EP1_GREY_DZE', '2021-09-23 10:37:04', '2021-09-23 10:39:09', 0, '[155,[3341.12,8800.75,0.092]]', '[]', '[["motor",0.279],["sklo predni P",0.235],["sklo predni L",0.2],["glass3",0.596],["glass4",0.145]]', 0.47248, 0.00000, 0), + (332, 333, 24, 'Ikarus_TK_CIV_EP1_DZE', '2021-09-23 10:37:05', '2021-09-23 10:39:09', 0, '[81,[10340.7,9469.47,0.039]]', '[]', '[["glass5",0.264],["glass6",0.819],["motor",0.975],["karoserie",0.255],["palivo",0.052],["wheel_1_1_steering",0.128],["wheel_2_1_steering",0.925],["wheel_1_2_steering",0.7],["wheel_2_2_steering",0.19],["glass1",0.175],["glass2",0.549],["glass3",0.427],["glass4",0.451]]', 0.00162, 0.00000, 0), + (333, 334, 24, 'MH6J_DZ', '2021-09-23 10:37:05', '2021-09-23 10:39:09', 0, '[99,[4887.92,6035.37,0.006]]', '[]', '[["glass1",0.617],["glass2",0.762],["glass3",0.258],["glass4",0.844],["motor",0.261],["elektronika",0.331],["mala vrtule",0.807],["velka vrtule",0.435],["munice",0.859]]', 0.34996, 0.00000, 0), + (334, 335, 24, 'SUV_Green', '2021-09-23 10:37:05', '2021-09-23 10:39:09', 0, '[65,[10396.8,16551.5,0.027]]', '[]', '[["wheel_1_1_steering",0.345],["wheel_1_2_steering",0.239],["wheel_2_1_steering",0.862],["wheel_2_2_steering",0.224],["palivo",0.332],["motor",0.234],["glass1",0.042],["glass2",0.025],["glass3",0.997],["glass4",0.728],["karoserie",0.31]]', 0.02155, 0.00000, 0), + (335, 336, 24, 'MtvrRefuel_DES_EP1_DZ', '2021-09-23 10:37:05', '2021-09-23 10:39:09', 0, '[178,[9229.75,15606.8,2.804e-04]]', '[]', '[["wheel_1_1_steering",0.247],["wheel_1_2_steering",0.719],["wheel_1_3_steering",0.958],["wheel_2_1_steering",0.261],["wheel_2_2_steering",0.334],["wheel_2_3_steering",0.977],["palivo",0.681],["motor",0.56],["glass1",0.108],["glass2",0.117],["glass3",0.429]]', 0.26214, 0.00000, 0), + (336, 337, 24, 'V3S_Camper_DZE', '2021-09-23 10:37:06', '2021-09-23 10:39:09', 0, '[163,[12767.4,11651.6,0.083]]', '[]', '[["wheel_1_1_steering",0.858],["wheel_1_2_steering",0.636],["wheel_1_3_steering",0.562],["wheel_2_1_steering",0.243],["wheel_2_2_steering",0.072],["wheel_2_3_steering",0.268],["motor",0.706],["glass1",0.08],["glass2",0.769],["glass3",0.035],["glass4",0.518]]', 0.65436, 0.00000, 0), + (337, 338, 24, 'Tractor_DZE', '2021-09-23 10:37:06', '2021-09-23 10:39:09', 0, '[38,[5814.44,15536.1,0.005]]', '[]', '[["motor",0.96],["karoserie",0.107],["palivo",0.178],["glass1",0.675],["glass2",0.811],["glass3",0.571],["glass4",0.904]]', 0.66986, 0.00000, 0), + (338, 339, 24, 'UH1H_SAR_DZE', '2021-09-23 10:37:06', '2021-09-23 10:39:09', 0, '[176,[6456.88,12779.7,0.003]]', '[]', '[["glass1",0.091],["glass2",0.316],["glass3",0.875],["glass4",0.465],["glass5",0.994],["motor",0.016],["elektronika",0.098],["mala vrtule",0.792],["velka vrtule",0.49]]', 0.08565, 0.00000, 0), + (339, 340, 24, 'Mini_Cooper_DZE', '2021-09-23 10:37:07', '2021-09-23 10:39:09', 0, '[32,[13789.6,13588,0.021]]', '[]', '[["glass1",0.92],["glass2",0.64],["glass3",0.549],["glass4",0.814],["karoserie",0.872],["palivo",0.11],["wheel_1_1_steering",0.989],["wheel_1_2_steering",0.66],["wheel_2_1_steering",0.064],["wheel_2_2_steering",0.155],["motor",0.663]]', 0.11963, 0.00000, 0), + (340, 341, 24, 'Zodiac_DZE', '2021-09-23 10:37:07', '2021-09-23 10:39:09', 0, '[23,[14086,17421.2,11.027]]', '[]', '[["motor",0.192]]', 0.30164, 0.00000, 0), + (341, 342, 24, 'JetSkiYanahui_Case_Yellow', '2021-09-23 10:37:07', '2021-09-23 10:39:09', 0, '[162,[1279.31,19106.5,91.23]]', '[]', '[["motor",0.783]]', 0.39297, 0.00000, 0), + (342, 343, 24, 'UAZ_RU_DZE', '2021-09-23 10:37:08', '2021-09-23 10:39:09', 0, '[160,[9570.74,15821.7,0.054]]', '[]', '[["glass1",0.882],["glass2",0.547],["glass3",0.92],["glass4",0.222],["wheel_1_1_steering",0.911],["wheel_1_2_steering",0.912],["wheel_2_1_steering",0.75],["wheel_2_2_steering",0.195],["motor",0.766],["karoserie",0.933],["palivo",0.195]]', 0.66638, 0.00000, 0), + (343, 344, 24, 'ScrapAPC_DZE', '2021-09-23 10:37:08', '2021-09-23 10:39:09', 0, '[144,[5858.54,14452.9,0.037]]', '[]', '[["karoserie",0.425],["palivo",0.519],["wheel_1_1_steering",0.951],["wheel_1_2_steering",0.039],["wheel_2_1_steering",0.22],["wheel_2_2_steering",0.459],["motor",0.173]]', 0.25168, 0.00000, 0), + (344, 345, 24, 'UAZ_Unarmed_TK_CIV_EP1_DZE', '2021-09-23 10:37:08', '2021-09-23 10:39:09', 0, '[26,[5917.93,8705.19,0.006]]', '[]', '[["glass1",0.759],["glass2",0.412],["glass3",0.519],["glass4",1.0],["wheel_1_1_steering",0.201],["wheel_1_2_steering",0.399],["wheel_2_1_steering",0.264],["wheel_2_2_steering",0.902],["motor",0.439],["karoserie",0.615],["palivo",0.285]]', 0.08066, 0.00000, 0), + (345, 346, 24, 'Volha_2_TK_CIV_EP1_DZE', '2021-09-23 10:37:09', '2021-09-23 10:39:09', 0, '[140,[12995.4,9886.52,0.005]]', '[]', '[["wheel_1_1_steering",0.02],["wheel_1_2_steering",0.839],["wheel_2_1_steering",0.1],["wheel_2_2_steering",0.361],["palivo",0.359],["motor",0.704],["glass1",0.25],["glass2",0.625],["glass3",0.564],["glass4",0.505],["karoserie",0.934]]', 0.83150, 0.00000, 0), + (346, 347, 24, 'datsun1_civil_2_covered_DZE', '2021-09-23 10:37:09', '2021-09-23 10:39:09', 0, '[163,[4073.41,14493.6,0.024]]', '[]', '[["motor",0.581],["karoserie",0.106],["palivo",0.495],["wheel_1_1_steering",0.465],["wheel_2_1_steering",0.323],["wheel_1_2_steering",0.192],["wheel_2_2_steering",0.058],["glass1",0.47],["glass2",0.067]]', 0.83890, 0.00000, 0), + (347, 348, 24, 'Fishing_Boat_DZE', '2021-09-23 10:37:09', '2021-09-23 10:39:09', 0, '[42,[13398,16047.7,0.357]]', '[]', '[["motor",0.212]]', 0.49836, 0.00000, 0), + (348, 349, 24, 'RHIB_DZE', '2021-09-23 10:37:09', '2021-09-23 10:39:09', 0, '[19,[3713.88,12586.7,20.457]]', '[]', '[["motor",0.222]]', 0.34942, 0.00000, 0), + (349, 350, 24, 'CH_47F_EP1_DZE', '2021-09-23 10:37:10', '2021-09-23 10:39:09', 0, '[103,[16646.4,14739.8,0.08]]', '[]', '[["motor",0.064],["sklo predni P",0.517],["sklo predni L",0.383],["glass3",0.345],["glass4",0.501]]', 0.68683, 0.00000, 0), + (350, 351, 24, 'ATV_CIV_Purple_CP_DZE', '2021-09-23 10:37:10', '2021-09-23 10:39:09', 0, '[51,[5881.67,13684.7,0]]', '[]', '[["motor",0.209],["palivo",0.06],["wheel_1_1_steering",0.033],["wheel_1_2_steering",0.375],["wheel_2_1_steering",0.472],["wheel_2_2_steering",0.002],["karoserie",0.851]]', 0.03007, 0.00000, 0), + (351, 352, 24, 'GLT_M300_ST_DZE', '2021-09-23 10:37:10', '2021-09-23 10:39:09', 0, '[55,[8974.53,5427.98,0.008]]', '[]', '[["motor",0.258],["karoserie",0.609],["palivo",0.08],["wheel_1_1_steering",0.492],["wheel_2_1_steering",0.231],["wheel_1_2_steering",0.723],["wheel_2_2_steering",0.928],["glass1",0.592],["glass2",0.584],["glass3",0.809],["glass4",0.696]]', 0.82565, 0.00000, 0), + (352, 353, 24, 'AH6X_DZ', '2021-09-23 10:37:11', '2021-09-23 10:39:09', 0, '[109,[6428.14,14629.9,0.002]]', '[]', '[["glass1",0.015],["glass2",0.359],["glass3",0.548],["glass4",0.732],["motor",0.944],["elektronika",0.719],["mala vrtule",0.757],["velka vrtule",0.949],["munice",0.932]]', 0.29009, 0.00000, 0), + (353, 354, 24, 'hilux1_civil_1_open_DZE', '2021-09-23 10:37:11', '2021-09-23 10:39:09', 0, '[133,[6995.85,9520.7,0.007]]', '[]', '[["motor",0.289],["karoserie",0.54],["palivo",0.807],["wheel_1_1_steering",0.836],["wheel_2_1_steering",0.132],["wheel_1_2_steering",0.63],["wheel_2_2_steering",0.832],["glass1",0.893],["glass2",0.496],["glass3",0.504],["glass4",0.213]]', 0.09788, 0.00000, 0), + (354, 355, 24, 'KamazRefuel_DZ', '2021-09-23 10:37:11', '2021-09-23 10:39:09', 0, '[38,[9099,3539.89,0.17]]', '[]', '[["wheel_1_1_steering",0.751],["wheel_2_1_steering",0.78],["wheel_1_3_steering",0.844],["wheel_2_3_steering",0.121],["wheel_1_2_steering",0.452],["wheel_2_2_steering",0.033],["motor",0.584],["karoserie",0.928],["palivo",0.992],["glass1",0.664],["glass2",0.437],["glass3",0.401],["glass4",0.416]]', 0.50463, 0.00000, 0), + (355, 356, 24, 'UAZ_Unarmed_TK_CIV_EP1_DZE', '2021-09-23 10:37:11', '2021-09-23 10:39:09', 0, '[59,[16232.9,5612.38,0.16]]', '[]', '[["glass1",0.069],["glass2",0.218],["glass3",0.397],["glass4",0.667],["wheel_1_1_steering",0.257],["wheel_1_2_steering",0.158],["wheel_2_1_steering",0.033],["wheel_2_2_steering",0.236],["motor",0.873],["karoserie",0.04],["palivo",0.615]]', 0.37585, 0.00000, 0), + (356, 357, 24, 'ArmoredSUV_PMC_DZE', '2021-09-23 10:37:12', '2021-09-23 10:39:09', 0, '[142,[8282.23,5205.2,0.08]]', '[]', '[["wheel_1_1_steering",0.32],["wheel_1_2_steering",0.403],["wheel_2_1_steering",0.529],["wheel_2_2_steering",0.76],["palivo",0.423],["motor",0.839],["glass1",0.274],["glass2",0.361],["glass3",0.169],["glass4",0.831],["karoserie",0.702]]', 0.22784, 0.00000, 0), + (357, 358, 24, 'V3S_RA_TK_GUE_EP1_DZE', '2021-09-23 10:37:12', '2021-09-23 10:39:09', 0, '[154,[5659.22,15416.1,0.008]]', '[]', '[["wheel_1_1_steering",0.518],["wheel_1_2_steering",0.716],["wheel_1_3_steering",0.262],["wheel_2_1_steering",0.831],["wheel_2_2_steering",0.743],["wheel_2_3_steering",0.685],["motor",0.739],["glass1",0.392],["glass2",0.295],["glass3",0.85],["glass4",0.453]]', 0.05508, 0.00000, 0), + (358, 359, 24, 'ATV_CIV_Black_CP_DZE', '2021-09-23 10:37:12', '2021-09-23 10:39:09', 0, '[24,[15432.4,13519.8,0.009]]', '[]', '[["motor",0.542],["palivo",0.952],["wheel_1_1_steering",0.797],["wheel_1_2_steering",0.355],["wheel_2_1_steering",0.496],["wheel_2_2_steering",0.574],["karoserie",0.829]]', 0.34701, 0.00000, 0), + (359, 360, 24, 'HMMWV_Ambulance_CZ_DES_EP1_DZE', '2021-09-23 10:37:13', '2021-09-23 10:39:09', 0, '[66,[10359.5,7716.79,3.395e-04]]', '[]', '[["glass1",0.548],["glass2",0.572],["glass3",0.514],["glass4",0.709],["wheel_1_1_steering",0.944],["wheel_1_2_steering",0.67],["wheel_2_1_steering",0.118],["wheel_2_2_steering",0.952],["engine",0.355],["karoserie",0.985]]', 0.09836, 0.00000, 0), + (360, 361, 24, 'GNT_C185U_DZ', '2021-09-23 10:37:13', '2021-09-23 10:39:09', 0, '[16.603,[3930.44,4310.77,0.191]]', '[]', '[]', 0.06846, 0.00000, 0), + (361, 362, 24, 'T810A_ACR_REFUEL_DES_DZE', '2021-09-23 10:37:13', '2021-09-23 10:39:09', 0, '[22,[9248.94,5582.9,0.021]]', '[]', '[["wheel_1_1_steering",0.723],["wheel_1_2_steering",0.586],["wheel_1_3_steering",0.588],["wheel_2_1_steering",0.219],["wheel_2_2_steering",0.646],["wheel_2_3_steering",0.105],["palivo",0.665],["glass1",0.654],["glass2",0.743],["glass3",0.256],["glass4",0.722],["motor",0.456],["karoserie",0.121]]', 0.58483, 0.00000, 0), + (362, 363, 24, 'Mi17_BLUE_DZE', '2021-09-23 10:37:13', '2021-09-23 10:39:09', 0, '[20,[17060.3,17455.4,0.48]]', '[]', '[["glass1",0.774],["glass2",0.578],["glass3",0.778],["glass4",0.083],["glass5",0.026],["glass6",0.467],["motor",0.642],["elektronika",0.466],["mala vrtule",0.081],["velka vrtule",0.76]]', 0.93825, 0.00000, 0), + (363, 364, 24, 'PBX_DZE', '2021-09-23 10:37:13', '2021-09-23 10:39:09', 0, '[81,[1820.63,6013.3,90.639]]', '[]', '[["motor",0.238]]', 0.93633, 0.00000, 0), + (364, 365, 24, 'Mi17_UN_CDF_EP1_DZE', '2021-09-23 10:37:14', '2021-09-23 10:39:09', 0, '[147,[15671.1,15933.5,0.484]]', '[]', '[["glass1",0.925],["glass2",0.648],["glass3",0.629],["glass4",0.844],["glass5",0.777],["glass6",0.174],["motor",0.116],["elektronika",0.805],["mala vrtule",0.657],["velka vrtule",0.14]]', 0.40457, 0.00000, 0), + (365, 366, 24, 'GAZ_Vodnik_MedEvac_DZE', '2021-09-23 10:37:15', '2021-09-23 10:39:09', 0, '[40,[6828.55,9727.87,0.138]]', '[]', '[["wheel_1_1_steering",0.654],["wheel_1_2_steering",0.812],["wheel_2_1_steering",0.277],["wheel_2_2_steering",0.461],["palivo",0.742],["glass1",0.624],["glass2",0.707],["glass3",0.528],["glass4",0.435],["motor",0.26]]', 0.46617, 0.00000, 0), + (366, 367, 24, 'TT650_Ins_DZE', '2021-09-23 10:37:15', '2021-09-23 10:39:09', 0, '[67,[2027.41,10300.4,0.005]]', '[]', '[["karoserie",0.774],["palivo",0.884],["Pravy predni tlumic",0.419],["Pravy zadni tlumic",0.04]]', 0.97828, 0.00000, 0), + (367, 368, 24, 'LandRover_Special_CZ_EP1_DZE', '2021-09-23 10:37:16', '2021-09-23 10:39:09', 0, '[64,[9226.87,15696.6,0.002]]', '[]', '[["motor",0.495],["palivo",0.337],["wheel_1_1_steering",0.732],["wheel_1_2_steering",0.426],["wheel_2_1_steering",0.013],["wheel_2_2_steering",0.553],["karoserie",0.723]]', 0.70634, 0.00000, 0), + (368, 369, 24, 'AH6X_DZ', '2021-09-23 10:37:16', '2021-09-23 10:39:09', 0, '[97,[15353.8,14253.6,0.008]]', '[]', '[["glass1",0.95],["glass2",0.119],["glass3",0.281],["glass4",0.221],["motor",0.207],["elektronika",0.046],["mala vrtule",0.634],["velka vrtule",0.5],["munice",0.406]]', 0.05878, 0.00000, 0), + (369, 370, 24, 'pook_H13_civ_yellow_DZE', '2021-09-23 10:37:17', '2021-09-23 10:39:09', 0, '[151,[4512.49,4393.98,3.815e-04]]', '[]', '[["glass1",0.94],["engine",0.463],["mala vrtule",0.313],["velka vrtule",0.184]]', 0.10766, 0.00000, 0), + (370, 371, 24, 'Fishing_Boat_DZE', '2021-09-23 10:37:17', '2021-09-23 10:39:09', 0, '[44,[11855.7,15441.4,1.136]]', '[]', '[["motor",0.709]]', 0.79695, 0.00000, 0), + (371, 372, 24, 'Mi17_medevac_Ins_DZ', '2021-09-23 10:37:17', '2021-09-23 10:39:09', 0, '[58,[14492.9,16913.4,0.479]]', '[]', '[["glass1",0.1],["glass2",0.474],["glass3",0.464],["glass4",0.109],["glass5",0.108],["glass6",0.037],["motor",0.749],["elektronika",0.277],["mala vrtule",0.605],["velka vrtule",0.911]]', 0.51037, 0.00000, 0), + (372, 373, 24, 'V3S_RA_TK_GUE_EP1_DZE', '2021-09-23 10:37:17', '2021-09-23 10:39:09', 0, '[11,[13006.7,12003,0.028]]', '[]', '[["wheel_1_1_steering",0.225],["wheel_1_2_steering",0.603],["wheel_1_3_steering",0.72],["wheel_2_1_steering",0.717],["wheel_2_2_steering",0.918],["wheel_2_3_steering",0.854],["motor",0.605],["glass1",0.868],["glass2",0.684],["glass3",0.088],["glass4",0.156]]', 0.55589, 0.00000, 0), + (373, 374, 24, 'car_sedan_DZE', '2021-09-23 10:37:17', '2021-09-23 10:39:09', 0, '[120,[10171.4,13986,0.043]]', '[]', '[["motor",0.657],["karoserie",0.678],["palivo",0.148],["wheel_1_1_steering",0.331],["wheel_2_1_steering",0.27],["wheel_1_2_steering",0.362],["wheel_2_2_steering",0.946],["glass1",0.532],["glass2",0.633],["glass3",0.156],["glass4",0.592]]', 0.09227, 0.00000, 0), + (374, 375, 24, 'pook_medevac_CDF_DZE', '2021-09-23 10:37:17', '2021-09-23 10:39:09', 0, '[37,[16251.4,15161.7,0.004]]', '[]', '[["glass1",0.333],["engine",0.532],["mala vrtule",0.753],["velka vrtule",0.252]]', 0.76503, 0.00000, 0), + (375, 376, 24, 'Pickup_PK_TK_GUE_EP1_DZE', '2021-09-23 10:37:18', '2021-09-23 10:39:09', 0, '[11,[15232.9,13486.4,0.006]]', '[]', '[["motor",0.287],["karoserie",0.607],["palivo",0.643],["wheel_1_1_steering",0.402],["wheel_2_1_steering",0.146],["wheel_1_2_steering",0.542],["wheel_2_2_steering",0.668],["glass1",0.946],["glass2",0.732]]', 0.00018, 0.00000, 0), + (376, 377, 24, 'pook_transport_DZE', '2021-09-23 10:37:18', '2021-09-23 10:39:09', 0, '[173,[16636.1,18102,1.602e-04]]', '[]', '[["glass1",0.325],["engine",0.145],["mala vrtule",0.153],["velka vrtule",0.483]]', 0.98874, 0.00000, 0), + (377, 378, 24, 'JetSkiYanahui_Case_Red', '2021-09-23 10:37:18', '2021-09-23 10:39:09', 0, '[73,[17334.9,6983.68,25.777]]', '[]', '[["motor",0.079]]', 0.23172, 0.00000, 0), + (378, 379, 24, 'GLT_M300_LT_DZE', '2021-09-23 10:37:18', '2021-09-23 10:39:09', 0, '[11,[10623.3,4880.54,0]]', '[]', '[["motor",0.072],["karoserie",0.456],["palivo",0.052],["wheel_1_1_steering",0.699],["wheel_2_1_steering",0.388],["wheel_1_2_steering",0.654],["wheel_2_2_steering",0.789],["glass1",0.155],["glass2",0.922],["glass3",0.324],["glass4",0.266]]', 0.20632, 0.00000, 0), + (379, 380, 24, 'UAZ_Unarmed_TK_EP1_DZE', '2021-09-23 10:37:19', '2021-09-23 10:39:09', 0, '[33,[6351.53,15415.9,0.011]]', '[]', '[["glass1",0.261],["glass2",0.973],["glass3",0.254],["glass4",0.196],["wheel_1_1_steering",0.167],["wheel_1_2_steering",0.065],["wheel_2_1_steering",0.909],["wheel_2_2_steering",0.053],["motor",0.813],["karoserie",0.921],["palivo",0.317]]', 0.74144, 0.00000, 0), + (380, 381, 24, 'UH1H_DES_DZE', '2021-09-23 10:37:19', '2021-09-23 10:39:09', 0, '[57,[12699.2,9608.73,0.016]]', '[]', '[["glass1",0.088],["glass2",0.031],["glass3",0.44],["glass4",0.292],["glass5",0.135],["motor",0.423],["elektronika",0.99],["mala vrtule",0.16],["velka vrtule",0.938]]', 0.10595, 0.00000, 0), + (381, 382, 24, 'JetSkiYanahui_Case_Red', '2021-09-23 10:37:19', '2021-09-23 10:39:09', 0, '[11,[15633.7,18080.8,42.812]]', '[]', '[["motor",0.566]]', 0.18392, 0.00000, 0), + (382, 383, 24, 'UAZ_INS_DZE', '2021-09-23 10:37:19', '2021-09-23 10:39:09', 0, '[118,[12752.8,9644.62,0.012]]', '[]', '[["glass1",0.723],["glass2",0.796],["glass3",0.732],["glass4",0.812],["wheel_1_1_steering",0.939],["wheel_1_2_steering",0.417],["wheel_2_1_steering",0.539],["wheel_2_2_steering",0.776],["motor",0.49],["karoserie",0.879],["palivo",0.291]]', 0.04973, 0.00000, 0), + (383, 384, 24, 'Volha_1_TK_CIV_EP1_DZE', '2021-09-23 10:37:20', '2021-09-23 10:39:09', 0, '[63,[8536.65,16187.6,0.024]]', '[]', '[["wheel_1_1_steering",0.633],["wheel_1_2_steering",0.705],["wheel_2_1_steering",0.001],["wheel_2_2_steering",0.747],["palivo",0.739],["motor",0.259],["glass1",0.652],["glass2",0.183],["glass3",0.637],["glass4",0.151],["karoserie",0.46]]', 0.31270, 0.00000, 0), + (384, 385, 24, 'CH53_DZE', '2021-09-23 10:37:20', '2021-09-23 10:39:09', 0, '[170,[8227.68,16498.5,-0.589]]', '[]', '[["palivo",0.997],["motor",0.665],["elektronika",0.288],["mala vrtule",0.75],["velka vrtule",0.178]]', 0.94669, 0.00000, 0), + (385, 386, 24, 'HMMWV_DZ', '2021-09-23 10:37:20', '2021-09-23 10:39:09', 0, '[107,[15584.5,13162.9,0.01]]', '[]', '[["glass1",0.802],["glass2",0.822],["glass3",0.47],["glass4",0.409],["wheel_1_1_steering",0.587],["wheel_1_2_steering",0.075],["wheel_2_1_steering",0.593],["wheel_2_2_steering",0.237],["karoserie",0.004]]', 0.32836, 0.00000, 0), + (386, 387, 24, 'pook_H13_civ_slate_DZE', '2021-09-23 10:37:20', '2021-09-23 10:39:09', 0, '[40,[3249.79,7274.42,0.001]]', '[]', '[["glass1",0.994],["engine",0.887],["mala vrtule",0.698],["velka vrtule",0.297]]', 0.49043, 0.00000, 0), + (387, 388, 24, 'Zodiac_DZE', '2021-09-23 10:37:20', '2021-09-23 10:39:09', 0, '[177,[5524,17464.3,40.238]]', '[]', '[["motor",0.247]]', 0.66459, 0.00000, 0), + (388, 389, 24, 'SkodaRed_DZE', '2021-09-23 10:37:20', '2021-09-23 10:39:09', 0, '[130,[3395.74,8848.12,8.583e-04]]', '[]', '[["motor",0.617],["karoserie",0.71],["palivo",0.013],["wheel_1_1_steering",0.671],["wheel_2_1_steering",0.445],["wheel_1_2_steering",0.455],["wheel_2_2_steering",0.266],["glass1",0.523],["glass2",0.637],["glass3",0.312],["glass4",0.929]]', 0.74900, 0.00000, 0), + (389, 390, 24, 'SUV_Silver', '2021-09-23 10:37:21', '2021-09-23 10:39:09', 0, '[47,[14627.5,16673.7,0.008]]', '[]', '[["wheel_1_1_steering",0.853],["wheel_1_2_steering",0.188],["wheel_2_1_steering",0.645],["wheel_2_2_steering",0.193],["palivo",0.943],["motor",0.99],["glass1",0.364],["glass2",0.682],["glass3",0.733],["glass4",0.084],["karoserie",0.634]]', 0.67111, 0.00000, 0), + (390, 391, 24, 'pook_medevac_DZE', '2021-09-23 10:37:21', '2021-09-23 10:39:09', 0, '[125,[7198,13028.7,0.007]]', '[]', '[["glass1",0.497],["engine",0.306],["mala vrtule",0.647],["velka vrtule",0.612]]', 0.74560, 0.00000, 0), + (391, 392, 24, 'T810A_ACR_OPEN_DZE', '2021-09-23 10:37:22', '2021-09-23 10:39:09', 0, '[31,[8100.28,12775.7,0.094]]', '[]', '[["wheel_1_1_steering",0.856],["wheel_1_2_steering",0.425],["wheel_1_3_steering",0.969],["wheel_2_1_steering",0.306],["wheel_2_2_steering",0.671],["wheel_2_3_steering",0.197],["palivo",0.135],["glass1",0.191],["glass2",0.393],["glass3",0.497],["glass4",0.263],["motor",0.575],["karoserie",0.653]]', 0.72627, 0.00000, 0), + (392, 393, 24, 'GLT_M300_ST_DZE', '2021-09-23 10:37:22', '2021-09-23 10:39:09', 0, '[124,[12813.1,9575.91,8.278e-04]]', '[]', '[["motor",0.666],["karoserie",0.724],["palivo",0.452],["wheel_1_1_steering",0.598],["wheel_2_1_steering",0.488],["wheel_1_2_steering",0.865],["wheel_2_2_steering",0.703],["glass1",0.876],["glass2",0.689],["glass3",0.783],["glass4",0.542]]', 0.95368, 0.00000, 0), + (393, 394, 24, 'T810A_PKT_ACR_DZE', '2021-09-23 10:37:22', '2021-09-23 10:39:09', 0, '[15,[14838.5,13917.5,0.002]]', '[]', '[["wheel_1_1_steering",0.71],["wheel_1_2_steering",0.37],["wheel_1_3_steering",0.304],["wheel_2_1_steering",0.629],["wheel_2_2_steering",0.611],["wheel_2_3_steering",0.56],["glass1",0.375],["glass2",0.637],["glass3",0.422],["motor",0.056],["sklo predni L",0.053],["karoserie",0.351]]', 0.91679, 0.00000, 0), + (394, 395, 24, 'Volha_1_TK_CIV_EP1_DZE', '2021-09-23 10:37:22', '2021-09-23 10:39:09', 0, '[172,[5276.36,4471.77,2.213e-04]]', '[]', '[["wheel_1_1_steering",0.05],["wheel_1_2_steering",0.473],["wheel_2_1_steering",0.362],["wheel_2_2_steering",0.522],["palivo",0.103],["motor",0.928],["glass1",0.098],["glass2",0.189],["glass3",0.037],["glass4",0.036],["karoserie",0.37]]', 0.00021, 0.00000, 0), + (395, 396, 24, 'Hummer_DZE', '2021-09-23 10:37:23', '2021-09-23 10:39:09', 0, '[29,[5857.97,14232.6,0.001]]', '[]', '[["karoserie",0.195],["motor",0.263],["palivo",0.957],["glass1",0.524],["glass2",0.124],["glass3",0.387],["glass4",0.102],["levy predni tlumic",0.799],["levy zadni tlumic",0.003],["pravy predni tlumic",0.272],["pravy zadni tlumic",0.328],["sklo predni P",0.646],["sklo predni L",0.505]]', 0.21172, 0.00000, 0), + (396, 397, 24, 'LandRover_CZ_EP1_DZE', '2021-09-23 10:37:23', '2021-09-23 10:39:09', 0, '[142,[4157.15,14419.1,0.023]]', '[]', '[["glass1",0.808],["glass2",0.869],["glass3",0.34],["motor",0.905],["palivo",0.912],["wheel_1_1_steering",0.693],["wheel_1_2_steering",0.141],["wheel_2_1_steering",0.284],["wheel_2_2_steering",0.506],["karoserie",0.098]]', 0.74912, 0.00000, 0), + (397, 398, 24, 'Pickup_PK_GUE_DZE', '2021-09-23 10:37:23', '2021-09-23 10:39:09', 0, '[132,[5588.38,16294.7,0.09]]', '[]', '[["motor",0.589],["karoserie",0.027],["palivo",0.686],["wheel_1_1_steering",0.183],["wheel_2_1_steering",0.592],["wheel_1_2_steering",0.114],["wheel_2_2_steering",0.48],["glass1",0.303],["glass2",0.902]]', 0.55809, 0.00000, 0), + (398, 399, 24, 'UAZ_CDF_DZE', '2021-09-23 10:37:23', '2021-09-23 10:39:09', 0, '[124,[10032.1,16547.1,0.004]]', '[]', '[["glass1",0.682],["glass2",0.995],["glass3",0.991],["glass4",0.216],["wheel_1_1_steering",0.23],["wheel_1_2_steering",0.581],["wheel_2_1_steering",0.902],["wheel_2_2_steering",0.651],["motor",0.592],["karoserie",0.966],["palivo",0.779]]', 0.75197, 0.00000, 0), + (399, 400, 24, 'C130J_US_EP1_DZ', '2021-09-23 10:37:24', '2021-09-23 10:39:09', 0, '[39.729,[18139.8,1965.58,0.185]]', '[]', '[]', 0.70821, 0.00000, 0), + (400, 401, 24, 'SUV_Camo', '2021-09-23 10:37:24', '2021-09-23 10:39:09', 0, '[157,[6574.17,10644.9,0.115]]', '[]', '[["wheel_1_1_steering",0.962],["wheel_1_2_steering",8.187e-04],["wheel_2_1_steering",0.055],["wheel_2_2_steering",0.099],["palivo",0.938],["motor",0.419],["glass1",0.835],["glass2",0.847],["glass3",0.435],["glass4",0.512],["karoserie",0.21]]', 0.73043, 0.00000, 0), + (401, 402, 24, 'ScrapAPC_DZE', '2021-09-23 10:37:25', '2021-09-23 10:39:09', 0, '[92,[13920.8,14044.9,0.062]]', '[]', '[["karoserie",0.435],["palivo",0.655],["wheel_1_1_steering",0.256],["wheel_1_2_steering",0.678],["wheel_2_1_steering",0.553],["wheel_2_2_steering",0.748],["motor",0.157]]', 0.24326, 0.00000, 0), + (402, 403, 24, 'HMMWV_M1151_M2_CZ_DES_EP1_DZE', '2021-09-23 10:37:25', '2021-09-23 10:39:09', 0, '[61,[2105.83,7660.64,0]]', '[]', '[["wheel_1_1_steering",0.259],["wheel_1_2_steering",0.709],["wheel_2_1_steering",0.849],["wheel_2_2_steering",0.342],["karoserie",0.493]]', 0.89043, 0.00000, 0), + (403, 404, 24, 'UH1Y_DZE', '2021-09-23 10:37:25', '2021-09-24 11:48:11', 0, '[167.611,[5691.633,13830.246,0.092]]', '[[[],[]],[[],[]],[[],[]]]', '[["motor",0.866],["elektronika",0.055],["mala vrtule",0.697],["velka vrtule",0],["glass1",0.783],["glass2",0.031],["glass3",0.598],["glass4",0.378],["glass5",0.469]]', 0.37573, 0.00000, 0), + (404, 405, 24, 'LandRover_CZ_EP1_DZE', '2021-09-23 10:37:26', '2021-09-23 10:39:09', 0, '[169,[11495.7,8810.67,0.005]]', '[]', '[["glass1",0.239],["glass2",0.606],["glass3",0.358],["motor",0.144],["palivo",0.332],["wheel_1_1_steering",0.624],["wheel_1_2_steering",0.832],["wheel_2_1_steering",0.671],["wheel_2_2_steering",0.223],["karoserie",0.209]]', 0.80398, 0.00000, 0), + (405, 406, 24, 'pook_transport_CDF_DZE', '2021-09-23 10:37:26', '2021-09-23 10:39:09', 0, '[115,[5289.95,15866,0.003]]', '[]', '[["glass1",0.961],["engine",0.602],["mala vrtule",0.766],["velka vrtule",0.986]]', 0.28940, 0.00000, 0), + (406, 407, 24, 'Mi17_Civilian_DZ', '2021-09-23 10:37:26', '2021-09-23 10:39:09', 0, '[49,[9795.17,6163.56,0.481]]', '[]', '[["glass1",0.466],["glass2",0.869],["glass3",0.286],["glass4",0.027],["glass5",0.716],["glass6",0.742],["motor",0.91],["elektronika",0.5],["mala vrtule",0.418],["velka vrtule",0.132]]', 0.80813, 0.00000, 0), + (407, 408, 24, 'Volha_2_TK_CIV_EP1_DZE', '2021-09-23 10:37:26', '2021-09-23 10:39:09', 0, '[156,[9077.7,5332.44,0.012]]', '[]', '[["wheel_1_1_steering",0.972],["wheel_1_2_steering",0.147],["wheel_2_1_steering",0.857],["wheel_2_2_steering",0.318],["palivo",0.692],["motor",0.331],["glass1",0.983],["glass2",0.442],["glass3",0.783],["glass4",0.806],["karoserie",0.333]]', 0.50024, 0.00000, 0), + (408, 409, 24, 'Lada1_DZE', '2021-09-23 10:37:27', '2021-09-23 10:39:09', 0, '[119,[8369.29,14996.2,0.004]]', '[]', '[["motor",0.274],["karoserie",0.287],["palivo",0.659],["wheel_1_1_steering",0.7],["wheel_2_1_steering",0.876],["wheel_1_2_steering",0.033],["wheel_2_2_steering",0.72],["glass1",0.828],["glass2",0.879],["glass3",0.533],["glass4",0.885]]', 0.45701, 0.00000, 0), + (409, 410, 24, 'HMMWV_M998A2_SOV_DES_EP1_DZE', '2021-09-23 10:37:27', '2021-09-23 10:39:09', 0, '[16,[14983.9,14141.8,0.019]]', '[]', '[["glass1",0.234],["glass2",0.445],["glass3",0.155],["glass4",0.345],["wheel_1_1_steering",0.103],["wheel_1_2_steering",0.615],["wheel_2_1_steering",0.567],["wheel_2_2_steering",0.276],["karoserie",0.687]]', 0.06816, 0.00000, 0), + (410, 411, 24, 'Mi17_TK_EP1_DZE', '2021-09-23 10:37:28', '2021-09-23 10:39:09', 0, '[63,[12874.8,9383.55,0.488]]', '[]', '[["glass1",0.161],["glass2",0.085],["glass3",0.929],["glass4",0.597],["glass5",0.301],["glass6",0.406],["motor",0.178],["elektronika",0.338],["mala vrtule",0.146],["velka vrtule",0.726]]', 0.46973, 0.00000, 0), + (411, 412, 24, 'RHIB2Turret_DZE', '2021-09-23 10:37:28', '2021-09-23 10:39:09', 0, '[34,[2818.61,1720.01,91.012]]', '[]', '[["motor",0.335]]', 0.88634, 0.00000, 0), + (412, 413, 24, 'T810A_ACR_DZE', '2021-09-23 10:37:28', '2021-09-24 10:55:57', 0, '[98.364,[7978.198,14353.792,0.025]]', '[[[],[]],[[],[]],[[],[]]]', '[["wheel_1_1_steering",0.827],["wheel_1_2_steering",0.185],["wheel_1_3_steering",0.697],["wheel_2_1_steering",0.484],["wheel_2_2_steering",0.516],["wheel_2_3_steering",0.256],["palivo",0.539],["glass1",0.543],["glass2",0.913],["glass3",0.835],["glass4",0.504],["motor",0.157],["karoserie",0.583]]', 0.54400, 0.00000, 0), + (413, 414, 24, 'HMMWV_DZ', '2021-09-23 10:37:28', '2021-09-23 10:39:09', 0, '[102,[12140,11621.2,0.032]]', '[]', '[["glass1",0.63],["glass2",0.548],["glass3",0.631],["glass4",0.903],["wheel_1_1_steering",0.363],["wheel_1_2_steering",0.107],["wheel_2_1_steering",0.107],["wheel_2_2_steering",0.823],["karoserie",0.23]]', 0.22536, 0.00000, 0), + (414, 415, 24, 'Lada1_DZE', '2021-09-23 10:37:28', '2021-09-23 10:39:09', 0, '[63,[3478.17,8277.41,0.057]]', '[]', '[["motor",0.641],["karoserie",0.247],["palivo",0.261],["wheel_1_1_steering",0.309],["wheel_2_1_steering",0.288],["wheel_1_2_steering",0.086],["wheel_2_2_steering",0.8],["glass1",0.005],["glass2",0.015],["glass3",0.371],["glass4",0.699]]', 0.04136, 0.00000, 0), + (415, 416, 24, 'Volha_2_TK_CIV_EP1_DZE', '2021-09-23 10:37:29', '2021-09-23 10:39:09', 0, '[104,[10477,14125.8,0.025]]', '[]', '[["wheel_1_1_steering",0.808],["wheel_1_2_steering",0.326],["wheel_2_1_steering",0.437],["wheel_2_2_steering",0.068],["palivo",0.261],["motor",0.15],["glass1",0.995],["glass2",0.762],["glass3",0.789],["glass4",0.441],["karoserie",0.376]]', 0.16354, 0.00000, 0), + (416, 417, 24, 'pook_H13_civ_DZE', '2021-09-23 10:37:30', '2021-09-23 10:39:09', 0, '[12,[7582.33,15679.2,1.869e-04]]', '[]', '[["glass1",0.829],["engine",0.445],["mala vrtule",0.15],["velka vrtule",0.357]]', 0.21518, 0.00000, 0), + (417, 418, 24, 'Fishing_Boat_DZE', '2021-09-23 10:37:30', '2021-09-23 10:39:09', 0, '[120,[2778.61,2700.43,91.257]]', '[]', '[["motor",0.474]]', 0.43639, 0.00000, 0), + (418, 419, 24, 'T810_ACR_REAMMO_DZE', '2021-09-23 10:37:31', '2021-09-24 11:03:00', 0, '[5.99,[7286.407,14834.268,-2.708e-04]]', '[[[],[]],[[],[]],[[],[]]]', '[["wheel_1_1_steering",0.028],["wheel_1_2_steering",0.819],["wheel_1_3_steering",0.89],["wheel_2_1_steering",0.492],["wheel_2_2_steering",0.406],["wheel_2_3_steering",0.598],["palivo",0.413],["glass1",0.358],["glass2",0.606],["glass3",0.839],["glass4",0.925],["motor",0.272],["karoserie",0.949]]', 0.66100, 0.00000, 0), + (419, 420, 24, 'TT650_Ins_DZE', '2021-09-23 10:37:31', '2021-09-23 10:39:09', 0, '[146,[2324.73,9596.07,2.899e-04]]', '[]', '[["karoserie",0.571],["palivo",9.176e-05],["Pravy predni tlumic",0.994],["Pravy zadni tlumic",0.415]]', 0.43135, 0.00000, 0), + (420, 421, 24, 'UH60M_MEV_EP1_DZ', '2021-09-23 10:37:31', '2021-09-23 10:39:09', 0, '[132,[15298.7,14203.9,0.008]]', '[]', '[["glass1",0.518],["glass2",0.73],["glass3",0.642],["glass4",0.526],["motor",0.905],["mala vrtule",0.745],["velka vrtule",0.197],["munice",0.089]]', 0.80376, 0.00000, 0), + (421, 422, 24, 'BAF_Jackal2_L2A1_W_DZE', '2021-09-23 10:37:32', '2021-09-23 10:39:09', 0, '[165,[16466.9,15235.5,0.001]]', '[]', '[["karoserie",0.884],["motor",0.947],["palivo",0.363],["wheel_1_1_steering",0.427],["wheel_1_2_steering",0.709],["wheel_2_1_steering",0.63],["wheel_2_2_steering",0.022]]', 0.02559, 0.00000, 0), + (422, 423, 24, 'UH1H_WD_DZE', '2021-09-23 10:37:32', '2021-09-23 10:39:09', 0, '[166,[15423.2,15954.4,9.346e-05]]', '[]', '[["glass1",0.041],["glass2",0.741],["glass3",0.441],["glass4",0.396],["glass5",0.984],["motor",0.807],["elektronika",0.591],["mala vrtule",0.266],["velka vrtule",0.399]]', 0.46035, 0.00000, 0), + (423, 424, 24, 'ATV_CIV_Red_CP_DZE', '2021-09-23 10:37:33', '2021-09-23 10:39:09', 0, '[69,[10549.4,17068.7,0.027]]', '[]', '[["motor",0.795],["palivo",0.498],["wheel_1_1_steering",0.856],["wheel_1_2_steering",0.958],["wheel_2_1_steering",0.881],["wheel_2_2_steering",0.586],["karoserie",0.68]]', 0.00099, 0.00000, 0), + (424, 425, 24, 'Ural_TK_CIV_EP1_DZE', '2021-09-23 10:37:34', '2021-09-23 10:39:09', 0, '[21,[10473.8,11918.4,0.298]]', '[]', '[["glass1",0.47],["glass2",0.111],["glass3",0.955],["glass4",0.887],["wheel_1_1_steering",0.18],["wheel_2_1_steering",0.517],["wheel_1_3_steering",0.994],["wheel_2_3_steering",0.739],["wheel_1_2_steering",0.894],["wheel_2_2_steering",0.833],["motor",0.23],["karoserie",0.345],["palivo",0.662]]', 0.69166, 0.00000, 0), + (425, 426, 24, 'Submarine_DZE', '2021-09-23 10:37:35', '2021-09-23 10:39:09', 0, '[15,[3711.5,17621,91.37]]', '[]', '[["karoserie",0.272],["motor",0.284],["palivo",0.342]]', 0.06754, 0.00000, 0), + (426, 427, 24, 'Ural_UN_EP1_DZE', '2021-09-23 10:37:35', '2021-09-23 10:39:09', 0, '[80,[14905.3,13552.8,4.437e-04]]', '[]', '[["glass1",0.016],["glass2",0.256],["glass3",0.922],["glass4",0.881],["wheel_1_1_steering",0.842],["wheel_2_1_steering",0.635],["wheel_1_3_steering",0.241],["wheel_2_3_steering",0.788],["wheel_1_2_steering",0.382],["wheel_2_2_steering",0.837],["motor",0.57],["karoserie",0.907],["palivo",0.516]]', 0.44446, 0.00000, 0), + (427, 428, 24, 'pook_H13_civ_yellow_DZE', '2021-09-23 10:37:36', '2021-09-23 10:39:09', 0, '[158,[17293.4,17195.7,0.005]]', '[]', '[["glass1",0.324],["engine",0.257],["mala vrtule",0.074],["velka vrtule",0.675]]', 0.36100, 0.00000, 0), + (428, 429, 24, 'Pickup_PK_INS_DZE', '2021-09-23 10:37:36', '2021-09-23 10:39:09', 0, '[89,[4307.63,14614.2,0.009]]', '[]', '[["motor",0.998],["karoserie",0.239],["palivo",0.012],["wheel_1_1_steering",0.177],["wheel_2_1_steering",0.162],["wheel_1_2_steering",0.522],["wheel_2_2_steering",0.959],["glass1",0.756],["glass2",0.465]]', 0.16516, 0.00000, 0), + (429, 430, 24, 'pook_H13_civ_white_DZE', '2021-09-23 10:37:37', '2021-09-23 10:39:09', 0, '[16,[5941.75,15009,0.002]]', '[]', '[["glass1",0.494],["engine",0.826],["mala vrtule",0.214],["velka vrtule",0.996]]', 0.59068, 0.00000, 0), + (430, 431, 24, 'pook_medevac_DZE', '2021-09-23 10:37:37', '2021-09-23 10:39:09', 0, '[8,[10678.4,18619.7,0.004]]', '[]', '[["glass1",0.59],["engine",0.155],["mala vrtule",0.469],["velka vrtule",0.708]]', 0.67999, 0.00000, 0), + (431, 432, 24, 'UAZ_RU_DZE', '2021-09-23 10:37:37', '2021-09-23 10:39:09', 0, '[38,[6539.18,16763.4,0.057]]', '[]', '[["glass1",0.572],["glass2",0.162],["glass3",0.763],["glass4",0.443],["wheel_1_1_steering",0.768],["wheel_1_2_steering",0.428],["wheel_2_1_steering",0.198],["wheel_2_2_steering",0.569],["motor",0.796],["karoserie",0.153],["palivo",0.241]]', 0.84378, 0.00000, 0), + (432, 433, 24, 'Volha_2_TK_CIV_EP1_DZE', '2021-09-23 10:37:37', '2021-09-23 10:39:09', 0, '[68,[7603.36,14146.6,6.981e-04]]', '[]', '[["wheel_1_1_steering",0.961],["wheel_1_2_steering",0.261],["wheel_2_1_steering",0.558],["wheel_2_2_steering",0.776],["palivo",0.633],["motor",0.076],["glass1",0.177],["glass2",0.745],["glass3",0.542],["glass4",0.02],["karoserie",0.557]]', 0.82906, 0.00000, 0), + (433, 434, 24, 'BAF_Merlin_DZE', '2021-09-23 10:37:37', '2021-09-23 10:39:09', 0, '[160,[16924.4,14951.8,-0.095]]', '[]', '[["NEtrup",0.955],["motor",0.557],["elektronika",0.969],["mala vrtule",0.791],["velka vrtule",0.31],["glass1",0.072],["glass2",0.315],["glass3",0.037],["glass4",0.032],["glass5",0.397],["glass6",0.852],["glass7",0.692],["glass8",0.435],["glass9",0.565],["glass10",0.881],["glass11",0.995],["glass12",0.019],["glass13",0.809],["glass14",0.948],["glass15",0.64],["glass16",0.619],["glass17",0.681],["glass18",0.999],["glass19",0.576],["glass20",0.187]]', 0.79298, 0.00000, 0), + (434, 435, 24, 'UAZ_CDF_DZE', '2021-09-23 10:37:38', '2021-09-23 10:39:09', 0, '[38,[4698.12,12471.6,0.04]]', '[]', '[["glass1",0.861],["glass2",0.127],["glass3",0.032],["glass4",0.262],["wheel_1_1_steering",0.657],["wheel_1_2_steering",0.142],["wheel_2_1_steering",0.166],["wheel_2_2_steering",0.031],["motor",0.254],["karoserie",0.267],["palivo",0.528]]', 0.53678, 0.00000, 0), + (435, 436, 24, 'T810_ACR_REAMMO_DES_DZE', '2021-09-23 10:37:39', '2021-09-23 10:39:09', 0, '[161,[16277.4,9585.51,0.045]]', '[]', '[["wheel_1_1_steering",0.399],["wheel_1_2_steering",0.025],["wheel_1_3_steering",0.219],["wheel_2_1_steering",0.435],["wheel_2_2_steering",0.936],["wheel_2_3_steering",0.526],["palivo",0.91],["glass1",0.59],["glass2",0.96],["glass3",0.821],["glass4",0.596],["motor",0.57],["karoserie",0.822]]', 0.35272, 0.00000, 0), + (436, 437, 24, 'RHIB2Turret_DZE', '2021-09-23 10:37:39', '2021-09-23 10:39:09', 0, '[124,[3645.98,2052.29,90.799]]', '[]', '[["motor",0.361]]', 0.69749, 0.00000, 0), + (437, 438, 24, 'UAZ_Unarmed_TK_CIV_EP1_DZE', '2021-09-23 10:37:39', '2021-09-23 10:39:09', 0, '[154,[3314.41,7454.97,9.537e-07]]', '[]', '[["glass1",0.624],["glass2",0.591],["glass3",0.367],["glass4",0.583],["wheel_1_1_steering",0.842],["wheel_1_2_steering",0.748],["wheel_2_1_steering",0.134],["wheel_2_2_steering",0.034],["motor",0.3],["karoserie",0.953],["palivo",0.731]]', 0.92416, 0.00000, 0), + (438, 439, 24, 'CH_47F_EP1_DES_DZE', '2021-09-23 10:37:40', '2021-09-23 10:39:09', 0, '[61,[10988,16048.8,0.073]]', '[]', '[["motor",0.161],["sklo predni P",0.141],["sklo predni L",0.178],["glass3",0.605],["glass4",0.107]]', 0.47596, 0.00000, 0), + (439, 440, 24, 'Lada1_DZE', '2021-09-23 10:37:40', '2021-09-23 10:39:09', 0, '[33,[8765.65,7566.32,5.646e-04]]', '[]', '[["motor",0.796],["karoserie",0.315],["palivo",0.4],["wheel_1_1_steering",0.856],["wheel_2_1_steering",0.122],["wheel_1_2_steering",0.147],["wheel_2_2_steering",0.665],["glass1",0.559],["glass2",0.042],["glass3",0.633],["glass4",0.126]]', 0.86769, 0.00000, 0), + (440, 441, 24, 'PBX_DZE', '2021-09-23 10:37:40', '2021-09-23 10:39:09', 0, '[123,[17580.8,7172.9,0.217]]', '[]', '[["motor",0.364]]', 0.22658, 0.00000, 0), + (441, 442, 24, 'Skoda_DZE', '2021-09-23 10:37:40', '2021-09-23 10:39:09', 0, '[173,[2179.5,7821.81,0.016]]', '[]', '[["motor",0.707],["karoserie",0.766],["palivo",0.775],["wheel_1_1_steering",0.859],["wheel_2_1_steering",0.737],["wheel_1_2_steering",0.977],["wheel_2_2_steering",0.89],["glass1",0.033],["glass2",0.145],["glass3",0.935],["glass4",0.36]]', 0.85334, 0.00000, 0), + (442, 443, 24, 'PBX_DZE', '2021-09-23 10:37:41', '2021-09-23 10:39:09', 0, '[99,[1916.79,19241.9,90.91]]', '[]', '[["motor",0.348]]', 0.07043, 0.00000, 0), + (443, 444, 24, 'Fishing_Boat_DZE', '2021-09-23 10:39:42', '2021-09-23 10:45:47', 0, '[86,[15105.7,15047.8,0.211]]', '[]', '[["motor",0.169]]', 0.51849, 0.00000, 0), + (444, 445, 24, 'pook_transport_DZE', '2021-09-23 10:39:43', '2021-09-23 10:45:47', 0, '[73,[7724.46,15223.9,0.01]]', '[]', '[["glass1",0.883],["engine",0.453],["mala vrtule",0.287],["velka vrtule",0.006]]', 0.67222, 0.00000, 0), + (445, 446, 24, 'AN2_2_DZ', '2021-09-23 10:39:43', '2021-09-23 10:45:47', 0, '[260.888,[5012.61,4871.97,0.714]]', '[]', '[["glass1",0.047],["glass2",0.746],["glass3",0.43],["glass4",0.373]]', 0.54894, 0.00000, 0), + (446, 447, 24, 'Zodiac_DZE', '2021-09-23 10:39:43', '2021-09-23 10:45:47', 0, '[109,[2278.9,15005.3,89.2]]', '[]', '[["motor",0.728]]', 0.69844, 0.00000, 0), + (447, 448, 24, 'Lada1_TK_CIV_EP1_DZE', '2021-09-23 10:39:43', '2021-09-23 10:45:47', 0, '[53,[14218.5,13865.4,3.815e-06]]', '[]', '[["motor",0.628],["karoserie",0.261],["palivo",0.609],["wheel_1_1_steering",0.341],["wheel_2_1_steering",0.831],["wheel_1_2_steering",0.744],["wheel_2_2_steering",0.053],["glass1",0.397],["glass2",0.474],["glass3",0.767],["glass4",0.439]]', 0.28585, 0.00000, 0), + (448, 449, 24, 'datsun1_civil_1_open_DZE', '2021-09-23 10:39:44', '2021-09-23 10:45:47', 0, '[99,[13721.2,5208.62,0.02]]', '[]', '[["motor",0.591],["karoserie",0.995],["palivo",0.222],["wheel_1_1_steering",0.911],["wheel_2_1_steering",0.352],["wheel_1_2_steering",0.614],["wheel_2_2_steering",0.962],["glass1",0.326],["glass2",0.247]]', 0.21758, 0.00000, 0), + (449, 450, 24, 'Ikarus_Armored_DZE', '2021-09-23 10:39:44', '2021-09-23 10:45:47', 0, '[77,[14427.7,14211.4,0.045]]', '[]', '[["karoserie",0.223],["palivo",0.685],["wheel_1_1_steering",0.177],["wheel_1_2_steering",0.971],["wheel_2_1_steering",0.81],["wheel_2_2_steering",0.463],["motor",0.51]]', 0.75431, 0.00000, 0), + (450, 451, 24, 'HMMWV_Ambulance_CZ_DES_EP1_DZE', '2021-09-23 10:39:44', '2021-09-23 10:45:47', 0, '[82,[9945.09,13580.8,0.059]]', '[]', '[["glass1",0.604],["glass2",0.965],["glass3",0.588],["glass4",0.99],["wheel_1_1_steering",0.115],["wheel_1_2_steering",0.502],["wheel_2_1_steering",0.443],["wheel_2_2_steering",0.761],["engine",0.652],["karoserie",0.681]]', 0.96770, 0.00000, 0), + (451, 452, 24, 'BRDM2_HQ_TK_GUE_EP1_DZE', '2021-09-23 10:39:44', '2021-09-23 10:45:47', 0, '[168,[11048.8,8861.33,0.021]]', '[]', '[["motor",0.254],["wheel_1_1_steering",0.791],["wheel_1_2_steering",0.139],["wheel_2_1_steering",0.349],["wheel_2_2_steering",0.451],["karoserie",0.63]]', 0.23404, 0.00000, 0), + (452, 453, 24, 'SUV_Pink', '2021-09-23 10:39:44', '2021-09-23 10:45:47', 0, '[129,[9257.35,15873.1,0.008]]', '[]', '[["wheel_1_1_steering",0.536],["wheel_1_2_steering",0.507],["wheel_2_1_steering",0.577],["wheel_2_2_steering",0.734],["palivo",0.065],["motor",0.366],["glass1",0.901],["glass2",0.579],["glass3",0.768],["glass4",0.85],["karoserie",0.878]]', 0.66518, 0.00000, 0), + (453, 454, 24, 'Smallboat_1_DZE', '2021-09-23 10:39:45', '2021-09-23 10:45:47', 0, '[37,[4857.34,17016.9,49.947]]', '[]', '[["motor",0.209]]', 0.26876, 0.00000, 0), + (454, 455, 24, 'TT650_TK_CIV_EP1_DZE', '2021-09-23 10:39:45', '2021-09-23 10:45:47', 0, '[110,[8556.12,15237.8,0.001]]', '[]', '[["karoserie",0.661],["palivo",0.192],["Pravy predni tlumic",0.074],["Pravy zadni tlumic",0.367]]', 0.90590, 0.00000, 0), + (455, 456, 24, 'Submarine_DZE', '2021-09-23 10:39:46', '2021-09-23 10:45:47', 0, '[110,[6501.54,18274.6,51.362]]', '[]', '[["karoserie",0.968],["motor",0.641],["palivo",0.009]]', 0.49106, 0.00000, 0), + (456, 457, 24, 'V3S_Open_TK_CIV_EP1_DZE', '2021-09-23 10:39:46', '2021-09-23 10:45:47', 0, '[149,[3342.09,9317.18,0.045]]', '[]', '[["wheel_1_1_steering",0.524],["wheel_1_2_steering",0.878],["wheel_1_3_steering",0.772],["wheel_2_1_steering",0.569],["wheel_2_2_steering",0.374],["wheel_2_3_steering",0.822],["motor",0.396],["glass1",0.469],["glass2",0.479],["glass3",0.046],["glass4",0.451]]', 0.40702, 0.00000, 0), + (457, 458, 24, 'pook_gunship_DZE', '2021-09-23 10:39:46', '2021-09-23 10:45:47', 0, '[40,[1042.28,2851.99,0.006]]', '[]', '[["glass1",0.879],["engine",0.695],["mala vrtule",0.166],["velka vrtule",0.495]]', 0.25865, 0.00000, 0), + (458, 459, 24, 'V3S_Open_TK_EP1_DZE', '2021-09-23 10:39:46', '2021-09-23 10:45:47', 0, '[121,[11950.6,9858.64,0.113]]', '[]', '[["wheel_1_1_steering",0.157],["wheel_1_2_steering",0.736],["wheel_1_3_steering",0.856],["wheel_2_1_steering",0.783],["wheel_2_2_steering",0.899],["wheel_2_3_steering",0.523],["motor",0.559],["glass1",0.888],["glass2",0.183],["glass3",0.398],["glass4",0.696]]', 0.26747, 0.00000, 0), + (459, 460, 24, 'ATV_CIV_CP_DZE', '2021-09-23 10:39:47', '2021-09-23 10:45:47', 0, '[16,[15597.1,14297.3,0.001]]', '[]', '[["motor",0.551],["palivo",0.43],["wheel_1_1_steering",0.227],["wheel_1_2_steering",0.798],["wheel_2_1_steering",0.35],["wheel_2_2_steering",0.143],["karoserie",0.368]]', 0.20780, 0.00000, 0), + (460, 461, 24, 'JetSkiYanahui_Case_Green', '2021-09-23 10:39:47', '2021-09-23 10:45:47', 0, '[31,[8586.37,17998.2,5.148]]', '[]', '[["motor",0.594]]', 0.50872, 0.00000, 0), + (461, 462, 24, 'Mini_Cooper_DZE', '2021-09-23 10:39:47', '2021-09-23 10:45:47', 0, '[148,[8931.92,15845.1,0.008]]', '[]', '[["glass1",0.894],["glass2",0.823],["glass3",0.16],["glass4",0.643],["karoserie",0.117],["palivo",0.442],["wheel_1_1_steering",0.311],["wheel_1_2_steering",0.205],["wheel_2_1_steering",0.555],["wheel_2_2_steering",0.854],["motor",0.431]]', 0.20573, 0.00000, 0), + (462, 463, 24, 'UH1H_WD_DZE', '2021-09-23 10:39:48', '2021-09-23 10:45:47', 0, '[14,[4991.98,14355.3,0.001]]', '[]', '[["glass1",0.984],["glass2",0.667],["glass3",0.672],["glass4",0.672],["glass5",0.649],["motor",0.89],["elektronika",0.462],["mala vrtule",0.014],["velka vrtule",0.679]]', 0.61851, 0.00000, 0), + (463, 464, 24, 'Pickup_PK_TK_GUE_EP1_DZE', '2021-09-23 10:39:48', '2021-09-23 12:25:51', 0, '[87.493,[17200.814,3460.378,0.02]]', '[[[],[]],[[],[]],[[],[]]]', '[["motor",0.756],["karoserie",0.217],["palivo",0.256],["wheel_1_1_steering",0.689],["wheel_2_1_steering",0.157],["wheel_1_2_steering",0.5],["wheel_2_2_steering",0.709],["glass1",0.543],["glass2",0.433]]', 0.06777, 0.00000, 0), + (464, 465, 24, 'AW159_Lynx_BAF_DZE', '2021-09-23 10:39:48', '2021-09-23 10:45:47', 0, '[71,[16470.4,4330.68,-0.011]]', '[]', '[["glass1",0.266],["glass2",0.951],["glass3",0.071],["glass4",0.245],["glass5",0.315],["motor",0.43],["elektronika",0.069],["mala vrtule",0.976],["velka vrtule",0.01],["glass6",0.234],["glass7",0.317],["glass8",0.457],["glass9",0.293],["glass10",0.483],["glass11",0.005],["NEtrup",0.466],["munice",0.443]]', 0.82773, 0.00000, 0), + (465, 466, 24, 'Smallboat_1_DZE', '2021-09-23 10:39:48', '2021-09-23 10:45:47', 0, '[88,[15259,14503,3.43]]', '[]', '[["motor",0.064]]', 0.74161, 0.00000, 0), + (466, 467, 24, 'datsun1_red_covered_DZE', '2021-09-23 10:39:48', '2021-09-23 10:45:47', 0, '[49,[6391.51,15881.6,0.045]]', '[]', '[["motor",0.034],["sklo predni P",0.46],["karoserie",0.246],["palivo",0.662]]', 0.59791, 0.00000, 0), + (467, 468, 24, 'VWGolf_DZE', '2021-09-23 10:39:49', '2021-09-23 10:45:47', 0, '[67,[10757.9,15252.7,0.001]]', '[]', '[["wheel_1_1_steering",0.285],["wheel_1_2_steering",0.484],["wheel_2_1_steering",0.269],["wheel_2_2_steering",0.956],["motor",0.802],["karoserie",0.963],["palivo",0.588],["glass1",0.488],["glass2",0.271],["glass3",0.271],["glass4",0.589]]', 0.26849, 0.00000, 0), + (468, 469, 24, 'Pickup_PK_GUE_DZE', '2021-09-23 10:39:49', '2021-09-23 10:45:47', 0, '[112,[6329.79,5151.8,0.013]]', '[]', '[["motor",0.385],["karoserie",0.009],["palivo",0.783],["wheel_1_1_steering",0.816],["wheel_2_1_steering",0.264],["wheel_1_2_steering",0.837],["wheel_2_2_steering",0.81],["glass1",0.981],["glass2",0.971]]', 0.20655, 0.00000, 0), + (469, 470, 24, 'SUV_Silver', '2021-09-23 10:39:49', '2021-09-23 10:45:47', 0, '[101,[5547.95,16060.7,0.03]]', '[]', '[["wheel_1_1_steering",0.278],["wheel_1_2_steering",0.807],["wheel_2_1_steering",0.473],["wheel_2_2_steering",0.191],["palivo",0.025],["motor",0.177],["glass1",0.013],["glass2",0.627],["glass3",0.983],["glass4",0.252],["karoserie",0.27]]', 0.31507, 0.00000, 0), + (470, 471, 24, 'Mi17_CDF_DZE', '2021-09-23 10:39:49', '2021-09-23 10:45:47', 0, '[9,[2663.16,10212.1,0.487]]', '[]', '[["glass1",0.774],["glass2",0.251],["glass3",0.501],["glass4",0.484],["glass5",0.21],["glass6",0.22],["motor",0.564],["elektronika",0.611],["mala vrtule",0.979],["velka vrtule",0.748]]', 0.68105, 0.00000, 0), + (471, 472, 24, 'MMT_Civ_DZE', '2021-09-23 10:39:49', '2021-09-23 10:45:47', 0, '[34,[4554.8,14138.9,-0.012]]', '[]', '[]', 0.00000, 0.00000, 0), + (472, 473, 24, 'pook_gunship_DZE', '2021-09-23 10:39:50', '2021-09-23 10:45:47', 0, '[131,[18386.7,16685.2,0.005]]', '[]', '[["glass1",0.294],["engine",0.487],["mala vrtule",0.206],["velka vrtule",0.993]]', 0.70502, 0.00000, 0), + (473, 474, 24, 'UAZ_RU_DZE', '2021-09-23 10:39:50', '2021-09-23 10:45:47', 0, '[66,[14888.2,14366.7,0.003]]', '[]', '[["glass1",0.719],["glass2",0.786],["glass3",0.166],["glass4",0.445],["wheel_1_1_steering",0.71],["wheel_1_2_steering",0.343],["wheel_2_1_steering",0.283],["wheel_2_2_steering",0.922],["motor",0.229],["karoserie",0.454],["palivo",0.044]]', 0.86002, 0.00000, 0), + (474, 475, 24, 'datsun1_civil_2_covered_DZE', '2021-09-23 10:39:50', '2021-09-23 10:45:47', 0, '[28,[4383.82,12411.6,0.362]]', '[]', '[["motor",0.816],["karoserie",0.824],["palivo",0.867],["wheel_1_1_steering",0.67],["wheel_2_1_steering",0.173],["wheel_1_2_steering",0.611],["wheel_2_2_steering",0.827],["glass1",0.332],["glass2",0.707]]', 0.54001, 0.00000, 0), + (475, 476, 24, 'MH60S_DZE', '2021-09-23 10:39:50', '2021-09-23 10:45:47', 0, '[133,[12981.9,9679.21,-0.022]]', '[]', '[["motor",0.621],["elektronika",0.605],["mala vrtule",0.309],["velka vrtule",0.34],["glass1",0.45],["glass2",0.226],["glass3",0.181],["glass4",0.653],["glass5",0.423],["glass6",0.828]]', 0.65913, 0.00000, 0), + (476, 477, 24, 'Submarine_DZE', '2021-09-23 10:39:50', '2021-09-23 10:45:47', 0, '[1,[5648.2,17631.6,51.011]]', '[]', '[["karoserie",0.101],["motor",0.811],["palivo",0.73]]', 0.95716, 0.00000, 0), + (477, 478, 24, 'AW159_Lynx_BAF_DZE', '2021-09-23 10:39:51', '2021-09-23 10:45:47', 0, '[34,[11077.5,16016.5,-0.01]]', '[]', '[["glass1",0.313],["glass2",0.357],["glass3",0.482],["glass4",0.698],["glass5",0.051],["motor",0.417],["elektronika",0.147],["mala vrtule",0.368],["velka vrtule",0.816],["glass6",0.409],["glass7",0.954],["glass8",0.478],["glass9",0.542],["glass10",0.097],["glass11",0.291],["NEtrup",0.413],["munice",0.696]]', 0.30720, 0.00000, 0), + (478, 479, 24, 'T810A_ACR_DZE', '2021-09-23 10:39:51', '2021-09-23 10:45:47', 0, '[78,[6401.84,12673.7,8.755e-04]]', '[]', '[["wheel_1_1_steering",0.605],["wheel_1_2_steering",0.503],["wheel_1_3_steering",0.568],["wheel_2_1_steering",0.384],["wheel_2_2_steering",0.024],["wheel_2_3_steering",0.737],["palivo",0.82],["glass1",0.548],["glass2",0.451],["glass3",0.455],["glass4",0.995],["motor",0.227],["karoserie",0.934]]', 0.01984, 0.00000, 0), + (479, 480, 24, 'Smallboat_1_DZE', '2021-09-23 10:39:51', '2021-09-23 10:45:47', 0, '[170,[14162.7,19069.8,19.697]]', '[]', '[["motor",0.32]]', 0.82407, 0.00000, 0), + (480, 481, 24, 'Mi17_TK_EP1_DZE', '2021-09-23 10:39:51', '2021-09-23 10:45:47', 0, '[98,[10570.4,15203.8,0.483]]', '[]', '[["glass1",0.927],["glass2",0.877],["glass3",0.644],["glass4",0.757],["glass5",0.229],["glass6",0.283],["motor",0.935],["elektronika",0.699],["mala vrtule",0.988],["velka vrtule",0.452]]', 0.32902, 0.00000, 0), + (481, 482, 24, 'MV22_DZ', '2021-09-23 10:39:52', '2021-09-23 10:45:47', 0, '[95,[10081.2,17943.6,0.319]]', '[]', '[]', 0.55563, 0.00000, 0), + (482, 483, 24, 'HMMWV_DZ', '2021-09-23 10:39:52', '2021-09-23 10:45:47', 0, '[89,[8466.69,16128.8,0.076]]', '[]', '[["glass1",0.656],["glass2",0.334],["glass3",0.031],["glass4",0.379],["wheel_1_1_steering",0.971],["wheel_1_2_steering",0.02],["wheel_2_1_steering",0.169],["wheel_2_2_steering",0.386],["karoserie",0.067]]', 0.28438, 0.00000, 0), + (483, 484, 24, 'Kamaz_DZE', '2021-09-23 10:39:52', '2021-09-23 10:45:47', 0, '[147,[9728.2,8137.16,0.003]]', '[]', '[["wheel_1_1_steering",0.944],["wheel_2_1_steering",0.579],["wheel_1_3_steering",0.217],["wheel_2_3_steering",0.619],["wheel_1_2_steering",0.935],["wheel_2_2_steering",0.738],["motor",0.004],["karoserie",0.063],["palivo",0.347],["glass1",0.679],["glass2",0.801],["glass3",0.538],["glass4",0.583]]', 0.03969, 0.00000, 0), + (484, 485, 24, 'pook_medevac_CIV_DZE', '2021-09-23 10:39:52', '2021-09-23 10:45:47', 0, '[74,[7015.67,9578.67,4.759e-04]]', '[]', '[["glass1",0.068],["engine",0.631],["mala vrtule",0.728],["velka vrtule",0.063]]', 0.20576, 0.00000, 0), + (485, 486, 24, 'Mi17_TK_EP1_DZE', '2021-09-23 10:39:53', '2021-09-23 10:45:47', 0, '[27,[16556.7,18272.5,0.479]]', '[]', '[["glass1",0.494],["glass2",0.203],["glass3",0.41],["glass4",0.11],["glass5",0.82],["glass6",0.498],["motor",0.017],["elektronika",0.909],["mala vrtule",0.924],["velka vrtule",0.313]]', 0.57432, 0.00000, 0), + (486, 487, 24, 'CH_47F_EP1_DZE', '2021-09-23 10:39:53', '2021-09-23 10:45:47', 0, '[71,[16643.5,15050.5,0.091]]', '[]', '[["motor",0.725],["sklo predni P",0.844],["sklo predni L",0.628],["glass3",0.7],["glass4",0.476]]', 0.28752, 0.00000, 0), + (487, 488, 24, 'T810_ACR_REPAIR_DES_DZE', '2021-09-23 10:39:53', '2021-09-23 10:45:47', 0, '[81,[5451.99,7712.29,0.004]]', '[]', '[["wheel_1_1_steering",0.7],["wheel_1_2_steering",0.47],["wheel_1_3_steering",0.468],["wheel_2_1_steering",0.067],["wheel_2_2_steering",0.362],["wheel_2_3_steering",0.664],["palivo",0.926],["glass1",0.737],["glass2",0.487],["glass3",0.271],["glass4",0.09],["motor",0.649],["karoserie",0.223]]', 0.67787, 0.00000, 0), + (488, 489, 24, 'BAF_Jackal2_GMG_W_DZE', '2021-09-23 10:39:54', '2021-09-23 10:45:47', 0, '[39,[3803.7,14318.2,0.002]]', '[]', '[["karoserie",0.683],["motor",0.933],["palivo",0.171],["wheel_1_1_steering",0.784],["wheel_1_2_steering",0.982],["wheel_2_1_steering",0.566],["wheel_2_2_steering",0.423]]', 0.25723, 0.00000, 0), + (489, 490, 24, 'MV22_DZ', '2021-09-23 10:39:54', '2021-09-25 10:22:56', 0, '[116,[4559.86,4677.25,0.305]]', '[]', '[]', 0.34660, 0.00049, 0), + (490, 491, 24, 'UH1H_DZE', '2021-09-23 10:39:55', '2021-09-23 10:45:47', 0, '[4,[16371.7,13587.3,0.014]]', '[]', '[["glass1",0.603],["glass2",0.558],["glass3",0.812],["glass4",0.571],["glass5",0.047],["motor",0.076],["elektronika",0.261],["mala vrtule",0.335],["velka vrtule",0.595]]', 0.94425, 0.00000, 0), + (491, 492, 24, 'UH60M_EP1_DZE', '2021-09-23 10:39:55', '2021-09-23 10:45:47', 0, '[169,[10465.9,15380.4,0.016]]', '[]', '[["glass1",0.119],["glass2",0.929],["glass3",0.932],["glass4",0.908],["motor",0.398],["mala vrtule",0.829],["velka vrtule",0.787],["munice",0.694]]', 0.53766, 0.00000, 0), + (492, 493, 24, 'S1203_TK_CIV_EP1_DZE', '2021-09-23 10:39:55', '2021-09-23 10:45:47', 0, '[61,[14476.8,13481.6,0.008]]', '[]', '[["wheel_1_1_steering",0.266],["wheel_1_2_steering",0.408],["wheel_2_1_steering",0.541],["wheel_2_2_steering",0.727],["motor",0.302],["palivo",0.826],["glass1",0.264],["glass2",0.631],["glass3",0.808],["glass4",0.422]]', 0.47295, 0.00000, 0), + (493, 494, 24, 'ScrapAPC_DZE', '2021-09-23 10:46:25', '2021-09-23 10:49:13', 0, '[165,[8626.52,15899.3,0.01]]', '[[[],[]],[["15Rnd_W1866_Slug","Skin_Civilian1_DZ"],[1,1]],[[],[]]]', '[["karoserie",0.026],["palivo",0.498],["wheel_1_1_steering",0.516],["wheel_1_2_steering",0.755],["wheel_2_1_steering",0.425],["wheel_2_2_steering",0.147],["motor",0.678]]', 0.07351, 0.00000, 0), + (494, 495, 24, 'BTR40_MG_TK_INS_EP1_DZE', '2021-09-23 10:46:25', '2021-09-23 10:49:13', 0, '[14,[3673.74,10127.6,0.019]]', '[[[],[]],[["8Rnd_9x18_Makarov","FoodCanHerpy"],[1,1]],[[],[]]]', '[["wheel_1_1_steering",0.24],["wheel_1_2_steering",0.572],["wheel_2_1_steering",0.441],["wheel_2_2_steering",0.941],["karoserie",0.662]]', 0.67884, 0.00000, 0), + (495, 496, 24, 'HMMWV_DZ', '2021-09-23 10:46:26', '2021-09-23 10:49:13', 0, '[72,[7422.01,14183.3,0.041]]', '[[[],[]],[["PartFueltank","ItemBandage"],[1,1]],[[],[]]]', '[["glass1",0.675],["glass2",0.629],["glass3",0.245],["glass4",0.174],["wheel_1_1_steering",0.266],["wheel_1_2_steering",0.443],["wheel_2_1_steering",0.502],["wheel_2_2_steering",0.584],["karoserie",0.541]]', 0.47349, 0.00000, 0), + (496, 497, 24, 'Ural_UN_EP1_DZE', '2021-09-23 10:46:26', '2021-09-23 10:49:13', 0, '[86,[11915.5,11627.5,1.526e-04]]', '[[["M1911_DZ"],[1]],[["PartGlass"],[1]],[[],[]]]', '[["glass1",0.41],["glass2",0.853],["glass3",0.624],["glass4",0.872],["wheel_1_1_steering",0.49],["wheel_2_1_steering",0.816],["wheel_1_3_steering",0.183],["wheel_2_3_steering",0.099],["wheel_1_2_steering",0.479],["wheel_2_2_steering",0.79],["motor",0.481],["karoserie",0.72],["palivo",0.006]]', 0.98379, 0.00000, 0), + (497, 498, 24, 'UH1H_DZE', '2021-09-23 10:46:26', '2021-09-23 10:49:13', 0, '[76,[13237,10490.2,0.012]]', '[[[],[]],[["FoodCanRusPeas"],[1]],[[],[]]]', '[["glass1",0.45],["glass2",0.284],["glass3",0.647],["glass4",0.466],["glass5",0.607],["motor",0.218],["elektronika",0.186],["mala vrtule",0.899],["velka vrtule",0.868]]', 0.50413, 0.00000, 0), + (498, 499, 24, 'Mi17_DZE', '2021-09-23 10:46:26', '2021-09-23 10:49:13', 0, '[36,[10770.1,14435.3,0.512]]', '[[[],[]],[["Skin_Civilian2_DZ","7Rnd_45ACP_1911"],[1,1]],[[],[]]]', '[["glass1",0.367],["glass2",0.03],["glass3",0.464],["glass4",0.506],["glass5",0.513],["glass6",0.854],["motor",0.646],["elektronika",0.433],["mala vrtule",0.806],["velka vrtule",0.56]]', 0.85869, 0.00000, 0), + (499, 500, 24, 'ATV_CIV_Green_CP_DZE', '2021-09-23 10:46:27', '2021-09-23 10:49:13', 0, '[124,[3075.68,7735.64,0.049]]', '[[[],[]],[["ItemMorphine","10Rnd_303British"],[1,1]],[[],[]]]', '[["motor",0.018],["palivo",0.073],["wheel_1_1_steering",0.517],["wheel_1_2_steering",0.885],["wheel_2_1_steering",0.871],["wheel_2_2_steering",0.208],["karoserie",0.573]]', 0.41726, 0.00000, 0), + (500, 501, 24, 'UH1H_GREY_DZE', '2021-09-23 10:46:27', '2021-09-23 10:49:13', 0, '[44,[16699.7,19044.2,0.007]]', '[[[],[]],[["ItemSodaLemonade"],[1]],[["GymBag_Green_DZE1"],[1]]]', '[["glass1",0.755],["glass2",0.838],["glass3",0.542],["glass4",0.254],["glass5",0.373],["motor",0.484],["elektronika",0.107],["mala vrtule",0.547],["velka vrtule",0.792]]', 0.48916, 0.00000, 0), + (501, 502, 24, 'Pickup_PK_INS_DZE', '2021-09-23 10:46:27', '2021-09-23 10:49:13', 0, '[100,[8957.92,16477.9,0.006]]', '[]', '[["motor",0.229],["karoserie",0.586],["palivo",0.792],["wheel_1_1_steering",0.413],["wheel_2_1_steering",0.77],["wheel_1_2_steering",0.427],["wheel_2_2_steering",0.504],["glass1",0.107],["glass2",0.873]]', 0.52167, 0.00000, 0), + (502, 503, 24, 'Lada1_TK_CIV_EP1_DZE', '2021-09-23 10:46:27', '2021-09-23 10:49:13', 0, '[13,[10481.7,9382.27,0.079]]', '[[[],[]],[["PartGeneric","ItemPainkiller1","ItemBandage"],[1,1,1]],[[],[]]]', '[["motor",0.84],["karoserie",0.378],["palivo",0.673],["wheel_1_1_steering",0.877],["wheel_2_1_steering",0.21],["wheel_1_2_steering",0.965],["wheel_2_2_steering",0.644],["glass1",0.724],["glass2",0.066],["glass3",0.975],["glass4",0.308]]', 0.11754, 0.00000, 0), + (503, 504, 24, 'Skoda_DZE', '2021-09-23 10:49:46', '2021-09-23 11:09:09', 0, '[82,[9327.24,15754.2,0.034]]', '[[[],[]],[["Skin_Rocker2_DZ","Skin_Civilian4_DZ"],[1,1]],[["Czech_Vest_Pouch_DZE1"],[1]]]', '[["motor",0.533],["karoserie",0.319],["palivo",0.679],["wheel_1_1_steering",0.065],["wheel_2_1_steering",0.868],["wheel_1_2_steering",0.196],["wheel_2_2_steering",0.687],["glass1",0.606],["glass2",0.995],["glass3",0.346],["glass4",0.874]]', 0.88781, 0.00000, 0), + (504, 505, 24, 'ATV_CIV_Yellow_CP_DZE', '2021-09-23 10:49:47', '2021-09-23 11:09:09', 0, '[94,[7786.86,14313.9,5.951e-04]]', '[[[],[]],[["Skin_SurvivorWcombat_DZ"],[1]],[[],[]]]', '[["motor",0.207],["palivo",0.276],["wheel_1_1_steering",0.185],["wheel_1_2_steering",0.796],["wheel_2_1_steering",0.304],["wheel_2_2_steering",0.611],["karoserie",0.078]]', 0.63817, 0.00000, 0), + (505, 506, 24, 'UralRefuel_TK_EP1_DZ', '2021-09-23 10:49:47', '2021-09-23 11:09:09', 0, '[13,[16815.1,13575.2,0.019]]', '[[[],[]],[["ItemHeatPack"],[1]],[["Assault_Pack_DZE1"],[1]]]', '[["glass1",0.919],["glass2",0.065],["glass3",0.334],["glass4",0.711],["wheel_1_1_steering",0.111],["wheel_2_1_steering",0.361],["wheel_1_3_steering",0.968],["wheel_2_3_steering",0.483],["wheel_1_2_steering",0.54],["wheel_2_2_steering",0.755],["motor",0.894],["karoserie",0.25],["palivo",0.545]]', 0.94912, 0.00000, 0), + (506, 507, 24, 'T810_ACR_REAMMO_DZE', '2021-09-23 10:49:48', '2021-09-23 11:09:09', 0, '[99,[8450.05,17090.2,4.692e-04]]', '[[["Revolver_Gold_DZ"],[1]],[["ItemWinterDomeTent"],[1]],[[],[]]]', '[["wheel_1_1_steering",0.341],["wheel_1_2_steering",0.151],["wheel_1_3_steering",0.57],["wheel_2_1_steering",0.7],["wheel_2_2_steering",0.355],["wheel_2_3_steering",0.026],["palivo",0.017],["glass1",0.211],["glass2",0.373],["glass3",0.085],["glass4",0.945],["motor",0.393],["karoserie",0.287]]', 0.87876, 0.00000, 0), + (507, 508, 24, 'MTVR_Bird_DZE', '2021-09-23 11:09:42', '2021-09-23 11:11:40', 0, '[4,[10413,15782.5,0.017]]', '[]', '[["motor",0.292],["elektronika",0.216],["mala vrtule",0.87],["velka vrtule",0.503],["munice",0.506]]', 0.73552, 0.00000, 0), + (508, 509, 24, 'T810A_ACR_DES_DZE', '2021-09-23 11:09:42', '2021-09-23 11:11:40', 0, '[147,[12995.6,9483.07,0.074]]', '[]', '[["wheel_1_1_steering",0.267],["wheel_1_2_steering",0.746],["wheel_1_3_steering",0.425],["wheel_2_1_steering",0.232],["wheel_2_2_steering",0.122],["wheel_2_3_steering",0.608],["palivo",0.962],["glass1",0.096],["glass2",0.646],["glass3",0.589],["glass4",0.17],["motor",0.809],["karoserie",0.896]]', 0.82709, 0.00000, 0), + (509, 510, 24, 'VaultStorageLocked', '2021-09-23 13:40:56', '2021-09-24 15:46:50', 2580, '[59.941,[8239.713,13341.496,0],"76561198180152023",[[0.866,0.501,0],[0,0,1]]]', '[[["CZ750_DZ","ItemCrowbar","RPG18","HK417_Holo_DZ","M136","ItemKeyGreen2477","ItemKeyKit","Javelin","Binocular_Vector","ItemSledge","ItemKnife","ItemSolder_DZE","ItemEtool"],[1,1,1,1,1,1,1,1,1,1,1,1,1]],[["FoodMRE","ItemPainkiller","ItemHotwireKit","PartEngine","PartFueltank","ItemBloodbag","ItemAntibiotic","PartGlass","RPG18","FoodCanGriff","FoodCanFrankBeans","100Rnd_762x51_M240","M136","ItemARM","ItemHeliAVE","ItemTNK","ItemHeliTNK"],[1,1,1,1,1,2,1,1,2,1,1,1,2,2,1,1,1]],[[],[]]]', '[]', 0.00000, 0.00000, 0), + (510, 511, 24, 'pook_gunship_CDF_DZE', '2021-09-24 08:55:42', '2021-09-24 09:22:01', 0, '[104,[15288.3,10643.1,0.005]]', '[[[],[]],[["10Rnd_303British","ItemSodaLemonadeEmpty","HandChemRed"],[1,1,1]],[[],[]]]', '[["glass1",0.968],["engine",0.156],["mala vrtule",0.309],["velka vrtule",0.017]]', 0.75252, 0.00000, 0), + (511, 512, 24, 'Jeep_DZE', '2021-09-24 09:53:37', '2021-09-24 10:12:18', 0, '[71,[6168.42,10404.1,0.011]]', '[[[],[]],[["ItemPainkiller5","PartWheel","TrashTinCan"],[1,1,1]],[[],[]]]', '[["glass1",0.492],["glass2",0.64],["karoserie",0.371],["palivo",0.275],["wheel_1_1_steering",0.071],["wheel_1_2_steering",0.76],["wheel_2_1_steering",0.064],["wheel_2_2_steering",0.432],["motor",0.534]]', 0.48000, 0.00000, 0), + (512, 513, 24, 'ATV_CIV_Blue_CP_DZE', '2021-09-24 10:35:30', '2021-09-24 10:39:40', 0, '[18,[10652.6,9147.73,0.14]]', '[[[],[]],[["ItemBandage"],[1]],[[],[]]]', '[["motor",0.631],["palivo",0.504],["wheel_1_1_steering",0.772],["wheel_1_2_steering",0.977],["wheel_2_1_steering",0.398],["wheel_2_2_steering",0.266],["karoserie",0.735]]', 0.85331, 0.00000, 0), + (513, 514, 24, 'UH60M_EP1_DZE', '2021-09-24 13:55:41', '2021-09-29 10:44:33', 7543, '[25.215,[4641.325,7563.296,0.099]]', '[[["RPG18","Javelin","M200_CheyTac_DZ","ItemHatchet","M249_EP1_DZ","M136"],[1,2,1,1,1,1]],[["PartVRotor","PartEngine","PartGeneric","RPG18","PartWheel","ItemSodaR4z0r","ItemSodaMdew","ItemBloodbag","ItemSodaPepsi","ItemMorphine","20Rnd_762x51_DMR","5Rnd_408_CheyTac","ItemBandage","FoodCanFrankBeans","100Rnd_762x54_PK","100Rnd_762x51_M240","ItemDocument","ItemAntibiotic6","M136"],[3,1,2,2,1,1,1,3,3,1,4,6,2,1,15,4,2,1,2]],[["LargeGunBag_DZE1","CoyoteBackpackDes_DZE1"],[2,1]]]', '[["glass1",0],["glass2",0],["glass3",0],["glass4",0],["motor",0],["mala vrtule",0],["velka vrtule",0],["munice",0]]', 0.98636, 0.00000, 41750), + (514, 515, 24, 'Plastic_Pole_EP1_DZ', '2021-09-24 15:21:48', '2021-09-24 16:12:32', 11, '[56.607,[8220.156,13340.502,0],"76561198180152023",[[0.835,0.55,0],[0,0,1]]]', '[["76561198180152023",[83,116,117,122,101,114]]]', '[]', 0.00000, 0.00000, 0), + (516, 517, 24, 'Helipad_Army_DZ', '2021-09-24 15:45:02', '2021-09-24 16:12:32', 11, '[243.558,[8199.366,13332.575,0.128],"76561198180152023",[[-0.895,-0.445,0],[0,0,1]]]', '[]', '[]', 0.00000, 0.00000, 0), + (517, 518, 24, 'CH_47F_EP1_Black_DZE', '2021-09-24 16:17:34', '2021-09-25 11:37:35', 0, '[145.037,[8466.538,14828.542,-0.07]]', '[[[],[]],[["Skin_Dealer_DZ","8Rnd_9x18_Makarov"],[1,1]],[[],[]]]', '[["motor",0.535],["sklo predni P",0.362],["sklo predni L",0.366],["glass3",0.661],["glass4",0.039]]', 0.26300, 0.00000, 0), + (518, 519, 24, 'KamazReammo_DZE', '2021-09-25 10:03:07', '2021-09-27 09:33:44', 9738, '[228.354,[2115.441,9593.941,-0.076]]', '[[["XM2010_NV_SD_DZ","FN_FAL_ANPVS4_DZE"],[1,1]],[["PartEngine","ItemDocument","5Rnd_762x67_XM2010_SD","200Rnd_556x45_M249","PartWheel"],[1,4,4,2,1]],[[],[]]]', '[["wheel_1_1_steering",0],["wheel_2_1_steering",0],["wheel_1_3_steering",0],["wheel_2_3_steering",0],["wheel_1_2_steering",0],["wheel_2_2_steering",0],["motor",0],["karoserie",0],["palivo",0],["glass1",0],["glass2",0],["glass3",0],["glass4",0]]', 0.75856, 0.00000, 0); +/*!40000 ALTER TABLE `object_data` ENABLE KEYS */; + +-- Dumping structure for table epoch_database.player_data +CREATE TABLE IF NOT EXISTS `player_data` ( + `PlayerUID` varchar(20) NOT NULL DEFAULT '0', + `PlayerName` varchar(128) CHARACTER SET utf8 NOT NULL DEFAULT 'Null', + `PlayerMorality` int(11) NOT NULL DEFAULT 0, + `PlayerSex` tinyint(3) unsigned NOT NULL DEFAULT 0, + `playerGroup` varchar(2048) NOT NULL DEFAULT '[]', + `PlayerCoins` bigint(20) NOT NULL DEFAULT 0, + `BankCoins` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`PlayerUID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- Dumping data for table epoch_database.player_data: ~1 rows (approximately) +/*!40000 ALTER TABLE `player_data` DISABLE KEYS */; +INSERT INTO `player_data` (`PlayerUID`, `PlayerName`, `PlayerMorality`, `PlayerSex`, `playerGroup`, `PlayerCoins`, `BankCoins`) VALUES + ('76561198180152023', 'Stuzer', 0, 0, '[]', 0, 133567); +/*!40000 ALTER TABLE `player_data` ENABLE KEYS */; + +-- Dumping structure for table epoch_database.player_login +CREATE TABLE IF NOT EXISTS `player_login` ( + `LoginID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `PlayerUID` varchar(20) NOT NULL, + `CharacterID` int(11) unsigned NOT NULL DEFAULT 0, + `Datestamp` datetime NOT NULL, + `Action` int(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`LoginID`) +) ENGINE=InnoDB AUTO_INCREMENT=432 DEFAULT CHARSET=latin1; + +-- Dumping data for table epoch_database.player_login: ~431 rows (approximately) +/*!40000 ALTER TABLE `player_login` DISABLE KEYS */; +INSERT INTO `player_login` (`LoginID`, `PlayerUID`, `CharacterID`, `Datestamp`, `Action`) VALUES + (1, '76561198180152023', 1, '2021-09-12 07:20:51', 2), + (2, '76561198180152023', 1, '2021-09-12 07:20:54', 1), + (3, '76561198180152023', 1, '2021-09-12 07:21:26', 0), + (4, '76561198180152023', 1, '2021-09-12 07:29:38', 3), + (5, '76561198180152023', 1, '2021-09-12 07:35:29', 2), + (6, '76561198180152023', 1, '2021-09-12 07:35:33', 2), + (7, '76561198180152023', 1, '2021-09-12 07:35:33', 1), + (8, '76561198180152023', 1, '2021-09-12 07:35:34', 0), + (9, '76561198180152023', 1, '2021-09-12 08:21:12', 3), + (10, '76561198180152023', 1, '2021-09-12 08:24:49', 2), + (11, '76561198180152023', 1, '2021-09-12 08:24:49', 1), + (12, '76561198180152023', 1, '2021-09-12 08:24:50', 0), + (13, '76561198180152023', 1, '2021-09-12 08:25:34', 3), + (14, '76561198180152023', 1, '2021-09-12 08:26:28', 2), + (15, '76561198180152023', 1, '2021-09-12 08:26:28', 1), + (16, '76561198180152023', 1, '2021-09-12 08:26:29', 0), + (17, '76561198180152023', 1, '2021-09-12 08:26:48', 3), + (18, '76561198180152023', 1, '2021-09-12 08:48:33', 2), + (19, '76561198180152023', 1, '2021-09-12 08:48:37', 2), + (20, '76561198180152023', 1, '2021-09-12 08:48:38', 1), + (21, '76561198180152023', 1, '2021-09-12 08:48:38', 0), + (22, '76561198180152023', 1, '2021-09-12 08:52:56', 2), + (23, '76561198180152023', 1, '2021-09-12 08:52:56', 1), + (24, '76561198180152023', 1, '2021-09-12 08:52:57', 0), + (25, '76561198180152023', 1, '2021-09-12 10:34:06', 2), + (26, '76561198180152023', 1, '2021-09-12 10:34:10', 2), + (27, '76561198180152023', 1, '2021-09-12 10:34:11', 1), + (28, '76561198180152023', 1, '2021-09-12 10:34:11', 0), + (29, '76561198180152023', 1, '2021-09-12 10:37:22', 3), + (30, '76561198180152023', 2, '2021-09-12 10:45:24', 2), + (31, '76561198180152023', 2, '2021-09-12 10:45:29', 2), + (32, '76561198180152023', 2, '2021-09-12 10:45:34', 1), + (33, '76561198180152023', 2, '2021-09-12 10:45:35', 0), + (34, '76561198180152023', 2, '2021-09-12 10:49:01', 3), + (35, '76561198180152023', 2, '2021-09-12 10:53:42', 2), + (36, '76561198180152023', 2, '2021-09-12 10:53:47', 2), + (37, '76561198180152023', 2, '2021-09-12 10:53:47', 1), + (38, '76561198180152023', 2, '2021-09-12 10:53:47', 0), + (39, '76561198180152023', 2, '2021-09-12 11:02:56', 3), + (40, '76561198180152023', 2, '2021-09-12 11:29:56', 2), + (41, '76561198180152023', 2, '2021-09-12 11:30:01', 2), + (42, '76561198180152023', 2, '2021-09-12 11:30:01', 1), + (43, '76561198180152023', 2, '2021-09-12 11:30:01', 0), + (44, '76561198180152023', 2, '2021-09-12 11:40:27', 3), + (45, '76561198180152023', 2, '2021-09-12 12:13:15', 2), + (46, '76561198180152023', 2, '2021-09-12 12:13:20', 2), + (47, '76561198180152023', 2, '2021-09-12 12:13:20', 1), + (48, '76561198180152023', 2, '2021-09-12 12:13:21', 0), + (49, '76561198180152023', 2, '2021-09-12 12:18:14', 2), + (50, '76561198180152023', 2, '2021-09-12 12:18:19', 2), + (51, '76561198180152023', 2, '2021-09-12 12:18:19', 1), + (52, '76561198180152023', 2, '2021-09-12 12:18:20', 0), + (53, '76561198180152023', 2, '2021-09-12 12:30:09', 2), + (54, '76561198180152023', 2, '2021-09-12 12:30:14', 2), + (55, '76561198180152023', 2, '2021-09-12 12:30:15', 1), + (56, '76561198180152023', 2, '2021-09-12 12:30:15', 0), + (57, '76561198180152023', 2, '2021-09-12 12:35:46', 2), + (58, '76561198180152023', 2, '2021-09-12 12:35:50', 2), + (59, '76561198180152023', 2, '2021-09-12 12:35:50', 1), + (60, '76561198180152023', 2, '2021-09-12 12:35:51', 0), + (61, '76561198180152023', 2, '2021-09-12 12:42:30', 3), + (62, '76561198180152023', 3, '2021-09-12 12:42:59', 2), + (63, '76561198180152023', 3, '2021-09-12 12:43:02', 1), + (64, '76561198180152023', 3, '2021-09-12 12:43:02', 0), + (65, '76561198180152023', 3, '2021-09-12 12:44:55', 2), + (66, '76561198180152023', 3, '2021-09-12 12:44:59', 2), + (67, '76561198180152023', 3, '2021-09-12 12:44:59', 1), + (68, '76561198180152023', 3, '2021-09-12 12:44:59', 0), + (69, '76561198180152023', 3, '2021-09-12 12:48:54', 2), + (70, '76561198180152023', 3, '2021-09-12 12:48:58', 2), + (71, '76561198180152023', 3, '2021-09-12 12:48:59', 1), + (72, '76561198180152023', 3, '2021-09-12 12:48:59', 0), + (73, '76561198180152023', 3, '2021-09-12 12:50:44', 2), + (74, '76561198180152023', 3, '2021-09-12 12:50:48', 2), + (75, '76561198180152023', 3, '2021-09-12 12:50:48', 1), + (76, '76561198180152023', 3, '2021-09-12 12:50:49', 0), + (77, '76561198180152023', 3, '2021-09-12 12:53:49', 2), + (78, '76561198180152023', 3, '2021-09-12 12:53:54', 2), + (79, '76561198180152023', 3, '2021-09-12 12:53:54', 1), + (80, '76561198180152023', 3, '2021-09-12 12:53:54', 0), + (81, '76561198180152023', 3, '2021-09-12 12:55:54', 2), + (82, '76561198180152023', 3, '2021-09-12 12:55:54', 1), + (83, '76561198180152023', 3, '2021-09-12 12:55:55', 0), + (84, '76561198180152023', 3, '2021-09-12 12:58:02', 2), + (85, '76561198180152023', 3, '2021-09-12 12:58:03', 1), + (86, '76561198180152023', 3, '2021-09-12 12:58:04', 0), + (87, '76561198180152023', 3, '2021-09-12 13:10:23', 2), + (88, '76561198180152023', 3, '2021-09-12 13:10:25', 2), + (89, '76561198180152023', 3, '2021-09-12 13:10:25', 1), + (90, '76561198180152023', 3, '2021-09-12 13:10:26', 0), + (91, '76561198180152023', 2, '2021-09-12 13:13:29', 2), + (92, '76561198180152023', 2, '2021-09-12 13:13:29', 1), + (93, '76561198180152023', 2, '2021-09-12 13:13:30', 0), + (94, '76561198180152023', 2, '2021-09-12 13:58:15', 2), + (95, '76561198180152023', 2, '2021-09-12 13:58:16', 1), + (96, '76561198180152023', 2, '2021-09-12 13:58:20', 0), + (97, '76561198180152023', 2, '2021-09-12 14:02:04', 2), + (98, '76561198180152023', 2, '2021-09-12 14:02:05', 1), + (99, '76561198180152023', 2, '2021-09-12 14:02:06', 0), + (100, '76561198180152023', 2, '2021-09-12 14:12:19', 2), + (101, '76561198180152023', 2, '2021-09-12 14:12:24', 2), + (102, '76561198180152023', 2, '2021-09-12 14:12:24', 1), + (103, '76561198180152023', 2, '2021-09-12 14:12:24', 0), + (104, '76561198180152023', 2, '2021-09-12 14:16:07', 2), + (105, '76561198180152023', 2, '2021-09-12 14:16:07', 1), + (106, '76561198180152023', 2, '2021-09-12 14:16:08', 0), + (107, '76561198180152023', 2, '2021-09-12 14:19:40', 2), + (108, '76561198180152023', 2, '2021-09-12 14:19:45', 2), + (109, '76561198180152023', 2, '2021-09-12 14:19:45', 1), + (110, '76561198180152023', 2, '2021-09-12 14:19:45', 0), + (111, '76561198180152023', 2, '2021-09-12 14:35:13', 2), + (112, '76561198180152023', 2, '2021-09-12 14:35:18', 2), + (113, '76561198180152023', 2, '2021-09-12 14:35:18', 1), + (114, '76561198180152023', 2, '2021-09-12 14:35:18', 0), + (115, '76561198180152023', 2, '2021-09-12 14:41:59', 2), + (116, '76561198180152023', 2, '2021-09-12 14:42:04', 2), + (117, '76561198180152023', 2, '2021-09-12 14:42:04', 1), + (118, '76561198180152023', 2, '2021-09-12 14:42:04', 0), + (119, '76561198180152023', 2, '2021-09-12 14:42:15', 3), + (120, '76561198180152023', 2, '2021-09-12 14:46:31', 2), + (121, '76561198180152023', 2, '2021-09-12 14:46:31', 1), + (122, '76561198180152023', 2, '2021-09-12 14:46:31', 0), + (123, '76561198180152023', 2, '2021-09-12 14:46:42', 3), + (124, '76561198180152023', 2, '2021-09-12 15:04:26', 2), + (125, '76561198180152023', 2, '2021-09-12 15:04:27', 1), + (126, '76561198180152023', 2, '2021-09-12 15:04:29', 0), + (127, '76561198180152023', 2, '2021-09-12 15:06:24', 2), + (128, '76561198180152023', 2, '2021-09-12 15:06:29', 2), + (129, '76561198180152023', 2, '2021-09-12 15:06:29', 1), + (130, '76561198180152023', 2, '2021-09-12 15:06:29', 0), + (131, '76561198180152023', 2, '2021-09-12 15:06:29', 3), + (132, '76561198180152023', 2, '2021-09-12 15:09:25', 2), + (133, '76561198180152023', 2, '2021-09-12 15:09:29', 2), + (134, '76561198180152023', 2, '2021-09-12 15:09:29', 1), + (135, '76561198180152023', 2, '2021-09-12 15:09:29', 0), + (136, '76561198180152023', 2, '2021-09-12 15:15:19', 2), + (137, '76561198180152023', 2, '2021-09-12 15:15:20', 1), + (138, '76561198180152023', 2, '2021-09-12 15:15:21', 0), + (139, '76561198180152023', 2, '2021-09-12 15:27:28', 2), + (140, '76561198180152023', 2, '2021-09-12 15:27:38', 1), + (141, '76561198180152023', 2, '2021-09-12 15:27:40', 3), + (142, '76561198180152023', 2, '2021-09-12 15:27:40', 0), + (143, '76561198180152023', 2, '2021-09-12 15:32:23', 2), + (144, '76561198180152023', 2, '2021-09-12 15:32:23', 1), + (145, '76561198180152023', 2, '2021-09-12 15:32:24', 0), + (146, '76561198180152023', 2, '2021-09-12 15:42:37', 2), + (147, '76561198180152023', 2, '2021-09-12 15:42:38', 1), + (148, '76561198180152023', 2, '2021-09-12 15:42:39', 0), + (149, '76561198180152023', 2, '2021-09-12 15:47:49', 2), + (150, '76561198180152023', 2, '2021-09-12 15:47:54', 2), + (151, '76561198180152023', 2, '2021-09-12 15:47:54', 1), + (152, '76561198180152023', 2, '2021-09-12 15:47:54', 0), + (153, '76561198180152023', 2, '2021-09-12 16:09:49', 2), + (154, '76561198180152023', 2, '2021-09-12 16:09:49', 1), + (155, '76561198180152023', 2, '2021-09-12 16:09:50', 0), + (156, '76561198180152023', 2, '2021-09-12 16:43:40', 2), + (157, '76561198180152023', 2, '2021-09-12 16:43:41', 1), + (158, '76561198180152023', 2, '2021-09-12 16:43:42', 0), + (159, '76561198180152023', 2, '2021-09-12 16:57:55', 2), + (160, '76561198180152023', 2, '2021-09-12 16:58:00', 2), + (161, '76561198180152023', 2, '2021-09-12 16:58:00', 1), + (162, '76561198180152023', 2, '2021-09-12 16:58:02', 0), + (163, '76561198180152023', 2, '2021-09-12 16:58:34', 3), + (164, '76561198180152023', 2, '2021-09-13 09:42:06', 2), + (165, '76561198180152023', 2, '2021-09-13 10:07:25', 2), + (166, '76561198180152023', 2, '2021-09-13 10:07:28', 1), + (167, '76561198180152023', 2, '2021-09-13 10:07:48', 0), + (168, '76561198180152023', 2, '2021-09-13 10:14:49', 2), + (169, '76561198180152023', 2, '2021-09-13 10:14:49', 1), + (170, '76561198180152023', 2, '2021-09-13 10:14:51', 0), + (171, '76561198180152023', 2, '2021-09-13 10:27:42', 2), + (172, '76561198180152023', 2, '2021-09-13 10:27:47', 2), + (173, '76561198180152023', 2, '2021-09-13 10:27:48', 1), + (174, '76561198180152023', 2, '2021-09-13 10:27:50', 0), + (175, '76561198180152023', 2, '2021-09-13 10:34:18', 3), + (176, '76561198180152023', 2, '2021-09-13 10:36:16', 2), + (177, '76561198180152023', 2, '2021-09-13 10:36:17', 1), + (178, '76561198180152023', 2, '2021-09-13 10:36:19', 0), + (179, '76561198180152023', 2, '2021-09-13 10:36:53', 3), + (180, '76561198180152023', 2, '2021-09-13 10:39:50', 2), + (181, '76561198180152023', 2, '2021-09-13 10:39:54', 2), + (182, '76561198180152023', 2, '2021-09-13 10:39:54', 1), + (183, '76561198180152023', 2, '2021-09-13 10:40:10', 0), + (184, '76561198180152023', 2, '2021-09-13 10:40:48', 3), + (185, '76561198180152023', 2, '2021-09-13 10:42:46', 2), + (186, '76561198180152023', 2, '2021-09-13 10:42:50', 2), + (187, '76561198180152023', 2, '2021-09-13 10:42:50', 1), + (188, '76561198180152023', 2, '2021-09-13 10:43:06', 0), + (189, '76561198180152023', 2, '2021-09-13 10:44:24', 3), + (190, '76561198180152023', 2, '2021-09-13 10:46:42', 2), + (191, '76561198180152023', 2, '2021-09-13 10:46:46', 2), + (192, '76561198180152023', 2, '2021-09-13 10:46:46', 1), + (193, '76561198180152023', 2, '2021-09-13 10:46:48', 0), + (194, '76561198180152023', 2, '2021-09-13 10:47:35', 3), + (195, '76561198180152023', 2, '2021-09-13 10:53:12', 2), + (196, '76561198180152023', 2, '2021-09-13 10:53:12', 1), + (197, '76561198180152023', 2, '2021-09-13 10:53:13', 0), + (198, '76561198180152023', 2, '2021-09-13 10:54:15', 3), + (199, '76561198180152023', 2, '2021-09-13 10:58:55', 2), + (200, '76561198180152023', 2, '2021-09-13 10:58:56', 1), + (201, '76561198180152023', 2, '2021-09-13 10:58:57', 0), + (202, '76561198180152023', 2, '2021-09-13 11:25:54', 2), + (203, '76561198180152023', 2, '2021-09-13 11:25:54', 1), + (204, '76561198180152023', 2, '2021-09-13 11:31:58', 2), + (205, '76561198180152023', 2, '2021-09-13 11:32:03', 2), + (206, '76561198180152023', 2, '2021-09-13 11:32:03', 1), + (207, '76561198180152023', 2, '2021-09-13 13:06:51', 2), + (208, '76561198180152023', 2, '2021-09-13 13:06:55', 2), + (209, '76561198180152023', 2, '2021-09-13 13:06:56', 1), + (210, '76561198180152023', 2, '2021-09-13 13:06:57', 0), + (211, '76561198180152023', 2, '2021-09-13 13:15:11', 2), + (212, '76561198180152023', 2, '2021-09-13 13:15:16', 2), + (213, '76561198180152023', 2, '2021-09-13 13:15:16', 1), + (214, '76561198180152023', 2, '2021-09-13 13:15:16', 0), + (215, '76561198180152023', 2, '2021-09-13 13:42:11', 2), + (216, '76561198180152023', 2, '2021-09-13 13:42:15', 2), + (217, '76561198180152023', 2, '2021-09-13 13:42:16', 1), + (218, '76561198180152023', 2, '2021-09-13 13:42:16', 0), + (219, '76561198180152023', 2, '2021-09-13 13:46:21', 2), + (220, '76561198180152023', 2, '2021-09-13 13:46:21', 1), + (221, '76561198180152023', 2, '2021-09-13 13:46:23', 0), + (222, '76561198180152023', 2, '2021-09-13 14:05:00', 2), + (223, '76561198180152023', 2, '2021-09-13 14:05:00', 1), + (224, '76561198180152023', 2, '2021-09-13 14:05:02', 0), + (225, '76561198180152023', 2, '2021-09-13 14:09:00', 2), + (226, '76561198180152023', 2, '2021-09-13 14:09:00', 1), + (227, '76561198180152023', 2, '2021-09-13 14:09:01', 0), + (228, '76561198180152023', 2, '2021-09-13 14:12:21', 3), + (229, '76561198180152023', 2, '2021-09-13 14:14:18', 2), + (230, '76561198180152023', 2, '2021-09-13 14:14:23', 2), + (231, '76561198180152023', 2, '2021-09-13 14:14:23', 1), + (232, '76561198180152023', 2, '2021-09-13 14:14:24', 0), + (233, '76561198180152023', 2, '2021-09-13 14:21:19', 2), + (234, '76561198180152023', 2, '2021-09-13 14:21:21', 2), + (235, '76561198180152023', 2, '2021-09-13 14:21:21', 1), + (236, '76561198180152023', 2, '2021-09-13 14:21:22', 0), + (237, '76561198180152023', 2, '2021-09-13 14:21:59', 3), + (238, '76561198180152023', 2, '2021-09-13 14:23:59', 2), + (239, '76561198180152023', 2, '2021-09-13 14:23:59', 1), + (240, '76561198180152023', 2, '2021-09-13 14:23:59', 0), + (241, '76561198180152023', 2, '2021-09-13 14:26:50', 3), + (242, '76561198180152023', 2, '2021-09-13 14:29:51', 2), + (243, '76561198180152023', 2, '2021-09-13 14:29:56', 2), + (244, '76561198180152023', 2, '2021-09-13 14:29:57', 1), + (245, '76561198180152023', 2, '2021-09-13 14:29:57', 0), + (246, '76561198180152023', 2, '2021-09-13 15:13:46', 2), + (247, '76561198180152023', 2, '2021-09-13 15:13:51', 2), + (248, '76561198180152023', 2, '2021-09-13 15:13:51', 1), + (249, '76561198180152023', 2, '2021-09-13 15:13:57', 0), + (250, '76561198180152023', 2, '2021-09-14 13:55:29', 2), + (251, '76561198180152023', 2, '2021-09-14 13:55:32', 2), + (252, '76561198180152023', 2, '2021-09-14 13:55:32', 1), + (253, '76561198180152023', 2, '2021-09-14 13:55:35', 0), + (254, '76561198180152023', 2, '2021-09-14 14:15:06', 2), + (255, '76561198180152023', 2, '2021-09-14 14:15:06', 1), + (256, '76561198180152023', 2, '2021-09-14 14:15:08', 0), + (257, '76561198180152023', 2, '2021-09-14 14:27:55', 2), + (258, '76561198180152023', 2, '2021-09-14 14:27:55', 1), + (259, '76561198180152023', 2, '2021-09-14 14:27:56', 0), + (260, '76561198180152023', 2, '2021-09-14 15:08:15', 2), + (261, '76561198180152023', 2, '2021-09-14 15:08:20', 2), + (262, '76561198180152023', 2, '2021-09-14 15:08:20', 1), + (263, '76561198180152023', 2, '2021-09-14 15:08:21', 0), + (264, '76561198180152023', 2, '2021-09-14 15:20:16', 3), + (265, '76561198180152023', 2, '2021-09-14 15:20:42', 2), + (266, '76561198180152023', 2, '2021-09-14 15:20:46', 1), + (267, '76561198180152023', 2, '2021-09-14 15:21:02', 0), + (268, '76561198180152023', 2, '2021-09-14 15:24:43', 3), + (269, '76561198180152023', 2, '2021-09-14 15:26:07', 2), + (270, '76561198180152023', 2, '2021-09-14 15:26:10', 1), + (271, '76561198180152023', 2, '2021-09-14 15:26:25', 0), + (272, '76561198180152023', 4, '2021-09-14 15:34:05', 2), + (273, '76561198180152023', 4, '2021-09-14 15:35:08', 1), + (274, '76561198180152023', 4, '2021-09-14 15:35:24', 0), + (275, '76561198180152023', 4, '2021-09-14 15:41:36', 3), + (276, '76561198180152023', 4, '2021-09-14 15:44:48', 2), + (277, '76561198180152023', 4, '2021-09-14 15:44:52', 1), + (278, '76561198180152023', 4, '2021-09-14 15:44:53', 0), + (279, '76561198180152023', 4, '2021-09-14 16:02:29', 3), + (280, '76561198180152023', 4, '2021-09-14 16:02:51', 2), + (281, '76561198180152023', 4, '2021-09-14 16:02:54', 1), + (282, '76561198180152023', 4, '2021-09-14 16:02:54', 0), + (283, '76561198180152023', 4, '2021-09-14 16:03:37', 3), + (284, '76561198180152023', 4, '2021-09-21 15:05:39', 2), + (285, '76561198180152023', 4, '2021-09-21 15:05:48', 1), + (286, '76561198180152023', 4, '2021-09-21 15:05:56', 0), + (287, '76561198180152023', 4, '2021-09-21 15:15:12', 3), + (288, '76561198180152023', 4, '2021-09-21 15:17:56', 2), + (289, '76561198180152023', 4, '2021-09-21 15:18:00', 2), + (290, '76561198180152023', 4, '2021-09-21 15:18:00', 1), + (291, '76561198180152023', 4, '2021-09-21 15:18:00', 0), + (292, '76561198180152023', 4, '2021-09-21 15:18:43', 3), + (293, '76561198180152023', 4, '2021-09-21 15:22:28', 2), + (294, '76561198180152023', 4, '2021-09-21 15:22:28', 1), + (295, '76561198180152023', 4, '2021-09-21 15:22:29', 0), + (296, '76561198180152023', 4, '2021-09-21 15:41:20', 2), + (297, '76561198180152023', 4, '2021-09-21 15:41:23', 1), + (298, '76561198180152023', 4, '2021-09-21 15:41:23', 0), + (299, '76561198180152023', 4, '2021-09-21 15:50:44', 2), + (300, '76561198180152023', 4, '2021-09-21 15:50:47', 1), + (301, '76561198180152023', 4, '2021-09-21 15:50:47', 0), + (302, '76561198180152023', 4, '2021-09-21 15:58:37', 2), + (303, '76561198180152023', 4, '2021-09-21 15:58:39', 1), + (304, '76561198180152023', 4, '2021-09-21 15:58:39', 0), + (305, '76561198180152023', 4, '2021-09-23 10:27:58', 2), + (306, '76561198180152023', 4, '2021-09-23 10:28:02', 1), + (307, '76561198180152023', 4, '2021-09-23 10:28:28', 0), + (308, '76561198180152023', 4, '2021-09-23 10:36:54', 2), + (309, '76561198180152023', 4, '2021-09-23 10:36:55', 2), + (310, '76561198180152023', 4, '2021-09-23 10:36:55', 1), + (311, '76561198180152023', 4, '2021-09-23 10:36:57', 0), + (312, '76561198180152023', 4, '2021-09-23 10:39:39', 2), + (313, '76561198180152023', 4, '2021-09-23 10:39:40', 2), + (314, '76561198180152023', 4, '2021-09-23 10:39:40', 1), + (315, '76561198180152023', 4, '2021-09-23 10:39:40', 0), + (316, '76561198180152023', 4, '2021-09-23 10:46:20', 2), + (317, '76561198180152023', 4, '2021-09-23 10:46:20', 2), + (318, '76561198180152023', 4, '2021-09-23 10:46:21', 1), + (319, '76561198180152023', 4, '2021-09-23 10:46:22', 0), + (320, '76561198180152023', 4, '2021-09-23 10:49:42', 2), + (321, '76561198180152023', 4, '2021-09-23 10:49:44', 2), + (322, '76561198180152023', 4, '2021-09-23 10:49:44', 1), + (323, '76561198180152023', 4, '2021-09-23 10:49:45', 0), + (324, '76561198180152023', 4, '2021-09-23 11:09:38', 2), + (325, '76561198180152023', 4, '2021-09-23 11:09:40', 2), + (326, '76561198180152023', 4, '2021-09-23 11:09:40', 1), + (327, '76561198180152023', 4, '2021-09-23 11:09:41', 0), + (328, '76561198180152023', 4, '2021-09-23 11:12:10', 2), + (329, '76561198180152023', 4, '2021-09-23 11:12:12', 2), + (330, '76561198180152023', 4, '2021-09-23 11:12:12', 1), + (331, '76561198180152023', 4, '2021-09-23 11:12:12', 0), + (332, '76561198180152023', 4, '2021-09-23 11:20:09', 2), + (333, '76561198180152023', 4, '2021-09-23 11:20:12', 1), + (334, '76561198180152023', 4, '2021-09-23 11:20:12', 0), + (335, '76561198180152023', 5, '2021-09-23 11:33:13', 2), + (336, '76561198180152023', 5, '2021-09-23 11:33:16', 2), + (337, '76561198180152023', 5, '2021-09-23 11:33:18', 1), + (338, '76561198180152023', 5, '2021-09-23 11:33:19', 0), + (339, '76561198180152023', 5, '2021-09-23 11:36:25', 3), + (340, '76561198180152023', 6, '2021-09-23 11:39:14', 2), + (341, '76561198180152023', 6, '2021-09-23 11:39:18', 2), + (342, '76561198180152023', 6, '2021-09-23 11:39:25', 1), + (343, '76561198180152023', 6, '2021-09-23 11:39:25', 0), + (344, '76561198180152023', 7, '2021-09-23 11:47:55', 2), + (345, '76561198180152023', 7, '2021-09-23 11:47:56', 2), + (346, '76561198180152023', 7, '2021-09-23 11:47:58', 1), + (347, '76561198180152023', 7, '2021-09-23 11:47:59', 0), + (348, '76561198180152023', 8, '2021-09-23 11:51:21', 2), + (349, '76561198180152023', 8, '2021-09-23 11:51:24', 2), + (350, '76561198180152023', 8, '2021-09-23 11:51:27', 1), + (351, '76561198180152023', 8, '2021-09-23 11:51:27', 0), + (352, '76561198180152023', 9, '2021-09-23 11:54:53', 2), + (353, '76561198180152023', 9, '2021-09-23 11:54:55', 2), + (354, '76561198180152023', 9, '2021-09-23 11:54:58', 1), + (355, '76561198180152023', 9, '2021-09-23 11:54:59', 0), + (356, '76561198180152023', 10, '2021-09-23 11:58:16', 2), + (357, '76561198180152023', 10, '2021-09-23 11:58:18', 2), + (358, '76561198180152023', 10, '2021-09-23 11:58:23', 1), + (359, '76561198180152023', 10, '2021-09-23 11:58:23', 0), + (360, '76561198180152023', 10, '2021-09-24 08:55:37', 2), + (361, '76561198180152023', 10, '2021-09-24 08:55:41', 2), + (362, '76561198180152023', 10, '2021-09-24 08:55:42', 1), + (363, '76561198180152023', 10, '2021-09-24 08:55:43', 0), + (364, '76561198180152023', 10, '2021-09-24 09:22:25', 2), + (365, '76561198180152023', 10, '2021-09-24 09:22:25', 1), + (366, '76561198180152023', 10, '2021-09-24 09:22:26', 0), + (367, '76561198180152023', 10, '2021-09-24 09:53:29', 2), + (368, '76561198180152023', 10, '2021-09-24 09:53:30', 1), + (369, '76561198180152023', 10, '2021-09-24 09:53:34', 0), + (370, '76561198180152023', 10, '2021-09-24 10:12:41', 2), + (371, '76561198180152023', 10, '2021-09-24 10:12:42', 1), + (372, '76561198180152023', 10, '2021-09-24 10:12:44', 0), + (373, '76561198180152023', 10, '2021-09-24 10:20:31', 2), + (374, '76561198180152023', 10, '2021-09-24 10:20:32', 1), + (375, '76561198180152023', 10, '2021-09-24 10:20:33', 0), + (376, '76561198180152023', 10, '2021-09-24 10:35:27', 2), + (377, '76561198180152023', 10, '2021-09-24 10:35:27', 1), + (378, '76561198180152023', 10, '2021-09-24 10:35:28', 0), + (379, '76561198180152023', 10, '2021-09-24 10:40:04', 2), + (380, '76561198180152023', 10, '2021-09-24 10:40:05', 1), + (381, '76561198180152023', 10, '2021-09-24 10:40:05', 0), + (382, '76561198180152023', 10, '2021-09-24 10:46:13', 2), + (383, '76561198180152023', 10, '2021-09-24 10:46:13', 1), + (384, '76561198180152023', 10, '2021-09-24 10:46:15', 0), + (385, '76561198180152023', 10, '2021-09-24 10:50:26', 2), + (386, '76561198180152023', 10, '2021-09-24 10:50:26', 1), + (387, '76561198180152023', 10, '2021-09-24 10:50:28', 0), + (388, '76561198180152023', 10, '2021-09-24 11:56:04', 3), + (389, '76561198180152023', 10, '2021-09-24 11:57:01', 2), + (390, '76561198180152023', 10, '2021-09-24 11:57:04', 1), + (391, '76561198180152023', 10, '2021-09-24 11:57:06', 0), + (392, '76561198180152023', 10, '2021-09-24 12:11:23', 2), + (393, '76561198180152023', 10, '2021-09-24 12:11:23', 1), + (394, '76561198180152023', 10, '2021-09-24 12:11:26', 0), + (395, '76561198180152023', 11, '2021-09-24 13:18:53', 2), + (396, '76561198180152023', 11, '2021-09-24 13:18:58', 1), + (397, '76561198180152023', 11, '2021-09-24 13:19:00', 0), + (398, '76561198180152023', 11, '2021-09-24 15:27:36', 2), + (399, '76561198180152023', 11, '2021-09-24 15:27:39', 1), + (400, '76561198180152023', 11, '2021-09-24 15:27:39', 0), + (401, '76561198180152023', 11, '2021-09-24 16:12:56', 2), + (402, '76561198180152023', 11, '2021-09-24 16:12:56', 1), + (403, '76561198180152023', 11, '2021-09-24 16:12:58', 0), + (404, '76561198180152023', 11, '2021-09-24 16:17:31', 2), + (405, '76561198180152023', 11, '2021-09-24 16:17:31', 1), + (406, '76561198180152023', 11, '2021-09-24 16:17:33', 0), + (407, '76561198180152023', 11, '2021-09-24 16:22:08', 2), + (408, '76561198180152023', 11, '2021-09-24 16:22:08', 1), + (409, '76561198180152023', 11, '2021-09-24 16:22:10', 0), + (410, '76561198180152023', 11, '2021-09-24 16:28:22', 2), + (411, '76561198180152023', 11, '2021-09-24 16:28:22', 1), + (412, '76561198180152023', 11, '2021-09-24 16:28:23', 0), + (413, '76561198180152023', 11, '2021-09-25 10:01:31', 2), + (414, '76561198180152023', 11, '2021-09-25 10:01:33', 1), + (415, '76561198180152023', 11, '2021-09-25 10:01:48', 0), + (416, '76561198180152023', 11, '2021-09-25 12:03:35', 3), + (417, '76561198180152023', 11, '2021-09-27 09:29:31', 2), + (418, '76561198180152023', 11, '2021-09-27 09:29:44', 2), + (419, '76561198180152023', 11, '2021-09-27 09:29:44', 1), + (420, '76561198180152023', 11, '2021-09-27 09:29:50', 0), + (421, '76561198180152023', 12, '2021-09-27 11:33:52', 2), + (422, '76561198180152023', 12, '2021-09-27 11:33:57', 1), + (423, '76561198180152023', 12, '2021-09-27 11:33:57', 0), + (424, '76561198180152023', 12, '2021-09-27 12:03:05', 3), + (425, '76561198180152023', 12, '2021-09-28 11:26:41', 2), + (426, '76561198180152023', 12, '2021-09-28 11:26:47', 1), + (427, '76561198180152023', 12, '2021-09-28 11:27:06', 0), + (428, '76561198180152023', 12, '2021-09-28 11:58:14', 3), + (429, '76561198180152023', 12, '2021-09-29 10:32:17', 2), + (430, '76561198180152023', 12, '2021-09-29 10:32:35', 1), + (431, '76561198180152023', 12, '2021-09-29 10:32:52', 0); +/*!40000 ALTER TABLE `player_login` ENABLE KEYS */; + +-- Dumping structure for procedure epoch_database.retObjID +DELIMITER // +CREATE PROCEDURE `retObjID`( + IN objTableName VARCHAR(256), + IN SID INT(11), + IN UID bigint(24), + OUT OID INT(11)unsigned +) +BEGIN + DECLARE x INT; + declare sqlstr VARCHAR(256); + + SET @OID = 0; + SET @x = 1; + SET @sqlstr = CONCAT('SELECT `ObjectID` from `', objTableName ,'` where `Instance` = ', SID ,' AND `ObjectUID` = ', UID ,' INTO @OID'); + PREPARE stmt FROM @sqlstr; + + WHILE (@x <= 5) DO + EXECUTE stmt; + IF (@OID > 0) then + SET @x = 6; + else + SET @x = @x + 1; + DO sleep(0.1); + END IF; + END WHILE; + DEALLOCATE PREPARE stmt; + SET OID = @OID; + SELECT @OID; +END// +DELIMITER ; + +/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; +/*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40111 SET SQL_NOTES=IFNULL(@OLD_SQL_NOTES, 1) */;