Coding

From Anarchy Online Wiki [AOWiki]

Anarchy Online Chat Protocol

Anarchy Online has its own chat protocol for communicating between the Chat Client and the Chat Servers. The game client has its own chat client for communication with the chat server and third party programs created to interact with the chat server or provide automated functions are called Bots

AO Chat Packet Types

Packet names are from a unofficial attempt at standardizing the names to make it easier for developers to work on other projects. The standardization for the packet names was discussed in a Thread on AODevs

Bi-Directional Types - ToServer

  • 21: CharacterLookupRequest
    • String - Character Name
  • 30: PrivateMessage
    • int - Character ID
    • String - Message
    • String - ???
  • 40: FriendUpdate
    • int - Character ID
    • byte - Flags (0 means temporary, anything else means permanent)
  • 41: FriendRemove
    • int - Character ID
  • 50: PrivateChannelInvite
    • int - Character ID
  • 51: PrivateChannelKick
    • int - Character ID
  • 57: PrivateChannelMessage
    • int - Character ID
    • String - Message
    • String - ???
  • 60: ChannelUpdate (Used for muting channels, but is not used much anymore because it is not reliable)
    • byte[] - Channel ID (40bit)
    • String - Channel Name
    • int - Channel Status
  • 65: ChannelMessage
    • byte[] - Channel ID (40bit)
    • int - Character ID
    • String - Message
    • String - ???
  • 100: Ping
    • String - ???

Bi-Directional Types - ToClient

  • 21: CharacterLookupReply
    • int - Character ID
    • String - Character Name
  • 30: PrivateMessage
    • int - Character ID
    • String - Message
    • String - ???
  • 40: FriendUpdate
    • int - Character ID
    • bool - Online
    • byte - Flags (0 means temporary, anything else means permanent)
  • 41: FriendRemove
    • int - Character ID
  • 50: PrivateChannelInvite
    • int - Character ID
  • 51: PrivateChannelKick
    • int - Character ID
  • 57: PrivateChannelMessage
    • int - Character ID
  • 60: ChannelUpdate
    • byte[] - Channel ID (40bit)
    • String - Channel Name
    • int - Channel Status
  • 65: ChannelMessage
    • byte[] - Channel ID (40bit)
    • int - Character ID
    • String - Message
    • String - ???
  • 100: Ping
    • String - ???

To Client

  • 0: LoginSeed
    • String - Seed
  • 5: LoginOk
    • No data
  • 6: LoginError
    • String - Error Message
  • 7: CharacterList
    • int[] - Array of character ID's
    • String[] - Array of character Names
    • int[] - Array of character levels
    • int[] - Array of to determine if the character is already logged on
  • 10: CharacterUnknown
    • int - ???
  • 20: CharacterUpdate
    • int - Character ID
    • String - Character Name
  • 34: VicinityMessage
    • int - Character ID
    • String - Message
    • String - ???
  • 35: BroadcastMessage
    • String - Source
    • String - Message
    • String - ???
  • 36: SimpleSystemMessage
    • String - Message
  • 37: SystemMessage
    • int - Client ID
    • int - Window ID
    • int - Message ID
    • String - Message
  • 55: PrivateChannelCharacterJoin
    • int - Character ID (of the channel)
    • int - Character ID
  • 56: PrivateChannelCharacterLeave
    • int - Character ID (of the channel)
    • int - Character ID
  • 61: ChannelLeave
    • byte[] - Channel ID (40bit)

To Server

  • 2: LoginRequest
    • int - Version
    • String - Account Name
    • String - Key
  • 3: LoginSelect
    • int - Character ID
  • 52: PrivateChannelAccept
    • int - Character ID (of the channel)
  • 53: PrivateChannelLeave
    • int - Character ID (of the channel)
  • 54: PrivateChannelKickAll
    • No data
  • 120: ChatCommand
    • String - Command