fix(wire): write SetStatusImmunity flags in the client's order

WIRE FIX. The 1.10.64 client writes and reads the immunity flags in
alphabetical order after the u32 state (GameMessage::SetStatusImmunity::
Serialize @ 0x00d8f140; the field offsets are named by the Flash export
at 0x00d8f410): BasicAttack, DOT, ImaginationGain, ImaginationLoss,
Interrupt, Knockback, PullToPoint, QuickbuildInterrupt, Speed. DLU wrote
them in declaration order, so e.g. a knockback immunity reached the
client as an imagination-gain immunity.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Aaron Kimbrell
2026-09-27 08:21:22 -05:00
parent e3a75a689e
commit 7fb1e404f0
4 changed files with 47 additions and 14 deletions

View File

@@ -173,8 +173,9 @@ namespace GameMessages {
};
// Server -> client.
// NOTE: DLU writes the flags in this order; the client reads them in alphabetical order
// (GameMessage::SetStatusImmunity::Serialize @ 00d8f140 in 1.10.64). Kept as DLU sent it in this conversion.
// WIRE FIX: the flags go on the wire in alphabetical order, as the client's Serialize writes them
// (GameMessage::SetStatusImmunity::Serialize @ 00d8f140 in 1.10.64; field offsets named by its Flash export
// @ 00d8f410). DLU used to write them in the declaration order below.
struct SetStatusImmunity : public NetGameMsg {
SetStatusImmunity() : NetGameMsg(MessageType::Game::SET_STATUS_IMMUNITY) {}
void Serialize(RakNet::BitStream& bitStream) const override;