115 lines
3.4 KiB
Lua
115 lines
3.4 KiB
Lua
-- This mod add a function to add written books to the treasurer
|
|
--
|
|
|
|
local modname = minetest.get_current_modname()
|
|
local modpath = minetest.get_modpath(modname)
|
|
local worldpath = minetest.get_worldpath()
|
|
|
|
-- Load support for intllib.
|
|
local S, NS
|
|
if intllib and intllib.make_gettext_pair then
|
|
S, NS = dofile(modpath.."/intllib.lua")
|
|
else S, NS = function(s) return s, s end
|
|
end
|
|
|
|
local max_title_size = 80
|
|
local short_title_size = 35
|
|
local lpp = 14 --14 -- Lines per book's page
|
|
local no_title = "Untitled Book"
|
|
local no_owner = minetest.formspec_escape("...")
|
|
|
|
|
|
local line_parse = function(line)
|
|
local op = ","
|
|
local pt = {
|
|
{"^# ","#FF9292,"},
|
|
{"^## ","#9292DB,"},
|
|
{"^### ","#92FF92,"},
|
|
{"^#### ","#FFFF00,"},
|
|
}
|
|
for _,v in ipairs(pt) do
|
|
if string.match(line,v[1]) then
|
|
line = string.gsub(line,v[1],"")
|
|
op = v[2]
|
|
break
|
|
end
|
|
end
|
|
line = op .. minetest.formspec_escape(line)
|
|
return line
|
|
end
|
|
|
|
-- --[[ Alternate scrollable book unsing table
|
|
written_books.register_book_alernate.scroll = function(dt, prob, pre, booktype)
|
|
if not ( dt and dt.title and dt.filetable ) then return end
|
|
local text
|
|
-- Get a stack of one book
|
|
local bookstack = ItemStack(modname..":scroll")
|
|
-- Open stack meta
|
|
local meta = bookstack:get_meta()
|
|
local text = dt.filetable
|
|
|
|
-- Set book meta
|
|
local data = {}
|
|
-- local data = meta:to_table().fields
|
|
local title = dt.title:sub(1, max_title_size)
|
|
local text = text or {}
|
|
for n,l in ipairs(text) do text[n] = line_parse(l) end
|
|
local author = dt.owner
|
|
|
|
local short_title = dt.title
|
|
-- Don't bother triming the title if the trailing dots would make it longer
|
|
if #short_title > short_title_size + 3 then
|
|
short_title = short_title:sub(1, short_title_size) .. "..."
|
|
end
|
|
local crd = ""
|
|
if author ~= no_owner then crd = "by "..author end
|
|
data.description = "\""..short_title.."\""..crd
|
|
|
|
local deco = default.gui_bg .. default.gui_bg_img
|
|
local formspec = "size[7,7,true]" .. deco
|
|
-- Title
|
|
formspec = formspec .. "tablecolumns[color;text]"
|
|
.. "tableoptions[background=#00000000;highlight=#00000000;border=false]"
|
|
.. "table[0.4,0;7,0.5;title;#FFFF00," .. minetest.formspec_escape(title) .. "]"
|
|
.. "label[0.5,0.5;by " .. author .. "]"
|
|
|
|
-- Content
|
|
formspec = formspec .. "tablecolumns[color;text,align=inline]" --,width=5
|
|
.. "tableoptions[color=#FFF;background=#494949;highlight=#494949;border=true]"
|
|
.. "table[0,1;6.7,6;doc;" .. table.concat(text, ",") .. ",] "
|
|
|
|
-- formspec = formspec .. "image_button_exit[6,6.5;0.8,0.8;power.png;close;;false;false;power.png]"
|
|
|
|
|
|
data.owner = author
|
|
data.formspec = formspec
|
|
meta:from_table({ fields = data })
|
|
|
|
-- Convert back to itemstack (string)
|
|
local wbook = bookstack:to_string()
|
|
|
|
-- Add to list
|
|
written_books.add_book_to_list(wbook, prob, pre, booktype)
|
|
end
|
|
--]]
|
|
|
|
local function book_on_use(itemstack, user)
|
|
local player_name = user:get_player_name()
|
|
--if not user then return end
|
|
--local username = user:get_player_name()
|
|
if not player_name or player_name == "" then return end
|
|
local meta = itemstack:get_meta()
|
|
local data = meta:to_table().fields
|
|
print(dump(data))
|
|
if data.formspec then minetest.show_formspec(player_name, modname..":book", data.formspec) end
|
|
return itemstack
|
|
end
|
|
|
|
minetest.register_craftitem(modname..":scroll", {
|
|
description = S("Scroll"),
|
|
inventory_image = "written_books_scroll.png",
|
|
groups = {book = 1, not_in_creative_inventory = 1, flammable = 3},
|
|
stack_max = 1,
|
|
on_use = book_on_use,
|
|
})
|