Change default channel, accept table commands (#9)
* Change default channel, accept table commands * Fix digiline command parsing and signal
This commit is contained in:
parent
518f361868
commit
997637783e
44
teleport.lua
44
teleport.lua
@ -171,23 +171,26 @@ local function is_protected_beacon(pos, player)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- digilines optional support
|
-- digilines optional support
|
||||||
|
local DEFAULT_CHANNEL = "telemosaic"
|
||||||
|
|
||||||
local telemosaic_digiline_switching
|
local telemosaic_digiline_switching
|
||||||
local telemosaic_digiline_base
|
local telemosaic_digiline_base
|
||||||
|
|
||||||
local on_digiline_receive = function(pos, _, channel, msg)
|
local on_digiline_receive = function(pos, _, channel, msg)
|
||||||
local setchan = minetest.get_meta(pos):get_string("channel")
|
local meta = minetest.get_meta(pos)
|
||||||
|
local setchan = meta:contains("channel") and meta:get_string("channel") or DEFAULT_CHANNEL
|
||||||
if channel ~= setchan then
|
if channel ~= setchan then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
if type(msg) ~= "string" then
|
if type(msg) == "string" then
|
||||||
|
local a = string.split(msg, " ")
|
||||||
|
msg = { cmd = a[1], channel = a[2] }
|
||||||
|
elseif type(msg) ~= "table" then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
local cmd = string.split(msg, " ")
|
if msg.cmd == "setchannel" then
|
||||||
if cmd[1] == "channel" then
|
if type(msg.channel) == "string" then
|
||||||
if #cmd > 1 then
|
meta:set_string("channel", msg.channel)
|
||||||
minetest.get_meta(pos):set_string("channel", cmd[2])
|
|
||||||
else
|
|
||||||
minetest.get_meta(pos):set_string("channel", "")
|
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
@ -206,9 +209,10 @@ if minetest.get_modpath("digilines") then
|
|||||||
effector = {
|
effector = {
|
||||||
action = function(pos, _, channel, msg)
|
action = function(pos, _, channel, msg)
|
||||||
if on_digiline_receive(pos, _, channel, msg) then
|
if on_digiline_receive(pos, _, channel, msg) then
|
||||||
if msg == "enable" then
|
local cmd = (type(msg) == "table") and msg.cmd or msg
|
||||||
|
if cmd == "enable" then
|
||||||
swap_beacon(pos, "")
|
swap_beacon(pos, "")
|
||||||
elseif msg == "disable" then
|
elseif cmd == "disable" then
|
||||||
swap_beacon(pos, "_disabled")
|
swap_beacon(pos, "_disabled")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -230,7 +234,9 @@ function do_teleport(pos, player)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local dest_hash = minetest.get_meta(pos):get_string('telemosaic:dest')
|
local meta = minetest.get_meta(pos)
|
||||||
|
|
||||||
|
local dest_hash = meta:get_string('telemosaic:dest')
|
||||||
if dest_hash ~= nil and dest_hash ~= '' then
|
if dest_hash ~= nil and dest_hash ~= '' then
|
||||||
local dest = unhash_pos(dest_hash)
|
local dest = unhash_pos(dest_hash)
|
||||||
|
|
||||||
@ -244,14 +250,19 @@ function do_teleport(pos, player)
|
|||||||
--print("Dist :" .. (dist-0.5) .. " to " .. (C.beacon_range + extended))
|
--print("Dist :" .. (dist-0.5) .. " to " .. (C.beacon_range + extended))
|
||||||
|
|
||||||
if dest_ok and dist - 0.5 <= C.beacon_range + extended and telemosaic.travel_allowed(player, pos, dest) then
|
if dest_ok and dist - 0.5 <= C.beacon_range + extended and telemosaic.travel_allowed(player, pos, dest) then
|
||||||
dest.y = dest.y + 0.5
|
|
||||||
|
|
||||||
if telemosaic_digiline_switching ~= nil then
|
if telemosaic_digiline_switching ~= nil then
|
||||||
local chan = minetest.get_meta(pos):get_string("channel")
|
local chan = meta:contains("channel") and meta:get_string("channel") or DEFAULT_CHANNEL
|
||||||
digilines.receptor_send(pos, digilines.rules.default, chan,
|
digilines.receptor_send(pos, digilines.rules.default, chan, {
|
||||||
"telemosaic "..player:get_player_name().." "..hash_pos(pos))
|
player = player:get_player_name(),
|
||||||
|
hashpos = { origin = hash_pos(pos), target = dest_hash },
|
||||||
|
origin = pos,
|
||||||
|
target = dest,
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
dest.y = dest.y + 0.5
|
||||||
|
|
||||||
minetest.sound_play( {name="telemosaic_set", gain=1}, {pos=pos, max_hear_distance=30})
|
minetest.sound_play( {name="telemosaic_set", gain=1}, {pos=pos, max_hear_distance=30})
|
||||||
minetest.add_particlespawner({
|
minetest.add_particlespawner({
|
||||||
amount = 100,
|
amount = 100,
|
||||||
@ -416,6 +427,9 @@ for _,is_protected in pairs({ true, false }) do
|
|||||||
paramtype = 'light',
|
paramtype = 'light',
|
||||||
groups = { cracky = 2 },
|
groups = { cracky = 2 },
|
||||||
on_rightclick = beacon_rightclick,
|
on_rightclick = beacon_rightclick,
|
||||||
|
on_construct = function(pos)
|
||||||
|
minetest.get_meta(pos):set_string("channel", DEFAULT_CHANNEL)
|
||||||
|
end,
|
||||||
digiline = telemosaic_digiline_base
|
digiline = telemosaic_digiline_base
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user