From dcd0b63f645bccf497a030b6b1cec97178542eb1 Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Sun, 19 May 2013 19:46:50 +0200 Subject: [PATCH] Dont load mods that have no entry in world.mt --- src/mods.cpp | 11 +++++------ src/server.cpp | 10 ++-------- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/mods.cpp b/src/mods.cpp index 64c319992..a0a37afb9 100644 --- a/src/mods.cpp +++ b/src/mods.cpp @@ -220,7 +220,7 @@ ModConfiguration::ModConfiguration(std::string worldpath) Settings worldmt_settings; worldmt_settings.readConfigFile(worldmt.c_str()); std::vector names = worldmt_settings.getNames(); - std::set exclude_mod_names; + std::set include_mod_names; for(std::vector::iterator it = names.begin(); it != names.end(); ++it) { @@ -229,14 +229,13 @@ ModConfiguration::ModConfiguration(std::string worldpath) // explicitely excluded. if mod is not mentioned at all, it is // enabled. So by default, all installed mods are enabled. if (name.compare(0,9,"load_mod_") == 0 && - !worldmt_settings.getBool(name)) + worldmt_settings.getBool(name)) { - exclude_mod_names.insert(name.substr(9)); + include_mod_names.insert(name.substr(9)); } } - // Collect all mods in gamespec.addon_mods_paths, - // excluding those in the set exclude_mod_names + // Collect all mods that are also in include_mod_names std::vector addon_mods; for(std::set::const_iterator it_path = gamespec.addon_mods_paths.begin(); it_path != gamespec.addon_mods_paths.end(); ++it_path) @@ -246,7 +245,7 @@ ModConfiguration::ModConfiguration(std::string worldpath) it != addon_mods_in_path.end(); ++it) { ModSpec& mod = *it; - if(exclude_mod_names.count(mod.name) == 0) + if(include_mod_names.count(mod.name) != 0) addon_mods.push_back(mod); } } diff --git a/src/server.cpp b/src/server.cpp index 40a4f8a02..0d724b1cb 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -727,19 +727,13 @@ Server::Server( std::string worldmt = m_path_world + DIR_DELIM + "world.mt"; worldmt_settings.readConfigFile(worldmt.c_str()); std::vector names = worldmt_settings.getNames(); - std::set exclude_mod_names; std::set load_mod_names; for(std::vector::iterator it = names.begin(); it != names.end(); ++it) { std::string name = *it; - if (name.compare(0,9,"load_mod_")==0) - { - if(worldmt_settings.getBool(name)) - load_mod_names.insert(name.substr(9)); - else - exclude_mod_names.insert(name.substr(9)); - } + if(name.compare(0,9,"load_mod_")==0 && worldmt_settings.getBool(name)) + load_mod_names.insert(name.substr(9)); } // complain about mods declared to be loaded, but not found for(std::vector::iterator it = m_mods.begin(); -- 2.25.1