MsgPeerage

This message is used entirely for the Nobility (aka peerage) system where players can donate silver or CPs to achieve a peerage rank (Knight, Earl, King etc.), increase battle power and appear on a leaderboard.

Patch 5517 (Mac: 1029)

Verified: This data was determined through reverse engineering the Mac Client Binary 1029 (same release date as PC 5517) and also reverse engineering the leaked server binaries (namely Peerage.dll in ZFServer)

Message Definition

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of message-
2UInt16MsgTypeType of message2064
4UInt16PeerageActionTypeAction subtype-
6UInt16-Padding 🔵0
8VariableDataAction-specific payload, see PeerageActionType-

🔵 Padding here is intentional to align the data payload start to be offset 8 (UInt64)

PeerageActionType
ValNameDescriptionSenderData
1SEND_DONATIONHero donates silver or CPsClientAmount (UInt64), CurrencyType🟣 (UInt16)
1SEND_DONATIONServer confirms hero's donationServerPadding (UInt64), Padding (UInt64), Padding (UInt64), ContributeDonateInfoString (NetStringPacker)
2LEADERBOARDRequest a leaderboard pageClientPageNumber (UInt32)
2LEADERBOARDReturn a leaderboard pageServerSee Leaderboard Response
3REFRESH_RANKRefresh hero's peerage rank & donationServerHero ID (UInt32), Padding (UInt64), Padding (UInt64), Padding (UInt32), ContributeTipInfoString (NetStringPacker)
4QUERY_MINIMUMQuery minimum donation to be a rankClientSelectedPeerageRank (UInt32)
4QUERY_MINIMUMReturn minimum donation dataServerRemainingDonationAmount (UInt64), Padding (UInt32), ExpectedLeaderboardPosition (UInt32), CurrentLeaderboardPosition (UInt32)

🟣 CurrencyType values: 0 = Silver, 1 = EMoney (CPs), 2 = Bound EMoney (CPs).

Leaderboard Response

PosTypeNameDescriptionExample
8UInt16CurrentVisibleLeaderboardPageThe visible page in the client leaderboard dialog2
10UInt16TotalLeaderboardPagesTotal pages for leaderboard dialog5
12UInt32EntryCountNumber of entries in this message (the page)10
16UInt32-Padding0
20UInt32-Padding0
24UInt32-Padding0
28UInt32-Padding0
32Entry[EntryCount]LeaderboardEntryStruct[]Leaderboard entriesSee below

Leaderboard Entry Structure

Each entry is always 48 bytes.

PosTypeNameDescription
0UInt32Hero IDThe player's unique identifier
4UInt8Hero OnlineBoolean set to 1 if player is online (value is unused by the client)
5UInt8-Padding
6UInt16-Padding
8UInt32Look FaceThe player's mesh, to derive gender of the peerage rank
12StringHeroNamePlayer's character name (16 bytes)
28UInt32-Padding
32Int64PlayerTotalDonationThe player's cumulative total donation amount
40UInt32PeerageRankThe player's peerage rank number, see Nobility
44Int32PositionThe player's position on the donation leaderboard (Start at 0, client adds 1)

ContributeDonateInfoString

ContributeDonateInfoString is a space-separated string parsed by the client as "%u %u %lld %lld %u"

IndexFormatNameDescription
0UInt32Hero IDThe hero's UID
1UInt32UnknownParsed but appears unused by the client
2Int64DonationAmountThe confirmed amount donated by the hero
3Int64TotalDonationThe hero's cumulative total donation amount
4UInt32LeaderboardPositionThe hero's donation leaderboard rank (Start at 0, client adds 1)

ContributeTipInfoString

ContributeTipInfoString is a space-separated string parsed by the client as "%u %lld %u %d".

IndexFormatNameDescription
0UInt32Hero IDThe hero's UID
1Int64TotalDonationThe hero's cumulative total donation amount
2UInt32PeerageRankThe hero's peerage rank number, see Nobility
3Int32LeaderboardPositionThe hero's position on the donation leaderboard (Start at 0, client adds 1)