aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorstoneharry <stoneharryjames@gmail.com>2021-09-12 16:13:44 +0100
committerGitHub <noreply@github.com>2021-09-12 17:13:44 +0200
commita18b19aeceea5cc1c3c6ce30b4790cc81bf10bcb (patch)
tree9325a68ff4314b327a04b43d1799ded88f265dbf /src
parent5286ecfca894df1f62b936d20c73d90eb89466ea (diff)
Core/Spells: Implement SPELL_ATTR7_BYPASS_NO_RESURRECT_AURA (#26901)
When this aura is given on a spell, it allows for it to bypass 314 SPELL_AURA_PREVENT_RESURRECTION.
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp10
-rw-r--r--src/server/game/Spells/SpellInfo.cpp2
-rw-r--r--src/server/shared/SharedDefines.h2
-rw-r--r--src/server/shared/enuminfo_SharedDefines.cpp6
4 files changed, 10 insertions, 10 deletions
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index 775a57c448e..722b83de80e 100644
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -591,12 +591,12 @@ void WorldSession::HandleSelfResOpcode(WorldPacket & /*recvData*/)
{
TC_LOG_DEBUG("network", "WORLD: CMSG_SELF_RES"); // empty opcode
- if (_player->HasAuraType(SPELL_AURA_PREVENT_RESURRECTION))
- return; // silent return, client should display error by itself and not send this opcode
-
- if (uint32 spellId = _player->GetUInt32Value(PLAYER_SELF_RES_SPELL))
+ if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(_player->GetUInt32Value(PLAYER_SELF_RES_SPELL)))
{
- _player->CastSpell(_player, spellId);
+ if (_player->HasAuraType(SPELL_AURA_PREVENT_RESURRECTION) && !spell->HasAttribute(SPELL_ATTR7_BYPASS_NO_RESURRECT_AURA))
+ return; // silent return, client should display error by itself and not send this opcode
+
+ _player->CastSpell(_player, spell->Id);
_player->SetUInt32Value(PLAYER_SELF_RES_SPELL, 0);
}
}
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index f6cfbf63980..5148b7c6f7b 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -1757,7 +1757,7 @@ SpellCastResult SpellInfo::CheckTarget(WorldObject const* caster, WorldObject co
if (ExcludeTargetAuraSpell && unitTarget->HasAura(sSpellMgr->GetSpellIdForDifficulty(ExcludeTargetAuraSpell, caster)))
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) || HasEffect(SPELL_EFFECT_RESURRECT_NEW))
return SPELL_FAILED_TARGET_CANNOT_BE_RESURRECTED;
diff --git a/src/server/shared/SharedDefines.h b/src/server/shared/SharedDefines.h
index 9ece4c9f83f..b21c5ef461f 100644
--- a/src/server/shared/SharedDefines.h
+++ b/src/server/shared/SharedDefines.h
@@ -688,7 +688,7 @@ enum SpellAttr7 : uint32
SPELL_ATTR7_CANT_PARRY = 0x01000000, // TITLE Spell cannot be parried
SPELL_ATTR7_CANT_MISS = 0x02000000, // TITLE Spell cannot be missed
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 Bypasses the prevent resurrection 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
diff --git a/src/server/shared/enuminfo_SharedDefines.cpp b/src/server/shared/enuminfo_SharedDefines.cpp
index 5abd741d7d5..31398718e2f 100644
--- a/src/server/shared/enuminfo_SharedDefines.cpp
+++ b/src/server/shared/enuminfo_SharedDefines.cpp
@@ -1198,7 +1198,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr7>::ToString(SpellAttr7 value)
case SPELL_ATTR7_CANT_PARRY: return { "SPELL_ATTR7_CANT_PARRY", "Spell cannot be parried", "" };
case SPELL_ATTR7_CANT_MISS: return { "SPELL_ATTR7_CANT_MISS", "Spell cannot be missed", "" };
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", "Bypasses the prevent resurrection 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", "" };
@@ -1242,7 +1242,7 @@ TC_API_EXPORT SpellAttr7 EnumUtils<SpellAttr7>::FromIndex(size_t index)
case 24: return SPELL_ATTR7_CANT_PARRY;
case 25: return SPELL_ATTR7_CANT_MISS;
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;
@@ -1283,7 +1283,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr7>::ToIndex(SpellAttr7 value)
case SPELL_ATTR7_CANT_PARRY: return 24;
case SPELL_ATTR7_CANT_MISS: 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;