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 server has selected your character for you. Empty payload; answer it.
Kind event · Area Game.Character.Management
Carries nothing. The server is not asking you to choose: the character is already decided, so do NOT send CharacterSelectionRequest for it.
1. Answer straight away with one empty CharacterForceSelectionReadyRequest. 2. Send that answer ONCE. The client keeps a one-shot flag and ignores repeats of this event once it has answered.
The current build carries no character id (older protocols did). The character is the one this connection was transferred for.
Any field a later build declares here is unread by the client and is left unresolved.
When you may send it
Requires authenticated inferred Raised by: the connection lands on a game server that already knows which character plays - the client handles it in its server-transfer service (fight / Kolizeum server switch) inferred Related messages
You must then send CharacterForceSelectionReadyRequest proven — the handler of this event constructs the ready request unpopulated and hands it to the game connection
  • summary: The server has selected your character for you. Empty payload; answer it.
  • area: Game.Character.Management
  • 35 vues
Acknowledges a forced character selection. Empty payload.
Kind request · Area Game.Character.Management
Carries nothing - it only says "ready".
1. Wait for CharacterForceSelectionEvent. 2. Send this request, empty, as soon as the event arrives. 3. Send it once. The client guards it with a one-shot flag: a repeated event does not produce a second request.
Any field a later build declares here is unused by the client and is left unresolved; send it empty.
When you may send it
Requires authenticated inferred Related messages
Answers CharacterForceSelectionEvent
  • summary: Acknowledges a forced character selection. Empty payload.
  • area: Game.Character.Management
  • 39 vues
One fighter's end-of-fight statistics: damage, heals, shields, AP and MP, kills, and who the fighter is.
Kind struct · Area Game.Fight
One fighter's statistics for the fight that just ended; FightStatisticsEvent.detailed_statistics holds one per fighter, keyed by fighter id. Each member is one block of the results screen's Statistics tab.
READ IT LIKE THIS
1. DetailedStatistics.fighter: who this is (a FighterIdentity record: player, monster, companion or summon). 2. Damage: DetailedStatistics.damage_done (dealt, with its breakdown) and DetailedStatistics.damage_taken (received). 3. Healing: DetailedStatistics.heal_done (given) and DetailedStatistics.heal_taken (received). 4. Shields: DetailedStatistics.shield_done (applied) and DetailedStatistics.shield_taken (received). 5. Points: DetailedStatistics.action_points and DetailedStatistics.movement_points, the same Point record for AP and for MP (dodged, not dodged, removed, removed by tackle, and their per-turn averages). 6. DetailedStatistics.kill: kills.
A third Point-typed member and an enum member are never read by the client: ignore them.
WHAT THE OFFICIAL CLIENT DOES. It converts the record into the Statistics tab: one block per member, filed under a fixed slot (damage done, damage taken, heal done, heal taken, shield done, shield taken, AP, MP, kills), each block built with its own translation keys (ui.fightResult.damageDealt, ...healReceived, ...shieldDealt, ...kill, ...) and the AP/MP blocks titled ui.stats.shortAP / ui.stats.shortMP.
Not sent on its own — it travels as a value of FightStatisticsEvent.detailed_statistics, one per fighter. proven
Fields
#FieldTypeMeaningYou set it 1damage_donetype not documented yetThe damage the fighter dealt.
A DamageDone record; the results screen labels it ui.fightResult.damageDealt.never 2heal_takentype not documented yetThe healing the fighter received.
A HealTaken record; the results screen labels it ui.fightResult.healReceived.never 3shield_donetype not documented yetThe shield the fighter applied.
A ShieldDone record; the results screen labels it ui.fightResult.shieldDealt.never 5movement_pointstype not documented yetWhat happened to the fighter's movement points (MP).
A Point record, like action_points.
Shown under the title ui.stats.shortMP.never 6shield_takentype not documented yetThe shield the fighter received.
A ShieldTaken record; the results screen labels it ui.fightResult.shieldReceived.never 7damage_takentype not documented yetThe damage the fighter received.
A DamageTaken record; the results screen labels it ui.fightResult.damageTaken.never 8fightertype not documented yetWho the fighter is.
A FighterIdentity record (player, monster, companion or summon).never 9action_pointstype not documented yetWhat happened to the fighter's action points (AP).
A Point record: dodged, not dodged, removed, removed by tackle, and per-turn averages.
Shown under the title ui.stats.shortAP.never 11killtype not documented yetThe the fighter's kills.
A Kill record; the results screen labels it ui.fightResult.kill.never 12heal_donetype not documented yetThe healing the fighter gave.
A HealDone record; the results screen labels it ui.fightResult.healDealt.never
  • summary: One fighter's end-of-fight statistics: damage, heals, shields, AP and MP, kills, and who the fighter is.
  • area: Game.Fight
  • 39 vues
The auction house is open in buy mode; carries its selling conditions.
Kind event · Area Game.Exchange
You are now in the auction house's buy screen.
1. Read selling_conditions. Its types list is the set of item categories you can browse here. 2. Keep its npc_contextual_id: the client uses it as the NPC id for further actions on this auction house. 3. To list the items of one category, ask for that type (the client sends one request per type id, with a follow flag).
The sell screen opens with a different event that also carries the items you have on sale; this one carries the conditions only.
When you may send it
Requires context_ready inferred Raised by: the player opens an auction house in buy mode (from its NPC) inferred Related messages
Reply not yet recovered: nothing answers this - it is inbound only. Browsing a category makes the client send the bid-house type request (one per type id), which has no signature yet. Fields
#FieldTypeMeaningYou set it 1selling_conditionsSellingConditionsThe auction house's rules: item types, taxes, level cap, house and NPC ids.
Type SellingConditions.never
  • summary: The auction house is open in buy mode; carries its selling conditions.
  • area: Game.Exchange
  • 41 vues
Buys one lot of one auction-house listing at the price you were shown.
Kind request · Area Game.Exchange
HOW TO BUY
1. Open the auction house in buy mode (ExchangeBidBuyerStartedEvent). 2. Get the item's listings: ExchangeBidHouseSearchRequest -> ExchangeTypesItemsExchangerDescriptionForUserEvent. Each BidExchangerObject carries an object_uid and one price per lot size. 3. Send this request: - object_uid = the listing you buy; - quantity = the lot size you buy (the client sends the size of the row the player clicked: 1, 10, 100...); - price = that lot's price exactly as listed. The client sends the price it displayed; it never computes one. 4. One request buys ONE lot. To buy several lots, send several requests, each with fresh data.
WHAT COMES BACK (in this order in captures)
- ExchangeBidHouseInListUpdatedEvent for that listing if you follow its item (its remaining lots and prices); - KamasUpdateEvent with your new kamas; - ObjectAddedEvent with the item in your inventory; - InventoryWeightEvent and a chat notice (TextInformationEvent); - ExchangeBidHouseBuyResultEvent with bought = true.
If bought is false, nothing was bought. Refresh the listings (search again) before retrying, because a stale uid or price will keep failing.
When you may send it
Requires context_ready inferred Raised by: the player confirms a purchase in the auction-house buy window proven Related messages
You will then receive ExchangeBidHouseBuyResultEvent observed — the server always closes the purchase with a result for the listing you named Fields
#FieldTypeMeaningYou set it 1quantityint32The lot size you buy (1, 10, 100, ...): the row the player picked.
Observed: 1required 3object_uidint32The listing to buy: an object_uid from the item's listings.
Observed: 914required 5priceint64The price of that lot exactly as listed, in kamas. (kamas)
Observed: 4required
  • summary: Buys one lot of one auction-house listing at the price you were shown.
  • area: Game.Exchange
  • 39 vues
Closes a purchase: whether the lot you asked for was bought.
Kind event · Area Game.Exchange
The answer to ExchangeBidHouseBuyRequest, sent LAST: the kamas, item and listing updates of a successful purchase arrive before it.
- bought = true: the lot is yours. Trust the inventory and kamas events that came just before for the details. - bought = false: nothing changed. Search the item again (ExchangeBidHouseSearchRequest) before retrying; the listing may be gone or its price may have changed.
object_uid echoes the listing you tried to buy. The client itself ignores it and reacts to bought only, so match results to requests by order if you send several.
One declared enum member is never read by any client; ignore it.
When you may send it
Requires context_ready inferred Related messages
Arrives after ExchangeBidHouseBuyRequest Fields
#FieldTypeMeaningYou set it 2object_uidint32The listing you tried to buy (object_uid of the request).
Observed: 914
The client never reads it; named as the message's only int32.never 3boughtbooltrue if the lot was bought; false if nothing happened.
Observed: truenever
  • summary: Closes a purchase: whether the lot you asked for was bought.
  • area: Game.Exchange
  • 33 vues
One listing you follow changed its prices or effects; replace your copy of it.
Kind event · Area Game.Exchange
Pushed for listings of items or item types you follow (ExchangeBidHouseSearchRequest or ExchangeBidHouseTypeRequest with follow = true).
1. Find the category by object_type, the item by object_gid, then the listing by object_uid. Listing uids come from ExchangeTypesItemsExchangerDescriptionForUserEvent. 2. Replace that listing's prices and effects with these. 3. If you do not hold that listing, ignore the event: the client only updates listings it already has. A NEW listing comes with a different event, the in-list "added" event.
When you may send it
Requires context_ready inferred Related messages
Unsolicited - nothing you send causes this pushed for items and types you follow (search / type requests with follow = true), whenever a listing changes Fields
#FieldTypeMeaningYou set it 1pricesrepeated int64The listing's new price per lot size, in kamas; 0 = that lot size is not offered. (kamas)
Observed: 9198, 88420, 999993, 0never 2object_gidint32The item (GID) of that listing.
Observed: 748never 3object_typeint32The item's type (category).
Observed: 40never 4object_uidint32Id of the listing that changed (an object_uid from the item's listings).
Observed: 2413never 5effectsrepeated ObjectEffectThe listing's item effects.
Type ObjectEffect.never
  • summary: One listing you follow changed its prices or effects; replace your copy of it.
  • area: Game.Exchange
  • 35 vues
Confirms a new sale of yours in the auction house: the item, its price and its delay.
Kind event · Area Game.Exchange
Your ExchangeObjectMovePricedRequest succeeded: the lot is now on sale. Add it to your list of items on sale (the list ExchangeBidSellerStartedEvent gave you).
- item (BidItem): the lot on sale. Its uid is the SALE's id in the auction house, not the uid your stack had in your inventory. - price: the price you asked for the whole lot, in kamas. - unsold_delay: how long the lot stays on sale before it comes back unsold, in seconds (2419200 = 28 days in the capture).
The sale tax was already taken (KamasUpdateEvent just before). The item's listing update (ExchangeBidHouseInListUpdatedEvent) and your inventory update (ObjectDeletedEvent for a whole stack) follow.
When you may send it
Requires context_ready inferred Related messages
Arrives after ExchangeObjectMovePricedRequest Fields
#FieldTypeMeaningYou set it 1priceint64The price you asked for the whole lot. (kamas)
Observed: 1never 2itemBidItemThe lot now on sale; its uid is the sale's id in the auction house.
Type BidItem.never 3unsold_delayint64Time left before the lot comes back unsold. (seconds)
Observed: 2419200never
  • summary: Confirms a new sale of yours in the auction house: the item, its price and its delay.
  • area: Game.Exchange
  • 33 vues
Asks the auction house for the current prices of one item before you put it on sale.
Kind request · Area Game.Exchange
HOW TO PRICE AN ITEM BEFORE SELLING IT
1. Open the auction house in sell mode (ExchangeBidSellerStartedEvent). 2. Send this request with object_gid = the item's TEMPLATE id (the gid, not the uid of your stack). 3. Wait for ExchangeBidPriceEvent: it gives the average price and the cheapest price currently listed for each lot size. 4. Choose your price, then sell with ExchangeObjectMovePricedRequest.
The official client sends ExchangeBidHouseSearchRequest (follow = true) for the same gid at the same moment, so it also receives the item's offer list. That is optional: this request alone is enough to get the prices.
When you may send it
Requires context_ready inferred Raised by: the player picks an item to sell, from the inventory or from the list of items already on sale proven Related messages
You will then receive ExchangeBidPriceEvent observed — the server answers with the average price and the cheapest price per lot size of that item Fields
#FieldTypeMeaningYou set it 1object_gidint32The item's template id (gid) whose prices you want.
Observed: 310required
  • summary: Asks the auction house for the current prices of one item before you put it on sale.
  • area: Game.Exchange
  • 39 vues
Asks the open auction house for every listing of one item, and starts or stops following that item.
Kind request · Area Game.Exchange
TO SEE THE OFFERS OF AN ITEM
1. Open the auction house (ExchangeBidBuyerStartedEvent) and pick an item id (GID), for example from ExchangeTypesExchangerDescriptionForUserEvent. 2. Send object_gid = that item, follow = true. 3. The answer is ExchangeTypesItemsExchangerDescriptionForUserEvent: one entry per listing, with its uid and prices. 4. While you follow the item, the server pushes changes to its listings, such as ExchangeBidHouseInListUpdatedEvent.
TO STOP FOLLOWING
Send the same item with follow = false (on the wire that is just the item id, because false is the default). The client does this: - when the player closes an opened item; - when opening one more item would exceed its limit of opened items. It drops the oldest item first, so one click sends an unfollow for the old item, then a follow for the new one; - when it unfollows everything, or when the item list closes.
Keep the number of followed items small, and unfollow what you no longer watch: the real client never leaves items followed behind it.
When you may send it
Requires context_ready inferred Raised by: the player opens an item in the auction-house buy list (or uses 'search same items' from the sell list) proven Related messages
You will then receive ExchangeTypesItemsExchangerDescriptionForUserEvent observed — the server answers with the item's listings; an unfollow is answered too, with an empty list Fields
#FieldTypeMeaningYou set it 1object_gidint32The item (GID) whose listings you want.
Observed: 28277required 2followbooltrue: start following this item's listings; false: stop following it.
false is the protobuf default, so an unfollow carries only object_gid on the wire.optional
  • summary: Asks the open auction house for every listing of one item, and starts or stops following that item.
  • area: Game.Exchange
  • 39 vues
Asks the open auction house for the items of one item type, optionally following it for updates.
Kind request · Area Game.Exchange
1. Open the auction house first (ExchangeBidBuyerStartedEvent). 2. Pick a type_id from that event's selling_conditions.types. 3. Send one request per type you want to see. Set follow to keep receiving changes for that type; the client's type filter sends one request per type it adds. 4. Read the answer: ExchangeTypesExchangerDescriptionForUserEvent lists the item ids of that type.
Any other declared member is never written by the client; leave it at its default.
When you may send it
Requires context_ready inferred Raised by: the auction-house item filter adds an item type (the player picks a category) proven Related messages
You will then receive ExchangeTypesExchangerDescriptionForUserEvent inferred — the server answers with the ids of the items of that type on sale here Fields
#FieldTypeMeaningYou set it 2type_idint32The item type to list; one of the open auction house's selling_conditions.types.
Observed: 153required 3followboolWhether to keep following this type after the first answer.
Observed: truerequired
  • summary: Asks the open auction house for the items of one item type, optionally following it for updates.
  • area: Game.Exchange
  • 39 vues
The market prices of one item: its average price and the cheapest price listed per lot size.
Kind event · Area Game.Exchange
The answer to ExchangeBidHousePriceRequest. Use it to choose the price of the lot you are about to sell with ExchangeObjectMovePricedRequest.
1. Check object_gid: the item these prices are for (the gid you asked about). 2. Read average_price: the item's average price, in kamas. -1 means the house has no average for it; the official client then shows a placeholder text and disables its "market price" button. 3. Read bid_price_for_seller (BidPriceForSeller): minimal_prices holds the cheapest price currently listed for each lot size, in the order of SellingConditions.quantities. Undercut the matching entry if you want to sell first.
Do not send anything back.
When you may send it
Requires context_ready inferred Related messages
Arrives after ExchangeBidHousePriceRequest Fields
#FieldTypeMeaningYou set it 1bid_price_for_sellerBidPriceForSellerThe cheapest price currently listed for each lot size.
Type BidPriceForSeller.never 2object_gidint32The item (template id) these prices are for: the gid of your price request.
Observed: 310
The client never reads it; named as the message's only int32.never 3average_priceint64The item's average price; -1 when the house has none. (kamas)
Observed: 7never
  • summary: The market prices of one item: its average price and the cheapest price listed per lot size.
  • area: Game.Exchange
  • 42 vues
The auction house is open in sell mode: its selling conditions and the items you already have on sale.
Kind event · Area Game.Exchange
You are now in the auction house's sell screen.
1. Read selling_conditions (SellingConditions): which item types this house accepts, the level cap, the sale tax and the modification tax. 2. Read objects: one ItemToSellInBid per item you ALREADY have on sale here, with its price and remaining delay. An empty list means you sell nothing here yet.
In a capture, switching from buy to sell mode goes like this: the client sends NpcGenericActionRequest with the house's npc_contextual_id; the server answers ExchangeLeaveEvent (the buy exchange closes), InventoryContentEvent, then this event.
The buy screen has its own event, ExchangeBidBuyerStartedEvent, which carries the conditions only.
When you may send it
Requires context_ready inferred Raised by: the player opens the auction house in sell mode (or switches from buy to sell through the NPC action) observed Related messages
Reply not yet recovered: nothing answers this - it is inbound only. Switching from buy mode first closes the buy exchange (ExchangeLeaveEvent) and refreshes the inventory before this arrives. Fields
#FieldTypeMeaningYou set it 1selling_conditionsSellingConditionsThe auction house's rules: item types, taxes, level cap, house and NPC ids.
Type SellingConditions.never 3objectsrepeated ItemToSellInBidThe items you already have on sale in this auction house.
Type ItemToSellInBid; empty when you sell nothing here.never
  • summary: The auction house is open in sell mode: its selling conditions and the items you already have on sale.
  • area: Game.Exchange
  • 40 vues
The current exchange window (trade, storage, auction house...) is closed by the server.
Kind event · Area Game.Exchange
Your current exchange is over: close its window and forget its state.
1. Check dialog_type. The client only acts when it is DIALOG_EXCHANGE (DialogType); other dialogs close through other messages. 2. Read success: whether the exchange ended successfully (a completed trade) or was simply closed. Switching an auction house from buy to sell mode sends this with success = false (absent on the wire), right before ExchangeBidSellerStartedEvent.
Do not send anything back; a new exchange event follows if the server opens another one.
When you may send it
Requires context_ready inferred Related messages
Unsolicited - nothing you send causes this the server closes the exchange itself, for example when an auction house switches from buy to sell mode Fields
#FieldTypeMeaningYou set it 1dialog_typeDialogTypeWhich dialog closed; the exchange client only reacts to DIALOG_EXCHANGE.
Observed: DIALOG_EXCHANGE
Type DialogType.never 2successboolWhether the exchange ended successfully rather than being simply closed.
Observed: falsenever
  • summary: The current exchange window (trade, storage, auction house...) is closed by the server.
  • area: Game.Exchange
  • 40 vues
Puts one lot of an inventory item on sale in the auction house at the price you choose.
Kind request · Area Game.Exchange
HOW TO SELL AN ITEM
1. Open the auction house in sell mode (ExchangeBidSellerStartedEvent). Its SellingConditions say which item types, lot sizes and level this house accepts, and the tax you will pay. 2. Optional: get the market prices with ExchangeBidHousePriceRequest. 3. Send this request: - object_uid = the uid of the stack in YOUR INVENTORY (not the gid); - quantity = the lot size, one of SellingConditions.quantities (1, 10, 100...), never more than the stack holds; - price = the price of the WHOLE lot, in kamas. 4. In the capture the server answers, in this order: - KamasUpdateEvent: the sale tax is taken right away; - ExchangeBidHouseItemAddedEvent: your new sale; - ExchangeBidHouseInListUpdatedEvent: the item's listing with the new cheapest prices; - ObjectDeletedEvent when the whole stack left your inventory (a partial lot updates the stack's quantity instead); - InventoryWeightEvent.
One request sells ONE lot. To sell several lots, send one request per lot.
When you may send it
Requires context_ready inferred Raised by: the player confirms a sale in the auction-house sell window proven Related messages
You will then receive ExchangeBidHouseItemAddedEvent observed — the server confirms the new sale with the item, its price and its delay Fields
#FieldTypeMeaningYou set it 1object_uidint32The stack to sell: its uid in your inventory.
Observed: 8567885required 2quantityint32The lot size to put on sale: one of the house's quantities (1, 10, 100...).
Observed: 1required 3priceint64The asking price of the whole lot, in kamas. (kamas)
Observed: 1required
  • summary: Puts one lot of an inventory item on sale in the auction house at the price you choose.
  • area: Game.Exchange
  • 48 vues
The ids of the items of one item type in the open auction house.
Kind event · Area Game.Exchange
The answer to ExchangeBidHouseTypeRequest.
1. Match it to your request by object_type: the client looks up the category it built from the auction house's types with this id. 2. Treat type_description as the item ids (GIDs) of that category. The client turns them into the item list of the buy window. 3. To see the offers for one of those items, ask for that item (the client sends its search request when an item is clicked).
When you may send it
Requires context_ready inferred Related messages
Arrives after ExchangeBidHouseTypeRequest Fields
#FieldTypeMeaningYou set it 1type_descriptionrepeated int32Item ids (GIDs) of that type in this auction house.
Observed: 2563, 16522, 1681never 2object_typeint32The item type this list is for: the type_id you asked about.
Observed: 59never
  • summary: The ids of the items of one item type in the open auction house.
  • area: Game.Exchange
  • 38 vues
Every listing of one item in the open auction house: the answer to a search request.
Kind event · Area Game.Exchange
The answer to ExchangeBidHouseSearchRequest.
1. Match it to your request by object_gid. 2. Replace what you know about that item's listings with item_descriptions: one BidExchangerObject per listing. An empty list means nobody sells that item here right now. 3. To buy one, use that listing's object_uid and one of its prices.
object_type is the item's category; the client uses it to find the category the item belongs to in the open auction house.
The server also answers an unfollow (search with follow = false), and then sends an empty list. Do not read that as "sold out".
When you may send it
Requires context_ready inferred Related messages
Arrives after ExchangeBidHouseSearchRequest Fields
#FieldTypeMeaningYou set it 1item_descriptionsrepeated BidExchangerObjectOne entry per listing currently on sale for that item.
Type BidExchangerObject.never 2object_typeint32The item's type (category).
Observed: 40never 3object_gidint32The item (GID) these listings are for: the one you searched.
Observed: 28277never
  • summary: Every listing of one item in the open auction house: the answer to a search request.
  • area: Game.Exchange
  • 39 vues
End-of-fight statistics: one detailed block per fighter, plus a summary block.
Kind event · Area Game.Fight
The statistics of the fight that just ended, for the results screen.
WHEN IT ARRIVES. Right after FightEndEvent (3.7.10.10 capture: FightEndEvent, then this event, then AlterationsEvent).
WHAT TO DO WHEN YOU RECEIVE IT
1. FightStatisticsEvent.detailed_statistics: for each fighter id, that fighter's DetailedStatistics (damage, heals, shields, AP and MP, kills, and the fighter's identity). In a solo fight against monsters, expect at least your own entry. 2. FightStatisticsEvent.base_statistics: the summary block (seven counters). 3. Use them for display or logging; nothing in the game state depends on them. 4. SEND NOTHING BACK.
WHAT THE OFFICIAL CLIENT DOES. It converts every fighter's DetailedStatistics into the Statistics tab blocks (keyed by fighter id), converts the summary block, and publishes both together for the fight-result screen; it then opens the results screen when its display conditions hold.
When you may send it
Requires character_loaded inferred Related messages
Unsolicited - nothing you send causes this pushed by the server right after FightEndEvent; no request asks for it Nothing answers it - send it and move on the client only stores the statistics for the results screen Fields
#FieldTypeMeaningYou set it 1detailed_statisticsrepeated type not documented yetEach fighter's statistics, keyed by fighter id. (fighter (entity) id -> statistics)
One DetailedStatistics per fighter of the fight.never 2base_statisticsBaseStatisticsThe summary statistics block.
A BaseStatistics record (seven counters).never
  • summary: End-of-fight statistics: one detailed block per fighter, plus a summary block.
  • area: Game.Fight
  • 43 vues
Who besides the owner may enter the haven bag: a two-bit mask, friends and guild members.
Kind event · Area Game.Haven.Bag
Read permissions as a bit mask:
bit 0 (value 1) shared with friends bit 1 (value 2) shared with guild members 0 means private (owner only), 3 means both.
1. Store the whole value. The client keeps it as the bag's current permissions and redraws its two share toggles from it; it does nothing else with the message. 2. Treat it as a replacement, not a change: the client overwrites both toggles every time. 3. To change the setting, send HavenBagPermissionsUpdateRequest with the COMPLETE new mask built from these two bits.
Any other declared member is padding: no dumped client reads it.
When you may send it
Requires character_loaded inferred Related messages
Arrives after HavenBagPermissionsUpdateRequest Fields
#FieldTypeMeaningYou set it 1permissionsint32Bit mask of who may enter: 1 = friends, 2 = guild members; 0 = owner only.never
  • summary: Who besides the owner may enter the haven bag: a two-bit mask, friends and guild members.
  • area: Game.Haven.Bag
  • 37 vues
Sets who besides the owner may enter the haven bag: the complete two-bit mask, friends and guild members.
Kind request · Area Game.Haven.Bag
Build permissions as a bit mask:
bit 0 (value 1) shared with friends bit 1 (value 2) shared with guild members 1. Start from the mask the last HavenBagPermissionsUpdateEvent gave you. 2. Flip the bit you want to change. 3. Send the COMPLETE mask. The client never sends a delta: it recomputes friends + 2 * guild from both toggles every time.
Send 0 to make the bag private again.
When you may send it
Requires character_loaded inferred Raised by: the player toggles 'friends' or 'guild members' in the haven-bag menu's share options proven Related messages
You will then receive HavenBagPermissionsUpdateEvent inferred — the client changes its displayed toggles only when the permissions event comes back Fields
#FieldTypeMeaningYou set it 1permissionsint32The complete new mask of who may enter: 1 = friends, 2 = guild members; 0 = owner only.required
  • summary: Sets who besides the owner may enter the haven bag: the complete two-bit mask, friends and guild members.
  • area: Game.Haven.Bag
  • 40 vues
Sets which extra storages (bank, haven bag) a crafting or auction-house window merges into its item list.
Kind request · Area Game.Inventory
1. Set merged_inventory_type to the window you configure: auction house or crafting (craft and smith magic share one value). 2. Put in included_storages every storage to merge, from ObjectStorageKind: bank, haven bag, both, or none. The client always sends the complete set from both toggles, never a change. 3. An empty list means your inventory only.
One declared member is a string-to-int64 map the client never writes; send it empty.
When you may send it
Requires character_loaded inferred Raised by: the player flips the bank or haven-bag toggle of the auction-house, craft or smith-magic item list proven Related messages
Nothing answers it - send it and move on no reply is handled for it; the views update from the inventory events Fields
#FieldTypeMeaningYou set it 2merged_inventory_typeMergedInventoryTypeWhich window's item list to configure: auction house or crafting.
Observed: 1
Type MergedInventoryType.required 3included_storagesrepeated ObjectStorageKindStorages to merge into that list besides your inventory: bank and/or haven bag.
Type ObjectStorageKind; the client only ever puts bank and haven bag here. Empty = inventory only.optional
  • summary: Sets which extra storages (bank, haven bag) a crafting or auction-house window merges into its item list.
  • area: Game.Inventory
  • 40 vues
One of your items on sale in the auction house: the item, its price and its remaining delay.
Kind struct · Area Game.Exchange
An element of ExchangeBidSellerStartedEvent.objects.
- object (BidItem): the item on sale (its gid, sale uid, quantity and effects). - price: the price you asked for it, in kamas. - unsold_delay: how long it stays on sale before it comes back unsold. The client sorts your sell list by it.
Other declared members (an int64, an enum, a string) are never read by the client; ignore them.
Not sent on its own — a record inside ExchangeBidSellerStartedEvent, never sent on its own. inferred
Used by
ExchangeBidSellerStartedEvent Fields
#FieldTypeMeaningYou set it 1unsold_delayint32Remaining time before the item comes back unsold; the sell list is sorted by it.never 3objectBidItemThe item on sale.
Type BidItem.never 4priceint64The price you asked for this item, in kamas. (kamas)never
  • summary: One of your items on sale in the auction house: the item, its price and its remaining delay.
  • area: Game.Exchange
  • 37 vues
Which window's item list merges extra storages: auction house or crafting.
Kind enum · 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.
Used by InventoryUpdateMergedInventoryTypeRequest.
Each named value is the one a window sends:
auction house the auction house's sell list craft the craft and smith-magic lists (they share it) The remaining declared value is never sent by the client; it is left unnamed.
Not sent on its own — an enum is never sent on its own. inferred
Used by
InventoryUpdateMergedInventoryTypeRequest Values
ValueNumberMeaning MERGED_INVENTORY_TYPE_BID_HOUSE1The auction house's sell list.
Sent by the auction-house item list when its bank or haven-bag toggle changes. MERGED_INVENTORY_TYPE_CRAFT2The craft and smith-magic item lists.
Sent by both the craft and the smith-magic item lists.
  • summary: Which window's item list merges extra storages: auction house or crafting.
  • area: Game.Inventory
  • 36 vues
A whole item stack left your inventory: remove it.
Kind event · Area Game.Inventory
Remove the stack object_uid from your inventory, ALL of it.
1. Find the stack whose uid is object_uid (the uid of ObjectItem, not the gid). 2. Delete it entirely, and any shortcut that points to it.
When only PART of a stack goes away, the server sends ObjectQuantityEvent with the new quantity instead. In the capture, selling a whole stack in the auction house (ExchangeObjectMovePricedRequest) sends this right after ExchangeBidHouseInListUpdatedEvent, followed by InventoryWeightEvent.
Do not send anything back.
When you may send it
Requires context_ready inferred Related messages
Unsolicited - nothing you send causes this the server sends it whenever a stack leaves your inventory for good, for example after you put it on sale in an auction house Fields
#FieldTypeMeaningYou set it 1object_uidint32The uid of the stack to remove from your inventory.
Observed: 8567885never
  • summary: A whole item stack left your inventory: remove it.
  • area: Game.Inventory
  • 40 vues
Long-running stagings of the current map: which sequences are running and since when, so the client can join them at the right point.
Kind event · Area Game.Roleplay
Lists the map stagings that are ALREADY RUNNING and since when. A staging is a scripted sequence of map effects (see StagingEvent): objects moving, materials and particles animating, sounds and music changing. A persistent one keeps running over time, so a player who arrives late must join it where it is, not restart it.
WHY IT EXISTS
StagingEvent starts ONE sequence now, at a percentage of its length. This event instead gives a start DATE: every client computes how long the stagings have been running and plays them from that point, so all players on the map see the same moment.
WHAT TO DO WHEN YOU RECEIVE IT
1. Parse PersistentStagingEvent.start_date as a date-time in UTC (the client parses it with .NET's DateTime parser, assuming universal time) and correct it with your server-clock offset. 2. elapsed = now - start_date, never below 0. 3. For EACH id of PersistentStagingEvent.sequence_ids: play that sequence of the CURRENT map starting elapsed into it, at PersistentStagingEvent.intensity_multiplier percent strength (100 = as authored). An id the map does not have is ignored. 4. If the map is not rendered yet, keep the values and play the sequences once it is. 5. SEND NOTHING BACK. A bot that does not render the map can ignore this event.
The record's bool and its second int32 are never read by the client: ignore them.
WHAT THE OFFICIAL CLIENT DOES. Its map staging service converts the date through its time service, computes the elapsed time and, for each sequence id, calls StagingManager.PlaySequenceFromStartTime(sequenceId, startTime, intensityMultiplier); the manager builds a sequencer at intensityMultiplier / 100 and starts the sequence at that time (queued until the map is rendered).
When you may send it
Requires context_ready inferred Raised by: a player arrives on a map where scripted stagings are already running, or such a staging starts inferred Related messages
Unsolicited - nothing you send causes this the server tells the client which map stagings are running; nothing requests it Nothing answers it - send it and move on the client only plays the sequences; its handler sends nothing Fields
#FieldTypeMeaningYou set it 2intensity_multiplierint32How strongly to play the sequences, as a percentage (100 = as authored). (percent)
The sequencer scales its effects by intensity_multiplier / 100.never 3start_datestringWhen the stagings started. (date-time text, read as UTC)
The client parses it with .NET's DateTime parser and corrects it with its server-clock offset.never 4sequence_idsrepeated int32The running staging sequences of the current map. (map staging sequence ids)
Each is played from the elapsed time since start_date.never
  • summary: Long-running stagings of the current map: which sequences are running and since when, so the client can join them at the right point.
  • area: Game.Roleplay
  • 33 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.