mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
[11336] Use movgen Finilize for code applied at normal movegen expire
This let resolve porblems for casts/etc that before happens before real movgen stop from code logic. Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
ea516bef45
commit
328bd68350
5 changed files with 28 additions and 26 deletions
|
|
@ -24,20 +24,17 @@
|
||||||
#include "ObjectMgr.h"
|
#include "ObjectMgr.h"
|
||||||
#include "WorldPacket.h"
|
#include "WorldPacket.h"
|
||||||
|
|
||||||
void
|
void HomeMovementGenerator<Creature>::Initialize(Creature & owner)
|
||||||
HomeMovementGenerator<Creature>::Initialize(Creature & owner)
|
|
||||||
{
|
{
|
||||||
owner.RemoveSplineFlag(SPLINEFLAG_WALKMODE);
|
owner.RemoveSplineFlag(SPLINEFLAG_WALKMODE);
|
||||||
_setTargetLocation(owner);
|
_setTargetLocation(owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void HomeMovementGenerator<Creature>::Reset(Creature &)
|
||||||
HomeMovementGenerator<Creature>::Reset(Creature &)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void HomeMovementGenerator<Creature>::_setTargetLocation(Creature & owner)
|
||||||
HomeMovementGenerator<Creature>::_setTargetLocation(Creature & owner)
|
|
||||||
{
|
{
|
||||||
if (owner.hasUnitState(UNIT_STAT_NOT_MOVE))
|
if (owner.hasUnitState(UNIT_STAT_NOT_MOVE))
|
||||||
return;
|
return;
|
||||||
|
|
@ -55,8 +52,7 @@ HomeMovementGenerator<Creature>::_setTargetLocation(Creature & owner)
|
||||||
owner.clearUnitState(UNIT_STAT_ALL_STATE);
|
owner.clearUnitState(UNIT_STAT_ALL_STATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool HomeMovementGenerator<Creature>::Update(Creature &owner, const uint32& time_diff)
|
||||||
HomeMovementGenerator<Creature>::Update(Creature &owner, const uint32& time_diff)
|
|
||||||
{
|
{
|
||||||
CreatureTraveller traveller( owner);
|
CreatureTraveller traveller( owner);
|
||||||
if (i_destinationHolder.UpdateTraveller(traveller, time_diff, false))
|
if (i_destinationHolder.UpdateTraveller(traveller, time_diff, false))
|
||||||
|
|
@ -65,7 +61,20 @@ HomeMovementGenerator<Creature>::Update(Creature &owner, const uint32& time_diff
|
||||||
return true; // not expire now, but already lost
|
return true; // not expire now, but already lost
|
||||||
}
|
}
|
||||||
|
|
||||||
if (time_diff > i_travel_timer)
|
if (time_diff >= i_travel_timer)
|
||||||
|
{
|
||||||
|
i_travel_timer = 0; // Used as check in Finalize
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
i_travel_timer -= time_diff;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HomeMovementGenerator<Creature>::Finalize(Creature& owner)
|
||||||
|
{
|
||||||
|
if (i_travel_timer == 0)
|
||||||
{
|
{
|
||||||
owner.AddSplineFlag(SPLINEFLAG_WALKMODE);
|
owner.AddSplineFlag(SPLINEFLAG_WALKMODE);
|
||||||
|
|
||||||
|
|
@ -85,10 +94,5 @@ HomeMovementGenerator<Creature>::Update(Creature &owner, const uint32& time_diff
|
||||||
|
|
||||||
owner.LoadCreatureAddon(true);
|
owner.LoadCreatureAddon(true);
|
||||||
owner.AI()->JustReachedHome();
|
owner.AI()->JustReachedHome();
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
i_travel_timer -= time_diff;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ class MANGOS_DLL_SPEC HomeMovementGenerator<Creature>
|
||||||
~HomeMovementGenerator() {}
|
~HomeMovementGenerator() {}
|
||||||
|
|
||||||
void Initialize(Creature &);
|
void Initialize(Creature &);
|
||||||
void Finalize(Creature &) {}
|
void Finalize(Creature &);
|
||||||
void Interrupt(Creature &) {}
|
void Interrupt(Creature &) {}
|
||||||
void Reset(Creature &);
|
void Reset(Creature &);
|
||||||
bool Update(Creature &, const uint32 &);
|
bool Update(Creature &, const uint32 &);
|
||||||
|
|
|
||||||
|
|
@ -162,6 +162,8 @@ void MotionMaster::DirectExpire(bool reset)
|
||||||
delete temp;
|
delete temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Store current top MMGen, as Finalize might push a new MMGen
|
||||||
|
MovementGenerator* nowTop = empty() ? NULL : top();
|
||||||
// it can add another motions instead
|
// it can add another motions instead
|
||||||
curr->Finalize(*m_owner);
|
curr->Finalize(*m_owner);
|
||||||
|
|
||||||
|
|
@ -171,7 +173,8 @@ void MotionMaster::DirectExpire(bool reset)
|
||||||
if (empty())
|
if (empty())
|
||||||
Initialize();
|
Initialize();
|
||||||
|
|
||||||
if (reset)
|
// Prevent reseting possible new pushed MMGen
|
||||||
|
if (reset && top() == nowTop)
|
||||||
top()->Reset(*m_owner);
|
top()->Reset(*m_owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,9 @@ template<class T>
|
||||||
void PointMovementGenerator<T>::Finalize(T &unit)
|
void PointMovementGenerator<T>::Finalize(T &unit)
|
||||||
{
|
{
|
||||||
unit.clearUnitState(UNIT_STAT_ROAMING|UNIT_STAT_ROAMING_MOVE);
|
unit.clearUnitState(UNIT_STAT_ROAMING|UNIT_STAT_ROAMING_MOVE);
|
||||||
|
|
||||||
|
if (i_destinationHolder.HasArrived())
|
||||||
|
MovementInform(unit);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
|
|
@ -83,15 +86,7 @@ bool PointMovementGenerator<T>::Update(T &unit, const uint32 &diff)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i_destinationHolder.HasArrived())
|
if (i_destinationHolder.HasArrived())
|
||||||
{
|
|
||||||
unit.clearUnitState(UNIT_STAT_ROAMING_MOVE);
|
|
||||||
MovementInform(unit);
|
|
||||||
|
|
||||||
if (!IsActive(unit))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "11335"
|
#define REVISION_NR "11336"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue