Aller au contenu
Afficher dans l'application

Une meilleure façon de naviguer. En savoir plus.

Asterobot

Une application plein écran sur votre écran d'accueil avec notifications push, badges et plus encore.

Pour installer cette application sur iOS et iPadOS
  1. Appuyez sur Icône de partage dans Safari
  2. Faites défiler le menu et appuyez sur Ajouter à l'écran d'accueil.
  3. Appuyez sur Ajouter dans le coin supérieur droit.
Pour installer cette application sur Android
  1. Appuyez sur le menu à trois points (⋮) dans le coin supérieur droit du navigateur.
  2. Appuyez sur Ajouter à l'écran d'accueil ou Installer l'application.
  3. Confirmez en appuyant sur Installer.

Protocole Dofus

Le protocole Dofus actuellement pris en charge par Asterobot
A branch of the character look carrying the character's gender and one of three optional complements.
Kind struct · Area Game.Character.Management
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 CharacterInformation it is what selects the character's portrait.
THE COMPLEMENT IS A ONEOF - AT MOST ONE BRANCH IS SET, and which one depends on the message carrying the character:
- CharacterBaseInformation.epic_information (CharacterEpicInformation): epic-mode death state; - CharacterBaseInformation.party_member_information (PartyMemberInformation): the character as a member of your party; - CharacterBaseInformation.party_invitation_member_information (PartyInvitationMemberInformation): the character as a member of a party inviting you.
Branch on the one that is set; in the character list none is (observed).
Not sent on its own — it is only ever a branch of CharacterInformation. inferred
Used by
CharacterInformation Fields
#FieldTypeMeaningYou set it 4genderGenderThe character's gender.
Portraits are keyed by class id followed by this value: Head_<class id><gender>.never 1epic_informationCharacterEpicInformationEpic-mode death state, on epic servers.
A CharacterEpicInformation: the oneof branch whose nested type the type-name table spells CharacterEpicInformation.never 2party_invitation_member_informationPartyInvitationMemberInformationThe character as a member of a party inviting you.
A PartyInvitationMemberInformation: the oneof branch whose nested type the type-name table spells PartyInvitationMemberInformation.never 3party_member_informationPartyMemberInformationThe character as a member of your party.
A PartyMemberInformation: the oneof branch whose nested type the type-name table spells PartyMemberInformation.never
  • summary: A branch of the character look carrying the character's gender and one of three optional complements.
  • area: Game.Character.Management
  • 68 vues
A character's name, level and appearance, nested inside its list entry.
Kind struct · Area Game.Character.Management
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 CharacterInformation.
Other members of this record are not individually proven and stand with their obfuscated names.
THE COMPLEMENT IS A ONEOF - EXACTLY ONE BRANCH IS SET. Besides CharacterBasicInformation.character_look it can be CharacterBasicInformation.rank (a RankInformation) or CharacterBasicInformation.social_member (a SocialMember); which one depends on the message carrying the character. Branch on the one that is set.
Not sent on its own — it is only ever a branch of Character. inferred
Used by
Character Fields
#FieldTypeMeaningYou set it 3levelint32The character's level.
Explicit presence: absent is not the same as zero.never 6namestringThe character's display name.never 1social_memberSocialMemberThe character as a guild or alliance member.
A SocialMember: the oneof branch whose nested type the type-name table spells SocialMember.never 2rankRankInformationThe character's guild rank, when the carrying message describes a rank.
A RankInformation: the oneof branch whose type the type-name table spells RankInformation.never 5character_lookCharacterInformationThe character's appearance, breed and base information.
See CharacterInformation.never
  • summary: A character's name, level and appearance, nested inside its list entry.
  • area: Game.Character.Management
  • 73 vues
One characteristic and its value, in one of three shapes of increasing detail.
Kind struct · Area Game.Common
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 FightCharacteristics Fields
#FieldTypeMeaningYou set it 2characteristic_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 3valueCharacterCharacteristicValueThe characteristic as a single total, with no breakdown.
See CharacterCharacteristicValue. Only meaningful when this is the branch that is set.never 5detailedCharacterCharacteristicDetailedThe characteristic broken down into base, bonuses and modifiers.
See CharacterCharacteristicDetailed. Only meaningful when this is the branch that is set.never
  • summary: One characteristic and its value, in one of three shapes of increasing detail.
  • area: Game.Common
  • 76 vues
A characteristic split into the parts it is made of: base, additional, equipment and mount, alignment gift, context and temporary.
Kind struct · Area Game.Common
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 2context_modificationint32The modification applied by the current context.never 3additionalint32The additional part on top of the base.never 4alignment_gift_bonusint32The bonus granted by alignment gifts.never 5objects_and_mount_bonusint32The bonus coming from equipped items and the mount.never 7baseint32The base part of the characteristic.never
  • summary: A characteristic split into the parts it is made of: base, additional, equipment and mount, alignment gift, context and temporary.
  • area: Game.Common
  • 72 vues
A characteristic's six-part breakdown plus how much of it has been used.
Kind struct · Area Game.Common
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 1objects_and_mount_bonusint32The bonus coming from equipped items and the mount.never 2alignment_gift_bonusint32The bonus granted by alignment gifts.never 3temporaryint32The temporary part of the characteristic.never 4baseint32The base part of the characteristic.never 5additionalint32The additional part on top of the base.never 6context_modificationint32The modification applied by the current context.never 7usedint32How much of the characteristic has already been spent.
Only this variant carries it; in live data it arrives for action and movement points.never
  • summary: A characteristic's six-part breakdown plus how much of it has been used.
  • area: Game.Common
  • 77 vues
The simplest characteristic shape: a single total with no breakdown.
Kind struct · Area Game.Common
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 2totalint64The characteristic's value.never
  • summary: The simplest characteristic shape: a single total with no breakdown.
  • area: Game.Common
  • 66 vues
The played character's progression, wealth, alignment, characteristics and spell modifiers.
Kind struct · Area Game.Character
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.
weapon_modifiers is the weapon counterpart of spell_modifiers, one WeaponModifier per modifier on your weapon attacks. Store them as spell modifiers of spell 0, as the official client does.
Not sent on its own — it is only ever carried by CharacterCharacteristicsEvent. inferred
Used by
CharacterCharacteristicsEvent Fields
#FieldTypeMeaningYou set it 1characteristicsrepeated 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 2experience_next_level_floorint64The experience total required to reach the next level. (experience points)
Upper bound of the current level's progress bar.never 3weapon_modifiersrepeated WeaponModifierModifiers currently in effect on your weapon attacks.
See WeaponModifier. Not in beta or 3.2; named after its element type, which the 3.3.20.19 type-name table spells.never 4experience_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 5critical_hit_weaponint32The weapon critical-hit bonus.
The client narrows this to 16 bits when projecting the character.never 6kamasint64The character's current kamas balance. (kamas)
Authoritative over the balance carried by InventoryContentEvent.kamas.never 7probation_timeint64The probation period still applied to the character.never 8experience_level_floorint64The experience total required to have reached the current level. (experience points)
Lower 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 10alignment_informationAlignmentInformationThe character's alignment state.
See AlignmentInformation.never 11experienceint64The character's current total experience. (experience points)never
  • summary: The played character's progression, wealth, alignment, characteristics and spell modifiers.
  • area: Game.Character
  • 78 vues
The played character's full characteristic sheet, sent as a complete replacement.
Kind event · Area Game.Character
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 1statsCharacterCharacteristicsThe complete characteristic sheet.
See CharacterCharacteristics.
The schema declares more than one member of this type; only this one is consumed.never
  • summary: The played character's full characteristic sheet, sent as a complete replacement.
  • area: Game.Character
  • 76 vues
The palettes a character owns, plus how many palette slots are unlocked and how many exist.
Kind struct · Area Game.Cosmetic
The owned palettes, plus the palette slot budget.
The list is a REPLACEMENT of what you held before, not an addition.
- CharacterColors.palettes: every palette the character owns. - CharacterColors.slots_unlocked: palette slots the character has unlocked. - CharacterColors.slots_total: palette slots that exist.
A live 3.7.12.12 capture read 1 unlocked slot against 16 in total, with one palette. Any other int32 in the record is never read by the client: ignore it.
Not sent on its own — it is the payload of CharacterAppearanceCollectionEvent.colors, never sent alone. proven
Used by
CharacterAppearanceCollectionEvent Fields
#FieldTypeMeaningYou set it 1slots_totalint32How many palette slots exist in total.
Named after the client model field it is stored into, AppearanceData.colorsSlotsTotal.never 2slots_unlockedint32How many palette slots the character has unlocked.
Named after the client model field it is stored into, AppearanceData.colorsSlotsUnlocked.never 3palettesrepeated ColorPaletteEvery colour palette the character owns.never
  • summary: The palettes a character owns, plus how many palette slots are unlocked and how many exist.
  • area: Game.Cosmetic
  • 80 vues
Whether the character was created, and broadly why not.
Kind enum · Area Game.Character.Management
THE OUTCOME OF A CHARACTER CREATION. Only CREATE_OK means the character exists.
CREATE_ERROR_INVALID_NAME is the one that carries detail: the companion NameCompliance member says which naming rule was broken. Every other value is the whole story on its own.
EXPECT VALUES YOU DO NOT KNOW. This enum has grown twice since the reference build - six values became eight, then nine - and the newer ones have no published names. Treat any value other than CREATE_OK as a refusal, show the server's own message if you have one, and do not switch exhaustively on it.
Not sent on its own — it is a member type of CharacterCreationResultEvent, never sent alone. proven
Used by
CharacterCreationResultEvent Values
ValueNumberMeaning CREATE_OK0The character was created.
The name is the reference build's, matched by NUMBER. Values 0-5 are present on every dumped build; the enum has only ever GROWN (6 values through 3.4.18.19, 8 from 3.5.3.1, 9 from 3.6.10.10), which is what makes the low numbers safe to carry across. No dumped client distinguishes one value from another, so only the NUMBER is proven. CREATE_ERROR_NO_REASON1Refused, and the server gives no reason.
The name is the reference build's, matched by NUMBER. Values 0-5 are present on every dumped build; the enum has only ever GROWN (6 values through 3.4.18.19, 8 from 3.5.3.1, 9 from 3.6.10.10), which is what makes the low numbers safe to carry across. No dumped client distinguishes one value from another, so only the NUMBER is proven. CREATE_ERROR_INVALID_NAME2Refused because of the name; read the companion reason for which rule it broke.
The name is the reference build's, matched by NUMBER. Values 0-5 are present on every dumped build; the enum has only ever GROWN (6 values through 3.4.18.19, 8 from 3.5.3.1, 9 from 3.6.10.10), which is what makes the low numbers safe to carry across. No dumped client distinguishes one value from another, so only the NUMBER is proven. CREATE_ERROR_TOO_MANY_CHARACTERS3You already hold as many characters as this account allows.
The name is the reference build's, matched by NUMBER. Values 0-5 are present on every dumped build; the enum has only ever GROWN (6 values through 3.4.18.19, 8 from 3.5.3.1, 9 from 3.6.10.10), which is what makes the low numbers safe to carry across. No dumped client distinguishes one value from another, so only the NUMBER is proven. CREATE_ERROR_NOT_ALLOWED4Creation is not permitted for this account right now.
The name is the reference build's, matched by NUMBER. Values 0-5 are present on every dumped build; the enum has only ever GROWN (6 values through 3.4.18.19, 8 from 3.5.3.1, 9 from 3.6.10.10), which is what makes the low numbers safe to carry across. No dumped client distinguishes one value from another, so only the NUMBER is proven. CREATE_ERROR_NEW_PLAYER_NOT_ALLOWED5Creation is not permitted for a new player on this server.
The name is the reference build's, matched by NUMBER. Values 0-5 are present on every dumped build; the enum has only ever GROWN (6 values through 3.4.18.19, 8 from 3.5.3.1, 9 from 3.6.10.10), which is what makes the low numbers safe to carry across. No dumped client distinguishes one value from another, so only the NUMBER is proven.
  • summary: Whether the character was created, and broadly why not.
  • area: Game.Character.Management
  • 67 vues
Says whether the character was created, and when the name was the problem, exactly what was wrong with it.
Kind event · Area Game.Character.Management
Answers CharacterCreationRequest - success and every kind of refusal arrive through this one message.
READ THE RESULT FIRST, THE REASON SECOND
TWO MEMBERS, AND ONLY ONE OF THEM ALWAYS MEANS SOMETHING. The result says what happened. The reason describes the NAME, and it is meaningful only when the result says the name was the problem - on every other outcome it is whatever the server left it at, usually the zero value, and reading it will tell you the name was fine while the creation failed for some other reason entirely.
SUCCESS IS THE ZERO VALUE of the result. That is the client's own test: it treats zero as created and anything greater as a refusal, then switches on the refusal to choose what to show. The distinct refusals the 3.6.10.10 client recognises are, in its own words: no reason given, the name was invalid, you already have too many characters, and you are not allowed to - which its popup calls "not a subscriber". Newer values exist in the enum that the client does not handle individually.
WHAT TO DO WITH IT
ON SUCCESS, RE-READ THE CHARACTER LIST. The event carries no character: it does not tell you the id, the name or anything else about what was created. The real client marks the creation validated and moves on; the new character reaches it through the list, not through this message.
ON AN INVALID NAME, THE REASON IS ACTIONABLE - it is the only refusal where you learn something you can fix without asking the player.
IT ARRIVES BY TYPE. The request went out uncorrelated, so nothing links this event back to it by uid. Do not wait for a matching uid; wait for the event.
BEWARE THE PADDING. The message is padded with a member of the SAME enum type as the result, and which member is padding changes between builds. Read by role, never by field number.
When you may send it
Requires authenticated observed Related messages
Arrives after CharacterCreationRequest Fields
#FieldTypeMeaningYou set it 1resultCharacterCreationResultWhether the character was created, and if not, which class of refusal it was.never 3reasonNameComplianceWhat was wrong with the name. Only meaningful when the result says the name was rejected.never
  • summary: Says whether the character was created, and when the name was the problem, exactly what was wrong with it.
  • area: Game.Character.Management
  • 77 vues
The server naming the character about to be destroyed and stating whether a secret answer is required.
Kind event · Area Game.Character
STEP 2 OF 3. Read need_secret_answer before doing anything else: it decides whether CharacterDeletionRequest must carry a hash, and it is per character.
character_id IS GONE FROM THIS MESSAGE. The reference build declared one and NO dumped build carries it - the client already knows which character it asked about. Do not expect it and do not treat its absence as a decode failure.
THE TWO STRINGS ARE DELIBERATELY UNNAMED. One is the character's NAME and the other is the SECRET QUESTION, and nothing available separates them: both are singular strings, so type says nothing; declaration order is untrustworthy throughout this protocol; and the client's read order was measured and does not settle it either. They stand with their obfuscated names rather than being guessed - which matters here, because showing the player the wrong string in a deletion confirmation is worse than showing none.
When you may send it
Requires authenticated observed Related messages
You must then send CharacterDeletionRequest inferred — the flow is left open until the client either confirms or abandons it Arrives after PrepareCharacterDeletionRequest Sequence
Step character_deletion.2 inferred — of 3 steps; the flow is a fixed ask / terms / confirm exchange
Fields
#FieldTypeMeaningYou set it 1need_secret_answerboolWhether confirming the deletion must carry a hashed secret answer.
Decided per character. Read it before building step 3.never
  • summary: The server naming the character about to be destroyed and stating whether a secret answer is required.
  • area: Game.Character
  • 76 vues
Experience the played character just earned, on a kill, quest turn-in, harvest or craft.
Kind event · Area Game.Character
A gain notification, so the client can animate the experience bar. It is a DELTA, not a total - the totals live in CharacterCharacteristics.
THE CURRENT MESSAGE CARRIES ONLY THE CHARACTER'S OWN EXPERIENCE. The reference build declared mount and guild experience alongside it and the current build does not: that is a real schema reduction, confirmed by the client's own localisation strings, not a gap in recovery. Do not go looking for the other two.
Useful as an activity signal: it fires on kills, quest turn-ins, harvests and crafts, which makes it a cheap way to tell that something you did actually worked.
When you may send it
Requires character_selected observed Related messages
Unsolicited - nothing you send causes this the server reports gains as they happen Fields
#FieldTypeMeaningYou set it 1character_experienceint64The experience the played character just earned. (experience points)
A delta, not a total.
The reference build declared mount and guild amounts beside it; the current schema has dropped them.never
  • summary: Experience the played character just earned, on a kill, quest turn-in, harvest or craft.
  • area: Game.Character
  • 68 vues
Your character reached a new level; this is that level.
Kind event · Area Game.Character
Your character just levelled up. The value is the NEW level, not an increment.
WHAT THE CLIENT DOES WITH IT. It stores the new level on the played character, works out the rewards unlocked for your class at that level, and opens the level-up window.
IF YOU TRACK LEVEL YOURSELF, overwrite it with this value. Experience figures arrive separately in CharacterCharacteristicsEvent and CharacterExperienceGainEvent.
When you may send it
Requires character_selected inferred Related messages
Unsolicited - nothing you send causes this the client reacts to it without having asked for anything Fields
#FieldTypeMeaningYou set it 1new_levelint32The level the character has just reached.
The new level itself, not a number of levels gained.never
  • summary: Your character reached a new level; this is that level.
  • area: Game.Character
  • 70 vues
Whether the played character is alive, dead or a phantom, and where its phoenix statue stands.
Kind event · Area Game.Character
THE MESSAGE THAT TELLS YOU YOU ARE DEAD. Any script that fights needs to handle it: after a death the character is still connected, still receives events, and can still be told to walk - it just cannot do anything useful.
It arrives once during the connection state burst, so the first one you see is not a death; it is the current state. Every later one is a real transition.
phoenix_map_id is where the character would revive - the map holding its phoenix statue. It is meaningful whether or not you are currently dead, and it is a map id in the same space as MapInformationRequest.map_id.
When you may send it
Requires character_selected observed Related messages
Unsolicited - nothing you send causes this sent in the connection burst and again on every death and resurrection Fields
#FieldTypeMeaningYou set it 1statetype not documented yetWhether the character is alive, dead or a phantom.never 3phoenix_map_idint64The map holding the phoenix statue this character would revive at. (map id)never
  • summary: Whether the played character is alive, dead or a phantom, and where its phoenix statue stands.
  • area: Game.Character
  • 74 vues
The account's characters on this server, with everything needed to select one.
Kind event · Area Game.Character.Management
Answers CharacterListRequest.
THIS IS THE ONLY SOURCE OF A CHARACTER ID. The id you put in CharacterSelectionRequest must come from here - an id from another account, another server, or an earlier session is rejected.
Each entry carries the character's look and level as well as its id, so the list is enough to choose without any further request.
When you may send it
Requires authenticated observed Related messages
Arrives after CharacterListRequest Fields
#FieldTypeMeaningYou set it 2charactersrepeated CharacterOne entry per character on the account for this server.never
  • summary: The account's characters on this server, with everything needed to select one.
  • area: Game.Character.Management
  • 78 vues
The selected character has finished loading; the world-entry burst starts here.
Kind event · Area Game.Context
Carries no payload. Arrival is the server's "you are in" signal, closing the long inbound burst that follows CharacterSelectionRequest.
IT DOES NOT CREATE THE GAME CONTEXT. That is ContextCreationRequest, which the real client sends about 1.4 seconds later as step 5 of a seven-step burst: sequence number, the contact and warning settings, the guild requests, context creation, then the api-token and channel requests.
NONE OF THAT BURST IS OBLIGATORY. A bot that skips it stays connected and simply never learns the data those requests fetch.
When you may send it
Requires character_selected observed State it changes
Establishes character_loaded observed — the client begins its world-entry request burst on this cue Related messages
Arrives after CharacterSelectionRequest
  • summary: The selected character has finished loading; the world-entry burst starts here.
  • area: Game.Context
  • 87 vues
A character's rendered appearance and breed, nested inside its basic information.
Kind struct · Area Game.Character.Management
The appearance layer of a Character.
look is a full EntityLook - the same appearance record used everywhere else in the protocol, so whatever you already do with actor looks works here.
breed_id is the class. It is the cheapest useful thing in this record: it tells you what the character IS without resolving any art.
The record also carries strings and further branches that are not proven and are left with their obfuscated names rather than guessed at.
Not sent on its own — it is only ever a branch of CharacterBasicInformation. inferred
Used by
CharacterBasicInformation Fields
#FieldTypeMeaningYou set it 3breed_idint32The character's class. (breed id)never 6lookEntityLookThe character's appearance.
An EntityLook.never 1base_informationCharacterBaseInformationThe base-information branch read by the client's character projection.
See CharacterBaseInformation.never
  • summary: A character's rendered appearance and breed, nested inside its basic information.
  • area: Game.Character.Management
  • 91 vues
A server-generated character name proposal.
Kind event · Area Game.Character
The answer to CharacterNameSuggestionRequest: one proposed name, which the client offers as the player's next candidate.
IT IS A PROPOSAL, NOT A RESERVATION. Nothing is held for you - the name can be taken between the suggestion and your creation request.
When you may send it
Requires authenticated observed Related messages
Arrives after CharacterNameSuggestionRequest Fields
#FieldTypeMeaningYou set it 1suggestionstringThe proposed character name.never
  • summary: A server-generated character name proposal.
  • area: Game.Character
  • 72 vues
The whole appearance of a character - name, class, gender, colours, head - used both to create one and to remodel one.
Kind struct · Area Game.Character.Management
THIS IS THE PAYLOAD OF CHARACTER CREATION, despite the name. The same type carries a character you are creating, a character you are remodelling, and the alternative branch of Character for someone mid-remodelling. Its name comes from the last of those; its most common use is the first.
FILLING IT IN
NAME, CLASS, GENDER, COLOURS, HEAD. That is the whole payload for a creation.
SEND SIX COLOURS. The real client builds the list to six entries before it will construct the request, and -1 in a slot means "leave this one at the class default". Sending fewer is not something the client ever does.
THE CLASS IS AN ID, NOT AN INDEX. The client stores it in its own class enum and writes that value straight out, so it is the class id you would recognise, not a position in a menu.
THE HEAD IS YOUR CHOICE; THE OTHER NUMBER IS NOT. Beside the head there is a second small integer the client does not ask the player about - it looks it up from the class and gender and sends it along. It is recovered as a member but deliberately left unnamed here, because no reference build ever named it. If you are replaying a capture, send back what the client sent; if you are building a request from scratch, that value is derived, not chosen.
WHAT YOU LEAVE EMPTY
THE REMODELLING BLOCK IS NOT YOURS TO FILL. One member describes what an existing character may and must change. The client never populates it on the creation path - the server sends it when it offers a remodelling - so leave it absent.
READ AND WRITE BY ROLE, NOT BY NUMBER. Every member of this message has moved field number between builds, and the padding around them changes too: three same-typed integers side by side is normal here.
Not sent on its own — it is a payload type, never sent on its own. inferred
Used by
Character CharacterCreationRequest Fields
#FieldTypeMeaningYou set it 2namestringThe character's name.required 3genderGenderMale or female. The client holds it as a bool and converts it to this two-valued enum on the way out.required 4breed_idint32The class. The client sends its own breed enum here, so the value is a class id, not an index.required 5cosmetic_idint32The head you picked. It comes straight from the player's choice, not from the class.required 6character_to_remodel_informationtype not documented yetWhich parts of an existing character a remodelling is allowed, and required, to change. Absent when creating.never on the creation path 8colorsrepeated int32The colour choices, in slot order. -1 means "leave this slot at the class default".
The client refuses to build the request until the list holds six entries, so send six.required
  • summary: The whole appearance of a character - name, class, gender, colours, head - used both to create one and to remodel one.
  • area: Game.Character.Management
  • 97 vues
Whether the selection was accepted, and which character was entered.
Kind event · Area Game.Character.Management
Answers CharacterSelectionRequest with one of two outcomes, carried in a oneof: success with the selected character, or an error with no payload.
CHECK WHICH BRANCH IS SET BEFORE READING EITHER. The failure branch is empty, so a client that reads the success branch unconditionally sees a zeroed character rather than an error.
When you may send it
Requires authenticated observed State it changes
Establishes character_selected observed — a successful selection is what makes later character and world messages legal Related messages
Arrives after CharacterSelectionRequest Fields
#FieldTypeMeaningYou set it 1successCharacterSelectionEvent.SuccessSet when the selection was accepted; carries the character now being played.never 2errorCharacterSelectionEvent.ErrorSet when the selection was rejected. Carries no detail - the branch itself is the message.never
  • summary: Whether the selection was accepted, and which character was entered.
  • area: Game.Character.Management
  • 75 vues
A character's availability state, plus the player's own optional away message.
Kind struct · Area Game.Common
The shared availability carrier, used everywhere a character's presence is shown - PlayerStatusUpdateRequest, friend, guild and party listings.
message IS PLAYER-CONTROLLED TEXT. TREAT IT AS UNTRUSTED. It is whatever another person typed into their status, it is usually absent, and it reaches your script exactly as they wrote it. Never interpolate it into anything that executes, and escape it before display.
status is the machine-readable half; see Status.
Not sent on its own — it is embedded in a dozen messages and never sent on its own. inferred
Used by
NamedFighterInformation PartyGuest PartyMemberInformation PlayerStatusUpdateRequest PlayerStatusUpdatedEvent SocialMember Fields
#FieldTypeMeaningYou set it 2messagestringThe player's own away or custom text.
Explicit presence: absent is not the same as zero.
Usually absent.
UNTRUSTED - it is free text another player wrote. Escape it before display.optional 3statusStatusThe character's availability state.
A Status value.required when you set your own status
  • summary: A character's availability state, plus the player's own optional away message.
  • area: Game.Common
  • 68 vues
Somebody said something on a chat channel, including your own lines echoed back.
Kind event · Area Game.Chat
Everything said on every channel you are subscribed to, including your own lines coming back after ChatChannelMessageRequest.
A whisper sent TO you also arrives here, with channel Channel.PRIVATE. Your own whisper does not: it comes back as ChatPrivateCopyMessageEvent.
TWO SENDER IDS, TWO DIFFERENT PURPOSES. sender_character_id is the CHARACTER speaking - use it to address them or open a menu on them. sender_account_id is the ACCOUNT behind that character - use it to ignore a PERSON, who can otherwise come back on another character. They are both 64-bit and they are not interchangeable.
date IS AN ISO-8601 STRING WITH OFFSET, NOT A UNIX TIME. It looks like "2026-08-26T21:51:44+02:00". Parse it; do not cast it.
content is the words only. Anything shift-clicked into the line - items, monster groups - rides in metadata as structured links, and the client merges the two before display. A script reading only content sees the sentence with the links missing.
origin_server_id HAS EXPLICIT PRESENCE and is only meaningful when present, which happens on the cross-server community channels. Absent means "this server".
channel has no explicit presence: absent reads as the zero value, Channel.GLOBAL.
When you may send it
Requires character_loaded observed Related messages
Arrives after ChatChannelMessageRequest Fields
#FieldTypeMeaningYou set it 1channelChannelWhich channel the line was said on.
A Channel value. No explicit presence: absent reads as Channel.GLOBAL.never 2datestringWhen the line was said.
Observed: 2026-08-26T21:51:44+02:00
An ISO-8601 string with offset. NOT a unix timestamp.never 3sender_prefixstringDecoration shown in front of the speaker's name.
Empty for an ordinary player.never 4sender_namestringThe speaker's character name, as displayed.never 5from_adminboolWhether this is a staff line.
The client passes it to its mute predicate, which is what stops staff lines being muted.never 6metadataMetadataRich content attached to the line.
See Metadata. Present but empty for an ordinary line.
Name ours, after its type Metadata: beta has no such field and no build names it.never 7sender_account_idint64The speaking character's account id - use it to ignore a person rather than a character. (account id)
A person can return on another character; the account id follows them.never 8sender_character_idint64The speaking character's id - use it to address or open a menu on the speaker. (character id)never 9contentstringThe spoken text, without the rich-link content.
The client merges this with the metadata links before displaying the line.never 10origin_server_idint32Which server the speaker is on.
Explicit presence: absent is not the same as zero. (server id)
Only meaningful when present - it appears on the cross-server community channels.never
  • summary: Somebody said something on a chat channel, including your own lines echoed back.
  • area: Game.Chat
  • 93 vues
The server telling the client which chat channels to switch on and which to switch off.
Kind event · Area Game.Chat
The server-side counterpart of SubscribeMultipleChannelRequest: two lists applied to your channel mask.
ORDER MATTERS AND IT IS NOT OBVIOUS. The client ORs active_channels in FIRST, then AND-NOTs disabled_channels out. So A CHANNEL PRESENT IN BOTH LISTS ENDS UP OFF. Apply them in that order or you will disagree with the client about what you are subscribed to.
This is availability, not preference: it says what the server permits, which is not necessarily what you asked for.
When you may send it
Requires character_loaded observed Related messages
Unsolicited - nothing you send causes this the server states channel availability on its own schedule, not only in reply to a subscription Fields
#FieldTypeMeaningYou set it 1disabled_channelsrepeated ChannelChannels to switch off.
Element type Channel. Applied AFTER the active list, so a channel in both ends up off.never 2active_channelsrepeated ChannelChannels to switch on.
Element type Channel. Applied first.never
  • summary: The server telling the client which chat channels to switch on and which to switch off.
  • area: Game.Chat
  • 68 vues
Which measurement a file check asks for: the file's byte length, or a checksum of its contents.
Kind enum · Area Game.Client.Verification
The algorithm selector shared by FileCheckEvent and FileCheckRequest.
The two values are proven by what the client's own branches do: one reads the byte array's length and formats it as a decimal string, the other calls the checksum helper. Both results travel as a string.
Not sent on its own — an enum is never sent on its own. inferred
Used by
FileCheckEvent FileCheckRequest Values
ValueNumberMeaning LENGTH0Report the file's byte length, formatted as a decimal string. HASH_SUM1Report a checksum computed over the file's bytes.
  • summary: Which measurement a file check asks for: the file's byte length, or a checksum of its contents.
  • area: Game.Client.Verification
  • 68 vues

Compte

Navigation

Recherche

Recherche

Configurer les notifications push du navigateur

Chrome (Android)
  1. Appuyez sur l'icône de cadenas à côté de la barre d'adresse.
  2. Tap Autorisations → Notifications.
  3. Ajustez vos préférences.
Chrome (Desktop)
  1. Cliquez sur l'icône représentant un cadenas dans la barre d'adresse..
  2. Select Paramètres du site.
  3. Find Notifications et ajustez vos préférences.