diff options
| author | tenplus1 <kinsellaja@yahoo.com> | 2015-02-13 19:10:29 +0000 | 
|---|---|---|
| committer | tenplus1 <kinsellaja@yahoo.com> | 2015-02-13 19:10:29 +0000 | 
| commit | d7b19bac5008b2794fa6ff3b8c1a3581ae35f638 (patch) | |
| tree | d200f8287b6ae85f06529faa0320865fc2a2258f | |
| parent | ad35ab04cf3139ceb501ad980b9900724b885aa0 (diff) | |
Added chest management buttons and ability to name chest
| -rw-r--r-- | README.md | 16 | ||||
| -rw-r--r-- | init.lua | 128 | 
2 files changed, 106 insertions, 38 deletions
| @@ -1,9 +1,15 @@ -minetest-protect -================ +Protector Redo mod [protect] -Protector mod for minetest -based on glomie's mod, remade by Zeg9 and reworked by TenPlus1 to support minetest 0.4.9 and include protected doors and chests +Protector redo mod for minetest is based on glomie's mod, remade by Zeg9 and reworked by TenPlus1 to support minetest 0.4.9 and include protected doors and chests  https://forum.minetest.net/viewtopic.php?f=11&t=9376 -Released under WTFPL
\ No newline at end of file +Released under WTFPL + +0.1 - Initial release +0.2 - Texture update +0.3 - Added Protection Logo to blend in with player builds +0.4 - Code tweak for 0.4.10+ +0.5 - Added protector.radius variable in init.lua (default: 5) +0.6 - Added Protected Doors (wood and steel) and Protected Chest +0.7 - Protected Chests now have "To Chest" and "To Inventory" buttons to copy contents across, also chests can be named @@ -44,18 +44,17 @@ end  -- Protector Interface  protector.generate_formspec = function(meta) -	if meta:get_int("page") == nil then meta:set_int("page",0) end -	local formspec = "size[8,7]"..default.gui_bg..default.gui_bg_img..default.gui_slots -- Added new formspec defaults + +	local formspec = "size[8,7]"..default.gui_bg..default.gui_bg_img..default.gui_slots  		.."label[2.5,0;-- Protector interface --]" -		.."label[0,1;Punch node to show protected area]" -		.."label[0,2;Members: (type nick, press Enter to add)]" +		.."label[0,1;PUNCH node to show protected area or USE for area check]" +		.."label[0,2;Members: (type player name then press Enter to add)]" +  	local members = protector.get_member_list(meta) -	  	local npp = 12 -	local s = 0  	local i = 0 +  	for _, member in ipairs(members) do -		if s < meta:get_int("page")*15 then s = s +1 else  			if i < npp then  				formspec = formspec .. "button["..(i%4*2)..","  				..math.floor(i/4+3)..";1.5,.5;protector_member;"..member.."]" @@ -63,14 +62,15 @@ protector.generate_formspec = function(meta)  				..math.floor(i/4+3)..";.75,.5;protector_del_member_"..member..";X]"  			end  			i = i +1 -		end  	end -	local add_i = i -	if add_i < npp then +	 +	if i < npp then  		formspec = formspec -		.."field["..(add_i%4*2+1/3)..","..(math.floor(add_i/4+3)+1/3)..";1.433,.5;protector_add_member;;]" +		.."field["..(i%4*2+1/3)..","..(math.floor(i/4+3)+1/3)..";1.433,.5;protector_add_member;;]"  	end -	               		formspec = formspec.."button_exit[1,6.2;2,0.5;close_me;<< Back]" + +	formspec = formspec.."button_exit[2.5,6.2;3,0.5;close_me;Close]" +  	return formspec  end @@ -189,8 +189,7 @@ minetest.register_node("protector:protect", {  	after_place_node = function(pos, placer)  		local meta = minetest.env:get_meta(pos)  		meta:set_string("owner", placer:get_player_name() or "") -		meta:set_string("infotext", "Protection (owned by ".. -		meta:get_string("owner")..")") +		meta:set_string("infotext", "Protection (owned by "..meta:get_string("owner")..")")  		meta:set_string("members", "")  	end, @@ -206,8 +205,7 @@ minetest.register_node("protector:protect", {  		local meta = minetest.env:get_meta(pos)  		if protector.can_dig(1,pos,clicker:get_player_name(),true,1) then  			minetest.show_formspec(clicker:get_player_name(),  -			"protector_"..minetest.pos_to_string(pos), protector.generate_formspec(meta) -			) +			"protector:node_"..minetest.pos_to_string(pos), protector.generate_formspec(meta))  		end  	end, @@ -265,8 +263,7 @@ minetest.register_node("protector:protect2", {  	after_place_node = function(pos, placer)  		local meta = minetest.env:get_meta(pos)  		meta:set_string("owner", placer:get_player_name() or "") -		meta:set_string("infotext", "Protection (owned by ".. -		meta:get_string("owner")..")") +		meta:set_string("infotext", "Protection (owned by "..meta:get_string("owner")..")")  		meta:set_string("members", "")  	end, @@ -282,8 +279,7 @@ minetest.register_node("protector:protect2", {  		local meta = minetest.env:get_meta(pos)  		if protector.can_dig(1,pos,clicker:get_player_name(),true,1) then  			minetest.show_formspec(clicker:get_player_name(),  -			"protector_"..minetest.pos_to_string(pos), protector.generate_formspec(meta) -			) +			"protector:node_"..minetest.pos_to_string(pos), protector.generate_formspec(meta))  		end  	end, @@ -315,16 +311,15 @@ minetest.register_craft({  	}  }) --- If name entered into protector formspec - +-- If name entered or button press  minetest.register_on_player_receive_fields(function(player,formname,fields) -	if string.sub(formname,0,string.len("protector_")) == "protector_" then -		local pos_s = string.sub(formname,string.len("protector_")+1) + +	if string.sub(formname,0,string.len("protector:node_")) == "protector:node_" then + +		local pos_s = string.sub(formname,string.len("protector:node_")+1)  		local pos = minetest.string_to_pos(pos_s)  		local meta = minetest.env:get_meta(pos) -		if meta:get_int("page") == nil then meta:set_int("page",0) end -  		if not protector.can_dig(1,pos,player:get_player_name(),true,1) then  			return  		end @@ -340,12 +335,13 @@ minetest.register_on_player_receive_fields(function(player,formname,fields)  				protector.del_member(meta, string.sub(field,string.len("protector_del_member_")+1))  			end  		end - -		if fields.close_me then -			meta:set_int("page",meta:get_int("page")) -			else minetest.show_formspec(player:get_player_name(), formname,	protector.generate_formspec(meta)) +		 +		if not fields.close_me then +			minetest.show_formspec(player:get_player_name(), formname, protector.generate_formspec(meta))  		end +  	end +  end)  minetest.register_entity("protector:display", { @@ -555,13 +551,17 @@ local function get_locked_chest_formspec(pos)  		default.gui_bg_img..  		default.gui_slots..  		"list[nodemeta:".. spos .. ";main;0,0.3;8,4;]".. -		"list[current_player;main;0,4.85;8,1;]".. +		"button[0,4.5;2,0.25;toup;To Chest]".. +		"field[2.3,4.8;4,0.25;chestname;;]".. +		"button[6,4.5;2,0.25;todn;To Inventory]".. +		"list[current_player;main;0,5;8,1;]"..  		"list[current_player;main;0,6.08;8,3;8]".. -		default.get_hotbar_bg(0,4.85) +		default.get_hotbar_bg(0,5)   return formspec  end  -- Protected Chest +  minetest.register_node("protector:chest", {  	description = "Protected Chest",  	tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", @@ -608,13 +608,68 @@ minetest.register_node("protector:chest", {  		if not minetest.is_protected(pos, clicker:get_player_name()) then  			minetest.show_formspec(  				clicker:get_player_name(), -				"default:chest_locked", +				"protector:chest_"..minetest.pos_to_string(pos),  				get_locked_chest_formspec(pos)  			)  		end  	end,  }) +-- Proteted Chest formspec buttons + +minetest.register_on_player_receive_fields(function(player,formname,fields) + +	if string.sub(formname,0,string.len("protector:chest_")) == "protector:chest_" then + +		local pos_s = string.sub(formname,string.len("protector:chest_")+1) +		local pos = minetest.string_to_pos(pos_s) +		local meta = minetest.env:get_meta(pos) + +		local chest_inv = meta:get_inventory() +		local player_inv = player:get_inventory() + +		if fields.toup then + +			-- copy contents of players inventory to chest +			for i,v in ipairs( player_inv:get_list( "main" ) or {}) do +				if( chest_inv and chest_inv:room_for_item('main', v)) then +					local leftover = chest_inv:add_item( 'main', v ) +					player_inv:remove_item( "main", v ) +					if( leftover and not( leftover:is_empty() )) then +						player_inv:add_item( "main", v ) +					end +				end +			end +	 +		elseif fields.todn then + +			-- copy contents of chest to players inventory +			for i,v in ipairs( chest_inv:get_list( 'main' ) or {}) do +				if( player_inv:room_for_item( "main", v)) then +					local leftover = player_inv:add_item( "main", v ) +					chest_inv:remove_item( 'main', v ) +					if( leftover and not( leftover:is_empty() )) then +						chest_inv:add_item( 'main', v ) +					end +				end +			end + +		elseif fields.chestname then + +			-- change chest infotext to display name +			if fields.chestname ~= "" then +				meta:set_string("infotext", "Protected Chest ("..fields.chestname..")") +			else +				meta:set_string("infotext", "Protected Chest") +			end + +		end +	end + +end) + +-- Protected Chest recipe +  minetest.register_craft({  	output = 'protector:chest',  	recipe = { @@ -623,3 +678,10 @@ minetest.register_craft({  		{'group:wood', 'group:wood', 'group:wood'},  	}  }) + +minetest.register_craft({ +	output = 'protector:chest', +	recipe = { +		{'default:chest', 'default:copper_ingot', ''}, +	} +}) | 
