[9165] Implement speed reduction at creatures DoFleeToGetAssistance

Signed-off-by: NoFantasy <nofantasy@nf.no>
This commit is contained in:
NoFantasy 2010-01-13 02:25:04 +01:00
parent 1e8e8f5fd2
commit 23a77a1d36
4 changed files with 23 additions and 6 deletions

View file

@ -557,6 +557,8 @@ void Creature::DoFleeToGetAssistance()
cell_lock->Visit(cell_lock, grid_creature_searcher, *GetMap(), *this, radius); cell_lock->Visit(cell_lock, grid_creature_searcher, *GetMap(), *this, radius);
SetNoSearchAssistance(true); SetNoSearchAssistance(true);
UpdateSpeed(MOVE_RUN, false);
if(!pCreature) if(!pCreature)
SetFeared(true, getVictim()->GetGUID(), 0 ,sWorld.getConfig(CONFIG_CREATURE_FAMILY_FLEE_DELAY)); SetFeared(true, getVictim()->GetGUID(), 0 ,sWorld.getConfig(CONFIG_CREATURE_FAMILY_FLEE_DELAY));
else else
@ -1242,7 +1244,12 @@ void Creature::setDeathState(DeathState s)
if (canFly() && FallGround()) if (canFly() && FallGround())
return; return;
SetNoSearchAssistance(false); if (HasSearchedAssistance())
{
SetNoSearchAssistance(false);
UpdateSpeed(MOVE_RUN, false);
}
Unit::setDeathState(CORPSE); Unit::setDeathState(CORPSE);
} }
if (s == JUST_ALIVED) if (s == JUST_ALIVED)

View file

@ -91,9 +91,7 @@ TargetedMovementGenerator<T>::_setTargetLocation(T &owner)
template<> template<>
void TargetedMovementGenerator<Creature>::Initialize(Creature &owner) void TargetedMovementGenerator<Creature>::Initialize(Creature &owner)
{ {
if (owner.HasSearchedAssistance()) if (owner.isInCombat())
owner.AddMonsterMoveFlag(MONSTER_MOVE_WALK);
else if (owner.isInCombat())
owner.RemoveMonsterMoveFlag(MONSTER_MOVE_WALK); owner.RemoveMonsterMoveFlag(MONSTER_MOVE_WALK);
if (((Creature*)&owner)->canFly()) if (((Creature*)&owner)->canFly())

View file

@ -8174,7 +8174,12 @@ bool Unit::AttackStop(bool targetSwitch /*=false*/)
if(!targetSwitch && GetTypeId()==TYPEID_UNIT ) if(!targetSwitch && GetTypeId()==TYPEID_UNIT )
{ {
((Creature*)this)->SetNoCallAssistance(false); ((Creature*)this)->SetNoCallAssistance(false);
((Creature*)this)->SetNoSearchAssistance(false);
if (((Creature*)this)->HasSearchedAssistance())
{
((Creature*)this)->SetNoSearchAssistance(false);
UpdateSpeed(MOVE_RUN, false);
}
} }
SendMeleeAttackStop(victim); SendMeleeAttackStop(victim);
@ -10464,6 +10469,13 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced)
break; break;
} }
// for creature case, we check explicit if mob searched for assistance
if (GetTypeId() == TYPEID_UNIT)
{
if (((Creature*)this)->HasSearchedAssistance())
speed *= 0.66f; // best guessed value, so this will be 33% reduction. Based off initial speed, mob can then "run", "walk fast" or "walk".
}
// Apply strongest slow aura mod to speed // Apply strongest slow aura mod to speed
int32 slow = GetMaxNegativeAuraModifier(SPELL_AURA_MOD_DECREASE_SPEED); int32 slow = GetMaxNegativeAuraModifier(SPELL_AURA_MOD_DECREASE_SPEED);
if (slow) if (slow)

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "9164" #define REVISION_NR "9165"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__