Network protocol · ClassicUO 7.x
Packet reference
Packets registered by Moongate’s built-in registry and Ultima plugin. Directions are relative to the server; lengths include the opcode and length header.
134 packet definitions · Packet and handler guide
0x02incomingMovement
MoveRequestPacket
Move request
SizeFixed · 7 bytes
Directionincoming
Notes
Turns or steps the character. The high direction bit marks running.
Host handler
MoveRequestPacketHandler: turns or steps the character, answered with 0x22 or 0x21
0x03incomingSpeech
AsciiSpeechRequestPacket
ASCII speech request
SizeDynamic · minimum 9 bytes
Directionincoming
Notes
Speech typed by the player in ASCII.
Host handler
SpeechRequestPacketHandler: local say or in-game dot command.
0x05incomingCombat
AttackRequestPacket
Attack request
SizeFixed · 5 bytes
Directionincoming
Notes
The player clicks a mobile to attack it. The server makes the character fight it; a refused request is answered with 0xAA and a zero serial.
Host handler
AttackRequestPacketHandler: ICombatService.Attack on the mobile; a refusal clears the client's target.
0x06incomingItems
UseRequestPacket
Use request
SizeFixed · 5 bytes
Directionincoming
Notes
A double click opens a carried container when its graphic has the Container flag, or the paperdoll of a human-bodied mobile in view range. On a creature that is a mount it rides it; on the character itself, while it rides, it gets off.
Host handler
UseRequestPacketHandler: opens a container the character carries, or a paperdoll; rides a creature that is a mount, and gets off when the character double clicks itself
0x07incomingItems
LiftRequestPacket
Lift request
SizeFixed · 7 bytes
Directionincoming
Notes
Only a whole carried item can be lifted. Rejection sends 0x27.
Host handler
LiftRequestPacketHandler: picks up an item the character carries or wears, or one on the ground within 2 tiles
0x08incomingItems
DropRequestPacket
Drop request
SizeFixed · 15 bytes
Directionincoming
Notes
Drops a held item into a carried container, onto a stack of the same kind, or on the ground within 2 tiles (destination 0xFFFFFFFF); invalid destinations bounce it back.
Host handler
DropRequestPacketHandler: drops the held item into a carried container, onto a carried or ground stack of the same kind, or on the ground within 2 tiles
0x09incomingWorld
LookRequestPacket
Look request
SizeFixed · 5 bytes
Directionincoming
Notes
A single click shows the name over the object.
Host handler
LookRequestPacketHandler: shows the first tooltip line over the object (0xC1)
0x0BoutgoingCombat
DamagePacket
Damage
SizeFixed · 7 bytes
Directionoutgoing
Notes
The damage of a hit, which the client shows over the head of the one hit.
Host handler
CombatService: sent to the players in the fight when display_damage_numbers is on.
0x11outgoingWorld
MobileStatusPacket
SizeDynamic · minimum 43 bytes
Directionoutgoing
Notes
Version 5 status payload (91 bytes); fields after the basic header depend on the status version. A client from 7.0.30 (not Kingdom Reborn) gets version 6 (121 bytes) while the resistances are on: fifteen shorts after the tithing points, in this order: the maximum physical, fire, cold, poison and energy resistance, the defense chance increase and its maximum (45), the hit chance, swing speed, damage, lower reagent cost, spell damage, faster cast recovery, faster casting and lower mana cost increases. For a mobile that is not the player's own the packet is compact: 43 bytes, version 0, the name and the hit points as a share of 100.
Host handler
CharacterEnterWorldService: sends the player status in the world-entry sequence. MobileStateService: the answer to a 0x34 status query, whole for the character, compact for another mobile.
0x12incomingSkills
TextCommandPacket
Text command
SizeDynamic · minimum 3 bytes
Directionincoming
Notes
A text command of the client. Using a skill from the skill window or a macro sends kind 0x24; casting from the spellbook or a macro sends 0x27 or 0x56, and the spellbook button of the paperdoll 0x43.
Host handler
TextCommandPacketHandler: kind 0x24 runs on_use of scripts/skills/<skill>.lua after the wait between two skills; 0x27 and 0x56 go to SpellCastService.CastFromBook, 0x43 opens the first spellbook the character carries; the other kinds are ignored for now (Debug log).
0x13incomingItems
EquipRequestPacket
Equip request
SizeFixed · 10 bytes
Directionincoming
Notes
Wears the held item on the own character when its layer is free and both hands fit; anything else bounces back.
Host handler
EquipRequestPacketHandler: puts the held item on the character, or bounces it back
0x17outgoingMobiles
HealthBarStatusPacket
SizeFixed · 12 bytes
Directionoutgoing
Notes
Turns a colour of a mobile's health bar on or off.
Host handler
PoisonService: green while a mobile is poisoned, sent to it and the players around on poisoning, each tick, cure and end.
0x1AoutgoingWorld
WorldItemPacket
SizeDynamic · minimum 16 bytes
Directionoutgoing
Notes
Shows an item on the ground to clients before 7.0.0.0.
Host handler
WorldViewService: sent to the players in range when an item is dropped, and when they come into range of it.
0x1BoutgoingWorld
LoginConfirmPacket
SizeFixed · 37 bytes
Directionoutgoing
Notes
First world-entry packet; initializes the player position and map bounds.
Host handler
CharacterEnterWorldService: starts the world-entry packet sequence.
0x1DoutgoingWorld
RemoveEntityPacket
SizeFixed · 5 bytes
Directionoutgoing
Notes
Removes an item or mobile from the client view.
Host handler
Outgoing packet emitted by world visibility and item handling
0x20outgoingWorld
MobileUpdatePacket
SizeFixed · 19 bytes
Directionoutgoing
Notes
Updates the player mobile after world entry, and tells a teleported player where it stands.
Host handler
CharacterEnterWorldService: sends the player mobile update during world entry. TeleportService: sends it to a teleported player, whose step sequence starts again. MobileStateService: sent to the mobile's own player when its flags change, and its step sequence starts again.
0x21outgoingMovement
MovementRejectPacket
SizeFixed · 8 bytes
Directionoutgoing
Notes
Refuses a step and restores the client to the server position.
Host handler
MoveRequestPacketHandler: rejects the step and restores the server position.
0x22incomingMovement
ResynchronizeRequestPacket
Resynchronize request
SizeFixed · 3 bytes
Directionincoming
Notes
Recognized and ignored for now.
Host handler
IgnoredPacketHandler<T>: recognised and ignored for now (Debug log)
0x22outgoingMovement
MovementAckPacket
SizeFixed · 3 bytes
Directionoutgoing
Notes
Acknowledges an accepted step.
Host handler
MoveRequestPacketHandler: acknowledges an accepted step.
0x24outgoingItems
DisplayContainerPacket
SizeDynamic · minimum 7 bytes
Directionoutgoing
Notes
Seven bytes for older clients; nine bytes from client 7.0.9.0. This version-dependent packet has no on-wire length header. The gump 0xFFFF is a spellbook: the client opens its spellbook window and the spells follow in a 0x3C.
Host handler
UseRequestPacketHandler: opens a carried container, or one on the ground within reach; BankService: opens the bank box; SpellbookService: opens a spellbook with the gump 0xFFFF.
0x25outgoingItems
ContainerItemUpdatePacket
SizeDynamic · minimum 20 bytes
Directionoutgoing
Notes
Twenty bytes before client 6.0.1.7; newer clients receive a grid byte. This version-dependent packet has no on-wire length header.
Host handler
Item handlers: refresh the item after a lift or drop, or bounce it back.
0x27outgoingItems
LiftRejectPacket
SizeFixed · 2 bytes
Directionoutgoing
Notes
Rejects a lift; the host may also send an item update to restore its position.
Host handler
LiftRequestPacketHandler: reports why a lift was refused.
0x2CoutgoingMobiles
DeathStatusPacket
SizeFixed · 2 bytes
Directionoutgoing
Notes
Sent when a player dies, as ModernUO's DeathStatus. Coming back to life sends no packet of its own: the living body (0x20) and the flags tell the client.
Host handler
MobileStateService.SetDead: sent to the player's own client when its character dies.
0x2EoutgoingItems
WornItemPacket
SizeFixed · 15 bytes
Directionoutgoing
Notes
Shows an item worn by a mobile.
Host handler
EquipRequestPacketHandler and the world view: sent when an item goes on; BankService: the bank box before it opens.
0x2FoutgoingCombat
SwingPacket
Swing
SizeFixed · 10 bytes
Directionoutgoing
Notes
A swing, told to the player who swings.
Host handler
CombatService: sent to the attacker's player for each swing.
0x34incomingWorld
MobileQueryPacket
Mobile query
SizeFixed · 10 bytes
Directionincoming
Notes
Sent when the status bar or the skill window opens.
Host handler
MobileQueryPacketHandler: answers the status of the character (whole) or of a mobile in sight (compact) with 0x11, and the skills with 0x3A.
0x38outgoingMovement
PathfindPacket
Pathfind
SizeFixed · 7 bytes
Directionoutgoing
Notes
Tells the client to walk its character to a spot by itself, as after a double right click on the ground: the client finds the way, writes "Pathfinding!" and sends its steps one by one. The client decides whether it goes: the server is not told.
Host handler
MobileModule.PathfindTo: mobile.pathfind_to(player, x, y, z).
0x3AincomingSkills
SkillLockPacket
Skill lock
SizeDynamic · minimum 6 bytes
Directionincoming
Notes
The player moves the lock arrow of a skill in the skill window. Nothing is sent back: the client already shows it.
Host handler
SkillLockPacketHandler: IMobileStateService.SetSkillLock on the character in the world; a skill or lock that does not exist is ignored.
0x3AoutgoingWorld
SkillsPacket
SizeDynamic · minimum 6 bytes
Directionoutgoing
Notes
The skills of the player's own character. The fields from Skill to Cap repeat for every skill of the whole list.
Host handler
MobileStateService: the whole list answers a mobile query, one skill follows a change made by a script.
0x3BincomingItems
VendorBuyReplyPacket
Vendor: buy reply
SizeDynamic · minimum 8 bytes
Directionincoming
Notes
What the player chose in the shop window. The serials are the virtual ones the server gave the lines of the window (Serial.MinVirtual and above); they are valid while the window is open.
Host handler
VendorBuyReplyPacketHandler: VendorService.Buy checks the window, the distance, the stock and the gold, and either gives everything or nothing.
0x3BoutgoingItems
VendorEndPacket
Vendor: end of the shop window
SizeFixed · 8 bytes
Directionoutgoing
Notes
Closes the shop window after a purchase or a refusal. Always 8 bytes.
Host handler
VendorService.Buy: sent after every reply, bought or refused.
0x3CoutgoingItems
ContainerContentPacket
SizeDynamic · minimum 5 bytes
Directionoutgoing
Notes
Each item uses 19 bytes, or 20 with the grid byte for newer clients: the item's slot (0 to 124) in the grid the Enhanced Client shows. After a 0x24 with the gump 0xFFFF the entries are the spells of a spellbook, as the classic servers send them: the serial counts down from 0x7FFFFFFF, the graphic is 0, the amount is the number of the spell from 1 and the container is the book.
Host handler
UseRequestPacketHandler: the contents of a carried container, or of one on the ground within reach; BankService: those of the bank box; SpellbookService: the spells a book holds.
0x4EoutgoingWorld
PersonalLightLevelPacket
SizeFixed · 6 bytes
Directionoutgoing
Notes
Sets the light level for one mobile.
Host handler
CharacterEnterWorldService: sends personal light 0 during world entry; StatBonusService: night sight, and 0 when it ends.
0x4FoutgoingWorld
GlobalLightLevelPacket
SizeFixed · 2 bytes
Directionoutgoing
Notes
Sets ambient world light: the day and night cycle, dungeons and jails, or .globallight.
Host handler
CharacterEnterWorldService sends it during world entry; LightService resends it when the player's light changes.
0x53outgoingLogin
PopupMessagePacket
SizeFixed · 2 bytes
Directionoutgoing
Notes
Sent before disconnect when character creation is refused or fails.
Host handler
Game: sent before disconnecting when character creation is refused or fails
0x54outgoingWorld
PlaySoundPacket
SizeFixed · 12 bytes
Directionoutgoing
Notes
Plays a sound once at a location.
Host handler
SpeechService: npc.play_sound of a mobile script, to the players within 15 cells. Also item.play_sound of item scripts, and WeatherService: thunder during a storm.
0x55outgoingLogin
LoginCompletePacket
SizeFixed · 1 bytes
Directionoutgoing
Notes
Marks completion of login and world entry.
Host handler
CharacterEnterWorldService: ends the login part of the world-entry sequence; only 0x5B follows.
0x56incomingMaps
MapCommandRequestPacket
Map command
SizeFixed · 11 bytes
Directionincoming
Notes
A player's change to the course of an open map: at most 50 pins, inside the drawing.
Host handler
MapCommandRequestPacketHandler: applied when the map is in the player's backpack or within 2 tiles, movable and not protected, and, but for the toggle, while the course may be changed.
0x56outgoingMaps
MapCommandPacket
SizeFixed · 11 bytes
Directionoutgoing
Notes
Shows a map item, one pin of its course at a time, and whether its course may be changed.
Host handler
MapDisplayService: sent after 0xF5 or 0x90 when a map opens, and as the answer to a toggle.
0x5BoutgoingWorld
CurrentTimePacket
SizeFixed · 4 bytes
Directionoutgoing
Notes
Sent last in the world-entry sequence with the real UTC time of the server, not the game time.
Host handler
CharacterEnterWorldService: sends the real UTC time at the end of world entry.
0x5DincomingCharacters
PlayCharacterPacket
Play character
SizeFixed · 73 bytes
Directionincoming
Notes
Selects a character slot and starts world entry.
Host handler
PlayCharacterPacketHandler: brings the chosen character into the world
0x65outgoingWorld
WeatherPacket
SizeFixed · 4 bytes
Directionoutgoing
Notes
Sets the weather the client shows: the profile of the player's region, or dry inside a building.
Host handler
WeatherService: sent at login, on a region change and when the player's weather changes; resent every minute, every game hour and after a season packet (0xBC).
0x66incomingItems
BookPagesRequestPacket
Book pages request or edit
SizeDynamic · minimum 7 bytes
Directionincoming
Notes
The lines a player wrote on pages of a book, or a request for a page. An edit is saved when the sender carries the book and the book is writable, within 8 lines a page and 79 characters a line; a request is not answered, since every page is sent at the opening. A packet that is not well formed changes nothing.
Host handler
BookEditPacketHandler: BookDocumentService.SetPages.
0x66outgoingItems
BookPagesPacket
Book pages
SizeDynamic · minimum 9 bytes
Directionoutgoing
Notes
The pages of a book, sent right after its header (0xD4). The saved text is split at its empty lines, and a page of more than 8 lines goes on in the next.
Host handler
BookDocumentService.Open, with the pages of BookPagination.
0x6CincomingTargeting
TargetResponsePacket
Target response
SizeFixed · 19 bytes
Directionincoming
Notes
The player's pick for a target cursor, or a cancel.
Host handler
TargetResponsePacketHandler: completes the player's pending target.
0x6CoutgoingTargeting
TargetCursorPacket
SizeFixed · 19 bytes
Directionoutgoing
Notes
Shows the target cursor, or with flags 3 takes it away.
Host handler
TargetService: sent when a target begins or is cancelled by the server.
0x6DoutgoingWorld
PlayMusicPacket
SizeFixed · 3 bytes
Directionoutgoing
Notes
Plays a music track on the client.
Host handler
MusicService: the track of the player's region, else its map's, when it changes; .music plays one.
0x6EoutgoingMobiles
MobileAnimationPacket
SizeFixed · 14 bytes
Directionoutgoing
Notes
Plays an animation of a mobile.
Host handler
WorldViewService: mobile.animate of a script, to the mobile's own player and those who see it.
0x6FincomingItems
SecureTradeRequestPacket
Secure trade request
SizeDynamic · minimum 8 bytes
Directionincoming
Notes
The client's side of a secure trade: it cancels or ticks. The gold command of the newer clients (3), and any command the server does not know, is read and ignored.
Host handler
SecureTradeRequestPacketHandler: cancels the trade of the box (either box of the trade), or sets the tick of the player's side; the box must be the player's own for a tick.
0x6FoutgoingItems
SecureTradePacket
Secure trade
SizeDynamic · minimum 17 bytes
Directionoutgoing
Notes
Sent to both players of a secure trade when it opens, whenever a tick or a box changes, and when it closes.
Host handler
TradeService: opens, updates and closes the windows of a secure trade.
0x71incomingItems
BulletinBoardRequestPacket
Bulletin board request
SizeDynamic · minimum 12 bytes
Directionincoming
Notes
What a client asks of a bulletin board. A request is answered only when the item is a board, the character stands within two tiles of it on its map, and the message is one of that board; game masters and above are answered from anywhere. A post whose lengths run past the packet is refused.
Host handler
BulletinBoardRequestPacketHandler: answers with sub-command 0x01 or 0x02, posts (the new message enters the poster's list with 0x25) or removes (0x1D for each message gone).
0x71/0x00outgoingItems
BulletinBoardDisplayPacket
Bulletin board: display
SizeDynamic · minimum 38 bytes
Directionoutgoing
Notes
Opens a bulletin board on the client. Always 38 bytes. The messages follow as the content of a container (0x3C): each message is an item 0x0EB0 inside the board, and the client asks for each summary with sub-command 0x04.
Host handler
BulletinBoardService.Open: sent when a player double clicks a bulletin board (bulletin_board.lua, board.open).
0x71/0x01outgoingItems
BulletinBoardSummaryPacket
Bulletin board: message summary
SizeDynamic · minimum 22 bytes
Directionoutgoing
Notes
The line of a message in the list of a board: who posted it, what about and when.
Host handler
BulletinBoardRequestPacketHandler: the answer to a client's sub-command 0x04.
0x71/0x02outgoingItems
BulletinBoardMessagePacket
Bulletin board: message
SizeDynamic · minimum 24 bytes
Directionoutgoing
Notes
A message in full, with its poster as it looked when it posted. The two zeros after a line work around an old client bug that loses the last letter.
Host handler
BulletinBoardRequestPacketHandler: the answer to a client's sub-command 0x03.
0x72incomingWorld
WarModeRequestPacket
War mode request
SizeFixed · 5 bytes
Directionincoming
Notes
Sent when the player switches between war and peace.
Host handler
WarModeRequestPacketHandler: sets the mode, answers with 0x72 and shows the stance to the players around.
0x72outgoingWorld
WarModePacket
SizeFixed · 5 bytes
Directionoutgoing
Notes
Tells the client its current war mode.
Host handler
CharacterEnterWorldService: peace during world entry. MobileStateService: the answer to a war mode request or to a script.
0x73bothLogin
PingPacket
SizeFixed · 2 bytes
Directionboth
Notes
Bidirectional keepalive packet.
Host handler
Game: PingPacketHandler; Login: LoginRolePingPacketHandler
0x74outgoingItems
VendorBuyListPacket
Vendor: buy list
SizeDynamic · minimum 8 bytes
Directionoutgoing
Notes
The prices and names of the shop window, in the order of the items that 0x3C sent (0x3C writes them from the last to the first).
Host handler
VendorService.OpenBuy: sent with 0x2E (the two virtual shop containers), 0x3C and 0x24 (gump 0x30).
0x75incomingWorld
RenameRequestPacket
Rename request
SizeFixed · 35 bytes
Directionincoming
Notes
Sent when the player edits the name of a creature in its status bar, which the status (0x11) allows with its can rename byte.
Host handler
RenameRequestPacketHandler: the owner renames its pet (1 to 16 letters, no banned word) and staff any creature they reach, within 12 tiles; a summon is refused to its owner, not to staff. A name is read as Latin-1, so a byte above 0x7F is a name the rules refuse, not a rejected packet.
0x77outgoingWorld
MobileMovingPacket
SizeFixed · 17 bytes
Directionoutgoing
Notes
Moves or turns a mobile the client already shows.
Host handler
WorldViewService: sent to the players that already saw a mobile when it steps or turns.
0x78outgoingWorld
MobileIncomingPacket
SizeDynamic · minimum 23 bytes
Directionoutgoing
Notes
Introduces the mobile and its worn items; ends with a zero serial.
Host handler
CharacterEnterWorldService: sends the player and worn items during world entry. WorldViewService: a mobile that comes into range, or is revealed, to the players around.
0x80incomingLogin
AccountLoginPacket
SizeFixed · 62 bytes
Directionincoming
Notes
Checks credentials and returns a realm list or denial.
Host handler
Login: async account check, then 0xA8 list or 0x82 denial
0x82outgoingLogin
LoginDeniedPacket
SizeFixed · 2 bytes
Directionoutgoing
Notes
Rejects login with a reason code.
Host handler
LoginRoleAccountPacketHandler and LoginRoleServerSelectPacketHandler on the login role; GameLoginPacketHandler on the game role when the handoff ticket is refused.
0x83incomingCharacters
DeleteCharacterPacket
Delete character
SizeFixed · 39 bytes
Directionincoming
Notes
Marks the selected character for deletion.
Host handler
DeleteCharacterPacketHandler: marks the character for deletion
0x85outgoingCharacters
CharacterDeleteResultPacket
SizeFixed · 2 bytes
Directionoutgoing
Notes
Reports the result of a deletion request.
Host handler
DeleteCharacterPacketHandler: reports the result of a deletion request.
0x86outgoingCharacters
CharacterListUpdatePacket
SizeDynamic · minimum 4 bytes
Directionoutgoing
Notes
Updates character slots without a full city list.
Host handler
Character list update response after a character slot changes.
0x88outgoingWorld
DisplayPaperdollPacket
SizeFixed · 66 bytes
Directionoutgoing
Notes
Opens a mobile's paperdoll.
Host handler
UseRequestPacketHandler: sent in answer to a double click.
0x89outgoingMobiles
CorpseEquipmentPacket
SizeDynamic · minimum 8 bytes
Directionoutgoing
Notes
What a corpse is drawn wearing. The items come first, in a container content (0x3C) of the corpse.
Host handler
WorldViewService: sent after the corpse of a human, elf or gargoyle body, with what who died wore that is still inside, its hair and its beard.
0x8CoutgoingLogin
ServerRedirectPacket
SizeFixed · 11 bytes
Directionoutgoing
Notes
Redirects to the selected realm after ticket issue.
Host handler
Login: sent after a valid 0xA0, before closing the login connection
0x8DincomingCharacters
CreateCharacterEnhancedPacket
Create character (Enhanced Client)
SizeDynamic · minimum 146 bytes
Directionincoming
Notes
Enhanced Client creation request. Only the current 146-byte layout is parsed.
Host handler
CreateCharacterEnhancedPacketHandler: creates and saves the character and starting items, then brings it into the world
0x90outgoingMaps
OldMapDetailsPacket
SizeFixed · 19 bytes
Directionoutgoing
Notes
The area a map item shows, for clients older than 7.0.13: Felucca and Trammel only.
Host handler
MapDisplayService: sent when a map opens on an older client.
0x91incomingLogin
GameLoginPacket
SizeFixed · 65 bytes
Directionincoming
Notes
Consumes the one-use handoff ticket and starts the game session.
Host handler
Game: validates and consumes the one-use handoff ticket, then sends 0xB9 and 0xA9
0x93incomingItems
OldBookHeaderChangePacket
Book header change (old)
SizeFixed · 99 bytes
Directionincoming
Notes
The title and author a player wrote, as the older clients send them. Saved as those of 0xD4.
Host handler
BookEditPacketHandler: BookDocumentService.SetHeader.
0x95incomingDyeing
HuePickerResponsePacket
Hue picker response
SizeFixed · 9 bytes
Directionincoming
Notes
The hue the player picked in the hue picker. Nothing is sent when the picker is closed.
Host handler
HuePickerResponsePacketHandler: gives the hue to the player's open picker; ignored when the id is not the one of the open picker.
0x95outgoingDyeing
HuePickerPacket
SizeFixed · 9 bytes
Directionoutgoing
Notes
Opens the client's hue picker with a graphic in it.
Host handler
HuePickerService: sent when a script opens a picker, as the dyes do on a dye tub.
0x9BincomingGeneral
HelpRequestPacket
Help request
SizeFixed · 258 bytes
Directionincoming
Notes
The client sends it when the player presses the Help button of the paperdoll.
Host handler
HelpRequestPacketHandler: opens the help menu gump (help_menu) of the character.
0x9EoutgoingItems
VendorSellListPacket
Vendor: sell list
SizeDynamic · minimum 9 bytes
Directionoutgoing
Notes
What the vendor offers to buy from the player: items the player carries that the vendor's shop buys, 250 at most. Amount and price above 65535 are sent as 65535.
Host handler
VendorService.OpenSell: sent when a player picks Sell in the vendor's context menu or says vendor sell.
0x9FincomingItems
VendorSellReplyPacket
Vendor: sell reply
SizeDynamic · minimum 9 bytes
Directionincoming
Notes
What the player chose to sell. A count that does not match the size is refused.
Host handler
VendorSellReplyPacketHandler: VendorService.Sell checks the window, the distance and the items, and either pays everything or nothing.
0xA0incomingLogin
ServerSelectPacket
SizeFixed · 3 bytes
Directionincoming
Notes
Selects an eligible live realm.
Host handler
Login: checks realm eligibility, issues ticket and redirects
0xA1outgoingWorld
MobileHitsPacket
SizeFixed · 9 bytes
Directionoutgoing
Notes
The hit points of a mobile. The players around get them as a share of 100, never the real numbers.
Host handler
MobileStateService: sent when a script changes a mobile's numbers.
0xA2outgoingWorld
MobileManaPacket
SizeFixed · 9 bytes
Directionoutgoing
Notes
The mana of a mobile, for its own player.
Host handler
MobileStateService: sent when a script changes a mobile's numbers.
0xA3outgoingWorld
MobileStaminaPacket
SizeFixed · 9 bytes
Directionoutgoing
Notes
The stamina of a mobile, for its own player.
Host handler
MobileStateService: sent when a script changes a mobile's numbers.
0xA6outgoingGeneral
UpdatesWindowPacket
SizeDynamic · minimum 10 bytes
Directionoutgoing
Notes
Sent once after the enter-world sequence when ultima.show_motd_gump is true. Maximum text size is 65,525 bytes. Unsupported characters or a longer combined MOTD fall back to Unicode journal messages without truncation.
Host handler
MotdService: the existing MOTD template and variables in a private native Updates scroll.
0xA8outgoingLogin
ServerListPacket
SizeDynamic · minimum 6 bytes
Directionoutgoing
Notes
Lists realms eligible for the authenticated account.
Host handler
LoginRoleAccountPacketHandler: sends the eligible realms after authentication.
0xA9outgoingCharacters
CharacterListPacket
SizeDynamic · minimum 6 bytes
Directionoutgoing
Notes
Sends saved characters and starting cities after game login.
Host handler
GameLoginPacketHandler: sends saved characters and starting cities.
0xAAoutgoingCombat
CombatantPacket
Combatant
SizeFixed · 5 bytes
Directionoutgoing
Notes
Highlights the target of the fight in the client. Sent when a player starts or changes a fight and when it ends or is refused.
Host handler
CombatService: sent to the player who fights. AttackRequestPacketHandler: a clear target for a refused request.
0xADincomingSpeech
UnicodeSpeechRequestPacket
Unicode speech request
SizeDynamic · minimum 14 bytes
Directionincoming
Notes
Speech typed by the player in Unicode, sent by every client. It is read leniently, since a refused packet disconnects the client: a missing terminator is accepted, a badly encoded character becomes U+FFFD and an odd language code becomes ENU. Only a truncated keyword list or more than 50 keywords is refused. The types guild (0x0D) and alliance (0x0E) are the guild and alliance chats.
Host handler
SpeechRequestPacketHandler: speech to the players in range and dot commands; the keyword ids of encoded speech reach the on_speech of the NPCs and of the scripted items. The guild and alliance types go to the guild chat and to no one else.
0xAEoutgoingSpeech
UnicodeSpeechMessagePacket
SizeDynamic · minimum 50 bytes
Directionoutgoing
Notes
Shows player speech and private command output in Unicode. Also carries MOTD lines when ultima.show_motd_gump is false or the native scroll cannot represent the complete text.
Host handler
Player speech, private command output and MOTD delivery.
0xAFoutgoingMobiles
DeathAnimationPacket
SizeFixed · 13 bytes
Directionoutgoing
Notes
Makes the client play the death of the mobile and tie it to its corpse; the client picks the animation of the body.
Host handler
DeathService: sent to the players who see an NPC die, after its corpse and before its removal.
0xB0outgoingGumps
GumpPacket
SizeDynamic · minimum 23 bytes
Directionoutgoing
Notes
Opens a gump on clients before 5.0.0a. The layout refers to the strings by index. Readable scrolls created with the staff book command use this gump protocol when opened.
Host handler
GumpService: opens a gump when the client is older than 5.0.0a.
0xB1incomingGumps
GumpResponsePacket
Gump response
SizeDynamic · minimum 23 bytes
Directionincoming
Notes
The answer is dropped when the gump was not sent, or offers no such button, switch or text entry, or a text is longer than 239 characters.
Host handler
GumpResponsePacketHandler: hands the answer to GumpService, which checks it and calls the gump.
0xB5incomingChat
OpenChatWindowPacket
Open chat window
SizeFixed · 64 bytes
Directionincoming
Notes
The chat button. The legacy chat window is not built: the player is told which chats work.
Host handler
OpenChatWindowPacketHandler: tells the player the chats that work
0xB8incomingCharacters
ProfileRequestPacket
Character profile request
SizeDynamic · minimum 8 bytes
Directionincoming
Notes
The Enhanced Client sends it for its own character right after entering the world. A display request is answered with the profile when it may be read (the own one always, another player's within 12 tiles on the same map); an edit changes only the sender's own profile, up to 511 characters, and gets no reply.
Host handler
ProfileRequestPacketHandler: replies with 0xB8; an edit stores the cleaned text in the prop profile of the character
0xB8outgoingCharacters
ProfilePacket
Character profile
SizeDynamic · minimum 12 bytes
Directionoutgoing
Notes
The answer to a display request of 0xB8.
Host handler
ProfileRequestPacketHandler
0xB9outgoingLogin
SupportFeaturesPacket
Enable Locked Client Features
SizeFixed · 5 bytes
Directionoutgoing
Notes
Enables client features after game login.
Host handler
Game: sent after a valid 0x91
0xBAoutgoingSkills
QuestArrowPacket
Quest arrow
SizeDynamic · minimum 6 bytes
Directionoutgoing
Notes
Shows or clears the quest arrow at the edge of the client's screen, which points to a spot of the map and moves as the player walks. It is 6 bytes for a client older than 7.0.9.0 (or one that has not told its version) and 10 bytes from 7.0.9.0, with the serial of the target at the end; it has no length field, so "variable" only says that the size depends on the client. The Tracking skill uses it; not tried with a real client.
Host handler
ArrowModule: arrow.show(player, x, y, target) and arrow.clear(player).
0xBCoutgoingWorld
SeasonChangePacket
SizeFixed · 3 bytes
Directionoutgoing
Notes
Sets the displayed season. The client resets its light and stops its weather on it, so 0x4F and 0x65 follow.
Host handler
CharacterEnterWorldService at world entry; SeasonService on a region change or a map change to another season, a rotation and .season, followed by 0x4F light and 0x65 weather. It is sent only when the season differs from the last one sent.
0xBDincomingLogin
ClientVersionPacket
SizeDynamic · minimum 4 bytes
Directionincoming
Notes
Records the client version on the session.
Host handler
ClientVersionPacketHandler: records the client version on the session
0xBDoutgoingLogin
ClientVersionRequestPacket
SizeFixed · 3 bytes
Directionoutgoing
Notes
Requests the client version.
Host handler
Registered in the built-in table; not sent by any host today.
0xBFincomingWorld
ExtendedCommandPacket
Extended command
SizeDynamic · minimum 5 bytes
Directionincoming
Notes
Subcommand 0x10 asks for one tooltip and 0x1A sets the lock of a stat (a byte for the stat, 0 strength, 1 dexterity, 2 intelligence, and a byte for the lock, 0 up, 1 down, 2 locked). Subcommand 0x13 asks for the context menu of a mobile or an item (its serial, four bytes) and 0x15 chooses an entry of it (the serial and the index of the entry, two bytes). Subcommand 0x1C casts the spell of one of the client's icons: two bytes with 1 when the serial of a spellbook follows (four bytes), then two bytes with the number of the spell from 1. Subcommand 0x06 is a party command: its first payload byte is the command (0x01 add and 0x02 remove, each with a serial or none, 0x03 a private message with its target, 0x04 a public message, 0x06 the loot flag, 0x08 accept and 0x09 decline, each with the serial of the leader). The others are ignored for now. Outgoing 0xBF/0x08, 0xBF/0x14 and 0xBF/0x19 are separate subcommands.
Host handler
ExtendedCommandPacketHandler: subcommand 0x10 answers the tooltip; subcommand 0x1A sets the stat lock of the character in the world (a lock past locked reads as up); subcommands 0x13 and 0x15 go to ContextMenuService.Request and Select; subcommand 0x1C goes to SpellCastService.CastFromBook; subcommand 0x06 goes to PartyService
0xBF/0x04outgoingGumps
CloseGumpPacket
SizeDynamic · minimum 5 bytes
Directionoutgoing
Notes
Extended command subcommand 0x04 closes a gump.
Host handler
GumpService: closes a gump replaced by one with the same id, or closed by the server.
0xBF/0x08outgoingWorld
MapChangePacket
SizeDynamic · minimum 5 bytes
Directionoutgoing
Notes
Extended command subcommand 0x08 changes the client map: sent on world entry and before the new position of a player teleported to another map.
Host handler
CharacterEnterWorldService: sends the selected map during world entry. TeleportService: sends the new map to a player teleported across maps.
0xBF/0x14outgoingWorld
DisplayContextMenuPacket
Display context menu
SizeDynamic · minimum 12 bytes
Directionoutgoing
Notes
The context menu of a mobile or an item: the server's own entries (Open Paperdoll, Open Backpack), then the ones its Lua script adds. An entry the player is out of range of, or that is not enabled, is greyed out. The client answers with 0xBF subcommand 0x15 and the index chosen. A target with no entry gets no packet.
Host handler
ContextMenuService.Request, asked by the client with 0xBF subcommand 0x13.
0xBF/0x19outgoingSkills
StatLockInfoPacket
SizeDynamic · minimum 5 bytes
Directionoutgoing
Notes
The arrows beside strength, dexterity and intelligence in the status window. Sent after the status when a player enters the world, and again with the three locks when one changes, as ModernUO.
Host handler
CharacterEnterWorldService: sends the stat locks of the character during world entry. MobileStateService.SetStatLock: sends them again to the player when one changes.
0xBF/0x1BoutgoingMagic
NewSpellbookContentPacket
SizeDynamic · minimum 5 bytes
Directionoutgoing
Notes
The contents of a spellbook for the newer clients, which read them from this packet instead of from the fake items the magery book is drawn from. Only the necromancer's book is sent this way; the magery book keeps 0x3C.
Host handler
SpellbookService: sends the spells a necromancer's book holds when its owner opens it and when a spell is added to it.
0xBF/0x21outgoingCombat
ClearAbilityPacket
SizeDynamic · minimum 5 bytes
Directionoutgoing
Notes
Tells the client that no weapon special move is selected, so that it puts its icon back.
Host handler
—
0xBF/0x0601outgoingParty
PartyMemberListPacket
SizeDynamic · minimum 7 bytes
Directionoutgoing
Notes
Party command 0x01 of the extended command 0x06: the members of the party, as the client shows them in its party window. Sent to every member when someone joins.
Host handler
PartyService: sends the list to every member when a player accepts an invitation.
0xBF/0x0602outgoingParty
PartyRemoveMemberPacket
SizeDynamic · minimum 11 bytes
Directionoutgoing
Notes
Party command 0x02 of the extended command 0x06: a member is no longer in the party. The player who left, and the survivor of a party that ends, get it with nobody remaining.
Host handler
PartyService: sends it when a member leaves, is removed, logs out or the party is disbanded.
0xBF/0x0603outgoingParty
PartyMessagePacket
SizeDynamic · minimum 11 bytes
Directionoutgoing
Notes
Party commands 0x03 and 0x04 of the extended command 0x06: a chat message of the party. The text is trimmed and cut at ultima.party.chat_max_length.
Host handler
PartyService: SendPublic sends it to every member and SendPrivate to one member.
0xBF/0x0607outgoingParty
PartyInvitePacket
SizeDynamic · minimum 10 bytes
Directionoutgoing
Notes
Party command 0x07 of the extended command 0x06 (10 bytes): an invitation to join the party of a leader. The client answers with its accept or decline buttons, which send 0xBF 0x06 0x08 and 0x09 with the same serial.
Host handler
PartyService: sends it to the invited player.
0xC0outgoingWorld
HuedEffectPacket
SizeFixed · 36 bytes
Directionoutgoing
Notes
Plays a graphic effect: a moving one, a lightning bolt, or an animation that stays at a point or on an object. Sent for every effect that has a graphic and for every lightning bolt, which has none; a moving effect with graphic 1, the placeholder of ModernUO scripts, counts as having no graphic. The plain 0x70 is never sent.
Host handler
EffectService: the effect module of scripts, to the players of the map within the view range of the effect; a moving effect also reaches those in range of its destination.
0xC1outgoingWorld
LocalizedMessagePacket
SizeDynamic · minimum 50 bytes
Directionoutgoing
Notes
A cliloc shown by the client in its language.
Host handler
LookRequestPacketHandler: the name over an object. UseRequestPacketHandler: the too-far message. ItemModule: a cliloc shown by a script. SpeechService: a cliloc as a system message (mobile.message_cliloc, the food script).
0xC2incomingPrompts
TextPromptResponsePacket
Text prompt response
SizeDynamic · minimum 19 bytes
Directionincoming
Notes
The player's answer to a text prompt.
Host handler
TextPromptResponsePacketHandler: completes the player's pending prompt; over 128 characters or another id is ignored.
0xC2outgoingPrompts
TextPromptPacket
SizeDynamic · minimum 21 bytes
Directionoutgoing
Notes
Asks the player for a line of text, typed in the journal line.
Host handler
PromptService: sent when a prompt begins.
0xC7outgoingWorld
ParticleEffectPacket
SizeFixed · 49 bytes
Directionoutgoing
Notes
The hued effect (0xC0) followed by the particle fields. Sent only to the Enhanced Client, for an effect that has a particle id; every other client gets 0xC0, or nothing when the effect has no graphic.
Host handler
EffectService: the effect module of scripts, to the Enhanced Clients in range.
0xC8incomingWorld
UpdateRangePacket
Update range
SizeFixed · 2 bytes
Directionincoming
Notes
Answered with the server's view range, whatever the client asked.
Host handler
UpdateRangePacketHandler: answers with the server's view range.
0xC8outgoingWorld
ViewRangePacket
SizeFixed · 2 bytes
Directionoutgoing
Notes
Tells the client the server's view range.
Host handler
UpdateRangePacketHandler: sent in answer to the client's 0xC8.
0xCCoutgoingSpeech
LocalizedMessageAffixPacket
Localized message with affix
SizeDynamic · minimum 52 bytes
Directionoutgoing
Notes
A client text with a text of the server written after it: "Into your bank box I have placed a check in the amount of:" and the amount. The client shows the cliloc in its own language.
Host handler
SpeechService.SayCliloc with an affix: npc.say_cliloc(npc, cliloc, args, affix), used by banker.lua.
0xD4incomingItems
BookHeaderChangePacket
Book header change
SizeDynamic · minimum 7 bytes
Directionincoming
Notes
The title and author a player wrote. Saved when the sender carries the book and the book is writable, a title of 60 bytes and an author of 30 at most; the item takes the title as its name.
Host handler
BookEditPacketHandler: BookDocumentService.SetHeader.
0xD4outgoingItems
BookHeaderPacket
Book header
SizeDynamic · minimum 17 bytes
Directionoutgoing
Notes
Opens the client's book on its cover. The pages follow in 0x66.
Host handler
BookDocumentService.Open: sent for a document whose item template has script_id readable_book.
0xD6incomingWorld
QueryPropertiesPacket
Query properties
SizeDynamic · minimum 3 bytes
Directionincoming
Notes
Answered with one 0xD6 per object the character sees.
Host handler
QueryPropertiesPacketHandler: one 0xD6 per visible object
0xD6outgoingWorld
PropertyListPacket
SizeDynamic · minimum 19 bytes
Directionoutgoing
Notes
An AOS tooltip.
Host handler
QueryPropertiesPacketHandler and ExtendedCommandPacketHandler.
0xD7incomingCombat
AbilityRequestPacket
Encoded command
SizeDynamic · minimum 9 bytes
Directionincoming
Notes
The client's encoded command. Subcommand 0x19 (the weapon special moves) is read, and 0x32, the Quest button of the paperdoll, opens the quest log; any other subcommand and a selection cut short are kept and ignored, never disconnecting the client.
Host handler
AbilityRequestPacketHandler: selects or clears a weapon special move, and hands the Quest button (0x32) to the quest engine
0xD9incomingLogin
ClientHardwareInfoPacket
Client hardware information
SizeFixed · 268 bytes
Directionincoming
Notes
Recognized and ignored for now, in every server mode; hardware data is not stored. The Enhanced Client sends it at login.
Host handler
Game: IgnoredPacketHandler<T>; Login: LoginRoleIgnoredPacketHandler<T>. Both recognise and ignore it for now (Debug log)
0xDCoutgoingWorld
PropertyListInfoPacket
SizeFixed · 9 bytes
Directionoutgoing
Notes
Tells the client the current tooltip revision.
Host handler
WorldViewService and the item handlers.
0xDDoutgoingGumps
CompressedGumpPacket
SizeDynamic · minimum 35 bytes
Directionoutgoing
Notes
Opens a gump on clients from 5.0.0a, compressed. Readable scrolls created with the staff book command use this gump protocol when opened.
Host handler
GumpService: opens a gump on a client from 5.0.0a.
0xE1incomingLogin
ClientTypePacket
Client type
SizeDynamic · minimum 3 bytes
Directionincoming
Notes
Recognized and ignored for now.
Host handler
IgnoredPacketHandler<T>: recognised and ignored for now (Debug log)
0xEFincomingLogin
LoginSeedPacket
SizeFixed · 21 bytes
Directionincoming
Notes
Records the client version when sent on login listeners.
Host handler
LoginSeedPacketHandler; on login listeners it also records the client version, which the handoff ticket carries to the game session
0xF0incomingWorld
ProtocolExtensionPacket
Protocol extension request
SizeDynamic · minimum 4 bytes
Directionincoming
Notes
The Krrios protocol extension. ClassicUO sends it every few seconds while the world map is open. Command 0 asks where the members of the party are and is answered with 0xF0 command 1 (PartyLocationsPacket); command 1, the guild, is recognized and ignored for now: there are no guilds on the map.
Host handler
ProtocolExtensionPacketHandler: command 0 answers PartyService.LocationsFor; other commands are ignored (Debug log)
0xF0/0x01outgoingParty
PartyLocationsPacket
SizeDynamic · minimum 8 bytes
Directionoutgoing
Notes
Answer to the party query of the protocol extension 0xF0. It lists the members of the party who are out of the player's view, in the order they joined, and ends with a zero serial. Nothing is sent when every member is in view.
Host handler
ProtocolExtensionPacketHandler: sends it to the player who asked
0xF3outgoingWorld
WorldItemSaPacket
SizeDynamic · minimum 24 bytes
Directionoutgoing
Notes
Shows an item on the ground to clients from 7.0.0.0; 26 bytes from 7.0.9.0.
Host handler
WorldViewService: sent to the players in range when an item is dropped, and when they come into range of it.
0xF5outgoingMaps
MapDetailsPacket
SizeFixed · 21 bytes
Directionoutgoing
Notes
The area a map item shows, with its facet, for clients 7.0.13 and newer.
Host handler
MapDisplayService: sent when a map opens.
0xF8incomingCharacters
CreateCharacterPacket
Create character
SizeFixed · 106 bytes
Directionincoming
Notes
ClassicUO character creation request. Raw choices are validated before saving.
Host handler
CreateCharacterPacketHandler: creates and saves the character and starting items, then brings it into the world
0xFBincomingWorld
PublicHouseContentPacket
Public house content
SizeFixed · 2 bytes
Directionincoming
Notes
Recognized and ignored for now.
Host handler
IgnoredPacketHandler<T>: recognised and ignored for now (Debug log)
Select a packet to see its structure.
Type Legend
Integers
byte / sbyte- Unsigned / signed 8-bit integer
short / ushort- Signed / unsigned 16-bit integer
int / uint- Signed / unsigned 32-bit integer
long / ulong- Signed / unsigned 64-bit integer
Strings
ascii- ASCII text, fixed or variable width
utf8- UTF-8 text
Special
bool- Boolean value
enum- Named numeric value
bitfield- Flags packed into bits
Structures
byte[]- Raw byte sequence
loop- Repeated fields or records