mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Spell: fix some issues with taunt spells (#23425)
This commit is contained in:
@@ -2280,6 +2280,10 @@ void Spell::TargetInfo::PreprocessTarget(Spell* spell)
|
||||
else if (MissCondition == SPELL_MISS_REFLECT && ReflectResult == SPELL_MISS_NONE)
|
||||
_spellHitTarget = spell->m_caster->ToUnit();
|
||||
|
||||
// Ensure that a player target is put in combat by a taunt, even if they result immune clientside
|
||||
if ((MissCondition == SPELL_MISS_IMMUNE || MissCondition == SPELL_MISS_IMMUNE2) && spell->m_caster->GetTypeId() == TYPEID_PLAYER && unit->GetTypeId() == TYPEID_PLAYER && spell->m_caster->IsValidAttackTarget(unit, spell->GetSpellInfo()))
|
||||
unit->SetInCombatWith(spell->m_caster->ToPlayer());
|
||||
|
||||
_enablePVP = false; // need to check PvP state before spell effects, but act on it afterwards
|
||||
if (_spellHitTarget)
|
||||
{
|
||||
|
||||
@@ -3069,7 +3069,18 @@ void Spell::EffectTaunt(SpellEffIndex /*effIndex*/)
|
||||
|
||||
// this effect use before aura Taunt apply for prevent taunt already attacking target
|
||||
// for spell as marked "non effective at already attacking target"
|
||||
if (!unitTarget || !unitTarget->CanHaveThreatList())
|
||||
if (!unitTarget || unitTarget->IsTotem())
|
||||
{
|
||||
SendCastResult(SPELL_FAILED_DONT_REPORT);
|
||||
return;
|
||||
}
|
||||
|
||||
// Hand of Reckoning can hit some entities that can't have a threat list (including players' pets)
|
||||
if (m_spellInfo->Id == 62124)
|
||||
if (unitTarget->GetTypeId() != TYPEID_PLAYER && unitTarget->GetTarget() != unitCaster->GetGUID())
|
||||
unitCaster->CastSpell(unitTarget, 67485, true);
|
||||
|
||||
if (!unitTarget->CanHaveThreatList())
|
||||
{
|
||||
SendCastResult(SPELL_FAILED_DONT_REPORT);
|
||||
return;
|
||||
@@ -3082,10 +3093,6 @@ void Spell::EffectTaunt(SpellEffIndex /*effIndex*/)
|
||||
return;
|
||||
}
|
||||
|
||||
// Hand of Reckoning
|
||||
if (m_spellInfo->Id == 62124)
|
||||
unitCaster->CastSpell(unitTarget, 67485, true);
|
||||
|
||||
if (!mgr.IsThreatListEmpty())
|
||||
// Set threat equal to highest threat currently on target
|
||||
mgr.MatchUnitThreatToHighestThreat(unitCaster);
|
||||
|
||||
Reference in New Issue
Block a user