update to version 4.1
fixed: * text is saved if user exit formspec by pressign esc * everybody was allowed to edit the locked arrow sign * uninitialized global variable * tidy up code
This commit is contained in:
parent
73bf457a8c
commit
2907b3dd0c
29
init.lua
29
init.lua
|
@ -1,4 +1,5 @@
|
|||
--more_signs by addi
|
||||
--arrow_signs by addi
|
||||
--thanks to Jat15 for the new place and rotate-system.
|
||||
--Code and Textures are under the CC by-sa 3.0 licence
|
||||
--see: http://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
||||
|
@ -8,7 +9,7 @@ arrow_signs={}
|
|||
|
||||
arrow_signs.formspec = "field[text;Sign text:;${text}]";
|
||||
|
||||
arrow_signs_on_place = function(itemstack, placer, pointed_thing)
|
||||
arrow_signs.on_place = function(itemstack, placer, pointed_thing)
|
||||
|
||||
local posabove = pointed_thing.above
|
||||
local posunder = pointed_thing.under
|
||||
|
@ -103,20 +104,20 @@ arrow_signs_on_place = function(itemstack, placer, pointed_thing)
|
|||
|
||||
end
|
||||
|
||||
function arrow_signs:savetext(pos, formname, fields, sender)
|
||||
|
||||
arrow_signs.savetext = function(pos, formname, fields, sender)
|
||||
if fields.text then
|
||||
if not minetest.get_player_privs(sender:get_player_name())["interact"] then
|
||||
minetest.chat_send_player(sender:get_player_name(), "error: you don't have permission to edit the sign. you need the interact priv")
|
||||
return
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
fields.text = fields.text or ""
|
||||
print((sender:get_player_name() or "").." wrote \""..fields.text..
|
||||
"\" to sign at "..minetest.pos_to_string(pos))
|
||||
minetest.log("action", (sender:get_player_name() or "").." wrote \""..fields.text..
|
||||
"\" to sign at "..minetest.pos_to_string(pos));
|
||||
meta:set_string("text", fields.text)
|
||||
text = arrow_signs:create_lines(fields.text)
|
||||
local text = arrow_signs.create_lines(fields.text)
|
||||
meta:set_string("infotext", '"'..text..'"')
|
||||
i=0
|
||||
local i=0
|
||||
for wort in text:gfind("\n") do
|
||||
i=i+1
|
||||
end
|
||||
|
@ -125,8 +126,10 @@ end
|
|||
end
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function arrow_signs:create_lines(text)
|
||||
--this function creates the linebreaks
|
||||
arrow_signs.create_lines = function(text)
|
||||
text = text:gsub("/", "\"\n\"")
|
||||
text = text:gsub("|", "\"\n\"")
|
||||
return text
|
||||
|
@ -163,16 +166,14 @@ minetest.register_node("arrow_signs:wall", {
|
|||
walkable = false,
|
||||
groups = {choppy=2,dig_immediate=2,sign=1},
|
||||
sounds = default.node_sound_defaults(),
|
||||
on_place = arrow_signs_on_place,
|
||||
on_place = arrow_signs.on_place,
|
||||
on_construct = function(pos)
|
||||
--local n = minetest.get_node(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", arrow_signs.formspec)
|
||||
meta:set_string("infotext", "\"\"")
|
||||
end,
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
arrow_signs:savetext(pos, formname, fields, sender)
|
||||
meta:set_string("infotext", [[""]])
|
||||
end,
|
||||
on_receive_fields = arrow_signs.savetext,
|
||||
})
|
||||
|
||||
--Recipes
|
||||
|
|
|
@ -26,14 +26,16 @@ minetest.register_node("arrow_signs:shared_locked", {
|
|||
groups = {choppy=2,dig_immediate=2,sign_locked=1},
|
||||
legacy_wallmounted = true,
|
||||
|
||||
on_place = arrow_signs_on_place,
|
||||
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
arrow_signs.on_place(itemstack, placer, pointed_thing);
|
||||
locks:lock_set_owner( pointed_thing.above, placer, "Shared locked sign" );
|
||||
end,
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
-- prepare the lock of the sign
|
||||
locks:lock_init( pos,
|
||||
"size[8,4]"..
|
||||
"field[0.3,0.6;6,0.7;text;Text:;]"..
|
||||
"field[0.3,0.6;6,0.7;text;Text:;${text}]"..
|
||||
"field[0.3,3.6;6,0.7;locks_sent_lock_command;Locked sign. Type /help for help:;]"..
|
||||
"button_exit[6.3,3.2;1.7,0.7;locks_sent_input;Proceed]" );
|
||||
end,
|
||||
|
@ -48,24 +50,27 @@ minetest.register_node("arrow_signs:shared_locked", {
|
|||
end,
|
||||
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
|
||||
|
||||
-- if the user already has the right to use this and did input text
|
||||
if( fields.text
|
||||
and ( not(fields.locks_sent_lock_command)
|
||||
or fields.locks_sent_lock_command=="")
|
||||
and locks:lock_allow_use( pos, sender )) then
|
||||
|
||||
--then save the text to the sign meta
|
||||
--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
|
||||
local meta = minetest.get_meta(pos)
|
||||
fields.text = fields.text or "";
|
||||
print((sender:get_player_name() or "").." wrote \""..fields.text..
|
||||
minetest.log("action", (sender:get_player_name() or "").." wrote \""..fields.text..
|
||||
"\" to sign at "..minetest.pos_to_string(pos));
|
||||
meta:set_string("text", fields.text.." ["..sender:get_player_name().."]");
|
||||
meta:set_string("infotext", '"'..fields.text..'"'.." ["..sender:get_player_name().."]");
|
||||
meta:set_string("text", fields.text);
|
||||
local text = arrow_signs.create_lines(fields.text)
|
||||
meta:set_string("infotext", '"'..text..'"'.." ["..sender:get_player_name().."]");
|
||||
|
||||
-- a command for the lock?
|
||||
else
|
||||
arrow_signs:savetext( pos, formname, fields, sender );
|
||||
--do nothing, because user does not have the right to change the sign
|
||||
--a warning message is also printed by the locks mod
|
||||
--arrow_signs.savetext( pos, formname, fields, sender );
|
||||
end
|
||||
|
||||
end,
|
||||
|
|
Loading…
Reference in New Issue
Block a user