diff --git a/source/game/game/script_manager.cpp b/source/game/game/script_manager.cpp index afb75c21a..2332332c3 100644 --- a/source/game/game/script_manager.cpp +++ b/source/game/game/script_manager.cpp @@ -24,6 +24,8 @@ #include "game_camera.h" #include "game.h" #include "config.h" +#include +#include #include "leak_dumper.h" @@ -552,34 +554,39 @@ namespace Game { luaScript.registerFunction(getFactionPlayerType, "getFactionPlayerType"); - map scripts; - map::iterator iter; + map>> scripts; + map>>::iterator iter; + const Script* script; //load faction code for (int i = 0; i < world->getFactionCount(); ++i) { FactionType const* type = world->getFaction(i)->getType(); for (int j = 0; j < type->getScriptCount(); j++) { - const Script* script = type->getScript(j); + script = type->getScript(j); iter = scripts.find(script->getName()); if (iter == scripts.end()) - scripts[script->getName()] = *script; - else - iter->second.appendCode(script->getCode()); + scripts[script->getName()] = pair>(*script, { script->getCode() }); + else if (find(iter->second.second.begin(), iter->second.second.end(), script->getCode()) == iter->second.second.end()) { + iter->second.second.push_back(script->getCode()); + iter->second.first.appendCode(script->getCode()); + } } } //load scenario code for (int i = 0; i < scenario->getScriptCount(); ++i) { - const Script* script = scenario->getScript(i); + script = scenario->getScript(i); iter = scripts.find(script->getName()); if (iter == scripts.end()) - scripts[script->getName()] = *script; - else - iter->second.appendCode(script->getCode()); + scripts[script->getName()] = pair>(*script, { script->getCode() }); + else if (find(iter->second.second.begin(), iter->second.second.end(), script->getCode()) == iter->second.second.end()) { + iter->second.second.push_back(script->getCode()); + iter->second.first.appendCode(script->getCode()); + } } for (iter = scripts.begin(); iter != scripts.end(); ++iter) { - luaScript.loadCode("function " + iter->second.getName() + "()" + - iter->second.getCode() + "end\n", iter->second.getName()); + luaScript.loadCode("function " + iter->second.first.getName() + "()" + + iter->second.first.getCode() + "end\n", iter->second.first.getName()); } //setup message box