diff options
author | ccrs <ccrs@users.noreply.github.com> | 2018-06-03 10:06:57 -0700 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-09-28 00:15:13 +0200 |
commit | 426f9f2f92b26fbb68e7cda9290ccbd586c6af4e (patch) | |
tree | ede70b7865c2edb58964c7aa668eb1250a5816ab /src/server/game/Handlers/MovementHandler.cpp | |
parent | 3e0af19b7767d6e71a7467874fdad566cea5ee87 (diff) |
Core/Movement: MotionMaster reimplementation (#21888)
Internal structure and handling changes, nothing behavioural (or thats the intention at least).
(cherry picked from commit 982643cd96790ffc54e7a3e507469649f3b074d2)
Diffstat (limited to 'src/server/game/Handlers/MovementHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index ac873eb6d01..523bcc7c7a5 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -145,32 +145,32 @@ void WorldSession::HandleMoveWorldportAck() } // flight fast teleport case - if (GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE) + if (GetPlayer()->IsInFlight()) { if (!_player->InBattleground()) { if (!seamlessTeleport) { // short preparations to continue flight - MovementGenerator* movementGenerator = GetPlayer()->GetMotionMaster()->top(); + MovementGenerator* movementGenerator = GetPlayer()->GetMotionMaster()->GetCurrentMovementGenerator(); movementGenerator->Initialize(GetPlayer()); } return; } // battleground state prepare, stop flight - GetPlayer()->GetMotionMaster()->MovementExpired(); - GetPlayer()->CleanupAfterTaxiFlight(); + GetPlayer()->FinishTaxiFlight(); } // resurrect character at enter into instance where his corpse exist after add to map - if (mEntry->IsDungeon() && !GetPlayer()->IsAlive()) + { if (GetPlayer()->GetCorpseLocation().GetMapId() == mEntry->ID) { GetPlayer()->ResurrectPlayer(0.5f, false); GetPlayer()->SpawnCorpseBones(); } + } bool allowMount = !mEntry->IsDungeon() || mEntry->IsBattlegroundOrArena(); if (mInstance) @@ -674,13 +674,11 @@ void WorldSession::HandleMoveSplineDoneOpcode(WorldPackets::Movement::MoveSpline TaxiNodesEntry const* curDestNode = sTaxiNodesStore.LookupEntry(curDest); // far teleport case - if (curDestNode && curDestNode->ContinentID != GetPlayer()->GetMapId()) + if (curDestNode && curDestNode->ContinentID != GetPlayer()->GetMapId() && GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE) { - if (GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE) + if (FlightPathMovementGenerator* flight = dynamic_cast<FlightPathMovementGenerator*>(GetPlayer()->GetMotionMaster()->GetCurrentMovementGenerator())) { // short preparations to continue flight - FlightPathMovementGenerator* flight = (FlightPathMovementGenerator*)(GetPlayer()->GetMotionMaster()->top()); - flight->SetCurrentNodeAfterTeleport(); TaxiPathNodeEntry const* node = flight->GetPath()[flight->GetCurrentNode()]; flight->SkipCurrentNode(); |