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:
		
							
								
								
									
										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 	 | --Code and Textures are under the CC by-sa 3.0 licence 	 | ||||||
| --see: http://creativecommons.org/licenses/by-sa/3.0/	 | --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.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 posabove = pointed_thing.above | ||||||
| 	local posunder = pointed_thing.under | 	local posunder = pointed_thing.under | ||||||
| @@ -103,20 +104,20 @@ arrow_signs_on_place = function(itemstack, placer, pointed_thing) | |||||||
| 	 | 	 | ||||||
| end | 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 | 		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") | 			minetest.chat_send_player(sender:get_player_name(), "error: you don't have permission to edit the sign. you need the interact priv") | ||||||
| 		return | 		return | ||||||
| 		end | 		end | ||||||
| 		local meta = minetest.get_meta(pos) | 		local meta = minetest.get_meta(pos) | ||||||
| 		fields.text = fields.text or "" | 		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)) | 				"\" to sign at "..minetest.pos_to_string(pos)); | ||||||
| 		meta:set_string("text", fields.text) | 		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..'"') | 		meta:set_string("infotext", '"'..text..'"') | ||||||
| 		i=0 | 		local i=0 | ||||||
| 		for wort in text:gfind("\n") do | 		for wort in text:gfind("\n") do | ||||||
| 		i=i+1 | 		i=i+1 | ||||||
|         end |         end | ||||||
| @@ -125,8 +126,10 @@ end | |||||||
| 		end | 		end | ||||||
| 	return true | 	return true | ||||||
| 	end | 	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\"") | ||||||
| 	text = text:gsub("|", "\"\n\"") | 	text = text:gsub("|", "\"\n\"") | ||||||
| 	return text | 	return text | ||||||
| @@ -163,16 +166,14 @@ minetest.register_node("arrow_signs:wall", { | |||||||
| 	walkable = false, | 	walkable = false, | ||||||
| 	groups = {choppy=2,dig_immediate=2,sign=1}, | 	groups = {choppy=2,dig_immediate=2,sign=1}, | ||||||
| 	sounds = default.node_sound_defaults(), | 	sounds = default.node_sound_defaults(), | ||||||
| 	on_place = arrow_signs_on_place,	 | 	on_place = arrow_signs.on_place,	 | ||||||
| 	on_construct = function(pos) | 	on_construct = function(pos) | ||||||
| 		--local n = minetest.get_node(pos) | 		--local n = minetest.get_node(pos) | ||||||
| 		local meta = minetest.get_meta(pos) | 		local meta = minetest.get_meta(pos) | ||||||
| 		meta:set_string("formspec", arrow_signs.formspec) | 		meta:set_string("formspec", arrow_signs.formspec) | ||||||
| 		meta:set_string("infotext", "\"\"") | 		meta:set_string("infotext", [[""]]) | ||||||
| 	end, |  | ||||||
| 	on_receive_fields = function(pos, formname, fields, sender) |  | ||||||
| 		arrow_signs:savetext(pos, formname, fields, sender) |  | ||||||
| 	end, | 	end, | ||||||
|  | 	on_receive_fields = arrow_signs.savetext, | ||||||
| }) | }) | ||||||
|  |  | ||||||
| --Recipes | --Recipes | ||||||
|   | |||||||
| @@ -26,14 +26,16 @@ minetest.register_node("arrow_signs:shared_locked", { | |||||||
| 	groups = {choppy=2,dig_immediate=2,sign_locked=1}, | 	groups = {choppy=2,dig_immediate=2,sign_locked=1}, | ||||||
| 	legacy_wallmounted = true, | 	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) | 	on_construct = function(pos) | ||||||
| 			local meta =  minetest.get_meta(pos) | 			local meta =  minetest.get_meta(pos) | ||||||
| 			-- prepare the lock of the sign | 			-- prepare the lock of the sign | ||||||
| 			locks:lock_init( pos, | 			locks:lock_init( pos, | ||||||
| 							"size[8,4]".. | 							"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:;]".. | 							"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]" ); | 							"button_exit[6.3,3.2;1.7,0.7;locks_sent_input;Proceed]" ); | ||||||
| 	end, | 	end, | ||||||
| @@ -48,24 +50,27 @@ minetest.register_node("arrow_signs:shared_locked", { | |||||||
| 	end, | 	end, | ||||||
|  |  | ||||||
| 	on_receive_fields = function(pos, formname, fields, sender) | 	on_receive_fields = function(pos, formname, fields, sender) | ||||||
|  | 			 | ||||||
| 			-- if the user already has the right to use this and did input text | 			-- if the user already has the right to use this and did input text | ||||||
| 			if( fields.text | 			if( fields.text | ||||||
| 				and ( not(fields.locks_sent_lock_command) | 				and ( not(fields.locks_sent_lock_command) | ||||||
| 					   or fields.locks_sent_lock_command=="") | 					   or fields.locks_sent_lock_command=="") | ||||||
| 				and locks:lock_allow_use( pos, sender )) then | 				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)) | 				--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields)) | ||||||
| 				local meta =  minetest.get_meta(pos) | 				local meta =  minetest.get_meta(pos) | ||||||
| 				fields.text = fields.text or ""; | 				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)); | 							"\" to sign at "..minetest.pos_to_string(pos)); | ||||||
| 				meta:set_string("text", fields.text.." ["..sender:get_player_name().."]"); | 				meta:set_string("text", fields.text); | ||||||
| 				meta:set_string("infotext", '"'..fields.text..'"'.." ["..sender:get_player_name().."]"); | 				local text = arrow_signs.create_lines(fields.text) | ||||||
|  | 				meta:set_string("infotext", '"'..text..'"'.." ["..sender:get_player_name().."]"); | ||||||
|  |  | ||||||
| 			-- a command for the lock? | 			-- a command for the lock? | ||||||
| 			else | 			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 | ||||||
|  |  | ||||||
| 	end, | 	end, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user