mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-13 19:52:38 +03:00
Add Sauerland Winter to Missions
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
//cold
|
||||
player_temp_calculation = compile preprocessFileLineNumbers "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)<29>
|
||||
II: t = -a * (d - 12)<29> + f
|
||||
|
||||
I + II =>
|
||||
|
||||
t = -(f / (12 - s)<29>) * (d - 12)<29> + 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
|
||||
};
|
||||
@@ -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"
|
||||
100
Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/init.sqf
Normal file
100
Server Files/MPMissions/DayZ_Epoch_26.sauerland_winter/init.sqf
Normal file
@@ -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"
|
||||
@@ -0,0 +1 @@
|
||||
#include "\z\addons\dayz_code\compile\keyboard.sqf"
|
||||
@@ -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;
|
||||
};
|
||||
};
|
||||
@@ -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<br />exploit will result in a<br />permanent ban."],
|
||||
["Server Rules", "No Talking in side."],
|
||||
["Server Rules", "Hackers will be banned permanently<br />Respect others"],
|
||||
["News", "Some random New info!<br />RandomNews<br />"]
|
||||
];
|
||||
|
||||
_timeout = 5;
|
||||
{
|
||||
private ["_title", "_content", "_titleText"];
|
||||
uiSleep 2;
|
||||
_title = _x select 0;
|
||||
_content = _x select 1;
|
||||
_titleText = format[("<t font='TahomaB' size='0.40' color='#a81e13' align='right' shadow='1' shadowColor='#000000'>%1</t><br /><t shadow='1'shadowColor='#000000' font='TahomaB' size='0.60' color='#FFFFFF' align='right'>%2</t>"), _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;
|
||||
@@ -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"
|
||||
];
|
||||
@@ -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;
|
||||
};
|
||||
};
|
||||
@@ -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;
|
||||
Reference in New Issue
Block a user