aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <none@none>2010-07-21 15:17:29 +0200
committerShauren <none@none>2010-07-21 15:17:29 +0200
commit14b6a688570c9bc029de28321779c30e4129577b (patch)
treedd1c406b0c38415acbb7c380f9448ff28249d48d
parent19ed86ef3046517325451f2b2a7945376c02fe9a (diff)
Added new spell disable flag - core will not check if that spell exists in dbc, used for blizz deprecated items/quests
Fixed loading of access_requirement --HG-- branch : trunk
-rw-r--r--src/server/game/Conditions/DisableMgr.cpp27
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp9
-rw-r--r--src/server/game/Spells/SpellMgr.h7
3 files changed, 23 insertions, 20 deletions
diff --git a/src/server/game/Conditions/DisableMgr.cpp b/src/server/game/Conditions/DisableMgr.cpp
index 3a2e186a84e..803d607b7f8 100644
--- a/src/server/game/Conditions/DisableMgr.cpp
+++ b/src/server/game/Conditions/DisableMgr.cpp
@@ -73,12 +73,12 @@ void DisableMgr::LoadDisables()
switch (type)
{
case DISABLE_TYPE_SPELL:
- if (!sSpellStore.LookupEntry(entry))
+ if (!(sSpellStore.LookupEntry(entry) || flags & SPELL_DISABLE_DEPRECATED_SPELL))
{
sLog.outErrorDb("Spell entry %u from `disables` doesn't exist in dbc, skipped.", entry);
continue;
}
- if (!flags || flags > 7)
+ if (!flags || flags > 15)
{
sLog.outErrorDb("Disable flags for spell %u are invalid, skipped.", entry);
continue;
@@ -198,19 +198,24 @@ bool DisableMgr::IsDisabledFor(DisableType type, uint32 entry, Unit const* pUnit
case DISABLE_TYPE_SPELL:
{
uint8 flags = itr->second;
- if (flags & SPELL_DISABLE_PLAYER && pUnit->GetTypeId() == TYPEID_PLAYER)
- return true;
- else if (pUnit->GetTypeId() == TYPEID_UNIT)
+ if (pUnit)
{
- if (pUnit->ToCreature()->isPet())
+ if (flags & SPELL_DISABLE_PLAYER && pUnit->GetTypeId() == TYPEID_PLAYER)
+ return true;
+ else if (pUnit->GetTypeId() == TYPEID_UNIT)
{
- if (flags & SPELL_DISABLE_PET)
+ if (pUnit->ToCreature()->isPet())
+ {
+ if (flags & SPELL_DISABLE_PET)
+ return true;
+ }
+ else if (flags & SPELL_DISABLE_CREATURE)
return true;
}
- else if (flags & SPELL_DISABLE_CREATURE)
- return true;
+ return false;
}
- return false;
+ else if (flags & SPELL_DISABLE_DEPRECATED_SPELL) // call not from spellcast
+ return true;
}
case DISABLE_TYPE_MAP:
if (!pUnit)
@@ -247,8 +252,6 @@ bool DisableMgr::IsDisabledFor(DisableType type, uint32 entry, Unit const* pUnit
case DISABLE_TYPE_BATTLEGROUND:
case DISABLE_TYPE_ACHIEVEMENT_CRITERIA:
return true;
- default:
- return false;
}
return false;
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index b07c9ecc0f5..d360b46d94d 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -2179,7 +2179,7 @@ void ObjectMgr::LoadItemPrototypes()
else if (proto->Spells[1].SpellId != -1)
{
SpellEntry const* spellInfo = sSpellStore.LookupEntry(proto->Spells[1].SpellId);
- if (!spellInfo)
+ if (!spellInfo && !sDisableMgr.IsDisabledFor(DISABLE_TYPE_SPELL, spellInfo->Id, NULL))
{
sLog.outErrorDb("Item (Entry: %u) has wrong (not existing) spell in spellid_%d (%d)",i,1+1,proto->Spells[1].SpellId);
const_cast<ItemPrototype*>(proto)->Spells[0].SpellId = 0;
@@ -2227,7 +2227,7 @@ void ObjectMgr::LoadItemPrototypes()
if (proto->Spells[j].SpellId && proto->Spells[j].SpellId != -1)
{
SpellEntry const* spellInfo = sSpellStore.LookupEntry(proto->Spells[j].SpellId);
- if (!spellInfo)
+ if (!spellInfo && !sDisableMgr.IsDisabledFor(DISABLE_TYPE_SPELL, spellInfo->Id, NULL))
{
sLog.outErrorDb("Item (Entry: %u) has wrong (not existing) spell in spellid_%d (%d)",i,j+1,proto->Spells[j].SpellId);
const_cast<ItemPrototype*>(proto)->Spells[j].SpellId = 0;
@@ -5826,8 +5826,8 @@ void ObjectMgr::LoadAccessRequirements()
uint32 count = 0;
- // 0 1 2 3 4 5 6 7 8 9 10 11 12
- QueryResult_AutoPtr result = WorldDatabase.Query("SELECT id, level_min, level_max, item, item2, heroic_key, heroic_key2, quest_done, quest_failed_text, heroic_quest_done, heroic_quest_failed_text, heroic_level_min, status FROM access_requirement");
+ // 0 1 2 3 4 5 6 7 8 9 10 11
+ QueryResult_AutoPtr result = WorldDatabase.Query("SELECT id, level_min, level_max, item, item2, heroic_key, heroic_key2, quest_done, quest_failed_text, heroic_quest_done, heroic_quest_failed_text, heroic_level_min FROM access_requirement");
if (!result)
{
@@ -5865,7 +5865,6 @@ void ObjectMgr::LoadAccessRequirements()
ar.questFailedText = fields[8].GetCppString();
ar.heroicQuest = fields[9].GetUInt32();
ar.heroicQuestFailedText = fields[10].GetCppString();
- ar.status = fields[12].GetUInt8();
if (ar.item)
{
diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h
index d02efab43b1..cc7aac4966c 100644
--- a/src/server/game/Spells/SpellMgr.h
+++ b/src/server/game/Spells/SpellMgr.h
@@ -52,9 +52,10 @@ enum SpellCategories
enum SpellDisableTypes
{
- SPELL_DISABLE_PLAYER = 1,
- SPELL_DISABLE_CREATURE = 2,
- SPELL_DISABLE_PET = 4
+ SPELL_DISABLE_PLAYER = 0x1,
+ SPELL_DISABLE_CREATURE = 0x2,
+ SPELL_DISABLE_PET = 0x4,
+ SPELL_DISABLE_DEPRECATED_SPELL = 0x8
};
enum SpellEffectTargetTypes