rework structure of lorebooks

This commit is contained in:
FaceDeer
2023-02-11 16:13:12 -07:00
parent 2f0f51f210
commit c505f7f3ce
15 changed files with 728 additions and 754 deletions

35
collectible_lore/init.lua Normal file
View File

@ -0,0 +1,35 @@
local modpath = minetest.get_modpath(minetest.get_current_modname())
local S = minetest.get_translator(minetest.get_current_modname())
collectible_lore = {}
dofile(modpath.."/items.lua")
local collectible_lore_sort = function(first, second)
if (first.sort or 0) < (second.sort or 0) then
return true
end
if first.sort == second.sort then
return first.id < second.id
end
return false
end
collectible_lore.lorebooks = {}
local ids = {}
collectible_lore.register_lorebook = function(def)
if def.id == nil then
minetest.log("error", "[collectible_lore] Nil id for def " .. dump(def))
return false
end
if ids[def.id] then
minetest.log("error", "[collectible_lore] Duplicate unique lore id for defs " .. dump(def) .. " and " .. dump(ids[def.id]))
return false
end
ids[def.id] = def
table.insert(collectible_lore.lorebooks, def)
table.sort(collectible_lore.lorebooks, collectible_lore_sort)
end

View File

@ -0,0 +1,83 @@
local S = minetest.get_translator(minetest.get_current_modname())
minetest.register_node("collectible_lore:cairn", {
description = S("Cairn"),
drawtype = "nodebox",
tiles = {df_dependencies.texture_cobble},
drop = df_dependencies.node_name_cobble,
paramtype = "light",
paramtype2 = "facedir",
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
{-0.4375, 0, -0.4375, 0.4375, 0.5, 0.4375},
{-0.25, 0.5, -0.25, 0.25, 1, 0.25}
}
},
collision_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 1, 0.5}
}
},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 1, 0.5}
}
},
})
local player_state = {}
local get_formspec_for_player = function(player_name)
local selected
local state = player_state[player_name] or 1
local form = {}
table.insert(form, "formspec_version[6]size[10,8]")
table.insert(form, "textlist[0,0;4,7;list;")
local count = 1
for index, value in pairs(collectible_lore.lorebooks) do
if state == count then
selected = value
end
count = count + 1
table.insert(form, minetest.formspec_escape(value.title))
table.insert(form, ",")
end
table.remove(form) -- removes trailing comma
table.insert(form, ";" .. state .. "]")
table.insert(form, "textarea[4.5,0;5.5,7;;text;")
local str = selected.text
table.insert(form, minetest.formspec_escape(str))
table.insert(form, "]")
return table.concat(form)
end
minetest.register_craftitem("collectible_lore:ledger", {
description = S("Collectible Ledger"),
inventory_image = "df_lorebooks_ledger.png",
stack_max = 99,
on_use = function(itemstack, user, pointed_thing)
local player_name = user:get_player_name()
minetest.show_formspec(player_name, "collectible_lore:formspec", get_formspec_for_player(player_name))
end
})
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname ~= "collectible_lore:formspec" then return end
if fields.list then
local exploded = minetest.explode_textlist_event(fields.list)
if exploded.type == "CHG" then
local player_name = player:get_player_name()
player_state[player_name] = exploded.index
minetest.show_formspec(player_name, "collectible_lore:formspec", get_formspec_for_player(player_name))
end
end
end)

View File

@ -0,0 +1,7 @@
# textdomain: collectible_lore
### items.lua ###
Cairn=
Collectible Ledger=

View File

@ -0,0 +1,2 @@
name = collectible_lore
depends = df_dependencies