fix(Core/Spells): Fixed spell error when players tries to disarm rang… (#12885)

fix(Core/Spells): Fixed spell error when players tries to disarm ranged-armed victim.

Fixes #11803
This commit is contained in:
UltraNix
2022-09-02 14:31:48 +02:00
committed by GitHub
parent 491d0d4f09
commit ea0a344af5

View File

@@ -1788,14 +1788,42 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta
// Not allow disarm unarmed player
if (Mechanic == MECHANIC_DISARM)
{
if (unitTarget->GetTypeId() == TYPEID_PLAYER)
bool valid = false;
for (uint8 i = BASE_ATTACK; i < MAX_ATTACK; ++i)
{
Player const* player = unitTarget->ToPlayer();
if (!player->GetWeaponForAttack(BASE_ATTACK, true))
return SPELL_FAILED_TARGET_NO_WEAPONS;
AuraType disarmAuraType = SPELL_AURA_MOD_DISARM;
switch (i)
{
case OFF_ATTACK:
disarmAuraType = SPELL_AURA_MOD_DISARM_OFFHAND;
break;
case RANGED_ATTACK:
disarmAuraType = SPELL_AURA_MOD_DISARM_RANGED;
break;
}
if (HasAura(disarmAuraType))
{
if (Player const* player = unitTarget->ToPlayer())
{
if (player->GetWeaponForAttack(WeaponAttackType(BASE_ATTACK + i), true))
{
valid = true;
break;
}
}
else if (unitTarget->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + i))
{
valid = true;
break;
}
}
}
else if (!unitTarget->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID))
if (!valid)
{
return SPELL_FAILED_TARGET_NO_WEAPONS;
}
}
}
}