Core/Scripts: Fixed uninitialized variable and memory leaks

This commit is contained in:
Shauren
2013-08-26 17:38:02 +02:00
parent 664ed816df
commit 4f44cdf2b5
4 changed files with 26 additions and 15 deletions

View File

@@ -33,6 +33,12 @@
#include "Player.h"
#include "WorldPacket.h"
namespace
{
typedef std::set<ScriptObject*> ExampleScriptContainer;
ExampleScriptContainer ExampleScripts;
}
// This is the global static registry of scripts.
template<class TScript>
class ScriptRegistry
@@ -104,6 +110,9 @@ class ScriptRegistry
if (script->GetName().find("example") == std::string::npos && script->GetName().find("Smart") == std::string::npos)
TC_LOG_ERROR(LOG_FILTER_SQL, "Script named '%s' does not have a script name assigned in database.",
script->GetName().c_str());
// These scripts don't get stored anywhere so throw them into this to avoid leaking memory
ExampleScripts.insert(script);
}
}
else
@@ -160,7 +169,11 @@ class ScriptRegistry
if (!V) \
return R;
struct TSpellSummary
{
uint8 Targets; // set of enum SelectTarget
uint8 Effects; // set of enum SelectEffect
} *SpellSummary;
ScriptMgr::ScriptMgr()
: _scriptCount(0), _scheduledScripts(0)
@@ -220,6 +233,13 @@ void ScriptMgr::Unload()
SCR_CLEAR(UnitScript);
#undef SCR_CLEAR
for (ExampleScriptContainer::iterator itr = ExampleScripts.begin(); itr != ExampleScripts.end(); ++itr)
delete *itr;
ExampleScripts.clear();
delete[] SpellSummary;
delete[] UnitAI::AISpellInfo;
}
void ScriptMgr::LoadDatabase()
@@ -227,14 +247,10 @@ void ScriptMgr::LoadDatabase()
sScriptSystemMgr->LoadScriptWaypoints();
}
struct TSpellSummary
{
uint8 Targets; // set of enum SelectTarget
uint8 Effects; // set of enum SelectEffect
} *SpellSummary;
void ScriptMgr::FillSpellSummary()
{
UnitAI::FillAISpellInfo();
SpellSummary = new TSpellSummary[sSpellMgr->GetSpellInfoStoreSize()];
SpellInfo const* pTempSpell;