mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 15:40:45 +01:00
* Get rid of virtual function calls completely, seeing as they weren't necessary. Thanks to Ge0rG and Derex for enlightening me about this.....
* Also add map ID for EoE instance script (thanks Silinoron). --HG-- branch : trunk
This commit is contained in:
@@ -1066,187 +1066,147 @@ bool ScriptMgr::OnCriteriaCheck(AchievementCriteriaData const* data, Player* sou
|
||||
return tmpscript->OnCheck(source, target);
|
||||
}
|
||||
|
||||
void SpellHandlerScript::RegisterSelf()
|
||||
SpellHandlerScript::SpellHandlerScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<SpellHandlerScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void AuraHandlerScript::RegisterSelf()
|
||||
AuraHandlerScript::AuraHandlerScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<AuraHandlerScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void ServerScript::RegisterSelf()
|
||||
ServerScript::ServerScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<ServerScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void WorldScript::RegisterSelf()
|
||||
WorldScript::WorldScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<WorldScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void FormulaScript::RegisterSelf()
|
||||
FormulaScript::FormulaScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<FormulaScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void WorldMapScript::RegisterSelf()
|
||||
WorldMapScript::WorldMapScript(const char* name, uint32 mapId)
|
||||
: ScriptObject(name), MapScript<Map>(mapId)
|
||||
{
|
||||
if (GetEntry() && !GetEntry()->IsContinent())
|
||||
sLog.outError("WorldMapScript for map %u is invalid.", mapId);
|
||||
|
||||
ScriptMgr::ScriptRegistry<WorldMapScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void InstanceMapScript::RegisterSelf()
|
||||
InstanceMapScript::InstanceMapScript(const char* name, uint32 mapId)
|
||||
: ScriptObject(name), MapScript<InstanceMap>(0)
|
||||
{
|
||||
if (GetEntry() && !GetEntry()->IsDungeon())
|
||||
sLog.outError("InstanceMapScript for map %u is invalid.", mapId);
|
||||
|
||||
ScriptMgr::ScriptRegistry<InstanceMapScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void BattlegroundMapScript::RegisterSelf()
|
||||
BattlegroundMapScript::BattlegroundMapScript(const char* name, uint32 mapId)
|
||||
: ScriptObject(name), MapScript<BattlegroundMap>(mapId)
|
||||
{
|
||||
if (GetEntry() && !GetEntry()->IsBattleground())
|
||||
sLog.outError("BattlegroundMapScript for map %u is invalid.", mapId);
|
||||
|
||||
ScriptMgr::ScriptRegistry<BattlegroundMapScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void AreaTriggerScript::RegisterSelf()
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<AreaTriggerScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void ItemScript::RegisterSelf()
|
||||
ItemScript::ItemScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<ItemScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void CreatureScript::RegisterSelf()
|
||||
CreatureScript::CreatureScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<CreatureScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void GameObjectScript::RegisterSelf()
|
||||
GameObjectScript::GameObjectScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<GameObjectScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void BattlegroundScript::RegisterSelf()
|
||||
AreaTriggerScript::AreaTriggerScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<AreaTriggerScript>::AddScript(this);
|
||||
}
|
||||
|
||||
BattlegroundScript::BattlegroundScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<BattlegroundScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void OutdoorPvPScript::RegisterSelf()
|
||||
OutdoorPvPScript::OutdoorPvPScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<OutdoorPvPScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void CommandScript::RegisterSelf()
|
||||
CommandScript::CommandScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<CommandScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void WeatherScript::RegisterSelf()
|
||||
WeatherScript::WeatherScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<WeatherScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void AuctionHouseScript::RegisterSelf()
|
||||
AuctionHouseScript::AuctionHouseScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<AuctionHouseScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void ConditionScript::RegisterSelf()
|
||||
ConditionScript::ConditionScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<ConditionScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void VehicleScript::RegisterSelf()
|
||||
VehicleScript::VehicleScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<VehicleScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void DynamicObjectScript::RegisterSelf()
|
||||
DynamicObjectScript::DynamicObjectScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<DynamicObjectScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void TransportScript::RegisterSelf()
|
||||
TransportScript::TransportScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<TransportScript>::AddScript(this);
|
||||
}
|
||||
|
||||
void AchievementCriteriaScript::RegisterSelf()
|
||||
AchievementCriteriaScript::AchievementCriteriaScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<AchievementCriteriaScript>::AddScript(this);
|
||||
}
|
||||
|
||||
template<class TScript>
|
||||
void ScriptMgr::ScriptRegistry<TScript>::AddScript(TScript* const script)
|
||||
{
|
||||
ASSERT(script);
|
||||
|
||||
// See if the script is using the same memory as another script. If this happens, it means that
|
||||
// someone forgot to allocate new memory for a script.
|
||||
for (ScriptMapIterator it = ScriptPointerList.begin(); it != ScriptPointerList.end(); ++it)
|
||||
{
|
||||
if (it->second == script)
|
||||
{
|
||||
sLog.outError("Script '%s' forgot to allocate memory, so this script and/or the script before that can't work.",
|
||||
script->GetName().c_str());
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (script->IsDatabaseBound())
|
||||
{
|
||||
// Get an ID for the script. An ID only exists if it's a script that is assigned in the database
|
||||
// through a script name (or similar).
|
||||
uint32 id = GetScriptId(script->GetName().c_str());
|
||||
if (id)
|
||||
{
|
||||
// Try to find an existing script.
|
||||
bool existing = false;
|
||||
for (ScriptMapIterator it = ScriptPointerList.begin(); it != ScriptPointerList.end(); ++it)
|
||||
{
|
||||
// If the script names match...
|
||||
if (it->second->GetName() == script->GetName())
|
||||
{
|
||||
// ... It exists.
|
||||
existing = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If the script isn't assigned -> assign it!
|
||||
if (!existing)
|
||||
{
|
||||
ScriptPointerList[id] = script;
|
||||
sScriptMgr.IncrementScriptCount();
|
||||
}
|
||||
else
|
||||
{
|
||||
// If the script is already assigned -> delete it!
|
||||
sLog.outError("Script '%s' already assigned with the same script name, so the script can't work.",
|
||||
script->GetName().c_str());
|
||||
|
||||
delete script;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// The script uses a script name from database, but isn't assigned to anything.
|
||||
if (script->GetName().find("example") == std::string::npos)
|
||||
sLog.outErrorDb("Script named '%s' does not have a script name assigned in database.",
|
||||
script->GetName().c_str());
|
||||
|
||||
delete script;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// We're dealing with a code-only script; just add it.
|
||||
ScriptPointerList[_scriptIdCounter++] = script;
|
||||
sScriptMgr.IncrementScriptCount();
|
||||
}
|
||||
}
|
||||
|
||||
// Instantiate static members of ScriptMgr::ScriptRegistry.
|
||||
template<class TScript> std::map<uint32, TScript*> ScriptMgr::ScriptRegistry<TScript>::ScriptPointerList;
|
||||
template<class TScript> uint32 ScriptMgr::ScriptRegistry<TScript>::_scriptIdCounter;
|
||||
|
||||
@@ -91,7 +91,7 @@ void DoScriptText(int32 textEntry, WorldObject* pSource, Unit *pTarget = NULL);
|
||||
MyScriptType(const char* name, uint32 someId)
|
||||
: ScriptObject(name), _someId(someId)
|
||||
{
|
||||
RegisterSelf();
|
||||
ScriptMgr::ScriptRegistry<MyScriptType>::AddScript(this);
|
||||
}
|
||||
|
||||
public:
|
||||
@@ -107,14 +107,6 @@ void DoScriptText(int32 textEntry, WorldObject* pSource, Unit *pTarget = NULL);
|
||||
virtual void OnAnotherEvent(uint32 someArg) = 0;
|
||||
}
|
||||
|
||||
RegisterSelf() should be defined in ScriptMgr.cpp, and simply registers the script
|
||||
with ScriptRegistry:
|
||||
|
||||
void MyScriptType::RegisterSelf()
|
||||
{
|
||||
ScriptMgr::ScriptRegistry<MyScriptType>::AddScript(this);
|
||||
}
|
||||
|
||||
Next, you need to add a specialization for ScriptRegistry. Put this in the bottom of
|
||||
ScriptMgr.cpp:
|
||||
|
||||
@@ -168,9 +160,6 @@ class ScriptObject
|
||||
|
||||
protected:
|
||||
|
||||
// Call this to register the script with ScriptMgr.
|
||||
virtual void RegisterSelf() = 0;
|
||||
|
||||
ScriptObject(const char* name)
|
||||
: _name(std::string(name))
|
||||
{
|
||||
@@ -204,17 +193,9 @@ template<class TObject> class UpdatableScript
|
||||
|
||||
class SpellHandlerScript : public ScriptObject
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
SpellHandlerScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
SpellHandlerScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -226,17 +207,9 @@ class SpellHandlerScript : public ScriptObject
|
||||
|
||||
class AuraHandlerScript : public ScriptObject
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
AuraHandlerScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
AuraHandlerScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -248,17 +221,9 @@ class AuraHandlerScript : public ScriptObject
|
||||
|
||||
class ServerScript : public ScriptObject
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
ServerScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
ServerScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -290,17 +255,9 @@ class ServerScript : public ScriptObject
|
||||
|
||||
class WorldScript : public ScriptObject, public UpdatableScript<void>
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
WorldScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
WorldScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -331,17 +288,9 @@ class WorldScript : public ScriptObject, public UpdatableScript<void>
|
||||
|
||||
class FormulaScript : public ScriptObject
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
FormulaScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
FormulaScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -412,38 +361,16 @@ template<class TMap> class MapScript : public UpdatableScript<TMap>
|
||||
|
||||
class WorldMapScript : public ScriptObject, public MapScript<Map>
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
WorldMapScript(const char* name, uint32 mapId)
|
||||
: ScriptObject(name), MapScript<Map>(mapId)
|
||||
{
|
||||
if (GetEntry() && !GetEntry()->IsContinent())
|
||||
sLog.outError("WorldMapScript for map %u is invalid.", mapId);
|
||||
else
|
||||
RegisterSelf();
|
||||
}
|
||||
WorldMapScript(const char* name, uint32 mapId);
|
||||
};
|
||||
|
||||
class InstanceMapScript : public ScriptObject, public MapScript<InstanceMap>
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
InstanceMapScript(const char* name, uint32 mapId = 0)
|
||||
: ScriptObject(name), MapScript<InstanceMap>(mapId)
|
||||
{
|
||||
if (GetEntry() && !GetEntry()->IsDungeon())
|
||||
sLog.outError("InstanceMapScript for map %u is invalid.", mapId);
|
||||
else
|
||||
RegisterSelf();
|
||||
}
|
||||
InstanceMapScript(const char* name, uint32 mapId);
|
||||
|
||||
public:
|
||||
|
||||
@@ -457,31 +384,14 @@ class BattlegroundMapScript : public ScriptObject, public MapScript<Battleground
|
||||
{
|
||||
protected:
|
||||
|
||||
BattlegroundMapScript(const char* name, uint32 mapId)
|
||||
: ScriptObject(name), MapScript<BattlegroundMap>(mapId)
|
||||
{
|
||||
if (GetEntry() && !GetEntry()->IsBattleground())
|
||||
sLog.outError("BattlegroundMapScript for map %u is invalid.", mapId);
|
||||
else
|
||||
RegisterSelf();
|
||||
}
|
||||
|
||||
void RegisterSelf();
|
||||
BattlegroundMapScript(const char* name, uint32 mapId);
|
||||
};
|
||||
|
||||
class ItemScript : public ScriptObject
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
ItemScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
ItemScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -502,17 +412,9 @@ class ItemScript : public ScriptObject
|
||||
|
||||
class CreatureScript : public ScriptObject, public UpdatableScript<Creature>
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
CreatureScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
CreatureScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -551,17 +453,9 @@ class CreatureScript : public ScriptObject, public UpdatableScript<Creature>
|
||||
|
||||
class GameObjectScript : public ScriptObject, public UpdatableScript<GameObject>
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
GameObjectScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
GameObjectScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -594,17 +488,9 @@ class GameObjectScript : public ScriptObject, public UpdatableScript<GameObject>
|
||||
|
||||
class AreaTriggerScript : public ScriptObject
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
AreaTriggerScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
AreaTriggerScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -616,17 +502,9 @@ class AreaTriggerScript : public ScriptObject
|
||||
|
||||
class BattlegroundScript : public ScriptObject
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
BattlegroundScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
BattlegroundScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -638,17 +516,9 @@ class BattlegroundScript : public ScriptObject
|
||||
|
||||
class OutdoorPvPScript : public ScriptObject
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
OutdoorPvPScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
OutdoorPvPScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -660,17 +530,9 @@ class OutdoorPvPScript : public ScriptObject
|
||||
|
||||
class CommandScript : public ScriptObject
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
CommandScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
CommandScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -680,17 +542,9 @@ class CommandScript : public ScriptObject
|
||||
|
||||
class WeatherScript : public ScriptObject, public UpdatableScript<Weather>
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
WeatherScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
WeatherScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -702,17 +556,9 @@ class WeatherScript : public ScriptObject, public UpdatableScript<Weather>
|
||||
|
||||
class AuctionHouseScript : public ScriptObject
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
AuctionHouseScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
AuctionHouseScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -731,17 +577,9 @@ class AuctionHouseScript : public ScriptObject
|
||||
|
||||
class ConditionScript : public ScriptObject
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
ConditionScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
ConditionScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -753,17 +591,9 @@ class ConditionScript : public ScriptObject
|
||||
|
||||
class VehicleScript : public ScriptObject
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
VehicleScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
VehicleScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -791,32 +621,16 @@ class VehicleScript : public ScriptObject
|
||||
|
||||
class DynamicObjectScript : public ScriptObject, public UpdatableScript<DynamicObject>
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
DynamicObjectScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
DynamicObjectScript(const char* name);
|
||||
};
|
||||
|
||||
class TransportScript : public ScriptObject, public UpdatableScript<Transport>
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
TransportScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
TransportScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -837,17 +651,9 @@ class TransportScript : public ScriptObject, public UpdatableScript<Transport>
|
||||
|
||||
class AchievementCriteriaScript : public ScriptObject
|
||||
{
|
||||
private:
|
||||
|
||||
void RegisterSelf();
|
||||
|
||||
protected:
|
||||
|
||||
AchievementCriteriaScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
RegisterSelf();
|
||||
}
|
||||
AchievementCriteriaScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -1047,6 +853,76 @@ class ScriptMgr
|
||||
// after server startup.
|
||||
static ScriptMap ScriptPointerList;
|
||||
|
||||
static void AddScript(TScript* const script)
|
||||
{
|
||||
ASSERT(script);
|
||||
|
||||
// See if the script is using the same memory as another script. If this happens, it means that
|
||||
// someone forgot to allocate new memory for a script.
|
||||
for (ScriptMapIterator it = ScriptPointerList.begin(); it != ScriptPointerList.end(); ++it)
|
||||
{
|
||||
if (it->second == script)
|
||||
{
|
||||
sLog.outError("Script '%s' has same memory pointer as '%s'.",
|
||||
script->GetName().c_str(), it->second->GetName().c_str());
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (script->IsDatabaseBound())
|
||||
{
|
||||
// Get an ID for the script. An ID only exists if it's a script that is assigned in the database
|
||||
// through a script name (or similar).
|
||||
uint32 id = GetScriptId(script->GetName().c_str());
|
||||
if (id)
|
||||
{
|
||||
// Try to find an existing script.
|
||||
bool existing = false;
|
||||
for (ScriptMapIterator it = ScriptPointerList.begin(); it != ScriptPointerList.end(); ++it)
|
||||
{
|
||||
// If the script names match...
|
||||
if (it->second->GetName() == script->GetName())
|
||||
{
|
||||
// ... It exists.
|
||||
existing = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If the script isn't assigned -> assign it!
|
||||
if (!existing)
|
||||
{
|
||||
ScriptPointerList[id] = script;
|
||||
sScriptMgr.IncrementScriptCount();
|
||||
}
|
||||
else
|
||||
{
|
||||
// If the script is already assigned -> delete it!
|
||||
sLog.outError("Script '%s' already assigned with the same script name, so the script can't work.",
|
||||
script->GetName().c_str());
|
||||
|
||||
delete script;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// The script uses a script name from database, but isn't assigned to anything.
|
||||
if (script->GetName().find("example") == std::string::npos)
|
||||
sLog.outErrorDb("Script named '%s' does not have a script name assigned in database.",
|
||||
script->GetName().c_str());
|
||||
|
||||
delete script;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// We're dealing with a code-only script; just add it.
|
||||
ScriptPointerList[_scriptIdCounter++] = script;
|
||||
sScriptMgr.IncrementScriptCount();
|
||||
}
|
||||
}
|
||||
|
||||
// Gets a script by its ID (assigned by ObjectMgr).
|
||||
static TScript* GetScriptById(uint32 id)
|
||||
{
|
||||
@@ -1056,9 +932,6 @@ class ScriptMgr
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Attempts to add a new script to the list.
|
||||
static void AddScript(TScript* const script);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
class instance_eye_of_eternity : public InstanceMapScript
|
||||
{
|
||||
public:
|
||||
instance_eye_of_eternity() : InstanceMapScript("instance_eye_of_eternity") { }
|
||||
instance_eye_of_eternity() : InstanceMapScript("instance_eye_of_eternity", 616) { }
|
||||
|
||||
InstanceScript* GetInstanceData_InstanceMapScript(Map* pMap)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user