diff --git a/moremesecons_commandblock/init.lua b/moremesecons_commandblock/init.lua index 3710567..9885ae0 100644 --- a/moremesecons_commandblock/init.lua +++ b/moremesecons_commandblock/init.lua @@ -1,7 +1,9 @@ -local accepted_commands = {"tell"} -- Authorized commands. Any to accept all. -local NEAREST_MAX_DISTANCE = 8 - local function initialize_data(meta) + local NEAREST_MAX_DISTANCE = tonumber(minetest.setting_get("moremesecons_commandblock.nearest_max_distance")) or 8 + if NEAREST_MAX_DISTANCE <= 0 then + NEAREST_MAX_DISTANCE = 1 + end + local commands = meta:get_string("commands") meta:set_string("formspec", "invsize[9,5;]" .. @@ -68,6 +70,23 @@ local function resolve_commands(commands, pos) end local function commandblock_action_on(pos, node) + local NEAREST_MAX_DISTANCE = tonumber(minetest.setting_get("moremesecons_commandblock.nearest_max_distance")) or 8 + if NEAREST_MAX_DISTANCE <= 0 then + NEAREST_MAX_DISTANCE = 1 + end + + local accepted_commands = {} + do + local commands_str = minetest.setting_get("moremesecons_commandblock.authorized_commands") + if commands_str then + for command in string.gmatch(commands_str, "([^ ]+)") do + accepted_commands[command] = true + end + else + accepted_commands = {tell = true} + end + end + if node.name ~= "moremesecons_commandblock:commandblock_off" then return end @@ -93,14 +112,7 @@ local function commandblock_action_on(pos, node) param = command:sub(pos + 1) end local cmddef = minetest.chatcommands[cmd] - local is_an_authorized_command = false - for i = 1, #accepted_commands do - if cmd == accepted_commands[i] then - is_an_authorized_command = true - break - end - end - if not is_an_authorized_command and #accepted_commands ~= 0 then + if not accepted_commands[cmd] and next(accepted_commands) then minetest.chat_send_player(owner, "You can not execute the command "..cmd.." with a craftable command block ! This event will be reported.") minetest.log("action", "Player "..owner.." tryed to execute an unauthorized command with a craftable command block.") return diff --git a/moremesecons_jammer/init.lua b/moremesecons_jammer/init.lua index 26fb003..67e8e4c 100644 --- a/moremesecons_jammer/init.lua +++ b/moremesecons_jammer/init.lua @@ -1,5 +1,3 @@ -local JAMMER_MAX_DISTANCE = 10 - -- see wireless jammer local get = vector.get_data_from_pos local set = vector.set_data_to_pos @@ -18,6 +16,11 @@ local function remove_jammer(pos) end local function is_jammed(pos) + local JAMMER_MAX_DISTANCE = tonumber(minetest.setting_get(moresecons_jammer.max_distance)) or 10 + if JAMMER_MAX_DISTANCE <= 0 then + JAMMER_MAX_DISTANCE = 1 + end + local pz,py,px = vector.unpack(pos) for z,yxs in pairs(jammers) do if math.abs(pz-z) <= JAMMER_MAX_DISTANCE then diff --git a/moremesecons_playerkiller/init.lua b/moremesecons_playerkiller/init.lua index cc340ad..45bbfaf 100644 --- a/moremesecons_playerkiller/init.lua +++ b/moremesecons_playerkiller/init.lua @@ -1,5 +1,8 @@ local kill_nearest_player = function(pos) - local MAX_DISTANCE = 8 -- Use this number to set maximal distance to kill + local MAX_DISTANCE = tonumber(minetest.setting_get("moremesecons_playerkiller.max_distance")) or 8 -- Use this number to set maximal distance to kill + if MAX_DISTANCE <= 0 then + MAX_DISTANCE = 8 + end -- Search the nearest player local nearest @@ -22,7 +25,7 @@ local kill_nearest_player = function(pos) -- maybe some mod placed it return end - + if owner == nearest:get_player_name() then -- don't kill the owner ! return diff --git a/moremesecons_sayer/init.lua b/moremesecons_sayer/init.lua index d6995b0..c286ae8 100644 --- a/moremesecons_sayer/init.lua +++ b/moremesecons_sayer/init.lua @@ -1,5 +1,7 @@ -local MAX_DISTANCE = 8 -local use_speech_dispatcher = true +local use_speech_dispatcher = minetest.setting_getbool("moremesecons_sayer.use_speech_dispatcher") +if use_speech_dispatcher == nil then + use_speech_dispatcher = true +end local popen, execute = io.popen, os.execute if use_speech_dispatcher then @@ -34,8 +36,14 @@ and popen("if hash spd-say 2>/dev/null; then printf yes; fi"):read("*all") == "y if language ~= "en" then tab[3] = "-l "..language end - MAX_DISTANCE = MAX_DISTANCE^2 + function sayer_activate(pos) + local MAX_DISTANCE = minetest.setting_get("moremesecons_sayer.max_distance") or 8 + if MAX_DISTANCE <= 0 then + MAX_DISTANCE = 1 + end + MAX_DISTANCE = MAX_DISTANCE^2 + local text = minetest.get_meta(pos):get_string("text") if text == "" then -- nothing to say @@ -69,6 +77,11 @@ and popen("if hash spd-say 2>/dev/null; then printf yes; fi"):read("*all") == "y end else function sayer_activate(pos) + local MAX_DISTANCE = minetest.setting_get("moremesecons_sayer.max_distance") or 8 + if MAX_DISTANCE <= 0 then + MAX_DISTANCE = 1 + end + local tab = { "Sayer at pos", nil, diff --git a/moremesecons_teleporter/init.lua b/moremesecons_teleporter/init.lua index 84615d0..8878761 100644 --- a/moremesecons_teleporter/init.lua +++ b/moremesecons_teleporter/init.lua @@ -10,8 +10,14 @@ local register = function(pos) end local teleport_nearest = function(pos) - local MAX_TELEPORTATION_DISTANCE = 50 - local MAX_PLAYER_DISTANCE = 25 + local MAX_TELEPORTATION_DISTANCE = tonumber(minetest.setting_get("moremesecons_teleporter.max_t2t_distance")) or 50 + if MAX_TELEPORTATION_DISTANCE <= 0 then + MAX_TELEPORTATION_DISTANCE = 1 + end + local MAX_PLAYER_DISTANCE = tonumber(minetest.setting_get("moremesecons_teleporter.max_p2t_distance")) or 25 + if MAX_PLAYER_DISTANCE <= 0 then + MAX_PLAYER_DISTANCE = 1 + end -- Search the nearest player local nearest = nil diff --git a/moremesecons_wireless/init.lua b/moremesecons_wireless/init.lua index 5f4f37e..0e9a744 100644 --- a/moremesecons_wireless/init.lua +++ b/moremesecons_wireless/init.lua @@ -1,5 +1,3 @@ -local JAMMER_MAX_DISTANCE = 15 - local wireless = {} local wireless_rids = {} @@ -116,6 +114,11 @@ end -- looks big, but should work fast function is_jammed(pos) + local JAMMER_MAX_DISTANCE = tonumber(minetest.setting_get("moremesecons_wireless.jammer_max_distance")) or 15 + if JAMMER_MAX_DISTANCE <= 0 then + JAMMER_MAX_DISTANCE = 1 + end + local pz,py,px = vector.unpack(pos) for z,yxs in pairs(jammers) do if math.abs(pz-z) <= JAMMER_MAX_DISTANCE then diff --git a/settingtypes.txt b/settingtypes.txt new file mode 100644 index 0000000..2bdb3fe --- /dev/null +++ b/settingtypes.txt @@ -0,0 +1,51 @@ +[Craftable Commandblock] + +# Space-separated list of authorized commands +# Empty to authorize all +moremesecons_commandblock.authorized_commands (Authorized commands) string tell + +# Maximum distance of the @nearest player +# Any value less than or equal to 0 will be set to 1 +moremesecons_commandblock.nearest_max_distance (Nearest player maximum distance) float 8 + +[Signal Jammer] + +# Jammer action range +# Any value less than or equal to 0 will be set to 1 +moremesecons_jammer.max_distance (Jammer action range) float 10 + +[Player Killer] + +# Player Killer action range +# Any value less than or equal to 0 will be set to 1 +moremesecons_playerkiller.max_distance (Player Killer action range) float 8 + +[Sayer] + +# Whether to use the Speech Dispatcher +# It will work only if: +# * moremesecons_sayer is present in your trusted_mods setting +# * you are playing in singleplayer +# * the speech-dispatcher is installed on your system +# * you are using a POSIX-compliant system and a sh-compatible shell (such as bash, dash, zsh...) +moremesecons_sayer.use_speech_dispatcher (Use the Speech Dispatcher) bool true + +# Sayer range +# Any value less than or equal to 0 will be set to 1 +moremesecons_sayer.max_distance (Range) float 8 + +[Teleporter] + +# Maximum Teleporter To Teleporter distance +# Any value less than or equal to 0 will be set to 1 +moremesecons_teleporter.max_t2t_distance (Maximum Teleporter To Teleporter distance) float 50 + +# Maximum Player To Teleporter distance +# Any value less than or equal to 0 will be set to 1 +moremesecons_teleporter.max_p2t_distance (Maximum Player To Teleporter distance) float 25 + +[Wireless] + +# Wireless Jammer action range +# Any value less than or equal to 0 will be set to 1 +moremesecons_wireless.jammer_max_distance (Wireless Jammer action range) float 15