Skip to content

Instantly share code, notes, and snippets.

@ConnorAU
Created April 19, 2020 12:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ConnorAU/a95c61efb75279cfbe9e8fa361280ae3 to your computer and use it in GitHub Desktop.
Save ConnorAU/a95c61efb75279cfbe9e8fa361280ae3 to your computer and use it in GitHub Desktop.
/*──────────────────────────────────────────────────────┐
│ Author: ConnorAU │
│ Steam: https://steamcommunity.com/id/_connor │
│ Github: https://github.com/ConnorAU │
│ │
│ Please do not modify or remove this comment block │
└──────────────────────────────────────────────────────*/
#define BASE_WEATHER_CHANGE_TIME (7*60)
#define RAND_WEATHER_CHANGE_TIME (5*60)
#define TRANSITION_TIME 15
#define FORCE_UPDATE_VAR "SERV_DYNWEATHER_FORCEUPDATE"
#define SET_WEATHER(F,R,O,L) \
TRANSITION_TIME setFog F;\
TRANSITION_TIME setRain R;\
TRANSITION_TIME setOvercast O;\
TRANSITION_TIME setLightnings L;
#define WEATHER_CLEAR "CLEAR"
#define WEATHER_CLEAR_TICKETS 30
#define WEATHER_CLEAR_SELECT SET_WEATHER(0,0,0.5,0)
#define WEATHER_OVERCAST "OVERCAST"
#define WEATHER_OVERCAST_TICKETS 20
#define WEATHER_OVERCAST_SELECT SET_WEATHER(0.05,0,0.7,0)
#define WEATHER_RAIN_LIGHT "RAIN_LIGHT"
#define WEATHER_RAIN_LIGHT_TICKETS 3
#define WEATHER_RAIN_LIGHT_SELECT SET_WEATHER(0.05,0.2,0.7,0)
#define WEATHER_RAIN_HEAVY "RAIN_HEAVY"
#define WEATHER_RAIN_HEAVY_TICKETS 1
#define WEATHER_RAIN_HEAVY_SELECT SET_WEATHER(0.15,0.7,1,0)
#define WEATHER_STORM "STORM"
#define WEATHER_STORM_TICKETS 1
#define WEATHER_STORM_SELECT SET_WEATHER(0.2,1,0.7,1)
/*-------------------------------------------------------
| |
| Things get pretty wild after this point |
| |
-------------------------------------------------------*/
if !isServer exitwith {};
if !canSuspend exitwith {[] execVM __FILE__};
scriptName "Dynamic Weather System";
WEATHER_CLEAR_SELECT
forceWeatherChange;
private _weatherTickets = [];
{
_x params ["_mode","_count"];
for '_i' from 1 to _count do {_weatherTickets pushBack _mode};
}foreach [
[WEATHER_CLEAR,WEATHER_CLEAR_TICKETS],
[WEATHER_OVERCAST,WEATHER_OVERCAST_TICKETS],
[WEATHER_RAIN_LIGHT,WEATHER_RAIN_LIGHT_TICKETS],
[WEATHER_RAIN_HEAVY,WEATHER_RAIN_HEAVY_TICKETS],
[WEATHER_STORM,WEATHER_STORM_TICKETS]
];
private _tick = 0;
private _mode = "";
for '_i' from 0 to 1 step 0 do {
_tick = diag_ticktime + (BASE_WEATHER_CHANGE_TIME+random RAND_WEATHER_CHANGE_TIME);
waituntil {diag_tickTime > _tick || !isNil FORCE_UPDATE_VAR};
_mode = missionNameSpace getVariable [FORCE_UPDATE_VAR,selectRandom _weatherTickets];
switch _mode do {
case WEATHER_OVERCAST:{WEATHER_OVERCAST_SELECT};
case WEATHER_RAIN_LIGHT:{WEATHER_RAIN_LIGHT_SELECT};
case WEATHER_RAIN_HEAVY:{WEATHER_RAIN_HEAVY_SELECT};
case WEATHER_STORM:{WEATHER_STORM_SELECT};
default {WEATHER_CLEAR_SELECT};
};
diag_log parsetext format["[Dynamic Weather System] Changing to: %1",_mode];
missionNameSpace setVariable [FORCE_UPDATE_VAR,nil];
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment