From 4dbc96eafac9da4f04a36ec2dd7cfaaa1a80b8fe Mon Sep 17 00:00:00 2001 From: upsilon Date: Thu, 9 Apr 2020 17:02:31 +0200 Subject: [PATCH] New digiline interface for the adjustable player detector The name of the detected player can now be requested by sending {command = "get"} to the detector. The detection radius can be changed by sending {radius = value}. --- .../init.lua | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/moremesecons_adjustable_player_detector/init.lua b/moremesecons_adjustable_player_detector/init.lua index d704098..4cab0b7 100644 --- a/moremesecons_adjustable_player_detector/init.lua +++ b/moremesecons_adjustable_player_detector/init.lua @@ -37,18 +37,18 @@ local object_detector_scan = function (pos) local scan_all = scanname == "" local scan_names = scanname:split(',') local radius = meta:get_int("radius") - if radius == 0 then + if radius <= 0 then radius = 6 end for _,obj in pairs(minetest.get_objects_inside_radius(pos, radius)) do local isname = obj:get_player_name() -- "" is returned if it is not a player; "" ~= nil! if isname ~= "" then if scan_all then - return true + return true, isname end for _, name in ipairs(scan_names) do if isname == name then - return true + return true, isname end end end @@ -65,12 +65,32 @@ local object_detector_digiline = { if channel ~= active_channel then return end - meta:set_string("scanname", msg) - if meta:get_string("formspec") ~= "" then + if type(msg) == "string" then + meta:set_string("scanname", msg) make_formspec(meta) + elseif type(msg) == "table" then + if msg.radius then + local r = tonumber(msg.radius) + if r then + meta:set_int("radius", tonumber(msg.radius)) + make_formspec(meta) + end + end + if msg.scanname then + meta:set_string("scanname", msg.scanname) + make_formspec(meta) + end + if msg.command and msg.command == "get" then + local found, name = object_detector_scan(pos) + if not found then + name = "" + end + digiline:receptor_send(pos, digiline.rules.default, channel, name) + end end end, - } + }, + receptor = {} } minetest.register_node("moremesecons_adjustable_player_detector:player_detector_off", {