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:
1 parent
7dacfff2ef
commit
9a0fe48e70
5 files changed
+63
-16
No files matched your search
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in new issue
Block a user