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:
@@ -1788,14 +1788,42 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta
|
|||||||
// Not allow disarm unarmed player
|
// Not allow disarm unarmed player
|
||||||
if (Mechanic == MECHANIC_DISARM)
|
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();
|
AuraType disarmAuraType = SPELL_AURA_MOD_DISARM;
|
||||||
if (!player->GetWeaponForAttack(BASE_ATTACK, true))
|
switch (i)
|
||||||
return SPELL_FAILED_TARGET_NO_WEAPONS;
|
{
|
||||||
|
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;
|
return SPELL_FAILED_TARGET_NO_WEAPONS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user