tardis/functions.lua

89 lines
2.6 KiB
Lua

local modname = minetest.get_current_modname()
local modpath = minetest.get_modpath(modname)
local worldpath = minetest.get_worldpath()
function tardis.swap_node (pos, name)
local meta = minetest.get_meta (pos)
local meta_old = meta:to_table()
minetest.set_node (pos, name)
local meta = minetest.get_meta (pos)
meta:from_table (meta_old)
end
function tardis:spawn_interior (pos, owner)
local place_pos = {
x = tardis.count * 12 ,
y = 30000 ,
z = 0 ,
}
tardis.count = tardis.count + 1
local interior_doors_pos = {
x = (place_pos ["x"] + 5) ,
y = (place_pos ["y"] + 1) ,
z = (place_pos ["z"] + 1) ,
}
local demat_lever_pos = {
x = (place_pos ["x"] + 4) ,
y = (place_pos ["y"] + 2) ,
z = (place_pos ["z"] + 7) ,
}
local nav_pos = {
x = (place_pos ["x"] + 4) ,
y = (place_pos ["y"] + 2) ,
z = (place_pos ["z"] + 8) ,
}
minetest.place_schematic (place_pos, modpath .. "/schematics/tardis_interior.mts")
tardis.tardises [owner] = {}
tardis.tardises [owner]["exterior"] = pos
tardis.tardises [owner]["interior"] = interior_doors_pos
tardis.tardises [owner]["in_vortex"] = false
local demat_meta = minetest.get_meta (demat_lever_pos)
demat_meta:set_string ("owner", owner)
local nav_meta = minetest.get_meta (nav_pos)
nav_meta:set_string ("owner", owner)
local interior_doors_meta = minetest.get_meta (interior_doors_pos)
interior_doors_meta:set_string ("owner", owner)
minetest.log("info", minetest.pos_to_string (tardis.tardises [owner]["interior"] ))
local file = io.open (worldpath .. "/tardis.tardises", "w+")
file:write ( minetest.serialize (tardis.tardises) )
file:close()
end
function tardis.set_nav (player, owner)
local player_name = player:get_player_name()
if player_name ~= owner then minetest.chat_send_player(player_name, "You don't own that TARDIS!"); return end
if tardis.tardises[owner]["in_vortex"] == false then minetest.chat_send_player(player_name, "You must dematerialize the TARDIS first!"); return end
minetest.show_formspec (player_name, "tardis:remat_form",
"size[7,3]" ..
"field[1,1.5;2,1;x;X;]" ..
"field[3,1.5;2,1;y;Y;]" ..
"field[5,1.5;2,1;z;Z;]" ..
"button_exit[1,2;2,1;exit;Go!]")
minetest.register_on_player_receive_fields (function (player, formname, fields)
if formname ~= "tardis:remat_form" then
return false
end
local coords = {x = tonumber(fields.x), y = tonumber(fields.y), z = tonumber(fields.z)}
if (coords == nil or coords.x == nil or coords.y == nil or coords.z == nil) then
minetest.chat_send_player (player_name, "Please enter valid coordinates.")
else
tardis.tardises [owner]["destination"] = coords
return true
end
end)
end