The shop
What fills the shop, what a client asks for, and what a server answers.
What fills it
A client’s catalogue of items is its own: no message sends or changes it. A client sets its shop up for its own champion, and what a match sells is settled by the client’s own data. A client filters nothing out of the shop by the champion’s level.
Buying and selling
A client asks to buy with BuyItem, to sell or throw away an item with
RemoveItem, and to swap two slots of its inventory with SwapItems. Closing
the shop sends nothing.
In 3.10–3.15
Opening the shop sends nothing, except in the tutorial, where it sends
TutorialShopOpened.
A client asks to buy only where the item is one the match sells and priced within the champion’s gold.
In 3.01–3.10
A client asks for an item not built from others only where a slot is free or holds the same item below its stack limit.
In 3.01–3.10
A client asks only while the shop is not locked, with the champion dead or near a shop of its side.
A client never asks for an item a player holds only one of and holds already.
In 3.10–3.15
A client asks only where the item’s price, after any substitution, is within the champion’s gold, and where a slot is free, unless the item can be used in the shop. For an item built from others, it asks only where the champion holds a free slot or a part of it, everything the item requires, and gold for what remains.
A client never places an item itself. It shows a purchase only when a server
answers with ItemAdded, a sale or loss with RemoveItemAnswer, and a swap
with SwapItemsAnswer. A server can also set a slot (InventorySlot), set the
whole inventory (InventorySnapshot), change an item’s charges
(ItemCharges), or report an item used (ItemUsed).
ItemAdded places the item and removes nothing: a server sends a
RemoveItemAnswer for each part an item built from others takes up. Gold
falls only as replication states the champion’s gold, and a purchase a server
never answers places nothing and spends nothing.
A purchase a server never answers still plays the sound of buying.
Undo
Where VersionSync’s features set shopUndo, the shop has an undo button, which
is enabled while ShopUndoCount gives the champion undos to spend. Pressing it
sends ShopUndo, whatever the count.
Closing and locking
CloseShop closes the shop where it is open. A message that locks the shop
alone, InputLock or InputLockToggled, closes it and turns off its key.
In 3.01–3.10
A message that locks other input along with the shop stops the shop opening, but leaves an open shop open and its key on.
Messages
Each message of this system in this book, with each layout it has across the book’s patches and every note its definition carries. A layout is the message’s body, after the header its channel’s family puts in front (see Messages).
Loadout
What a server sends to lay out everything a champion brought to the match: the runes set before it began, its summoner slots and the choices made alongside them. The header names the unit this is about.
In every range of this book
Command 41 on events, sent by the server, reliable.
A client’s shop is set up by the Loadout of its own champion: until that arrives the shop opens empty, with no items, no suggested items and no builds, and is drawn at a size that does not fit the screen. A server sends one for every champion at spawning, between SpawnStart and SpawnEnd. It also says what the champion’s wards look like.
| Field | Type | What it is |
|---|---|---|
| runes | 30 × u32 | The runes set before the match, thirty places in runs of nine, nine, nine and three. A place holds zero where nothing was set. |
| summoners | 2 × u32 | The spells in the champion’s summoner slots, by the numbers their names give. |
| choices | 80 × Choice | The choices made alongside them, one place each, and how far each was taken. A place stands empty where nothing was chosen. |
| level | u8 | The player’s account level. |
| wardSkin | u8 | What the champion’s wards look like. |
ItemSubstitution
What a server sends to have one item stand in for another in a champion’s inventory. The header names the champion.
In 3.14–3.15
Command 284 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| original | u32 | The item replaced. |
| substitute | u32 | The item standing in for it. |
SubstitutionCleared
What a server sends to undo an ItemSubstitution, so the shop shows the item itself again. The header names the champion.
In 3.14–3.15
Command 285 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| item | u32 | The item whose substitute is undone. Zero does nothing. |
BuyItem
What a client sends to buy an item from the shop. The header names the sender’s champion.
In every range of this book
Command 130 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| item | u32 | Which item, by the number the client knows it as. |
Vectors (2)
RemoveItem
What a client sends to be rid of an item. The header names the sender’s champion.
In every range of this book
Command 9 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| which | 1-byte bits | |
| which.slot | bit 0 to 6 | Which slot. |
| which.sell | bit 7 | Set to sell the item, clear to throw it away. A client always sends it set. |
SwapItems
What a client sends to move an item from one slot to another. The header names the sender’s champion.
In every range of this book
Command 32 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| from | u8 | The slot the item leaves, which a 4.17 client sends only from 0 to 9. |
| to | u8 | The slot it goes to, never the one from names; a 4.17 client sends only 0 to 9. |
TutorialShopOpened
What a client sends as its player opens the shop. It carries nothing of its own. The header carries zero.
In every range of this book
Command 92 on requests, sent by the client, reliable.
A client sends it only in the tutorial: where the version answer names the mode TUTORIAL and the map’s own data marks it as a tutorial map, as map 12’s does; elsewhere it never sends this.
No body.
ShopEnabled
What a server sends to say whether a champion can use the shop. The header names the champion.
In every range of this book
Command 240 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| flags | 1-byte bits | Whether it can be used. |
| flags.enabled | bit 0 | Set where the shop can be used. |
| flags.unused | bit 1 to 7 | Unused; a server writes zero. |
Vectors (1)
ItemAdded
What a server sends to set what sits in one of a unit’s item slots. The header names the unit this is about.
In 3.01–3.5
Command 110 on events, sent by the server, reliable.
A server sends it to units nobody is buying for.
| Field | Type | What it is |
|---|---|---|
| item | u32 | Which item, by the number the client knows it as. |
| slot | u8 | The slot it went to. A client rejects the message from 38 up. |
| inSlot | u8 | How many of the item the slot holds; zero leaves the slot as it was. The slot’s charges come from the item’s own data. |
| how | 1-byte bits | |
| how.unused | bit 0 to 5 | Unused; a server writes zero. |
| how.announce | bit 6 | Set to announce the purchase: a client shows it where the unit is on its side (or it plays a replay), the item’s own data allows it, the player’s setting asks for it, and the same item was not bought in the last 5 seconds, a repeat within them restarting the wait. |
| how.unused7 | bit 7 | Unused; a server writes zero. |
Vectors (1)
In 3.6–3.15
Command 110 on events, sent by the server, reliable.
It answers no request: a client clears the slot named and puts what follows in its place whether or not anything asked for it. A server sends it to units nobody is buying for.
| Field | Type | What it is |
|---|---|---|
| item | u32 | Which item, by the number the client knows it as. |
| slot | u8 | The slot it went to. A client rejects the message from 40 up. |
| inSlot | u8 | How many of it are in that slot now. |
| charges | u8 | How many uses it carries. |
| how | 1-byte bits | |
| how.unused | bit 0 to 5 | Unused; a server writes zero. |
| how.announce | bit 6 | Set to announce the purchase: a client shows it where the unit is on its side (or it plays a replay), the item’s own data allows it, the player’s setting asks for it, and the same item was not bought in the last 5 seconds, a repeat within them restarting the wait. |
| how.unused7 | bit 7 | Unused; a server writes zero. |
RemoveItemAnswer
What a server sends to confirm an item left a slot. The header names the unit this is about.
In 3.01–3.8
Command 11 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which slot, 0 to 37. For a higher one a client does nothing at all; for 0 to 37 it updates the slot and tells its screens the inventory changed, whatever left is. |
| left | u8 | How many are left in the slot; zero empties it, item and charges cleared. Either way a client cancels any spell or action its player had picked. |
Vectors (1)
In 3.9–3.15
Command 11 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| which | 1-byte bits | |
| which.slot | bit 0 to 6 | Which slot. A client changes nothing from 40 up. |
| which.notify | bit 7 | Set to have a client tell its screens the inventory changed; clear still updates the slot, quietly. |
| left | u8 | How many are left in the slot; zero empties it, item and charges cleared. Either way a client cancels any spell or action its player had picked. |
SwapItemsAnswer
What a server sends to confirm an item moved between slots. The header names the unit this is about.
In every range of this book
Command 61 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| from | u8 | The slot the item left. |
| to | u8 | The slot it went to. |
InventorySlot
What a server sends to set one slot of a unit’s inventory. The header names the unit. A client empties the slot, then fills it where count is above zero, and refreshes the shop where the unit is its own champion.
In every range of this book
Command 82 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| item | u32 | The item. It has no effect where count is zero. |
| slot | u8 | Which slot, 0 to 39. A client ignores the message from 40 up. |
| count | u8 | How many. Zero leaves the slot empty. |
| charges | u8 | Its charges. |
InventorySnapshot
What a server sends to state a unit’s whole inventory at once, with each slot’s cooldown. The header names the unit.
In 3.9–3.10
Command 268 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| items | 8 × record | Eight places, one per slot. |
| items[].item | u32 | The item, or zero for an empty slot. |
| items[].slot | u8 | Which slot. |
| items[].inSlot | u8 | How many are in the slot. |
| items[].charges | u8 | How many charges it holds. |
Vectors (1)
In 3.11–3.13
Command 268 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| items | 8 × record | Eight places, one per slot. |
| items[].item | u32 | The item, or zero for an empty slot. |
| items[].slot | u8 | Which slot. |
| items[].inSlot | u8 | How many are in the slot. |
| items[].charges | u8 | How many charges it holds. |
| cooldowns | 8 × f32 | One per slot. A client applies a slot’s wait only where the slot holds an item and the value is not -1. |
Vectors (1)
In 3.14–3.15
Command 268 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| items | 9 × record | Nine places, one per slot. |
| items[].item | u32 | The item, or zero for an empty slot. |
| items[].slot | u8 | Which slot. |
| items[].inSlot | u8 | How many are in the slot. |
| items[].charges | u8 | How many charges it holds. |
| cooldowns | 9 × f32 | One per slot. A client applies a slot’s wait only where the slot holds an item and the value is not -1. |
Vectors (1)
ItemCharges
What a server sends to set how many charges an item holds. The header names the unit.
In 3.6–3.15
Command 253 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which slot. |
| charges | u8 | How many charges. |
Vectors (2)
ItemUsed
What a server sends after an item in a unit’s inventory is used. The header names the unit.
In every range of this book
Command 159 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which slot. |
| left | u8 | How many are left in it; zero empties the slot. |
| charges | u8 | How many charges it holds. |
Vectors (2)
ShopUndoCount
What a server sends to say how many purchases a champion can still undo. The header names the champion.
In 3.9–3.15
Command 267 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| undo | u8 | How many steps can be undone. |
ShopUndo
What a client sends as its player presses the shop’s undo button. The button is there only where the version answer’s features have shopUndo set, and is enabled only while ShopUndoCount has given the champion undos to spend. It carries nothing of its own. Its identifier is wider than a byte, so it travels behind the escape. The header names the sender’s champion.
CloseShop
What a server sends to close a client’s shop. The header carries zero.