From a937770b46a1f3655854405196b8bd1f0e50b3a0 Mon Sep 17 00:00:00 2001 From: Tre Date: Thu, 13 Jul 2017 15:05:30 -0500 Subject: [PATCH] make sia members much more secure so you can have secret agents --- api.lua | 10 +++++--- init.lua | 75 +++++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 73 insertions(+), 12 deletions(-) diff --git a/api.lua b/api.lua index c05c924..9312f2b 100644 --- a/api.lua +++ b/api.lua @@ -52,6 +52,7 @@ sia_chest.formspec = function(pos,page) .."button[13,6.5;2,0.5;delete;Delete]" .."list[current_name;"..page..";0,1;15,5;]" .."list[current_player;main;0,7;8,4;]" + .."listring[]" end sia_chest.get_pages = function(meta) @@ -141,6 +142,9 @@ sia_chest.can_dig = function(pos,player) return false end end + if sia.is_member(player:get_player_name())==false then + return false + end return true end @@ -179,10 +183,10 @@ end sia_chest.has_locked_chest_privilege = function(meta, player) local name = player:get_player_name() - if minetest.check_player_privs(player, "SIA_member") then - return false + if sia.is_member(player:get_player_name()) then + return true end - return true + return false end sia_chest.on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) diff --git a/init.lua b/init.lua index 32793b9..2820fa8 100644 --- a/init.lua +++ b/init.lua @@ -1,6 +1,69 @@ -local sia = {} +sia = {} screwdriver = screwdriver or {} +minetest.register_privilege("SIA_admin", { + description = "Is a member of the Server Intelegence Agency", + give_to_singleplayer = false +}) + +local mod_storage = minetest.get_mod_storage() + +function sia.is_member(name) + local str = mod_storage:get_string("SIA_members") + for x in string.gmatch(str, '([^,]+)') do + if x==name then + return true + end + end + return false +end + +minetest.register_chatcommand("listmembers", { + description = "Lists the Sia members", + privs = {SIA_admin = true}, + func = function(name, param) + local str = mod_storage:get_string("SIA_members") + for x in string.gmatch(str, '([^,]+)') do + minetest.chat_send_player(name,x) + end + end +}) +minetest.register_chatcommand("addmember", { + description = "", + param = "", + privs = {SIA_admin = true}, + func = function(name, param) + if mod_storage:get_string("SIA_members")=="" then + mod_storage:set_string("SIA_members",param) + else + if not sia.is_member(param) then + mod_storage:set_string("SIA_members",mod_storage:get_string("SIA_members")..","..param) + end + end + end +}) + +minetest.register_chatcommand("removemember", { + description = "", + param = "", + privs = {SIA_admin = true}, + func = function(name, param) + local str = mod_storage:get_string("SIA_members") + local nstr = "" + for x in string.gmatch(str, '([^,]+)') do + if x==param then + else + if nstr == "" then + nstr = nstr..x + else + nstr = nstr..","..x + end + end + end + mod_storage:set_string("SIA_members",nstr) + end +}) + local cbox = { type = "fixed", fixed = { -6/16, -8/16, -8/16, 6/16, 3/16, 8/16 } @@ -8,10 +71,6 @@ local cbox = { dofile(minetest.get_modpath("sia").."/api.lua") -minetest.register_privilege("SIA_member", { - description = "Is a member of the Server Intelegence Agency", - give_to_singleplayer = false -}) minetest.register_alias("SIA_Mailbox","sia:mailbox") @@ -41,9 +100,7 @@ minetest.register_node("sia:mailbox", { on_rightclick = function(pos, node, clicker, itemstack) local meta = minetest.get_meta(pos) local player = clicker:get_player_name() - if minetest.check_player_privs(player, "SIA_member") or - minetest.check_player_privs(player, "protection_bypass") and - clicker:get_player_control().aux1 then + if sia.is_member(player) then minetest.show_formspec( clicker:get_player_name(), "default:chest_locked", @@ -60,7 +117,7 @@ minetest.register_node("sia:mailbox", { local meta = minetest.get_meta(pos); local name = player and player:get_player_name() local inv = meta:get_inventory() - return minetest.check_player_privs(player, "SIA_member") and inv:is_empty("main") + return sia.is_member(player:get_player_name()) and inv:is_empty("main") end, on_metadata_inventory_put = function(pos, listname, index, stack, player) local meta = minetest.get_meta(pos)