[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:
Schmoozerd 2011-04-12 15:28:37 +04:00 committed by VladimirMangos
parent ea516bef45
commit 328bd68350
5 changed files with 28 additions and 26 deletions

View file

@ -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;
}