// 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";