2022-08-16 16:12:37 -04:00

51 lines
2.0 KiB
Lua

-------------------------------------------------------------------------------------------------------
-- For upgrading old worlds to the new format. Do this before registering named_waypoints
local worldpath = minetest.get_worldpath()
local v1filename = worldpath.."/settlements.txt"
local v2filename = worldpath.."/settlements_areastore.txt"
local v3filename = worldpath.."/named_waypoints_settlements.txt"
-- delayed to account for circular dependency on medieval settlement (for namegen)
-- and to allow settlements to be registered
local function upgrade(settlement_list)
local medieval_def = settlements.registered_settlements["medieval"]
for id, data in pairs(settlement_list) do
local pos = data.min
local dat = minetest.deserialize(data.data)
if not dat.name then
dat.settlement_type = dat.settlement_type or "medieval"
if medieval_def then
dat.name = medieval_def.generate_name(pos)
end
end
named_waypoints.add_waypoint("settlements", pos, dat)
end
end
local v3file = io.open(v3filename, "r")
if not v3file then -- if the v3 file exists, no upgrade should be done
local v2file = io.open(v2filename, "r")
if v2file then
minetest.log("action", "[settlements] found v2 settlements file but no v3 settlements file, upgrading")
-- v2 file exists but not v3, upgrade v2 to v3
local v2area = AreaStore()
v2area:from_file(v2filename)
local v2settlements = v2area:get_areas_in_area({x=-32000, y=-32000, z=-32000}, {x=32000, y=32000, z=32000}, true, true, true)
minetest.after(5, upgrade, v2settlements)
else
local v1file = io.open(v1filename, "r")
if v1file then
minetest.log("action", "[settlements] found v1 settlements file but no v2 or v3 settlements file, upgrading")
local settlements = minetest.deserialize(v1file:read("*all"))
local v1settlements = {}
for _, pos in ipairs(settlements) do
table.insert(v1settlements, {min = pos, data = minetest.serialize({})})
end
minetest.after(5, upgrade, v1settlements)
end
end
end