Core/Scripts: Add SpellSC and new hook OnCalcMaxDuration
This commit is contained in:
@@ -58,6 +58,7 @@ template class ScriptRegistry<AllCreatureScript>;
|
|||||||
template class ScriptRegistry<AllMapScript>;
|
template class ScriptRegistry<AllMapScript>;
|
||||||
template class ScriptRegistry<MovementHandlerScript>;
|
template class ScriptRegistry<MovementHandlerScript>;
|
||||||
template class ScriptRegistry<BGScript>;
|
template class ScriptRegistry<BGScript>;
|
||||||
|
template class ScriptRegistry<SpellSC>;
|
||||||
|
|
||||||
#include "ScriptMgrMacros.h"
|
#include "ScriptMgrMacros.h"
|
||||||
|
|
||||||
@@ -209,6 +210,7 @@ void ScriptMgr::Unload()
|
|||||||
SCR_CLEAR(GlobalScript);
|
SCR_CLEAR(GlobalScript);
|
||||||
SCR_CLEAR(ModuleScript);
|
SCR_CLEAR(ModuleScript);
|
||||||
SCR_CLEAR(BGScript);
|
SCR_CLEAR(BGScript);
|
||||||
|
SCR_CLEAR(SpellSC);
|
||||||
|
|
||||||
#undef SCR_CLEAR
|
#undef SCR_CLEAR
|
||||||
}
|
}
|
||||||
@@ -279,6 +281,7 @@ void ScriptMgr::CheckIfScriptsInDatabaseExist()
|
|||||||
!ScriptRegistry<PlayerScript>::GetScriptById(sid) &&
|
!ScriptRegistry<PlayerScript>::GetScriptById(sid) &&
|
||||||
!ScriptRegistry<GuildScript>::GetScriptById(sid) &&
|
!ScriptRegistry<GuildScript>::GetScriptById(sid) &&
|
||||||
!ScriptRegistry<BGScript>::GetScriptById(sid) &&
|
!ScriptRegistry<BGScript>::GetScriptById(sid) &&
|
||||||
|
!ScriptRegistry<SpellSC>::GetScriptById(sid) &&
|
||||||
!ScriptRegistry<GroupScript>::GetScriptById(sid))
|
!ScriptRegistry<GroupScript>::GetScriptById(sid))
|
||||||
sLog->outErrorDb("Script named '%s' is assigned in database, but has no code!", (*itr).c_str());
|
sLog->outErrorDb("Script named '%s' is assigned in database, but has no code!", (*itr).c_str());
|
||||||
}
|
}
|
||||||
@@ -1984,6 +1987,12 @@ void ScriptMgr::OnBattlegroundAddPlayer(Battleground* bg, Player* player)
|
|||||||
FOREACH_SCRIPT(BGScript)->OnBattlegroundAddPlayer(bg, player);
|
FOREACH_SCRIPT(BGScript)->OnBattlegroundAddPlayer(bg, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SpellSC
|
||||||
|
void ScriptMgr::OnCalcMaxDuration(Aura const* aura, int32& maxDuration)
|
||||||
|
{
|
||||||
|
FOREACH_SCRIPT(SpellSC)->OnCalcMaxDuration(aura, maxDuration);
|
||||||
|
}
|
||||||
|
|
||||||
AllMapScript::AllMapScript(const char* name)
|
AllMapScript::AllMapScript(const char* name)
|
||||||
: ScriptObject(name)
|
: ScriptObject(name)
|
||||||
{
|
{
|
||||||
@@ -2165,6 +2174,12 @@ BGScript::BGScript(char const* name)
|
|||||||
ScriptRegistry<BGScript>::AddScript(this);
|
ScriptRegistry<BGScript>::AddScript(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SpellSC::SpellSC(char const* name)
|
||||||
|
: ScriptObject(name)
|
||||||
|
{
|
||||||
|
ScriptRegistry<SpellSC>::AddScript(this);
|
||||||
|
}
|
||||||
|
|
||||||
ModuleScript::ModuleScript(const char* name)
|
ModuleScript::ModuleScript(const char* name)
|
||||||
: ScriptObject(name)
|
: ScriptObject(name)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1061,6 +1061,21 @@ public:
|
|||||||
virtual void OnBattlegroundAddPlayer(Battleground* /*bg*/, Player* /*player*/) { }
|
virtual void OnBattlegroundAddPlayer(Battleground* /*bg*/, Player* /*player*/) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class SpellSC : public ScriptObject
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
SpellSC(const char* name);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
bool IsDatabaseBound() const { return false; }
|
||||||
|
|
||||||
|
// Calculate max duration in applying aura
|
||||||
|
virtual void OnCalcMaxDuration(Aura const* /*aura*/, int32& /*maxDuration*/) { }
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
// this class can be used to be extended by Modules
|
// this class can be used to be extended by Modules
|
||||||
// creating their own custom hooks inside module itself
|
// creating their own custom hooks inside module itself
|
||||||
class ModuleScript : public ScriptObject
|
class ModuleScript : public ScriptObject
|
||||||
@@ -1387,6 +1402,10 @@ class ScriptMgr
|
|||||||
void OnBattlegroundUpdate(Battleground* bg, uint32 diff);
|
void OnBattlegroundUpdate(Battleground* bg, uint32 diff);
|
||||||
void OnBattlegroundAddPlayer(Battleground* bg, Player* player);
|
void OnBattlegroundAddPlayer(Battleground* bg, Player* player);
|
||||||
|
|
||||||
|
public: /* SpellSC */
|
||||||
|
|
||||||
|
void OnCalcMaxDuration(Aura const* aura, int32& maxDuration);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
uint32 _scriptCount;
|
uint32 _scriptCount;
|
||||||
|
|||||||
@@ -815,6 +815,8 @@ int32 Aura::CalcMaxDuration(Unit* caster) const
|
|||||||
if (IsPassive() && !m_spellInfo->DurationEntry)
|
if (IsPassive() && !m_spellInfo->DurationEntry)
|
||||||
maxDuration = -1;
|
maxDuration = -1;
|
||||||
|
|
||||||
|
sScriptMgr->OnCalcMaxDuration(this, maxDuration);
|
||||||
|
|
||||||
// IsPermanent() checks max duration (which we are supposed to calculate here)
|
// IsPermanent() checks max duration (which we are supposed to calculate here)
|
||||||
if (maxDuration != -1 && modOwner)
|
if (maxDuration != -1 && modOwner)
|
||||||
modOwner->ApplySpellMod(GetId(), SPELLMOD_DURATION, maxDuration);
|
modOwner->ApplySpellMod(GetId(), SPELLMOD_DURATION, maxDuration);
|
||||||
|
|||||||
Reference in New Issue
Block a user