Smooth
Administrateurs
-
Adhésion
-
Dernière visite
-
Actuellement
Forum de consultation : Suggestions
Tout ce qui a été publié par Smooth
-
CharacterCharacteristicsEvent
The played character's full characteristic sheet, sent as a complete replacement. Kind eventArea Game.CharacterNamed by beta, gamemapping The character sheet: level progression, kamas, alignment, every characteristic and the current spell modifiers. IT REPLACES, IT DOES NOT PATCH. The client throws away its cached characteristic state and rebuilds it from this message. Do the same - a merge leaves you holding modifiers that have expired. IT ALSO CARRIES KAMAS, AND SO DOES InventoryContentEvent. The client treats this one as authoritative: it compares the value here against the balance its inventory service holds and pushes this one over the top when they differ. If your two sources disagree, this is the winner. Everything is inside CharacterCharacteristics. Note that the schema declares more than one field of that type and only one is ever populated - read the named one. When you may send it Requires character_selected observed Related messages Unsolicited - nothing you send causes this it arrives in the login burst and again whenever the sheet changes; no request asks for it Fields #FieldTypeMeaningYou set it 2statsCharacterCharacteristicsThe complete characteristic sheet. See CharacterCharacteristics. The schema declares more than one member of this type; only this one is consumed.never Recovered with score 95, confidence 0.94, margin 95 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 1 of 2.
-
CharacterCharacteristics
The played character's progression, wealth, alignment, characteristics and spell modifiers. Kind structArea Game.CharacterNamed by beta, gamemapping Everything on the character sheet in one record. THE FOUR EXPERIENCE VALUES ARE A PROGRESS BAR, NOT A LEVEL. Read them together: experience_level_floor what you needed for the level you have experience where you are now experience_next_level_floor what you need for the next level so progress through the current level is (experience - experience_level_floor) / (experience_next_level_floor - experience_level_floor). NONE OF THESE IS THE LEVEL ITSELF - the level is not in this record. experience_bonus_limit is a separate ceiling: the point up to which the character still earns a bonus rate. It is not the next level. characteristics is the real sheet - one row per characteristic, as CharacterCharacteristic. A live capture carried 120 rows, so index it by id rather than scanning. kamas here is authoritative over the inventory's copy; see CharacterCharacteristicsEvent. Not sent on its own — it is only ever carried by CharacterCharacteristicsEvent. inferred Used by CharacterCharacteristicsEvent Fields #FieldTypeMeaningYou set it 1alignment_informationAlignmentInformationThe character's alignment state. See AlignmentInformation.never 3critical_hit_weaponint32The weapon critical-hit bonus. The client narrows this to 16 bits when projecting the character.never 4experience_level_floorint64The experience total required to have reached the current level. (experience points) Lower bound of the current level's progress bar.never 5characteristicsrepeated CharacterCharacteristicEvery characteristic the character has, as id-and-value rows. Element type CharacterCharacteristic. A live 3.6.10.10 capture carried 120 rows - index by id, do not scan.never 6experienceint64The character's current total experience. (experience points)never 7probation_timeint64The probation period still applied to the character.never 8experience_next_level_floorint64The experience total required to reach the next level. (experience points) Upper bound of the current level's progress bar.never 9spell_modifiersrepeated SpellModifierThe per-spell modifiers currently in effect. Element type SpellModifier, whose members are not individually recovered.never 10experience_bonus_limitint64The experience ceiling up to which the character still earns a bonus rate. (experience points) Not the next level threshold - a separate ceiling.never 11kamasint64The character's current kamas balance. (kamas) Authoritative over the balance carried by InventoryContentEvent.kamas.never Recovered with score 165, confidence 0.91, margin 165 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 10 of 11.
-
CharacterCharacteristicValue
The simplest characteristic shape: a single total with no breakdown. Kind structArea Game.CommonNamed by beta A bare total. It is the smallest of the three shapes a CharacterCharacteristic row can take. The current build pads this message with a message-typed member beside total. That member is not part of the contract and stands with its obfuscated name. Not sent on its own — it is only ever the value branch of CharacterCharacteristic. proven Used by CharacterCharacteristic Fields #FieldTypeMeaningYou set it 1totalint64The characteristic's value.never Recovered with score 130, confidence 0.82, margin 130 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 1 of 1.
-
CharacterCharacteristicDetailedUsable
A characteristic's six-part breakdown plus how much of it has been used. Kind structArea Game.CommonNamed by beta, gamemapping The usable shape of a characteristic row: the same six parts as CharacterCharacteristicDetailed, plus a used component. IT IS FOR CHARACTERISTICS THAT GET SPENT. In live data only action points and movement points arrive in this shape - exactly the two a turn consumes. used is how much has been spent. THE CLIENT KEEPS ALL SEVEN. It builds its usable stat from exactly these seven members. Read them by name: all seven are int32 and their field numbers move between builds. Not sent on its own — it is only ever the usable branch of CharacterCharacteristic. proven Used by CharacterCharacteristic Fields #FieldTypeMeaningYou set it 1usedint32How much of the characteristic has already been spent. Only this variant carries it; in live data it arrives for action and movement points.never 2additionalint32The additional part on top of the base.never 3alignment_gift_bonusint32The bonus granted by alignment gifts.never 4context_modificationint32The modification applied by the current context.never 5temporaryint32The temporary part of the characteristic.never 6objects_and_mount_bonusint32The bonus coming from equipped items and the mount.never 7baseint32The base part of the characteristic.never Recovered with score 255, confidence 0.92, margin 255 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 7 of 7.
-
CharacterCharacteristicDetailed
A characteristic split into the parts it is made of: base, additional, equipment and mount, alignment gift, context and temporary. Kind structArea Game.CommonNamed by beta, gamemapping The detailed shape of a characteristic row: the same value, kept as six separate parts instead of one total. This is what the character sheet needs to show where a characteristic comes from. THE CLIENT KEEPS ALL SIX. It builds its detailed stat from exactly these six members and no others, so a bot that wants the client's view should keep them separately too. READ THE PARTS BY NAME. All six are int32 and their field numbers move between builds; the recovered names are the only stable key. Anything else this message declares is padding the client never reads. If the row also has a used component it arrives as CharacterCharacteristicDetailedUsable instead, not as this message. Not sent on its own — it is only ever the detailed branch of CharacterCharacteristic. proven Used by CharacterCharacteristic Fields #FieldTypeMeaningYou set it 1temporaryint32The temporary part of the characteristic.never 3additionalint32The additional part on top of the base.never 4context_modificationint32The modification applied by the current context.never 5baseint32The base part of the characteristic.never 7alignment_gift_bonusint32The bonus granted by alignment gifts.never 8objects_and_mount_bonusint32The bonus coming from equipped items and the mount.never Recovered with score 245, confidence 0.92, margin 245 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 6 of 8.
-
CharacterCharacteristic
One characteristic and its value, in one of three shapes of increasing detail. Kind structArea Game.CommonNamed by beta One row of the sheet. characteristic_id says which characteristic; a oneof says how much detail came with it. BRANCH ON THE ONEOF - THE THREE SHAPES ARE NOT INTERCHANGEABLE: value a single total, no breakdown detailed base, bonuses and modifiers separately usable the detailed breakdown plus a used component WHICH BRANCH ARRIVES IS THE SERVER'S CHOICE, NOT A PROPERTY OF THE CHARACTERISTIC. In live data only actively used characteristics come through as usable. A script that reads value unconditionally gets a zero for every detailed row, which is indistinguishable from a genuine zero. If all you want is the number, take the total from whichever branch is set rather than assuming value. DO NOT TELL detailed FROM usable BY SIZE. Their declared member counts are padded differently in every build, and in some builds detailed is the larger of the two. Read the recovered names, or check which one carries a used component. characteristic_id is left unnamed on any build that declares a second singular int32 beside it - on those builds it stands obfuscated rather than guessed at. Not sent on its own — it is only ever a row of CharacterCharacteristics.characteristics. proven Used by CharacterCharacteristics Fields #FieldTypeMeaningYou set it 4characteristic_idint32Which characteristic this row describes. (characteristic id)never 1usableCharacterCharacteristicDetailedUsableThe detailed breakdown plus a used component. See CharacterCharacteristicDetailedUsable. In live data only action and movement points arrive in this shape.never 2valueCharacterCharacteristicValueThe characteristic as a single total, with no breakdown. See CharacterCharacteristicValue. Only meaningful when this is the branch that is set.never 3detailedCharacterCharacteristicDetailedThe characteristic broken down into base, bonuses and modifiers. See CharacterCharacteristicDetailed. Only meaningful when this is the branch that is set.never Recovered with score 215, confidence 0.89, margin 215 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 4 of 4.
-
CharacterBasicInformation
A character's name, level and appearance, nested inside its list entry. Kind structArea Game.Character.ManagementNamed by beta The readable half of a Character. level HAS EXPLICIT PRESENCE, so absent and level 0 are different things. The client reads it through a presence-aware accessor; a character with no level value is not a level-zero character. The appearance is one level further down, in CharacterLook. Other members of this record are not individually proven and stand with their obfuscated names. Not sent on its own — it is only ever a branch of Character. inferred Used by Character Fields #FieldTypeMeaningYou set it 4levelint32The character's level. Explicit presence: absent is not the same as zero.never 5namestringThe character's display name.never 1character_lookCharacterLookThe character's appearance, breed and base information. See CharacterLook.never Recovered with score 115, confidence 0.96, margin 115 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 3 of 5.
-
CharacterBaseInformation
A branch of the character look carrying the character's gender and one of three optional complements. Kind structArea Game.Character.ManagementNamed by beta The type is Ankama's and is proven by the accessor several client consumers use to reach it. gender IS NAMED. It is the character's Gender; together with the class id from CharacterLook it is what selects the character's portrait. THE REST IS NOT NAMED. The remaining members form a oneof of three complements - the reference build calls them epic information, party member information and party invitation information - but no independent evidence separates them yet, so they keep their obfuscated names. Guessing from field order is how this protocol punishes people. Not sent on its own — it is only ever a branch of CharacterLook. inferred Used by CharacterLook Fields #FieldTypeMeaningYou set it 4genderGenderThe character's gender. Portraits are keyed by class id followed by this value: Head_<class id><gender>.never Recovered with score 160, confidence 0.97, margin 160 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 1 of 4.
-
CharacterAppearanceCollectionEvent
The colour palettes your character owns, and how many palette slots exist. Kind eventArea Game.CosmeticNamed by gamemapping YOUR COLLECTION OF COLOUR PALETTES. Each palette is a set of six colours you can apply to your character; this message lists the ones you own and states how many palette slots your account has. WHEN IT ARRIVES Unprompted, once the game context is up, and again whenever the collection changes. Treat it as a REPLACEMENT: the client discards its previous list and rebuilds it from what arrives. READING A PALETTE A palette is six packed RGB integers - 8025436 is 0x7A75DC. A palette entry may legitimately be short or empty, in which case the missing colours fall back to your breed's defaults; the client does exactly that, looking the breed up in its game data before filling the gaps. So do not assume six values are always present. WHAT IT NO LONGER CARRIES Up to 3.5.3.1 this message also carried the character's FACES collection alongside the colours. From 3.5.17.26 on it carries colours only. If you are reading an older capture, expect the extra member. When you may send it Requires context_ready observed Related messages Unsolicited - nothing you send causes this no client code builds it; the inventory service only ever receives it Fields #FieldTypeMeaningYou set it 1colorsCharacterColorsThe palettes you own, with the slot counts that bound them.never Recovered with score 265, confidence 0.88, margin 265 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 1 of 1.
-
Character
One character on the account, as offered in the selection list. Kind structArea Game.Character.ManagementNamed by beta, gamemapping One selectable character. It is what you read to decide which CharacterSelectionRequest to send, and id is the value that request wants. THE INTERESTING PARTS ARE NESTED, NOT FLAT. The name, level and appearance are one level down in CharacterBasicInformation, and the appearance one further down again in CharacterLook. Do not expect a flat record. character_remodeling_information is an ALTERNATIVE representation used while a character is being remodelled - it is the other branch of the same oneof as the basic information. Branch on which one is set: a remodelling character has no basic information to read. Members beyond the ones named here exist and stand with their obfuscated names. They are not decoys - they are simply not proven yet, so do not read meaning into their position. Not sent on its own — it is only ever an element of CharacterListEvent. inferred Used by CharacterListEvent Success Fields #FieldTypeMeaningYou set it 3idint64The character id, and the value CharacterSelectionRequest addresses it by. (character id)never 1character_remodeling_informationCharacterRemodelingInformationThe alternative representation used while the character is being remodelled. The other branch of the same oneof as the basic information. See CharacterRemodelingInformation.never 2character_basic_informationCharacterBasicInformationThe character's name, level and appearance. See CharacterBasicInformation. One branch of a oneof - check it is the one that is set.never Recovered with score 233, confidence 0.99, margin 233 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 3 of 3.
-
ChannelUpdateEvent
One chat channel was enabled or disabled for the player. Kind eventArea Game.ChatNamed by beta The single-channel delta: set that channel's bit when enable is true, clear it when false. Nothing else in the payload is used by the client. It arrives both on its own and as part of the volley that follows a community change - see SetCommunityChannelRequest. Keep one channel mask and apply this to it. The bulk counterpart is ChatChannelsEnabledEvent, and the two can disagree if you apply them out of order - the later message wins. When you may send it Requires character_loaded observed Related messages Unsolicited - nothing you send causes this the server toggles channels as availability changes Fields #FieldTypeMeaningYou set it 1enableboolTrue when the channel becomes available, false when it is withdrawn.never 2channelChannelThe channel whose state changed. A Channel value.never Recovered with score 155, confidence 0.93, margin 155 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 2 of 2.
-
Channel
Which chat channel a line belongs to, from global and party through to the cross-server community channels. Kind enumArea Game.ChatNamed by beta, stringtable The channel identifier used by every chat message and by the subscription messages. ZERO IS GLOBAL, NOT "UNSPECIFIED". This enum has no unspecified member, and the chat messages carry it without explicit presence - so an unset channel field reads as GLOBAL, the loudest channel in the game. Always set it deliberately. TWO VALUES THE SERVER MAY STILL SEND ARE NO LONGER MAPPED BY THE CLIENT: NOOB and ADS. The client's normalisation switch falls through on them and yields no channel at all. They are kept here because the server can still put them on the wire; handle them as "unknown channel", not as an error. THREE MORE WIRE VALUES - 17, 18 and 19 - resolve to internal ids the client's readable enum does not name. Two of them are named here from in-game confirmation; the third is our own invention. See TUMULT. The value names are proven rather than assumed: each wire value was followed through the client's normalisation switch to an internal channel bit, and that bit through the chat metadata table to an unobfuscated name. That chain produces some non-obvious results - wire 9 is ARENA, 10 is PRIVATE, 12 is INFO, 13 is FIGHT_LOG - which is exactly why they are not read off the declaration order. Not sent on its own — an enum is never sent on its own. inferred Used by ChannelUpdateEvent ChatChannelMessageEvent ChatChannelMessageRequest ChatChannelsEnabledEvent SubscribeMultipleChannelRequest Values ValueNumberMeaning GLOBAL0Open channel visible to everyone nearby. Also the value an unset channel field reads as. TEAM1Team channel. GUILD2Guild channel. ALLIANCE3Alliance channel. PARTY4Party channel. SALES5Trade channel used to advertise goods for sale. SEEK6Recruitment channel used to look for players or groups. NOOB7Newcomer channel. THE CURRENT CLIENT NO LONGER MAPS THIS VALUE - its normalisation switch falls through with a warning and yields no channel. The server may still send it. ADMIN8Moderation channel reserved for staff. ARENA9Arena channel. Wire value 9, which the declaration order does not suggest. PRIVATE10Direct messages between two players. Wire value 10. COMMUNITY11Community channel - the language-segregated public channel. Added after the reference build; the name comes from the client's own readable chat-channel metadata enum. Which community you are on is set by SetCommunityChannelRequest. INFO12Informational notices from the server. Wire value 12. FIGHT_LOG13Combat log channel. Wire value 13. ADS14Advertisement channel. THE CURRENT CLIENT NO LONGER MAPS THIS VALUE, the same as NOOB. The server may still send it. EVENT15Event announcements. EXCHANGE16Exchange channel. TUMULT17Wire value 17, whose meaning is not attested by any oracle. WE CHOSE THIS NAME. No oracle carries an identifier for value 17. Do not rely on the spelling; the NUMBER is the contract. TERRITORY18Territory channel. Confirmed in game on 3.6.10.10. Absent before 3.5.3.1 - the value did not exist in the older builds. GUILD_RAID19Guild raid channel. Confirmed in game on 3.6.10.10. The newest member of the enum, absent from every earlier build. Recovered with score 100, confidence 0.93, margin 100 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 20 of 20.
-
CanCreateNewCharacter
Whether the account may create another character: allowed, out of slots, or refused. Kind enumArea Game.AccountNamed by invented This name is not Ankama's. It was chosen for this documentation from proven client behaviour, and is a label rather than protocol documentation. THE THREE MEANINGS ARE PROVEN; THE THREE NAMES ARE OURS. The client copies this value unchanged into a player-service property, and the character-selection screen is its only consumer. That screen branches exactly three ways, which is what fixes the meanings: 0 the create button is enabled and its click handler attached 1 the button is disabled with a "buy more slots" tooltip 2 the button is disabled with no such offer VALUE 1 IS A REFUSAL, NOT A YES. This field was a BOOL on earlier builds, so code carried across reads 1 as true and offers character creation that the server will decline. See AccountCapabilitiesEvent. Not sent on its own — an enum is never sent on its own. inferred Used by AccountCapabilitiesEvent Values ValueNumberMeaning ALLOWED0Character creation is permitted. WE CHOSE THIS NAME. Proven: the only value for which the client enables the create button. TOO_MANY_CHARACTERS1Refused because the account's slots are full, with more available to buy. WE CHOSE THIS NAME. Proven: the branch that disables the button and offers more slots. REFUSED2Refused for a reason the client does not spell out. WE CHOSE THIS NAME. Proven: the client's else branch - disabled, with no offer. Recovered with score 135, confidence 0.95, margin 135 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 3 of 3.
-
BonusesEvent
Every bonus currently in force, as a full replacement list. Kind eventArea Game.BonusNamed by invented This name is not Ankama's. It was chosen for this documentation from proven client behaviour, and is a label rather than protocol documentation. THE COMPLETE SET, EVERY TIME. Overwrite your bonus state with this list rather than merging into it - the client throws its cache away and rebuilds it from scratch on every arrival. WHAT A BONUS IS Each entry is an amount plus the kind of bonus it applies to: extra job experience, extra mount experience, extra quest kamas, and so on. Several entries may share one kind, and they stack - a captured trace carried five separate entries for a single kind. So the useful shape is kind -> list of amounts, which is exactly what the client builds. WHEN IT ARRIVES Unprompted, once the game context is up. There is no request for it. It arrives again whenever the server changes what is active, and each arrival replaces the previous set. READING THE KIND The kind is an enumeration the client keys its cache by. Its VALUES are not named here: see the signature notes for why the obvious client-side mapping is not proven. Treat an unfamiliar kind as data you do not display, not as an error. When you may send it Requires context_ready observed Related messages Unsolicited - nothing you send causes this no client code builds it; the bonus service only ever receives it Fields #FieldTypeMeaningYou set it 1bonusesrepeated BonusEvery bonus currently active. A replacement, not a delta.never Recovered with score 265, confidence 0.89, margin 265 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 1 of 2.
-
Bonus
One active bonus: an amount and the kind of bonus it applies to. Kind structArea Game.BonusNamed by stringtable A single entry of BonusesEvent. It is never sent on its own. An entry pairs an AMOUNT with a KIND. Several entries may carry the same kind and they stack, so group them by kind rather than assuming one entry per kind - a captured trace carried five entries sharing a single kind. The kind's VALUES are deliberately left unnamed; see the signature notes. Not sent on its own — it is only ever a row of BonusesEvent.bonuses. proven Used by BonusesEvent Fields #FieldTypeMeaningYou set it 2amountint32How much this bonus grants. Several entries may share one kind and stack.never 3typetype not documented yetWhich kind of bonus the amount applies to. Values are left unnamed on purpose.never Recovered with score 180, confidence 0.83, margin 180 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 2 of 3.
-
BindingPointCategoryEnum
Where a sub-entity hangs off its parent look: pet, rider, carried entity, or decoration. Kind enumArea Game.CommonNamed by beta The category member of SubEntityInformation. It is what tells a mount's rider apart from a pet apart from a carried entity, which is the only part of the look tree most scripts care about. NOTE THE GAP: value 5 is not declared. The numbering runs 0-4, then 6 and 7. Treat an unknown number as unhandled rather than mapping it onto a neighbour. Not sent on its own — an enum is never sent on its own. inferred Used by SubEntityInformation Values ValueNumberMeaning HOOK_POINT_CATEGORY_UNUSED0Placeholder for an unset binding point. HOOK_POINT_CATEGORY_PET1A pet following its owner. HOOK_POINT_CATEGORY_MOUNT_DRIVER2The rider sitting on a mount. HOOK_POINT_CATEGORY_LIFTED_ENTITY3An entity being carried by another. HOOK_POINT_CATEGORY_BASE_BACKGROUND4Decoration drawn behind the entity. HOOK_POINT_CATEGORY_BASE_FOREGROUND6Decoration drawn in front of the entity. HOOK_POINT_CATEGORY_UNDERWATER_BUBBLES7The bubble effect used underwater. Recovered with score 206, confidence 0.81, margin 206 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 7 of 13.
-
BasicLatencyStatsEvent
Empty server poll asking the client to report its measured latency. Kind eventArea Game.BasicNamed by beta, gamemapping Carries no payload - the message IS the question. Answer it with BasicLatencyStatsRequest carrying a latency in milliseconds. ANSWER IT. A capture shows the real client replying within milliseconds. A client that receives these polls and never answers is trivially distinguishable from a real one. It arrives in the same frame as SequenceNumberEvent, and the two are answered independently a few milliseconds apart. Report a value consistent with your actual round trips - a real client derives it from its PingRequest / PongEvent samples, and the server can compare what you claim against how long you took to answer. When you may send it Requires authenticated observed Related messages You must then send BasicLatencyStatsRequest observed — the poll is unanswered until the client reports a latency Unsolicited - nothing you send causes this the server polls on its own schedule; nothing you send asks for it Sequence Step server_poll.2 observed — the server emits both polls in the same frame; of 2 observations Recovered with score 110, confidence 0.84, margin 110 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 0 of 0.
-
BakShopTokenEvent
A shop token for the in-client shop back end. In practice it never arrives. Kind eventArea Game.BakNamed by stringtable IN PRACTICE THIS NEVER ARRIVES, AND THAT IS THE MOST USEFUL THING TO KNOW ABOUT IT. The shop-token request that would provoke it has NO CLIENT WRITER in any dumped build: the message type exists, but nothing in the client ever constructs or sends it. Since this event is a reply and the client never asks, the server has no occasion to send it. A live capture bears that out - the sibling BakApiKeyEvent appears, this one never does. DO NOT SEND THE SHOP-TOKEN REQUEST TO PROVOKE IT. No dumped client does, so doing it is a behaviour no real client produces. The record is here so that its silence is documented rather than mistaken for a gap in the catalogue. When you may send it Requires authenticated observed Related messages Unsolicited - nothing you send causes this nothing in any dumped client asks for it, and a live capture never shows it Fields #FieldTypeMeaningYou set it 1shop_tokenstringThe shop token. The only member the client reads. Never populated in a real session.never Recovered with score 245, confidence 0.90, margin 245 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 1 of 1.
-
BakApiKeyEvent
A fresh API key for the in-client shop back end, answering the token request. Kind eventArea Game.BakNamed by stringtable The reply to BakApiTokenRequest. NEVER PUSHED UNSOLICITED: no request, no key. Its arrival drives the client's whole key lifecycle. On receiving it the service stores the key, CLEARS the in-flight latch that the send routine set - releasing the next request - and arms a one-hour timer for the next refresh. If you reproduce the request's timer, reproduce this side too: without clearing the latch on arrival, a faithful implementation sends once and never again. The key itself is only useful for the shop back end. Nothing in the game protocol is gated on it. When you may send it Requires authenticated observed Related messages Arrives after BakApiTokenRequest Fields #FieldTypeMeaningYou set it 2api_keystringThe shop back end's API key. The only member the client reads.never Recovered with score 245, confidence 0.90, margin 245 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 1 of 2.
-
AuthenticationTicketRefusedEvent
The submitted ticket was rejected; the game session does not open. Kind eventArea Game.ConnectionNamed by beta, gamemapping Answers IdentificationRequest on failure. Carries no reason - refusal is the whole message, so there is nothing to branch on beyond the fact of it. The usual causes are a ticket that was already consumed, has expired, or was issued for a different server than the one you connected to. Recovering means going back to the login-server exchange for a fresh ticket, not retrying this message. When you may send it Requires transport_established observed Related messages Arrives after IdentificationRequest Recovered with score 100, confidence 0.99, margin 100 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 0 of 0.
-
AuthenticationTicketAcceptedEvent
The submitted ticket was accepted; the game session is open. Kind eventArea Game.ConnectionNamed by beta, gamemapping Answers IdentificationRequest on success. Carries no payload - arrival is the whole message. In a capture it opens a burst delivered in the same millisecond: TimeEvent, ServerSettingsEvent, OptionalFeaturesEvent, AccountCapabilitiesEvent, AccountRightsEvent, TrustStatusEvent and ServerSessionReadyEvent. Do not treat any of those as separately requested; they are pushed. When you may send it Requires transport_established observed Related messages You must then send CharacterListRequest proven — the handler of this event constructs the list request unpopulated and hands it to the network service; without it you never learn which characters exist Arrives after IdentificationRequest Recovered with score 110, confidence 0.95, margin 110 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 0 of 0.
-
AnomalySubareaInformationEvent
The whole anomaly board: one row per subarea with its anomaly state, reward bonus and closing time. Kind eventArea Game.AnomalyNamed by beta, gamemapping, stringtable The answer to AnomalySubareaInformationRequest. ROWS ARE SENT FOR SUBAREAS WITH NO ANOMALY TOO. The row's PRESENCE means nothing; AnomalySubareaInformation.has_anomaly is what says whether one is there. Filtering by presence gives you every subarea in the game. Each row is an AnomalySubareaInformation. Replace your board wholesale, then apply AnomalyStateEvent deltas on top of it. When you may send it Requires character_loaded observed Related messages Arrives after AnomalySubareaInformationRequest Fields #FieldTypeMeaningYou set it 1subareasrepeated AnomalySubareaInformationOne row per subarea. Element type AnomalySubareaInformation. Rows exist for subareas without an anomaly too.never Recovered with score 150, confidence 0.88, margin 150 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 1 of 1.
-
AnomalySubareaInformation
One subarea's anomaly state: whether one is there, what bonus it grants and when it closes. Kind structArea Game.AnomalyNamed by beta, stringtable One row of the board, declared nested inside its event. READ has_anomaly, NOT THE ROW'S EXISTENCE. Rows are sent for subareas with no anomaly, so a script that treats every row as an anomaly walks to empty subareas. reward_rate is the bonus granted while an anomaly is there - the client shows it as an experience and loot bonus. It is what ranks one anomaly against another. subarea_id and reward_rate ARE BOTH int32 AND NOTHING ON THE WIRE SEPARATES THEM - they are told apart only by which slot of the client's row object each lands in. Read them by name. Not sent on its own — it is only ever a row of AnomalySubareaInformationEvent.subareas. inferred Used by AnomalySubareaInformationEvent Fields #FieldTypeMeaningYou set it 1has_anomalyboolWhether an anomaly is currently in this subarea. THIS, not the row's presence, is what says an anomaly is there.never 2subarea_idint32Which subarea this row describes. (subarea id) Same width as reward_rate; nothing but the recovered name separates them.never 3anomaly_closing_timeint64When the anomaly closes. The client counts down to it.never 4reward_rateint32The bonus granted while an anomaly is in this subarea. Shown by the client as an experience and loot bonus.never Recovered with score 180, confidence 0.90, margin 180 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 4 of 4.
-
AnomalyStateEvent
One subarea's anomaly is now open or closed, with the time it closes. Kind eventArea Game.AnomalyNamed by beta, gamemapping The delta for one subarea, and THE ONLY MESSAGE THAT REPORTS A CLOSURE - AnomalyOpenedEvent only ever announces openings. open false is how an anomaly ends. Apply it to the board you got from AnomalySubareaInformationRequest, keyed by subarea_id. closing_time tells you when the anomaly ends, so you can decide whether it is worth travelling to before it does. The message declares a second int64 beside closing_time; the named one is the one the client actually loads. When you may send it Requires character_loaded observed Related messages Unsolicited - nothing you send causes this the server publishes anomaly state changes as they happen Fields #FieldTypeMeaningYou set it 1openboolWhether an anomaly is now in this subarea. FALSE IS A CLOSURE, and this is the only message that reports one.never 2closing_timeint64When the anomaly closes. The record declares a second int64 beside this one that the client does not read.never 3subarea_idint32Which subarea changed. (subarea id)never Recovered with score 190, confidence 0.89, margin 190 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 3 of 3.
-
AnomalyOpenedEvent
An anomaly has just opened in a subarea. Kind eventArea Game.AnomalyNamed by beta, gamemapping, stringtable An anomaly opened. The client turns it into a chat announcement carrying a clickable travel link to the place. IT ONLY REPORTS OPENINGS. There is no matching "closed" event on this message - closures come through AnomalyStateEvent with its open flag false. A script that tracks anomalies from this message alone accumulates anomalies that ended hours ago. It carries the subarea and nothing else. For the reward bonus and closing time you need the board - see AnomalySubareaInformationRequest. When you may send it Requires character_loaded observed Related messages Unsolicited - nothing you send causes this the server announces openings as they happen Fields #FieldTypeMeaningYou set it 1subarea_idint32Which subarea the anomaly opened in. (subarea id)never Recovered with score 170, confidence 0.93, margin 170 over the runner-up. A margin close to the score means nothing else came near; a thin margin means a decoy nearly won. Members recovered: 1 of 1.