AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
MotionMaster Class Reference

#include "MotionMaster.h"

Public Member Functions

 MotionMaster (Unit *unit)
 
 ~MotionMaster ()
 
void Initialize ()
 
void InitDefault ()
 
bool empty () const
 
int size () const
 
_Ty top () const
 
_Ty GetMotionSlot (int slot) const
 
uint8 GetCleanFlags () const
 
void DirectDelete (_Ty curr)
 
void DelayedDelete (_Ty curr)
 
void UpdateMotion (uint32 diff)
 
void Clear (bool reset=true)
 
void MovementExpired (bool reset=true)
 
void MovementExpiredOnSlot (MovementSlot slot, bool reset=true)
 
void MoveIdle ()
 
void MoveTargetedHome (bool walk=false)
 
void MoveRandom (float wanderDistance=0.0f)
 
void MoveFollow (Unit *target, float dist, float angle, MovementSlot slot=MOTION_SLOT_ACTIVE)
 
void MoveChase (Unit *target, std::optional< ChaseRange > dist={}, std::optional< ChaseAngle > angle={})
 
void MoveChase (Unit *target, float dist, float angle)
 
void MoveChase (Unit *target, float dist)
 
void MoveCircleTarget (Unit *target)
 
void MoveBackwards (Unit *target, float dist)
 
void MoveForwards (Unit *target, float dist)
 
void MoveConfused ()
 
void MoveFleeing (Unit *enemy, uint32 time=0)
 
void MovePoint (uint32 id, const Position &pos, bool generatePath=true, bool forceDestination=true)
 
void MovePoint (uint32 id, float x, float y, float z, bool generatePath=true, bool forceDestination=true, MovementSlot slot=MOTION_SLOT_ACTIVE, float orientation=0.0f)
 
void MoveSplinePath (Movement::PointsArray *path)
 
void MoveSplinePath (uint32 path_id)
 
void MoveLand (uint32 id, Position const &pos, float speed=0.0f)
 
void MoveLand (uint32 id, float x, float y, float z, float speed=0.0f)
 
void MoveTakeoff (uint32 id, Position const &pos, float speed=0.0f)
 
void MoveTakeoff (uint32 id, float x, float y, float z, float speed=0.0f)
 
void MoveCharge (float x, float y, float z, float speed=SPEED_CHARGE, uint32 id=EVENT_CHARGE, const Movement::PointsArray *path=nullptr, bool generatePath=false, float orientation=0.0f, ObjectGuid targetGUID=ObjectGuid::Empty)
 
void MoveCharge (PathGenerator const &path, float speed=SPEED_CHARGE, ObjectGuid targetGUID=ObjectGuid::Empty)
 
void MoveKnockbackFrom (float srcX, float srcY, float speedXY, float speedZ)
 
void MoveJumpTo (float angle, float speedXY, float speedZ)
 
void MoveJump (Position const &pos, float speedXY, float speedZ, uint32 id=0)
 
void MoveJump (float x, float y, float z, float speedXY, float speedZ, uint32 id=0, Unit const *target=nullptr)
 
void MoveFall (uint32 id=0, bool addFlagForNPC=false)
 
void MoveSeekAssistance (float x, float y, float z)
 
void MoveSeekAssistanceDistract (uint32 timer)
 
void MoveTaxiFlight (uint32 path, uint32 pathnode)
 
void MoveDistract (uint32 time)
 
void MovePath (uint32 path_id, bool repeatable)
 
void MoveRotate (uint32 time, RotateDirection direction)
 
MovementGeneratorType GetCurrentMovementGeneratorType () const
 
MovementGeneratorType GetMotionSlotType (int slot) const
 
uint32 GetCurrentSplineId () const
 
void propagateSpeedChange ()
 
void ReinitializeMovement ()
 
bool GetDestination (float &x, float &y, float &z)
 

Private Types

typedef MovementGenerator_Ty
 
typedef std::vector< _TyExpireList
 

Private Member Functions

void pop ()
 
bool needInitTop () const
 
void InitTop ()
 
void Mutate (MovementGenerator *m, MovementSlot slot)
 
void DirectClean (bool reset)
 
void DelayedClean ()
 
void DirectExpire (bool reset)
 
void DirectExpireSlot (MovementSlot slot, bool reset)
 
void DelayedExpire ()
 

Private Attributes

ExpireList_expList
 
_Ty Impl [MAX_MOTION_SLOT]
 
int _top
 
Unit_owner
 
bool _needInit [MAX_MOTION_SLOT]
 
uint8 _cleanFlag
 

Detailed Description

Member Typedef Documentation

◆ _Ty

◆ ExpireList

typedef std::vector<_Ty> MotionMaster::ExpireList
private

Constructor & Destructor Documentation

◆ MotionMaster()

MotionMaster::MotionMaster ( Unit unit)
inlineexplicit
133 : _expList(nullptr), _top(-1), _owner(unit), _cleanFlag(MMCF_NONE)
134 {
135 for (uint8 i = 0; i < MAX_MOTION_SLOT; ++i)
136 {
137 Impl[i] = nullptr;
138 _needInit[i] = true;
139 }
140 }
std::uint8_t uint8
Definition: Define.h:110
@ MMCF_NONE
Definition: MotionMaster.h:69
@ MAX_MOTION_SLOT
Definition: MotionMaster.h:64
int _top
Definition: MotionMaster.h:260
Unit * _owner
Definition: MotionMaster.h:261
bool _needInit[MAX_MOTION_SLOT]
Definition: MotionMaster.h:262
ExpireList * _expList
Definition: MotionMaster.h:258
_Ty Impl[MAX_MOTION_SLOT]
Definition: MotionMaster.h:259
uint8 _cleanFlag
Definition: MotionMaster.h:263

References _needInit, Impl, and MAX_MOTION_SLOT.

◆ ~MotionMaster()

MotionMaster::~MotionMaster ( )
93{
94 // clear ALL movement generators (including default)
95 while (!empty())
96 {
97 MovementGenerator* curr = top();
98 pop();
99 if (curr && !isStatic(curr))
100 delete curr; // Skip finalizing on delete, it might launch new movement
101 }
102}
bool isStatic(MovementGenerator *movement)
Definition: MotionMaster.cpp:68
_Ty top() const
Definition: MotionMaster.h:148
void pop()
Definition: MotionMaster.h:115
bool empty() const
Definition: MotionMaster.h:146
Definition: MovementGenerator.h:30

References empty(), isStatic(), pop(), and top().

Member Function Documentation

◆ Clear()

void MotionMaster::Clear ( bool  reset = true)
inline
166 {
168 {
169 if (reset)
171 else
172 _cleanFlag &= ~MMCF_RESET;
173 DelayedClean();
174 }
175 else
176 DirectClean(reset);
177 }
@ MMCF_RESET
Definition: MotionMaster.h:71
@ MMCF_UPDATE
Definition: MotionMaster.h:70
void DelayedClean()
Definition: MotionMaster.cpp:164
void DirectClean(bool reset)
Definition: MotionMaster.cpp:146

References _cleanFlag, DelayedClean(), DirectClean(), MMCF_RESET, and MMCF_UPDATE.

Referenced by PetAI::_stopAttack(), Unit::CleanupBeforeRemoveFromMap(), boss_julianne::DamageTaken(), boss_grand_champion::boss_grand_championAI::DamageTaken(), boss_bronjahm::boss_bronjahmAI::DamageTaken(), boss_hodir::boss_hodirAI::DamageTaken(), npc_ulduar_leviathan_mkii::npc_ulduar_leviathan_mkiiAI::DamageTaken(), npc_ulduar_aerial_command_unit::npc_ulduar_aerial_command_unitAI::DamageTaken(), boss_essence_of_suffering::boss_essence_of_sufferingAI::DamageTaken(), boss_essence_of_desire::boss_essence_of_desireAI::DamageTaken(), npc_blistering_zombie::npc_blistering_zombieAI::DamageTaken(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::DoAction(), npc_twilight_volunteer::DoAction(), boss_taldaram::DoAction(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::DoAction(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::DoAction(), Spell::EffectSummonType(), npc_argent_captainAI::EnterEvadeMode(), CreatureAI::EnterEvadeMode(), npc_pet_gen_argent_pony_bridle::EnterEvadeMode(), npc_pet_mage_mirror_image::EnterEvadeMode(), boss_halazzi::boss_halazziAI::EnterPhase(), boss_zuljin::boss_zuljinAI::EnterPhase(), UtherBatteredHiltEvent::Execute(), npc_hallows_end_soh::FinishEvent(), npc_pet_dk_ebon_gargoyle::npc_pet_dk_ebon_gargoyleAI::FlyAway(), spell_q11919_q11940_drake_hunt::spell_q11919_q11940_drake_hunt_AuraScript::HandleEffectRemove(), spell_item_toxic_wasteling::HandleJump(), AuraEffect::HandleModPossessPet(), spell_item_enchanted_broom_periodic::HandlePeriodicTick(), WorldSession::HandlePetActionHelper(), PetAI::HandleReturnMovement(), spell_gen_ayamiss_swarmer_loop::HandleScript(), boss_prince_keleseth_icc::boss_prince_kelesethAI::JustDied(), boss_prince_taldaram_icc::boss_prince_taldaramAI::JustDied(), boss_prince_valanar_icc::boss_prince_valanarAI::JustDied(), npc_zulian_prowler::npc_zulian_prowlerAI::JustEngagedWith(), boss_grandmaster_vorpil::JustEngagedWith(), boss_swamplord_muselek::JustEngagedWith(), boss_high_botanist_freywinn::JustEngagedWith(), npc_rocket_propelled_warhead::npc_rocket_propelled_warheadAI::JustReachedHome(), boss_algalon_the_observer::boss_algalon_the_observerAI::JustSummoned(), boss_mennu_the_betrayer::JustSummoned(), FollowerAI::MoveInLineOfSight(), npc_escortAI::MoveInLineOfSight(), SmartAI::MoveInLineOfSight(), npc_aged_dying_ancient_kodo::npc_aged_dying_ancient_kodoAI::MoveInLineOfSight(), PetAI::MovementInform(), boss_professor_putricide::boss_professor_putricideAI::MovementInform(), boss_four_horsemen::boss_four_horsemenAI::MovementInform(), boss_jedoga_shadowseeker::MovementInform(), MoveTargetedHome(), npc_pet_dk_ebon_gargoyle::npc_pet_dk_ebon_gargoyleAI::MySelectNextTarget(), spell_halion_twilight_phasing::spell_halion_twilight_phasing_AuraScript::OnApply(), spell_halion_twilight_phasing::spell_halion_twilight_phasing_AuraScript::OnRemove(), NPCStaveQuestAI::PrepareForEncounter(), npc_valkyr_battle_maiden::npc_valkyr_battle_maidenAI::Reset(), npc_batrider::Reset(), npc_q24545_lich_king::npc_q24545_lich_kingAI::Reset(), boss_magtheridon::Reset(), npc_pet_gen_gnomish_flame_turret::Reset(), boss_magtheridon::ScheduleCombatEvents(), boss_laj::ScheduleTasks(), npc_putricide_oozeAI::SelectNewTarget(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::SelectNewTarget(), Unit::SetCharmedBy(), SmartAI::SetCombatMove(), boss_grand_warlock_nethekurse::SetData(), Unit::setDeathState(), FollowerAI::SetFollowComplete(), FollowerAI::SetFollowPaused(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::SetGUID(), npc_tirion_fordring_tft::npc_tirion_fordringAI::SpellHit(), boss_urom::boss_uromAI::SpellHit(), boss_devourer_of_souls::boss_devourer_of_soulsAI::SpellHitTarget(), FollowerAI::StartFollow(), SmartAI::StopFollow(), Spell::SummonGuardian(), boss_nightbane::TakeOff(), Pet::Update(), boss_quartermaster_zigris::UpdateAI(), boss_mr_smite::boss_mr_smiteAI::UpdateAI(), boss_felblood_kaelthas::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), boss_felmyst::boss_felmystAI::UpdateAI(), boss_janalai::boss_janalaiAI::UpdateAI(), npc_janalai_hatcher::npc_janalai_hatcherAI::UpdateAI(), boss_archimonde::boss_archimondeAI::UpdateAI(), npc_giant_infernal::npc_giant_infernalAI::UpdateAI(), npc_frost_wyrm::npc_frost_wyrmAI::UpdateAI(), npc_gargoyle::npc_gargoyleAI::UpdateAI(), npc_draenei_survivor::npc_draenei_survivorAI::UpdateAI(), boss_jedoga_shadowseeker::UpdateAI(), npc_twilight_volunteer::UpdateAI(), boss_jormungarAI::UpdateAI(), boss_icehowl::boss_icehowlAI::UpdateAI(), boss_drakkari_colossus::boss_drakkari_colossusAI::UpdateAI(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::UpdateAI(), npc_valithria_cloud::npc_valithria_cloudAI::UpdateAI(), boss_malygos::boss_malygosAI::UpdateAI(), boss_mimiron::boss_mimironAI::UpdateAI(), boss_skadi_grauf::boss_skadi_graufAI::UpdateAI(), boss_ymiron::boss_ymironAI::UpdateAI(), npc_commander_eligor_dawnbringer::npc_commander_eligor_dawnbringerAI::UpdateAI(), boss_illidan_stormrage::boss_illidan_stormrageAI::UpdateAI(), boss_shade_of_akama::UpdateAI(), boss_omor_the_unscarred::UpdateAI(), boss_kaelthas::boss_kaelthasAI::UpdateAI(), npc_pet_gen_plump_turkey::UpdateAI(), npc_pet_gen_toxic_wasteling::UpdateAI(), and PetAI::UpdateAI().

◆ DelayedClean()

void MotionMaster::DelayedClean ( )
private
165{
166 while (size() > 1)
167 {
168 MovementGenerator* curr = top();
169 pop();
170 if (curr) DelayedDelete(curr);
171 }
172}
int size() const
Definition: MotionMaster.h:147
void DelayedDelete(_Ty curr)
Definition: MotionMaster.cpp:898

References DelayedDelete(), pop(), size(), and top().

Referenced by Clear().

◆ DelayedDelete()

void MotionMaster::DelayedDelete ( _Ty  curr)
899{
900 LOG_DEBUG("movement.motionmaster", "Unit (Entry {}) is trying to delete its updating MG (Type {})!", _owner->GetEntry(), curr->GetMovementGeneratorType());
901 if (isStatic(curr))
902 return;
903 if (!_expList)
904 _expList = new ExpireList();
905 _expList->push_back(curr);
906}
#define LOG_DEBUG(filterType__,...)
Definition: Log.h:169
uint32 GetEntry() const
Definition: Object.h:109
std::vector< _Ty > ExpireList
Definition: MotionMaster.h:257

References _expList, _owner, Object::GetEntry(), MovementGenerator::GetMovementGeneratorType(), isStatic(), and LOG_DEBUG.

Referenced by DelayedClean(), DelayedExpire(), and Mutate().

◆ DelayedExpire()

void MotionMaster::DelayedExpire ( )
private
195{
196 if (size() > 1)
197 {
198 MovementGenerator* curr = top();
199 pop();
200 if (curr) DelayedDelete(curr);
201 }
202
203 while (!empty() && !top())
204 --_top;
205}

References _top, DelayedDelete(), empty(), pop(), size(), and top().

Referenced by MovementExpired().

◆ DirectClean()

void MotionMaster::DirectClean ( bool  reset)
private
147{
148 while (size() > 1)
149 {
150 MovementGenerator* curr = top();
151 pop();
152 if (curr) DirectDelete(curr);
153 }
154
155 if (empty())
156 return;
157
158 if (needInitTop())
159 InitTop();
160 else if (reset)
161 top()->Reset(_owner);
162}
void InitTop()
Definition: MotionMaster.cpp:884
void DirectDelete(_Ty curr)
Definition: MotionMaster.cpp:890
bool needInitTop() const
Definition: MotionMaster.h:125
virtual void Reset(Unit *)=0

References _owner, DirectDelete(), empty(), InitTop(), needInitTop(), pop(), MovementGenerator::Reset(), size(), and top().

Referenced by Clear().

◆ DirectDelete()

void MotionMaster::DirectDelete ( _Ty  curr)
891{
892 if (isStatic(curr))
893 return;
894 curr->Finalize(_owner);
895 delete curr;
896}

References _owner, MovementGenerator::Finalize(), and isStatic().

Referenced by DirectClean(), DirectExpire(), DirectExpireSlot(), Initialize(), Mutate(), and UpdateMotion().

◆ DirectExpire()

void MotionMaster::DirectExpire ( bool  reset)
private
175{
176 if (size() > 1)
177 {
178 MovementGenerator* curr = top();
179 pop();
180 if (curr) DirectDelete(curr);
181 }
182
183 while (!empty() && !top())
184 --_top;
185
186 if (empty())
187 Initialize();
188 else if (needInitTop())
189 InitTop();
190 else if (reset)
191 top()->Reset(_owner);
192}
void Initialize()
Definition: MotionMaster.cpp:73

References _owner, _top, DirectDelete(), empty(), Initialize(), InitTop(), needInitTop(), pop(), MovementGenerator::Reset(), size(), and top().

Referenced by MovementExpired().

◆ DirectExpireSlot()

void MotionMaster::DirectExpireSlot ( MovementSlot  slot,
bool  reset 
)
private
208{
209 if (size() > 1)
210 {
211 MovementGenerator* curr = Impl[slot];
212
213 // pussywizard: clear slot AND decrease top immediately to avoid crashes when referencing null top in DirectDelete
214 Impl[slot] = nullptr;
215 while (!empty() && !top())
216 --_top;
217
218 if (curr) DirectDelete(curr);
219 }
220
221 while (!empty() && !top())
222 --_top;
223
224 if (empty())
225 Initialize();
226 else if (needInitTop())
227 InitTop();
228 else if (reset)
229 top()->Reset(_owner);
230}

References _owner, _top, DirectDelete(), empty(), Impl, Initialize(), InitTop(), needInitTop(), MovementGenerator::Reset(), size(), and top().

Referenced by MovementExpiredOnSlot().

◆ empty()

◆ GetCleanFlags()

uint8 MotionMaster::GetCleanFlags ( ) const
inline
159{ return _cleanFlag; }

References _cleanFlag.

◆ GetCurrentMovementGeneratorType()

MovementGeneratorType MotionMaster::GetCurrentMovementGeneratorType ( ) const
860{
861 if (empty())
862 return IDLE_MOTION_TYPE;
863
864 return top()->GetMovementGeneratorType();
865}
@ IDLE_MOTION_TYPE
Definition: MotionMaster.h:37
virtual MovementGeneratorType GetMovementGeneratorType()=0

References empty(), MovementGenerator::GetMovementGeneratorType(), IDLE_MOTION_TYPE, and top().

Referenced by GuardAI::EnterEvadeMode(), FollowerAI::EnterEvadeMode(), boss_volkhan::boss_volkhanAI::GoToAnvil(), npc_commandscript::HandleNpcUnFollowCommand(), WorldSession::HandleSetRaidDifficultyOpcode(), IsMutualChase(), SmartAI::JustReachedHome(), SmartAI::MovepointReached(), SplineHandler::operator()(), SmartAI::SetCombatMove(), Unit::SetSpeed(), npc_escortAI::Start(), FollowerAI::StartFollow(), npc_rabid_thistle_bear::npc_rabid_thistle_bearAI::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), npc_anubarak_spike::npc_anubarak_spikeAI::UpdateAI(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::UpdateAI(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::UpdateAI(), boss_lord_marrowgar::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), boss_the_lich_king::boss_the_lich_kingAI::UpdateAI(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::UpdateAI(), boss_shade_of_akama::UpdateAI(), npc_fel_guard_hound::npc_fel_guard_houndAI::UpdateAI(), npc_mature_netherwing_drake::npc_mature_netherwing_drakeAI::UpdateAI(), npc_concentrated_ball::npc_concentrated_ballAI::UpdateAI(), and Player::UpdateCharmedAI().

◆ GetCurrentSplineId()

uint32 MotionMaster::GetCurrentSplineId ( ) const
877{
878 if (empty())
879 return 0;
880
881 return top()->GetSplineId();
882}
virtual uint32 GetSplineId() const
Definition: MovementGenerator.h:43

References empty(), MovementGenerator::GetSplineId(), and top().

Referenced by SplineHandler::operator()().

◆ GetDestination()

bool MotionMaster::GetDestination ( float &  x,
float &  y,
float &  z 
)
909{
911 return false;
912
913 G3D::Vector3 const& dest = _owner->movespline->FinalDestination();
914 x = dest.x;
915 y = dest.y;
916 z = dest.z;
917 return true;
918}
Movement::MoveSpline * movespline
Definition: Unit.h:2454
bool Finalized() const
Definition: MoveSpline.h:116
Vector3 FinalDestination() const
Definition: MoveSpline.h:120

References _owner, Movement::MoveSpline::FinalDestination(), Movement::MoveSpline::Finalized(), and Unit::movespline.

Referenced by misc_commandscript::HandleMovegensCommand().

◆ GetMotionSlot()

_Ty MotionMaster::GetMotionSlot ( int  slot) const
inline
154 {
155 ASSERT(slot >= 0);
156 return Impl[slot];
157 }
#define ASSERT
Definition: Errors.h:68

References ASSERT, and Impl.

Referenced by HomeMovementGenerator< Creature >::_setTargetLocation(), and misc_commandscript::HandleMovegensCommand().

◆ GetMotionSlotType()

◆ InitDefault()

void MotionMaster::InitDefault ( )
88{
90}
@ MOTION_SLOT_IDLE
Definition: MotionMaster.h:61
MovementGenerator * SelectMovementGenerator(Unit *unit)
Definition: CreatureAISelector.cpp:91
void Mutate(MovementGenerator *m, MovementSlot slot)
Definition: MotionMaster.cpp:770

References _owner, MOTION_SLOT_IDLE, Mutate(), and FactorySelector::SelectMovementGenerator().

Referenced by Initialize(), npc_mature_netherwing_drake::npc_mature_netherwing_drakeAI::JustReachedHome(), Unit::RemoveCharmedBy(), and Creature::Respawn().

◆ Initialize()

◆ InitTop()

void MotionMaster::InitTop ( )
private
885{
887 _needInit[_top] = false;
888}
virtual void Initialize(Unit *)=0

References _needInit, _owner, _top, MovementGenerator::Initialize(), and top().

Referenced by DirectClean(), DirectExpire(), DirectExpireSlot(), and UpdateMotion().

◆ MoveBackwards()

void MotionMaster::MoveBackwards ( Unit target,
float  dist 
)
323{
324 if (!target)
325 {
326 return;
327 }
328
329 Position const& pos = target->GetPosition();
330 float angle = target->GetAngle(_owner);
331 G3D::Vector3 point;
332 point.x = pos.m_positionX + dist * cosf(angle);
333 point.y = pos.m_positionY + dist * sinf(angle);
334 point.z = pos.m_positionZ;
335
336 if (!_owner->GetMap()->CanReachPositionAndGetValidCoords(_owner, point.x, point.y, point.z, true, true))
337 {
338 return;
339 }
340
342 init.MoveTo(point.x, point.y, point.z, false);
343 init.SetFacing(target);
344 init.SetOrientationInversed();
345 init.Launch();
346}
Map * GetMap() const
Definition: Object.h:517
Definition: Position.h:28
float m_positionZ
Definition: Position.h:58
float m_positionX
Definition: Position.h:56
float m_positionY
Definition: Position.h:57
void GetPosition(float &x, float &y) const
Definition: Position.h:122
float GetAngle(const Position *pos) const
Definition: Position.cpp:77
bool CanReachPositionAndGetValidCoords(WorldObject const *source, PathGenerator *path, float &destX, float &destY, float &destZ, bool failOnCollision=true, bool failOnSlopes=true) const
Check if a given source can reach a specific point following a path and normalize the coords....
Definition: Map.cpp:3834
Definition: MoveSplineInit.h:71

References _owner, Map::CanReachPositionAndGetValidCoords(), Position::GetAngle(), WorldObject::GetMap(), Position::GetPosition(), Movement::MoveSplineInit::Launch(), Position::m_positionX, Position::m_positionY, Position::m_positionZ, Movement::MoveSplineInit::MoveTo(), Movement::MoveSplineInit::SetFacing(), and Movement::MoveSplineInit::SetOrientationInversed().

Referenced by CreatureAI::MoveBackwardsChecks(), and boss_quartermaster_zigris::SpellHitTarget().

◆ MoveCharge() [1/2]

void MotionMaster::MoveCharge ( float  x,
float  y,
float  z,
float  speed = SPEED_CHARGE,
uint32  id = EVENT_CHARGE,
const Movement::PointsArray path = nullptr,
bool  generatePath = false,
float  orientation = 0.0f,
ObjectGuid  targetGUID = ObjectGuid::Empty 
)
629{
630 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
632 return;
633
634 if (Impl[MOTION_SLOT_CONTROLLED] && Impl[MOTION_SLOT_CONTROLLED]->GetMovementGeneratorType() != DISTRACT_MOTION_TYPE)
635 return;
636
638 {
639 LOG_DEBUG("movement.motionmaster", "Player ({}) charge point (X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), x, y, z);
640 Mutate(new PointMovementGenerator<Player>(id, x, y, z, speed, orientation, path, generatePath, generatePath, targetGUID), MOTION_SLOT_CONTROLLED);
641 }
642 else
643 {
644 LOG_DEBUG("movement.motionmaster", "Creature ({}) charge point (X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), x, y, z);
645 Mutate(new PointMovementGenerator<Creature>(id, x, y, z, speed, orientation, path, generatePath, generatePath, targetGUID), MOTION_SLOT_CONTROLLED);
646 }
647}
@ TYPEID_PLAYER
Definition: ObjectGuid.h:38
@ UNIT_FLAG_DISABLE_MOVE
Definition: Unit.h:450
@ MOTION_SLOT_CONTROLLED
Definition: MotionMaster.h:63
@ DISTRACT_MOTION_TYPE
Definition: MotionMaster.h:48
TypeID GetTypeId() const
Definition: Object.h:121
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:106
std::string ToString() const
Definition: ObjectGuid.cpp:47
bool HasUnitFlag(UnitFlags flags) const
Definition: Unit.h:1494
Definition: PointMovementGenerator.h:26

References _owner, DISTRACT_MOTION_TYPE, Object::GetGUID(), Object::GetTypeId(), Unit::HasUnitFlag(), Impl, LOG_DEBUG, MOTION_SLOT_CONTROLLED, Mutate(), ObjectGuid::ToString(), TYPEID_PLAYER, and UNIT_FLAG_DISABLE_MOVE.

Referenced by boss_professor_putricide::boss_professor_putricideAI::ChangePhase(), npc_frost_sphere::npc_frost_sphereAI::DamageTaken(), npc_ulduar_leviathan_mkii::npc_ulduar_leviathan_mkiiAI::DamageTaken(), npc_kinetic_bomb::npc_kinetic_bombAI::DoAction(), npc_saurfang_event::npc_saurfang_eventAI::DoAction(), boss_professor_putricide::boss_professor_putricideAI::DoAction(), npc_living_mojo::npc_living_mojoAI::DoAction(), npc_akama_illidan::npc_akama_illidanAI::DoAction(), Spell::EffectCharge(), Spell::EffectChargeDest(), boss_professor_putricide::boss_professor_putricideAI::EnterEvadeMode(), npc_pet_dk_ebon_gargoyle::npc_pet_dk_ebon_gargoyleAI::FlyAway(), npc_anachronos_the_ancient::npc_anachronos_the_ancientAI::HandleAnimation(), spell_the_lich_king_valkyr_target_search::spell_the_lich_king_valkyr_target_search_SpellScript::HandleScript(), npc_pet_dk_ebon_gargoyle::npc_pet_dk_ebon_gargoyleAI::InitializeAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::JustSummoned(), MoveCharge(), npc_kinetic_bomb::npc_kinetic_bombAI::Reset(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::SummonedCreatureDespawn(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), boss_hadronox::boss_hadronoxAI::UpdateAI(), boss_icehowl::boss_icehowlAI::UpdateAI(), npc_kinetic_bomb::npc_kinetic_bombAI::UpdateAI(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::UpdateAI(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::UpdateAI(), boss_lord_marrowgar::UpdateAI(), boss_professor_putricide::boss_professor_putricideAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), boss_the_lich_king::boss_the_lich_kingAI::UpdateAI(), boss_mimiron::boss_mimironAI::UpdateAI(), and npc_iron_watcher::npc_iron_watcherAI::UpdateAI().

◆ MoveCharge() [2/2]

void MotionMaster::MoveCharge ( PathGenerator const &  path,
float  speed = SPEED_CHARGE,
ObjectGuid  targetGUID = ObjectGuid::Empty 
)
650{
651 G3D::Vector3 dest = path.GetActualEndPosition();
652
653 MoveCharge(dest.x, dest.y, dest.z, speed, EVENT_CHARGE_PREPATH, nullptr, false, 0.0f, targetGUID);
654
655 // Charge movement is not started when using EVENT_CHARGE_PREPATH
657 init.MovebyPath(path.GetPath());
658 init.SetVelocity(speed);
659 init.Launch();
660}
#define EVENT_CHARGE_PREPATH
Definition: boss_icecrown_gunship_battle.cpp:104
void MoveCharge(float x, float y, float z, float speed=SPEED_CHARGE, uint32 id=EVENT_CHARGE, const Movement::PointsArray *path=nullptr, bool generatePath=false, float orientation=0.0f, ObjectGuid targetGUID=ObjectGuid::Empty)
Definition: MotionMaster.cpp:628

References _owner, EVENT_CHARGE_PREPATH, PathGenerator::GetActualEndPosition(), PathGenerator::GetPath(), Movement::MoveSplineInit::Launch(), Movement::MoveSplineInit::MovebyPath(), MoveCharge(), and Movement::MoveSplineInit::SetVelocity().

◆ MoveChase() [1/3]

void MotionMaster::MoveChase ( Unit target,
float  dist 
)
inline
205{ MoveChase(target, ChaseRange(dist)); }
Definition: MotionMaster.h:82
void MoveChase(Unit *target, std::optional< ChaseRange > dist={}, std::optional< ChaseAngle > angle={})
Definition: MotionMaster.cpp:300

References MoveChase().

Referenced by MoveChase().

◆ MoveChase() [2/3]

void MotionMaster::MoveChase ( Unit target,
float  dist,
float  angle 
)
inline
204{ MoveChase(target, ChaseRange(dist), ChaseAngle(angle)); }
Definition: MotionMaster.h:95

References MoveChase().

Referenced by MoveChase().

◆ MoveChase() [3/3]

void MotionMaster::MoveChase ( Unit target,
std::optional< ChaseRange dist = {},
std::optional< ChaseAngle angle = {} 
)
301{
302 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
303 // ignore movement request if target not exist
304 if (!target || target == _owner || _owner->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE))
305 return;
306
307 //_owner->ClearUnitState(UNIT_STATE_FOLLOW);
309 {
310 LOG_DEBUG("movement.motionmaster", "Player ({}) chase to {} ({})",
311 _owner->GetGUID().ToString(), target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", target->GetGUID().ToString());
313 }
314 else
315 {
316 LOG_DEBUG("movement.motionmaster", "Creature ({}) chase to {} ({})",
317 _owner->GetGUID().ToString(), target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", target->GetGUID().ToString());
319 }
320}
@ MOTION_SLOT_ACTIVE
Definition: MotionMaster.h:62
Definition: TargetedMovementGenerator.h:39

References _owner, Object::GetGUID(), Object::GetTypeId(), Unit::HasUnitFlag(), LOG_DEBUG, MOTION_SLOT_ACTIVE, Mutate(), ObjectGuid::ToString(), TYPEID_PLAYER, and UNIT_FLAG_DISABLE_MOVE.

Referenced by UnitAI::AttackStart(), FollowerAI::AttackStart(), boss_priestess_lackey_commonAI::AttackStart(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::AttackStart(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::AttackStart(), boss_lady_deathwhisper::boss_lady_deathwhisperAI::AttackStart(), boss_malygos::boss_malygosAI::AttackStart(), boss_illidan_stormrage::boss_illidan_stormrageAI::AttackStart(), boss_swamplord_muselek::AttackStart(), ArcherAI::AttackStart(), npc_escortAI::AttackStart(), SmartAI::AttackStart(), boss_shade_of_aran::AttackStart(), boss_alyson_antille::boss_alyson_antilleAI::AttackStart(), boss_gazakrothAI::AttackStart(), boss_slither::boss_slitherAI::AttackStart(), boss_magus_telestra::boss_magus_telestraAI::AttackStart(), boss_razorscale::boss_razorscaleAI::AttackStart(), boss_high_nethermancer_zerevor::boss_high_nethermancer_zerevorAI::AttackStart(), boss_lady_malande::boss_lady_malandeAI::AttackStart(), boss_olm_the_summoner::AttackStart(), boss_kiggler_the_crazed::AttackStart(), boss_krosh_firehand::AttackStart(), npc_millhouse_manastorm::npc_millhouse_manastormAI::AttackStart(), boss_high_astromancer_solarian::AttackStart(), UnitAI::AttackStartCaster(), boss_thorim::boss_thorimAI::DamageTaken(), boss_leotheras_the_blind::DemonTime(), boss_skadi::boss_skadiAI::DoAction(), PetAI::DoAttack(), ScriptedAI::DoStartMovement(), boss_halazzi::boss_halazziAI::EnterPhase(), boss_zuljin::boss_zuljinAI::EnterPhase(), RestoreAttack::Execute(), boss_swamplord_muselek::JustEngagedWith(), npc_daphne_stilwell::npc_daphne_stilwellAI::JustSummoned(), boss_algalon_the_observer::boss_algalon_the_observerAI::JustSummoned(), boss_lady_vashj::MovementInform(), boss_nazan::MovementInform(), Unit::PetSpellFail(), Unit::RemoveCharmedBy(), boss_magtheridon::Reset(), Creature::ResumeChasingVictim(), boss_high_botanist_freywinn::ResumeEncounter(), Resurrect(), npc_anubarak_spike::npc_anubarak_spikeAI::SelectNewTarget(), SmartAI::SetCombatMove(), SmartAI::SetForcedCombatMove(), boss_volkhan::boss_volkhanAI::SpellHitTarget(), npc_nerubian_burrower::npc_nerubian_burrowerAI::SpellHitTarget(), boss_drakkari_colossus::boss_drakkari_colossusAI::SummonedCreatureDespawn(), boss_quartermaster_zigris::UpdateAI(), boss_mr_smite::boss_mr_smiteAI::UpdateAI(), boss_selin_fireheart::UpdateAI(), npc_mograine::npc_mograineAI::UpdateAI(), boss_felmyst::boss_felmystAI::UpdateAI(), boss_hexlord_malacrass::boss_hex_lord_malacrassAI::UpdateAI(), boss_headless_horseman::UpdateAI(), npc_frost_wyrm::npc_frost_wyrmAI::UpdateAI(), boss_saviana_ragefire::boss_saviana_ragefireAI::UpdateAI(), npc_nerubian_burrower::npc_nerubian_burrowerAI::UpdateAI(), boss_jormungarAI::UpdateAI(), boss_tharon_ja::boss_tharon_jaAI::UpdateAI(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::UpdateAI(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::UpdateAI(), boss_kelthuzad::boss_kelthuzadAI::UpdateAI(), boss_malygos::boss_malygosAI::UpdateAI(), boss_urom::boss_uromAI::UpdateAI(), boss_razorscale::boss_razorscaleAI::UpdateAI(), boss_ingvar_the_plunderer::boss_ingvar_the_plundererAI::UpdateAI(), npc_vrykul_skeleton::npc_vrykul_skeletonAI::UpdateAI(), boss_ymiron::boss_ymironAI::UpdateAI(), boss_illidan_stormrage::boss_illidan_stormrageAI::UpdateAI(), boss_omor_the_unscarred::UpdateAI(), boss_alar::boss_alarAI::UpdateAI(), boss_kaelthas::boss_kaelthasAI::UpdateAI(), and Player::UpdateCharmedAI().

◆ MoveCircleTarget()

void MotionMaster::MoveCircleTarget ( Unit target)
375{
376 if (!target)
377 {
378 return;
379 }
380
381 Position pos;
382 if (!target->GetMeleeAttackPoint(_owner, pos))
383 {
384 return;
385 }
386
388 init.MoveTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), false);
389 init.SetWalk(true);
390 init.SetFacing(target);
391 init.Launch();
392}
float GetPositionZ() const
Definition: Position.h:119
float GetPositionX() const
Definition: Position.h:117
float GetPositionY() const
Definition: Position.h:118
bool GetMeleeAttackPoint(Unit *attacker, Position &pos)
Definition: Unit.cpp:2639

References _owner, Unit::GetMeleeAttackPoint(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Movement::MoveSplineInit::Launch(), Movement::MoveSplineInit::MoveTo(), Movement::MoveSplineInit::SetFacing(), and Movement::MoveSplineInit::SetWalk().

Referenced by CreatureAI::MoveCircleChecks().

◆ MoveConfused()

void MotionMaster::MoveConfused ( )
283{
284 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
286 return;
287
289 {
290 LOG_DEBUG("movement.motionmaster", "Player ({}) move confused", _owner->GetGUID().ToString());
292 }
293 else
294 {
295 LOG_DEBUG("movement.motionmaster", "Creature ({}) move confused", _owner->GetGUID().ToString());
297 }
298}
Definition: ConfusedMovementGenerator.h:28

References _owner, Object::GetGUID(), Object::GetTypeId(), Unit::HasUnitFlag(), LOG_DEBUG, MOTION_SLOT_CONTROLLED, Mutate(), ObjectGuid::ToString(), TYPEID_PLAYER, and UNIT_FLAG_DISABLE_MOVE.

Referenced by Unit::SetConfused().

◆ MoveDistract()

void MotionMaster::MoveDistract ( uint32  time)
749{
751 return;
752
753 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
755 return;
756
757 /*if (_owner->GetTypeId() == TYPEID_PLAYER)
758 {
759 LOG_DEBUG("movement.motionmaster", "Player ({}) distracted (timer: {})", _owner->GetGUID().ToString(), timer);
760 }
761 else
762 {
763 LOG_DEBUG("movement.motionmaster", "Creature ({}) (timer: {})", _owner->GetGUID().ToString(), timer);
764 }*/
765
768}
Definition: IdleMovementGenerator.h:50

References _owner, Unit::HasUnitFlag(), Impl, MOTION_SLOT_CONTROLLED, Mutate(), and UNIT_FLAG_DISABLE_MOVE.

Referenced by Spell::EffectDistract(), and CreatureAI::TriggerAlert().

◆ MoveFall()

void MotionMaster::MoveFall ( uint32  id = 0,
bool  addFlagForNPC = false 
)
588{
589 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
591 return;
592
593 // use larger distance for vmap height search than in most other cases
595 if (tz <= INVALID_HEIGHT)
596 {
597 LOG_DEBUG("movement.motionmaster", "MotionMaster::MoveFall: unable retrive a proper height at map {} (x: {}, y: {}, z: {}).",
599 return;
600 }
601
602 // Abort too if the ground is very near
603 if (std::fabs(_owner->GetPositionZ() - tz) < 0.1f)
604 return;
605
607 {
611 }
612 else if (_owner->GetTypeId() == TYPEID_UNIT && addFlagForNPC) // pussywizard
613 {
619 }
620
622 init.MoveTo(_owner->GetPositionX(), _owner->GetPositionY(), tz + _owner->GetHoverHeight());
623 init.SetFall();
624 init.Launch();
626}
@ TYPEID_UNIT
Definition: ObjectGuid.h:37
@ MOVEMENTFLAG_MASK_MOVING
Definition: Unit.h:585
@ MOVEMENTFLAG_FLYING
Definition: Unit.h:577
@ MOVEMENTFLAG_CAN_FLY
Definition: Unit.h:576
@ MOVEMENTFLAG_FALLING
Definition: Unit.h:564
#define MAX_FALL_DISTANCE
Definition: Map.h:166
#define INVALID_HEIGHT
Definition: Map.h:165
Seconds GetGameTime()
Definition: GameTime.cpp:38
Player * ToPlayer()
Definition: Object.h:195
void SetFallTime(uint32 newFallTime)
Definition: Object.h:328
float GetMapHeight(float x, float y, float z, bool vmap=true, float distanceToSearch=50.0f) const
Definition: Object.cpp:3074
MovementInfo m_movementInfo
Definition: Object.h:595
void SetFallInformation(uint32 time, float z)
Definition: Player.h:2298
float GetHoverHeight() const
Definition: Unit.h:2401
void AddUnitMovementFlag(uint32 f)
Definition: Unit.h:2286
void SendMovementFlagUpdate(bool self=false)
Definition: Unit.cpp:16972
void RemoveUnitMovementFlag(uint32 f)
Definition: Unit.h:2287
uint32 GetId() const
Definition: Map.h:379
Definition: PointMovementGenerator.h:73

References _owner, Unit::AddUnitMovementFlag(), GameTime::GetGameTime(), Unit::GetHoverHeight(), Map::GetId(), WorldObject::GetMap(), WorldObject::GetMapHeight(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Object::GetTypeId(), Unit::HasUnitFlag(), INVALID_HEIGHT, Movement::MoveSplineInit::Launch(), LOG_DEBUG, WorldObject::m_movementInfo, MAX_FALL_DISTANCE, MOTION_SLOT_CONTROLLED, MOVEMENTFLAG_CAN_FLY, MOVEMENTFLAG_FALLING, MOVEMENTFLAG_FLYING, MOVEMENTFLAG_MASK_MOVING, Movement::MoveSplineInit::MoveTo(), Mutate(), Unit::RemoveUnitMovementFlag(), Unit::SendMovementFlagUpdate(), Movement::MoveSplineInit::SetFall(), Player::SetFallInformation(), MovementInfo::SetFallTime(), Object::ToPlayer(), TYPEID_PLAYER, TYPEID_UNIT, and UNIT_FLAG_DISABLE_MOVE.

Referenced by Unit::_ExitVehicle(), boss_the_lich_king::boss_the_lich_kingAI::DamageTaken(), AuraEffect::HandleAuraAllowFlight(), AuraEffect::HandleAuraDummy(), AuraEffect::HandleAuraModIncreaseFlightSpeed(), Totem::InitSummon(), boss_ayamiss::JustDied(), Player::KillPlayer(), spell_chapter5_light_of_dawn_aura::spell_chapter5_light_of_dawn_aura_AuraScript::OnRemove(), Creature::setDeathState(), npc_wild_wyrm::npc_wild_wyrmAI::SpellHit(), boss_krick::boss_krickAI::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), and npc_pet_gen_wind_rider_cub::UpdateAI().

◆ MoveFleeing()

void MotionMaster::MoveFleeing ( Unit enemy,
uint32  time = 0 
)
700{
701 if (!enemy)
702 return;
703
704 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
706 return;
707
709 {
710 LOG_DEBUG("movement.motionmaster", "Player ({}) flee from {} ({})",
711 _owner->GetGUID().ToString(), enemy->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", enemy->GetGUID().ToString());
713 }
714 else
715 {
716 LOG_DEBUG("movement.motionmaster", "Creature ({}) flee from {} ({}) {}",
717 _owner->GetGUID().ToString(), enemy->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", enemy->GetGUID().ToString(), time ? " for a limited time" : "");
718 if (time)
720 else
722 }
723}
Definition: FleeingMovementGenerator.h:25
Definition: FleeingMovementGenerator.h:48

References _owner, Object::GetGUID(), Object::GetTypeId(), Unit::HasUnitFlag(), LOG_DEBUG, MOTION_SLOT_CONTROLLED, Mutate(), ObjectGuid::ToString(), TYPEID_PLAYER, and UNIT_FLAG_DISABLE_MOVE.

Referenced by Unit::SetFeared(), and boss_headless_horseman_head::SpellHit().

◆ MoveFollow()

void MotionMaster::MoveFollow ( Unit target,
float  dist,
float  angle,
MovementSlot  slot = MOTION_SLOT_ACTIVE 
)
395{
396 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
397 // ignore movement request if target not exist
398 if (!target || target == _owner || _owner->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE))
399 {
400 return;
401 }
402
403 //_owner->AddUnitState(UNIT_STATE_FOLLOW);
405 {
406 LOG_DEBUG("movement.motionmaster", "Player ({}) follow to {} ({})",
407 _owner->GetGUID().ToString(), target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", target->GetGUID().ToString());
408 Mutate(new FollowMovementGenerator<Player>(target, dist, angle), slot);
409 }
410 else
411 {
412 LOG_DEBUG("movement.motionmaster", "Creature ({}) follow to {} ({})",
413 _owner->GetGUID().ToString(), target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", target->GetGUID().ToString());
414 Mutate(new FollowMovementGenerator<Creature>(target, dist, angle), slot);
415 }
416}
Definition: TargetedMovementGenerator.h:75

References _owner, Object::GetGUID(), Object::GetTypeId(), Unit::HasUnitFlag(), LOG_DEBUG, Mutate(), ObjectGuid::ToString(), TYPEID_PLAYER, and UNIT_FLAG_DISABLE_MOVE.

Referenced by npc_argent_captainAI::DoAction(), npc_scarlet_miner_cart::npc_scarlet_miner_cartAI::DoAction(), Spell::EffectSummonType(), npc_argent_captainAI::EnterEvadeMode(), CreatureAI::EnterEvadeMode(), SmartAI::EnterEvadeMode(), npc_burning_spirit::npc_burning_spiritAI::EnterEvadeMode(), npc_mrfloppy::npc_mrfloppyAI::EnterEvadeMode(), npc_pet_gen_argent_pony_bridle::EnterEvadeMode(), npc_pet_mage_mirror_image::EnterEvadeMode(), boss_halazzi::boss_halazziAI::EnterPhase(), npc_dark_iron_guzzler::FindNextKeg(), spell_q11919_q11940_drake_hunt::spell_q11919_q11940_drake_hunt_AuraScript::HandleEffectRemove(), AuraEffect::HandleModPossessPet(), npc_commandscript::HandleNpcFollowCommand(), spell_item_enchanted_broom_periodic::HandlePeriodicTick(), WorldSession::HandlePetActionHelper(), PetAI::HandleReturnMovement(), spell_item_draenic_pale_ale::HandleSummon(), npc_troll_volunteer::npc_troll_volunteerAI::InitializeAI(), npc_pet_dk_dancing_rune_weapon::npc_pet_dk_dancing_rune_weaponAI::InitializeAI(), npc_pet_mage_mirror_image::InitializeAI(), npc_burning_spirit::npc_burning_spiritAI::IsSummonedBy(), npc_spirit_shade::npc_spirit_shadeAI::IsSummonedBy(), boss_warlord_kalithresh::JustEngagedWith(), boss_auriaya::boss_auriayaAI::JustSummoned(), npc_frosthound::npc_frosthoundAI::JustSummoned(), boss_mekgineer_steamrigger::JustSummoned(), boss_ichoron::boss_ichoronAI::JustSummoned(), boss_xevozz::boss_xevozzAI::JustSummoned(), npc_ulduar_storm_tempered_keeper::npc_ulduar_storm_tempered_keeperAI::JustSummoned(), boss_vexallus::JustSummoned(), npc_anub_ar_crusher::npc_anub_ar_crusherAI::JustSummoned(), boss_supremus::JustSummoned(), boss_archimonde::boss_archimondeAI::JustSummoned(), npc_fel_guard_hound::npc_fel_guard_houndAI::MovementInform(), npc_pet_dk_ebon_gargoyle::npc_pet_dk_ebon_gargoyleAI::MySelectNextTarget(), npc_kernobee::OnQuestAccept(), Unit::PetSpellFail(), npc_jungle_punch_target::npc_jungle_punch_targetAI::proceedCwEvent(), npc_lake_frog::npc_lake_frogAI::ReceiveEmote(), npc_assembly_lightning::npc_assembly_lightningAI::Reset(), npc_voidtraveler::Reset(), npc_icc_ice_sphere::npc_icc_ice_sphereAI::SelectNewTarget(), Unit::SetCharmedBy(), SmartAI::SetFollow(), FollowerAI::SetFollowPaused(), npc_rabid_thistle_bear::npc_rabid_thistle_bearAI::SpellHit(), npc_death_knight_initiate::npc_death_knight_initiateAI::SpellHit(), npc_aged_dying_ancient_kodo::npc_aged_dying_ancient_kodoAI::SpellHit(), boss_ionar::boss_ionarAI::Split(), FollowerAI::StartFollow(), Spell::SummonGuardian(), Pet::Update(), SimpleCharmedAI::UpdateAI(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::UpdateAI(), boss_halazzi::boss_halazziAI::UpdateAI(), npc_winterfin_playmate::UpdateAI(), npc_snowfall_glade_playmate::UpdateAI(), npc_the_biggest_tree::UpdateAI(), npc_high_oracle_soo_roo::UpdateAI(), npc_elder_kekek::UpdateAI(), npc_the_etymidian::UpdateAI(), npc_alexstraza_the_lifebinder::UpdateAI(), npc_doomfire_targetting::npc_doomfire_targettingAI::UpdateAI(), npc_pet_gen_target_following_bomb::UpdateAI(), npc_pet_gen_toxic_wasteling::UpdateAI(), FollowerAI::UpdateAI(), npc_demonic_vapor::npc_demonic_vaporAI::UpdateAI(), npc_xt002_scrapbot::npc_xt002_scrapbotAI::UpdateAI(), npc_xt002_boombot::npc_xt002_boombotAI::UpdateAI(), and Player::UpdateCharmedAI().

◆ MoveForwards()

void MotionMaster::MoveForwards ( Unit target,
float  dist 
)
349{
350 //like movebackwards, but without the inversion
351 if (!target)
352 {
353 return;
354 }
355
356 Position const& pos = target->GetPosition();
357 float angle = target->GetAngle(_owner);
358 G3D::Vector3 point;
359 point.x = pos.m_positionX + dist * cosf(angle);
360 point.y = pos.m_positionY + dist * sinf(angle);
361 point.z = pos.m_positionZ;
362
363 if (!_owner->GetMap()->CanReachPositionAndGetValidCoords(_owner, point.x, point.y, point.z, true, true))
364 {
365 return;
366 }
367
369 init.MoveTo(point.x, point.y, point.z, false);
370 init.SetFacing(target);
371 init.Launch();
372}

References _owner, Map::CanReachPositionAndGetValidCoords(), Position::GetAngle(), WorldObject::GetMap(), Position::GetPosition(), Movement::MoveSplineInit::Launch(), Position::m_positionX, Position::m_positionY, Position::m_positionZ, Movement::MoveSplineInit::MoveTo(), and Movement::MoveSplineInit::SetFacing().

◆ MoveIdle()

void MotionMaster::MoveIdle ( )

Should be preceded by MovementExpired or Clear if there's an overlying movementgenerator active

233{
235 if (empty() || !isStatic(top()))
237}
MovementGenerator * GetIdleMovementGenerator()
Definition: MotionMaster.cpp:36

References empty(), GetIdleMovementGenerator(), isStatic(), MOTION_SLOT_IDLE, Mutate(), and top().

Referenced by PetAI::_stopAttack(), npc_nexus_lord::npc_nexus_lordAI::AttackStart(), boss_swamplord_muselek::AttackStart(), ArcherAI::AttackStart(), npc_mograine::npc_mograineAI::DamageTaken(), npc_frost_sphere::npc_frost_sphereAI::DamageTaken(), boss_bronjahm::boss_bronjahmAI::DamageTaken(), npc_power_spark::npc_power_sparkAI::DamageTaken(), boss_ingvar_the_plunderer::boss_ingvar_the_plundererAI::DamageTaken(), npc_vrykul_skeleton::npc_vrykul_skeletonAI::DamageTaken(), npc_blistering_zombie::npc_blistering_zombieAI::DamageTaken(), npc_twilight_volunteer::DoAction(), npc_spinestalker::npc_spinestalkerAI::DoAction(), npc_rimefang::npc_rimefangAI::DoAction(), npc_anubarak_spike::npc_anubarak_spikeAI::DoAction(), npc_power_spark::npc_power_sparkAI::DoAction(), npc_spark_of_ionar::npc_spark_of_ionarAI::DoAction(), PetAI::DoAttack(), npc_taskmaster_fizzule::npc_taskmaster_fizzuleAI::DoFriend(), ScriptedAI::DoStartNoMovement(), GuardAI::EnterEvadeMode(), npc_hallows_end_soh::FinishEvent(), CreatureGroup::FormationReset(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::GoToMinchar(), spell_item_toxic_wasteling::HandleJump(), WorldSession::HandlePetActionHelper(), boss_prince_keleseth_icc::boss_prince_kelesethAI::JustDied(), boss_prince_taldaram_icc::boss_prince_taldaramAI::JustDied(), boss_prince_valanar_icc::boss_prince_valanarAI::JustDied(), boss_high_botanist_freywinn::JustEngagedWith(), Creature::Motion_Initialize(), npc_aged_dying_ancient_kodo::npc_aged_dying_ancient_kodoAI::MoveInLineOfSight(), PetAI::MovementInform(), boss_bug_trio::MovementInform(), boss_professor_putricide::boss_professor_putricideAI::MovementInform(), boss_four_horsemen::boss_four_horsemenAI::MovementInform(), npc_escortAI::MovementInform(), SmartAI::MovepointReached(), npc_ulduar_expedition_commander::OnGossipSelect(), npc_hover_disk::npc_hover_diskAI::PassengerBoarded(), boss_nefarian::PathEndReached(), SmartAI::PausePath(), NPCStaveQuestAI::PrepareForEncounter(), PretendToDie(), npc_lake_frog::npc_lake_frogAI::ReceiveEmote(), Unit::SetCharmedBy(), SmartAI::SetCombatMove(), boss_grand_warlock_nethekurse::SetData(), Unit::setDeathState(), FollowerAI::SetFollowComplete(), FollowerAI::SetFollowPaused(), npc_cult_fanatic::npc_cult_fanaticAI::SpellHit(), npc_cult_adherent::npc_cult_adherentAI::SpellHit(), boss_urom::boss_uromAI::SpellHit(), npc_crusade_persuaded::npc_crusade_persuadedAI::SpellHit(), npc_forest_frog::npc_forest_frogAI::SpellHit(), boss_devourer_of_souls::boss_devourer_of_soulsAI::SpellHitTarget(), npc_escortAI::Start(), FollowerAI::StartFollow(), SmartAI::StopFollow(), SmartAI::StopPath(), boss_jedoga_shadowseeker::SummonedCreatureDies(), Pet::Update(), boss_felblood_kaelthas::UpdateAI(), boss_headless_horseman::UpdateAI(), boss_archimonde::boss_archimondeAI::UpdateAI(), boss_onyxia::UpdateAI(), npc_rizzle_sprysprocket::npc_rizzle_sprysprocketAI::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), npc_nerubian_burrower::npc_nerubian_burrowerAI::UpdateAI(), boss_jormungarAI::UpdateAI(), boss_icehowl::boss_icehowlAI::UpdateAI(), npc_fos_corrupted_soul_fragment::npc_fos_corrupted_soul_fragmentAI::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), boss_lord_marrowgar::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), npc_rimefang::npc_rimefangAI::UpdateAI(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::UpdateAI(), npc_valithria_cloud::npc_valithria_cloudAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_malygos::boss_malygosAI::UpdateAI(), npc_oculus_unstable_sphere::npc_oculus_unstable_sphereAI::UpdateAI(), boss_urom::boss_uromAI::UpdateAI(), boss_razorscale::boss_razorscaleAI::UpdateAI(), boss_svala::boss_svalaAI::UpdateAI(), and npc_mature_netherwing_drake::npc_mature_netherwing_drakeAI::UpdateAI().

◆ MoveJump() [1/2]

void MotionMaster::MoveJump ( float  x,
float  y,
float  z,
float  speedXY,
float  speedZ,
uint32  id = 0,
Unit const *  target = nullptr 
)
568{
569 LOG_DEBUG("movement.motionmaster", "Unit ({}) jump to point (X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), x, y, z);
570
571 if (speedXY <= 0.1f)
572 return;
573
574 float moveTimeHalf = speedZ / Movement::gravity;
575 float max_height = -Movement::computeFallElevation(moveTimeHalf, false, -speedZ);
576
578 init.MoveTo(x, y, z);
579 init.SetParabolic(max_height, 0);
580 init.SetVelocity(speedXY);
581 if (target)
582 init.SetFacing(target);
583 init.Launch();
585}
double gravity
Definition: MovementUtil.cpp:24
float computeFallElevation(float t_passed, bool isSafeFall, float start_velocity=0.0f)
Definition: MovementUtil.cpp:60

References _owner, Movement::computeFallElevation(), Object::GetGUID(), Movement::gravity, Movement::MoveSplineInit::Launch(), LOG_DEBUG, MOTION_SLOT_CONTROLLED, Movement::MoveSplineInit::MoveTo(), Mutate(), Movement::MoveSplineInit::SetFacing(), Movement::MoveSplineInit::SetParabolic(), Movement::MoveSplineInit::SetVelocity(), and ObjectGuid::ToString().

◆ MoveJump() [2/2]

void MotionMaster::MoveJump ( Position const &  pos,
float  speedXY,
float  speedZ,
uint32  id = 0 
)
inline

◆ MoveJumpTo()

void MotionMaster::MoveJumpTo ( float  angle,
float  speedXY,
float  speedZ 
)
554{
555 //this function may make players fall below map
557 return;
558
559 float x, y, z;
560
561 float moveTimeHalf = speedZ / Movement::gravity;
562 float dist = 2 * moveTimeHalf * speedXY;
563 _owner->GetClosePoint(x, y, z, _owner->GetObjectSize(), dist, angle);
564 MoveJump(x, y, z, speedXY, speedZ);
565}
bool GetClosePoint(float &x, float &y, float &z, float size, float distance2d=0, float angle=0, WorldObject const *forWho=nullptr, bool force=false) const
Definition: Object.cpp:2687
float GetObjectSize() const
Definition: Object.cpp:2759

References _owner, WorldObject::GetClosePoint(), WorldObject::GetObjectSize(), Object::GetTypeId(), Movement::gravity, MoveJump(), and TYPEID_PLAYER.

Referenced by Unit::JumpTo(), and npc_engineer_helice::OnQuestAccept().

◆ MoveKnockbackFrom()

void MotionMaster::MoveKnockbackFrom ( float  srcX,
float  srcY,
float  speedXY,
float  speedZ 
)
528{
529 //this function may make players fall below map
531 return;
532
533 if (speedXY <= 0.1f)
534 return;
535
536 Position dest = _owner->GetPosition();
537 float moveTimeHalf = speedZ / Movement::gravity;
538 float dist = 2 * moveTimeHalf * speedXY;
539 float max_height = -Movement::computeFallElevation(moveTimeHalf, false, -speedZ);
540
541 // Use a mmap raycast to get a valid destination.
542 _owner->MovePositionToFirstCollision(dest, dist, _owner->GetRelativeAngle(srcX, srcY) + float(M_PI));
543
545 init.MoveTo(dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ());
546 init.SetParabolic(max_height, 0);
547 init.SetOrientationFixed(true);
548 init.SetVelocity(speedXY);
549 init.Launch();
551}
void MovePositionToFirstCollision(Position &pos, float dist, float angle)
Definition: Object.cpp:2846
float GetRelativeAngle(const Position *pos) const
Definition: Position.h:197

References _owner, Movement::computeFallElevation(), Position::GetPosition(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Position::GetRelativeAngle(), Object::GetTypeId(), Movement::gravity, Movement::MoveSplineInit::Launch(), MOTION_SLOT_CONTROLLED, WorldObject::MovePositionToFirstCollision(), Movement::MoveSplineInit::MoveTo(), Mutate(), Movement::MoveSplineInit::SetOrientationFixed(), Movement::MoveSplineInit::SetParabolic(), Movement::MoveSplineInit::SetVelocity(), and TYPEID_PLAYER.

Referenced by Unit::KnockbackFrom().

◆ MoveLand() [1/2]

void MotionMaster::MoveLand ( uint32  id,
float  x,
float  y,
float  z,
float  speed = 0.0f 
)
492{
493 Position pos = {x, y, z, 0.0f};
494 MoveLand(id, pos, speed);
495}
void MoveLand(uint32 id, Position const &pos, float speed=0.0f)
Definition: MotionMaster.cpp:467

References MoveLand().

◆ MoveLand() [2/2]

void MotionMaster::MoveLand ( uint32  id,
Position const &  pos,
float  speed = 0.0f 
)
468{
469 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
471 return;
472
473 float x, y, z;
474 pos.GetPosition(x, y, z);
475
476 LOG_DEBUG("movement.motionmaster", "Creature (Entry: {}) landing point (ID: {} X: {} Y: {} Z: {})", _owner->GetEntry(), id, x, y, z);
477
479 init.MoveTo(x, y, z);
480
481 if (speed > 0.0f)
482 {
483 init.SetVelocity(speed);
484 }
485
486 init.SetAnimation(Movement::ToGround);
487 init.Launch();
489}
@ ToGround
Definition: MoveSplineInit.h:34

References _owner, Object::GetEntry(), Position::GetPosition(), Unit::HasUnitFlag(), Movement::MoveSplineInit::Launch(), LOG_DEBUG, MOTION_SLOT_ACTIVE, Movement::MoveSplineInit::MoveTo(), Mutate(), Movement::MoveSplineInit::SetAnimation(), Movement::MoveSplineInit::SetVelocity(), Movement::ToGround, and UNIT_FLAG_DISABLE_MOVE.

Referenced by boss_taldaram::DoAction(), FrostwyrmLandEvent::Execute(), spell_svalna_revive_champion::spell_svalna_revive_champion_SpellScript::Land(), npc_icc_nerubar_broodkeeper::npc_icc_nerubar_broodkeeperAI::MoveInLineOfSight(), MoveLand(), npc_hover_disk::npc_hover_diskAI::PassengerBoarded(), boss_nefarian::PathEndReached(), boss_razorscale::boss_razorscaleAI::SpellHit(), boss_onyxia::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), npc_rimefang::npc_rimefangAI::UpdateAI(), and boss_malygos::boss_malygosAI::UpdateAI().

◆ MovementExpired()

void MotionMaster::MovementExpired ( bool  reset = true)
inline
179 {
181 {
182 if (reset)
184 else
185 _cleanFlag &= ~MMCF_RESET;
187 }
188 else
189 DirectExpire(reset);
190 }
void DirectExpire(bool reset)
Definition: MotionMaster.cpp:174
void DelayedExpire()
Definition: MotionMaster.cpp:194

References _cleanFlag, DelayedExpire(), DirectExpire(), MMCF_RESET, and MMCF_UPDATE.

Referenced by npc_escortAI::AttackStart(), SmartAI::AttackStart(), npc_mograine::npc_mograineAI::DamageTaken(), boss_ingvar_the_plunderer::boss_ingvar_the_plundererAI::DamageTaken(), npc_vrykul_skeleton::npc_vrykul_skeletonAI::DamageTaken(), npc_kinetic_bomb::npc_kinetic_bombAI::DoAction(), go_commandscript::DoTeleport(), boss_volkhan::boss_volkhanAI::GoToAnvil(), misc_commandscript::HandleAppearCommand(), go_commandscript::HandleGoGraveyardCommand(), go_commandscript::HandleGoGridCommand(), go_commandscript::HandleGoTicketCommand(), go_commandscript::HandleGoZoneXYCommand(), misc_commandscript::HandleGroupSummonCommand(), WorldSession::HandleMoveWorldportAck(), npc_commandscript::HandleNpcUnFollowCommand(), tele_commandscript::HandleTeleCommand(), tele_commandscript::HandleTeleGroupCommand(), Player::LeaveBattleground(), npc_escortAI::MovementInform(), SmartAI::MovepointReached(), SmartAI::PausePath(), PretendToDie(), Unit::RemoveCharmedBy(), WorldSession::SendDoFlight(), Unit::SetConfused(), Unit::SetFeared(), npc_cult_fanatic::npc_cult_fanaticAI::SpellHit(), npc_cult_adherent::npc_cult_adherentAI::SpellHit(), npc_vengeful_shade::npc_vengeful_shadeAI::SpellHitTarget(), npc_escortAI::Start(), SmartAI::StopPath(), Player::TeleportTo(), npc_rizzle_sprysprocket::npc_rizzle_sprysprocketAI::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), boss_icehowl::boss_icehowlAI::UpdateAI(), npc_hor_lich_king::npc_hor_lich_kingAI::UpdateAI(), npc_kinetic_bomb::npc_kinetic_bombAI::UpdateAI(), boss_lord_marrowgar::UpdateAI(), npc_mature_netherwing_drake::npc_mature_netherwing_drakeAI::UpdateAI(), npc_pet_gen_toxic_wasteling::UpdateAI(), and UpdateMotion().

◆ MovementExpiredOnSlot()

void MotionMaster::MovementExpiredOnSlot ( MovementSlot  slot,
bool  reset = true 
)
inline
193 {
194 // xinef: cannot be used during motion update!
195 if (!(_cleanFlag & MMCF_UPDATE))
196 DirectExpireSlot(slot, reset);
197 }
void DirectExpireSlot(MovementSlot slot, bool reset)
Definition: MotionMaster.cpp:207

References _cleanFlag, DirectExpireSlot(), and MMCF_UPDATE.

Referenced by PetAI::DoAttack(), and Unit::RemoveCharmedBy().

◆ MovePath()

void MotionMaster::MovePath ( uint32  path_id,
bool  repeatable 
)
801{
802 if (!path_id)
803 return;
804
805 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
807 return;
808
809 //We set waypoint movement as new default movement generator
810 // clear ALL movement generators (including default)
811 /*while (!empty())
812 {
813 MovementGenerator *curr = top();
814 curr->Finalize(*_owner);
815 pop();
816 if (!isStatic(curr))
817 delete curr;
818 }*/
819
820 //_owner->GetTypeId() == TYPEID_PLAYER ?
821 //Mutate(new WaypointMovementGenerator<Player>(path_id, repeatable)):
823
824 LOG_DEBUG("movement.motionmaster", "{} ({}) start moving over path(Id:{}, repeatable: {})",
825 _owner->GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature", _owner->GetGUID().ToString(), path_id, repeatable ? "YES" : "NO");
826}
Definition: WaypointMovementGenerator.h:50

References _owner, Object::GetGUID(), Object::GetTypeId(), Unit::HasUnitFlag(), LOG_DEBUG, MOTION_SLOT_IDLE, Mutate(), ObjectGuid::ToString(), TYPEID_PLAYER, and UNIT_FLAG_DISABLE_MOVE.

Referenced by boss_ambassador_hellmaw::DoAction(), boss_ghazan::DoAction(), boss_sartharion_tenebron::boss_sartharion_tenebronAI::HandleExtraEvent(), boss_sartharion_shadron::boss_sartharion_shadronAI::HandleExtraEvent(), boss_sartharion_vesperon::boss_sartharion_vesperonAI::HandleExtraEvent(), spell_gen_ayamiss_swarmer_loop::HandleScript(), boss_lieutenant_drake::InitializeAI(), boss_ambassador_hellmaw::InitializeAI(), boss_gahzranka::boss_gahzrankaAI::IsSummonedBy(), boss_jeklik::JustEngagedWith(), SmartAI::JustReachedHome(), boss_hadronox::boss_hadronoxAI::JustSummoned(), boss_hydross_the_unstable::JustSummoned(), npc_shattered_hand_scout::MoveInLineOfSight(), boss_the_beast::boss_thebeastAI::Reset(), boss_bug_trio::Reset(), npc_injured_7th_legion_soldier::npc_injured_7th_legion_soldierAI::Reset(), npc_enslaved_proto_drake::npc_enslaved_proto_drakeAI::SetData(), boss_the_beast::boss_thebeastAI::SetData(), npc_eastvale_peasent::SetData(), npc_thassarian2::npc_thassarian2AI::sGossipSelect(), npc_varian_wrynn::npc_varian_wrynnAI::SpawnWave(), npc_belnistrasz::npc_belnistraszAI::sQuestAccept(), boss_gyth::boss_gythAI::UpdateAI(), boss_rend_blackhand::boss_rend_blackhandAI::UpdateAI(), boss_victor_nefarius::boss_victor_nefariusAI::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), npc_cameron::UpdateAI(), npc_eastvale_peasent::UpdateAI(), npc_partygoer_pather::UpdateAI(), npc_grand_magister_rommath::npc_grand_magister_rommathAI::UpdateAI(), npc_harrison_jones::npc_harrison_jonesAI::UpdateAI(), boss_headless_horseman::UpdateAI(), boss_lieutenant_drake::UpdateAI(), npc_pos_leader_second::npc_pos_leader_secondAI::UpdateAI(), and npc_wounded_skirmisher::UpdateAI().

◆ MovePoint() [1/2]

void MotionMaster::MovePoint ( uint32  id,
const Position pos,
bool  generatePath = true,
bool  forceDestination = true 
)
inline
212 { MovePoint(id, pos.m_positionX, pos.m_positionY, pos.m_positionZ, generatePath, forceDestination, MOTION_SLOT_ACTIVE, pos.GetOrientation()); }
float GetOrientation() const
Definition: Position.h:120
void MovePoint(uint32 id, const Position &pos, bool generatePath=true, bool forceDestination=true)
Definition: MotionMaster.h:211

References Position::GetOrientation(), Position::m_positionX, Position::m_positionY, Position::m_positionZ, MOTION_SLOT_ACTIVE, and MovePoint().

Referenced by npc_mograine::npc_mograineAI::AshbringerEvent(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::AttackStart(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::AttackStart(), boss_isalien::DamageTaken(), boss_grand_champion::boss_grand_championAI::DamageTaken(), boss_essence_of_suffering::boss_essence_of_sufferingAI::DamageTaken(), boss_essence_of_desire::boss_essence_of_desireAI::DamageTaken(), boss_the_lich_king::boss_the_lich_kingAI::DamageTaken(), npc_weegli_blastfuse::npc_weegli_blastfuseAI::DestroyDoor(), npc_apothecary_genericAI::DoAction(), npc_chained_spirit::DoAction(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::DoAction(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::DoAction(), boss_sindragosa::boss_sindragosaAI::DoAction(), npc_spinestalker::npc_spinestalkerAI::DoAction(), npc_rimefang::npc_rimefangAI::DoAction(), npc_icc_spire_frostwyrm::DoAction(), boss_algalon_the_observer::boss_algalon_the_observerAI::DoAction(), npc_brann_bronzebeard_algalon::npc_brann_bronzebeard_algalonAI::DoAction(), npc_pos_martin_or_gorkun_second::npc_pos_martin_or_gorkun_secondAI::DoAction(), npc_hover_disk::npc_hover_diskAI::DoAction(), boss_skadi_grauf::boss_skadi_graufAI::DoAction(), boss_nazan::DoAction(), FollowerAI::EnterEvadeMode(), VehicleDespawnEvent::Execute(), OrcMoveEvent::Execute(), UtherBatteredHiltEvent::Execute(), SlaveRunEvent::Execute(), DelayedMovementEvent::Execute(), DaranavanMoveEvent::Execute(), npc_hallows_end_soh::FinishEvent(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::GoToMinchar(), spell_apothecary_lingering_fumes::HandleAfterCast(), npc_torloth_the_magnificent::npc_torloth_the_magnificentAI::HandleAnimation(), misc_commandscript::HandleComeToMeCommand(), spell_q12589_shoot_rjr::spell_q12589_shoot_rjr_SpellScript::HandleDummy(), spell_q11520_discovering_your_roots::HandleDummy(), boss_malygos::boss_malygosAI::HandleIntroSpeech(), PetAI::HandleReturnMovement(), boss_eck::boss_eckAI::InitializeAI(), npc_bushwhacker::npc_bushwhackerAI::InitializeAI(), npc_lk_spirit_bomb::npc_lk_spirit_bombAI::IsSummonedBy(), npc_oculus_drake::npc_oculus_drakeAI::IsSummonedBy(), npc_wintergarde_gryphon::IsSummonedBy(), npc_frostbrood_skytalon::npc_frostbrood_skytalonAI::IsSummonedBy(), npc_frost_wyrm::npc_frost_wyrmAI::JustDied(), npc_enraged_spirit::npc_enraged_spiritAI::JustDied(), npc_gargoyle::npc_gargoyleAI::JustDied(), boss_ayamiss::JustEngagedWith(), npc_overlord_drakuru_betrayal::npc_overlord_drakuru_betrayalAI::JustSummoned(), npc_eris_hevenfire::npc_eris_hevenfireAI::JustSummoned(), npc_daphne_stilwell::npc_daphne_stilwellAI::JustSummoned(), npc_hor_lich_king::npc_hor_lich_kingAI::JustSummoned(), boss_ingvar_the_plunderer::boss_ingvar_the_plundererAI::JustSummoned(), npc_kalecgos_kj::npc_kalecgos_kjAI::JustSummoned(), boss_captain_skarloc::JustSummoned(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::JustSummoned(), npc_anub_ar_crusher::npc_anub_ar_crusherAI::JustSummoned(), npc_tirions_gambit_tirion::npc_tirions_gambit_tirionAI::JustSummoned(), npc_akama_shade::JustSummoned(), npc_creature_generator_akama::JustSummoned(), boss_fathomlord_karathress::JustSummoned(), boss_lady_vashj::JustSummoned(), npc_rinji::npc_rinjiAI::JustSummoned(), npc_maghar_captive::npc_maghar_captiveAI::JustSummoned(), boss_ayamiss::JustSummoned(), CreatureGroup::LeaderMoveTo(), boss_jedoga_shadowseeker::MovementInform(), MovePoint(), npc_cameron::MoveTheChildren(), boss_four_horsemen::boss_four_horsemenAI::MoveToCorner(), npc_concentrated_ball::npc_concentrated_ballAI::MoveToNextPoint(), npc_attracted_reef_bull::npc_attracted_reef_bullAI::npc_attracted_reef_bullAI(), npc_omen::npc_omenAI::npc_omenAI(), npc_pos_after_first_boss::npc_pos_after_first_bossAI::npc_pos_after_first_bossAI(), npc_ulduar_expedition_commander::OnGossipSelect(), npc_oculus_drake::npc_oculus_drakeAI::PassengerBoarded(), npc_oculus_unstable_sphere::npc_oculus_unstable_sphereAI::PickNewLocation(), npc_jungle_punch_target::npc_jungle_punch_targetAI::proceedCwEvent(), SmartScript::ProcessAction(), boss_kalec::boss_kalecAI::Reset(), npc_janalai_hatchling::npc_janalai_hatchlingAI::Reset(), npc_zulian_prowler::npc_zulian_prowlerAI::Reset(), boss_jedoga_shadowseeker::Reset(), npc_xt002_scrapbot::npc_xt002_scrapbotAI::Reset(), npc_xt002_boombot::npc_xt002_boombotAI::Reset(), npc_released_offspring_harkoa::npc_released_offspring_harkoaAI::Reset(), boss_lady_vashj::Reset(), SmartAI::ReturnToLastOOCPos(), npc_escortAI::ReturnToLastPoint(), boss_selin_fireheart::SelectNearestCrystal(), boss_sartharion::boss_sartharionAI::SendLavaWaves(), gunship_npc_AI::SetData(), npc_ulduar_mimiron_rocket::npc_ulduar_mimiron_rocketAI::SetData(), npc_tirion_fordring_tft::npc_tirion_fordringAI::sGossipSelect(), npc_akama_illidan::npc_akama_illidanAI::sGossipSelect(), npc_varian_wrynn::npc_varian_wrynnAI::SpawnWave(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::SpellHit(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::SpellHit(), npc_saurfang_event::npc_saurfang_eventAI::SpellHit(), npc_forest_frog::npc_forest_frogAI::SpellHit(), npc_troll_volunteer::npc_troll_volunteerAI::SpellHit(), npc_injured_patient::npc_injured_patientAI::SpellHit(), npc_attracted_reef_bull::npc_attracted_reef_bullAI::SpellHit(), npc_wild_wyrm::npc_wild_wyrmAI::SpellHit(), npc_chesspiece::SpellHitTarget(), npc_pet_gen_fetch_ball::SpellHitTarget(), instance_violet_hold::instance_violet_hold_InstanceMapScript::StartBossEncounter(), npc_stillpine_capitive::npc_stillpine_capitiveAI::StartMoving(), boss_vazruden_the_herald::SummonedCreatureDies(), boss_jedoga_shadowseeker::SummonedCreatureDies(), npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI::SummonNextWave(), boss_nightbane::TakeOff(), npc_escortAI::UpdateAI(), npc_rookery_hatcher::npc_rookery_hatcherAI::UpdateAI(), boss_majordomo::boss_majordomoAI::UpdateAI(), boss_mr_smite::boss_mr_smiteAI::UpdateAI(), boss_nightbane::UpdateAI(), npc_eye_of_acherus::UpdateAI(), npc_scarlet_ghoul::npc_scarlet_ghoulAI::UpdateAI(), npc_unworthy_initiate::npc_unworthy_initiateAI::UpdateAI(), npc_scarlet_courier::npc_scarlet_courierAI::UpdateAI(), npc_highlord_darion_mograine::npc_highlord_darion_mograineAI::UpdateAI(), npc_valkyr_battle_maiden::npc_valkyr_battle_maidenAI::UpdateAI(), boss_kirtonos_the_herald::boss_kirtonos_the_heraldAI::UpdateAI(), npc_madrigosa::npc_madrigosaAI::UpdateAI(), boss_felmyst::boss_felmystAI::UpdateAI(), boss_kalec::boss_kalecAI::UpdateAI(), npc_singularity::npc_singularityAI::UpdateAI(), npc_bh_thalorien_dawnseeker::npc_bh_thalorien_dawnseekerAI::UpdateAI(), npc_grand_magister_rommath::npc_grand_magister_rommathAI::UpdateAI(), npc_akilzon_eagle::npc_akilzon_eagleAI::UpdateAI(), npc_janalai_hatcher::npc_janalai_hatcherAI::UpdateAI(), npc_forest_frog::npc_forest_frogAI::UpdateAI(), npc_harrison_jones::npc_harrison_jonesAI::UpdateAI(), boss_arlokk::boss_arlokkAI::UpdateAI(), boss_mandokir::boss_mandokirAI::UpdateAI(), npc_winterfin_playmate::UpdateAI(), npc_snowfall_glade_playmate::UpdateAI(), npc_the_biggest_tree::UpdateAI(), npc_high_oracle_soo_roo::UpdateAI(), npc_elder_kekek::UpdateAI(), npc_the_etymidian::UpdateAI(), npc_alexstraza_the_lifebinder::UpdateAI(), npc_doomfire_targetting::npc_doomfire_targettingAI::UpdateAI(), npc_gargoyle::npc_gargoyleAI::UpdateAI(), npc_arthas::npc_arthasAI::UpdateAI(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), boss_onyxia::UpdateAI(), npc_rizzle_sprysprocket::npc_rizzle_sprysprocketAI::UpdateAI(), npc_draenei_survivor::npc_draenei_survivorAI::UpdateAI(), npc_weegli_blastfuse::npc_weegli_blastfuseAI::UpdateAI(), boss_jedoga_shadowseeker::UpdateAI(), npc_twilight_volunteer::UpdateAI(), npc_taldaram_flamesphere::UpdateAI(), npc_xerestrasza::npc_xerestraszaAI::UpdateAI(), boss_saviana_ragefire::boss_saviana_ragefireAI::UpdateAI(), boss_grand_champion::boss_grand_championAI::UpdateAI(), npc_fos_corrupted_soul_fragment::npc_fos_corrupted_soul_fragmentAI::UpdateAI(), npc_hor_leader::npc_hor_leaderAI::UpdateAI(), npc_hor_leader_second::npc_hor_leader_secondAI::UpdateAI(), npc_pos_leader::npc_pos_leaderAI::UpdateAI(), npc_pos_after_first_boss::npc_pos_after_first_bossAI::UpdateAI(), npc_pos_tyrannus_events::npc_pos_tyrannus_eventsAI::UpdateAI(), npc_blood_queen_lana_thel::npc_blood_queen_lana_thelAI::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), npc_high_overlord_saurfang_icc::npc_high_overlord_saurfangAI::UpdateAI(), npc_muradin_bronzebeard_icc::npc_muradin_bronzebeard_iccAI::UpdateAI(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::UpdateAI(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), npc_tirion_fordring_tft::npc_tirion_fordringAI::UpdateAI(), npc_valkyr_shadowguard::npc_valkyr_shadowguardAI::UpdateAI(), npc_icc_vengeful_fleshreaper::npc_icc_vengeful_fleshreaperAI::UpdateAI(), boss_four_horsemen::boss_four_horsemenAI::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), boss_malygos::boss_malygosAI::UpdateAI(), npc_power_spark::npc_power_sparkAI::UpdateAI(), npc_oculus_drakegiver::npc_oculus_drakegiverAI::UpdateAI(), npc_oculus_drake::npc_oculus_drakeAI::UpdateAI(), boss_volkhan::boss_volkhanAI::UpdateAI(), boss_algalon_the_observer::boss_algalon_the_observerAI::UpdateAI(), npc_brann_bronzebeard_algalon::npc_brann_bronzebeard_algalonAI::UpdateAI(), boss_stormcaller_brundir::boss_stormcaller_brundirAI::UpdateAI(), npc_ulduar_emergency_fire_bot::npc_ulduar_emergency_fire_botAI::UpdateAI(), npc_ulduar_expedition_engineer::npc_ulduar_expedition_engineerAI::UpdateAI(), boss_skadi_grauf::boss_skadi_graufAI::UpdateAI(), boss_ymiron::boss_ymironAI::UpdateAI(), npc_thassarian2::npc_thassarian2AI::UpdateAI(), npc_preparations_for_war_vehicle::UpdateAI(), npc_shandy_dalaran::npc_shandy_dalaranAI::UpdateAI(), npc_minigob_manabonk::npc_minigob_manabonkAI::UpdateAI(), npc_conversing_with_the_depths_trigger::npc_conversing_with_the_depths_triggerAI::UpdateAI(), npc_wintergarde_gryphon::UpdateAI(), npc_commander_eligor_dawnbringer::npc_commander_eligor_dawnbringerAI::UpdateAI(), npc_venture_co_straggler::npc_venture_co_stragglerAI::UpdateAI(), npc_battle_at_valhalas::npc_battle_at_valhalasAI::UpdateAI(), npc_lord_arete::npc_lord_areteAI::UpdateAI(), npc_frostbrood_skytalon::npc_frostbrood_skytalonAI::UpdateAI(), npc_crusade_recruit::npc_crusade_recruitAI::UpdateAI(), boss_illidan_stormrage::boss_illidan_stormrageAI::UpdateAI(), boss_shade_of_akama::UpdateAI(), npc_akama_shade::UpdateAI(), npc_millhouse_manastorm::npc_millhouse_manastormAI::UpdateAI(), boss_alar::boss_alarAI::UpdateAI(), boss_kaelthas::boss_kaelthasAI::UpdateAI(), npc_nether_drake::npc_nether_drakeAI::UpdateAI(), npc_fel_guard_hound::npc_fel_guard_houndAI::UpdateAI(), npc_mature_netherwing_drake::npc_mature_netherwing_drakeAI::UpdateAI(), npc_enslaved_netherwing_drake::UpdateAI(), npc_dragonmaw_peon::npc_dragonmaw_peonAI::UpdateAI(), npc_tooga::npc_toogaAI::UpdateFollowerAI(), npc_emily::npc_emilyAI::WaypointReached(), and npc_ancestral_wolf::npc_ancestral_wolfAI::WaypointReached().

◆ MovePoint() [2/2]

void MotionMaster::MovePoint ( uint32  id,
float  x,
float  y,
float  z,
bool  generatePath = true,
bool  forceDestination = true,
MovementSlot  slot = MOTION_SLOT_ACTIVE,
float  orientation = 0.0f 
)
419{
420 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
422 return;
423
425 {
426 LOG_DEBUG("movement.motionmaster", "Player ({}) targeted point (Id: {} X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), id, x, y, z);
427 Mutate(new PointMovementGenerator<Player>(id, x, y, z, 0.0f, orientation, nullptr, generatePath, forceDestination), slot);
428 }
429 else
430 {
431 LOG_DEBUG("movement.motionmaster", "Creature ({}) targeted point (ID: {} X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), id, x, y, z);
432 Mutate(new PointMovementGenerator<Creature>(id, x, y, z, 0.0f, orientation, nullptr, generatePath, forceDestination), slot);
433 }
434}

References _owner, Object::GetGUID(), Object::GetTypeId(), Unit::HasUnitFlag(), LOG_DEBUG, Mutate(), ObjectGuid::ToString(), TYPEID_PLAYER, and UNIT_FLAG_DISABLE_MOVE.

◆ MoveRandom()

void MotionMaster::MoveRandom ( float  wanderDistance = 0.0f)
240{
241 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
243 return;
244
245 if (_owner->GetTypeId() == TYPEID_UNIT)
246 {
247 LOG_DEBUG("movement.motionmaster", "Creature ({}) start moving random", _owner->GetGUID().ToString());
249 }
250}
Definition: RandomMovementGenerator.h:32

References _owner, Object::GetGUID(), Object::GetTypeId(), Unit::HasUnitFlag(), LOG_DEBUG, MOTION_SLOT_IDLE, Mutate(), ObjectGuid::ToString(), TYPEID_UNIT, and UNIT_FLAG_DISABLE_MOVE.

Referenced by SACActivateEvent::Execute(), spell_item_enchanted_broom_periodic::HandlePeriodicTick(), boss_ghazan::JustReachedHome(), boss_kelthuzad::boss_kelthuzadAI::JustSummoned(), boss_sartharion::boss_sartharionAI::JustSummoned(), boss_the_lich_king::boss_the_lich_kingAI::JustSummoned(), boss_lady_vashj::JustSummoned(), boss_kaelthas::boss_kaelthasAI::JustSummoned(), boss_mechano_lord_capacitus::JustSummoned(), boss_ebonroc::boss_ebonrocAI::MovementInform(), npc_collapsing_star::npc_collapsing_starAI::npc_collapsing_starAI(), npc_frost_sphere::npc_frost_sphereAI::npc_frost_sphereAI(), npc_ulduar_saronite_vapors::npc_ulduar_saronite_vaporsAI::npc_ulduar_saronite_vaporsAI(), instance_serpent_shrine::instance_serpentshrine_cavern_InstanceMapScript::OnCreatureCreate(), npc_brew_bubble::Reset(), npc_infernal_attacker::npc_infernal_attackerAI::Reset(), npc_captured_rageclaw::npc_captured_rageclawAI::SpellHit(), npc_cameron::UpdateAI(), boss_sapphiron::boss_sapphironAI::UpdateAI(), and boss_yoggsaron_death_orb::boss_yoggsaron_death_orbAI::UpdateAI().

◆ MoveRotate()

void MotionMaster::MoveRotate ( uint32  time,
RotateDirection  direction 
)
829{
830 if (!time)
831 return;
832
834}
Definition: IdleMovementGenerator.h:34

References MOTION_SLOT_ACTIVE, and Mutate().

◆ MoveSeekAssistance()

void MotionMaster::MoveSeekAssistance ( float  x,
float  y,
float  z 
)
663{
664 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
666 return;
667
669 {
670 LOG_ERROR("movement.motionmaster", "Player ({}) attempt to seek assistance", _owner->GetGUID().ToString());
671 }
672 else
673 {
674 LOG_DEBUG("movement.motionmaster", "Creature ({}) seek assistance (X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), x, y, z);
676 _owner->CastStop(0, false);
679 }
680}
#define LOG_ERROR(filterType__,...)
Definition: Log.h:157
@ REACT_PASSIVE
Definition: Unit.h:1035
void SetReactState(ReactStates st)
Definition: Creature.h:90
Creature * ToCreature()
Definition: Object.h:197
void CastStop(uint32 except_spellid=0, bool withInstant=true)
Definition: Unit.cpp:1162
bool AttackStop()
Definition: Unit.cpp:10407
Definition: PointMovementGenerator.h:62

References _owner, Unit::AttackStop(), Unit::CastStop(), Object::GetGUID(), Object::GetTypeId(), Unit::HasUnitFlag(), LOG_DEBUG, LOG_ERROR, MOTION_SLOT_ACTIVE, Mutate(), REACT_PASSIVE, Creature::SetReactState(), Object::ToCreature(), ObjectGuid::ToString(), TYPEID_PLAYER, and UNIT_FLAG_DISABLE_MOVE.

Referenced by Creature::DoFleeToGetAssistance().

◆ MoveSeekAssistanceDistract()

void MotionMaster::MoveSeekAssistanceDistract ( uint32  timer)
683{
684 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
686 return;
687
689 {
690 LOG_ERROR("movement.motionmaster", "Player ({}) attempt to call distract after assistance", _owner->GetGUID().ToString());
691 }
692 else
693 {
694 LOG_DEBUG("movement.motionmaster", "Creature ({}) is distracted after assistance call (Time: {})", _owner->GetGUID().ToString(), time);
696 }
697}
Definition: IdleMovementGenerator.h:65

References _owner, Object::GetGUID(), Object::GetTypeId(), Unit::HasUnitFlag(), LOG_DEBUG, LOG_ERROR, MOTION_SLOT_ACTIVE, Mutate(), ObjectGuid::ToString(), TYPEID_PLAYER, and UNIT_FLAG_DISABLE_MOVE.

Referenced by AssistanceMovementGenerator::Finalize().

◆ MoveSplinePath() [1/2]

void MotionMaster::MoveSplinePath ( Movement::PointsArray path)
437{
438 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
440 return;
441
443 {
445 }
446 else
447 {
449 }
450}
Definition: EscortMovementGenerator.h:25

References _owner, Object::GetTypeId(), Unit::HasUnitFlag(), MOTION_SLOT_ACTIVE, Mutate(), TYPEID_PLAYER, and UNIT_FLAG_DISABLE_MOVE.

Referenced by boss_captain_skarloc::InitializeAI(), npc_preparations_for_war_vehicle::InitializeAI(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::IsSummonedBy(), npc_medivh_bm::JustSummoned(), MoveSplinePath(), npc_hor_leader_second::npc_hor_leader_secondAI::MoveToNextStopPoint(), npc_batrider::npc_batrider(), npc_vehicle_d16_propelled_delivery::npc_vehicle_d16_propelled_deliveryAI::PassengerBoarded(), npc_vics_flying_machine::npc_vics_flying_machineAI::PassengerBoarded(), SmartAI::ResumePath(), SmartAI::StartPath(), npc_escortAI::UpdateAI(), npc_hor_lich_king::npc_hor_lich_kingAI::UpdateAI(), npc_strangulate_vehicle::npc_strangulate_vehicleAI::UpdateAI(), boss_razorscale::boss_razorscaleAI::UpdateAI(), npc_q24545_lich_king::npc_q24545_lich_kingAI::UpdateAI(), npc_infra_green_bomber_generic::npc_infra_green_bomber_genericAI::UpdateAI(), npc_wild_wyrm::npc_wild_wyrmAI::UpdateAI(), npc_freed_protodrake::npc_freed_protodrakeAI::UpdateAI(), boss_alar::boss_alarAI::UpdateAI(), and npc_batrider::UpdateAI().

◆ MoveSplinePath() [2/2]

void MotionMaster::MoveSplinePath ( uint32  path_id)
453{
454 // convert the path id to a Movement::PointsArray*
456 WaypointPath const* path = sWaypointMgr->GetPath(path_id);
457 for (uint8 i = 0; i < path->size(); ++i)
458 {
459 WaypointData const* node = path->at(i);
460 points->push_back(G3D::Vector3(node->x, node->y, node->z));
461 }
462
463 // pass the new PointsArray* to the appropriate MoveSplinePath function
464 MoveSplinePath(points);
465}
std::vector< WaypointData * > WaypointPath
Definition: WaypointMgr.h:47
#define sWaypointMgr
Definition: WaypointMgr.h:78
std::vector< Vector3 > PointsArray
Definition: MoveSplineInitArgs.h:28
void MoveSplinePath(Movement::PointsArray *path)
Definition: MotionMaster.cpp:436
Definition: WaypointMgr.h:37
float z
Definition: WaypointMgr.h:39
float x
Definition: WaypointMgr.h:39
float y
Definition: WaypointMgr.h:39

References MoveSplinePath(), sWaypointMgr, WaypointData::x, WaypointData::y, and WaypointData::z.

◆ MoveTakeoff() [1/2]

void MotionMaster::MoveTakeoff ( uint32  id,
float  x,
float  y,
float  z,
float  speed = 0.0f 
)
522{
523 Position pos = {x, y, z, 0.0f};
524 MoveTakeoff(id, pos, speed);
525}
void MoveTakeoff(uint32 id, Position const &pos, float speed=0.0f)
Definition: MotionMaster.cpp:497

References MoveTakeoff().

◆ MoveTakeoff() [2/2]

void MotionMaster::MoveTakeoff ( uint32  id,
Position const &  pos,
float  speed = 0.0f 
)
498{
499 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
501 return;
502
503 float x, y, z;
504 pos.GetPosition(x, y, z);
505
506 LOG_DEBUG("movement.motionmaster", "Creature (Entry: {}) landing point (ID: {} X: {} Y: {} Z: {})", _owner->GetEntry(), id, x, y, z);
507
509 init.MoveTo(x, y, z);
510
511 if (speed > 0.0f)
512 {
513 init.SetVelocity(speed);
514 }
515
516 init.SetAnimation(Movement::ToFly);
517 init.Launch();
519}
@ ToFly
Definition: MoveSplineInit.h:36

References _owner, Object::GetEntry(), Position::GetPosition(), Unit::HasUnitFlag(), Movement::MoveSplineInit::Launch(), LOG_DEBUG, MOTION_SLOT_ACTIVE, Movement::MoveSplineInit::MoveTo(), Mutate(), Movement::MoveSplineInit::SetAnimation(), Movement::MoveSplineInit::SetVelocity(), Movement::ToFly, and UNIT_FLAG_DISABLE_MOVE.

Referenced by boss_nightbane::EnterEvadeMode(), MoveTakeoff(), boss_onyxia::UpdateAI(), boss_jedoga_shadowseeker::UpdateAI(), boss_krick::boss_krickAI::UpdateAI(), npc_pos_tyrannus_events::npc_pos_tyrannus_eventsAI::UpdateAI(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI(), boss_sindragosa::boss_sindragosaAI::UpdateAI(), npc_rimefang::npc_rimefangAI::UpdateAI(), boss_malygos::boss_malygosAI::UpdateAI(), boss_razorscale::boss_razorscaleAI::UpdateAI(), and boss_skadi_grauf::boss_skadi_graufAI::UpdateAI().

◆ MoveTargetedHome()

void MotionMaster::MoveTargetedHome ( bool  walk = false)
253{
254 Clear(false);
255
257 {
258 LOG_DEBUG("movement.motionmaster", "Creature ({}) targeted home", _owner->GetGUID().ToString());
260 }
262 {
264 // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE
266 return;
267
268 LOG_DEBUG("movement.motionmaster", "Pet or controlled creature ({}) targeting home", _owner->GetGUID().ToString());
269 Unit* target = _owner->ToCreature()->GetCharmerOrOwner();
270 if (target)
271 {
272 LOG_DEBUG("movement.motionmaster", "Following {} ({})", target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", target->GetGUID().ToString());
274 }
275 }
276 else
277 {
278 LOG_ERROR("movement.motionmaster", "Player ({}) attempt targeted home", _owner->GetGUID().ToString());
279 }
280}
#define PET_FOLLOW_DIST
Definition: PetDefines.h:198
@ UNIT_STATE_EVADE
Definition: Unit.h:346
Definition: Unit.h:1302
void ClearUnitState(uint32 f)
Definition: Unit.h:1411
Unit * GetCharmerOrOwner() const
Definition: Unit.h:1861
virtual float GetFollowAngle() const
Definition: Unit.h:2406
ObjectGuid GetCharmerOrOwnerGUID() const
Definition: Unit.h:1844
void Clear(bool reset=true)
Definition: MotionMaster.h:165
Definition: HomeMovementGenerator.h:26

References _owner, Clear(), Unit::ClearUnitState(), Unit::GetCharmerOrOwner(), Unit::GetCharmerOrOwnerGUID(), Unit::GetFollowAngle(), Object::GetGUID(), Object::GetTypeId(), Unit::HasUnitFlag(), LOG_DEBUG, LOG_ERROR, MOTION_SLOT_ACTIVE, Mutate(), PET_FOLLOW_DIST, Object::ToCreature(), ObjectGuid::ToString(), TYPEID_PLAYER, TYPEID_UNIT, UNIT_FLAG_DISABLE_MOVE, and UNIT_STATE_EVADE.

Referenced by npc_spark_of_ionar::npc_spark_of_ionarAI::DoAction(), npc_black_morass_summoned_add::EnterEvadeMode(), npc_argent_captainAI::EnterEvadeMode(), CreatureAI::EnterEvadeMode(), SmartAI::EnterEvadeMode(), GuardAI::EnterEvadeMode(), boss_doomrel::boss_doomrelAI::EnterEvadeMode(), npc_koltira_deathweaver::npc_koltira_deathweaverAI::EnterEvadeMode(), npc_varian_wrynn::npc_varian_wrynnAI::EnterEvadeMode(), npc_thrall_bfu::npc_thrall_bfuAI::EnterEvadeMode(), npc_high_overlord_saurfang_igb::npc_high_overlord_saurfang_igbAI::EnterEvadeMode(), npc_muradin_bronzebeard_igb::npc_muradin_bronzebeard_igbAI::EnterEvadeMode(), gunship_npc_AI::EnterEvadeMode(), npc_gunship_boarding_addAI::EnterEvadeMode(), violet_hold_trashAI::EnterEvadeMode(), npc_pet_hunter_snake_trap::EnterEvadeMode(), npc_escortAI::EnterEvadeMode(), FollowerAI::EnterEvadeMode(), hyjalAI::EnterEvadeMode(), NpcRunToHome::Execute(), npc_rocket_propelled_warhead::npc_rocket_propelled_warheadAI::FinishQuest(), wp_commandscript::HandleWpUnLoadCommand(), boss_aeonus::IsSummonedBy(), boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::MovementInform(), boss_arlokk::boss_arlokkAI::Reset(), npc_ulduar_expedition_engineer::npc_ulduar_expedition_engineerAI::SetData(), npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI::UpdateAI(), npc_ulduar_expedition_engineer::npc_ulduar_expedition_engineerAI::UpdateAI(), npc_shandy_dalaran::npc_shandy_dalaranAI::UpdateAI(), and npc_mature_netherwing_drake::npc_mature_netherwing_drakeAI::UpdateAI().

◆ MoveTaxiFlight()

void MotionMaster::MoveTaxiFlight ( uint32  path,
uint32  pathnode 
)
726{
728 {
729 if (path < sTaxiPathNodesByPath.size())
730 {
731 LOG_DEBUG("movement.motionmaster", "{} taxi to (Path {} node {})", _owner->GetName(), path, pathnode);
733 mgen->LoadPath(_owner->ToPlayer());
735 }
736 else
737 {
738 LOG_ERROR("movement.motionmaster", "{} attempt taxi to (not existed Path {} node {})",
739 _owner->GetName(), path, pathnode);
740 }
741 }
742 else
743 {
744 LOG_ERROR("movement.motionmaster", "Creature ({}) attempt taxi to (Path {} node {})", _owner->GetGUID().ToString(), path, pathnode);
745 }
746}
TaxiPathNodesByPath sTaxiPathNodesByPath
Definition: DBCStores.cpp:186
std::string const & GetName() const
Definition: Object.h:446
Definition: WaypointMovementGenerator.h:103
void LoadPath(Player *player)
Definition: WaypointMovementGenerator.cpp:309

References _owner, Object::GetGUID(), WorldObject::GetName(), Object::GetTypeId(), FlightPathMovementGenerator::LoadPath(), LOG_DEBUG, LOG_ERROR, MOTION_SLOT_CONTROLLED, Mutate(), sTaxiPathNodesByPath, Object::ToPlayer(), ObjectGuid::ToString(), and TYPEID_PLAYER.

Referenced by WorldSession::SendDoFlight().

◆ Mutate()

void MotionMaster::Mutate ( MovementGenerator m,
MovementSlot  slot 
)
private
771{
772 while (MovementGenerator* curr = Impl[slot])
773 {
774 bool delayed = (_top == slot && (_cleanFlag & MMCF_UPDATE));
775
776 // pussywizard: clear slot AND decrease top immediately to avoid crashes when referencing null top in DirectDelete
777 Impl[slot] = nullptr;
778 while (!empty() && !top())
779 --_top;
780
781 if (delayed)
782 DelayedDelete(curr);
783 else
784 DirectDelete(curr);
785 }
786
787 if (_top < slot)
788 _top = slot;
789
790 Impl[slot] = m;
791 if (_top > slot)
792 _needInit[slot] = true;
793 else
794 {
795 _needInit[slot] = false;
796 m->Initialize(_owner);
797 }
798}

References _cleanFlag, _needInit, _owner, _top, DelayedDelete(), DirectDelete(), empty(), Impl, MovementGenerator::Initialize(), MMCF_UPDATE, and top().

Referenced by InitDefault(), MoveCharge(), MoveChase(), MoveConfused(), MoveDistract(), MoveFall(), MoveFleeing(), MoveFollow(), MoveIdle(), MoveJump(), MoveKnockbackFrom(), MoveLand(), MovePath(), MovePoint(), MoveRandom(), MoveRotate(), MoveSeekAssistance(), MoveSeekAssistanceDistract(), MoveSplinePath(), MoveTakeoff(), MoveTargetedHome(), and MoveTaxiFlight().

◆ needInitTop()

bool MotionMaster::needInitTop ( ) const
inlineprivate
126 {
127 if (empty())
128 return false;
129 return _needInit[_top];
130 }

References _needInit, _top, and empty().

Referenced by DirectClean(), DirectExpire(), DirectExpireSlot(), and UpdateMotion().

◆ pop()

void MotionMaster::pop ( )
inlineprivate
116 {
117 if (empty())
118 return;
119
120 Impl[_top] = nullptr;
121 while (!empty() && !top())
122 --_top;
123 }

References _top, empty(), Impl, and top().

Referenced by DelayedClean(), DelayedExpire(), DirectClean(), DirectExpire(), Initialize(), and ~MotionMaster().

◆ propagateSpeedChange()

void MotionMaster::propagateSpeedChange ( )
837{
838 /*Impl::container_type::iterator it = Impl::c.begin();
839 for (; it != end(); ++it)
840 {
841 (*it)->unitSpeedChanged();
842 }*/
843 for (int i = 0; i <= _top; ++i)
844 {
845 if (Impl[i])
847 }
848}
virtual void unitSpeedChanged()
Definition: MovementGenerator.h:45

References _top, Impl, and MovementGenerator::unitSpeedChanged().

Referenced by Unit::propagateSpeedChange(), and npc_hor_lich_king::npc_hor_lich_kingAI::UpdateAI().

◆ ReinitializeMovement()

void MotionMaster::ReinitializeMovement ( )
851{
852 for (int i = 0; i <= _top; ++i)
853 {
854 if (Impl[i])
855 Impl[i]->Reset(_owner);
856 }
857}

References _owner, _top, Impl, and MovementGenerator::Reset().

Referenced by WorldSession::HandleMoveTeleportAck(), and Unit::NearTeleportTo().

◆ size()

int MotionMaster::size ( ) const
inline
147{ return _top + 1; }

References _top.

Referenced by DelayedClean(), DelayedExpire(), DirectClean(), DirectExpire(), and DirectExpireSlot().

◆ top()

◆ UpdateMotion()

void MotionMaster::UpdateMotion ( uint32  diff)
105{
106 if (!_owner)
107 return;
108
109 ASSERT(!empty());
110
112
114 if (!top()->Update(_owner, diff))
115 {
116 _cleanFlag &= ~MMCF_UPDATE;
118 }
119 else
120 _cleanFlag &= ~MMCF_UPDATE;
121
122 if (_expList)
123 {
124 for (size_t i = 0; i < _expList->size(); ++i)
125 {
126 MovementGenerator* mg = (*_expList)[i];
127 DirectDelete(mg);
128 }
129
130 delete _expList;
131 _expList = nullptr;
132
133 if (empty())
134 Initialize();
135 else if (needInitTop())
136 InitTop();
137 else if (_cleanFlag & MMCF_RESET)
138 top()->Reset(_owner);
139
140 _cleanFlag &= ~MMCF_RESET;
141 }
142
143 _cleanFlag &= ~MMCF_INUSE;
144}
@ MMCF_INUSE
Definition: MotionMaster.h:72
void Update(uint32 diff)
Definition: WeatherMgr.cpp:151
void MovementExpired(bool reset=true)
Definition: MotionMaster.h:178

References _cleanFlag, _expList, _owner, ASSERT, DirectDelete(), empty(), Initialize(), InitTop(), MMCF_INUSE, MMCF_RESET, MMCF_UPDATE, MovementExpired(), needInitTop(), MovementGenerator::Reset(), and top().

Referenced by Unit::Update().

Member Data Documentation

◆ _cleanFlag

uint8 MotionMaster::_cleanFlag
private

◆ _expList

ExpireList* MotionMaster::_expList
private

Referenced by DelayedDelete(), and UpdateMotion().

◆ _needInit

bool MotionMaster::_needInit[MAX_MOTION_SLOT]
private

◆ _owner

◆ _top

◆ Impl