Give subgames the ability to disallow specific mapgens (#6792)

This commit is contained in:
Ezhh 2017-12-16 16:02:08 +00:00 committed by SmallJoker
parent 770eb09adc
commit 649eef9e4f
3 changed files with 47 additions and 15 deletions

View File

@ -551,7 +551,7 @@ end
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
if INIT == "mainmenu" then if INIT == "mainmenu" then
function core.get_game(index) function core.get_game(index)
local games = game.get_games() local games = core.get_games()
if index > 0 and index <= #games then if index > 0 and index <= #games then
return games[index] return games[index]

View File

@ -15,11 +15,39 @@
--with this program; if not, write to the Free Software Foundation, Inc., --with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local worldname = ""
local function create_world_formspec(dialogdata) local function create_world_formspec(dialogdata)
local mapgens = core.get_mapgen_names() local mapgens = core.get_mapgen_names()
local current_seed = core.settings:get("fixed_map_seed") or "" local current_seed = core.settings:get("fixed_map_seed") or ""
local current_mg = core.settings:get("mg_name") local current_mg = core.settings:get("mg_name")
local gameid = core.settings:get("menu_last_game")
local game, gameidx = nil , 0
if gameid ~= nil then
game, gameidx = gamemgr.find_by_gameid(gameid)
if gameidx == nil then
gameidx = 0
end
end
local gamepath = core.get_game(gameidx).path
local gameconfig = Settings(gamepath.."/game.conf")
local disallowed_mapgens = (gameconfig:get("disallowed_mapgens") or ""):split()
for key, value in pairs(disallowed_mapgens) do
disallowed_mapgens[key] = value:trim()
end
if disallowed_mapgens then
for i = #mapgens, 1, -1 do
if table.indexof(disallowed_mapgens, mapgens[i]) > 0 then
table.remove(mapgens, i)
end
end
end
local mglist = "" local mglist = ""
local selindex = 1 local selindex = 1
@ -32,23 +60,12 @@ local function create_world_formspec(dialogdata)
mglist = mglist .. v .. "," mglist = mglist .. v .. ","
end end
mglist = mglist:sub(1, -2) mglist = mglist:sub(1, -2)
local gameid = core.settings:get("menu_last_game")
local game, gameidx = nil , 0
if gameid ~= nil then
game, gameidx = gamemgr.find_by_gameid(gameid)
if gameidx == nil then
gameidx = 0
end
end
current_seed = core.formspec_escape(current_seed) current_seed = core.formspec_escape(current_seed)
local retval = local retval =
"size[11.5,6.5,true]" .. "size[11.5,6.5,true]" ..
"label[2,0;" .. fgettext("World name") .. "]".. "label[2,0;" .. fgettext("World name") .. "]"..
"field[4.5,0.4;6,0.5;te_world_name;;]" .. "field[4.5,0.4;6,0.5;te_world_name;;" .. minetest.formspec_escape(worldname) .. "]" ..
"label[2,1;" .. fgettext("Seed") .. "]".. "label[2,1;" .. fgettext("Seed") .. "]"..
"field[4.5,1.4;6,0.5;te_seed;;".. current_seed .. "]" .. "field[4.5,1.4;6,0.5;te_seed;;".. current_seed .. "]" ..
@ -121,10 +138,14 @@ local function create_world_buttonhandler(this, fields)
return true return true
end end
worldname = fields.te_world_name
if fields["games"] then if fields["games"] then
local gameindex = core.get_textlist_index("games")
core.settings:set("menu_last_game", gamemgr.games[gameindex].id)
return true return true
end end
if fields["world_create_cancel"] then if fields["world_create_cancel"] then
this:delete() this:delete()
return true return true
@ -135,6 +156,7 @@ end
function create_create_world_dlg(update_worldlistfilter) function create_create_world_dlg(update_worldlistfilter)
worldname = ""
local retval = dialog_create("sp_create_world", local retval = dialog_create("sp_create_world",
create_world_formspec, create_world_formspec,
create_world_buttonhandler, create_world_buttonhandler,

View File

@ -53,7 +53,7 @@ Games are looked up from:
where `gameid` is unique to each game. where `gameid` is unique to each game.
The game directory contains the file `game.conf`, which contains these fields: The game directory contains the file `game.conf`, which contains:
name = <Human-readable full name of the game> name = <Human-readable full name of the game>
@ -61,6 +61,16 @@ e.g.
name = Minetest name = Minetest
Optionally, game.conf can also contain:
disallowed_mapgens = <comma-separated mapgens>
e.g.
disallowed_mapgens = v5,v6,flat
These mapgens are removed from the list of mapgens for the game.
The game directory can contain the file minetest.conf, which will be used The game directory can contain the file minetest.conf, which will be used
to set default settings when running the particular game. to set default settings when running the particular game.
It can also contain a settingtypes.txt in the same format as the one in builtin. It can also contain a settingtypes.txt in the same format as the one in builtin.