Skip to content
thaxy edited this page Jul 18, 2012 · 21 revisions

header

Packet List

Header Article Type Name Description
0x00 - <-> HandShake Server handshake
0x09 - C2S Sell item. uint8 xy x is flag (8=normal, 0=recipe combine) y is inventory slot (always zero-indexed)
0x0B - S2C Sell item response. uint8 inventory slot, uint8 quantity remaining
0x17 - C2S QueryStatusReq Query status request
0x18 - S2C SkillUp Set skill level. uint8 zero-indexed skill, uint8 skill level, 00
0x19 - C2S PingLoadInfo Client loading progress
0x23 - C2S Move inventory item. uint8 from inventory slot, uint8 to inventory slot
0x2C - S2C MasteryInfo All mastery information
0x3E - C2S SkillUp Put a point into an ability. uint8 zero-indexed ability (q=0, w=1, etc)
0x23 - S2C Move inventory item response. uint8 from inventory slot, uint8 to inventory slot
0x4C Announcement S2C - Game announcement
0x58 - C2S StartGame The client is ready to start the game
0x5A - S2C SynchVersion An initial packet containing structs and what not, real purpose not defined yet
0x64 - C2S ClientReady Client ready to continue
0x65 - S2C LoadHero The hero info
0x66 - S2C LoadName The summoners info
0x67 - S2C LoadScreenInfo The loading screen information
0x67 Movement S2C MoveAns The movement answer packet with the adjusted path
0x75 - S2C Buy item response. uint16 item id, 00 00, uint8 inventory slot, uint8 quantity, uint8 unknown
0x78 Movement C2S MoveReq The movement request packet with the complete path
0x7D Movement C2S MoveConfirm Confirmation of the MoveAns packet
0x89 - C2S ReqBuyItem Buy item. uint16 item id, 00 00
0x8F - S2C QueryStatusAns Query status answer
0x9A - S2C SendGameNumber Send game number and summoners name
0x9F - S2C PingLoadInfo Loading progress for a player
0xA6 - C2S GameNumberReq Request game number and summoners name
0xAE - C2S Surrender Surrender request
0xAF - S2C Surrender response
0xB2 - C2S ConfirmStats Confirms the received stat change
0xBB - C2S Click Mouse click
0xC9 - C2S SynchVersion Client version and some other client information
0xD0 Stats S2C StatUpdate Setting the stats for objects
0xFF - S2C Batch Batch packet

List updated for client 0.0.0.142 A list of headers can also been found in common.h

Header

Normal Packets

All packets in LoL start with a common header. This header is 5 bytes in size and has the following layout:

Type Name Description
uint8 cmd denotes the type (id) of the packet
uint32 netId Id of the ingame-object to modify, every object has an unique id which is used to refer to it. For example, your champion appears to be 19 00 00 40

The size of normal packets is either constant/depending on the packet type or given within the packet.

Game Packets

Some packet that get send from server -> client are send with a tick counter and have overlapping cmd’s. We call these game packets and there header is like

Type Name Description
uint8 cmd denotes the type (id) of the packet
uint32 netId Id of the ingame-object to modify, every object has an unique id which is used to refer to it
uint32 ticks An clock tick for the server (probably) and increasing counter with 1 should work fine to o. Appears to be 100 ticks per second.

Batch Packets

Batch packets always have first byte to 0xFF

Type Name Description
uint8 cmd always 0xFF
uint8 packetNo The total amount of packets this batch contains
uint8 firstSize The size of the first packet

See batch packets body for parsing the rest of the batch

Body

Normal Packets

The header is then followed by packet data with its size depending on the packet type. The channel to send the packet from also depends on its type. Note that batch packets are different.

Game Packets

The same story as normal packets

Batch Packets

The rest of the batch is parsed differently. After the firstSize packet:

Type Name Description
uint8 lengthAndFlags This contains the length (retrieve it by shift right 2) and 2 flags
uint8 unk1 If first bit of lengthAndFlags is 0, else this byte is not present
uint8 unk2 If second bit of lengthAndFlags is 0, else this byte is not present
uint32 unkt2 If second bit of lengthAndFlags is 1, else these bytes are not present
uint8 length If lengthAndFlags>>2 == 0x3F then the real length is this byte, else this byte is not present
uint8 body[lengthAndFlags>>2] the body of the packet

Repeat this until you have parsed packetNo times (but always check for overflow)

…to be continued.

Clone this wiki locally