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
This commit is contained in:
@@ -73,12 +73,12 @@ void DisableMgr::LoadDisables()
|
|||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case DISABLE_TYPE_SPELL:
|
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);
|
sLog.outErrorDb("Spell entry %u from `disables` doesn't exist in dbc, skipped.", entry);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!flags || flags > 7)
|
if (!flags || flags > 15)
|
||||||
{
|
{
|
||||||
sLog.outErrorDb("Disable flags for spell %u are invalid, skipped.", entry);
|
sLog.outErrorDb("Disable flags for spell %u are invalid, skipped.", entry);
|
||||||
continue;
|
continue;
|
||||||
@@ -198,19 +198,24 @@ bool DisableMgr::IsDisabledFor(DisableType type, uint32 entry, Unit const* pUnit
|
|||||||
case DISABLE_TYPE_SPELL:
|
case DISABLE_TYPE_SPELL:
|
||||||
{
|
{
|
||||||
uint8 flags = itr->second;
|
uint8 flags = itr->second;
|
||||||
if (flags & SPELL_DISABLE_PLAYER && pUnit->GetTypeId() == TYPEID_PLAYER)
|
if (pUnit)
|
||||||
return true;
|
|
||||||
else if (pUnit->GetTypeId() == TYPEID_UNIT)
|
|
||||||
{
|
{
|
||||||
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;
|
return true;
|
||||||
}
|
}
|
||||||
else if (flags & SPELL_DISABLE_CREATURE)
|
return false;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
else if (flags & SPELL_DISABLE_DEPRECATED_SPELL) // call not from spellcast
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
case DISABLE_TYPE_MAP:
|
case DISABLE_TYPE_MAP:
|
||||||
if (!pUnit)
|
if (!pUnit)
|
||||||
@@ -247,8 +252,6 @@ bool DisableMgr::IsDisabledFor(DisableType type, uint32 entry, Unit const* pUnit
|
|||||||
case DISABLE_TYPE_BATTLEGROUND:
|
case DISABLE_TYPE_BATTLEGROUND:
|
||||||
case DISABLE_TYPE_ACHIEVEMENT_CRITERIA:
|
case DISABLE_TYPE_ACHIEVEMENT_CRITERIA:
|
||||||
return true;
|
return true;
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -2179,7 +2179,7 @@ void ObjectMgr::LoadItemPrototypes()
|
|||||||
else if (proto->Spells[1].SpellId != -1)
|
else if (proto->Spells[1].SpellId != -1)
|
||||||
{
|
{
|
||||||
SpellEntry const* spellInfo = sSpellStore.LookupEntry(proto->Spells[1].SpellId);
|
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);
|
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;
|
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)
|
if (proto->Spells[j].SpellId && proto->Spells[j].SpellId != -1)
|
||||||
{
|
{
|
||||||
SpellEntry const* spellInfo = sSpellStore.LookupEntry(proto->Spells[j].SpellId);
|
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);
|
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;
|
const_cast<ItemPrototype*>(proto)->Spells[j].SpellId = 0;
|
||||||
@@ -5826,8 +5826,8 @@ void ObjectMgr::LoadAccessRequirements()
|
|||||||
|
|
||||||
uint32 count = 0;
|
uint32 count = 0;
|
||||||
|
|
||||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12
|
// 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, status FROM access_requirement");
|
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)
|
if (!result)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -5865,7 +5865,6 @@ void ObjectMgr::LoadAccessRequirements()
|
|||||||
ar.questFailedText = fields[8].GetCppString();
|
ar.questFailedText = fields[8].GetCppString();
|
||||||
ar.heroicQuest = fields[9].GetUInt32();
|
ar.heroicQuest = fields[9].GetUInt32();
|
||||||
ar.heroicQuestFailedText = fields[10].GetCppString();
|
ar.heroicQuestFailedText = fields[10].GetCppString();
|
||||||
ar.status = fields[12].GetUInt8();
|
|
||||||
|
|
||||||
if (ar.item)
|
if (ar.item)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -52,9 +52,10 @@ enum SpellCategories
|
|||||||
|
|
||||||
enum SpellDisableTypes
|
enum SpellDisableTypes
|
||||||
{
|
{
|
||||||
SPELL_DISABLE_PLAYER = 1,
|
SPELL_DISABLE_PLAYER = 0x1,
|
||||||
SPELL_DISABLE_CREATURE = 2,
|
SPELL_DISABLE_CREATURE = 0x2,
|
||||||
SPELL_DISABLE_PET = 4
|
SPELL_DISABLE_PET = 0x4,
|
||||||
|
SPELL_DISABLE_DEPRECATED_SPELL = 0x8
|
||||||
};
|
};
|
||||||
|
|
||||||
enum SpellEffectTargetTypes
|
enum SpellEffectTargetTypes
|
||||||
|
|||||||
Reference in New Issue
Block a user