Core/Game: Rewrote the ScriptMgr to support script reloading.

* Finally this commit enables dynamic script hotswapping
  and finished the PR #15671.
* Split the storage layout to use optimized storages
  for database bound and unbound scripts.
* Add several unload workers to reload scripts correctly
  -> Requires further investigation.
* Fixes memory leaks in ScriptMgr when dropping invalid scripts.
* Fixes VehicleScripts
* Makes OutdoorPvP scripts reloadable
* Makes InstanceMapScripts reloadable
* Makes CommandScripts reloadable
This commit is contained in:
Naios
2016-03-11 17:09:26 +01:00
parent bc0f2b6e5a
commit 9cc97f226d
20 changed files with 1084 additions and 304 deletions

View File

@@ -29,6 +29,8 @@
#include "Pet.h"
#include "WorldSession.h"
#include "Opcodes.h"
#include "ScriptReloadMgr.h"
#include "ScriptMgr.h"
BossBoundaryData::~BossBoundaryData()
{
@@ -36,6 +38,18 @@ BossBoundaryData::~BossBoundaryData()
delete it->Boundary;
}
InstanceScript::InstanceScript(Map* map) : instance(map), completedEncounters(0)
{
#ifdef TRINITY_API_USE_DYNAMIC_LINKING
uint32 scriptId = sObjectMgr->GetInstanceTemplate(map->GetId())->ScriptId;
auto const scriptname = sObjectMgr->GetScriptName(scriptId);
ASSERT(!scriptname.empty());
// Acquire a strong reference from the script module
// to keep it loaded until this object is destroyed.
module_reference = sScriptMgr->AcquireModuleReferenceOfScriptName(scriptname);
#endif // #ifndef TRINITY_API_USE_DYNAMIC_LINKING
}
void InstanceScript::SaveToDB()
{
std::string data = GetSaveData();