Core/Movement: fixed packet structure for SMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY and SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY

* enabled CMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY_ACK
This commit is contained in:
Ovahlord committed 2019-09-14 18:23:58 +02:00
1 parent 7dacfff2ef
commit 9a0fe48e70
5 files changed
+63 -16

No files matched your search

+4 -10
View File
@@ -27971,16 +27971,10 @@ VoidStorageItem* Player::GetVoidStorageItem(uint64 id, uint8& slot) const
void Player::SendMovementSetCanTransitionBetweenSwimAndFly(bool apply)
{
static Opcodes const swimToFlyTransOpcodeTable[2] =
{
SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY,
SMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY
};
WorldPacket data(swimToFlyTransOpcodeTable[apply], 15);
data.appendPackGUID(GetGUID());
data << uint32(m_movementCounter++);
SendDirectMessage(&data);
if (apply)
Movement::PacketSender(this, NULL_OPCODE, SMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY).Send();
else
Movement::PacketSender(this, NULL_OPCODE, SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY).Send();
}
void Player::SendMovementSetCollisionHeight(float height)
+9 -2
View File
@@ -14354,7 +14354,9 @@ bool Unit::SetCanFly(bool enable, bool packetOnly)
{
AddUnitMovementFlag(MOVEMENTFLAG_CAN_FLY);
RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_SPLINE_ELEVATION);
AddExtraUnitMovementFlag(MOVEMENTFLAG2_CAN_SWIM_TO_FLY_TRANS);
if (GetTypeId() == TYPEID_PLAYER)
AddExtraUnitMovementFlag(MOVEMENTFLAG2_CAN_SWIM_TO_FLY_TRANS);
SetFall(false);
}
else
@@ -14362,8 +14364,13 @@ bool Unit::SetCanFly(bool enable, bool packetOnly)
if (IsFlying() && !IsLevitating())
SetFall(true);
RemoveUnitMovementFlag(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_MASK_MOVING_FLY);
RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_CAN_SWIM_TO_FLY_TRANS);
if (GetTypeId() == TYPEID_PLAYER)
RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_CAN_SWIM_TO_FLY_TRANS);
}
if (Player* player = ToPlayer())
player->SendMovementSetCanTransitionBetweenSwimAndFly(enable);
}
if (enable)
@@ -5489,6 +5489,51 @@ MovementStatusElements const MoveUpdateFlightBackSpeed[] =
MSEEnd
};
MovementStatusElements const MoveSetCanTransitionBetweenSwimAndFly[] =
{
MSEHasGuidByte4,
MSEHasGuidByte5,
MSEHasGuidByte7,
MSEHasGuidByte0,
MSEHasGuidByte2,
MSEHasGuidByte6,
MSEHasGuidByte1,
MSEHasGuidByte3,
MSEGuidByte0,
MSEGuidByte6,
MSEGuidByte1,
MSEGuidByte2,
MSEGuidByte5,
MSEGuidByte4,
MSEGuidByte7,
MSECounter,
MSEGuidByte3,
MSEEnd,
};
MovementStatusElements const MoveUnsetCanTransitionBetweenSwimAndFly[] =
{
MSEHasGuidByte3,
MSEHasGuidByte4,
MSEHasGuidByte7,
MSEHasGuidByte0,
MSEHasGuidByte6,
MSEHasGuidByte1,
MSEHasGuidByte5,
MSEHasGuidByte2,
MSEGuidByte5,
MSEGuidByte2,
MSEGuidByte7,
MSEGuidByte0,
MSECounter,
MSEGuidByte6,
MSEGuidByte4,
MSEGuidByte3,
MSEGuidByte1,
MSEEnd,
};
void Movement::ExtraMovementStatusElement::ReadNextElement(ByteBuffer& packet)
{
MovementStatusElements const element = _elements[_index++];
@@ -5834,6 +5879,10 @@ MovementStatusElements const* GetMovementStatusElementsSequence(Opcodes opcode)
return MoveGravityEnable;
case SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED:
return MoveUpdateFlightBackSpeed;
case SMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY:
return MoveSetCanTransitionBetweenSwimAndFly;
case SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY:
return MoveUnsetCanTransitionBetweenSwimAndFly;
default:
break;
}
+1 -1
View File
@@ -454,7 +454,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_MOVE_NOT_ACTIVE_MOVER, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveNotActiveMover );
DEFINE_HANDLER(CMSG_MOVE_SET_CAN_FLY, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
DEFINE_HANDLER(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveSetCanFlyAckOpcode );
DEFINE_HANDLER(CMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_HANDLER(CMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
DEFINE_HANDLER(CMSG_MOVE_SET_COLLISION_HEIGHT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetCollisionHeightAck );
DEFINE_HANDLER(CMSG_MOVE_SPLINE_DONE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveSplineDoneOpcode );
DEFINE_HANDLER(CMSG_MOVE_TIME_SKIPPED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleMoveTimeSkippedOpcode );
@@ -2733,9 +2733,6 @@ void AuraEffect::HandleAuraAllowFlight(AuraApplication const* aurApp, uint8 mode
return;
}
if (target->GetTypeId() == TYPEID_PLAYER)
target->ToPlayer()->SendMovementSetCanTransitionBetweenSwimAndFly(apply);
target->SetCanFly(apply);
if (!apply && target->GetTypeId() == TYPEID_UNIT && !target->IsLevitating())