mirror of
https://github.com/FaceDeer/dfcaverns.git
synced 2025-07-21 18:00:28 +02:00
rework structure of lorebooks
This commit is contained in:
35
collectible_lore/init.lua
Normal file
35
collectible_lore/init.lua
Normal 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
|
83
collectible_lore/items.lua
Normal file
83
collectible_lore/items.lua
Normal 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)
|
7
collectible_lore/locale/template.txt
Normal file
7
collectible_lore/locale/template.txt
Normal file
@ -0,0 +1,7 @@
|
||||
# textdomain: collectible_lore
|
||||
|
||||
|
||||
### items.lua ###
|
||||
|
||||
Cairn=
|
||||
Collectible Ledger=
|
2
collectible_lore/mod.conf
Normal file
2
collectible_lore/mod.conf
Normal file
@ -0,0 +1,2 @@
|
||||
name = collectible_lore
|
||||
depends = df_dependencies
|
Reference in New Issue
Block a user