From e32e097e62750d03c51cf3e6672aa707e4c6b3d8 Mon Sep 17 00:00:00 2001 From: Benrob0329 Date: Wed, 29 Nov 2017 03:42:10 -0500 Subject: [PATCH] Change everything to use mod storage through functions. Also (re?) fixed problems with the TARDIS spawining into ungenerated chunks. Fixed collision boxes for TARDIS and interior doors. Made navigation formspec have default values based on current nav data. Made things use functions rather than raw tables, which allowed the use of default values to make the game more stable. Added .luacheckrc --- .luacheckrc | 14 ++ demat.lua | 350 +++++++++++++++++++++++++------------------------- functions.lua | 223 +++++++++++++++++++++++--------- init.lua | 57 +------- nodes.lua | 184 +++++++++++++------------- remat.lua | 288 ++++++++++++++++++++--------------------- 6 files changed, 585 insertions(+), 531 deletions(-) create mode 100644 .luacheckrc diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 0000000..6410b2b --- /dev/null +++ b/.luacheckrc @@ -0,0 +1,14 @@ +unused_args = false +allow_defined_top = true + +read_globals = { + "DIR_DELIM", + "minetest", "core", + "dump", + "vector", "nodeupdate", + "VoxelManip", "VoxelArea", + "PseudoRandom", "ItemStack", + "intllib", + "default", + table = { fields = { "copy", "getn" } } +} diff --git a/demat.lua b/demat.lua index 2e4508a..e7b9cd4 100644 --- a/demat.lua +++ b/demat.lua @@ -1,229 +1,231 @@ -function tardis.demat (owner, name) - if owner ~= name then return false, "You don't own that TARDIS!" end - local pos = tardis.tardises [owner]["exterior"] - - minetest.forceload_block(pos) - minetest.set_node (pos, {name = "tardis:tardis_demat"}) +function tardis.demat(name) + local pos = tardis.get_exterior(name) - tardis.tardises [owner]["in_vortex"] = true + if (minetest.forceload_block(pos)) then + minetest.set_node (pos, {name = "tardis:tardis_demat"}) - minetest.sound_play ("tardis_demat", { - pos = pos , - max_hear_distance = 100 , - gain = 10 , - }) - return true + tardis.set_vortex(true, name) + + minetest.sound_play ("tardis_demat", { + pos = pos, + max_hear_distance = 100, + gain = 10 , + }) + return true + else return false + + end end -minetest.register_node ("tardis:tardis_demat", { - tiles = {"tardis_exterior.png^[opacity:255"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , - light_source = 5 , +minetest.register_node("tardis:tardis_demat", { + tiles = {"tardis_exterior.png^[opacity:255"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + is_ground_content = true, + light_source = 5, - on_timer = function (pos) - minetest.set_node (pos, {name = "tardis:tardis_demat_1"}) - end , + on_timer = function(pos) + minetest.set_node(pos, {name = "tardis:tardis_demat_1"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(7) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(7) + end, }) -minetest.register_node ("tardis:tardis_demat_1", { - tiles = {"tardis_exterior.png^[opacity:225"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , - light_source = 10 , +minetest.register_node("tardis:tardis_demat_1", { + tiles = {"tardis_exterior.png^[opacity:225"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + is_ground_content = true, + light_source = 10, - on_timer = function (pos) - minetest.set_node (pos, {name = "tardis:tardis_demat_2"}) - end , + on_timer = function(pos) + minetest.set_node(pos, {name = "tardis:tardis_demat_2"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, }) -minetest.register_node ("tardis:tardis_demat_2", { - tiles = {"tardis_exterior.png^[opacity:200"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , +minetest.register_node("tardis:tardis_demat_2", { + tiles = {"tardis_exterior.png^[opacity:200"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + is_ground_content = true, - on_timer = function (pos) - minetest.set_node (pos, {name = "tardis:tardis_demat_3"}) - end , + on_timer = function(pos) + minetest.set_node(pos, {name = "tardis:tardis_demat_3"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, }) minetest.register_node("tardis:tardis_demat_3", { - tiles = {"tardis_exterior.png^[opacity:175"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , - light_source = 10 , + tiles = {"tardis_exterior.png^[opacity:175"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + is_ground_content = true, + light_source = 10, - on_timer = function (pos) - minetest.set_node (pos, {name = "tardis:tardis_demat_4"}) - end , + on_timer = function(pos) + minetest.set_node(pos, {name = "tardis:tardis_demat_4"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, }) -minetest.register_node ("tardis:tardis_demat_4", { - tiles = {"tardis_exterior.png^[opacity:150"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , +minetest.register_node("tardis:tardis_demat_4", { + tiles = {"tardis_exterior.png^[opacity:150"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + is_ground_content = true, - on_timer = function (pos) - minetest.set_node (pos, {name = "tardis:tardis_demat_5"}) - end , + on_timer = function(pos) + minetest.set_node(pos, {name = "tardis:tardis_demat_5"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(0.5) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(0.5) + end, }) -minetest.register_node ("tardis:tardis_demat_5", { - tiles = {"tardis_exterior.png^[opacity:125"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , - light_source = 10 , +minetest.register_node("tardis:tardis_demat_5", { + tiles = {"tardis_exterior.png^[opacity:125"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + is_ground_content = true, + light_source = 10, - on_timer = function (pos) - minetest.set_node (pos, {name = "tardis:tardis_demat_6"}) - end , + on_timer = function(pos) + minetest.set_node(pos, {name = "tardis:tardis_demat_6"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, }) -minetest.register_node ("tardis:tardis_demat_6", { - tiles = {"tardis_exterior.png^[opacity:100"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , +minetest.register_node("tardis:tardis_demat_6", { + tiles = {"tardis_exterior.png^[opacity:100"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + is_ground_content = true, - on_timer = function (pos) - minetest.set_node (pos, {name = "tardis:tardis_demat_7"}) - end , + on_timer = function(pos) + minetest.set_node(pos, {name = "tardis:tardis_demat_7"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, }) -minetest.register_node ("tardis:tardis_demat_7", { - tiles = {"tardis_exterior.png^[opacity:75"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - light_source = 10 , +minetest.register_node("tardis:tardis_demat_7", { + tiles = {"tardis_exterior.png^[opacity:75"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + light_source = 10, - on_timer = function (pos) - minetest.set_node (pos, {name = "tardis:tardis_demat_8"}) - end , + on_timer = function(pos) + minetest.set_node(pos, {name = "tardis:tardis_demat_8"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, }) -minetest.register_node ("tardis:tardis_demat_8", { - tiles = {"tardis_exterior.png^[opacity:50"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , +minetest.register_node("tardis:tardis_demat_8", { + tiles = {"tardis_exterior.png^[opacity:50"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + is_ground_content = true, - on_timer = function (pos) - minetest.set_node (pos, {name = "tardis:tardis_demat_9"}) - end , + on_timer = function(pos) + minetest.set_node(pos, {name = "tardis:tardis_demat_9"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, }) -minetest.register_node ("tardis:tardis_demat_9", { - tiles = {"tardis_exterior.png^[opacity:25"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , - light_source = 7 , +minetest.register_node("tardis:tardis_demat_9", { + tiles = {"tardis_exterior.png^[opacity:25"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + is_ground_content = true, + light_source = 7, - on_timer = function (pos) - minetest.set_node (pos, {name = "tardis:tardis_demat_10"}) - end , + on_timer = function(pos) + minetest.set_node(pos, {name = "tardis:tardis_demat_10"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, }) -minetest.register_node ("tardis:tardis_demat_10", { - tiles = {"tardis_exterior.png^[opacity:10"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , +minetest.register_node("tardis:tardis_demat_10", { + tiles = {"tardis_exterior.png^[opacity:10"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + is_ground_content = true, - on_timer = function (pos) - minetest.set_node (pos, {name = "tardis:tardis_demat_11"}) - end , + on_timer = function(pos) + minetest.set_node(pos, {name = "tardis:tardis_demat_11"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(0.5) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(0.5) + end, }) -minetest.register_node ("tardis:tardis_demat_11", { +minetest.register_node("tardis:tardis_demat_11", { tiles = {"tardis_exterior.png^[opacity:5"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , - light_source = 5 , + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + is_ground_content = true, + light_source = 5, - on_timer = function (pos) - minetest.set_node (pos, {name = "air"}) - minetest.forceload_free_block (pos) - end , + on_timer = function(pos) + minetest.set_node(pos, {name = "air"}) + minetest.forceload_free_block(pos) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, }) diff --git a/functions.lua b/functions.lua index dd61deb..ce4dd9c 100644 --- a/functions.lua +++ b/functions.lua @@ -1,6 +1,108 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) -local worldpath = minetest.get_worldpath() +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +local mod_storage = minetest.get_mod_storage() + +-- Functions are fairly self explanitory, get or set the specified value. +function tardis.set_nav(pos, name) + local pos_string = (minetest.pos_to_string(pos)) + + if (pos_string) then + if (mod_storage:set_string("tardis:"..name..":destination", pos_string)) then + return true + else return false + end + end +end + +function tardis.get_nav(name) + local pos = minetest.string_to_pos(mod_storage:get_string("tardis:"..name..":destination")) + + if (pos) then + return pos + elseif (tardis.get_exterior(name)) then + return tardis.get_exterior(name) + else return { x = 0, y = 0, z = 0 } + end +end + +function tardis.set_exterior(pos, name) + local pos_string = (minetest.pos_to_string(pos)) + + if (pos_string) then + if (mod_storage:set_string("tardis:"..name..":exterior", pos_string)) then + return true + else return false + end + end +end + +function tardis.get_exterior(name) + local pos = minetest.string_to_pos(mod_storage:get_string("tardis:"..name..":exterior")) + + if (pos) then + return pos + else return false + end +end + +function tardis.set_interior(pos, name) + local pos_string = (minetest.pos_to_string(pos)) + + if (pos_string) then + if (mod_storage:set_string("tardis:"..name..":interior", pos_string)) then + return true + else return false + end + end +end + +function tardis.get_interior(name) + local pos = minetest.string_to_pos(mod_storage:get_string("tardis:"..name..":interior")) + + if (pos) then + return pos + else return false + end +end + +function tardis.add_count() + local current_count = tonumber(mod_storage:get_string("tardis:count")) + + if (current_count) then + if (mod_storage:set_string("tardis:count", tostring(current_count+1))) then + return true + else return false + end + + elseif (mod_storage:set_string("tardis:count", "1")) then + return true + else return false + end +end + +function tardis.get_count() + local current_count = tonumber(mod_storage:get_string("tardis:count")) + + if (current_count) then + return current_count + else return 0 + end +end + +function tardis.set_vortex(bool, name) + if (mod_storage:set_string("tardis:"..name..":vortex", tostring(bool))) then + return true + else return nil + end +end + +function tardis.get_vortex(name) + if (mod_storage:get_string("tardis:"..name..":vortex") == "true") then + return true + else return false + end +end + -- Hacky node swap function since minetest.swap_node doesnt call any callbacks function tardis.swap_node (pos, name) @@ -9,103 +111,102 @@ function tardis.swap_node (pos, name) minetest.set_node (pos, name) - local meta = minetest.get_meta (pos) + meta = minetest.get_meta (pos) meta:from_table (meta_old) end -- Spawn a TARDIS and set the controls/doors meta with relative coordinates -function tardis:spawn_interior (pos, owner) +function tardis:spawn_interior (pos, name) local place_pos = { - x = tardis.count * 12, + x = tardis.get_count() * 12, y = 30000, z = 0, } - tardis.count = tardis.count + 1 + tardis.add_count() local interior_doors_pos = { - x = (place_pos ["x"] + 5) , - y = (place_pos ["y"] + 1) , - z = (place_pos ["z"] + 1) , + 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) , + 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) , + 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") + minetest.place_schematic(place_pos, modpath .. "/schematics/tardis_interior.mts") -- Add TARDIS to index - tardis.tardises [owner] = {} - tardis.tardises [owner]["exterior"] = pos - tardis.tardises [owner]["interior"] = interior_doors_pos - tardis.tardises [owner]["in_vortex"] = false + tardis.set_exterior(pos, name) + tardis.set_interior(interior_doors_pos, name) + tardis.set_vortex(false, name) --Set meta - 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 demat_meta = minetest.get_meta(demat_lever_pos) + demat_meta:set_string("owner", name) - local interior_doors_meta = minetest.get_meta (interior_doors_pos) - interior_doors_meta:set_string ("owner", owner) + local nav_meta = minetest.get_meta(nav_pos) + nav_meta:set_string("owner", name) - minetest.log("info", minetest.pos_to_string (tardis.tardises [owner]["interior"] )) + local interior_doors_meta = minetest.get_meta(interior_doors_pos) + interior_doors_meta:set_string("owner", name) - local count_file = io.open (worldpath .. "/tardis.tardises", "w+") - count_file:write ( minetest.serialize (tardis.count) ) - count_file:close() - - local count_file = io.open(worldpath .. "/tardis.count", "w+") - count_file:write(minetest.serialize(tardis.count)) - count_file:close() + minetest.log("info", minetest.pos_to_string(tardis.get_interior(name))) end -- Set navigation, uses a formspec -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 +function tardis.show_nav_formspec(player_name, owner_name) + if (player_name ~= owner_name) then + minetest.chat_send_player(player_name, "You don't own that TARDIS!") + return false 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!]") + local pos = tardis.get_nav(owner_name) - minetest.register_on_player_receive_fields (function (player, formname, fields) - if formname ~= "tardis:remat_form" then + if (pos) then + minetest.show_formspec(player_name, "tardis:remat_form", + "size[7,3]" .. + "field[1,1.5;2,1;x;X;"..pos.x.."]" .. + "field[3,1.5;2,1;y;Y;"..pos.y.."]" .. + "field[5,1.5;2,1;z;Z;"..pos.z.."]" .. + "button_exit[1,2;2,1;exit;Go!]") + else return false end + + 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)} + pos = {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 + if (pos == nil or pos.x == nil or pos.y == nil or pos.z == nil) then + minetest.chat_send_player(player_name, "Please enter valid coordinates.") + elseif (tardis.set_nav(pos, owner_name)) then return true + else return false end end) end - --- When a player teleports into a previously generated mapblock with the TARDIS, we want it to appear. +-- Make sure TARDISes places in ungenerated chunks exist and have meta set correctly. minetest.register_on_generated(function(minp, maxp, blockseed) - for owner,table in pairs(tardis.tardises) do - local exterior = table["exterior"] - if exterior.x >= minp.x and exterior.y >= minp.y and exterior.z >= minp.z and - exterior.x <= maxp.x and exterior.y <= maxp.y and exterior.z <= maxp.z then - minetest.set_node(exterior, {name="tardis:tardis"}) - minetest.get_meta(exterior):set_string("owner", owner) + local table = mod_storage:to_table() + + for k, v in pairs(table.fields) do + if ((k == string.match(k, "tardis:.+:exterior")) and + (minetest.string_to_pos(v).x > minp.x) and (minetest.string_to_pos(v).y > minp.y) and (minetest.string_to_pos(v).z > minp.z) and + (minetest.string_to_pos(v).x < maxp.x) and (minetest.string_to_pos(v).y < maxp.y) and (minetest.string_to_pos(v).z < maxp.z)) then + minetest.set_node(minetest.string_to_pos(v), {name = "tardis:tardis"}) + local meta = minetest.get_meta(minetest.string_to_pos(v)) + local owner = string.match(k, "tardis:(.+):exterior") + + meta:set_string("owner", owner) end end end) diff --git a/init.lua b/init.lua index 8bce218..6653402 100644 --- a/init.lua +++ b/init.lua @@ -1,54 +1,11 @@ --- Define global table and TARDIS index +-- Define global table tardis = {} -tardis.count = 0 -tardis.tardises = {} +tardis.done = {} local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath (modname) -local worldpath = minetest.get_worldpath() +local modpath = minetest.get_modpath(modname) -dofile (modpath .. "/remat.lua") -dofile (modpath .. "/demat.lua") -dofile (modpath .. "/functions.lua") -dofile (modpath .. "/nodes.lua") - --- Open TARDIS index from file -local file = io.open (worldpath .. "/tardis.tardises", "r") -local count_file = io.open (worldpath .. "/tardis.count", "r") - --- If file exists, write into current index -if file then - tardis.tardises = minetest.deserialize (file:read("*all")) - file:close() -end - -if count_file then - tardis.count = minetest.deserialize (count_file:read("*all")) - count_file:close() -end - --- Register chatcommand to set navigation, return a help message if user doe not own a TARDIS -minetest.register_chatcommand ("set_nav", { - description = "Sets the navigation coordinates for your TARDIS.", - func = function (name, param) - if (tardis.tardises [name] == nil) then - minetest.chat_send_player (name, "Must be owner!") - else - local owner = name - local player = minetest.get_player_by_name (name) - - tardis.set_nav (player, owner) - end - end -}) - --- Save index on shutdown -minetest.register_on_shutdown( function() - local file = io.open (worldpath .. "/tardis.tardises", "w+") - file:write(minetest.serialize (tardis.tardises) ) - file:close() - - local count_file = io.open(worldpath .. "/tardis.count", "w+") - count_file:write(minetest.serialize(tardis.count)) - count_file:close() -end ) +dofile(modpath .. "/remat.lua") +dofile(modpath .. "/demat.lua") +dofile(modpath .. "/functions.lua") +dofile(modpath .. "/nodes.lua") diff --git a/nodes.lua b/nodes.lua index 6d65d72..cdfb198 100644 --- a/nodes.lua +++ b/nodes.lua @@ -1,70 +1,71 @@ -minetest.register_node ("tardis:tardis", { - decription = "Time And Relative Dimension In Space" , - tiles = { "tardis_exterior.png" } , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , +minetest.register_node("tardis:tardis", { + decription = "Time And Relative Dimension In Space", + tiles = { "tardis_exterior.png" }, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + selection_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, 1.5, 0.5}}, + collision_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, 1.5, 0.5}}, -- Setup Meta, clone meta if not placed by a player - on_place = function (itemstack, placer, pointed_thing) + on_place = function(itemstack, placer, pointed_thing) local pos = pointed_thing.above - local player = placer:get_player_name() - tardis.swap_node (pos, {name = "tardis:tardis"}) + local name = placer:get_player_name() + tardis.swap_node(pos, {name = "tardis:tardis"}) - if (player == nil) then - local meta = minetest.get_meta (pos) - local player = meta:get_string ("owner") - tardis.tardises [player]["exterior"] = pos - elseif (tardis.tardises [player] == nil) then - tardis:spawn_interior (pos, player) + if (name) then + tardis:spawn_interior (pos, name) else - tardis.tardises [player]["exterior"] = pos + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + if (tardis.get_interior(owner)) then + tardis.set_exerior(pos, owner) + + else tardis.set_exterior(pos, name) + end end - local meta = minetest.get_meta (pos) - meta:set_string ("owner", player) + local meta = minetest.get_meta(pos) + meta:set_string ("owner", name) itemstack:take_item() return itemstack - end , + end, -- Teleport Player - on_rightclick = function (pos, node, player, itemstack, pointed_thing) - local meta = minetest.get_meta (pos) - local owner = meta:get_string ("owner") - local teleport = { x = tardis.tardises[owner]["interior"]["x"], y = tardis.tardises[owner]["interior"]["y"], z = tardis.tardises[owner]["interior"]["z"] + 1 } + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + local meta = minetest.get_meta(pos) + local name = meta:get_string("owner") + local teleport = tardis.get_interior(name) + teleport.z = teleport.z + 1 - player.setpos (player, teleport) - --player.set_look_horizontal(0) - end , + player.setpos(player, teleport) + end, }) -- Initialize materialization, fail if nav is not set, then swap node to off pos -minetest.register_node ("tardis:demat_lever_on", { - tiles = {"tardis_demat.png"} , - drawtype = "mesh" , - mesh = "tardis_demat_on.obj" , - paramtype = "light" , - is_ground_content = true , +minetest.register_node("tardis:demat_lever_on", { + tiles = {"tardis_demat.png"}, + drawtype = "mesh", + mesh = "tardis_demat_on.obj", + paramtype = "light", - on_rightclick = function (pos, node, player, itemstack, pointed_thing) - local player_name = player:get_player_name() - local meta = minetest.get_meta(pos) - local owner = meta:get_string("owner") + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + local name = player:get_player_name() + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") - local rematted, msg = tardis.remat (owner, player:get_player_name()) - if (rematted == false) then - minetest.chat_send_player (player_name, msg) - else + if (tardis.remat(owner)) then minetest.sound_play ("tardis_remat", { pos = pos , max_hear_distance = 100 , gain = 10 , - }) - minetest.swap_node (pos, {name = "tardis:demat_lever_off"}) + }) + minetest.swap_node(pos, {name = "tardis:demat_lever_off"}) + else + minetest.chat_send_player(name, "Failed to remat") end end }) @@ -72,20 +73,17 @@ minetest.register_node ("tardis:demat_lever_on", { -- Initialize dematerialization, then set lever to on pos minetest.register_node ("tardis:demat_lever_off", { - groups = {crumbly = 1} , - tiles = {"tardis_demat.png"} , - drawtype = "mesh" , - mesh = "tardis_demat_off.obj" , - paramtype = "light" , - is_ground_content = true , + tiles = {"tardis_demat.png"}, + drawtype = "mesh", + mesh = "tardis_demat_off.obj", + paramtype = "light", - on_rightclick = function (pos, node, player, itemstack, pointed_thing) + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + local name = player:get_player_name() local meta = minetest.get_meta(pos) local owner = meta:get_string("owner") - - local dematted, msg = tardis.demat (owner, player:get_player_name()) - if dematted then + if (tardis.demat(owner)) then minetest.sound_play ("tardis_demat", { pos = pos , max_hear_distance = 10 , @@ -94,63 +92,59 @@ minetest.register_node ("tardis:demat_lever_off", { minetest.swap_node (pos, {name = "tardis:demat_lever_on"}) else - minetest.chat_send_player(player:get_player_name(), msg) + minetest.chat_send_player(name, "Failed to demat") end - end , + end }) -minetest.register_node ("tardis:navigator", { - groups = {crumbly = 1} , - tiles = {"tardis_navigator.png"} , - drawtype = "signlike" , - paramtype = "light" , - paramtype2 = "wallmounted" , - is_ground_content = true , +minetest.register_node("tardis:navigator", { + tiles = {"tardis_navigator.png"}, + drawtype = "signlike", + paramtype = "light", + paramtype2 = "wallmounted", - on_rightclick = function (pos, node, player, itemstack, pointed_thing) + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + local name = player:get_player_name() local meta = minetest.get_meta(pos) local owner = meta:get_string("owner") - tardis.set_nav(player, owner) - end , + tardis.show_nav_formspec(name, owner) + end }) -- Teleports player to exterior is in_vortex is set to false -minetest.register_node ("tardis:interior_doors", { - tiles = {"tardis_doors.png"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_interior_doors.obj" , - paramtype = "light" , - is_ground_content = true , +minetest.register_node("tardis:interior_doors", { + tiles = {"tardis_doors.png"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_interior_doors.obj", + paramtype = "light", + selection_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, 1.5, 0.5}}, + collision_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, 1.5, 0.5}}, - on_rightclick = function (pos, node, player, itemstack, pointed_thing) - local meta = minetest.get_meta (pos) - local owner = meta:get_string ("owner") + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + local name = player:get_player_name() + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") - if (tardis.tardises == nil) or - (tardis.tardises [owner] == nil) or - (tardis.tardises [owner]["in_vortex"] == nil) then - minetest.log ("error", "in_vortex not initialised for " .. owner) - return - end - - if (tardis.tardises [owner]["in_vortex"] == false) then - local teleport = { x = tardis.tardises[owner]["exterior"]["x"], y = tardis.tardises[owner]["exterior"]["y"], z = tardis.tardises[owner]["exterior"]["z"] - 1 } - player:setpos (teleport) + if (tardis.get_vortex(owner)) then + minetest.chat_send_player (name, "The TARDIS is in the Vortex - the doors have been locked automatically.") else - player_name = player:get_player_name() - minetest.chat_send_player (player_name, "The TARDIS is in the Vortex - the doors have been locked automatically.") + local teleport = tardis.get_exterior(owner) + teleport["z"] = teleport["z"] - 1 + player:setpos(teleport) end end, - - on_timer = function (pos) - local meta = minetest.get_meta (pos) - local owner = meta:get_string ("owner") - - if tardis.tardises[owner]["in_vortex"] then -- If we're in a vortex, we must have been activated from the remat function. - tardis.tardises[owner]["in_vortex"] = false -- exit it. + + on_timer = function(pos) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + + if (tardis.get_vortex(owner)) then -- If we're in a vortex, we must have been activated from the remat function. + tardis.set_vortex(false, owner) -- exit it. + + tardis.swap_node((tardis.get_exterior(owner)), {name = "tardis:tardis"}) end end }) diff --git a/remat.lua b/remat.lua index 6b5f2af..238ff45 100644 --- a/remat.lua +++ b/remat.lua @@ -1,197 +1,183 @@ -function tardis.remat (owner, name) - if owner ~= name then return false, "You don't own that TARDIS!" end - if (tardis.tardises [owner]["destination"] == nil) then - return false, "Coordinates haven't been set yet!" - else - local pos = tardis.tardises [owner]["destination"] +function tardis.remat(name) + local pos = tardis.get_nav(name) - minetest.set_node (pos, {name = "tardis:tardis_remat"}) + if (minetest.forceload_block(pos)) then + minetest.set_node(pos, {name = "tardis:tardis_remat"}) - local meta = minetest.get_meta (pos) - meta:set_string ("owner", owner) - - minetest.get_node_timer(tardis.tardises [owner]["interior"]):start(22.5) + tardis.set_exterior(pos, name) - tardis.tardises [owner]["exterior"] = pos + local meta = minetest.get_meta(pos) + meta:set_string("owner", name) + + minetest.get_node_timer(tardis.get_interior(name)):start(21) return true + else return false + end end +minetest.register_node("tardis:tardis_remat", { + tiles = {"tardis_exterior.png^[opacity:1"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", -minetest.register_node ("tardis:tardis_remat", { - tiles = {"tardis_exterior.png^[opacity:1"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , + on_timer = function(pos) + tardis.swap_node(pos, {name = "tardis:tardis_remat_1"}) + end, - on_timer = function (pos) - tardis.swap_node (pos, {name = "tardis:tardis_remat_1"}) - end , - - on_construct = function (pos) - minetest.get_node_timer (pos):start(11) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(11) + end, }) -minetest.register_node ("tardis:tardis_remat_1", { - tiles = {"tardis_exterior.png^[opacity:25"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , - light_source = 7 , +minetest.register_node("tardis:tardis_remat_1", { + tiles = {"tardis_exterior.png^[opacity:25"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + light_source = 7, + on_timer = function(pos) + tardis.swap_node(pos, {name = "tardis:tardis_remat_2"}) + end, - on_timer = function (pos) - tardis.swap_node (pos, {name = "tardis:tardis_remat_2"}) - end , - - on_construct = function (pos) - minetest.get_node_timer (pos):start(1.5) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1.5) + end, }) -minetest.register_node ("tardis:tardis_remat_2", { - tiles = {"tardis_exterior.png^[opacity:50"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , +minetest.register_node("tardis:tardis_remat_2", { + tiles = {"tardis_exterior.png^[opacity:50"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", - on_timer = function (pos) - tardis.swap_node (pos, {name = "tardis:tardis_remat_3"}) - end , + on_timer = function(pos) + tardis.swap_node(pos, {name = "tardis:tardis_remat_3"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, }) -minetest.register_node ("tardis:tardis_remat_3", { - tiles = {"tardis_exterior.png^[opacity:75"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , - light_source = 10 , +minetest.register_node("tardis:tardis_remat_3", { + tiles = {"tardis_exterior.png^[opacity:75"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + light_source = 10, - on_timer = function (pos) - tardis.swap_node (pos, {name = "tardis:tardis_remat_4"}) - end , + on_timer = function(pos) + tardis.swap_node(pos, {name = "tardis:tardis_remat_4"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, }) -minetest.register_node ("tardis:tardis_remat_4", { - tiles = {"tardis_exterior.png^[opacity:100"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , +minetest.register_node("tardis:tardis_remat_4", { + tiles = {"tardis_exterior.png^[opacity:100"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", - on_timer = function (pos) - tardis.swap_node (pos, {name = "tardis:tardis_remat_5"}) - end , + on_timer = function(pos) + tardis.swap_node(pos, {name = "tardis:tardis_remat_5"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(0.5) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(0.5) + end, }) -minetest.register_node ("tardis:tardis_remat_5", { - tiles = {"tardis_exterior.png^[opacity:125"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , - light_source = 10 , +minetest.register_node("tardis:tardis_remat_5", { + tiles = {"tardis_exterior.png^[opacity:125"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + light_source = 10, - on_timer = function (pos) - tardis.swap_node (pos, {name = "tardis:tardis_remat_6"}) - end , + on_timer = function(pos) + tardis.swap_node(pos, {name = "tardis:tardis_remat_6"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, }) -minetest.register_node ("tardis:tardis_remat_6", { - tiles = {"tardis_exterior.png^[opacity:150"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , +minetest.register_node("tardis:tardis_remat_6", { + tiles = {"tardis_exterior.png^[opacity:150"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", - on_timer = function (pos) - tardis.swap_node (pos, {name = "tardis:tardis_remat_7"}) - end , + on_timer = function(pos) + tardis.swap_node(pos, {name = "tardis:tardis_remat_7"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, }) -minetest.register_node ("tardis:tardis_remat_7", { - tiles = {"tardis_exterior.png^[opacity:175"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - light_source = 10 , +minetest.register_node("tardis:tardis_remat_7", { + tiles = {"tardis_exterior.png^[opacity:175"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + light_source = 10, - on_timer = function (pos) - tardis.swap_node (pos, {name = "tardis:tardis_remat_8"}) - end , + on_timer = function(pos) + tardis.swap_node(pos, {name = "tardis:tardis_remat_8"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, }) -minetest.register_node ("tardis:tardis_remat_8", { - tiles = {"tardis_exterior.png^[opacity:200"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , +minetest.register_node("tardis:tardis_remat_8", { + tiles = {"tardis_exterior.png^[opacity:200"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", - on_timer = function (pos) - tardis.swap_node (pos, {name = "tardis:tardis_remat_9"}) - end , + on_timer = function(pos) + tardis.swap_node(pos, {name = "tardis:tardis_remat_9"}) + end, - on_construct = function (pos) - minetest.get_node_timer (pos):start(0.5) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(0.5) + end, }) -minetest.register_node ("tardis:tardis_remat_9", { - tiles = {"tardis_exterior.png^[opacity:225"} , - use_texture_alpha = true , - drawtype = "mesh" , - mesh = "tardis_exterior.obj" , - paramtype = "light" , - is_ground_content = true , - light_source = 10 , +minetest.register_node("tardis:tardis_remat_9", { + tiles = {"tardis_exterior.png^[opacity:225"}, + use_texture_alpha = true, + drawtype = "mesh", + mesh = "tardis_exterior.obj", + paramtype = "light", + light_source = 10, - on_timer = function (pos) - tardis.swap_node (pos, {name = "tardis:tardis"}) + on_timer = function(pos) + tardis.swap_node(pos, {name = "tardis:tardis"}) + minetest.forceload_free_block(pos) + end, - local meta = minetest.get_meta (pos) - owner = meta:get_string ("owner") - end , - - on_construct = function (pos) - minetest.get_node_timer (pos):start(1) - end , + on_construct = function(pos) + minetest.get_node_timer(pos):start(1) + end, })