notice: Rework mod.
- Change formspec implementation from multiple labels to single label. - Automatically break lines at 40 character limit. - Add an API for external mods to send notices to players. - Actually register the `notice` privilege. - Other minor fixes.master
parent
c42eee5b87
commit
df496f59ac
|
@ -1,5 +1,39 @@
|
||||||
|
|
||||||
minetest.register_privilege("notice", "Able to show notices to players.")
|
notice = { }
|
||||||
|
|
||||||
|
function notice.send(target, text)
|
||||||
|
local player = minetest.get_player_by_name(target)
|
||||||
|
if not player then
|
||||||
|
return false, ("There's no player named '%s'."):format(target)
|
||||||
|
end
|
||||||
|
local fs = { }
|
||||||
|
--[[
|
||||||
|
for _, line in ipairs(text:split("|")) do
|
||||||
|
table.insert(fs, ("label[1,%f;%s]"):format(y+1, minetest.formspec_escape(line)))
|
||||||
|
y = y + 0.5
|
||||||
|
end
|
||||||
|
--]]
|
||||||
|
local lines = { }
|
||||||
|
for i, line in ipairs(text:split("|")) do
|
||||||
|
local lt = { }
|
||||||
|
for i = 1, #line, 40 do
|
||||||
|
table.insert(lt, line:sub(i, i+39))
|
||||||
|
end
|
||||||
|
lines[i] = table.concat(lt, "\n")
|
||||||
|
end
|
||||||
|
text = table.concat(lines, "\n")
|
||||||
|
text = minetest.formspec_escape(text)
|
||||||
|
table.insert(fs, "size[8,4]")
|
||||||
|
table.insert(fs, "label[1,.2;"..text.."]")
|
||||||
|
table.insert(fs, "button_exit[3,3.2;2,0.5;ok;OK]")
|
||||||
|
fs = table.concat(fs)
|
||||||
|
minetest.after(0.5, function()
|
||||||
|
minetest.show_formspec(target, "notice:notice", fs)
|
||||||
|
end)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_privilege("notice", "Send notices to players.")
|
||||||
|
|
||||||
minetest.register_chatcommand("notice", {
|
minetest.register_chatcommand("notice", {
|
||||||
params = "<player> <text>",
|
params = "<player> <text>",
|
||||||
|
@ -8,26 +42,12 @@ minetest.register_chatcommand("notice", {
|
||||||
func = function(name, params)
|
func = function(name, params)
|
||||||
local target, text = params:match("(%S+)%s+(.+)")
|
local target, text = params:match("(%S+)%s+(.+)")
|
||||||
if not (target and text) then
|
if not (target and text) then
|
||||||
minetest.chat_send_player(name, "Usage: /notice <player> <text>")
|
return false, "Usage: /notice <player> <text>"
|
||||||
return
|
|
||||||
end
|
end
|
||||||
local player = minetest.get_player_by_name(target)
|
local ok, err = notice.send(target, text)
|
||||||
if not player then
|
if not ok then
|
||||||
minetest.chat_send_player(name, ("There's no player named '%s'."):format(target))
|
return false, err
|
||||||
return
|
|
||||||
end
|
end
|
||||||
local fs = { }
|
return true, "Notice sent!"
|
||||||
local y = 0
|
|
||||||
for _, line in ipairs(text:split("|")) do
|
|
||||||
table.insert(fs, ("label[1,%f;%s]"):format(y+1, minetest.formspec_escape(line)))
|
|
||||||
y = y + 0.5
|
|
||||||
end
|
|
||||||
table.insert(fs, 1, ("size[8,%d]"):format(y+3))
|
|
||||||
table.insert(fs, ("button_exit[3,%f;2,0.5;ok;OK]"):format(y+2))
|
|
||||||
fs = table.concat(fs)
|
|
||||||
minetest.chat_send_player(name, "Notice sent.")
|
|
||||||
minetest.after(0.5, function()
|
|
||||||
minetest.show_formspec(target, "notice:notice", fs)
|
|
||||||
end)
|
|
||||||
end,
|
end,
|
||||||
})
|
})
|
Loading…
Reference in New Issue