Starbound/assets/devel/versioning/PlayerEntity_11_12.lua
2025-03-21 22:23:30 +11:00

81 lines
2.1 KiB
Lua

require "/scripts/util.lua"
function alreadyVersioned(v)
return v.__version or v.version
end
function updateItem(item)
if alreadyVersioned(item) then return item end
return {
id = "Item",
version = 7,
content = item
}
end
function updateQuestParameter(paramValue)
if paramValue.type == "item" then
paramValue.item = updateItem(paramValue.item)
elseif paramValue.type == "itemList" then
paramValue.items = util.map(paramValue.items, updateItem, jarray())
end
return paramValue
end
function updateQuestParameters(parameters)
for paramName, paramValue in pairs(parameters) do
parameters[paramName] = updateQuestParameter(paramValue)
end
return parameters
end
function updateQuestDescriptor(questDescriptor)
if alreadyVersioned(questDescriptor) then return questDescriptor end
questDescriptor.parameters = updateQuestParameters(questDescriptor.parameters)
return {
id = "QuestDescriptor",
version = 1,
content = questDescriptor
}
end
function updateQuestArcDescriptor(questArcDescriptor)
if alreadyVersioned(questArcDescriptor) then return questArcDescriptor end
for i,questDescriptor in pairs(questArcDescriptor.quests) do
questArcDescriptor.quests[i] = updateQuestDescriptor(questDescriptor)
end
return {
id = "QuestArcDescriptor",
version = 1,
content = questArcDescriptor
}
end
function updateQuest(quest)
if alreadyVersioned(quest) then return quest end
quest.parameters = updateQuestParameters(quest.parameters)
quest.rewards = util.map(quest.rewards, updateItem, jarray())
quest.arc = updateQuestArcDescriptor(quest.arc)
return {
id = "Quest",
version = 1,
content = quest
}
end
function update(data)
local questMaps = { "activeQuests", "ephemeralInactiveQuests", "completedQuests", "failedQuests" }
if data.quests then
for _,questMapName in pairs(questMaps) do
local questMap = data.quests[questMapName]
if questMap then
for questId, quest in pairs(questMap) do
questMap[questId] = updateQuest(quest)
end
end
end
end
return data
end