- summary: The server opened a storage exchange, such as the bank: which storage it is and how many slots it has. Its content follows in StorageInventoryContentEvent.
- area: Game.Exchange
The server opened a storage exchange, such as the bank: which storage it is and how many slots it has. Its content follows in StorageInventoryContentEvent.
Kind event · Area Game.Exchange
The server has opened a STORAGE for your character: the bank, or another storage the server hands you the same way. From now on you are in an exchange with that storage until the server closes it.
WHAT TO DO WHEN YOU RECEIVE IT
1. RECORD WHICH STORAGE IS OPEN.
ExchangeStartedWithStorageEvent.exchange_type is an ExchangeType value; the
bank is one of them. ExchangeType is renumbered between client builds, so
compare it with the bank's value in the build you run against, never with a
number taken from another build.
2. RECORD ITS CAPACITY. ExchangeStartedWithStorageEvent.storage_max_slot is
the storage's number of item slots. The bank sends the largest int32
(2147483647): no practical limit.
3. WAIT FOR THE CONTENT. StorageInventoryContentEvent carries every item and
the kamas of this storage. This message carries no item of its own.
4. SEND NOTHING BACK. The client builds no request from it.
5. CONSIDER THE CHARACTER BUSY in this exchange until it closes. Moving items
into or out of the storage happens inside it.
WHAT THE OFFICIAL CLIENT DOES WITH IT
- Converts exchange_type to its own exchange-type code and builds a
storage-start object from (type, capacity).
- Hands both to its exchange service, which sets a flag on the played character
(by every sign the "in an exchange" state) and announces the started exchange
with its type.
- Its storage-window manager opens the storage window with that type and
capacity. The window shows the bank's kamas line only when the type is the
bank.
NOT THE MULTI-TAB STORAGE. A sibling start message carries one more int32, the tab to open (the guild chest's tabs); the client reads all three of its members. This one has exactly two live members.
PADDING. Builds add an unread member: a second ExchangeType field, a second int32, or both. The client reads exactly one of each; use the recovered names, never the field order.
When you may send it
- Requires
character_loadedinferred
State it changes
- Establishes
exchange_openinferred — the client records the started exchange and opens the storage window; items and kamas then move withExchangeObjectMoveRequestandExchangeMoveKamaRequest
Related messages
- You will then receive
StorageInventoryContentEventobserved — the opened storage's items and kamas; both arrived together when the bank was opened, 1 observation - Reply not yet recovered: the exchange ends with an exchange-leave event, and the request that opens a storage (talking to a banker, using a chest) is not recovered here either; neither has a signature yet.
Fields
| # | Field | Type | Meaning | You set it |
|---|---|---|---|---|
| 1 | exchange_type | type not documented yet | Which storage was opened: an ExchangeType value, the bank being one of them. (ExchangeType value) ExchangeType is renumbered between client builds; compare with the value of the build you run against. | never |
| 2 | storage_max_slot | int32 | How many item slots the opened storage has. (slots) Observed: 2147483647 for the bank (no practical limit), observed in a captureThe client hands it to the storage window as the storage's capacity. | never |