Only give screwdriver to player if needed
parent
aaf16736d2
commit
499fff9bbe
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue