aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTraesh <traesh@farahlon.com>2017-01-01 03:22:05 +0100
committerjoschiwald <joschiwald.trinity@gmail.com>2017-01-01 03:23:04 +0100
commit96f7ce4bfa0942ee75362d94a21435dbe388ffb3 (patch)
treec5d439c1d90e3ac22f7f2540b6b909707aaf7874
parentab06ae799ebefd53a9420aa3642c7354f84e4696 (diff)
Core/Scripting: Added missing hotswap code for SceneScripts
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp
index 726aa79fcca..0aaa76a2bcd 100644
--- a/src/server/game/Scripting/ScriptMgr.cpp
+++ b/src/server/game/Scripting/ScriptMgr.cpp
@@ -662,6 +662,35 @@ private:
bool swapped;
};
+/// This hook is responsible for swapping SceneScript's
+template<typename Base>
+class ScriptRegistrySwapHooks<SceneScript, Base>
+ : public ScriptRegistrySwapHookBase
+{
+public:
+ ScriptRegistrySwapHooks() : swapped(false) { }
+
+ void BeforeReleaseContext(std::string const& context) final override
+ {
+ auto const bounds = static_cast<Base*>(this)->_ids_of_contexts.equal_range(context);
+ if (bounds.first != bounds.second)
+ swapped = true;
+ }
+
+ void BeforeSwapContext(bool /*initialize*/) override
+ {
+ swapped = false;
+ }
+
+ void BeforeUnload() final override
+ {
+ ASSERT(!swapped);
+ }
+
+private:
+ bool swapped;
+};
+
/// This hook is responsible for swapping SpellScriptLoader's
template<typename Base>
class ScriptRegistrySwapHooks<SpellScriptLoader, Base>