Core/Spells: Check TRIGGERED_DONT_REPORT_CAST_ERROR flag in SendCastResult rather than CheckCast.
Fixes and closes #16836. (cherry picked from commit 4b15369378c24784de46fbf4f9591efd1015be36) # Conflicts: # src/server/game/Spells/Spell.cpp
This commit is contained in:
@@ -3886,6 +3886,9 @@ void Spell::SendCastResult(SpellCastResult result)
|
||||
if (m_caster->ToPlayer()->GetSession()->PlayerLoading()) // don't send cast results at loading time
|
||||
return;
|
||||
|
||||
if (_triggeredCastFlags & TRIGGERED_DONT_REPORT_CAST_ERROR)
|
||||
result = SPELL_FAILED_DONT_REPORT;
|
||||
|
||||
WorldPackets::Spells::CastFailed castFailed;
|
||||
castFailed.SpellXSpellVisualID = m_SpellVisual;
|
||||
FillSpellCastFailedArgs(castFailed, m_castId, m_spellInfo, result, m_customError, m_misc.Raw.Data, m_caster->ToPlayer());
|
||||
@@ -3901,6 +3904,9 @@ void Spell::SendPetCastResult(SpellCastResult result)
|
||||
if (!owner || owner->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
if (_triggeredCastFlags & TRIGGERED_DONT_REPORT_CAST_ERROR)
|
||||
result = SPELL_FAILED_DONT_REPORT;
|
||||
|
||||
WorldPackets::Spells::PetCastFailed petCastFailed;
|
||||
FillSpellCastFailedArgs(petCastFailed, m_castId, m_spellInfo, result, SPELL_CUSTOM_ERROR_NONE, m_misc.Raw.Data, owner->ToPlayer());
|
||||
owner->ToPlayer()->SendDirectMessage(petCastFailed.Write());
|
||||
@@ -4903,9 +4909,6 @@ SpellCastResult Spell::CheckCast(bool strict)
|
||||
return SpellCastResult(condInfo.mLastFailedCondition->ErrorType);
|
||||
}
|
||||
|
||||
if (_triggeredCastFlags & TRIGGERED_DONT_REPORT_CAST_ERROR)
|
||||
return SPELL_FAILED_DONT_REPORT;
|
||||
|
||||
if (!condInfo.mLastFailedCondition || !condInfo.mLastFailedCondition->ConditionTarget)
|
||||
return SPELL_FAILED_CASTER_AURASTATE;
|
||||
return SPELL_FAILED_BAD_TARGETS;
|
||||
@@ -5642,7 +5645,7 @@ SpellCastResult Spell::CheckCast(bool strict)
|
||||
Battlefield* Bf = sBattlefieldMgr->GetBattlefieldToZoneId(m_originalCaster->GetZoneId());
|
||||
if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(m_originalCaster->GetAreaId()))
|
||||
if (area->Flags[0] & AREA_FLAG_NO_FLY_ZONE || (Bf && !Bf->CanFlyIn()))
|
||||
return (_triggeredCastFlags & TRIGGERED_DONT_REPORT_CAST_ERROR) ? SPELL_FAILED_DONT_REPORT : SPELL_FAILED_NOT_HERE;
|
||||
return SPELL_FAILED_NOT_HERE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -6038,23 +6041,23 @@ SpellCastResult Spell::CheckRange(bool strict)
|
||||
if (target && target != m_caster)
|
||||
{
|
||||
if (m_caster->GetExactDistSq(target) > maxRange)
|
||||
return !(_triggeredCastFlags & TRIGGERED_DONT_REPORT_CAST_ERROR) ? SPELL_FAILED_OUT_OF_RANGE : SPELL_FAILED_DONT_REPORT;
|
||||
return SPELL_FAILED_OUT_OF_RANGE;
|
||||
|
||||
if (minRange > 0.0f && m_caster->GetExactDistSq(target) < minRange)
|
||||
return !(_triggeredCastFlags & TRIGGERED_DONT_REPORT_CAST_ERROR) ? SPELL_FAILED_OUT_OF_RANGE : SPELL_FAILED_DONT_REPORT;
|
||||
return SPELL_FAILED_OUT_OF_RANGE;
|
||||
|
||||
if (m_caster->GetTypeId() == TYPEID_PLAYER &&
|
||||
(((m_spellInfo->FacingCasterFlags & SPELL_FACING_FLAG_INFRONT) && !m_caster->HasInArc(static_cast<float>(M_PI), target))
|
||||
&& !m_caster->IsWithinBoundaryRadius(target)))
|
||||
return !(_triggeredCastFlags & TRIGGERED_DONT_REPORT_CAST_ERROR) ? SPELL_FAILED_UNIT_NOT_INFRONT : SPELL_FAILED_DONT_REPORT;
|
||||
return SPELL_FAILED_UNIT_NOT_INFRONT;
|
||||
}
|
||||
|
||||
if (m_targets.HasDst() && !m_targets.HasTraj())
|
||||
{
|
||||
if (m_caster->GetExactDistSq(m_targets.GetDstPos()) > maxRange)
|
||||
return !(_triggeredCastFlags & TRIGGERED_DONT_REPORT_CAST_ERROR) ? SPELL_FAILED_OUT_OF_RANGE : SPELL_FAILED_DONT_REPORT;
|
||||
return SPELL_FAILED_OUT_OF_RANGE;
|
||||
if (minRange > 0.0f && m_caster->GetExactDistSq(m_targets.GetDstPos()) < minRange)
|
||||
return !(_triggeredCastFlags & TRIGGERED_DONT_REPORT_CAST_ERROR) ? SPELL_FAILED_OUT_OF_RANGE : SPELL_FAILED_DONT_REPORT;
|
||||
return SPELL_FAILED_OUT_OF_RANGE;
|
||||
}
|
||||
|
||||
return SPELL_CAST_OK;
|
||||
@@ -6543,11 +6546,11 @@ SpellCastResult Spell::CheckItems()
|
||||
|
||||
// skip spell if no weapon in slot or broken
|
||||
if (!item || item->IsBroken())
|
||||
return (_triggeredCastFlags & TRIGGERED_DONT_REPORT_CAST_ERROR) ? SPELL_FAILED_DONT_REPORT : SPELL_FAILED_EQUIPPED_ITEM_CLASS;
|
||||
return SPELL_FAILED_EQUIPPED_ITEM_CLASS;
|
||||
|
||||
// skip spell if weapon not fit to triggered spell
|
||||
if (!item->IsFitToSpellRequirements(m_spellInfo))
|
||||
return (_triggeredCastFlags & TRIGGERED_DONT_REPORT_CAST_ERROR) ? SPELL_FAILED_DONT_REPORT : SPELL_FAILED_EQUIPPED_ITEM_CLASS;
|
||||
return SPELL_FAILED_EQUIPPED_ITEM_CLASS;
|
||||
}
|
||||
|
||||
// offhand hand weapon required
|
||||
@@ -6557,11 +6560,11 @@ SpellCastResult Spell::CheckItems()
|
||||
|
||||
// skip spell if no weapon in slot or broken
|
||||
if (!item || item->IsBroken())
|
||||
return (_triggeredCastFlags & TRIGGERED_DONT_REPORT_CAST_ERROR) ? SPELL_FAILED_DONT_REPORT : SPELL_FAILED_EQUIPPED_ITEM_CLASS;
|
||||
return SPELL_FAILED_EQUIPPED_ITEM_CLASS;
|
||||
|
||||
// skip spell if weapon not fit to triggered spell
|
||||
if (!item->IsFitToSpellRequirements(m_spellInfo))
|
||||
return (_triggeredCastFlags & TRIGGERED_DONT_REPORT_CAST_ERROR) ? SPELL_FAILED_DONT_REPORT : SPELL_FAILED_EQUIPPED_ITEM_CLASS;
|
||||
return SPELL_FAILED_EQUIPPED_ITEM_CLASS;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user