LFGList: stop blacklisting live Midnight activities
This commit is contained in:
@@ -889,10 +889,15 @@ void WorldSession::HandleLFGListInviteResponse(WorldPackets::LFGList::LFGListInv
|
||||
|
||||
namespace
|
||||
{
|
||||
// GroupFinderActivity.ExpansionID of the expansion that has not shipped yet. Not a named client constant -
|
||||
// read straight out of the data: the 205 activities the 12.1 captures blacklist with reason 1 are exactly
|
||||
// the ExpansionID == 11 rows of GroupFinderActivity, and no reason-1 row has any other ExpansionID.
|
||||
constexpr int32 EXPANSION_UNRELEASED_GROUP_FINDER = 11;
|
||||
// GroupFinderActivity.ExpansionID of the expansion that has not shipped yet.
|
||||
// The 69382/69404 captures (18-20 Aug 2026) blacklist reason 1 as exactly the 205 ExpansionID == 11
|
||||
// rows, and 69273 (11 Aug) sends no reason 1 at all. That set is Midnight, not a future expansion:
|
||||
// 12.1.0.69875 GroupFinderActivity names them Windrunner Spire, Maisara Caverns, Murder Row,
|
||||
// Voidspire, March on Quel'Danas, the Midnight delves and the Midnight zones. Forwarding that
|
||||
// reason-1 set tells a 69875 client the current expansion is still locked, which is the Premade
|
||||
// Group Finder with no Midnight activities. 12 is the next id; this build's table has no
|
||||
// ExpansionID 12 rows.
|
||||
constexpr int32 EXPANSION_UNRELEASED_GROUP_FINDER = 12;
|
||||
|
||||
// SMSG_LFG_LIST_UPDATE_BLACKLIST content, extracted verbatim from the TARGET build 12.1.0.69382
|
||||
// (C:/dumps/wpp_work/lfg_ref/69382_s69382_ws6_5A000E_{0,1}.bin, both 9100 byte and BYTE-IDENTICAL to each
|
||||
@@ -913,8 +918,9 @@ namespace
|
||||
// nothing more.
|
||||
//
|
||||
// What the reasons are, as far as the captures decide it:
|
||||
// reason 1 - EXACT RULE, see below: ExpansionID == 11 (the unreleased expansion). 205 activities,
|
||||
// and the set is byte-for-byte identical in all three captures that carry it.
|
||||
// reason 1 - ExpansionID == 11, 205 activities, identical in the three captures that carry it.
|
||||
// On 69875 those rows are the live Midnight catalog, so HandleRequestLFGListBlacklist
|
||||
// does not forward reason 1. The snapshot below is left intact as the capture record.
|
||||
// reason 18 - 143 rows in ALL FOUR captures, identical set: legacy content permanently off the group
|
||||
// finder (MoP/WoD zones and the 10-man raid tiers - "The Jade Forest", "Mogu'shan Vaults
|
||||
// (10 Heroic)"). Constant, therefore derivable, but the deriving field is not yet found.
|
||||
@@ -1063,22 +1069,23 @@ void WorldSession::HandleRequestLFGListBlacklist(WorldPackets::LFGList::RequestL
|
||||
sent.reserve(std::size(LFGListActivityBlacklist));
|
||||
for (LFGListBlacklistRow const& row : LFGListActivityBlacklist)
|
||||
{
|
||||
// The 205 reason-1 rows are every ExpansionID 11 activity. That was "unreleased" on the
|
||||
// 69382 capture and is the live Midnight list on 69875 (see EXPANSION_UNRELEASED_GROUP_FINDER).
|
||||
// Sending them makes the client drop Maisara, Windrunner Spire, Voidspire and the rest.
|
||||
if (row.Reason == 1)
|
||||
continue;
|
||||
|
||||
WorldPackets::LFGList::LFGListBlacklistEntry& entry = packet.Entries.emplace_back();
|
||||
entry.ActivityID = row.ActivityID;
|
||||
entry.Reason = row.Reason;
|
||||
sent.insert(row.ActivityID);
|
||||
}
|
||||
|
||||
// Reason 1 is the one rule the captures settle exactly, so it is DERIVED and not trusted to the snapshot
|
||||
// above. In all three 12.1 captures that carry reason 1 (69382 x1, 69404 x2 - different build, different
|
||||
// faction, different character) the reason-1 set is EXACTLY the set of GroupFinderActivity rows with
|
||||
// ExpansionID == 11, 205 of 205, no row missing and no row extra. 69273 carries no reason 1 at all, which
|
||||
// fits: expansion 11 is the unreleased one and its activities entered the client data later.
|
||||
// Deriving it matters because the alternative rots on a schedule. Every build adds ExpansionID 11
|
||||
// activities, retail blacklists each of them on sight, and a frozen list of 205 ids would keep answering
|
||||
// with yesterday's set - the exact failure that put the 12.0.7 table into a 12.1 branch in the first
|
||||
// place. Rows already present in the snapshot are left alone so the observed 1137 keep their observed
|
||||
// order and no activity is ever sent twice (the retail payload has no duplicate ids either).
|
||||
// Reason 1 stays derived, but for the expansion that is not in this client yet. The August captures
|
||||
// used 11 because those rows were still locked; 69875 ships them. New GroupFinderActivity rows with
|
||||
// ExpansionID == EXPANSION_UNRELEASED_GROUP_FINDER are appended so a later DB2 does not start
|
||||
// offering the next expansion's activities the day they appear in the file. Snapshot rows already
|
||||
// copied above are left alone, and no activity is sent twice.
|
||||
for (GroupFinderActivityEntry const* activity : sGroupFinderActivityStore)
|
||||
{
|
||||
if (activity->ExpansionID != EXPANSION_UNRELEASED_GROUP_FINDER || sent.count(activity->ID))
|
||||
|
||||
@@ -1894,7 +1894,7 @@ void OpcodeTable::InitializeServerOpcodes()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_APPLICANT_LIST_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_APPLICATION_STATUS_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_APPLY_TO_GROUP_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_CENSORED_ACTIVE_ENTRY_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_CENSORED_ACTIVE_ENTRY_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_JOIN_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_SEARCH_RESULTS, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_LIST_SEARCH_RESULTS_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
|
||||
Reference in New Issue
Block a user