Fix mod paths

This commit is contained in:
Perttu Ahola 2012-03-20 01:06:44 +02:00
parent db4911f956
commit 50621ffe85
3 changed files with 17 additions and 23 deletions

@ -885,25 +885,13 @@ Server::Server(
infostream<<"- world: "<<m_path_world<<std::endl; infostream<<"- world: "<<m_path_world<<std::endl;
infostream<<"- config: "<<m_path_config<<std::endl; infostream<<"- config: "<<m_path_config<<std::endl;
infostream<<"- game: "<<m_gamespec.path<<std::endl; infostream<<"- game: "<<m_gamespec.path<<std::endl;
for(std::set<std::string>::const_iterator i = m_gamespec.addon_paths.begin();
i != m_gamespec.addon_paths.end(); i++)
infostream<<"- addons: "<<(*i)<<std::endl;
// Path to builtin.lua
std::string builtinpath = porting::path_share + DIR_DELIM + "builtin"
+ DIR_DELIM + "builtin.lua";
// Add default global mod search path
m_modspaths.push_front(m_gamespec.path + DIR_DELIM "mods");
// Add world mod search path // Add world mod search path
m_modspaths.push_front(m_path_world + DIR_DELIM + "worldmods"); m_modspaths.push_front(m_path_world + DIR_DELIM + "worldmods");
// Add addon mod search path // Add addon mod search path
for(std::set<std::string>::const_iterator i = m_gamespec.addon_paths.begin(); for(std::set<std::string>::const_iterator i = m_gamespec.mods_paths.begin();
i != m_gamespec.addon_paths.end(); i++) i != m_gamespec.mods_paths.end(); i++)
m_modspaths.push_front((*i) + DIR_DELIM + "mods"); m_modspaths.push_front((*i));
// Add simple user mod search path
m_modspaths.push_front(porting::path_user + DIR_DELIM + "mods"
+ DIR_DELIM + m_gamespec.id);
// Print out mod search paths // Print out mod search paths
for(core::list<std::string>::Iterator i = m_modspaths.begin(); for(core::list<std::string>::Iterator i = m_modspaths.begin();
@ -912,6 +900,10 @@ Server::Server(
infostream<<"- mods: "<<modspath<<std::endl; infostream<<"- mods: "<<modspath<<std::endl;
} }
// Path to builtin.lua
std::string builtinpath = porting::path_share + DIR_DELIM + "builtin"
+ DIR_DELIM + "builtin.lua";
// Create world if it doesn't exist // Create world if it doesn't exist
if(!initializeWorld(m_path_world, m_gamespec.id)) if(!initializeWorld(m_path_world, m_gamespec.id))
throw ServerError("Failed to initialize world"); throw ServerError("Failed to initialize world");

@ -38,14 +38,16 @@ SubgameSpec findSubgame(const std::string &id)
} }
if(!fs::PathExists(game_path)) if(!fs::PathExists(game_path))
return SubgameSpec(); return SubgameSpec();
// Find addon directories // Find mod directories
std::set<std::string> addon_paths; std::set<std::string> mods_paths;
mods_paths.insert(game_path + DIR_DELIM + "mods");
if(!user_game) if(!user_game)
addon_paths.insert(share + DIR_DELIM + "addons" + DIR_DELIM + id); mods_paths.insert(share + DIR_DELIM + "mods" + DIR_DELIM + id);
addon_paths.insert(user + DIR_DELIM + "addons" + DIR_DELIM + id); if(user != share || user_game)
mods_paths.insert(user + DIR_DELIM + "mods" + DIR_DELIM + id);
// TODO: Read proper name from game_path/game.conf // TODO: Read proper name from game_path/game.conf
std::string game_name = id; std::string game_name = id;
return SubgameSpec(id, game_path, addon_paths, game_name); return SubgameSpec(id, game_path, mods_paths, game_name);
} }
std::set<std::string> getAvailableGameIds() std::set<std::string> getAvailableGameIds()

@ -28,16 +28,16 @@ struct SubgameSpec
{ {
std::string id; // "" = game does not exist std::string id; // "" = game does not exist
std::string path; std::string path;
std::set<std::string> addon_paths; std::set<std::string> mods_paths;
std::string name; std::string name;
SubgameSpec(const std::string &id_="", SubgameSpec(const std::string &id_="",
const std::string &path_="", const std::string &path_="",
const std::set<std::string> &addon_paths_=std::set<std::string>(), const std::set<std::string> &mods_paths_=std::set<std::string>(),
const std::string &name_=""): const std::string &name_=""):
id(id_), id(id_),
path(path_), path(path_),
addon_paths(addon_paths_), mods_paths(mods_paths_),
name(name_) name(name_)
{} {}