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