mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 09:44:45 +01:00
Core/PacketIO: Updated and enabled CMSG_OBJECT_UPDATE_FAILED, implemented CMSG_OBJECT_UPDATE_RESCUED
This commit is contained in:
@@ -1340,39 +1340,28 @@ void WorldSession::HandleViolenceLevel(WorldPackets::Misc::ViolenceLevel& /*viol
|
||||
// do something?
|
||||
}
|
||||
|
||||
void WorldSession::HandleObjectUpdateFailedOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleObjectUpdateFailedOpcode(WorldPackets::Misc::ObjectUpdateFailed& objectUpdateFailed)
|
||||
{
|
||||
ObjectGuid guid;
|
||||
guid[6] = recvPacket.ReadBit();
|
||||
guid[7] = recvPacket.ReadBit();
|
||||
guid[4] = recvPacket.ReadBit();
|
||||
guid[0] = recvPacket.ReadBit();
|
||||
guid[1] = recvPacket.ReadBit();
|
||||
guid[5] = recvPacket.ReadBit();
|
||||
guid[3] = recvPacket.ReadBit();
|
||||
guid[2] = recvPacket.ReadBit();
|
||||
|
||||
recvPacket.ReadByteSeq(guid[6]);
|
||||
recvPacket.ReadByteSeq(guid[7]);
|
||||
recvPacket.ReadByteSeq(guid[2]);
|
||||
recvPacket.ReadByteSeq(guid[3]);
|
||||
recvPacket.ReadByteSeq(guid[1]);
|
||||
recvPacket.ReadByteSeq(guid[4]);
|
||||
recvPacket.ReadByteSeq(guid[0]);
|
||||
recvPacket.ReadByteSeq(guid[5]);
|
||||
|
||||
WorldObject* obj = ObjectAccessor::GetWorldObject(*GetPlayer(), guid);
|
||||
TC_LOG_ERROR("network", "Object update failed for %s (%s) for player %s (%s)", guid.ToString().c_str(), obj ? obj->GetName().c_str() : "object-not-found", GetPlayerName().c_str(), _player->GetGUID().ToString().c_str());
|
||||
TC_LOG_ERROR("network", "Object update failed for %s for player %s (%s)", objectUpdateFailed.ObjectGUID.ToString().c_str(), GetPlayerName().c_str(), _player->GetGUID().ToString().c_str());
|
||||
|
||||
// If create object failed for current player then client will be stuck on loading screen
|
||||
if (_player->GetGUID() == guid)
|
||||
if (_player->GetGUID() == objectUpdateFailed.ObjectGUID)
|
||||
{
|
||||
LogoutPlayer(true);
|
||||
return;
|
||||
}
|
||||
|
||||
// Pretend we've never seen this object
|
||||
_player->m_clientGUIDs.erase(guid);
|
||||
_player->m_clientGUIDs.erase(objectUpdateFailed.ObjectGUID);
|
||||
}
|
||||
|
||||
void WorldSession::HandleObjectUpdateRescuedOpcode(WorldPackets::Misc::ObjectUpdateRescued& objectUpdateRescued)
|
||||
{
|
||||
TC_LOG_ERROR("network", "Object update rescued for %s for player %s (%s)", objectUpdateRescued.ObjectGUID.ToString().c_str(), GetPlayerName().c_str(), _player->GetGUID().ToString().c_str());
|
||||
|
||||
// Client received values update after destroying object
|
||||
// re-register object in m_clientGUIDs to send DestroyObject on next visibility update
|
||||
_player->m_clientGUIDs.insert(objectUpdateRescued.ObjectGUID);
|
||||
}
|
||||
|
||||
void WorldSession::HandleSaveCUFProfiles(WorldPacket& recvPacket)
|
||||
|
||||
@@ -420,3 +420,13 @@ WorldPacket const* WorldPackets::Misc::DurabilityDamageDeath::Write()
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Misc::ObjectUpdateFailed::Read()
|
||||
{
|
||||
_worldPacket >> ObjectGUID;
|
||||
}
|
||||
|
||||
void WorldPackets::Misc::ObjectUpdateRescued::Read()
|
||||
{
|
||||
_worldPacket >> ObjectGUID;
|
||||
}
|
||||
|
||||
@@ -573,6 +573,26 @@ namespace WorldPackets
|
||||
|
||||
int32 Percent = 0;
|
||||
};
|
||||
|
||||
class ObjectUpdateFailed final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
ObjectUpdateFailed(WorldPacket&& packet) : ClientPacket(CMSG_OBJECT_UPDATE_FAILED, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid ObjectGUID;
|
||||
};
|
||||
|
||||
class ObjectUpdateRescued final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
ObjectUpdateRescued(WorldPacket&& packet) : ClientPacket(CMSG_OBJECT_UPDATE_RESCUED, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid ObjectGUID;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -579,8 +579,8 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_MOVE_WATER_WALK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_NEUTRAL_PLAYER_SELECT_FACTION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_NEXT_CINEMATIC_CAMERA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleNextCinematicCamera );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_OBJECT_UPDATE_FAILED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleObjectUpdateFailedOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_OBJECT_UPDATE_RESCUED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_HANDLER(CMSG_OBJECT_UPDATE_FAILED, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Misc::ObjectUpdateFailed, &WorldSession::HandleObjectUpdateFailedOpcode);
|
||||
DEFINE_HANDLER(CMSG_OBJECT_UPDATE_RESCUED, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Misc::ObjectUpdateRescued, &WorldSession::HandleObjectUpdateRescuedOpcode);
|
||||
DEFINE_HANDLER(CMSG_OFFER_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Petition::OfferPetition, &WorldSession::HandleOfferPetition);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_OPENING_CINEMATIC, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleOpeningCinematic );
|
||||
DEFINE_HANDLER(CMSG_OPEN_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Spells::OpenItem, &WorldSession::HandleOpenItemOpcode);
|
||||
|
||||
@@ -310,6 +310,8 @@ namespace WorldPackets
|
||||
class StandStateChange;
|
||||
class UITimeRequest;
|
||||
class RandomRollClient;
|
||||
class ObjectUpdateFailed;
|
||||
class ObjectUpdateRescued;
|
||||
}
|
||||
|
||||
namespace Movement
|
||||
@@ -1411,7 +1413,8 @@ class WorldSession
|
||||
void HandleUpdateProjectilePosition(WorldPacket& recvPacket);
|
||||
void HandleUpdateMissileTrajectory(WorldPacket& recvPacket);
|
||||
void HandleViolenceLevel(WorldPackets::Misc::ViolenceLevel& violenceLevel);
|
||||
void HandleObjectUpdateFailedOpcode(WorldPacket& recvPacket);
|
||||
void HandleObjectUpdateFailedOpcode(WorldPackets::Misc::ObjectUpdateFailed& objectUpdateFailed);
|
||||
void HandleObjectUpdateRescuedOpcode(WorldPackets::Misc::ObjectUpdateRescued& objectUpdateRescued);
|
||||
void HandleRequestCategoryCooldowns(WorldPackets::Spells::RequestCategoryCooldowns& requestCategoryCooldowns);
|
||||
|
||||
// Scenes
|
||||
|
||||
Reference in New Issue
Block a user