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
One spell modifier no longer applies to a fighter: remove it from that fighter's modifiers.
Kind event · Area Game.Spell
Undoes what ApplySpellModifierEvent did for ONE action type of ONE modifier.
WHAT TO DO WHEN YOU RECEIVE IT
1. FIND the modifiers of the fighter RemoveSpellModifierEvent.actor_id. If it has none, stop. 2. FIND the entry for RemoveSpellModifierEvent.spell_id and RemoveSpellModifierEvent.modifier_type. If there is none, stop. 3. REMOVE that entry's values for RemoveSpellModifierEvent.action_type. 4. If the entry has no action type left, DELETE the entry. 5. SEND NOTHING BACK.
Any other declared member is padding: ignore it.
When you may send it
Requires character_loaded inferred Related messages
Unsolicited - nothing you send causes this the server sends it when an effect stops modifying a fighter's spell; no request asks for it Fields
#FieldTypeMeaningYou set it 1spell_idint32The spell the removed modifier applied to.never 2action_typeSpellModifierActionTypeWhich of the entry's action types to remove: the entry keeps its other action types.
A SpellModifierActionType.never 3modifier_typeSpellModifierTypeWhich property of the spell the removed modifier changed (range, damage, AP cost, ...).
A SpellModifierType.never 4actor_idint64The fighter whose spell modifier ends. (entity id)never
  • summary: One spell modifier no longer applies to a fighter: remove it from that fighter's modifiers.
  • area: Game.Spell
  • 31 vues
One slot of a shortcut bar: its position and what it holds (a spell, an item, an emote ...).
Kind struct · Area Game.Common
One entry of a shortcut bar.
HOW TO READ IT
1. Shortcut.slot_id is the position of the entry in the bar (0 = first slot). 2. Exactly one member of Shortcut.shortcut is set; it says what the slot holds: Shortcut.shortcut_spell a spell (its spell id; 0 is the weapon), Shortcut.shortcut_object_item an inventory item, Shortcut.shortcut_preset a preset, Shortcut.shortcut_smiley a smiley, Shortcut.shortcut_emote an emote, Shortcut.shortcut_cosmetic_object a cosmetic object, Shortcut.shortcut_outfit an outfit.
One declared enum member is never read by the client: ignore it.
Not sent on its own — a record carried by the shortcut-bar messages and FightControlEvent, never sent on its own. inferred
Used by
FightControlEvent FightSpellsUpdateEvent ShortcutBarContentEvent Fields
#FieldTypeMeaningYou set it 3slot_idint32The position of the entry in the bar (0 = first slot).
The client copies it into ShortcutProperties.id.never 2shortcut_spellShortcutSpellA spell: put this spell on the slot.
Type ShortcutSpell when recovered; the client turns this branch into ShortCutBarTypes.Spell.never 4shortcut_emoteShortcutEmoteAn emote.
Type ShortcutEmote when recovered; the client turns this branch into ShortCutBarTypes.Emote.never 5shortcut_object_itemtype not documented yetAn inventory item.
Type ShortcutObjectItem when recovered; the client turns this branch into ShortCutBarTypes.Item.never 6shortcut_cosmetic_objecttype not documented yetA cosmetic object.
Type ShortcutCosmeticObject when recovered; the client turns this branch into ShortCutBarTypes.CosmeticItem.never 7shortcut_smileyShortcutSmileyA smiley.
Type ShortcutSmiley when recovered; the client turns this branch into ShortCutBarTypes.Smiley.never 8shortcut_outfittype not documented yetAn outfit.
Type ShortcutOutfit when recovered; the client turns this branch into ShortCutBarTypes.Outfit.never 9shortcut_presettype not documented yetA preset.
Type ShortcutPreset when recovered; the client turns this branch into ShortCutBarTypes.Preset.never
  • summary: One slot of a shortcut bar: its position and what it holds (a spell, an item, an emote ...).
  • area: Game.Common
  • 32 vues
A spell placed on a shortcut slot.
Kind struct · Area Game.Common
The spell a shortcut slot holds.
HOW TO READ IT
1. ShortcutSpell.spell_id is the spell; 0 is the weapon entry.
Not sent on its own — the spell branch of a Shortcut, never sent on its own. inferred
Used by
Shortcut Fields
#FieldTypeMeaningYou set it 1spell_idint32The spell on the slot (0 = the weapon).never
  • summary: A spell placed on a shortcut slot.
  • area: Game.Common
  • 30 vues
One spell a fighter can cast: its id and level, plus availability and a kind.
Kind struct · Area Game.Common
One entry of a spell list.
HOW TO READ IT
1. SpellItem.spell_id is the spell; look it up in the spell data. Spell id 0 is the weapon entry. 2. SpellItem.spell_level is the level of that spell to use. 3. SpellItem.available, when present, says whether the spell can be used. 4. SpellItem.kind is a category the server sends (1 on the character's spells and 2 on the weapon entry in captures). The client keeps it but no client logic reads it: do not rely on it.
Not sent on its own — a record carried by SpellsEvent, FightControlEvent and FightSpellsUpdateEvent, never sent on its own. inferred
Used by
FightControlEvent FightSpellsUpdateEvent SpellsEvent Fields
#FieldTypeMeaningYou set it 1kindtype not documented yetA category of the entry; the client keeps it but never reads it.
Name ours: no Ankama source names it. Captures show 1 on the character's spells and 2 on the weapon entry (spell id 0).never 2spell_idint32The spell (0 for the weapon entry).
The client looks it up with SpellData.GetById.never 3availableboolWhether the spell can be used; absent when not said.
Explicit presence: absent is not the same as zero.never 4spell_levelint32The level of the spell to use.
The client passes it, beside the spell id, down to SpellData.GetSpellLevelData(rank).never
  • summary: One spell a fighter can cast: its id and level, plus availability and a kind.
  • area: Game.Common
  • 33 vues
How a SpellModifier changes the spell's value: add, subtract or replace.
Kind enum · Area Game.Common
The action_type of SpellModifier: how its amounts combine with the spell's own value.
HOW TO COMPUTE A SPELL'S VALUE
Keep, per spell and per SpellModifierType, the latest amounts of each action. 1. If an ACTION_SET entry exists, the value IS that entry's amount; ignore the rest. 2. Otherwise value = base + BOOST - REMOVE_BOOST, where base is the spell level's own value. For AP_COST and CAST_INTERVAL subtract the difference instead of adding it. The amount of an entry is its equipment plus its context part (see SpellModifier.equipment and SpellModifier.context).
Not sent on its own — an enum is never sent on its own. inferred
Used by
RemoveSpellModifierEvent SpellModifier WeaponModifier Values
ValueNumberMeaning ACTION_INVALID0No action. ACTION_BOOST1Adds the amounts to the spell's value. ACTION_REMOVE_BOOST2Subtracts the amounts from the spell's value. ACTION_SET3Replaces the spell's value with the amounts.
  • summary: How a SpellModifier changes the spell's value: add, subtract or replace.
  • area: Game.Common
  • 30 vues
Which property of a spell a SpellModifier changes: range, AP cost, damage, line of sight...
Kind enum · Area Game.Common
The modifier_type of SpellModifier: which property of the spell the modifier changes.
HOW TO READ IT
1. Look the value up below. Most values change a number of the spell's level data (range, AP cost, casts per turn...); the others switch a casting rule (line of sight, cast in a line, free or occupied target cell...). 2. For AP_COST and CAST_INTERVAL a BOOST lowers the value: the client subtracts the boost instead of adding it. 3. Two values have no known name (19 and 20 on 3.7). The client applies 20 to the spell's critical-hit damage bonus (SpellLevelData.criticalHitBonus).
Not sent on its own — an enum is never sent on its own. inferred
Used by
RemoveSpellModifierEvent SpellModifier WeaponModifier Values
ValueNumberMeaning INVALID_MODIFICATION0No modification. RANGE1Range. DAMAGE2Damage. BASE_DAMAGE3Base damage. HEAL_BONUS4Heal bonus. AP_COST5AP cost; a boost LOWERS it.
The client applies it to SpellLevelData.apCost, and inverts the sign of boosts for it. CAST_INTERVAL6Interval between casts; a boost LOWERS it.
The client inverts the sign of boosts for it, as for AP_COST. CRITICAL_HIT_BONUS7Critical-hit chance.
The client applies it to SpellLevelData.criticalHitProbability. CAST_LINE8Cast in a line. LOS9Line of sight.
The client applies it to SpellLevelData.castTestLos. MAX_CAST_PER_TURN10Casts per turn.
The client applies it to SpellLevelData.maxCastPerTurn. MAX_CAST_PER_TARGET11Casts per target. RANGE_MAX12Maximum range.
The client applies it to SpellLevelData.range (the spell's maximum range). RANGE_MIN13Minimum range.
The client applies it to SpellLevelData.minRange. OCCUPIED_CELL14Occupied target cell.
Named by beta's wire number; no client constant was seen for it. FREE_CELL15Free target cell.
Named by beta's wire number; no client constant was seen for it. VISIBLE_TARGET16Visible target.
Named by beta's wire number; no client constant was seen for it. PORTAL_FREE_CELL17Free cell for a portal.
Named by beta's wire number; no client constant was seen for it. PORTAL_PROJECTION18Portal projection.
Named by beta's wire number; no client constant was seen for it.
  • summary: Which property of a spell a SpellModifier changes: range, AP cost, damage, line of sight...
  • area: Game.Common
  • 37 vues
Your character's spell lists: its own (human) spells and the spells of its mutant form.
Kind event · Area Game.Spell
The spells YOUR character can cast, as two complete lists. Each list replaces the previous one; neither is a change to apply.
WHAT TO DO WHEN YOU RECEIVE IT
1. REPLACE your character's normal spell list with SpellsEvent.human_spells. The client completes it with your breed's own spells (the breed's spell variants), so a breed spell missing from the list is still yours. 2. REPLACE the spell list of your mutant form with SpellsEvent.mutant_spells. Use it only while your character is transformed; it gets no breed spells. 3. SEND NOTHING BACK.
In a fight, a creature you command has its own lists: see FightControlEvent and FightSpellsUpdateEvent. Any other declared member is never read by the client: ignore it.
When you may send it
Requires character_loaded inferred Related messages
Unsolicited - nothing you send causes this the server sends it when your character's spells are set or change; no request asks for it Fields
#FieldTypeMeaningYou set it 1human_spellsrepeated SpellItemYour character's own spell list; the client adds your breed's spells to it.
Element type SpellItem. The whole list, not a change.never 3mutant_spellsrepeated SpellItemThe spell list of your character's mutant (transformed) form; no breed spells are added.
Element type SpellItem. The whole list, not a change.never
  • summary: Your character's spell lists: its own (human) spells and the spells of its mutant form.
  • area: Game.Spell
  • 33 vues
How many summon points a fighter now uses: refresh its summon counter.
Kind event · Area Game.Fight
The summon points SummonWeightUpdatedEvent.fighter_id uses NOW. It replaces the previous value; it is not a change to add.
WHAT TO DO WHEN YOU RECEIVE IT
1. STORE SummonWeightUpdatedEvent.summon_weight as that fighter's summon points in use. 2. If the fighter is your character, show it against your maximum number of summoned creatures (a characteristic): the client draws "used / maximum". 3. SEND NOTHING BACK.
Bombs are counted separately: this value does not include them.
Any other declared member is padding: ignore it.
When you may send it
Requires character_loaded inferred Related messages
Unsolicited - nothing you send causes this the server sends it when a fighter's summons change; no request asks for it Fields
#FieldTypeMeaningYou set it 1summon_weightint32Summon points the fighter uses now, bombs excluded.
Observed: 1
The client shows it against the fighter's maximum number of summoned creatures.never 2fighter_idint64The fighter whose summon points changed. (entity id)
Observed: 774841172259never
  • summary: How many summon points a fighter now uses: refresh its summon counter.
  • area: Game.Fight
  • 30 vues
An actor on your map plays an emote (or stops one): play the named animation on it.
Kind event · Area Game.Emote
Someone on your map, you included, plays an emote.
WHAT TO DO
1. Find the actor actor_id on the map. 2. If emote_id is 0, the actor stopped its emote (for example stood up): put it back in its normal stance. 3. Otherwise play animation (for example AnimEmoteSit) on it.
It answers your own EmotePlayRequest (same emote id, your actor id), but it also arrives for every other player's emotes on the map. The client checks the actor's name and account_id with its social service and does not play the emote on a match (players you ignore).
Do not send anything back.
When you may send it
Requires context_ready inferred Related messages
Arrives after EmotePlayRequest Fields
#FieldTypeMeaningYou set it 1emote_idint32The emote played (as listed by EmotesEvent); 0 means the actor stopped its emote. (emote id)never 2account_idint32The actor's account; the client checks it, with the actor's name, against its social lists and skips the emote on a match. (account id)never 3animationstringName of the animation to play, for example AnimEmoteSit.
Name invented from the client parameter it fills (SetAnimationAction's animation); no reference build names this member.never 5actor_idint64The map actor playing the emote (a character id). (actor id)never
  • summary: An actor on your map plays an emote (or stops one): play the named animation on it.
  • area: Game.Emote
  • 29 vues
Plays an emote (sit, wave, an aura...) on your character.
Kind request · Area Game.Emote
Plays one of your emotes.
HOW TO SEND IT
1. emote_id: an emote your character knows (the list comes with EmotesEvent). In the capture, 1 is sit (animation AnimEmoteSit). 2. auto_aura: leave it false. The client sets it to true only when it replays the aura of your current outfit by itself. 3. Respect the emote's cooldown: the client does not send an emote while its cooldown (from the emote data) is running. 4. If your character is in the middle of an animation, the client waits for it to end before sending.
AFTER SENDING
EmotePlayEvent comes back with your actor id and the animation name. To stand up from sit, play the sit emote again; the server answers with emote id 0.
When you may send it
Requires character_loaded inferred Raised by: the player picks an emote in the emote tab or on the shortcut bar; the client also sends it by itself to replay the outfit's aura proven Related messages
You will receive one of EmotePlayEvent observed — the server broadcasts the emote to the map, you included, with the same emote id and the animation to play You will receive one of EmotePlayErrorEvent inferred — instead of the broadcast when the server refuses the emote; the client only prints ui.common.cantUseEmote Reply not yet recovered: a refused emote comes back as an emote error event (the client shows ui.common.cantUseEmote); it has no signature yet. Fields
#FieldTypeMeaningYou set it 1emote_idint32The emote to play, one of those listed by EmotesEvent (1 = sit). (emote id)required 2auto_auraboolTrue only when the client replays your outfit's aura by itself; false when the player picks an emote.
Name invented: no reference build names this member.conditional
  • summary: Plays an emote (sit, wave, an aura...) on your character.
  • area: Game.Emote
  • 37 vues
The outcome of a craft or smithing attempt in a workshop.
Kind event · Area Game.Exchange
The result of a craft launched with ExchangeReadyRequest.
WHAT TO DO
1. Read result (CraftResult). Its values are not renamed; on 3.7.11.11 the client treats them as: - 0: impossible (recipe invalid, job level too low, nothing to make); - 2: success; - 4: forbidden (for example a legendary item); - 1 and 3: the other outcomes (beta: failed, neutral). In smithing, 1 and 2 change the item, 3 leaves it as it was. 2. complement holds ONE of: - object_gid: with impossible / forbidden, the item id the craft would have made; - object: the item produced or modified, with its smithing details (ExchangeCraftResultWithObjectDescription).
Do not send anything back. To chain smithing merges, send ExchangeReadyRequest again.
When you may send it
Requires exchange_open inferred Related messages
Arrives after ExchangeReadyRequest Fields
#FieldTypeMeaningYou set it 1resultCraftResultHow the craft went (CraftResult). Values are not renamed; see the message description for their meaning.never 2objectExchangeCraftResultWithObjectDescriptionThe item produced or modified, with its smithing details.never 3object_gidint32With an impossible or forbidden result: the item id the craft would have made. (item id)never
  • summary: The outcome of a craft or smithing attempt in a workshop.
  • area: Game.Exchange
  • 37 vues
The item a craft or smithing attempt produced, with the smithing magic-pool details.
Kind struct · Area Game.Exchange
Carried in ExchangeCraftResultEvent.object.
WHAT TO DO
1. object: the produced or modified item; replace your copy of it. 2. Smithing only: - fm_power: the item's magic pool after the rune (the smithing window shows it as the leftovers); - magic_pool_status: how that pool changed. Values are not renamed; on 3.7.11.11 the window shows 1 as a gain ('+') and the other non-zero value as a loss ('-'); beta: no change 0, increase 1, loss 2. 3. Ignore any other member: the client never reads it.
Not sent on its own — a record carried by ExchangeCraftResultEvent, never sent on its own. inferred
Used by
ExchangeCraftResultEvent Fields
#FieldTypeMeaningYou set it 2fm_powerfloatSmithing: the item's magic pool after the attempt, shown as the leftovers.
Beta declares it as int32; it is a float since 3.2.never 3magic_pool_statusMagicPoolStatusSmithing: how the item's magic pool changed (gain or loss). Values are not renamed.
Explicit presence: absent is not the same as zero.never 4objectObjectItemThe item produced or modified by the craft or the smithing attempt.never
  • summary: The item a craft or smithing attempt produced, with the smithing magic-pool details.
  • area: Game.Exchange
  • 39 vues
An item was taken out of the open exchange window (craft, smithing, rune making, recycling, trade).
Kind event · Area Game.Exchange
An item left the exchange window you have open.
WHAT TO DO
1. remote false: it left YOUR side; true: the other party removed it. 2. Remove the item object_uid from that side. 3. Ignore any other member: the client never reads it.
It is the counterpart of ExchangeObjectsAddedEvent. Do not send anything back.
When you may send it
Requires exchange_open inferred Related messages
Unsolicited - nothing you send causes this Fields
#FieldTypeMeaningYou set it 2remoteboolFalse: the item left your side of the exchange. True: the other party removed it.never 3object_uidint32Uid of the item removed from the exchange. (object uid)never
  • summary: An item was taken out of the open exchange window (craft, smithing, rune making, recycling, trade).
  • area: Game.Exchange
  • 33 vues
Items were put into the open exchange window (craft, smithing, rune making, recycling, trade), by you or by the other side.
Kind event · Area Game.Exchange
Items were put into the exchange window you have open: a crafting, smithing, rune-making or recycling workshop, or a trade with another player.
WHAT TO DO
1. remote false: the items are on YOUR side (you put them in, or the server did for you). remote true: the OTHER party put them in; in a trade the client shows them in the other player's grid. 2. Add each of objects (ObjectItemInventory) to that side's slots. 3. fm_power is optional (read as 0 when absent). Only the smithing window uses it: it hands it, with the item, to the slot it fills.
Do not send anything back.
When you may send it
Requires exchange_open inferred Related messages
Arrives after ExchangeSetCraftRecipeRequest Fields
#FieldTypeMeaningYou set it 1remoteboolFalse: the items are on your side of the exchange. True: the other party put them in (in a trade, the other player's grid).never 2fm_powerfloatOptional, read as 0 when absent. Only the smithing window uses it: it hands it, with the added item, to the slot it fills.
Explicit presence: absent is not the same as zero.
Beta declares it as an optional int32; it is a float since 3.2.never 3objectsrepeated ObjectItemInventoryThe items put in, each with its inventory record.never
  • summary: Items were put into the open exchange window (craft, smithing, rune making, recycling, trade), by you or by the other side.
  • area: Game.Exchange
  • 29 vues
Presses the exchange's go button: craft in a workshop, recycle, smith, or validate a trade.
Kind request · Area Game.Exchange
Says you are ready: in a workshop it launches the craft.
HOW TO SEND IT
1. An exchange must be open (workshop, smithing, recycling, trade). 2. ready: true to launch / validate. A trade window also sends false to take its validation back. 3. step: the exchange's change counter. It is 0 when the exchange opens; the client adds 1 each time the multi-craft payment changes (the payment-modified event, not recovered yet). In a solo workshop send 0.
AFTER SENDING
In a workshop, ExchangeCraftResultEvent tells you how the craft went.
When you may send it
Requires exchange_open inferred Raised by: the player confirms a craft (workshop or multi-craft), starts recycling, merges in the smithing window, or validates a trade proven Related messages
You will then receive ExchangeCraftResultEvent inferred — in a workshop, the craft's outcome; the client resends this request from the smithing result handler to chain merges Fields
#FieldTypeMeaningYou set it 1stepint32The exchange's change counter: 0 when the exchange opens, +1 on each multi-craft payment change. 0 in a solo workshop. (count)required 2readyboolTrue to launch the craft / validate; false withdraws a trade validation.required
  • summary: Presses the exchange's go button: craft in a workshop, recycle, smith, or validate a trade.
  • area: Game.Exchange
  • 40 vues
Selects the recipe to craft in the open workshop.
Kind request · Area Game.Exchange
Picks the recipe to craft in the workshop you have open.
HOW TO SEND IT
1. A craft exchange must be open (the workshop window). 2. object_uid: the item id of the recipe's RESULT (the item the recipe makes, as in the game data's recipe list). It is NOT an inventory uid, whatever Ankama's member name says. 3. If you own every ingredient, send only this request. 4. If some are missing, the client warns (ui.craft.dontHaveAllIngredient, or ui.craft.noIngredient), first puts in the ingredients you do own, one ExchangeObjectMoveRequest each (inventory uid, quantity), and then sends this request anyway. 5. Leave any other member unset: the client never fills it.
AFTER SENDING
Watch ExchangeObjectsAddedEvent (remote false) for the items now in the craft.
When you may send it
Requires exchange_open inferred Raised by: the player picks a recipe in the workshop's recipe list proven Related messages
You will then receive ExchangeObjectsAddedEvent inferred — when you own every ingredient the client moves nothing itself, so the ingredients that appear in the craft are put there by the server Fields
#FieldTypeMeaningYou set it 1object_uidint32Item id of the recipe's result (the item the recipe makes), not an inventory uid despite the name. (item id)
Ankama's name says uid; the client sends the recipe's result item id (RecipeData.resultId).required
  • summary: Selects the recipe to craft in the open workshop.
  • area: Game.Exchange
  • 31 vues
An inventory item is now at a new position (equipped in a slot, or back in the bag).
Kind event · Area Game.Inventory
Set the position of item object_uid to position.
1. Find the stack whose uid is object_uid (the uid of ObjectItem, not the gid). 2. Set its position: an equipment slot (0 amulet, 1 weapon, 2/4 rings, 3 belt, 5 boots, 6 hat, 7 cape, 8 pet, 9-14 Dofus, 15 shield...) or 63, the bag (not equipped).
It confirms ObjectSetPositionRequest (same uid and position), but it also arrives for items you did not move: equipping into a taken slot sends the item that was there back to 63 with its own event. Handle it whether or not you asked.
Do not send anything back.
When you may send it
Requires context_ready inferred Related messages
Arrives after ObjectSetPositionRequest Fields
#FieldTypeMeaningYou set it 1object_uidint32The item that moved: its uid, as in ObjectItem.uid. (item uid)never 3positionint32Its new position: an equipment slot (0 amulet, 1 weapon, 2/4 rings, 3 belt, 5 boots, 6 hat, 7 cape, 8 pet, 9-14 Dofus, 15 shield...) or 63, the bag. (client inventory position)never
  • summary: An inventory item is now at a new position (equipped in a slot, or back in the bag).
  • area: Game.Inventory
  • 31 vues
Moves an inventory item to a position: an equipment slot to equip it, or back to the bag to unequip it.
Kind request · Area Game.Inventory
Moves one of your items to a new position.
HOW TO SEND IT
1. object_uid: the item's ObjectItem.uid from your inventory (not its template id, ObjectItem.gid). 2. position: where it goes, a client inventory position: - equipment slots: 0 amulet, 1 weapon, 2 left ring, 3 belt, 4 right ring, 5 boots, 6 hat, 7 cape, 8 pet, 9-14 the six Dofus slots, 15 shield, 16 mount, 29 ride harness, 27 follower, 28 entity, 30 costume; - 63: back to the bag (unequip). 3. quantity: how many units to move, 1 for equipment. The client asks for a number only when moving part of a stack. 4. Skip it when the item is already at that position: the client does not send it then.
AFTER SENDING
Wait for ObjectMovementEvent with the same uid: your item is now at its position. If the slot was taken, the item that was there comes back with its own ObjectMovementEvent to 63.
When you may send it
Requires character_loaded inferred Raised by: the player equips or unequips an item: double-click, drag and drop onto a slot, a slot's double-click, or the quantity popup when moving part of a stack proven Related messages
You will then receive ObjectMovementEvent observed — the server confirms the move with the same uid and position; an item pushed out of the target slot gets its own ObjectMovementEvent back to the bag Fields
#FieldTypeMeaningYou set it 1quantityint32How many units of the stack to move; 1 for equipment. (units)required 2object_uidint32The inventory item to move: its uid, as in ObjectItem.uid. (item uid)required 3positionint32Where the item goes: an equipment slot (0 amulet, 1 weapon, 2/4 rings, 3 belt, 5 boots, 6 hat, 7 cape, 8 pet, 9-14 Dofus, 15 shield...) or 63 for the bag (unequip). (client inventory position)required
  • summary: Moves an inventory item to a position: an equipment slot to equip it, or back to the bag to unequip it.
  • area: Game.Inventory
  • 34 vues
Uses one unit of an inventory item that needs no target (bread, potion, recall potion...).
Kind request · Area Game.Inventory
Uses ONE unit of an item that acts on the character itself.
HOW TO SEND IT
1. Set object_uid to the item's ObjectItem.uid from your inventory (not its template id, ObjectItem.gid). 2. Send it only for one unit and only for an item that needs no target. The client picks another request otherwise: - more than one unit at once: ObjectUseMultipleRequest (uid + quantity); - an item used on a cell or on another character: the use-on-cell / use-on-character requests, sent after the player picks the target. Those requests have no signature yet. 3. Do not send it while your character is playing an animation: the client holds the request until the animation ends, then sends it. 4. Watch the item's quantity: it drops by one (or the item is deleted) when the use succeeds.
When you may send it
Requires character_loaded inferred Raised by: the player uses an item from the inventory or the shortcut bar, one unit at a time, on no target proven Related messages
Reply not yet recovered: the server answers with the item's new quantity or its deletion (see ObjectQuantityEvent / ObjectDeletedEvent) and with whatever the item does (life, stats, teleport). A refusal comes as an object error event that has no signature yet, so treat the use as unconfirmed until the quantity changes. Fields
#FieldTypeMeaningYou set it 1object_uidint32The inventory item to use: its uid, as in ObjectItem.uid. (item uid)required
  • summary: Uses one unit of an inventory item that needs no target (bread, potion, recall potion...).
  • area: Game.Inventory
  • 32 vues
Several items were added to your inventory at once.
Kind event · Area Game.Inventory
Several items arrive in your inventory together (quest rewards, a craft, loot...).
WHAT TO DO
1. Add each of objects (ObjectItemInventory) to your inventory, as for a single ObjectAddedEvent. 2. The client also writes one ui.quest.itemObtained chat line per item.
Do not send anything back.
When you may send it
Requires character_loaded inferred Related messages
Unsolicited - nothing you send causes this Fields
#FieldTypeMeaningYou set it 1objectsrepeated ObjectItemInventoryThe items added, each with its inventory record.never
  • summary: Several items were added to your inventory at once.
  • area: Game.Inventory
  • 31 vues
Asks the server to start one quest for the character.
Kind request · Area Game.Quest
Starts ONE quest. Only send it for a quest the game offers to start by hand: the client sends it from a quest scroll's Start button and from a "start quest" link in a text, and from nowhere else.
HOW TO SEND IT
1. Set quest_id to the quest's id (the quest data id; the scroll and the link both carry it). It is the only member to fill. 2. Send it once. The client does not retry it and does not wait for anything before closing the scroll. 3. Wait for QuestStartedEvent with the same quest id before treating the quest as active. That event is not a reply: the server sends it for every quest that starts, whatever started it. Do not add the quest to your journal on send: the server may refuse to start it, and then no QuestStartedEvent comes.
NOT TO BE CONFUSED WITH QuestStepInformationRequest, which has the same shape (one quest id) but only asks about a quest that is already active.
When you may send it
Requires character_loaded inferred Raised by: the player presses Start on a quest scroll, or clicks a "start quest" link in a text inferred Related messages
You will then receive QuestStartedEvent inferred — the server announces the started quest with that event; it is not a dedicated reply (it also arrives for quests started any other way), and no refusal message is known Fields
#FieldTypeMeaningYou set it 1quest_idint32The quest to start. (quest id)required
  • summary: Asks the server to start one quest for the character.
  • area: Game.Quest
  • 37 vues
The quests the character follows in the quest tracker, each with its current step and objectives.
Kind event · Area Game.Quest
Tells you which quests the character FOLLOWS, the ones the quest tracker shows. Each entry is a QuestActive: the quest id and its current step with that step's objectives (QuestActive.details).
WHAT TO DO WHEN YOU RECEIVE IT
1. For each entry of quests, add QuestActive.quest_id to your list of followed quests. The client appends to the list it already has; it does not clear it first. 2. For each objective in that entry's QuestActiveDetails.objectives whose boolean flag is set, mark the objective as tracked. The client does this through the same tracker toggle the player uses, which can also send QuestObjectiveFollowRequest. A bot that does not show a tracker can skip this step. 3. Send nothing back for the list itself.
The full journal (finished quests too) comes with QuestsEvent; this message only covers the tracked subset.
When you may send it
Requires character_selected inferred Related messages
Unsolicited - nothing you send causes this no request of the client's quest frame asks for the followed list; the client only receives it Fields
#FieldTypeMeaningYou set it 2questsrepeated QuestActiveThe followed quests, each with its current step and objectives.
Repeated QuestActive. The client reads each entry's quest_id and the objectives of its details.never
  • summary: The quests the character follows in the quest tracker, each with its current step and objectives.
  • area: Game.Quest
  • 36 vues
The smiley packs you own besides the default one: your whole smiley set.
Kind event · Area Game.Social
THE WHOLE LIST, EVERY TIME. AdditionalSmileyEvent.pack_id lists every smiley pack you own on top of the default pack. The official client rebuilds its smiley set from scratch on each message, so overwrite rather than merge.
WHAT TO DO WHEN YOU RECEIVE IT
1. Your packs are pack 0 (always there, never listed) plus every listed pack id. 2. The smileys you may send with SmileyRequest are the smileys of those packs (from the smiley-pack game data). 3. SEND NOTHING BACK.
A second, single int32 member is declared and never read by the client. Ignore it.
When you may send it
Requires character_loaded inferred Related messages
Unsolicited - nothing you send causes this the server sends it when the character loads or gains a pack; nothing requests it Fields
#FieldTypeMeaningYou set it 2pack_idrepeated int32Every smiley pack you own besides the default pack 0.
Ids of the smiley-pack game data (SmileyPacksDataRoot.GetSmileyPackById); the client keeps them as bytes.never
  • summary: The smiley packs you own besides the default one: your whole smiley set.
  • area: Game.Social
  • 13 vues
The alliance of a character on the map, and whether it can be attacked.
Kind struct · Area Game.Common
1. AllianceOption.alliance_information: the alliance (uid, tag, name, emblem). 2. AllianceOption.attackable_status (AttackableStatus): whether the character can be attacked in alliance PvP.
Not sent on its own — a record carried by HumanOption.alliance_information, never sent on its own. proven
Used by
HumanOption Fields
#FieldTypeMeaningYou set it 1attackable_statusAttackableStatusWhether the character can be attacked in alliance PvP.
An AttackableStatus.never 2alliance_informationAllianceInformationThe character's alliance: uid, tag, name and emblem.
An AllianceInformation record (no signature yet).never
  • summary: The alliance of a character on the map, and whether it can be attacked.
  • area: Game.Common
  • 16 vues
Which guild emblem symbol categories the character may use.
Kind event · Area Game.Character
Tells the client which guild emblem symbol categories the character may use.
WHAT TO DO WHEN YOU RECEIVE IT
1. Keep CharacterCapabilitiesEvent.guild_emblem_symbol_category: it is a bit set of the emblem symbol categories allowed when designing a guild or alliance emblem. 2. SEND NOTHING BACK.
When you may send it
Requires context_ready inferred Related messages
Unsolicited - nothing you send causes this the server sends it with the character's login data Fields
#FieldTypeMeaningYou set it 1guild_emblem_symbol_categoryint32Bit set of the guild emblem symbol categories the character may use.never
  • summary: Which guild emblem symbol categories the character may use.
  • area: Game.Character
  • 15 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.