This commit is contained in:
luis
2026-09-24 00:18:20 -03:00
parent 8a37692345
commit e933258349
13 changed files with 133 additions and 5 deletions
@@ -26458,6 +26458,9 @@ void Player::SendInitialPacketsAfterAddToMap()
GetSession()->SendLoadCUFProfiles();
WorldPackets::Misc::UpdateRecentPlayerGuids recentPlayers;
SendDirectMessage(recentPlayers.Write());
CastSpell(this, 836, true); // LOGINEFFECT
WorldPackets::Movement::MoveSetCompoundState setCompoundState;
+21
View File
@@ -9187,8 +9187,18 @@ void Unit::SetSpeedRate(UnitMoveType mtype, float rate)
if (m_speed_rate[mtype] == rate)
return;
float const previousRate = m_speed_rate[mtype];
m_speed_rate[mtype] = rate;
bool const scalesSpline = mtype == MOVE_RUN || mtype == MOVE_FLIGHT || mtype == MOVE_SWIM;
if (scalesSpline && previousRate > 0.0f && movespline && movespline->Initialized() && !movespline->Finalized())
{
WorldPackets::Movement::AdjustSplineDuration duration;
duration.MoverGUID = GetGUID();
duration.Scale = previousRate / rate;
SendMessageToSet(duration.Write(), true);
}
PropagateSpeedChange();
// Spline packets are for creatures and move_update are for players
@@ -9723,7 +9733,18 @@ void Unit::ApplyDiminishingAura(DiminishingGroup group, bool apply)
DiminishingReturn& diminish = m_Diminishing[group];
if (apply)
{
if (group != DIMINISHING_NONE)
{
WorldPackets::Combat::DiminishingReturnStart packet;
packet.UnitGUID = GetGUID();
packet.Group = uint8(group);
packet.Flags = diminish.stack ? 0x80 : 0;
SendMessageToSet(packet.Write(), true);
}
++diminish.stack;
}
else if (diminish.stack)
{
--diminish.stack;
@@ -3565,4 +3565,8 @@ void WorldSession::HandleGetRegionwideCharacterRestrictionAndMailData(WorldPacke
SendPacket(mail.Write());
}
void WorldSession::HandleRafRecruitPresenceSubscribe(WorldPackets::RaF::RafRecruitPresenceSubscribe& /*packet*/)
{
}
//WowCommunity
+8
View File
@@ -1423,6 +1423,14 @@ void WorldSession::HandleGetRemainingGameTime(WorldPackets::ClientConfig::GetRem
{
}
void WorldSession::HandleLatencyReport(WorldPackets::Misc::LatencyReport& packet)
{
}
void WorldSession::HandleWarden3Data(WorldPackets::Misc::Warden3Data& packet)
{
}
void WorldSession::HandleOverrideScreenFlash(WorldPackets::Misc::OverrideScreenFlash& /*packet*/)
{
// TODO: Implement screen flash override handling
@@ -158,4 +158,12 @@ WorldPacket const* BreakTarget::Write()
return &_worldPacket;
}
WorldPacket const* DiminishingReturnStart::Write()
{
_worldPacket << UnitGUID;
_worldPacket << uint8(Group);
_worldPacket << uint8(Flags);
return &_worldPacket;
}
}
@@ -233,6 +233,20 @@ namespace WorldPackets
ObjectGuid UnitGUID;
};
// SMSG_UNIT_DIMINISHING_RETURN_START. Captures are a PackedGuid, the DR group,
// then 0 on the first application and 0x80 once that group is already active.
class DiminishingReturnStart final : public ServerPacket
{
public:
explicit DiminishingReturnStart() : ServerPacket(SMSG_UNIT_DIMINISHING_RETURN_START, 18) {}
WorldPacket const* Write() override;
ObjectGuid UnitGUID;
uint8 Group = 0;
uint8 Flags = 0;
};
}
}
@@ -1070,4 +1070,11 @@ WorldPacket const* WarfrontComplete::Write()
return &_worldPacket;
}
WorldPacket const* UpdateRecentPlayerGuids::Write()
{
_worldPacket << uint32(0);
_worldPacket << uint32(0);
return &_worldPacket;
}
}
@@ -1485,6 +1485,32 @@ namespace WorldPackets
WorldPacket const* Write() override { return &_worldPacket; }
};
// CMSG_LATENCY_REPORT. The body is a client metric blob. Nothing in the captures
// requires an answer beyond accepting it.
class LatencyReport final : public ClientPacket
{
public:
explicit LatencyReport(WorldPacket&& packet) : ClientPacket(CMSG_LATENCY_REPORT, std::move(packet)) {}
void Read() override { _worldPacket.rfinish(); }
};
// CMSG_WARDEN3_DATA. Accepted so a client that still has a check in flight is not logged
// as unhandled. This server does not send SMSG_WARDEN3_ENABLED.
class Warden3Data final : public ClientPacket
{
public:
explicit Warden3Data(WorldPacket&& packet) : ClientPacket(CMSG_WARDEN3_DATA, std::move(packet)) {}
void Read() override { _worldPacket.rfinish(); }
};
// SMSG_UPDATE_RECENT_PLAYER_GUIDS. The common capture is eight zero bytes: no guids.
class UpdateRecentPlayerGuids final : public ServerPacket
{
public:
explicit UpdateRecentPlayerGuids() : ServerPacket(SMSG_UPDATE_RECENT_PLAYER_GUIDS, 8) {}
WorldPacket const* Write() override;
};
}
}
@@ -1286,4 +1286,12 @@ WorldPacket const* MoveUpdateSetGravityModifier::Write()
return &_worldPacket;
}
WorldPacket const* AdjustSplineDuration::Write()
{
_worldPacket << MoverGUID;
_worldPacket << Scale;
return &_worldPacket;
}
}
@@ -896,6 +896,20 @@ namespace WorldPackets
float GravityModifier = 1.0f;
};
// SMSG_ADJUST_SPLINE_DURATION. Dungeon captures are PackedGuid plus one float,
// the remaining-spline scale (0.5, 1, 2 and the values between them).
class AdjustSplineDuration final : public ServerPacket
{
public:
explicit AdjustSplineDuration() : ServerPacket(SMSG_ADJUST_SPLINE_DURATION, 16 + 4) {}
WorldPacket const* Write() override;
ObjectGuid MoverGUID;
float Scale = 1.0f;
};
ByteBuffer& operator>>(ByteBuffer& data, MovementAck& ack);
}
}
@@ -101,6 +101,15 @@ namespace WorldPackets
uint64 RecruitId = 0;
};
// CMSG_RAF_RECRUIT_PRESENCE_SUBSCRIBE. The body is a list of recruit guids.
// No empty SMSG_RAF_ACTIVITY_STATE_CHANGED is in the captures, so the request is only accepted.
class RafRecruitPresenceSubscribe final : public ClientPacket
{
public:
explicit RafRecruitPresenceSubscribe(WorldPacket&& packet) : ClientPacket(CMSG_RAF_RECRUIT_PRESENCE_SUBSCRIBE, std::move(packet)) {}
void Read() override { _worldPacket.rfinish(); }
};
// SMSG_RAF_ACCOUNT_INFO (0x4202E9) wire (client deserializer body sub_7FF7290B46F0):
// uint32 Field20, uint32 Count1, uint32 Count2, uint32 Count3(recruits), uint32 Count4,
// Count1 x {6 x uint32}, uint8 presence(bit7=FieldBit24, bit6=optBlockA, bit5=optBlockB),
+5 -5
View File
@@ -643,7 +643,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_KEEP_ALIVE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess);
DEFINE_HANDLER(CMSG_KEYBOUND_OVERRIDE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleKeyboundOverride);
DEFINE_HANDLER(CMSG_KIOSK_ENABLE_GOD_MODE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_LATENCY_REPORT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_LATENCY_REPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLatencyReport);
DEFINE_HANDLER(CMSG_LEARN_PVP_TALENTS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleLearnPvpTalentsOpcode);
DEFINE_HANDLER(CMSG_LEARN_TALENTS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleLearnTalentsOpcode);
DEFINE_HANDLER(CMSG_LEAVE_GROUP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLeaveGroupOpcode);
@@ -935,7 +935,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_RAF_CLAIM_ACTIVITY_REWARD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRafClaimActivityReward);
DEFINE_HANDLER(CMSG_RAF_CLAIM_NEXT_REWARD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRafClaimNextReward);
DEFINE_HANDLER(CMSG_RAF_GENERATE_RECRUITMENT_LINK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRafGenerateRecruitmentLink);
DEFINE_HANDLER(CMSG_RAF_RECRUIT_PRESENCE_SUBSCRIBE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_RAF_RECRUIT_PRESENCE_SUBSCRIBE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRafRecruitPresenceSubscribe);
DEFINE_HANDLER(CMSG_RAF_UPDATE_RECRUITMENT_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_RANDOM_ROLL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRandomRollOpcode);
DEFINE_HANDLER(CMSG_READY_CHECK_RESPONSE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleReadyCheckResponseOpcode);
@@ -1218,7 +1218,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADD_ITEM_PASSIVE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADD_LOSS_OF_CONTROL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADD_RUNE_POWER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADJUST_SPLINE_DURATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADJUST_SPLINE_DURATION, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADVANCED_COMBAT_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AE_LOOT_TARGETS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
@@ -2516,7 +2516,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UI_MAP_QUEST_LINES_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNDELETE_CHARACTER_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNIT_DIMINISHING_RETURN_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNIT_DIMINISHING_RETURN_START, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNLEARNED_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNLOAD_CHILD_MAP, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNSET_INSTANCE_LEAVER, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -2538,7 +2538,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_LAST_INSTANCE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_OBJECT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_PRIMARY_SPEC, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_RECENT_PLAYER_GUIDS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_RECENT_PLAYER_GUIDS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_TALENT_DATA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_WORLD_STATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_USERLIST_ADD, STATUS_NEVER, CONNECTION_TYPE_REALM);
+6
View File
@@ -834,6 +834,8 @@ namespace WorldPackets
class LoadCUFProfiles;
class SaveCUFProfiles;
class OpeningCinematic;
class LatencyReport;
class Warden3Data;
class TogglePvP;
class SetPvP;
class SetWarMode;
@@ -1050,6 +1052,7 @@ namespace WorldPackets
class AcceptLevelGrant;
class GrantLevel;
class GetRafAccountInfo;
class RafRecruitPresenceSubscribe;
class RafGenerateRecruitmentLink;
class RafClaimActivityReward;
class RafClaimNextReward;
@@ -1653,6 +1656,7 @@ public:
void HandleGetAccountCharListOpcode(WorldPackets::Character::GetAccountCharacterList& accountCharList);
void HandleGetRegionwideCharacterRestrictionAndMailData(WorldPackets::Character::GetRegionwideCharacterRestrictionAndMailData& packet);
void HandleGetRafAccountInfo(WorldPackets::RaF::GetRafAccountInfo& packet);
void HandleRafRecruitPresenceSubscribe(WorldPackets::RaF::RafRecruitPresenceSubscribe& packet);
void HandleConvertTimerunningCharacter(WorldPackets::Character::ConvertTimerunningCharacter& convertTimerunningCharacter);
// Arathi Returning Player Experience: shared in-world entry point (Adventure Guide tile)
// for CMSG_ENCOUNTER_JOURNAL_START_ARATHI_RPE. See CharacterHandler.cpp for the login-time
@@ -1797,6 +1801,8 @@ public:
//WowCommunity
void HandleGetRemainingGameTime(WorldPackets::ClientConfig::GetRemainingGameTime& packet);
void HandleLatencyReport(WorldPackets::Misc::LatencyReport& packet);
void HandleWarden3Data(WorldPackets::Misc::Warden3Data& packet);
// Club Finder
void HandleClubFinderPost(WorldPackets::ClubFinder::ClubFinderPost& clubFinderPost);