58 lines
1.8 KiB
Lua
58 lines
1.8 KiB
Lua
-- reading previous quests
|
|
local file = io.open(minetest.get_worldpath().."/quests", "r")
|
|
if file then
|
|
print "Reading quests..."
|
|
quests = minetest.deserialize(file:read("*all"))
|
|
file:close()
|
|
end
|
|
quests = quests or {}
|
|
quests.registered_quests = {}
|
|
quests.active_quests = quests.active_quests or {}
|
|
quests.successfull_quests = quests.successfull_quests or {}
|
|
quests.failed_quests = quests.failed_quests or {}
|
|
quests.hud = quests.hud or {}
|
|
for idx,_ in pairs(quests.hud) do
|
|
quests.hud[idx].first = true
|
|
end
|
|
|
|
|
|
quests.formspec_lists = {}
|
|
function quests.round(num, n)
|
|
local mult = 10^(n or 0)
|
|
return math.floor(num * mult + .5) / mult
|
|
end
|
|
|
|
|
|
dofile(minetest.get_modpath("quests") .. "/core.lua")
|
|
dofile(minetest.get_modpath("quests") .. "/hud.lua")
|
|
dofile(minetest.get_modpath("quests") .. "/formspecs.lua")
|
|
|
|
-- support for unified_inventory
|
|
if (minetest.get_modpath("unified_inventory") ~= nil) then
|
|
dofile(minetest.get_modpath("quests") .. "/unified_inventory.lua")
|
|
elseif (minetest.get_modpath("inventory_plus") ~= nil) then
|
|
dofile(minetest.get_modpath("quests") .. "/inventory_plus.lua")
|
|
end
|
|
|
|
|
|
-- write the quests to file
|
|
minetest.register_on_shutdown(function()
|
|
print "Writing quests to file"
|
|
for playername, quest in pairs(quests.active_quests) do
|
|
for questname, questspecs in pairs(quest) do
|
|
if (questspecs.finished) then
|
|
quests.active_quests[playername][questname] = nil -- make sure no finished quests are saved as unfinished
|
|
end
|
|
end
|
|
end
|
|
local file = io.open(minetest.get_worldpath().."/quests", "w")
|
|
if (file) then
|
|
file:write(minetest.serialize({ --registered_quests = quests.registered_quests,
|
|
active_quests = quests.active_quests,
|
|
successfull_quests = quests.successfull_quests,
|
|
failed_quests = quests.failed_quests,
|
|
hud = quests.hud}))
|
|
file:close()
|
|
end
|
|
end)
|