mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/Spells: Implement SPELL_ATTR7_BYPASS_NO_RESURRECT_AURA (#27714)
This commit is contained in:
@@ -501,12 +501,16 @@ void WorldSession::HandleTotemDestroyed(WorldPackets::Totem::TotemDestroyed& tot
|
||||
|
||||
void WorldSession::HandleSelfResOpcode(WorldPackets::Spells::SelfRes& selfRes)
|
||||
{
|
||||
if (_player->HasAuraType(SPELL_AURA_PREVENT_RESURRECTION))
|
||||
return; // silent return, client should display error by itself and not send this opcode
|
||||
|
||||
if (_player->m_activePlayerData->SelfResSpells.FindIndex(selfRes.SpellID) < 0)
|
||||
return;
|
||||
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(selfRes.SpellID, _player->GetMap()->GetDifficultyID());
|
||||
if (!spellInfo)
|
||||
return;
|
||||
|
||||
if (_player->HasAuraType(SPELL_AURA_PREVENT_RESURRECTION) && !spellInfo->HasAttribute(SPELL_ATTR7_BYPASS_NO_RESURRECT_AURA))
|
||||
return; // silent return, client should display error by itself and not send this opcode
|
||||
|
||||
_player->CastSpell(_player, selfRes.SpellID, _player->GetMap()->GetDifficultyID());
|
||||
_player->RemoveSelfResSpell(selfRes.SpellID);
|
||||
}
|
||||
|
||||
@@ -690,7 +690,7 @@ enum SpellAttr7 : uint32
|
||||
SPELL_ATTR7_UNK24 = 0x01000000, // TITLE Unknown attribute 24@Attr7
|
||||
SPELL_ATTR7_UNK25 = 0x02000000, // TITLE Unknown attribute 25@Attr7
|
||||
SPELL_ATTR7_UNK26 = 0x04000000, // TITLE Unknown attribute 26@Attr7
|
||||
SPELL_ATTR7_UNK27 = 0x08000000, // TITLE Unknown attribute 27@Attr7
|
||||
SPELL_ATTR7_BYPASS_NO_RESURRECT_AURA = 0x08000000, // TITLE Bypass No Resurrect Aura
|
||||
SPELL_ATTR7_CONSOLIDATED_RAID_BUFF = 0x10000000, // TITLE Consolidate in raid buff frame (client only)
|
||||
SPELL_ATTR7_UNK29 = 0x20000000, // TITLE Unknown attribute 29@Attr7
|
||||
SPELL_ATTR7_UNK30 = 0x40000000, // TITLE Unknown attribute 30@Attr7
|
||||
|
||||
@@ -1177,7 +1177,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr7>::ToString(SpellAttr7 value)
|
||||
case SPELL_ATTR7_UNK24: return { "SPELL_ATTR7_UNK24", "Unknown attribute 24@Attr7", "" };
|
||||
case SPELL_ATTR7_UNK25: return { "SPELL_ATTR7_UNK25", "Unknown attribute 25@Attr7", "" };
|
||||
case SPELL_ATTR7_UNK26: return { "SPELL_ATTR7_UNK26", "Unknown attribute 26@Attr7", "" };
|
||||
case SPELL_ATTR7_UNK27: return { "SPELL_ATTR7_UNK27", "Unknown attribute 27@Attr7", "" };
|
||||
case SPELL_ATTR7_BYPASS_NO_RESURRECT_AURA: return { "SPELL_ATTR7_BYPASS_NO_RESURRECT_AURA", "Bypass No Resurrect Aura", "" };
|
||||
case SPELL_ATTR7_CONSOLIDATED_RAID_BUFF: return { "SPELL_ATTR7_CONSOLIDATED_RAID_BUFF", "Consolidate in raid buff frame (client only)", "" };
|
||||
case SPELL_ATTR7_UNK29: return { "SPELL_ATTR7_UNK29", "Unknown attribute 29@Attr7", "" };
|
||||
case SPELL_ATTR7_UNK30: return { "SPELL_ATTR7_UNK30", "Unknown attribute 30@Attr7", "" };
|
||||
@@ -1221,7 +1221,7 @@ TC_API_EXPORT SpellAttr7 EnumUtils<SpellAttr7>::FromIndex(size_t index)
|
||||
case 24: return SPELL_ATTR7_UNK24;
|
||||
case 25: return SPELL_ATTR7_UNK25;
|
||||
case 26: return SPELL_ATTR7_UNK26;
|
||||
case 27: return SPELL_ATTR7_UNK27;
|
||||
case 27: return SPELL_ATTR7_BYPASS_NO_RESURRECT_AURA;
|
||||
case 28: return SPELL_ATTR7_CONSOLIDATED_RAID_BUFF;
|
||||
case 29: return SPELL_ATTR7_UNK29;
|
||||
case 30: return SPELL_ATTR7_UNK30;
|
||||
@@ -1262,7 +1262,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr7>::ToIndex(SpellAttr7 value)
|
||||
case SPELL_ATTR7_UNK24: return 24;
|
||||
case SPELL_ATTR7_UNK25: return 25;
|
||||
case SPELL_ATTR7_UNK26: return 26;
|
||||
case SPELL_ATTR7_UNK27: return 27;
|
||||
case SPELL_ATTR7_BYPASS_NO_RESURRECT_AURA: return 27;
|
||||
case SPELL_ATTR7_CONSOLIDATED_RAID_BUFF: return 28;
|
||||
case SPELL_ATTR7_UNK29: return 29;
|
||||
case SPELL_ATTR7_UNK30: return 30;
|
||||
|
||||
@@ -2230,7 +2230,7 @@ SpellCastResult SpellInfo::CheckTarget(WorldObject const* caster, WorldObject co
|
||||
if (ExcludeTargetAuraSpell && unitTarget->HasAura(ExcludeTargetAuraSpell))
|
||||
return SPELL_FAILED_TARGET_AURASTATE;
|
||||
|
||||
if (unitTarget->HasAuraType(SPELL_AURA_PREVENT_RESURRECTION))
|
||||
if (unitTarget->HasAuraType(SPELL_AURA_PREVENT_RESURRECTION) && !HasAttribute(SPELL_ATTR7_BYPASS_NO_RESURRECT_AURA))
|
||||
if (HasEffect(SPELL_EFFECT_SELF_RESURRECT) || HasEffect(SPELL_EFFECT_RESURRECT))
|
||||
return SPELL_FAILED_TARGET_CANNOT_BE_RESURRECTED;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user