From 499fff9bbeafb8a7e35d099663cab83f70d369f4 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sun, 9 Jan 2022 17:43:59 +0100 Subject: [PATCH] Only give screwdriver to player if needed --- mods/lzr_levels/init.lua | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/mods/lzr_levels/init.lua b/mods/lzr_levels/init.lua index 2d42833..3b732be 100644 --- a/mods/lzr_levels/init.lua +++ b/mods/lzr_levels/init.lua @@ -10,6 +10,27 @@ local LAST_LEVEL = 10 local current_level = nil +local level_data = {} + +-- Read the level schematics to find out some metadata about them +local analyze_levels = function() + -- Mark levels that contain at least 1 rotatable block + for l=1, LAST_LEVEL do + level_data[l] = { + contains_rotatable_block = false + } + local schem = minetest.read_schematic(minetest.get_modpath("lzr_levels").."/schematics/lzr_levels_level_"..l..".mts", {write_yslice_prob="none"}) + for d=1, #schem.data do + local nodename = schem.data[d].name + local is_rotatable = minetest.get_item_group(nodename, "rotatable") == 1 + if is_rotatable then + level_data[l].contains_rotatable_block = true + break + end + end + end +end + local build_room = function(param) local pos = param.pos local psize = param.size @@ -64,7 +85,7 @@ function lzr_levels.prepare_and_build_level(level) end function lzr_levels.build_level(level) - return 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_"..level..".mts", "0", {}, true, "") end local function clear_inventory(player) @@ -74,10 +95,12 @@ local function clear_inventory(player) end end -local function reset_inventory(player) +local function reset_inventory(player, needs_rotate) clear_inventory(player) - local inv = player:get_inventory() - inv:add_item("main", "screwdriver2:screwdriver") + if needs_rotate then + local inv = player:get_inventory() + inv:add_item("main", "screwdriver2:screwdriver") + end end local get_singleplayer = function() @@ -87,10 +110,11 @@ end function lzr_levels.start_level(level) current_level = level local player = get_singleplayer() - reset_inventory(player) local start_pos = vector.add(lzr_globals.LEVEL_POS, {x=4,y=-0.5,z=4}) player:set_pos(start_pos) lzr_levels.prepare_and_build_level(level) + local needs_rotate = level_data[current_level].contains_rotatable_block + reset_inventory(player, needs_rotate) lzr_messages.show_message(player, S("Level @1", level), 3) lzr_gamestate.set_state(lzr_gamestate.LEVEL) minetest.sound_play({name = "lzr_levels_level_enter", gain = 1}, {to_player=player:get_player_name()}, true) @@ -174,3 +198,6 @@ minetest.register_chatcommand("leave", { end end, }) + + +analyze_levels()