mirror of
				https://github.com/kakalak-lumberJack/creative_areas.git
				synced 2025-11-04 09:45:33 +01:00 
			
		
		
		
	new features
This commit is contained in:
		@@ -1,67 +1,119 @@
 | 
				
			|||||||
local storage = minetest.get_mod_storage()
 | 
					local storage = minetest.get_mod_storage()
 | 
				
			||||||
local cr_areas = minetest.deserialize(storage:get_string("cr_areas")) or {}
 | 
					local cr_areas = minetest.deserialize(storage:get_string("cr_areas")) or {}
 | 
				
			||||||
 | 
					local privtbl = {["interact"] = false, ["fast"] = false, ["fly"] = false, 
 | 
				
			||||||
 | 
					["noclip"] = false, ["creative"] = false, ["teleport"] = false, ["worldedit"] = false}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
---------------
 | 
					---------------
 | 
				
			||||||
-- Functions
 | 
					-- Functions
 | 
				
			||||||
---------------
 | 
					---------------
 | 
				
			||||||
-- Add creative area to list.
 | 
					-- Check for intersecting creative areas
 | 
				
			||||||
local function make_cr_area(name, areaID)
 | 
					function intersects_cr_area(areaID)
 | 
				
			||||||
	local id = tonumber(areaID)
 | 
						local ID = areaID
 | 
				
			||||||
	if areas.areas[id] ~= nil then
 | 
						local newarea = areas.areas[ID]
 | 
				
			||||||
		if cr_areas ~= {} then
 | 
						local np1, np2 = newarea["pos1"], newarea["pos2"]
 | 
				
			||||||
			for i = 1, #cr_areas do
 | 
						if cr_areas == {} then
 | 
				
			||||||
				if cr_areas[i] == id then
 | 
							return false
 | 
				
			||||||
					return minetest.chat_send_player(name, "Area " ..id.." is already a creative area.")
 | 
						end
 | 
				
			||||||
 | 
						for k, v in pairs(cr_areas) do
 | 
				
			||||||
 | 
							local id = tonumber(k)
 | 
				
			||||||
 | 
							local area = areas.areas[tonumber(id)]
 | 
				
			||||||
 | 
							if area ~= nil then
 | 
				
			||||||
 | 
								local p1, p2 = area["pos1"], area["pos2"]
 | 
				
			||||||
 | 
								for cx = p1.x, p2.x do
 | 
				
			||||||
 | 
									for cy = p1.y, p2.y do
 | 
				
			||||||
 | 
										for cz = p1.z, p2.z do
 | 
				
			||||||
 | 
											for nx = np1.x, np2.x do
 | 
				
			||||||
 | 
												for ny = np1.y, np2.y do
 | 
				
			||||||
 | 
													for nz = np1.z, np2.z do
 | 
				
			||||||
 | 
														if cx == nx and cy == ny and cz == nz then
 | 
				
			||||||
 | 
															return true
 | 
				
			||||||
 | 
														end
 | 
				
			||||||
 | 
													end
 | 
				
			||||||
 | 
												end
 | 
				
			||||||
 | 
											end
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		table.insert(cr_areas, id)
 | 
						end
 | 
				
			||||||
 | 
						return false
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					-- Add creative area to list.
 | 
				
			||||||
 | 
					local function make_cr_area(name, areaID)
 | 
				
			||||||
 | 
						local id = tonumber(areaID)
 | 
				
			||||||
 | 
						local intersects = intersects_cr_area(id)
 | 
				
			||||||
 | 
						if intersects == true then
 | 
				
			||||||
 | 
							return minetest.chat_send_player(name, "This area interesects another creative area.")
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						if privs == nil then privs = privtbl end
 | 
				
			||||||
 | 
						if areas.areas[id] ~= nil then
 | 
				
			||||||
 | 
							id = tostring(id)
 | 
				
			||||||
 | 
							if cr_areas ~= {} then
 | 
				
			||||||
 | 
								if cr_areas[id] then
 | 
				
			||||||
 | 
									cr_areas[id]["privs"] = privs
 | 
				
			||||||
 | 
									return minetest.chat_send_player(name, "Creative Area " ..id.." updated")
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							local cr_area = {}
 | 
				
			||||||
 | 
							cr_area["privs"] = privs	
 | 
				
			||||||
 | 
							cr_areas[id] = cr_area
 | 
				
			||||||
		storage:set_string("cr_areas", minetest.serialize(cr_areas))
 | 
							storage:set_string("cr_areas", minetest.serialize(cr_areas))
 | 
				
			||||||
		minetest.chat_send_player(name, "Area added to Creative Areas!")
 | 
							minetest.chat_send_player(name, "Area added to Creative Areas!")
 | 
				
			||||||
	else minetest.chat_send_player(name, "Not a valid area ID")	 
 | 
						else minetest.chat_send_player(name, "Not a valid area ID")	 
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
--Removes Creative Area
 | 
					--Removes Creative Area
 | 
				
			||||||
local function rm_cr_area(name, areaID)
 | 
					local function rm_cr_area(name, ID)
 | 
				
			||||||
	local id = tonumber(areaID) 
 | 
						local id = tostring(ID)
 | 
				
			||||||
	for i = 1, #cr_areas do
 | 
						local i = 1
 | 
				
			||||||
		if cr_areas[i] == id then
 | 
						if cr_areas[id] then
 | 
				
			||||||
			table.remove(cr_areas, i)
 | 
							for k,v in pairs(cr_areas) do
 | 
				
			||||||
			storage:set_string("cr_areas", minetest.serialize(cr_areas))
 | 
								if k == id then
 | 
				
			||||||
			return minetest.chat_send_player(name, "Creative area removed!")
 | 
									cr_areas[k] = nil
 | 
				
			||||||
 | 
									storage:set_string("cr_areas", minetest.serialize(cr_areas))
 | 
				
			||||||
 | 
									return minetest.chat_send_player(name, "Creative area removed!")
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							return minetest.chat_send_player(name, "Not a creative area ID")
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					--Remove creative area which are no longer stored by areas mod
 | 
				
			||||||
 | 
					local function rm_nil_areas(areaID)
 | 
				
			||||||
 | 
						if areas.areas[areaID] == nil then 
 | 
				
			||||||
 | 
							cr_areas[tostring(areaID)] = nil
 | 
				
			||||||
 | 
							storage:set_string("cr_areas", minetest.serialize(cr_areas))
 | 
				
			||||||
	end 
 | 
						end 
 | 
				
			||||||
	return minetest.chat_send_player(name, "Not a creative area ID")
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
-- Checks players location against listed creative areas.
 | 
					-- Checks players location against listed creative areas.
 | 
				
			||||||
function check_cr_area(player)
 | 
					local function check_cr_area(player)
 | 
				
			||||||
	local pos = player:get_pos()
 | 
						local pos = player:get_pos()
 | 
				
			||||||
	local area_at_pos = areas:getAreasAtPos(pos)
 | 
						local area_at_pos = areas:getAreasAtPos(pos)
 | 
				
			||||||
	local status = false
 | 
						local status = false
 | 
				
			||||||
	if cr_areas ~= {} then
 | 
						local ID = 0
 | 
				
			||||||
		for i = 1, #cr_areas do
 | 
						--if area_at_pos ~= {} then
 | 
				
			||||||
			local areaID = cr_areas[i]
 | 
							for k, v in pairs(cr_areas) do
 | 
				
			||||||
			-- Clean up creative areas which are have been deleted from Areas mod
 | 
								if tonumber(k) ~= nil then
 | 
				
			||||||
			if areas.areas[areaID] == nil then 
 | 
								local areaID = tonumber(k)
 | 
				
			||||||
				table.remove(cr_areas, i)
 | 
					--Compare Areas which  player are in with Creative Area. Grant/revoke creative priv accordingly."
 | 
				
			||||||
				storage:set_string("cr_areas", minetest.serialize(cr_areas))
 | 
									for _, in_area in pairs(area_at_pos) do
 | 
				
			||||||
			end 
 | 
										if in_area["pos1"] == areas.areas[areaID]["pos1"] --make sure the areas are not just the same name.
 | 
				
			||||||
			-- Compare Areas which  player are in with Creative Area. Grant/revoke creative priv accordingly."
 | 
										and in_area["name"] == areas.areas[areaID]["name"] then
 | 
				
			||||||
			for _, in_area in pairs(area_at_pos) do
 | 
											status = true
 | 
				
			||||||
				if in_area["pos1"] == areas.areas[areaID]["pos1"] --make sure the areas are not just the same name.
 | 
											ID = tostring(areaID)
 | 
				
			||||||
				 and in_area["name"] == areas.areas[areaID]["name"] then
 | 
										end
 | 
				
			||||||
					status = true
 | 
					 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						
 | 
				
			||||||
	return status
 | 
						return status, ID
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
--------------------
 | 
					--------------------
 | 
				
			||||||
-- Chat Commands
 | 
					-- Chat Commands
 | 
				
			||||||
-------------------
 | 
					-------------------
 | 
				
			||||||
minetest.register_chatcommand("creative_area", {
 | 
					minetest.register_chatcommand("creative_area", {
 | 
				
			||||||
	description = "Sets area to grant players creative priv while inside it",
 | 
						description = "Sets area to grant players creative priv while inside it",
 | 
				
			||||||
	params = "<AreaID>",
 | 
						params = "<AreaID> <Privs>",
 | 
				
			||||||
	privs = {privs = true},
 | 
						privs = {privs = true},
 | 
				
			||||||
	func = function(name, param)
 | 
						func = function(name, param)
 | 
				
			||||||
		make_cr_area(name, param)
 | 
							make_cr_area(name, param)
 | 
				
			||||||
@@ -84,17 +136,46 @@ minetest.register_chatcommand("ls_creative_areas", {
 | 
				
			|||||||
		local list = ""
 | 
							local list = ""
 | 
				
			||||||
		if cr_areas ~= {} then
 | 
							if cr_areas ~= {} then
 | 
				
			||||||
			for i = 1, #cr_areas do
 | 
								for i = 1, #cr_areas do
 | 
				
			||||||
				local id = tonumber(cr_areas[i])
 | 
									for k, v in pairs(cr_areas[i]) do
 | 
				
			||||||
				local area_name = areas.areas[ id ]["name"]
 | 
										if k == "id" then
 | 
				
			||||||
				list = list .. " " .. area_name .. " (ID="..id..")"
 | 
											local id = tonumber(v)
 | 
				
			||||||
 | 
											local area_name = areas.areas[id]["name"]
 | 
				
			||||||
 | 
											list = list .. " " .. area_name .. " (ID="..id..")"
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
									minetest.chat_send_player(name, "Creative Area (ID): "..list)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			minetest.chat_send_player(name, "Creative Area (ID): "..list)
 | 
					 | 
				
			||||||
		else minetest.chat_send_player(name, "No creative areas found")
 | 
							else minetest.chat_send_player(name, "No creative areas found")
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					------------------------------------------------------------------------
 | 
				
			||||||
 | 
					-- Store players default privs on joining first time incase spawning in creative area.
 | 
				
			||||||
 | 
					------------------------------------------------------------------------
 | 
				
			||||||
 | 
					local function store_privs(player)
 | 
				
			||||||
 | 
						local status = check_cr_area(player) 
 | 
				
			||||||
 | 
						if status == false then
 | 
				
			||||||
 | 
							pname = player:get_player_name()
 | 
				
			||||||
 | 
							cr_areas[pname] = minetest.get_player_privs(pname)
 | 
				
			||||||
 | 
							storage:set_string("cr_areas", minetest.serialize(cr_areas))
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_on_newplayer(function(player)
 | 
				
			||||||
 | 
						store_privs(player)
 | 
				
			||||||
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_on_leaveplayer(function(player)
 | 
				
			||||||
 | 
						local status = check_cr_area(player)
 | 
				
			||||||
 | 
						if status == false then
 | 
				
			||||||
 | 
							pname = player:get_player_name()
 | 
				
			||||||
 | 
							cr_areas[pname] = nil
 | 
				
			||||||
 | 
							storage:set_string("cr_areas", minetest.serialize(cr_areas))
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end)
 | 
				
			||||||
-------------------------------------------------
 | 
					-------------------------------------------------
 | 
				
			||||||
-- Check location and Grant/revoke creative priv
 | 
					-- Check location and Grant/revoke indicated privs
 | 
				
			||||||
-------------------------------------------------
 | 
					-------------------------------------------------
 | 
				
			||||||
local timer = 0
 | 
					local timer = 0
 | 
				
			||||||
minetest.register_globalstep(function(dtime)
 | 
					minetest.register_globalstep(function(dtime)
 | 
				
			||||||
@@ -105,8 +186,30 @@ minetest.register_globalstep(function(dtime)
 | 
				
			|||||||
			local privs = minetest.get_player_privs(pname)	
 | 
								local privs = minetest.get_player_privs(pname)	
 | 
				
			||||||
			local inv = minetest.get_inventory({type="player", name=pname})
 | 
								local inv = minetest.get_inventory({type="player", name=pname})
 | 
				
			||||||
			if minetest.get_player_privs(pname).privs == nil then --Players with the "privs" priv will not have privileges effected.
 | 
								if minetest.get_player_privs(pname).privs == nil then --Players with the "privs" priv will not have privileges effected.
 | 
				
			||||||
				if 	check_cr_area(player) == true then
 | 
									local status, id = check_cr_area(player) 					
 | 
				
			||||||
					if not minetest.check_player_privs(pname, {creative = true}) then
 | 
									if status == true then
 | 
				
			||||||
 | 
										if not cr_areas[pname] then
 | 
				
			||||||
 | 
											store_privs(player)
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
										for k, v in pairs(cr_areas[id]["privs"]) do
 | 
				
			||||||
 | 
											if v == true then
 | 
				
			||||||
 | 
											privs[k] = true
 | 
				
			||||||
 | 
											end
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
										minetest.set_player_privs(pname, privs)
 | 
				
			||||||
 | 
										-- Reload inventory formspec
 | 
				
			||||||
 | 
										if not minetest.get_modpath("unified_inventory") then
 | 
				
			||||||
 | 
											local context = {page = sfinv.get_homepage_name(player)}--minetest.get_inventory{{type="detached", name="creative_"..pname}}--{page = sfinv.pages["creative_"..pname]}						
 | 
				
			||||||
 | 
											sfinv.set_player_inventory_formspec(player, context)
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
										-- Store inventory for restoration after leaving creative area
 | 
				
			||||||
 | 
										local invlist = inv:get_list("main")
 | 
				
			||||||
 | 
											inv:set_list("saved", invlist)
 | 
				
			||||||
 | 
											local list = ""
 | 
				
			||||||
 | 
											for i = 1, #invlist do
 | 
				
			||||||
 | 
												list = list .." "..dump(invlist[i]) 
 | 
				
			||||||
 | 
											end	
 | 
				
			||||||
 | 
										--[[]if not minetest.check_player_privs(pname, {creative = true}) then
 | 
				
			||||||
						privs.creative = true
 | 
											privs.creative = true
 | 
				
			||||||
						minetest.set_player_privs(pname, privs)
 | 
											minetest.set_player_privs(pname, privs)
 | 
				
			||||||
						if not minetest.get_modpath("unified_inventory") then
 | 
											if not minetest.get_modpath("unified_inventory") then
 | 
				
			||||||
@@ -123,9 +226,14 @@ minetest.register_globalstep(function(dtime)
 | 
				
			|||||||
						--write_file(inv_file,)
 | 
											--write_file(inv_file,)
 | 
				
			||||||
						minetest.chat_send_player(pname, "You are in creative area.")
 | 
											minetest.chat_send_player(pname, "You are in creative area.")
 | 
				
			||||||
						
 | 
											
 | 
				
			||||||
 | 
										end]]--
 | 
				
			||||||
 | 
									elseif status == false then
 | 
				
			||||||
 | 
										if cr_areas[pname] then
 | 
				
			||||||
 | 
											minetest.set_player_privs(pname, cr_areas[pname])
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
				else
 | 
									end
 | 
				
			||||||
					if minetest.check_player_privs(pname, {creative=true}) then
 | 
											
 | 
				
			||||||
 | 
										--[[]	if minetest.check_player_privs(pname, {creative=true}) then
 | 
				
			||||||
						privs.creative = nil
 | 
											privs.creative = nil
 | 
				
			||||||
						minetest.set_player_privs(pname, privs)
 | 
											minetest.set_player_privs(pname, privs)
 | 
				
			||||||
						local saved = inv:get_list("saved")
 | 
											local saved = inv:get_list("saved")
 | 
				
			||||||
@@ -138,10 +246,104 @@ minetest.register_globalstep(function(dtime)
 | 
				
			|||||||
						end
 | 
											end
 | 
				
			||||||
						--unified_inventory.get_formspec(player, page)
 | 
											--unified_inventory.get_formspec(player, page)
 | 
				
			||||||
						minetest.chat_send_player(pname, "You have left creative area.")
 | 
											minetest.chat_send_player(pname, "You have left creative area.")
 | 
				
			||||||
					end
 | 
					]]--					
 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		timer = 0
 | 
							timer = 0
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end)
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					----------------------------------
 | 
				
			||||||
 | 
					--Formspec for SVINV
 | 
				
			||||||
 | 
					----------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function set_switches(area_id)
 | 
				
			||||||
 | 
						local tbl = privtbl
 | 
				
			||||||
 | 
						local id = tostring(area_id)
 | 
				
			||||||
 | 
						local X, Y = 0.5, 5.5
 | 
				
			||||||
 | 
						local j = 1
 | 
				
			||||||
 | 
						local switches, state = "", ""
 | 
				
			||||||
 | 
						local function form(t)
 | 
				
			||||||
 | 
							local switches = ""
 | 
				
			||||||
 | 
							for k, v in pairs(tbl) do
 | 
				
			||||||
 | 
								local priv = k
 | 
				
			||||||
 | 
								if v == true then
 | 
				
			||||||
 | 
									state = "on"
 | 
				
			||||||
 | 
								else state = "off"
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								switches = switches .. "label["..tostring(X)..","..tostring(Y-0.5)..";"..priv.."]"
 | 
				
			||||||
 | 
							.."image_button["..tostring(X)..","..tostring(Y)..";0.8,0.5;switch_"..state..".png;"..priv..";]"
 | 
				
			||||||
 | 
								if X < 5.75 then
 | 
				
			||||||
 | 
								X=X+2
 | 
				
			||||||
 | 
								else X = 0.5
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								if j == 4 or j == 8 then
 | 
				
			||||||
 | 
									Y = Y + 1.25
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								if j < 12 then
 | 
				
			||||||
 | 
									j = j+1
 | 
				
			||||||
 | 
								elseif j >= 12 then break 
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							return switches
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						if id ~= 0 then
 | 
				
			||||||
 | 
							if cr_areas[id] then
 | 
				
			||||||
 | 
								tbl = cr_areas[id]["privs"]
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local switches = form(tbl)
 | 
				
			||||||
 | 
						return switches
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function toggle_switch(ID, priv)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sfinv.register_page("creative_areas:areas", {
 | 
				
			||||||
 | 
						title = "Creative Areas",
 | 
				
			||||||
 | 
						is_in_nav = function(self, player, context)
 | 
				
			||||||
 | 
							local privs = minetest.get_player_privs(player:get_player_name())
 | 
				
			||||||
 | 
							return privs.privs
 | 
				
			||||||
 | 
						end,
 | 
				
			||||||
 | 
						get = function(self, player, context)
 | 
				
			||||||
 | 
							local status, areaid = check_cr_area(player)
 | 
				
			||||||
 | 
							local privs = privtbl
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							local formspec = {
 | 
				
			||||||
 | 
								"label[1.75,1;Add or Remove a Creative Area]"
 | 
				
			||||||
 | 
								.."label[0.5,2;Area ID]"
 | 
				
			||||||
 | 
								.."field[2.5,2;1,1;areaid;;"..areaid.."]"
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								.."label[0.5,4;Check privs to be granted in this area]"
 | 
				
			||||||
 | 
								..set_switches(areaid)
 | 
				
			||||||
 | 
								.."button[3.5,1.75;2,1;mkcrarea;Add]"
 | 
				
			||||||
 | 
								.."button[5.5,1.75;2,1;rmcrarea;Remove]"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return sfinv.make_formspec(player, context, table.concat(formspec, ""), false)
 | 
				
			||||||
 | 
						end,
 | 
				
			||||||
 | 
						on_player_receive_fields = function(self, player, formname, fields)
 | 
				
			||||||
 | 
							local tbl = {}
 | 
				
			||||||
 | 
							if fields.rmcrarea and fields.areaid then 
 | 
				
			||||||
 | 
								return rm_cr_area(player:get_player_name(), fields.areaid)
 | 
				
			||||||
 | 
							elseif fields.mkcrarea and fields.areaid then
 | 
				
			||||||
 | 
								return make_cr_area(player:get_player_name(), fields.areaid)
 | 
				
			||||||
 | 
							elseif fields.areaid then
 | 
				
			||||||
 | 
								local id = fields.areaid
 | 
				
			||||||
 | 
								if cr_areas[id] ~= nil then  
 | 
				
			||||||
 | 
									for k, v in pairs(cr_areas[id]["privs"]) do
 | 
				
			||||||
 | 
										if fields[k] then
 | 
				
			||||||
 | 
											minetest.chat_send_all(k)
 | 
				
			||||||
 | 
											if v == false then
 | 
				
			||||||
 | 
												cr_areas[id]["privs"][k] = true
 | 
				
			||||||
 | 
											elseif v == true then 
 | 
				
			||||||
 | 
												cr_areas[id]["privs"][k] = false
 | 
				
			||||||
 | 
											end
 | 
				
			||||||
 | 
											storage:set_string("cr_areas", minetest.serialize(cr_areas))
 | 
				
			||||||
 | 
											sfinv.set_player_inventory_formspec(player)
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								creative_areas/textures/reload.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								creative_areas/textures/reload.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 278 B  | 
							
								
								
									
										
											BIN
										
									
								
								creative_areas/textures/switch_off.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								creative_areas/textures/switch_off.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 270 B  | 
							
								
								
									
										
											BIN
										
									
								
								creative_areas/textures/switch_on.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								creative_areas/textures/switch_on.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 278 B  | 
		Reference in New Issue
	
	Block a user