Definition
-- @/lua/ge/extensions/gameplay/missions/missionScreen.lua:19
-- formats a single mission.
local function formatMission(m)
local previewFile = m.previewFile
if previewFile:sub(1, 1) == "/" then
previewFile = previewFile:sub(2)
end
-- this will check for a parent mission, as used in the rally loop.
local missionIdForAttempt = m.missionIdForAttempt
local parentMission = nil
if missionIdForAttempt then
parentMission = gameplay_missions_missions.getMissionById(missionIdForAttempt)
end
local info = {
id = m.id,
name = m.name,
icon = m.iconFontIcon,
description = m.description,
previews = {previewFile},
missionTypeLabel = m.missionTypeLabel or mission.missionType,
userSettings = m:getUserSettingsData() or {},
defaultUserSettings = m.defaultUserSettings or {},
lastUserSettings = m.lastUserSettings,
--activeStars = M.getActiveStarsForUserSettings(m.id,nil),
additionalAttributes = {},
progress = m.saveData.progress,
currentProgressKey = m.currentProgressKey or m.defaultProgressKey,
unlocks = m.unlocks,
hasUserSettingsUnlocked = gameplay_missions_progress.missionHasUserSettingsUnlocked(m.id),
devMission = m.devMission,
hasRules = m:hasRules(),
official = m.official,
author = m.author,
date = m.date,
parentInfo = parentMission and {
id = parentMission.id,
name = parentMission.name,
description = parentMission.description,
missionTypeLabel = parentMission.missionTypeLabel,
progress = parentMission.saveData.progress,
currentProgressKey = parentMission.currentProgressKey,
icon = parentMission.iconFontIcon,
date = parentMission.date,
} or nil,
}
-- Process parentInfo additional fields if parent mission exists
if parentMission then
-- Format progress for parentInfo
info.parentInfo.formattedProgress = gameplay_missions_progress.formatSaveDataForUi(parentMission.id)
-- Pre-format aggregates for the UI
for key, prog in pairs(info.parentInfo.formattedProgress.formattedProgressByKey) do
local ownAggregate = {}
for i, label in ipairs(prog.ownAggregate.labels) do
table.insert(ownAggregate, {
label = label,
value = prog.ownAggregate.rows[1][i]
})
end
prog.ownAggregate = ownAggregate
end
-- Set leaderboard key
info.parentInfo.leaderboardKey = parentMission.defaultLeaderboardKey or 'recent'
end
if gameplay_missions_missionManager.getForegroundMissionId() == m.id then
--dump("default user settings from ",info.defaultUserSettings)
--info.defaultUserSettings = deepcopy(m.lastUserSettings or {})
--dump(info.defaultUserSettings)
--info.activeStars = M.getActiveStarsForUserSettings(m.id, info.defaultUserSettings)
for _, s in ipairs(info.userSettings) do
if (m.lastUserSettings and m.lastUserSettings[s.key] ~= nil) then
s.value = m.lastUserSettings[s.key]
end
end
else
if m._lastUserSettingsOutsideOfMission then
for _, s in ipairs(info.userSettings) do
for _, l in ipairs(m._lastUserSettingsOutsideOfMission) do
if l.key == s.key then
s.value = l.value
end
end
end
end
end
m:setPreviewsForCustomVehicles(info.userSettings)
info.hasUserSettings = #info.userSettings > 0
local additionalAttributes, additionalAttributesSortedKeys = gameplay_missions_missions.getAdditionalAttributes()
for _, attKey in ipairs(additionalAttributesSortedKeys) do
local att = additionalAttributes[attKey]
local mAttKey = m.additionalAttributes[attKey]
local val
if type(mAttKey) == 'string' then
val = att.valuesByKey[m.additionalAttributes[attKey]]
elseif type(mAttKey) == 'table' then
val = m.additionalAttributes[attKey]
end
if val then
table.insert(info.additionalAttributes, {
icon = att.icon or "",
labelKey = att.translationKey,
valueKey = val.translationKey
})
end
end
for _, customAtt in ipairs(m.customAdditionalAttributes or {}) do
table.insert(info.additionalAttributes, customAtt)
end
info.formattedProgress = gameplay_missions_progress.formatSaveDataForUi(m.id)
-- pre-format aggregates for the UI. This formatting might be the default later and then be moved to gameplay_missions_progress
for key, prog in pairs(info.formattedProgress.formattedProgressByKey) do
--dump(key)
--dumpz(prog, 5)
local ownAggregate = {}
for i, label in ipairs(prog.ownAggregate.labels) do
table.insert(ownAggregate, {
label = label,
value = prog.ownAggregate.rows[1][i]
})
end
prog.ownAggregate = ownAggregate
end
info.leaderboardKey = m.defaultLeaderboardKey or 'recent'
--info.gameContextUiButtons = {}
info.gameContextUiButtons = m.getMissionScreenDataUiButtons and m:getMissionScreenDataUiButtons()
--some career info like leagues
if career_modules_branches_leagues then
info.leagues = career_modules_branches_leagues.getLeaguesForMission(m.id)
end
return info
end
Callers
@/lua/ge/extensions/flowgraph/modules/uiModule.lua
local m = gameplay_missions_missions.getMissionById(mId)
league.missions[i] = formatMission(m)
end
local m = gameplay_missions_missions.getMissionById(elem.id)
elem.formatted = formatMission(m)
if m.startCondition.type == "league" then
@/lua/ge/extensions/career/modules/branches/landing.lua
local m = gameplay_missions_missions.getMissionById(mId)
league.missions[i] = M.formatMission(m)
if league.isCertification then
@/lua/ge/extensions/gameplay/markerInteraction.lua
if m.missionId then
table.insert(dataToSend, M.formatMission(gameplay_missions_missions.getMissionById(m.missionId)))
end
@/lua/ge/extensions/gameplay/missions/missionScreen.lua
if m.missionId then
table.insert(dataToSend, M.formatMission(gameplay_missions_missions.getMissionById(m.missionId)))
end
for _, m in ipairs(gameplay_missions_missions.get()) do
--table.insert(dataToSend, M.formatMission(gameplay_missions_missions.getMissionById(m.id)))
end
context = 'ongoingMission',
missions = {M.formatMission(activeMission)},
preselectedMissionId = gameplay_missions_missionManager.getForegroundMissionId(),
for _, id in ipairs(openMenuWithCustomMissionList) do
table.insert(missions, M.formatMission(gameplay_missions_missions.getMissionById(id)))
end