Core/Game: Add a dynamic script reloader which reloads scripts modules on changes.

* is responsible for registering plain modules.
* requires compilation with the `WITH_DYNAMIC_LINKING` flag.
* requires further support of the ScriptMgr.
This commit is contained in:
Aokromes
2016-08-10 03:29:20 +02:00
parent 3d25c14e74
commit e8e164e28f
8 changed files with 1669 additions and 6 deletions

View File

@@ -837,9 +837,6 @@ class TC_GAME_API GroupScript : public ScriptObject
virtual void OnDisband(Group* /*group*/) { }
};
// Placed here due to ScriptRegistry::AddScript dependency.
#define sScriptMgr ScriptMgr::instance()
// namespace
// {
typedef std::list<std::string> UnusedScriptNamesContainer;
@@ -855,12 +852,13 @@ class TC_GAME_API ScriptMgr
ScriptMgr();
virtual ~ScriptMgr();
void FillSpellSummary();
void LoadDatabase();
public: /* Initialization */
static ScriptMgr* instance();
void Initialize();
void LoadDatabase();
void FillSpellSummary();
const char* ScriptsVersion() const { return "Integrated Trinity Scripts"; }
@@ -876,6 +874,12 @@ class TC_GAME_API ScriptMgr
_script_loader_callback = script_loader_callback;
}
public: /* Script contexts */
void BeginScriptContext(std::string const& context);
void FinishScriptContext();
void ReleaseScriptContext(std::string const& context);
public: /* Unloading */
void Unload();
@@ -1106,13 +1110,16 @@ class TC_GAME_API ScriptMgr
bool IsScriptScheduled() const { return _scheduledScripts > 0; }
private:
uint32 _scriptCount;
//atomic op counter for active scripts amount
std::atomic<uint32> _scheduledScripts;
ScriptLoaderCallbackType _script_loader_callback;
std::string _currentContext;
};
#define sScriptMgr ScriptMgr::instance()
#endif