From 33d06027f57d47b7df02c50ef32fca54906a794f Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Thu, 23 Dec 2021 22:43:26 +0100 Subject: [PATCH] Add debug commands to jump to level --- mods/lzr_levels/init.lua | 68 ++++++++++++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/mods/lzr_levels/init.lua b/mods/lzr_levels/init.lua index a4ff509..a5d827f 100644 --- a/mods/lzr_levels/init.lua +++ b/mods/lzr_levels/init.lua @@ -6,6 +6,7 @@ local ROOM_NODE = "lzr_core:wood" local WINDOW_NODE = "xdecor:woodframed_glass" local WINDOW_HEIGHT = 3 local WINDOW_DIST = 3 +local LAST_LEVEL = 10 local build_room = function(param) local pos = param.pos @@ -61,36 +62,71 @@ function lzr_levels.prepare_and_build_level(level) end function lzr_levels.build_level(level) - minetest.place_schematic(lzr_globals.LEVEL_POS, minetest.get_modpath("lzr_levels").."/schematics/lzr_levels_level_"..tonumber(level)..".mts", "0", {}, true, "") + return minetest.place_schematic(lzr_globals.LEVEL_POS, minetest.get_modpath("lzr_levels").."/schematics/lzr_levels_level_"..tonumber(level)..".mts", "0", {}, true, "") end - -local current_level = 1 --- Startup -minetest.register_on_joinplayer(function(player) +local function reset_inventory(player) local inv = player:get_inventory() for i=1,inv:get_size("main") do inv:set_stack("main", i, "") end inv:add_item("main", "screwdriver:screwdriver") - lzr_levels.prepare_and_build_level(1) - player:set_pos({x=5,y=2,z=5}) +end + +local current_level = 1 + +local get_singleplayer = function() + return minetest.get_player_by_name("singleplayer") +end + +-- Startup +minetest.register_on_joinplayer(function(player) + lzr_levels.start_level(1) end) +function lzr_levels.start_level(level) + current_level = level + local player = get_singleplayer() + reset_inventory(player) + player:set_pos({x=5,y=2,z=5}) + lzr_levels.prepare_and_build_level(level) +end + function lzr_levels.next_level() - local player = minetest.get_player_by_name("singleplayer") + local player = get_singleplayer() current_level = current_level + 1 if current_level > 10 then minetest.chat_send_player("singleplayer", S("Yarrrr! You finished the last level!")) else minetest.chat_send_player("singleplayer", S("Yarr! Level @1 completed!", current_level - 1)) - player:set_pos({x=5,y=2,z=5}) - lzr_levels.prepare_and_build_level(current_level) - - local inv = player:get_inventory() - for i=1,inv:get_size("main") do - inv:set_stack("main", i, "") - end - inv:add_item("main", "screwdriver:screwdriver") + lzr_levels.start_level(current_level) end end + +minetest.register_chatcommand("level", { + privs = { server = true }, + description = S("Go to level"), + params = S(""), + func = function(name, param) + local level = tonumber(param) + if not level then + return false + end + if level < 1 or level > LAST_LEVEL then + return false, S("Invalid level!") + end + lzr_levels.start_level(level) + return true + end, + +}) + +minetest.register_chatcommand("restart", { + privs = {}, + params = "", + description = S("Restart current level"), + func = function(name, param) + lzr_levels.start_level(current_level) + return true + end, +})