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
Take back every capital point spent on the six base characteristics: they return to 0 and the points return to the capital. Sent empty.
Kind request · Area Game.Character
Undoes the characteristic points the character has spent: the six base characteristics go back to 0 and every point spent on them returns to the capital (StatsPoints). It is the opposite of CharacterCharacteristicUpgradeRequest.
HOW TO SEND IT
1. SEND IT EMPTY. It has no member to fill. 2. NO CONFIRMATION, NO CHECK ON SEND. The client's reset button sends it at once: no question to the player, and nothing between the click and the send tests level, fight or points. Treat the server as the judge of whether a reset is allowed. 3. READ THE RESULT in the next CharacterCharacteristicsEvent: strength, vitality, wisdom, chance, agility and intelligence (StatId 10 to 15) with a base of 0, and StatsPoints (characteristic 3) raised by every point that had been spent. 4. ALSO EXPECT an InventoryWeightEvent with the new maximum weight, and a TextInformationEvent (message id 470 in the observed session).
OBSERVED (same character, two captures): on 3.7.7.6 it spent 8 points (1 each on strength, vitality, chance, agility and intelligence, 3 on wisdom), leaving 37 StatsPoints and a maximum weight of 1146. On 3.7.8.7 this request was answered by InventoryWeightEvent (maximum weight 1141), CharacterCharacteristicsEvent (all six bases 0, StatsPoints 45 = 37 + 8) and a TextInformationEvent with id 470.
PADDING. 3.5.9.11 declares an optional int32 and a six-value enum in it; the client never writes them. Send it empty on every build.
When you may send it
Requires character_loaded inferred Raised by: the player clicks the reset button of the character sheet's characteristic boost panel (the full panel; the minimized panel's reset does nothing) proven Related messages
Nothing answers it - send it and move on no dumped build declares a reset reply; the new characteristics arrive through the unsolicited [[CharacterCharacteristicsEvent]], as observed
  • summary: Take back every capital point spent on the six base characteristics: they return to 0 and the points return to the capital. Sent empty.
  • area: Game.Character
  • 42 vues
Closes the current fight action sequence and gives the action id the client acknowledges.
Kind event · Area Game.Game.Action
Closes the fight action sequence opened by SequenceStartEvent and names the action to acknowledge.
WHAT TO DO WHEN YOU RECEIVE IT
1. Close the current sequence. If none is open, the client logs a warning and ignores the end: do the same. 2. Keep SequenceEndEvent.action_id and note whether SequenceEndEvent.author_id is the fighter you play. 3. When you have applied everything the sequence carried, send GameActionAcknowledgementRequest with valid = true and that action_id. ONE ACKNOWLEDGEMENT PER SEQUENCE. Not acknowledging stalls the fight: the client itself delays the end of a turn, and the end of the fight, while a sequence is still open.
SequenceEndEvent.sequence_type repeats the kind of the sequence being closed (see SequenceType). The official client ignores it: it already knows the kind from the start.
A FIGHT CAN END INSIDE A SEQUENCE. The official client then closes the open sequence itself, as if this message had arrived ('Fight end but no SequenceEnd was received').
When you may send it
Requires context_ready inferred Related messages
You must then send GameActionAcknowledgementRequest inferred — the client acknowledges each finished sequence with its action id once it has played it back; the server's fight waits for that acknowledgement Arrives after SequenceStartEvent Fields
#FieldTypeMeaningYou set it 2action_idint32The id of the finished action; echo it in the acknowledgement. (action id)
Proven as the only int32 the client reads; it is stored in the open sequence and echoed in the acknowledgement.never 3sequence_typeSequenceTypeThe kind of the sequence being closed.
Same enum as SequenceStartEvent.sequence_type. The official client never reads it at the end of a sequence.never 4author_idint64The fighter whose action the sequence played. (fighter id)
Proven as the only int64 the client reads; it is compared with the fighter the client plays.never
  • summary: Closes the current fight action sequence and gives the action id the client acknowledges.
  • area: Game.Game.Action
  • 44 vues
Opens a fight action sequence: the actions that follow belong together until the matching sequence end.
Kind event · Area Game.Game.Action
Opens a fight action sequence. Everything the server sends until the matching SequenceEndEvent is the playback of ONE action - a spell cast, a weapon hit, a movement, a death, a turn start or end - and belongs together.
WHAT TO DO WHEN YOU RECEIVE IT
1. Open a sequence: remember that you are inside one, and its kind (SequenceStartEvent.sequence_type, see SequenceType). 2. Apply the fight action events that follow as part of it. 3. SEND NOTHING BACK NOW. The answer comes when the sequence ends: the client acknowledges the finished sequence with GameActionAcknowledgementRequest.
SEQUENCES NEST. The client keeps a parent link: a start that arrives while another sequence is open opens a child (a trap triggered during a move, a death during a spell). Close them in reverse order.
SequenceStartEvent.author_id names the fighter whose action the sequence plays. The official client never reads it here: it takes the author from SequenceEndEvent.author_id when the sequence closes.
When you may send it
Requires context_ready inferred Related messages
You will then receive SequenceEndEvent inferred — every sequence is closed by a sequence end carrying the action id to acknowledge; the client's own handler warns when an end arrives without a start Unsolicited - nothing you send causes this the server opens a sequence whenever it plays a fight action (a cast, a move, a death, a turn change), whoever caused it Fields
#FieldTypeMeaningYou set it 1sequence_typeSequenceTypeWhat kind of action the sequence plays (spell, weapon, movement, death, turn start/end ...).
Proven as the only member the client reads: it is converted into the client's sequence kind and stored in the sequence it opens.never 2author_idint64The fighter whose action the sequence plays. (fighter id)
The official client never reads it; the same fighter comes back in SequenceEndEvent.author_id.never
  • summary: Opens a fight action sequence: the actions that follow belong together until the matching sequence end.
  • area: Game.Game.Action
  • 40 vues
What kind of fight action a sequence plays: a spell, a weapon hit, a mark, a move, a death, a turn or fight start/end.
Kind enum · Area Game.Game.Action
The kind of a fight action sequence, carried by SequenceStartEvent and SequenceEndEvent.
Each named value is the kind the official client turns it into (its own spell, weapon spell, mark spell, trigger, movement, entity death, turn start, turn end and fight start kinds). The client converts nothing else: any other declared value reaches it as an unknown kind. Treat such a value as unknown, never as one of the named ones.
You do not need the kind to play a fight correctly: acknowledge every finished sequence with GameActionAcknowledgementRequest whatever its kind.
Not sent on its own — an enum is never sent on its own. inferred
Used by
SequenceEndEvent SequenceStartEvent Values
ValueNumberMeaning SPELL0A spell cast.
The official client turns it into its own 'Spell' sequence kind. WEAPON1A weapon hit.
The official client turns it into its own 'WeaponSpell' sequence kind. GLYPH_TRAP2A glyph or trap: a mark laid on the ground, or its effect.
The official client turns it into its own 'MarkSpell' sequence kind. TRIGGERED3Effects triggered by another action.
The official client turns it into its own 'Trigger' sequence kind. MOVE4A movement.
The official client turns it into its own 'Movement' sequence kind. CHARACTER_DEATH5A fighter's death.
The official client turns it into its own 'EntityDeath' sequence kind. TURN_START6The start of a turn.
The official client turns it into its own 'TurnStart' sequence kind. TURN_END7The end of a turn.
The official client turns it into its own 'TurnEnd' sequence kind. FIGHT_START8The start of the fight.
The official client turns it into its own 'FightStart' sequence kind.
  • summary: What kind of fight action a sequence plays: a spell, a weapon hit, a mark, a move, a death, a turn or fight start/end.
  • area: Game.Game.Action
  • 41 vues
A fight has started on the character's map: its teams, type and sword positions. The client adds it to the map's fights; nothing is sent back.
Kind event · Area Game.Roleplay
Announces one fight that has just started on the map the character is on, as a FightCommonInformation: the fight id, its FightType, the teams, the cells where each team's swords stand and each team's options.
WHAT TO DO WHEN YOU RECEIVE IT
1. Add the fight to the fights you track for the map. It is the same record, and the client turns it into the same client object with the same routine, as each entry of MapComplementaryInformationEvent.fights: a map's fights are known from its contents, and fights that start later arrive one by one in this message. 2. SEND NOTHING BACK. No handler of this message builds a request, and nothing the handling reaches does either. 3. Joining the fight or spectating it are separate player actions with their own requests; this message only makes the fight visible.
WHAT THE CLIENT DOES. The map-fights service converts the record and hands it on to the map's fight display. The same service also handles the map's fight count (MapFightCountEvent) and updates to a fight's teams. Adding a fight here does not change that count; on 3.6.12.16 only MapFightCountEvent sets it above zero.
YOUR OWN FIGHT IS ANNOUNCED TOO. The fight carries every team member, your character included when it is one of them, so a fight you just started by attacking appears here like any other.
ONE DECLARED MEMBER IS REAL. Builds pad this message with an optional int64, a second message member or a nested decoy; the client reads only ShowChallengeEvent.fight_information.
When you may send it
Requires context_ready inferred Related messages
Reply not yet recovered: it follows any fight starting on the map - including one your own character starts by attacking a monster group - and the requests that start fights have no signature here. Fields
#FieldTypeMeaningYou set it 1fight_informationFightCommonInformationThe fight that just started on the map.
A FightCommonInformation, the same record the map's contents list its running fights with.never
  • summary: A fight has started on the character's map: its teams, type and sword positions. The client adds it to the map's fights; nothing is sent back.
  • area: Game.Roleplay
  • 45 vues
One skill a job grants: a timed gathering action with its yield range, or a craft with its success chance.
Kind struct · Area Game.Job
One skill of a job (SkillAction.skill_id) and what using it does, as a oneof (SkillAction.action):
- SkillAction.timed - a gathering skill: how long one use takes and how many resources it yields (Timed, Collect); - SkillAction.craft - a crafting skill: its success chance (Craft).
Exactly one branch is set. Read the oneof case, not the field numbers: both branches are messages and their numbers change between builds. The client keeps the skill id as a 16-bit value.
Not sent on its own — it is an entry of JobDescription.skills, never sent on its own. inferred
Used by
JobDescription Fields
#FieldTypeMeaningYou set it 3skill_idint32Which skill this is. (skill id)never 1craftCraftSet for a crafting skill: its success chance.
A Craft; a branch of the action oneof.never 2timedTimedSet for a gathering skill: duration and yield range.
A Timed; a branch of the action oneof.never
  • summary: One skill a job grants: a timed gathering action with its yield range, or a craft with its success chance.
  • area: Game.Job
  • 42 vues
Every item and the kamas of the storage that was just opened, such as the bank. A full snapshot: replace what you hold for that storage.
Kind event · Area Game.Inventory
The complete content of the storage the server just opened, such as your bank. It comes with ExchangeStartedWithStorageEvent, which says WHICH storage it is and how many slots it has.
WHAT TO DO WHEN YOU RECEIVE IT
1. REPLACE THE STORAGE'S ITEMS. Empty what you hold for the open storage, then load every element of StorageInventoryContentEvent.objects. The client clears its storage inventory, items and indexes, before adding these items, so an item missing from the list is not in the storage. Key your model by ObjectItem.uid. 2. SET THE STORAGE'S KAMAS to StorageInventoryContentEvent.kamas. It is the amount, not a change. The client writes it into the very same place that StorageKamasUpdateEvent overwrites later, the bank inventory's kamas. 3. SEND NOTHING BACK. The handler only stores the content; it builds no request.
NOT YOUR INVENTORY. InventoryContentEvent has the same two members and fills the CARRIED inventory. This one fills the STORAGE inventory. A script that feeds both into one model loses track of what the character actually carries.
KAMAS IS A 64-BIT VALUE. A bank holding more than 2^31 kamas is common; a 32-bit field overflows.
PADDING. Builds add an unread member: a second int64, a string, a repeated int32 or a nested enum. The client reads only the two recovered members.
When you may send it
Requires character_loaded inferred Related messages
Arrives after ExchangeStartedWithStorageEvent Reply not yet recovered: while the storage stays open, single items change through storage object update and removal events, which have no signature here; the kamas change through StorageKamasUpdateEvent. Fields
#FieldTypeMeaningYou set it 1kamasint64The kamas held in the opened storage. (kamas)
An absolute amount. StorageKamasUpdateEvent keeps the same value current afterwards.never 2objectsrepeated ObjectItemInventoryEvery item in the opened storage. The list replaces the storage's previous content.
Each element is an ObjectItemInventory; an item absent from the list is not in the storage.never
  • summary: Every item and the kamas of the storage that was just opened, such as the bank. A full snapshot: replace what you hold for that storage.
  • area: Game.Inventory
  • 46 vues
How many kamas are in the character's bank. An absolute amount to overwrite; nothing is sent back.
Kind event · Area Game.Inventory
WHAT TO DO WHEN YOU RECEIVE IT: overwrite the bank amount you track with StorageKamasUpdateEvent.kamas and recompute total wealth (carried plus bank). SEND NOTHING BACK - no handler of this message builds a request, and a static walk through the notifications it raises reaches none.
The kamas held in the bank, as opposed to the kamas the character carries, which arrive in KamasUpdateEvent.
TREAT IT AS THE AMOUNT, NOT A CHANGE. The client stores the value as the bank's kamas and hands it unchanged to the bank window. Overwrite what you track rather than adding to it.
IT ALSO MOVES THE TOTAL. Right after storing it, the client recomputes the character's total wealth as carried kamas plus this value and raises the same total-kamas notification that KamasUpdateEvent raises. A script that shows total kamas has to follow both messages.
ONE DECLARED MEMBER IS REAL. Builds pad this message with an int32, a repeated int32 or a nested decoy message; the client reads only StorageKamasUpdateEvent.kamas.
When you may send it
Requires character_selected inferred Related messages
Arrives after ExchangeMoveKamaRequest Fields
#FieldTypeMeaningYou set it 1kamasint64The kamas currently held in the bank. (kamas)
An absolute amount, not a delta. The client adds it to the carried kamas to show total wealth.never
  • summary: How many kamas are in the character's bank. An absolute amount to overwrite; nothing is sent back.
  • area: Game.Inventory
  • 42 vues
One item left the open storage (such as the bank) entirely. Drop the item with this uid, whatever quantity you had for it.
Kind event · Area Game.Inventory
A whole stack left the storage you have open.
WHAT TO DO WHEN YOU RECEIVE IT
1. REMOVE THE ITEM whose uid is StorageObjectRemovedEvent.object_uid from the storage content you track, WHATEVER ITS QUANTITY. The client removes the entry outright (no quantity is involved). 2. SEND NOTHING BACK.
It is the storage uid, the one StorageInventoryContentEvent and StorageObjectUpdateEvent gave you, not the uid the item gets back in your inventory: that one arrives in ObjectAddedEvent (or as a quantity change in ObjectQuantityEvent when it joins an existing stack).
OBSERVED (captures, bank and trash bin): taking the last unit of a stored item out with ExchangeObjectMoveRequest produced this event with that item's storage uid.
PADDING. Builds add an unread member (a string on 3.7). The client reads only the recovered uid.
When you may send it
Requires exchange_open inferred Related messages
Arrives after ExchangeObjectMoveRequest Fields
#FieldTypeMeaningYou set it 1object_uidint32The storage uid of the item that left the storage. (item uid)
The uid the storage knows the item by, not the uid it gets in your inventory.never
  • summary: One item left the open storage (such as the bank) entirely. Drop the item with this uid, whatever quantity you had for it.
  • area: Game.Inventory
  • 42 vues
One item of the open storage (such as the bank) was added or changed. Store it under its uid, replacing what you had: the quantity is the new total.
Kind event · Area Game.Inventory
One item of the storage you have open changed: it was put in, or part of its stack was taken out.
WHAT TO DO WHEN YOU RECEIVE IT
1. FIND THE ITEM BY UID in the storage content you loaded from StorageInventoryContentEvent: the key is the uid inside StorageObjectUpdateEvent.object (ObjectItem.uid). 2. ADD OR REPLACE IT. If the uid is unknown, add the item; if it is known, replace the whole entry with this one. The quantity in it is the NEW TOTAL of that stack in the storage, not the amount that moved. The client does exactly this (copy over the known item, or add a new one). 3. SEND NOTHING BACK.
THE STORAGE UID IS ITS OWN. An item put into the storage can get a uid that differs from the one it had in your inventory; to take it back out, send ExchangeObjectMoveRequest with THIS uid and a negative quantity.
NOT YOUR INVENTORY. ObjectAddedEvent and ObjectQuantityEvent describe the carried inventory; they arrive beside this one when an item moves between the two.
OBSERVED (one capture, a trash bin): putting 2 of a stack in produced this event with a new uid and quantity 2; taking 1 back produced it again, same uid, quantity 1. Taking the last one out produces StorageObjectRemovedEvent instead.
When you may send it
Requires exchange_open inferred Related messages
Arrives after ExchangeObjectMoveRequest Fields
#FieldTypeMeaningYou set it 1objectObjectItemInventoryThe storage item as it is now: its uid, its template, its effects and its new total quantity in the storage.
Replace the whole entry with the same uid; the quantity is a total, not a delta.never
  • summary: One item of the open storage (such as the bank) was added or changed. Store it under its uid, replacing what you had: the quantity is the new total.
  • area: Game.Inventory
  • 43 vues
Which team of a fight a member belongs to: challengers, defenders or spectators. The type is named; its values are not.
Kind enum · Area Game.Common
The team side of a fight, as used by FightTeamRemoveMemberEvent.team and by the team member of FightPlacementPossiblePositionsEvent. Keep it as a key: the client selects a fight's team by this value.
THE VALUES ARE NOT NAMED HERE. Beta declares TEAM_CHALLENGER = 0, TEAM_DEFENDER = 1 and TEAM_SPECTATOR = 2, but enum numbers are not trusted across builds, and nothing read so far in the client separates the values by behaviour. Current builds declare a fourth value. When you need challengers versus defenders, compare with the team of a fighter you know (your own character after you attacked is a challenger).
Not sent on its own — an enum is never sent on its own. inferred
Used by
ChangeTeam FightMark FightOptionUpdateEvent FightPlacementPossiblePositionsEvent FightTeamInformation FightTeamRemoveMemberEvent NamedPartyTeam SpawnInformation No fields you may set.
  • summary: Which team of a fight a member belongs to: challengers, defenders or spectators. The type is named; its values are not.
  • area: Game.Common
  • 42 vues
What a fight team is made of: players, monsters, a tax collector, a prism and so on.
Kind enum · Area Game.Fight
The kind of team a FightTeamInformation describes.
THE VALUES ARE NOT NAMED HERE. Beta declares six: player, monster, mutant, tax collector, bad player and prism, but no client behaviour in the dumps ties a wire number to one of them, so the numbers keep their obfuscated names. Treat the value as an opaque team kind and compare it only with values you have seen.
OBSERVED (one capture, 3.7.8.7, attacking a monster group): the monster team carried 1, the player team the default 0 - which matches beta's player = 0, monster = 1, but that is one observation, not a proof.
Not sent on its own — an enum carried by FightTeamInformation.type. proven
Used by
FightTeamInformation No fields you may set.
  • summary: What a fight team is made of: players, monsters, a tax collector, a prism and so on.
  • area: Game.Fight
  • 45 vues
One place a teleporter can send you: map, sub-area, kamas cost, level, kind, and anomaly details for an anomaly.
Kind struct · Area Game.Teleportation
One entry of TeleportDestinationsEvent. It is never sent on its own.
HOW TO USE AN ENTRY
1. TO GO THERE, send TeleportRequest with this entry's map_id as map_id and its type as destination_type. 2. CHECK THE PRICE FIRST. cost is in kamas. The official client greys out Validate when you have fewer kamas, and refuses locally (a "not enough kamas" chat line) without sending anything. 3. FOR AN ANOMALY (type TELEPORTER_ANOMALY), the client also requires your level to be at least level, and shows the anomaly bonus and time left.
subarea_id names the area: the client looks the sub-area up in its data to show where the destination is.
Builds pad this record with an unread int64, a bool, an int32, a second anomaly-typed member or a nested decoy; the client reads only the members above.
Not sent on its own — it is only ever a row of TeleportDestinationsEvent.destinations. proven
Used by
TeleportDestinationsEvent Fields
#FieldTypeMeaningYou set it 1typeTeleporterWhat kind of destination this is (zaap, subway, prism, haven bag, anomaly). Send it as destination_type.
Echoed as TeleportRequest.destination_type.never 2costint32What the trip costs, in kamas. Absent (0) for the teleporter you stand at. (kamas)
The official client does not send the request when you have fewer kamas.never 4map_idint64The destination map. Send it as map_id in TeleportRequest to go there. (map id)
Compared with TeleportDestinationsEvent.spawn_map_id to find your respawn zaap.never 5levelint32The destination's level. For an anomaly, your level must be at least this to go.never 6subarea_idint32The sub-area the destination is in; the client looks it up to name the place. (sub-area id)never 7anomalyAnomalyAnomaly details (bonus, time left); set only for an anomaly destination.never
  • summary: One place a teleporter can send you: map, sub-area, kamas cost, level, kind, and anomaly details for an anomaly.
  • area: Game.Teleportation
  • 42 vues
The destinations a zaap, zaapi or prism offers you, sent when you use one. Pick one and send TeleportRequest.
Kind event · Area Game.Teleportation
The server's list of where the teleporter you just used can take you. It arrives when you use a zaap, a zaapi (subway) or a prism with InteractiveUseRequest, right after InteractiveUsedEvent accepts the use. From then on you are IN THE TELEPORTER DIALOG until it closes.
WHAT TO DO WHEN YOU RECEIVE IT
1. NOTE THE LIST KIND. type says which picker the server opened - ZAAP, SUBWAY or PRISM (see Teleporter). Keep it: it is the source_type you send back in TeleportRequest. 2. READ THE DESTINATIONS. Each TeleportDestination gives a map_id, its subarea_id, a cost in kamas, a level, its own type, and for an anomaly the anomaly details. 3. FIND YOUR RESPAWN POINT. The destination whose map_id equals spawn_map_id is the zaap you saved as respawn. The client marks it. 4. ACT, THEN LEAVE. Teleport with TeleportRequest, save the current zaap as respawn with ZaapRespawnSaveRequest, or close with DialogLeaveRequest.
WHAT THE OFFICIAL CLIENT DOES WITH IT
- It builds one entry per destination, in list order, and shows them in the zaap window, titled by the list kind (ui.zaap.zaap / ui.zaap.zaapi / ui.zaap.prism). - It compares every destination's map_id with spawn_map_id and flags the match as your respawn point. It also remembers spawn_map_id in the zaap service, the same member ZaapRespawnUpdatedEvent later updates. - For a SUBWAY list it also looks up the map hints of each destination, to show the district names. - For an ANOMALY destination it reads the anomaly details (bonus, time left) and shows them in the entry's tooltip.
The list includes the teleporter you are standing at: in the capture below the first destination is your own map, with no cost.
LIVE CAPTURE (3.7.4.4): InteractiveUseRequest {element_id 538794, skill_instance_uid 17447} on a zaap, then InteractiveUsedEvent (skill 114) and this event in the same millisecond: no type (ZAAP), spawn_map_id 192416776, six destinations - two zaaps (one is the current map, cost absent; the other costs 7 kamas) and four anomalies costing 1300 to 1850 kamas, each with a 120% bonus and 12 to 77 minutes left.
Builds pad this message with an unread second repeated TeleportDestination, a second int64, a string, a bool or a nested decoy; the client reads only the three members above.
When you may send it
Requires roleplay_context inferred State it changes
Establishes teleport_dialog_open inferred — the client opens its destination picker; choosing, saving and closing all happen while it is open Related messages
Arrives after InteractiveUseRequest Fields
#FieldTypeMeaningYou set it 1spawn_map_idint64The map of the zaap you saved as respawn point; the destination with this map_id is your respawn.
Explicit presence: absent is not the same as zero. (map id)
proto3 optional: may be absent.
The same state ZaapRespawnUpdatedEvent.map_id updates.never 2typeTeleporterWhich teleporter you used: ZAAP, SUBWAY or PRISM. Echo it as source_type in TeleportRequest.
Absent on the wire for ZAAP (value 0).
Echoed as TeleportRequest.source_type; the client copies it into the picker and sends it back unchanged.never 4destinationsrepeated TeleportDestinationEvery place this teleporter can send you, one TeleportDestination each.
Includes the teleporter you stand at (cost absent).never
  • summary: The destinations a zaap, zaapi or prism offers you, sent when you use one. Pick one and send TeleportRequest.
  • area: Game.Teleportation
  • 47 vues
Asks to teleport to one destination of the open zaap, zaapi or prism list. Costs the destination's kamas.
Kind request · Area Game.Teleportation
Takes you to one destination of the list the server sent in TeleportDestinationsEvent. Send it while that picker is open.
HOW TO BUILD IT
1. map_id = the chosen TeleportDestination.map_id. 2. destination_type = that destination's own TeleportDestination.type. 3. source_type = the list's kind, TeleportDestinationsEvent.type, unchanged - the teleporter you are using, not the one you go to.
BEFORE YOU SEND IT
- Make sure you have at least the destination's cost in kamas. The official client checks this itself and, when you are short, prints a "not enough kamas" line and sends nothing. - For an anomaly destination, make sure your level is at least the destination's level; the client disables Validate otherwise.
Send one request per choice. The picker does not resend on its own.
Builds pad this message with an int32, a string or a third Teleporter member that no client ever writes. Leave them unset.
When you may send it
Requires teleport_dialog_open proven Raised by: the player validates a destination in the teleporter picker proven Related messages
Reply not yet recovered: The server moves you: expect a map change and the teleporter dialog closing. No reply has been captured yet, so no reply message is tied to it. Fields
#FieldTypeMeaningYou set it 1map_idint64The map you want to go to: the chosen TeleportDestination.map_id. (map id)
Echoes TeleportDestination.map_id.always 2source_typeTeleporterThe kind of the teleporter you are using: echo TeleportDestinationsEvent.type unchanged.
Echoes TeleportDestinationsEvent.type.always 4destination_typeTeleporterThe kind of the destination you chose: its TeleportDestination.type.
Echoes TeleportDestination.type.always
  • summary: Asks to teleport to one destination of the open zaap, zaapi or prism list. Costs the destination's kamas.
  • area: Game.Teleportation
  • 56 vues
A kind of teleporter or destination: zaap, zaapi (subway), prism, haven bag or anomaly.
Kind enum · Area Game.Teleportation
The kind of a teleporter (which picker opened) or of a destination:
TELEPORTER_ZAAP 0 a zaap. Absent on the wire. TELEPORTER_SUBWAY 1 a zaapi, the in-town subway. TELEPORTER_PRISM 2 an alliance prism. TELEPORTER_HAVEN_BAG 3 the zaap list opened from your haven bag. TELEPORTER_ANOMALY 4 an anomaly destination; it carries TeleportDestination.anomaly.
WHERE IT APPEARS
- TeleportDestinationsEvent.type: which picker opened. - TeleportDestination.type: what each destination is. - TeleportRequest: source_type is the picker's kind, sent back unchanged; destination_type is the chosen destination's kind.
Builds from 3.5 declare a sixth value, 5. No client code tests for it; another client feature builds teleport choices with source 5 and destination ZAAP, but what it stands for is not proven, so it is left unnamed. Treat any other value as a protocol change.
Not sent on its own — an enum is never sent on its own; it is a member of TeleportDestinationsEvent, TeleportDestination and TeleportRequest. inferred
Used by
TeleportDestination TeleportDestinationsEvent TeleportRequest Values
ValueNumberMeaning TELEPORTER_ZAAP0A zaap. The default, absent on the wire.
The client titles the picker ui.zaap.zaap. TELEPORTER_SUBWAY1A zaapi, the in-town subway.
The client titles the picker ui.zaap.zaapi and shows district hints. TELEPORTER_PRISM2An alliance prism.
The client titles the picker ui.zaap.prism. TELEPORTER_HAVEN_BAG3The zaap list opened from your haven bag.
The save button then saves into the haven bag (ui.zaap.saveInHavenbag). TELEPORTER_ANOMALY4An anomaly destination; it carries the anomaly details.
The client requires your level to reach the destination's level.
  • summary: A kind of teleporter or destination: zaap, zaapi (subway), prism, haven bag or anomaly.
  • area: Game.Teleportation
  • 47 vues
A gathering skill: how long one use takes and how many resources it yields.
Kind struct · Area Game.Job
The gathering branch of SkillAction: Timed.time, the duration of one use, and Timed.collect, the range of resources one use yields. The client stores the duration as a 32-bit value; its unit is not established by client code.
Not sent on its own — it is the timed branch of SkillAction, never sent on its own. inferred
Used by
SkillAction Fields
#FieldTypeMeaningYou set it 1collectCollectHow many resources one use yields.
A Collect.never 2timeint32How long one use of the skill takes.never
  • summary: A gathering skill: how long one use takes and how many resources it yields.
  • area: Game.Job
  • 43 vues
One answer an NPC dialog offers: the reply_id to send back, and what choosing it does.
Kind struct · Area Game.Npc
One answer the NPC dialog offers, inside NpcDialogQuestionEvent.visible_replies.
reply_id the id you send back in NpcDialogReplyRequest to choose this answer; it also names the reply's text in the NPC's game data. actions what choosing it does (ActionInformation): start a quest, validate a quest step, start a fight... The official client only uses them to pick the reply's icon; the server performs them when you choose the reply.
Choose by reply_id, never by position.
Not sent on its own — it only travels inside NpcDialogQuestionEvent.visible_replies. inferred
Used by
NpcDialogQuestionEvent Fields
#FieldTypeMeaningYou set it 1reply_idint32The id to send back in NpcDialogReplyRequest to choose this answer. (NPC reply id)
Also names the reply's text in the NPC's game data. Your capture: 36979.never 2actionsrepeated ActionInformationWhat choosing this answer does.
The client only derives the reply's icon from them.never
  • summary: One answer an NPC dialog offers: the reply_id to send back, and what choosing it does.
  • area: Game.Npc
  • 45 vues
Asks what travelling to the zaap on one map costs. Answered by WaypointPriceResponse.
Kind request · Area Game.Teleportation
This name is not Ankama's. It was chosen for this documentation from proven client behaviour, and is a label rather than protocol documentation.
Asks the price of the zaap on map_id, from where the character stands.
WHEN TO SEND IT
Whenever you need a zaap's travel price before choosing it. The official client sends it from the world map: when the tooltip of a map with a zaap opens and the price is not cached yet, it marks the map as pending and asks. It asks ONCE per map and reuses the answer.
WHAT COMES BACK
WaypointPriceResponse with the same map_id and the price in kamas. Match the answer by map, not by order.
THE DECLARED LIST IS PADDING. This build gives the message a repeated int32 beside the map id. No client ever fills it.
When you may send it
Requires character_loaded observed Raised by: the world map's tooltip shows a map whose zaap price the client does not know yet inferred Related messages
You will then receive WaypointPriceResponse observed — the price for the same map arrived right after the request in one capture Fields
#FieldTypeMeaningYou set it 1map_idint64The map of the zaap whose travel price you want. (map id)
Echoed back in WaypointPriceResponse.map_id.always
  • summary: Asks what travelling to the zaap on one map costs. Answered by WaypointPriceResponse.
  • area: Game.Teleportation
  • 48 vues
What travelling to one zaap costs, in kamas - the answer to WaypointPriceRequest, shown in the world map's tooltip.
Kind response · Area Game.Teleportation
The price of the zaap on one map, in answer to WaypointPriceRequest.
WHAT TO DO WHEN YOU RECEIVE IT
1. MATCH IT BY map_id, not by order. The official client keeps one price per map and only accepts an answer for a map it asked about. 2. IGNORE A PRICE OF 0 OR LESS. The client only stores a positive price; until then the map stays "price unknown". 3. KEEP THE PRICE. The client asks once per map and reuses the answer for as long as it keeps its cache; nothing in this message tells you it changed.
SEND NOTHING BACK.
THE OTHER MEMBERS ARE PADDING. This build declares a second int32, a nested record and an enum beside the two real values. The client never reads any of them.
When you may send it
Requires character_loaded observed Related messages
Arrives after WaypointPriceRequest Fields
#FieldTypeMeaningYou set it 3map_idint64The map of the zaap this price is for - the map you asked about in WaypointPriceRequest.map_id. (map id)never 4priceint32What travelling to that zaap costs, shown in the world map's tooltip. (kamas)
The client ignores a value of 0 or less.never
  • summary: What travelling to one zaap costs, in kamas - the answer to WaypointPriceRequest, shown in the world map's tooltip.
  • area: Game.Teleportation
  • 56 vues
Every zaap your character has discovered, as the maps they stand on. Replaces the previous list.
Kind event · Area Game.Teleportation
The full list of zaaps your character knows, as map ids. Each arrival REPLACES the previous list; it is not a delta.
WHAT TO DO WHEN YOU RECEIVE IT
1. Compare it with the list you held: every map id not in the old list is a zaap you just discovered. 2. Replace your list with this one.
WHAT THE OFFICIAL CLIENT DOES WITH IT
For each map id it checks whether the played character already knew it; for each new one it raises a "zaap discovered" notification, which the world map uses to add that map's zaap icon. Then it stores a copy of the whole list in the played character's state.
These are the same map ids as TeleportDestination.map_id for zaap destinations.
Builds pad this message with a second repeated int64 or an int64 that the client never reads.
When you may send it
Requires character_selected inferred Related messages
Unsolicited - nothing you send causes this the server pushes the full list when it changes, typically when you discover a zaap; no request asks for it Fields
#FieldTypeMeaningYou set it 1destinationsrepeated int64The map ids of every zaap your character knows. (map ids)never
  • summary: Every zaap your character has discovered, as the maps they stand on. Replaces the previous list.
  • area: Game.Teleportation
  • 49 vues
Saves the zaap you are using as your respawn point. No payload - the server knows which zaap you are at.
Kind request · Area Game.Teleportation
CARRIES NOTHING, AND DOES NOT NEED TO. You are at one zaap, in its picker; the server knows which one you mean.
WHEN TO SEND IT
While the zaap picker is open (after TeleportDestinationsEvent), when you want THIS zaap to become your respawn point. The official client asks first - "change your saved zaap from A to B?" - and sends it only when the player confirms. From the haven bag's zaap list the same button reads "save in haven bag".
WHAT COMES BACK
ZaapRespawnUpdatedEvent with the new respawn map. Update your own idea of the respawn point from THAT, not from the request.
THE DECLARED MEMBER IS PADDING. Some builds give this message a field. No client has ever written it, and neither should you.
When you may send it
Requires teleport_dialog_open proven Raised by: the player confirms the "save as respawn" prompt of the zaap picker proven Related messages
You will then receive ZaapRespawnUpdatedEvent inferred — the server confirms the new respawn map; the client then moves the respawn mark in the open list. Not captured yet No fields you may set.
  • summary: Saves the zaap you are using as your respawn point. No payload - the server knows which zaap you are at.
  • area: Game.Teleportation
  • 48 vues
Your respawn point is now the zaap on map_id.
Kind event · Area Game.Teleportation
Your saved zaap - where you respawn - changed to the zaap on map_id. It is the answer to ZaapRespawnSaveRequest.
WHAT TO DO WHEN YOU RECEIVE IT
1. Remember map_id as your respawn point. It replaces the spawn_map_id of the last TeleportDestinationsEvent. 2. If a destination list is open, the destination whose map_id matches is now the respawn one; no other is.
WHAT THE OFFICIAL CLIENT DOES WITH IT
It walks the destinations of the open list, sets each one's respawn flag to (its map id == map_id), stores map_id in the zaap service - the same member TeleportDestinationsEvent.spawn_map_id filled - and refreshes the picker.
Builds pad this message with a nested decoy or an unread repeated string.
When you may send it
Requires roleplay_context inferred Related messages
Arrives after ZaapRespawnSaveRequest Fields
#FieldTypeMeaningYou set it 1map_idint64The map of your new respawn zaap. (map id)
Replaces TeleportDestinationsEvent.spawn_map_id.never
  • summary: Your respawn point is now the zaap on map_id.
  • area: Game.Teleportation
  • 47 vues
A fighter driven by the server: a monster or a tax collector.
Kind struct · Area Game.Common
The ai_fighter branch of FightFighterInformation.
BRANCH ON ai_fighter_information: monster_fighter_information for a monster - see MonsterFighter - or tax_collector_information for a tax collector - see TaxCollectorFighter.
Some builds declare a tax-collector record outside the oneof; the client never reads it.
Not sent on its own — it travels inside the fighter record of FightFighterShowEvent. inferred
Used by
FightFighterInformation Fields
#FieldTypeMeaningYou set it 2tax_collector_informationTaxCollectorFighterSet for a tax collector - see TaxCollectorFighter.never 3monster_fighter_informationMonsterFighterSet for a monster - see MonsterFighter.never
  • summary: A fighter driven by the server: a monster or a tax collector.
  • area: Game.Common
  • 39 vues
One fighter's counters for the cast spell after a cast: casts this turn, casts per target, and cooldown.
Kind struct · Area Game.Action
One entry of TargetedAbility.ability_refresh_infos. The spell is the one of the enclosing SpellCast.
READ IT LIKE THIS
1. AbilityRefreshInfo.fighter_id: whose counters these are. 2. AbilityRefreshInfo.cast_count: how many times that fighter has cast the spell this turn. 3. AbilityRefreshInfo.target_cast_counts: the same count per target fighter. 4. AbilityRefreshInfo.cooldown: the spell's cooldown for that fighter. 5. Replace (do not add to) the fighter's stored values for this spell.
The record's other int32 is never read by the client: ignore it.
Not sent on its own — it travels inside TargetedAbility.ability_refresh_infos. proven
Used by
TargetedAbility Fields
#FieldTypeMeaningYou set it 1cast_countint32How many times the fighter has cast the spell this turn.
Stored together with the per-target counts.never 2cooldownint32The spell's cooldown for this fighter. (turns)
Becomes the spell's cooldown entry for the fighter.never 3target_cast_countsrepeated CastCountOneSomeoneHow many times the fighter has cast the spell on each target this turn.
One record per target fighter.never 4fighter_idint64The fighter whose counters these are. (fighter (entity) id)
The client files the entry under this id and refreshes that fighter's spell counters.never
  • summary: One fighter's counters for the cast spell after a cast: casts this turn, casts per target, and cooldown.
  • area: Game.Action
  • 38 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.