From c9a3698a1130fc4b150ff0574da043e38f61bc99 Mon Sep 17 00:00:00 2001 From: n0n4m3 Date: Sat, 16 Jan 2010 19:35:30 +0300 Subject: [PATCH] Implement speed reduction at creatures DoFleeToGetAssistance, by NoFantasy. --HG-- branch : trunk --- src/game/Creature.cpp | 8 +++++++- src/game/TargetedMovementGenerator.cpp | 4 +--- src/game/Unit.cpp | 14 +++++++++++++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp index 384eec4ebdb..8868b24c768 100644 --- a/src/game/Creature.cpp +++ b/src/game/Creature.cpp @@ -696,6 +696,8 @@ void Creature::DoFleeToGetAssistance() cell_lock->Visit(cell_lock, grid_creature_searcher, *GetMap(), *this, radius); SetNoSearchAssistance(true); + UpdateSpeed(MOVE_RUN, false); + if(!pCreature) //SetFeared(true, getVictim()->GetGUID(), 0 ,sWorld.getConfig(CONFIG_CREATURE_FAMILY_FLEE_DELAY)); //TODO: use 31365 @@ -1464,7 +1466,11 @@ void Creature::setDeathState(DeathState s) if ( LootTemplates_Skinning.HaveLootFor(GetCreatureInfo()->SkinLootId) ) SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); - SetNoSearchAssistance(false); + if (HasSearchedAssistance()) + { + SetNoSearchAssistance(false); + UpdateSpeed(MOVE_RUN, false); + } //Dismiss group if is leader if(m_formation && m_formation->getLeader() == this) diff --git a/src/game/TargetedMovementGenerator.cpp b/src/game/TargetedMovementGenerator.cpp index 3b001c1ed3c..80e80433821 100644 --- a/src/game/TargetedMovementGenerator.cpp +++ b/src/game/TargetedMovementGenerator.cpp @@ -153,9 +153,7 @@ template void TargetedMovementGenerator::Initialize(T &owner) { - if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->HasSearchedAssistance()) - owner.AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); - else + if (owner.isInCombat()) owner.RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); _setTargetLocation(owner); diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 268de0d0f05..04de0f4840a 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -8927,7 +8927,12 @@ bool Unit::AttackStop() if (GetTypeId() == TYPEID_UNIT) { ((Creature*)this)->SetNoCallAssistance(false); - ((Creature*)this)->SetNoSearchAssistance(false); + + if (((Creature*)this)->HasSearchedAssistance()) + { + ((Creature*)this)->SetNoSearchAssistance(false); + UpdateSpeed(MOVE_RUN, false); + } } SendMeleeAttackStop(victim); @@ -11714,6 +11719,13 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced) 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 int32 slow = GetMaxNegativeAuraModifier(SPELL_AURA_MOD_DECREASE_SPEED); if (slow)