AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
ScriptRegistry< TScript > Class Template Reference

#include "ScriptMgr.h"

Public Types

typedef std::map< uint32, TScript * > ScriptMap
 
typedef ScriptMap::iterator ScriptMapIterator
 
typedef std::vector< TScript * > ScriptVector
 
typedef ScriptVector::iterator ScriptVectorIterator
 

Static Public Member Functions

static void AddScript (TScript *const script)
 
static void AddALScripts ()
 
static TScript * GetScriptById (uint32 id)
 

Static Public Attributes

static ScriptMap ScriptPointerList
 
static ScriptVector ALScripts
 

Static Private Member Functions

static bool _checkMemory (TScript *const script)
 

Static Private Attributes

static uint32 _scriptIdCounter = 0
 

Detailed Description

template<class TScript>
class ScriptRegistry< TScript >

Member Typedef Documentation

◆ ScriptMap

template<class TScript >
typedef std::map<uint32, TScript*> ScriptRegistry< TScript >::ScriptMap

◆ ScriptMapIterator

template<class TScript >
typedef ScriptMap::iterator ScriptRegistry< TScript >::ScriptMapIterator

◆ ScriptVector

template<class TScript >
typedef std::vector<TScript*> ScriptRegistry< TScript >::ScriptVector

◆ ScriptVectorIterator

template<class TScript >
typedef ScriptVector::iterator ScriptRegistry< TScript >::ScriptVectorIterator

Member Function Documentation

◆ _checkMemory()

template<class TScript >
static bool ScriptRegistry< TScript >::_checkMemory ( TScript *const  script)
inlinestaticprivate
2820 {
2821 // See if the script is using the same memory as another script. If this happens, it means that
2822 // someone forgot to allocate new memory for a script.
2823 for (ScriptMapIterator it = ScriptPointerList.begin(); it != ScriptPointerList.end(); ++it)
2824 {
2825 if (it->second == script)
2826 {
2827 LOG_ERROR("scripts", "Script '{}' has same memory pointer as '{}'.",
2828 script->GetName(), it->second->GetName());
2829
2830 return false;
2831 }
2832 }
2833
2834 return true;
2835 }
#define LOG_ERROR(filterType__,...)
Definition: Log.h:159
static ScriptMap ScriptPointerList
Definition: ScriptMgr.h:2716
ScriptMap::iterator ScriptMapIterator
Definition: ScriptMgr.h:2709

References LOG_ERROR, and ScriptRegistry< TScript >::ScriptPointerList.

Referenced by ScriptRegistry< TScript >::AddALScripts(), and ScriptRegistry< TScript >::AddScript().

◆ AddALScripts()

template<class TScript >
static void ScriptRegistry< TScript >::AddALScripts ( )
inlinestatic
2742 {
2743 for(ScriptVectorIterator it = ALScripts.begin(); it != ALScripts.end(); ++it)
2744 {
2745 TScript* const script = *it;
2746
2747 script->checkValidity();
2748
2749 if (script->IsDatabaseBound())
2750 {
2751 if (!_checkMemory(script))
2752 {
2753 return;
2754 }
2755
2756 // Get an ID for the script. An ID only exists if it's a script that is assigned in the database
2757 // through a script name (or similar).
2758 uint32 id = sObjectMgr->GetScriptId(script->GetName().c_str());
2759 if (id)
2760 {
2761 // Try to find an existing script.
2762 TScript const* oldScript = nullptr;
2763 for (auto iterator = ScriptPointerList.begin(); iterator != ScriptPointerList.end(); ++iterator)
2764 {
2765 // If the script names match...
2766 if (iterator->second->GetName() == script->GetName())
2767 {
2768 // ... It exists.
2769 oldScript = iterator->second;
2770 break;
2771 }
2772 }
2773
2774 // If the script is already assigned -> delete it!
2775 if (oldScript)
2776 {
2777 delete oldScript;
2778 }
2779
2780 // Assign new script!
2781 ScriptPointerList[id] = script;
2782
2783 // Increment script count only with new scripts
2784 if (!oldScript)
2785 {
2786 sScriptMgr->IncrementScriptCount();
2787 }
2788 }
2789 else
2790 {
2791 // The script uses a script name from database, but isn't assigned to anything.
2792 if (script->GetName().find("Smart") == std::string::npos)
2793 LOG_ERROR("sql.sql", "Script named '{}' is not assigned in the database.",
2794 script->GetName());
2795 }
2796 }
2797 else
2798 {
2799 // We're dealing with a code-only script; just add it.
2801 sScriptMgr->IncrementScriptCount();
2802 }
2803 }
2804 }
std::uint32_t uint32
Definition: Define.h:108
#define sObjectMgr
Definition: ObjectMgr.h:1640
#define sScriptMgr
Definition: ScriptMgr.h:2702
static bool _checkMemory(TScript *const script)
Definition: ScriptMgr.h:2819
static uint32 _scriptIdCounter
Definition: ScriptMgr.h:2838
ScriptVector::iterator ScriptVectorIterator
Definition: ScriptMgr.h:2712
static ScriptVector ALScripts
Definition: ScriptMgr.h:2718

References ScriptRegistry< TScript >::_checkMemory(), ScriptRegistry< TScript >::_scriptIdCounter, ScriptRegistry< TScript >::ALScripts, LOG_ERROR, ScriptRegistry< TScript >::ScriptPointerList, sObjectMgr, and sScriptMgr.

Referenced by ScriptMgr::LoadDatabase().

◆ AddScript()

template<class TScript >
static void ScriptRegistry< TScript >::AddScript ( TScript *const  script)
inlinestatic
2721 {
2722 ASSERT(script);
2723
2724 if (!_checkMemory(script))
2725 return;
2726
2727 if (script->isAfterLoadScript())
2728 {
2729 ALScripts.push_back(script);
2730 }
2731 else
2732 {
2733 script->checkValidity();
2734
2735 // We're dealing with a code-only script; just add it.
2737 sScriptMgr->IncrementScriptCount();
2738 }
2739 }
#define ASSERT
Definition: Errors.h:68

References ScriptRegistry< TScript >::_checkMemory(), ScriptRegistry< TScript >::_scriptIdCounter, ScriptRegistry< TScript >::ALScripts, ASSERT, ScriptRegistry< TScript >::ScriptPointerList, and sScriptMgr.

Referenced by AccountScript::AccountScript(), AchievementCriteriaScript::AchievementCriteriaScript(), AchievementScript::AchievementScript(), AllCreatureScript::AllCreatureScript(), AllGameObjectScript::AllGameObjectScript(), AllItemScript::AllItemScript(), AllMapScript::AllMapScript(), AreaTriggerScript::AreaTriggerScript(), ArenaScript::ArenaScript(), ArenaTeamScript::ArenaTeamScript(), AuctionHouseScript::AuctionHouseScript(), BattlegroundMapScript::BattlegroundMapScript(), BattlegroundScript::BattlegroundScript(), BGScript::BGScript(), CommandSC::CommandSC(), CommandScript::CommandScript(), ConditionScript::ConditionScript(), CreatureScript::CreatureScript(), DatabaseScript::DatabaseScript(), DynamicObjectScript::DynamicObjectScript(), ElunaScript::ElunaScript(), FormulaScript::FormulaScript(), GameEventScript::GameEventScript(), GameObjectScript::GameObjectScript(), GlobalScript::GlobalScript(), GroupScript::GroupScript(), GuildScript::GuildScript(), InstanceMapScript::InstanceMapScript(), ItemScript::ItemScript(), LootScript::LootScript(), MailScript::MailScript(), MiscScript::MiscScript(), ModuleScript::ModuleScript(), MovementHandlerScript::MovementHandlerScript(), OutdoorPvPScript::OutdoorPvPScript(), PetScript::PetScript(), PlayerScript::PlayerScript(), ServerScript::ServerScript(), SpellSC::SpellSC(), SpellScriptLoader::SpellScriptLoader(), TransportScript::TransportScript(), UnitScript::UnitScript(), VehicleScript::VehicleScript(), WeatherScript::WeatherScript(), WorldMapScript::WorldMapScript(), WorldObjectScript::WorldObjectScript(), and WorldScript::WorldScript().

◆ GetScriptById()

Member Data Documentation

◆ _scriptIdCounter

template<class TScript >
uint32 ScriptRegistry< TScript >::_scriptIdCounter = 0
staticprivate

◆ ALScripts

template<class TScript >
std::vector< TScript * > ScriptRegistry< TScript >::ALScripts
static

◆ ScriptPointerList