/*%FSM*/ /*%FSM*/ /* item0[] = {"Init",0,250,-40.348839,-141.860458,49.651161,-91.860458,0.000000,"Init"}; item1[] = {"Winter",4,218,-188.538055,-142.324219,-98.538559,-92.324203,0.000000,"Winter"}; item2[] = {"Summer",4,218,102.997711,-141.329483,192.997635,-91.329491,0.000000,"Summer"}; item3[] = {"Initial_Weather",2,250,-188.646942,-61.923744,-98.647324,-11.923735,0.000000,"Initial" \n "Weather" \n "Settings"}; item4[] = {"Initial_Weather_1",2,250,102.293213,-59.535393,192.293106,-9.535398,0.000000,"Initial" \n "Weather" \n "Settings"}; item5[] = {"Dynamic",4,218,-329.250580,71.166527,-239.250580,121.166656,0.000000,"Dynamic"}; item6[] = {"Dynamic",4,218,218.953949,71.415863,308.953918,121.415939,0.000000,"Dynamic"}; item7[] = {"Wait",2,250,-328.546112,168.298981,-238.546051,218.298904,0.000000,"Wait"}; item8[] = {"Wait_1",2,250,218.914642,170.498108,308.914825,220.498215,0.000000,"Wait"}; item9[] = {"Ready",4,218,-328.654816,242.721832,-238.654816,292.721832,0.000000,"Ready"}; item10[] = {"Static",4,218,-157.608826,11.221905,-67.609406,61.222015,0.000000,"Static"}; item11[] = {"Static",4,218,75.503952,10.589214,165.503632,60.589310,0.000000,"Static"}; item12[] = {"Ready",4,218,219.836456,249.480164,309.836395,299.480164,0.000000,"Ready"}; item13[] = {"End",1,250,-40.321423,10.661306,49.678623,60.661461,0.000000,"End"}; item14[] = {"Invalid_Option",4,218,-40.038357,-66.470139,49.961643,-16.470152,0.000000,"Invalid" \n "Option"}; item15[] = {"Set_Weather",2,250,-211.722900,243.535065,-121.722931,293.535065,0.000000,"Set Weather"}; item16[] = {"Return",8,218,-211.614197,168.298981,-121.614273,218.298737,0.000000,"Return"}; item17[] = {"Set_Weather_1",2,250,106.104187,248.682190,196.104202,298.682190,0.000000,"Set Weather"}; item18[] = {"Return",8,218,106.772743,172.461502,196.772736,222.461502,0.000000,"Return"}; item19[] = {"PV_Delay",2,250,-328.769989,335.746979,-238.769974,385.746979,0.000000,"PV Delay"}; item20[] = {"Delay",4,218,-212.201813,335.746979,-122.201813,385.746979,0.000000,"Delay"}; item21[] = {"PV_Delay_1",2,4346,219.507141,333.036072,309.507141,383.036072,0.000000,"PV Delay"}; item22[] = {"Delay",4,218,107.005257,333.713837,197.005264,383.713837,0.000000,"Delay"}; link0[] = {0,1}; link1[] = {0,2}; link2[] = {0,14}; link3[] = {1,3}; link4[] = {2,4}; link5[] = {3,5}; link6[] = {3,10}; link7[] = {4,6}; link8[] = {4,11}; link9[] = {5,7}; link10[] = {6,8}; link11[] = {7,9}; link12[] = {8,12}; link13[] = {9,19}; link14[] = {10,13}; link15[] = {11,13}; link16[] = {12,21}; link17[] = {14,13}; link18[] = {15,16}; link19[] = {16,7}; link20[] = {17,18}; link21[] = {18,8}; link22[] = {19,20}; link23[] = {20,15}; link24[] = {21,22}; link25[] = {22,17}; globals[] = {0.000000,0,0,0,0,640,480,1,26,6316128,1,-441.001495,496.288025,744.435730,-164.875015,1178,910,1}; window[] = {2,-1,-1,-1,-1,785,26,1466,26,3,1196}; *//*%FSM*/ class FSM { fsmName = "dze_weather"; class States { /*%FSM*/ class Init { name = "Init"; init = /*%FSM*/"_minChangeTime = DZE_WeatherVariables select 0;" \n "_maxChangeTime = DZE_WeatherVariables select 1;" \n "_minFog = DZE_WeatherVariables select 2;" \n "_maxFog = DZE_WeatherVariables select 3;" \n "_minOvercast = DZE_WeatherVariables select 4;" \n "_maxOvercast = DZE_WeatherVariables select 5;" \n "_minRain = DZE_WeatherVariables select 6;" \n "_maxRain = DZE_WeatherVariables select 7;" \n "_minWind = DZE_WeatherVariables select 8;" \n "_maxWind = DZE_WeatherVariables select 9;" \n "_windProb = DZE_WeatherVariables select 10;" \n "_minSnow = DZE_WeatherVariables select 11;" \n "_maxSnow = DZE_WeatherVariables select 12;" \n "_blizzardProb = DZE_WeatherVariables select 13;" \n "_blizzardInterval = DZE_WeatherVariables select 14;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Summer { priority = 0.000000; to="Initial_Weather_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"DZE_Weather in [1,2]"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Invalid_Option { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(DZE_Weather in [1,2,3,4])"/*%FSM*/; action=/*%FSM*/"diag_log ""Weather Error: invalid option for variable DZE_Weather!"";" \n "" \n "DZE_serverWeatherArray = [0, 0, 0, 0, 0, 0, ""none"", false];"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Winter { priority = 0.000000; to="Initial_Weather"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"DZE_Weather in [3,4]"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Initial_Weather { name = "Initial_Weather"; init = /*%FSM*/"_fog = (_minFog + random (_maxFog - _minFog));" \n "_overcast = (_minOvercast + random (_maxOvercast - _minOvercast));" \n "_rain = 0;" \n "_snow = 0;" \n "_type = ""NONE"";" \n "_blizzard = false;" \n "" \n "if (_overcast > .70) then {" \n " _snow = (_minSnow + random (_maxSnow - _minSnow));" \n " if (_blizzardProb > 0) then {_blizzard = (random 1 <= _blizzardProb);};" \n "};" \n "" \n "_windX = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n "_windY = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n "" \n "_changeTime = _minChangeTime * 60 + random ((_maxChangeTime - _minChangeTime) * 60);" \n "if (_blizzard && {_blizzardInterval > 0}) then {_changeTime = _blizzardInterval * 60};" \n "" \n "// Populate the server's global array" \n "PVDZE_SetWeather = [_overcast, _fog, _rain, _windX, _windY, _snow, _type, _blizzard];" \n "" \n "// Set weather parameters locally on the server - I'm not sure if this is necessary because weather is not synced in A2OA." \n "0 setRain _rain;" \n "0 setOvercast _overcast;" \n "0 setFog _fog;" \n "setWind [_windX, _windY, true];" \n "" \n "diag_log text format [""Weather Forecast: Overcast: %1, Fog: %2, Rain: %3, WindX: %4, WindY: %5, Snow: %6, Blizzard: %7, Change Time: %8"",_overcast,_fog,_rain,_windX,_windY,_snow,_blizzard,_changeTime];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Static { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"DZE_Weather == 3"/*%FSM*/; action=/*%FSM*/"diag_log ""Static Winter Weather Enabled"";"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Dynamic { priority = 0.000000; to="Wait"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"DZE_Weather == 4"/*%FSM*/; action=/*%FSM*/"diag_log ""Dynamic Winter Weather Starting"";" \n "" \n "_bypassOvercast = _minOvercast == _maxOvercast; // if values are the same then bypass." \n "_bypassFog = _minFog == _maxFog; // if values are the same then bypass."/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Initial_Weather_1 { name = "Initial_Weather_1"; init = /*%FSM*/"_fog = (_minFog + random (_maxFog - _minFog));" \n "_overcast = (_minOvercast + random (_maxOvercast - _minOvercast));" \n "_rain = 0;" \n "_snow = 0;" \n "_type = ""NONE"";" \n "_blizzard = false;" \n "" \n "if (_overcast > .70) then {" \n " _rain = (_minRain + random (_maxRain - _minRain));" \n "};" \n "" \n "_windX = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n "_windY = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n "" \n "_changeTime = _minChangeTime * 60 + random ((_maxChangeTime - _minChangeTime) * 60);" \n "" \n "// Populate the server's global array" \n "PVDZE_SetWeather = [_overcast, _fog, _rain, _windX, _windY, _snow, _type, _blizzard];" \n "" \n "// Set weather parameters locally on the server - I'm not sure if this is necessary because weather is not synced in A2OA." \n "0 setRain _rain;" \n "0 setOvercast _overcast;" \n "0 setFog _fog;" \n "setWind [_windX, _windY, true];" \n "" \n "diag_log text format [""Weather Forecast: Overcast: %1, Fog: %2, Rain: %3, WindX: %4, WindY: %5, Snow: %6, Blizzard: %7, Change Time: %8"",_overcast,_fog,_rain,_windX,_windY,_snow,_blizzard,_changeTime];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Static { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"DZE_Weather == 1"/*%FSM*/; action=/*%FSM*/"diag_log ""Static Summer Weather Enabled"";"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Dynamic { priority = 0.000000; to="Wait_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"DZE_Weather == 2" \n ""/*%FSM*/; action=/*%FSM*/"diag_log ""Dynamic Summer Weather Starting"";" \n "" \n "_bypassOvercast = _minOvercast == _maxOvercast; // if values are the same then bypass." \n "_bypassFog = _minFog == _maxFog; // if values are the same then bypass."/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Wait { name = "Wait"; init = /*%FSM*/"_time = diag_tickTime;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Ready { priority = 0.000000; to="PV_Delay"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(diag_tickTime - _time) > _changeTime"/*%FSM*/; action=/*%FSM*/"DZE_WeatherEndThread = true; // Used to end existing rain, snow, and blizzard threads on the clients." \n "publicVariable ""DZE_WeatherEndThread"";"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Wait_1 { name = "Wait_1"; init = /*%FSM*/"_time = diag_tickTime;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Ready { priority = 0.000000; to="PV_Delay_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(diag_tickTime - _time) > _changeTime"/*%FSM*/; action=/*%FSM*/"DZE_WeatherEndThread = true; // Used to end existing rain, snow, and blizzard threads on the clients." \n "publicVariable ""DZE_WeatherEndThread"";"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Set_Weather { name = "Set_Weather"; init = /*%FSM*/"diag_log ""DEBUG Weather: Setting Weather."";" \n "" \n "// Change one type, fog or overcast, per cycle." \n "_type = call {" \n " if (_bypassFog && !_bypassOvercast) exitWith {""OVERCAST""};" \n " if (_bypassOvercast && !_bypassFog) exitWith {""FOG""};" \n " // Select random type of weather to change if no bypass. Make overcast changes 75% of the time." \n " [""FOG"",""OVERCAST""] select (random 1 < .75);" \n "};" \n "" \n "if (_type == ""FOG"") then {" \n " _fog = (_minFog + random (_maxFog - _minFog));" \n "};" \n "" \n "if (_type == ""OVERCAST"") then {" \n " _overcast = (_minOvercast + random (_maxOvercast - _minOvercast));" \n " if (_overcast > 0.70) then {" \n " _snow = (_minSnow + random (_maxSnow - _minSnow));" \n " if (_blizzardProb > 0) then {_blizzard = (random 1 <= _blizzardProb);};" \n " } else {" \n " _snow = 0;" \n " _blizzard = false;" \n " };" \n "};" \n "" \n "// On average every one fourth of weather changes, change wind too" \n "if (random 1 < _windProb) then {" \n " _windX = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n " _windY = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n "};" \n "" \n "_changeTime = _minChangeTime * 60 + random ((_maxChangeTime - _minChangeTime) * 60);" \n "if (_blizzard && {_blizzardInterval > 0}) then {_changeTime = _blizzardInterval * 60};" \n "" \n "// Set weather parameters on all clients" \n "PVDZE_SetWeather = [_overcast, _fog, _rain, _windX, _windY, _snow, _type, _blizzard];" \n "publicVariable ""PVDZE_SetWeather"";" \n "" \n "// Set weather parameters locally on the server - I'm not sure if this is necessary because weather is not synced in A2OA." \n "0 setRain _rain;" \n "0 setOvercast _overcast;" \n "0 setFog _fog;" \n "setWind [_windX, _windY, true];" \n "" \n "diag_log text format [""Weather Forecast: Overcast: %1, Fog: %2, Rain: %3, WindX: %4, WindY: %5, Snow: %6, Blizzard: %7, Change Time: %8"",_overcast,_fog,_rain,_windX,_windY,_snow,_blizzard,_changeTime];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Return { priority = 0.000000; to="Wait"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Set_Weather_1 { name = "Set_Weather_1"; init = /*%FSM*/"// Change one type, fog or overcast, per cycle." \n "_type = call {" \n " if (_bypassFog && !_bypassOvercast) exitWith {""OVERCAST""};" \n " if (_bypassOvercast && !_bypassFog) exitWith {""FOG""};" \n " // Select random type of weather to change if no bypass. Make overcast changes 75% of the time." \n " [""FOG"",""OVERCAST""] select (random 1 < .75);" \n "};" \n "" \n "if (_type == ""FOG"") then {" \n " _fog = (_minFog + random (_maxFog - _minFog));" \n "};" \n "" \n "if (_type == ""OVERCAST"") then {" \n " _overcast = (_minOvercast + random (_maxOvercast - _minOvercast));" \n " if (_overcast > 0.70) then {" \n " _rain = (_minRain + random (_maxRain - _minRain));" \n " } else {" \n " _rain = 0;" \n " };" \n "};" \n "" \n "// On average every one fourth of weather changes, change wind too" \n "if (random 1 < _windProb) then {" \n " _windX = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n " _windY = [(_minWind + random (_maxWind - _minWind)),-(_minWind + random (_maxWind - _minWind))] select (random 1 < .50);" \n "};" \n "" \n "_changeTime = _minChangeTime * 60 + random ((_maxChangeTime - _minChangeTime) * 60);" \n "" \n "// Set weather parameters on all clients" \n "PVDZE_SetWeather = [_overcast, _fog, _rain, _windX, _windY, _snow, _type, _blizzard];" \n "publicVariable ""PVDZE_SetWeather"";" \n "" \n "// Set weather parameters locally on the server - I'm not sure if this is necessary because weather is not synced in A2OA." \n "0 setRain _rain;" \n "0 setOvercast _overcast;" \n "0 setFog _fog;" \n "setWind [_windX, _windY, true];" \n "" \n "diag_log text format [""Weather Forecast: Overcast: %1, Fog: %2, Rain: %3, WindX: %4, WindY: %5, Snow: %6, Blizzard: %7, Change Time: %8"",_overcast,_fog,_rain,_windX,_windY,_snow,_blizzard,_changeTime];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Return { priority = 0.000000; to="Wait_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class PV_Delay { name = "PV_Delay"; init = /*%FSM*/"_time = diag_tickTime;" \n "" \n "// Need to sleep the loop for 5 seconds to ensure that the clients have time to react to the PV"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Delay { priority = 0.000000; to="Set_Weather"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(diag_tickTime - _time) > 5"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class PV_Delay_1 { name = "PV_Delay_1"; init = /*%FSM*/"_time = diag_tickTime;" \n "" \n "// Need to sleep the loop for 5 seconds to ensure that the clients have time to react to the PV"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Delay { priority = 0.000000; to="Set_Weather_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(diag_tickTime - _time) > 5"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init"; finalStates[] = { "End", }; }; /*%FSM*/