diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/custom/compiles.sqf b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/custom/compiles.sqf
new file mode 100644
index 000000000..51d2e7631
--- /dev/null
+++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/custom/compiles.sqf
@@ -0,0 +1,3 @@
+//cold
+player_temp_calculation = compile preprocessFileLineNumbers "custom\fn_temperatur.sqf";
+
diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/custom/fn_temperatur.sqf b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/custom/fn_temperatur.sqf
new file mode 100644
index 000000000..54ce821c6
--- /dev/null
+++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/custom/fn_temperatur.sqf
@@ -0,0 +1,158 @@
+
+private["_looptime","_pos","_vehicle_factor","_moving_factor","_fire_factor","_rain_factor","_night_factor","_wind_factor","_building_factor","_sun_factor","_water_factor","_difference","_hasfireffect","_isinbuilding","_isinvehicle","_raining","_sunrise","_vel","_speed","_fireplaces","_building","_daytime","_height_mod","_temp"];
+
+_looptime = _this;
+
+//Factors are equal to win/loss of factor*basic value
+//All Values can be seen as x of 100: 100 / x = minutes from min temperetaure to max temperature (without other effects)
+_vehicle_factor = 4;
+_moving_factor = 7;
+_fire_factor = 15; //Should be always: _rain_factor + _night_factor + _wind_factor OR higher !
+_building_factor = 7;
+_sun_factor = 4; //max sunfactor linear over the day. highest value in the middle of the day
+_warm_clothes = 22;
+
+_water_factor = -8;
+_rain_factor = -3;
+_night_factor = -1.5;
+_wind_factor = -1;
+_snow_factor = -12;
+
+_difference = 0;
+_hasfireffect = false;
+_isinbuilding = false;
+_isinvehicle = false;
+
+_raining = if(rain > 0) then {true} else {false};
+_sunrise = call world_sunRise;
+
+//POSITIV EFFECTS
+
+//vehicle
+if((vehicle player) != player) then {
+ _difference = _difference + _vehicle_factor;
+ _isinvehicle = true;
+} else {
+ //speed factor
+ private["_vel","_speed"];
+ _vel = velocity player;
+ _speed = round((_vel distance [0,0,0]) * 3.5);
+ _difference = (_moving_factor * (_speed / 20)) min 7;
+};
+
+//fire
+_pos = [player] call FNC_GetPos;
+_fireplaces = nearestObjects [_pos, ["Land_Fire","Land_Campfire"], 8];
+if(({inflamed _x} count _fireplaces) > 0 && !_isinvehicle ) then {
+ //Math: factor * 1 / (0.5*(distance max 1)^2) 0.5 = 12.5% of the factor effect in a distance o 4 meters
+ _difference = _difference + (_fire_factor /(0.5*((_pos distance (_fireplaces select 0)) max 1)^2));
+ _hasfireffect = true;
+};
+
+//building
+_building = nearestObject [_pos, "HouseBase"];
+if(!isNull _building) then {
+ if([player,_building] call fnc_isInsideBuilding) then {
+ //Make sure thate Fire and Building Effect can only appear single Not used at the moment
+ //if(!_hasfireffect && _fire_factor > _building_factor) then {
+ _difference = _difference + _building_factor;
+ //};
+ _isinbuilding = true;
+ dayz_inside = true;
+ } else {
+ dayz_inside = false;
+ };
+} else {
+ dayz_inside = false;
+};
+
+//sun
+if(daytime > _sunrise && daytime < (24 - _sunrise) && !_raining && overcast <= 0.6 && !_isinbuilding) then {
+ /*Mathematic Basic
+
+ t = temperature effect
+
+ a = calcfactor
+ f = sunfactor
+ s = sunrise
+ d = daytime
+
+ I: a = f / (12 - s)²
+ II: t = -a * (d - 12)² + f
+
+ I + II =>
+
+ t = -(f / (12 - s)²) * (d - 12)² + f
+
+ Parabel with highest Point( greatest Effect == _sun_factor) always at 12.00
+ Zero Points are always at sunrise and sunset -> Only Positiv Values Possible
+ */
+
+ _difference = _difference + (-((_sun_factor / (12 - _sunrise)^2)) * ((daytime - 12)^2) + _sun_factor);
+};
+
+if ((typeOf player) == "Sniper1W_DZN") then {
+ _difference= _difference + _warm_clothes;
+ };
+
+ if ((typeOf player) == "CamoWinterW_DZN") then {
+ _difference= _difference + _warm_clothes;
+ };
+
+ if ((typeOf player) == "CamoWinter_DZN") then {
+ _difference= _difference + _warm_clothes;
+ };
+
+//NEGATIVE EFFECTS
+
+//water
+if(surfaceIsWater getPosATL player || dayz_isSwimming) then {
+ _difference = _difference + _water_factor;
+};
+
+//rain
+if(_raining && !_isinvehicle && !_isinbuilding) then {
+ _difference = _difference + (rain * _rain_factor);
+};
+
+//snow
+if (!isNil "snow" && !_isinvehicle && !_isinbuilding) then {
+_difference = _difference + _snow_factor;
+};
+
+//night
+if((daytime < _sunrise || daytime > (24 - _sunrise)) && !_isinvehicle) then {
+ _daytime = if(daytime < 12) then {daytime + 24} else {daytime};
+ if(_isinbuilding) then {
+ _difference = _difference + ((((_night_factor * -1) / (_sunrise^2)) * ((_daytime - 24)^2) + _night_factor)) / 2;
+ } else {
+ _difference = _difference + (((_night_factor * -1) / (_sunrise^2)) * ((_daytime - 24)^2) + _night_factor);
+ };
+};
+
+//wind
+if(((wind select 0) > 4 || (wind select 1) > 4) && !_isinvehicle && !_isinbuilding ) then {
+ _difference = _difference + _wind_factor;
+};
+
+//height
+if (!_isinvehicle && overcast >= 0.6) then {
+ _height_mod = ((getPosASL player select 2) / 100) / 2;
+ _difference = _difference - _height_mod;
+};
+
+//Calculate Change Value Basic Factor Looptime Correction Adjust Value to current used temperatur scala
+_difference = _difference * SleepTemperatur / (60 / _looptime) * ((dayz_temperaturmax - dayz_temperaturmin) / 100);
+
+//Change Temperatur Should be moved in a own Function to allow adding of Items which increase the Temp like "hot tea"
+dayz_temperatur = (((dayz_temperatur + _difference) max dayz_temperaturmin) min dayz_temperaturmax);
+
+//Add Shivering
+// Percent when the Shivering will start
+if(dayz_temperatur <= (0.600 * (dayz_temperaturmax - dayz_temperaturmin) + dayz_temperaturmin)) then {
+ //CamShake as linear Function Maximum reached when Temp is at temp minimum. First Entry = Max Value
+ _temp = 0.6 * (dayz_temperaturmin / dayz_temperatur );
+ addCamShake [_temp,(_looptime + 1),30]; //[0.5,looptime,6] -> Maximum is 25% of the Pain Effect
+} else {
+ addCamShake [0,0,0]; //Not needed at the Moment, but will be necesarry for possible Items
+};
\ No newline at end of file
diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/description.ext b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/description.ext
new file mode 100644
index 000000000..54db4c0fb
--- /dev/null
+++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/description.ext
@@ -0,0 +1,32 @@
+respawn = "BASE";
+respawndelay = 5;
+onLoadMission = "DayZ Epoch Sauerland Winter Edition";
+OnLoadIntro = "Welcome to Sauerland";
+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 = 10; //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\dayz_logo_ca.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"
\ No newline at end of file
diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/init.sqf b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/init.sqf
new file mode 100644
index 000000000..d7909560f
--- /dev/null
+++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/init.sqf
@@ -0,0 +1,100 @@
+/*
+ For DayZ Epoch
+ Addons Credits: Jetski Yanahui by Kol9yN, Zakat, Gerasimow9, YuraPetrov, zGuba, A.Karagod, IceBreakr, Sahbazz
+*/
+startLoadingScreen ["","RscDisplayLoadCustom"];
+cutText ["","BLACK OUT"];
+enableSaving [false, false];
+
+//REALLY IMPORTANT VALUES
+dayZ_instance = 26; //The instance
+dayZ_serverName = ""; //Shown to all players in the bottom left of the screen
+dayzHiveRequest = [];
+initialized = false;
+dayz_previousID = 0;
+
+//disable greeting menu
+player setVariable ["BIS_noCoreConversations", true];
+//disable radio messages to be heard and shown in the left lower corner of the screen
+enableRadio false;
+// May prevent "how are you civillian?" messages from NPC
+enableSentences false;
+
+// DayZ Epochconfig
+dayz_enableRules = true; // Default: true
+spawnShoremode = 0; // Default = 1 (on shore)
+spawnArea= 2000; // Default = 1500
+//
+MaxVehicleLimit = 300; // Default = 50
+MaxDynamicDebris = 500; // Default = 100
+dayz_MapArea = 22000; // Default = 10000
+
+dayz_minpos = -1000;
+dayz_maxpos = 26000;
+
+dayz_paraSpawn = true;
+
+dayz_sellDistance_vehicle = 10;
+dayz_sellDistance_boat = 30;
+dayz_sellDistance_air = 40;
+
+dayz_maxAnimals = 5; // Default: 8
+dayz_tameDogs = true;
+DynamicVehicleDamageLow = 0; // Default: 0
+DynamicVehicleDamageHigh = 100; // Default: 100
+dayz_quickSwitch = false; // Default: false
+DZE_BuildOnRoads = false; // Default: False
+
+EpochEvents = [["any","any","any","any",30,"crash_spawner"],["any","any","any","any",0,"crash_spawner"],["any","any","any","any",15,"supply_drop"]];
+dayz_fullMoonNights = true;
+
+MISSION_ROOT=toArray __FILE__;MISSION_ROOT resize(count MISSION_ROOT-8);MISSION_ROOT=toString MISSION_ROOT;
+//Load in compiled functions
+call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\variables.sqf"; //Initilize the Variables (IMPORTANT: Must happen very early)
+progressLoadingScreen 0.1;
+call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\publicEH.sqf"; //Initilize the publicVariable event handlers
+progressLoadingScreen 0.2;
+call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; //Functions used by CLIENT for medical
+progressLoadingScreen 0.4;
+call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; //Compile regular functions
+progressLoadingScreen 0.5;
+call compile preprocessFileLineNumbers "server_traders.sqf"; //Compile trader configs
+call compile preprocessFileLineNumbers "custom\compiles.sqf"; //Compile custom compiles
+progressLoadingScreen 1.0;
+
+"filmic" setToneMappingParams [0.153, 0.357, 0.231, 0.1573, 0.011, 3.750, 6, 4]; setToneMapping "Filmic";
+
+if (isServer) then {
+ //Compile vehicle configs
+ call compile preprocessFileLineNumbers "\z\addons\dayz_server\missions\DayZ_Epoch_25.sauerland\dynamic_vehicle.sqf";
+ // Add trader citys
+ _nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_25.sauerland\mission.sqf";
+
+ _serverMonitor = [] execVM "\z\addons\dayz_code\system\server_monitor.sqf";
+};
+
+if (!isDedicated) then {
+ //Conduct map operations
+ 0 fadeSound 0;
+ waitUntil {!isNil "dayz_loadScreenMsg"};
+ dayz_loadScreenMsg = (localize "STR_AUTHENTICATING");
+
+ //Run the player monitor
+ _id = player addEventHandler ["Respawn", {_id = [] spawn player_death;}];
+ _playerMonitor = [] execVM "\z\addons\dayz_code\system\player_monitor.sqf";
+
+
+ //anti Hack
+ [] execVM "\z\addons\dayz_code\system\antihack.sqf";
+
+ //Lights
+ //[false,12] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf";
+ if (dayz_enableRules) then { execVM "rules.sqf"; };
+ if (!isNil "dayZ_serverName") then { execVM "\z\addons\dayz_code\system\watermark.sqf"; };
+};
+#include "\z\addons\dayz_code\system\REsec.sqf"
+//Start Dynamic Weather
+//execVM "\z\addons\dayz_code\external\DynamicWeatherEffects.sqf";
+ execVM "Weather\DynamicWeatherEffects.sqf";
+
+#include "\z\addons\dayz_code\system\BIS_Effects\init.sqf"
diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/keyboard.sqf b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/keyboard.sqf
new file mode 100644
index 000000000..be4f1ac39
--- /dev/null
+++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/keyboard.sqf
@@ -0,0 +1 @@
+#include "\z\addons\dayz_code\compile\keyboard.sqf"
\ No newline at end of file
diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/mission.sqm b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/mission.sqm
new file mode 100644
index 000000000..d671b9167
--- /dev/null
+++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/mission.sqm
@@ -0,0 +1,512 @@
+version=11;
+class Mission
+{
+ addOns[]=
+ {
+ "sauerland_winter",
+ "ca_modules_animals",
+ "dayz_anim",
+ "dayz_code",
+ "dayz_communityassets",
+ "dayz_weapons",
+ "dayz_equip",
+ "dayz_epoch",
+ "dayz_vehicles",
+ "cacharacters_pmc",
+ "ca_modules_functions",
+ "warfarebuildings",
+ "glt_m300t",
+ "pook_h13",
+ "csj_gyroac",
+ "map_eu",
+ "jetskiyanahuiaddon",
+ "redryder"
+ };
+ addOnsAuto[]=
+ {
+ "dayz_weapons",
+ "ca_modules_functions",
+ "sauerland"
+ };
+ randomSeed=11171215;
+ class Intel
+ {
+ briefingName="DayZ Epoch Sauerland Winter Edition";
+ briefingDescription="DayZ Epoch Sauerland";
+ startWeather=0.067362607;
+ forecastWeather=0.52341133;
+ year=2008;
+ month=12;
+ day=1;
+ hour=12;
+ };
+ class Groups
+ {
+ items=2;
+ class Item0
+ {
+ side="WEST";
+ class Vehicles
+ {
+ items=100;
+ #define PLRDEF position[]={12548,214,-5866};azimut=0;side="WEST";vehicle="Survivor1_DZ";skill=0.6;init="this enableSimulation false;this allowDammage false;this disableAI 'FSM';this disableAI 'ANIM';this disableAI 'MOVE';";player="PLAY CDG";
+ class Item0{id=0;PLRDEF};
+ class Item1
+ {
+ position[]={12548,214,-5866};
+ azimut=0;
+ id=0;
+ side="WEST";
+ vehicle="Survivor1_DZ";
+ player="PLAYER COMMANDER";
+ leader=1;
+ rank="SERGEANT";
+ skill=0.6;
+ init="this enableSimulation false;this allowDammage 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.7705,138.52499,11751.518};
+ id=50;
+ side="LOGIC";
+ vehicle="FunctionsManager";
+ leader=1;
+ lock="UNLOCKED";
+ skill=0.60000002;
+ };
+ };
+ };
+ };
+ class Markers
+ {
+ items=21;
+ class Item0
+ {
+ position[]={15177.789,286.18497,11335.177};
+ name="center";
+ type="Empty";
+ };
+ class Item1
+ {
+ position[]={12547.509,213.96613,-5865.772};
+ name="respawn_west";
+ type="Empty";
+ };
+ class Item2
+ {
+ position[]={15448.31,216.05495,8465.623};
+ name="spawn0";
+ type="Empty";
+ };
+ class Item3
+ {
+ position[]={19666.295,270.17401,10377.393};
+ name="spawn1";
+ type="Empty";
+ };
+ class Item4
+ {
+ position[]={19488.018,384.45441,7461.5806};
+ name="spawn2";
+ type="Empty";
+ };
+ class Item5
+ {
+ position[]={16453.672,226.4933,6895.9395};
+ name="spawn3";
+ type="Empty";
+ };
+ class Item6
+ {
+ position[]={10999.656,183.10439,10157.395};
+ name="spawn4";
+ type="Empty";
+ };
+ class Item7
+ {
+ position[]={10668.591,229.97134,13320.411};
+ name="spawn5";
+ type="Empty";
+ };
+ class Item8
+ {
+ position[]={11348.783,438.95288,12225.009};
+ name="spawn6";
+ type="Empty";
+ };
+ class Item9
+ {
+ position[]={12104.425,272.61899,8935.666};
+ name="spawn7";
+ type="Empty";
+ };
+ class Item10
+ {
+ position[]={20209.986,182.53618,14501.083};
+ name="spawn8";
+ type="Empty";
+ };
+ class Item11
+ {
+ position[]={19478.064,234.17647,12439.542};
+ name="spawn9";
+ type="Empty";
+ };
+ class Item12
+ {
+ position[]={12879.336,124.57347,14982.954};
+ name="spawn10";
+ type="Empty";
+ };
+ class Item13
+ {
+ position[]={15487.767,87,17015.457};
+ name="NeutralTraderCity";
+ text="Trader City Seedorf";
+ type="mil_circle";
+ };
+ class Item14
+ {
+ position[]={24713.129,409.62686,21741.785};
+ name="FriendlyTraderCity";
+ text="Trader City Oberberg";
+ type="mil_circle";
+ colorName="ColorGreen";
+ };
+ class Item15
+ {
+ position[]={11046.387,179.40204,15669.861};
+ name="HeroVendor";
+ text="Hero Vendor";
+ type="mil_dot";
+ colorName="ColorBlue";
+ };
+ class Item16
+ {
+ position[]={15350.896,112.05698,18522.543};
+ name="UnarmedAirVehicles";
+ text="Axles Airfield";
+ type="mil_dot";
+ colorName="ColorBlack";
+ };
+ class Item17
+ {
+ position[]={2507.0181,271.86975,3870.2949};
+ name="SouthWholesaler";
+ text="South Wholesaler";
+ type="mil_dot";
+ colorName="ColorBlack";
+ };
+ class Item18
+ {
+ position[]={223.39224,139.88173,22703.682};
+ name="NorthWholesaler";
+ text="North Wholesaler";
+ type="mil_dot";
+ colorName="ColorBlack";
+ };
+ class Item19
+ {
+ position[]={16989.15,300.05701,1778.1558};
+ name="BanditVendor";
+ text="Bandit Vendor";
+ type="mil_dot";
+ colorName="ColorRed";
+ };
+ class Item20
+ {
+ position[]={13176.351,176.72119,6614.1758};
+ name="NeutralTraderCIty2";
+ text="Trader city Oberdorf";
+ type="mil_circle";
+ colorName="ColorBlack";
+ };
+ };
+ class Sensors
+ {
+ items=7;
+ class Item0
+ {
+ position[]={15502.063,87,17015.162};
+ a=100;
+ b=100;
+ activationBy="WEST";
+ repeating=1;
+ interruptable=1;
+ age="UNKNOWN";
+ name="Seedorf";
+ expCond="(player distance Seedorf) < 100;";
+ expActiv="[""Boat Vendor"",true,""enter""] spawn player_traderCity;";
+ expDesactiv="[""Boat Vendor"",true,""leave""] spawn player_traderCity;";
+ class Effects
+ {
+ };
+ };
+ class Item1
+ {
+ position[]={13166.374,176.72119,6611.3574};
+ a=100;
+ b=100;
+ activationBy="WEST";
+ repeating=1;
+ interruptable=1;
+ age="UNKNOWN";
+ name="Oberdorf";
+ expCond="(player distance Oberdorf) < 100;";
+ expActiv="[""trader city Oberdorf"",true,""enter""] spawn player_traderCity;";
+ expDesactiv="[""trader city Oberdorf"",true,""leave""] spawn player_traderCity;";
+ class Effects
+ {
+ };
+ };
+ class Item2
+ {
+ position[]={24710.156,409.62686,21741.969};
+ a=100;
+ b=100;
+ activationBy="WEST";
+ repeating=1;
+ interruptable=1;
+ age="UNKNOWN";
+ name="Oberberg";
+ expCond="(player distance Oberberg) < 100;";
+ expActiv="[""trader city Oberberg"",true,""enter""] spawn player_traderCity;";
+ expDesactiv="[""trader city Oberberg"",true,""leave""] spawn player_traderCity;";
+ class Effects
+ {
+ };
+ };
+ class Item3
+ {
+ position[]={16983.479,300.05701,1774.7944};
+ activationBy="WEST";
+ repeating=1;
+ interruptable=1;
+ age="UNKNOWN";
+ name="Bandit";
+ expCond="(player distance Bandit) < 50;";
+ expActiv="[""Bandit Camp"",true,""enter""] spawn player_traderCity;";
+ expDesactiv="[""Bandit Camp"",true,""leave""] spawn player_traderCity;";
+ class Effects
+ {
+ };
+ };
+ class Item4
+ {
+ position[]={11045.76,179.40204,15671.621};
+ activationBy="WEST";
+ repeating=1;
+ interruptable=1;
+ age="UNKNOWN";
+ name="Hero";
+ expCond="(player distance Hero) < 50;";
+ expActiv="[""Hero Vendor"",true,""enter""] spawn player_traderCity;";
+ expDesactiv="[""Hero Vendor"",true,""leave""] spawn player_traderCity;";
+ class Effects
+ {
+ };
+ };
+ class Item5
+ {
+ position[]={2504.271,271.54337,3870.4497};
+ activationBy="WEST";
+ repeating=1;
+ interruptable=1;
+ age="UNKNOWN";
+ name="Wholesale1";
+ expCond="(player distance Wholesale1) < 50;";
+ expActiv="[""Wholesaler"",true,""enter""] spawn player_traderCity;";
+ expDesactiv="[""Wholesaler"",true,""leave""] spawn player_traderCity;";
+ class Effects
+ {
+ };
+ };
+ class Item6
+ {
+ position[]={230.57082,140.2729,22703.529};
+ activationBy="WEST";
+ repeating=1;
+ interruptable=1;
+ age="UNKNOWN";
+ name="Wholesaler";
+ expCond="(player distance Wholesaler) < 50;";
+ expActiv="[""Wholesaler"",true,""enter""] spawn player_traderCity;";
+ expDesactiv="[""Wholesaler"",true,""leave""] spawn player_traderCity;";
+ class Effects
+ {
+ };
+ };
+ };
+};
+class Intro
+{
+ addOns[]=
+ {
+ "sauerland"
+ };
+ addOnsAuto[]=
+ {
+ "sauerland"
+ };
+ randomSeed=6913869;
+ class Intel
+ {
+ startWeather=0.25;
+ forecastWeather=0.25;
+ year=2008;
+ month=10;
+ day=11;
+ hour=9;
+ minute=20;
+ };
+};
+class OutroWin
+{
+ addOns[]=
+ {
+ "sauerland"
+ };
+ addOnsAuto[]=
+ {
+ "sauerland"
+ };
+ randomSeed=4081731;
+ class Intel
+ {
+ startWeather=0.25;
+ forecastWeather=0.25;
+ year=2008;
+ month=10;
+ day=11;
+ hour=9;
+ minute=20;
+ };
+};
+class OutroLoose
+{
+ addOns[]=
+ {
+ "sauerland"
+ };
+ addOnsAuto[]=
+ {
+ "sauerland"
+ };
+ randomSeed=4975929;
+ class Intel
+ {
+ startWeather=0.25;
+ forecastWeather=0.25;
+ year=2008;
+ month=10;
+ day=11;
+ hour=9;
+ minute=20;
+ };
+};
diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/rules.sqf b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/rules.sqf
new file mode 100644
index 000000000..e8e3130a5
--- /dev/null
+++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/rules.sqf
@@ -0,0 +1,32 @@
+private ["_messages", "_timeout"];
+
+if (isServer) exitWith {};
+waitUntil { uiSleep 1; !isNil ("PVDZE_plr_LoginRecord") };
+
+_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!
RandomNews
"]
+];
+
+_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/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/server_traders.sqf b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/server_traders.sqf
new file mode 100644
index 000000000..9e6397076
--- /dev/null
+++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/server_traders.sqf
@@ -0,0 +1,164 @@
+// DayZ Epoch TRADERS for 17
+serverTraders = ["Tanny_PMC","US_Delta_Force_AR_EP1","FR_Cooper","RU_Profiteer1","Damsel4","TK_Commander_EP1","Ins_Soldier_AR","RU_Villager1","MVD_Soldier_Marksman","RU_Soldier_Pilot","CIV_EuroMan01_EP1","Ins_Soldier_GL","Rocker2","Profiteer1","RU_Damsel5","TK_Soldier_Crew_EP1","TK_Soldier_AMG_EP1","Soldier_MG_PMC","RU_Damsel2","GUE_Soldier_MG","TK_Special_Forces_EP1","Ins_Worker2","Citizen2_EP1","pook_Doc_Bell47","RU_Doctor","Dr_Hladik_EP1"];
+// Hero Vendor
+menu_Tanny_PMC = [
+ [["Ammunition",478],["Clothes",476],["Helicopter Armed",493],["Military Armed",562],["Trucks Armed",479],["Weapons",477]],
+ [],
+ "hero"
+];
+// Ammunition Friendly
+menu_US_Delta_Force_AR_EP1 = [
+ [["Assault Rifle Ammo",480],["Light Machine Gun Ammo",481],["Pistol Ammo",484],["Shotguns and Single-shot Ammo",573],["Sniper Rifle Ammo",482],["Submachine Gun Ammo",483]],
+ [],
+ "friendly"
+];
+// Weapons Friendly
+menu_FR_Cooper = [
+ [["Assault Rifle",485],["Light Machine Gun",486],["Pistols",489],["Shotguns and Single-shot",574],["Sniper Rifle",487],["Submachine Guns",488]],
+ [],
+ "friendly"
+];
+// Friendly Vehicles
+menu_RU_Profiteer1 = [
+ [["Bikes and ATV",608],["Buses and Vans",563],["Cargo Trucks",564],["Fuel Trucks",492],["Military Unarmed",491],["Trucks",495],["Used Cars",585],["Utility Vehicles",565]],
+ [],
+ "friendly"
+];
+// Friendly General Store
+menu_Damsel4 = [
+ [["Backpacks",496],["Clothes",497],["Cooked Meats",580],["Drinks",498],["Packaged Food",579]],
+ [["ItemTinBar","TrashJackDaniels",1,1,"buy","Empty Wiskey Bottle","Tin Bar",101]],
+ "friendly"
+];
+// Weapons neutral
+menu_TK_Commander_EP1 = [
+ [["Assault Rifle",602],["Light Machine Gun",603],["Pistols",606],["Shotguns and Single-shot",607],["Sniper Rifle",605],["Submachine Guns",604]],
+ [],
+ "neutral"
+];
+// Ammunition Neutral
+menu_Ins_Soldier_AR = [
+ [["Assault Rifle Ammo",609],["Light Machine Gun Ammo",610],["Pistol Ammo",611],["Shotguns and Single-shot Ammo",613],["Sniper Rifle Ammo",614],["Submachine Gun Ammo",612]],
+ [],
+ "neutral"
+];
+// Neutral Building/Parts
+menu_RU_Villager1 = [
+ [["Building Supplies",508],["Toolbelt Items",510],["Vehicle Parts",509]],
+ [],
+ "neutral"
+];
+// Bandit Trader
+menu_MVD_Soldier_Marksman = [
+ [["Ammunition",577],["Clothing",575],["Helicopter Armed",512],["Military Armed",569],["Trucks Armed",534],["Weapons",627]],
+ [],
+ "hostile"
+];
+// Aircraft Dealer
+menu_RU_Soldier_Pilot = [
+ [["Airplanes",517],["Helicopter Unarmed",519]],
+ [],
+ "neutral"
+];
+// Vehicles Neutral
+menu_CIV_EuroMan01_EP1 = [
+ [["Bikes and ATV",587],["Buses and Vans",588],["Cargo Trucks",586],["Fuel Trucks",589],["Military Unarmed",598],["Trucks",590],["Used Cars",520],["Utility Vehicles",591]],
+ [],
+ "neutral"
+];
+// Black Market Vendor
+menu_Ins_Soldier_GL = [
+ [["Black Market Ammo",527],["Black Market Weapons",526],["Explosives",529]],
+ [],
+ "neutral"
+];
+// Friendly Building/Parts
+menu_Rocker2 = [
+ [["Building Supplies",530],["Toolbelt Items",532],["Vehicle Parts",531]],
+ [],
+ "friendly"
+];
+// Neutral Vehicles 2
+menu_Profiteer1 = [
+ [["Bikes and ATV",536],["Buses and Vans",592],["Cargo Trucks",570],["Fuel Trucks",595],["Military Unarmed",599],["Trucks Unarmed",535],["Used Cars",600],["Utility Vehicles",568]],
+ [],
+ "neutral"
+];
+// Neutral General Store
+menu_RU_Damsel5 = [
+ [["Backpacks",538],["Clothes",628],["Cooked Meats",630],["Drinks",601],["Packaged Food",629]],
+ [["ItemTinBar","TrashJackDaniels",1,1,"buy","Empty Wiskey Bottle","Tin Bar",101]],
+ "neutral"
+];
+// Medical Supplies
+menu_Dr_Hladic_EP1 = [
+ [["Chem-lites/Flares",542],["Medical Supplies",541],["Smoke Grenades",543]],
+ [["FoodBioMeat","ItemZombieParts",1,1,"buy","Zombie Parts","Bio Meat",101]],
+ "friendly"
+];
+// Neutral Weapons 2
+menu_TK_Soldier_Crew_EP1 = [
+ [["Assault Rifle",615],["Light Machine Gun",616],["Pistols",617],["Shotguns and Single-shot",620],["Sniper Rifle",619],["Submachine Guns",618]],
+ [],
+ "neutral"
+];
+// Neutral Ammo 2
+menu_TK_Soldier_AMG_EP1 = [
+ [["Assault Rifle Ammo",621],["Light Machine Gun Ammo",622],["Pistol Ammo",625],["Shotguns and Single-shot Ammo",623],["Sniper Rifle Ammo",624],["Submachine Gun Ammo",626]],
+ [],
+ "neutral"
+];
+// North Wholesaler
+menu_Soldier_MG_PMC = [
+ [["Wholesale",555]],
+ [],
+ "neutral"
+];
+// Neutral General Store
+menu_RU_Damsel2 = [
+ [["Backpacks",632],["Clothes",631],["Cooked Meats",634],["Drinks",633],["Packaged Food",635]],
+ [["ItemTinBar","TrashJackDaniels",1,1,"buy","Empty Wiskey Bottle","Tin Bar",101]],
+ "neutral"
+];
+// South Wholesaler
+menu_GUE_Soldier_MG = [
+ [["Wholesale",636]],
+ [],
+ "neutral"
+];
+// North Boat Vendor
+menu_TK_Special_Forces_EP1 = [
+ [["Boats Armed",558],["Boats Unarmed",557]],
+ [],
+ "neutral"
+];
+// Vehicles Neutral 2
+menu_Ins_Worker2 = [
+ [["Bikes and ATV",650],["Buses and Vans",651],["Cargo Trucks",653],["Fuel Trucks",655],["Military Unarmed",658],["Trucks",659],["Used Cars",660],["Utility Vehicles",661]],
+ [],
+ "neutral"
+];
+// Neutral Building/Parts 2
+menu_Citizen2_EP1 = [
+ [["Building Supplies",662],["Toolbelt Items",663],["Vehicle Parts",664]],
+ [],
+ "neutral"
+];
+// Medical Supplies 2
+menu_pook_Doc_Bell47 = [
+ [["Chem-lites/Flares",666],["Medical Supplies",665],["Smoke Grenades",668]],
+ [["FoodBioMeat","ItemZombieParts",1,1,"buy","Zombie Parts","Bio Meat",101]],
+ "neutral"
+];
+// Medical Supplies 3
+menu_RU_Doctor = [
+ [["Chem-lites/Flares",669],["Medical Supplies",670],["Smoke Grenades",671]],
+ [["FoodBioMeat","ItemZombieParts",1,1,"buy","Zombie Parts","Bio Meat",101]],
+ "neutral"
+];
+// Medical Supplies
+menu_Dr_Hladik_EP1 = [
+ [["Chem-lites/Flares",542],["Medical Supplies",541],["Smoke Grenades",543]],
+ [["FoodBioMeat","ItemZombieParts",1,1,"buy","Zombie Parts","Bio Meat",101]],
+ "friendly"
+];
\ No newline at end of file
diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/weather/dynamicweathereffects.sqf b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/weather/dynamicweathereffects.sqf
new file mode 100644
index 000000000..b8cfcb98e
--- /dev/null
+++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/weather/dynamicweathereffects.sqf
@@ -0,0 +1,654 @@
+/* DynamicWeatherEffects.sqf version 1.01 by Engima of Ostgota Ops
+ * Description:
+ * Script that generates dynamic (random) weather. Works in single player, multiplayer (hosted and dedicated), and is JIP compatible.
+ * Arguments:
+ * [_initialFog]: Optional. Fog when mission starts. Must be between 0 and 1 where 0 = no fog, 1 = maximum fog. -1 = random fog.
+ * [_initialOvercast]: Optional. Overcast when mission starts. Must be between 0 and 1 where 0 = no overcast, 1 = maximum overcast. -1 = random overcast.
+ * [_initialRain]: Optional. Rain when mission starts. Must be between 0 and 1 where 0 = no rain, 1 = maximum rain. -1 = random rain. (Overcast must be greater than or equal to 0.75).
+ * [_initialSnow]: Optional. Snow when mission starts. Must be between 0 and 1 where 0 = no snow, 1 = maximum snow. -1 = random snow. (Overcast must be greater than or equal to 0.75).
+ * [_initialWind]: Optional. Wind when mission starts. Must be an array of form [x, z], where x is one wind strength vector and z is the other. x and z must be greater than or equal to 0. [-1, -1] = random wind.
+ * [_debug]: Optional. true if debug text is to be shown, otherwise false.
+ */
+
+private ["_initialFog", "_initialOvercast", "_initialRain","_initialSnow", "_initialWind", "_debug"];
+private ["_minWeatherChangeTimeMin", "_maxWeatherChangeTimeMin", "_minTimeBetweenWeatherChangesMin", "_maxTimeBetweenWeatherChangesMin", "_rainIntervalRainProbability", "_snowIntervalSnowProbability", "_windChangeProbability"];
+private ["_minimumFog", "_maximumFog", "_minimumOvercast", "_maximumOvercast", "_minimumRain", "_maximumRain", "_minimumSnow", "_maximumSnow", "_minimumWind", "_maximumWind", "_minRainIntervalTimeMin", "_maxRainIntervalTimeMin", "_forceRainToStopAfterOneRainInterval", "_maxWind"];
+
+if (isNil "_this") then { _this = []; };
+if (count _this > 0) then { _initialFog = _this select 0; } else { _initialFog = -1; };
+if (count _this > 1) then { _initialOvercast = _this select 1; } else { _initialOvercast = -1; };
+if (count _this > 2) then { _initialRain = _this select 2; } else { _initialRain = -1; };
+if (count _this > 3) then { _initialSnow = _this select 3; } else { _initialSnow = 0.25; };
+if (count _this > 4) then { _initialWind = _this select 4; } else { _initialWind = [-1, -1]; };
+if (count _this > 5) then { _debug = _this select 5; } else { _debug = false; };
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// The following variables can be changed to tweak weather behaviour
+
+// Debug True/False
+_debug = true;
+
+// Minimum time in minutes for the weather (fog and overcast) to change. Must be greater than or equal to 1 and less than or equal to
+// _maxWeatherChangeTimeMin. When weather changes, it is fog OR overcast that changes, not both at the same time. (Suggested value: 10).
+_minWeatherChangeTimeMin = 10;
+
+// Maximum time in minutes for the weather (fog and overcast) to change. Must be greater than or equal to _minWeatherChangeTimeMin.
+// (Suggested value: 20).
+_maxWeatherChangeTimeMin = 20;
+
+// Minimum time in minutes that weather (fog and overcast) stays constant between weather changes. Must be less than or equal to 0 and
+// greater than or equal to _minWeatherChangeTimeMin. (Suggested value: 5).
+_minTimeBetweenWeatherChangesMin = 5;
+
+// Maximum time in minutes that weather (fog and overcast) stays unchanged between weather changes. Must be greater than or equal to
+// _minWeatherChangeTimeMin. (Suggested value: 10).
+_maxTimeBetweenWeatherChangesMin = 10;
+
+// Fog intensity never falls below this value. Must be between 0 and 1 and less than or equal to _maximumFog
+// (0 = no fog, 1 = pea soup). (Suggested value: 0).
+_minimumFog = 0;
+
+// Fog intensity never exceeds this value. Must be between 0 and 1 and greater than or equal to _minimumFog
+// (0 = no fog, 1 = pea soup). (Suggested value: 0.8).
+_maximumFog = 0.5;
+
+// Overcast intensity never falls below this value. Must be between 0 and 1 and less than or equal to _maximumOvercast
+// (0 = no overcast, 1 = maximum overcast). (Suggested value: 0).
+_minimumOvercast = 0;
+
+// Overcast intensity never exceeds this value. Must be between 0 and 1 and greater than or equal to _minimumOvercast
+// (0 = no overcast, 1 = maximum overcast). (Suggested value: 1).
+_maximumOvercast = 1;
+
+// When raining, rain intensity never falls below this value. Must be between 0 and 1 and less than or equal to _maximumRain
+// (0 = no rain, 1 = maximum rain intensity). (Suggested value: 0);
+_minimumRain = .1;
+
+// When raining, rain intensity never exceeds this value. Must be between 0 and 1 and greater than or equal to _minimumRain
+// (0 = no rain, 1 = maximum rain intensity). (Suggested value: 0.8);
+_maximumRain = 0.8;
+
+// When snow fall, snow intensity never falls below this value. Must be between 0 and 1 and less than or equal to _maximumSnow
+// (0 = no snow, 1 = maximum snow intensity). (Suggested value: 0);
+_minimumSnow = 0.8;
+
+// When snow fall, snow intensity never exceeds this value. Must be between 0 and 1 and greater than or equal to _minimumSnow
+// (0 = no snow, 1 = maximum snow intensity). (Suggested value: 0.8);
+_maximumSnow = 1.0;
+
+// Wind vector strength never falls below this value. Must be greater or equal to 0 and less than or equal to _maximumWind.
+// (Suggested value: 0);
+_minimumWind = 0;
+
+// Wind vector strength never exceeds this value. Must be greater or equal to 0 and greater than or equal to _minimumWind.
+// (Suggested value: 8).
+_maximumWind = 8;
+
+// Probability in percent for wind to change when weather changes. If set to 0 then wind will never change. If set to 100 then rain will
+// change every time the weather (fog or overcast) start to change. (Suggested value: 25);
+_windChangeProbability = 25;
+
+// A "rain interval" is defined as "a time interval during which it may rain in any intensity (or it may not rain at all)". When overcast
+// goes above 0.75, a chain of rain intervals (defined below) is started. It cycles on until overcast falls below 0.75. At overcast
+// below 0.75 rain intervals never execute (thus it cannot rain).
+
+// Probability in percent (0-100) for rain to start at every rain interval. Set this to 0 if you don't want rain at all. Set this to 100
+// if you want it to rain constantly when overcast is greater than 0.75. In short: if you think that it generally rains to often then
+// lower this value and vice versa. (Suggested value: 50).
+_rainIntervalRainProbability = 0;
+_snowIntervalSnowProbability = 100;
+
+// Minimum time in minutes for rain intervals. Must be greater or equal to 0 and less than or equal to _maxRainIntervalTimeMin.
+// (Suggested value: 0).
+_minRainIntervalTimeMin = 0;
+
+// Maximum time in minutes for rain intervals. Must be greater than or equal to _minRainIntervalTimeMin. (Suggested value:
+// (_maxWeatherChangeTimeMin + _maxTimeBetweenWeatherChangesMin) / 2).
+_maxRainIntervalTimeMin = (_maxWeatherChangeTimeMin + _maxTimeBetweenWeatherChangesMin) / 2;
+
+// If set to true, then the rain is forced to stop after one rain interval during which it has rained (use this for example if you only want
+// small occational cloudbursts ). If set to false, then the rain may stop, but it may also just change intensity for an
+// immedeate new rain interval. (Suggested value: false).
+_forceRainToStopAfterOneRainInterval = false;
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Don't touch anything beneath this line
+
+drn_DynamicWeather_DebugTextEventArgs = []; // Empty
+
+"drn_DynamicWeather_DebugTextEventArgs" addPublicVariableEventHandler {
+ drn_DynamicWeather_DebugTextEventArgs call drn_fnc_DynamicWeather_ShowDebugTextLocal;
+};
+
+/*
+ * Summary: Shows debug text on local client.
+ * Arguments:
+ * _text: Debug text.
+ */
+drn_fnc_DynamicWeather_ShowDebugTextLocal = {
+ private ["_minutes", "_seconds"];
+
+ if (!isNull player) then {
+ player sideChat (_this select 0);
+ };
+
+ _minutes = floor (time / 60);
+ _seconds = floor (time - (_minutes * 60));
+ diag_log ((str _minutes + ":" + str _seconds) + " Debug: " + (_this select 0));
+};
+
+/*
+ * Summary: Shows debug text on all clients.
+ * Arguments:
+ * _text: Debug text.
+ */
+drn_fnc_DynamicWeather_ShowDebugTextAllClients = {
+ drn_DynamicWeather_DebugTextEventArgs = _this;
+ publicVariable "drn_DynamicWeather_DebugTextEventArgs";
+ drn_DynamicWeather_DebugTextEventArgs call drn_fnc_DynamicWeather_ShowDebugTextLocal;
+};
+
+if (_debug) then {
+ ["Starting script WeatherEffects.sqf..."] call drn_fnc_DynamicWeather_ShowDebugTextLocal;
+};
+
+drn_DynamicWeatherEventArgs = []; // [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]
+drn_AskServerDynamicWeatherEventArgs = []; // []
+
+drn_fnc_DynamicWeather_SetWeatherLocal = {
+ private ["_currentOvercast", "_currentFog", "_currentRain", "_currentSnow", "_currentWeatherChange", "_targetWeatherValue", "_timeUntilCompletion", "_currentWindX", "_currentWindZ"];
+
+ _currentOvercast = _this select 0;
+ _currentFog = _this select 1;
+ _currentRain = _this select 2;
+ _currentSnow = _this select 3;
+ _currentWeatherChange = _this select 4;
+ _targetWeatherValue = _this select 5;
+ _timeUntilCompletion = _this select 6;
+ _currentWindX = _this select 7;
+ _currentWindZ = _this select 8;
+
+ // Set current weather values
+ 0 setOvercast _currentOvercast;
+ 0 setFog _currentFog;
+ drn_var_DynamicWeather_Rain = _currentRain;
+ drn_var_DynamicWeather_Snow = _currentSnow;
+ setWind [_currentWindX, _currentWindZ, true];
+
+ // Set forecast
+ if (_currentWeatherChange == "OVERCAST") then {
+ _timeUntilCompletion setOvercast _targetWeatherValue;
+ };
+ if (_currentWeatherChange == "FOG") then {
+ _timeUntilCompletion setFog _targetWeatherValue;
+ };
+};
+
+if (!isServer) then {
+ "drn_DynamicWeatherEventArgs" addPublicVariableEventHandler {
+ drn_DynamicWeatherEventArgs call drn_fnc_DynamicWeather_SetWeatherLocal;
+ };
+
+ waitUntil {!isNil "drn_var_DynamicWeather_ServerInitialized"};
+
+ drn_AskServerDynamicWeatherEventArgs = [true];
+ publicVariable "drn_AskServerDynamicWeatherEventArgs";
+};
+
+if (isServer) then {
+ drn_fnc_DynamicWeather_SetWeatherAllClients = {
+ private ["_timeUntilCompletion", "_currentWeatherChange"];
+
+ _timeUntilCompletion = drn_DynamicWeather_WeatherChangeCompletedTime - drn_DynamicWeather_WeatherChangeStartedTime;
+ if (_timeUntilCompletion > 0) then {
+ _currentWeatherChange = drn_DynamicWeather_CurrentWeatherChange;
+ }
+ else {
+ _currentWeatherChange = "";
+ };
+
+ drn_DynamicWeatherEventArgs = [overcast, fog, drn_var_DynamicWeather_Rain, drn_var_DynamicWeather_Snow, _currentWeatherChange, drn_DynamicWeather_WeatherTargetValue, _timeUntilCompletion, drn_DynamicWeather_WindX, drn_DynamicWeather_WindZ];
+ publicVariable "drn_DynamicWeatherEventArgs";
+ drn_DynamicWeatherEventArgs call drn_fnc_DynamicWeather_SetWeatherLocal;
+ };
+
+ "drn_AskServerDynamicWeatherEventArgs" addPublicVariableEventHandler {
+ call drn_fnc_DynamicWeather_SetWeatherAllClients;
+ };
+
+ drn_DynamicWeather_CurrentWeatherChange = "";
+ drn_DynamicWeather_WeatherTargetValue = 0;
+ drn_DynamicWeather_WeatherChangeStartedTime = time;
+ drn_DynamicWeather_WeatherChangeCompletedTime = time;
+ drn_DynamicWeather_WindX = _initialWind select 0;
+ drn_DynamicWeather_WindZ = _initialWind select 1;
+
+ if (_initialFog == -1) then {
+ _initialFog = (_minimumFog + random (_maximumFog - _minimumFog));
+ }
+ else {
+ if (_initialFog < _minimumFog) then {
+ _initialFog = _minimumFog;
+ };
+ if (_initialFog > _maximumFog) then {
+ _initialFog = _maximumFog;
+ };
+ };
+
+ 0 setFog _initialFog;
+
+ if (_initialOvercast == -1) then {
+ _initialOvercast = (_minimumOvercast + random (_maximumOvercast - _minimumOvercast));
+ }
+ else {
+ if (_initialOvercast < _minimumOvercast) then {
+ _initialOvercast = _minimumOvercast;
+ };
+ if (_initialOvercast > _maximumOvercast) then {
+ _initialOvercast = _maximumOvercast;
+ };
+ };
+
+ 0 setOvercast _initialOvercast;
+
+ if (_initialOvercast >= 0.75) then {
+ if (_initialRain == -1) then {
+ _initialRain = (_minimumRain + random (_minimumRain - _minimumRain));
+ }
+ else {
+ if (_initialRain < _minimumRain) then {
+ _initialRain = _minimumRain;
+ };
+ if (_initialRain > _maximumRain) then {
+ _initialRain = _maximumRain;
+ };
+ };
+ }
+ else {
+ _initialRain = 0;
+ };
+
+ drn_var_DynamicWeather_Rain = _initialRain;
+ 0 setRain drn_var_DynamicWeather_Rain;
+
+ drn_var_DynamicWeather_Snow = _initialSnow;
+ if (!isDedicated) then {[0, drn_var_DynamicWeather_Snow] spawn dzn_fnc_snowfall;};
+
+ _maxWind = _minimumWind + random (_maximumWind - _minimumWind);
+
+ if (drn_DynamicWeather_WindX == -1) then {
+ if (random 100 < 50) then {
+ drn_DynamicWeather_WindX = -_minimumWind - random (_maxWind - _minimumWind);
+ }
+ else {
+ drn_DynamicWeather_WindX = _minimumWind + random (_maxWind - _minimumWind);
+ };
+ };
+
+ if (drn_DynamicWeather_WindZ == -1) then {
+ if (random 100 < 50) then {
+ drn_DynamicWeather_WindZ = -_minimumWind - random (_maxWind - _minimumWind);
+ }
+ else {
+ drn_DynamicWeather_WindZ = _minimumWind + random (_maxWind - _minimumWind);
+ };
+ };
+
+ setWind [drn_DynamicWeather_WindX, drn_DynamicWeather_WindZ, true];
+
+ sleep 0.05;
+
+ publicVariable "drn_var_DynamicWeather_Rain";
+ publicVariable "drn_var_DynamicWeather_Snow";
+ drn_var_DynamicWeather_ServerInitialized = true;
+ publicVariable "drn_var_DynamicWeather_ServerInitialized";
+
+ // Start weather thread
+ [_minWeatherChangeTimeMin, _maxWeatherChangeTimeMin, _minTimeBetweenWeatherChangesMin, _maxTimeBetweenWeatherChangesMin, _minimumFog, _maximumFog, _minimumOvercast, _maximumOvercast, _minimumWind, _maximumWind, _windChangeProbability, _debug] spawn {
+ private ["_minWeatherChangeTimeMin", "_maxWeatherChangeTimeMin", "_minTimeBetweenWeatherChangesMin", "_maxTimeBetweenWeatherChangesMin", "_minimumFog", "_maximumFog", "_minimumOvercast", "_maximumOvercast", "_minimumWind", "_maximumWind", "_windChangeProbability", "_debug"];
+ private ["_weatherType", "_fogLevel", "_overcastLevel", "_oldFogLevel", "_oldOvercastLevel", "_weatherChangeTimeSek"];
+
+ _minWeatherChangeTimeMin = _this select 0;
+ _maxWeatherChangeTimeMin = _this select 1;
+ _minTimeBetweenWeatherChangesMin = _this select 2;
+ _maxTimeBetweenWeatherChangesMin = _this select 3;
+ _minimumFog = _this select 4;
+ _maximumFog = _this select 5;
+ _minimumOvercast = _this select 6;
+ _maximumOvercast = _this select 7;
+ _minimumWind = _this select 8;
+ _maximumWind = _this select 9;
+ _windChangeProbability = _this select 10;
+ _debug = _this select 11;
+
+ // Set initial fog level
+ _fogLevel = 2;
+ _overcastLevel = 2;
+
+ while {true} do {
+ // Sleep a while until next weather change
+ sleep floor (_minTimeBetweenWeatherChangesMin * 60 + random ((_maxTimeBetweenWeatherChangesMin - _minTimeBetweenWeatherChangesMin) * 60));
+
+ if (_minimumFog == _maximumFog && _minimumOvercast != _maximumOvercast) then {
+ _weatherType = "OVERCAST";
+ };
+ if (_minimumFog != _maximumFog && _minimumOvercast == _maximumOvercast) then {
+ _weatherType = "FOG";
+ };
+ if (_minimumFog != _maximumFog && _minimumOvercast != _maximumOvercast) then {
+
+ // Select type of weather to change
+ if ((random 100) < 50) then {
+ _weatherType = "OVERCAST";
+ }
+ else {
+ _weatherType = "FOG";
+ };
+ };
+
+ // DEBUG
+ //_weatherType = "OVERCAST";
+
+ if (_weatherType == "FOG") then {
+
+ drn_DynamicWeather_CurrentWeatherChange = "FOG";
+
+ // Select a new fog level
+ _oldFogLevel = _fogLevel;
+ _fogLevel = floor ((random 100) / 25);
+
+ while {_fogLevel == _oldFogLevel} do {
+ _fogLevel = floor ((random 100) / 25);
+ };
+
+ if (_fogLevel == 0) then {
+ drn_DynamicWeather_WeatherTargetValue = _minimumFog + (_maximumFog - _minimumFog) * random 0.05;
+ };
+ if (_fogLevel == 1) then {
+ drn_DynamicWeather_WeatherTargetValue = _minimumFog + (_maximumFog - _minimumFog) * (0.05 + random 0.2);
+ };
+ if (_fogLevel == 2) then {
+ drn_DynamicWeather_WeatherTargetValue = _minimumFog + (_maximumFog - _minimumFog) * (0.25 + random 0.3);
+ };
+ if (_fogLevel == 3) then {
+ drn_DynamicWeather_WeatherTargetValue = _minimumFog + (_maximumFog - _minimumFog) * (0.55 + random 0.45);
+ };
+
+ drn_DynamicWeather_WeatherChangeStartedTime = time;
+ _weatherChangeTimeSek = _minWeatherChangeTimeMin * 60 + random ((_maxWeatherChangeTimeMin - _minWeatherChangeTimeMin) * 60);
+ drn_DynamicWeather_WeatherChangeCompletedTime = time + _weatherChangeTimeSek;
+
+ if (_debug) then {
+ ["Weather forecast: Fog " + str drn_DynamicWeather_WeatherTargetValue + " in " + str round (_weatherChangeTimeSek / 60) + " minutes."] call drn_fnc_DynamicWeather_ShowDebugTextAllClients;
+ };
+ };
+
+ if (_weatherType == "OVERCAST") then {
+
+ drn_DynamicWeather_CurrentWeatherChange = "OVERCAST";
+
+ // Select a new overcast level
+ _oldOvercastLevel = _overcastLevel;
+ //_overcastLevel = floor ((random 100) / 25);
+ _overcastLevel = 3;
+
+ while {_overcastLevel == _oldOvercastLevel} do {
+ _overcastLevel = floor ((random 100) / 25);
+ };
+
+ if (_overcastLevel == 0) then {
+ drn_DynamicWeather_WeatherTargetValue = _minimumOvercast + (_maximumOvercast - _minimumOvercast) * random 0.05;
+ };
+ if (_overcastLevel == 1) then {
+ drn_DynamicWeather_WeatherTargetValue = _minimumOvercast + (_maximumOvercast - _minimumOvercast) * (0.05 + random 0.3);
+ };
+ if (_overcastLevel == 2) then {
+ drn_DynamicWeather_WeatherTargetValue = _minimumOvercast + (_maximumOvercast - _minimumOvercast) * (0.35 + random 0.35);
+ };
+ if (_overcastLevel == 3) then {
+ drn_DynamicWeather_WeatherTargetValue = _minimumOvercast + (_maximumOvercast - _minimumOvercast) * (0.7 + random 0.3);
+ };
+
+ // DEBUG
+ /*
+ if (overcast > 0.8) then {
+ drn_DynamicWeather_WeatherTargetValue = 0.5;
+ }
+ else {
+ drn_DynamicWeather_WeatherTargetValue = 0.85;
+ };
+ */
+
+ drn_DynamicWeather_WeatherChangeStartedTime = time;
+ _weatherChangeTimeSek = _minWeatherChangeTimeMin * 60 + random ((_maxWeatherChangeTimeMin - _minWeatherChangeTimeMin) * 60);
+ drn_DynamicWeather_WeatherChangeCompletedTime = time + _weatherChangeTimeSek;
+
+ if (_debug) then {
+ ["Weather forecast: Overcast " + str drn_DynamicWeather_WeatherTargetValue + " in " + str round (_weatherChangeTimeSek / 60) + " minutes."] call drn_fnc_DynamicWeather_ShowDebugTextAllClients;
+ };
+ };
+
+ // On average every one fourth of weather changes, change wind too
+ if (random 100 < _windChangeProbability) then {
+ private ["_maxWind"];
+
+ _maxWind = _minimumWind + random (_maximumWind - _minimumWind);
+
+ if (random 100 < 50) then {
+ drn_DynamicWeather_WindX = -_minimumWind - random (_maxWind - _minimumWind);
+ }
+ else {
+ drn_DynamicWeather_WindX = _minimumWind + random (_maxWind - _minimumWind);
+ };
+ if (random 100 < 50) then {
+ drn_DynamicWeather_WindZ = -_minimumWind - random (_maxWind - _minimumWind);
+ }
+ else {
+ drn_DynamicWeather_WindZ = _minimumWind + random (_maxWind - _minimumWind);
+ };
+
+ if (_debug) then {
+ ["Wind changes: [" + str drn_DynamicWeather_WindX + ", " + str drn_DynamicWeather_WindZ + "]."] call drn_fnc_DynamicWeather_ShowDebugTextAllClients;
+ };
+ };
+
+ call drn_fnc_DynamicWeather_SetWeatherAllClients;
+
+ sleep _weatherChangeTimeSek;
+ };
+ };
+
+ // Start rain thread
+ if (_rainIntervalRainProbability > 0) then {
+ [_minimumRain, _maximumRain, _minimumSnow, _maximumSnow, _forceRainToStopAfterOneRainInterval, _minRainIntervalTimeMin, _maxRainIntervalTimeMin, _rainIntervalRainProbability, _snowIntervalSnowProbability, _debug] spawn {
+ private ["_minimumRain", "_maximumRain", "_minimumSnow", "_maximumSnow", "_forceRainToStopAfterOneRainInterval", "_minRainIntervalTimeMin", "_maxRainIntervalTimeMin", "_rainIntervalRainProbability", "_snowIntervalSnowProbability", "_debug"];
+ private ["_nextRainEventTime", "_forceStop"];
+
+ _minimumRain = _this select 0;
+ _maximumRain = _this select 1;
+ _minimumSnow = _this select 2;
+ _maximumSnow = _this select 3;
+ _forceRainToStopAfterOneRainInterval = _this select 4;
+ _minRainIntervalTimeMin = _this select 5;
+ _maxRainIntervalTimeMin = _this select 6;
+ _rainIntervalRainProbability = _this select 7;
+ _snowIntervalSnowProbability = _this select 8;
+ _debug = _this select 9;
+
+ if (rain > 0) then {
+ drn_var_DynamicWeather_Rain = rain;
+ publicVariable "drn_var_DynamicWeather_Rain";
+ };
+
+ _nextRainEventTime = time;
+
+ _forceStop = false;
+
+ while {true} do {
+
+ if (overcast > 0.75) then {
+
+ if (dayTime > 10 && dayTime < 14) then {
+ if (time >= _nextRainEventTime) then {
+ private ["_rainTimeSec"];
+
+ // At every rain event time, start or stop rain with 50% probability
+ if (random 100 < _rainIntervalRainProbability && !_forceStop) then {
+ drn_var_DynamicWeather_rain = _minimumRain + random (_maximumRain - _minimumRain);
+ publicVariable "drn_var_DynamicWeather_rain";
+
+ _forceStop = _forceRainToStopAfterOneRainInterval;
+ }
+ else {
+ drn_var_DynamicWeather_rain = 0;
+ publicVariable "drn_var_DynamicWeather_rain";
+
+ _forceStop = false;
+ };
+
+ // Pick a time for next rain change
+ _rainTimeSec = _minRainIntervalTimeMin * 60 + random ((_maxRainIntervalTimeMin - _minRainIntervalTimeMin) * 60);
+ _nextRainEventTime = time + _rainTimeSec;
+
+ if (_debug) then {
+ ["Rain set to " + str drn_var_DynamicWeather_rain + " for " + str (_rainTimeSec / 60) + " minutes"] call drn_fnc_DynamicWeather_ShowDebugTextAllClients;
+ };
+ };
+ } else {
+ if (time >= _nextRainEventTime) then {
+ private ["_snowTimeSec"];
+
+ // At every snow event time, start or stop snow with 50% probability
+ if (random 100 < _snowIntervalSnowProbability && !_forceStop) then {
+ drn_var_DynamicWeather_snow = _minimumSnow + random (_maximumSnow - _minimumSnow);
+ publicVariable "drn_var_DynamicWeather_snow";
+
+ _forceStop = _forceRainToStopAfterOneRainInterval;
+ } else {
+ drn_var_DynamicWeather_snow = 0;
+ publicVariable "drn_var_DynamicWeather_snow";
+ _forceStop = false;
+ };
+
+ // Pick a time for next snow change
+ _snowTimeSec = _minRainIntervalTimeMin * 60 + random ((_maxRainIntervalTimeMin - _minRainIntervalTimeMin) * 60);
+ _nextRainEventTime = time + _snowTimeSec;
+
+ if (_debug) then {
+ ["Snow set to " + str drn_var_DynamicWeather_snow + " for " + str (_snowTimeSec / 60) + " minutes"] call drn_fnc_DynamicWeather_ShowDebugTextAllClients;
+ };
+ };
+ };
+ } else {
+ if (drn_var_DynamicWeather_rain != 0 || drn_var_DynamicWeather_snow != 0) then {
+ drn_var_DynamicWeather_rain = 0;
+ drn_var_DynamicWeather_snow = 0;
+ publicVariable "drn_var_DynamicWeather_rain";
+ publicVariable "drn_var_DynamicWeather_snow";
+
+ if (_debug) then {
+ ["Rain / snow stops due to low overcast."] call drn_fnc_DynamicWeather_ShowDebugTextAllClients;
+ };
+ };
+
+ _nextRainEventTime = time;
+ _forceStop = false;
+ };
+
+ if (_debug) then {
+ sleep 1;
+ } else {
+ sleep 10;
+ };
+ };
+ };
+ };
+};
+
+[_rainIntervalRainProbability, _debug] spawn {
+ private ["_rainIntervalRainProbability", "_debug"];
+ private ["_rain", "_rainPerSecond"];
+
+ _rainIntervalRainProbability = _this select 0;
+ _debug = _this select 1;
+
+ if (_debug) then {
+ _rainPerSecond = 0.2;
+ } else {
+ _rainPerSecond = 0.03;
+ };
+
+ if (_rainIntervalRainProbability > 0) then {
+ _rain = drn_var_DynamicWeather_Rain;
+ }
+ else {
+ _rain = 0;
+ };
+
+ 0 setRain _rain;
+ sleep 0.1;
+
+ while {true} do {
+ if (_rainIntervalRainProbability > 0) then {
+ if (_rain < drn_var_DynamicWeather_Rain) then {
+ _rain = _rain + _rainPerSecond;
+ if (_rain > 1) then { _rain = 1; };
+ };
+ if (_rain > drn_var_DynamicWeather_Rain) then {
+ _rain = _rain - _rainPerSecond;
+ if (_rain < 0) then { _rain = 0; };
+ };
+ }
+ else {
+ _rain = 0;
+ };
+
+ 3 setRain _rain;
+
+ sleep 3;
+ };
+};
+
+[_snowIntervalSnowProbability, _debug] spawn {
+ private ["_snowIntervalSnowProbability", "_debug"];
+ private ["_snow", "_snowPerSecond"];
+
+ _snowIntervalSnowProbability = _this select 0;
+ _debug = _this select 1;
+
+ if (_debug) then {
+ _snowPerSecond = 0.2;
+ } else {
+ _snowPerSecond = 0.03;
+ };
+
+ if (_snowIntervalSnowProbability > 0) then {
+ _snow = drn_var_DynamicWeather_snow;
+ }
+ else {
+ _snow = 0;
+ };
+
+ if (!isDedicated) then {[0.1, _snow] spawn dzn_fnc_snowfall;};
+ sleep 0.1;
+
+ while {true} do {
+ if (_snowIntervalSnowProbability > 0) then {
+ if (_snow < drn_var_DynamicWeather_snow) then {
+ _snow = _snow + _snowPerSecond;
+ if (_snow > 1) then { _snow = 1; };
+ };
+ if (_snow > drn_var_DynamicWeather_snow) then {
+ _snow = _snow - _snowPerSecond;
+ if (_snow < 0) then { _snow = 0; };
+ };
+ } else {
+ _snow = 0;
+ };
+
+ if (!isDedicated) then {[3, _snow] spawn dzn_fnc_snowfall;};
+
+ sleep 3;
+ };
+};
\ No newline at end of file
diff --git a/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/weather/fn_dzn_snowfall.sqf b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/weather/fn_dzn_snowfall.sqf
new file mode 100644
index 000000000..e96409637
--- /dev/null
+++ b/Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/weather/fn_dzn_snowfall.sqf
@@ -0,0 +1,62 @@
+scriptName "fn_dzn_snowfall.sqf";
+/*
+ File: fn_dzn_snowfall.sqf
+ Author: Sumrak
+
+ Description:
+ Simple snowfall script for Namalsk OR DayZ: Namalsk
+
+ Parameter(s):
+ _this select 0: Double - time (default 3.0)
+ _this select 1: Double - density (can be 0 - 1, default 0.5)
+
+ Returns:
+ Nice snow particle effect with a proper density and for the defined time.
+*/
+
+private["_dzn_snow_density", "_dzn_snow_pc", "_dzn_snow_timer", "_isinbuilding"];
+
+if (isNil "_this") then {
+ _this = [];
+};
+if (count _this > 0) then {
+ _dzn_snow_timer = abs (_this select 0);
+} else {
+ _dzn_snow_timer = 3;
+};
+if (count _this > 1) then {
+ if ((_this select 1) != -1) then {
+ _dzn_snow_density = abs ( 100 * (_this select 1));
+ } else {
+ _dzn_snow_density = 0;
+ };
+} else {
+ _dzn_snow_density = 50;
+};
+
+_d = 35;
+_h = 18;
+_dzn_snow_pc = 0;
+
+/* changed from 100 to 30 */
+snow = _dzn_snow_density / 30;
+
+while {_dzn_snow_timer >= 0} do {
+ _position = getPos player;
+ if ([player] call fnc_isInsideBuilding) then {
+ _isinbuilding = true;
+ } else {
+ _isinbuilding = false;
+ };
+
+ while {(_dzn_snow_pc < _dzn_snow_density) && !_isinbuilding} do {
+ _dpos = [((_position select 0) + (_d - (random (2 * _d))) + ((velocity vehicle player select 0) * 6)), ((_position select 1) + (_d - (random (2 * _d))) + ((velocity vehicle player select 1) * 6)), ((_position select 2) + _h)];
+ drop ["\ca\data\cl_water", "", "Billboard", 1, 8, _dpos, wind, 1, 0.0001, 0.0, 0.5, [0.05, 0.05, 0.05], [[1, 1, 1, 0], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], [0, 0], 0.2, 1.2, "", "", ""];
+ _dzn_snow_pc = _dzn_snow_pc + 1;
+ };
+
+ sleep 0.1;
+ _dzn_snow_timer = _dzn_snow_timer - 0.1;
+ _dzn_snow_pc = 0;
+};
+snow = 0;
\ No newline at end of file