Only give screwdriver to player if needed
parent
aaf16736d2
commit
499fff9bbe
|
@ -10,6 +10,27 @@ local LAST_LEVEL = 10
|
||||||
|
|
||||||
local current_level = nil
|
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 build_room = function(param)
|
||||||
local pos = param.pos
|
local pos = param.pos
|
||||||
local psize = param.size
|
local psize = param.size
|
||||||
|
@ -64,7 +85,7 @@ function lzr_levels.prepare_and_build_level(level)
|
||||||
end
|
end
|
||||||
|
|
||||||
function lzr_levels.build_level(level)
|
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
|
end
|
||||||
|
|
||||||
local function clear_inventory(player)
|
local function clear_inventory(player)
|
||||||
|
@ -74,10 +95,12 @@ local function clear_inventory(player)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function reset_inventory(player)
|
local function reset_inventory(player, needs_rotate)
|
||||||
clear_inventory(player)
|
clear_inventory(player)
|
||||||
local inv = player:get_inventory()
|
if needs_rotate then
|
||||||
inv:add_item("main", "screwdriver2:screwdriver")
|
local inv = player:get_inventory()
|
||||||
|
inv:add_item("main", "screwdriver2:screwdriver")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local get_singleplayer = function()
|
local get_singleplayer = function()
|
||||||
|
@ -87,10 +110,11 @@ end
|
||||||
function lzr_levels.start_level(level)
|
function lzr_levels.start_level(level)
|
||||||
current_level = level
|
current_level = level
|
||||||
local player = get_singleplayer()
|
local player = get_singleplayer()
|
||||||
reset_inventory(player)
|
|
||||||
local start_pos = vector.add(lzr_globals.LEVEL_POS, {x=4,y=-0.5,z=4})
|
local start_pos = vector.add(lzr_globals.LEVEL_POS, {x=4,y=-0.5,z=4})
|
||||||
player:set_pos(start_pos)
|
player:set_pos(start_pos)
|
||||||
lzr_levels.prepare_and_build_level(level)
|
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_messages.show_message(player, S("Level @1", level), 3)
|
||||||
lzr_gamestate.set_state(lzr_gamestate.LEVEL)
|
lzr_gamestate.set_state(lzr_gamestate.LEVEL)
|
||||||
minetest.sound_play({name = "lzr_levels_level_enter", gain = 1}, {to_player=player:get_player_name()}, true)
|
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
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
analyze_levels()
|
||||||
|
|
Loading…
Reference in New Issue