Core/Spells: Implement SPELL_ATTR7_BYPASS_NO_RESURRECT_AURA

Port From (https://github.com/TrinityCore/TrinityCore/commit/2ae67de4c0f327edc60d5da9cc815016d48b7228)
This commit is contained in:
hondacrx
2022-05-05 09:36:14 -04:00
parent 3baad2a8c5
commit 1daa90dfb9
3 changed files with 10 additions and 6 deletions
@@ -1845,7 +1845,7 @@ namespace Framework.Constants
Unk24 = 0x1000000, // 24 Motivate, Mutilate, Perform Speech, Shattering Throw Unk24 = 0x1000000, // 24 Motivate, Mutilate, Perform Speech, Shattering Throw
Unk25 = 0x2000000, // 25 Unk25 = 0x2000000, // 25
Unk26 = 0x4000000, // 26 Unk26 = 0x4000000, // 26
Unk27 = 0x8000000, // 27 Not Set BypassNoResurrectAura = 0x8000000, // 27 Bypass No Resurrect Aura
ConsolidatedRaidBuff = 0x10000000, // 28 Related To Player Positive Buff ConsolidatedRaidBuff = 0x10000000, // 28 Related To Player Positive Buff
Unk29 = 0x20000000, // 29 Only 69028, 71237 Unk29 = 0x20000000, // 29 Only 69028, 71237
Unk30 = 0x40000000, // 30 Burning Determination, Divine Sacrifice, Earth Shield, Prayer Of Mending Unk30 = 0x40000000, // 30 Burning Determination, Divine Sacrifice, Earth Shield, Prayer Of Mending
+7 -3
View File
@@ -512,13 +512,17 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.SelfRes)] [WorldPacketHandler(ClientOpcodes.SelfRes)]
void HandleSelfRes(SelfRes selfRes) void HandleSelfRes(SelfRes selfRes)
{ {
if (_player.HasAuraType(AuraType.PreventResurrection))
return; // silent return, client should display error by itself and not send this opcode
List<uint> selfResSpells = _player.m_activePlayerData.SelfResSpells; List<uint> selfResSpells = _player.m_activePlayerData.SelfResSpells;
if (!selfResSpells.Contains(selfRes.SpellId)) if (!selfResSpells.Contains(selfRes.SpellId))
return; return;
SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(selfRes.SpellId, _player.GetMap().GetDifficultyID());
if (spellInfo == null)
return;
if (_player.HasAuraType(AuraType.PreventResurrection) && !spellInfo.HasAttribute(SpellAttr7.BypassNoResurrectAura))
return; // silent return, client should display error by itself and not send this opcode
_player.CastSpell(_player, selfRes.SpellId, new CastSpellExtraArgs(_player.GetMap().GetDifficultyID())); _player.CastSpell(_player, selfRes.SpellId, new CastSpellExtraArgs(_player.GetMap().GetDifficultyID()));
_player.RemoveSelfResSpell(selfRes.SpellId); _player.RemoveSelfResSpell(selfRes.SpellId);
} }
+1 -1
View File
@@ -1160,7 +1160,7 @@ namespace Game.Spells
if (ExcludeTargetAuraSpell != 0 && unitTarget.HasAura(ExcludeTargetAuraSpell)) if (ExcludeTargetAuraSpell != 0 && unitTarget.HasAura(ExcludeTargetAuraSpell))
return SpellCastResult.TargetAurastate; return SpellCastResult.TargetAurastate;
if (unitTarget.HasAuraType(AuraType.PreventResurrection)) if (unitTarget.HasAuraType(AuraType.PreventResurrection) && !HasAttribute(SpellAttr7.BypassNoResurrectAura))
if (HasEffect(SpellEffectName.SelfResurrect) || HasEffect(SpellEffectName.Resurrect)) if (HasEffect(SpellEffectName.SelfResurrect) || HasEffect(SpellEffectName.Resurrect))
return SpellCastResult.TargetCannotBeResurrected; return SpellCastResult.TargetCannotBeResurrected;