About this book
A wire protocol specification for League of Legends game servers: what a server sends for a client to connect, load a match and play, and what the client does with it. The chapters are meant to be enough to build a conforming server. Each builds on the ones before it, so read them in order.
A chapter holds for every client build covered, except a passage set apart and headed with ranges, which holds for those alone. What a chapter says of a message holds wherever that message has a layout: a build with no layout for a message has no such message, and nothing said of it applies there. Field layouts are not restated in prose: they live in schema/, machine readable, and each system’s chapter ends with its messages and every layout each has. Where a field’s meaning is undetermined, its note says so.
The rules of the game are out of scope: how much a spell deals, what an item costs, how fast a champion levels. A server decides those; the specification says how it tells a client the results.
Check your work against conformance/ as you go; its vectors are this specification’s measure of a conforming server.
If the specification does not answer something you need, do not guess: report it as a defect, as CONTRIBUTING.md explains.
This book covers client builds from 0.8.13.26 up to, not including, 1.0.0.25, in 6 ranges. Every build in a range is held to the same facts.
| Patch | From | Up to | Patch notes | Builds checked |
|---|---|---|---|---|
| 0.8.13.26–0.9.22.13 | 0.8.13.26 | 0.9.22.14 | V0.8.13.26 | 1 |
| 0.9.22.14–0.9.22.15 | 0.9.22.14 | 0.9.22.16 | V0.9.22.14 | 1 |
| 0.9.22.16–0.9.25.20 | 0.9.22.16 | 0.9.25.21 | V0.9.22.16, V0.9.22.18 | 2 |
| 0.9.25.21–0.9.25.23 | 0.9.25.21 | 0.9.25.24 | V0.9.25.21 | 1 |
| 0.9.25.24–0.9.25.35 | 0.9.25.24 | 0.9.25.36 | V0.9.25.24 | 1 |
| 0.9.25.36–1.0.0.24 | 0.9.25.36 | 1.0.0.25 | V0.9.25.34 | 1 |
What the chapters say of a message says nothing of a patch that has no layout for it. A message the chapters name with a link is one this book has; one named without a link is one no build of this book has. The index of messages finds any message, and the appendix on patches gives each patch’s checks, every message it carries, and how it differs from the one before it.
Transport
A server and a client exchange messages over UDP, carried by ENet 1.2.5 with the header each range’s definitions give.
Layering
Four layers carry a message to a socket.
- UDP moves datagrams.
- ENet turns datagrams into ordered, acknowledged deliveries on numbered channels.
- A cipher covers each channel payload.
- A message occupies the deciphered payload, opening with the header its family carries, as Messages defines.
This chapter covers layers 1 to 3.
Stock ENet
This document does not restate ENet. Connection setup, acknowledgement, sequence numbers, retransmission, throttling, and fragmentation behave as ENet 1.2.5 defines them.
Stock ENet 1.2.5 serves a client as it stands: the header, the constants and the commands are the release’s own, and the verify connect stock ENet sends states what the client’s connect asked for.
The packet header
Each range has its own header, below with the constants it is read under. A server MUST use the layout of the version it serves, because a client establishes no connection under any other layout.
Packet headers and constants
In every range of this book
ENet 1.2.5 beneath; little-endian fields. Blowfish in ECB mode over 8-byte blocks, each read big-endian, under a 16-byte key given as text. A client pads what it sends to whole blocks.
| Field | Type | Present when | What it is |
|---|---|---|---|
| sessionId | bytes, 4 | The four bytes the client put in its connect command, carried unchanged on every packet. A client drops a packet carrying any other four. | |
| peer | 2-byte bits | ||
| peer.peerId | bit 0 to 14 | 32767 marks an unassigned peer, which is what a connecting client sends. A server gives the client peer 0. | |
| peer.sentTimeFlag | bit 15 | Set when the header carries a sent time. | |
| sentTime | u16, big-endian | peer.sentTimeFlag set | Milliseconds since the connection opened. |
| Constant | Value | Stock ENet | What it is |
|---|---|---|---|
| maximumPeerId | 32767 | 32767 | Follows from the peer id occupying fifteen bits. |
| maximumTransmissionUnit | 4096 | 4096 | A client asks for 1400 in its connect command, and takes datagrams up to 4096 bytes. |
| minimumDatagram | 8 | 8 | A client discards any datagram shorter than this many bytes. |
A header built from the schema is necessary to reach a client, and not sufficient on its own. Where a field’s content is free rather than fixed, its note in the schema says so.
conformance/vectors/transport holds a header with a sent time and one
without.
A client discards any datagram shorter than the minimumDatagram constant of
its range. A server MUST NOT send a shorter datagram.
The connect command
A server’s verify connect MUST state the channel count, and the throttle interval, acceleration and deceleration, the connect command carried: a client abandons a connection whose verify connect states anything else.
In 0.9.25.24–1.0.0.24
A client asks for 7 channels.
Maximum transmission unit
A client asks for a transmission unit of 1400 bytes, and discards any datagram
whose UDP payload, packet header included, exceeds the
maximumTransmissionUnit constant of its range. A server MUST NOT send a larger
datagram.
That constant is above what a client asks for, so a server needs no clamp.
The cipher
Whether a payload is enciphered follows from the state of the connection rather than from the channel it travels on. A connection begins with no cipher state, and the request that establishes it travels in the clear apart from one field it carries enciphered as proof. Everything after that is enciphered, on every channel and in both directions, the answer to that request included.
schema/protocol.json records which cipher, in which mode, and the shape of a
block. A server MUST use that cipher; a client accepts no other. A standard
implementation of Blowfish interoperates with a client.
What a server sends carries no padding. Trailing bytes that do not fill a block travel unchanged, so a payload shorter than one block travels in the clear.
A client pads what it sends to a whole number of blocks and enciphers all of it. The bytes it adds follow the message’s own fields to the end of the payload and hold nothing in particular.
conformance/vectors/cipher covers a whole block, a payload with a tail too
short to fill one, and a payload shorter than a block.
The key
Both ends hold the key before a connection opens. Nothing on the wire negotiates it, and no exchange derives it. A client receives it as a launch argument.
A client decodes nothing: its key is the first sixteen characters of the argument, as they stand. A key both this and later builds take alike is sixteen characters of text.
Registration associates the key with a connection. Register travels in the
clear apart from one field enciphered under the key, and a server MUST refuse a
connection whose deciphered field is not what it expects, since that field is
all that shows the client holds the key. schema/messages
records the exchange, as Register and Registered.
Channels
In every range of this book
| Channel | Name | Family |
|---|---|---|
| 0 | registration | registration |
| 1 | requests | game |
| 2 | clock | game |
| 3 | events | game |
| 4 | transient | game |
| 5 | chat | chat |
| 6 | roster | session |
Messages
A message occupies one deciphered channel payload. The payload opens with the header the message’s family carries, and the body begins where that header ends.
schema/messages holds one file per message identity, and each file records
one or more revisions. A revision carries the value identifying the message,
the channel it travels on, its direction, how the transport delivers it, and
the fields of its body.
Families
Every channel carries one family of messages, and schema/channels.json says
which. A family fixes two things: the numbering its command values are drawn
from, and the header that precedes every body on it. schema/families.json
records both. Two channels of one family share a numbering, so a value
identifies at most one message across both, and the same value on channels of
different families is two unrelated messages.
A family whose header carries no command field has one message each way on each channel it rides, read from the payload’s first byte; its revisions number that message 0.
The family, not the channel, selects the header.
A revision names the channel it travels on, and names any others in alsoOn.
Those channels carry the same family, so the command value means the same
message on each, and the body is byte for byte the one the revision records.
What changes between them is delivery: each entry states how the transport
carries the message there. A server MAY send such a message on any channel the
revision names, and what it gets is the delivery stated for that channel. A
client reads it the same way on every one of them, so a server MUST NOT vary
the body with the channel it chooses.
The command
A revision records the value that identifies it, and the family’s header says where that value sits on the wire. That value is not a field of the message: it belongs to the header, along with anything else the family carries before a body begins.
A family can keep some values of the leading byte for framing rather than for
messages, and schema/families.json lists which. Where a family names an
escape, that value means the real identifier is wider than a byte and travels
elsewhere in the header, which is how a family numbers more messages than a
byte holds. A revision records the identifier either way, and never the escape.
Directions
A revision states whether it travels clientToServer, serverToClient, or
bidirectional. Direction is part of what identifies a message, so one value
serves two messages travelling opposite ways within a family. A bidirectional
revision claims that value both ways.
A container of several messages
A client unwraps no container: a payload whose command is 255 does nothing, on any channel. A server MUST NOT send one, because nothing inside it reaches the client.
Reading a body
A body begins where its family’s header ends. Fields occupy it in the order the revision lists them, each beginning where the one before it ended. A revision never restates a field its family’s header already carries, and never takes a name from it. Nothing is aligned and nothing is padded between fields. A field’s size is fixed by its type, given as a literal, carried by an earlier field, or one of the two words below.
Where a size or a count names an earlier field, it names one that has already
been read and one holding an unsigned integer. It names either a whole field or
one run of bits inside a field, and a run is written as the field name, a full
stop, and the run name. remaining and terminated are reserved words rather
than names, so no field carries either.
A field of a body names only fields of that body. A family’s header is read first, but it belongs to every message of the family rather than to this one, so nothing in a body is sized or governed by it.
What counts as an earlier field depends on what encloses the field doing the naming. An item of an array reaches the fields of the body around it. The fields of a struct reach only each other, because a struct is used wherever it occurs, so it cannot depend on what surrounds any one use.
remaining means every byte from where the field begins to the end of what
encloses it: the message body, or the byte length of the struct or array the
field sits inside. A field measured that way is the last one its enclosure
defines, because nothing inside that enclosure can follow it.
An enclosure that states a byte length is itself an ordinary field, and fields follow it as usual. An enclosure that states none ends where the body ends, so it is the last field too, and so is any struct whose own last field is one of these.
A body ends where its last field ends, with one exception: a client accepts a
Registered carrying bytes past its record, and takes no meaning from them. A
sender MUST write the fields a revision lists and nothing after them.
Byte order
A revision of schema/protocol.json states the byte order that covers a
version range, and every multi byte field in that range is read that way. A
field that differs states its own order, which overrides the range.
The types
Integers. u8 through u64 and i8 through i64, in two’s complement.
f32 and f64 are IEEE 754 binary floating point.
Bytes. A run of bytes with no interpretation. Its size is fixed, named by
an earlier field, or remaining.
Strings. A run of bytes and an encoding, either utf8 or ascii. A size
is a literal or the name of an earlier field. A string given one occupies that
many bytes whatever its content, and the zero bytes at its end are padding
rather than content, so they are dropped. A zero anywhere else belongs to the
text and stays. A string sized terminated ends at the first zero byte, that
byte belongs to the field, and it is the only one dropped. A string sized
remaining carries every byte to the end of its enclosure, zeros included. A
size counts bytes rather than characters.
Arrays. A run of one repeated shape. An array states either a count of
items or a size in bytes, and never both. A count is a literal, the name of an
earlier field, or remaining, which repeats to the end of the enclosure. A
size in bytes repeats until those bytes are consumed, which is how a run whose
length travels as a byte count is recorded.
Structs. A named group of fields, defined in schema/types and used
wherever it occurs. A struct has revisions as a message does, and a message
revision that holds one lies wholly within one of the struct’s revisions, which
gives the layout it holds there. A struct occupies exactly the bytes its own
fields occupy. Where its length travels on the wire instead, the field states a
size in bytes, as a literal or as the name of an earlier field. A sending end
MUST write a struct’s fields to fill that size exactly.
Bits. A field of one or more bytes divided into named runs, whose widths total exactly the bits those bytes hold. No run is wider than 32 bits. The bytes form one little endian word whatever the range’s byte order, or a big endian one where the field says so. Runs are listed from the least significant bit upward, and each reads as an unsigned integer of its own width.
Bit arrays. A run of the same group of bit runs, repeated a stated number of times. The groups follow one another from the low bits of the first byte upward, crossing byte boundaries without padding, and the field occupies as many whole bytes as the groups need. The bits above the last group are clear. A count is written as an array’s is.
Records. A group of fields named together and read one after another, with
nothing between them and nothing around them. A record occupies exactly what
its fields occupy. Unlike a struct it is written where it is used rather than
defined in schema/types, and its fields reach the fields around it, so a
record is a way of naming part of a message rather than a shape reused
elsewhere.
What a field names
A size, a count, or a rule about whether a field is present names an earlier field. Five forms are written:
- a name on its own, which is a field of the same enclosure;
- a name, a full stop, and a run inside it, where that field is
bits; - a name, square brackets, and a name inside them, which is the item of an earlier array standing at the same position as the item doing the naming, so that two arrays run together;
- either of the first two inside
{"field": …, "minus": N}, which is that field’s value less the literal N, and N is never larger than the value; - either of the first two inside
{"field": …, "bitsSet": true}, which is how many bits of that field’s value are one.
Nothing else is computed.
Presence
A field states a presence rule when it occupies bytes only under a condition, and a field whose condition does not hold occupies no bytes at all. The rule names an earlier field or bit run holding an integer, and states a value it carries, or a set of values, any one of which satisfies it. Without one, any value other than zero satisfies the rule. A field its own rule left out holds no value, so a rule naming that field does not hold either.
A rule can instead name remaining, which no field is called. A field under
that rule is present where the payload has bytes left at that point and absent
where it has ended, so a message whose sender stops early reads as one whose
later fields are absent. A sender that stops early MUST stop where a field
under such a rule begins.
A rule can mark one of its sides unseen; that side’s layout is the one the
field states.
A field that travels enciphered
A payload is enciphered as a whole once a connection has a cipher state, and a message says nothing about that. Before a cipher state exists, a payload can carry one field enciphered under the key both ends hold, and the field says so.
Such a field occupies whole cipher blocks, because a field filling part of one would travel half in the clear. Its recorded value is what the bytes mean once deciphered, so a reader deciphers the field alone and leaves the payload around it untouched.
Enumerated values
Where an integer field, or a run of bits inside one, takes a fixed set of values, the field lists what they mean, keyed by the value on the wire. Each entry names the value, in the same form a field name takes, and no two entries of one field share a name. A key fits the width and sign of what it names. A value with no entry has no meaning this specification states.
Revisions
A revision covers a range of client versions, from one version inclusive to another exclusive. Every revision states where it stops. Ranges of one message never overlap. A version no revision of a message covers has no such message: a client there neither sends nor takes it, and what a chapter says of it does not apply.
A revision covers no version that schema/protocol.json, schema/channels.json
and schema/families.json do not all describe, because a range none of them
reaches has no header, no byte order, and no channel to travel on.
Names and notes
A field name begins with a lower case letter and carries letters and digits after it. A message identity and a struct identity begin with a capital. A file is named for the identity it defines, and a message’s vectors sit in one directory named for that identity, with each capital starting a new part, lower case and joined by hyphens.
A field name is unique among the fields beside it, and an item of an array never takes the name of a field enclosing it.
Anything in schema/ carries a note wherever a fact needs words: a revision, a
field, a run of bits, a value. A note states what the wire carries and what
each end does. It carries no requirement keyword and says nothing changed.
How a message is delivered
A revision states whether the transport carries it reliably, unreliably, or unsequenced, which is what the message needs of the transport: a message another supersedes can be lost, and one that carries an account of what happened cannot. A server MUST send a message with the delivery its revision states.
Quick chat
Vectors
Every revision carries at least one conformance vector. A message vector opens with its family’s header and is read to the end. conformance/ says how a vector is written and how to run one.
Family headers
A field present when remaining is set is present exactly where the payload has bytes left at that point.
In 0.8.13.26–0.9.22.13
The game family:
| Field | Type | What it is |
|---|---|---|
| echo | u16 | A client reads nothing here. It writes the command again, or 114 in CharacterSelected and ClientReady; a server writes the command. |
| command | u16 | Which message this is. |
| netId | u32 | A network object the message concerns. Which object, and whether it is the origin or the subject, is settled by each message rather than here, and some messages carry a value naming none. |
The session family:
| Field | Type | What it is |
|---|---|---|
| command | u8 |
The registration family:
| Field | Type | What it is |
|---|---|---|
| command | u8 |
The chat family:
No header.
In 0.9.22.14–1.0.0.24
The game family:
| Field | Type | What it is |
|---|---|---|
| command | u8 | 255 introduces a container of several messages rather than a message of its own, which Messages describes. |
| padding | bytes, 3 | A client reads nothing here, and most of its own messages leave it unwritten. A server writes zero. |
| netId | u32 | A network object the message concerns. Which object, and whether it is the origin or the subject, is settled by each message rather than here, and some messages carry a value naming none. |
The session family:
| Field | Type | What it is |
|---|---|---|
| command | u8 |
The registration family:
| Field | Type | What it is |
|---|---|---|
| command | u8 |
The chat family:
No header.
Objects and identifiers
How the things a match is about are named on the wire, and when an object enters and leaves a client’s world.
The identifiers
| Identifier | Width | Formed | No one |
|---|---|---|---|
| Player id | 64 bits, signed | the player’s account; a client is given its own when started | -1, every bit set |
| Client id | 32 bits, unsigned | chosen by the server for each player at registration, counting from 0 | 4294967295 |
| Seat | a place in a side list | the order of a side’s player ids in Roster | an empty place |
| Net id | 32 bits, unsigned | chosen by the server for what it creates; worked out from a name for what a map holds | 0 |
| Node | 8 bits, unsigned | the owning client’s client id plus 1, or 0 for an object no client owns | 0 |
| Region id | 32 bits, unsigned | chosen by the server for each region, and carried by RegionAdded | see below |
| Name hash | 32 bits, unsigned | worked out from the name of a spell, an effect, a particle or a bone | 0 |
A field’s own definition gives its exact type. Where a field carries one of these, it carries it whole, at the width above.
In 0.8.13.26–0.9.22.13
No region id stands for no region.
In 0.9.25.24–0.9.25.35
A region id of 0 names no region: given a
RegionAddedcarrying 0, a client gives the region an id of its own, its own node in the top byte and a count below it, which no message from a server can name.
A server MUST give each player a client id from 0 to 252.
A client takes a client id only from 0 to 252, and leaves on any other.
How they relate
A player is known by a player id. A server answers a client’s Register with
Registered, and the one carrying the client’s own player id gives the client
its own client id.
In 0.8.13.26–0.9.22.13
A client acts on that
Registeredalone and ignores every other, so it pairs no other player’s player id with a client id. A server MUST send it before any create message, because a client given a create message before it has its own client id stops.
In 0.9.25.24–0.9.25.35
Registration pairs each player id with a client id: a server answers a client’s
Registerwith oneRegisteredfor every seat. Every later message that names a player by client id is read through that pairing.
Roster lists each side’s player ids in order, and a player’s seat is their
place in that list. A client finds a seat’s client id through its player id.
SeatName, SeatChampion and the VersionSync seats name a player by player
id; SeatLoadProgress names both.
A champion carries the client id of the player it belongs to. The
CreateChampion carrying a client’s own client id makes that champion the
client’s own.
In 0.9.25.24–0.9.25.35
A bot’s champion carries 4294967295.
Net ids
A net id names one object in a client’s world: a unit, a missile, a particle, a marker, a prop. The header of every game message carries one, and fields naming a unit, an owner or a target carry one too.
- A server MUST NOT give an object net id 0, which names nothing.
- A server SHOULD NOT give an object a net id whose top byte is 0xFF, which the identifiers of what a map holds use, nor one whose top byte is any client’s client id plus 1, which a client uses for objects of its own making.
- A server MUST NOT give a new object a net id it has given another object in the same match, except in a soft reconnect (see below).
In 0.8.13.26–0.9.22.13
A client given a create message for a net id it already holds stops.
In 0.9.25.24–1.0.0.24
A client that still holds the earlier object gives the net id to the new one, so messages naming it reach the new object, and removing either leaves the id naming neither.
A create message carries a node beside the object’s net id.
Net ids of what a map holds
Some objects are on the field before any message puts them there, and no message ever does: the buildings a side defends, the shops beside them, and the spawn points a side’s minions come from. A receiving end knows them from the map it loaded, and every message naming one names it by an identifier worked out from that object’s name in the map.
The identifier is the CRC-32 of the name, with the top byte set:
identifier = crc32(name) | 0xFF000000
The name is taken byte for byte with its case kept, so OrderShop01 and
orderShop01 are two names and give two identifiers. The CRC-32 is the common
one: the polynomial 0x04C11DB7 read reflected, starting from 0xFFFFFFFF and
finishing with every bit inverted, so the nine bytes 123456789 give
0xCBF43926.
Among the identifiers with that top byte are these:
| Name | Identifier |
|---|---|
Barracks_T1_C1 | 0xFF4A20F1 |
Barracks_T1_L1 | 0xFFD23C3E |
Barracks_T1_R1 | 0xFF9303E1 |
Barracks_T2_C1 | 0xFFFF8F1F |
Barracks_T2_L1 | 0xFF6793D0 |
Barracks_T2_R1 | 0xFF26AC0F |
__P_Order_Spawn_Barracks__C01 | 0xFFB77171 |
__P_Order_Spawn_Barracks__L01 | 0xFFEB364C |
__P_Order_Spawn_Barracks__R01 | 0xFF53B836 |
__P_Chaos_Spawn_Barracks__C01 | 0xFFBA00E8 |
__P_Chaos_Spawn_Barracks__L01 | 0xFFE647D5 |
__P_Chaos_Spawn_Barracks__R01 | 0xFF5EC9AF |
____P_Chaos_Spawn_Barracks__C01 | 0xFF707D61 |
ChaosShop01 | 0xFF3A98D9 |
chaosShop01 | 0xFFA6170E |
HQ_T1 | 0xFFF97DB5 |
HQ_T2 | 0xFFF02C0F |
OrderShop01 | 0xFF8C490C |
orderShop01 | 0xFF10C6DB |
In 0.8.13.26–0.9.22.13
Map 1 holds the six
Barracksnames,HQ_T1,HQ_T2, the six spawn points named__P_Order_Spawn_Barracks__and__P_Chaos_Spawn_Barracks__withC01,L01orR01, and the shopsOrderShop01andChaosShop, whose identifier is 4279618595. Its turret buildings carry the identifiers their names give too:Turret_T1_C_00toTurret_T1_C_07,Turret_T1_L_02,Turret_T1_L_03,Turret_T1_R_02,Turret_T1_R_03,Turret_T2_C_00toTurret_T2_C_05,Turret_T2_L_01toTurret_T2_L_03, andTurret_T2_R_01toTurret_T2_R_03.
In 0.9.25.24–1.0.0.24
Every object a map places carries the identifier its name gives, turrets, navigation points and props among them.
In 0.9.25.24–0.9.25.35
Map Holds 1, 2 the six Barracksnames,HQ_T1,HQ_T2,orderShop01,chaosShop01, the six spawn points named__P_…, and turrets namedTurret_T1_…andTurret_T2_…,Turret_OrderTurretShrineandTurret_ChaosTurretShrineamong them3 Barracks_T1_C1,Barracks_T2_C1,HQ_T1,HQ_T2,OrderShop01,ChaosShop01,____P_Chaos_Spawn_Barracks__C01, and turrets,Turret_T1_C_08among them
The Barracks names above belong to inhibitors, whatever the name says. The
minions a side sends out come from spawn points of their own, which are among
the objects a map holds.
A client puts a minion on the field for a SpawnFromBarracks naming a spawn
point, and creates nothing for one naming an inhibitor such as
Barracks_T1_C1.
A server MUST name each object a map holds by the identifier its name gives.
In 0.8.13.26–0.9.22.13
CreateTurretcreates a turret of its own at the place its body gives, rather than naming one the map holds.PlaceTurret, whose header names a turret building the map holds, creates a new turret at that building’s place: the building keeps its own identifier, and eachPlaceTurretmakes another turret.
In 0.9.25.24–1.0.0.24
CreateTurretgives a net id to a turret the map already holds, matched by name. Given to a turret that already has one, it gives it a second, and both name it.
In 0.9.25.24–1.0.0.24
CreateTurretmatches a turret’s name without regard to case, and does nothing where the map holds no turret of that name.
What a client holds
A client holds an object from the message that creates it until the message, or the end of its life, that removes it. Creating messages are listed in Units. What a map holds, a client holds from the moment it loads the map.
EnterSight and EnterLocalSight carry no other message, and act only on a
unit the client already holds.
Leaving a client’s sight removes nothing: LeaveSight and LeaveTeamSight
hide an object, and it is held as before.
LeaveLocalSight hides an object too, and it is held as before.
In 0.8.13.26–0.9.25.35
A new
SpawnPetfor an owner removes that owner’s pet before it.
In 0.9.25.24–0.9.25.35
A client removes a nexus about 4 seconds after
BuildingDiednames it, and can fail as it does. An inhibitorBuildingDiednames is held.
A soft reconnect
SoftReconnect rebuilds a client’s world without a new connection, in two
halves. The first marks every unit and every object kept until a checkpoint,
inhibitors aside. A create message for a marked net id replaces the marked
object rather than keeping the id on it. The second removes every object still
marked. In between, a server sends again each object the client is to keep.
Each stage either marks or removes.
Messages about objects a client does not hold
A message whose header names a net id the client does not hold, or whose body names one it needs, does nothing, and the client answers nothing for it. Creating messages are the exception, and so are these:
CreateFollowerdoes nothing where the unit it follows is not held.- A
Replicationbatch skips the units a client does not hold, and goes unanswered (see Ordering). SoundPlayednaming an owner the client does not hold plays the sound with no place.
SpawnPet names the pet’s owner in its header and carries the new pet’s net
id in its body, and does nothing where that owner is not held.
In 0.9.25.24–1.0.0.24
A client sends a
WaypointGroup’sWaypointAckbefore it reads any path, whatever units the paths name. A path for a unit not held is read through and dropped, and is not applied once an object takes that net id.
Nothing else is held back for later: a message that arrives before the message creating what it names is lost. Ordering says what that requires of a server.
A message naming its sender
A server MUST set any field naming the sender from the connection the message arrived on, and MUST NOT copy the value the message carried; otherwise one player can send messages every other client attributes to another.
Name hashes
Some things a message names are known to a client by name: a spell, an effect a unit carries, a particle, and a place on a unit that particles hang from. A message names one of these by a number worked out from its name.
The number is the ELF hash of the name with its capital letters lowered:
number = 0
for each byte b of the name, with A to Z made a to z:
number = (number << 4) + b
high = number & 0xF0000000
if high != 0:
number = number ^ (high >> 24)
number = number & ~high
Every step is worked in 32 bits. Only A to Z change, so SummonerFlash
and summonerflash give one number. A particle’s name includes its extension,
so the number comes from global_ss_flash.troy and not from
global_ss_flash. The nine bytes 123456789 give 0x0678AEE9.
A byte from 128 to 255 enters the hash as its value less 256, worked in 32 bits, rather than as itself.
| Name | Number |
|---|---|
SummonerFlash | 0x06496EA8 |
RegenerationPotion | 0x0E75DC7E |
EzrealMysticShotMissile | 0x05FE9CE5 |
global_ss_flash.troy | 0x0058E369 |
L_HAND | 0x0725E844 |
A server MUST name each such thing by the number its name gives.
Ordering and acknowledgement
What arrives in what order, which numbers say that one statement supersedes another, and what a client answers with. A server whose messages arrive out of the order these rules expect has them ignored or lost.
Across channels
The transport delivers a channel’s reliable messages in the order they were sent, and drops an unreliable message that arrives after a later one on the same channel (see Transport). Nothing orders one channel against another.
A client acts on game messages in the order they arrive, whichever channel they arrive on, and holds none back for later but the paths Objects and identifiers names. A message that arrives before the message creating what it names is lost. So:
- A server MUST send the message creating an object before any message naming it.
- A server MUST NOT rely on a message on one channel arriving before a message sent later on another. Where one depends on the other, a server sends both on one reliable channel, or sends the second once the transport has acknowledged the first.
The messages creating a unit travel reliably on the events channel, while
Replication and WaypointGroup travel unreliably on the transient channel,
so either can overtake the message creating the unit it names. A Replication
batch skips a unit the client does not hold, and goes unanswered (see below),
so a server sends a newly created unit’s values again until a batch naming it
is answered.
In 0.9.25.24–1.0.0.24
A server can instead send
Replicationreliably on the events channel.
Numbers that supersede
Several messages carry a syncId: a number that lets a client tell a newer
statement from an older one, or a server tell which statement an answer is
for. Each family keeps its own numbers, and compares them in its own way.
| Family | Carried by | Counted | A client takes a statement |
|---|---|---|---|
| Replication | Replication | per unit and per group of values, from 0 | whose number is greater than the last taken for that unit and group, with no wrapping: 0 is never taken |
| View | Camera, from a client | per client, counting up as the view moves | (a client’s own report) |
In 0.8.13.26–0.9.22.13
A client compares no numbers on movements: it takes every path as it arrives, whatever
syncIdit carries.
In 0.9.25.24–1.0.0.24
WaypointGroup,WaypointGroupAtSpeed,Path,PathWithSpeed,EnterSight, andUnitStoppedandSpellCastAnswerwhere they carry one, share one count per unit, from -1. A client takes a statement whose number is equal to the unit’s or ahead of it; a number 230 or more behind counts as ahead, so the count can wrap. A group of movements carries onesyncIdfor every unit in it. A server MUST give each statement about a unit a number equal to or ahead of the last it gave that unit.
A statement a client does not take changes nothing; what follows it still applies.
For replication, a server MUST give each batch carrying a unit a number greater
than the last batch carrying that unit, and MUST NOT give one 0. A server
SHOULD give every batch a number of its own, so that a TransientAck names one
batch.
In 0.8.13.26–0.9.22.13
A client sends a view report again until a server answers with its number. A server MUST answer each view report with
CameraAck, carrying its number.
In 0.9.25.24–0.9.25.35
Nothing answers a view report: a client sends its latest report again, twice the round trip time plus 1/30 of a second apart, for as long as the match runs.
What a client answers
| A server sends | A client answers |
|---|---|
QueryStatusAnswer | nothing; it asks again with QueryStatus until told the server is ready |
WaypointGroup, WaypointGroupAtSpeed | WaypointAck for each group, taken or not, naming the units in it that carried a token (see Movement) |
Replication | TransientAck, where every unit the batch names is held |
ClockSync | ClockReply (see Time) |
In 0.9.25.24–1.0.0.24
A client also answers each
PathandPathWithSpeed, taken or not, with aWaypointAckcarrying itssyncId.
A client sends these answers when it plays a match, not while it plays back a stream.
Space
How positions, distances and directions are carried, whichever system carries them, and what a map gives that nothing on the wire carries.
Units and axes
Positions and distances are in world units. The ground is the plane of x and z, and y is height. A field that carries a position on the ground carries x and z; one that carries a point in the world carries x, y and z. Where a message leaves height out, a receiving end takes it from the ground beneath.
A position travels as a 32-bit float on each axis unless its definition says
otherwise. Where the paths of Movement and MovementAtSpeed are compact,
they carry their points as integers measured from the map’s origin, and
Movement says how those points are worked out.
Directions
A direction is carried as a vector, not as an angle:
- A unit’s facing in the movement state
EnterSightcarries is a pair along the ground, x and z. UnitStopped,MissileState, a particle’s facing and a view’s direction inCameracarry x, y and z.FaceDirectioncarries x, y and z, and turns the unit to face along them.
FaceDirection turns the unit along x and z alone, and leaves it as it is
where both are 0.
A champion carries no facing of its own when created.
In 0.8.13.26–0.9.22.13
A champion is created facing +z, whatever its map’s table of spawn positions says, and so is a monster.
In 0.9.25.24–1.0.0.24
A champion faces as its map’s table of spawn positions says (see
CreateChampion).
A prop of scenery carries angles instead: MapProp gives its turn as pitch,
yaw and roll, in degrees, where yaw 0 faces +z and yaw 90 faces +x. For an
active prop, the same three fields are a direction vector.
Maps
VersionSync names the map to load by number. A client takes a map’s
buildings (see Objects and identifiers), spawn positions and path
origin (see Movement) from its own data (see
The client’s data), and can load only a map it has data for.
In 0.8.13.26–0.9.22.13
A client loads the map its own settings name, map 1 where they name none, and has data for map 1 alone, Summoner’s Rift.
In 0.9.25.24–0.9.25.35
A client has data for maps 1, 2 and 3.
Time
Which clocks a match runs on, and which of them each time on the wire is measured against.
How a time is carried
A time is in seconds, as a 32-bit float, unless its definition says otherwise. A field is either a moment, read against a clock, or a duration, which starts when the message arrives. Every definition says which.
Exceptions:
Pausedcarries the time left in a hold as a whole number of seconds.- A stream’s chunk and key frame intervals (
StreamMetadata) are in milliseconds.
The match clock
The match runs on a server’s clock, which counts seconds from 0 as play begins.
ClockSync states where it stands, and a client sets its own clock to that,
plus its allowance for how late the statement arrived. A client answers with
ClockReply, from which a server measures the round trip. A server can report
the round trip it measured with ClockConvergence.
A client takes the round trip ClockConvergence reports into its allowance
for lateness.
Each ClockConvergence sets a client’s allowance to 0.8 times what it was
plus 0.1 times the round trip it reports.
A server sends ClockSync with 0 as play begins (see
Joining a match), and again whenever it means a client’s clock to
catch up with its own.
In 0.8.13.26–0.9.22.13
A client’s match clock starts at 0 as the client finishes loading, and runs on the client’s own timer from then; a
ClockSyncsets it wherever it stands.
In 0.9.25.24–1.0.0.24
A client’s match clock does not run until the first
ClockSyncarrives, which sets it. After that it runs on the client’s own timer, and a laterClockSynconly corrects it, however long a server leaves between them.
In 0.9.25.24–1.0.0.24
GameSpeedsets the pace of the match clock, and a hold sets the pace to 0 until play resumes. A server that runs a match at other than normal speed MUST sendGameSpeedwith that speed, or a client’s match clock runs apart from its own.
In 0.9.25.24–1.0.0.24
A client runs no clock but the match clock, and takes whatever speed
GameSpeedgives.
In 0.9.25.24–0.9.25.35
A
GameSpeedthat arrives during a hold sets the match clock running again at once.
A client shows the match’s time counted from the moment on the match clock at which the match began.
In 0.8.13.26–0.9.25.35
A client takes that moment from its own match clock, once, as its game loop runs.
Moments on the match clock include:
- when a monster arrives (
CreateNeutral’sspawnAt, where it carries one); - when a prop’s animation starts (
MapPropChanged, where it carries one); - when an assisting unit last dealt damage (
ClientEvent); - when a champion’s passive comes off cooldown, where a client is told it (see Replication).
A server MUST state each of these on the clock it sends in ClockSync.
A stream’s clock
A watching client plays a stream against a clock of the stream’s own, which the stream’s records set (see Watching a match).
Sides and slots
Values many systems share: which side something is on, and how a unit’s spell, item and effect slots are numbered.
Sides
A side is 100 or 200, for the two sides that play, or 300 for what belongs to neither, such as a monster of no side. Where a field takes 0, it names no side; its note says what that means. A few fields carry a side in another form, and their notes say which.
Roster lists the players of each side, and a player’s place in that list is
their seat (see Objects and identifiers).
Spell slots
A champion has two books of spells. Its own book holds these slots:
| Slot | Holds |
|---|---|
| 0 to 3 | the champion’s spells; 3 is its ultimate |
| 4 on | the spell of the item in the inventory slot four below, for each such slot |
| after those | spells a server places for the match’s own purposes |
Its summoner book holds the two summoner spells, in slots 0 and 1.
A message that names a spell slot either carries a flag, set for the summoner
book and clear for the champion’s own, or names the champion’s own book only.
A cast’s description (SpellCast) carries no flag: the spell’s own data says
whether it is a summoner spell.
In 0.8.13.26–0.9.22.13
A cast’s slot also takes 64, for a basic attack. A client reports any other slot beyond the book as an error, and carries on.
In 0.9.25.24–1.0.0.24
A cast’s slot also takes 64 to 70, for a basic attack.
A server MUST NOT name a champion book slot beyond the book’s last slot.
In 0.8.13.26–0.9.22.13
A champion’s own book ends at slot 22. A client reports an
Autocastnaming a slot above 22 as an error, and keeps it all the same. A server MUST NOT name a champion book slot above 22.
In 0.9.25.24–0.9.25.35
A champion’s own book ends at slot 44. A client reports an
Autocastnaming a slot above 44 as an error, and keeps it all the same. A server MUST NOT name a champion book slot above 44.
Inventory slots
A champion’s inventory holds the six items a player sees and uses in slots 0 to 5, and further slots after them up to its last.
An item is cast from the spell slot four above its inventory slot, and moving an item moves its spell with it. A server MUST NOT name an inventory slot beyond the inventory’s last slot.
In 0.8.13.26–0.9.22.13
A champion’s inventory ends at slot 14, and holds neither a trinket nor an item for recalling. A client takes an answer about an item naming a slot above 14 all the same, reporting it as an error and writing past the end of the inventory. A server MUST NOT name an inventory slot above 14.
In 0.9.25.24–1.0.0.24
A champion’s inventory ends at slot 36, and a player sees and uses only slots 0 to 5. A client takes a
RemoveItemAnswernaming a slot above 36 all the same, reporting it as an error and writing past the end of the inventory. A server MUST NOT name an inventory slot above 36.
Effect slots
Adding an effect to a slot replaces whatever held it, and removing one empties the slot whatever its name.
Each unit has 32 slots for the effects it carries, 0 to 31. A client uses a slot above 31 all the same, past the end of the unit’s slots. A server MUST NOT name an effect slot above 31.
The client’s data
What a server needs that no message carries, and takes from the files a client installs: the buildings and spawn points of a map, the ground units walk on, and the figures of champions, items and spells. A server SHOULD take its figures from these files: a client draws a match from them, and figures from elsewhere disagree with what it shows.
What a server reads
- The buildings of a map: the names a client knows its turrets, inhibitors and nexuses by, from which Objects and identifiers works out the identifier of each.
- The spawn points: where each side’s champions begin.
- The ground: the grid a map’s units walk on, which a server needs to find paths.
- The figures: each champion’s base statistics, each item’s price and what
it is built from, and each spell’s cooldowns, costs and ranges, which a server
states through replication and
SpellCast.
In 0.8.13.26–0.9.25.35
A path carries its points as they lie in the world, and takes no origin from the ground.
In 0.8.13.26–0.9.22.13
The client has map 1 alone. It loads the map its own game configuration names under the key
Missionof the sectionHacks,Map1where that is absent, and no message names the map.
In 0.9.25.24–0.9.25.35
The client has maps 1, 2 and 3.
A client installs its files under one root, with the paths below; an install that packs them into archives keeps the same paths inside.
Buildings. LEVELS/Map1/Scene/room.dsc lists a map’s scene objects, one
line each: a file name and a quality number. Each object’s own file sits beside
it and gives its name. A client creates no object from a name holding
_Destroyed or _FB. On map 1 the names run Turret_T<side>_<lane>_<number>
for a lane turret, Barracks_T<side>_<lane>1 for an inhibitor and HQ_T<side>
for a nexus, side 1 for Order and 2 for Chaos and lanes L, C and R, with a
shrine turret for each side; the numbers differ between the sides, and a server
MUST take the names from the files.
In 0.8.13.26–0.9.25.35
Each object’s file is
.scoas text or.SCBas binary, and gives its name on itsName=line.
In 0.8.13.26–0.9.22.13
A name’s opening says what the object is:
Turreta turret,Barracksan inhibitor,HQ_a nexus.CreateTurretnames no building of the map: it makes a new turret where it says, under the object and character names it carries.
In 0.9.25.24–1.0.0.24
CreateTurretnames a building by its name alone, compared without regard to case, and one naming no building does nothing.
In 0.9.25.24–0.9.25.35
A name’s opening says what the object is, the first match winning and a minion spawner’s tested before
Barracks:Turreta turret,Barracksan inhibitor,HQ_a nexus.
Objects and spawn points. A champion begins at its side’s spawn point,
__Spawn_T1 for Order and __Spawn_T2 for Chaos.
The spawn points, the navigation points and the marker of the level’s size are
scene objects, listed in room.dsc like the buildings.
In 0.8.13.26–0.9.22.13
A champion begins on its side’s spawn point itself, or at (6000, 0, 6000) on a map with none.
In 0.9.25.24–1.0.0.24
A champion begins at its side’s spawn point moved by an offset from
DATA/Characters/HeroSpawnOffsets.inibin, read from the sectionOrder<n>orChaos<n>under the keysPos<i>andFacing<i>, where i is one more thanCreateChampion’s spawn index. A spawn index of 6 or more begins the champion on the spawn point itself.
The ground. A client walks units on LEVELS/Map1/AIPath.aimesh_ngrid, a
binary grid. Its layout is unspecified.
The grid’s name is the map’s own, AIPath.aimesh with _ngrid after it: no
setting of the mode chooses it.
The figures. Each is an inibin file: a champion’s base statistics in
DATA/Characters/<Champion>/<Champion>.inibin; an item, its price among its
figures, in DATA/Items/<id>.inibin; and summoner, item and shared spells in
DATA/Spells/<Spell>.inibin.
A champion’s spells and attacks are in DATA/Spells/<Spell>.inibin with all
other spells.
In 0.8.13.26–0.9.22.13
No map adds items of its own, and there are no figures for a whole mode.
In 0.9.25.24–1.0.0.24
Map 3 alone adds an
Items.inibin.DATA/Globals/holds figures for the whole game inUnitStats,bountyandColorSettings.
Joining a match
What passes between a client and a server from connection until play begins, in order.
Starting a client
A client learns where to connect from its command line. It takes three arguments it needs nothing in, which can be empty, and then a fourth holding four words separated by single spaces: the server’s IPv4 address, its UDP port, the key (see Transport), and the player id the client registers as. The client connects to that address and port, registers as that player, and enciphers its proof under that key.
A client finds each argument between a pair of double quotes, and reads nothing outside them.
In 0.8.13.26–0.9.22.13
A client whose command line holds no double quote ends.
In 0.9.25.24–1.0.0.24
Any whitespace separates the words of the fourth argument. A client whose command line holds no double quote takes the command line it saved on an earlier run instead, and one holding
.repanywhere plays a replay rather than connecting.
Registering
A client’s first payload is Register, on the registration channel. The note
on Registered says what a server answers with: one answer for every seat.
A client knows the answer meant for it by the player id it registered as, not by the client id, and takes the client id that answer carries as its own. Every other answer tells it which client id stands for which player.
In 0.8.13.26–0.9.22.13
A client waits for the answer naming its own player id as long as it takes, and offers its player no choice.
In 0.9.25.24–1.0.0.24
A client waits 30 seconds for the answer naming its own player id. Then it offers its player to wait another 30 seconds or to give up, and leaves on giving up.
Asking whether a server is ready
A client then sends QueryStatus over and over. A server MUST answer each one
with QueryStatusAnswer, at least until it has answered that it is ready.
While the answers say the server is not ready, a client stays on a black screen
and keeps asking. A server that needs time before a match can begin answers
that it is not ready until it is.
A client stops asking once an answer says the server is ready, and a query it sends after that answer needs none.
Stating a build
Once an answer says the server is ready, a client sends ClientVersion once. A
server answers with VersionSync, and a client loads only where its
agreement says the builds agree.
In 0.8.13.26–0.9.22.13
VersionSyncnames neither the map nor anyone at the match: a client loads the map its own configuration names (see The client’s data).
In 0.9.25.24–1.0.0.24
VersionSyncnames the map to load and everyone at the match.
Taking a seat
Straight after VersionSync, a client sends JoinSide on the roster channel.
A server answers with one Roster, then a SeatName and a SeatChampion for
each seat a player holds.
Loading
A client reports how far loading has got with LoadingProgress, repeatedly
through loading. A server answers each report with SeatLoadProgress on the
transient channel, carrying the report’s figures under the seat that reported.
A client goes on reporting after its progress reaches 100, until play begins.
A client waits on no other seat. SpawnStart, SpawnEnd and StartGame are
what move a client on, and StartGame alone ends its loading. A server that
means its players to begin together sends StartGame to none of them until
every client has sent ClientReady.
In 0.9.25.24–1.0.0.24
A client writes zero where its player id goes in
LoadingProgress.
In 0.9.25.24–0.9.25.35
A server MUST put the seat’s player id in
SeatLoadProgress: the loading screen shows a seat’s card from theVersionSyncseat with that id.
The spawn run
Once a character is settled, a client sends CharacterSelected, once.
A client drops nothing for arriving before CharacterSelected.
A server answers with SpawnStart, states everything on the field as play
opens, and closes the run with SpawnEnd. A run carries:
- for each seat,
CreateChampionfollowed byLoadout; - for each turret, a
CreateTurretand aReplicationbatch of its values; - for each inhibitor and nexus, an
EnterSight, and aReplicationbatch on a map whose buildings replicate (see Replication); - a
RegionAddedfor each region, and aMapPropfor each prop; - at a server’s choice, an
EnterLocalSightfor any of those units.
A client takes these in any order within the run.
A run MUST carry at least SpawnStart, the CreateChampion carrying the
client’s own client id, and SpawnEnd. Given only those, a client still enters play,
showing its champion’s portrait, health, resource and spells. It draws the
champion on the map only once an EnterSight places it there, with its name
and health bar over it.
A client answers each Replication batch with a TransientAck naming that
batch’s syncId. It sends one answer for each batch, in the order the batches
came, including a batch that repeats the syncId of the batch before it.
In 0.9.25.24–1.0.0.24
A client answers a batch as soon as it arrives, within the run or not, and never answers one naming a unit it does not hold.
Starting play
A client sends ClientReady after SpawnEnd and after its answers to the
run’s batches, while it is still reporting its loading. A server MUST answer
with StartGame, and later sends MatchStarted, with other messages free to
come between them; MatchStarted carries 0 (see Time).
A client sends ClientReady as soon as SpawnEnd arrives, and StartGame
alone moves it into play.
In 0.9.25.24–1.0.0.24
A client whose connection drops before play begins ends rather than connecting again.
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).
Register
What a client sends first. It arrives before the connection has a cipher state, so the payload travels in the clear apart from the proof.
In every range of this book
Command 0 on registration, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| leading | bytes, 3 | Arbitrary; it carries no meaning. |
| clientId | u32 | A client writes zero here. |
| playerId | i64 | Who the sender claims to be, as its launch line names the player. The proof is what settles the claim. |
| proof | i64 | The player id enciphered with the 16-byte key both ends already hold; a plain copy where the client has no key. |
Registered
What a server answers a registration with, naming a player in the match and the seat they occupy. It shares its command value with the request it answers, which travels the other way, and it is one fixed size.
In every range of this book
Command 0 on registration, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| leading | bytes, 3 | Unused; a server writes zero. |
| clientId | u32 | The client id playerId holds. Where playerId is the client’s own, the client takes this client id as its own and goes on. |
| playerId | i64 | Who occupies that seat. A client keeps the pair of clientId and playerId from every answer, and takes the answer as its own only where this is its own player id; it reads nothing after it. |
QueryStatus
What a client sends to ask a server for its state. It carries nothing of its own. The header names no object: it carries zero.
QueryStatusAnswer
What a server returns when asked whether it is ready. The header names no object: a server writes zero.
In every range of this book
Command 4 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| ready | u8 | Whether the server is ready; any value but zero ends the client’s wait. While answers say it is not, a client keeps asking and goes no further, which Joining a match sets out. Values: 0 no, 1 yes. |
ClientVersion
What a client sends to state which build it is. The header names no object: it carries zero.
In every range of this book
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 71 |
| 0.9.22.14–1.0.0.24 | 67 |
| Field | Type | What it is |
|---|---|---|
| clock | f32 | The client’s own clock as it sends this, in seconds. |
| clientId | u32 | The client id the sender holds: that of the client reporting. |
| text | text, 256 bytes | The build the client runs, as text ending at a zero byte; the bytes after that zero carry nothing. |
Vectors (1)
VersionSync
What a server sends once a client has said which build it runs, saying whether the two agree. The header names no object: it carries zero.
In 0.8.13.26–0.9.22.13
Command 72 on events, sent by the server, reliable.
It carries only agreement and build.
| Field | Type | What it is |
|---|---|---|
| agreement | u8 | 1 lets the client go on into the game. For 0 a client shows both versions and leaves; for any other value it leaves, showing nothing. |
| build | text, ended by a zero byte | The server’s version, ended by a zero byte; the two take at most 512 bytes, and a client fails on a longer one. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 68 on events, sent by the server, reliable.
It also says which map to load, who is at the match, and everything else settled before play.
| Field | Type | What it is |
|---|---|---|
| agreement | u8 | Nonzero where the builds agree, letting the client go on into the game. For 0 a client shows both versions, reports a build mismatch and leaves. |
| map | i32 | Which map to load. Space keys the path origins by the same maps. |
| seats | 12 × Seat | Every place at the match, held or empty. |
| build | text, 256 bytes | Which build the server serves, shown and not checked. Written out in full and padded with zero bytes to the width above; a client reads it up to the first zero byte. |
JoinSide
What a client sends to ask for a seat on one of the two sides while the match is being put together.
In 0.9.22.14–1.0.0.24
Command 100 on roster, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| padding | bytes, 3 | Arbitrary; it carries no meaning. |
| clientId | u32 | The client id the sender holds, that is, the id of the client asking. |
| side | u32 | The side it asks for; a client asks for 100. |
Roster
What a server sends to lay out both sides and who is on them, while the match is being put together.
In 0.9.22.14–1.0.0.24
Command 103 on roster, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| padding | bytes, 3 | Unused; a client reads nothing here. |
| sideRoom | u32 | How many seats side 100 has room for. |
| otherSideRoom | u32 | How many side 200 has room for. |
| gap | bytes, 4 | Unused; a client reads nothing here. |
| side | 24 × i64 | The players on side 100, twenty four places of a player identifier’s width; the client copies as many as sideRoom says, so a server keeps sideRoom at 24 or less; a larger one has no defined effect. sideTaken says how many of the leading places carry a player, and the rest hold zero. |
| otherSide | 24 × i64 | The players on side 200, read the same way under otherSideRoom and otherSideTaken, with otherSideRoom kept at 24 or less. |
| sideTaken | u32 | How many of side 100’s places carry a player. |
| otherSideTaken | u32 | How many on side 200. |
SeatName
What a server sends to say what a seat is called, while the match is being put together.
In 0.9.22.14–1.0.0.24
Command 102 on roster, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| padding | bytes, 7 | Unused; a client reads nothing here. |
| player | i64 | Whose name this is. It has a player identifier’s width. |
| skin | i32 | Which look the seat’s champion wears. A client reads nothing here. |
| nameLength | u32 | How many bytes the name below occupies, counting the byte that ends it. A client reads nothing here, and takes the name up to its first zero byte. |
| name | text, sized by nameLength minus 1 | What the seat is called. It is not padded. |
| terminator | bytes, 1 | A zero byte closing the text, which the length above counts. |
SeatChampion
What a server sends to say which champion a seat is playing, while the match is being put together.
In 0.9.22.14–1.0.0.24
Command 101 on roster, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| padding | bytes, 7 | Unused; a client reads nothing here. |
| player | i64 | Whose champion this is. It has a player identifier’s width. |
| skin | i32 | Which look the champion wears. |
| assetLength | u32 | How many bytes the name below occupies, counting the byte that ends it. A client reads nothing here, and takes the name up to its first zero byte. |
| asset | text, sized by assetLength minus 1 | The champion the seat plays, as the name the client loads the champion’s data under. It ends with a zero byte and is not padded. |
| terminator | bytes, 1 | A zero byte closing the text, which the length above counts. |
LoadingProgress
What a client sends while a match loads, saying how far it has got. The header names no object: it carries zero.
In 0.9.22.14–1.0.0.24
Command 113 on requests, sent by the client, unreliable.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | The client id the sender holds, that is, the id of the client reporting. |
| playerId | i64 | Zero. |
| percent | f32 | How far loading has got, from zero to one hundred. |
| eta | f32 | How many seconds the client expects loading still to take. |
| status | 4-byte bits | |
| status.count | bit 0 to 15 | It rises with each report, not always by one, until it wraps. |
| status.ping | bit 16 to 30 | The round trip time the client measures, in milliseconds. |
| status.unused | bit 31 | Never written by a client; it carries nothing. |
| done | 1-byte bits | |
| done.loaded | bit 0 | Set once loading is done. |
| done.unused | bit 1 to 7 | Carries nothing; a client never writes these bits. |
| text | text, ended by a zero byte | A text the client also keeps, at most 63 characters, ended by a zero byte. What it says is not recorded; a server ignores it. |
SeatLoadProgress
What a server sends to tell everyone how far one seat has got through loading, and how it is holding up. A later report supersedes an earlier one, so losing one costs nothing. The header names no object: a server writes zero.
In 0.9.22.14–1.0.0.24
Command 114 on transient, sent by the server, unreliable.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | The client id this is about. |
| player | i64 | Who occupies it. |
| progress | f32 | How far through loading it is, from zero to one hundred. |
| secondsLeft | f32 | How much longer it is expected to take, in seconds. |
| status | 4-byte bits | Only ping is read. |
| status.unusedLow | bit 0 to 15 | Unused; a server writes zero. |
| status.ping | bit 16 to 30 | Drawn as the seat’s ping indicator. |
| status.unusedHigh | bit 31 | Unused; a server writes zero. |
| done | 1-byte bits | |
| done.loaded | bit 0 | Where set, a client shows secondsLeft as zero. |
| done.unused | bit 1 to 7 | Unused; a server writes zero. |
| statusText | text, 64 bytes | Read once done.loaded is set and the bar is nearly full: a client compares it, ignoring case, with a fixed phrase saying champions are being spawned, and shows a spawning label where it matches and a ready label otherwise. Padded with zero bytes. |
SpawnStart
What a server sends to open the run of units a client is about to be told about. The header names no object: a server writes zero.
In every range of this book
Command 5 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| count | u8 | A client reads nothing here. A server writes zero. |
SpawnEnd
What a server sends to close the run of units it opened with. The header names no object: a server writes zero.
In every range of this book
Command 12 on events, sent by the server, reliable.
A client answers it at once with ClientReady.
No body.
StartGame
What a server sends to begin play. The header names no object: it carries zero.
ClientReady
What a client sends once it has loaded and is ready to play. The header names no object: it carries zero.
In every range of this book
Command 16 on requests, sent by the client, reliable.
The message is the header alone. A client sends it at once on SpawnEnd.
No body.
CharacterSelected
What a client sends once a character is settled on. It carries nothing of its own. The header names no object: it carries zero.
MatchIdentity
What a server sends to tell a client which match this is and what its player is called. The header carries zero.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 113 |
| 0.9.22.14–1.0.0.24 | 111 |
| Field | Type | What it is |
|---|---|---|
| game | i64 | The match’s identifier. A client only logs it. |
| name | text, 128 bytes | The player’s name, padded with zero bytes. A client reads nothing of it. |
Vectors (1)
ResyncEnded
What a server sends to end the resynchronising a client began on its own Reconnected, after which it takes spawns again as they come.
Units
How a server puts objects on the field and takes them away: champions, minions, neutral monsters, turrets, pets, markers and props. What a unit then does is in Movement, Combat and Spells, and what it is worth in Replication.
Every object is named by a net id, and Objects and identifiers says what removes each kind of object.
Creating
Each kind of object has its own message:
- a champion,
CreateChampion, which, carrying the client’s own client id, also makes that champion the client’s own; a bot’s champion, the sameCreateChampionnaming no client, orSpawnBot; - a minion sent out from a side’s barracks,
SpawnFromBarracks, and a unit like one, such as a ward,SpawnUnit; - a monster of no side,
CreateNeutral; a pet,SpawnPet; - a turret,
CreateTurret(The client’s data says how it names one), and a turret of the server’s choosing,SpawnTurret; - an object that follows a unit,
CreateFollower, and a change to what it follows,FollowerMaster; - an unseen marker,
SpawnMarker, which other messages can name andMarkerMovedmoves; - a prop, a thing that stands on the map and is looked at,
MapProp, and a change to one,MapPropChanged.
CharacterPreload has a client load a character’s art ahead of need.
A client acts on a CreateChampion or a CreateNeutral whenever it arrives,
before CharacterSelected as after.
Changing and removing
TeamChanged moves a unit to another side, and ChampionRemoved takes a
champion out of the world. A unit’s death is in Combat.
Bots
A server can tell a client what a bot is thinking (BotDebug), weighing
(BotTargets) or doing (BotState). None of them changes what a player sees.
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).
CreateChampion
What a server sends to put a champion on the field. The header carries zero or names the object this is about; a client accepts either.
In 0.8.13.26–0.9.22.13
Command 6 on events, sent by the server, reliable.
The champion takes the id in champion. A server sends it on its own. A client stands it at its side’s one fixed spawn point, or at 6000, 0, 6000 where that point is not set.
| Field | Type | What it is |
|---|---|---|
| champion | u32 | The name the champion answers to, so later messages can name it. |
| node | u8 | Which network node the object belongs to, in a field of its own. |
| clientId | u32 | The client id of the player the champion belongs to. A client takes the champion carrying its own client id as its own, and any other as belonging to no client of its own. |
| side | u8 | Nonzero for side 100, zero for side 200. |
| flag | u8 | Passed to the champion as it is made; what it changes is not recorded. |
| name | text, 40 bytes | What the seat holding it is called. Written out in full and padded with zero bytes to the width above. |
| asset | text, ended by a zero byte | The champion it is, ended by a zero byte; the two take at most 64 bytes, and a client fails on a longer one. |
Vectors (1)
In 0.9.22.14–0.9.25.20
Command 6 on events, sent by the server, reliable.
The champion takes the id in champion, not the header’s; a client first removes any object holding that id. For the client’s own seat, name also becomes its own player’s name. A client stands the champion at its side’s one spawn point.
| Field | Type | What it is |
|---|---|---|
| champion | u32 | The name the champion answers to, so later messages can name it. |
| clientId | u32 | The client id of the player the champion belongs to, or 4294967295 where it belongs to none, as a bot’s does. A client takes the champion carrying its own client id as its own. |
| node | u8 | Which network node the object belongs to, in a field of its own. |
| skillLevel | u8 | It has no effect. |
| side | u8 | Nonzero for side 100, zero for side 200. |
| bot | u8 | Nonzero where a bot plays the seat and nobody holds it; its shown name is then the client’s own bot name for asset, and name has no effect. |
| skin | i32 | Which look it wears. |
| name | text, 40 bytes | What the seat holding it is called. Written out in full and padded with zero bytes to the width above. |
| asset | text, 128 bytes | The champion it is: the name the client loads its art and sound under, written and padded as above. |
Vectors (1)
In 0.9.25.21–1.0.0.24
Command 6 on events, sent by the server, reliable.
The champion takes the id in champion, not the header’s; a client first removes any object holding that id. For the client’s own seat, name also becomes its own player’s name.
| Field | Type | What it is |
|---|---|---|
| champion | u32 | The name the champion answers to, so later messages can name it. |
| clientId | u32 | The client id of the player the champion belongs to, or 4294967295 where it belongs to none, as a bot’s does. A client takes the champion carrying its own client id as its own. |
| node | u8 | Which network node the object belongs to, in a field of its own. |
| skillLevel | u8 | It has no effect. |
| side | u8 | Nonzero for side 100, zero for side 200. |
| bot | u8 | Nonzero where a bot plays the seat and nobody holds it. A client only keeps it; the shown name is name as sent. |
| spawnIndex | u8 | Where the champion first stands and faces. From 0 to 5, its side’s base position plus the offset the map sets for the side’s head count (players and bots) and this index plus one, facing as the map sets for them. A client works out the head count itself, counting SpawnStart’s bots in it. From 6 up, the base position itself, facing along +X. Movement or sight data replaces it. |
| skin | i32 | Which look it wears. |
| name | text, 40 bytes | What the seat holding it is called. Written out in full and padded with zero bytes to the width above. |
| asset | text, 128 bytes | The champion it is: the name the client loads its art and sound under, written and padded as above. |
Vectors (1)
SpawnFromBarracks
What a server sends to put a unit on the field from the place its side sends them out of.
In 0.8.13.26–0.9.22.13
Command 53 on events, sent by the server, reliable.
A server sends it on its own. The unit stands at the barracks’ own position, on the barracks’ side.
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The name the unit answers to, so later messages can name it. |
| node | u8 | Which network node the unit belongs to, in a field of its own rather than as part of the name that follows. |
| wave | u8 | Which run of units it belongs to. |
| kind | u8 | What sort of unit it is, from 0 to 3. A value above 3 has no defined effect. |
| unread | u8 | A client reads nothing here. A server writes zero. |
| damageBonus | i16 | What is added to the damage it deals. |
| healthBonus | i16 | What is added to the health it holds. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 49 on events, sent by the server, reliable.
The header names the barracks, and a client handles the message only where it holds that barracks; the new unit’s id is in unit.
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The name the unit answers to, so later messages can name it. |
| node | u8 | Which network node the unit belongs to, in a field of its own rather than as part of the name that follows. |
| wave | u8 | Which run of units it belongs to. |
| kind | u8 | What sort of unit it is, from 0 to 3; any other value has no defined effect. |
| damageBonus | i16 | What is added to the damage it deals. |
| healthBonus | i16 | What is added to the health it holds. |
Vectors (1)
SpawnUnit
What a server sends to put a minion-like unit on the field, such as a ward.
In 0.8.13.26–0.9.22.13
Command 90 on events, sent by the server, reliable.
A client deletes no object first; one already holding the new unit’s id keeps it alongside the new unit. A client fails where it cannot load the unit’s art. clone, where nonzero and held, is only linked to the new unit; nothing of it is copied.
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The name the new unit answers to. |
| node | u8 | Which network node the unit belongs to. |
| atX | f32 | Where it stands, along one ground axis, in world units. |
| atY | f32 | Where it stands, in height, in world units. |
| atZ | f32 | Where it stands, along the other ground axis, in world units. |
| team | u32 | The side the unit is on, as a whole number. |
| name | text, 64 bytes | Its name, padded with zero bytes. |
| asset | text, 64 bytes | The name the client loads its art under, padded with zero bytes. |
| clone | u32 | The unit the new one is linked to, or zero. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 87 on events, sent by the server, reliable.
A client gives the new unit its id and node, deleting nothing first. Where clone names a unit it holds, a client only links the new unit to it as a clone and copies nothing of it; zero or an unknown id leaves no link. The header names the unit that put it there.
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The name the new unit answers to. |
| node | u8 | Which network node the unit belongs to. |
| atX | f32 | Where it stands, along one ground axis, in world units. |
| atY | f32 | Where it stands, in height, in world units. |
| atZ | f32 | Where it stands, along the other ground axis, in world units. |
| name | text, 64 bytes | Its name, padded with zero bytes. |
| asset | text, 64 bytes | The name the client loads its art under, padded with zero bytes. |
| clone | u32 | The unit the new unit is linked to as a clone, or zero. |
| team | 4-byte bits | |
| team.team | bit 0 to 8 | Which side, as a team number. |
| team.unused | bit 9 to 31 | Unused; a server writes zero. |
| flags | 1-byte bits | |
| flags.ignoreCollision | bit 0 | Set where it does not block the way. |
| flags.unused | bit 1 to 7 | Unused; a server writes zero. |
Vectors (1)
CreateNeutral
What a server sends to put a unit that belongs to no side on the field. The header names the unit this is about.
In 0.8.13.26–0.9.22.13
Command 7 on events, sent by the server, reliable.
A server sends it on its own, on the channel given here. A client leaves the monster facing as it was made. A client adds damageBonus to the damage the unit deals twice over.
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The name the unit answers to, so later messages can name it. |
| node | u8 | Which network node the object belongs to, in a field of its own. |
| atX | f32 | Where the unit stands, along one ground axis, in world units. |
| atY | f32 | Where the unit stands, in height, in world units. |
| atZ | f32 | Where the unit stands, along the other ground axis, in world units. |
| name | text, 64 bytes | What this unit is called, so a client can tell one from another. Written out in full and padded with zero bytes to the width above. |
| asset | text, 64 bytes | The name the client loads its art and sound under, written and padded as above. The name and its zero byte fit in the 64 bytes; a client fails on a longer one. |
| uniqueName | text, 64 bytes | A further name the unit answers to, written and padded as above. The name and its zero byte fit in the 64 bytes; a client fails on a longer one. |
| side | u32 | The side it belongs to, or zero where it belongs to none. |
| damageBonus | i32 | What is added to the damage it deals. |
| healthBonus | i32 | What is added to its maximum health, three times over: the unit stands at full health, at its base maximum plus three times this. |
| roaming | u32 | How the monster wanders. Values: 0 inactive, 1 hostile, 2 fleeing. |
| camp | u32 | Which camp the unit belongs to. Where a client shows camps on its map, the first unit naming a camp places that camp at the unit’s position. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 7 on events, sent by the server, reliable.
A client leaves the monster facing as it was made. A client adds damageBonus to the damage the unit deals twice over.
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The name the unit answers to, so later messages can name it. |
| node | u8 | Which network node the object belongs to, in a field of its own. |
| atX | f32 | Where the unit stands, along one ground axis, in world units. |
| atY | f32 | Where the unit stands, in height, in world units. |
| atZ | f32 | Where the unit stands, along the other ground axis, in world units. |
| campAtX | f32 | Where the camp it belongs to sits, along one ground axis, in world units. |
| campAtY | f32 | Where the camp it belongs to sits, in height, in world units. |
| campAtZ | f32 | Where the camp it belongs to sits, along the other ground axis, in world units. |
| name | text, 64 bytes | What this unit is called, so a client can tell one from another. Written out in full and padded with zero bytes to the width above. |
| asset | text, 64 bytes | The name the client loads its art and sound under, written and padded as above. |
| uniqueName | text, 64 bytes | A further name the unit answers to, written and padded as above. |
| side | u32 | The side it belongs to, or zero where it belongs to none. |
| damageBonus | i32 | What is added to the damage it deals. |
| healthBonus | i32 | What is added to the health it holds, three times over: the unit’s maximum and current health both end at its base health plus three times this, and not below 0. |
| roaming | u32 | How the monster wanders. It has no effect. Values: 0 inactive, 1 hostile, 2 fleeing. |
| camp | u32 | Which camp the unit belongs to. Where no camp of that number exists yet, a client makes one at the unit’s own position, not at campAt, and adds the unit to it. |
Vectors (1)
SpawnPet
What a server sends to put a pet on the field.
In every range of this book
Command 32 on events, sent by the server, reliable.
The header names the owner, and every client that holds that unit handles the message. A client kills the owner’s earlier pet if that lives, then makes the pet under pet and node with the owner’s side, as the owner’s pet. It deletes no object first; where one already holds pet, both answer to it.
| Field | Type | What it is |
|---|---|---|
| pet | u32 | The id the pet answers to, which a client gives it together with node. The header names the owner. |
| node | u8 | Which network node it belongs to. |
| atX | f32 | Where it stands, along one ground axis, in world units. |
| atY | f32 | In height, in world units. |
| atZ | f32 | Along the other ground axis, in world units. |
| spellLevel | i32 | The level of the spell that summoned it, plus one. A client uses it only where the owner belongs to its own network node. |
| duration | f32 | How long it lasts, in seconds. A client reads nothing of it. |
| damageBonus | i32 | What is added to the damage it deals. |
| healthBonus | i32 | What is added to its health. |
| name | text, 32 bytes | Its name, padded with zero bytes. |
| asset | text, 32 bytes | The name the client loads its art under, padded with zero bytes. |
| effect | text, 64 bytes | An effect it carries, padded with zero bytes. A client uses it only where the owner belongs to its own network node. |
| clone | u32 | The unit it copies, or zero. For a minion-like pet, a client only links the pet to that unit, where it holds it, and copies nothing of it. |
Vectors (1)
CreateTurret
What a server sends to put a turret on the field. The header names the unit this is about.
In 0.8.13.26–0.9.22.13
Command 8 on events, sent by the server, reliable.
A server sends it on its own, on the channel given here. A client makes the object, on side 200, and loads its character.
| Field | Type | What it is |
|---|---|---|
| turret | u32 | The name the turret answers to, so later messages can name it. |
| node | u8 | Which network node the object belongs to, in a field of its own. |
| atX | f32 | Where it stands, along one ground axis, in world units. |
| atY | f32 | Its height. |
| atZ | f32 | Along the other ground axis. |
| name | text, 64 bytes | What this turret is called, so a client can tell one from another. Written out in full and padded with zero bytes to the width above. |
| asset | text, 64 bytes | The character it is: the name the client loads its data under. Written out in full and padded with zero bytes to the width above. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 8 on events, sent by the server, reliable.
A client matches name against the map’s turrets, ignoring case. With no match it does nothing; a matched turret takes the id and node, and one missing or dead is not rebuilt.
| Field | Type | What it is |
|---|---|---|
| turret | u32 | The name the turret answers to, so later messages can name it. |
| node | u8 | Which network node the object belongs to, in a field of its own. |
| name | text, 64 bytes | What this turret is called, so a client can tell one from another. Written out in full and padded with zero bytes to the width above. |
Vectors (1)
BotDebug
What a server sends describing what a bot is thinking. It changes nothing a client shows. The header names the unit.
In 0.9.22.14–1.0.0.24
Command 105 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| name | text, 64 bytes | The bot’s name. |
| strategy | text, 64 bytes | Its strategy. |
| behaviour | text, 64 bytes | Its behaviour. |
| task | text, 64 bytes | Its task. |
| state1 | text, 64 bytes | A line of its state. |
| state2 | text, 64 bytes | A line of its state. |
| state3 | text, 64 bytes | A line of its state. |
BotTargets
What a server sends naming the units a bot is weighing. It changes nothing a client shows. The header names the unit.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 108 |
| 0.9.22.14–1.0.0.24 | 106 |
| Field | Type | What it is |
|---|---|---|
| targets | 5 × u32 | Five units. |
Vectors (1)
BotState
What a server sends naming a bot’s state. It changes nothing a client shows. The header names the unit.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 109 |
| 0.9.22.14–1.0.0.24 | 107 |
| Field | Type | What it is |
|---|---|---|
| state | i32 | The state. |
Vectors (1)
PlaceTurret
What a server sends to make a turret.
In 0.8.13.26–0.9.22.13
Command 55 on events, sent by the server, reliable.
The header names an existing turret object, and the new turret takes that object’s position.
| Field | Type | What it is |
|---|---|---|
| turret | u32 | The name the turret answers to, so later messages can name it. |
| node | u8 | Which network node the object belongs to, in a field of its own. |
| unread | bytes, 12 | A client reads nothing here. A server writes zero. |
| name | text, 64 bytes | What this turret is called. Written out in full and padded with zero bytes to the width above. |
| asset | text, 64 bytes | The character it is. Written and padded as above. |
| side | u8 | Nonzero for side 100, zero for side 200. |
Vectors (1)
Vision
What a client can see, and how a server tells it. A client draws what a server says it sees and nothing else: the fog of war a client draws is only a picture, and what lies inside it is whatever the server has brought into view.
Bringing a unit into view
A server brings a unit into what a client’s side can see with EnterSight.
In 0.8.13.26–0.9.22.13
EnterSightstates nothing but the unit it names, and only marks that unit as in view.
In 0.9.25.24–1.0.0.24
EnterSightstates where the unit stands or which path it walks, and nothing of its looks, shields, health or resource.
A client does not draw a champion that no EnterSight has placed: given only
its CreateChampion, a client shows the champion’s portrait and spells and
nothing on the field. One EnterSight after the CreateChampion draws it, with
its name and health bar over it.
EnterLocalSight brings a unit into what one client alone can see.
EnterTeamSight brings an object into the view of a whole side.
EnterLocalSight states nothing of the unit.
Losing sight
LeaveSight and LeaveTeamSight take a unit out of the matching view, and
leave it held (see Objects and identifiers). Particles come into
and leave a side’s view with ParticleEnterTeamSight and
ParticleLeaveTeamSight.
In 0.8.13.26–0.9.22.13
LeaveLocalSighttakes a unit out of what one client alone can see, and leaves it held.
Regions
A region is a patch of ground with sight of its own, which can reveal hidden
units within it. A server places one with RegionAdded or fastens one to a
unit with RegionAttached, moves it with RegionMoved and takes it away with
RegionRemoved; Objects and identifiers says how regions are
named and when one ends. A region granting sight has a client clear its map’s
cover over it.
Drawing the fog
FogSet and FogToggled change how a client draws its fog of war.
Who is told what
A client acts on a message about whichever unit it names, its own champion or another, so what a client knows is whatever a server sends it. A server decides, message by message, which clients to tell.
UnitDiedOnMap, InventorySnapshotOnMap, FloatingTextOnMap and
SpellSlotChangedForOwner do not exist, so a server sends both audiences of
UnitDied, InventorySnapshot, FloatingText and SpellSlotChanged under
the one command each.
Messages about a champion’s own state, its gold, its inventory, its spells’ levels, cooldowns and charges, and whether it can shop, are applied to the champion they name on any client that receives them, but a client shows some of them only for its own champion:
ShopEnabledchanges the shop only for the client’s own champion.
In 0.8.13.26–0.9.22.13
GoldGainedshows floating gold only for the client’s own champion.
In 0.9.25.24–1.0.0.24
GoldGainednaming the client’s own champion, with an amount above 0 and a source the client holds, shows the gold over the source.
In 0.9.25.24–1.0.0.24
Any other
GoldGainedshows the gold gained or lost over the unit it names, whichever unit that is.ItemAddedannounces no purchase, a client’s own or another’s.
In 0.9.25.24–0.9.25.35
LevelUpshows its effect over any unit the client can see.
A server SHOULD send SpellCooldown, SpellCharges and GoldGained about a
champion only to the client whose champion it is.
A client also acts on what it is told about a unit it holds but cannot see:
- a particle on a hidden unit is created but not drawn until the unit comes into view, unless the particle is bound to a target the client can see;
- floating text over a hidden unit is dropped;
- an animation plays on a hidden unit, which comes into view part way through it.
A server SHOULD NOT send a client what its side cannot see, beyond what keeps its world consistent.
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).
EnterSight
What a server sends when a unit comes into what a side can see. The header names the unit this is about.
In 0.8.13.26–0.9.22.13
Command 59 on events, sent by the server, reliable.
A client reads none of the body: it only shows the unit.
| Field | Type | Present when | What it is |
|---|---|---|---|
| view | record | remaining set | Everything else a client needs to draw the unit. A server sends it for a champion, a minion or another unit with a mind, and ends the message after the items for any other unit. |
| view.movementState | record | remaining set | Where the unit stands, followed by the direction it faces. |
| view.movementState.movementKind | u8 | What follows the sync id: 0 nothing, 1 a path walked at a set speed, 2 a path, 3 a point the unit stands at. Values: 0 nothing, 1 movingAtASpeed, 2 moving, 3 standing. | |
| view.movementState.syncId | u32 | The number of this statement about the unit. | |
| view.movementState.movement | Movement | movementKind = 2 | Every point after the first. |
| view.movementState.movementAtSpeed | MovementAtSpeed | movementKind = 1 | Where the unit is going, and how a server makes it travel. WaypointGroupAtSpeed carries the same shape. |
| view.movementState.atX | f32 | movementKind = 3 | Along one ground axis, in world units; the height is the ground’s. |
| view.movementState.atZ | f32 | movementKind = 3 | Along the other ground axis. |
| view.movementState.facingX | f32 | movementKind = 3 | Which way it faces, along one ground axis. |
| view.movementState.facingZ | f32 | movementKind = 3 | Which way it faces, along the other. |
In 0.9.22.14–1.0.0.24
Command 55 on events, sent by the server, reliable.
What a server sends to bring a unit into what a client can see. A client draws a unit only once this has named it, except turrets, which it draws regardless; the header names the unit. It states everything a client needs to draw the unit at once.
| Field | Type | Present when | What it is |
|---|---|---|---|
| view | record | remaining set | Everything else a client needs to draw the unit. A server sends it for a champion, a minion or another unit with a mind, which a client reads past the end of the message without it. For any other unit a server ends the message before it, and a client reads none of the body. |
| view.movementState | record | remaining set | Where the unit stands, followed by the direction it faces. |
| view.movementState.movementKind | u8 | What follows the sync id: 0 nothing, 1 a path walked at a set speed, 2 a path, 3 a point the unit stands at. A client reads nothing more for any other value. Values: 0 nothing, 1 movingAtASpeed, 2 moving, 3 standing. | |
| view.movementState.syncId | u32 | The number of this statement about the unit; a client takes a path or a point only where it is not behind the last one the unit took. | |
| view.movementState.movement | Movement | movementKind = 2 | Every point after the first. |
| view.movementState.movementAtSpeed | MovementAtSpeed | movementKind = 1 | Where the unit is going, and how a server makes it travel. WaypointGroupAtSpeed carries the same shape. |
| view.movementState.atX | f32 | movementKind = 3 | Along one ground axis, in world units; the height is the ground’s. |
| view.movementState.atZ | f32 | movementKind = 3 | Along the other ground axis. |
| view.movementState.facingX | f32 | movementKind = 3 | Which way it faces, along one ground axis. |
| view.movementState.facingZ | f32 | movementKind = 3 | Which way it faces, along the other. |
EnterLocalSight
What a server sends when a unit comes into what one client can see. The header names the unit this is about.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 61 |
| 0.9.22.14–1.0.0.24 | 57 |
A client reads none of the body: it shows the unit and reads nothing more.
| Field | Type | Present when | What it is |
|---|---|---|---|
| vitals | record | remaining set | The unit’s health. A client reads nothing here. |
| vitals.maxHealth | f32 | A client reads nothing here. | |
| vitals.health | f32 | A client reads nothing here. |
Vectors (2)
LeaveSight
What a server sends when a unit passes out of what a side can see. The header names the unit this is about.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 60 |
| 0.9.22.14–1.0.0.24 | 56 |
What a server sends to take a unit out of what a client can see; the client stops drawing it. The header names the unit.
No body.
Vectors (1)
LeaveLocalSight
What a server sends when a unit passes out of what one client can see. Sent for the receiving client’s own champion, it changes nothing the client shows. The header names the unit this is about.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 62 |
| 0.9.22.14–1.0.0.24 | 58 |
No body.
Vectors (1)
RegionAdded
What a server sends to place a region on the ground. The header names no object: a server writes zero.
In 0.8.13.26–0.9.22.13
Command 89 on events, sent by the server, reliable.
On this range a region stands where the message places it; RegionAttached places one that follows a unit. Every RegionAdded adds a region; where marker repeats an id the client holds, both regions are kept under that id.
| Field | Type | What it is |
|---|---|---|
| kind | u32 | Whose map shows the region: 0 side 100’s, 1 side 200’s, 2 everyone’s, 3 side 300’s, 4 any other. A client takes the value as it stands, so 100 or 200 here matches no one, and draws the region only where it is 2 or names the player’s own side. |
| clientId | u32 | Unused; a client reads nothing here. |
| sightRadius | f32 | How far the region shows the map around it, in world units, zero or more. |
| atX | f32 | Where it stands, along one ground axis, in world units. |
| atY | f32 | Its height, in world units. |
| atZ | f32 | Where it stands, along the other ground axis, in world units. |
| lifetime | f32 | How long it lasts, in seconds. A client counts it down and removes the region once it reaches zero or less, so one that starts at zero or less goes at its first count. |
| marker | u32 | The id the client keeps the region under. Zero has the client pick one. |
| does | 4-byte bits | What the region does. |
| does.flag | bit 0 | Where kind is 2, a client sets this bit and the one after it itself, whatever was sent. |
| does.second | bit 1 | Kept with the region; a client also sets it where kind is 2. |
| does.unused | bit 2 to 31 | Its value has no effect; a server writes zero. |
| extra | u32 | Kept with the region; it changes nothing a client shows. A server writes zero. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 86 on events, sent by the server, reliable.
On this range a region stands where the message places it; RegionAttached places one that follows a unit. Every message adds a new region, even one matching a region the client holds; each counts down on its own.
| Field | Type | What it is |
|---|---|---|
| kind | u32 | Whose map shows the region: 0 side 100’s, 1 side 200’s, 2 everyone’s, 3 side 300’s, 4 any other. A client takes the value as it stands, so 100 or 200 here matches no one, and draws the region only where it is 2 or names the player’s own side. |
| clientId | u32 | Unused; a client reads nothing here. |
| sightRadius | f32 | How far the region shows the map around it, in world units, zero or more. |
| atX | f32 | Where it stands, along one ground axis, in world units. |
| atY | f32 | Its height, in world units. |
| atZ | f32 | Where it stands, along the other ground axis, in world units. |
| lifetime | f32 | How long it lasts, in seconds. A client counts it down, taking each frame’s time off before it checks, and removes the region at the first count that reaches zero or less. |
| marker | u32 | The id the client keeps the region under. Zero has the client pick one. |
| does | 4-byte bits | What the region does. |
| does.flag | bit 0 | Where kind is 2 and this bit is set, a client also sets the bit after it. |
| does.second | bit 1 | Kept with the region; a client also sets it where kind is 2 and flag is set. It changes nothing a client shows. |
| does.unused | bit 2 to 31 | Its value has no effect; a server writes zero. |
| extra | u32 | Kept with the region; it changes nothing a client shows. A server writes zero. |
| otherExtra | u32 | Kept with the region; what it names is not recorded. A server sends zero. |
RegionAttached
What a server sends to place a region that follows a unit, showing the map around it until it runs out or the unit is gone.
In 0.8.13.26–0.9.22.13
Command 88 on events, sent by the server, reliable.
Every RegionAttached adds a region; nothing is compared, and a repeated marker gives two regions under one id.
| Field | Type | What it is |
|---|---|---|
| kind | u32 | Whose map shows the region: 0 side 100’s, 1 side 200’s, 2 everyone’s, 3 side 300’s, 4 any other. A client takes the value as it stands, so 100 or 200 here matches no one, and draws the region only where it is 2 or names the player’s own side. |
| clientId | u32 | Unused; a client reads nothing here. |
| sightRadius | f32 | How far the region shows the map around it, in world units, zero or more. Zero takes the unit’s own sight radius, followed as it changes, or a default where it has none. |
| unit | u32 | A player’s champion: the region follows it. A client fails where no player’s champion answers to it. |
| lifetime | f32 | How long it lasts, in seconds. A client counts it down and removes the region once it reaches zero or less, so one that starts at zero or less goes at its first count. |
| marker | u32 | The region’s id, which RegionRemoved names; zero has the client pick one of its own. |
| does | 4-byte bits | What the region does. |
| does.flag | bit 0 | Set where the region shows the map. Where kind is 2, a client sets this bit and does.second itself, whatever was sent. |
| does.second | bit 1 | Kept with the region; a client also sets it where kind is 2. It changes nothing a client shows. |
| does.unused | bit 2 to 31 | Its value has no effect, because a client always sets this bit itself; a server writes zero. |
| extra | u32 | Kept with the region; it changes nothing a client shows. A server writes zero. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 85 on events, sent by the server, reliable.
Every message adds a new region, even one matching a region the client holds; each counts down on its own.
| Field | Type | What it is |
|---|---|---|
| kind | u32 | Whose map shows the region: 0 side 100’s, 1 side 200’s, 2 everyone’s, 3 side 300’s, 4 any other. A client takes the value as it stands, so 100 or 200 here matches no one, and draws the region only where it is 2 or names the player’s own side. |
| clientId | u32 | Unused; a client reads nothing here. |
| sightRadius | f32 | How far the region shows the map around it, in world units, zero or more. Zero takes the unit’s own sight radius, followed as it changes, or a default where it has none. |
| unit | u32 | The unit the region follows. A client ignores the message where it does not know the unit. |
| lifetime | f32 | How long it lasts, in seconds. A client counts it down and removes the region once it reaches zero or less, so one that starts at zero or less goes at its first count. |
| marker | u32 | The region’s id, which RegionRemoved names; zero has the client pick one of its own. |
| does | 4-byte bits | What the region does. |
| does.flag | bit 0 | Set where the region shows the map; where kind is 2, a client sets both this bit and does.second, whatever was sent. What else it changes is not recorded. |
| does.second | bit 1 | Kept with the region; a client sets it wherever kind is 2. It changes nothing a client shows. |
| does.unused | bit 2 to 31 | Its value has no effect, because a client always sets this bit itself; a server writes zero. |
| extra | u32 | Kept with the region; it changes nothing a client shows. A server writes zero. |
| otherExtra | u32 | Kept with the region; what it names is not recorded. A server sends zero. |
RegionRemoved
What a server sends to take away a region RegionAdded or RegionAttached placed. The header names no object: a server writes zero.
In 0.8.13.26–0.9.22.13
Command 87 on events, sent by the server, reliable.
It takes away regions RegionAttached placed as well.
| Field | Type | What it is |
|---|---|---|
| region | u32 | The region to take away, by its id. A client takes away every region holding that id, and does nothing where none does. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 84 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| region | u32 | The region to take away, by the id RegionAdded or RegionAttached gave it. A client takes away every region it holds under that id. |
FogToggled
What a server sends to turn the drawing of the fog of war off where it is on, or on where it is off. It changes only what is drawn: what can be seen is still what a server sends. It carries nothing of its own. The header carries zero.
In 0.9.22.14–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.14–0.9.25.35 | 126 |
| 0.9.25.36–1.0.0.24 | 125 |
No body.
Vectors (1)
Movement
A unit is moved by a path: a run of points on the ground plane, the first of which is where the unit is and the last where it is going.
Coordinates
A path names one axis of the ground plane and then the other. The height of a point is not carried, and a receiving end takes it from the ground beneath.
A path carries each point as two world floats (see Space), stated against no origin and no other point.
Other shapes
MovementAtSpeed carries the same points as Movement with the terms of the
travel stated before them, and WaypointGroupAtSpeed is what carries it. Other
messages carry their points as world floats, and their definitions say so. The
message carrying a movement says which shape it holds.
In 0.8.13.26–0.9.22.13
A client reads nothing of
EnterSight.
In 0.9.25.24–1.0.0.24
A unit coming into sight while standing carries its place and facing in
EnterSightinstead.
Resolving a path
conformance/vectors/algorithm records the resolution of the paths the
movement vectors carry. They give decoded fields and the points they resolve
to.
What a group can carry
In 0.8.13.26–0.9.22.13
A movement with no points empties the unit’s path.
In 0.9.25.24–1.0.0.24
A sending end MUST NOT send a movement with no points; a receiving end refuses it.
In 0.9.25.24–1.0.0.24
A client reads nothing after a refused movement in its group, and still answers the group.
The origin
A server needs no origin.
Relocating rather than walking
A path carries no flag and no token, so nothing relocates a unit: every path is walked.
What a client asks for and what a server answers
An order from a client is a request: what a unit does is whatever the server sends back.
A client does not move its own champion on a right click by itself: the champion moves only along a path a server sends.
An order carries no path: only its destination, in world floats. A server works out the route itself and sends it in the path that answers the order.
In 0.9.22.14–1.0.0.24
A server moves the champion by answering the
MoveOrderwith aWaypointGroup, and the client returns that group’ssyncIdin aWaypointAck(see Ordering).
In 0.9.25.24–1.0.0.24
A client takes a
WaypointGroupor aWaypointGroupAtSpeedon channels 2, 3 and 4 alike.
In 0.9.25.24–1.0.0.24
A client sends the
WaypointAckbefore reading any movement in the group, and lists no units in it.
Marking the ground
NavigationFlags marks the ground within circles.
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).
WaypointGroupAtSpeed
What a server sends to move units along paths of its own choosing, stating how each one travels rather than leaving it to the receiving end. It is what carries a unit thrown, dragged, or carried along by something other than its own walking. The header names no object: it carries zero.
In 0.9.22.14–1.0.0.24
Command 122 on events, sent by the server, reliable.
A client answers each with WaypointAck, naming this sync id alone, before it reads any movement and whatever movementCount is.
| Field | Type | What it is |
|---|---|---|
| syncId | u32 | Names this statement of movement. |
| movementCount | u16 | How many units follow. A client reads it as signed, so a count above 32767 counts as none, as zero does. |
| movements | count in movementCount × MovementAtSpeed | What each unit is told to do. |
WaypointAck
What a client sends once it has taken in a group of movements, naming which group. The header names no object: it carries zero.
In 0.9.22.14–1.0.0.24
Command 120 on requests, sent by the client, unsequenced.
What a client sends for every WaypointGroup it takes, and for every WaypointGroupAtSpeed, Path and PathWithSpeed, as it takes it and before it moves any unit. The header names no object: it carries zero.
| Field | Type | What it is |
|---|---|---|
| syncId | u32 | The number of the group it answers, as the group named itself. |
MoveOrder
What a client sends to tell a server what it wants a unit to do. The header names the sender’s champion.
In every range of this book
Command 20 on requests, sent by the client, reliable.
What a client sends as its player gives an order. It carries no path. The header names the unit ordered: the player’s champion, or a unit it controls alongside, which gets its own copy of the order.
| Field | Type | What it is |
|---|---|---|
| kind | u8 | What the order is. Values: 2 moveToPosition, 3 attack, 10 stop. |
| targetX | f32 | Where the order points, along one ground axis, in world units. |
| targetY | f32 | The height of the place ordered. |
| targetZ | f32 | Where the order points, along the other ground axis. |
| target | u32 | The network object the order is aimed at, or zero where it is aimed at open ground. |
WaypointGroup
What a server sends to move units. It carries a number a client returns to say it has taken the group in. The header carries zero or names the object this is about, and a client accepts either.
In 0.9.22.14–1.0.0.24
Command 121 on transient, sent by the server, unreliable.
What a server sends to set units walking paths, which each walks at its own speed.
| Field | Type | What it is |
|---|---|---|
| syncId | u32 | The number of this statement; a client applies a path to a unit only where it is not behind the last the unit took. A client returns it in WaypointAck to say the group arrived. |
| movementCount | u16 | How many paths follow, one for each unit. A client reads it as signed, so a count above 32767 counts as none, as zero does, and a client still answers. |
| movements | count in movementCount × Movement | One path for each unit. |
FaceDirection
What a server sends to turn a unit to face a direction. The header names the unit acting.
In 0.8.13.26–0.9.22.13
Command 96 on events, sent by the server, reliable.
Where towardX and towardZ are both zero, a client does nothing.
| Field | Type | What it is |
|---|---|---|
| towardX | f32 | The direction faced, along one ground axis. |
| towardY | f32 | The direction faced, in height. A client reads nothing here. |
| towardZ | f32 | The direction faced, along the other ground axis. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 93 on events, sent by the server, reliable.
Where towardX and towardZ are both zero, a client does not turn the unit at once, but it still keeps the zero direction as the one the unit is to face. What follows from that is not recorded.
| Field | Type | What it is |
|---|---|---|
| towardX | f32 | The direction faced, along one ground axis. |
| towardY | f32 | The direction faced, in height. |
| towardZ | f32 | The direction faced, along the other ground axis. |
FacePosition
What a client sends when a script it runs turns a unit to face a point. A server need do nothing with it. The header names the unit turned.
In every range of this book
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 96 |
| 0.9.22.14–1.0.0.24 | 93 |
| Field | Type | What it is |
|---|---|---|
| directionX | f32 | Which way the unit now faces, as a direction of length one, along one ground axis. |
| directionY | f32 | Which way the unit now faces, as a direction of length one, in height. |
| directionZ | f32 | Which way the unit now faces, as a direction of length one, along the other ground axis. |
Vectors (1)
MovementBounds
What a server sends to set a circle that a client keeps its view or its champion’s orders within. The header carries zero.
In 0.9.22.14–0.9.25.35
Command 127 on events, sent by the server, reliable.
A client keeps its camera within the circle, and nothing else.
| Field | Type | What it is |
|---|---|---|
| x | f32 | The circle’s centre, in world units. |
| y | f32 | The centre’s height, in world units. |
| z | f32 | The circle’s centre, in world units. |
| radius | f32 | The circle’s radius, in world units. Zero lifts the bounds; a negative radius counts as zero. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 126 on events, sent by the server, reliable.
A client keeps its camera within the circle, and nothing else.
| Field | Type | What it is |
|---|---|---|
| x | f32 | The circle’s centre, in world units. |
| y | f32 | The centre’s height, in world units. A client does not use it. |
| z | f32 | The circle’s centre, in world units. |
| radius | f32 | The circle’s radius, in world units. Zero lifts the bounds; a negative radius counts as zero. |
Path
What a server sends to set a unit walking along a path, facing the way it walks. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 80 on events, sent by the server, reliable.
A client acknowledges nothing and drops no path as stale. A body shorter than 4 bytes leaves a client failing.
| Field | Type | What it is |
|---|---|---|
| syncId | i32 | A client reads nothing here and answers nothing. |
| points | to the end × record | The path’s points, to the end of the message. A client takes the ground’s height for each, and passes over a remainder shorter than a point. |
| points[].x | f32 | A point on the path, in world units. |
| points[].z | f32 | A point on the path, in world units. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 77 on events, sent by the server, reliable.
A client answers every one at once, before applying it and whatever its sync id, unsequenced on the transient channel, with WaypointAck carrying this sync id. It applies it only where the sync id is not older than the last the unit took (as UnitStopped).
| Field | Type | What it is |
|---|---|---|
| syncId | i32 | The unit’s movement count. |
| points | to the end × record | The path’s points, to the end of the message. A client takes the ground’s height for each, and passes over a remainder shorter than a point. |
| points[].x | f32 | A point on the path, in world units. |
| points[].z | f32 | A point on the path, in world units. |
PathWithSpeed
What a server sends to set a unit moving along a path at a speed of its own, perhaps in an arc. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 81 on events, sent by the server, reliable.
A client acknowledges nothing and drops no path as stale. No unit to follow is carried.
| Field | Type | What it is |
|---|---|---|
| syncId | i32 | A client reads nothing here and answers nothing. |
| speed | f32 | The speed to move at, in world units a second. |
| gravity | f32 | The arc’s gravity, for a leap, in units of 150 world units a second squared. Zero or less moves the unit flat. |
| arcX | f32 | Where the arc begins, in world units. |
| arcZ | f32 | Where the arc begins, in world units. |
| points | to the end × record | The path’s points, to the end of the message. A client takes the ground’s height for each, and passes over a remainder shorter than a point. |
| points[].x | f32 | A point on the path, in world units. |
| points[].z | f32 | A point on the path, in world units. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 78 on events, sent by the server, reliable.
A client answers every one at once, before applying it and whatever its sync id, as it answers Path. It applies it only where the sync id is not older than the last the unit took, and does not count it as the last itself.
| Field | Type | What it is |
|---|---|---|
| syncId | i32 | The unit’s movement count. |
| speed | f32 | The speed to move at, in world units a second. |
| gravity | f32 | The arc’s gravity, for a leap, in units of 150 world units a second squared. Zero or less moves the unit flat. |
| arcX | f32 | Where the arc begins, in world units. |
| arcZ | f32 | Where the arc begins, in world units. |
| points | to the end × record | The path’s points, to the end of the message. A client takes the ground’s height for each, and passes over a remainder shorter than a point. |
| points[].x | f32 | A point on the path, in world units. |
| points[].z | f32 | A point on the path, in world units. |
UnitStopped
What a server sends to stop a unit where it stands. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 24 on events, sent by the server, reliable.
It carries no sync id: a client always applies the position and facing, then stops the unit.
| Field | Type | What it is |
|---|---|---|
| x | f32 | Where the unit stands, in world units; a client keeps this height rather than the ground’s. |
| y | f32 | Its height, in world units. |
| z | f32 | Where it stands, in world units. |
| facingX | f32 | The way it faces. |
| facingY | f32 | The way it faces. |
| facingZ | f32 | The way it faces. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 24 on events, sent by the server, reliable.
A client applies it only where its sync id is not older than the last the unit took, counting a wrap: this message, PathWithSpeed and Path share one count per unit, starting at -1.
| Field | Type | What it is |
|---|---|---|
| x | f32 | Where the unit stands, in world units; a client keeps this height rather than the ground’s. |
| y | f32 | Its height, in world units. |
| z | f32 | Where it stands, in world units. |
| facingX | f32 | The way it faces. |
| facingY | f32 | The way it faces. |
| facingZ | f32 | The way it faces. |
| syncId | i32 | The unit’s movement count. A client drops the message where it is behind the last the unit took by less than 1073741824. |
Vectors (1)
Replication
With Replication a server states what has changed about the units a client
can see: for each unit, the groups of values it carries and which values of
each follow. What the values are follows from the unit.
In 0.9.25.24–1.0.0.24
The groups follow in the order 0 to 4, and nothing gives a group’s length: each value is four bytes, so a group takes four bytes for its set of values and four for each bit that set has set.
Each value is a 32-bit float or a 32-bit unsigned integer, as its row in the tables below says, and travels as it stands.
A client passes over a set bit its table has no row for, and a group its table has none of, by their four bytes each, without taking anything from them. It passes over the values of a unit whose kind has no table the same way, and still answers the batch.
In 0.9.25.24–1.0.0.24
A value that says yes or no is an integer, 1 for yes and 0 for no. A client takes a batch on channels 2, 3 and 4 alike.
What settles a reading
A run is a sequence of values with nothing between them, in the order the set bits name them, lowest first.
The bit that names a value means different things for different units. Champions, turrets, minions and units belonging to no side, and buildings each answer to a table of their own, so the same bit in the same group is one value on one unit and another on the next. A sending end MUST write the table the unit it names answers to.
In 0.9.25.24–1.0.0.24
A prop answers to no table, and a client takes nothing a batch carries for one.
Which table a unit answers to follows from the message that put it on the field (see Units). A building, which no message creates, answers to the building table.
In 0.9.25.24–1.0.0.24
The building table is the same on every map.
Which batches a client takes
A client answers a batch with TransientAck where it holds every unit the
batch names, whether or not it took the values. Ordering says
which batches a client takes, and what that requires of a server.
Reading the tables
Each row gives the group and bits that name a value and what the value is.
In 0.9.25.24–1.0.0.24
Each row also gives the type a value is written in.
In 0.9.25.24–0.9.25.35
A champion
Group Bits Value Type 0 0 Experience float 0 1 Gold in hand float 0 2 to 3 Which slots can be cast from: the champion’s own, then the second set u32 0 4 to 7 What the spell in slots 0 to 3 costs float 0 8 to 11 What the spell in slots 41 to 44 costs float 0 12 to 13 What the spell in slots 0 and 1 of the second set costs float 1 0 to 1 Health and resource as they stand float 1 2 to 3 Health and resource at their greatest float 1 4 What the champion is doing, as a set of bits u32 1 5 to 8 Whether it is proof against spells, proof against all harm, targetable, and proof against strikes u32 2 0 to 1 Whether it is proof against strikes, then against spells, as group 1 bits 8 and 5 u32 2 2 Damage it deals by striking float 2 3 Damage its spells deal before modifiers float 2 4 How often it turns a blow aside float 2 5 Its size float 2 6 How often it strikes critically float 2 7 to 8 Armour and spell resistance float 2 9 to 10 How fast health and resource return float 2 11 How fast it moves float 2 12 How far it strikes from float 2 13 to 14 Flat and percent modifiers on the damage it strikes with float 2 15 to 16 Flat and percent modifiers on its spells’ damage float 2 17 to 18 Flat and percent reduction of the spell damage it takes float 2 19 A multiplier on how fast it strikes float 2 20 A flat addition to how far it casts float 2 21 A modifier on its cooldowns float 3 0 to 1 A percent and a flat addition to how far it sees float 3 2 Level u32 A turret
Group Bits Value Type 1 0 Damage it deals by striking float 1 1 to 2 Armour and spell resistance float 1 3 How fast it moves float 1 4 A multiplier on how fast it strikes float 1 5 Its size float 1 6 to 7 Flat and percent modifiers on the damage it strikes with float 1 8 to 9 Flat and percent modifiers on its spells’ damage float 1 10 to 11 How fast health and resource return float 1 12 to 13 Health as it stands, then at its greatest float 3 0 to 1 A percent and a flat addition to how far it sees float A minion, and a unit belonging to no side
Group Bits Value Type 1 0 to 1 Health as it stands, then at its greatest float 1 2 to 3 Whether it is proof against strikes, then against spells u32 1 4 What the unit is doing, as a set of bits u32 1 5 to 8 Whether it is proof against spells, proof against all harm, targetable, and proof against strikes u32 1 9 Damage it deals by striking float 1 10 to 11 Armour and spell resistance float 1 12 How fast it moves float 1 13 A multiplier on how fast it strikes float 1 14 Its size float 1 15 to 16 Flat and percent modifiers on the damage it strikes with float 1 17 to 18 Flat and percent modifiers on its spells’ damage float 1 19 to 20 How fast health and resource return float 3 0 to 1 A percent and a flat addition to how far it sees float A building
Inhibitors, nexuses and the buildings minions come from share one table. It has no value for health at its greatest.
Group Bits Value Type 1 0 to 1 Whether it is proof against all harm, and targetable u32 1 2 Health as it stands float
Values stated outside a batch
Besides its batches, a server states some values with messages of their own.
In 0.8.13.26–0.9.22.13
A server grants gold with
GoldGained.ExperienceGainedshows the experience gained over the unit and grants none: a champion’s experience follows its replicated values alone.
In 0.9.25.24–1.0.0.24
A server grants experience with
ExperienceGainedand gold withGoldGained.
A server can send the gold a unit earns to another with GoldRedirect. A level
gained is LevelUp, which on its own is enough for a client to show the new
level on its champion’s portrait. A server sets a champion’s tallies for the
scoreboard with ChampionStats. A server can also add to a unit’s shield
(ShieldAdded), change how its health bar or resource bar is shown
(HealthBar, ResourceDisplay), change the sort of resource it has
(ResourceKindChanged), set the highest level a champion reaches
(LevelCap), and count minions killed, scores and deeds (MinionKillCount,
ScoreAdded, StatisticIncremented).
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).
Replication
What a server sends to say what has changed about units a client can see. It is the most frequent thing a server sends. The header names no object: a server writes zero.
In 0.9.22.14–1.0.0.24
Carried on transient, sent by the server, unreliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.14–0.9.25.35 | 129 |
| 0.9.25.36–1.0.0.24 | 128 |
| Field | Type | What it is |
|---|---|---|
| syncId | u32 | Names this batch of changes. Replication says which batches a client takes values from. |
| unitCount | u8 | How many units follow. |
| units | count in unitCount × Replication |
Vectors (1)
TransientAck
What a client sends to say a batch of changes arrived, naming which batch. The header names no object: it carries zero.
In 0.9.22.14–1.0.0.24
Carried on requests, sent by the client, unsequenced, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.14–0.9.25.35 | 130 |
| 0.9.25.36–1.0.0.24 | 129 |
A client sends it for a Replication batch only where it holds every unit the batch names, or the batch names none.
| Field | Type | What it is |
|---|---|---|
| syncId | u32 | Which batch is being acknowledged, as the batch named itself. |
Vectors (1)
GoldGained
What a server sends to show a unit gaining gold. The header names the unit whose death earned the gold, as source does.
In every range of this book
Command 27 on events, sent by the server, reliable.
Where amount is above 0.5, unit is the client’s own champion and source names a unit it holds, a client floats the gold over the source. Otherwise, where it holds the unit, it floats the amount over the unit as a gain or a loss, and nothing for zero.
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The unit granted it. |
| source | u32 | What it came from, or zero where nothing did. |
| amount | f32 | How much. |
ExperienceGained
What a server sends to say a unit gained experience. The header names no object: a server writes zero.
In 0.8.13.26–0.9.22.13
Command 28 on events, sent by the server, reliable.
It changes no unit’s experience: a client only floats the amount as text over the unit, where the player’s floating-text settings allow.
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The unit granted it, one with a mind, such as a champion or a minion. A client does nothing for a unit it does not know. |
| amount | f32 | How much. A client shows a value below zero or from 100000 up as well. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 28 on events, sent by the server, reliable.
It changes no unit’s experience: a client only floats the amount as text over the unit, where the player’s floating-text settings allow.
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The unit granted it, a champion. A client fails for any other unit it holds, and does nothing for a unit it does not know. |
| amount | f32 | How much. A client shows a value below zero or from 100000 up as well. |
GoldRedirect
What a server sends to send the gold a unit earns to another. The header names the unit.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 92 |
| 0.9.22.14–1.0.0.24 | 89 |
| Field | Type | What it is |
|---|---|---|
| target | u32 | The unit that receives the gold. |
Vectors (1)
LevelUp
What a server sends when a unit gains a level. The header names the unit this is about. On its own, with no replication behind it, it is enough for a client to show the new level on the champion’s portrait and offer the unspent points.
In every range of this book
Command 47 on events, sent by the server, reliable.
A client applies it only to a champion, and ignores it for any other unit.
| Field | Type | What it is |
|---|---|---|
| level | u8 | The level now reached. |
| pointsToSpend | u8 | How many spell points are left unspent. |
StatTick
What a server sends to advance every unit’s stats by a span of time. The header carries zero.
In 0.8.13.26–0.9.22.13
Command 68 on events, sent by the server, reliable.
For every unit not dead, a client adds its health regeneration times seconds to its health, and its mana regeneration times seconds to its mana, each held between zero and its maximum.
| Field | Type | What it is |
|---|---|---|
| seconds | f32 | The span, in seconds. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 64 on events, sent by the server, reliable.
A client takes it and changes nothing it shows.
| Field | Type | What it is |
|---|---|---|
| seconds | f32 | The span, in seconds. |
ValueGroup0
What a server sends to set values of group 0 on a unit. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 49 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| which | u32 | Says which of the group’s values follow, one bit each, lowest first. |
| values | count in the bits set in which × bytes | The values themselves, four bytes each, in the order the bits above name them. A client reads one only for a bit below the number of values the unit holds in the group, and nothing after the bits where the unit holds no such group. |
Vectors (1)
ValueGroup1
What a server sends to set values of group 1 on a unit. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 50 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| which | u32 | Says which of the group’s values follow, one bit each, lowest first. |
| values | count in the bits set in which × bytes | The values themselves, four bytes each, in the order the bits above name them. A client reads one only for a bit below the number of values the unit holds in the group, and nothing after the bits where the unit holds no such group. |
Vectors (1)
ValueGroup2
What a server sends to set values of group 2 on a unit. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 51 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| which | u32 | Says which of the group’s values follow, one bit each, lowest first. |
| values | count in the bits set in which × bytes | The values themselves, four bytes each, in the order the bits above name them. A client reads one only for a bit below the number of values the unit holds in the group, and nothing after the bits where the unit holds no such group. |
Vectors (1)
ValueGroup3
What a server sends to set values of group 3 on a unit. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 52 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| which | u32 | Says which of the group’s values follow, one bit each, lowest first. |
| values | count in the bits set in which × bytes | The values themselves, four bytes each, in the order the bits above name them. A client reads one only for a bit below the number of values the unit holds in the group, and nothing after the bits where the unit holds no such group. |
Vectors (1)
The match
How a match runs once play has begun, apart from the field: its clock, holds, its end, and players leaving and coming back.
The clock
A server states how long the match has run with ClockSync, and a client
answers on the clock channel with ClockReply. Time says how the
match clock is kept, and which clock each time on the wire is measured
against.
GameSpeed sets how fast the match runs. StatTick hands every unit a span of
seconds.
In 0.8.13.26–0.9.22.13
StatTickasks every unit’s stats to advance by that span.
In 0.9.25.24–1.0.0.24
A client shows the speed
GameSpeedsets over its champion. A client changes nothing it shows forStatTick.
In 0.9.25.24–1.0.0.24
The speed
GameSpeedsets takes effect at once: sent during a hold, it ends the hold, and aResumedafter it changes nothing.
In 0.9.25.24–0.9.25.35
No unit advances for
StatTick.
Holding and resuming
A client asks to hold the match with Pause, and to resume it with Resume. A
server MUST attribute each to the connection it arrived on (see Objects and
identifiers).
A server holds the match with Paused.
In 0.9.25.24–1.0.0.24
A client reads nothing from
Paused. It stops the match clock where the clock is running, keeping the speed it had, and shows nothing.
A server ends the hold with Resumed.
In 0.9.25.24–1.0.0.24
A client reads nothing from
Resumed. Where the match is held, it goes on at once at the speed it had, with no countdown and no announcement.
The end
A server ends the match with GameEnded, saying which side won, and takes the
interface down with HudDisabled. A client shows the win or loss for its
player’s side and sends ClientFinished.
A client sends ClientFinished every time GameEnded arrives in play, while
playing a replay too.
In 0.8.13.26–0.9.25.35
A client that receives
GameEndedwhile still loading takes it as in play: it records the result and sendsClientFinished.
VictoryDance sets units moving as winners or losers do. It ends nothing.
Leaving and coming back
A client leaving as one abandoning the match sends Exit: as its player quits
or closes the window, as a reconnection fails, or on a server’s Shutdown,
which has it leave at once. A client also leaves at once on BotKick with the
action that means leave.
In 0.9.25.24–1.0.0.24
A client also leaves as one abandoning as its player declines to reconnect or cancels a reconnection under way, and as its player dismisses the notice that it was dropped for being away.
A server tells the others that a player’s client dropped with
PlayerDisconnected.
In 0.9.25.24–1.0.0.24
A client shows a notice in chat for
PlayerDisconnected.
SoftReconnect rebuilds a client’s world without a new connection, as
Objects and identifiers describes.
In 0.8.13.26–0.9.22.13
A client whose connection drops, while loading or in play, shows its player that it was disconnected, and neither connects again nor leaves.
In 0.9.25.24–1.0.0.24
A client started again for a match in progress knows nothing of it, and joins as at the start: a server takes it through Joining a match from registering to
StartGame, with a spawn run that states the field as it stands, and aClockSync.A client the server drops with the reason that means its player was away shows that, and does not connect again.
In 0.9.25.24–1.0.0.24
A client sends
ReconnectedInMatchon every connection it makes, the first included, with a byte that is 0 where the match is in play and 1 otherwise.
Reconnectedannounces that a player came back. A client shows it in chat for any other player, ally or enemy.
In 0.9.25.24–1.0.0.24
A client dropped during play connects again only where its player agrees: for the reason 0 it asks, and on a yes connects again, showing that it is reconnecting until it is back or its player cancels. For any other reason but the one that means its player was away, it shows that the reconnection failed. One dropped while loading leaves.
Where
Reconnectednames the client’s own, the client resynchronises untilResyncEnded.
Staying connected
A client’s view report, Camera, goes out as its view moves at least 200
units, at most every tenth of a second, and never while its view is locked.
Where its last Camera goes unacknowledged, a client sends it again without
its view moving, once more than twice the round trip has passed.
In 0.9.25.24–1.0.0.24
A client gives up on a connection where a reliable message it sent goes unacknowledged for 30 seconds, while loading and in play alike.
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).
ClockSync
What a server sends to set a client’s idea of how long the match has run. The header names no object: a server writes zero.
In 0.8.13.26–0.9.22.13
Command 77 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| elapsed | f32 | How long the match has run, in seconds. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 74 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| elapsed | f32 | How long the match has run, in seconds. A client sets its clock to this plus its own measure of the round trip, and answers at once with ClockReply. |
ClockReply
What a client sends back when a server states the match clock, carrying both readings so the server can tell how far apart they are. The header names no object: it carries zero.
In every range of this book
Carried on clock, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 78 |
| 0.9.22.14–1.0.0.24 | 75 |
| Field | Type | What it is |
|---|---|---|
| value | u32 | The client id the sender holds. |
| serverSaid | f32 | The time the server last stated, in seconds, carried back as it arrived. |
| clientSaid | f32 | What the client’s own clock reads, in seconds, just after it set itself from that statement. |
Vectors (1)
GameSpeed
What a server sends to set how fast the game’s clock runs. A client shows the new speed over its champion. The header carries zero.
In 0.9.22.14–0.9.25.35
Command 136 on events, sent by the server, reliable.
Sent while paused, it takes effect at once, and play runs at that speed.
| Field | Type | What it is |
|---|---|---|
| speed | f32 | How fast, 1 being normal. A client sets no bound. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 135 on events, sent by the server, reliable.
It takes effect at once, so sent while paused it ends the pause.
| Field | Type | What it is |
|---|---|---|
| speed | f32 | How fast, 1 being normal. A client applies it as given, with no limit. |
Resumed
What a server sends to take the match off hold. The header names a champion: that of the player who resumed the match.
In 0.9.22.14–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.14–0.9.25.35 | 135 |
| 0.9.25.36–1.0.0.24 | 134 |
A client resumes the match at once where it is held, and announces no one.
No body.
Vectors (1)
Paused
What a server sends to put the match on hold. The header names no object: it carries zero.
In 0.9.22.14–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.14–0.9.25.35 | 134 |
| 0.9.25.36–1.0.0.24 | 133 |
A client holds the match at once where it is not already held.
No body.
Vectors (1)
GameEnded
What a server sends to end the match and say which side won. The header names no object: it carries zero.
In every range of this book
Command 14 on events, sent by the server, reliable.
A client counts a win where its own side is 100 and result is nonzero, or its side is 200 and result is zero, and a loss otherwise. It ends the match on its screen and sends ClientFinished. A client fails where its own player does not yet exist.
| Field | Type | What it is |
|---|---|---|
| result | u8 | Nonzero where side 100 won, zero where side 200 did; a client counts a win where its own side is the one that won. |
Vectors (1)
ClientFinished
What a client sends when it has finished with the match.
In every range of this book
Command 17 on requests, sent by the client, reliable.
A client sends it each time GameEnded arrives.
No body.
Exit
What a client sends as it leaves. It carries nothing of its own.
In 0.9.22.14–1.0.0.24
Command 115 on requests, sent by the client, reliable.
A client sends it once, as it leaves without a result: as its player confirms quitting or the window is asked to close, or as its player gives up reconnecting after the connection is lost, or loses it where reconnecting is turned off. It sends none after GameEnded, and none on Shutdown or BotKick.
No body.
Vectors (1)
PlayerDisconnected
What a server sends as a player’s client drops out. The header carries zero.
In 0.9.22.14–1.0.0.24
Command 116 on events, sent by the server, reliable.
A client shows a chat notice naming the player that client id belongs to, whenever its interface exists: in a neutral colour where it has no champion of its own, and otherwise coloured for whether that player is on its own side.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | The player’s client id, matched against the client id CreateChampion gave each champion the client knows. |
ReconnectedInMatch
What a client sends right after the server answers its registration. The header carries zero.
In 0.9.22.14–1.0.0.24
Command 117 on requests, sent by the client, reliable.
A client dropped while playing asks its player whether to reconnect; where the drop gives inactivity or another reason, it only says it cannot reconnect. One dropped at any other time closes.
| Field | Type | What it is |
|---|---|---|
| loading | u8 | Zero while the client is playing, in the state StartGame puts it in; 1 at any other time, including after GameEnded. |
Reconnected
What a server sends to say a client has reconnected. The header carries zero.
In 0.9.22.14–1.0.0.24
Command 118 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| client | u32 | The client, by the seat it occupies. |
ClockConvergence
What a server sends about how its clock and a client’s are being brought together. The header carries zero.
In every range of this book
Carried on clock, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 79 |
| 0.9.22.14–1.0.0.24 | 76 |
| Field | Type | What it is |
|---|---|---|
| clientTime | f32 | The client’s clock, in seconds, as the client reported it. A client sets its clock offset from it: its running round trip value, less half of its own clock’s reading less this value. |
| roundTrip | f32 | The round trip time the server measures, in seconds. A client blends it into a running value, keeping 0.8 of the old and adding 0.1 of this. |
Vectors (1)
Combat
Attacks, damage, death and coming back. Spells are in Spells.
Attacking
A server says a unit is swinging at another with Attack, or with
AttackFrom, which also says where the swinging unit stands. StopAttack
breaks an attack off. AttackSpeedBounds puts a ceiling or a floor on how fast a
unit attacks.
After StopAttack, a client clears the unit’s attack whatever the message’s
flags ask besides.
In 0.9.25.24–1.0.0.24
A client moves the attacker to the place
AttackFromgives only where it stands more than 400 units from it.
A client asks its champion to attack with a MoveOrder naming the unit (see
Movement). What the player then sees is what a server sends: the
champion walking into range along a WaypointGroup, a swing for each Attack,
and what each Damage shows.
How long a swing takes comes from the champion’s data and its attack speed.
A client ignores an Attack whose target it does not hold.
In 0.8.13.26–0.9.22.13
Result 0 of
Damageis a notice a client shows for only one in every thirty it receives, and result 5 a miss, shown for its player’s own unit. Results 3, 4 and any above 5 show a figure, and for them a client lowers the hurt unit’s health by the amount itself, without waiting for replication.
In 0.9.25.24–1.0.0.24
Damageshows a figure for the results that carry one, normal and critical; zero is the result that shows the unit as invulnerable, not a plain hit.
In 0.9.25.24–1.0.0.24
Of the other results of
Damage, 1 shows nothing, 2 a dodge and 5 a miss; 3 is critical, and 4 and any above 5 are normal.
TargetUnit draws a unit’s targeting beam at what it is attacking.
Only a turret takes TargetUnit; every other unit ignores it.
In 0.9.25.24–1.0.0.24
TargetHeldChampionmarks a unit as attacking the client’s own champion: a client sets the mark only where the message names that champion, and clears it for any other. A client takes it apart fromTargetUnit.
HoverTarget and HoverIndicator set and show the unit a unit’s hover
indicator points at, and AttackIndicators shows or hides a unit’s attack
indicators.
A champion’s clicks can be made to attack the ground with GroundAttackMode.
Damage
A server reports damage with Damage.
A client shows nothing for Damage unless it holds the unit hurt; it need not
hold the unit dealing it.
Death
A unit’s death is UnitDied, a champion’s ChampionDied, a building’s
BuildingDied, and an inhibitor’s InhibitorDied. ForceDeath puts a unit
into its death.
A client ignores UnitDied or ChampionDied naming a unit already dead, and
puts a unit down only where a killer is named.
A killer a client does not hold still puts the unit down.
Nothing in UnitDied leaves the unit standing: every unit it puts down dies.
In 0.9.25.24–0.9.25.35
A server MUST NOT send
BuildingDiedfor the nexus: a client removes the nexus some 4 seconds later while still using it, and fails.
How long a champion stays down is DeathTimer. Whether a client draws the world
without colour while its champion is down is GreyscaleWhenDead. What led to a
death is DeathHistory, which a client lays out for its player. An inhibitor’s
state, and how long it lasts, is InhibitorState.
Coming back
Revived puts a champion back on the field.
A client reads nothing from Revived or Respawned: each brings the champion
back where it stands.
Using a unit
A client sends UseObject as its player right-clicks a unit that can be used.
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).
Attack
What a server sends to say a unit is swinging at another. The header names the unit acting.
In 0.8.13.26–0.9.22.13
Command 57 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| target | u32 | The unit swung at. A client throws the swing at it. |
| timing | f32 | A shift in time, in seconds, from the moment the message arrives. It moves when the swing lets go and ends, and when the unit may next attack. |
| missile | u32 | The name the missile this swing throws will answer to. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 53 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| target | u32 | The unit swung at. A client throws the swing at it, and drops the whole message where it does not know this unit. |
| timing | f32 | A shift in time, in seconds, from the moment the message arrives. It moves when the swing lets go and ends, and when the unit may next attack. |
| missile | u32 | The name the missile this swing throws will answer to. |
| slot | u8 | Which of the unit’s attacks this is. |
AttackFrom
What a server sends to say a unit is swinging at another, carrying where the swinging unit stands as well as what it swings at. The header names the unit acting.
In 0.8.13.26–0.9.22.13
Command 58 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| target | u32 | The unit swung at. A client throws the swing at it. |
| timing | f32 | A shift in time, in seconds, from the moment the message arrives. It moves when the swing lets go and ends, and when the unit may next attack. |
| missile | u32 | The name the missile this swing throws will answer to. Zero for a swing that throws none. |
| fromX | f32 | Where the swinging unit stands, along one ground axis, in world units. A client stops the unit’s movement and places it at this point, height included, even where it does not know target and no swing follows. |
| fromY | f32 | Where it stands, in height, in world units. |
| fromZ | f32 | Where it stands, along the other, in world units. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 54 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| target | u32 | The unit swung at. A client throws the swing at it. |
| timing | f32 | A shift in time, in seconds, from the moment the message arrives. It moves when the swing lets go and ends, and when the unit may next attack. |
| missile | u32 | The name the missile this swing throws will answer to. |
| slot | u8 | Which of the unit’s attacks this is. |
| fromX | f32 | Where the swinging unit stands, along one ground axis, in world units. Where the unit stands more than 400 units from this point, measured along the ground alone, a client first moves it there; nearer, the point has no effect. |
| fromY | f32 | Where it stands, in height, in world units. |
| fromZ | f32 | Where it stands, along the other, in world units. |
Vectors (1)
StopAttack
What a server sends to break off an attack a unit is making. The header names the unit acting.
In 0.8.13.26–0.9.22.13
Command 48 on events, sent by the server, reliable.
Whatever the flags, a client then clears the unit’s attack.
| Field | Type | What it is |
|---|---|---|
| keepAnimating | u8 | Nonzero: set to let the attack’s animation play on after the stop. |
| forceCast | u8 | Nonzero: set to make the attack land first where it has not already. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 48 on events, sent by the server, reliable.
Whatever the flags, a client then clears the unit’s attack.
| Field | Type | What it is |
|---|---|---|
| how | 1-byte bits | |
| how.keepAnimating | bit 0 | Set to let the attack’s animation play on after the stop. It applies only where forceStop is clear. |
| how.forceCast | bit 1 | Set to make the attack land first where it has not already. |
| how.forceStop | bit 2 | Set to stop the current cast outright; clear, a client stops the attack the ordinary way. |
| how.summonerSpell | bit 3 | Picks which spells the stop applies to: set, the summoner spells; clear, the unit’s own. A unit with no summoner spells, such as any unit that is not a champion, stops nothing when this is set. |
| how.destroyMissile | bit 4 | Set to destroy the attack’s missile, where it has one. It applies only where forceStop is set and a cast is under way. |
| how.unused | bit 5 to 7 | Unused; a server writes zero. |
Damage
What a server sends to say one unit hurt another. The header names the unit hurt, as target does.
In 0.8.13.26–0.9.22.13
Command 23 on events, sent by the server, reliable.
For results 3, 4 and any above 5, a client takes amount off the target’s health, held at its maximum, but leaves the health as it was where the new value would be zero or less. Where the header names the client’s own champion and the target is a champion, an amount above zero can bring up the low-health screen effect.
| Field | Type | What it is |
|---|---|---|
| result | u8 | How the damage landed, and so what a client shows over the unit hurt, as one whole byte. 4 shows the amount, 3 shows it as a critical strike, and 2 shows the word for a dodge in place of an amount; any value above 5 shows as 4. Values: 0 invulnerable, 1 silent, 2 dodge, 3 critical, 4 normal, 5 miss. |
| target | u32 | The unit hurt. |
| source | u32 | The unit dealing it. A client shows nothing, notices included, unless it holds target and target can be attacked; it does not need to hold source, and a champion source has the amount added to its damage dealt. |
| amount | f32 | How much. |
Vectors (1)
In 0.9.22.14–0.9.25.23
Command 23 on events, sent by the server, reliable.
A client shows the figure and nothing more: the health it shows for the unit is what replication carries, and this message leaves it as it was.
| Field | Type | What it is |
|---|---|---|
| how | 1-byte bits | |
| how.result | bit 0 to 6 | How the damage landed, and so what a client shows over the unit hurt. 4 shows the amount, 3 shows it as a critical strike, and 2 shows the word for a dodge in place of an amount; any value above 5 shows as 4. |
| how.sound | bit 7 | Set to play a sound made from the source’s and the target’s sound names, at the target. A client plays it only where it holds both and sees the target. |
| target | u32 | The unit hurt. |
| source | u32 | The unit dealing it. A client shows nothing, notices included, unless it holds target and target can be attacked; it does not need to hold source, and a champion source has the amount added to its damage dealt. |
| amount | f32 | How much. |
Vectors (1)
In 0.9.25.24–1.0.0.24
Command 23 on events, sent by the server, reliable.
A client shows the figure, but the health it shows for the unit is what replication carries, and this message leaves it as it was.
| Field | Type | What it is |
|---|---|---|
| how | 1-byte bits | |
| how.result | bit 0 to 6 | How the damage landed, and so what a client shows over the unit hurt: 0 the word for invulnerable, 1 nothing, 2 the word for a dodge, 3 the amount as a critical strike, 4 the amount, and 5 the word for a miss; any value above 5 shows as 4. A client shows the amount cut down to a whole number. |
| how.unused | bit 7 | Unused; a server writes zero. |
| target | u32 | The unit hurt. |
| source | u32 | The unit dealing it. A client shows nothing, notices included, unless it holds target and target can be attacked; it does not need to hold source, and a champion source has the amount added to its damage dealt where result is 3, 4 or above 5. |
| amount | f32 | How much. |
TargetUnit
What a server sends to say what a unit is attacking, whatever the unit attacked is. A client takes down whatever it was drawing for that unit’s last target and draws for the new one where the target and the unit’s own settings allow. The header names the unit acting.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 73 |
| 0.9.22.14–1.0.0.24 | 69 |
Only a turret takes it, drawing its beam to target.
| Field | Type | What it is |
|---|---|---|
| target | u32 | The unit being attacked, or zero where it is attacking nothing. |
Vectors (1)
TargetHeldChampion
What a server sends to mark that a unit is attacking a champion, or to take the mark away. The header names the unit. TargetUnit draws the targeting beam and never touches this mark.
In 0.9.22.14–1.0.0.24
Command 70 on events, sent by the server, reliable.
A client marks the unit where target is its own champion, drawing an indicator on the unit’s health bar unless the unit’s data turns it off; any other target clears the mark. A client fails on a nonzero target where it has no player of its own.
| Field | Type | What it is |
|---|---|---|
| target | u32 | The champion being attacked. |
UnitDied
What a server sends to say a unit died, to everyone who can see it. The header names the unit this is about.
In 0.8.13.26–0.9.22.13
Command 34 on events, sent by the server, reliable.
A client does nothing more for a unit already dead, or where killer is zero. Otherwise, whether or not it knows killer, it puts the unit down for stayDown: dead, with no health, its movement, cast and attack stopped. For a minion whose killer, or the killer’s owner, is the player’s own champion, it then shows a kill notice.
| Field | Type | What it is |
|---|---|---|
| killer | u32 | The unit credited with the death. |
| damageType | u8 | Unused; a server writes zero. |
| damageSource | u8 | Unused; a server writes zero. |
| stayDown | f32 | How long the unit stays down, in seconds. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 34 on events, sent by the server, reliable.
A client does nothing for a unit already dead. Otherwise it stops the unit’s cast and attack and, where killer is nonzero, puts the unit down for stayDown, whether or not it knows killer, and shows what that kind of unit shows for a kill, for a minion only where killer is on another side.
| Field | Type | What it is |
|---|---|---|
| killer | u32 | The unit credited with the death. |
| damageType | u8 | Unused; a server writes zero. |
| damageSource | u8 | Unused; a server writes zero. |
| stayDown | f32 | How long the unit stays down, in seconds. |
BuildingDied
What a server sends when a building is destroyed. The header names the unit this is about.
In 0.8.13.26–0.9.22.13
Command 76 on events, sent by the server, reliable.
A server sends it for no nexus. A client takes a building it names away four seconds later, turrets and the nexus included, and a nexus it takes away leaves the client failing at its next game event. An inhibitor stays: a client plays its destruction and raises a game event carrying attacker. A nexus falls with GameEnded.
| Field | Type | What it is |
|---|---|---|
| attacker | u32 | The unit that destroyed it. Only an inhibitor reads it; a client reads nothing here for any other building. |
Vectors (1)
In 0.9.22.14–0.9.25.35
Command 73 on events, sent by the server, reliable.
A server sends it for no nexus. A client takes a building it names away four seconds later, and a nexus it takes away leaves the client failing at its next game event. An inhibitor stays: a client plays its destruction and raises a game event carrying attacker. A nexus falls with GameEnded.
| Field | Type | What it is |
|---|---|---|
| attacker | u32 | The unit that destroyed it. Only an inhibitor reads it; a client reads nothing here for any other building. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 73 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| attacker | u32 | The unit that destroyed it. A client reads nothing here. |
GreyscaleWhenDead
What a server sends to say whether a client draws the world without colour while its champion is down. The header names a champion: that of the player it is sent to.
In 0.9.25.36–1.0.0.24
Command 170 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| state | 1-byte bits | |
| state.enabled | bit 0 | Set where the world is drawn without colour. Clear, it does not stop a client drawing the world without colour while its champion is down. |
| state.unused | bit 1 to 7 | Unused; a server writes zero. |
DeathHistory
What a server sends to say what led to a death, so the client can lay it out. The header names the unit this is about.
In 0.9.22.14–0.9.22.15
Command 112 on events, sent by the server, reliable.
A client ignores the whole message where killer is zero; a killer it does not hold brings it down. Each entry’s size after source follows from event alone.
| Field | Type | Present when | What it is |
|---|---|---|---|
| killer | u32 | The unit credited with the death. A client ignores the whole message where this is zero, and fails where it does not hold this unit. | |
| sourceType | u32 | What sort of source the killer was. A client keeps only the low 4 bits, signed, and acts on them only where it holds killer. | |
| blobLength | u32 | How many bytes the entries below take together. A client reads exactly that many; zero, or a value above 2147483647, carries no entries. A client reads it as signed: from 2147483648 up it reads nothing more. | |
| entryCount | u32 | How many entries follow. Read as signed: from 2147483648 up it parses no entries. | |
| entries | count in entryCount × record | What happened to the unit before it died, packed one after another. | |
| entries[].time | f32 | When it happened, in match seconds. | |
| entries[].count | u16 | How many times. | |
| entries[].event | u8 | Which event, from 0 to 62, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought. | |
| entries[].source | u32 | The unit that did it. | |
| entries[].target | u32 | The unit it was done to. A client fails where it holds the source but not this unit. | |
| entries[].damage | record | event = 10 or 11 | How much harm, and from what. |
| entries[].damage.physical | f32 | Physical damage. | |
| entries[].damage.magical | f32 | Magical damage. | |
| entries[].damage.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| entries[].damage.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| entries[].damage.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| entries[].damage.parentCaster | u32 | Unused; a client reads nothing here. | |
| entries[].damage.parent | 4-byte bits | Where the spell or effect came from. | |
| entries[].damage.parent.source | bit 0 to 3 | What sort of source the parent spell or effect is, numbered as sourceKind is. | |
| entries[].damage.parent.side | bit 4 to 7 | What it means is not recorded for this range; a server writes zero. | |
| entries[].damage.parent.category | bit 8 to 11 | A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too. | |
| entries[].damage.parent.spellLevel | bit 12 to 14 | The rank of the spell, as shown. | |
| entries[].damage.parent.unused | bit 15 to 31 | Unused; a server writes zero. | |
| entries[].spent | u32 | event = 18 | How much gold, as shown. |
| entries[].value | u32 | event = 20 | What it carries is not recorded for this range; a client does not show it. |
| entries[].critical | f32 | event = 21 | The critical strike’s damage, as shown. |
| entries[].spree | u32 | event = 39 | How many kills in a row, as shown. |
| entries[].earned | record | event = 19 | Gold earned. |
| entries[].earned.gold | f32 | How much gold, as shown. | |
| entries[].heal | record | event = 36 or 37 | How much health, and from what. |
| entries[].heal.amount | f32 | How much health, as shown. | |
| entries[].heal.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| entries[].heal.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| entries[].heal.spellLevel | u32 | The level of the spell it came from. | |
| entries[].heal.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| entries[].heal.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| entries[].heal.unused | u32 | Unused; a client reads nothing here. | |
| entries[].heal.unusedToo | u32 | Unused; a client reads nothing here. | |
| entries[].effect | record | event = 38 | The effect, and where it came from. |
| entries[].effect.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| entries[].effect.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| entries[].effect.spellLevel | u32 | The level of the spell it came from. | |
| entries[].effect.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| entries[].effect.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| entries[].effect.unused | u32 | Unused; a client reads nothing here. | |
| entries[].effect.unusedToo | u32 | Unused; a client reads nothing here. | |
| entries[].assist | record | event = 53 | What one unit did toward a death. |
| entries[].assist.lastHit | f32 | When it last dealt damage, in match seconds. | |
| entries[].assist.physical | f32 | Physical damage it dealt. | |
| entries[].assist.magical | f32 | Magical damage it dealt. | |
| entries[].assist.share | f32 | What it carries is not recorded for this range; a server writes zero. | |
| entries[].assist.gold | f32 | What it carries is not recorded for this range; a server writes zero. | |
| entries[].kill | record | event = 0 | Nothing a client shows; the unit before it names the killer. |
| entries[].kill.unused | f32 | A client reads nothing here, and writes zero where it raises the event itself. A server writes zero. |
Vectors (1)
In 0.9.22.16–0.9.25.20
Command 112 on events, sent by the server, reliable.
A client ignores the whole message where killer is zero; a killer it does not hold brings it down. Each entry’s size after source follows from event alone.
| Field | Type | Present when | What it is |
|---|---|---|---|
| killer | u32 | The unit credited with the death. A client ignores the whole message where this is zero, and fails where it does not hold this unit. | |
| sourceType | u32 | What sort of source the killer was. A client keeps only the low 4 bits, signed, and acts on them only where it holds killer. | |
| blobLength | u32 | How many bytes the entries below take together. A client reads exactly that many; zero, or a value above 2147483647, carries no entries. A client reads it as signed: from 2147483648 up it reads nothing more. | |
| entryCount | u32 | How many entries follow. Read as signed: from 2147483648 up it parses no entries. | |
| entries | count in entryCount × record | What happened to the unit before it died, packed one after another. | |
| entries[].time | f32 | When it happened, in match seconds. | |
| entries[].count | u16 | How many times. | |
| entries[].event | u8 | Which event, from 0 to 70, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought, 66 surrenderCountdown, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo. | |
| entries[].source | u32 | The unit that did it. | |
| entries[].target | u32 | The unit it was done to. A client fails where it holds the source but not this unit. | |
| entries[].damage | record | event = 10 or 11 | How much harm, and from what. |
| entries[].damage.physical | f32 | Physical damage. | |
| entries[].damage.magical | f32 | Magical damage. | |
| entries[].damage.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| entries[].damage.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| entries[].damage.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| entries[].damage.parentCaster | u32 | Unused; a client reads nothing here. | |
| entries[].damage.parent | 4-byte bits | Where the spell or effect came from. | |
| entries[].damage.parent.source | bit 0 to 3 | What sort of source the parent spell or effect is, numbered as sourceKind is. | |
| entries[].damage.parent.side | bit 4 to 7 | What it means is not recorded for this range; a server writes zero. | |
| entries[].damage.parent.category | bit 8 to 11 | A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too. | |
| entries[].damage.parent.spellLevel | bit 12 to 14 | The rank of the spell, as shown. | |
| entries[].damage.parent.unused | bit 15 to 31 | Unused; a server writes zero. | |
| entries[].spent | u32 | event = 18 | How much gold, as shown. |
| entries[].value | u32 | event = 20 or 62 | What it carries is not recorded for this range; a client does not show it. |
| entries[].critical | f32 | event = 21 | The critical strike’s damage, as shown. |
| entries[].spree | u32 | event = 39 | How many kills in a row, as shown. |
| entries[].earned | record | event = 19 | Gold earned. |
| entries[].earned.gold | f32 | How much gold, as shown. | |
| entries[].heal | record | event = 36 or 37 | How much health, and from what. |
| entries[].heal.amount | f32 | How much health, as shown. | |
| entries[].heal.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| entries[].heal.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| entries[].heal.spellLevel | u32 | The level of the spell it came from. | |
| entries[].heal.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| entries[].heal.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| entries[].heal.unused | u32 | Unused; a client reads nothing here. | |
| entries[].heal.unusedToo | u32 | Unused; a client reads nothing here. | |
| entries[].effect | record | event = 38 | The effect, and where it came from. |
| entries[].effect.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| entries[].effect.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| entries[].effect.spellLevel | u32 | The level of the spell it came from. | |
| entries[].effect.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| entries[].effect.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| entries[].effect.unused | u32 | Unused; a client reads nothing here. | |
| entries[].effect.unusedToo | u32 | Unused; a client reads nothing here. | |
| entries[].assist | record | event = 53 | What one unit did toward a death. |
| entries[].assist.lastHit | f32 | When it last dealt damage, in match seconds. | |
| entries[].assist.physical | f32 | Physical damage it dealt. | |
| entries[].assist.magical | f32 | Magical damage it dealt. | |
| entries[].assist.share | f32 | What it carries is not recorded for this range; a server writes zero. | |
| entries[].assist.gold | f32 | What it carries is not recorded for this range; a server writes zero. | |
| entries[].kill | record | event = 0 | Nothing a client shows; the unit before it names the killer. |
| entries[].kill.unused | f32 | A client reads nothing here, and writes zero where it raises the event itself. A server writes zero. |
Vectors (1)
In 0.9.25.21–0.9.25.23
Command 112 on events, sent by the server, reliable.
A client ignores the whole message where killer is zero; a killer it does not hold brings it down. Each entry’s size after source follows from event alone.
| Field | Type | Present when | What it is |
|---|---|---|---|
| killer | u32 | The unit credited with the death. A client ignores the whole message where this is zero, and fails where it does not hold this unit. | |
| sourceType | u32 | What sort of source the killer was. A client keeps only the low 4 bits, signed, and acts on them only where it holds killer. | |
| blobLength | u32 | How many bytes the entries below take together. A client reads exactly that many; zero, or a value above 2147483647, carries no entries. A client reads it as signed: from 2147483648 up it reads nothing more. | |
| entryCount | u32 | How many entries follow. Read as signed: from 2147483648 up it parses no entries. | |
| entries | count in entryCount × record | What happened to the unit before it died, packed one after another. | |
| entries[].time | f32 | When it happened, in match seconds. | |
| entries[].count | u16 | How many times. | |
| entries[].event | u8 | Which event, from 0 to 70, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought, 66 surrenderCountdown, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo. | |
| entries[].source | u32 | The unit that did it. | |
| entries[].target | u32 | The unit it was done to. A client fails where it holds the source but not this unit. | |
| entries[].damage | record | event = 10 or 11 | How much harm, and from what. |
| entries[].damage.physical | f32 | Physical damage. | |
| entries[].damage.magical | f32 | Magical damage. | |
| entries[].damage.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| entries[].damage.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| entries[].damage.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| entries[].damage.parentCaster | u32 | Unused; a client reads nothing here. | |
| entries[].damage.parent | 4-byte bits | Where the spell or effect came from. | |
| entries[].damage.parent.source | bit 0 to 3 | What sort of source the parent spell or effect is, numbered as sourceKind is. | |
| entries[].damage.parent.side | bit 4 to 7 | What it means is not recorded for this range; a server writes zero. | |
| entries[].damage.parent.category | bit 8 to 11 | A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too. | |
| entries[].damage.parent.spellLevel | bit 12 to 14 | The rank of the spell, as shown. | |
| entries[].damage.parent.unused | bit 15 to 31 | Unused; a server writes zero. | |
| entries[].spent | u32 | event = 18 | How much gold, as shown. |
| entries[].value | u32 | event = 20 or 62 | What it carries is not recorded for this range; a client does not show it. |
| entries[].critical | f32 | event = 21 | The critical strike’s damage, as shown. |
| entries[].spree | u32 | event = 39 | How many kills in a row, as shown. |
| entries[].earned | record | event = 19 | Gold earned. |
| entries[].earned.gold | f32 | How much gold, as shown. | |
| entries[].heal | record | event = 36 or 37 | How much health, and from what. |
| entries[].heal.amount | f32 | How much health, as shown. | |
| entries[].heal.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| entries[].heal.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| entries[].heal.spellLevel | u32 | The level of the spell it came from. | |
| entries[].heal.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| entries[].heal.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| entries[].heal.unused | u32 | Unused; a client reads nothing here. | |
| entries[].heal.unusedToo | u32 | Unused; a client reads nothing here. | |
| entries[].effect | record | event = 38 | The effect, and where it came from. |
| entries[].effect.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| entries[].effect.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| entries[].effect.spellLevel | u32 | The level of the spell it came from. | |
| entries[].effect.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| entries[].effect.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| entries[].effect.unused | u32 | Unused; a client reads nothing here. | |
| entries[].effect.unusedToo | u32 | Unused; a client reads nothing here. | |
| entries[].assist | record | event = 53 | What one unit did toward a death. |
| entries[].assist.lastHit | f32 | When it last dealt damage, in match seconds. | |
| entries[].assist.physical | f32 | Physical damage it dealt. | |
| entries[].assist.magical | f32 | Magical damage it dealt. | |
| entries[].assist.share | f32 | What it carries is not recorded for this range; a server writes zero. | |
| entries[].assist.gold | f32 | What it carries is not recorded for this range; a server writes zero. | |
| entries[].assist.credited | u32 | What it carries is not recorded for this range; a server writes zero. | |
| entries[].kill | record | event = 0 | Nothing a client shows; the unit before it names the killer. |
| entries[].kill.unused | f32 | A client reads nothing here, and writes zero where it raises the event itself. A server writes zero. |
Vectors (1)
In 0.9.25.24–1.0.0.24
Command 112 on events, sent by the server, reliable.
A client ignores the whole message where killer is zero; a killer it does not hold brings it down. Each entry’s size after source follows from event alone.
| Field | Type | Present when | What it is |
|---|---|---|---|
| killer | u32 | The unit credited with the death. A client ignores the whole message where this is zero, and fails where it does not hold this unit. | |
| sourceType | u32 | What sort of source the killer was. A client keeps only the low 4 bits, signed, and acts on them only where it holds killer. | |
| blobLength | u32 | How many bytes the entries below take together. A client reads exactly that many; zero, or a value above 2147483647, carries no entries. A client reads it as signed: from 2147483648 up it reads nothing more. | |
| entryCount | u32 | How many entries follow. Read as signed: from 2147483648 up it parses no entries. | |
| entries | count in entryCount × record | What happened to the unit before it died, packed one after another. | |
| entries[].time | f32 | When it happened, in match seconds. | |
| entries[].count | u16 | How many times. | |
| entries[].event | u8 | Which event, from 0 to 73, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought, 66 surrenderCountdown, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo. | |
| entries[].source | u32 | The unit that did it. | |
| entries[].target | u32 | The unit it was done to. A client fails where it holds the source but not this unit. | |
| entries[].damage | record | event = 10 or 11 | How much harm, and from what. |
| entries[].damage.physical | f32 | Physical damage. | |
| entries[].damage.magical | f32 | Magical damage. | |
| entries[].damage.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| entries[].damage.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| entries[].damage.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| entries[].damage.parentCaster | u32 | Unused; a client reads nothing here. | |
| entries[].damage.parent | 4-byte bits | Where the spell or effect came from. | |
| entries[].damage.parent.source | bit 0 to 3 | What sort of source the parent spell or effect is, numbered as sourceKind is. | |
| entries[].damage.parent.side | bit 4 to 7 | What it means is not recorded for this range; a server writes zero. | |
| entries[].damage.parent.category | bit 8 to 11 | A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too. | |
| entries[].damage.parent.spellLevel | bit 12 to 14 | The rank of the spell, as shown. | |
| entries[].damage.parent.unused | bit 15 to 31 | Unused; a server writes zero. | |
| entries[].spent | u32 | event = 18 | How much gold, as shown. |
| entries[].value | u32 | event = 20 or 62 | What it carries is not recorded for this range; a client does not show it. |
| entries[].critical | f32 | event = 21 | The critical strike’s damage, as shown. |
| entries[].spree | u32 | event = 39 | How many kills in a row, as shown. |
| entries[].earned | record | event = 19 | Gold earned. |
| entries[].earned.gold | f32 | How much gold, as shown. | |
| entries[].heal | record | event = 36 or 37 | How much health, and from what. |
| entries[].heal.amount | f32 | How much health, as shown. | |
| entries[].heal.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| entries[].heal.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| entries[].heal.spellLevel | u32 | The level of the spell it came from. | |
| entries[].heal.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| entries[].heal.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| entries[].heal.unused | u32 | Unused; a client reads nothing here. | |
| entries[].heal.unusedToo | u32 | Unused; a client reads nothing here. | |
| entries[].effect | record | event = 38 | The effect, and where it came from. |
| entries[].effect.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| entries[].effect.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| entries[].effect.spellLevel | u32 | The level of the spell it came from. | |
| entries[].effect.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| entries[].effect.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| entries[].effect.unused | u32 | Unused; a client reads nothing here. | |
| entries[].effect.unusedToo | u32 | Unused; a client reads nothing here. | |
| entries[].assist | record | event = 53 | What one unit did toward a death. |
| entries[].assist.lastHit | f32 | When it last dealt damage, in match seconds. | |
| entries[].assist.physical | f32 | Physical damage it dealt. | |
| entries[].assist.magical | f32 | Magical damage it dealt. | |
| entries[].assist.share | f32 | What it carries is not recorded for this range; a server writes zero. | |
| entries[].assist.gold | f32 | What it carries is not recorded for this range; a server writes zero. | |
| entries[].assist.credited | u32 | What it carries is not recorded for this range; a server writes zero. | |
| entries[].kill | record | event = 0 | Nothing a client shows; the unit before it names the killer. |
| entries[].kill.unused | f32 | A client reads nothing here, and writes zero where it raises the event itself. A server writes zero. |
Vectors (1)
InhibitorState
What a server sends to change the state of an inhibitor, and say how long the new state lasts. The header names the unit this is about.
In 0.8.13.26–0.9.22.13
Command 69 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| state | u32 | What state the inhibitor takes. Any other value becomes the inhibitor’s state and changes nothing shown; a later 0 or 1 still applies. A state equal to the one held changes nothing but the duration. Values: 0 down, 1 restored. |
| duration | u32 | How long the state lasts, in seconds. A client stores it whatever state the message holds. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 65 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| state | u32 | What state the inhibitor takes. A client ignores any other value. Values: 0 down, 1 restored. |
| duration | i32 | How long the state lasts, in whole seconds. |
Vectors (1)
Revived
What a server sends to put a champion back on the field. The header names the unit this is about.
In 0.8.13.26–0.9.22.13
Command 74 on events, sent by the server, reliable.
A client brings the champion back as Respawned does, at the nearest open ground to where it already stands, first ending its death where it is still dead.
| Field | Type | What it is |
|---|---|---|
| atX | f32 | A client reads nothing here. |
| atY | f32 | A client reads nothing here. |
| atZ | f32 | A client reads nothing here. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 71 on events, sent by the server, reliable.
A client returns the champion where it already stands.
| Field | Type | What it is |
|---|---|---|
| atX | f32 | A client reads nothing here. |
| atY | f32 | A client reads nothing here. |
| atZ | f32 | A client reads nothing here. |
Respawned
What a server sends to bring a dead champion back at a place. The header names the champion. A client keeps the champion’s level, experience, gold, maxima and spell ranks, and plays the coming back.
In 0.8.13.26–0.9.22.13
Command 75 on events, sent by the server, reliable.
A client returns the champion to the nearest open ground to where it already stands.
| Field | Type | What it is |
|---|---|---|
| x | f32 | A client reads nothing here. |
| y | f32 | A client reads nothing here. |
| z | f32 | A client reads nothing here. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 72 on events, sent by the server, reliable.
A client returns the champion where it already stands. The champion comes back with full health, and for its own champion a client moves the camera onto it where the player asked for that.
| Field | Type | What it is |
|---|---|---|
| x | f32 | A client reads nothing here. |
| y | f32 | A client reads nothing here. |
| z | f32 | A client reads nothing here. |
Spells
Casting, levelling spells, cooldowns, and the missiles casts send out.
Casting
A client asks to cast from one of its champion’s slots with CastSpell, at a
point or at a unit. A server answers with SpellCastAnswer, which says the unit
is casting and carries the whole casting: the spell, its level, its target, its
timings and the missile it will send. A client shows the cast from that answer;
CastSpell alone shows nothing. A server then sets how long until the slot is
ready with SpellCooldown, and, for a spell with uses, how many are left with
SpellCharges. A client reports a cooldown it sets by itself with
CooldownSet.
Which slots a client lets its player cast from at all is a value of the champion’s that replication carries.
In 0.8.13.26–0.9.25.35
A client still casts from a casting record whose length disagrees with its count of targets.
A spell held down before it is let go charges where the cast answer leaves its
flags clear. While it charges, a client sends SpellCharge with the cursor’s
position, and once more as the charge ends.
A server ends a spell’s aiming on a client with CancelTargeting, shows and
takes away a spell’s targeter on a client’s own champion with
SpellTargeterShown and SpellTargeterHidden, and sets which spells a unit
casts by itself with Autocast.
Levelling
A client asks to put a point into a spell with UpgradeSpell. A server answers
with SpellUpgraded, and a client shows the new level;
SpellLevel sets a level outright. The spell points a champion has to spend
are what LevelUp carries. A server can set how far each
spell can be raised, and at which champion levels, with SpellRankLimits.
A client spends the point as it sends UpgradeSpell. LevelUp states the
champion’s level and its points.
In 0.9.25.24–1.0.0.24
A command its player types sends
UpgradeSpellwithout checking anything.
What a slot holds
SpellInSlot puts a spell in a slot. SpellSlotChanged changes one thing about
a spell already there: how it is aimed, its name, its ranges, its icon, or the
units it is cast from. SpellTargetingChanged, SpellNameChanged,
SpellRangeChanged, SpellIconChanged and SpellOffsetTargetChanged each
change one of these alone, and SpellSlotChangedForOwner changes a slot as
SpellSlotChanged does, for the owner’s client alone. SpellToggled turns a spell on or off, SpellNumbers
fills in the numbers a client shows beside a unit’s spells, and
SpellCostChanged changes what a spell costs. A server can also draw rings
around its player’s cursor with CursorRings.
A marker has no slots. A server MUST NOT send SpellInSlot naming a marker: a
client fails on it, whatever the slot.
Missiles
A missile is named by its own id. MissileState says where one is and what it
is doing, with the casting that sent it; MissileLaunched says the missile a
swing or a cast prepared has left the unit. A server changes what a missile
flies at with MissileRetarget and how fast with MissileSpeed, says what it
struck with MissileHits, and is rid of it with DestroyMissile. A missile that
bounces from unit to unit does so with BounceMissile, and a server can
name in advance the units a chain missile will strike with ChainTargets.
MissileCourse sets where a missile starts and how fast it flies, and restarts
its flight. A client reports where a missile that flies straight is, and where
it is going, with MissileReport, which a server MAY ignore.
In 0.9.25.24–1.0.0.24
Only a missile that flies straight acts on
MissileHits.
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).
CastSpell
What a client sends to cast something from a slot, at a point or at a unit. The header names the sender’s champion.
In 0.8.13.26–0.9.22.13
Command 35 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| how | 1-byte bits | |
| how.summonerSpell | bit 0 | Set where the slot is a summoner spell’s. |
| how.slot | bit 1 to 7 | Which slot is being cast from, from 0 to 22. A client still sends a larger slot, its low seven bits only. |
| x | f32 | A point on the ground the cast is described by, along one axis, in world units. |
| y | f32 | The same point, in height, in world units: the height of the place aimed at. |
| z | f32 | The same point, along the other axis, in world units. |
| endX | f32 | The second point of what aims the spell; for a spell that takes no aim it is the caster’s own position, the same as the first. |
| endY | f32 | The second point, in height, in world units: the height of where the cast ends. |
| endZ | f32 | The second point, along the other axis, in world units. |
| target | u32 | The unit aimed at; for a spell that takes no aim, the caster itself, with its own position in both points. Zero only where no unit is aimed at. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 35 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| how | 1-byte bits | |
| how.summonerSpell | bit 0 | Set where the slot is a summoner spell’s. |
| how.slot | bit 1 to 7 | Which slot is being cast from, from 0 to 44. A client still sends a larger slot, its low seven bits only. |
| x | f32 | A point on the ground the cast is described by, along one axis, in world units. |
| y | f32 | The same point, in height, in world units: the height of the place aimed at. |
| z | f32 | The same point, along the other axis, in world units. |
| endX | f32 | The second point of what aims the spell; for a spell that takes no aim it is the caster’s own position, the same as the first. |
| endY | f32 | The second point, in height, in world units: the height of where the cast ends. |
| endZ | f32 | The second point, along the other axis, in world units. |
| target | u32 | The unit aimed at; for a spell that takes no aim, the caster itself, with its own position in both points. Zero only where no unit is aimed at. |
Vectors (1)
SpellCastAnswer
What a server sends to say a unit is casting a spell. The header names the unit casting, as the casting inside does.
In every range of this book
Command 36 on events, sent by the server, reliable.
There is no byte for ending a charge and no sync id: the casting follows the header at once.
| Field | Type | What it is |
|---|---|---|
| cast | SpellCast | The casting. |
SpellCooldown
What a server sends to set how long until one of a unit’s spells is ready. The header names the unit this is about.
In 0.8.13.26–0.9.22.13
Command 33 on events, sent by the server, reliable.
It carries no whole cooldown to show the time left against.
| Field | Type | What it is |
|---|---|---|
| unread | bytes, 5 | A client reads nothing here. A server writes zero. |
| which | 1-byte bits | |
| which.slot | bit 0 to 6 | Which slot. |
| which.summonerSpell | bit 7 | Set where the slot counts among the summoner slots, so that 0 and 1 name those two. |
| timeLeft | f32 | How long is left, in seconds. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 33 on events, sent by the server, reliable.
It carries no whole cooldown to show the time left against.
| Field | Type | What it is |
|---|---|---|
| which | 1-byte bits | |
| which.slot | bit 0 to 6 | Which slot. |
| which.summonerSpell | bit 7 | Set where the slot counts among the summoner slots, so that 0 and 1 name those two. A client fails where it is set for a unit that is not a champion. |
| timeLeft | f32 | How long is left, in seconds. |
CooldownSet
What a client sends where a script of its own sets a spell slot’s cooldown. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 33 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| token | u32 | Names this report: its low 24 bits count up by one with each numbered request the client sends, of any kind, and its high 8 bits hold the byte below. |
| clientByte | u8 | A byte of the client’s own, as in token. |
| which | 1-byte bits | |
| which.slot | bit 0 to 6 | Which slot, 0 to 22. |
| which.summonerSpell | bit 7 | Set where a script names the unit’s second set of spells. |
| cooldown | f32 | The cooldown set, in seconds. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 33 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| which | 1-byte bits | |
| which.slot | bit 0 to 6 | Which slot. For a slot outside the unit’s range a client sends 0. |
| which.summonerSpell | bit 7 | Set where the slot is one from 4 to 40; slot still carries that slot’s own number. |
| cooldown | f32 | The cooldown set, in seconds. |
Autocast
What a server sends to set which spells a unit casts by itself. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 40 on events, sent by the server, reliable.
It names one slot: there is no slot for a critical strike.
| Field | Type | What it is |
|---|---|---|
| slot | i8 | The slot cast by itself, from -1 to 22. A client takes a value outside that range as it stands. What -1 does is not recorded. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 40 on events, sent by the server, reliable.
It names one slot: there is no slot for a critical strike.
| Field | Type | What it is |
|---|---|---|
| slot | i8 | The slot cast by itself, from -1 to 44. A client takes a value outside that range as it stands. What -1 does is not recorded. |
Vectors (1)
UpgradeSpell
What a client sends to put a point into a spell. The header names the sender’s champion.
In every range of this book
Command 18 on requests, sent by the client, reliable.
A client takes the point off its own count before it sends this. There is no evolution point.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which slot is being raised: 0 to 3, for the champion’s own spells, though a client does not hold itself to that range. |
SpellUpgraded
What a server sends to confirm a unit’s spell went up a level. The header names the unit this is about.
In every range of this book
Command 19 on clock, sent by the server, reliable.
A client handles it the same on every channel: it sets the slot’s level and the points left. It does this only for a champion, and nothing for any other unit.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which slot. |
| level | u8 | The level the spell now stands at. A client takes any level above 5 as 5. |
| pointsLeft | u8 | How many spell points are left unspent. |
SpellTargetingChanged
What a server sends to change how a spell already in a unit’s slot is aimed. The header names the unit this is about.
In 0.9.22.14–0.9.25.35
Command 133 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 champion’s own spells count from 0. |
| which.summonerSlots | bit 7 | Set where the slot counts among the summoner slots, so that 0 and 1 name those two. |
| targeting | u8 | How the spell is aimed, 0 to 6. A client fails for any larger value; no value asks for the spell’s own default. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 132 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 champion’s own spells count from 0. |
| which.summonerSlots | bit 7 | Set where the slot counts among the summoner slots, so that 0 and 1 name those two. A client fails where it is set for a unit that is not a champion. |
| targeting | u8 | How the spell is aimed, 0 to 6. For a larger value a client still writes it onto the slot but builds no aiming for it, which has no defined effect; no value asks for the spell’s own default. |
SpellNameChanged
What a server sends to put another spell into a slot of a unit’s that already holds one. The header names the unit this is about.
In 0.9.25.36–1.0.0.24
Command 172 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 champion’s own spells count from 0. |
| which.summonerSlots | bit 7 | Set where the slot counts among the summoner slots, so that 0 and 1 name those two. A client fails where it is set for a unit that is not a champion. |
| name | text, ended by a zero byte | The name the client loads the spell under, ended by a zero byte. A client shows the named spell’s icon in the slot, and treats a name it has no spell for as an error. |
SpellNumbers
What a server sends to fill in the numbers a client shows beside a unit’s spells. The header names no object: a server writes zero.
In 0.9.25.21–0.9.25.35
Command 168 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| entryCount | u16 | How many sets of numbers follow. A client reads every set it names. |
| entries | count in entryCount × record | The sets themselves. |
| entries[].unit | u32 | The unit whose spell this is. |
| entries[].slot | u8 | Which of the unit’s spell slots. A client fails where the unit has no such slot. |
| entries[].values | 3 × f32 | The numbers themselves, one place each. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 166 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| entryCount | u16 | How many sets of numbers follow. A client reads every set it names. |
| entries | count in entryCount × record | The sets themselves. |
| entries[].unit | u32 | The unit whose spell this is. |
| entries[].slot | u8 | Which slot. |
| entries[].values | 3 × f32 | The numbers themselves, one place each. |
Vectors (1)
MissileState
What a server sends to say where a missile is and what it is doing.
In 0.8.13.26–0.9.22.13
Command 67 on events, sent by the server, reliable.
The casting names the caster; the header need not. Where the header names a missile the client already holds, that missile moves to atX to atZ as well. A client sets the missile at atX to atZ, finite or not.
| Field | Type | What it is |
|---|---|---|
| atX | f32 | Where the missile is, along one ground axis, in world units. |
| atY | f32 | Where the missile is, in height, in world units. |
| atZ | f32 | Where the missile is, along the other ground axis, in world units. |
| cast | SpellCast | The casting that threw it. |
Vectors (1)
In 0.9.22.14–0.9.22.15
Command 63 on events, sent by the server, reliable.
A client sets every missile at atX to atZ, and reads the rest of the prefix for a line missile alone. The header names the unit casting, as the casting inside does.
| Field | Type | What it is |
|---|---|---|
| atX | f32 | Where the missile is, along one ground axis, in world units. |
| atY | f32 | Where the missile is, in height, in world units. |
| atZ | f32 | Where the missile is, along the other ground axis, in world units. |
| keptX | f32 | A value along one ground axis that a line missile keeps and reports back in MissileReport. Any other missile reads nothing here. |
| keptY | f32 | The same, in height. |
| keptZ | f32 | The same, along the other ground axis. |
| directionX | f32 | The way a line missile travels, along one ground axis: the client scales it by the missile’s speed and adds it to the position. Any other missile reads nothing here. |
| directionY | f32 | The same, in height. |
| directionZ | f32 | The same, along the other ground axis. |
| how | 1-byte bits | |
| how.flag | bit 0 | Changes how a line missile is set up; any other missile reads nothing here. |
| how.unused | bit 1 to 7 | Unused; a server writes zero. |
| cast | SpellCast | The casting that threw it. |
Vectors (1)
In 0.9.22.16–1.0.0.24
Command 63 on events, sent by the server, reliable.
A client reads neither a speed nor a part of the missile’s life spent. Neither the ground-height rule for endY nor a trail moved on by an age is confirmed. A client places the casting’s second unit, where it holds that unit, where the thrower stood rather than with the casting unit. The header names the unit casting, as the casting inside does.
| Field | Type | What it is |
|---|---|---|
| atX | f32 | Where the missile is, along one ground axis, in world units. |
| atY | f32 | Where the missile is, in height, in world units. |
| atZ | f32 | Where the missile is, along the other ground axis, in world units. |
| casterAtX | f32 | Where the unit that threw it stood when it left, along one ground axis, in world units. |
| casterAtY | f32 | Where the unit that threw it stood when it left, in height, in world units. |
| casterAtZ | f32 | Where the unit that threw it stood when it left, along the other ground axis, in world units. |
| facingX | f32 | Which way the missile points, along one ground axis. |
| facingY | f32 | Which way the missile points, in height. |
| facingZ | f32 | Which way the missile points, along the other ground axis. |
| velocityX | f32 | How fast the missile travels, along one ground axis, in world units a second. |
| velocityY | f32 | How fast the missile travels, in height, in world units a second. |
| velocityZ | f32 | How fast the missile travels, along the other ground axis, in world units a second. |
| endX | f32 | Where the missile is bound for, along one ground axis, in world units. |
| endY | f32 | Where the missile is bound for, in height, in world units. |
| endZ | f32 | Where the missile is bound for, along the other ground axis, in world units. |
| unitAtX | f32 | Where to place the casting unit, along one ground axis, in world units, unless the casting itself places it. |
| unitAtY | f32 | Its height, in world units. |
| unitAtZ | f32 | Where to place the casting unit, along the other ground axis, in world units. |
| how | 1-byte bits | |
| how.bounced | bit 0 | Set where the missile has bounced. A client tests the whole byte, so any set bit counts. For a missile it already holds that flies in a straight line, a client then starts the line again from the caster’s position, raised by the missile’s height above the ground, aiming it from where the missile now is. |
| how.unused | bit 1 to 7 | Unused; a server writes zero. |
| cast | SpellCast | The casting that threw it. |
MissileHits
What a server sends to say which units a missile struck. The header names the missile.
In 0.9.22.16–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.16–0.9.25.35 | 163 |
| 0.9.25.36–1.0.0.24 | 161 |
| Field | Type | What it is |
|---|---|---|
| count | u16 | How many units follow. A client reads it as signed, so a count of zero or above 32767 carries no units, and a server sends at most 32767. |
| targets | count in count × u32 | The units struck, in order. A client still takes a unit it does not know, with nothing shown on it, and nothing after the hit that destroys the missile shows. |
Vectors (1)
DestroyMissile
What a server sends to be rid of a missile a client is drawing. The header names the missile.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 105 |
| 0.9.22.14–1.0.0.24 | 102 |
No body.
Vectors (1)
ChainTargets
What a server sends to name the units a chain missile will strike in turn. The header names the missile.
In 0.8.13.26–0.9.22.13
Command 106 on events, sent by the server, reliable.
Where the client holds the caster, the caster takes the list, whether or not the client already holds the missile.
| Field | Type | What it is |
|---|---|---|
| count | i32 | How many of the slots are used, 0 to 32; 0 or less leaves the targets the client holds as they are. A client sets no bound, and more than 32 has no defined effect. |
| caster | u32 | The unit casting the missile. Where a client does not hold it, the client starts no missile, though a missile it already holds under the header’s name still takes the targets. |
| targets | 32 × u32 | Always 32 slots; those past count have no effect. |
Vectors (1)
In 0.9.22.14–0.9.25.35
Command 103 on events, sent by the server, reliable.
Where the client already holds the missile, the missile takes the list, and so does the caster’s current cast; otherwise the list waits for the caster’s next chain missile.
| Field | Type | What it is |
|---|---|---|
| count | i32 | How many of the slots are used, 0 to 32; 0 or less leaves the targets the client holds as they are. A client sets no bound, and more than 32 has no defined effect. |
| caster | u32 | The unit casting the missile. Where a client does not hold it, the client starts no missile, though a missile it already holds under the header’s name still takes the targets. |
| targets | 32 × u32 | Always 32 slots; those past count have no effect. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 103 on events, sent by the server, reliable.
Where the client already holds the missile, the missile takes the list; otherwise the list waits for the caster’s next chain missile.
| Field | Type | What it is |
|---|---|---|
| count | i32 | How many of the slots are used, 0 to 32; 0 clears every target the client holds, and a count below zero names no targets and clears nothing. A count above 32 has no defined effect. |
| caster | u32 | The unit casting the missile. Where a client does not hold it, the client starts no missile, though a missile it already holds under the header’s name still takes the targets. |
| targets | 32 × u32 | Always 32 slots; those past count have no effect. A slot naming a unit the client does not know is left empty. |
MissileReport
What a client sends to report where a missile that flies straight is and where it is going. A server need do nothing with it. The header names the missile.
In 0.9.22.14–0.9.22.15
Command 63 on requests, sent by the client, reliable.
A client sends it always 173 bytes long, header included. A line missile writes every field; any other missile writes only atX to atZ and the cast, and leaves the rest unwritten.
| Field | Type | What it is |
|---|---|---|
| atX | f32 | Where the missile is, in world units, along one ground axis. |
| atY | f32 | Where the missile is, in world units, in height. |
| atZ | f32 | Where the missile is, in world units, along the other ground axis. |
| keptX | f32 | What the line missile keeps from MissileState’s keptX. |
| keptY | f32 | The same, in height. |
| keptZ | f32 | The same, along the other ground axis. |
| directionX | f32 | The way the line missile travels, along one ground axis. |
| directionY | f32 | The same, in height. |
| directionZ | f32 | The same, along the other ground axis. |
| flag | u8 | The line missile’s flag, as MissileState carried it. |
| cast | bytes, 128 | A description of the cast the missile belongs to, with whatever stood in memory after it up to the field’s end. |
Vectors (1)
In 0.9.22.16–1.0.0.24
Command 63 on requests, sent by the client, reliable.
A client also sends it 209 bytes long, header included, from a missile of its own. That form writes only atX to atZ, velocityX to velocityZ and the cast, and leaves every other byte unwritten.
| Field | Type | What it is |
|---|---|---|
| atX | f32 | Where the missile is, in world units, along one ground axis. |
| atY | f32 | Where the missile is, in world units, in height. |
| atZ | f32 | Where the missile is, in world units, along the other ground axis. |
| unknownAX | f32 | What this holds is not recorded. |
| unknownAY | f32 | What this holds is not recorded. |
| unknownAZ | f32 | What this holds is not recorded. |
| travelX | f32 | Its end less its start, in world units, along one ground axis. |
| travelY | f32 | Its end less its start, in world units, in height. |
| travelZ | f32 | Its end less its start, in world units, along the other ground axis. |
| velocityX | f32 | How fast it travels, in world units a second, along one ground axis. |
| velocityY | f32 | How fast it travels, in world units a second, in height. |
| velocityZ | f32 | How fast it travels, in world units a second, along the other ground axis. |
| endX | f32 | Where it ends, in world units, along one ground axis. |
| endY | f32 | Where it ends, in world units, in height. |
| endZ | f32 | Where it ends, in world units, along the other ground axis. |
| targetX | f32 | Where its target is, or the point it aims at, in world units, along one ground axis. |
| targetY | f32 | Where its target is, or the point it aims at, in world units, in height. |
| targetZ | f32 | Where its target is, or the point it aims at, in world units, along the other ground axis. |
| flag | u8 | Zero or one; what it means is not recorded. |
| cast | bytes, sized by remaining | A description of the cast the missile belongs to, at most 512 bytes. |
Effects and looks
The lasting effects units carry, the particles a client draws, and how units look and move on screen. None of this changes what a unit can do; that is replication’s to say.
Lasting effects
A lasting effect sits in one of a unit’s effect slots and shows on its icon row.
A server puts one on with EffectAdded, replaces the one in a slot with
EffectReplaced, restates how many are stacked with EffectCount, and takes it
off with EffectRemoved. The unit carrying an effect can differ from the unit
that cast it. A server can do each of these for several units at once
(EffectAddedGroup, EffectReplacedGroup, EffectCountGroup,
EffectRemovedGroup), and set the number an effect shows on its icon with
EffectCounter.
Particles
ParticlesCreated starts a client drawing particles, and KillParticle stops
one. A server can also pause or resume a named group of emitters with
EmitterPause, and drive a value of a unit’s lasting particles from something
that changes, such as a capture point or the unit’s resource, with
ParticleSource.
In 0.8.13.26–0.9.22.13
ParticlesCreatedstarts one particle, named by the message’s own id.
In 0.9.25.24–1.0.0.24
ParticlesCreatedstarts sets of particles, each named by its own id.
Looks and animation
A server lays a new look over a unit’s own with AppearancePushed; looks
stack, the newest showing, and AppearancePopped and AppearanceCleared take
them away. AnimationOverrides has a unit play one set of movements wherever it
would have played another.
AppearancePopped takes away every look laid over the unit’s own, not only
the newest.
A server can also:
- play, stop, pause and advance a unit’s animations (
PlayAnimation,StopAnimation,PauseAnimation,AnimationAdvanced); - fade a unit or a side’s minions (
FadeTo,FadeRemoved,FadeMinions); - set how each nexus looks (
NexusIdle,NexusSkin); - tint a side’s screens (
ScreenTint); - change the voice a unit speaks with (
VoiceOverride).
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).
EffectAdded
What a server sends to put a lasting effect on a unit. The header names the unit carrying the effect, which can differ from the caster named inside.
In 0.8.13.26–0.9.22.13
Command 37 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which of the unit’s effect slots it sits in. A client fails where it is above 31. |
| kind | u8 | What sort of effect it is. |
| count | u8 | How many of it are stacked there. |
| effect | u32 | Which effect, by the number its name gives, as Objects and identifiers works it out. A client adds nothing for an effect it does not know. |
| lasts | f32 | How long it runs in total, in seconds. |
| caster | u32 | The unit that put it there. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 37 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which of the unit’s effect slots it sits in. A client fails where it is above 31. |
| kind | u8 | What sort of effect it is. |
| count | u8 | How many of it are stacked there. |
| effect | u32 | Which effect, by the number its name gives, as Objects and identifiers works it out. A server never sends zero. A client adds nothing for an effect it does not know. |
| runningFor | f32 | How long it has already run, in seconds. |
| lasts | f32 | How long it runs in total, in seconds. |
| caster | u32 | The unit that put it there. |
EffectReplaced
What a server sends about a lasting effect in a slot that already holds one. The header names the unit carrying the effect, which can differ from the caster named inside.
In 0.8.13.26–0.9.25.20
Command 38 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which of the unit’s effect slots. A client fails where it is above 31. |
| lasts | f32 | How long it runs from now, in seconds. A client applies a value below zero as given. |
| caster | u32 | The unit that put it there. Where the client holds no such unit, it leaves the effect with no caster. |
Vectors (1)
In 0.9.25.21–1.0.0.24
Command 38 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which of the unit’s effect slots. A client fails where it is above 31. |
| runningFor | f32 | How long the effect has already run, in seconds. |
| lasts | f32 | How long it runs in total, in seconds. A client applies a value below zero as given; a server sends zero or more. |
| caster | u32 | The unit that put it there. Where the client holds no such unit, it leaves the effect with no caster. |
EffectCount
What a server sends to restate how many of a lasting effect are stacked on a unit. The header names the unit this is about.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 83 |
| 0.9.22.14–1.0.0.24 | 80 |
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which slot. A client fails where it is above 31. |
| count | u8 | How many are stacked there now. |
| timeLeft | f32 | How long it has left to run, in seconds. |
| caster | u32 | The unit that put it there. Where the client holds no such unit, it leaves the effect with no caster. |
Vectors (1)
EffectRemoved
What a server sends to take a lasting effect off a unit. The header names the unit this is about.
In every range of this book
Command 39 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which slot it sat in. A client fails where it is above 31. |
| effect | u32 | Which effect, by the number its name gives, as Objects and identifiers works it out. |
ParticlesCreated
What a server sends to start drawing sets of particles. The header names no object: it carries zero.
In 0.8.13.26–0.9.22.13
Command 21 on events, sent by the server, reliable.
One particle, made from its effect’s name.
| Field | Type | What it is |
|---|---|---|
| particle | u32 | The name this particle answers to, so later messages can name it. |
| flags | u16 | Bit 3 set hangs the particle off neither boundTo nor target. Bit 2 set, where boundTo is given, has the particle take its scale from boundTo. Bit 0 sets a further option of the particle’s. A server writes the others zero. |
| unknown | bytes, 12 | Passed to the particle as it is made; what it holds is not recorded. |
| boundTo | u32 | The unit the particle hangs off, or zero. |
| effect | text, 64 bytes | The effect’s name. A client fails where it is empty, and still makes a particle for a name it does not know. Written out in full and padded with zero bytes to the width above. |
| unknownB | u32 | The point on boundTo the particle hangs from. |
| atX | f32 | Where it starts, along one ground axis, in world units; used only where target is zero. |
| atY | f32 | Its height. |
| atZ | f32 | Along the other ground axis. |
| target | u32 | The unit the particle is aimed at, or zero. |
| unknownC | u32 | The point on target the particle is aimed at. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 21 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| groupCount | u8 | How many sets follow. |
| groups | count in groupCount × ParticleGroup | The sets themselves. |
Vectors (1)
KillParticle
What a server sends to stop a particle a client is drawing.
In every range of this book
Command 22 on events, sent by the server, reliable.
The particle field alone names the particle; the header can carry zero.
| Field | Type | What it is |
|---|---|---|
| particle | u32 | The particle to stop. |
AppearancePushed
What a server sends to lay a new look over a unit’s own. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 93 on events, sent by the server, reliable.
No skin is carried; the look wears the unit’s own skin. Looks stack, the newest shows, and AppearancePopped takes away the one its entry names.
| Field | Type | What it is |
|---|---|---|
| entry | u32 | Names this look, so that AppearancePopped can name it. |
| asset | text, ended by a zero byte | The name the client loads it under, ended by a zero byte. |
Vectors (1)
In 0.9.22.14–0.9.25.35
Command 90 on events, sent by the server, reliable.
No skin is carried; while any pushed look is in force, the newest shows with skin 0, and nothing changes where its name is that of the look already shown. A client first stops a basic attack the unit is making; looks stack, and AppearancePopped takes away the one its entry names.
| Field | Type | What it is |
|---|---|---|
| entry | u32 | Names this look, so that AppearancePopped can name it. |
| asset | text, ended by a zero byte | The name the client loads it under, ended by a zero byte. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 90 on events, sent by the server, reliable.
No skin is carried; the look wears the unit’s own skin. A client first stops a basic attack the unit is making; looks stack, the newest shows, and AppearancePopped takes away the one its entry names.
| Field | Type | What it is |
|---|---|---|
| entry | u32 | Names this look, so that AppearancePopped can name it. |
| overrideSpells | u8 | Set where the unit’s spells change with it. Any nonzero value sets it. |
| asset | text, ended by a zero byte | The name the client loads it under, ended by a zero byte. |
AppearancePopped
What a server sends to take a look AppearancePushed laid over a unit away. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 94 on events, sent by the server, reliable.
A client also takes away every look laid over the unit on this command, so the unit is left with no look laid over it.
| Field | Type | What it is |
|---|---|---|
| entry | u32 | The look, by the name AppearancePushed gave it. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 91 on events, sent by the server, reliable.
A client also takes away every look laid over the unit on this command, and does so before it looks for the one entry names, so the unit is left with no look laid over it.
| Field | Type | What it is |
|---|---|---|
| entry | u32 | The look, by the name AppearancePushed gave it. |
Vectors (1)
PlayAnimation
What a server sends to make a unit play an animation. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 9 on events, sent by the server, reliable.
Every play blends in over a blend time of 0.2 seconds. Without loop or holdLastFrame, an animation that ends is removed, except that where it was the unit’s only animation and the unit has an idle, a client fades back to the idle, looping. No start point is carried: the animation starts from its beginning.
| Field | Type | What it is |
|---|---|---|
| flags | 4-byte bits | How the animation plays, as a set of bits. |
| flags.unusedLow | bit 0 | Unused; a server writes zero. |
| flags.loop | bit 1 | Set to loop the animation: it starts over once it ends. |
| flags.holdLastFrame | bit 2 | Set to hold the last frame once the animation ends; it stops advancing there. Wins over loop. |
| flags.fadeOthers | bit 3 | Set to freeze the animations already playing and fade them to nothing over the blend time. They are not removed. |
| flags.freezeOthers | bit 4 | Set to freeze the animations already playing, fade them out over the blend time, then remove them. |
| flags.dropOthers | bit 5 | Set to remove the animations already playing at once, with no fade. |
| flags.unused | bit 6 to 31 | Unused; a server writes zero. |
| scaleTime | f32 | Where above zero, how many seconds the animation is stretched or squeezed to span; otherwise it plays at normal speed. |
| animation | text, ended by a zero byte | The animation’s name, ended by a zero byte. Nothing plays for a name the unit does not have. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 9 on events, sent by the server, reliable.
Every play blends in over a blend time of 0.2 seconds. Without loop or holdLastFrame, an animation that ends is removed, except that where it was the unit’s only animation and the unit has an idle, a client fades back to the idle, looping. No start point is carried: the animation starts from its beginning. A unit whose animation has been locked ignores the message.
| Field | Type | What it is |
|---|---|---|
| flags | 4-byte bits | How the animation plays, as a set of bits. |
| flags.unusedLow | bit 0 | Unused; a server writes zero. |
| flags.loop | bit 1 | Set to loop the animation: it starts over once it ends. |
| flags.holdLastFrame | bit 2 | Set to hold the last frame once the animation ends; it stops advancing there. Wins over loop. |
| flags.fadeOthers | bit 3 | Set to freeze the animations already playing and fade them to nothing over the blend time. They are not removed. |
| flags.freezeOthers | bit 4 | Set to freeze the animations already playing, fade them out over the blend time, then remove them. |
| flags.dropOthers | bit 5 | Set to remove the animations already playing at once, with no fade. |
| flags.locked | bit 6 | Set to lock the unit’s animation: once the animation plays, a client refuses every later animation played on the unit, unless the unit’s own character data opts out. |
| flags.fadeAtEnd | bit 7 | Only where loop is clear: set to start fading the animation out once its time left is at or below the blend time. |
| flags.unused | bit 8 to 31 | Unused; a server writes zero. |
| scaleTime | f32 | Where above zero, how many seconds the animation is stretched or squeezed to span; otherwise it plays at normal speed. |
| animation | text, ended by a zero byte | The animation’s name, ended by a zero byte. Nothing plays for a name the unit does not have. |
Vectors (1)
StopAnimation
What a server sends to stop an animation a unit is playing. The header names the unit.
In 0.8.13.26–0.9.22.13
Command 91 on events, sent by the server, reliable.
No name or time is carried, and the body has no effect: a client stops the same animation of the unit’s that an arriving cast stops.
| Field | Type | What it is |
|---|---|---|
| flags | 4-byte bits | A client reads nothing here. |
| flags.unusedLow | bit 0 to 5 | A client ignores these; a server sends zero. |
| flags.unlock | bit 6 | Unused; a server writes zero. |
| flags.unusedHigh | bit 7 to 31 | A client ignores these; a server sends zero. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 88 on events, sent by the server, reliable.
No name is carried. A client does nothing for a dead unit; otherwise it stops the animation the unit is playing, blending out over a fixed time, unless the unit’s animation lock stays held.
| Field | Type | What it is |
|---|---|---|
| flags | 4-byte bits | How it stops. |
| flags.unusedLow | bit 0 to 5 | A client ignores these; a server sends zero. |
| flags.unlock | bit 6 | Set to release the unit’s animation lock in every case. Clear releases it only where the unit’s own data allows; where the lock stays held, the animation does not stop. |
| flags.unusedHigh | bit 7 to 31 | A client ignores these; a server sends zero. |
FadeTo
What a server sends to fade a unit towards an opacity over time. The header names the unit.
In 0.9.22.14–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.14–0.9.25.35 | 137 |
| 0.9.25.36–1.0.0.24 | 136 |
| Field | Type | What it is |
|---|---|---|
| fade | i16 | Names this fade, so that FadeRemoved can name it. |
| time | f32 | How long the fade takes, in seconds. |
| target | f32 | The opacity it fades to, from 0 for unseen to 1 for solid. |
Vectors (1)
FadeRemoved
What a server sends to undo a fade on a unit. The header names the unit.
In 0.9.22.14–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.14–0.9.25.35 | 138 |
| 0.9.25.36–1.0.0.24 | 137 |
| Field | Type | What it is |
|---|---|---|
| fade | i16 | The fade, by the name FadeTo gave it. A client does nothing where no fade on the unit has that name. |
Vectors (1)
FadeMinions
What a server sends to fade one side’s minions. The header carries zero.
In 0.9.25.36–1.0.0.24
Command 174 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| side | u8 | Which side, or zero for both. |
| amount | f32 | The opacity they fade to, from 0 for unseen to 1 for solid. |
| time | f32 | How long the fade takes, in seconds. |
NexusIdle
What a server sends to put each nexus into its idle particles. The header carries zero.
NexusSkin
What a server sends to change how one side’s nexus looks. The header carries zero.
In 0.9.25.36–1.0.0.24
Command 169 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| side | u8 | Which side. |
| skin | u32 | Which look. |
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.
Loadout does nothing to the shop: a client fills its shop from its own data,
and takes the items it suggests from its champion’s own data.
In 0.8.13.26–0.9.22.13
An item’s own data says whether it can be bought.
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.
A client never asks to swap two slots: it has no SwapItems.
In 0.8.13.26–0.9.22.13
Opening the shop sends nothing either.
In 0.9.25.24–1.0.0.24
Opening the shop sends
TutorialShopOpened, in any match, except while the shop is locked.
A client asks to buy only where the item is one the match sells and priced within the champion’s gold.
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.
A client asks for an item a player holds only one of even where the player holds it already, and an item that can be used in the shop needs a slot as any other does.
In 0.8.13.26–0.9.22.13
For an item built from others, a client asks only where a slot is free or holds one of its parts, and where the champion’s gold covers what remains after the parts it holds.
In 0.9.25.24–1.0.0.24
A client asks only while the shop is not locked, with the champion dead or near a shop of its side.
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.
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 0.9.25.24–1.0.0.24
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 0.8.13.26–0.9.22.13
Command 86 on events, sent by the server, reliable.
A client shows the champion’s icon and sets its two summoner slots from summoners.
| Field | Type | What it is |
|---|---|---|
| runes | 8 × u32 | The runes set before the match. |
| 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, 400 bytes that a client keeps as one block. |
| level | u8 | The player’s account level. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 83 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.
| Field | Type | What it is |
|---|---|---|
| runes | 30 × u32 | The runes set before the match, thirty places. |
| 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, 400 bytes that a client keeps as one block. |
| level | u8 | The player’s account level. |
Vectors (1)
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 41 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| item | u32 | Which item, by the number the client knows it as. |
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 43 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which slot. |
| sell | u8 | A client sends 1. |
TutorialShopOpened
What a client sends as its player opens the shop. It carries nothing of its own. The header carries zero.
In 0.9.22.16–0.9.25.35
Command 150 on requests, sent by the client, reliable.
A client sends it each time the shop opens, on any map and in any mode. While input lock 16 holds, the shop does not open and it sends nothing.
No body.
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 148 on requests, sent by the client, reliable.
A client sends it every time its player opens the shop, in any game. Where a script of the client’s has locked the shop, the shop does not open and nothing is sent.
No body.
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 0.8.13.26–0.9.22.13
Command 42 on events, sent by the server, reliable.
There is no charges field: a client takes an item’s charges from the item’s own data. A server sends it to units nobody is buying for.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | The slot it went to, 0 to 14. A larger value than 14 has no defined effect. |
| item | u32 | Which item, by the number the client knows it as. For an item it does not know, a client empties the slot and still takes inSlot. |
| inSlot | u8 | How many of the item the slot holds now; a client applies zero as well. The slot’s charges come from the item’s own data. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 42 on events, sent by the server, reliable.
There is no charges field: a client takes an item’s charges from the item’s own data. A client applies it only to a champion’s item slots.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | The slot it went to, 0 to 36. A larger value than 36 has no defined effect. |
| item | u32 | Which item, by the number the client knows it as. For an item it does not know, a client empties the slot and still takes inSlot. |
| inSlot | u8 | How many of the item the slot holds now; a client applies zero as well. The slot’s charges come from the item’s own data. |
RemoveItemAnswer
What a server sends to confirm an item left a slot. The header names the unit this is about.
In 0.8.13.26–0.9.22.13
Command 44 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which slot, 0 to 14. A larger value than 14 has no defined effect. |
| left | u8 | How many are left in the slot; zero empties it, item and charges cleared. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 44 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| slot | u8 | Which slot, 0 to 36. A larger value than 36 has no defined effect. |
| left | u8 | How many are left in the slot; zero empties it, item and charges cleared. |
SwapItemsAnswer
What a server sends to confirm an item moved between slots. The header names the unit this is about.
In 0.8.13.26–0.9.22.13
Command 46 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| from | u8 | The slot the item left, 0 to 14. A client swaps the two slots named whatever their values, so a server keeps both within range. |
| to | u8 | The slot it went to, 0 to 14. A client swaps the two slots named whatever their values, so a server keeps both within range. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 46 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| from | u8 | The slot the item left, 0 to 36. A client swaps the two slots named whatever their values, so a server keeps both within range. |
| to | u8 | The slot it went to, 0 to 36. A client swaps the two slots named whatever their values, so a server keeps both within range. |
CloseShop
What a server sends to close a client’s shop. The header carries zero.
In 0.9.22.14–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.14–0.9.25.35 | 147 |
| 0.9.25.36–1.0.0.24 | 146 |
No body.
Vectors (1)
Objectives
The parts of a map players compete for besides each other: neutral camps, points a side can capture and a score, and the events a match tells its clients about.
Camps
A camp is a group of units that belong to no side. A server places a camp on the
map and says how it is drawn with CampMarker, opens it with CampOpened as
its monsters come, and marks it empty with CampCleared. The monsters
themselves are units (see Units). A server tells clients watching a
match when a camp is next due with CampTimer.
A client places a camp where the first of its monsters is created
(CreateNeutral).
Capture points and score
On a map won on score, a server binds each capture point to a unit with
CapturePointChanged, and TeamScore sets each side’s score.
Other map objectives
A server can name the unit holding the Ascension with AscendedUnit, and send
RespawnPoint about points a champion returns to life at.
Events
WorldEvent says something happened that the whole match is told about: the
match’s welcome and its first notices, minions coming out, an inhibitor or a
great monster falling, a player leaving. ClientEvent tells one client
something happened that concerns a unit. Each names a sort, from one table of
events, and the sort settles the rest of the message and what a client shows.
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).
WorldEvent
What a server sends to say something happened that the whole match is told about. What sort of thing is named first, and the sort settles what follows. The header names no object: it carries zero.
In 0.9.25.24–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.25.24–0.9.25.35 | 170 |
| 0.9.25.36–1.0.0.24 | 168 |
| Field | Type | Present when | What it is |
|---|---|---|---|
| event | u8 | Which event, from 0 to 73, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought, 66 surrenderCountdown, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo. | |
| source | u32 | The unit the thing is credited to, or zero where none is. | |
| subject | u32 | The unit the thing happened to, or zero where none is named; for a death, the unit that made the kill. | |
| damage | record | event = 10 or 11 | How much harm, and from what. |
| damage.physical | f32 | Physical damage. | |
| damage.magical | f32 | Magical damage. | |
| damage.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| damage.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| damage.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| damage.parentCaster | u32 | Unused; a client reads nothing here. | |
| damage.parent | 4-byte bits | Where the spell or effect came from. | |
| damage.parent.source | bit 0 to 3 | What sort of source the parent spell or effect is, numbered as sourceKind is. | |
| damage.parent.side | bit 4 to 7 | What it means is not recorded for this range; a server writes zero. | |
| damage.parent.category | bit 8 to 11 | A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too. | |
| damage.parent.spellLevel | bit 12 to 14 | The rank of the spell, as shown. | |
| damage.parent.unused | bit 15 to 31 | Unused; a server writes zero. | |
| spent | u32 | event = 18 | How much gold, as shown. |
| value | u32 | event = 20 or 62 | What it carries is not recorded for this range; a client does not show it. |
| critical | f32 | event = 21 | The critical strike’s damage, as shown. |
| spree | u32 | event = 39 | How many kills in a row, as shown. |
| earned | record | event = 19 | Gold earned. |
| earned.gold | f32 | How much gold, as shown. | |
| heal | record | event = 36 or 37 | How much health, and from what. |
| heal.amount | f32 | How much health, as shown. | |
| heal.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| heal.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| heal.spellLevel | u32 | The level of the spell it came from. | |
| heal.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| heal.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| heal.unused | u32 | Unused; a client reads nothing here. | |
| heal.unusedToo | u32 | Unused; a client reads nothing here. | |
| effect | record | event = 38 | The effect, and where it came from. |
| effect.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| effect.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| effect.spellLevel | u32 | The level of the spell it came from. | |
| effect.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| effect.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| effect.unused | u32 | Unused; a client reads nothing here. | |
| effect.unusedToo | u32 | Unused; a client reads nothing here. | |
| assist | record | event = 53 | What one unit did toward a death. |
| assist.lastHit | f32 | When it last dealt damage, in match seconds. | |
| assist.physical | f32 | Physical damage it dealt. | |
| assist.magical | f32 | Magical damage it dealt. | |
| assist.share | f32 | What it carries is not recorded for this range; a server writes zero. | |
| assist.gold | f32 | What it carries is not recorded for this range; a server writes zero. | |
| assist.credited | u32 | What it carries is not recorded for this range; a server writes zero. | |
| kill | record | event = 0 | Nothing a client shows; the unit before it names the killer. |
| kill.unused | f32 | A client reads nothing here, and writes zero where it raises the event itself. A server writes zero. |
Vectors (14)
buff-on-0-9-25-24, consumable-bought-on-0-9-25-24, critical-strike-on-0-9-25-24, damage-dealt-on-0-9-25-24, damage-taken-on-0-9-25-24, death-assist-on-0-9-25-24, died-on-0-9-25-24, gold-earned-on-0-9-25-24, gold-spent-on-0-9-25-24, heal-cast-on-0-9-25-24, heal-on-0-9-25-24, item-bought-on-0-9-25-24, killing-spree-on-0-9-25-24, one-on-0-9-25-24
ClientEvent
What a server sends to tell a client something happened. The sort is named first and settles what follows; unlike WorldEvent it carries no source apart from what the sort itself carries. The header names the unit the event is about.
In 0.8.13.26–0.9.22.13
Command 110 on events, sent by the server, reliable.
| Field | Type | Present when | What it is |
|---|---|---|---|
| event | u8 | Which event, from 0 to 54, and so which fields follow. A value above 54 has no defined effect. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit. | |
| subject | u32 | The unit the event is about; for a death, the unit that made the kill. | |
| damage | record | event = 10 or 11 | How much harm, and from what. |
| damage.physical | f32 | Physical damage. | |
| damage.magical | f32 | Magical damage. | |
| damage.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| damage.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| damage.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| damage.parentCaster | u32 | Unused; a client reads nothing here. | |
| damage.parent | 4-byte bits | Where the spell or effect came from. | |
| damage.parent.source | bit 0 to 3 | What sort of source the parent spell or effect is, numbered as sourceKind is. | |
| damage.parent.side | bit 4 to 7 | What it means is not recorded for this range; a server writes zero. | |
| damage.parent.category | bit 8 to 11 | A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too. | |
| damage.parent.spellLevel | bit 12 to 14 | The rank of the spell, as shown. | |
| damage.parent.unused | bit 15 to 31 | Unused; a server writes zero. | |
| spent | u32 | event = 18 | How much gold, as shown. |
| critical | f32 | event = 21 | The critical strike’s damage, as shown. |
| spree | u32 | event = 39 | How many kills in a row, as shown. |
| earned | record | event = 19 | Gold earned. |
| earned.gold | f32 | How much gold, as shown. | |
| heal | record | event = 36 or 37 | How much health, and from what. |
| heal.amount | f32 | How much health, as shown. | |
| heal.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| heal.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| heal.spellLevel | u32 | The level of the spell it came from. | |
| heal.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| heal.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| effect | record | event = 38 | The effect, and where it came from. |
| effect.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| effect.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| effect.spellLevel | u32 | The level of the spell it came from. | |
| effect.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| effect.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| assist | record | event = 53 | What one unit did toward a death. |
| assist.lastHit | f32 | When it last dealt damage, in match seconds. | |
| assist.physical | f32 | Physical damage it dealt. | |
| assist.magical | f32 | Magical damage it dealt. |
In 0.9.22.14–0.9.22.15
Command 108 on events, sent by the server, reliable.
| Field | Type | Present when | What it is |
|---|---|---|---|
| event | u8 | Which event, from 0 to 62, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought. | |
| subject | u32 | The unit the event is about; for a death, the unit that made the kill. | |
| damage | record | event = 10 or 11 | How much harm, and from what. |
| damage.physical | f32 | Physical damage. | |
| damage.magical | f32 | Magical damage. | |
| damage.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| damage.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| damage.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| damage.parentCaster | u32 | Unused; a client reads nothing here. | |
| damage.parent | 4-byte bits | Where the spell or effect came from. | |
| damage.parent.source | bit 0 to 3 | What sort of source the parent spell or effect is, numbered as sourceKind is. | |
| damage.parent.side | bit 4 to 7 | What it means is not recorded for this range; a server writes zero. | |
| damage.parent.category | bit 8 to 11 | A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too. | |
| damage.parent.spellLevel | bit 12 to 14 | The rank of the spell, as shown. | |
| damage.parent.unused | bit 15 to 31 | Unused; a server writes zero. | |
| spent | u32 | event = 18 | How much gold, as shown. |
| value | u32 | event = 20 | What it carries is not recorded for this range; a client does not show it. |
| critical | f32 | event = 21 | The critical strike’s damage, as shown. |
| spree | u32 | event = 39 | How many kills in a row, as shown. |
| earned | record | event = 19 | Gold earned. |
| earned.gold | f32 | How much gold, as shown. | |
| heal | record | event = 36 or 37 | How much health, and from what. |
| heal.amount | f32 | How much health, as shown. | |
| heal.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| heal.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| heal.spellLevel | u32 | The level of the spell it came from. | |
| heal.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| heal.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| heal.unused | u32 | Unused; a client reads nothing here. | |
| heal.unusedToo | u32 | Unused; a client reads nothing here. | |
| effect | record | event = 38 | The effect, and where it came from. |
| effect.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| effect.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| effect.spellLevel | u32 | The level of the spell it came from. | |
| effect.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| effect.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| effect.unused | u32 | Unused; a client reads nothing here. | |
| effect.unusedToo | u32 | Unused; a client reads nothing here. | |
| assist | record | event = 53 | What one unit did toward a death. |
| assist.lastHit | f32 | When it last dealt damage, in match seconds. | |
| assist.physical | f32 | Physical damage it dealt. | |
| assist.magical | f32 | Magical damage it dealt. | |
| assist.share | f32 | What it carries is not recorded for this range; a server writes zero. | |
| assist.gold | f32 | What it carries is not recorded for this range; a server writes zero. | |
| kill | record | event = 0 | Nothing a client shows; the unit before it names the killer. |
| kill.unused | f32 | A client reads nothing here, and writes zero where it raises the event itself. A server writes zero. |
Vectors (13)
buff-on-0-9-22-14, consumable-bought-on-0-9-22-14, critical-strike-on-0-9-22-14, damage-dealt-on-0-9-22-14, damage-taken-on-0-9-22-14, death-assist-on-0-9-22-14, died-on-0-9-22-14, gold-earned-on-0-9-22-14, gold-spent-on-0-9-22-14, heal-cast-on-0-9-22-14, heal-on-0-9-22-14, killing-spree-on-0-9-22-14, one-on-0-9-22-14
In 0.9.22.16–0.9.25.20
Command 108 on events, sent by the server, reliable.
| Field | Type | Present when | What it is |
|---|---|---|---|
| event | u8 | Which event, from 0 to 70, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought, 63 surrenderVoteStarted, 64 surrenderVoteCast, 65 surrenderAlreadyVoted, 66 surrenderCountdown, 67 surrenderFailed, 68 surrenderTooEarly, 69 surrenderAgreed, 70 surrenderVoteSpam, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo. | |
| subject | u32 | The unit the event is about; for a death, the unit that made the kill. | |
| damage | record | event = 10 or 11 | How much harm, and from what. |
| damage.physical | f32 | Physical damage. | |
| damage.magical | f32 | Magical damage. | |
| damage.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| damage.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| damage.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| damage.parentCaster | u32 | Unused; a client reads nothing here. | |
| damage.parent | 4-byte bits | Where the spell or effect came from. | |
| damage.parent.source | bit 0 to 3 | What sort of source the parent spell or effect is, numbered as sourceKind is. | |
| damage.parent.side | bit 4 to 7 | What it means is not recorded for this range; a server writes zero. | |
| damage.parent.category | bit 8 to 11 | A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too. | |
| damage.parent.spellLevel | bit 12 to 14 | The rank of the spell, as shown. | |
| damage.parent.unused | bit 15 to 31 | Unused; a server writes zero. | |
| spent | u32 | event = 18 | How much gold, as shown. |
| value | u32 | event = 20 or 62 | What it carries is not recorded for this range; a client does not show it. |
| critical | f32 | event = 21 | The critical strike’s damage, as shown. |
| spree | u32 | event = 39 | How many kills in a row, as shown. |
| earned | record | event = 19 | Gold earned. |
| earned.gold | f32 | How much gold, as shown. | |
| heal | record | event = 36 or 37 | How much health, and from what. |
| heal.amount | f32 | How much health, as shown. | |
| heal.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| heal.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| heal.spellLevel | u32 | The level of the spell it came from. | |
| heal.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| heal.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| heal.unused | u32 | Unused; a client reads nothing here. | |
| heal.unusedToo | u32 | Unused; a client reads nothing here. | |
| effect | record | event = 38 | The effect, and where it came from. |
| effect.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| effect.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| effect.spellLevel | u32 | The level of the spell it came from. | |
| effect.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| effect.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| effect.unused | u32 | Unused; a client reads nothing here. | |
| effect.unusedToo | u32 | Unused; a client reads nothing here. | |
| assist | record | event = 53 | What one unit did toward a death. |
| assist.lastHit | f32 | When it last dealt damage, in match seconds. | |
| assist.physical | f32 | Physical damage it dealt. | |
| assist.magical | f32 | Magical damage it dealt. | |
| assist.share | f32 | What it carries is not recorded for this range; a server writes zero. | |
| assist.gold | f32 | What it carries is not recorded for this range; a server writes zero. | |
| kill | record | event = 0 | Nothing a client shows; the unit before it names the killer. |
| kill.unused | f32 | A client reads nothing here, and writes zero where it raises the event itself. A server writes zero. |
Vectors (14)
buff-on-0-9-22-16, consumable-bought-on-0-9-22-16, critical-strike-on-0-9-22-16, damage-dealt-on-0-9-22-16, damage-taken-on-0-9-22-16, death-assist-on-0-9-22-16, died-on-0-9-22-16, gold-earned-on-0-9-22-16, gold-spent-on-0-9-22-16, heal-cast-on-0-9-22-16, heal-on-0-9-22-16, item-bought-on-0-9-22-16, killing-spree-on-0-9-22-16, one-on-0-9-22-16
In 0.9.25.21–0.9.25.23
Command 108 on events, sent by the server, reliable.
| Field | Type | Present when | What it is |
|---|---|---|---|
| event | u8 | Which event, from 0 to 70, and so which fields follow. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought, 63 surrenderVoteStarted, 64 surrenderVoteCast, 65 surrenderAlreadyVoted, 66 surrenderCountdown, 67 surrenderFailed, 68 surrenderTooEarly, 69 surrenderAgreed, 70 surrenderVoteSpam, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo. | |
| subject | u32 | The unit the event is about; for a death, the unit that made the kill. | |
| damage | record | event = 10 or 11 | How much harm, and from what. |
| damage.physical | f32 | Physical damage. | |
| damage.magical | f32 | Magical damage. | |
| damage.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| damage.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| damage.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| damage.parentCaster | u32 | Unused; a client reads nothing here. | |
| damage.parent | 4-byte bits | Where the spell or effect came from. | |
| damage.parent.source | bit 0 to 3 | What sort of source the parent spell or effect is, numbered as sourceKind is. | |
| damage.parent.side | bit 4 to 7 | What it means is not recorded for this range; a server writes zero. | |
| damage.parent.category | bit 8 to 11 | A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too. | |
| damage.parent.spellLevel | bit 12 to 14 | The rank of the spell, as shown. | |
| damage.parent.unused | bit 15 to 31 | Unused; a server writes zero. | |
| spent | u32 | event = 18 | How much gold, as shown. |
| value | u32 | event = 20 or 62 | What it carries is not recorded for this range; a client does not show it. |
| critical | f32 | event = 21 | The critical strike’s damage, as shown. |
| spree | u32 | event = 39 | How many kills in a row, as shown. |
| earned | record | event = 19 | Gold earned. |
| earned.gold | f32 | How much gold, as shown. | |
| heal | record | event = 36 or 37 | How much health, and from what. |
| heal.amount | f32 | How much health, as shown. | |
| heal.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| heal.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| heal.spellLevel | u32 | The level of the spell it came from. | |
| heal.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| heal.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| heal.unused | u32 | Unused; a client reads nothing here. | |
| heal.unusedToo | u32 | Unused; a client reads nothing here. | |
| effect | record | event = 38 | The effect, and where it came from. |
| effect.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| effect.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| effect.spellLevel | u32 | The level of the spell it came from. | |
| effect.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| effect.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| effect.unused | u32 | Unused; a client reads nothing here. | |
| effect.unusedToo | u32 | Unused; a client reads nothing here. | |
| assist | record | event = 53 | What one unit did toward a death. |
| assist.lastHit | f32 | When it last dealt damage, in match seconds. | |
| assist.physical | f32 | Physical damage it dealt. | |
| assist.magical | f32 | Magical damage it dealt. | |
| assist.share | f32 | What it carries is not recorded for this range; a server writes zero. | |
| assist.gold | f32 | What it carries is not recorded for this range; a server writes zero. | |
| assist.credited | u32 | What it carries is not recorded for this range; a server writes zero. | |
| kill | record | event = 0 | Nothing a client shows; the unit before it names the killer. |
| kill.unused | f32 | A client reads nothing here, and writes zero where it raises the event itself. A server writes zero. |
Vectors (14)
buff-on-0-9-25-21, consumable-bought-on-0-9-25-21, critical-strike-on-0-9-25-21, damage-dealt-on-0-9-25-21, damage-taken-on-0-9-25-21, death-assist-on-0-9-25-21, died-on-0-9-25-21, gold-earned-on-0-9-25-21, gold-spent-on-0-9-25-21, heal-cast-on-0-9-25-21, heal-on-0-9-25-21, item-bought-on-0-9-25-21, killing-spree-on-0-9-25-21, one-on-0-9-25-21
In 0.9.25.24–1.0.0.24
Command 108 on events, sent by the server, reliable.
| Field | Type | Present when | What it is |
|---|---|---|---|
| event | u8 | Which event, from 0 to 73, and so which fields follow. A value above 73 has no defined effect. Values: 0 died, 2 championDied, 3 championKill, 4 doubleKill, 10 damageTaken, 11 damageDealt, 18 goldSpent, 19 goldEarned, 20 consumableBought, 21 criticalStrike, 24 inhibitorKilled, 25 inhibitorDied, 26 inhibitorRespawningSoon, 28 turretKilled, 29 turretDied, 30 minionKilled, 31 minionDenied, 32 monsterKilled, 33 largeMonsterKilled, 34 nexusKilled, 35 nexusDied, 36 heal, 37 healCast, 38 buff, 39 killingSpree, 46 killDuringSpree, 53 deathAssist, 54 playerQuit, 55 playerLeft, 56 playerReconnected, 62 itemBought, 63 surrenderVoteStarted, 64 surrenderVoteCast, 65 surrenderAlreadyVoted, 66 surrenderCountdown, 67 surrenderFailed, 68 surrenderTooEarly, 69 surrenderAgreed, 70 surrenderVoteSpam, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo. | |
| subject | u32 | The unit the event is about; for a death, the unit that made the kill. | |
| damage | record | event = 10 or 11 | How much harm, and from what. |
| damage.physical | f32 | Physical damage. | |
| damage.magical | f32 | Magical damage. | |
| damage.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| damage.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| damage.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| damage.parentCaster | u32 | Unused; a client reads nothing here. | |
| damage.parent | 4-byte bits | Where the spell or effect came from. | |
| damage.parent.source | bit 0 to 3 | What sort of source the parent spell or effect is, numbered as sourceKind is. | |
| damage.parent.side | bit 4 to 7 | What it means is not recorded for this range; a server writes zero. | |
| damage.parent.category | bit 8 to 11 | A client sums two entries of this sort where this, the source kinds and both spells match, and, where this is zero, the subjects match too. | |
| damage.parent.spellLevel | bit 12 to 14 | The rank of the spell, as shown. | |
| damage.parent.unused | bit 15 to 31 | Unused; a server writes zero. | |
| spent | u32 | event = 18 | How much gold, as shown. |
| value | u32 | event = 20 or 62 | What it carries is not recorded for this range; a client does not show it. |
| critical | f32 | event = 21 | The critical strike’s damage, as shown. |
| spree | u32 | event = 39 | How many kills in a row, as shown. |
| earned | record | event = 19 | Gold earned. |
| earned.gold | f32 | How much gold, as shown. | |
| heal | record | event = 36 or 37 | How much health, and from what. |
| heal.amount | f32 | How much health, as shown. | |
| heal.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| heal.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| heal.spellLevel | u32 | The level of the spell it came from. | |
| heal.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| heal.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| heal.unused | u32 | Unused; a client reads nothing here. | |
| heal.unusedToo | u32 | Unused; a client reads nothing here. | |
| effect | record | event = 38 | The effect, and where it came from. |
| effect.sourceKind | u32 | What sort of source it was. Values: 0 spell, 1 item, 2 buff, 3 passive, 4 basicAttack. | |
| effect.script | u32 | The spell or effect, by the number its name gives, shown by name. | |
| effect.spellLevel | u32 | The level of the spell it came from. | |
| effect.parentSource | u32 | What sort of source the parent script is, as sourceKind. | |
| effect.parentScript | u32 | The spell or effect it came from, by the number its name gives, shown by name. | |
| effect.unused | u32 | Unused; a client reads nothing here. | |
| effect.unusedToo | u32 | Unused; a client reads nothing here. | |
| assist | record | event = 53 | What one unit did toward a death. |
| assist.lastHit | f32 | When it last dealt damage, in match seconds. | |
| assist.physical | f32 | Physical damage it dealt. | |
| assist.magical | f32 | Magical damage it dealt. | |
| assist.share | f32 | What it carries is not recorded for this range; a server writes zero. | |
| assist.gold | f32 | What it carries is not recorded for this range; a server writes zero. | |
| assist.credited | u32 | What it carries is not recorded for this range; a server writes zero. | |
| kill | record | event = 0 | Nothing a client shows; the unit before it names the killer. |
| kill.unused | f32 | A client reads nothing here, and writes zero where it raises the event itself. A server writes zero. |
Communication
Chat, pings, emotes, and the sound and music a server can drive.
Chat
Players chat with Chat, which carries a line to everyone or to a side. A
server puts a line of its own in a client’s chat with SystemMessage. A server
can limit how many more lines a player can send with ChatAllowance.
Pings and emotes
A client marks a point on the map with MapPing, and a server shows the ping to
everyone meant to see it with PingPlaced. A client asks to play an emote with
PlayEmote, and a server shows it with EmotePlayed. A server can also tell
clients of a voice command a champion gave (VoiceCommand) and of an emote a
champion played for the moment (ContextEmote).
Sound and music
A server can play a sound once (SoundPlayed) or a voice event (VoiceEvent),
which a client can report done with VoiceEventDone. A server can also set a
champion’s skin music (ThemeMusic), drive the music (MusicCue), mute or
unmute a kind of sound (VolumeMuted) and fade sound effects out
(FadeSounds).
In 0.9.22.14–0.9.25.20
VoiceEventcarries only the event’s name and asks for no answer.
In 0.9.25.24–1.0.0.24
Where a
VoiceEventasks for an answer, a client sendsVoiceEventDoneonce it has played the event.
In 0.9.25.24–1.0.0.24
A client never answers a
VoiceEventit cannot play.
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).
Chat
Text one player sends the others during a match. Messages players exchange outside a match do not travel on this connection at all.
In 0.8.13.26–0.9.22.13
Command 0 on chat, sent by either side, reliable.
A line of chat. A client sends one as its player says something, and shows one a server sends in its chat box.
| Field | Type | What it is |
|---|---|---|
| text | text, ended by a zero byte | The line, ended by a zero byte. The message is the text alone, with nothing in front of it. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 0 on chat, sent by either side, reliable.
A line of chat. A client sends one as its player says something, and shows one a server sends in its chat box.
| Field | Type | What it is |
|---|---|---|
| speaker | u32 | The client id the line is from. A client sends its own. From a server, a client shows the line with the name of the player holding that client id, coloured for whether that player is on its own side, and with no name for a client id nobody holds; 4294967295 shows the whole line with no name and no tag. A client does not show a line from a player its own player has ignored or muted. |
| audience | u32 | 1 for the speaker’s side alone, which a client shows without a tag; any other value from a server is shown tagged as said to everyone. A client sends 0 where its player began the line with the all-chat prefix, which it leaves out of the text, and 1 otherwise. Values: 0 everyone, 1 team. |
| textLength | u32 | The length of the text in bytes, without the byte that ends it. Its value changes nothing a client does. |
| text | text, sized by textLength | The line; a client sends at most 511 bytes of it, and reads it up to the zero byte that ends it. |
| terminator | bytes, 1 | A zero byte closing the text. |
MapPing
What a client sends to mark a point on the map for the others. The header names no object: it carries zero.
In 0.8.13.26–0.9.22.13
Command 25 on requests, sent by the client, reliable.
Two places on a client’s HUD also send it, naming its champion’s own place.
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | The client id of the player pinging. |
| x | f32 | Where on the map, along one ground axis, in world units. |
| y | f32 | The height of the place pinged, in world units. |
| z | f32 | Where on the map, along the other ground axis, in world units. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 25 on requests, sent by the client, reliable.
A client also sends it from the alert button on its HUD, naming its champion’s own place and writing nothing in particular where the target goes.
| Field | Type | What it is |
|---|---|---|
| x | f32 | Where on the map, along one ground axis, in world units. |
| y | f32 | The height of the place pinged, in world units. |
| z | f32 | Where on the map, along the other ground axis, in world units. |
| target | u32 | A network object the mark is on, or zero where it is on open ground. |
PingPlaced
What a server sends to show a ping on the map to everyone meant to see it.
In 0.8.13.26–0.9.22.13
Command 26 on events, sent by the server, reliable.
A client marks atX and atZ on each of its two map views, and only while it shows a map. The header can carry zero.
| Field | Type | What it is |
|---|---|---|
| atX | f32 | Where the ping sits, along one ground axis, in world units. |
| atY | f32 | A client reads nothing here. |
| atZ | f32 | Where it sits, along the other, in world units. |
| target | u32 | A client reads nothing here. |
| source | u32 | A client reads nothing here. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 26 on events, sent by the server, reliable.
Where target is a unit it holds, of a kind that takes notices, a client shows a notice for it, but not again for the next ping on the same target; it keeps the last target of each side apart. The header names the champion that placed the ping, as source does.
| Field | Type | What it is |
|---|---|---|
| atX | f32 | Where the ping sits, along one ground axis, in world units. |
| atY | f32 | Its height, in world units. A client does not use it to place the ping. |
| atZ | f32 | Where it sits, along the other, in world units. |
| target | u32 | The unit pinged, or zero where a place was pinged instead. |
| source | u32 | The unit that placed it. |
PlayEmote
What a client sends to play an emote. The header names the sender’s champion.
In every range of this book
Command 10 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| emote | u32 | Which emote, by its place in the client’s list. A client sends nothing where no emote matches. |
EmotePlayed
What a server sends to say a unit played an emote. The header names the champion playing the emote.
In every range of this book
Command 11 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| emote | u32 | Which emote, by its place in the client’s list; any value at or past the end of the list plays nothing. |
VoiceEvent
What a server sends to play a voice event. The header carries zero.
In 0.9.22.14–0.9.25.20
Command 132 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| event | text, 64 bytes | The event’s name, ended by a zero byte. A client reads nothing after it. |
Vectors (1)
In 0.9.25.21–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.25.21–0.9.25.35 | 132 |
| 0.9.25.36–1.0.0.24 | 131 |
| Field | Type | What it is |
|---|---|---|
| event | text, 64 bytes | The event’s name. A client sends no VoiceEventDone for a name that names no event it holds. |
| callback | u8 | Bit 0 set asks the client to send VoiceEventDone once the event has finished playing. |
Vectors (1)
VoiceEventDone
What a client sends once a voice event (VoiceEvent) that asked for it has played. The header carries zero.
In 0.9.25.21–0.9.25.35
Command 164 on requests, sent by the client, reliable.
A client names no event: the message is its header alone. It sends it only once an event it found has finished playing; for an empty name, or one naming no event, it sends nothing.
No body.
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 162 on requests, sent by the client, reliable.
A client names no event: the message is its header alone. It sends none for an event with an empty name or one it does not know.
No body.
VolumeMuted
What a server sends to mute or unmute one kind of sound. The header carries zero.
In 0.9.25.21–0.9.25.35
Command 169 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| category | u8 | Which kind, 0 to 5. A larger value than 5 has no defined effect. Values: 0 all, 1 music, 2 effects, 3 announcer, 4 unitResponses, 5 environment, 6 mainEffects. |
| state | 1-byte bits | Whether it is muted. |
| state.muted | bit 0 | Set to mute, clear to unmute. |
| state.unused | bit 1 to 7 | Unused; a server writes zero. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 167 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| category | u8 | Which kind. A larger value than 6 has no defined effect. Values: 0 all, 1 music, 2 effects, 3 announcer, 4 unitResponses, 5 environment, 6 mainEffects. |
| state | 1-byte bits | Whether it is muted. |
| state.muted | bit 0 | Set to mute, clear to unmute. |
| state.unused | bit 1 to 7 | Unused; a server writes zero. |
UnitSpoke
What a client sends when a unit says something on its screen. A server need do nothing with it. The header names the unit speaking.
In every range of this book
Command 30 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| unit | u32 | A value the client takes from the unit that speaks; what it names is not recorded. |
| unknown | f32 | A client writes 1073741824. |
| unknownToo | u32 | A client writes zero. |
| kind | u8 | 0 for text a client sends on a script’s behalf. 1 for one of the client’s own error texts, each distinct text sent once per session. |
| unused | u8 | A client writes zero. |
| text | text, ended by a zero byte | What the unit says, ended by a zero byte; the two take at most 1024 bytes. |
Votes
Surrender votes, and a vote on evening out a match.
Surrender
A server tells a side a surrender vote has been called with
SurrenderVoteCalled. A client answers with SurrenderVote, and a server tells
the side where the vote stands with SurrenderStatus. SurrenderAllowed says
whether a champion’s player can call a vote, turning the choice in the client’s
menu on or off.
In 0.8.13.26–0.9.22.15
There is no surrender vote: a client sends and takes no message about one.
In 0.9.22.16–0.9.25.20
A client has no panel for the vote.
SurrenderVoteCalledonly announces a vote, as just cast or as cast already, and a client’s player votes by typing. Where a vote fails,SurrenderFailedsays how long until another can be called.
In 0.9.25.21–1.0.0.24
SurrenderVoteCalledshows the caller’s vote to that side and, where it says the vote opens, opens the vote’s panel for that side.
In 0.9.25.24–0.9.25.35
A client takes
SurrenderVoteCalledwhenever it arrives, its own champion on the field or not.
Evening out a match
A server can hold a vote on giving the side behind gold, experience and
turrets. BalanceVote opens the vote’s panel for the voting side and adds one
voter with each message; a client answers with
BalanceVoteAnswer from the panel or as its player types /equalize, once per
vote. BalanceResult says how the vote ended, or why it could not be held.
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).
SurrenderVoteCalled
What a server sends to open a surrender vote, or to report one already open. The header names no object: it carries zero.
In 0.9.22.16–0.9.25.20
Command 160 on events, sent by the server, reliable.
A client has no panel for the vote: it only announces it.
| Field | Type | What it is |
|---|---|---|
| how | 1-byte bits | |
| how.unused | bit 0 | Unused; a client reads nothing here. |
| how.cast | bit 1 | Set where caller has just voted, clear where caller had voted already. A client announces either with caller, inFavour, against and side. |
| how.unusedHigh | bit 2 to 7 | Unused; a server writes zero. |
| caller | u32 | The unit that called the vote. |
| inFavour | u8 | How many have voted for. |
| against | u8 | How many have voted against. |
| side | u32 | Which side is voting. |
Vectors (1)
In 0.9.25.21–0.9.25.35
Command 160 on events, sent by the server, reliable.
A client fails where it has no player of its own, or, for its own side, no game screen. Without its vote panel it opens no panel and records no vote, but still announces that a vote began where openTheMenu is set.
| Field | Type | What it is |
|---|---|---|
| how | 1-byte bits | |
| how.countAsYes | bit 0 | Applies only where side is the client’s own: set shows caller voting yes, clear voting no, opening the menu or not. |
| how.openTheMenu | bit 1 | Set where the vote opens: a client of side opens the vote’s panel from seats and closesIn, which have no other effect; every client with a player of its own announces that a vote began, with caller, inFavour, against and side. |
| how.unused | bit 2 to 7 | Unused; a server writes zero. |
| caller | u32 | The unit that called the vote. |
| inFavour | u8 | How many have voted for. |
| against | u8 | How many have voted against. |
| seats | u8 | How many seats can vote. |
| side | u32 | Which side is voting. |
| closesIn | f32 | How long the vote stays open, in seconds. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 158 on events, sent by the server, reliable.
A client ignores it unless its menu and its own champion both exist.
| Field | Type | What it is |
|---|---|---|
| how | 1-byte bits | |
| how.countAsYes | bit 0 | Applies only where side is the client’s own: set shows caller voting yes, clear voting no, opening the menu or not. |
| how.openTheMenu | bit 1 | Set where the vote opens: a client of side opens the vote’s panel from seats and closesIn, which have no other effect; every client with a player of its own announces that a vote began, with caller, inFavour, against and side. |
| how.unused | bit 2 to 7 | Unused; a server writes zero. |
| caller | u32 | The unit that called the vote. |
| inFavour | u8 | How many have voted for. |
| against | u8 | How many have voted against. |
| seats | u8 | How many seats can vote. |
| side | u32 | Which side is voting. |
| closesIn | f32 | How long the vote stays open, in seconds. |
SurrenderVote
What a client sends to vote on surrendering. The header names no object: it carries zero.
In 0.9.22.16–0.9.25.35
Command 159 on requests, sent by the client, reliable.
A client sends it as its player votes, by button or chat command, whether or not a vote is open.
| Field | Type | What it is |
|---|---|---|
| how | 1-byte bits | |
| how.inFavour | bit 0 | Set where the answer is yes. |
| how.unused | bit 1 to 7 | A client writes no value of its own here; a server ignores them. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 157 on requests, sent by the client, reliable.
It answers a call to surrender.
| Field | Type | What it is |
|---|---|---|
| how | 1-byte bits | |
| how.inFavour | bit 0 | Set where the answer is yes, clear where it is no. |
| how.unused | bit 1 to 7 | A client leaves these bits as they happen to be; a server ignores them. |
SurrenderStatus
What a server sends to tell a side where its surrender vote stands. The header names no object: it carries zero.
In 0.9.22.16–0.9.25.35
Command 162 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| reason | u32 | Why the vote stands where it does. A client acts on 0 to 4 and ignores the message for any other value; 0 resets the vote whatever side is, and 1 resets it only where side is the client’s own. A client announces 0, 2, 3 and 4 whether or not it has a player of its own, and fails on 1 without one. |
| inFavour | u8 | How many voted for. |
| against | u8 | How many voted against. |
| side | u32 | Which side. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 160 on events, sent by the server, reliable.
A client ignores the message unless its interface and its own champion both exist.
| Field | Type | What it is |
|---|---|---|
| reason | u32 | Why the vote stands where it does. A client acts on 0 to 4 and ignores the message for any other value; 0 resets the vote whatever side holds, and 1 resets it only where side is the client’s own. |
| inFavour | u8 | How many voted for. |
| against | u8 | How many voted against. |
| side | u32 | Which side. |
SurrenderFailed
What a server sends when a surrender vote fails, to say how long until another can be called. The header carries zero.
In 0.9.22.16–0.9.25.20
Command 161 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| secondsLeft | f32 | How long until a vote can be called again, in seconds. A client announces it. |
Vectors (1)
The interface
What a client shows its player besides the field: the view and camera, input locks, the minimap and text over the screen. Tips, quests, highlights and the tutorial are in Tutorial and guidance.
The view
A client reports where its view sits and which way it faces with Camera,
which a server answers (see Ordering). A client tells a server what it has
selected with SelectObject, and as it locks its view to its champion or
releases it with CameraLock.
A server carries a client’s view from one place to another with MoveCamera. A
server can also lock or free a client’s camera with CameraLockSet, which the
client answers with CameraLock except while it holds its camera itself, and
set a point a player’s view keeps to with CameraBehaviour.
In 0.9.25.24–1.0.0.24
A client sends no
Camerawhile its camera is locked: a server that needs a client’s view reports frees its camera withCameraLockSet.
In 0.9.25.24–1.0.0.24
Cameranames one point, the one the view looks at, in place of where the view sits and which way it faces.
In 0.9.25.24–1.0.0.24
A client ignores
CameraLockSetthat arrives while it holds its camera itself, and answers nothing.
Input
A server locks or unlocks kinds of input, such as movement, spells or the
shop, with InputLock or InputLockToggled.
In 0.8.13.26–0.9.22.13
No message locks a client’s input, in either direction.
In 0.9.22.14–0.9.22.15
A server locks and unlocks input with
InputLockToggledalone. A client flips locks of its own too, and tells the server which withInputLocksFlipped.
In 0.9.22.16–0.9.25.35
A client locks and unlocks its own input too, and tells the server each time:
InputLocksFlippedfor the locks it flipped, as when a camera move a script drives starts and ends, andInputLockChangedfor the locks it set or cleared.
In 0.9.25.24–1.0.0.24
A client keeps every lock a message sets or clears, and later input obeys them, but it acts on a lock at once only where the message’s mask is exactly one of 1, 4, 8, 16, 32 or 128.
The minimap and text on screen
MinimapIcon changes what a client draws for a unit on its map. A server can
float text over a unit (FloatingText, UnitText), warn a player who seems
to be away (AfkWarning), and take the interface down (HudDisabled).
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).
Camera
What a client sends to say where its view sits and which way it faces. Each report is sent once where a server answers it, and again and again where a server does not. The header names no object: it carries zero.
In 0.8.13.26–0.9.25.23
Carried on requests, sent by the client, unreliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 63 |
| 0.9.22.14–0.9.25.23 | 59 |
| Field | Type | What it is |
|---|---|---|
| atX | f32 | Where the view stands, along one ground axis. |
| atY | f32 | Its height. |
| atZ | f32 | Along the other ground axis. |
| facingX | f32 | The way it faces, along one ground axis. |
| facingY | f32 | The way it faces, in height. |
| facingZ | f32 | The way it faces, along the other ground axis. |
| clientId | u32 | The client id the sender holds: that of the client the view belongs to. |
| syncId | u8 | Names this report, counting up as the view moves. A client sends the report again until a server returns the name. |
Vectors (2)
In 0.9.25.24–1.0.0.24
Command 59 on requests, sent by the client, unreliable.
A client sends a new report each time its view moves more than 200 units, at most one every tenth of a second, and sends an unanswered one again after twice its ping, in seconds, plus 1/30 of a second. While its view is locked it sends none.
| Field | Type | What it is |
|---|---|---|
| lookAtX | f32 | The point the view looks at, along one ground axis: where it stands, plus 2000 units the way it faces. |
| lookAtY | f32 | Its height, taken the same way. |
| lookAtZ | f32 | Along the other ground axis, taken the same way. |
| clientId | u32 | The client id the sender holds: that of the client the view belongs to. |
| syncId | u8 | Names this report, counting up as the view moves and wrapping after 255. A client sends the report again until a server returns the name. |
SelectObject
What a client sends as the object it has selected changes. The header names no object: it carries zero.
In every range of this book
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 65 |
| 0.9.22.14–1.0.0.24 | 61 |
| Field | Type | What it is |
|---|---|---|
| clientId | u32 | The client id of the client selecting: the one its Registered gave it. Zero is a client id like any other rather than an absence. |
| selected | u32 | A client writes zero here. |
Vectors (1)
CameraLock
What a client sends as it locks its view to a unit or releases it. The header names no object: it carries zero.
In 0.8.13.26–0.9.22.13
Command 64 on requests, sent by the client, reliable.
A client sends it as its player sets the lock, carrying the new state; while a forced lock holds, the player’s setting is dropped. As the client’s champion dies, a forced lock starts and it sends 0; as the champion comes back, the lock lifts and it sends the state held before the death.
| Field | Type | What it is |
|---|---|---|
| state | 1-byte bits | |
| state.locked | bit 0 | Set while the view follows a unit. |
| state.unused | bit 1 to 7 | Unused; a client writes zero. |
| clientId | u32 | The client id of the client locking. Zero is a client id like any other rather than an absence. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 60 on requests, sent by the client, reliable.
A client sends it on each CameraLockSet with state as that message carried it, all eight bits included, and also as its player sets the lock or the game forces a lock or lifts one. While a forced lock holds, a CameraLockSet or player setting is dropped. As a forced lock begins, a client keeps the state then in force and sends it as the lock lifts; a second forced lock during the first sends its own state and keeps nothing new.
| Field | Type | What it is |
|---|---|---|
| state | 1-byte bits | |
| state.locked | bit 0 | Set while the view follows a unit. |
| state.unused | bit 1 to 7 | As CameraLockSet carried them; zero in a report the client makes on its own. |
| clientId | u32 | The client id of the client locking. Zero is a client id like any other rather than an absence. |
Vectors (1)
MoveCamera
What a server sends to carry a client’s view from one place to another. The header names the champion of the player it is sent to.
In 0.9.22.14–0.9.25.20
Command 131 on events, sent by the server, reliable.
Only the client whose own champion the header names moves its view; others, and every client where the header names no champion, take the message and do nothing.
| Field | Type | What it is |
|---|---|---|
| fromX | f32 | Where the view starts, along one ground axis, in world units. |
| fromY | f32 | Where the view starts, in height, in world units. |
| fromZ | f32 | Where the view starts, along the other ground axis, in world units. |
| toX | f32 | Where the view ends, along one ground axis, in world units. |
| toY | f32 | Where the view ends, in height, in world units. |
| toZ | f32 | Where the view ends, along the other ground axis, in world units. |
| travelTime | f32 | How long the view takes to get there, in seconds. The view moves at an even speed over the distance along the ground. |
Vectors (1)
In 0.9.25.21–0.9.25.35
Command 131 on events, sent by the server, reliable.
Only the client whose own champion the header names moves its view; others, and every client where the header names no champion, take the message and do nothing.
| Field | Type | What it is |
|---|---|---|
| how | 1-byte bits | How the view moves. |
| how.fromWhereItIs | bit 0 | Set to start from where the camera stands, fromX, fromY and fromZ having no effect; clear to start from them. |
| how.unused1 | bit 1 | Unused; a server writes zero. |
| how.unused | bit 2 to 7 | Unused; a server writes zero. |
| fromX | f32 | Where the view starts, along one ground axis, in world units. |
| fromY | f32 | Where the view starts, in height, in world units. |
| fromZ | f32 | Where the view starts, along the other ground axis, in world units. |
| toX | f32 | Where the view ends, along one ground axis, in world units. |
| toY | f32 | Where the view ends, in height, in world units. |
| toZ | f32 | Where the view ends, along the other ground axis, in world units. |
| travelTime | f32 | How long the view takes to get there, in seconds. The view moves at an even speed over the distance along the ground. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 130 on events, sent by the server, reliable.
Only the client whose own champion the header names moves its view; others, and every client where the header names no champion, take the message and do nothing.
| Field | Type | What it is |
|---|---|---|
| how | 1-byte bits | How the view moves. |
| how.fromWhereItIs | bit 0 | Set to start from where the camera stands, fromX, fromY and fromZ having no effect; clear to start from them. |
| how.unused1 | bit 1 | Unused; a server writes zero. |
| how.unused | bit 2 to 7 | Unused; a server writes zero. |
| fromX | f32 | Where the view starts, along one ground axis, in world units. |
| fromY | f32 | Where the view starts, in height, in world units. |
| fromZ | f32 | Where the view starts, along the other ground axis, in world units. |
| toX | f32 | Where the view ends, along one ground axis, in world units. |
| toY | f32 | Where the view ends, in height, in world units. |
| toZ | f32 | Where the view ends, along the other ground axis, in world units. |
| travelTime | f32 | How long the view takes to get there, in seconds. The view moves at an even speed over the distance along the ground. A client ignores the message where it is zero or less. |
CameraLockSet
What a server sends to lock the camera to the champion or free it. A client answers with CameraLock. The header names no object: a server writes zero.
In 0.9.22.14–0.9.25.35
Command 128 on events, sent by the server, reliable.
A client answers at once with CameraLock, returning the state byte as it arrived. While the game holds a forced lock, it ignores the message and sends nothing.
| Field | Type | What it is |
|---|---|---|
| locked | u8 | Nonzero to lock the camera, zero to free it; a client tests the whole byte, so any set bit locks it. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 127 on events, sent by the server, reliable.
A client answers at once with CameraLock, returning the state byte as it arrived. While the game forces the view free, a client ignores the message and sends nothing for it, then or later.
| Field | Type | What it is |
|---|---|---|
| locked | u8 | Nonzero to lock the camera, zero to free it; a client tests the whole byte, so any set bit locks it. |
CameraBehaviour
What a server sends to set a point a champion’s player’s view keeps to. The header names the champion.
In every range of this book
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.8.13.26–0.9.22.13 | 97 |
| 0.9.22.14–1.0.0.24 | 94 |
Only the client whose own champion the header names applies it.
| Field | Type | What it is |
|---|---|---|
| x | f32 | Along one ground axis, in world units. |
| y | f32 | In height, in world units. |
| z | f32 | Along the other ground axis, in world units. |
Vectors (1)
InputLock
What a server sends to lock or unlock a kind of input on a client. The header carries zero.
In 0.9.22.16–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.16–0.9.25.35 | 149 |
| 0.9.25.36–1.0.0.24 | 147 |
| Field | Type | What it is |
|---|---|---|
| category | u32 | Which input, as a set of bits. Values: 1 cameraLocking, 2 movement, 4 abilities, 8 summonerSpells, 16 shop, 32 chat, 64 minimapMovement, 128 cameraMovement. |
| locked | u8 | Set to lock, clear to unlock. |
Vectors (1)
InputLockToggled
What a server sends to turn kinds of input off where they are on, or on where they are off. The header carries zero.
In 0.9.22.14–0.9.25.35
Command 125 on events, sent by the server, reliable.
A client acts on the change at once only where locks is 1, 4, 8, 16, 32 or 128; any other value still changes what is locked, and takes effect as the player next tries.
| Field | Type | What it is |
|---|---|---|
| locks | u32 | Each lock set flips. Values: 1 cameraLock, 2 movement, 4 spells, 8 summonerSpells, 16 shop, 32 chat, 64 minimapMovement, 128 cameraMovement. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 124 on events, sent by the server, reliable.
A client acts on the change at once only where exactly one lock is set; any other value still changes what is locked, and takes effect as the player next tries.
| Field | Type | What it is |
|---|---|---|
| locks | u32 | Each lock set flips. Values: 1 cameraLock, 2 movement, 4 spells, 8 summonerSpells, 16 shop, 32 chat, 64 minimapMovement, 128 cameraMovement. |
InputLocksFlipped
What a client sends after flipping kinds of its own input, off where they were on and on where they were off: as a camera move a script drives starts and ends, and at other moments of its own. The header carries zero.
In 0.9.22.14–0.9.25.35
Command 124 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| locks | u32 | Each lock it flipped. A camera move flips cameraMovement. Values: 1 cameraLock, 2 movement, 4 spells, 8 summonerSpells, 16 shop, 32 chat, 64 minimapMovement, 128 cameraMovement. |
Vectors (1)
InputLockChanged
What a client sends after locking or unlocking kinds of its own input. The header carries zero.
In 0.9.22.16–0.9.25.35
Command 148 on requests, sent by the client, reliable.
| Field | Type | What it is |
|---|---|---|
| locks | u32 | Which input, as a set of bits. Values: 1 cameraLock, 2 movement, 4 spells, 8 summonerSpells, 16 shop, 32 chat, 64 minimapMovement, 128 cameraMovement. |
| locked | u8 | Set where it locked them, clear where it unlocked them. |
Vectors (1)
FloatingText
What a server sends to show text floating over a unit. The header names the unit.
In every range of this book
Command 30 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| unused | u32 | Unused; a server writes zero. |
| delay | f32 | Unused; a server writes zero. |
| slot | i32 | Where the text goes. 0 floats it over the unit while the unit is in the client’s own view, where the player’s floating-text settings allow. 1 to 50 writes it, in colour, to that line of a debugging display, only where the unit is the one the player has selected. A client does nothing for any other value. |
| error | u8 | Nonzero has a client show the text on screen as a message for ten seconds, whatever slot holds, and float an error notice of its own over the unit, under the same view and settings as slot 0; it does nothing else with the message. |
| colour | u8 | The text’s colour on the debugging display; it has no effect for slot 0. |
| text | text, ended by a zero byte | The text, ended by a zero byte; the two take at most 1024 bytes. |
Vectors (1)
AfkWarning
What a server sends to warn the player that they seem to be away, in a popup with one button that only closes it. It carries nothing of its own. The header carries zero.
In 0.9.22.14–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.14–0.9.25.35 | 146 |
| 0.9.25.36–1.0.0.24 | 145 |
No body.
Vectors (1)
HudDisabled
What a server sends to take down a client’s interface as the match ends. The header names no object: it carries zero.
In 0.9.25.36–1.0.0.24
Command 171 on events, sent by the server, reliable.
A client also opens its chat entry, as the chat key does, where chat is open to it.
No body.
Announcement
What a server sends to show one of a client’s own fixed announcements for five seconds.
In 0.8.13.26–0.9.22.13
Command 70 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| announcement | u32 | Which of the client’s announcements, -1 to 27. The text of each is the client’s own and is not recorded here. -1 shows a text that is none of the 28, and 5, 6, 20, 21 and 25 show only a placeholder; any other value has no defined effect. |
| unit | u32 | A unit whose name the announcement carries, or zero for an announcement that names none. A client shows nothing where it does not know the unit. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 66 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| announcement | u32 | Which of the client’s announcements, -1 to 27. The text of each is the client’s own and is not recorded here. -1 shows a text that is none of the 28; any other value has no defined effect. |
| unit | u32 | A unit whose name the announcement carries, or zero for an announcement that names none. A client shows nothing where it does not know the unit. |
CameraAck
What a server returns for a view report, naming the report it answers. A server names in the header the champion of the player it is sent to.
In 0.8.13.26–0.9.22.13
Command 112 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| syncId | u8 | The name the report carried. A client sends the report again until this comes back. |
Vectors (1)
In 0.9.22.14–1.0.0.24
Command 110 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| syncId | u8 | The name the report carried. A client sends the report again until this comes back. It takes a value only where it is newer than the last it took, counting with wrap within 128 steps, and ignores any other. |
Tutorial and guidance
What a server shows a player to lead them: tips, quests, objectives and text at the side of the screen, highlights, and the tutorial.
A server tells a champion something has come about with Situation.
Highlights
A server lights up parts of the screen and units with HudHighlighted,
HudHighlightToggled, UiHighlight, UnitHighlighted and
UnitHighlightRemoved, and makes part of the minimap or of the shop blink with
MinimapHighlighted and ShopHighlighted.
Tips, quests and objectives
A server puts a tip in front of a player with TipShown, addressed to that
player’s champion, and a client reports a click on it, or the tip being closed,
with TipEvent. A server can add, complete and remove quests in the quest
tracker with QuestUpdated, and a client reports the pointer passing over a
quest, and a click on it, with QuestEvent. A server can also show, change
and hide an objective panel (ObjectiveShown, ObjectiveReplaced,
ObjectiveHidden) and a box of text at the side of the screen
(SideTextShown, SideTextRefreshed, SideTextHidden).
The tutorial
In the tutorial, a server can put lines of the client’s own text in its chat
(TutorialChatLine) and open the tutorial’s popup (TutorialPopup), which the
client answers with TutorialPopupClosed.
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).
HudHighlighted
What a server sends to light up part of the screen, as a tutorial does. Only HudHighlightToggled turns it off. The header carries zero.
In 0.9.22.16–0.9.25.35
Command 157 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| element | u8 | What to light up on the main controls, 0 to 8; a larger value has no defined effect. 4, 5 and 6 each name a part of a second panel; which part each value names is not recorded. Values: 0 spell, 1 spellUpgrade, 2 summonerSpell, 3 recall, 4 shop, 5 gold, 6 experience, 7 health, 8 mana. |
| number | u8 | Which slot, for a spell or a summoner spell; it has no effect for any element but 0, 1 and 2. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 155 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| element | u8 | What to light up on the main controls, 0 to 8; a larger value has no defined effect. 4, 5 and 6 each name a part of a second panel; which part each value names is not recorded. Values: 0 spell, 1 spellUpgrade, 2 summonerSpell, 3 recall, 4 shop, 5 gold, 6 experience, 7 health, 8 mana. |
| number | u8 | Which slot, for a spell or a summoner spell; it has no effect for 4, 5 or 6. |
HudHighlightToggled
What a server sends to light up part of the screen, or to put it out. The header carries zero.
In 0.9.25.21–0.9.25.35
Command 166 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| part | u8 | Which part of the screen. A client ignores any other value. Values: 1 hud, 2 shop, 3 minimap. |
| element | u8 | What to light up, as in HudHighlighted. A value beyond those named has no defined effect. |
| number | u8 | Which slot, as in HudHighlighted. |
| second | u8 | A third value where part is 2; a server writes zero otherwise. |
| state | 1-byte bits | Whether it is lit. |
| state.on | bit 0 | Set to light it up, clear to put it out. |
| state.unused | bit 1 to 7 | A client ignores these bits; a server writes zero. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 164 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| part | u8 | Which part of the screen. A client ignores any other value. Values: 1 hud, 2 shop, 3 minimap. |
| element | u8 | What to light up, as in HudHighlighted. A value beyond those named does nothing. |
| number | u8 | Which slot, as in HudHighlighted. |
| second | u8 | A third value where part is 2; a server writes zero otherwise. |
| state | 1-byte bits | Whether it is lit. |
| state.on | bit 0 | Set to light it up, clear to put it out. |
| state.unused | bit 1 to 7 | A client ignores these bits; a server writes zero. |
UnitHighlighted
What a server sends to outline a unit with a pulsing light, as a tutorial does, until UnitHighlightRemoved. The header carries zero.
In 0.9.22.14–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.14–0.9.25.35 | 142 |
| 0.9.25.36–1.0.0.24 | 141 |
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The unit: one that can be damaged. |
Vectors (1)
UnitHighlightRemoved
What a server sends to take away the light UnitHighlighted put on a unit. The header carries zero.
In 0.9.22.14–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.14–0.9.25.35 | 143 |
| 0.9.25.36–1.0.0.24 | 142 |
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The unit. Where it has no light, nothing happens. |
Vectors (1)
MinimapHighlighted
What a server sends to make part of the minimap blink, as a tutorial does.
In 0.9.25.21–0.9.25.35
Command 165 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| element | u8 | Which part of the minimap blinks. 0 is its camera button, and a server sends only 0; any other value has no defined effect. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 163 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| element | u8 | Which part of the minimap blinks; a server sends 0, its camera button. A client acts only once it knows its own champion, and does not check the value: any other has no defined effect. |
ShopHighlighted
What a server sends to make a shop element blink once, as a tutorial does. The header names no object: a server writes zero.
In 0.9.22.16–0.9.25.20
Command 158 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| element | u8 | A shop element blinks once, where the shop window is open. Element 0 is the buy button, 1 the sell button, 2 the shop item number names, and 3 the item second names within the category number names. A client fails for any larger value. |
| number | u8 | Which of the element’s entries. |
| second | u8 | For the shop’s element 3, which item within the category; a client reads nothing here otherwise. |
Vectors (1)
In 0.9.25.21–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.25.21–0.9.25.35 | 158 |
| 0.9.25.36–1.0.0.24 | 156 |
| Field | Type | What it is |
|---|---|---|
| element | u8 | A shop element blinks once, where the shop window is open. Element 0 is the buy button, 1 the sell button, 2 the shop item number names, 3 the item second names within the category number names, and 4 the recommended item number names. A larger value than 4 has no defined effect. |
| number | u8 | Which of the element’s entries. |
| second | u8 | For the shop’s element 3, which item within the category; a client reads nothing here otherwise. |
Vectors (1)
ObjectiveShown
What a server sends to show the objective panel with a text. The header carries zero.
In 0.9.22.16–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.16–0.9.25.35 | 151 |
| 0.9.25.36–1.0.0.24 | 149 |
| Field | Type | What it is |
|---|---|---|
| text | text, ended by a zero byte | The objective, ended by a zero byte. |
Vectors (1)
ObjectiveReplaced
What a server sends to replace the text of the objective panel, showing the panel if it is hidden. The header carries zero.
In 0.9.22.16–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.16–0.9.25.35 | 153 |
| 0.9.25.36–1.0.0.24 | 151 |
A client ignores it where it has no objective panel.
| Field | Type | What it is |
|---|---|---|
| text | text, ended by a zero byte | The objective, ended by a zero byte. |
Vectors (1)
ObjectiveHidden
What a server sends to hide the objective panel. It carries nothing of its own. The header carries zero.
In 0.9.22.16–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.16–0.9.25.35 | 152 |
| 0.9.25.36–1.0.0.24 | 150 |
No body.
Vectors (1)
SideTextShown
What a server sends to show a box of text at the right edge of the screen. The header names no object: a server writes zero.
In 0.9.22.16–0.9.25.35
Command 154 on events, sent by the server, reliable.
A client also sizes the panel to the text and shows it low on the screen: its edge at 98.5% of the screen’s width, and 85% of the screen’s height less the height of one interface element, scaled by the screen’s width over 1680.
| Field | Type | What it is |
|---|---|---|
| text | text, 128 bytes | A key into the client’s own text, which it looks up and shows. The text ends at its first zero byte, which falls within the field. |
Vectors (1)
In 0.9.25.36–1.0.0.24
Command 152 on events, sent by the server, reliable.
A client also sizes the panel to the text and shows it. The box sits at the lower right, at 98.5% of the screen’s width and 85% of its height, less room for the interface.
| Field | Type | What it is |
|---|---|---|
| text | text, 128 bytes | A key into the client’s own text, which it looks up and shows. The text ends at its first zero byte, which falls within the field. |
SideTextRefreshed
What a server sends to change the text in the box SideTextShown opened, in place. The header names no object: a server writes zero.
In 0.9.22.16–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.16–0.9.25.35 | 156 |
| 0.9.25.36–1.0.0.24 | 154 |
| Field | Type | What it is |
|---|---|---|
| text | text, 128 bytes | A key into the client’s own text, which it looks up and shows. The text ends at its first zero byte, which falls within the field. |
Vectors (1)
SideTextHidden
What a server sends to close the box of text SideTextShown opened. It carries nothing of its own. The header names no object: a server writes zero.
In 0.9.22.16–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.16–0.9.25.35 | 155 |
| 0.9.25.36–1.0.0.24 | 153 |
No body.
Vectors (1)
TutorialChatLine
What a server sends to put a line of the client’s own text in its chat, as a line from the game. The header carries zero.
In 0.9.25.21–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.25.21–0.9.25.35 | 167 |
| 0.9.25.36–1.0.0.24 | 165 |
| Field | Type | What it is |
|---|---|---|
| text | text, 128 bytes | A key into the client’s own text, which it looks up and shows. The text ends at its first zero byte, which falls within the field. |
Vectors (1)
TutorialPopup
What a server sends to open the tutorial’s popup: a caption, this text and a single button, which a client answers with TutorialPopupClosed. A client has one such popup; a second message replaces its text. The header carries zero.
In 0.9.22.14–0.9.22.15
Command 144 on events, sent by the server, reliable.
| Field | Type | What it is |
|---|---|---|
| text | text, 128 bytes | A key into the client’s own text for the popup’s body. A client copies the whole field first, so the text ends at a zero byte within it. |
Vectors (1)
In 0.9.22.16–1.0.0.24
Carried on events, sent by the server, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.16–0.9.25.35 | 144 |
| 0.9.25.36–1.0.0.24 | 143 |
| Field | Type | What it is |
|---|---|---|
| text | text, 128 bytes | A key into the client’s own text for the popup’s body. The text ends at its first zero byte, which falls within the field. |
Vectors (1)
TutorialPopupClosed
What a client sends as its player presses the button of the tutorial’s popup (TutorialPopup). It carries nothing of its own. The header carries zero.
In 0.9.22.14–1.0.0.24
Carried on requests, sent by the client, reliable, under these commands:
| Builds | Command |
|---|---|
| 0.9.22.14–0.9.25.35 | 145 |
| 0.9.25.36–1.0.0.24 | 144 |
No body.
Vectors (1)
Structs
The groups of fields messages hold, each with the layout it has across the book’s patches.
Choice
One choice made before the match, and how far it was taken.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| choice | u32 | Which choice, by the number the client knows it as. Zero where the place stands empty. |
| rank | u8 | How far it was taken. |
Movement
What one unit is told to do, in the compact shape: a path of points on the ground plane, each after the first stated against the one before it. Other shapes of movement exist, and which one a payload holds is settled by the message carrying it rather than by anything inside the movement.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| header | 2-byte bits | |
| header.pointCount | bit 0 to 15 | How many points the path holds. A client takes none as no path and reads nothing more of the message. It sets no upper bound, and reads a count from 32768 up as negative, which no server sends. |
| path | record | Everything the movement carries after its point count. |
| path.unit | u32 | The unit the path belongs to. |
| path.points | count in header.pointCount × record | Every point of the path, each stated in world units. A client reads them even for a unit it does not hold, and takes each point’s height from the ground. |
| path.points[].x | f32 | Along one ground axis, in world units. |
| path.points[].z | f32 | Along the other, in world units. |
MovementAtSpeed
What one unit is told to do where a server states how it travels: the same path of points as the compact shape, with the terms of its travel stated before them.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| header | 2-byte bits | |
| header.pointCount | bit 0 to 15 | How many points the path holds. A client takes none as no path and reads nothing more of the message. It sets no upper bound, and reads a count from 32768 up as negative, which no server sends. |
| path | record | Everything the movement carries after its point count. |
| path.unit | u32 | The unit the path belongs to. |
| path.terms | SpeedParams | How the unit is made to travel. |
| path.points | count in header.pointCount × record | Every point of the path, each stated in world units. A client reads them even for a unit it does not hold, and takes each point’s height from the ground. |
| path.points[].x | f32 | Along one ground axis, in world units. |
| path.points[].z | f32 | Along the other, in world units. |
Particle
One drawn particle: where it sits, what it hangs off, and how far into its run it is.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| target | u32 | The unit the particle is aimed at, or zero. |
| particle | u32 | The name this particle answers to, so later messages can name it. |
| boundTo | u32 | The unit the particle hangs off, or zero. Where it names a unit the client does not hold, the particle waits until it does, unless the group’s flags say otherwise. |
| atX | f32 | Where the particle sits, along one ground axis, in world units. |
| atY | f32 | Where it sits, in height, in world units. |
| atZ | f32 | Where it sits, along the other ground axis, in world units. |
| towardX | f32 | Where the particle is aimed, along one ground axis, in world units. |
| towardY | f32 | Where it is aimed, in height, in world units. |
| towardZ | f32 | Where it is aimed, along the other ground axis, in world units. |
| ownerX | f32 | Where the unit that made it stood, along one ground axis, in world units. |
| ownerY | f32 | Where that unit stood, in height, in world units. |
| ownerZ | f32 | Where that unit stood, along the other ground axis, in world units. |
| runningFor | f32 | How far into its run the particle already is, in seconds. |
ParticleGroup
A set of drawn particles that share the art, the sound, and the place on a unit they hang from.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| particle | u32 | Which particle, by the number its name gives, as Objects and identifiers works it out. |
| flags | u16 | How each particle of the group behaves, one bit each: 1 kept alive, not ending by itself; 2 of no effect; 4 scaled to the bound unit’s bounding box and its effect scale (to 1 where the bound object cannot be attacked); 8 placed at the positions given rather than hung on bone and targetBone, made even where a nonzero boundTo is unknown and with an unknown target; 16 not turned to follow its direction; 32 simulated while off screen; 64 laid flat on the ground’s slope, facing as forward (+Z where facing is zero); 128 facing its target; 256 driven by the bound unit’s resource bar. Bits 9 to 15 have no effect. |
| targetBone | u32 | Where on the unit aimed at they hang, by the number the name of that place gives, as Objects and identifiers works it out. |
| bone | u32 | Where on the unit that made them they hang, by the same reading. |
| particleCount | u8 | How many particles follow. |
| particles | count in particleCount × Particle | The particles themselves. |
Replication
What has changed about one unit. A flag byte says which groups of values follow, and each group that follows says which of its values it holds and carries them as a run of bytes. The groups follow in a fixed order that is not the order of the flags: the last flag’s values come before the one before it, and the rest run in flag order. Replication says what settles the reading of a run, and records what a champion’s groups carry.
In every range of this book
| Field | Type | Present when | What it is |
|---|---|---|---|
| present | 1-byte bits | ||
| present.group0 | bit 0 | Set where this group’s values follow. | |
| present.group1 | bit 1 | Set where this group’s values follow. | |
| present.group2 | bit 2 | Set where this group’s values follow. | |
| present.group3 | bit 3 | Set where this group’s values follow. | |
| present.group4 | bit 4 | Set where this group’s values follow. They come after every other group’s, whatever the flags. | |
| present.unused | bit 5 to 7 | A client takes only groups 0 to 4. | |
| unit | u32 | The unit whose values these are. | |
| group0 | record | present.group0 set | The values of group 0, where the flag says they follow. |
| group0.which | u32 | Says which of the group’s values follow, one bit each, lowest first. | |
| group0.values | count in the bits set in which × bytes | The values themselves, four bytes each, in the order the bits above name them. | |
| group1 | record | present.group1 set | The values of group 1, where the flag says they follow. |
| group1.which | u32 | Says which of the group’s values follow, one bit each, lowest first. | |
| group1.values | count in the bits set in which × bytes | The values themselves, four bytes each, in the order the bits above name them. | |
| group2 | record | present.group2 set | The values of group 2, where the flag says they follow. |
| group2.which | u32 | Says which of the group’s values follow, one bit each, lowest first. | |
| group2.values | count in the bits set in which × bytes | The values themselves, four bytes each, in the order the bits above name them. | |
| group3 | record | present.group3 set | The values of group 3, where the flag says they follow. |
| group3.which | u32 | Says which of the group’s values follow, one bit each, lowest first. | |
| group3.values | count in the bits set in which × bytes | The values themselves, four bytes each, in the order the bits above name them. | |
| group4 | record | present.group4 set | The values of group 4, where the flag says they follow. |
| group4.which | u32 | Says which of the group’s values follow, one bit each, lowest first. | |
| group4.values | count in the bits set in which × bytes | The values themselves, four bytes each, in the order the bits above name them. |
Seat
One place at the match: who holds it, what they brought, and what the client shows for them.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| player | i64 | Which player holds the place, or a negative number where it stands empty. It has a player identifier’s width. |
| level | u16 | The level the seat holder has reached across matches. |
| summoner | u32 | The spell in one of the seat’s summoner slots, as the name hash of the spell; drawn as its icon on the loading screen. It has no effect on a bot’s seat. |
| otherSummoner | u32 | The spell in the other. |
SpeedParams
How a unit is made to travel, in place of what a receiving end would otherwise choose for it.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| speed | f32 | How fast the unit travels along the path, in world units a second, standing in for its own pace. |
| gravity | f32 | How sharply the unit arcs through the air along the way. Zero where it keeps to the ground. |
| fromX | f32 | Where the unit starts, along one ground axis, in world units. It holds the same place the path’s first point states, and is carried whether the unit arcs or not. |
| fromZ | f32 | Where it starts, along the other. |
SpellCast
One casting of a spell: which spell, who cast it, at what, and the timings a client plays it out with.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| size | u16 | How many bytes the casting takes, this field included. Where it differs from the bytes the casting takes, a client still gives the cast its spell. |
| spell | u32 | Which spell, by the number its name gives, as Objects and identifiers works it out. |
| cast | u32 | The name this casting answers to, so later messages can name it. |
| level | u8 | The rank the spell stands at, counting from 1: a spell at its first rank carries 1. |
| attackSpeed | f32 | What the caster’s attack rhythm is scaled by while this runs. |
| caster | u32 | The unit casting. |
| chainOwner | u32 | The unit the casting is credited to, where a chain of casts leads back to another. |
| targetX | f32 | Where the casting is aimed, along one ground axis, in world units. |
| targetY | f32 | Where the casting is aimed, in height, in world units. |
| targetZ | f32 | Where the casting is aimed, along the other ground axis, in world units. |
| targetEndX | f32 | Where the casting stops being aimed, for a spell that sweeps, along one ground axis, in world units. |
| targetEndY | f32 | Where the casting stops being aimed, for a spell that sweeps, in height, in world units. |
| targetEndZ | f32 | Where the casting stops being aimed, for a spell that sweeps, along the other ground axis, in world units. |
| hitCount | u8 | How many units the casting names as hit, at most 32. A client sets no bound of its own. |
| hits | count in hitCount × SpellHit | The units the casting hits, each a unit then a one-byte result. |
| castTime | f32 | How long the casting takes before it takes effect, in seconds. |
| extraCastTime | f32 | What is added to that, in seconds. |
| totalTime | f32 | How long the whole casting runs, in seconds. |
| cooldown | f32 | How long until the spell can be cast again, in seconds. |
| how | 1-byte bits | |
| how.basicAttack | bit 0 | Set where the casting is the caster’s own swing rather than a spell. |
| how.secondBasicAttack | bit 1 | Set where the swing is the second of a pair. |
| how.unused | bit 2 to 7 | A client reads nothing here; a server writes zero. |
| slot | u8 | Which of the caster’s slots the spell sits in. |
| cost | f32 | What the casting spends from the caster’s resource. |
| launchX | f32 | Where what the casting throws leaves from, along one ground axis, in world units. |
| launchY | f32 | Where what the casting throws leaves from, in height, in world units. |
| launchZ | f32 | Where what the casting throws leaves from, along the other ground axis, in world units. |
SpellHit
One unit a casting names as hit, and how it was hit.
In every range of this book
| Field | Type | What it is |
|---|---|---|
| unit | u32 | The unit hit. |
| result | u8 | How the hit landed. |
Patches
What is particular to each patch this book covers: the builds it shipped, the live checks that ran on them, every message it carries, what the specification leaves unrecorded there, and how it differs from the patch before it. Where builds of two patches are held to the same facts, they share a section.
No build of this book has these, though the chapters name them, so what the chapters say of them says nothing of this book: AnimationAdvanced, AnimationOverrides, AppearanceCleared, AscendedUnit, AttackIndicators, AttackSpeedBounds, BalanceResult, BalanceVote, BalanceVoteAnswer, BalanceVoteRefused, BotKick, BounceMissile, CampCleared, CampMarker, CampOpened, CampTimer, CancelTargeting, CapturePointChanged, CapturePointValue, ChampionDied, ChampionRemoved, ChampionStats, CharacterPreload, ChatAllowance, ContextEmote, CreateFollower, CursorRings, DeathTimer, EffectAddedGroup, EffectCounter, EffectCountGroup, EffectRemovedGroup, EffectReplacedGroup, EmitterPause, EnterTeamSight, FadeSounds, FloatingTextOnMap, FogSet, FollowerMaster, ForceDeath, GameOptions, GroundAttackMode, HealthBar, HoverIndicator, HoverTarget, InhibitorDied, InventorySlot, InventorySnapshot, InventorySnapshotOnMap, ItemCharges, ItemSubstitution, ItemUsed, LeaveTeamSight, LevelCap, MapProp, MapPropChanged, MarkerMoved, MatchStarted, MinimapIcon, MinionKillCount, MissileCourse, MissileLaunched, MissileRetarget, MissileSpeed, MusicCue, NavigationFlags, ParticleEnterTeamSight, ParticleLeaveTeamSight, ParticleSource, Pause, PauseAnimation, QuestEvent, QuestUpdated, RegionMoved, ResourceDisplay, ResourceKindChanged, RespawnPoint, Resume, ScoreAdded, ScreenTint, ShieldAdded, ShopEnabled, ShopUndo, ShopUndoCount, Shutdown, Situation, SoftReconnect, SoundPlayed, SpawnBot, SpawnMarker, SpawnTurret, SpellCharge, SpellCharges, SpellCostChanged, SpellIconChanged, SpellInSlot, SpellLevel, SpellOffsetTargetChanged, SpellRangeChanged, SpellRankLimits, SpellSlotChanged, SpellSlotChangedForOwner, SpellTargeterHidden, SpellTargeterShown, SpellToggled, StatisticIncremented, StreamChunk, StreamChunkRange, StreamMetadata, StreamRequest, SubstitutionCleared, SurrenderAllowed, SwapItems, SystemMessage, TeamChanged, TeamScore, ThemeMusic, TipEvent, TipShown, UiHighlight, UnitDiedOnMap, UnitText, UseObject, VictoryDance, VoiceCommand, VoiceOverride, ZoomReport.
0.8.13.26–0.9.22.13
Client builds from 0.8.13.26 up to, not including, 0.9.22.14. Patch notes: V0.8.13.26.
| Build checked | Passed | Failed | Skipped | Commit | Date |
|---|---|---|---|---|---|
| 0.8.13.26 | 8 | 0 | 6 | 2e341b1 | 2026-11-04 |
Other ranges of this book have these, and this one does not, so what the chapters say of them says nothing of it: AfkWarning, BotDebug, CameraLockSet, CloseShop, DeathHistory, Exit, FadeMinions, FadeRemoved, FadeTo, FogToggled, GameSpeed, GreyscaleWhenDead, HudDisabled, HudHighlightToggled, HudHighlighted, InputLock, InputLockToggled, JoinSide, LoadingProgress, MinimapHighlighted, MissileHits, MissileReport, MoveCamera, NexusIdle, NexusSkin, ObjectiveHidden, ObjectiveReplaced, ObjectiveShown, Paused, PlayerDisconnected, Replication, Resumed, Roster, SeatChampion, SeatLoadProgress, SeatName, ShopHighlighted, SideTextHidden, SideTextRefreshed, SideTextShown, SpellNameChanged, SpellNumbers, SpellTargetingChanged, SurrenderStatus, SurrenderVote, SurrenderVoteCalled, TransientAck, TutorialChatLine, TutorialPopup, TutorialPopupClosed, UnitHighlightRemoved, UnitHighlighted, VoiceEvent, VoiceEventDone, VolumeMuted, WaypointAck, WaypointGroup, WaypointGroupAtSpeed, WorldEvent.
Every message of this range (98)
0.9.22.14–0.9.22.15
Client builds from 0.9.22.14 up to, not including, 0.9.22.16. Patch notes: V0.9.22.14.
| Build checked | Passed | Failed | Skipped | Commit | Date |
|---|---|---|---|---|---|
| 0.9.22.14 | 9 | 0 | 5 | a00b64a | 2026-11-04 |
Other ranges of this book have these, and this one does not, so what the chapters say of them says nothing of it: FadeMinions, GreyscaleWhenDead, HudDisabled, HudHighlightToggled, HudHighlighted, InputLock, MinimapHighlighted, MissileHits, NexusIdle, NexusSkin, ObjectiveHidden, ObjectiveReplaced, ObjectiveShown, ShopHighlighted, SideTextHidden, SideTextRefreshed, SideTextShown, SpellNameChanged, SpellNumbers, SurrenderStatus, SurrenderVote, SurrenderVoteCalled, TutorialChatLine, VoiceEventDone, VolumeMuted, WorldEvent.
Every message of this range (132)
Against 0.8.13.26–0.9.22.13
Where a build from 0.9.22.14 up to, not including, 0.9.22.16 differs from one from 0.8.13.26 up to, not including, 0.9.22.14. Anything not named here is the same in both.
Transport
- The families differ: see families.json.
In 0.9.22.14–0.9.22.15, not in 0.8.13.26–0.9.22.13
| Message | Sent by | Command | What it does |
|---|---|---|---|
AfkWarning | server | 146 on events | Warn the player that they seem to be away, in a popup with one button that only closes it |
BotDebug | server | 105 on events | What a server sends describing what a bot is thinking |
CameraLockSet | server | 128 on events | Lock the camera to the champion or free it |
CloseShop | server | 147 on events | Close a client’s shop |
DeathHistory | server | 112 on events | Say what led to a death, so the client can lay it out |
Exit | client | 115 on requests | What a client sends as it leaves |
FadeRemoved | server | 138 on events | Undo a fade on a unit |
FadeTo | server | 137 on events | Fade a unit towards an opacity over time |
FogToggled | server | 126 on events | Turn the drawing of the fog of war off where it is on, or on where it is off |
GameSpeed | server | 136 on events | Set how fast the game’s clock runs |
InputLockToggled | server | 125 on events | Turn kinds of input off where they are on, or on where they are off |
InputLocksFlipped | client | 124 on requests | What a client sends after flipping kinds of its own input, off where they were on and on where they were off: as a camera move a script drives starts and ends, and at other moments of its own |
JoinSide | client | 100 on roster | Ask for a seat on one of the two sides while the match is being put together |
LoadingProgress | client | 113 on requests | What a client sends while a match loads, saying how far it has got |
MissileReport | client | 63 on requests | Report where a missile that flies straight is and where it is going |
MoveCamera | server | 131 on events | Carry a client’s view from one place to another |
MovementBounds | server | 127 on events | Set a circle that a client keeps its view or its champion’s orders within |
Paused | server | 134 on events | Put the match on hold |
PlayerDisconnected | server | 116 on events | What a server sends as a player’s client drops out |
Reconnected | server | 118 on events | Say a client has reconnected |
ReconnectedInMatch | client | 117 on requests | What a client sends right after the server answers its registration |
Replication | server | 129 on transient | Say what has changed about units a client can see |
Resumed | server | 135 on events | Take the match off hold |
ResyncEnded | server | 119 on events | End the resynchronising a client began on its own Reconnected, after which it takes spawns again as they come |
Roster | server | 103 on roster | Lay out both sides and who is on them, while the match is being put together |
SeatChampion | server | 101 on roster | Say which champion a seat is playing, while the match is being put together |
SeatLoadProgress | server | 114 on transient | Tell everyone how far one seat has got through loading, and how it is holding up |
SeatName | server | 102 on roster | Say what a seat is called, while the match is being put together |
SpellTargetingChanged | server | 133 on events | Change how a spell already in a unit’s slot is aimed |
TargetHeldChampion | server | 70 on events | Mark that a unit is attacking a champion, or to take the mark away |
TransientAck | client | 130 on requests | Say a batch of changes arrived, naming which batch |
TutorialPopup | server | 144 on events | Open the tutorial’s popup: a caption, this text and a single button, which a client answers with TutorialPopupClosed |
TutorialPopupClosed | client | 145 on requests | What a client sends as its player presses the button of the tutorial’s popup (TutorialPopup) |
UnitHighlightRemoved | server | 143 on events | Take away the light UnitHighlighted put on a unit |
UnitHighlighted | server | 142 on events | Outline a unit with a pulsing light, as a tutorial does, until UnitHighlightRemoved |
VoiceEvent | server | 132 on events | Play a voice event |
WaypointAck | client | 120 on requests | What a client sends once it has taken in a group of movements, naming which group |
WaypointGroup | server | 121 on transient | Move units |
WaypointGroupAtSpeed | server | 122 on events | Move units along paths of its own choosing, stating how each one travels rather than leaving it to the receiving end |
In 0.8.13.26–0.9.22.13, not in 0.9.22.14–0.9.22.15
| Message | Sent by | Command it had |
|---|---|---|
PlaceTurret | server | 55 on events |
ValueGroup0 | server | 49 on events |
ValueGroup1 | server | 50 on events |
ValueGroup2 | server | 51 on events |
ValueGroup3 | server | 52 on events |
Commands
These differ only in their command. Each row is a run of commands moved by the same amount:
| Channel | 0.8.13.26–0.9.22.13 | 0.9.22.14–0.9.22.15 | Messages |
|---|---|---|---|
| clock | 78–79 | 75–76 | ClockReply, ClockConvergence |
| events | 59–73 | 55–69 | EnterSight, LeaveSight, EnterLocalSight, LeaveLocalSight, StatTick, Announcement, TargetUnit |
| events | 74–106 | 71–103 | Revived, Respawned, BuildingDied, ClockSync, Path, PathWithSpeed, EffectCount, RegionRemoved, StopAnimation, GoldRedirect, AppearancePushed, AppearancePopped, FaceDirection, CameraBehaviour, DestroyMissile, ChainTargets |
| events | 108–113 | 106–111 | BotTargets, BotState, CameraAck, MatchIdentity |
| requests | 63–71 | 59–67 | Camera, CameraLock, SelectObject, ClientVersion |
| requests | 96 | 93 | FacePosition |
Laid out differently
Attack- Its command is 57 in 0.8.13.26–0.9.22.13 and 53 in 0.9.22.14–0.9.22.15.
slotis in 0.9.22.14–0.9.22.15 (u8), aftermissile, and not in 0.8.13.26–0.9.22.13.
AttackFrom(vectors: one-on-0-9-22-14)- Its command is 58 in 0.8.13.26–0.9.22.13 and 54 in 0.9.22.14–0.9.22.15.
slotis in 0.9.22.14–0.9.22.15 (u8), aftermissile, and not in 0.8.13.26–0.9.22.13.
Chatspeakeris in 0.9.22.14–0.9.22.15 (u32) at the start, and not in 0.8.13.26–0.9.22.13.audienceis in 0.9.22.14–0.9.22.15 (u32), afterspeaker, and not in 0.8.13.26–0.9.22.13.textLengthis in 0.9.22.14–0.9.22.15 (u32), afteraudience, and not in 0.8.13.26–0.9.22.13.textis text, ended by a zero byte in 0.8.13.26–0.9.22.13 and text, sized by textLength in 0.9.22.14–0.9.22.15.terminatoris in 0.9.22.14–0.9.22.15 (bytes, 1), aftertext, and not in 0.8.13.26–0.9.22.13.
ClientEvent(vectors: buff-on-0-9-22-14, consumable-bought-on-0-9-22-14, critical-strike-on-0-9-22-14, damage-dealt-on-0-9-22-14, damage-taken-on-0-9-22-14, death-assist-on-0-9-22-14, died-on-0-9-22-14, gold-earned-on-0-9-22-14, gold-spent-on-0-9-22-14, heal-cast-on-0-9-22-14, heal-on-0-9-22-14, killing-spree-on-0-9-22-14, one-on-0-9-22-14)- Its command is 110 in 0.8.13.26–0.9.22.13 and 108 in 0.9.22.14–0.9.22.15.
eventtakes 55 playerLeft, 56 playerReconnected, 62 itemBought in 0.9.22.14–0.9.22.15 and not in 0.8.13.26–0.9.22.13.valueis in 0.9.22.14–0.9.22.15 (u32), afterspent, and not in 0.8.13.26–0.9.22.13.heal.unusedis in 0.9.22.14–0.9.22.15 (u32), afterheal.parentScript, and not in 0.8.13.26–0.9.22.13.heal.unusedToois in 0.9.22.14–0.9.22.15 (u32), afterheal.unused, and not in 0.8.13.26–0.9.22.13.effect.unusedis in 0.9.22.14–0.9.22.15 (u32), aftereffect.parentScript, and not in 0.8.13.26–0.9.22.13.effect.unusedToois in 0.9.22.14–0.9.22.15 (u32), aftereffect.unused, and not in 0.8.13.26–0.9.22.13.assist.shareis in 0.9.22.14–0.9.22.15 (f32), afterassist.magical, and not in 0.8.13.26–0.9.22.13.assist.goldis in 0.9.22.14–0.9.22.15 (f32), afterassist.share, and not in 0.8.13.26–0.9.22.13.killis in 0.9.22.14–0.9.22.15 (record), afterassist.gold, and not in 0.8.13.26–0.9.22.13.
CooldownSettokenis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.clientByteis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
CreateChampionskillLevelis in 0.9.22.14–0.9.22.15 (u8), afternode, and not in 0.8.13.26–0.9.22.13.botis in 0.9.22.14–0.9.22.15 (u8), afterside, and not in 0.8.13.26–0.9.22.13.skinis in 0.9.22.14–0.9.22.15 (i32), afterbot, and not in 0.8.13.26–0.9.22.13.assetis text, ended by a zero byte in 0.8.13.26–0.9.22.13 and text, 128 bytes in 0.9.22.14–0.9.22.15.flagis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
CreateNeutralcampAtXis in 0.9.22.14–0.9.22.15 (f32), afteratZ, and not in 0.8.13.26–0.9.22.13.campAtYis in 0.9.22.14–0.9.22.15 (f32), aftercampAtX, and not in 0.8.13.26–0.9.22.13.campAtZis in 0.9.22.14–0.9.22.15 (f32), aftercampAtY, and not in 0.8.13.26–0.9.22.13.
CreateTurret(vectors: one-on-0-9-22-14)atXis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.atYis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.atZis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.assetis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
Damagehowis in 0.9.22.14–0.9.22.15 (1-byte bits) at the start, and not in 0.8.13.26–0.9.22.13.resultis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
EffectAddedrunningForis in 0.9.22.14–0.9.22.15 (f32), aftereffect, and not in 0.8.13.26–0.9.22.13.
InhibitorState(vectors: down-on-0-9-22-14)- Its command is 69 in 0.8.13.26–0.9.22.13 and 65 in 0.9.22.14–0.9.22.15.
durationis u32 in 0.8.13.26–0.9.22.13 and i32 in 0.9.22.14–0.9.22.15.
Loadout(vectors: one-on-0-9-22-14)- Its command is 86 in 0.8.13.26–0.9.22.13 and 83 in 0.9.22.14–0.9.22.15.
runesis 8 × u32 in 0.8.13.26–0.9.22.13 and 30 × u32 in 0.9.22.14–0.9.22.15.
MapPingtargetis in 0.9.22.14–0.9.22.15 (u32), afterz, and not in 0.8.13.26–0.9.22.13.clientIdis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
MissileState(vectors: one-on-0-9-22-14)- Its command is 67 in 0.8.13.26–0.9.22.13 and 63 in 0.9.22.14–0.9.22.15.
keptXis in 0.9.22.14–0.9.22.15 (f32), afteratZ, and not in 0.8.13.26–0.9.22.13.keptYis in 0.9.22.14–0.9.22.15 (f32), afterkeptX, and not in 0.8.13.26–0.9.22.13.keptZis in 0.9.22.14–0.9.22.15 (f32), afterkeptY, and not in 0.8.13.26–0.9.22.13.directionXis in 0.9.22.14–0.9.22.15 (f32), afterkeptZ, and not in 0.8.13.26–0.9.22.13.directionYis in 0.9.22.14–0.9.22.15 (f32), afterdirectionX, and not in 0.8.13.26–0.9.22.13.directionZis in 0.9.22.14–0.9.22.15 (f32), afterdirectionY, and not in 0.8.13.26–0.9.22.13.howis in 0.9.22.14–0.9.22.15 (1-byte bits), afterdirectionZ, and not in 0.8.13.26–0.9.22.13.
ParticlesCreated(vectors: one-on-0-9-22-14)groupCountis in 0.9.22.14–0.9.22.15 (u8) at the start, and not in 0.8.13.26–0.9.22.13.groupsis in 0.9.22.14–0.9.22.15 (count in groupCount × ParticleGroup), aftergroupCount, and not in 0.8.13.26–0.9.22.13.particleis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.flagsis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.unknownis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.boundTois in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.effectis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.unknownBis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.atXis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.atYis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.atZis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.targetis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.unknownCis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
PlayAnimation(vectors: one-on-0-9-22-14)flagshaslockedat bit 6 in 0.9.22.14–0.9.22.15, and not in 0.8.13.26–0.9.22.13.flagshasfadeAtEndat bit 7 in 0.9.22.14–0.9.22.15, and not in 0.8.13.26–0.9.22.13.flags.unusedis at bit 6, 26 bits wide, in 0.8.13.26–0.9.22.13 and at bit 8, 24 bits wide, in 0.9.22.14–0.9.22.15.
RegionAdded- Its command is 89 in 0.8.13.26–0.9.22.13 and 86 in 0.9.22.14–0.9.22.15.
otherExtrais in 0.9.22.14–0.9.22.15 (u32), afterextra, and not in 0.8.13.26–0.9.22.13.
RegionAttached- Its command is 88 in 0.8.13.26–0.9.22.13 and 85 in 0.9.22.14–0.9.22.15.
otherExtrais in 0.9.22.14–0.9.22.15 (u32), afterextra, and not in 0.8.13.26–0.9.22.13.
SpawnFromBarracks(vectors: one-on-0-9-22-14)- Its command is 53 in 0.8.13.26–0.9.22.13 and 49 in 0.9.22.14–0.9.22.15.
unreadis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
SpawnUnit(vectors: one-on-0-9-22-14)- Its command is 90 in 0.8.13.26–0.9.22.13 and 87 in 0.9.22.14–0.9.22.15.
teamis u32 in 0.8.13.26–0.9.22.13 and 4-byte bits in 0.9.22.14–0.9.22.15.teamhasteamat bit 0 in 0.9.22.14–0.9.22.15, and not in 0.8.13.26–0.9.22.13.teamhasunusedat bit 9 in 0.9.22.14–0.9.22.15, and not in 0.8.13.26–0.9.22.13.flagsis in 0.9.22.14–0.9.22.15 (1-byte bits), afterteam, and not in 0.8.13.26–0.9.22.13.
SpellCooldownunreadis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
StopAttackhowis in 0.9.22.14–0.9.22.15 (1-byte bits) at the start, and not in 0.8.13.26–0.9.22.13.keepAnimatingis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.forceCastis in 0.8.13.26–0.9.22.13 and not in 0.9.22.14–0.9.22.15.
UnitStopped(vectors: one-on-0-9-22-14)syncIdis in 0.9.22.14–0.9.22.15 (i32), afterfacingZ, and not in 0.8.13.26–0.9.22.13.
VersionSync- Its command is 72 in 0.8.13.26–0.9.22.13 and 68 in 0.9.22.14–0.9.22.15.
mapis in 0.9.22.14–0.9.22.15 (i32), afteragreement, and not in 0.8.13.26–0.9.22.13.seatsis in 0.9.22.14–0.9.22.15 (12 × Seat), aftermap, and not in 0.8.13.26–0.9.22.13.buildis text, ended by a zero byte in 0.8.13.26–0.9.22.13 and text, 256 bytes in 0.9.22.14–0.9.22.15.
Chapters
- In the objects chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: No region id stands for no region.
- In the objects chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client acts on that
Registeredalone and ignores every other, so it pairs no other player’s player id with a client id. - In the objects chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client given a create message for a net id it already holds stops.
- In the objects chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: Map 1 holds the six
Barracksnames,HQ_T1,HQ_T2, the six spawn points named__P_Order_Spawn_Barracks__and__P_Chaos_Spawn_Barracks__withC01,L01orR01, and the shopsOrderShop01andChaosShop, whose identifier is 4279618595. - In the objects chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15:
CreateTurretcreates a turret of its own at the place its body gives, rather than naming one the map holds. - In the ordering chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client compares no numbers on movements: it takes every path as it arrives, whatever
syncIdit carries. - In the ordering chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client sends a view report again until a server answers with its number.
- In the space chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A champion is created facing +z, whatever its map’s table of spawn positions says, and so is a monster.
- In the space chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client loads the map its own settings name, map 1 where they name none, and has data for map 1 alone, Summoner’s Rift.
- In the time chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client’s match clock starts at 0 as the client finishes loading, and runs on the client’s own timer from then; a
ClockSyncsets it wherever it stands. - In the values chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A cast’s slot also takes 64, for a basic attack.
- In the values chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A champion’s own book ends at slot 22.
- In the values chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A champion’s inventory ends at slot 14, and holds neither a trinket nor an item for recalling.
- In the data chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: The client has map 1 alone.
- In the data chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A name’s opening says what the object is:
Turreta turret,Barracksan inhibitor,HQ_a nexus. - In the data chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A champion begins on its side’s spawn point itself, or at (6000, 0, 6000) on a map with none.
- In the data chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: No map adds items of its own, and there are no figures for a whole mode.
- In the joining chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client whose command line holds no double quote ends.
- In the joining chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client waits for the answer naming its own player id as long as it takes, and offers its player no choice.
- In the joining chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15:
VersionSyncnames neither the map nor anyone at the match: a client loads the map its own configuration names (see The client’s data). - In the vision chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15:
EnterSightstates nothing but the unit it names, and only marks that unit as in view. - In the vision chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15:
LeaveLocalSighttakes a unit out of what one client alone can see, and leaves it held. - In the vision chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15:
GoldGainedshows floating gold only for the client’s own champion. - In the movement chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client reads nothing of
EnterSight. - In the movement chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A movement with no points empties the unit’s path.
- In the movement chapter, a passage holds for 0.9.22.14–0.9.22.15 and not 0.8.13.26–0.9.22.13: A server moves the champion by answering the
MoveOrderwith aWaypointGroup, and the client returns that group’ssyncIdin aWaypointAck(see Ordering). - In the replication chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A server grants gold with
GoldGained. - In the match chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15:
StatTickasks every unit’s stats to advance by that span. - In the match chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: A client whose connection drops, while loading or in play, shows its player that it was disconnected, and neither connects again nor leaves.
- In the combat chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: Result 0 of
Damageis a notice a client shows for only one in every thirty it receives, and result 5 a miss, shown for its player’s own unit. - In the effects chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15:
ParticlesCreatedstarts one particle, named by the message’s own id. - In the shop chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: An item’s own data says whether it can be bought.
- In the shop chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: Opening the shop sends nothing either.
- In the shop chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: For an item built from others, a client asks only where a slot is free or holds one of its parts, and where the champion’s gold covers what remains after the parts it holds.
- In the communication chapter, a passage holds for 0.9.22.14–0.9.22.15 and not 0.8.13.26–0.9.22.13:
VoiceEventcarries only the event’s name and asks for no answer. - In the interface chapter, a passage holds for 0.8.13.26–0.9.22.13 and not 0.9.22.14–0.9.22.15: No message locks a client’s input, in either direction.
- In the interface chapter, a passage holds for 0.9.22.14–0.9.22.15 and not 0.8.13.26–0.9.22.13: A server locks and unlocks input with
InputLockToggledalone.
Only notes
These read the same on the wire, and only their notes change. What each says in 0.9.22.14–0.9.22.15:
Autocast,slot: “The slot cast by itself, from -1 to 44. A client takes a value outside that range as it stands. What -1 does is not recorded.”, where 0.8.13.26–0.9.22.13 has “The slot cast by itself, from -1 to 22. A client takes a value outside that range as it stands. What -1 does is not recorded.”CastSpell,how.slot: “Which slot is being cast from, from 0 to 44. A client still sends a larger slot, its low seven bits only.”, where 0.8.13.26–0.9.22.13 has “Which slot is being cast from, from 0 to 22. A client still sends a larger slot, its low seven bits only.”ExperienceGained,unit: “The unit granted it, a champion. A client fails for any other unit it holds, and does nothing for a unit it does not know.”, where 0.8.13.26–0.9.22.13 has “The unit granted it, one with a mind, such as a champion or a minion. A client does nothing for a unit it does not know.”ItemAdded, its layout: “There is no charges field: a client takes an item’s charges from the item’s own data. A client applies it only to a champion’s item slots.”, where 0.8.13.26–0.9.22.13 has “There is no charges field: a client takes an item’s charges from the item’s own data. A server sends it to units nobody is buying for.”ItemAdded,slot: “The slot it went to, 0 to 36. A larger value than 36 has no defined effect.”, where 0.8.13.26–0.9.22.13 has “The slot it went to, 0 to 14. A larger value than 14 has no defined effect.”PingPlaced, its layout: “Where target is a unit it holds, of a kind that takes notices, a client shows a notice for it, but not again for the next ping on the same target; it keeps the last target of each side apart. The header names the champion that placed the ping, as source does.”, where 0.8.13.26–0.9.22.13 has “A client marks atX and atZ on each of its two map views, and only while it shows a map. The header can carry zero.”PingPlaced,atY: “Its height, in world units. A client does not use it to place the ping.”, where 0.8.13.26–0.9.22.13 has “A client reads nothing here.”PingPlaced,target: “The unit pinged, or zero where a place was pinged instead.”, where 0.8.13.26–0.9.22.13 has “A client reads nothing here.”PingPlaced,source: “The unit that placed it.”, where 0.8.13.26–0.9.22.13 has “A client reads nothing here.”RemoveItemAnswer,slot: “Which slot, 0 to 36. A larger value than 36 has no defined effect.”, where 0.8.13.26–0.9.22.13 has “Which slot, 0 to 14. A larger value than 14 has no defined effect.”SwapItemsAnswer,from: “The slot the item left, 0 to 36. A client swaps the two slots named whatever their values, so a server keeps both within range.”, where 0.8.13.26–0.9.22.13 has “The slot the item left, 0 to 14. A client swaps the two slots named whatever their values, so a server keeps both within range.”SwapItemsAnswer,to: “The slot it went to, 0 to 36. A client swaps the two slots named whatever their values, so a server keeps both within range.”, where 0.8.13.26–0.9.22.13 has “The slot it went to, 0 to 14. A client swaps the two slots named whatever their values, so a server keeps both within range.”UnitDied, its layout: “A client does nothing for a unit already dead. Otherwise it stops the unit’s cast and attack and, where killer is nonzero, puts the unit down for stayDown, whether or not it knows killer, and shows what that kind of unit shows for a kill, for a minion only where killer is on another side.”, where 0.8.13.26–0.9.22.13 has “A client does nothing more for a unit already dead, or where killer is zero. Otherwise, whether or not it knows killer, it puts the unit down for stayDown: dead, with no health, its movement, cast and attack stopped. For a minion whose killer, or the killer’s owner, is the player’s own champion, it then shows a kill notice.”
0.9.22.16–0.9.25.20
Client builds from 0.9.22.16 up to, not including, 0.9.25.21. Patch notes: V0.9.22.16, V0.9.22.18.
| Build checked | Passed | Failed | Skipped | Commit | Date |
|---|---|---|---|---|---|
| 0.9.22.16 | 9 | 0 | 5 | e96264e | 2026-11-04 |
| 0.9.22.18 | 9 | 0 | 5 | e82b321 | 2026-11-04 |
Other ranges of this book have these, and this one does not, so what the chapters say of them says nothing of it: FadeMinions, GreyscaleWhenDead, HudDisabled, HudHighlightToggled, MinimapHighlighted, NexusIdle, NexusSkin, SpellNameChanged, SpellNumbers, TutorialChatLine, VoiceEventDone, VolumeMuted, WorldEvent.
Every message of this range (148)
Against 0.9.22.14–0.9.22.15
Where a build from 0.9.22.16 up to, not including, 0.9.25.21 differs from one from 0.9.22.14 up to, not including, 0.9.22.16. Anything not named here is the same in both.
In 0.9.22.16–0.9.25.20, not in 0.9.22.14–0.9.22.15
| Message | Sent by | Command | What it does |
|---|---|---|---|
HudHighlighted | server | 157 on events | Light up part of the screen, as a tutorial does |
InputLock | server | 149 on events | Lock or unlock a kind of input on a client |
InputLockChanged | client | 148 on requests | What a client sends after locking or unlocking kinds of its own input |
MissileHits | server | 163 on events | Say which units a missile struck |
ObjectiveHidden | server | 152 on events | Hide the objective panel |
ObjectiveReplaced | server | 153 on events | Replace the text of the objective panel, showing the panel if it is hidden |
ObjectiveShown | server | 151 on events | Show the objective panel with a text |
ShopHighlighted | server | 158 on events | Make a shop element blink once, as a tutorial does |
SideTextHidden | server | 155 on events | Close the box of text SideTextShown opened |
SideTextRefreshed | server | 156 on events | Change the text in the box SideTextShown opened, in place |
SideTextShown | server | 154 on events | Show a box of text at the right edge of the screen |
SurrenderFailed | server | 161 on events | What a server sends when a surrender vote fails, to say how long until another can be called |
SurrenderStatus | server | 162 on events | Tell a side where its surrender vote stands |
SurrenderVote | client | 159 on requests | Vote on surrendering |
SurrenderVoteCalled | server | 160 on events | Open a surrender vote, or to report one already open |
TutorialShopOpened | client | 150 on requests | What a client sends as its player opens the shop |
Laid out differently
ClientEvent(vectors: buff-on-0-9-22-16, consumable-bought-on-0-9-22-16, critical-strike-on-0-9-22-16, damage-dealt-on-0-9-22-16, damage-taken-on-0-9-22-16, death-assist-on-0-9-22-16, died-on-0-9-22-16, gold-earned-on-0-9-22-16, gold-spent-on-0-9-22-16, heal-cast-on-0-9-22-16, heal-on-0-9-22-16, item-bought-on-0-9-22-16, killing-spree-on-0-9-22-16, one-on-0-9-22-16)eventtakes 63 surrenderVoteStarted, 64 surrenderVoteCast, 65 surrenderAlreadyVoted, 66 surrenderCountdown, 67 surrenderFailed, 68 surrenderTooEarly, 69 surrenderAgreed, 70 surrenderVoteSpam, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo in 0.9.22.16–0.9.25.20 and not in 0.9.22.14–0.9.22.15.valueis present when event = 20 in 0.9.22.14–0.9.22.15, and present when event = 20 or 62 in 0.9.22.16–0.9.25.20.
DeathHistory(vectors: one-on-0-9-22-16)entries[].eventtakes 66 surrenderCountdown, 71 minionsSpawned, 72 welcome, 73 startNoticeTwo in 0.9.22.16–0.9.25.20 and not in 0.9.22.14–0.9.22.15.entries[].valueis present when event = 20 in 0.9.22.14–0.9.22.15, and present when event = 20 or 62 in 0.9.22.16–0.9.25.20.
MissileReportunknownAXis in 0.9.22.16–0.9.25.20 (f32), afteratZ, and not in 0.9.22.14–0.9.22.15.unknownAYis in 0.9.22.16–0.9.25.20 (f32), afterunknownAX, and not in 0.9.22.14–0.9.22.15.unknownAZis in 0.9.22.16–0.9.25.20 (f32), afterunknownAY, and not in 0.9.22.14–0.9.22.15.travelXis in 0.9.22.16–0.9.25.20 (f32), afterunknownAZ, and not in 0.9.22.14–0.9.22.15.travelYis in 0.9.22.16–0.9.25.20 (f32), aftertravelX, and not in 0.9.22.14–0.9.22.15.travelZis in 0.9.22.16–0.9.25.20 (f32), aftertravelY, and not in 0.9.22.14–0.9.22.15.velocityXis in 0.9.22.16–0.9.25.20 (f32), aftertravelZ, and not in 0.9.22.14–0.9.22.15.velocityYis in 0.9.22.16–0.9.25.20 (f32), aftervelocityX, and not in 0.9.22.14–0.9.22.15.velocityZis in 0.9.22.16–0.9.25.20 (f32), aftervelocityY, and not in 0.9.22.14–0.9.22.15.endXis in 0.9.22.16–0.9.25.20 (f32), aftervelocityZ, and not in 0.9.22.14–0.9.22.15.endYis in 0.9.22.16–0.9.25.20 (f32), afterendX, and not in 0.9.22.14–0.9.22.15.endZis in 0.9.22.16–0.9.25.20 (f32), afterendY, and not in 0.9.22.14–0.9.22.15.targetXis in 0.9.22.16–0.9.25.20 (f32), afterendZ, and not in 0.9.22.14–0.9.22.15.targetYis in 0.9.22.16–0.9.25.20 (f32), aftertargetX, and not in 0.9.22.14–0.9.22.15.targetZis in 0.9.22.16–0.9.25.20 (f32), aftertargetY, and not in 0.9.22.14–0.9.22.15.castis bytes, 128 in 0.9.22.14–0.9.22.15 and bytes, sized by remaining in 0.9.22.16–0.9.25.20.keptXis in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.keptYis in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.keptZis in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.directionXis in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.directionYis in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.directionZis in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.
MissileStatecasterAtXis in 0.9.22.16–0.9.25.20 (f32), afteratZ, and not in 0.9.22.14–0.9.22.15.casterAtYis in 0.9.22.16–0.9.25.20 (f32), aftercasterAtX, and not in 0.9.22.14–0.9.22.15.casterAtZis in 0.9.22.16–0.9.25.20 (f32), aftercasterAtY, and not in 0.9.22.14–0.9.22.15.facingXis in 0.9.22.16–0.9.25.20 (f32), aftercasterAtZ, and not in 0.9.22.14–0.9.22.15.facingYis in 0.9.22.16–0.9.25.20 (f32), afterfacingX, and not in 0.9.22.14–0.9.22.15.facingZis in 0.9.22.16–0.9.25.20 (f32), afterfacingY, and not in 0.9.22.14–0.9.22.15.velocityXis in 0.9.22.16–0.9.25.20 (f32), afterfacingZ, and not in 0.9.22.14–0.9.22.15.velocityYis in 0.9.22.16–0.9.25.20 (f32), aftervelocityX, and not in 0.9.22.14–0.9.22.15.velocityZis in 0.9.22.16–0.9.25.20 (f32), aftervelocityY, and not in 0.9.22.14–0.9.22.15.endXis in 0.9.22.16–0.9.25.20 (f32), aftervelocityZ, and not in 0.9.22.14–0.9.22.15.endYis in 0.9.22.16–0.9.25.20 (f32), afterendX, and not in 0.9.22.14–0.9.22.15.endZis in 0.9.22.16–0.9.25.20 (f32), afterendY, and not in 0.9.22.14–0.9.22.15.unitAtXis in 0.9.22.16–0.9.25.20 (f32), afterendZ, and not in 0.9.22.14–0.9.22.15.unitAtYis in 0.9.22.16–0.9.25.20 (f32), afterunitAtX, and not in 0.9.22.14–0.9.22.15.unitAtZis in 0.9.22.16–0.9.25.20 (f32), afterunitAtY, and not in 0.9.22.14–0.9.22.15.hownames bit 0flagin 0.9.22.14–0.9.22.15 andbouncedin 0.9.22.16–0.9.25.20.keptXis in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.keptYis in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.keptZis in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.directionXis in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.directionYis in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.directionZis in 0.9.22.14–0.9.22.15 and not in 0.9.22.16–0.9.25.20.
Chapters
- In the votes chapter, a passage holds for 0.9.22.14–0.9.22.15 and not 0.9.22.16–0.9.25.20: There is no surrender vote: a client sends and takes no message about one.
- In the votes chapter, a passage holds for 0.9.22.16–0.9.25.20 and not 0.9.22.14–0.9.22.15: A client has no panel for the vote.
- In the interface chapter, a passage holds for 0.9.22.14–0.9.22.15 and not 0.9.22.16–0.9.25.20: A server locks and unlocks input with
InputLockToggledalone. - In the interface chapter, a passage holds for 0.9.22.16–0.9.25.20 and not 0.9.22.14–0.9.22.15: A client locks and unlocks its own input too, and tells the server each time:
InputLocksFlippedfor the locks it flipped, as when a camera move a script drives starts and ends, andInputLockChangedfor the locks it set or cleared.
Only notes
These read the same on the wire, and only their notes change. What each says in 0.9.22.16–0.9.25.20:
TutorialPopup,text: “A key into the client’s own text for the popup’s body. The text ends at its first zero byte, which falls within the field.”, where 0.9.22.14–0.9.22.15 has “A key into the client’s own text for the popup’s body. A client copies the whole field first, so the text ends at a zero byte within it.”
0.9.25.21–0.9.25.23
Client builds from 0.9.25.21 up to, not including, 0.9.25.24. Patch notes: V0.9.25.21.
| Build checked | Passed | Failed | Skipped | Commit | Date |
|---|---|---|---|---|---|
| 0.9.25.21 | 10 | 0 | 4 | d82cfce | 2026-11-04 |
Other ranges of this book have these, and this one does not, so what the chapters say of them says nothing of it: FadeMinions, GreyscaleWhenDead, HudDisabled, NexusIdle, NexusSkin, SpellNameChanged, WorldEvent.
Every message of this range (153)
Against 0.9.22.16–0.9.25.20
Where a build from 0.9.25.21 up to, not including, 0.9.25.24 differs from one from 0.9.22.16 up to, not including, 0.9.25.21. Anything not named here is the same in both.
In 0.9.25.21–0.9.25.23, not in 0.9.22.16–0.9.25.20
| Message | Sent by | Command | What it does |
|---|---|---|---|
HudHighlightToggled | server | 166 on events | Light up part of the screen, or to put it out |
MinimapHighlighted | server | 165 on events | Make part of the minimap blink, as a tutorial does |
SpellNumbers | server | 168 on events | Fill in the numbers a client shows beside a unit’s spells |
TutorialChatLine | server | 167 on events | Put a line of the client’s own text in its chat, as a line from the game |
VoiceEventDone | client | 164 on requests | What a client sends once a voice event (VoiceEvent) that asked for it has played |
VolumeMuted | server | 169 on events | Mute or unmute one kind of sound |
In 0.9.22.16–0.9.25.20, not in 0.9.25.21–0.9.25.23
| Message | Sent by | Command it had |
|---|---|---|
SurrenderFailed | server | 161 on events |
Laid out differently
ClientEvent(vectors: buff-on-0-9-25-21, consumable-bought-on-0-9-25-21, critical-strike-on-0-9-25-21, damage-dealt-on-0-9-25-21, damage-taken-on-0-9-25-21, death-assist-on-0-9-25-21, died-on-0-9-25-21, gold-earned-on-0-9-25-21, gold-spent-on-0-9-25-21, heal-cast-on-0-9-25-21, heal-on-0-9-25-21, item-bought-on-0-9-25-21, killing-spree-on-0-9-25-21, one-on-0-9-25-21)assist.creditedis in 0.9.25.21–0.9.25.23 (u32), afterassist.gold, and not in 0.9.22.16–0.9.25.20.
CreateChampion(vectors: one-on-0-9-25-21)spawnIndexis in 0.9.25.21–0.9.25.23 (u8), afterbot, and not in 0.9.22.16–0.9.25.20.
DeathHistory(vectors: one-on-0-9-25-21)entries[].assist.creditedis in 0.9.25.21–0.9.25.23 (u32), afterentries[].assist.gold, and not in 0.9.22.16–0.9.25.20.
EffectReplacedrunningForis in 0.9.25.21–0.9.25.23 (f32), afterslot, and not in 0.9.22.16–0.9.25.20.
MoveCamerahowis in 0.9.25.21–0.9.25.23 (1-byte bits) at the start, and not in 0.9.22.16–0.9.25.20.
SurrenderVoteCalledhownames bit 1castin 0.9.22.16–0.9.25.20 andopenTheMenuin 0.9.25.21–0.9.25.23.howhascountAsYesat bit 0 in 0.9.25.21–0.9.25.23, and not in 0.9.22.16–0.9.25.20.how.unusedis at bit 0, 1 bits wide, in 0.9.22.16–0.9.25.20 and at bit 2, 6 bits wide, in 0.9.25.21–0.9.25.23.howhasunusedHighat bit 2 in 0.9.22.16–0.9.25.20, and not in 0.9.25.21–0.9.25.23.seatsis in 0.9.25.21–0.9.25.23 (u8), afteragainst, and not in 0.9.22.16–0.9.25.20.closesInis in 0.9.25.21–0.9.25.23 (f32), afterside, and not in 0.9.22.16–0.9.25.20.
VoiceEventcallbackis in 0.9.25.21–0.9.25.23 (u8), afterevent, and not in 0.9.22.16–0.9.25.20.
Chapters
- In the communication chapter, a passage holds for 0.9.22.16–0.9.25.20 and not 0.9.25.21–0.9.25.23:
VoiceEventcarries only the event’s name and asks for no answer. - In the votes chapter, a passage holds for 0.9.22.16–0.9.25.20 and not 0.9.25.21–0.9.25.23: A client has no panel for the vote.
- In the votes chapter, a passage holds for 0.9.25.21–0.9.25.23 and not 0.9.22.16–0.9.25.20:
SurrenderVoteCalledshows the caller’s vote to that side and, where it says the vote opens, opens the vote’s panel for that side.
Only notes
These read the same on the wire, and only their notes change. What each says in 0.9.25.21–0.9.25.23:
ShopHighlighted,element: “A shop element blinks once, where the shop window is open. Element 0 is the buy button, 1 the sell button, 2 the shop item number names, 3 the item second names within the category number names, and 4 the recommended item number names. A larger value than 4 has no defined effect.”, where 0.9.22.16–0.9.25.20 has “A shop element blinks once, where the shop window is open. Element 0 is the buy button, 1 the sell button, 2 the shop item number names, and 3 the item second names within the category number names. A client fails for any larger value.”
0.9.25.24–0.9.25.35
Client builds from 0.9.25.24 up to, not including, 0.9.25.36. Patch notes: V0.9.25.24.
| Build checked | Passed | Failed | Skipped | Commit | Date |
|---|---|---|---|---|---|
| 0.9.25.24 | 10 | 0 | 4 | 186b1bf | 2026-11-04 |
Other ranges of this book have these, and this one does not, so what the chapters say of them says nothing of it: FadeMinions, GreyscaleWhenDead, HudDisabled, NexusIdle, NexusSkin, SpellNameChanged.
Every message of this range (154)
Against 0.9.25.21–0.9.25.23
Where a build from 0.9.25.24 up to, not including, 0.9.25.36 differs from one from 0.9.25.21 up to, not including, 0.9.25.24. Anything not named here is the same in both.
In 0.9.25.24–0.9.25.35, not in 0.9.25.21–0.9.25.23
| Message | Sent by | Command | What it does |
|---|---|---|---|
WorldEvent | server | 170 on events | Say something happened that the whole match is told about |
Laid out differently
CameralookAtXis in 0.9.25.24–0.9.25.35 (f32) at the start, and not in 0.9.25.21–0.9.25.23.lookAtYis in 0.9.25.24–0.9.25.35 (f32), afterlookAtX, and not in 0.9.25.21–0.9.25.23.lookAtZis in 0.9.25.24–0.9.25.35 (f32), afterlookAtY, and not in 0.9.25.21–0.9.25.23.atXis in 0.9.25.21–0.9.25.23 and not in 0.9.25.24–0.9.25.35.atYis in 0.9.25.21–0.9.25.23 and not in 0.9.25.24–0.9.25.35.atZis in 0.9.25.21–0.9.25.23 and not in 0.9.25.24–0.9.25.35.facingXis in 0.9.25.21–0.9.25.23 and not in 0.9.25.24–0.9.25.35.facingYis in 0.9.25.21–0.9.25.23 and not in 0.9.25.24–0.9.25.35.facingZis in 0.9.25.21–0.9.25.23 and not in 0.9.25.24–0.9.25.35.
Damagehownames bit 7soundin 0.9.25.21–0.9.25.23 andunusedin 0.9.25.24–0.9.25.35.
Chapters
- In the transport chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client asks for 7 channels.
- In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A region id of 0 names no region: given a
RegionAddedcarrying 0, a client gives the region an id of its own, its own node in the top byte and a count below it, which no message from a server can name. - In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Registration pairs each player id with a client id: a server answers a client’s
Registerwith oneRegisteredfor every seat. - In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A bot’s champion carries 4294967295.
- In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client that still holds the earlier object gives the net id to the new one, so messages naming it reach the new object, and removing either leaves the id naming neither.
- In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Every object a map places carries the identifier its name gives, turrets, navigation points and props among them.
- In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: | Map | Holds | | –– | ———————————————————————————————————————————————————————————————————————————–– | | 1, 2 | the six
Barracksnames,HQ_T1,HQ_T2,orderShop01,chaosShop01, the six spawn points named__P_…, and turrets namedTurret_T1_…andTurret_T2_…,Turret_OrderTurretShrineandTurret_ChaosTurretShrineamong them | | 3 |Barracks_T1_C1,Barracks_T2_C1,HQ_T1,HQ_T2,OrderShop01,ChaosShop01,____P_Chaos_Spawn_Barracks__C01, and turrets,Turret_T1_C_08among them | - In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23:
CreateTurretgives a net id to a turret the map already holds, matched by name. - In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23:
CreateTurretmatches a turret’s name without regard to case, and does nothing where the map holds no turret of that name. - In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client removes a nexus about 4 seconds after
BuildingDiednames it, and can fail as it does. - In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client sends a
WaypointGroup’sWaypointAckbefore it reads any path, whatever units the paths name. - In the ordering chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A server can instead send
Replicationreliably on the events channel. - In the ordering chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23:
WaypointGroup,WaypointGroupAtSpeed,Path,PathWithSpeed,EnterSight, andUnitStoppedandSpellCastAnswerwhere they carry one, share one count per unit, from -1. - In the ordering chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Nothing answers a view report: a client sends its latest report again, twice the round trip time plus 1/30 of a second apart, for as long as the match runs.
- In the ordering chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client also answers each
PathandPathWithSpeed, taken or not, with aWaypointAckcarrying itssyncId. - In the space chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A champion faces as its map’s table of spawn positions says (see
CreateChampion). - In the space chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client has data for maps 1, 2 and 3.
- In the time chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client’s match clock does not run until the first
ClockSyncarrives, which sets it. - In the time chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23:
GameSpeedsets the pace of the match clock, and a hold sets the pace to 0 until play resumes. - In the time chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client runs no clock but the match clock, and takes whatever speed
GameSpeedgives. - In the time chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A
GameSpeedthat arrives during a hold sets the match clock running again at once. - In the values chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A cast’s slot also takes 64 to 70, for a basic attack.
- In the values chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A champion’s own book ends at slot 44.
- In the values chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A champion’s inventory ends at slot 36, and a player sees and uses only slots 0 to 5.
- In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: The client has maps 1, 2 and 3.
- In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23:
CreateTurretnames a building by its name alone, compared without regard to case, and one naming no building does nothing. - In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A name’s opening says what the object is, the first match winning and a minion spawner’s tested before
Barracks:Turreta turret,Barracksan inhibitor,HQ_a nexus. - In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A champion begins at its side’s spawn point moved by an offset from
DATA/Characters/HeroSpawnOffsets.inibin, read from the sectionOrder<n>orChaos<n>under the keysPos<i>andFacing<i>, where i is one more thanCreateChampion’s spawn index. - In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Map 3 alone adds an
Items.inibin. - In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Any whitespace separates the words of the fourth argument.
- In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client waits 30 seconds for the answer naming its own player id.
- In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23:
VersionSyncnames the map to load and everyone at the match. - In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client writes zero where its player id goes in
LoadingProgress. - In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A server MUST put the seat’s player id in
SeatLoadProgress: the loading screen shows a seat’s card from theVersionSyncseat with that id. - In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client answers a batch as soon as it arrives, within the run or not, and never answers one naming a unit it does not hold.
- In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client whose connection drops before play begins ends rather than connecting again.
- In the vision chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23:
EnterSightstates where the unit stands or which path it walks, and nothing of its looks, shields, health or resource. - In the vision chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23:
GoldGainednaming the client’s own champion, with an amount above 0 and a source the client holds, shows the gold over the source. - In the vision chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Any other
GoldGainedshows the gold gained or lost over the unit it names, whichever unit that is. - In the vision chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23:
LevelUpshows its effect over any unit the client can see. - In the movement chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A unit coming into sight while standing carries its place and facing in
EnterSightinstead. - In the movement chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A sending end MUST NOT send a movement with no points; a receiving end refuses it.
- In the movement chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client reads nothing after a refused movement in its group, and still answers the group.
- In the movement chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client takes a
WaypointGroupor aWaypointGroupAtSpeedon channels 2, 3 and 4 alike. - In the movement chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client sends the
WaypointAckbefore reading any movement in the group, and lists no units in it. - In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: The groups follow in the order 0 to 4, and nothing gives a group’s length: each value is four bytes, so a group takes four bytes for its set of values and four for each bit that set has set.
- In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A value that says yes or no is an integer, 1 for yes and 0 for no.
- In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A prop answers to no table, and a client takes nothing a batch carries for one.
- In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: The building table is the same on every map.
- In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Each row also gives the type a value is written in.
- In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: ## A champion | Group | Bits | Value | Type | | —– | –––– | ———————————————————————————————–– | —– | | 0 | 0 | Experience | float | | 0 | 1 | Gold in hand | float | | 0 | 2 to 3 | Which slots can be cast from: the champion’s own, then the second set | u32 | | 0 | 4 to 7 | What the spell in slots 0 to 3 costs | float | | 0 | 8 to 11 | What the spell in slots 41 to 44 costs | float | | 0 | 12 to 13 | What the spell in slots 0 and 1 of the second set costs | float | | 1 | 0 to 1 | Health and resource as they stand | float | | 1 | 2 to 3 | Health and resource at their greatest | float | | 1 | 4 | What the champion is doing, as a set of bits | u32 | | 1 | 5 to 8 | Whether it is proof against spells, proof against all harm, targetable, and proof against strikes | u32 | | 2 | 0 to 1 | Whether it is proof against strikes, then against spells, as group 1 bits 8 and 5 | u32 | | 2 | 2 | Damage it deals by striking | float | | 2 | 3 | Damage its spells deal before modifiers | float | | 2 | 4 | How often it turns a blow aside | float | | 2 | 5 | Its size | float | | 2 | 6 | How often it strikes critically | float | | 2 | 7 to 8 | Armour and spell resistance | float | | 2 | 9 to 10 | How fast health and resource return | float | | 2 | 11 | How fast it moves | float | | 2 | 12 | How far it strikes from | float | | 2 | 13 to 14 | Flat and percent modifiers on the damage it strikes with | float | | 2 | 15 to 16 | Flat and percent modifiers on its spells’ damage | float | | 2 | 17 to 18 | Flat and percent reduction of the spell damage it takes | float | | 2 | 19 | A multiplier on how fast it strikes | float | | 2 | 20 | A flat addition to how far it casts | float | | 2 | 21 | A modifier on its cooldowns | float | | 3 | 0 to 1 | A percent and a flat addition to how far it sees | float | | 3 | 2 | Level | u32 | ## A turret | Group | Bits | Value | Type | | —– | –––– | –––––––––––––––––––––––––––– | —– | | 1 | 0 | Damage it deals by striking | float | | 1 | 1 to 2 | Armour and spell resistance | float | | 1 | 3 | How fast it moves | float | | 1 | 4 | A multiplier on how fast it strikes | float | | 1 | 5 | Its size | float | | 1 | 6 to 7 | Flat and percent modifiers on the damage it strikes with | float | | 1 | 8 to 9 | Flat and percent modifiers on its spells’ damage | float | | 1 | 10 to 11 | How fast health and resource return | float | | 1 | 12 to 13 | Health as it stands, then at its greatest | float | | 3 | 0 to 1 | A percent and a flat addition to how far it sees | float | ## A minion, and a unit belonging to no side | Group | Bits | Value | Type | | —– | –––– | ———————————————————————————————–– | —– | | 1 | 0 to 1 | Health as it stands, then at its greatest | float | | 1 | 2 to 3 | Whether it is proof against strikes, then against spells | u32 | | 1 | 4 | What the unit is doing, as a set of bits | u32 | | 1 | 5 to 8 | Whether it is proof against spells, proof against all harm, targetable, and proof against strikes | u32 | | 1 | 9 | Damage it deals by striking | float | | 1 | 10 to 11 | Armour and spell resistance | float | | 1 | 12 | How fast it moves | float | | 1 | 13 | A multiplier on how fast it strikes | float | | 1 | 14 | Its size | float | | 1 | 15 to 16 | Flat and percent modifiers on the damage it strikes with | float | | 1 | 17 to 18 | Flat and percent modifiers on its spells’ damage | float | | 1 | 19 to 20 | How fast health and resource return | float | | 3 | 0 to 1 | A percent and a flat addition to how far it sees | float | ## A building Inhibitors, nexuses and the buildings minions come from share one table.
- In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A server grants experience with
ExperienceGainedand gold withGoldGained. - In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client shows the speed
GameSpeedsets over its champion. - In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: The speed
GameSpeedsets takes effect at once: sent during a hold, it ends the hold, and aResumedafter it changes nothing. - In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: No unit advances for
StatTick. - In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client reads nothing from
Paused. - In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client reads nothing from
Resumed. - In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client also leaves as one abandoning as its player declines to reconnect or cancels a reconnection under way, and as its player dismisses the notice that it was dropped for being away.
- In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client shows a notice in chat for
PlayerDisconnected. - In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client started again for a match in progress knows nothing of it, and joins as at the start: a server takes it through Joining a match from registering to
StartGame, with a spawn run that states the field as it stands, and aClockSync. - In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client sends
ReconnectedInMatchon every connection it makes, the first included, with a byte that is 0 where the match is in play and 1 otherwise. - In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client dropped during play connects again only where its player agrees: for the reason 0 it asks, and on a yes connects again, showing that it is reconnecting until it is back or its player cancels.
- In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client gives up on a connection where a reliable message it sent goes unacknowledged for 30 seconds, while loading and in play alike.
- In the combat chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client moves the attacker to the place
AttackFromgives only where it stands more than 400 units from it. - In the combat chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23:
Damageshows a figure for the results that carry one, normal and critical; zero is the result that shows the unit as invulnerable, not a plain hit. - In the combat chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Of the other results of
Damage, 1 shows nothing, 2 a dodge and 5 a miss; 3 is critical, and 4 and any above 5 are normal. - In the combat chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23:
TargetHeldChampionmarks a unit as attacking the client’s own champion: a client sets the mark only where the message names that champion, and clears it for any other. - In the combat chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A server MUST NOT send
BuildingDiedfor the nexus: a client removes the nexus some 4 seconds later while still using it, and fails. - In the spells chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A command its player types sends
UpgradeSpellwithout checking anything. - In the spells chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Only a missile that flies straight acts on
MissileHits. - In the effects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23:
ParticlesCreatedstarts sets of particles, each named by its own id. - In the shop chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Opening the shop sends
TutorialShopOpened, in any match, except while the shop is locked. - In the shop chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client asks only while the shop is not locked, with the champion dead or near a shop of its side.
- In the shop chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A message that locks other input along with the shop stops the shop opening, but leaves an open shop open and its key on.
- In the communication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: Where a
VoiceEventasks for an answer, a client sendsVoiceEventDoneonce it has played the event. - In the communication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client never answers a
VoiceEventit cannot play. - In the votes chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client takes
SurrenderVoteCalledwhenever it arrives, its own champion on the field or not. - In the interface chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client sends no
Camerawhile its camera is locked: a server that needs a client’s view reports frees its camera withCameraLockSet. - In the interface chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23:
Cameranames one point, the one the view looks at, in place of where the view sits and which way it faces. - In the interface chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client ignores
CameraLockSetthat arrives while it holds its camera itself, and answers nothing. - In the interface chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.21–0.9.25.23: A client keeps every lock a message sets or clears, and later input obeys them, but it acts on a lock at once only where the message’s mask is exactly one of 1, 4, 8, 16, 32 or 128.
Only notes
These read the same on the wire, and only their notes change. What each says in 0.9.25.24–0.9.25.35:
ClientEvent,event: “Which event, from 0 to 73, and so which fields follow. A value above 73 has no defined effect.”, where 0.9.25.21–0.9.25.23 has “Which event, from 0 to 70, and so which fields follow.”DeathHistory,entries[].event: “Which event, from 0 to 73, and so which fields follow.”, where 0.9.25.21–0.9.25.23 has “Which event, from 0 to 70, and so which fields follow.”
0.9.25.36–1.0.0.24
Client builds from 0.9.25.36 up to, not including, 1.0.0.25. Patch notes: V0.9.25.34.
| Build checked | Passed | Failed | Skipped | Commit | Date |
|---|---|---|---|---|---|
| 0.9.25.36 | 10 | 0 | 4 | 2d10e67 | 2026-11-04 |
Every message of this range (158)
Against 0.9.25.24–0.9.25.35
Where a build from 0.9.25.36 up to, not including, 1.0.0.25 differs from one from 0.9.25.24 up to, not including, 0.9.25.36. Anything not named here is the same in both.
In 0.9.25.36–1.0.0.24, not in 0.9.25.24–0.9.25.35
| Message | Sent by | Command | What it does |
|---|---|---|---|
FadeMinions | server | 174 on events | Fade one side’s minions |
GreyscaleWhenDead | server | 170 on events | Say whether a client draws the world without colour while its champion is down |
HudDisabled | server | 171 on events | Take down a client’s interface as the match ends |
NexusIdle | server | 173 on events | Put each nexus into its idle particles |
NexusSkin | server | 169 on events | Change how one side’s nexus looks |
SpellNameChanged | server | 172 on events | Put another spell into a slot of a unit’s that already holds one |
In 0.9.25.24–0.9.25.35, not in 0.9.25.36–1.0.0.24
| Message | Sent by | Command it had |
|---|---|---|
InputLockChanged | client | 148 on requests |
InputLocksFlipped | client | 124 on requests |
Commands
These differ only in their command. Each row is a run of commands moved by the same amount:
| Channel | 0.9.25.24–0.9.25.35 | 0.9.25.36–1.0.0.24 | Messages |
|---|---|---|---|
| events | 125–147 | 124–146 | InputLockToggled, FogToggled, MovementBounds, CameraLockSet, MoveCamera, VoiceEvent, SpellTargetingChanged, Paused, Resumed, GameSpeed, FadeTo, FadeRemoved, UnitHighlighted, UnitHighlightRemoved, TutorialPopup, AfkWarning, CloseShop |
| events | 149–170 | 147–168 | InputLock, ObjectiveShown, ObjectiveHidden, ObjectiveReplaced, SideTextShown, SideTextHidden, SideTextRefreshed, HudHighlighted, ShopHighlighted, SurrenderVoteCalled, SurrenderStatus, MissileHits, MinimapHighlighted, HudHighlightToggled, TutorialChatLine, SpellNumbers, VolumeMuted, WorldEvent |
| requests | 130–145 | 129–144 | TransientAck, TutorialPopupClosed |
| requests | 150–164 | 148–162 | TutorialShopOpened, SurrenderVote, VoiceEventDone |
| transient | 129 | 128 | Replication |
Laid out differently
AppearancePushedoverrideSpellsis in 0.9.25.36–1.0.0.24 (u8), afterentry, and not in 0.9.25.24–0.9.25.35.
Chapters
- In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A region id of 0 names no region: given a
RegionAddedcarrying 0, a client gives the region an id of its own, its own node in the top byte and a count below it, which no message from a server can name. - In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: Registration pairs each player id with a client id: a server answers a client’s
Registerwith oneRegisteredfor every seat. - In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A bot’s champion carries 4294967295.
- In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: | Map | Holds | | –– | ———————————————————————————————————————————————————————————————————————————–– | | 1, 2 | the six
Barracksnames,HQ_T1,HQ_T2,orderShop01,chaosShop01, the six spawn points named__P_…, and turrets namedTurret_T1_…andTurret_T2_…,Turret_OrderTurretShrineandTurret_ChaosTurretShrineamong them | | 3 |Barracks_T1_C1,Barracks_T2_C1,HQ_T1,HQ_T2,OrderShop01,ChaosShop01,____P_Chaos_Spawn_Barracks__C01, and turrets,Turret_T1_C_08among them | - In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A new
SpawnPetfor an owner removes that owner’s pet before it. - In the objects chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A client removes a nexus about 4 seconds after
BuildingDiednames it, and can fail as it does. - In the ordering chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: Nothing answers a view report: a client sends its latest report again, twice the round trip time plus 1/30 of a second apart, for as long as the match runs.
- In the space chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A client has data for maps 1, 2 and 3.
- In the time chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A
GameSpeedthat arrives during a hold sets the match clock running again at once. - In the time chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A client takes that moment from its own match clock, once, as its game loop runs.
- In the values chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A champion’s own book ends at slot 44.
- In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A path carries its points as they lie in the world, and takes no origin from the ground.
- In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: The client has maps 1, 2 and 3.
- In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: Each object’s file is
.scoas text or.SCBas binary, and gives its name on itsName=line. - In the data chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A name’s opening says what the object is, the first match winning and a minion spawner’s tested before
Barracks:Turreta turret,Barracksan inhibitor,HQ_a nexus. - In the joining chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A server MUST put the seat’s player id in
SeatLoadProgress: the loading screen shows a seat’s card from theVersionSyncseat with that id. - In the vision chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24:
LevelUpshows its effect over any unit the client can see. - In the replication chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: ## A champion | Group | Bits | Value | Type | | —– | –––– | ———————————————————————————————–– | —– | | 0 | 0 | Experience | float | | 0 | 1 | Gold in hand | float | | 0 | 2 to 3 | Which slots can be cast from: the champion’s own, then the second set | u32 | | 0 | 4 to 7 | What the spell in slots 0 to 3 costs | float | | 0 | 8 to 11 | What the spell in slots 41 to 44 costs | float | | 0 | 12 to 13 | What the spell in slots 0 and 1 of the second set costs | float | | 1 | 0 to 1 | Health and resource as they stand | float | | 1 | 2 to 3 | Health and resource at their greatest | float | | 1 | 4 | What the champion is doing, as a set of bits | u32 | | 1 | 5 to 8 | Whether it is proof against spells, proof against all harm, targetable, and proof against strikes | u32 | | 2 | 0 to 1 | Whether it is proof against strikes, then against spells, as group 1 bits 8 and 5 | u32 | | 2 | 2 | Damage it deals by striking | float | | 2 | 3 | Damage its spells deal before modifiers | float | | 2 | 4 | How often it turns a blow aside | float | | 2 | 5 | Its size | float | | 2 | 6 | How often it strikes critically | float | | 2 | 7 to 8 | Armour and spell resistance | float | | 2 | 9 to 10 | How fast health and resource return | float | | 2 | 11 | How fast it moves | float | | 2 | 12 | How far it strikes from | float | | 2 | 13 to 14 | Flat and percent modifiers on the damage it strikes with | float | | 2 | 15 to 16 | Flat and percent modifiers on its spells’ damage | float | | 2 | 17 to 18 | Flat and percent reduction of the spell damage it takes | float | | 2 | 19 | A multiplier on how fast it strikes | float | | 2 | 20 | A flat addition to how far it casts | float | | 2 | 21 | A modifier on its cooldowns | float | | 3 | 0 to 1 | A percent and a flat addition to how far it sees | float | | 3 | 2 | Level | u32 | ## A turret | Group | Bits | Value | Type | | —– | –––– | –––––––––––––––––––––––––––– | —– | | 1 | 0 | Damage it deals by striking | float | | 1 | 1 to 2 | Armour and spell resistance | float | | 1 | 3 | How fast it moves | float | | 1 | 4 | A multiplier on how fast it strikes | float | | 1 | 5 | Its size | float | | 1 | 6 to 7 | Flat and percent modifiers on the damage it strikes with | float | | 1 | 8 to 9 | Flat and percent modifiers on its spells’ damage | float | | 1 | 10 to 11 | How fast health and resource return | float | | 1 | 12 to 13 | Health as it stands, then at its greatest | float | | 3 | 0 to 1 | A percent and a flat addition to how far it sees | float | ## A minion, and a unit belonging to no side | Group | Bits | Value | Type | | —– | –––– | ———————————————————————————————–– | —– | | 1 | 0 to 1 | Health as it stands, then at its greatest | float | | 1 | 2 to 3 | Whether it is proof against strikes, then against spells | u32 | | 1 | 4 | What the unit is doing, as a set of bits | u32 | | 1 | 5 to 8 | Whether it is proof against spells, proof against all harm, targetable, and proof against strikes | u32 | | 1 | 9 | Damage it deals by striking | float | | 1 | 10 to 11 | Armour and spell resistance | float | | 1 | 12 | How fast it moves | float | | 1 | 13 | A multiplier on how fast it strikes | float | | 1 | 14 | Its size | float | | 1 | 15 to 16 | Flat and percent modifiers on the damage it strikes with | float | | 1 | 17 to 18 | Flat and percent modifiers on its spells’ damage | float | | 1 | 19 to 20 | How fast health and resource return | float | | 3 | 0 to 1 | A percent and a flat addition to how far it sees | float | ## A building Inhibitors, nexuses and the buildings minions come from share one table.
- In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: No unit advances for
StatTick. - In the match chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A client that receives
GameEndedwhile still loading takes it as in play: it records the result and sendsClientFinished. - In the combat chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A server MUST NOT send
BuildingDiedfor the nexus: a client removes the nexus some 4 seconds later while still using it, and fails. - In the spells chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A client still casts from a casting record whose length disagrees with its count of targets.
- In the votes chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A client takes
SurrenderVoteCalledwhenever it arrives, its own champion on the field or not. - In the interface chapter, a passage holds for 0.9.25.24–0.9.25.35 and not 0.9.25.36–1.0.0.24: A client locks and unlocks its own input too, and tells the server each time:
InputLocksFlippedfor the locks it flipped, as when a camera move a script drives starts and ends, andInputLockChangedfor the locks it set or cleared.
Only notes
These read the same on the wire, and only their notes change. What each says in 0.9.25.36–1.0.0.24:
BuildingDied, its layout: no note, where 0.9.25.24–0.9.25.35 has “A server sends it for no nexus. A client takes a building it names away four seconds later, and a nexus it takes away leaves the client failing at its next game event. An inhibitor stays: a client plays its destruction and raises a game event carrying attacker. A nexus falls with GameEnded.”BuildingDied,attacker: “The unit that destroyed it. A client reads nothing here.”, where 0.9.25.24–0.9.25.35 has “The unit that destroyed it. Only an inhibitor reads it; a client reads nothing here for any other building.”ChainTargets, its layout: “Where the client already holds the missile, the missile takes the list; otherwise the list waits for the caster’s next chain missile.”, where 0.9.25.24–0.9.25.35 has “Where the client already holds the missile, the missile takes the list, and so does the caster’s current cast; otherwise the list waits for the caster’s next chain missile.”ChainTargets,count: “How many of the slots are used, 0 to 32; 0 clears every target the client holds, and a count below zero names no targets and clears nothing. A count above 32 has no defined effect.”, where 0.9.25.24–0.9.25.35 has “How many of the slots are used, 0 to 32; 0 or less leaves the targets the client holds as they are. A client sets no bound, and more than 32 has no defined effect.”ChainTargets,targets: “Always 32 slots; those past count have no effect. A slot naming a unit the client does not know is left empty.”, where 0.9.25.24–0.9.25.35 has “Always 32 slots; those past count have no effect.”
Index of messages
| Message | Sent by | System | Ranges |
|---|---|---|---|
AfkWarning | server | interface | 0.9.22.14–1.0.0.24 |
Announcement | server | interface | 0.8.13.26–1.0.0.24 |
AppearancePopped | server | effects | 0.8.13.26–1.0.0.24 |
AppearancePushed | server | effects | 0.8.13.26–1.0.0.24 |
Attack | server | combat | 0.8.13.26–1.0.0.24 |
AttackFrom | server | combat | 0.8.13.26–1.0.0.24 |
Autocast | server | spells | 0.8.13.26–1.0.0.24 |
BotDebug | server | units | 0.9.22.14–1.0.0.24 |
BotState | server | units | 0.8.13.26–1.0.0.24 |
BotTargets | server | units | 0.8.13.26–1.0.0.24 |
BuildingDied | server | combat | 0.8.13.26–1.0.0.24 |
BuyItem | client | shop | 0.8.13.26–1.0.0.24 |
Camera | client | interface | 0.8.13.26–1.0.0.24 |
CameraAck | server | interface | 0.8.13.26–1.0.0.24 |
CameraBehaviour | server | interface | 0.8.13.26–1.0.0.24 |
CameraLock | client | interface | 0.8.13.26–1.0.0.24 |
CameraLockSet | server | interface | 0.9.22.14–1.0.0.24 |
CastSpell | client | spells | 0.8.13.26–1.0.0.24 |
ChainTargets | server | spells | 0.8.13.26–1.0.0.24 |
CharacterSelected | client | joining | 0.8.13.26–1.0.0.24 |
Chat | both | communication | 0.8.13.26–1.0.0.24 |
ClientEvent | server | objectives | 0.8.13.26–1.0.0.24 |
ClientFinished | client | match | 0.8.13.26–1.0.0.24 |
ClientReady | client | joining | 0.8.13.26–1.0.0.24 |
ClientVersion | client | joining | 0.8.13.26–1.0.0.24 |
ClockConvergence | server | match | 0.8.13.26–1.0.0.24 |
ClockReply | client | match | 0.8.13.26–1.0.0.24 |
ClockSync | server | match | 0.8.13.26–1.0.0.24 |
CloseShop | server | shop | 0.9.22.14–1.0.0.24 |
CooldownSet | client | spells | 0.8.13.26–1.0.0.24 |
CreateChampion | server | units | 0.8.13.26–1.0.0.24 |
CreateNeutral | server | units | 0.8.13.26–1.0.0.24 |
CreateTurret | server | units | 0.8.13.26–1.0.0.24 |
Damage | server | combat | 0.8.13.26–1.0.0.24 |
DeathHistory | server | combat | 0.9.22.14–1.0.0.24 |
DestroyMissile | server | spells | 0.8.13.26–1.0.0.24 |
EffectAdded | server | effects | 0.8.13.26–1.0.0.24 |
EffectCount | server | effects | 0.8.13.26–1.0.0.24 |
EffectRemoved | server | effects | 0.8.13.26–1.0.0.24 |
EffectReplaced | server | effects | 0.8.13.26–1.0.0.24 |
EmotePlayed | server | communication | 0.8.13.26–1.0.0.24 |
EnterLocalSight | server | vision | 0.8.13.26–1.0.0.24 |
EnterSight | server | vision | 0.8.13.26–1.0.0.24 |
Exit | client | match | 0.9.22.14–1.0.0.24 |
ExperienceGained | server | replication | 0.8.13.26–1.0.0.24 |
FaceDirection | server | movement | 0.8.13.26–1.0.0.24 |
FacePosition | client | movement | 0.8.13.26–1.0.0.24 |
FadeMinions | server | effects | 0.9.25.36–1.0.0.24 |
FadeRemoved | server | effects | 0.9.22.14–1.0.0.24 |
FadeTo | server | effects | 0.9.22.14–1.0.0.24 |
FloatingText | server | interface | 0.8.13.26–1.0.0.24 |
FogToggled | server | vision | 0.9.22.14–1.0.0.24 |
GameEnded | server | match | 0.8.13.26–1.0.0.24 |
GameSpeed | server | match | 0.9.22.14–1.0.0.24 |
GoldGained | server | replication | 0.8.13.26–1.0.0.24 |
GoldRedirect | server | replication | 0.8.13.26–1.0.0.24 |
GreyscaleWhenDead | server | combat | 0.9.25.36–1.0.0.24 |
HudDisabled | server | interface | 0.9.25.36–1.0.0.24 |
HudHighlighted | server | guidance | 0.9.22.16–1.0.0.24 |
HudHighlightToggled | server | guidance | 0.9.25.21–1.0.0.24 |
InhibitorState | server | combat | 0.8.13.26–1.0.0.24 |
InputLock | server | interface | 0.9.22.16–1.0.0.24 |
InputLockChanged | client | interface | 0.9.22.16–0.9.25.35 |
InputLocksFlipped | client | interface | 0.9.22.14–0.9.25.35 |
InputLockToggled | server | interface | 0.9.22.14–1.0.0.24 |
ItemAdded | server | shop | 0.8.13.26–1.0.0.24 |
JoinSide | client | joining | 0.9.22.14–1.0.0.24 |
KillParticle | server | effects | 0.8.13.26–1.0.0.24 |
LeaveLocalSight | server | vision | 0.8.13.26–1.0.0.24 |
LeaveSight | server | vision | 0.8.13.26–1.0.0.24 |
LevelUp | server | replication | 0.8.13.26–1.0.0.24 |
LoadingProgress | client | joining | 0.9.22.14–1.0.0.24 |
Loadout | server | shop | 0.8.13.26–1.0.0.24 |
MapPing | client | communication | 0.8.13.26–1.0.0.24 |
MatchIdentity | server | joining | 0.8.13.26–1.0.0.24 |
MinimapHighlighted | server | guidance | 0.9.25.21–1.0.0.24 |
MissileHits | server | spells | 0.9.22.16–1.0.0.24 |
MissileReport | client | spells | 0.9.22.14–1.0.0.24 |
MissileState | server | spells | 0.8.13.26–1.0.0.24 |
MoveCamera | server | interface | 0.9.22.14–1.0.0.24 |
MovementBounds | server | movement | 0.9.22.14–1.0.0.24 |
MoveOrder | client | movement | 0.8.13.26–1.0.0.24 |
NexusIdle | server | effects | 0.9.25.36–1.0.0.24 |
NexusSkin | server | effects | 0.9.25.36–1.0.0.24 |
ObjectiveHidden | server | guidance | 0.9.22.16–1.0.0.24 |
ObjectiveReplaced | server | guidance | 0.9.22.16–1.0.0.24 |
ObjectiveShown | server | guidance | 0.9.22.16–1.0.0.24 |
ParticlesCreated | server | effects | 0.8.13.26–1.0.0.24 |
Path | server | movement | 0.8.13.26–1.0.0.24 |
PathWithSpeed | server | movement | 0.8.13.26–1.0.0.24 |
Paused | server | match | 0.9.22.14–1.0.0.24 |
PingPlaced | server | communication | 0.8.13.26–1.0.0.24 |
PlaceTurret | server | units | 0.8.13.26–0.9.22.13 |
PlayAnimation | server | effects | 0.8.13.26–1.0.0.24 |
PlayEmote | client | communication | 0.8.13.26–1.0.0.24 |
PlayerDisconnected | server | match | 0.9.22.14–1.0.0.24 |
QueryStatus | client | joining | 0.8.13.26–1.0.0.24 |
QueryStatusAnswer | server | joining | 0.8.13.26–1.0.0.24 |
Reconnected | server | match | 0.9.22.14–1.0.0.24 |
ReconnectedInMatch | client | match | 0.9.22.14–1.0.0.24 |
RegionAdded | server | vision | 0.8.13.26–1.0.0.24 |
RegionAttached | server | vision | 0.8.13.26–1.0.0.24 |
RegionRemoved | server | vision | 0.8.13.26–1.0.0.24 |
Register | client | joining | 0.8.13.26–1.0.0.24 |
Registered | server | joining | 0.8.13.26–1.0.0.24 |
RemoveItem | client | shop | 0.8.13.26–1.0.0.24 |
RemoveItemAnswer | server | shop | 0.8.13.26–1.0.0.24 |
Replication | server | replication | 0.9.22.14–1.0.0.24 |
Respawned | server | combat | 0.8.13.26–1.0.0.24 |
Resumed | server | match | 0.9.22.14–1.0.0.24 |
ResyncEnded | server | joining | 0.9.22.14–1.0.0.24 |
Revived | server | combat | 0.8.13.26–1.0.0.24 |
Roster | server | joining | 0.9.22.14–1.0.0.24 |
SeatChampion | server | joining | 0.9.22.14–1.0.0.24 |
SeatLoadProgress | server | joining | 0.9.22.14–1.0.0.24 |
SeatName | server | joining | 0.9.22.14–1.0.0.24 |
SelectObject | client | interface | 0.8.13.26–1.0.0.24 |
ShopHighlighted | server | guidance | 0.9.22.16–1.0.0.24 |
SideTextHidden | server | guidance | 0.9.22.16–1.0.0.24 |
SideTextRefreshed | server | guidance | 0.9.22.16–1.0.0.24 |
SideTextShown | server | guidance | 0.9.22.16–1.0.0.24 |
SpawnEnd | server | joining | 0.8.13.26–1.0.0.24 |
SpawnFromBarracks | server | units | 0.8.13.26–1.0.0.24 |
SpawnPet | server | units | 0.8.13.26–1.0.0.24 |
SpawnStart | server | joining | 0.8.13.26–1.0.0.24 |
SpawnUnit | server | units | 0.8.13.26–1.0.0.24 |
SpellCastAnswer | server | spells | 0.8.13.26–1.0.0.24 |
SpellCooldown | server | spells | 0.8.13.26–1.0.0.24 |
SpellNameChanged | server | spells | 0.9.25.36–1.0.0.24 |
SpellNumbers | server | spells | 0.9.25.21–1.0.0.24 |
SpellTargetingChanged | server | spells | 0.9.22.14–1.0.0.24 |
SpellUpgraded | server | spells | 0.8.13.26–1.0.0.24 |
StartGame | server | joining | 0.8.13.26–1.0.0.24 |
StatTick | server | replication | 0.8.13.26–1.0.0.24 |
StopAnimation | server | effects | 0.8.13.26–1.0.0.24 |
StopAttack | server | combat | 0.8.13.26–1.0.0.24 |
SurrenderFailed | server | votes | 0.9.22.16–0.9.25.20 |
SurrenderStatus | server | votes | 0.9.22.16–1.0.0.24 |
SurrenderVote | client | votes | 0.9.22.16–1.0.0.24 |
SurrenderVoteCalled | server | votes | 0.9.22.16–1.0.0.24 |
SwapItemsAnswer | server | shop | 0.8.13.26–1.0.0.24 |
TargetHeldChampion | server | combat | 0.9.22.14–1.0.0.24 |
TargetUnit | server | combat | 0.8.13.26–1.0.0.24 |
TransientAck | client | replication | 0.9.22.14–1.0.0.24 |
TutorialChatLine | server | guidance | 0.9.25.21–1.0.0.24 |
TutorialPopup | server | guidance | 0.9.22.14–1.0.0.24 |
TutorialPopupClosed | client | guidance | 0.9.22.14–1.0.0.24 |
TutorialShopOpened | client | shop | 0.9.22.16–1.0.0.24 |
UnitDied | server | combat | 0.8.13.26–1.0.0.24 |
UnitHighlighted | server | guidance | 0.9.22.14–1.0.0.24 |
UnitHighlightRemoved | server | guidance | 0.9.22.14–1.0.0.24 |
UnitSpoke | client | communication | 0.8.13.26–1.0.0.24 |
UnitStopped | server | movement | 0.8.13.26–1.0.0.24 |
UpgradeSpell | client | spells | 0.8.13.26–1.0.0.24 |
ValueGroup0 | server | replication | 0.8.13.26–0.9.22.13 |
ValueGroup1 | server | replication | 0.8.13.26–0.9.22.13 |
ValueGroup2 | server | replication | 0.8.13.26–0.9.22.13 |
ValueGroup3 | server | replication | 0.8.13.26–0.9.22.13 |
VersionSync | server | joining | 0.8.13.26–1.0.0.24 |
VoiceEvent | server | communication | 0.9.22.14–1.0.0.24 |
VoiceEventDone | client | communication | 0.9.25.21–1.0.0.24 |
VolumeMuted | server | communication | 0.9.25.21–1.0.0.24 |
WaypointAck | client | movement | 0.9.22.14–1.0.0.24 |
WaypointGroup | server | movement | 0.9.22.14–1.0.0.24 |
WaypointGroupAtSpeed | server | movement | 0.9.22.14–1.0.0.24 |
WorldEvent | server | objectives | 0.9.25.24–1.0.0.24 |