mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-02 02:43:44 +00:00
feat(messages): RemoveBuffsAppliedByObject struct
Game message 1726 (optional object ID, default 0), as the 1.10.64 client reads it. Live sent it to every player when an object left the world; nothing sends it yet. Tested against a live capture packet. Needs the FromLiveCapture test helper. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -354,6 +354,15 @@ namespace GameMessages {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RemoveBuffsAppliedByObject::Serialize(RakNet::BitStream& bitStream) const {
|
||||||
|
BitStreamUtils::WriteOptional(bitStream, objectID, LWOOBJID_EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RemoveBuffsAppliedByObject::Deserialize(RakNet::BitStream& bitStream) {
|
||||||
|
VALIDATE_READ(BitStreamUtils::ReadOptional(bitStream, objectID, LWOOBJID_EMPTY));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void AddRunSpeedModifier::Serialize(RakNet::BitStream& bitStream) const {
|
void AddRunSpeedModifier::Serialize(RakNet::BitStream& bitStream) const {
|
||||||
BitStreamUtils::WriteOptional(bitStream, i64Caster, LWOOBJID_EMPTY);
|
BitStreamUtils::WriteOptional(bitStream, i64Caster, LWOOBJID_EMPTY);
|
||||||
BitStreamUtils::WriteOptional(bitStream, uiModifier, 500u);
|
BitStreamUtils::WriteOptional(bitStream, uiModifier, 500u);
|
||||||
|
|||||||
@@ -231,6 +231,17 @@ namespace GameMessages {
|
|||||||
uint32_t uiBuffID{};
|
uint32_t uiBuffID{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Server -> client. The client's BuffComponent removes every buff (and immunity) whose source is objectID
|
||||||
|
// (msgRemoveBuffsAppliedByObject @ 00d38f20 in 1.10.64). Live sent it to each player when an object left the
|
||||||
|
// world (see docs/CaptureUnknowns.md).
|
||||||
|
struct RemoveBuffsAppliedByObject : public NetGameMsg {
|
||||||
|
RemoveBuffsAppliedByObject() : NetGameMsg(MessageType::Game::REMOVE_BUFFS_APPLIED_BY_OBJECT) {}
|
||||||
|
void Serialize(RakNet::BitStream& bitStream) const override;
|
||||||
|
bool Deserialize(RakNet::BitStream& bitStream) override;
|
||||||
|
|
||||||
|
LWOOBJID objectID{ LWOOBJID_EMPTY }; // optional
|
||||||
|
};
|
||||||
|
|
||||||
// Server -> client.
|
// Server -> client.
|
||||||
struct AddRunSpeedModifier : public NetGameMsg {
|
struct AddRunSpeedModifier : public NetGameMsg {
|
||||||
AddRunSpeedModifier() : NetGameMsg(MessageType::Game::ADD_RUN_SPEED_MODIFIER) {}
|
AddRunSpeedModifier() : NetGameMsg(MessageType::Game::ADD_RUN_SPEED_MODIFIER) {}
|
||||||
|
|||||||
@@ -378,6 +378,19 @@ TEST_F(CombatMessagesTests, GoldenBytes) {
|
|||||||
EXPECT_PACKET_EQ(FromHex("20 60 00 00 00", 35), Payload(remove));
|
EXPECT_PACKET_EQ(FromHex("20 60 00 00 00", 35), Payload(remove));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A packet from a 2011/2012 live capture: RemoveBuffsAppliedByObject (1726) sent to a player when another player
|
||||||
|
// left the world. The client reads a flag and an optional object ID (0x00d808e0 in 1.10.64).
|
||||||
|
TEST_F(CombatMessagesTests, RemoveBuffsAppliedByObjectMatchesLiveCapture) {
|
||||||
|
const auto msg = FromLiveCapture<GameMessages::RemoveBuffsAppliedByObject>("5305000c00000000b592d85a01000010be06db7bbdb58080000800");
|
||||||
|
EXPECT_EQ(msg.target, 0x100000015ad892b5LL);
|
||||||
|
EXPECT_EQ(msg.objectID, 0x100000016b7bf7b6LL);
|
||||||
|
|
||||||
|
GameMessages::RemoveBuffsAppliedByObject empty;
|
||||||
|
EXPECT_PACKET_EQ(FromHex("00", 1), Payload(empty));
|
||||||
|
EXPECT_EQ(RoundTrip(msg).objectID, msg.objectID);
|
||||||
|
ExpectTruncatedFails(msg);
|
||||||
|
}
|
||||||
|
|
||||||
// WIRE FIX: the client writes and reads the immunity flags in alphabetical order after the u32 state
|
// WIRE FIX: the client writes and reads the immunity flags in alphabetical order after the u32 state
|
||||||
// (GameMessage::SetStatusImmunity::Serialize @ 0x00d8f140). Setting one flag at a time must set exactly that bit.
|
// (GameMessage::SetStatusImmunity::Serialize @ 0x00d8f140). Setting one flag at a time must set exactly that bit.
|
||||||
TEST_F(CombatMessagesTests, SetStatusImmunityUsesClientOrder) {
|
TEST_F(CombatMessagesTests, SetStatusImmunityUsesClientOrder) {
|
||||||
|
|||||||
Reference in New Issue
Block a user