72 lines
1.8 KiB
Lua
72 lines
1.8 KiB
Lua
local ns = rgt
|
|
|
|
local achievements = {}
|
|
ns.achievements = achievements
|
|
local root_achievements = {}
|
|
|
|
function ns.register_achievement(def)
|
|
if not def.label then
|
|
def.label = def.name:gsub("_", " "):gsub("%s%a", function(a) return " "..string.upper(a) end)
|
|
end
|
|
if not def.depends then
|
|
table.insert(root_achievements, def.name)
|
|
def.depends = {}
|
|
end
|
|
achievements[def.name] = def
|
|
end
|
|
|
|
minetest.register_on_mods_loaded(function()
|
|
table.sort(root_achievements)
|
|
for id, def in pairs(achievements) do
|
|
for _, dep in ipairs(def.depends) do
|
|
local d_def = achievements[dep]
|
|
if not d_def.children then d_def.children = {} end
|
|
if d_def then
|
|
table.insert(d_def.children, id)
|
|
else
|
|
minetest.log("error", "[rgt_achievements] Missing dependency '"..dep.."' for '"..id.."'")
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
|
|
|
|
function ns.show_achievements(name)
|
|
local fs = [[
|
|
formspec_version[10]
|
|
size[12.5,10.5]
|
|
scroll_container[0.25,0.25;12,11;blah;horizontal;;]
|
|
scroll_container[0.25,0.25;12,10;blah2;vertical;;]
|
|
]]
|
|
|
|
for i, x in ipairs(root_achievements) do
|
|
fs = fs.."image[0,"..(i *0.5)..";0.25,0.25;rgt_stone.png]"
|
|
end
|
|
|
|
fs = fs..[[
|
|
scroll_container_end[]
|
|
scroll_container_end[]
|
|
scrollbaroptions[min=0;max=256]
|
|
scrollbar[0,0;-800,0;horizontal;blah;]
|
|
scrollbar[0,0;-800,0;vertical;blah2;]
|
|
]]
|
|
|
|
minetest.show_formspec(name, "achievements", fs)
|
|
end
|
|
|
|
|
|
|
|
ns.register_achievement {
|
|
name = "survival",
|
|
}
|
|
|
|
ns.register_achievement {
|
|
name = "machines",
|
|
}
|
|
|
|
minetest.register_chatcommand("a", {
|
|
func = function(name)
|
|
ns.show_achievements(name)
|
|
end
|
|
})
|