Fix evade issues when a spell hits the target just before evading. (#19815)

- Creatures should no longer get stuck in evade mode following a target if a spell hits the creature just as it's entering evade mode.
- Fixes and closes #4943. Finally.
This commit is contained in:
Treeston
2017-05-28 22:18:22 +02:00
committed by Aokromes
parent 2f91389e7d
commit e80602f048

View File

@@ -5465,6 +5465,11 @@ bool Unit::Attack(Unit* victim, bool meleeAttack)
if (GetTypeId() == TYPEID_PLAYER && IsMounted())
return false;
Creature* creature = ToCreature();
// creatures cannot attack while evading
if (creature && creature->IsInEvadeMode())
return false;
if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED))
return false;
@@ -5529,7 +5534,7 @@ bool Unit::Attack(Unit* victim, bool meleeAttack)
//if (GetTypeId() == TYPEID_UNIT)
// ToCreature()->SetCombatStartPosition(GetPositionX(), GetPositionY(), GetPositionZ());
if (GetTypeId() == TYPEID_UNIT && !IsPet())
if (creature && !IsPet())
{
// should not let player enter combat by right clicking target - doesn't helps
AddThreat(victim, 0.0f);
@@ -5537,8 +5542,8 @@ bool Unit::Attack(Unit* victim, bool meleeAttack)
if (victim->GetTypeId() == TYPEID_PLAYER)
victim->SetInCombatWith(this);
ToCreature()->SendAIReaction(AI_REACTION_HOSTILE);
ToCreature()->CallAssistance();
creature->SendAIReaction(AI_REACTION_HOSTILE);
creature->CallAssistance();
// Remove emote state - will be restored on creature reset
SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
@@ -5553,7 +5558,7 @@ bool Unit::Attack(Unit* victim, bool meleeAttack)
// Let the pet know we've started attacking someting. Handles melee attacks only
// Spells such as auto-shot and others handled in WorldSession::HandleCastSpellOpcode
if (this->GetTypeId() == TYPEID_PLAYER)
if (GetTypeId() == TYPEID_PLAYER)
{
Pet* playerPet = this->ToPlayer()->GetPet();