Clear the encounter timeline and treasure picker from dungeon sniffs.

This commit is contained in:
luis
2026-09-23 13:11:47 -03:00
parent 0811620d76
commit bb3f84a87b
5 changed files with 38 additions and 2 deletions
@@ -26511,6 +26511,15 @@ void Player::SendInitialPacketsAfterAddToMap()
initialUpdate.SequenceIndex = m_movementCounter++;
SendDirectMessage(initialUpdate.Write());
}
// Dungeon captures clear the treasure picker cache with an empty packet once the player is on
// the instance connection. Open world does not get that clear.
if (GetMap()->IsDungeon())
{
WorldPackets::Misc::ClearTreasurePickerCache clearTreasurePicker;
SendDirectMessage(clearTreasurePicker.Write());
}
//WowCommunity
if (HasUnitState(UNIT_STATE_FLEEING | UNIT_STATE_CONFUSED) || HasAuraType(SPELL_AURA_MOD_CONFUSE) || HasAuraType(SPELL_AURA_MOD_FEAR))
@@ -955,6 +955,10 @@ void InstanceScript::SendEncounterEnd()
{
WorldPackets::Instance::InstanceEncounterEnd encounterEndMessage;
instance->SendToPlayers(encounterEndMessage.Write());
// The same end bundle in the dungeon captures clears the encounter timeline with a count of 0.
WorldPackets::Instance::InstanceEncounterEventSequence clearTimeline;
instance->SendToPlayers(clearTimeline.Write());
}
void InstanceScript::SendBossKillCredit(uint32 encounterId)
@@ -593,6 +593,20 @@ namespace WorldPackets
uint32 TimerID = 0;
bool KeepTimer = false;
};
// SMSG_INSTANCE_ENCOUNTER_EVENT_SEQUENCE. A count of 0 is the 4-byte clear retail sends
// with the encounter-end bundle. Populated event records are variable and not written here.
class InstanceEncounterEventSequence final : public ServerPacket
{
public:
explicit InstanceEncounterEventSequence() : ServerPacket(SMSG_INSTANCE_ENCOUNTER_EVENT_SEQUENCE, 4) {}
WorldPacket const* Write() override
{
_worldPacket << uint32(0);
return &_worldPacket;
}
};
}
}
@@ -1476,6 +1476,15 @@ namespace WorldPackets
WorldPacket const* Write() override { return &_worldPacket; }
};
// SMSG_CLEAR_TREASURE_PICKER_CACHE. Dungeon captures send an empty body on the instance connection.
class ClearTreasurePickerCache final : public ServerPacket
{
public:
explicit ClearTreasurePickerCache() : ServerPacket(SMSG_CLEAR_TREASURE_PICKER_CACHE, 0) {}
WorldPacket const* Write() override { return &_worldPacket; }
};
}
}
+2 -2
View File
@@ -1438,7 +1438,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_RESURRECT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_SPELL_CHARGES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_TARGET, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_TREASURE_PICKER_CACHE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_TREASURE_PICKER_CACHE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLOSE_ARTIFACT_FORGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_ERROR_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -1839,7 +1839,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_EVENT_BLOCKED_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_EVENT_CAST_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_EVENT_RESPAWN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_EVENT_SEQUENCE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_EVENT_SEQUENCE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);