mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 22:37:03 +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 "WorldPacket.h"
|
||||
|
||||
void
|
||||
HomeMovementGenerator<Creature>::Initialize(Creature & owner)
|
||||
void HomeMovementGenerator<Creature>::Initialize(Creature & owner)
|
||||
{
|
||||
owner.RemoveSplineFlag(SPLINEFLAG_WALKMODE);
|
||||
_setTargetLocation(owner);
|
||||
}
|
||||
|
||||
void
|
||||
HomeMovementGenerator<Creature>::Reset(Creature &)
|
||||
void HomeMovementGenerator<Creature>::Reset(Creature &)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
HomeMovementGenerator<Creature>::_setTargetLocation(Creature & owner)
|
||||
void HomeMovementGenerator<Creature>::_setTargetLocation(Creature & owner)
|
||||
{
|
||||
if (owner.hasUnitState(UNIT_STAT_NOT_MOVE))
|
||||
return;
|
||||
|
|
@ -55,8 +52,7 @@ HomeMovementGenerator<Creature>::_setTargetLocation(Creature & owner)
|
|||
owner.clearUnitState(UNIT_STAT_ALL_STATE);
|
||||
}
|
||||
|
||||
bool
|
||||
HomeMovementGenerator<Creature>::Update(Creature &owner, const uint32& time_diff)
|
||||
bool HomeMovementGenerator<Creature>::Update(Creature &owner, const uint32& time_diff)
|
||||
{
|
||||
CreatureTraveller traveller( owner);
|
||||
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
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
|
|
@ -85,10 +94,5 @@ HomeMovementGenerator<Creature>::Update(Creature &owner, const uint32& time_diff
|
|||
|
||||
owner.LoadCreatureAddon(true);
|
||||
owner.AI()->JustReachedHome();
|
||||
return false;
|
||||
}
|
||||
|
||||
i_travel_timer -= time_diff;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ class MANGOS_DLL_SPEC HomeMovementGenerator<Creature>
|
|||
~HomeMovementGenerator() {}
|
||||
|
||||
void Initialize(Creature &);
|
||||
void Finalize(Creature &) {}
|
||||
void Finalize(Creature &);
|
||||
void Interrupt(Creature &) {}
|
||||
void Reset(Creature &);
|
||||
bool Update(Creature &, const uint32 &);
|
||||
|
|
|
|||
|
|
@ -162,6 +162,8 @@ void MotionMaster::DirectExpire(bool reset)
|
|||
delete temp;
|
||||
}
|
||||
|
||||
// Store current top MMGen, as Finalize might push a new MMGen
|
||||
MovementGenerator* nowTop = empty() ? NULL : top();
|
||||
// it can add another motions instead
|
||||
curr->Finalize(*m_owner);
|
||||
|
||||
|
|
@ -171,7 +173,8 @@ void MotionMaster::DirectExpire(bool reset)
|
|||
if (empty())
|
||||
Initialize();
|
||||
|
||||
if (reset)
|
||||
// Prevent reseting possible new pushed MMGen
|
||||
if (reset && top() == nowTop)
|
||||
top()->Reset(*m_owner);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,6 +44,9 @@ template<class T>
|
|||
void PointMovementGenerator<T>::Finalize(T &unit)
|
||||
{
|
||||
unit.clearUnitState(UNIT_STAT_ROAMING|UNIT_STAT_ROAMING_MOVE);
|
||||
|
||||
if (i_destinationHolder.HasArrived())
|
||||
MovementInform(unit);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
|
|
@ -82,16 +85,8 @@ bool PointMovementGenerator<T>::Update(T &unit, const uint32 &diff)
|
|||
return true; // not expire now, but already lost
|
||||
}
|
||||
|
||||
if(i_destinationHolder.HasArrived())
|
||||
{
|
||||
unit.clearUnitState(UNIT_STAT_ROAMING_MOVE);
|
||||
MovementInform(unit);
|
||||
|
||||
if (!IsActive(unit))
|
||||
return true;
|
||||
|
||||
if (i_destinationHolder.HasArrived())
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "11335"
|
||||
#define REVISION_NR "11336"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue