Files
locator/beacon.lua
2018-05-29 15:30:37 +02:00

115 lines
2.6 KiB
Lua

local update_formspec = function(meta)
local inv = meta:get_inventory()
local active = meta:get_int("active") == 1
local state = "Inactive"
if active then
state = "Active"
end
local name = meta:get_string("name")
meta:set_string("infotext", "Locator: " .. name .. " (" .. state .. ")")
meta:set_string("formspec", "size[8,3;]" ..
-- col 1
"field[0,1.5;4,1;name;Name;" .. name .. "]" ..
"button_exit[4,1;4,1;save;Save]" ..
"button_exit[0,2;8,1;toggle;Toggle]" ..
"")
end
-- base beacon
minetest.register_node("locator:beacon_base", {
description = "Locator beacon base",
tiles = {
"locator_beacon_base.png",
"locator_beacon_base.png",
"locator_beacon_base.png",
"locator_beacon_base.png",
"locator_beacon_base.png",
"locator_beacon_base.png",
},
groups = {cracky=3,oddly_breakable_by_hand=3},
sounds = default.node_sound_glass_defaults()
})
-- level/range register beacon
local register_beacon = function(level, range)
minetest.register_node("locator:beacon_" .. level, {
description = "Locator beacon, level: " .. level .. ", range: " .. range,
tiles = {
"locator_beacon_level" .. level .. ".png",
"locator_beacon_level" .. level .. ".png",
"locator_beacon_level" .. level .. ".png",
"locator_beacon_level" .. level .. ".png",
"locator_beacon_level" .. level .. ".png",
"locator_beacon_level" .. level .. ".png"
},
groups = {cracky=3,oddly_breakable_by_hand=3},
sounds = default.node_sound_glass_defaults(),
after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos)
meta:set_string("owner", placer:get_player_name() or "")
end,
on_dig = function(pos)
locator.remove_beacon(pos)
return true
end,
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("name", "<unconfigured>")
meta:set_int("range", range)
meta:set_int("active", 0)
update_formspec(meta)
end,
on_receive_fields = function(pos, formname, fields, sender)
local meta = minetest.get_meta(pos)
local playername = sender:get_player_name()
if playername == meta:get_string("owner") then
-- owner
if fields.save then
local name = fields.name
meta:set_string("name", fields.name)
end
if fields.toggle then
if meta:get_int("active") == 1 then
meta:set_int("active", 0)
else
meta:set_int("active", 1)
end
end
else
-- non-owner
end
update_formspec(meta)
locator.update_beacon(pos, meta)
end
})
end
register_beacon(1, 500) -- short range
register_beacon(2, 5000) -- mid range
register_beacon(3, 30000) -- long range