From 2907b3dd0c2730b2812b9fa7b8407a645591d320 Mon Sep 17 00:00:00 2001 From: adrido Date: Fri, 13 Mar 2015 15:02:54 +0100 Subject: [PATCH] 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 --- init.lua | 29 +++++++++++++++-------------- shared_locked.lua | 23 ++++++++++++++--------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/init.lua b/init.lua index 8237ec3..e273d66 100644 --- a/init.lua +++ b/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 diff --git a/shared_locked.lua b/shared_locked.lua index d124661..e1070a9 100644 --- a/shared_locked.lua +++ b/shared_locked.lua @@ -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,