-- ==================================================================================== -- TUM.SETTINGS - HANDLES THE MISSION SETTINGS -- ==================================================================================== -- (enum) TUM.settings.id -- TUM.settings.getName(id) -- TUM.settings.getValue(id, returnAsString) -- TUM.settings.setAllToDefaults() -- TUM.settings.setValue(id, value, updateMenu) -- ==================================================================================== TUM.settings = {} TUM.settings.id = { AI_CAP = 1, COALITION_BLUE = 2, COALITION_RED = 3, ENEMY_AIR_DEFENSE = 4, ENEMY_AIR_FORCE = 5, MULTIPLAYER = 6, PLAYER_COALITION = 7, TARGET_COUNT = 8, TARGET_LOCATION = 9, TASKING = 10, TIME_PERIOD = 11, WINGMEN = 12, } do local settings = {} local SETTING_NAMES = { [TUM.settings.id.AI_CAP] = "Friendly AI CAP", [TUM.settings.id.COALITION_BLUE] = "Blue coalition", [TUM.settings.id.COALITION_RED] = "Red coalition", [TUM.settings.id.ENEMY_AIR_DEFENSE] = "Enemy air defense", [TUM.settings.id.ENEMY_AIR_FORCE] = "Enemy air force", [TUM.settings.id.MULTIPLAYER] = "Multiplayer", [TUM.settings.id.PLAYER_COALITION] = "Player coalition", [TUM.settings.id.TARGET_COUNT] = "Target count", [TUM.settings.id.TARGET_LOCATION] = "Target location", [TUM.settings.id.TASKING] = "Mission type", [TUM.settings.id.TIME_PERIOD] = "Time period", [TUM.settings.id.WINGMEN] = "Wingmen count" } local SETTING_VALUES = { [TUM.settings.id.AI_CAP] = { "Enabled", "Disabled" }, [TUM.settings.id.COALITION_BLUE] = { }, [TUM.settings.id.COALITION_RED] = { }, [TUM.settings.id.ENEMY_AIR_DEFENSE] = { "None", "Green", "Regular", "Veteran", "Elite" }, [TUM.settings.id.ENEMY_AIR_FORCE] = { "None", "Green", "Regular", "Veteran", "Elite" }, [TUM.settings.id.PLAYER_COALITION] = { "Red", "Blue" }, -- Must match values in the coalition.side enum [TUM.settings.id.TARGET_COUNT] = { "1", "2", "3", "4" }, [TUM.settings.id.TARGET_LOCATION] = { }, -- [TUM.settings.id.TASKING] = { "Antiship strike", "Ground attack", "Helicopter-specific tasks", "Helo hunt", "Interception", "Offensive counter-air", "SEAD", "Strike" }, -- Must match values in the DCSEx.enums.taskFamily enum [TUM.settings.id.TASKING] = { "Antiship strike", "Ground attack", "Helo hunt", "Interception", "Offensive counter-air", "SEAD", "Strike" }, -- Must match values in the DCSEx.enums.taskFamily enum [TUM.settings.id.TIME_PERIOD] = { "World War 2", "Korea War", "Vietnam War", "Late Cold War", "Modern" }, -- Must match values in the DCSEx.enums.timePeriod enum [TUM.settings.id.WINGMEN] = { "None", "1", "2", "3" } } local targetLocation local function getFaction(side) if side == coalition.side.BLUE then return TUM.settings.getValue(TUM.settings.id.COALITION_BLUE, true) else return TUM.settings.getValue(TUM.settings.id.COALITION_RED, true) end end local function setAllToDefaults(coreSettings) settings = { [TUM.settings.id.AI_CAP] = 1, -- Enabled [TUM.settings.id.COALITION_BLUE] = 1, [TUM.settings.id.COALITION_RED] = 2, [TUM.settings.id.ENEMY_AIR_DEFENSE] = 3, [TUM.settings.id.ENEMY_AIR_FORCE] = 2, [TUM.settings.id.MULTIPLAYER] = coreSettings.multiplayer, [TUM.settings.id.PLAYER_COALITION] = coalition.side.BLUE, [TUM.settings.id.TARGET_COUNT] = 2, [TUM.settings.id.TARGET_LOCATION] = 1, [TUM.settings.id.TASKING] = DCSEx.enums.taskFamily.GROUND_ATTACK, [TUM.settings.id.TIME_PERIOD] = DCSEx.enums.timePeriod.MODERN, [TUM.settings.id.WINGMEN] = 2 } -- TODO: set default time period according to mission year -- if env.mission.date.Year <= 1945 then -- settings[TUM.settings.id.TIME_PERIOD] = DCSEx.enums.timePeriod.WORLD_WAR_2 -- elseif env.mission.date.Year < 1960 then -- settings[TUM.settings.id.TIME_PERIOD] = DCSEx.enums.timePeriod.KOREA_WAR -- elseif env.mission.date.Year < 1975 then -- settings[TUM.settings.id.TIME_PERIOD] = DCSEx.enums.timePeriod.VIETNAM_WAR -- elseif env.mission.date.Year < 1990 then -- settings[TUM.settings.id.TIME_PERIOD] = DCSEx.enums.timePeriod.COLD_WAR -- else -- settings[TUM.settings.id.TIME_PERIOD] = DCSEx.enums.timePeriod.MODERN -- end for i,id in pairs(SETTING_VALUES[TUM.settings.id.COALITION_BLUE]) do if id == Library.factions.defaults[coalition.side.BLUE] then settings[TUM.settings.id.COALITION_BLUE] = i end if id == Library.factions.defaults[coalition.side.RED] then settings[TUM.settings.id.COALITION_RED] = i end end if #DCSEx.envMission.getPlayerGroups(coalition.side.RED) > 0 then settings[TUM.settings.id.PLAYER_COALITION] = coalition.side.RED end end function TUM.settings.getSettingsName(id) return SETTING_NAMES[id] end function TUM.settings.getPossibleValues(id) return SETTING_VALUES[id]; end function TUM.settings.getValue(id, returnAsString) returnAsString = returnAsString or false if returnAsString then return SETTING_VALUES[id][settings[id]] end return settings[id] end function TUM.settings.getPlayerCoalition() return settings[TUM.settings.id.PLAYER_COALITION] end function TUM.settings.getEnemyCoalition() return DCSEx.dcs.getOppositeCoalition(settings[TUM.settings.id.PLAYER_COALITION]) end function TUM.settings.getPlayerFaction() return getFaction(TUM.settings.getPlayerCoalition()) end function TUM.settings.getEnemyFaction() return getFaction(TUM.settings.getEnemyCoalition()) end function TUM.settings.getSettingsSummary() local showScoreMultiplier = true if not DCSEx.io.canReadAndWrite() or TUM.settings.getValue(TUM.settings.id.MULTIPLAYER) then showScoreMultiplier = false end local settingsOrder = { TUM.settings.id.PLAYER_COALITION, TUM.settings.id.MULTIPLAYER, -1, TUM.settings.id.TIME_PERIOD, TUM.settings.id.COALITION_BLUE, TUM.settings.id.COALITION_RED, -1, TUM.settings.id.TASKING, TUM.settings.id.TARGET_LOCATION, TUM.settings.id.TARGET_COUNT, -1, TUM.settings.id.ENEMY_AIR_DEFENSE, TUM.settings.id.ENEMY_AIR_FORCE, -1, TUM.settings.id.WINGMEN, TUM.settings.id.AI_CAP, } local summary = "" for _,v in pairs(settingsOrder) do if v < 0 then summary = summary.."\n" else summary = summary.."\n"..SETTING_NAMES[v]:upper()..": " if type(settings[v]) == "boolean" then if settings[v] then summary = summary.."Enabled" else summary = summary.."Disabled" end else summary = summary..SETTING_VALUES[v][settings[v]] end if showScoreMultiplier then local settingMultiplier = TUM.playerScore.getScoreMultiplier(v, settings[v]) if settingMultiplier ~= nil then -- Must add "~= nil" because can be 0 summary = summary.." (" if settingMultiplier >= 0 then summary = summary.."+" end summary = summary..tostring(math.ceil(settingMultiplier * 100)).."% xp)" end end end end -- Weather summary = summary.."\n\nWEATHER: "..TUM.weather.getWeatherName().." (+"..tostring(math.ceil(TUM.weather.getWeatherXPModifier() * 100)).."% xp)" summary = summary.."\nWIND: "..DCSEx.string.firstToUpper(TUM.weather.getWindName()).." (+"..tostring(math.ceil(TUM.weather.getWindXPModifier() * 100)).."% xp)" if showScoreMultiplier then summary = summary.."\n\nTotal XP modifier: "..tostring(math.ceil(TUM.playerScore.getTotalScoreMultiplier() * 100)).."%" end return summary end function TUM.settings.printSettingsSummary(clearView) trigger.action.outText("MISSION SETTINGS\n"..TUM.settings.getSettingsSummary(), 15, clearView or false) trigger.action.outSound("UI-Ok.ogg") end function TUM.settings.setValue(id, value, silent) silent = silent or false settings[id] = value if not silent then TUM.settings.printSettingsSummary(true) trigger.action.outSound("UI-Ok.ogg") end end function TUM.settings.onStartUp(coreSettings) -- Load mission zones SETTING_VALUES[TUM.settings.id.TARGET_LOCATION] = {} local missionZones = TUM.territories.getMissionZones() for _,m in ipairs(missionZones) do table.insert(SETTING_VALUES[TUM.settings.id.TARGET_LOCATION], m.name) end -- Load available coalitions SETTING_VALUES[TUM.settings.id.COALITION_BLUE] = { } SETTING_VALUES[TUM.settings.id.COALITION_RED] = { } for k,faction in pairs(Library.factions.tables) do if not faction.theaters or #faction.theaters == 0 or DCSEx.table.contains(faction.theaters, env.mission.theatre) then table.insert(SETTING_VALUES[TUM.settings.id.COALITION_BLUE], k) table.insert(SETTING_VALUES[TUM.settings.id.COALITION_RED], k) end end setAllToDefaults(coreSettings) TUM.settings.printSettingsSummary() return true end end