[8077] Resolve mixed store and use 2 different flags values types in single field.

* Create new monster move field in Creature class and use it in all cases when expected use MONSTER_MOVE_* flags.
* Store and use MOVEMENTFLAG_* values in field in MovementInfo structure of Player class.
* Cleanups and fix related code.

NOTE: DB in creature_addon store values similar MONSTER_MOVE_* flags, scritps also expected set only this flags.
This commit is contained in:
VladimirMangos 2009-06-25 11:03:51 +04:00
parent 00fc1d7593
commit 21a6a26386
24 changed files with 215 additions and 201 deletions

View file

@ -85,24 +85,29 @@ TargetedMovementGenerator<T>::_setTargetLocation(T &owner)
i_destinationHolder.SetDestination(traveller, x, y, z);
owner.addUnitState(UNIT_STAT_CHASE);
if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->canFly())
owner.AddUnitMovementFlag(MONSTER_MOVE_FLY);
((Creature&)owner).AddMonsterMoveFlag(MONSTER_MOVE_FLY);
}
template<class T>
void
TargetedMovementGenerator<T>::Initialize(T &owner)
template<>
void TargetedMovementGenerator<Creature>::Initialize(Creature &owner)
{
if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->HasSearchedAssistance())
owner.AddUnitMovementFlag(MONSTER_MOVE_WALK);
if (owner.HasSearchedAssistance())
owner.AddMonsterMoveFlag(MONSTER_MOVE_WALK);
else
owner.RemoveUnitMovementFlag(MONSTER_MOVE_WALK);
owner.RemoveMonsterMoveFlag(MONSTER_MOVE_WALK);
if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->canFly())
owner.AddUnitMovementFlag(MONSTER_MOVE_FLY);
if (((Creature*)&owner)->canFly())
owner.AddMonsterMoveFlag(MONSTER_MOVE_FLY);
_setTargetLocation(owner);
}
template<>
void TargetedMovementGenerator<Player>::Initialize(Player &owner)
{
_setTargetLocation(owner);
}
template<class T>
void
TargetedMovementGenerator<T>::Finalize(T &owner)
@ -150,7 +155,7 @@ TargetedMovementGenerator<T>::Update(T &owner, const uint32 & time_diff)
{
owner.addUnitState(UNIT_STAT_CHASE);
if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->canFly())
owner.AddUnitMovementFlag(MONSTER_MOVE_FLY);
((Creature&)owner).AddMonsterMoveFlag(MONSTER_MOVE_FLY);
i_destinationHolder.StartTravel(traveller);
return true;
@ -199,8 +204,6 @@ TargetedMovementGenerator<T>::GetTarget() const
template void TargetedMovementGenerator<Player>::_setTargetLocation(Player &);
template void TargetedMovementGenerator<Creature>::_setTargetLocation(Creature &);
template void TargetedMovementGenerator<Player>::Initialize(Player &);
template void TargetedMovementGenerator<Creature>::Initialize(Creature &);
template void TargetedMovementGenerator<Player>::Finalize(Player &);
template void TargetedMovementGenerator<Creature>::Finalize(Creature &);
template void TargetedMovementGenerator<Player>::Reset(Player &);