lfg list group finder update to check thordekk when get time

This commit is contained in:
luis
2026-09-15 22:29:38 -03:00
parent 167a0f0685
commit 452a087df4
8 changed files with 46 additions and 12 deletions
+15
View File
@@ -605,3 +605,18 @@ void WorldSession::SendLfgSlotInvalid(lfg::LfgSlotInvalidReason reason, int32 su
slotInvalid.SubReason2 = subReason2;
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 >> 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());
FollowerDBIDs.resize(followerCount);
FollowerBoardIndexes.resize(followerCount);
@@ -718,9 +715,7 @@ namespace WorldPackets::Garrison
_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));
for (GarrisonAutoMissionRound const& round : Rounds)
@@ -741,8 +736,7 @@ namespace WorldPackets::Garrison
_worldPacket << uint32(tgt.OldHealth);
_worldPacket << uint32(tgt.NewHealth);
_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);
if (tgt.Points)
_worldPacket << uint32(*tgt.Points);
@@ -460,4 +460,16 @@ WorldPacket const* RequestPvpRewardsResponse::Write()
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 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;
};
}
}
+1 -1
View File
@@ -436,7 +436,7 @@ void OpcodeTable::InitializeClientOpcodes()
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_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_TELEPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgTeleportOpcode);
DEFINE_HANDLER(CMSG_DISCARDED_TIME_SYNC_ACKS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleDiscardedTimeSyncAcks);
+2
View File
@@ -760,6 +760,7 @@ namespace WorldPackets
class DFGetJoinStatus;
class DFConfirmExpandSearch;
struct RideTicket;
class DFReadyCheckResponse;
}
namespace LFGList
@@ -2341,6 +2342,7 @@ public:
void SendLfgTeleportError(lfg::LfgTeleportResult err);
void SendLfgExpandSearchPrompt(WorldPackets::LFG::RideTicket const& ticket);
void SendLfgSlotInvalid(lfg::LfgSlotInvalidReason reason, int32 subReason1, int32 subReason2);
void HandleDFReadyCheckResponse(WorldPackets::LFG::DFReadyCheckResponse& dfReadyCheckResponse);
void HandleSelfResOpcode(WorldPackets::Spells::SelfRes& selfRes);
void HandleRequestPetInfo(WorldPackets::Pet::RequestPetInfo& requestPetInfo);
@@ -90,7 +90,7 @@ struct npc_rira_hackclaw : public BossAI
events.ScheduleEvent(EVENT_CLEAVE, 15s);
}
void EnterEvadeMode(EvadeReason why) override
void EnterEvadeMode(EvadeReason /*why*/) override
{
summons.DespawnAll();
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
@@ -285,4 +285,4 @@ void AddSC_npc_rira_hackclaw()
RegisterBrackenhideHollowCreatureAI(npc_rira_hackclaw);
RegisterBrackenhideHollowCreatureAI(npc_gasthooth_186124);
RegisterBrackenhideHollowCreatureAI(npc_gasTricktotem_186125);
}
}
@@ -36,7 +36,7 @@ enum DragonridingSpells
SPELL_SKYRIDING_BASICS = 376777,
SPELL_SWITCH_FLIGHT_STYLE = 436854,
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_3 = 386451,
SPELL_SURGE_FORWARD = 372608,