nalc/nalc_mesecons/init.lua

61 lines
1.8 KiB
Lua

-- Redéfinition de la propriété digiline pour le player_detector
local GET_COMMAND = "GET"
local function object_detector_make_formspec(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", "size[9,2.5]" ..
"field[0.3, 0;9,2;scanname;Name of player to scan for (empty for any):;${scanname}]"..
"field[0.3,1.5;4,2;digiline_channel;Digiline Channel (optional):;${digiline_channel}]"..
"button_exit[7,0.75;2,3;;Save]")
end
local object_detector_digiline = {
receptor = {},
effector = {
action = function(pos, node, channel, msg)
local meta = minetest.get_meta(pos)
if channel == meta:get_string("digiline_channel") then
if msg == GET_COMMAND then
local objs = minetest.get_objects_inside_radius(pos, mesecon.setting("detector_radius", 6))
-- abort if no scan results were found
if next(objs) == nil then return false end
local scanname = meta:get_string("scanname")
local scan_for = {}
for _, str in pairs(string.split(scanname:gsub(" ", ""), ",")) do
scan_for[str] = true
end
local every_player = scanname == ""
for _, obj in pairs(objs) do
-- "" is returned if it is not a player; "" ~= nil; so only handle objects with foundname ~= ""
local foundname = obj:get_player_name()
if foundname ~= "" then
if every_player or scan_for[foundname] then
digilines.receptor_send(pos, digilines.rules.default, channel, foundname)
break;
end
end
end
else
meta:set_string("scanname", msg)
object_detector_make_formspec(pos)
end
end
end
},
}
minetest.override_item(
"mesecons_detector:object_detector_off",
{
digiline = object_detector_digiline
})
minetest.override_item(
"mesecons_detector:object_detector_on",
{
digiline = object_detector_digiline
})
minetest.log("action", "[nalc_mesecons] loaded.")