Only give screwdriver to player if needed

master
Wuzzy 2022-01-09 17:43:59 +01:00
parent aaf16736d2
commit 499fff9bbe
1 changed files with 32 additions and 5 deletions

View File

@ -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()