Core/Movement: updated collision height packet handling to ack handling

This commit is contained in:
Ovahlord committed 2021-11-16 07:11:00 +01:00
1 parent 4b56a7b9a3
commit 631b499414
8 files changed
+122 -20

No files matched your search

@@ -19,6 +19,7 @@
#include "MovementPacketSender.h"
#include "MovementStructures.h"
#include "Player.h"
#include "SharedDefines.h"
#include "WorldPacket.h"
#include "WorldSession.h"
@@ -77,6 +78,48 @@ MovementChangeType MovementPacketSender::GetChangeTypeByMovementFlag(MovementFla
}
}
void MovementPacketSender::SendHeightChangeToMover(Unit* unit, float newHeight, UpdateCollisionHeightReason reason)
{
GameClient* controller = unit->GetGameClientMovingMe();
ASSERT(controller);
uint32 mCounter = unit->GetMovementCounterAndInc();
PlayerMovementPendingChange pendingChange;
pendingChange.movementCounter = mCounter;
pendingChange.newValue = newHeight;
pendingChange.movementChangeType = MovementChangeType::SET_COLLISION_HGT;
unit->AssignPendingMovementChange(pendingChange.movementChangeType, std::move(pendingChange));
static MovementStatusElements const extraElements[] =
{
MSEExtraTwoBits,
MSEExtraFloat
};
Movement::ExtraMovementStatusElement extra(extraElements);
extra.Data.floatData = newHeight;
extra.Data.byteData = reason;
WorldPacket data(SMSG_MOVE_SET_COLLISION_HEIGHT, 8 + 1 + 4);
unit->WriteMovementInfo(data, &extra, &mCounter);
controller->SendDirectMessage(&data);
}
void MovementPacketSender::SendHeightChangeToObservers(Unit* unit, float newHeight)
{
GameClient* controller = unit->GetGameClientMovingMe();
ASSERT(controller);
WorldPacket data(SMSG_MOVE_UPDATE_COLLISION_HEIGHT);
static MovementStatusElements const speedVal = MSEExtraFloat;
Movement::ExtraMovementStatusElement extra(&speedVal);
extra.Data.floatData = newHeight;
unit->WriteMovementInfo(data, &extra);
unit->SendMessageToSet(&data, controller->GetBasePlayer());
}
void MovementPacketSender::SendSpeedChangeToMover(Unit* unit, UnitMoveType mtype, float newSpeedFlat)
{
GameClient* controller = unit->GetGameClientMovingMe();