mirror of
https://github.com/minetest-mods/MoreMesecons.git
synced 2025-01-01 10:17:33 +01:00
Adjustable player detector and entity detector: make the user able to use a coma-separated list for the names
This commit is contained in:
parent
cac0ca5ba5
commit
ffe8d5f8c0
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
local function make_formspec(meta)
|
local function make_formspec(meta)
|
||||||
meta:set_string("formspec", "size[9,5]" ..
|
meta:set_string("formspec", "size[9,5]" ..
|
||||||
"field[0.3, 0;9,2;scanname;Name of player to scan for (empty for any):;${scanname}]"..
|
"field[0.3, 0;9,2;scanname;Coma-separated list of the names of players to scan for (empty for any):;${scanname}]"..
|
||||||
"field[0.3,1.5;4,2;digiline_channel;Digiline Channel (optional):;${digiline_channel}]"..
|
"field[0.3,1.5;4,2;digiline_channel;Digiline Channel (optional):;${digiline_channel}]"..
|
||||||
"field[0.3,3;2,2;radius;Detection radius:;${radius}]"..
|
"field[0.3,3;2,2;radius;Detection radius:;${radius}]"..
|
||||||
"button_exit[3.5,3.5;2,3;;Save]")
|
"button_exit[3.5,3.5;2,3;;Save]")
|
||||||
@ -35,16 +35,23 @@ local object_detector_scan = function (pos)
|
|||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local scanname = meta:get_string("scanname")
|
local scanname = meta:get_string("scanname")
|
||||||
local scan_all = scanname == ""
|
local scan_all = scanname == ""
|
||||||
|
local scan_names = scanname:split(',')
|
||||||
local radius = meta:get_int("radius")
|
local radius = meta:get_int("radius")
|
||||||
if radius == 0 then
|
if radius == 0 then
|
||||||
radius = 6
|
radius = 6
|
||||||
end
|
end
|
||||||
for _,obj in pairs(minetest.get_objects_inside_radius(pos, radius)) do
|
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!
|
local isname = obj:get_player_name() -- "" is returned if it is not a player; "" ~= nil!
|
||||||
if isname ~= ""
|
if isname ~= "" then
|
||||||
and (scan_all or isname == scanname) then -- player with scanname found or not scanname specified
|
if scan_all then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
for _, name in ipairs(scan_names) do
|
||||||
|
if isname == name then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
local function make_formspec(meta)
|
local function make_formspec(meta)
|
||||||
meta:set_string("formspec", "size[9,5]" ..
|
meta:set_string("formspec", "size[9,5]" ..
|
||||||
"field[0.3, 0;9,2;scanname;Name (itemstring) of entity to scan for (empty for any):;${scanname}]"..
|
"field[0.3, 0;9,2;scanname;Coma-separated list of the names (itemstring) of entities to scan for (empty for any):;${scanname}]"..
|
||||||
"field[0.3,1.5;4,2;digiline_channel;Digiline Channel (optional):;${digiline_channel}]"..
|
"field[0.3,1.5;4,2;digiline_channel;Digiline Channel (optional):;${digiline_channel}]"..
|
||||||
"field[0.3,3;2,2;radius;Detection radius:;${radius}]"..
|
"field[0.3,3;2,2;radius;Detection radius:;${radius}]"..
|
||||||
"button_exit[3.5,3.5;2,3;;Save]")
|
"button_exit[3.5,3.5;2,3;;Save]")
|
||||||
@ -35,6 +35,7 @@ local object_detector_scan = function (pos)
|
|||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local scanname = meta:get_string("scanname")
|
local scanname = meta:get_string("scanname")
|
||||||
local scan_all = scanname == ""
|
local scan_all = scanname == ""
|
||||||
|
local scan_names = scanname:split(',')
|
||||||
local radius = meta:get_int("radius")
|
local radius = meta:get_int("radius")
|
||||||
if radius == 0 then
|
if radius == 0 then
|
||||||
radius = 6
|
radius = 6
|
||||||
@ -43,10 +44,16 @@ local object_detector_scan = function (pos)
|
|||||||
if not obj:is_player() then
|
if not obj:is_player() then
|
||||||
local luaentity = obj:get_luaentity()
|
local luaentity = obj:get_luaentity()
|
||||||
local isname = luaentity.name
|
local isname = luaentity.name
|
||||||
if isname
|
if isname then
|
||||||
and (scan_all or isname == scanname or (isname == "__builtin:item" and luaentity.itemstring == scanname)) then -- entity with scanname found or not scanname specified
|
if scan_all then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
for _, name in ipairs(scan_names) do
|
||||||
|
if isname == name or (isname == "__builtin:item" and luaentity.itemstring == name) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
|
Loading…
Reference in New Issue
Block a user