aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/ObjectMgr.cpp3
-rw-r--r--src/game/ObjectMgr.h2
-rw-r--r--src/game/Spell.cpp11
-rw-r--r--src/game/SpellMgr.h3
4 files changed, 17 insertions, 2 deletions
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp
index a08c22450db..7da8e89b26b 100644
--- a/src/game/ObjectMgr.cpp
+++ b/src/game/ObjectMgr.cpp
@@ -6289,6 +6289,7 @@ void ObjectMgr::LoadSpellDisabledEntrys()
{
m_DisabledPlayerSpells.clear(); // need for reload case
m_DisabledCreatureSpells.clear();
+ m_DisabledPetSpells.clear();
QueryResult *result = WorldDatabase.Query("SELECT entry, disable_mask FROM spell_disabled");
uint32 total_count = 0;
@@ -6321,6 +6322,8 @@ void ObjectMgr::LoadSpellDisabledEntrys()
m_DisabledPlayerSpells.insert(spellid);
if(disable_mask & SPELL_DISABLE_CREATURE)
m_DisabledCreatureSpells.insert(spellid);
+ if(disable_mask & SPELL_DISABLE_PET)
+ m_DisabledPetSpells.insert(spellid);
++total_count;
} while ( result->NextRow() );
diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h
index 72497170b3a..5489bf7e42f 100644
--- a/src/game/ObjectMgr.h
+++ b/src/game/ObjectMgr.h
@@ -712,6 +712,7 @@ class ObjectMgr
void LoadSpellDisabledEntrys();
bool IsPlayerSpellDisabled(uint32 spellid) { return (m_DisabledPlayerSpells.count(spellid) != 0); }
bool IsCreatureSpellDisabled(uint32 spellid) { return (m_DisabledCreatureSpells.count(spellid) != 0); }
+ bool IsPetSpellDisabled(uint32 spellid) { return (m_DisabledPetSpells.count(spellid) != 0); }
int GetIndexForLocale(LocaleConstant loc);
LocaleConstant GetLocaleForIndex(int i);
@@ -831,6 +832,7 @@ class ObjectMgr
std::set<uint32> m_DisabledPlayerSpells;
std::set<uint32> m_DisabledCreatureSpells;
+ std::set<uint32> m_DisabledPetSpells;
GraveYardMap mGraveYardMap;
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 707f1819968..15cee611db0 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -2048,7 +2048,7 @@ void Spell::prepare(SpellCastTargets * targets, Aura* triggeredByAura)
return;
}
- if(m_caster->GetTypeId() == TYPEID_PLAYER || (m_caster->GetTypeId() == TYPEID_UNIT && ((Creature*)m_caster)->isPet()))
+ if(m_caster->GetTypeId() == TYPEID_PLAYER)
{
if(objmgr.IsPlayerSpellDisabled(m_spellInfo->Id))
{
@@ -2057,6 +2057,15 @@ void Spell::prepare(SpellCastTargets * targets, Aura* triggeredByAura)
return;
}
}
+ else if (m_caster->GetTypeId() == TYPEID_UNIT && ((Creature*)m_caster)->isPet())
+ {
+ if(objmgr.IsPetSpellDisabled(m_spellInfo->Id))
+ {
+ SendCastResult(SPELL_FAILED_SPELL_UNAVAILABLE);
+ finish(false);
+ return;
+ }
+ }
else
{
if(objmgr.IsCreatureSpellDisabled(m_spellInfo->Id))
diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h
index 4ac0871e853..35d867dce2b 100644
--- a/src/game/SpellMgr.h
+++ b/src/game/SpellMgr.h
@@ -230,7 +230,8 @@ enum SpellFamilyNames
enum SpellDisableTypes
{
SPELL_DISABLE_PLAYER = 1,
- SPELL_DISABLE_CREATURE = 2
+ SPELL_DISABLE_CREATURE = 2,
+ SPELL_DISABLE_PET = 4
};
enum SpellEffectTargetTypes