lfg list group finder update to check thordekk when get time
This commit is contained in:
@@ -605,3 +605,18 @@ void WorldSession::SendLfgSlotInvalid(lfg::LfgSlotInvalidReason reason, int32 su
|
|||||||
slotInvalid.SubReason2 = subReason2;
|
slotInvalid.SubReason2 = subReason2;
|
||||||
SendPacket(slotInvalid.Write());
|
SendPacket(slotInvalid.Write());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WorldSession::HandleDFReadyCheckResponse(WorldPackets::LFG::DFReadyCheckResponse& dfReadyCheckResponse)
|
||||||
|
{
|
||||||
|
TC_LOG_DEBUG("lfg", "CMSG_DF_READY_CHECK_RESPONSE {} isReady: {}", GetPlayerInfo(), dfReadyCheckResponse.IsReady);
|
||||||
|
|
||||||
|
Player* player = GetPlayer();
|
||||||
|
if (!player)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Group const* group = player->GetGroup();
|
||||||
|
if (!group)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//sLFGMgr->UpdateReadyCheck(group->GetGUID(), player->GetGUID(), dfReadyCheckResponse.IsReady);
|
||||||
|
}
|
||||||
|
|||||||
@@ -634,9 +634,6 @@ namespace WorldPackets::Garrison
|
|||||||
_worldPacket >> followerCount;
|
_worldPacket >> followerCount;
|
||||||
_worldPacket >> MissionRecID;
|
_worldPacket >> MissionRecID;
|
||||||
|
|
||||||
// Cap before resize(): a client-controlled count can't legitimately exceed the packet's own byte size (each
|
|
||||||
// element is >= 1 byte), so this bounds the allocation to a few KB. resize() throws std::bad_alloc, which the
|
|
||||||
// opcode dispatcher does NOT catch (only ByteBufferException) -> an uncapped count crashes the world thread.
|
|
||||||
followerCount = std::min<uint32>(followerCount, _worldPacket.size());
|
followerCount = std::min<uint32>(followerCount, _worldPacket.size());
|
||||||
FollowerDBIDs.resize(followerCount);
|
FollowerDBIDs.resize(followerCount);
|
||||||
FollowerBoardIndexes.resize(followerCount);
|
FollowerBoardIndexes.resize(followerCount);
|
||||||
@@ -718,9 +715,7 @@ namespace WorldPackets::Garrison
|
|||||||
|
|
||||||
_worldPacket << Mission;
|
_worldPacket << Mission;
|
||||||
|
|
||||||
// Single byte where the client reads bit7 as Succeeded and bit6 as OvermaxSucceeded.
|
|
||||||
// Written directly because TC's Bits<1> writer is LSB-first while the client reads
|
|
||||||
// MSB-first (see SNIFF_AUDIT -10.1.8 bit-pack note).
|
|
||||||
_worldPacket << uint8((Succeeded ? 0x80u : 0u) | (OvermaxSucceeded ? 0x40u : 0u));
|
_worldPacket << uint8((Succeeded ? 0x80u : 0u) | (OvermaxSucceeded ? 0x40u : 0u));
|
||||||
|
|
||||||
for (GarrisonAutoMissionRound const& round : Rounds)
|
for (GarrisonAutoMissionRound const& round : Rounds)
|
||||||
@@ -741,8 +736,7 @@ namespace WorldPackets::Garrison
|
|||||||
_worldPacket << uint32(tgt.OldHealth);
|
_worldPacket << uint32(tgt.OldHealth);
|
||||||
_worldPacket << uint32(tgt.NewHealth);
|
_worldPacket << uint32(tgt.NewHealth);
|
||||||
_worldPacket << uint32(tgt.MaxHealth);
|
_worldPacket << uint32(tgt.MaxHealth);
|
||||||
// bit7 set when Points is present; the client reads (n & 0x80) >> 7 then
|
|
||||||
// gates the optional u32 read on that bit.
|
|
||||||
_worldPacket << uint8(tgt.Points.has_value() ? 0x80u : 0u);
|
_worldPacket << uint8(tgt.Points.has_value() ? 0x80u : 0u);
|
||||||
if (tgt.Points)
|
if (tgt.Points)
|
||||||
_worldPacket << uint32(*tgt.Points);
|
_worldPacket << uint32(*tgt.Points);
|
||||||
|
|||||||
@@ -460,4 +460,16 @@ WorldPacket const* RequestPvpRewardsResponse::Write()
|
|||||||
return &_worldPacket;
|
return &_worldPacket;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DFReadyCheckResponse::Read()
|
||||||
|
{
|
||||||
|
// Client 12.1.0.69382 serializer 0x6A5240: presence bit, then IsReady, then FlushBits, then the
|
||||||
|
// conditional uint8. Calibrated against CMSG_SET_EVERYONE_IS_ASSISTANT (0x430046, serializer 0x6A5080),
|
||||||
|
// whose byte-for-byte identical body TrinityCore already reads in this order.
|
||||||
|
_worldPacket >> OptionalInit(PartyIndex);
|
||||||
|
_worldPacket >> Bits<1>(IsReady);
|
||||||
|
_worldPacket.ResetBitPos();
|
||||||
|
if (PartyIndex)
|
||||||
|
_worldPacket >> *PartyIndex;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -537,6 +537,17 @@ namespace WorldPackets
|
|||||||
uint8 BrawlFlags = 0x00;
|
uint8 BrawlFlags = 0x00;
|
||||||
uint8 ExtraFlags = 0x80;
|
uint8 ExtraFlags = 0x80;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class DFReadyCheckResponse final : public ClientPacket
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit DFReadyCheckResponse(WorldPacket&& packet) : ClientPacket(CMSG_DF_READY_CHECK_RESPONSE, std::move(packet)) {}
|
||||||
|
|
||||||
|
void Read() override;
|
||||||
|
|
||||||
|
Optional<uint8> PartyIndex;
|
||||||
|
bool IsReady = false;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -436,7 +436,7 @@ void OpcodeTable::InitializeClientOpcodes()
|
|||||||
DEFINE_HANDLER(CMSG_DF_JOIN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgJoinOpcode);
|
DEFINE_HANDLER(CMSG_DF_JOIN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgJoinOpcode);
|
||||||
DEFINE_HANDLER(CMSG_DF_LEAVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgLeaveOpcode);
|
DEFINE_HANDLER(CMSG_DF_LEAVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgLeaveOpcode);
|
||||||
DEFINE_HANDLER(CMSG_DF_PROPOSAL_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgProposalResultOpcode);
|
DEFINE_HANDLER(CMSG_DF_PROPOSAL_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgProposalResultOpcode);
|
||||||
DEFINE_HANDLER(CMSG_DF_READY_CHECK_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
DEFINE_HANDLER(CMSG_DF_READY_CHECK_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDFReadyCheckResponse);
|
||||||
DEFINE_HANDLER(CMSG_DF_SET_ROLES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgSetRolesOpcode);
|
DEFINE_HANDLER(CMSG_DF_SET_ROLES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgSetRolesOpcode);
|
||||||
DEFINE_HANDLER(CMSG_DF_TELEPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgTeleportOpcode);
|
DEFINE_HANDLER(CMSG_DF_TELEPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgTeleportOpcode);
|
||||||
DEFINE_HANDLER(CMSG_DISCARDED_TIME_SYNC_ACKS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleDiscardedTimeSyncAcks);
|
DEFINE_HANDLER(CMSG_DISCARDED_TIME_SYNC_ACKS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleDiscardedTimeSyncAcks);
|
||||||
|
|||||||
@@ -760,6 +760,7 @@ namespace WorldPackets
|
|||||||
class DFGetJoinStatus;
|
class DFGetJoinStatus;
|
||||||
class DFConfirmExpandSearch;
|
class DFConfirmExpandSearch;
|
||||||
struct RideTicket;
|
struct RideTicket;
|
||||||
|
class DFReadyCheckResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace LFGList
|
namespace LFGList
|
||||||
@@ -2341,6 +2342,7 @@ public:
|
|||||||
void SendLfgTeleportError(lfg::LfgTeleportResult err);
|
void SendLfgTeleportError(lfg::LfgTeleportResult err);
|
||||||
void SendLfgExpandSearchPrompt(WorldPackets::LFG::RideTicket const& ticket);
|
void SendLfgExpandSearchPrompt(WorldPackets::LFG::RideTicket const& ticket);
|
||||||
void SendLfgSlotInvalid(lfg::LfgSlotInvalidReason reason, int32 subReason1, int32 subReason2);
|
void SendLfgSlotInvalid(lfg::LfgSlotInvalidReason reason, int32 subReason1, int32 subReason2);
|
||||||
|
void HandleDFReadyCheckResponse(WorldPackets::LFG::DFReadyCheckResponse& dfReadyCheckResponse);
|
||||||
|
|
||||||
void HandleSelfResOpcode(WorldPackets::Spells::SelfRes& selfRes);
|
void HandleSelfResOpcode(WorldPackets::Spells::SelfRes& selfRes);
|
||||||
void HandleRequestPetInfo(WorldPackets::Pet::RequestPetInfo& requestPetInfo);
|
void HandleRequestPetInfo(WorldPackets::Pet::RequestPetInfo& requestPetInfo);
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ struct npc_rira_hackclaw : public BossAI
|
|||||||
events.ScheduleEvent(EVENT_CLEAVE, 15s);
|
events.ScheduleEvent(EVENT_CLEAVE, 15s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnterEvadeMode(EvadeReason why) override
|
void EnterEvadeMode(EvadeReason /*why*/) override
|
||||||
{
|
{
|
||||||
summons.DespawnAll();
|
summons.DespawnAll();
|
||||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ enum DragonridingSpells
|
|||||||
SPELL_SKYRIDING_BASICS = 376777,
|
SPELL_SKYRIDING_BASICS = 376777,
|
||||||
SPELL_SWITCH_FLIGHT_STYLE = 436854,
|
SPELL_SWITCH_FLIGHT_STYLE = 436854,
|
||||||
SPELL_VIGOR = 372773,
|
SPELL_VIGOR = 372773,
|
||||||
SPELL_LIFT_OFF_1 = 374763,
|
SPELL_LIFT_OFF_1 = 374763, //383363, 404191 //12.1 sniff to verify
|
||||||
SPELL_LIFT_OFF_2 = 372610,
|
SPELL_LIFT_OFF_2 = 372610,
|
||||||
SPELL_LIFT_OFF_3 = 386451,
|
SPELL_LIFT_OFF_3 = 386451,
|
||||||
SPELL_SURGE_FORWARD = 372608,
|
SPELL_SURGE_FORWARD = 372608,
|
||||||
|
|||||||
Reference in New Issue
Block a user