mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
84 lines
2.9 KiB
Plaintext
84 lines
2.9 KiB
Plaintext
/*
|
|
Weather Control System
|
|
by Aaron Clark - EpochMod.com
|
|
|
|
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
|
|
http://creativecommons.org/licenses/by-nc-nd/4.0/
|
|
|
|
Improvements and or bugfixes and other contributions are welcome via the github:
|
|
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settings/EpochEvents/ChangeWeather.sqf
|
|
*/
|
|
|
|
// Initalize variable for tracking time between runs.
|
|
if (isNil "EPOCH_lastWeatherChange") then {
|
|
EPOCH_lastWeatherChange = diag_tickTime;
|
|
};
|
|
|
|
// get the time between weather change events to use as tranistion time.
|
|
_WeatherChangeTime = diag_tickTime - EPOCH_lastWeatherChange;
|
|
|
|
// increment timer to current time.
|
|
EPOCH_lastWeatherChange = diag_tickTime;
|
|
|
|
_force = false;
|
|
|
|
// use config static weather if set.
|
|
if !(EPOCH_WeatherStaticForecast isEqualTo []) then {
|
|
_tempOVRD = EPOCH_WeatherStaticForecast select 0;
|
|
_rainOVRD = EPOCH_WeatherStaticForecast select 1;
|
|
_fogOVRD = EPOCH_WeatherStaticForecast select 2;
|
|
_overcastOVRD = EPOCH_WeatherStaticForecast select 3;
|
|
_windOVRD = EPOCH_WeatherStaticForecast select 4;
|
|
diag_log format["DEBUG: static weather: %1", EPOCH_WeatherStaticForecast];
|
|
} else {
|
|
|
|
// Make database call to get "Weather:InstanceID" that can be set in the database to allow for weather controls outside of the game.
|
|
_response = ["Weather", (call EPOCH_fn_InstanceID)] call EPOCH_fnc_server_hiveGETRANGE;
|
|
if ((_response select 0) == 1 && typeName(_response select 1) == "ARRAY" && !((_response select 1) isEqualTo[])) then {
|
|
_arr = _response select 1;
|
|
_tempOVRD = _arr select 0;
|
|
_rainOVRD = _arr select 1;
|
|
_fogOVRD = _arr select 2;
|
|
_overcastOVRD = _arr select 3;
|
|
_windOVRD = _arr select 4;
|
|
diag_log format["DEBUG: hive weather: %1", _arr];
|
|
};
|
|
};
|
|
|
|
// get random temp.
|
|
_rnd_temp = if (sunOrMoon < 1) then { (random 35) + 15 } else { (random 75) + 50 };
|
|
|
|
// push temp to all players and JIP.
|
|
EPOCH_CURRENT_WEATHER = if (isNil "_tempOVRD") then { _rnd_temp } else { _tempOVRD };
|
|
publicVariable "EPOCH_CURRENT_WEATHER";
|
|
|
|
// fog, rain, overcast.
|
|
_fog = if (isNil "_fogOVRD") then { [random 0.2, random 0.2, random 20] } else { _fogOVRD };
|
|
_rain = if (isNil "_rainOVRD") then { random 1 } else { _rainOVRD };
|
|
_overcast = if (isNil "_overcastOVRD") then { random 1 } else { _overcastOVRD };
|
|
|
|
_WeatherChangeTime setFog _fog;
|
|
_WeatherChangeTime setOvercast _overcast;
|
|
_WeatherChangeTime setRain _rain;
|
|
|
|
// wind.
|
|
_windValX = random 10 - 5;
|
|
_windValZ = random 10 - 5;
|
|
if (_rain > 0.5) then {
|
|
_windValX = random 20 - 10;
|
|
_windValZ = random 20 - 10;
|
|
};
|
|
|
|
if !(isNil "_windOVRD") then {
|
|
_windValX = _windOVRD select 0;
|
|
_windValZ = _windOVRD select 1;
|
|
};
|
|
|
|
setWind[_windValX, _windValZ, true];
|
|
|
|
// will force weather change if set to true (will cause lag).
|
|
if (_force) then {
|
|
forceWeatherChange;
|
|
};
|
|
|
|
diag_log format["Weather Change: fog: %1 rain: %2 overcast: %3 windx: %4 windz: %5 forced: %6", _fog, _overcast, _rain, _windValX, _windValZ, _force]; |