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
The complete list of active buffs and debuffs of every fighter. It replaces the client's buff state: missing buffs are removed, changed ones updated, new ones added.
Kind event · Area Game.Fight
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 server's full list of every active fight effect (buff or debuff) on every fighter. After it, the client holds EXACTLY this list.
WHY IT EXISTS
Buffs normally change one at a time inside the actions that cause them: FightBoostAddEvent adds one (played as a step of the current action), FightBoostRemoveEvent and the removal actions of GameActionFightEvent take them away. This event is the full resynchronisation that does not depend on that history: whatever the client holds, the list wins.
WHEN IT ARRIVES
- At fight start. In a 3.7.10.10 capture it arrived EMPTY when the fight started: nobody has a buff yet, so any buff left over is dropped. - Whenever the server resynchronises buffs (inferred: the client accepts it at any moment). It is applied IMMEDIATELY, not queued in the action sequence being played (unlike FightBoostAddEvent).
WHAT TO DO WHEN YOU RECEIVE IT
1. Take every entry of FightBoostSynchronizeEvent.effects (FightRemovableEffectExtendedInformation: the effect, the action that applied it and the fighter who cast it). The buff's identity is its uid (FightRemovableEffect.uid). 2. REMOVE every buff you hold, on any fighter, whose uid is not in the list. 3. For each entry, look for the buff with that uid on its target (FightRemovableEffect.target_id): - you hold it: if any of its values differ (effect parameters, start and end turns, kind), UPDATE it to the entry's values; - you do not: ADD it as a new buff, cast by source_id through action_id. 4. An EMPTY list removes every buff of every fighter. 5. SEND NOTHING BACK.
When you may send it
Requires character_loaded inferred Raised by: the server resynchronising every fighter's buffs (at least at fight start) inferred Related messages
Unsolicited - nothing you send causes this pushed by the server (seen empty at fight start in a 3.7.10.10 capture); no request asks for it Fields
#FieldTypeMeaningYou set it 1effectsrepeated FightRemovableEffectExtendedInformationEvery active fight effect, with its action and caster.
The whole buff state: buffs missing from it are removed, changed ones updated, new ones added.
An empty list clears every buff.never
  • summary: The complete list of active buffs and debuffs of every fighter. It replaces the client's buff state: missing buffs are removed, changed ones updated, new ones added.
  • area: Game.Fight
  • 35 vues
A player character fighter's level, breed, gender and alignment.
Kind struct · Area Game.Common
The character_information branch of NamedFighterInformation.
level is the character level (the client clamps it to 200 for display); breed_id the character's breed (class) - look it up in the breeds data; gender its Gender; alignment_information its AlignmentInformation.
DO NOT TELL LEVEL AND BREED APART BY POSITION. Both are int32 and their numbers and order change between builds.
Some builds declare a second alignment record and an extra enum here; the client never reads them.
Not sent on its own — it travels inside the fighter record of FightFighterShowEvent. inferred
Used by
NamedFighterInformation Fields
#FieldTypeMeaningYou set it 2breed_idint32The character's breed (class). (breed id)never 3alignment_informationAlignmentInformationThe character's alignment - see AlignmentInformation.never 4genderGenderThe character's gender - see Gender.never 6levelint32The character's level. (level)
The client caps it at 200 for display.never
  • summary: A player character fighter's level, breed, gender and alignment.
  • area: Game.Common
  • 37 vues
A fighter's characteristics in fight, plus whether it was summoned, by whom, and how visible it is.
Kind struct · Area Game.Common
The stats of FightFighterInformation.
characteristics is the list of CharacterCharacteristic values: life points, action and movement points, resistances... For an opposing fighter they come as plain totals.
summoned is true for a summoned creature, and summoner is then the id of the fighter that summoned it; the client gives a summon its summoner's level. invisibility_state is the fighter's visibility - see FightInvisibilityState. An invisible fighter cannot be targeted.
Not sent on its own — it travels inside the fighter record of FightFighterShowEvent. inferred
Used by
FightFighterInformation FightRefreshCharacterStatsEvent SummonContextInformation Fields
#FieldTypeMeaningYou set it 1invisibility_stateFightInvisibilityStateHow visible the fighter is - see FightInvisibilityState.never 2summonedboolWhether this fighter is a summon.never 3summonerint64Id of the fighter that summoned this one. (fighter id)
Meaningful when summoned is true.never 4characteristicsrepeated CharacterCharacteristicThe fighter's characteristic values - see CharacterCharacteristic.never
  • summary: A fighter's characteristics in fight, plus whether it was summoned, by whom, and how visible it is.
  • area: Game.Common
  • 35 vues
Which fighter you now command in the fight, who commands it, and the spells, spell bar and modifiers to use for it.
Kind event · Area Game.Fight
Hands you the controls of ONE fighter: your own character, or a creature you command (a summon or another controllable fighter; beta called this a slave switch). It carries everything the spell bar needs for that fighter.
WHAT TO DO WHEN YOU RECEIVE IT
1. FIND OUT WHO COMMANDS WHOM. FightControlEvent.slave_id is the fighter you are now given; FightControlEvent.master_id is the fighter that commands it. When master_id is your character's id, you command slave_id: add it to the fighters you control. master_id is optional; do not assume it is you when it is absent. 2. REPLACE that fighter's spell list with FightControlEvent.slave_spells. It is the whole list (the weapon is one of its entries), not a change to the previous one. 3. REPLACE the spell bar with FightControlEvent.shortcuts, the bar to show while you command this fighter. Each entry carries its own slot index. 4. REPLACE that fighter's modifiers: FightControlEvent.spell_modifiers apply to individual spells, FightControlEvent.weapon_modifiers to its weapon. 5. SEND NOTHING BACK.
WHEN IT ARRIVES. In a 3.7.10.10 capture of a fight against monsters it arrived during the player's own turn, between two cooldown refreshes and just before the player's first spell cast, with BOTH ids set to the player's character: in an ordinary fight the server hands you the controls of yourself.
WHAT THE OFFICIAL CLIENT DOES
- The fight frame stores master_id on the controlled fighter's entity record. If master_id is the local player's id, it adds slave_id to its set of fighters the player controls and refreshes the fight view. Then it raises a control-changed notification carrying (slave_id, master_id). - The spells frame rebuilds the fighter's spells from slave_spells and the spell bar from shortcuts, both keyed by slave_id. - The modifier service replaces slave_id's spell modifiers and files each weapon modifier under spell id 0, the weapon's slot.
When you may send it
Requires character_loaded inferred Related messages
Unsolicited - nothing you send causes this the server sends it when control of a fighter starts or changes; no request asks for it Fields
#FieldTypeMeaningYou set it 1spell_modifiersrepeated SpellModifierModifiers currently applied to the controlled fighter's spells.
Element type SpellModifier. Beta keeps this list inside the fighter's characteristic sheet (CharacterCharacteristics, which its predecessor FightSlaveSwitchContextEvent carried) under the same name; here it travels on its own.never 2shortcutsrepeated ShortcutThe spell bar to show while you command this fighter.
Element type Shortcut, the same record as ShortcutBarContentEvent.shortcuts. Only occupied slots appear; each carries its slot index.never 3weapon_modifiersrepeated WeaponModifierModifiers currently applied to the controlled fighter's weapon.
Each entry is a value, a modifier type and an action type, the two enums of SpellModifier without a spell id. The client files them under spell id 0, the weapon.never 4master_idint64The fighter that commands the controlled fighter.
Explicit presence: absent is not the same as zero. (entity id)
Observed: 785381589283
Optional. The client compares it with the local player's id: when they are equal, the player commands FightControlEvent.slave_id.
Also stored on the controlled fighter's entity record.never 5slave_spellsrepeated SpellItemEvery spell the controlled fighter can use, its weapon included.
Element type SpellItem (spell id, level, availability and a kind; the weapon entry has spell id 0). Replaces the previous list.never 6slave_idint64The fighter you are given control of: whose spells, bar and modifiers this message carries. (entity id)
Observed: 785381589283
Your own character's id when you play yourself.never
  • summary: Which fighter you now command in the fight, who commands it, and the spells, spell bar and modifiers to use for it.
  • area: Game.Fight
  • 38 vues
How many times one triggered effect has fired on one fighter.
Kind struct · Area Game.Action
One entry of GameActionUpdateEffectTriggerCountEvent.effects_count_on_target.
READ IT LIKE THIS
1. FightEffectTriggerCount.target_id: the fighter carrying the buff. 2. FightEffectTriggerCount.effect_id: the uid of the spell effect behind the buff (the effect's data uid, not an effect type and not the buff's own uid). 3. FightEffectTriggerCount.count: how many times that effect has now triggered; replace the buff's counter with it.
Not sent on its own — it travels inside GameActionUpdateEffectTriggerCountEvent.effects_count_on_target. proven
Used by
GameActionUpdateEffectTriggerCountEvent Fields
#FieldTypeMeaningYou set it 1countint32How many times the effect has triggered.
Replaces the buff's trigger counter.never 2target_idint64The fighter carrying the buff. (fighter (entity) id)never 3effect_idint32Uid of the spell effect behind the buff. (effect uid (game data))
Matched against the buff's effect (EffectInstanceData.effectUid).never
  • summary: How many times one triggered effect has fired on one fighter.
  • area: Game.Action
  • 34 vues
One combatant: where and on which team it spawned, its fight characteristics, and who or what it is.
Kind struct · Area Game.Common
The fighter branch of ActorInformation, sent for every combatant by FightFighterShowEvent and the fight synchronisation messages.
spawn_information gives the fighter's team, whether it is alive and its position - see SpawnInformation. stats are its fight characteristics - see FightCharacteristics: life, action and movement points, resistances, and the summoned/summoner and invisibility state. wave is the monster wave the fighter belongs to (0 for the first wave; the fight timeline shows it). previous_positions are cells the fighter stood on earlier in the fight.
BRANCH ON fighter_information TO KNOW WHAT THE FIGHTER IS. named_fighter is a player character (or a mutant), ai_fighter a monster or a tax collector, and entity_fighter a companion bound to a master. The level lives inside the branch.
Other members may appear (an int64 the client uses to resolve the fighter's effective level, a map the monster converter reads); they have no canonical name yet. Do not branch on them.
OTHER MEMBERS ARE NOT NAMED. Recent builds add a map of int32 to int32 (the client reads only key 0 and passes the value to the routine that creates the fighter's on-screen entity), an optional int64 (copied into the fighter's properties), a small nested record and a string (neither is read by the client). None has a proven meaning: ignore them.
Not sent on its own — it travels inside the fighter record of FightFighterShowEvent. inferred
Used by
ActorInformation Fields
#FieldTypeMeaningYou set it 4previous_positionsrepeated int32Cells the fighter previously stood on in this fight. (cell id)never 7statsFightCharacteristicsThe fighter's fight characteristics - see FightCharacteristics.never 8spawn_informationSpawnInformationTeam, liveness and position the fighter spawned with - see SpawnInformation.never 9waveint32Monster wave the fighter belongs to. (wave index)
0 for fighters present from the start.never 5named_fighterNamedFighterInformationSet for a player character or a mutant - see NamedFighterInformation.never 6ai_fighterAIFighterInformationSet for a monster or a tax collector - see AIFighterInformation.never 11entity_fighterEntityFighterInformationSet for a companion bound to a master - see EntityFighterInformation.never
  • summary: One combatant: where and on which team it spawned, its fight characteristics, and who or what it is.
  • area: Game.Common
  • 37 vues
How visible a fighter is: invisible, detected or visible.
Kind enum · Area Game.Common
The invisibility_state of FightCharacteristics, also carried by the fight action that changes a fighter's visibility.
HOW TO READ IT
1. INVISIBLE: you cannot target the fighter; the client refuses to hand out its entity to targeting code while it is in this state. 2. DETECTED: the client draws the fighter in a dedicated render mode. 3. VISIBLE: the fighter is drawn normally. When a fighter becomes VISIBLE after being INVISIBLE or DETECTED, the client re-checks what else stands on its cell.
Not sent on its own — it travels inside the fighter record of FightFighterShowEvent. inferred
Used by
FightCharacteristics Invisibility Values
ValueNumberMeaning INVISIBLE0Cannot be targeted.
The client refuses to hand out the entity of a fighter in this state. DETECTED1Drawn in a dedicated render mode. VISIBLE2Drawn normally.
  • summary: How visible a fighter is: invisible, detected or visible.
  • area: Game.Common
  • 37 vues
Where the fight map really is: its map id, subarea and, for an ordinary map, its world coordinates.
Kind event · Area Game.Gamemap
Sent while a fight is being set up, so the client can show where the fight takes place. A fight runs on its own map: the map id is that fight map's id, the same value as MapCurrentEvent.map_id and the one to echo in ContextReadyRequest.map_id.
USE THESE COORDINATES, NOT A LOOKUP. When FightMapInformationEvent.coordinates is set, the client takes the map's world position from it instead of looking the fight map up in its map data. A script that converts the map id itself shows the wrong place.
Read FightMapInformationEvent.subarea_id for the subarea name and treat the complement as optional: at most one of coordinates or anomaly information is set.
When you may send it
Requires context_ready observed Related messages
Unsolicited - nothing you send causes this the server sends it with the other fight-placement events Fields
#FieldTypeMeaningYou set it 3map_idint64Id of the map the fight takes place on. (map id)
Same value as MapCurrentEvent.map_id during the fight; echo it in ContextReadyRequest.map_id.never 5subarea_idint32Subarea the fight map belongs to. (subarea id)
Look it up in the subarea data for the area name.never 1coordinatesMapCoordinatesWorld coordinates to show for the fight map.
Element type MapCoordinates. When set, it replaces the position the client would derive from the map id.never 4anomaly_informationMapComplementaryAnomalyInformationAnomaly details when the fight map is an anomaly map.
Same record as MapComplementaryInformationEvent.anomaly_information.
Named from that type only: no dumped client reads it here, so it stays obfuscated on builds where that record is not recovered.never
  • summary: Where the fight map really is: its map id, subarea and, for an ordinary map, its world coordinates.
  • area: Game.Gamemap
  • 38 vues
A mutant fighter's power level.
Kind struct · Area Game.Common
The mutant_information branch of NamedFighterInformation.
power_level is the mutant's power level; the client stores it where a monster's grade goes.
FightMutantInformation.monster_gid is the monster the mutant is playing as: the client stores it where a monster fighter's MonsterFighter.monster_gid goes and looks it up in the monsters data the same way.
Not sent on its own — it travels inside the fighter record of FightFighterShowEvent. inferred
Used by
NamedFighterInformation Fields
#FieldTypeMeaningYou set it 1monster_gidint32The monster the mutant is playing as: an id of the monsters game data.
The client stores it where a monster fighter's monster_gid goes (the creature-model slot), so it is looked up the same way. Named after that member; beta's record has no such field.never 2power_levelint32The mutant's power level. (power level)never
  • summary: A mutant fighter's power level.
  • area: Game.Common
  • 36 vues
A buff or debuff on a fighter: which spell and spell effect it comes from, who carries it, and its id.
Kind struct · Area Game.Common
One effect (a buff) currently applied to a fighter. It always arrives wrapped in FightRemovableEffectExtendedInformation, which adds the caster and the effect action; FightBoostAddEvent adds one, FightBoostSynchronizeEvent refreshes them all, and FightJoinRunningEvent hands back the running fight's effects.
THE UID IS THE KEY. FightRemovableEffect.uid identifies the effect for its whole life: later updates, removals and full refreshes refer to it, and a refresh list replaces every effect whose uid it does not contain. A negative uid means "no id".
TO DESCRIBE THE EFFECT
1. Look up FightRemovableEffect.spell_id in the spell data, at level FightRemovableEffect.spell_level. 2. In that spell level, find the effect whose effect uid is FightRemovableEffect.effect_id, in the critical-hit effects when FightRemovableEffect.critical is set, in the normal effects otherwise. That game-data effect gives the action and the characteristic. 3. FightRemovableEffect.target_id is the fighter that carries it.
DURATION
4. The effect is active from FightRemovableEffect.start_turn to FightRemovableEffect.end_turn, both FightTurn positions (round, then order). Its remaining duration is the number of turns from now to end_turn.
VALUE
5. The three params replace the game-data effect's three parameters, for every kind: FightRemovableEffect.first_param = parameter 0 (the amount), FightRemovableEffect.second_param = parameter 1, FightRemovableEffect.third_param = parameter 2. 6. For a characteristic boost or malus the value is first_param, negated when the game-data effect's characteristic operator is "-". 7. When FightRemovableEffect.effect_kind is TRIGGERED, the three params are dice (count, sides, flat value) and FightRemovableEffect.triggers says when it fires.
STATE
8. When effect_kind is STATE, the fighter is in a state while the effect lasts; the state id is FightRemovableEffect.third_param.
WHAT CAN REMOVE IT
9. FightRemovableEffect.dissipation_state: any dispel, only the fighter's death, only a strong dispel, or nothing.
Since 3.3 the record is flat: the per-kind sub-records of older builds are gone. Two declared members (a repeated string and an int32) are never read: padding.
Not sent on its own — it travels inside FightRemovableEffectExtendedInformation.effect. proven
Used by
FightRemovableEffectExtendedInformation Fields
#FieldTypeMeaningYou set it 1third_paramint32The effect's parameter 2: the state id of a STATE effect (for dice: the flat value).
Beta's name on FightTriggeredEffect and FightTemporaryBoostEffect.Details. BuffChange's param3.never 2start_turnFightTurnThe turn the effect starts.
Name ours, after the client's BuffChange(startTurn) and FightTurnWindow.start, which receive it. Beta had turn_duration instead. Type FightTurn (round, order).never 3criticalboolTrue when the effect comes from the spell's critical-hit effects.
Name ours: the client looks the effect up in the spell level's criticalEffect list when it is set (the effects list otherwise) and builds the effect wrapper with the same flag it uses for critical effects.never 4end_turnFightTurnThe turn the effect ends: the effect lasts from start_turn to this turn.
Name ours, after BuffChange(endTurn) and FightTurnWindow.end. Replaces beta's turn_duration. Type FightTurn (round, order).never 5uidint32Identifier of this effect instance for its whole life. (buff id)
Negative means no id. Refreshes, updates and removals refer to it.never 6effect_idint32Which effect of that spell level this is. (spell effect uid)
Matched against the effect uids of the spell level's effects.never 8target_idint64The fighter that carries the effect. (fighter id)
Not the caster: that is the wrapper's source_id.never 9dissipation_stateEffectDissipationStateHow the effect can be removed: by any dispel, only by death, only by a strong dispel, or never.
Beta's member of the same record. Its enum is EffectDissipationState: the client maps it onto its own dispellable code, which beta's client spells DISPELLABLE, DISPELLABLE_BY_DEATH, DISPELLABLE_BY_STRONG_DISPEL, REALLY_NOT_DISPELLABLE.never 10first_paramint32The effect's parameter 0: the amount of a boost or malus (for dice: the dice count).
Beta's name for this parameter on FightTriggeredEffect and FightTemporaryBoostEffect.Details; the flat record carries it for every kind. The client hands it to BuffChange as param1 and, for a triggered effect, to the effect instance's dice.never 11effect_kindRemovableEffectKindWhich kind of effect this is; decides how the params are read.
Name ours. Its enum is RemovableEffectKind: STATE and TRIGGERED are proven; values 0, 1, 2, 4 and 6 are the boost family (a characteristic change by first_param).never 13second_paramint32Second parameter of the effect (for a dice effect: the dice sides).
Beta's name on FightTriggeredEffect and FightTemporaryBoostEffect.Details. BuffChange's param2.never 14triggersstringWhen the effect triggers, in the effect-trigger notation of the game data.
Name ours, after EffectInstanceData.triggers (game data), the field the client copies it into.never 15spell_levelint32The level (rank) of the spell the effect comes from.
Name ours: the client passes it as the rank to SpellData.GetSpellLevelData, and as the grade of the effect wrapper. Beta's record has no such member.never 16spell_idint32The spell the effect comes from. (spell id)
The client's own log names it: 'Spell #{0} from buff #{1} seems unknown'.never
  • summary: A buff or debuff on a fighter: which spell and spell effect it comes from, who carries it, and its id.
  • area: Game.Common
  • 36 vues
One active fight effect (buff or debuff) together with the action that applied it and the fighter who cast it.
Kind struct · Area Game.Common
One entry of a fight's effect list: the effect itself plus who applied it and through which action. It travels in lists sent when a fight is joined or resumed, in the buff-list refresh sent at fight start (empty in a fresh fight), and on its own when a single effect is applied.
TO BUILD THE BUFF LIST OF A FIGHTER
1. Read FightRemovableEffectExtendedInformation.effect: its FightRemovableEffect.target_id is the fighter that carries the effect, its FightRemovableEffect.uid identifies it. 2. FightRemovableEffectExtendedInformation.source_id is the fighter who applied it - not the carrier. 3. FightRemovableEffectExtendedInformation.action_id is the effect action (the effect type id of the game data), not a spell id.
When a list replaces the whole buff state, drop every buff whose uid is not in the list: the client does exactly that.
Not sent on its own — a record carried inside fight messages, never sent on its own. proven
Used by
FightBoostAddEvent FightBoostSynchronizeEvent FightJoinRunningEvent Fields
#FieldTypeMeaningYou set it 1effectFightRemovableEffectThe effect itself: what it does, to whom, for how long.
Its carrier is the effect's target_id, not this entry's source_id.never 2action_idint32The effect action (effect type id of the game data) that applied this effect. (effect action id)
The client converts it to its ActionId enum before building the buff.never 3source_idint64The fighter who applied the effect. (fighter id)
Becomes the buff's caster; the carrier is the effect's target_id.never
  • summary: One active fight effect (buff or debuff) together with the action that applied it and the fighter who cast it.
  • area: Game.Common
  • 36 vues
How many times a fighter has cast one spell, in total and on each target.
Kind struct · Area Game.Common
One entry of RefreshSpellCastStateEvent.cast_counts or RefreshSpellCastStateEvent.global_cast_counts.
READ IT LIKE THIS
1. FightSpellCast.spell_id: the spell. 2. FightSpellCast.cast_count: how many times it was cast. 3. FightSpellCast.target_cast_counts: the same count per target fighter (CastCountOneSomeone). 4. Replace (do not add to) the stored values of that spell.
In the global list only cast_count matters; the client ignores the per-target list there.
Not sent on its own — it travels inside RefreshSpellCastStateEvent.cast_counts. proven
Used by
FightResume FighterResumeInfo RefreshSpellCastStateEvent Fields
#FieldTypeMeaningYou set it 1target_cast_countsrepeated CastCountOneSomeoneHow many times the spell was cast on each target.
One record per target fighter; checked against maxCastPerTarget / maxGlobalCastPerTarget.
Ignored for entries of the global list.never 2cast_countint32How many times the spell was cast.
In cast_counts: checked against the spell level's maxCastPerTurn; in global_cast_counts: against maxGlobalCastPerTurn.never 3spell_idint32The spell these counts are for. (spell id)
Must be the spell of the counters it updates; the client rejects it otherwise.never
  • summary: How many times a fighter has cast one spell, in total and on each target.
  • area: Game.Common
  • 36 vues
A cast's outcome: normal, critical hit, or the third outcome. The type is named; its values are not.
Kind enum · Area Game.Action
The type of TargetedAbility.critical.
THE VALUES ARE NOT NAMED HERE. Beta declares NORMAL = 0, CRITICAL_HIT = 1, CRITICAL_FAIL = 2; enum numbers are not trusted across builds. What the 3.x client does: value 0 is the ordinary cast (an absent field), value 1 sets the cast context's critical-hit flag, value 2 sets another flag and the cast is then NOT counted in the caster's cast counters; the cast step and the critical-effect step receive the value as their outcome.
Not sent on its own — an enum is never sent on its own. inferred
Used by
TargetedAbility No fields you may set.
  • summary: A cast's outcome: normal, critical hit, or the third outcome. The type is named; its values are not.
  • area: Game.Action
  • 41 vues
A spell of a fighter and the number of turns before it can be cast again.
Kind struct · Area Game.Common
One entry of RefreshSpellCastStateEvent.spell_cool_downs.
READ IT LIKE THIS
1. FightSpellCoolDown.spell_id: the spell. 2. FightSpellCoolDown.cool_down: turns left before the fighter can cast it again (63: it can no longer be cast at all).
The record's enum is never read by the client: ignore it.
Not sent on its own — it travels inside RefreshSpellCastStateEvent.spell_cool_downs. proven
Used by
FighterResumeInfo RefreshSpellCastStateEvent Fields
#FieldTypeMeaningYou set it 2cool_downint32Turns left before the spell can be cast again. (turns)
Becomes the spell's cooldown for the fighter; the client never counts it down by itself.
63 is not a number of turns: the client treats the spell as no longer castable.never 3spell_idint32The spell on cooldown. (spell id)never
  • summary: A spell of a fighter and the number of turns before it can be cast again.
  • area: Game.Common
  • 35 vues
The placement cells of the two sides of a fight: one list for the attackers, one for the defenders.
Kind struct · Area Game.Fight.Preparation
Two lists of map cell ids: where each side of a fight may stand before it starts. It travels inside FightPlacementPossiblePositionsEvent.starting_positions (and in the fight-map preview the spectator window shows).
THE CHALLENGERS ARE THE ATTACKERS. FightStartingPositions.challengers_positions holds the cells of the side that started the fight - the side of FightStartingEvent.attacker_id. When your character attacks a monster group, your cell is in this list and the monsters' cells are in FightStartingPositions.defenders_positions. Do not pick a list by its field number or its position in the message.
TO PLACE YOUR CHARACTER
1. Take the list of your side (challengers if your side attacked). 2. Send FightPlacementPositionRequest with one of its cells.
The client draws both lists, each in its own colour, whatever your side.
Not sent on its own — it travels inside FightPlacementPossiblePositionsEvent.starting_positions and the fight-map preview data. proven
Used by
FightPlacementPossiblePositionsEvent Fields
#FieldTypeMeaningYou set it 1defenders_positionsrepeated int32Cells the attacked side may be placed on. (map cell ids)
When your character attacks a monster group, the monsters stand on these cells.never 2challengers_positionsrepeated int32Cells the attacking side may be placed on. (map cell ids)
The side that started the fight; when your character attacks, your own starting cell is in this list.never
  • summary: The placement cells of the two sides of a fight: one list for the attackers, one for the defenders.
  • area: Game.Fight.Preparation
  • 36 vues
A player-character member of a fight team: name, level and optional alliance.
Kind struct · Area Game.Fight
The FightTeamMemberInformation.character_member record.
TO SHOW IT, use FightTeamMemberCharacter.name and FightTeamMemberCharacter.level directly. When FightTeamMemberCharacter.alliance_info is set, show its tag (BasicAllianceInformation.alliance_tag).
Not sent on its own — it travels only inside FightTeamMemberInformation. proven
Used by
FightTeamMemberInformation Fields
#FieldTypeMeaningYou set it 2namestringThe character's name.
The record's only string the client copies.never 3levelint32The character's level.
The record's only int32 the client copies.never 4alliance_infoBasicAllianceInformationThe character's alliance, when it has one.
Absent means no alliance; the client then builds the member without one.never
  • summary: A player-character member of a fight team: name, level and optional alliance.
  • area: Game.Fight
  • 37 vues
An entity member of a fight team (a companion), with its model, level and owner.
Kind struct · Area Game.Fight
The FightTeamMemberInformation.entity_member record.
TO SHOW IT, look FightTeamMemberEntity.entity_model_id up in the companion table and attach the entity to the team member whose id is FightTeamMemberEntity.master_id.
Not sent on its own — it travels only inside FightTeamMemberInformation. proven
Used by
FightTeamMemberInformation Fields
#FieldTypeMeaningYou set it 1levelint32The entity's level.
The remaining int32 the client copies into its object after the model id; no later code reads it in the dumped builds.never 2master_idint64Fighter id of the member that owns this entity. (entity id)
The tooltip attaches the entity to the preceding fighter whose id equals this value.never 3entity_model_idint32Which companion model this entity is. (companion id)
The tooltip looks it up in the companion table.never
  • summary: An entity member of a fight team (a companion), with its model, level and owner.
  • area: Game.Fight
  • 36 vues
One member of a fight team: its id plus exactly one kind-specific record (character, entity, monster or tax collector).
Kind struct · Area Game.Fight
One entry of FightTeamMembersInformation.team_members.
HOW TO READ IT
1. Take FightTeamMemberInformation.member_id: the fighter's id, the same id the fight later uses for that fighter. 2. Look at which member of FightTeamMemberInformation.information is set; exactly one is: - FightTeamMemberInformation.character_member: a player character, with name, level and optional alliance (FightTeamMemberCharacter); - FightTeamMemberInformation.monster_member: a monster, by monster template id and grade (FightTeamMemberMonster); - FightTeamMemberInformation.tax_collector_member: a tax collector, by its two name ids (FightTeamMemberTaxCollector); - FightTeamMemberInformation.entity_member: a companion-like entity owned by another member (FightTeamMemberEntity). 3. If none is set, the client still keeps the member, by id only.
The map's fight tooltip (the swords) is built from these entries: monsters are named from the monster table at the given grade, tax collectors from their name tables, entities from the companion table, characters from their own name.
Not sent on its own — it travels only as an entry of FightTeamMembersInformation.team_members. proven
Used by
FightTeamMembersInformation Fields
#FieldTypeMeaningYou set it 3member_idint64The member's fighter id. (entity id)
Copied into every client team-member object; the tooltip uses it to attach a companion to its owner.never 1monster_memberFightTeamMemberMonsterSet when the member is a monster.
Identified as the branch whose members the tooltip hands to the monster table and its grade lookup.never 2tax_collector_memberFightTeamMemberTaxCollectorSet when the member is a tax collector.
Identified as the branch whose members the tooltip looks up in the tax-collector first-name and name tables.never 4entity_memberFightTeamMemberEntitySet when the member is an entity owned by another fighter (a companion).
Identified as the branch whose model id the tooltip looks up in the companion table.never 5character_memberFightTeamMemberCharacterSet when the member is a player character.
Identified as the branch whose alliance uid the client parses as a Guid.never
  • summary: One member of a fight team: its id plus exactly one kind-specific record (character, entity, monster or tax collector).
  • area: Game.Fight
  • 39 vues
A monster member of a fight team: which monster, at which grade.
Kind struct · Area Game.Fight
The FightTeamMemberInformation.monster_member record.
TO SHOW IT, look FightTeamMemberMonster.monster_id up in the monster table and take its FightTeamMemberMonster.grade; the grade gives the level the client displays. The record carries no level of its own.
Not sent on its own — it travels only inside FightTeamMemberInformation. proven
Used by
FightTeamMemberInformation Fields
#FieldTypeMeaningYou set it 1monster_idint32The monster template id. (monster template id)
The tooltip looks it up in the monster table.never 2gradeint32The monster's grade within its template.
The tooltip asks the monster template for this grade and shows that grade's level.never
  • summary: A monster member of a fight team: which monster, at which grade.
  • area: Game.Fight
  • 37 vues
A tax collector member of a fight team, named by its two name ids.
Kind struct · Area Game.Fight
The FightTeamMemberInformation.tax_collector_member record.
TO SHOW IT, resolve FightTeamMemberTaxCollector.first_name_id in the first-name table and FightTeamMemberTaxCollector.last_name_id in the name table, and join them with a space. The client shows a tax collector at level 200 regardless of anything here.
Not sent on its own — it travels only inside FightTeamMemberInformation. proven
Used by
FightTeamMemberInformation Fields
#FieldTypeMeaningYou set it 1first_name_idint32Id of the tax collector's first name.
Resolved in the tax-collector first-name table.never 2last_name_idint32Id of the tax collector's last name.
Resolved in the tax-collector name table.never
  • summary: A tax collector member of a fight team, named by its two name ids.
  • area: Game.Fight
  • 39 vues
One action played during a fight: who did it, which action it is, and the payload of exactly one action kind (spell cast, damage, movement, death, summon...).
Kind event · Area Game.Action
The building block of fight playback. Each event is ONE action of the fight: a spell cast, life points lost, a fighter pushed or teleported, a death, a summon, a glyph set or triggered, a look change... It nearly always arrives between a SequenceStartEvent and the matching SequenceEndEvent, with the other actions of the same sequence.
WHAT TO DO WHEN YOU RECEIVE IT
1. Read GameActionFightEvent.source_id: the fighter who performs the action (the caster, the attacker, the thrower, the killer...). 2. Read GameActionFightEvent.action_id: the effect/action id from the game data (ActionId). It tells variants of one kind apart: 300 is a spell cast, and the points-variation and dodge kinds use it to say WHICH points (AP or MP) changed. 3. Exactly one member of the GameActionFightEvent.action oneof is set. Branch on it and apply that kind (see each member below and its record type). 4. Apply the actions in arrival order: they are the sequence's playback script. 5. SEND NOTHING for this event. Acknowledge the whole sequence once, after SequenceEndEvent, with GameActionAcknowledgementRequest.
WHAT THE OFFICIAL CLIENT DOES. The fight sequence service switches on the action kind and turns each one into a playback step (a death step, a slide step, a teleport step, a life-change step...) that it queues in the current sequence; the steps then play one after the other (animations, floating numbers, state updates).
CAPTURE (3.7.10.10, 2026-10-14). A spell cast on yourself: action_id 300, source_id your character, GameActionFightEvent.targeted_ability set (cell 370, target yourself, spell 12718).
When you may send it
Requires character_loaded inferred Related messages
Unsolicited - nothing you send causes this the server streams these during the playback of a fight action sequence; no request asks for them Fields
#FieldTypeMeaningYou set it 22action_idint32The action's id from the game data (ActionId): which effect this is. 300 is a spell cast.
The client converts it to its ActionId type and hands it to the step builders; the points-variation and dodge kinds use it to tell AP from MP.never 36source_idint64The fighter who performs the action (caster, attacker, thrower, killer, summoner...). (fighter (entity) id)never 1change_teamChangeTeamThe action's source switches to another team (it changes sides): ChangeTeam.never 2targeted_abilityTargetedAbilityA fighter casts a spell or hits with its weapon: TargetedAbility says on which cell and target, and which spell or weapon.never 3deathDeathA fighter dies: Death says which (its summons die with it). The fight log shows ui.fight.isDead.never 4exchange_positionsExchangePositionsSet when the action's source and another fighter swap places: see ExchangePositions.
The client moves both fighters to their new cells in one step.never 5slideSlideSet when a fighter is pushed or pulled along a line: see Slide.
The client animates the fighter from the start cell to the end cell.never 6modify_effects_durationModifyEffectsDurationThe remaining duration of every effect on a fighter changes. See ModifyEffectsDuration.
The client shifts the end turn of each of the fighter's buffs by the delta; the fight log prints ui.fight.effectsModifyDuration.never 7spell_removeSpellRemoveSet when the action ends every effect one spell left on a fighter: see SpellRemove.never 8reflect_damagesReflectDamagesA fighter sends damage back to its attacker: ReflectDamages.never 9mark_cellsMarkCellsA mark (glyph, trap, wall, portal, rune) is laid on the map: MarkCells.never 10carry_characterCarryCharacterSet when the action's source picks up another fighter: see CarryCharacter.
The client attaches the carried fighter to its carrier until a throw or a drop.never 11reduce_damagesReduceDamagesA fighter reduced the damage it was about to take. See ReduceDamages.
The fight log prints ui.fight.reduceDamages.never 12summonsSummonsFighters join the fight (summons, invocations, companions): Summons.never 13points_variationPointsVariationA fighter's action points (AP) or movement points (MP) change. See PointsVariation.
GameActionFightEvent.action_id says which points and how: AP lost / used / won, MP lost / used / won. The fight log prints ui.fight.lostAP, winAP, lostMP or winMP.never 14invisibilityInvisibilityA fighter becomes invisible, detected or visible again: Invisibility.never 15invisible_detectedInvisibleDetectedAn invisible fighter is revealed for a moment on a cell (the client shows a ghost there): InvisibleDetected.never 17change_lookChangeLookA fighter's appearance changes (transformation, costume): ChangeLook carries the new look.never 18tackledTackledThe action's source is tackled while leaving a cell: Tackled. The fight log shows ui.fight.dodgeFailed.never 19remove_hit_boxRemoveHitBoxSet when a fighter's body stops covering a cell: see RemoveHitBox.
The client removes the cell from the source fighter's hitbox.never 20teleport_on_same_mapTeleportOnSameMapSet when a fighter is teleported to another cell of the map: see TeleportOnSameMap.
The client moves the fighter to the cell with a teleport step.never 21trigger_glyph_trapTriggerGlyphTrapA mark fires on a fighter: TriggerGlyphTrap.never 23dodge_point_lossDodgePointLossA fighter dodged an attempt to remove its AP or MP. See DodgePointLoss.
GameActionFightEvent.action_id says whether AP or MP were dodged; the fight log prints ui.fight.dodgeAP or ui.fight.dodgeMP.never 24activate_glyph_trapActivateGlyphTrapA mark is switched on or off: ActivateGlyphTrap.never 25execute_scriptExecuteScriptA spell script plays without a regular cast (a trap or glyph effect, a scripted animation): ExecuteScript.never 26vanishVanishA fighter disappears from the map without dying: Vanish.never 27throw_characterThrowCharacterSet when a carrier throws the fighter it carries onto a cell: see ThrowCharacter.
The client plays the throw animation, releases the carried fighter and lands it on the cell.never 28reflect_spellReflectSpellA fighter sends a spell back to its caster: ReflectSpell.never 29drop_characterDropCharacterSet when a carrier puts the fighter it carries down on a cell: see DropCharacter.
If the cell is not a valid map cell, the client uses the target cell of the spell being cast instead.never 30unmark_cellsUnmarkCellsA mark is removed from the map: UnmarkCells.never 31effect_removeEffectRemoveSet when the action ends one effect on a fighter: see EffectRemove.
Before 3.4.18.19 (and in beta) this was not a branch of its own: it was the effect_remove alternative inside SpellRemove.never 33spell_immunitySpellImmunityA fighter is immune to the spell: SpellImmunity.never 34stagingStagingA staging (camera / screen effect) sequence plays: Staging.never 35killKillThe action's source kills a fighter: Kill says which. The fight log shows ui.fight.killed.never 37life_points_lostLifePointsLostA fighter loses life points: damage, with the shield points it absorbed. See LifePointsLost.
The client queues a shield-loss step when shield points were lost, then a life step; its fight log prints ui.fight.lifeLoss / ui.fight.lostShieldPoints.never 38add_hit_boxAddHitBoxSet when a fighter's body grows to cover one more cell: see AddHitBox.
The client adds the cell to the source fighter's hitbox (the cells it occupies).never 39life_points_gainLifePointsGainA fighter is healed. See LifePointsGain.
The client queues a life step with the gained amount; its fight log prints ui.fight.lifeGain.never 40steal_kamaStealKamaThe source fighter steals kamas from another fighter. See StealKama.
The fight log prints ui.fight.stealMoney.never
  • summary: One action played during a fight: who did it, which action it is, and the payload of exactly one action kind (spell cast, damage, movement, death, summon...).
  • area: Game.Action
  • 43 vues
One item inside an action-item announcement: its effects, plus integral members that are deliberately left unnamed.
Kind struct · Area Game.Inventory
This name is not Ankama's. It was chosen for this documentation from proven client behaviour, and is a label rather than protocol documentation.
One item listed by a GameActionItem in an action-item announcement. It is a display description, not an inventory record.
THE NAME IS OURS. No Ankama source names this record: it has no nested type, so the client's type-name table does not list it, and it postdates both beta and the 3.2 name map. Do not confuse it with ItemMinimalInformation, the NPC-shop item record, which beta's older GameActionItem used to carry.
ONLY effects IS NAMED HERE, AND THAT IS DELIBERATE. The record carries integral members whose values the client does pass into its item factory, but telling the template id apart from the quantity needs a role proof this signature does not have. They stand with their obfuscated names; do not read meaning into their position.
If you need the real quantity or template id of something you were just given, read it from the inventory - see InventoryContentEvent - rather than from here.
A repeated bool member is likewise untouched: it may be a decoy or protocol state the game has not started using.
Not sent on its own — it is only ever reached inside GameActionItem.items. inferred
Used by
GameActionItem Fields
#FieldTypeMeaningYou set it 3effectsrepeated ObjectEffectThe effects the item carries.
Element type ObjectEffect - branch on its oneof.never
  • summary: One item inside an action-item announcement: its effects, plus integral members that are deliberately left unnamed.
  • area: Game.Inventory
  • 35 vues
How many times triggered effects have fired on their fighters; updates the counter of each matching buff.
Kind event · Area Game.Action
Updates the trigger counter of buffs (effects that fire when something happens, a limited number of times).
WHAT TO DO WHEN YOU RECEIVE IT
1. For each entry of GameActionUpdateEffectTriggerCountEvent.effects_count_on_target (FightEffectTriggerCount): a. take the buffs of the fighter FightEffectTriggerCount.target_id; b. find the buff whose spell effect has the uid FightEffectTriggerCount.effect_id; c. set that buff's trigger count to FightEffectTriggerCount.count (replace, do not add). 2. An entry that matches no buff changes nothing. 3. SEND NOTHING BACK.
WHEN IT ARRIVES. In a 3.7.10.10 capture it carried one entry right after a buff was added during the player's turn: count 1 for the player's own buff of effect uid 250172.
WHAT THE OFFICIAL CLIENT DOES. The fight buff handler asks the buff service for the target's buffs and, among the buffs of one kind, writes the count into the one whose effect (EffectInstanceData.effectUid) matches.
When you may send it
Requires character_loaded inferred Related messages
Unsolicited - nothing you send causes this the server pushes it when a triggered effect fires; no request asks for it Fields
#FieldTypeMeaningYou set it 1effects_count_on_targetrepeated FightEffectTriggerCountOne trigger count per (fighter, effect).
Each entry updates one buff's trigger counter.never
  • summary: How many times triggered effects have fired on their fighters; updates the counter of each matching buff.
  • area: Game.Action
  • 37 vues
A fighter becomes invisible, visible again, or detected.
Kind struct · Area Game.Action
The invisibility action of GameActionFightEvent: a fighter's visibility state changes.
READ IT LIKE THIS
1. Invisibility.target_id is the fighter. 2. Invisibility.invisibility_state is its new FightInvisibilityState: store it on the fighter. While a fighter is invisible to you, do not rely on the cell you last saw it on. 3. SEND NOTHING BACK.
WHAT THE CLIENT DOES. Its fight sequencer queues the fight's change-visibility step, which stores the state on the fighter's entity information and shows, hides or fades the fighter's sprite.
Not sent on its own — it travels inside GameActionFightEvent.invisibility. proven
Used by
GameActionFightEvent Fields
#FieldTypeMeaningYou set it 1invisibility_stateFightInvisibilityStateThe fighter's new visibility state.
See FightInvisibilityState.never 2target_idint64The fighter whose visibility changes. (fighter (entity) id)never
  • summary: A fighter becomes invisible, visible again, or detected.
  • area: Game.Action
  • 37 vues
An invisible fighter is spotted on a cell.
Kind struct · Area Game.Action
The invisible_detected action of GameActionFightEvent: an invisible fighter is revealed for a moment, typically because something hit or touched it.
READ IT LIKE THIS
1. InvisibleDetected.target_id is the invisible fighter. 2. InvisibleDetected.cell is where it is: record it as the fighter's current cell. It stays invisible; this is only a glimpse of its position. 3. SEND NOTHING BACK.
WHAT THE CLIENT DOES. It moves the fighter's known position to the cell, then its fight sequencer plays a short step that shows a fading copy of the acting fighter's sprite (GameActionFightEvent.source_id) on that cell (3.3.6.6 still names the step class FightInvisibleTemporarilyDetectedStep).
Not sent on its own — it travels inside GameActionFightEvent.invisible_detected. proven
Used by
GameActionFightEvent Fields
#FieldTypeMeaningYou set it 1cellint32The cell the invisible fighter was spotted on. (map cell id)
The client also shows a fading copy of the acting fighter there.never 3target_idint64The invisible fighter that was spotted. (fighter (entity) id)
The client records InvisibleDetected.cell as its position.never
  • summary: An invisible fighter is spotted on a cell.
  • area: Game.Action
  • 34 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.