mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/PacketIO: Implemented CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE and ActivePlayerData::TransportServerTime updatefield
This commit is contained in:
@@ -765,7 +765,7 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
|
||||
|
||||
virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius = true, bool incTargetRadius = true) const;
|
||||
|
||||
bool CanNeverSee(WorldObject const* obj) const;
|
||||
virtual bool CanNeverSee(WorldObject const* obj) const;
|
||||
virtual bool CanAlwaysSee(WorldObject const* /*obj*/) const { return false; }
|
||||
bool CanDetect(WorldObject const* obj, bool ignoreStealth, bool checkAlert = false) const;
|
||||
bool CanDetectInvisibilityOf(WorldObject const* obj) const;
|
||||
|
||||
@@ -1660,6 +1660,9 @@ void Player::RemoveFromWorld()
|
||||
GetName().c_str(), GetGUID().ToString().c_str(), viewpoint->GetEntry(), viewpoint->GetTypeId());
|
||||
SetViewpoint(viewpoint, false);
|
||||
}
|
||||
|
||||
RemovePlayerLocalFlag(PLAYER_LOCAL_FLAG_OVERRIDE_TRANSPORT_SERVER_TIME);
|
||||
SetTransportServerTime(0);
|
||||
}
|
||||
|
||||
void Player::SetObjectScale(float scale)
|
||||
@@ -24101,6 +24104,13 @@ bool Player::IsNeverVisibleFor(WorldObject const* seer) const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Player::CanNeverSee(WorldObject const* /*obj*/) const
|
||||
{
|
||||
// the intent is to delay sending visible objects until client is ready for them
|
||||
// some gameobjects dont function correctly if they are sent before TransportServerTime is correctly set (after CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE)
|
||||
return !HasPlayerLocalFlag(PLAYER_LOCAL_FLAG_OVERRIDE_TRANSPORT_SERVER_TIME);
|
||||
}
|
||||
|
||||
bool Player::CanAlwaysSee(WorldObject const* obj) const
|
||||
{
|
||||
// Always can see self
|
||||
|
||||
@@ -2795,6 +2795,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
|
||||
void AddAuraVision(PlayerFieldByte2Flags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AuraVision), flags); }
|
||||
void RemoveAuraVision(PlayerFieldByte2Flags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AuraVision), flags); }
|
||||
|
||||
void SetTransportServerTime(int32 transportServerTime) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TransportServerTime), transportServerTime); }
|
||||
|
||||
bool IsInFriendlyArea() const;
|
||||
bool IsFriendlyArea(AreaTableEntry const* inArea) const;
|
||||
|
||||
@@ -3085,6 +3087,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
|
||||
Runes *m_runes;
|
||||
EquipmentSetContainer _equipmentSets;
|
||||
|
||||
bool CanNeverSee(WorldObject const* obj) const override;
|
||||
bool CanAlwaysSee(WorldObject const* obj) const override;
|
||||
|
||||
bool IsAlwaysDetectableFor(WorldObject const* seer) const override;
|
||||
|
||||
@@ -785,3 +785,11 @@ void WorldSession::ComputeNewClockDelta()
|
||||
_timeSyncClockDelta = back.first;
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleMoveInitActiveMoverComplete(WorldPackets::Movement::MoveInitActiveMoverComplete& moveInitActiveMoverComplete)
|
||||
{
|
||||
_player->SetPlayerLocalFlag(PLAYER_LOCAL_FLAG_OVERRIDE_TRANSPORT_SERVER_TIME);
|
||||
_player->SetTransportServerTime(GameTime::GetGameTimeMS() - moveInitActiveMoverComplete.Ticks);
|
||||
|
||||
_player->UpdateObjectVisibility(false);
|
||||
}
|
||||
|
||||
@@ -1067,3 +1067,8 @@ WorldPacket const* WorldPackets::Movement::MoveSetCompoundState::Write()
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Movement::MoveInitActiveMoverComplete::Read()
|
||||
{
|
||||
_worldPacket >> Ticks;
|
||||
}
|
||||
|
||||
@@ -693,6 +693,16 @@ namespace WorldPackets
|
||||
ObjectGuid MoverGUID;
|
||||
std::vector<MoveStateChange> StateChanges;
|
||||
};
|
||||
|
||||
class MoveInitActiveMoverComplete final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
MoveInitActiveMoverComplete(WorldPacket&& packet) : ClientPacket(CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
uint32 Ticks = 0;
|
||||
};
|
||||
}
|
||||
|
||||
ByteBuffer& operator<<(ByteBuffer& data, Movement::MonsterSplineFilterKey const& monsterSplineFilterKey);
|
||||
|
||||
@@ -588,7 +588,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_MOVE_HOVER_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
|
||||
DEFINE_HANDLER(CMSG_MOVE_INERTIA_DISABLE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
|
||||
DEFINE_HANDLER(CMSG_MOVE_INERTIA_ENABLE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
|
||||
DEFINE_HANDLER(CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveInitActiveMoverComplete);
|
||||
DEFINE_HANDLER(CMSG_MOVE_JUMP, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes);
|
||||
DEFINE_HANDLER(CMSG_MOVE_KNOCK_BACK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveKnockBackAck);
|
||||
DEFINE_HANDLER(CMSG_MOVE_REMOVE_INERTIA_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
|
||||
|
||||
@@ -539,6 +539,7 @@ namespace WorldPackets
|
||||
class SuspendTokenResponse;
|
||||
class MoveApplyMovementForceAck;
|
||||
class MoveRemoveMovementForceAck;
|
||||
class MoveInitActiveMoverComplete;
|
||||
}
|
||||
|
||||
namespace NPC
|
||||
@@ -1322,6 +1323,7 @@ class TC_GAME_API WorldSession
|
||||
void HandleMoveSetVehicleRecAck(WorldPackets::Vehicle::MoveSetVehicleRecIdAck& setVehicleRecIdAck);
|
||||
void HandleMoveTimeSkippedOpcode(WorldPackets::Movement::MoveTimeSkipped& moveTimeSkipped);
|
||||
void HandleMovementAckMessage(WorldPackets::Movement::MovementAckMessage& movementAck);
|
||||
void HandleMoveInitActiveMoverComplete(WorldPackets::Movement::MoveInitActiveMoverComplete& moveInitActiveMoverComplete);
|
||||
|
||||
void HandleRequestRaidInfoOpcode(WorldPackets::Party::RequestRaidInfo& packet);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user