Don't crash if level schematic is missing
This commit is contained in:
parent
1434018c77
commit
060543625d
@ -348,19 +348,6 @@ minetest.register_chatcommand("editor_save", {
|
||||
end,
|
||||
})
|
||||
|
||||
-- Returns true if the given file exists, false otherwise.
|
||||
-- * path: Path to file (without file name)
|
||||
-- * filename: File name of file (without path)
|
||||
local file_exists = function(path, filename)
|
||||
local levels = minetest.get_dir_list(path, false)
|
||||
for l=1, #levels do
|
||||
if levels[l] == filename then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local load_level = function(level_name, player)
|
||||
if lzr_gamestate.get_state() ~= lzr_gamestate.EDITOR then
|
||||
return false
|
||||
@ -370,7 +357,7 @@ local load_level = function(level_name, player)
|
||||
return false
|
||||
end
|
||||
local filename = level_name..".mts"
|
||||
local ok = file_exists(minetest.get_worldpath().."/levels", filename)
|
||||
local ok = lzr_util.file_exists(minetest.get_worldpath().."/levels", filename)
|
||||
if not ok then
|
||||
return false
|
||||
end
|
||||
@ -517,7 +504,7 @@ minetest.register_chatcommand("editor_load", {
|
||||
if check_for_slash(level_name) then
|
||||
return false, S("Level name must not contain slash or backslash!")
|
||||
end
|
||||
local ok = file_exists(minetest.get_worldpath().."/levels", level_name..".mts")
|
||||
local ok = lzr_util.file_exists(minetest.get_worldpath().."/levels", level_name..".mts")
|
||||
if not ok then
|
||||
return false, S("Level file does not exist!")
|
||||
end
|
||||
|
@ -1,2 +1,2 @@
|
||||
name = lzr_editor
|
||||
depends = lzr_gamestate, lzr_levels, lzr_gui, lzr_player, lzr_node_drops, lzr_ambience, lzr_getitem, lzr_csv, lzr_globals, lzr_privs, lzr_weather, lzr_tools, lzr_hook, lzr_teleporter, lzr_treasure, lzr_mapgen, lzr_world, lzr_triggers
|
||||
depends = lzr_gamestate, lzr_levels, lzr_gui, lzr_player, lzr_node_drops, lzr_ambience, lzr_getitem, lzr_csv, lzr_globals, lzr_privs, lzr_weather, lzr_tools, lzr_hook, lzr_teleporter, lzr_treasure, lzr_mapgen, lzr_world, lzr_triggers, lzr_util
|
||||
|
@ -121,7 +121,9 @@ local load_custom_level = function(level, player)
|
||||
local error_append = ""
|
||||
if error_detail then
|
||||
local reason
|
||||
if error_detail == "no_teleporter" then
|
||||
if error_detail == "file_nonexistant" then
|
||||
reason = S("The level schematic file chould not be found.")
|
||||
elseif error_detail == "no_teleporter" then
|
||||
reason = S("There’s no teleporter for the player to start on.")
|
||||
elseif error_detail == "too_many_teleporters" then
|
||||
reason = S("There’s more than one teleporter.")
|
||||
@ -133,6 +135,8 @@ local load_custom_level = function(level, player)
|
||||
reason = S("There’s a bare gold block in the level.")
|
||||
elseif error_detail == "plant_on_ground" then
|
||||
reason = S("There’s a rooted plant in the level.")
|
||||
elseif error_detail == "schematic_load_error" then
|
||||
reason = S("Error while loading schematic file.")
|
||||
else
|
||||
reason = error_detail
|
||||
end
|
||||
|
@ -95,9 +95,14 @@ local flat_index_to_pos = function(index, size)
|
||||
end
|
||||
|
||||
local analyze_level_schematic = function(filename, levels_path, level_data_entry)
|
||||
if not lzr_util.file_exists(levels_path, filename) then
|
||||
return false, "file_nonexistant"
|
||||
end
|
||||
local filepath = levels_path .. "/" ..filename
|
||||
local schem = minetest.read_schematic(filepath, {write_yslice_prob="none"})
|
||||
assert(schem, "Could not load level file: "..filename)
|
||||
if not schem then
|
||||
return false, "schematic_load_error"
|
||||
end
|
||||
level_data_entry.contains_rotatable_block = false
|
||||
level_data_entry.treasures = 0
|
||||
level_data_entry.size = schem.size
|
||||
|
@ -1,2 +1,2 @@
|
||||
name = lzr_levels
|
||||
depends = lzr_core, lzr_mapgen, lzr_globals, lzr_hook, lzr_gamestate, lzr_ambience, lzr_csv, lzr_weather, lzr_laser, lzr_treasure, lzr_world, lzr_triggers, lzr_slowdown
|
||||
depends = lzr_core, lzr_mapgen, lzr_globals, lzr_hook, lzr_gamestate, lzr_ambience, lzr_csv, lzr_weather, lzr_laser, lzr_treasure, lzr_world, lzr_triggers, lzr_slowdown, lzr_util
|
||||
|
@ -83,3 +83,16 @@ lzr_util.hsv_to_rgb = function(h, s, v)
|
||||
|
||||
return math.floor(r * max_value), math.floor(g * max_value), math.floor(b * max_value)
|
||||
end
|
||||
|
||||
-- Returns true if the given file exists, false otherwise.
|
||||
-- * path: Path to file (without file name)
|
||||
-- * filename: File name of file (without path)
|
||||
lzr_util.file_exists = function(path, filename)
|
||||
local levels = minetest.get_dir_list(path, false)
|
||||
for l=1, #levels do
|
||||
if levels[l] == filename then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user