From a7bf94de5fc04b428c43c428a69358606a23f8fa Mon Sep 17 00:00:00 2001 From: Ambroise Garel <47314805+akaAgar@users.noreply.github.com> Date: Sun, 19 Oct 2025 18:52:58 +0200 Subject: [PATCH] Added TUM.weather table --- Script/The Universal Mission/Weather.lua | 322 +++++++++++++++++++++++ 1 file changed, 322 insertions(+) create mode 100644 Script/The Universal Mission/Weather.lua diff --git a/Script/The Universal Mission/Weather.lua b/Script/The Universal Mission/Weather.lua new file mode 100644 index 0000000..eb9555b --- /dev/null +++ b/Script/The Universal Mission/Weather.lua @@ -0,0 +1,322 @@ +-- ==================================================================================== +-- TUM.WEATHER - HANDLES THE MISSION'S WEATHER SETTINGS +-- ==================================================================================== +-- ==================================================================================== + +TUM.weather = {} + +do + local cloudPresets = { + -- "Light Scattered 1", + Preset1 = { + readableName = "Few scattered clouds (METAR: FEW/SCT 7/8)", + readableNameShort = "Light scattered", + xpBonus = 0, + }, + + -- "Light Scattered 2", + Preset2 = { + readableName = "Two layers few and scattered (METAR: FEW/SCT 8/10 SCT 23/24)", + readableNameShort = "Light scattered", + xpBonus = 0, + }, + + -- "High Scattered 1", + Preset3 = { + readableName = "Two layers scattered (METAR: SCT 8/9 FEW 21)", + readableNameShort = "High Scattered", + xpBonus = 0, + }, + + -- "High Scattered 2", + Preset4 = { + readableName = "Two layers scattered (METAR: SCT 8/10 FEW/SCT 24/26)", + readableNameShort = "High Scattered", + xpBonus = 0, + }, + + -- "Scattered 1", + Preset5 = { + readableName = "Three layers high altitude scattered (METAR: SCT 14/17 FEW 27/29 BKN 40)", + readableNameShort = "Scattered", + xpBonus = 0, + }, + + -- "Scattered 2", + Preset6 = { + readableName = "One layer scattered/broken (METAR: SCT/BKN 8/10 FEW 40)", + readableNameShort = "Scattered", + xpBonus = 0, + }, + + -- "Scattered 3", + Preset7 = { + readableName = "Two layers scattered/broken (METAR: BKN 7.5/12 SCT/BKN 21/23 SCT 40)", + readableNameShort = "Scattered", + xpBonus = 0, + }, + + -- "High Scattered 3", + Preset8 = { + readableName = "Two layers scattered/broken high altitude (METAR: SCT/BKN 18/20 FEW 36/38 FEW 40)", + readableNameShort = "High Scattered", + xpBonus = 0, + }, + + -- "Scattered 4", + Preset9 = { + readableName = "Two layers broken/scattered (METAR: BKN 7.5/10 SCT 20/22 FEW41)", + readableNameShort = "Scattered", + xpBonus = 0, + }, + + -- "Scattered 5", + Preset10 = { + readableName = "Two layers scattered large thick clouds (METAR: SCT/BKN 18/20 FEW36/38 FEW 40)", + readableNameShort = "Scattered", + xpBonus = 0, + }, + + -- "Scattered 6", + Preset11 = { + readableName = "Two layers scattered large clouds high ceiling (METAR: BKN 18/20 BKN 32/33 FEW 41)", + readableNameShort = "Scattered", + xpBonus = 0, + }, + + -- "Scattered 7", + Preset12 = { + readableName = "Two layers scattered large clouds high ceiling (METAR: BKN 12/14 SCT 22/23 FEW 41)", + readableNameShort = "Scattered", + xpBonus = 0, + }, + + -- "Broken 1", + Preset13 = { + readableName = "Two layers broken clouds (METAR: BKN 12/14 BKN 26/28 FEW 41)", + readableNameShort = "Broken", + xpBonus = 0.05, + }, + + -- "Broken 2", + Preset14 = { + readableName = "Broken thick low layer with few high layers\nMETAR: BKN LYR 7/16 FEW 41)", + readableNameShort = "Broken", + xpBonus = 0.05, + }, + + -- "Broken 3", + Preset15 = { + readableName = "Two layers broken large clouds (METAR: SCT/BKN 14/18 BKN 24/27 FEW 40)", + readableNameShort = "Broken", + xpBonus = 0.05, + }, + + -- "Broken 4", + Preset16 = { + readableName = "Two layers broken large clouds (METAR: BKN 14/18 BKN 28/30 FEW 40)", + readableNameShort = "Broken", + xpBonus = 0.05, + }, + + -- "Broken 5", + Preset17 = { + readableName = "Three layers broken/overcast (METAR: BKN/OVC LYR 7/13 20/22 32/34)", + readableNameShort = "Broken", + xpBonus = 0.05, + }, + + -- "Broken 6", + Preset18 = { + readableName = "Three layers broken/overcast (METAR: BKN/OVC LYR 13/15 25/29 38/41)", + readableNameShort = "Broken", + xpBonus = 0.05, + }, + + -- "Broken 7", + Preset19 = { + readableName = "Three layers overcast at low level (METAR: OVC 9/16 BKN/OVC LYR 23/24 31/33)", + readableNameShort = "Broken", + xpBonus = 0.05, + }, + + -- "Broken 8", + Preset20 = { + readableName = "Three layers overcast low level (METAR: BKN/OVC 13/18 BKN 28/30 SCT FEW 38)", + readableNameShort = "Broken", + xpBonus = 0.05, + }, + + -- "Overcast 1", + Preset21 = { + readableName = "Overcast low level (METAR: BKN/OVC LYR 7/8 17/19)", + readableNameShort = "Overcast", + xpBonus = 0.10, + }, + + -- "Overcast 2", + Preset22 = { + readableName = "Overcast low level (METAR: BKN LYR 7/10 17/20)", + readableNameShort = "Overcast", + xpBonus = 0.10, + }, + + -- "Overcast 3", + Preset23 = { + readableName = "Three layers broken low level scattered high (METAR: BKN LYR 11/14 18/25 SCT 32/35)", + readableNameShort = "Overcast", + xpBonus = 0.10, + }, + + -- "Overcast 4", + Preset24 = { + readableName = "Three layers overcast (METAR: BKN/OVC 3/7 17/22 BKN 34)", + readableNameShort = "Overcast", + xpBonus = 0.10, + }, + + -- "Overcast 5", + Preset25 = { + readableName = "Three layers overcast (METAR: OVC LYR 12/14 22/25 40/42)", + readableNameShort = "Overcast", + xpBonus = 0.10, + }, + + -- "Overcast 6", + Preset26 = { + readableName = "Three layers overcast (METAR: OVC 9/15 BKN 23/25 SCT 32)", + readableNameShort = "Overcast", + xpBonus = 0.10, + }, + + -- "Overcast 7", + Preset27 = { + readableName = "Three layer overcast (METAR: OVC 8/15 SCT/BKN 25/26 34/36)", + readableNameShort = "Overcast", + xpBonus = 0.10, + }, + + -- "Overcast And Rain 1", + RainyPreset1 = { + readableName = "Overcast with rain (METAR: VIS 3-5KM RA OVC 3/15 28/30 FEW 40)", + readableNameShort = "Overcast and rain", + xpBonus = 0.25, + }, + + -- "Overcast And Rain 2", + RainyPreset2 = { + readableName = "Overcast with rain (METAR: VIS 1-5KM RA BKN/OVC 3/11 SCT 18/29 FEW 40)", + readableNameShort = "Overcast and rain", + xpBonus = 0.25, + }, + + -- "Overcast And Rain 3", + RainyPreset3 = { + readableName = "Overcast with rain (METAR: VIS 3-5KM RA OVC LYR 6/18 19/21 SCT 34)", + readableNameShort = "Overcast and rain", + xpBonus = 0.25, + }, + + -- "Light Rain 1", + RainyPreset4 = { + readableName = "Two layers scattered large thick clouds (METAR: SCT/BKN 18/20 FEW36/38 FEW 40)", + readableNameShort = "Light rain", + xpBonus = 0.15, + }, + + -- "Light Rain 2", + RainyPreset5 = { + readableName = "Three layers broken/overcast (METAR: BKN/OVC LYR 7/13 20/22 32/34)", + readableNameShort = "Light rain", + xpBonus = 0.15, + }, + + -- "Light Rain 3", + RainyPreset6 = { + readableName = "Three layers overcast at low level (METAR: OVC 9/16 BKN/OVC LYR 23/24 31/33)", + readableNameShort = "Light rain", + xpBonus = 0.15, + }, + + -- "Light Rain 4", + NEWRAINPRESET4 = { + readableName = "Two layers overcast at low level (METAR: OVC 9/16 BKN/OVC LYR 23/24 31/33)", + readableNameShort = "Light rain", + xpBonus = 0.15, + }, + } + + local function getWindBeaufortScale(speedInMS) + local speedInKMH = DCSEx.converter.mpsToKmph(speedInMS or Library.environment.getWindAverage()) + + if speedInKMH < 1 then return 0 + elseif speedInKMH <= 5 then return 1 + elseif speedInKMH <= 11 then return 2 + elseif speedInKMH <= 19 then return 3 + elseif speedInKMH <= 28 then return 4 + elseif speedInKMH <= 38 then return 5 + elseif speedInKMH <= 49 then return 6 + elseif speedInKMH <= 61 then return 7 + elseif speedInKMH <= 74 then return 8 + elseif speedInKMH <= 88 then return 9 + elseif speedInKMH <= 102 then return 10 + elseif speedInKMH <= 117 then return 11 + else return 12 + end + end + + function TUM.weather.getWeatherName(presetID, longForm) + presetID = presetID or env.mission.weather.clouds.preset + longForm = longForm or false + + if cloudPresets[presetID] == nil then return "Unknown" end + if longForm then return cloudPresets[presetID].readableName end + return cloudPresets[presetID].readableNameShort + end + + function TUM.weather.getWeatherXPModifier(presetID) + presetID = presetID or env.mission.weather.clouds.preset + + if cloudPresets[presetID] == nil then return 0 end + + return cloudPresets[presetID].xpBonus + end + + function TUM.weather.getWindName(speedInMS) + local windBeaufort = getWindBeaufortScale(speedInMS) + + if windBeaufort == 0 then return "calm" + elseif windBeaufort == 1 then return "light air" + elseif windBeaufort == 2 then return "light breeze" + elseif windBeaufort == 3 then return "gentle breeze" + elseif windBeaufort == 4 then return "moderate breeze" + elseif windBeaufort == 5 then return "fresh breeze" + elseif windBeaufort == 6 then return "strong breeze" + elseif windBeaufort == 7 then return "moderate gale" + elseif windBeaufort == 8 then return "fresh gale" + elseif windBeaufort == 9 then return "strong gale" + elseif windBeaufort == 10 then return "storm" + elseif windBeaufort == 11 then return "violent storm" + elseif windBeaufort == 12 then return "hurricane" + end + end + + function TUM.weather.getWindXPModifier(speedInMS) + local windBeaufort = getWindBeaufortScale(speedInMS) + + if windBeaufort == 0 then return 0.00 + elseif windBeaufort == 1 then return 0.02 + elseif windBeaufort == 2 then return 0.04 + elseif windBeaufort == 3 then return 0.08 + elseif windBeaufort == 4 then return 0.10 + elseif windBeaufort == 5 then return 0.12 + elseif windBeaufort == 6 then return 0.15 + elseif windBeaufort == 7 then return 0.18 + elseif windBeaufort == 8 then return 0.21 + elseif windBeaufort == 9 then return 0.24 + elseif windBeaufort == 10 then return 0.27 + elseif windBeaufort == 11 then return 0.30 + elseif windBeaufort == 12 then return 0.33 + end + end +end