mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
[12675] Fix MoveGen's interrupting after last commit
Signed-off-by: Schmoozerd <schmoozerd@cmangos> (based on commit [12473] - baa6525)
This commit is contained in:
parent
394be2c5bf
commit
60a7bec73f
14 changed files with 32 additions and 18 deletions
|
|
@ -51,8 +51,7 @@ void WorldSession::HandleBattlemasterHelloOpcode(WorldPacket& recv_data)
|
|||
return;
|
||||
|
||||
// Stop the npc if moving
|
||||
if (!pCreature->IsStopped())
|
||||
pCreature->StopMoving();
|
||||
pCreature->StopMoving();
|
||||
|
||||
BattleGroundTypeId bgTypeId = sBattleGroundMgr.GetBattleMasterBG(pCreature->GetEntry());
|
||||
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ void ConfusedMovementGenerator<T>::Initialize(T& unit)
|
|||
template<class T>
|
||||
void ConfusedMovementGenerator<T>::Interrupt(T& unit)
|
||||
{
|
||||
unit.InterruptMoving();
|
||||
// confused state still applied while movegen disabled
|
||||
unit.clearUnitState(UNIT_STAT_CONFUSED_MOVE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -141,6 +141,7 @@ void FleeingMovementGenerator<Creature>::Finalize(Creature& owner)
|
|||
template<class T>
|
||||
void FleeingMovementGenerator<T>::Interrupt(T& owner)
|
||||
{
|
||||
owner.InterruptMoving();
|
||||
// flee state still applied while movegen disabled
|
||||
owner.clearUnitState(UNIT_STAT_FLEEING_MOVE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -568,8 +568,7 @@ void WorldSession::SendListInventory(ObjectGuid vendorguid)
|
|||
GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH);
|
||||
|
||||
// Stop the npc if moving
|
||||
if (!pCreature->IsStopped())
|
||||
pCreature->StopMoving();
|
||||
pCreature->StopMoving();
|
||||
|
||||
VendorItemData const* vItems = pCreature->GetVendorItems();
|
||||
VendorItemData const* tItems = pCreature->GetVendorTemplateItems();
|
||||
|
|
|
|||
|
|
@ -44,8 +44,7 @@ inline bool isStatic(MovementGenerator* mv)
|
|||
void MotionMaster::Initialize()
|
||||
{
|
||||
// stop current move
|
||||
if (!m_owner->IsStopped())
|
||||
m_owner->StopMoving();
|
||||
m_owner->StopMoving();
|
||||
|
||||
// clear ALL movement generators (including default)
|
||||
Clear(false, true);
|
||||
|
|
|
|||
|
|
@ -346,8 +346,7 @@ void WorldSession::HandleGossipHelloOpcode(WorldPacket& recv_data)
|
|||
if (GetPlayer()->hasUnitState(UNIT_STAT_DIED))
|
||||
GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH);
|
||||
|
||||
if (!pCreature->IsStopped())
|
||||
pCreature->StopMoving();
|
||||
pCreature->StopMoving();
|
||||
|
||||
if (pCreature->isSpiritGuide())
|
||||
pCreature->SendAreaSpiritHealerQueryOpcode(_player);
|
||||
|
|
|
|||
|
|
@ -32,8 +32,7 @@ void PointMovementGenerator<T>::Initialize(T& unit)
|
|||
if (unit.hasUnitState(UNIT_STAT_CAN_NOT_REACT | UNIT_STAT_NOT_MOVE))
|
||||
return;
|
||||
|
||||
if (!unit.IsStopped())
|
||||
unit.StopMoving();
|
||||
unit.StopMoving();
|
||||
|
||||
unit.addUnitState(UNIT_STAT_ROAMING | UNIT_STAT_ROAMING_MOVE);
|
||||
Movement::MoveSplineInit init(unit);
|
||||
|
|
@ -53,15 +52,14 @@ void PointMovementGenerator<T>::Finalize(T& unit)
|
|||
template<class T>
|
||||
void PointMovementGenerator<T>::Interrupt(T& unit)
|
||||
{
|
||||
unit.InterruptMoving();
|
||||
unit.clearUnitState(UNIT_STAT_ROAMING | UNIT_STAT_ROAMING_MOVE);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
void PointMovementGenerator<T>::Reset(T& unit)
|
||||
{
|
||||
if (!unit.IsStopped())
|
||||
unit.StopMoving();
|
||||
|
||||
unit.StopMoving();
|
||||
unit.addUnitState(UNIT_STAT_ROAMING | UNIT_STAT_ROAMING_MOVE);
|
||||
}
|
||||
|
||||
|
|
@ -152,8 +150,7 @@ void FlyOrLandMovementGenerator::Initialize(Unit& unit)
|
|||
if (unit.hasUnitState(UNIT_STAT_CAN_NOT_REACT | UNIT_STAT_NOT_MOVE))
|
||||
return;
|
||||
|
||||
if (!unit.IsStopped())
|
||||
unit.StopMoving();
|
||||
unit.StopMoving();
|
||||
|
||||
float x, y, z;
|
||||
GetDestination(x, y, z);
|
||||
|
|
|
|||
|
|
@ -99,8 +99,7 @@ void WorldSession::HandleQuestgiverHelloOpcode(WorldPacket& recv_data)
|
|||
GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH);
|
||||
|
||||
// Stop the npc if moving
|
||||
if (!pCreature->IsStopped())
|
||||
pCreature->StopMoving();
|
||||
pCreature->StopMoving();
|
||||
|
||||
if (sScriptMgr.OnGossipHello(_player, pCreature))
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ void RandomMovementGenerator<Creature>::Reset(Creature& creature)
|
|||
template<>
|
||||
void RandomMovementGenerator<Creature>::Interrupt(Creature& creature)
|
||||
{
|
||||
creature.InterruptMoving();
|
||||
creature.clearUnitState(UNIT_STAT_ROAMING | UNIT_STAT_ROAMING_MOVE);
|
||||
creature.SetWalk(!creature.hasUnitState(UNIT_STAT_RUNNING_STATE), false);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -210,6 +210,7 @@ void ChaseMovementGenerator<T>::Finalize(T& owner)
|
|||
template<class T>
|
||||
void ChaseMovementGenerator<T>::Interrupt(T& owner)
|
||||
{
|
||||
owner.InterruptMoving();
|
||||
owner.clearUnitState(UNIT_STAT_CHASE | UNIT_STAT_CHASE_MOVE);
|
||||
}
|
||||
|
||||
|
|
@ -281,6 +282,7 @@ void FollowMovementGenerator<T>::Finalize(T& owner)
|
|||
template<class T>
|
||||
void FollowMovementGenerator<T>::Interrupt(T& owner)
|
||||
{
|
||||
owner.InterruptMoving();
|
||||
owner.clearUnitState(UNIT_STAT_FOLLOW | UNIT_STAT_FOLLOW_MOVE);
|
||||
_updateSpeed(owner);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10868,6 +10868,21 @@ void Unit::StopMoving(bool forceSendStop /*=false*/)
|
|||
init.Launch();
|
||||
}
|
||||
|
||||
void Unit::InterruptMoving(bool forceSendStop /*=false*/)
|
||||
{
|
||||
bool isMoving = false;
|
||||
|
||||
if (!movespline->Finalized())
|
||||
{
|
||||
Movement::Location loc = movespline->ComputePosition();
|
||||
movespline->_Interrupt();
|
||||
Relocate(loc.x, loc.y, loc.z, loc.orientation);
|
||||
isMoving = true;
|
||||
}
|
||||
|
||||
StopMoving(forceSendStop || isMoving);
|
||||
}
|
||||
|
||||
void Unit::SetFeared(bool apply, ObjectGuid casterGuid, uint32 spellID, uint32 time)
|
||||
{
|
||||
if (apply)
|
||||
|
|
|
|||
|
|
@ -2676,6 +2676,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
|||
|
||||
bool IsStopped() const { return !(hasUnitState(UNIT_STAT_MOVING)); }
|
||||
void StopMoving(bool forceSendStop = false);
|
||||
void InterruptMoving(bool forceSendStop = false);
|
||||
|
||||
void SetFeared(bool apply, ObjectGuid casterGuid = ObjectGuid(), uint32 spellID = 0, uint32 time = 0);
|
||||
void SetConfused(bool apply, ObjectGuid casterGuid = ObjectGuid(), uint32 spellID = 0);
|
||||
|
|
|
|||
|
|
@ -89,6 +89,7 @@ void WaypointMovementGenerator<Creature>::Finalize(Creature& creature)
|
|||
|
||||
void WaypointMovementGenerator<Creature>::Interrupt(Creature& creature)
|
||||
{
|
||||
creature.InterruptMoving();
|
||||
creature.clearUnitState(UNIT_STAT_ROAMING | UNIT_STAT_ROAMING_MOVE);
|
||||
creature.SetWalk(!creature.hasUnitState(UNIT_STAT_RUNNING_STATE), false);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "12674"
|
||||
#define REVISION_NR "12675"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue