diff options
| -rw-r--r-- | README.md | 8 | ||||
| -rw-r--r-- | init.lua | 71 | 
2 files changed, 42 insertions, 37 deletions
| @@ -50,6 +50,7 @@ Change log:        players can hurt one another even inside protected areas (not spawn protected)  2.2 - Updated protector tool so that player only needs to stand nearby (2 block radius)        It can also place vertically (up and down) as well.  New protector recipe added. +2.3 - Localise many of the protector functions and tidy code.  Lucky Blocks: 10 @@ -108,3 +109,10 @@ protector_hurt = 2  protector_flip = true  - When true players who dig inside a protected area will flipped around to stop them using lag to grief into someone else's build + + +Protector Tool + +Can be crafted with a protector surrounded by steel ingots and is used to place new protectors at a set distance of protector.radius in all directions including up and down. + +Use by standing near an existing protector and using as a tool, hold sneak/shift to place new protector containing member list from inside nearest one. @@ -29,30 +29,30 @@ protector.intllib = S  -- return list of members as a table -protector.get_member_list = function(meta) +local get_member_list = function(meta)  	return meta:get_string("members"):split(" ")  end  -- write member list table in protector meta as string -protector.set_member_list = function(meta, list) +local set_member_list = function(meta, list)  	meta:set_string("members", table.concat(list, " "))  end --- check if name is owner -protector.is_owner = function(meta, name) +-- check for owner name +local is_owner = function(meta, name)  	return name == meta:get_string("owner")  end --- check if player name is a member -protector.is_member = function (meta, name) +-- check for member name +local is_member = function (meta, name) -	for _, n in pairs(protector.get_member_list(meta)) do +	for _, n in pairs(get_member_list(meta)) do  		if n == name then  			return true @@ -64,26 +64,26 @@ end  -- add player name to table as member -protector.add_member = function(meta, name) +local add_member = function(meta, name)  	-- does name already exist? -	if protector.is_owner(meta, name) -	or protector.is_member(meta, name) then +	if is_owner(meta, name) +	or is_member(meta, name) then  		return  	end -	local list = protector.get_member_list(meta) +	local list = get_member_list(meta)  	table.insert(list, name) -	protector.set_member_list(meta, list) +	set_member_list(meta, list)  end  -- remove player name from table -protector.del_member = function(meta, name) +local del_member = function(meta, name) -	local list = protector.get_member_list(meta) +	local list = get_member_list(meta)  	for i, n in pairs(list) do @@ -93,12 +93,12 @@ protector.del_member = function(meta, name)  		end  	end -	protector.set_member_list(meta, list) +	set_member_list(meta, list)  end  -- protector interface -protector.generate_formspec = function(meta) +local protector_formspec = function(meta)  	local formspec = "size[8,7]"  		.. default.gui_bg @@ -109,7 +109,7 @@ protector.generate_formspec = function(meta)  		.. "label[0,2;" .. S("Members:") .. "]"  		.. "button_exit[2.5,6.2;3,0.5;close_me;" .. S("Close") .. "]" -	local members = protector.get_member_list(meta) +	local members = get_member_list(meta)  	local npp = 12 -- max users added to protector list  	local i = 0 @@ -149,7 +149,7 @@ end  -- check if pos is inside a protected spawn area -local function inside_spawn(pos, radius) +local inside_spawn = function(pos, radius)  	if protector.spawn <= 0 then  		return false @@ -195,7 +195,7 @@ protector.can_dig = function(r, pos, digger, onlyowner, infolevel)  		minetest.chat_send_player(digger,  			S("Spawn @1 has been protected up to a @2 block radius.", -			minetest.pos_to_string(statspawn), protector.spawn)) +				minetest.pos_to_string(statspawn), protector.spawn))  		return false  	end @@ -218,7 +218,7 @@ protector.can_dig = function(r, pos, digger, onlyowner, infolevel)  		if infolevel == 1 and owner ~= digger then  			-- and you aren't on the member list -			if onlyowner or not protector.is_member(meta, digger) then +			if onlyowner or not is_member(meta, digger) then  				minetest.chat_send_player(digger,  					S("This area is owned by @1!", owner)) @@ -230,16 +230,14 @@ protector.can_dig = function(r, pos, digger, onlyowner, infolevel)  		-- when using protector as tool, show protector information  		if infolevel == 2 then -			minetest.chat_send_player(digger, -			S("This area is owned by @1.", owner)) +			minetest.chat_send_player(digger, S("This area is owned by @1.", owner))  			minetest.chat_send_player(digger, -			S("Protection located at: @1", minetest.pos_to_string(pos[n]))) +				S("Protection located at: @1", minetest.pos_to_string(pos[n])))  			if members ~= "" then -				minetest.chat_send_player(digger, -				S("Members: @1.", members)) +				minetest.chat_send_player(digger, S("Members: @1.", members))  			end  			return false @@ -252,8 +250,7 @@ protector.can_dig = function(r, pos, digger, onlyowner, infolevel)  		if #pos < 1 then -			minetest.chat_send_player(digger, -			S("This area is not protected.")) +			minetest.chat_send_player(digger, S("This area is not protected."))  		end  		minetest.chat_send_player(digger, S("You can build here.")) @@ -263,7 +260,7 @@ protector.can_dig = function(r, pos, digger, onlyowner, infolevel)  end -protector.old_is_protected = minetest.is_protected +local old_is_protected = minetest.is_protected  -- check for protected area, return true if protected and digger isn't on list  function minetest.is_protected(pos, digger) @@ -317,12 +314,12 @@ function minetest.is_protected(pos, digger)  	end  	-- otherwise can dig or place -	return protector.old_is_protected(pos, digger) +	return old_is_protected(pos, digger)  end  -- make sure protection block doesn't overlap another protector's area -function protector.check_overlap(itemstack, placer, pointed_thing) +local check_overlap = function(itemstack, placer, pointed_thing)  	if pointed_thing.type ~= "node" then  		return itemstack @@ -377,7 +374,7 @@ minetest.register_node("protector:protect", {  		}  	}, -	on_place = protector.check_overlap, +	on_place = check_overlap,  	after_place_node = function(pos, placer) @@ -406,7 +403,7 @@ minetest.register_node("protector:protect", {  			minetest.show_formspec(clicker:get_player_name(),  				"protector:node_" .. minetest.pos_to_string(pos), -				protector.generate_formspec(meta)) +				protector_formspec(meta))  		end  	end, @@ -460,7 +457,7 @@ minetest.register_node("protector:protect2", {  	},  	selection_box = {type = "wallmounted"}, -	on_place = protector.check_overlap, +	on_place = check_overlap,  	after_place_node = function(pos, placer) @@ -487,7 +484,7 @@ minetest.register_node("protector:protect2", {  		if protector.can_dig(1, pos, clicker:get_player_name(), true, 1) then  			minetest.show_formspec(clicker:get_player_name(),  -			"protector:node_" .. minetest.pos_to_string(pos), protector.generate_formspec(meta)) +			"protector:node_" .. minetest.pos_to_string(pos), protector_formspec(meta))  		end  	end, @@ -541,7 +538,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)  		if fields.protector_add_member then  			for _, i in pairs(fields.protector_add_member:split(" ")) do -				protector.add_member(meta, i) +				add_member(meta, i)  			end  		end @@ -551,14 +548,14 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)  			if string.sub(field, 0,  				string.len("protector_del_member_")) == "protector_del_member_" then -				protector.del_member(meta, +				del_member(meta,  					string.sub(field,string.len("protector_del_member_") + 1))  			end  		end  		-- reset formspec until close button pressed  		if not fields.close_me then -			minetest.show_formspec(player:get_player_name(), formname, protector.generate_formspec(meta)) +			minetest.show_formspec(player:get_player_name(), formname, protector_formspec(meta))  		end  	end  end) | 
