Introduction
Welcome to the Conquer Online server development and client modifications wiki. This wiki is hosted publicly using Git, published using mdBook, and maintained by the open source community. Pages on this wiki cover topics such as server-client message types, cryptography, client file formats, constants, system overviews, and more.
To participate in this collaborative effort to document Conquer Online development, the following rules must be followed:
- Articles must be written from a neutral point of view.
- Authors must respect each other, and not engage in personal attacks.
- Authors must not publish pirated programs.
Please read up on the code of conduct found in the root of the repository.
Verification
Statuses are used to indicate how reliable a page is / what the source of information is. Specifically, if information has been gathered from a community source, such as a private server project, then the status should be unverified until the server is run and the behavior can be at least observed.
- 🚩 Incomplete: The source is unknown and the information is incomplete.
- ❓ Unverified: The source is unknown or cannot be verified.
- ☑️ Assumed (Observed): Assumed by observing the behavior in the client.
- ☑️ Assumed (Soul): Assumed by reading the leaked client source code from TQ.
- ✅ Verified (Client): Confirmed by reverse engineering the client binary.
- ✅ Verified (Server): Confirmed by reverse engineering the leaked server binaries.
Sections
This wiki is broken up into multiple sections:
- Algorithms: Calculations made for attacks, rates, skill distances, and more.
- Constants: Hard-coded constants found in and across messages and the client.
- Files: File formats and definitions for various content types.
- Network: Message structures and client-server networking.
- Renderers: System descriptions for rendering content in the client.
- Security: Cryptography and security around networking and content.
- Strings: Details on strings and restrictions on inputs.
Algorithms
This section documents algorithms and calculations for attacks, movement, and more.
Conquer Online's client and server both utilize Microsoft's rand
function for random number generation. This can be seen when generating a seed for RC5 in later patches of the client. Algorithms documented by this section that reference rand
are assumed to use the Microsoft C implementation.
Subsections
- Calculations: Algorithms used in calculating distance, damage, etc.
- Rates: Descriptions of random rates for various systems.
Calculations
Attributes
Damage
Direction
Enlightenment
Item Durability
Role View
Rates
Item Composition
Item Sockets
Constants
Action
Actions are emotes a role can perform. Not all roles can perform all types of actions. For monsters and players, this is determined by the 3dmotion.ini file. For NPCs, this is determined by npc.ini, which links with 3dmotion.ini for ACTION_STANDBY
, ACTION_REST1
, and ACTION_SAYHELLO
.
Table of Contents
Patch 4267
☑️ Assumed (Observed) - Soul
enum ActionType {
ACTION_DANCE1 = 1;
ACTION_DANCE2 = 2;
ACTION_DANCE3 = 3;
ACTION_DANCE4 = 4;
ACTION_DANCE5 = 5;
ACTION_DANCE6 = 6;
ACTION_DANCE7 = 7;
ACTION_DANCE8 = 8;
ACTION_STANDBY = 100;
ACTION_REST1 = 101;
ACTION_REST2 = 102;
ACTION_REST3 = 103;
ACTION_STANDBY_I = 105;
ACTION_WALKL = 110;
ACTION_WALKR = 111;
ACTION_WALKL_I = 115;
ACTION_WALKR_I = 116;
ACTION_RUNL = 120;
ACTION_RUNR = 121;
ACTION_TRANSFORM = 122;
ACTION_RUNL_I = 125;
ACTION_RUNR_I = 126;
ACTION_JUMP = 130;
ACTION_JUMP_BACK = 131;
ACTION_JUMP_RUN = 132;
ACTION_JUMP_ATK = 140;
ACTION_JUMP_ATKEND = 141;
ACTION_LAUGH = 140;
ACTION_GUFFAW = 151;
ACTION_FURY = 160;
ACTION_SAD = 150;
ACTION_SALUTE = 160;
ACTION_GENUFLECT = 170;
ACTION_EXCITEMENT = 180;
ACTION_SAYHELLO = 190;
ACTION_FAINT = 190;
ACTION_LIE = 200;
ACTION_KNEEL = 220;
ACTION_COOL = 230;
ACTION_COOLPOSE = 231;
ACTION_SWIM = 240;
ACTION_SITDOWN = 250;
ACTION_SITDOWN_STATIC = 251;
ACTION_ZAZEN = 260;
ACTION_ZAZENCOOL = 261;
ACTION_PICKUP = 262;
ACTION_ALERT_I = 305;
ACTION_DODGE0 = 311;
ACTION_BRUISE0 = 321;
ACTION_BRUISE1 = 321;
ACTION_POPOFF = 321;
ACTION_DIE0 = 330;
ACTION_BODY0 = 331;
ACTION_DIE1 = 332;
ACTION_BODY1 = 333;
ACTION_DIE2 = 334;
ACTION_BODY2 = 335;
ACTION_DIE3 = 336;
ACTION_BODY3 = 337;
ACTION_ALERT = 340;
ACTION_DIEFLY = 340;
ACTION_DIEFLYEND = 341;
ACTION_WALKBACK = 342;
ACTION_ATTACK0 = 350;
ACTION_ATTACK1 = 351;
ACTION_ATTACK2 = 352;
ACTION_MINE = 360;
ACTION_INTONE = 390;
ACTION_INTONE_DURATION = 391;
ACTION_INTONE_LAUNCH = 392;
ACTION_RELIVE = 400;
ACTION_PUNCTURE = 451;
ACTION_AIRSTRIKE = 452;
ACTION_TORNADO = 453;
ACTION_BODYSHIELD = 460;
ACTION_GODBELIEVE = 465;
ACTION_BUMP = 470;
ACTION_FLY_STANDBY = 501;
ACTION_FLY_ALERT = 502;
ACTION_FLY_MOVE = 510;
ACTION_FLY_ATTACK = 520;
ACTION_FLY_DOWN = 530;
ACTION_FLY_UP = 540;
ACTION_FLY_DIE = 550;
ACTION_FLY_WOUND = 560;
ACTION_JUMPBACK_SHOOT = 610;
ACTION_FAST_SHOOT = 620;
ACTION_CHARGEUP_BEGIN = 630;
ACTION_CHARGEUP_END = 631;
ACTION_TM_FAST_SHOOT = 800;
ACTION_TM_DISPERSION_SHOOT = 801;
}
Gem
Hairstyles
Hero Look
Hero Profession
Look Face
The look face of a player or monster is the mesh calculation for the 3D role. While the monster look face is rather simple (just the monster type), the look face of a player is more complicated and follows this equation:
Look = Body + (Avatar x 10000) + (Transformation x 10000000)
PK Mode
Role Type
Roles in Conquer Online are entities such as NPCs, Monsters, and Heroes (the players). Depending on the role, the game client interprets left click actions differently. The server may use these constants to determine how MsgInteract is processed, or how an NPC is spawned using MsgNpcInfo.
Table of Contents
Patch 4267
☑️ Assumed (Soul)
enum RoleType {
ROLE_NPC_NONE = 0;
ROLE_SHOPKEEPER_NPC = 1;
ROLE_TASK_NPC = 2;
ROLE_STORAGE_NPC = 3;
ROLE_TRUNK_NPC = 4;
ROLE_FACE_NPC = 5;
ROLE_FORGE_NPC = 6;
ROLE_EMBED_NPC = 7;
ROLE_STATUARY_NPC = 9;
ROLE_SYNFLAG_NPC = 10;
ROLE_PLAYER = 11,
ROLE_HERO = 12,
ROLE_MONSTER = 13,
ROLE_BOOTH_NPC = 14,
SYN_TRANSPORT_NPC = 15,
ROLE_BOOTH_FLAG_NPC = 16,
ROLE_MOUSE_NPC = 17,
ROLE_MAGICITEM = 18,
ROLE_DICE_NPC = 19,
ROLE_WEAPONGOAL_NPC = 21,
ROLE_MAGICGOAL_NPC = 22,
ROLE_BOWGOAL_NPC = 23,
ROLE_TARGET_NPC = 24,
ROLE_FURNITURE_NPC = 25,
ROLE_CITY_GATE_NPC = 26,
ROLE_NEIGHBOR_DOOR = 27,
ROLE_CALL_PET = 28,
TRAINPLACE_NPC = 29,
AUCTION_NPC = 30,
ROLE_STONE_MINE = 31,
ROLE_PKGAME_NPC = 32,
ROLE_3DFURNITURE_NPC = 101,
ROLE_CITY_WALL_NPC = 102,
ROLE_CITY_MOAT_NPC = 103,
}
Files
This section documents file formats and provides definitions for various content types.
Files in the Conquer Online game client follow some consistency in format, but are largely different between files. Some files are encrypted by various ciphers, and some files are packed in compressed archives.
Subsections
- Compression: File types meant for compressing content into a single file.
- Content: File types specific to content needed for the client renderers.
- Formats: Formats for how to read various file types.
Compression
Content
3DMotion.ini
Cn_Res.ini
fuse.ini
GameMap.dat
ItemType.dat
Magic Type
MapMagicItem.ini
This file is loaded on client role data initialization, and utilized by MsgMapItem to show magical effects on the map floor. These effects play as "moments" that the client iterates through: starting with "start" and ending with "end". If any of the moment TMEs are "0" in the file, then that moment will be skipped.
The "look" described in MsgMapItem is the type key in the INI file.
Table of Contents
Patch 4267
☑️ Assumed (Soul)
Field | Type | Description | Example |
---|---|---|---|
Start | String | Starting TME to play at start of processing | rain01.TME |
Last | String | Lasting TME playing until effect is removed | windblade7-1.TME |
End | String | Ending TME to play at the end of processing | line05.TME |
Below is an example entry using the definition above:
[Type10]
Start=rain01.TME
Last=windblade7-1.TME
End=line05.TME
Monster Type
Npc.ini
Res.dat
StatusEffect.ini
This file is used to map effects to player statuses for MsgUserInfo. The index mapping can be found on that page, but the file structure for mapping those effects can be found below. Though labeled as an INI file, it doesn't follow the syntax. Each entry is space delimitated and line separated.
Table of Contents
Patch 4267
✅ Verified (Client)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | Int64 | Index | Status index | 1 |
1 | Char[64] | 3DEffect | 3D effect name | poisonstate |
2 | Char[64] | 2DEffect | 2D effect name | NULL |
WeaponSkillLevelExp.ini
This file maps weapon skill levels to experience required to obtain the level. Similarly to WeaponSkillName.ini, this file is not an INI file. It's a CSV file where each new line in the list is a weapon skill level, and each entry has comma delimited fields.
Table of Contents
Patch 4267
✅ Verified (Client)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt32 | Level | Weapon skill level | 1 |
1 | UInt32 | Exp | Weapon skill experience | 0 |
WeaponSkillName.ini
This file maps weapon skill types to their names. Though labeled as an INI file, it's actually a CSV file where each new line in the list is a weapon skill entry, and each entry has comma delimited fields.
Table of Contents
Patch 4267
✅ Verified (Client)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt32 | Index | Weapon skill type index | 490 |
1 | Char[16] | Name | Weapon skill name | Dagger |
Formats
DMAP
TME
Network
This section documents network procedures and message types for client-server communication.
Conquer Online uses TCP/IPv4 for network communication between the game servers and client. Messages are received as a stream, and ordering must be preserved for the correct processing of requests. Message encryption relies on the previous message, either as a counter or using cipher feedback; therefore, if the messages are encrypted and decrypted out of order, the client and server will desynchronize.
Protocol
Conquer Online uses Little-endian for the byte ordering of words and multi-byte sequences.
Games developed by TQ Digital Entertainment employ a custom binary protocol in this endianness, and contain a message header and sometimes a message footer. Messages are written to the binary protocol using custom encoding rules that change between versions of the client. These changes are documented in the Messages section.
Subsections
- Messages: Definitions for how the client and server communicate.
Identifiers
Unique identifiers in Conquer Online are 32-bit unsigned integers split into incremental ranges. Due to the small size of identifiers, some must be recycled and reused, such as monster identifiers. The easiest method of recycling these identifiers is to create reservations per spawn area.
⚠️ WARNING
Incremental IDs, such as account IDs and item IDs, can be too predictable and lead to exposing account information of your PM / first created accounts on the server, or items in the database. Consider using a linear-feedback shift register for a pseudo-random identifier that is deterministic for counting, but obfuscated for general security use.
Table of Contents
Account Server
Account IDs can be any number in the range of a 32-bit unsigned integer.
Game Server
The game server has the following ranges statically defined.
Min | Max | Name | Description |
---|---|---|---|
0000001 | 0000299999 | Scene | Scenery NPC |
0000001 | 0000099999 | System NPC | Statically spawned NPC |
0100001 | 0000199999 | Dynamic NPC | Dynamically spawned NPC |
0400001 | 0000499999 | Monster | World monster spawn |
0500001 | 0000599999 | Pet | Syndicate monster spawn |
0700001 | 0000799999 | Call Pet | Player monster spawn |
0900001 | 0000989999 | Magic Trap | Player spell trap from MsgMapItem |
0990001 | 0000999999 | System Trap | System trap from MsgMapItem |
1000000 | 3999999999 | Hero | Player character |
Some identifiers, such as items, are incremental across a 32-bit unsigned integer range.
Messages
This subsection organizes messages by the name found in the assembly of the macOS game client. See the table before for a mapping from message type to message definition.
Message Header
The table below defines TQ's message header. The header is written to all messages first and contains the size of the message (aka. the message length minus the size of the footer) and the message type (a constant identifier for handling the message on the client and server).
Pos | Type | Description | Example |
---|---|---|---|
0 | UInt16 | Message Size | 60 |
2 | UInt16 | Message Type | 1001 |
Message Footer
The message footer in Conquer Online was added in patch 5018. The footer contains an 8-byte string identifying the sender of the message. If the client sent the message, the footer would be "TQClient"; else, it would be "TQServer".
Message Types
The table below is an abstract and directory of message types used in various patches of Conquer Online.
Msg2ndPsw
MsgAccount
This client message is sent to the account server to request authentication. There have been multiple message types over the years for handling authentication requests from the client. MsgAccount is the first, but was later replaced by MsgAccountSRP6 and MsgAccountSRP6Ex in versions 5532+.
In this message, the player's password is encrypted using RC5.
⚠️ WARNING
The password in this message is encrypted using a static key in earlier versions of the client. Although later versions start to use a generated key, that key is exchanged using MsgEncryptCode and does not protect against proxies employing a man-in-the-middle attack. This was patched in version 5532 with the use of SRP6, which also added additional complexity for clientless bot creation.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - CoFuture + Soul
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 52 |
2 | UInt16 | MsgType | Type of message | 1051 |
4 | Char[16] | Account | Fixed string of the username | Player |
20 | Char[16] | Password | Encrypted buffer containing the password | RC5(Password) |
36 | Char[16] | Server | Fixed string of the game server | Meteor |
Patch 5165
Message Definition
✅ Verified (Client)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 276 |
2 | UInt16 | MsgType | Type of message | 1086 |
4 | Char[128] | Account | Fixed string of the username | Player |
132 | Char[128] | Password | Encrypted buffer containing the password | RC5(Password) |
260 | Char[16] | Server | Fixed string of the game server | Meteor |
MsgAccountKalydo
MsgAccountSoftKb
MsgAccountSRP6
MsgAccountSRP6Ex
MsgAchievement
MsgAction
This message is received by the game server or game client as a general action request. The server responds to MsgAction with either a specific action message (such as a spawn that was missing or with item details) or with the MsgAction message itself (such as for the login messages). The client may or may not respond with the MsgAction in response to a server MsgAction message.
MsgAction is used for a variety of actions, such as configuring the client during login, changing maps, requesting inventory and friends lists, setting the hero's location on login, jumping, and more.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 28 |
2 | UInt16 | MsgType | Type of message | 1010 |
4 | UInt32 | System Time | Milliseconds of system uptime | 1579535985 |
8 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
12 | UInt16 | X | X coordinate of the action or hero | 320 |
14 | UInt16 | Y | Y coordinate of the action or hero | 460 |
16 | UInt32 | Direction | Action direction | 0 |
20 | UInt32 | Data | Payload or target identifier | 0 |
24 | UInt32 | Action | How to processes the message | 0 |
Action Type
☑️ Assumed (Soul)
🔶 Response data
Val | Name | Description | Recipient | ID | Data |
---|---|---|---|---|---|
124 | CHANGE_DIR | Change facing direction | Server | Hero ID | |
126 | CHANGE_EMOTION | Change emoting action | Server | Hero ID | Action |
130 | CHANGE_MAP | Change map (portal) | Server | Hero ID | |
137 | ENTER_MAP | Request hero location | Server | Hero ID | Map ID 🔶 |
138 | GET_ITEMS | Load items on login | Server | Hero ID | |
139 | GET_FRIENDS | Load friends on login | Server | Hero ID | |
141 | LEAVE_MAP | Remove role entity from map | Client | Role ID | |
142 | JUMP | Role entity jump | Server | Role ID | LOW: X HIGH: Y |
146 | UP_LEVEL | Notify new level | Server | Hero ID | |
147 | XP_CLEAR | Notify clear XP | Server | Hero ID | |
148 | REVIVE | Request revive | Server | Hero ID | |
149 | DEL_ROLE | Delete hero | Server | Hero ID | |
150 | GET_WEAPON_SKILLS | Load skills on login | Server | Hero ID | |
151 | GET_MAGIC | Load spells on login | Server | Hero ID | |
152 | SET_PK_MODE | Set PK mode | Server | Hero ID | Mode |
153 | GET_SYN_ATTR | Get guild info | Server | Hero ID | |
154 | GHOST | Notify death | Server | Hero ID | |
155 | SYNCHRO | Synchronize screen | Server | Hero ID | |
156 | QUERY_FRIEND_INFO | Get friend info | Server | Hero ID | Target ID |
157 | QUERY_LEAVE_WORD | Get offline messages | Server | Hero ID | |
158 | CHANGE_FACE | Change teammate or own avatar | Both | Hero ID | Face |
159 | MINE | Mine with pickaxe | Server | Hero ID | |
160 | TEAM_MEMBER_POS | Teammate position | Client | Hero ID | LOW: X HIGH: Y |
161 | QUERY_PLAYER | Get player spawn | Server | Hero ID | |
162 | ABORT_MAGIC | Cancel magic or chargeup | Server | Hero ID | |
164 | MAP_ARGB | Set game map ARGB | Client | ARGB | |
166 | QUERY_MEMBER | Get team member info | Server | Hero ID | Target ID |
167 | CREATE_BOOTH | Create market booth | Both | Hero ID | LOW: X HIGH: Y |
168 | SUSPEND_BOOTH | Pause market booth (unused) | Server | Hero ID | |
169 | RESUME_BOOTH | Resume market booth | Both | Hero ID | LOW: X HIGH: Y |
170 | DESTROY_BOOTH | Remove market booth | Server | Hero ID | |
172 | POST_CMD | Run client command | Client | Hero ID | Command |
173 | QUERY_EQUIPMENT | Get player's equipment | Server | Hero ID | |
174 | ABORT_TRANSFORM | Cancel transformation | Server | Hero ID | |
176 | LANDING | Cancel flight | Server | Hero ID | |
177 | GET_MONEY | Pick up money | Client | Hero ID | Amount |
179 | ENEMY_INFO | Get enemy info | Server | Hero ID | |
181 | KICKBACK | Rubberband to coord | Client | Hero ID | LOW: X HIGH: Y |
182 | DROP_MAGIC | Remove magic type | Client | Hero ID | Magic Type |
183 | DROP_SKILL | Remove weapon skill | Client | Hero ID | Weapon Skill Type |
184 | SOUND_EFFECT | Monster sound at coord | Client | Hero ID | Monster Type |
186 | POST_DIALOG | Open a dialog window | Client | Hero ID | Dialog ID |
Patch 5017
Message Definition
☑️ Assumed (Observed) - Redux
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 24 |
2 | UInt16 | MsgType | Type of message | 1010 |
4 | UInt32 | System Time | Milliseconds of system uptime | 1579535985 |
8 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
12 | UInt32 | Data | Payload or target identifier | 0 |
16 | UInt16 | X | X coordinate of the action or hero | 320 |
18 | UInt16 | Y | Y coordinate of the action or hero | 460 |
20 | UInt16 | Direction | Action direction | 0 |
22 | UInt16 | Action | How to processes the message | 0 |
Action Type
☑️ Assumed (Observed) - COPSv6
🔶 Response data
Val | Name | Description | Recipient | ID | Data |
---|---|---|---|---|---|
74 | GET_POSITION | Request hero location | Server | Hero ID | Map ID 🔶 |
75 | GET_ITEMS | Load items on login | Server | Hero ID | |
76 | GET_FRIENDS | Load friends on login | Server | Hero ID | |
77 | GET_WEAPON_SKILLS | Load skills on login | Server | Hero ID | |
78 | GET_MAGIC | Load spells on login | Server | Hero ID | |
79 | CHANGE_DIR | Change facing direction | Server | Hero ID | |
81 | CHANGE_EMOTION | Change emoting action | Server | Hero ID | Emotion |
85 | CHANGE_MAP | Change map (portal) | Server | Hero ID | |
86 | ENTER_MAP | Add entity to map | Server | Role ID | Map ID |
92 | UP_LEVEL | Notify new level | Server | Hero ID | |
93 | XP_CLEAR | Notify clear XP | Server | Hero ID | |
94 | REVIVE | Request revive | Server | Hero ID | |
95 | DEL_ROLE | Delete hero | Server | Hero ID | |
96 | SET_PK_MODE | Set PK mode | Server | Hero ID | Mode |
97 | GET_SYN_ATTR | Get guild info | Server | Hero ID | |
99 | MINE | Mine with pickaxe | Server | Hero ID | |
101 | TEAM_LEAD_POS | Get team leader position | Client | Hero ID | Game Map Type |
102 | QUERY_PLAYER | Get player spawn | Server | Hero ID | |
104 | MAP_ARGB | Set game map ARGB | Client | ARGB | |
105 | QUERY_MEMBER | Get team member info | Server | Hero ID | Target ID |
106 | TEAM_MEMBER_POS | Teammate position | Client | Hero ID | LOW: X HIGH: Y |
108 | KICKBACK | Rubberband to coord | Client | Hero ID | LOW: X HIGH: Y |
109 | DROP_MAGIC | Remove magic type | Client | Hero ID | Magic Type |
110 | DROP_SKILL | Remove weapon skill | Client | Hero ID | Weapon Skill Type |
111 | CREATE_BOOTH | Create market booth | Both | Hero ID | LOW: X HIGH: Y |
112 | SUSPEND_BOOTH | Pause market booth (unused) | Server | Hero ID | |
113 | RESUME_BOOTH | Resume market booth | Both | Hero ID | LOW: X HIGH: Y |
114 | DESTROY_BOOTH | Remove market booth | Server | Hero ID | |
116 | POST_CMD | Run client command | Client | Hero ID | Command |
117 | QUERY_EQUIPMENT | Get player's equipment | Server | Hero ID | |
118 | ABORT_TRANSFORM | Cancel transformation | Server | Hero ID | |
120 | LANDING | Cancel flight | Server | Hero ID | |
121 | GET_MONEY | Pick up money | Client | Hero ID | Amount |
123 | ENEMY_INFO | Get enemy info | Server | Hero ID | |
126 | POST_DIALOG | Open a dialog window | Client | Hero ID | Dialog ID |
130 | QUERY_LEAVE_WORD | Get offline messages | Server | Hero ID | |
132 | LEAVE_MAP | Remove role entity from map | Client | Role ID | |
133 | JUMP | Role entity jump | Server | Role ID | LOW: X HIGH: Y |
137 | GHOST | Notify death | Server | Hero ID | |
138 | SYNCHRO | Synchronize screen | Server | Hero ID | |
140 | QUERY_FRIEND_INFO | Get friend info | Server | Hero ID | Target ID |
142 | CHANGE_FACE | Change teammate or own avatar | Both | Hero ID | Face |
162 | PATHFINDING | Trigger pathfinding to X, Y | Client | Hero ID | |
163 | ABORT_MAGIC | Cancel magic or chargeup | Server | Hero ID |
MsgAllot
This message is sent by the client to allot attribute points.
⚠️ WARNING
Although the client checks the number of attribute points that can be allotted, a modified client can easily spoof this message with values beyond what is available. Ensure that your game server checks the number of attribute points that can be allotted before saving.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 8 |
2 | UInt16 | MsgType | Type of message | 1024 |
4 | Byte | Force | Points towards strength | 1 |
5 | Byte | Speed | Points towards dexterity | 2 |
6 | Byte | Health | Points towards vitality | 5 |
7 | Byte | Soul | Points towards spirit | 0 |
MsgAnnounceInfo
MsgAnnounceList
MsgArenicScore
MsgArenicWitness
MsgAuction
MsgAuctionItem
MsgAuctionQuery
MsgAura
MsgAuraGroup
MsgBattleEffectiveness
Undocumented
MsgCampFight
MsgCampFightInfo
MsgChangeName
MsgCheatingProgram
MsgCompleteRank
MsgConfirmKeyLogin
MsgConfirmKeyLoginMobile
MsgConnect
This client message is first sent to the account server after receiving MsgConnectEx, and then sent to the game server after the client disconnects from the account server and connects to the game server specified in MsgConnectEx. The game server is expected to respond to this connection attempt with MsgTalk (see this message type for details on that interaction).
The account ID in the account server MsgConnect message is copied from MsgConnectEx, and the account ID and data fields in the game server MsgConnect message are also copied from MsgConnectEx.
⚠️ WARNING
A serious exploit is possible using this message on some servers. If a deterministic key is used, such as the account ID, an encrypted account ID, or incrementor, then it may be possible for any bad actor to log into any character in the game (bypassing the account server).
The following are some example fixes employed in various server projects for replacing the two 32-bit fields:
- Short-lived access token sent from the account server to the game server over RPC, paired with the connector's IP address and account ID.
- Short-lived connection request record stored in a shared database containing the connector's IP address and account ID.
Table of Contents
Patch 4267
Account Server Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 28 |
2 | UInt16 | MsgType | Type of message | 1052 |
4 | UInt32 | Account ID | Account id from the account server | 1 |
8 | UInt32 | Data | Contents of the Res.dat file | 10 |
12 | Char[16] | Info | Name of the file | Res.dat |
Game Server Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 28 |
2 | UInt16 | MsgType | Type of message | 1052 |
4 | UInt32 | Account ID | Account id from the account server | 1 |
8 | UInt32 | Data | Encryption key generator parameter | 6351601 |
12 | Char[16] | Info | Build version and language | 117 English |
Patch 4343
Account Server Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 28 |
2 | UInt16 | MsgType | Type of message | 1052 |
4 | UInt32 | Account ID | Account id from the account server | 1 |
8 | UInt32 | Data | Contents of the Res.dat file | 10 |
12 | Char[16] | Info | Name of the file | Res.dat |
Game Server Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 28 |
2 | UInt16 | MsgType | Type of message | 1052 |
4 | UInt32 | Account ID | Account id from the account server | 1 |
8 | UInt32 | Data | Encryption key generator parameter | 6351601 |
12 | UInt16 | Build | Build version of the client | 123 |
14 | Char[10] | Language | ISO 639-1 language code | En |
24 | UInt32 | Info | Contents of the Res.dat file | 10 |
Patch 5065
Account Server Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 28 |
2 | UInt16 | MsgType | Type of message | 1052 |
4 | UInt32 | Account ID | Account id from the account server | 1 |
8 | UInt32 | Data | Contents of the Res.dat file | 10 |
12 | Char[16] | Info | Name of the file | Res.dat |
Game Server Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 28 |
2 | UInt16 | MsgType | Type of message | 1052 |
4 | UInt32 | Account ID | Account id from the account server | 1 |
8 | UInt32 | Data | Encryption key generator parameter | 6351601 |
12 | UInt16 | Build | Build version of the client | 123 |
14 | Char[2] | Language | ISO 639-1 language code | En |
16 | Char[8] | Mac Address | Mac address of connecting interface | 0A0B0C0D0E0F |
24 | UInt32 | Info | Contents of the Res.dat file | 10 |
MsgConnectEx
This account server message is sent to the client to provide connection details for the selected game server. If authentication failed on the account server, then this message will contain a rejection code and message. In older versions of the client, the rejection message is in Chinese but not actually used by the client besides for validation. It was later removed.
The client also validates the IP address and will reject localhost (127.x.x.x). The game server IP address can be a local (10.x.x.x or 192.x.x.x) or public IP address.
Table of Contents
Patch 4267
Accept Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 32 |
2 | UInt16 | MsgType | Type of message | 1055 |
4 | UInt32 | Account ID | Account id from the account server | 1 |
8 | UInt32 | Data | Encryption key generator parameter | 6351601 |
12 | Char[16] | Info | Game server's IP address | 192.168.1.2 |
28 | UInt32 | Port | Game server's port | 5816 |
Reject Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 28 |
2 | UInt16 | MsgType | Type of message | 1055 |
8 | UInt32 | Data | Rejection type | 10 |
12 | Char[16] | Info | Rejection message in GB2312 encoding | 帐号名或口令错 |
Rejection Type
☑️ Assumed (Observed) - Comet
Type | Chinese | English |
---|---|---|
1 | 帐号名或口令错 | Invalid account name or password. |
10 | 服务器未启动 | The server is down! |
11 | 请稍后重新登录 | Please re-login later. |
12 | 该帐号被封号 | This account is banned. |
999 | 数据库错误 | Unknown Error |
Patch 5017
Accept Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 32 |
2 | UInt16 | MsgType | Type of message | 1055 |
4 | UInt32 | Account ID | Account id from the account server | 1 |
8 | UInt32 | Data | Encryption key generator parameter | 6351601 |
12 | Char[16] | Info | Game server's IP address | 192.168.1.2 |
28 | UInt32 | Port | Game server's port | 5816 |
Reject Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 12 |
2 | UInt16 | MsgType | Type of message | 1055 |
8 | UInt32 | Data | Rejection type | 10 |
Rejection Type
☑️ Assumed (Observed) - Comet
Type | Description |
---|---|
1 | Invalid account name or password |
10 | Server down |
11 | Try again later |
12 | Account banned |
20 | Server busy |
22 | Account locked |
30 | Account not activated |
31 | Account activation failed |
42 | Server timed out |
51 | Max login attempts |
70 | Server locked |
73 | Old protocol |
999 | Unknown error |
Patch 5517
Accept Message Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 52 |
2 | UInt16 | MsgType | Type of message | 1055 |
4 | UInt32 | Account ID | Account id from the account server | 1 |
8 | UInt32 | Data | Encryption key generator parameter | 6351601 |
12 | UInt32 | Port | Game server's port | 5816 |
20 | Char[32] | Info | Game server's IP address | 192.168.1.2 |
Reject Message Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 12 |
2 | UInt16 | MsgType | Type of message | 1055 |
8 | UInt32 | Data | Rejection type | 10 |
Rejection Type
✅ Verified (Client)
The following mapping is copied from Cn_Res.ini.
000=Changing Map
001=Invalid Account ID or Password
006=Point Card Expired
007=Monthly Card Expired
010=Server maintenance. Please try again later!
011=Please try again later.
012=This account has been banned.
013=Net cafe mode. Invalid Account ID or Password.
014=Net cafe mode. No more accounts can be logged, at this time.
020=Server is busy.
021=Server is busy. Please try again, later.
022=Your account has been locked. Please contact GM for more help.
024=This account has been banned.
025=This account has been banned.
026=This account has been banned.
027=This account has been banned.
028=This account has been banned.
030=This account has not been activated.
031=Failed to activate the account.
040=Invalid Input
041=Invalid Info
042=Timed Out
043=Please recheck the serial number or retrieve a new one.
044=Invalid Sub-password
045=Please input Sub-password.
046=Unbound
050=Non-cooperator Account
051=Sorry, but you have used up your login attempts. Please wait 30 minutes and try again.
052=Failed to login
053=The same server
054=Database Error
055=Failed to connect to the database.
056=Failed to connect
057=Invalid Account ID
058=Validation timed out.
059=Servers are not configured correctly.
060=Passpod Server Disconnected
061=Failed to process Passpod return
062=Passpod Password Expired
063=Passpod Verification Failed
064=Passpod Certification Expired
065=Passpod Certification Disabled
066=Failed to find the user.
067=Passpod Server Error
068=Passpod has not been input.
070=Server Locked
071=Login has been restricted. Please check the login limit, and try again.
072=Account Locked by Phone
073=Authentication Protocol is invalid or expired.
501=The account has not been bound to any phone
502=The key is wrong. Please rebind it.
504=The sub-key is wrong.
506=Please input the sub-key.
507=Failed to call.
508=Failed to login QQ account
999=Database Error
MsgConnectFaceBook
MsgConnectLegalitySpec
MsgConnectWithBgp
MsgContribute
MsgCrossFlagWar
MsgCrossFlagWarAltar
MsgCrossFlagWarFlag
MsgCrossFlagWarMerit
MsgCrossFlagWarRank
MsgCrossSwitch
MsgData
This message is sent by the game server to update the client interface with a series of integer values. The main usage of this message is to sync the client with the date and time of the server, and was introduced with the watercolor client. In later versions of the client, it was used again for displaying mount vigor.
Table of Contents
Patch 5031
Message Definition
☑️ Assumed (Observed) - Chimera
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 36 |
2 | UInt16 | MsgType | Type of message | 1033 |
4 | UInt32 | Data Type | How to processes the message | 0 |
8 | UInt32[] | Data Values | Array of data values |
Data Type
☑️ Assumed (Observed) - Chimera
Val | Name | Description | Data |
---|---|---|---|
0 | DATETIME | Set server datetime | Year, month, weekday, day, hour, minute, second |
Patch 5165
Message Definition
☑️ Assumed (Observed) - Chimera
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 36 |
2 | UInt16 | MsgType | Type of message | 1033 |
4 | UInt32 | Data Type | How to processes the message | 0 |
8 | UInt32[] | Data Values | Array of data values |
Data Type
☑️ Assumed (Observed) - Chimera
Val | Name | Description | Data |
---|---|---|---|
0 | DATETIME | Set server datetime | Year, month, weekday, day, hour, minute, second |
2 | VIGOR | Set mount vigor (move points) | Vigor |
MsgDataArray
MsgDeadMark
MsgDetainItemInfo
This message is sent to the client to show an item in the detained items window. Along with a summary of the item's details (similar to MsgItemInfo), it also contains the cost of reclaiming the item, days remaining until the hunter is rewarded, and the name and identifier of the original owner and hunter.
Table of Contents
Patch 5103
Message Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 112 |
2 | UInt16 | MsgType | Type of message | 1034 |
4 | UInt32 | Reward ID | Unique identifier of the reward record | 103 |
8 | UInt32 | Item ID | Unique identifier for the item (unless someone else's item) | 1 |
12 | UInt32 | Item Type | Identifies the type of item | 730001 |
16 | UInt16 | Amount | Current durability or amount of the item | 10000 |
18 | UInt16 | Max Amount | Total durability or amount the item can have | 10000 |
20 | Byte | Action | How item info should be processed | 1 |
21 | Byte | Status | Condition bit flags on the item | 0 |
22 | Byte | Position | Position where the item appears | 0 |
24 | UInt32 | Socket Progress | Progress on creating a socket | 0 |
28 | Byte | Socket 1 | The gem in the first socket position | 0 |
29 | Byte | Socket 2 | The gem in the second socket position | 0 |
30 | Byte | Magic 1 | Reserved for rebirth magic effect | 0 |
31 | Byte | Magic 2 | Reserved for an unknown purpose | 0 |
32 | Byte | Magic 3 | Reserved for magical plus rating | 0 |
33 | Byte | Bless | Reduced damage percentage taken by the character | 0 |
34 | Bool | Bound | True if the item can't be traded | 0 |
35 | Byte | Enchant | Added max life for the character | 0 |
36 | UInt32 | Data | Additional attributes for the item | 0 |
40 | Bool | Suspicious | Marked as suspicious for trading | 0 |
42 | Bool | Locked | Locked from being dropped or traded | 0 |
44 | Byte | Color | Color modifier for the item | 3 |
48 | UInt32 | Owner ID | Role ID of the item owner | 1000000 |
52 | Char[16] | Owner Name | Owner's character name | Player |
68 | UInt32 | Hunter ID | Role ID of the hunter | 1000001 |
72 | Char[16] | Hunter Name | Hunter's character name | Hunter |
88 | UInt32 | Capture Date | Date string in the format YYYYMMDD | 20161001 |
96 | UInt32 | CPs | Cost for claiming | 1950 |
100 | Bool | Expired | True if the detain window has expired | 1 |
108 | UInt32 | Days | Days remaining to detain | 6 |
MsgDice
MsgDisconnect
MsgDominateTeamName
MsgDominateTeamPopPkName
MsgDutyMinContri
MsgElitePKArenic
MsgElitePKGameRankInfo
MsgElitePKScore
MsgEncryptCode
This message is sent from the account server to the client when it first connects to initialize the RC5 cipher used for encrypting the player's password. The client then responds to this message with MsgAccount. In later versions of the client, this message is sent but never utilized. This is to keep the account server compatible with older versions of the client / different games.
Table of Contents
Patch 5187
Message Definition
✅ Verified (Client)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 8 |
2 | UInt16 | MsgType | Type of message | 1059 |
4 | UInt32 | Seed | Generated seed for RC5 | 10000 |
MsgEnemyList
Undocumented
MsgEquipLock
MsgFacebookAccount
MsgFactionChiefBase
MsgFactionMatch
MsgFactionMatchWitness
MsgFactionRankInfo
MsgFamily
MsgFamilyOccupy
MsgFlower
MsgFlushExp
This game server message is sent to the client to update the interface with new weapon skill, magic, XP skill, or other types of experience.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 12 |
2 | UInt16 | MsgType | Type of message | 1104 |
4 | UInt32 | Exp | Updated experience towards leveling the spell | 0 |
8 | UInt16 | Type | Magic or skill type identifier | 1001 |
10 | UInt16 | Action | The type of experience being updated | 0 |
Action Type
☑️ Assumed (Soul)
Val | Name | Description | File |
---|---|---|---|
0 | WEAPON_SKILL | Weapon skill proficiency | WeaponSkillLevelExp.ini |
1 | MAGIC | Magic spell experience | MagicType.dat |
MsgFMMatch
MsgFMRoundRobin
MsgFriend
This message is sent by clients to manage friend requests and their friend and enemy lists. It's also sent by the game server to populate those lists on sign-on, update online statuses, after accepting a friend request, and after a player kill.
The level parameter that once appeared at offset 10 was removed during the alpha for Conquer Online in favor of the MsgFriendInfo message.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - Soul + CoFuture
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 28 |
2 | UInt16 | MsgType | Type of message | 1019 |
4 | UInt32 | Hero ID | Unique identifier for the friend | 1000000 |
8 | Byte | Action | How to processes the message | 11 |
9 | Byte | IsOnline | True if the friend is online | 1 |
12 | Char[16] | Name | Character name as a fixed string | Player |
Action Type
☑️ Assumed (Soul)
enum FriendActionTypes {
FRIEND_APPLY = 10;
FRIEND_ACCEPT = 11;
FRIEND_ONLINE = 12;
FRIEND_OFFLINE = 13;
FRIEND_BREAK = 14;
FRIEND_GETINFO = 15;
ENEMY_ONLINE = 16;
ENEMY_OFFLINE = 17;
ENEMY_DELETE = 18;
ENEMY_ADD = 19;
}
Patch 5017
Message Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 36 |
2 | UInt16 | MsgType | Type of message | 1019 |
4 | UInt32 | Hero ID | Unique identifier for the friend | 1000000 |
8 | Byte | Action | How to processes the message | 11 |
9 | Byte | Is Online | True if the friend is online | 1 |
12 | UInt32 | Nobility Rank | Nobility ranking | 3 |
16 | UInt32 | Flower Rank | Flower ranking | 0 |
20 | Char[16] | Name | Character name as a fixed string | Player |
Action Type
☑️ Assumed (Soul)
enum FriendActionTypes {
FRIEND_APPLY = 10;
FRIEND_ACCEPT = 11;
FRIEND_ONLINE = 12;
FRIEND_OFFLINE = 13;
FRIEND_BREAK = 14;
FRIEND_GETINFO = 15;
ENEMY_ONLINE = 16;
ENEMY_OFFLINE = 17;
ENEMY_DELETE = 18;
ENEMY_ADD = 19;
}
Patch 5615
Message Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 68 |
2 | UInt16 | MsgType | Type of message | 1019 |
4 | UInt32 | Hero ID | Unique identifier for the friend | 1000000 |
8 | Byte | Action | How to processes the message | 11 |
9 | Byte | Is Online | True if the friend is online | 1 |
12 | UInt32 | Nobility Rank | Nobility ranking | 3 |
16 | UInt32 | Flower Rank | Flower ranking | 0 |
20 | Char[16] | Name | Character name as a fixed string | Player |
36 | Char[32] | Facebook ID | Identifier for Facebook Profile |
Action Type
☑️ Assumed (Soul)
enum FriendActionTypes {
FRIEND_APPLY = 10;
FRIEND_ACCEPT = 11;
FRIEND_ONLINE = 12;
FRIEND_OFFLINE = 13;
FRIEND_BREAK = 14;
FRIEND_GETINFO = 15;
ENEMY_ONLINE = 16;
ENEMY_OFFLINE = 17;
ENEMY_DELETE = 18;
ENEMY_ADD = 19;
}
MsgFriendInfo
MsgFuse
This message is sent by the client to request fusing materials to an item. Though the system isn't officially used by non-Chinese Conquer Online or translated in the interface, it is implemented in the client and can be utilized by private servers. Fuse rates come from fuse.ini, and successfully fused items result in a +1 stone (according to unverified sources).
Some private servers have repurposed this interface to quickly attempt a socket on an included item using meteor scrolls and other loose meteors.
Table of Contents
Patch 4267
Message Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 22 |
2 | UInt16 | MsgType | Type of message | 1028 |
4 | UInt32 | User | Hero ID of the player | 1000001 |
8 | UInt16 | Action | The type of fuse being performed | 0 |
10 | UInt32 | Count | The number of items included | 2 |
14 | UInt32[] | Items | Array of item IDs |
MsgGameServerShutDown
MsgGemEmbed
This message is sent by the client to request embedding or removing a gem in an item.
⚠️ WARNING
Ensure that the identifier of the gem is a valid gem. It's possible that a modified game client can send a message containing a gem ID that's the same as the item identifier. In that case, a poorly validated server could add a gem based on the item type (could be deterministic).
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 20 |
2 | UInt16 | MsgType | Type of message | 1027 |
4 | UInt32 | User | Hero ID of the player | 1000001 |
8 | UInt32 | Item | Identifier for the item | 1 |
12 | UInt32 | Gem | Identifier for the gem | 2 |
16 | UInt16 | Pos | Gem socket to embed into or remove from | 1 |
18 | UInt16 | Action | Embed or remove the gem | 0 |
Action Type
☑️ Assumed (Soul)
enum GemEmbedActionType {
GEM_EMBED_ACTION_EMBED = 0;
GEM_EMBED_ACTION_REMOVE = 1;
}
MsgGLChampionList
MsgGLHeroDetail
MsgGLInteractive
MsgGLLastSeasonTopScore
MsgGLRankingList
MsgGodExp
Undocumented
MsgGuide
MsgGuideInfo
MsgHangUp
MsgInstance
MsgInteract
This message is used to request an interaction with another player or broadcast an interaction to surrounding players. Some example interactions include physical and magical attacks, proposing, and killing a player.
Magic attacks in Conquer Online are obfuscated using bit rotations and XORs. See the example below from Soul.
#define ENCODE_MAGICATTACK(idUser, usType, idTarget, usPosX, usPosY) \
{ \
usType = (::ExchangeShortBits((usType - 0x14BE), 3) ^ (idUser) ^ 0x915D); \
idTarget = ::ExchangeLongBits(((idTarget - 0x8B90B51A) ^ (idUser) ^ 0x5F2D2463), 32 - 13); \
usPosX = (::ExchangeShortBits((usPosX - 0xDD12), 1) ^ (idUser) ^ 0x2ED6); \
usPosY = (::ExchangeShortBits((usPosY - 0x76DE), 5) ^ (idUser) ^ 0xB99B); \
}
#define DECODE_MAGICATTACK(idUser, usType, idTarget, usPosX, usPosY) \
{ \
usType = 0xFFFF & (::ExchangeShortBits(((usType) ^ (idUser) ^ 0x915D), 16 - 3) + 0x14BE); \
idTarget = (::ExchangeLongBits((idTarget), 13) ^ (idUser) ^ 0x5F2D2463) + 0x8B90B51A; \
usPosX = 0xFFFF & (::ExchangeShortBits(((usPosX) ^ (idUser) ^ 0x2ED6), 16 - 1) + 0xDD12); \
usPosY = 0xFFFF & (::ExchangeShortBits(((usPosY) ^ (idUser) ^ 0xB99B), 16 - 5) + 0x76DE); \
}
inline unsigned int ExchangeShortBits(unsigned long nData, int nBits)
{
MYASSERT(nBits >= 0 && nBits < 16);
nData &= 0xFFFF;
return ((nData >> nBits) | (nData << (16 - nBits))) & 0xFFFF;
}
inline unsigned int ExchangeLongBits(unsigned long nData, int nBits)
{
MYASSERT(nBits >= 0 && nBits < 32);
return (nData >> nBits) | (nData << (32 - nBits));
}
Similar to other messages, MsgInteract also contains types that overlap with other types in other messages. For example, aborting magic was handled in MsgInteract, but is instead duplicated and utilized in MsgAction.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - CoFuture + Soul
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 28 |
2 | UInt16 | MsgType | Type of message | 1022 |
4 | UInt32 | System Time | Milliseconds of system uptime | 10000 |
8 | UInt32 | Sender | Role ID of the initiator | 1000000 |
12 | UInt32 | Target | Role ID of the target | 1000001 |
16 | UInt16 | X | X coordinate of the interaction | 320 |
18 | UInt16 | Y | Y coordinate of the interaction | 460 |
20 | UInt32 | Type | How to processes the message | 14 |
24 | UInt32 | Data | Value associated with the interaction | 1 |
Interaction Type
☑️ Assumed (Observed) - CoFuture + Soul
🔶 Response data
Val | Name | Description | Recipient | Data |
---|---|---|---|---|
2 | ATTACK | Physical attack | Server | Damage 🔶 |
8 | COURT | Propose to a player | Server | |
9 | MARRY | Accept a proposal | Server | |
14 | KILL | Confirms kill of an entity | Client | Count |
21 | MAGIC_ATTACK | Magical attack | Server | HIGH: MagicType |
23 | REFLECT_WEAPON | Reflect a physical attack | Client | Damage |
24 | BUMP | Bumped from dash | Client | Direction |
25 | SHOOT | Shoot projectile | Server | Damage 🔶 |
26 | REFLECT_MAGIC | Reflect a magical attack | Client | Damage |
Patch 5017
Message Definition
☑️ Assumed (Observed) - COPSv6
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 28 |
2 | UInt16 | MsgType | Type of message | 1022 |
4 | UInt32 | System Time | Milliseconds of system uptime | 10000 |
8 | UInt32 | Sender | Role ID of the initiator | 1000000 |
12 | UInt32 | Target | Role ID of the target | 1000001 |
16 | UInt16 | X | X coordinate of the interaction | 320 |
18 | UInt16 | Y | Y coordinate of the interaction | 460 |
20 | UInt32 | Type | How to processes the message | 14 |
24 | UInt32 | Data | Value associated with the interaction | 1 |
28 | UInt32 | Progress | Progress on an interaction | 0 |
Interaction Type
☑️ Assumed (Observed) - COPSv6
🔶 Response data
Val | Name | Description | Recipient | Data | Progress |
---|---|---|---|---|---|
2 | ATTACK | Physical attack | Server | Damage 🔶 | |
8 | COURT | Propose to a player | Server | ||
9 | MARRY | Accept a proposal | Server | ||
14 | KILL | Confirms kill of an entity | Client | Count | |
21 | MAGIC_ATTACK | Magical attack | Server | HIGH: MagicType | |
23 | REFLECT_WEAPON | Reflect a physical attack | Client | Damage | |
24 | BUMP | Bumped from dash | Client | Direction | |
25 | SHOOT | Shoot projectile | Server | Damage 🔶 | |
26 | REFLECT_MAGIC | Reflect a magical attack | Client | Damage | |
30 | JAR_PROGRESS | Cloud Saint Jar count | Server | 0 | Count 🔶 |
MsgInviteTrans
MsgItem
This message is received by the game server as a client request to use or act on an item. Item actions can be buying, selling, equipping, repairing, dropping, upgrading, and more. A miscellaneous function of this message is as a ping response. The client sends this message once every 10 seconds to show the latency to the server in the client.
The message can also be sent to the client for specific actions such as force unequipping, force dropping, updating the durability of an item, or updating the amount of an item.
⚠️ WARNING
Ensure that the item type for item improvements matches the consumption item type when improving items. If composing two items together, ensure that the fuel item is also different than the improved item. In all cases, location should also be validated (you cannot upgrade an item from any distance or from any map, same with vending items at player booths). If showing an item, generate a new sharing identifier rather than exposing the item's unique identifier.
Requests
Requests can be of multiple sizes, not necessarily always containing an amount or additional fields past the system time. When processing these request messages, this should be taken into account so not to use fields that have been unspecified.
Responses
Most item actions are initiated by the player. Each request expects a response of either MsgItem (this message) with a filled data field, or a MsgItemInfo of the resulting item (like from a shop purchase).
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - CoFuture + Soul
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 20 |
2 | UInt16 | MsgType | Type of message | 1009 |
4 | UInt32 | ID | Unique identifier for the item or role | 1000000 |
8 | UInt32 | Data | Payload usually of the item type or position | 730001 |
12 | UInt32 | Action | How to processes the message | 2 |
16 | UInt32 | System Time | Milliseconds of system uptime | 1579535985 |
Item Action
☑️ Assumed (Observed) - CoFuture + Soul
🔶 Response data
Val | Name | Description | Recipient | ID | Data |
---|---|---|---|---|---|
1 | BUY | Purchase from shop | Server | NPC | Item Type |
2 | SELL | Sell to shop | Server | NPC | Item ID |
3 | DROP | Drops an item or removes it | Server | Item | LOW: X HIGH: Y 🔶 |
4 | EQUIP | Equip to position on body | Server | Item | Position |
5 | UPDATE | Updates an item | Client | Item | Position |
6 | UNEQUIP | Force unequip | Client | Item | Position |
8 | COMBINE | Combine two of same type | Server | Item | Item ID |
9 | QUERY_MONEY | Request warehouse money | Server | NPC | Money 🔶 |
10 | SAVE_MONEY | Deposit warehouse money | Server | NPC | Money |
11 | DRAW_MONEY | Withdraw warehouse money | Server | NPC | Money |
12 | DROP_MONEY | Drop money on the floor | Server | Money | LOW: X HIGH: Y |
14 | REPAIR | Repair durability | Server | Item | |
17 | DURABILITY | Update durability | Client | Position | Durability |
18 | DROP_EQUIPMENT | Force delete equipment | Client | Item | Position |
19 | IMPROVE | Quality upgrade | Server | Item | Dragonball Item ID |
20 | UPLEV | Level upgrade | Server | Item | Meteor Item ID |
21 | BOOTH_QUERY | Show booth item | Server | Item | |
22 | BOOTH_ADD | Add to booth | Server | Item | Money |
23 | BOOTH_DEL | Remove from booth | Server | Item | Shop |
24 | BOOTH_BUY | Buy from a booth | Server | Item | Shop |
27 | PING | Latency check | Server | Player |
Patch 5017
Message Definition
☑️ Assumed (Observed) - ApexConquer
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 24 |
2 | UInt16 | MsgType | Type of message | 1009 |
4 | UInt32 | ID | Unique identifier for the item or role | 1000000 |
8 | UInt32 | Data | Payload usually of the item type or position | 730001 |
12 | UInt32 | Action | How the server processes the message | 2 |
16 | UInt32 | System Time | Milliseconds of system uptime | 1579535985 |
20 | UInt32 | Amount | Amount of items being purchased or used | 0 |
Item Action
☑️ Assumed (Observed) - ApexConquer
🔶 Response data
Val | Name | Description | Recipient | ID | Data |
---|---|---|---|---|---|
1 | BUY | Purchase from shop | Server | NPC | Item Type |
2 | SELL | Sell to shop | Server | NPC | Item ID |
3 | DROP | Drops an item or removes it | Server | Item | LOW: X HIGH: Y 🔶 |
4 | EQUIP | Equip to position on body | Server | Item | Position |
5 | UPDATE | Updates an item | Client | Item | Position |
6 | UNEQUIP | Force unequip | Client | Item | Position |
8 | COMBINE | Combine two of same type | Server | Item | Item ID |
9 | QUERY_MONEY | Request warehouse money | Server | NPC | Money 🔶 |
10 | SAVE_MONEY | Deposit warehouse money | Server | NPC | Money |
11 | DRAW_MONEY | Withdraw warehouse money | Server | NPC | Money |
12 | DROP_MONEY | Drop money on the floor | Server | Money | LOW: X HIGH: Y |
14 | REPAIR | Repair durability | Server | Item | |
17 | DURABILITY | Update durability | Client | Position | Durability |
18 | DROP_EQUIPMENT | Force delete equipment | Client | Item | Position |
19 | IMPROVE | Quality upgrade | Server | Item | Dragonball Item ID |
20 | UPLEV | Level upgrade | Server | Item | Meteor Item ID |
21 | BOOTH_QUERY | Show booth item | Server | Item | |
22 | BOOTH_ADD | Add to booth | Server | Item | Money |
23 | BOOTH_DEL | Remove from booth | Server | Item | Shop |
24 | BOOTH_BUY | Buy from a booth | Server | Item | Shop |
27 | PING | Latency check | Server | Player | |
28 | ENCHANT | Enchant item | Server | Item | Gem Item ID |
29 | BOOTH_ADD_EMONEY | Add EMoney to booth | Server | Item | EMoney |
Patch 5517
Message Definition
☑️ Assumed (Observed) - ApexConquer
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 60 |
2 | UInt16 | MsgType | Type of message | 1009 |
4 | UInt32 | ID | Unique identifier for the item or role | 1000000 |
8 | UInt32 | Data | Payload usually of the item type or position | 730001 |
12 | UInt32 | Action | How the server processes the message | 2 |
16 | UInt32 | System Time | Milliseconds of system uptime | 1579535985 |
20 | UInt32 | Amount | Amount of items being purchased or used | 0 |
24 | UInt32[9] | Equipment | Equipment in order of slot position | 0 |
Item Action
☑️ Assumed (Observed) - ConquerServerV3
🔶 Response data
Val | Name | Description | Recipient | ID | Data |
---|---|---|---|---|---|
1 | BUY | Purchase from shop | Server | NPC | Item Type |
2 | SELL | Sell to shop | Server | NPC | Item ID |
4 | EQUIP | Equip to position on body | Server | Item | Position |
5 | UPDATE | Updates an item | Client | Item | Position |
6 | UNEQUIP | Force unequip | Client | Item | Position |
9 | QUERY_MONEY | Request warehouse money | Server | NPC | Money 🔶 |
10 | SAVE_MONEY | Deposit warehouse money | Server | NPC | Money |
11 | DRAW_MONEY | Withdraw warehouse money | Server | NPC | Money |
14 | REPAIR | Repair durability | Server | Item | |
17 | DURABILITY | Update durability | Client | Position | Durability |
18 | DROP_EQUIPMENT | Force delete equipment | Client | Item | Position |
19 | IMPROVE | Quality upgrade | Server | Item | Dragonball Item ID |
20 | UPLEV | Level upgrade | Server | Item | Meteor Item ID |
21 | BOOTH_QUERY | Show booth item | Server | Item | |
22 | BOOTH_ADD | Add to booth | Server | Item | Money |
23 | BOOTH_DEL | Remove from booth | Server | Item | Shop |
24 | BOOTH_BUY | Buy from a booth | Server | Item | Shop |
27 | PING | Latency check | Server | Hero | |
28 | ENCHANT | Enchant item | Server | Item | Gem Item ID |
29 | BOOTH_ADD_EMONEY | Add EMoney to booth | Server | Item | EMoney |
33 | DETAIN_REDEEM | Redeem a detained item | Server | Item | |
35 | SOCKET | Socket a talisman | Server | Item | Item ID |
36 | SOCKET_EMONEY | Socket talisman with EMoney | Server | Item | EMoney |
37 | DROP | Drops an item or removes it | Server | Item | |
38 | DROP_MONEY | Drop money on the floor | Server | Money | |
40 | UPBLESS | Upgrade bless | Server | Item | |
41 | SHOW_ACCESSORY | Show an accessory | Server | Item | |
46 | SHOW_EQUIPMENT | Response for MsgAction | Client | Hero | |
48 | COMBINE | Combine two of same type | Server | Item | Item ID |
49 | SPLIT | Split into two | Server | Item | |
52 | SHOW_ITEM | Item card | Client | Item |
MsgItemInfo
This message is sent to the game client from the game server to initialize an item, which can appear in the player's inventory, as equipment, or in another position within the client's UI. Some exceptions to this include detained items (MsgDetainItemInfo) and shop / present items (MsgItemInfoEx).
In later versions of the client (around patch 5200), MsgPlayerAttribInfo was added to update the role view separately from equipment being placed in a player's equipment slot. The purpose of splitting off attributes from items was to enable temporary boons and weaknesses.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 24 |
2 | UInt16 | MsgType | Type of message | 1008 |
4 | UInt32 | Item ID | Unique identifier for the item (unless someone else's item) | 1 |
8 | UInt32 | Item Type | Identifies the type of item | 730001 |
12 | UInt16 | Amount | Current durability or amount of the item | 10000 |
14 | UInt16 | Max Amount | Total durability or amount the item can have | 10000 |
16 | Byte | Action | How item info should be processed | 1 |
17 | Byte | Status | Condition bit flags on the item | 0 |
18 | Byte | Position | Position where the item appears | 0 |
19 | Byte | Socket 1 | The gem in the first socket position | 0 |
20 | Byte | Socket 2 | The gem in the second socket position | 0 |
21 | Byte | Magic 1 | Reserved for rebirth magic effect | 0 |
22 | Byte | Magic 2 | Reserved for an unknown purpose | 0 |
23 | Byte | Magic 3 | Reserved for magical plus rating | 0 |
Action Type
☑️ Assumed (Soul)
enum ItemInfoActionType {
ITEMINFO_NONE = 0;
ITEMINFO_ADDITEM = 1;
ITEMINFO_TRADE = 2;
ITEMINFO_UPDATE = 3;
ITEMINFO_OTHERPLAYER_EQUIPMENT = 4;
ITEMINFO_AUCTION = 5;
}
Item Status
☑️ Assumed (Soul)
enum ItemStatus {
ITEM_STATUS_NONE = 0;
ITEM_STATUS_UNIDENTIFIED = 0x01;
ITEM_STATUS_CANNOT_REPAIR = 0x02;
ITEM_STATUS_FIXED_DURABILITY = 0x04;
ITEM_STATUS_MAGIC_ADD = 0x08;
}
Item Position
☑️ Assumed (Soul)
enum ItemPosition {
ITEMPOSITION_INVENTORY = 0;
ITEMPOSITION_HELMET = 1;
ITEMPOSITION_NECKLACE = 2;
ITEMPOSITION_ARMOR = 3;
ITEMPOSITION_WEAPON_RIGHT = 4;
ITEMPOSITION_WEAPON_LEFT = 5;
ITEMPOSITION_RING = 6;
ITEMPOSITION_TREASURE = 7;
ITEMPOSITION_BOOTS = 8;
ITEMPOSITION_STORAGE = 201;
ITEMPOSITION_TRUNK = 202;
ITEMPOSITION_TREASURE_BAG = 203;
ITEMPOSITION_AUCTION_STORAGE = 207;
ITEMPOSITION_GROUND = 254;
ITEMPOSITION_NONE = 255;
}
Patch 4330
Message Definition
☑️ Assumed (Observed) - COPSv6 Enhanced
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 30 |
2 | UInt16 | MsgType | Type of message | 1008 |
4 | UInt32 | Item ID | Unique identifier for the item (unless someone else's item) | 1 |
8 | UInt32 | Item Type | Identifies the type of item | 730001 |
12 | UInt16 | Amount | Current durability or amount of the item | 10000 |
14 | UInt16 | Max Amount | Total durability or amount the item can have | 10000 |
16 | Byte | Action | How item info should be processed | 1 |
17 | Byte | Status | Condition bit flags on the item | 0 |
18 | Byte | Position | Position where the item appears | 0 |
19 | Byte | Socket 1 | The gem in the first socket position | 0 |
20 | Byte | Socket 2 | The gem in the second socket position | 0 |
21 | Byte | Magic 1 | Reserved for rebirth magic effect | 0 |
22 | Byte | Magic 2 | Reserved for an unknown purpose | 0 |
23 | Byte | Magic 3 | Reserved for magical plus rating | 0 |
24 | Byte | Bless | Reduced damage percentage taken by the character | 0 |
25 | Byte | Enchant | Added max life for the character | 0 |
26 | UInt32 | Data | Additional attributes for the item | 0 |
Action Type
☑️ Assumed (Soul)
enum ItemInfoActionType {
ITEMINFO_NONE = 0;
ITEMINFO_ADDITEM = 1;
ITEMINFO_TRADE = 2;
ITEMINFO_UPDATE = 3;
ITEMINFO_OTHERPLAYER_EQUIPMENT = 4;
ITEMINFO_AUCTION = 5;
}
Item Status
☑️ Assumed (Soul)
enum ItemStatus {
ITEM_STATUS_NONE = 0;
ITEM_STATUS_UNIDENTIFIED = 0x01;
ITEM_STATUS_CANNOT_REPAIR = 0x02;
ITEM_STATUS_FIXED_DURABILITY = 0x04;
ITEM_STATUS_MAGIC_ADD = 0x08;
}
Item Position
☑️ Assumed (Soul)
enum ItemPosition {
ITEMPOSITION_INVENTORY = 0;
ITEMPOSITION_HELMET = 1;
ITEMPOSITION_NECKLACE = 2;
ITEMPOSITION_ARMOR = 3;
ITEMPOSITION_WEAPON_RIGHT = 4;
ITEMPOSITION_WEAPON_LEFT = 5;
ITEMPOSITION_RING = 6;
ITEMPOSITION_TREASURE = 7;
ITEMPOSITION_BOOTS = 8;
ITEMPOSITION_STORAGE = 201;
ITEMPOSITION_TRUNK = 202;
ITEMPOSITION_TREASURE_BAG = 203;
ITEMPOSITION_AUCTION_STORAGE = 207;
ITEMPOSITION_GROUND = 254;
ITEMPOSITION_NONE = 255;
}
Patch 5017
Message Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 36 |
2 | UInt16 | MsgType | Type of message | 1008 |
4 | UInt32 | Item ID | Unique identifier for the item (unless someone else's item) | 1 |
8 | UInt32 | Item Type | Identifies the type of item | 730001 |
12 | UInt16 | Amount | Current durability or amount of the item | 10000 |
14 | UInt16 | Max Amount | Total durability or amount the item can have | 10000 |
16 | Byte | Action | How item info should be processed | 1 |
17 | Byte | Status | Condition bit flags on the item | 0 |
18 | Byte | Position | Position where the item appears | 0 |
20 | UInt32 | Socket Progress | Progress on creating a socket | 0 |
24 | Byte | Socket 1 | The gem in the first socket position | 0 |
25 | Byte | Socket 2 | The gem in the second socket position | 0 |
26 | Byte | Magic 1 | Reserved for rebirth magic effect | 0 |
27 | Byte | Magic 2 | Reserved for an unknown purpose | 0 |
28 | Byte | Magic 3 | Reserved for magical plus rating | 0 |
29 | Byte | Bless | Reduced damage percentage taken by the character | 0 |
30 | Byte | Enchant | Added max life for the character | 0 |
32 | UInt32 | Data | Additional attributes for the item | 0 |
Action Type
☑️ Assumed (Soul)
enum ItemInfoActionType {
ITEMINFO_NONE = 0;
ITEMINFO_ADDITEM = 1;
ITEMINFO_TRADE = 2;
ITEMINFO_UPDATE = 3;
ITEMINFO_OTHERPLAYER_EQUIPMENT = 4;
ITEMINFO_AUCTION = 5;
}
Item Status
☑️ Assumed (Soul)
enum ItemStatus {
ITEM_STATUS_NONE = 0;
ITEM_STATUS_UNIDENTIFIED = 0x01;
ITEM_STATUS_CANNOT_REPAIR = 0x02;
ITEM_STATUS_FIXED_DURABILITY = 0x04;
ITEM_STATUS_MAGIC_ADD = 0x08;
}
Item Position
☑️ Assumed (Soul)
enum ItemPosition {
ITEMPOSITION_INVENTORY = 0;
ITEMPOSITION_HELMET = 1;
ITEMPOSITION_NECKLACE = 2;
ITEMPOSITION_ARMOR = 3;
ITEMPOSITION_WEAPON_RIGHT = 4;
ITEMPOSITION_WEAPON_LEFT = 5;
ITEMPOSITION_RING = 6;
ITEMPOSITION_TREASURE = 7;
ITEMPOSITION_BOOTS = 8;
ITEMPOSITION_STORAGE = 201;
ITEMPOSITION_TRUNK = 202;
ITEMPOSITION_TREASURE_BAG = 203;
ITEMPOSITION_AUCTION_STORAGE = 207;
ITEMPOSITION_GROUND = 254;
ITEMPOSITION_NONE = 255;
}
Patch 5095
Message Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 48 |
2 | UInt16 | MsgType | Type of message | 1008 |
4 | UInt32 | Item ID | Unique identifier for the item (unless someone else's item) | 1 |
8 | UInt32 | Item Type | Identifies the type of item | 730001 |
12 | UInt16 | Amount | Current durability or amount of the item | 10000 |
14 | UInt16 | Max Amount | Total durability or amount the item can have | 10000 |
16 | Byte | Action | How item info should be processed | 1 |
17 | Byte | Status | Condition bit flags on the item | 0 |
18 | Byte | Position | Position where the item appears | 0 |
19 | UInt32 | Socket Progress | Progress on creating a socket | 0 |
23 | Byte | Socket 1 | The gem in the first socket position | 0 |
24 | Byte | Socket 2 | The gem in the second socket position | 0 |
25 | Byte | Magic 1 | Reserved for rebirth magic effect | 0 |
26 | Byte | Magic 2 | Reserved for an unknown purpose | 0 |
27 | Byte | Magic 3 | Reserved for magical plus rating | 0 |
28 | Byte | Bless | Reduced damage percentage taken by the character | 0 |
29 | Bool | Bound | True if the item can't be traded | 0 |
30 | Byte | Enchant | Added max life for the character | 0 |
32 | UInt32 | Data | Additional attributes for the item | 0 |
36 | Bool | Suspicious | Marked as suspicious for trading | 0 |
38 | Bool | Locked | Locked from being dropped or traded | 0 |
40 | Byte | Color | Color modifier for the item | 3 |
44 | UInt32 | Magic 3 Progress | Progress towards magical plus rating | 0 |
Action Type
☑️ Assumed (Soul)
enum ItemInfoActionType {
ITEMINFO_NONE = 0;
ITEMINFO_ADDITEM = 1;
ITEMINFO_TRADE = 2;
ITEMINFO_UPDATE = 3;
ITEMINFO_OTHERPLAYER_EQUIPMENT = 4;
ITEMINFO_AUCTION = 5;
}
Item Status
☑️ Assumed (Soul)
enum ItemStatus {
ITEM_STATUS_NONE = 0;
ITEM_STATUS_UNIDENTIFIED = 0x01;
ITEM_STATUS_CANNOT_REPAIR = 0x02;
ITEM_STATUS_FIXED_DURABILITY = 0x04;
ITEM_STATUS_MAGIC_ADD = 0x08;
}
Item Position
☑️ Assumed (Soul)
enum ItemPosition {
ITEMPOSITION_INVENTORY = 0;
ITEMPOSITION_HELMET = 1;
ITEMPOSITION_NECKLACE = 2;
ITEMPOSITION_ARMOR = 3;
ITEMPOSITION_WEAPON_RIGHT = 4;
ITEMPOSITION_WEAPON_LEFT = 5;
ITEMPOSITION_RING = 6;
ITEMPOSITION_TREASURE = 7;
ITEMPOSITION_BOOTS = 8;
ITEMPOSITION_STORAGE = 201;
ITEMPOSITION_TRUNK = 202;
ITEMPOSITION_TREASURE_BAG = 203;
ITEMPOSITION_AUCTION_STORAGE = 207;
ITEMPOSITION_GROUND = 254;
ITEMPOSITION_NONE = 255;
}
Item Color
☑️ Assumed (Observed) - Chimera
enum ItemColor {
ITEMCOLOR_NONE = 0;
ITEMCOLOR_BLACK = 2;
ITEMCOLOR_ORANGE = 3;
ITEMCOLOR_TEAL = 4;
ITEMCOLOR_RED = 5;
ITEMCOLOR_BLUE = 6;
ITEMCOLOR_YELLOW = 7;
ITEMCOLOR_PURPLE = 8;
ITEMCOLOR_WHITE = 9;
}
MsgItemInfoEx
This message is sent by the game server to the client to display an item with additional details for a game feature (like marketplace booths). For the most part, this message resembles MsgItemInfo with the addition of price, extended action type, and optional string (seems unused in Conquer Online).
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 37 |
2 | UInt16 | MsgType | Type of message | 1108 |
4 | UInt32 | ID | Unique identifier for the item | 10 |
8 | UInt32 | Owner ID | Unique identifier for the target player | 1000000 |
12 | UInt32 | Price | Cost of the item if vending | 100 |
16 | UInt32 | Item Type | Identifies the type of item | 730001 |
20 | UInt16 | Amount | Current durability or amount of the item | 10000 |
22 | UInt16 | Max Amount | Total durability or amount the item can have | 10000 |
24 | Byte | Action | How item info is extended | 1 |
25 | Byte | Status | Condition bit flags on the item | 0 |
26 | Byte | Position | Position where the item appears | 0 |
27 | Byte | Socket 1 | The gem in the first socket position | 0 |
28 | Byte | Socket 2 | The gem in the second socket position | 0 |
29 | Byte | Magic 1 | Reserved for rebirth magic effect | 0 |
30 | Byte | Magic 2 | Reserved for an unknown purpose | 0 |
31 | Byte | Magic 3 | Reserved for magical plus rating | 0 |
32 | UInt32 | Data | Additional attributes for the item | 0 |
36 | NetStringPacker | Strings | Group of length prefixed strings |
Action Type
☑️ Assumed (Soul)
Val | Name | Description | Strings |
---|---|---|---|
1 | BOOTH | Vending at a player booth | |
2 | EQUIPMENT | Updates equipment info window |
MsgItemStatus
MsgKickOut
MsgLeaveWord
MsgLoadMap
Undocumented
MsgLoginAccountEx
MsgLoginChallengeS
MsgLoginNotice
MsgLoginProofC
MsgLottery
MsgMagicCoat
MsgMagicEffect
This game server message is sent to the client to display a damaging magical effect from a target or cell coordinate on one or many targets. MagicType.dat contains all spell types that can be sent with this message.
In later versions of the client, the target coordinates are lightly encrypted. See MsgInteract for details.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - CoFuture + Soul
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 36 |
2 | UInt16 | MsgType | Type of message | 1105 |
4 | UInt32 | User | Unique identifier of the role | 1000000 |
8 | UInt32 | Target | Unique identifier of the target or a coordinate | LOW: 320 HIGH: 460 |
12 | UInt16 | Type | Type of magic being cast | 1001 |
14 | UInt16 | Level | Level of the magic being cast | 1 |
16 | UInt32 | Effect Num | Number of effects to display | 1 |
20 | RoleInfo[] | Effects | Effects to display on roles |
Magic Effect Role Info
🚩 Incomplete
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt32 | Role | Role ID of the target in the area effect | 1000001 |
1 | UInt32 | Data | Damage associated with the area effect | 1 |
2 | UInt32 | Reserved | Unknown | 0 |
MsgMagicInfo
This game server message is sent to the client to describe spells the player has learned. MagicType.dat contains all spells accompanied with available levels and experience required for the next level, used to fill this message.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - CoFuture + Soul
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 12 |
2 | UInt16 | MsgType | Type of message | 1103 |
4 | UInt32 | Exp | Current experience towards leveling the spell | 0 |
8 | UInt16 | Type | Magic type identifier | 1001 |
10 | UInt16 | Level | Level of the spell | 1 |
MsgMailContent
Undocumented
MsgMailList
Undocumented
MsgMailNotify
Undocumented
MsgMailOperation
Undocumented
MsgMapInfo
This small game server message is sent to instruct the client on which data map document to load from and what map type flags apply to it. This allows the game server to create unique duplicates of a map that reference one single data map.
Rather than referencing the file path to the DMap in the message, an identifier is used as a key for looking up the path in GameMap.dat.
Table of Contents
Patch 4267
Message Definition
✅ Verified (Client)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 16 |
2 | UInt16 | MsgType | Type of message | 1110 |
4 | UInt32 | Map ID | Map identifier | 1002 |
8 | UInt32 | Doc ID | DMap identifier | 1002 |
12 | UInt32 | Type | Map type flags | 0 |
Map Type Flags
☑️ Assumed (Soul)
enum MapTypeFlags {
MAPTYPE_NORMAL = 0x0000,
MAPTYPE_PKFIELD = 0x0001,
MAPTYPE_CHGMAP_DISABLE = 0x0002,
MAPTYPE_RECORD_DISABLE = 0x0004,
MAPTYPE_PK_DISABLE = 0x0008,
MAPTYPE_BOOTH_ENABLE = 0x0010,
MAPTYPE_TEAM_DISABLE = 0x0020,
MAPTYPE_TELEPORT_DISABLE = 0x0040,
MAPTYPE_SYN_MAP = 0x0080,
MAPTYPE_PRISON_MAP = 0x0100,
MAPTYPE_FLY_DISABLE = 0x00200,
MAPTYPE_FAMILY = 0x00400,
MAPTYPE_MINEFIELD = 0x0800,
MAPTYPE_PKGAME = 0x1000,
}
MsgMapItem
This game server message is sent to the client to display an action with an item on the map floor. It also allows the server to set "traps", which act as magic effects on a map tile and are used for squama rewards.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - CoFuture + Soul
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 18 |
2 | UInt16 | MsgType | Type of message | 1101 |
4 | UInt32 | ID | Map item identifier | 1 |
8 | UInt32 | Type | Map item type or trap look | 0 |
12 | UInt16 | Pos X | X coordinate of the item or trap | 320 |
14 | UInt16 | Pos Y | Y coordinate of the item or trap | 460 |
16 | UInt16 | Action | How to processes the message | 1 |
Action Type
☑️ Assumed (Observed) - CoFuture + Soul
Val | Name | Description | Recipient | ID | Type |
---|---|---|---|---|---|
1 | CREATE | Create map item | Client | Map Item ID | Item Type |
2 | DELETE | Delete map item | Client | Map Item ID | |
3 | PICK | Request to pick up map item | Server | Map Item ID | |
10 | CAST_TRAP | Place a floor trap | Client | Trap ID | Look |
11 | SYNCHRO_TRAP | Update a floor trap | Client | Trap ID | Look |
12 | DROP_TRAP | Stop a floor trap | Client | Trap ID |
Patch 5095
Message Definition
☑️ Assumed (Observed) - Elite-CoEmu
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 24 |
2 | UInt16 | MsgType | Type of message | 1101 |
4 | UInt32 | ID | Map item identifier | 1 |
8 | UInt32 | Type | Map item type or trap look | 0 |
12 | UInt16 | Pos X | X coordinate of the item or trap | 320 |
14 | UInt16 | Pos Y | Y coordinate of the item or trap | 460 |
16 | UInt16 | Color | Color modifier for the item | 3 |
18 | UInt16 | Action | How to processes the message | 1 |
20 | UInt32 | Unused | Confirmed unused by the client | 0 |
Action Type
☑️ Assumed (Observed) - Elite-CoEmu
Val | Name | Description | Recipient | ID | Type |
---|---|---|---|---|---|
1 | CREATE | Create map item | Client | Map Item ID | Item Type |
2 | DELETE | Delete map item | Client | Map Item ID | |
3 | PICK | Request to pick up map item | Server | Map Item ID | |
4 | PICK_EFFECT | Pick up item with an effect | Client | Map Item ID | |
10 | CAST_TRAP | Place a floor trap | Client | Trap ID | Look |
11 | SYNCHRO_TRAP | Update a floor trap | Client | Trap ID | Look |
12 | DROP_TRAP | Stop a floor trap | Client | Trap ID |
MsgMentorPlayer
MsgMessageBoard
Message boards are categorized into channels, referenced in MsgTalk as Text Attributes. The game server and client pass this message to organize text messages from MsgTalk into listable postings.
The NetStringPacker returned when listing posts (10 maximum) is flattened groupings of three strings each:
- Name: The name of the hero who authored the message.
- Message: Text shortened to 36 characters.
- Date: In the format yyyyMMddHHmmss.
Table of Contents
Patch 5017
Message Definition
☑️ Assumed (Observed) - Soul + COPSv6
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 9 |
2 | UInt16 | MsgType | Type of message | 1111 |
4 | UInt16 | Index | Message index for continuation | 0 |
6 | UInt16 | Channel | Text Attributes | 2201 |
8 | Byte | Action | Message action type | 2 |
9 | NetStringPacker | Strings |
Message Board Action
☑️ Assumed (Observed) - Soul + COPSv6
Val | Name | Description | Recipient | Strings |
---|---|---|---|---|
1 | DEL | Deletes a message on the board | Server | 1 4 Hero |
2 | GET_LIST | Fetches list of messages by index | Server | |
3 | LIST | List of messages for a requested index | Client | (See format) |
4 | GET_WORDS | Request MsgTalk message for a post | Server |
MsgMeteSpecial
MsgMonsterTransform
Undocumented
MsgName
This message allows the client to query for a string update, and allows the game server to trigger a string command on the client. In later versions of the client, the purpose of this message is mostly superseded by MsgAction, which adds an optional string parameter. Even in lower patches, a few types are unimplemented since they overlap with functionality in other messages, such as deleting the role.
Fireworks are an interesting type in this packet, as the way the client processes a fireworks request is to make the string an even number of letters, iterate through every two characters, and spawn a firework at a random coordinate near the center of the screen for those two characters.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - CoFuture
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 10 |
2 | UInt16 | MsgType | Type of message | 1015 |
4 | UInt32 | Data | A parameter, target role ID, or coordinates | 1000001 |
8 | Byte | Action Type | The type of contents in the message | 6 |
9 | NetStringPacker | Strings | Group of length prefixed strings |
Action Type
☑️ Assumed (Observed) - CoFuture + Soul
🔶 Response data
Val | Name | Description | Recipient | Data | NetStringPacker |
---|---|---|---|---|---|
1 | FIREWORKS | Spawn fireworks | Client | Hero ID | 1 4 Test |
3 | CHANGE_SYN | Update guild name | Client | Guild ID | 1 4 Name |
6 | MATE | Update mate | Client | Hero ID | 1 4 Mate |
9 | MAP_EFFECT | Spawn effect at coordinates | Client | LOW: X HIGH: Y | 1 7 rainbow |
10 | ROLE_EFFECT | Spawn effect on role | Client | Role ID | 1 9 warrior-s |
11 | MEMBER_LIST | Get guild member list | Server | Index | 1 6 Member 🔶 |
16 | QUERY_MATE | Get mate's name | Server | Hero ID | 1 4 Mate 🔶 |
17 | ADD_DICE_PLAYER | Add player / open game | Server | Dice Game ID 🔶 | 1 6 Player |
18 | DEL_DICE_PLAYER | Delete player / close game | Server | Dice Game ID | 1 6 Player |
19 | DICE_BONUS | Update money bonus | Client | Money | 1 6 Player |
20 | PLAYER_WAVE | Play DX Sound | Client | LOW: X HIGH: Y | 1 11 sound/1.wav |
Patch 5017
Message Definition
☑️ Assumed (Observed) - CoFuture
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 10 |
2 | UInt16 | MsgType | Type of message | 1015 |
4 | UInt32 | Data | A parameter, target role ID, or coordinates | 1000001 |
8 | Byte | Action Type | The type of contents in the message | 6 |
9 | NetStringPacker | Strings | Group of length prefixed strings |
Action Type
☑️ Assumed (Observed) - CoFuture + Soul
🔶 Response data
Val | Name | Description | Recipient | Data | NetStringPacker |
---|---|---|---|---|---|
1 | FIREWORKS | Spawn fireworks | Client | Hero ID | 1 4 Test |
3 | CHANGE_SYN | Update guild name | Client | Guild ID | 1 4 Name |
6 | MATE | Update mate | Client | Hero ID | 1 4 Mate |
9 | MAP_EFFECT | Spawn effect at coordinates | Client | LOW: X HIGH: Y | 1 7 rainbow |
10 | ROLE_EFFECT | Spawn effect on role | Client | Role ID | 1 9 warrior-s |
11 | MEMBER_LIST | Get guild member list | Server | Index | 1 6 Member 🔶 |
16 | QUERY_MATE | Get mate's name | Server | Hero ID | 1 4 Mate 🔶 |
17 | ADD_DICE_PLAYER | Add player / open game | Server | Dice Game ID 🔶 | 1 6 Player |
18 | DEL_DICE_PLAYER | Delete player / close game | Server | Dice Game ID | 1 6 Player |
19 | DICE_BONUS | Update money bonus | Client | Money | 1 6 Player |
20 | PLAYER_WAVE | Play DX Sound | Client | LOW: X HIGH: Y | 1 11 sound/1.wav |
26 | WHISPER_DIALOG | Dialog window details | Server | See below 🔶 |
Whisper NetStringPacker Fields
Name | Description | Example |
---|---|---|
Name | Target player | Player |
Details | HeroID Level Potency GuildName | 1000001 1 1 Guild |
MsgNationality
MsgNpc
MsgNpcInfo
This message is sent by the game server to the client to spawn an NPC into the world.
The lookface of an NPC is as calculated:
Lookface = Type * 10 + Direction
The type portion of the lookface can be found in npc.ini. This file is also what determines the name of the NPC.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - CoFuture + Soul
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 18 |
2 | UInt16 | MsgType | Type of message | 2030 |
4 | UInt32 | ID | Unique identifier | 1 |
8 | UInt16 | X | X coordinate of the NPC | 320 |
10 | UInt16 | Y | Y coordinate of the NPC | 460 |
12 | UInt16 | Role | The role the NPC plays | 1 |
14 | UInt16 | Lookface | The type and direction of the NPC | 10 |
16 | UInt16 | Sort | Sort flags or action type the NPC performs | 1 |
18 | NetStringPacker | Strings | Optional name of the NPC |
NPC Sort Flags
☑️ Assumed (Observed) - CoFuture + Soul
Val | Name | Description | Strings |
---|---|---|---|
0 | NONE | NPC that responds as dialog | |
1 | TASK | NPC that opens a window in the client | |
2 | RECYCLE | NPC that is dynamically relocated |
MsgNpcInfoEx
This message is sent by the game server to the client to spawn an NPC with health, an extension of MsgNpcInfo. This is normally used for spawning terrain NPCs, such as the guild gate or pole during guild wars.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 36 |
2 | UInt16 | MsgType | Type of message | 1109 |
4 | UInt32 | ID | Unique identifier | 6701 |
8 | UInt32 | Max Life | Maximum health of the NPC | 10000000 |
12 | UInt32 | Life | Current health of the NPC | 10000000 |
16 | UInt16 | X | X coordinate of the NPC | 163 |
18 | UInt16 | Y | Y coordinate of the NPC | 211 |
20 | UInt16 | Role | The role the NPC plays | 26 |
22 | UInt16 | Lookface | The type and direction of the NPC | 241 |
24 | UInt16 | Sort | Sort flags or action type the NPC performs | 1 |
26 | NetStringPacker | Strings | Optional name of the NPC | 1 8 LeftGate |
MsgNpcPath
Undocumented
MsgOperatingAct
MsgOperatingActInfo
MsgOwnKongfuBase
MsgOwnKongfuImproveFeedback
MsgOwnKongfuImproveSummaryInfo
MsgOwnKongfuPKSetting
MsgOwnKongRank
MsgPackage
This message is sent between the client and game server to handle item storage, such as warehouses, chests in houses, and sashes in later versions of Conquer Online.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - CoFuture + Soul
The message definition below is used for basic requests on checking in and out items.
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 14 |
2 | UInt16 | MsgType | Type of message | 1102 |
4 | UInt32 | ID | Identifier for a hero, NPC, or trunk | 8 |
8 | Byte | Action | How to processes the message | 0 |
9 | Byte | Type | The type of package being processed | 10 |
10 | UInt32 | Item ID | Unique identifier of the item | 1 |
The message definition below is used for returning a list of items back to the player.
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 28 |
2 | UInt16 | MsgType | Type of message | 1102 |
4 | UInt32 | ID | Identifier for a hero, NPC, or trunk | 8 |
8 | Byte | Action | How to processes the message | 0 |
9 | Byte | Type | The type of package being processed | 10 |
10 | UInt16 | Amount | Amount of items to send | 1 |
12 | PackageItem[] | Items | Abbreviated item infos |
Package Item Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt32 | Item ID | Unique identifier of the item | 1 |
4 | UInt32 | Item Type | Identifies the type of item | 730001 |
8 | Byte | Status | Condition bit flags on the item | 0 |
9 | Byte | Socket 1 | The gem in the first socket position | 0 |
10 | Byte | Socket 2 | The gem in the second socket position | 0 |
11 | Byte | Magic 1 | Reserved for rebirth magic effect | 0 |
12 | Byte | Magic 2 | Reserved for an unknown purpose | 0 |
13 | Byte | Magic 3 | Reserved for magical plus rating | 0 |
14 | Byte | Bless | Reduced damage percentage taken by the character | 0 |
15 | Byte | Enchant | Added max life for the character | 0 |
Action Type
☑️ Assumed (Observed) - CoFuture + Soul
Val | Name | Description | Recipient | ID | Data |
---|---|---|---|---|---|
0 | QUERY_LIST | Query for a list of items | Server | NPC ID | PackageItem[] |
1 | CHECK_IN | Deposit an item | Server | NPC ID | ItemID |
2 | CHECK_OUT | Withdraw an item | Server | NPC ID | ItemID |
Package Type
☑️ Assumed (Observed) - CoFuture + Soul
enum PackageType {
PACKAGE_TYPE_NONE = 0;
PACKAGE_TYPE_STORAGE = 10;
PACKAGE_TYPE_TRUNK = 20;
}
Patch 5187
Message Definition
❓ Unverified
The message definition below is used for basic requests on checking in and out items.
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 14 |
2 | UInt16 | MsgType | Type of message | 1102 |
4 | UInt32 | ID | Identifier for a hero, NPC, or trunk | 8 |
8 | Byte | Action | How to processes the message | 0 |
9 | Byte | Type | The type of package being processed | 10 |
10 | UInt32 | Item ID | Unique identifier of the item | 1 |
The message definition below is used for returning a list of items back to the player.
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 38 |
2 | UInt16 | MsgType | Type of message | 1102 |
4 | UInt32 | ID | Identifier for a hero, NPC, or trunk | 8 |
8 | Byte | Action | How to processes the message | 0 |
9 | Byte | Type | The type of package being processed | 10 |
10 | UInt16 | Amount | Amount of items to send | 1 |
12 | PackageItem[] | Items | Abbreviated item infos |
Package Item Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt32 | Item ID | Unique identifier of the item | 1 |
4 | UInt32 | Item Type | Identifies the type of item | 730001 |
8 | Byte | Status | Condition bit flags on the item | 0 |
9 | Byte | Socket 1 | The gem in the first socket position | 0 |
10 | Byte | Socket 2 | The gem in the second socket position | 0 |
11 | Byte | Magic 1 | Reserved for rebirth magic effect | 0 |
12 | Byte | Magic 2 | Reserved for an unknown purpose | 0 |
13 | Byte | Magic 3 | Reserved for magical plus rating | 0 |
14 | Bool | Bound | True if the item is bound to an account | 0 |
15 | Byte | Bless | Reduced damage percentage taken by the character | 0 |
16 | Byte | Enchant | Added max life for the character | 0 |
17 | UInt16 | Data | Additional attributes for the item | 0 |
19 | Bool | Suspicious | Marked as suspicious for trading | 0 |
20 | Bool | Locked | Locked from being dropped or traded | 0 |
21 | Byte | Color | Color modifier for the item | 3 |
22 | UInt32 | Magic 3 Progress | Progress towards magical plus rating | 0 |
Action Type
❓ Unverified
Val | Name | Description | Recipient | ID | Data |
---|---|---|---|---|---|
0 | QUERY_LIST | Query for a list of items | Server | NPC ID | PackageItem[] |
1 | CHECK_IN | Deposit an item | Server | NPC ID | ItemID |
2 | CHECK_OUT | Withdraw an item | Server | NPC ID | ItemID |
Package Type
❓ Unverified
enum PackageType {
PACKAGE_TYPE_NONE = 0;
PACKAGE_TYPE_STORAGE = 10;
PACKAGE_TYPE_TRUNK = 20;
PACKAGE_TYPE_SASH = 30;
}
MsgPaint
MsgPCNum
This client message is sent to the account server after receiving MsgConnectEx and contains the client's mac address. The mac address field in this message is trailed by a null terminator at offset 48 (explicitly set by the client).
Table of Contents
Patch 5615
Message Definition
✅ Verified (Client)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 52 |
2 | UInt16 | MsgType | Type of message | 1100 |
4 | UInt32 | Account ID | Account id from the account server | 1 |
8 | Char[40] | Mac address | Mac address for the client interface | 0A0B0C0D0E0F |
MsgPCServerConfig
Undocumented
MsgPeerage
MsgPetInfo
MsgPicKey
MsgPicKeyError
MsgPigeon
MsgPigeonQuery
MsgPing
Undocumented
MsgPKEliteMatchInfo
MsgPKEnable
MsgPKStatistic
MsgPlayer
This message is received by the client to spawn an entity on screen. Though the official name of the message suggests it spawns only players, it also spawns monsters on the game map. Entities must be less than or equal to 18 tiles away in both the x and y direction; otherwise, entities outside of that range will not spawn and automatically be cleaned up by the client.
In patches 5200 and above, this message is not enough to spawn equipment on the player. MsgPlayerAttribInfo must be sent afterwards to finish spawning equipment and calculate final attributes.
Table of Contents
Patch 4267
Player Message Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 65 |
2 | UInt16 | MsgType | Type of message | 1014 |
4 | UInt32 | Hero ID | Unique identifier for the entity | 1000000 |
8 | UInt32 | Look Face | Mesh of the entity | 501002 |
12 | UInt32 | Status Effect | Status effect bitmap | 0 |
16 | UInt32 | Syn Mask | SynID << 4 | SynRank & 0x00FFFFFF | 0 |
20 | UInt32 | Garment | Garment's item type identifier | 0 |
24 | UInt32 | Armet | Headgear's item type identifier | 0 |
28 | UInt32 | Armor | Armor's item type identifier | 0 |
32 | UInt32 | Right Hand | Weapon's item type identifier | 0 |
36 | UInt32 | Left Hand | Weapon's item type identifier | 0 |
44 | UInt16 | X | X coordinate of the entity | 320 |
46 | UInt16 | Y | Y coordinate of the entity | 460 |
48 | UInt16 | Hair | Hairstyle and hair color | 535 |
50 | Byte | Direction | Entity direction | 0 |
51 | Byte | Pose | Player's current pose | 100 |
52 | NetStringPacker | Strings | Group of length prefixed strings |
NetStringPacker Fields
Name | Description | Example |
---|---|---|
Name | Name of the player | Player |
Mate | Name of the player's spouse | Mate |
Monster Message Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 61 |
2 | UInt16 | MsgType | Type of message | 1014 |
4 | UInt32 | Hero ID | Unique identifier for the entity | 400001 |
8 | UInt32 | Look Face | Mesh of the entity | 102 |
12 | UInt32 | Status Effect | Status effect bitmap | 0 |
16 | UInt32 | Owner ID | Identifier of the pet's owner | 0 |
40 | UInt16 | Life | Hitpoints of the entity | 12 |
42 | UInt16 | Level | Level of the entity | 1 |
44 | UInt16 | X | X coordinate of the entity | 320 |
46 | UInt16 | Y | Y coordinate of the entity | 460 |
50 | Byte | Direction | Entity direction | 0 |
51 | Byte | Pose | Player's current pose | 100 |
52 | NetStringPacker | Strings | Group of length prefixed strings |
NetStringPacker Fields
Name | Description | Example |
---|---|---|
Name | Name of the monster | Monster |
Patch 5103
Player Message Definition
❓ Unverified - Imported from legacy wiki
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 107 |
2 | UInt16 | MsgType | Type of message | 1014 |
4 | UInt32 | Look Face | Mesh of the entity | 501002 |
8 | UInt32 | Hero ID | Unique identifier for the entity | 1000000 |
12 | UInt32 | Syn Mask | SynID << 4 | SynRank & 0x00FFFFFF | 0 |
16 | UInt64 | Status Effect | Status effect bitmap | 0 |
24 | UInt32 | Garment | Garment's item type identifier | 0 |
28 | UInt32 | Armet | Headgear's item type identifier | 0 |
32 | UInt32 | Armor | Armor's item type identifier | 0 |
36 | UInt32 | Right Hand | Weapon's item type identifier | 0 |
40 | UInt32 | Left Hand | Weapon's item type identifier | 0 |
52 | UInt16 | Hair | Hairstyle and hair color | 535 |
54 | UInt16 | X | X coordinate of the entity | 320 |
56 | UInt16 | Y | Y coordinate of the entity | 460 |
58 | Byte | Direction | Entity direction | 0 |
59 | Byte | Pose | Player's current pose | 100 |
60 | UInt16 | Metempsychosis | Metempsychosis level | 0 |
70 | UInt16 | Shared BP | Battle power from mentor | 0 |
77 | UInt32 | Flower Rank | Flower ranking | 0 |
81 | UInt32 | Nobility Rank | Nobility ranking | 12 |
85 | UInt16 | Armor Color | Color of equipped armor | 3 |
87 | UInt16 | Shield Color | Color of equipped shield | 4 |
89 | UInt16 | Armet Color | Color of equipped headgear | 3 |
91 | UInt32 | Study Points | Quiz show points | 6546 |
95 | NetStringPacker | Strings | Group of length prefixed strings |
NetStringPacker Fields
Name | Description | Example |
---|---|---|
Name | Name of the player | Player |
Mate | Name of the player's spouse | Mate |
Monster Message Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 103 |
2 | UInt16 | MsgType | Type of message | 10014 |
4 | UInt32 | Look Face | Mesh of the entity | 501002 |
8 | UInt32 | Hero ID | Unique identifier for the entity | 1000000 |
12 | UInt32 | Owner ID | Identifier of the pet's owner | 0 |
16 | UInt64 | Status Effect | Status effect bitmap | 0 |
48 | UInt16 | Life | Hitpoints of the entity | 12 |
54 | UInt16 | X | X coordinate of the entity | 320 |
56 | UInt16 | Y | Y coordinate of the entity | 460 |
58 | Byte | Direction | Entity direction | 0 |
59 | Byte | Pose | Player's current pose | 100 |
62 | UInt16 | Level | Level of the entity | 1 |
95 | NetStringPacker | Strings | Group of length prefixed strings |
NetStringPacker Fields
Name | Description | Example |
---|---|---|
Name | Name of the monster | Monster |
MsgPlayerAttribInfo
This message is sent to the client to initialize the battle statistics panel with various damage and defense attributes, and is sent after the MsgUserInfo and MsgItemInfo messages to finish displaying equipped items. When a player's equipment is observed by another player using MsgAction, then this message is also sent to finish populating equipment.
New attributes were introduced with the introduction of Refinery, Stabilization, and Chi.
Table of Contents
Patch 5615
Message Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 136 |
2 | UInt16 | MsgType | Type of message | 1040 |
4 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
8 | UInt32 | Life | Current hitpoints | 100 |
12 | UInt32 | Mana | Current mana points | 0 |
16 | UInt32 | MaxAttack | Physical max attack before modifiers | 7 |
20 | UInt32 | MinAttack | Physical min attack before modifiers | 14 |
24 | UInt32 | Defense | Effective defense before modifiers | 32 |
28 | UInt32 | MagicAttack | Magic attack modifier | 0 |
32 | UInt32 | MagicDefense | Magic defense modifier | 0 |
36 | UInt32 | DodgePercent | Dodge increase | 92 |
40 | UInt32 | Agility | Raw agility attribute | 20 |
44 | UInt32 | Accuracy | Hit rate accuracy | 10 |
48 | UInt32 | BonusAttackPercent | Physical attack increase | 0 |
52 | UInt32 | BonusMagicPercent | Magic attack increase | 0 |
56 | UInt32 | ReduceDamagePercent | Overall damage reduction | 7 |
60 | UInt32 | CurseDamagePercent | Cursed damage increase | 0 |
64 | UInt32 | BlessPercent | Bless damage reduction | 0 |
68 | UInt32 | CriticalStrikePercent | Physical critical hit increase | 0 |
72 | UInt32 | MagicCriticalStrikePercent | Magic critical hit increase | 0 |
76 | UInt32 | ImmunityPercent | Critical hit negation increase | 0 |
80 | UInt32 | PenetrationPercent | Magic defense negation | 0 |
84 | UInt32 | BlockPercent | Physical damage block | 0 |
88 | UInt32 | BreakthroughPercent | Max attack increase for higher BP | 0 |
92 | UInt32 | CounteractionPercent | Breakthrough counteraction | 0 |
96 | UInt32 | DetoxicationPercent | Poison attack reduction | 0 |
100 | UInt32 | FinalAttack | Final physical attack increase | 7 |
104 | UInt32 | FinalMagicAttack | Final magic attack increase | 0 |
108 | UInt32 | FinalDefense | Final physical attack reduction | 32 |
112 | UInt32 | FinalMagicDefense | Final magic attack reduction | 0 |
116 | UInt32 | MetalResistPercent | Metal boss damage reduction | 0 |
120 | UInt32 | WoodResistPercent | Wood boss damage reduction | 0 |
124 | UInt32 | WaterResistPercent | Water boss damage reduction | 0 |
128 | UInt32 | FireResistPercent | Fire boss damage reduction | 0 |
132 | UInt32 | EarthResistPercent | Earth boss damage reduction | 0 |
MsgPromotionAct
MsgPromotionInfo
MsgQualifyingDetailInfo
MsgQualifyingFightersList
MsgQualifyingInteractive
MsgQualifyingRank
MsgQualifyingSeasonRankList
MsgQuench
MsgQuiz
MsgQuizSponsor
MsgRaceTrackProp
MsgRaceTrackPropEffect
MsgRaceTrackStatus
MsgRank
MsgRegister
This message is sent from the game client containing initial character creation details from the character creation screen. To get this message, you must first send MsgTalk with the text "NEW_ROLE" on the login attribute. The expected response to this message from the server is MsgTalk with the text "ANSWER_OK" on the register attribute. Invalid registration attempts can be answered with the error on the register attribute rather than with "ANSWER_OK".
The identity shown in this message may not be the account identifier if you use an access token in place of the identifier in MsgConnectEx.
⚠️ WARNING
Character creation requests can be easily spoofed with invalid professions and models, so be sure to validate inputs. Character names may also contain invalid characters or phrases, such as "[GM]" or "[PM]".
Table of Contents
Patch 4267
Message Definition
❓ Unverified - Imported from the legacy wiki
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 60 |
2 | UInt16 | MsgType | Type of message | 1001 |
4 | Char[16] | Username | Account username from login | admin |
20 | Char[16] | Hero Name | Requested name to be checked | Player |
36 | Char[16] | Password | Account password (missing RC5 wrapper) | test |
52 | UInt16 | Hero Look | Selected character model | 1003 |
54 | UInt16 | Hero Profession | Selected character profession | 10 |
56 | UInt32 | Account ID | Account id from the account server | 1 |
Patch 5017
Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 60 |
2 | UInt16 | MsgType | Type of message | 1001 |
4 | Char[16] | Username | Account username from login | admin |
20 | Char[16] | Hero Name | Requested name to be checked | Player |
36 | Char[16] | Masked Password | Hidden password | **** |
52 | UInt16 | Hero Look | Selected character model | 1003 |
54 | UInt16 | Hero Profession | Selected character profession | 10 |
56 | UInt32 | Account ID | Account id from the account server | 1 |
Patch 5065
Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 60 |
2 | UInt16 | MsgType | Type of message | 1001 |
4 | Char[16] | Username | Account username from login | admin |
20 | Char[16] | Hero Name | Requested name to be checked | Player |
52 | UInt16 | Hero Look | Selected character model | 1003 |
54 | UInt16 | Hero Profession | Selected character profession | 10 |
56 | UInt32 | Account ID | Account id from the account server | 1 |
Patch 5165
Message Definition
❓ Unverified - Imported from the legacy wiki
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 104 |
2 | UInt16 | MsgType | Type of message | 1001 |
4 | Char[16] | Username | Account username from login | admin |
20 | Char[16] | Hero Name | Requested name to be checked | Player |
52 | UInt16 | Hero Look | Selected character model | 1003 |
54 | UInt16 | Hero Profession | Selected character profession | 10 |
56 | UInt32 | Account ID | Account id from the account server | 1 |
60 | UInt16[6] | MacAddress | Network device identifier | 00,10,5A,44,12,B5 |
MsgRegisterFaceBook
MsgRelation
MsgRequestKeyLogin
MsgSelfSynMemAwardRank
MsgServerInfo
MsgShowHandActivePlayer
MsgShowHandCallAction
MsgShowHandDealtCard
MsgShowHandEnter
MsgShowHandExit
MsgShowHandGameResult
MsgShowHandLayCard
MsgShowHandLostInfo
MsgShowHandOnlineStatus
MsgShowHandTrusteeship
MsgSlotAction
MsgSlotResult
MsgSolidify
Undocumented
MsgSponsor
MsgSponsorInfo
MsgSubPro
MsgSuitStatus
MsgSuperFlag
MsgSyncAction
MsgSynChgDomName
MsgSynCompete
MsgSyndicate
This message is sent between the client and game server to request and respond to guild-related actions, such as joining and leaving a guild, managing allies and enemies, disbanding the guild, and more. Similar to MsgAction, the server responds to MsgSyndicate with either a specific action message (such as querying for the MsgSyndicateAttributeInfo message) or with the MsgSyndicate message itself (such as for applying for membership).
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - CoFuture + Soul
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 12 |
2 | UInt16 | MsgType | Type of message | 1107 |
4 | UInt32 | Action | Guild action being performed | 1 |
8 | UInt32 | Target | Target individual or guild identifier | 1000000 |
Action Types
☑️ Assumed (Observed) - CoFuture + Soul
🔶 Response data
Val | Name | Description | Recipient | Target |
---|---|---|---|---|
1 | APPLY_JOIN | Apply to join a guild (sends INVITE_JOIN) | Server | Target ID |
2 | INVITE_JOIN | Invite a player to join a guild | Client | Target ID |
3 | LEAVE_SYN | Request to leave current guild | Server | |
4 | KICKOUT_MEMBER | Kick a member from guild | Client | Target ID |
6 | QUERY_SYN_NAME | Sends MsgName with guild name | Server | Syndicate ID |
7 | ALLY_APPLY | Sets a guild as an ally | Server | Ally's Syndicate ID |
8 | CLEAR_ALLY | Removes an ally guild | Server | Ally's Syndicate ID |
9 | ANTAGONIZE | Sets a guild as an enemy | Server | Enemy's Syndicate ID |
10 | CLEAR_ANTAGONIZE | Removes an enemy guild | Server | Enemy's Syndicate ID |
11 | DONATE_MONEY | Add silver to the guild fund | Server | Amount |
12 | QUERY_SYNATTR | Query for guild attributes | Server | Target ID |
14 | SET_SYN | Sent on login to set syndicate ID | Client | Syndicate ID |
19 | DESTROY_SYN | Terminates a guild | Client | Syndicate ID |
MsgSyndicateAttributeInfo
This game server message is sent to the client to display details about a guild and the player's role and donations in that guild. In later versions of the client, this expanded to include other donation types, guild player requirements, how long the player has been enrolled in the guild for, etc.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - CoFuture + Soul
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 40 |
2 | UInt16 | MsgType | Type of message | 1106 |
4 | UInt32 | Syndicate ID | Unique identifier of the player | 1000000 |
8 | UInt32 | Proffer | Silver amount offered as donation | 10000 |
12 | UInt32 | Fund | Total silver fund | 10000 |
16 | UInt32 | Population | Number of guild members | 1 |
20 | Byte | Rank | Position in the guild | 100 |
21 | Char[16] | Leader | Name of the guild leader | Player |
Syndicate Rank
☑️ Assumed (Observed) - CoFuture
enum SyndicateRank {
SYNDICATE_RANK_MEMBER = 50;
SYNDICATE_RANK_DEPUTY_LEADER = 90;
SYNDICATE_RANK_LEADER = 100;
}
Patch 5517
Message Definition
🚩 Incomplete
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 92 |
2 | UInt16 | MsgType | Type of message | 1106 |
4 | UInt32 | Syndicate ID | Unique identifier of the player | 1000000 |
8 | UInt32 | Proffer | Silver amount offered as donation | 10000 |
12 | UInt64 | Fund | Total silver fund | 10000 |
20 | UInt32 | EMoney Fund | Total CPs fund | 0 |
24 | UInt32 | Population | Number of guild members | 1 |
28 | Byte | Rank | Position in the guild | 100 |
32 | Char[16] | Leader | Name of the guild leader | Player |
48 | UInt32 | Level Req | Required minimum level for joining | 1 |
52 | UInt32 | Metempsychosis Req | Required minimum rebirth for joining | 1 |
56 | UInt32 | Profession Req | Required professions for joining as a bitmap | 0 |
60 | UInt32 | Level | Overall guild level | 1 |
67 | UInt32 | Registration Date | Day the guild was registered on in YYYYMMDD | 20150116 |
Syndicate Rank
🚩 Incomplete
enum SyndicateRank {
SYNDICATE_RANK_AGENT = 590,
SYNDICATE_RANK_AIDE = 0X25A,
SYNDICATE_RANK_ARSENAL_AGENT = 0X254,
SYNDICATE_RANK_ARS_FOLLOWER = 0X1F0,
SYNDICATE_RANK_A_SUPERVISOR = 0X358,
SYNDICATE_RANK_CP_AGENT = 0X255,
SYNDICATE_RANK_CP_FOLLOWER = 0X1F1,
SYNDICATE_RANK_CP_SUPERVISOR = 0X359,
SYNDICATE_RANK_DEPUTY_LEADER = 990,
SYNDICATE_RANK_DEPUTY_STEWARD = 650,
SYNDICATE_RANK_D_LEADER_AIDE = 0X263,
SYNDICATE_RANK_D_LEADER_SPOUSE = 620,
SYNDICATE_RANK_FOLLOWER = 490,
SYNDICATE_RANK_G_SUPERVISOR = 0X356,
SYNDICATE_RANK_GUIDE_AGENT = 0X252,
SYNDICATE_RANK_GUIDE_FOLLOWER = 0X1EE,
SYNDICATE_RANK_GUILD_LEADER = 0X3E8,
SYNDICATE_RANK_H_DEPUTY_LEADER = 980,
SYNDICATE_RANK_HONORARY_MANAGER = 880,
SYNDICATE_RANK_HONORARY_STEWARD = 680,
SYNDICATE_RANK_HONORARY_SUPERV = 840,
SYNDICATE_RANK_LEADER_SPOUSE = 920,
SYNDICATE_RANK_LILY_AGENT = 0X24F,
SYNDICATE_RANK_LILY_FOLLOWER = 0X1EB,
SYNDICATE_RANK_LILY_SUPERVISOR = 0X353,
SYNDICATE_RANK_L_SPOUSE_AIDE = 610,
SYNDICATE_RANK_MANAGER = 890,
SYNDICATE_RANK_MANAGER_AIDE = 510,
SYNDICATE_RANK_MANAGER_SPOUSE = 520,
SYNDICATE_RANK_MEMBER = 200,
SYNDICATE_RANK_NONE = 0,
SYNDICATE_RANK_ORCHID_AGENT = 0X256,
SYNDICATE_RANK_ORCHID_FOLLOWER = 0X1F2,
SYNDICATE_RANK_O_SUPERVISOR = 0X35A,
SYNDICATE_RANK_PK_AGENT = 0X251,
SYNDICATE_RANK_PK_FOLLOWER = 0X1ED,
SYNDICATE_RANK_PK_SUPERVISOR = 0X355,
SYNDICATE_RANK_ROSE_AGENT = 0X250,
SYNDICATE_RANK_ROSE_FOLLOWER = 0X1EC,
SYNDICATE_RANK_ROSE_SUPERVISOR = 0X354,
SYNDICATE_RANK_SENIOR_MEMBER = 210,
SYNDICATE_RANK_SILVER_AGENT = 0X253,
SYNDICATE_RANK_SILVER_FOLLOWER = 0X1EF,
SYNDICATE_RANK_S_SUPERVISOR = 0X357,
SYNDICATE_RANK_STEWARD = 690,
SYNDICATE_RANK_STEWARD_SPOUSE = 420,
SYNDICATE_RANK_SUPERVISOR = 850,
SYNDICATE_RANK_SUPERVISOR_AIDE = 0X1FF,
SYNDICATE_RANK_SUPERV_SPOUSE = 0X209,
SYNDICATE_RANK_T_SUPERVISOR = 0X35B,
SYNDICATE_RANK_TULIP_AGENT = 0X257,
SYNDICATE_RANK_TULIP_FOLLOWER = 0X1F3
}
Profession Requirement Bitmap
❓ Unverified
enum SyndicateProfessionRequirementFlags {
SYNDICATE_PROFESSION_REQ_NONE = 0x00000000;
SYNDICATE_PROFESSION_REQ_TROJAN = 0x00000001;
SYNDICATE_PROFESSION_REQ_WARRIOR = 0x00000002;
SYNDICATE_PROFESSION_REQ_TAOIST = 0x00000004;
SYNDICATE_PROFESSION_REQ_ARCHER = 0x00000008;
SYNDICATE_PROFESSION_REQ_NINJA = 0x00000010;
SYNDICATE_PROFESSION_REQ_MONK = 0x00000020;
}
MsgSynMemberInfo
MsgSynMemberList
MsgSynpOffer
This message is sent to the game client to list and update donations currently made to a guild / syndicate.
Table of Contents
Patch 5615
Message Definition
✅ Verified (Client)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 84 |
2 | UInt16 | MsgType | Type of message | 1058 |
4 | UInt32 | SynpOfferUpdateFlags | Which donations to update | 0 |
8 | Int32 | Money | Amount of money donated / debted | 0 |
12 | Int32 | EMoney | Amount of CPs donated / debted | 0 |
16 | UInt32 | Education | Amount of education points | 0 |
20 | UInt32 | Exploits | Amount of PK merit | 0 |
24 | UInt32 | Arsenal | Points in the arsenal | 0 |
28 | UInt32 | Roses | Flower points from roses | 0 |
32 | UInt32 | Orchids | Flower points from orchids | 0 |
36 | UInt32 | Lilies | Flower points from lilies | 0 |
40 | UInt32 | Tulips | Flower points from tulips | 0 |
44 | UInt32 | Faction | Amount of merit from faction PK | 0 |
SynpOffer Update Flags
✅ Verified (Client)
enum SynpOfferUpdateFlags {
NONE = 0;
MONEY = 1U << 0;
EMONEY = 1U << 1;
EDUCATION = 1U << 2;
EXPLOIT = 1U << 3;
ARSENAL = 1U << 4;
ROSE = 1U << 5;
ORCHID = 1U << 6;
LILY = 1U << 7;
TULIP = 1U << 8;
FACTION_PK_MERIT = 1U << 9;
}
MsgSynRecruitAdvertising
MsgSynRecruitAdvertisingList
MsgSynRecruitAdvertisingOpt
MsgTalk
This message is sent from the game client to send a message to other players, or sent from the game server to receive a message from another player. Messages can also originate from the server as SYSTEM
and be can be addressed to ALLUSERS
for messages sent to all players.
The following text messages can be sent by the game server to control the client before sign-on completes.
- NEW_ROLE (Login attribute): Opens the character creation screen after receiving MsgConnect.
- ANSWER_OK (Login / Register attribute): Character was created or the character exists.
Text attributes are used to control where the message appears in the client. For example, the text channel it appears in, as a system message in the top left corner, an announcement across the screen, etc. Text styles can also be used to add flare to messages; however, Conquer Online doesn't use this.
When constructing the string packer, character names remain the same length (max 16 characters). The max length for a message is 256 characters, and the max emotion is 16 characters.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 42 |
2 | UInt16 | MsgType | Type of message | 1004 |
4 | Int32 | Text Color | ARGB32 color of the text | 00FF0000 |
8 | UInt16 | Text Attribute | Defines where the text appears | 2000 |
10 | Uint16 | Text Style | Defines how the text appears | 0 |
12 | UInt32 | Local Time | Hours and minutes | 1241 |
16 | NetStringPacker | Strings | Group of length prefixed strings |
NetStringPacker Fields
Name | Description | Example |
---|---|---|
Speaker | Author of the message | SYSTEM |
Header | Recipient of the message | ALLUSERS |
Emotion | A prefix to the message | |
Words | The body of the message | Testing |
Text Attribute
☑️ Assumed (Observed) - Comet
enum TextAttribute {
TXTATTRIB_UNSPECIFIED = 0;
TXTATTRIB_NORMAL = 2000;
TXTATTRIB_WHISPER = 2001;
TXTATTRIB_ACTION = 2002;
TXTATTRIB_TEAM = 2003;
TXTATTRIB_SYNDICATE = 2004;
TXTATTRIB_FAMILY = 2006;
TXTATTRIB_SYSTEM = 2007;
TXTATTRIB_YELL = 2008;
TXTATTRIB_FRIEND = 2009;
TXTATTRIB_GM = 2011;
TXTATTRIB_NOTIFICATION = 2012;
TXTATTRIB_GHOST = 2013;
TXTATTRIB_SERVICE = 2014;
TXTATTRIB_TIP = 2015;
TXTATTRIB_REGISTER = 2100;
TXTATTRIB_LOGIN = 2101;
TXTATTRIB_SHOP = 2102;
TXTATTRIB_PET = 2103;
TXTATTRIB_VENDOR = 2104;
TXTATTRIB_WEBPAGE = 2105;
TXTATTRIB_SYNWAR_FIRST = 2108;
TXTATTRIB_SYNWAR_NEXT = 2109;
TXTATTRIB_LEAVE_WORD = 2110;
TXTATTRIB_SYNANNOUNCE = 2111;
TXTATTRIB_TRADE_BOARD = 2201;
TXTATTRIB_FRIEND_BOARD = 2202;
TXTATTRIB_TEAM_BOARD = 2203;
TXTATTRIB_SYN_BOARD = 2204;
TXTATTRIB_OTHER_BOARD = 2205;
}
Text Style
☑️ Assumed (Observed) - Comet
enum TextStyle {
TXTSTYLE_NORMAL = 0;
TXTSTYLE_SCROLL = 0x01;
TXTSTYLE_FLASH = 0x02;
TXTSTYLE_BLAST = 0x08;
}
Patch 4354
Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 50 |
2 | UInt16 | MsgType | Type of message | 1004 |
4 | Int32 | Text Color | ARGB32 color of the text | 00FF0000 |
8 | UInt16 | Text Attribute | Defines where the text appears | 2000 |
10 | Uint16 | Text Style | Defines how the text appears | 0 |
12 | UInt32 | Local Time | Hours and minutes | 1241 |
16 | UInt32 | Hearer View | Character view mesh for the hearer | 501002 |
20 | UInt32 | Speaker View | Character view mesh for the speaker | 501002 |
24 | NetStringPacker | Strings | Group of length prefixed strings |
NetStringPacker Fields
Name | Description | Example |
---|---|---|
Speaker | Author of the message | SYSTEM |
Header | Recipient of the message | ALLUSERS |
Emotion | A prefix to the message | |
Words | The body of the message | Testing |
Text Attribute
☑️ Assumed (Observed) - Comet
enum TextAttribute {
TXTATTRIB_UNSPECIFIED = 0;
TXTATTRIB_NORMAL = 2000;
TXTATTRIB_WHISPER = 2001;
TXTATTRIB_ACTION = 2002;
TXTATTRIB_TEAM = 2003;
TXTATTRIB_SYNDICATE = 2004;
TXTATTRIB_FAMILY = 2006;
TXTATTRIB_SYSTEM = 2007;
TXTATTRIB_YELL = 2008;
TXTATTRIB_FRIEND = 2009;
TXTATTRIB_GM = 2011;
TXTATTRIB_NOTIFICATION = 2012;
TXTATTRIB_GHOST = 2013;
TXTATTRIB_SERVICE = 2014;
TXTATTRIB_TIP = 2015;
TXTATTRIB_REGISTER = 2100;
TXTATTRIB_LOGIN = 2101;
TXTATTRIB_SHOP = 2102;
TXTATTRIB_PET = 2103;
TXTATTRIB_VENDOR = 2104;
TXTATTRIB_WEBPAGE = 2105;
TXTATTRIB_SYNWAR_FIRST = 2108;
TXTATTRIB_SYNWAR_NEXT = 2109;
TXTATTRIB_LEAVE_WORD = 2110;
TXTATTRIB_SYNANNOUNCE = 2111;
TXTATTRIB_TRADE_BOARD = 2201;
TXTATTRIB_FRIEND_BOARD = 2202;
TXTATTRIB_TEAM_BOARD = 2203;
TXTATTRIB_SYN_BOARD = 2204;
TXTATTRIB_OTHER_BOARD = 2205;
TXTATTRIB_BROADCAST = 2500;
}
Text Style
☑️ Assumed (Observed) - Comet
enum TextStyle {
TXTSTYLE_NORMAL = 0;
TXTSTYLE_SCROLL = 0x01;
TXTSTYLE_FLASH = 0x02;
TXTSTYLE_BLAST = 0x08;
}
Patch 5615
Message Definition
☑️ Assumed (Observed) - Chimera
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 52 |
2 | UInt16 | MsgType | Type of message | 1004 |
4 | Int32 | Text Color | ARGB32 color of the text | 00FF0000 |
8 | UInt16 | Text Attribute | Defines where the text appears | 2000 |
10 | Uint16 | Text Style | Defines how the text appears | 0 |
12 | UInt32 | Local Time | Hours and minutes | 1241 |
16 | UInt32 | Hearer View | Character view mesh for the hearer | 501002 |
20 | UInt32 | Speaker View | Character view mesh for the speaker | 501002 |
24 | NetStringPacker | Strings | Group of length prefixed strings |
NetStringPacker Fields
Name | Description | Example |
---|---|---|
Speaker | Author of the message | SYSTEM |
Header | Recipient of the message | ALLUSERS |
Emotion | A prefix to the message | |
Words | The body of the message | Testing |
Unknown | Not referenced in the client assembly | |
Unknown | Not referenced in the client assembly |
Text Attribute
☑️ Assumed (Observed) - Chimera
enum TextAttribute {
TXTATTRIB_UNSPECIFIED = 0;
TXTATTRIB_NORMAL = 2000;
TXTATTRIB_WHISPER = 2001;
TXTATTRIB_ACTION = 2002;
TXTATTRIB_TEAM = 2003;
TXTATTRIB_SYNDICATE = 2004;
TXTATTRIB_FAMILY = 2006;
TXTATTRIB_SYSTEM = 2007;
TXTATTRIB_YELL = 2008;
TXTATTRIB_FRIEND = 2009;
TXTATTRIB_GM = 2011;
TXTATTRIB_NOTIFICATION = 2012;
TXTATTRIB_GHOST = 2013;
TXTATTRIB_SERVICE = 2014;
TXTATTRIB_TIP = 2015;
TXTATTRIB_WORLD = 2021,
TXTATTRIB_QUALIFIER = 2022,
TXTATTRIB_STUDY = 2024,
TXTATTRIB_REGISTER = 2100;
TXTATTRIB_LOGIN = 2101;
TXTATTRIB_SHOP = 2102;
TXTATTRIB_PET = 2103;
TXTATTRIB_VENDOR = 2104;
TXTATTRIB_WEBPAGE = 2105;
TXTATTRIB_SYNWAR_FIRST = 2108;
TXTATTRIB_SYNWAR_NEXT = 2109;
TXTATTRIB_LEAVE_WORD = 2110;
TXTATTRIB_SYNANNOUNCE = 2111;
TXTATTRIB_AGATE = 2115;
TXTATTRIB_TRADE_BOARD = 2201;
TXTATTRIB_FRIEND_BOARD = 2202;
TXTATTRIB_TEAM_BOARD = 2203;
TXTATTRIB_SYN_BOARD = 2204;
TXTATTRIB_OTHER_BOARD = 2205;
TXTATTRIB_BROADCAST = 2500;
}
Text Style
☑️ Assumed (Observed) - Chimera
enum TextStyle {
TXTSTYLE_NORMAL = 0;
TXTSTYLE_SCROLL = 0x01;
TXTSTYLE_FLASH = 0x02;
TXTSTYLE_BLAST = 0x08;
}
Patch 5808
Message Definition
❓ Unverified - Imported from the legacy wiki
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 56 |
2 | UInt16 | MsgType | Type of message | 1004 |
4 | UInt32 | System Time | Milliseconds of system uptime | 1579535985 |
8 | Int32 | Text Color | ARGB32 color of the text | 00FF0000 |
12 | UInt16 | Text Attribute | Defines where the text appears | 2000 |
14 | Uint16 | Text Style | Defines how the text appears | 0 |
16 | UInt32 | Local Time | Hours and minutes | 1241 |
20 | UInt32 | Hearer View | Character view mesh for the hearer | 501002 |
24 | UInt32 | Speaker View | Character view mesh for the speaker | 501002 |
28 | NetStringPacker | Strings | Group of length prefixed strings |
NetStringPacker Fields
Name | Description | Example |
---|---|---|
Speaker | Author of the message | SYSTEM |
Header | Recipient of the message | ALLUSERS |
Emotion | A prefix to the message | |
Words | The body of the message | Testing |
Unknown | Not referenced in the client assembly | |
Unknown | Not referenced in the client assembly |
Text Attribute
❓ Unverified - Imported from the legacy wiki
enum TextAttribute {
TXTATTRIB_UNSPECIFIED = 0;
TXTATTRIB_NORMAL = 2000;
TXTATTRIB_WHISPER = 2001;
TXTATTRIB_ACTION = 2002;
TXTATTRIB_TEAM = 2003;
TXTATTRIB_SYNDICATE = 2004;
TXTATTRIB_FAMILY = 2006;
TXTATTRIB_SYSTEM = 2007;
TXTATTRIB_YELL = 2008;
TXTATTRIB_FRIEND = 2009;
TXTATTRIB_GM = 2011;
TXTATTRIB_NOTIFICATION = 2012;
TXTATTRIB_GHOST = 2013;
TXTATTRIB_SERVICE = 2014;
TXTATTRIB_TIP = 2015;
TXTATTRIB_WORLD = 2021,
TXTATTRIB_QUALIFIER = 2022,
TXTATTRIB_STUDY = 2024,
TXTATTRIB_REGISTER = 2100;
TXTATTRIB_LOGIN = 2101;
TXTATTRIB_SHOP = 2102;
TXTATTRIB_PET = 2103;
TXTATTRIB_VENDOR = 2104;
TXTATTRIB_WEBPAGE = 2105;
TXTATTRIB_SYNWAR_FIRST = 2108;
TXTATTRIB_SYNWAR_NEXT = 2109;
TXTATTRIB_LEAVE_WORD = 2110;
TXTATTRIB_SYNANNOUNCE = 2111;
TXTATTRIB_AGATE = 2115;
TXTATTRIB_TRADE_BOARD = 2201;
TXTATTRIB_FRIEND_BOARD = 2202;
TXTATTRIB_TEAM_BOARD = 2203;
TXTATTRIB_SYN_BOARD = 2204;
TXTATTRIB_OTHER_BOARD = 2205;
TXTATTRIB_BROADCAST = 2500;
}
Text Style
❓ Unverified - Imported from the legacy wiki
enum TextStyle {
TXTSTYLE_NORMAL = 0;
TXTSTYLE_SCROLL = 0x01;
TXTSTYLE_FLASH = 0x02;
TXTSTYLE_BLAST = 0x08;
}
MsgTaskDetailInfo
MsgTaskDialog
MsgTaskStatus
MsgTeam
This message performs simple team commands at the request of a client for managing the team and team members.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 8 |
2 | UInt16 | MsgType | Type of message | 1023 |
4 | UInt32 | Action | The command being requested | 1 |
8 | UInt32 | Player | Hero ID of the target | 1000001 |
Action Type
☑️ Assumed (Soul)
enum TeamActionTypes {
TEAM_ACTION_CREATE = 0;
TEAM_ACTION_APPLY_JOIN = 1;
TEAM_ACTION_LEAVE = 2;
TEAM_ACTION_ACCEPT_INVITE = 3;
TEAM_ACTION_INVITE = 4;
TEAM_ACTION_ACCEPT_JOIN = 5;
TEAM_ACTION_DISMISS = 6;
TEAM_ACTION_KICK_OUT = 7;
TEAM_ACTION_CLOSE_TEAM = 8;
TEAM_ACTION_OPEN_TEAM = 9;
TEAM_ACTION_CLOSE_MONEY_ACCESS = 10;
TEAM_ACTION_OPEN_MONEY_ACCESS = 11;
TEAM_ACTION_CLOSE_ITEM_ACCESS = 12;
TEAM_ACTION_OPEN_ITEM_ACCESS = 13;
}
MsgTeamArenaFightingMemberInfo
MsgTeamArenaFightingTeamList
MsgTeamArenaHeroData
MsgTeamArenaInteractive
MsgTeamArenaRank
MsgTeamArenaScore
MsgTeamArenaYTop10List
MsgTeamAward
Undocumented
MsgTeamMember
This message is sent to the client to update the team member list. It can include one or more team members, but each message must be all additions or all removals. Visually in the client, this is the vertical list of members' faces and healths along the right side of the screen.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 34 |
2 | UInt16 | MsgType | Type of message | 1026 |
4 | Byte | Action | Adding or removing | 1 |
5 | Byte | Amount | Number of team members being acted upon | 1 |
6 | TeamMember | Members | Repeated list of team members |
Team Member Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | Char[16] | Name | Hero name | Player |
16 | UInt32 | ID | Hero ID of the member | 1000001 |
20 | UInt32 | Look Face | Mesh of the entity | 501002 |
24 | UInt16 | Max HP | Total HP the member can have | 92 |
26 | UInt16 | HP | Total HP the member has | 54 |
Team Member Action Type
☑️ Assumed (Soul)
enum TeamMemberActionTypes {
TEAM_MEMBER_ACTION_ADD_MEMBER = 0;
TEAM_MEMBER_ACTION_DROP_MEMBER = 1;
}
MsgTeamPKArenic
MsgTeamPKArenicScore
MsgTeamPKMatchInfo
MsgTeamPKRankInfo
MsgTeamPopPKArenic
MsgTeamPopPKArenicScore
MsgTeamPopPKMatchInfo
MsgTeamPopPKRankInfo
MsgTeamRoll
Undocumented
MsgTexasInteractive
MsgTexasNpcInfo
MsgTick
This message is sent from the game server to the client, and then back again from the client to the game server in a round-trip for checking network congestion. The message is responsible for the "Warning: the network is congested" message that appears in the top-left of the client screen. It's secondary purpose is for verifying that the user is not a bot (Conquer 1.0 and early Conquer 2.0).
The timestamp sent with this message is XORed with the hero ID. The check data at the end of the message is a checksum of the first two characters of the hero's name. This appears as the following in COPSv7:
static uint32_t checksum(const char* aName)
{
if (aName == nullptr || aName[0] == '\0' || strlen(aName) < 4)
return UINT32_C(0x9D4B5703);
else
{
uint16_t val = ((uint16_t*)aName)[0];
#if BYTE_ORDER == BIG_ENDIAN
val = bswap16(val);
#endif // BYTE_ORDER == BIG_ENDIAN
return val ^ UINT16_C(0x9823);
}
}
Table of Contents
Patch 5065
Message Definition
☑️ Assumed (Observed) - COPSv7 + Soul
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 20 |
2 | UInt16 | MsgType | Type of message | 1012 |
4 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
8 | UInt32 | System Time | Milliseconds of system uptime ^ Hero ID | 1579846705 |
12 | UInt32 | Message Count | The total number of messages sent | 12 |
16 | UInt32 | Check Data | Checksum using first two letters of the character's name | 2638960387 |
MsgTitle
MsgTotemPole
MsgTotemPoleInfo
MsgTrade
This message is sent by the client to request and manage a trade with another player.
When adding an item to the trade window, the server will receive a request to offer an item for trade and then respond by sending MsgItemInfo to show the item to the target player.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - CoFuture + Soul
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 12 |
2 | UInt16 | MsgType | Type of message | 1056 |
4 | UInt32 | Data | Data or a unique Identifier | 10 |
8 | UInt16 | Action Type | The type of trade message | 6 |
Action Type
☑️ Assumed (Observed) - CoFuture + Soul
Val | Name | Description | Recipient | Data |
---|---|---|---|---|
1 | APPLY | Request trade | Both | Requester's Hero ID |
2 | QUIT | Request cancel | Server | |
3 | OPEN | Open trade window | Client | Target's Hero ID |
4 | SUCCESS | Successful trade | Client | |
5 | FALSE | Failed trade | Client | |
6 | ADDITEM | Add item to trade window | Server | Item ID |
7 | ADDMONEY | Add money to trade window | Server | Money |
8 | PLAYERTOTALMONEY | Total money traded by target | Client | Money |
9 | HEROTOTALMONEY | Total money traded by hero | Client | Money |
10 | OK | Confirm trade | Both | |
11 | ADDITEM_FALSE | Cannot add item for trade | Client | Item ID |
Patch 5017
Message Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 12 |
2 | UInt16 | MsgType | Type of message | 1056 |
4 | UInt32 | Data | Data or a unique Identifier | 10 |
8 | UInt16 | Action Type | The type of trade message | 6 |
Action Type
❓ Unverified
Val | Name | Description | Recipient | Data |
---|---|---|---|---|
1 | APPLY | Request trade | Both | Requester's Hero ID |
2 | QUIT | Request cancel | Server | |
3 | OPEN | Open trade window | Client | Target's Hero ID |
4 | SUCCESS | Successful trade | Client | |
5 | FALSE | Failed trade | Client | |
6 | ADDITEM | Add item to trade window | Server | Item ID |
7 | ADDMONEY | Add money to trade window | Server | Money |
8 | PLAYERTOTALMONEY | Total money traded by target | Client | Money |
9 | HEROTOTALMONEY | Total money traded by hero | Client | Money |
10 | OK | Confirm trade | Both | |
11 | ADDITEM_FALSE | Cannot add item for trade | Client | Item ID |
12 | PLAYERTOTALEMONEY | Total CPs traded by target | Client | CPs |
13 | ADDEMONEY | Add CPs to trade window | Server | CPs |
14 | HEROTOTALEMONEY | Total CPs traded by hero | Client | CPs |
Patch 5022
Message Definition
❓ Unverified
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 12 |
2 | UInt16 | MsgType | Type of message | 1056 |
4 | UInt32 | Data | Data or a unique Identifier | 10 |
8 | UInt16 | Action Type | The type of trade message | 6 |
Action Type
❓ Unverified
Val | Name | Description | Recipient | Data |
---|---|---|---|---|
1 | APPLY | Request trade | Both | Requester's Hero ID |
2 | QUIT | Request cancel | Server | |
3 | OPEN | Open trade window | Client | Target's Hero ID |
4 | SUCCESS | Successful trade | Client | |
5 | FALSE | Failed trade | Client | |
6 | ADDITEM | Add item to trade window | Server | Item ID |
7 | ADDMONEY | Add money to trade window | Server | Money |
8 | PLAYERTOTALMONEY | Total money traded by target | Client | Money |
9 | HEROTOTALMONEY | Total money traded by hero | Client | Money |
10 | OK | Confirm trade | Both | |
11 | ADDITEM_FALSE | Cannot add item for trade | Client | Item ID |
12 | PLAYERTOTALEMONEY | Total CPs traded by target | Client | CPs |
13 | ADDEMONEY | Add CPs to trade window | Server | CPs |
14 | HEROTOTALEMONEY | Total CPs traded by hero | Client | CPs |
15 | SUSPICIOUS_PROMPT | Prompt hero before confirm | Client | |
16 | SUSPICIOUS_OK | Confirm suspicious trade | Server |
MsgTradeBuddy
MsgTradeBuddyInfo
MsgTraining
MsgTrainingInfo
MsgTrainingVitality
MsgTrainingVitalityInfo
MsgTrainingVitalityScore
MsgTransportor
MsgUserAttrib
This message is sent by the game server to update one or more numeric user attributes in the game client. It can target the hero or another player on the game map.
Of the possibly attribute types, the user status attribute is one of the more complicated types. Statuses are a bitmap of effects that can be placed on a hero or entity, and are loaded from the StatusEffect.ini file. Some examples of statuses found in the game include being poisoned, lucky, shielded, etc. They're also used for PK event haloes in later versions.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 24 |
2 | UInt16 | MsgType | Type of message | 1017 |
4 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
8 | UInt32 | AttributeNum | Amount of attributes to update | 1 |
12 | UserAttrib[] | Attributes | Attributes list | See below |
UserAttrib Definition
☑️ Assumed (Soul)
Type | Name | Description | Example |
---|---|---|---|
UInt32 | AttribType | The attribute to update | 2 |
UInt32[2] | Data | The new value of the attribute | 10 |
UserAttrib Type
☑️ Assumed (Observed) - CoFuture
enum UserAttribTypes {
USERATTRIB_LIFE = 0;
USERATTRIB_MAXLIFE = 1;
USERATTRIB_MANA = 2;
USERATTRIB_MAXMANA = 3;
USERATTRIB_MONEY = 4;
USERATTRIB_EXP = 5;
USERATTRIB_PK = 6;
USERATTRIB_PROFESSION = 7;
USERATTRIB_SIZE_ADD = 8;
USERATTRIB_PP = 9;
USERATTRIB_ADDPOINT = 11;
USERATTRIB_LOOK = 12;
USERATTRIB_LEV = 13;
USERATTRIB_SOUL = 14;
USERATTRIB_HEALTH = 15;
USERATTRIB_FORCE = 16;
USERATTRIB_SPEED = 17;
USERATTRIB_BLESS_SECONDS = 18;
USERATTRIB_DOUBLE_XP_SECONDS = 19;
USERATTRIB_SYN_WAR_POLE = 20;
USERATTRIB_CURSE_SECONDS = 21;
USERATTRIB_TIME_ADD_SECONDS = 22;
USERATTRIB_METEMPSYCHOSIS = 23;
USERATTRIB_USERSTATUS = 26;
USERATTRIB_HAIR = 27;
USERATTRIB_XP = 28;
}
UserAttrib Special Values
☑️ Assumed (Observed) - COPSv6
enum UserAttribSizeAddFlags {
USERATTRIB_SIZE_ADD_NONE = 0;
USERATTRIB_SIZE_ADD_CURSED = 1;
USERATTRIB_SIZE_ADD_BLESSED = 2;
}
enum UserStatusFlags {
USERSTATUS_NORMAL = 0x00000000;
USERSTATUS_FLASHING_NAME = 0x00000001;
USERSTATUS_POISONED = 0x00000002;
USERSTATUS_INVISIBLE = 0x00000004;
USERSTATUS_XPFULL = 0x00000010;
USERSTATUS_TEAM_LEADER = 0x00000040;
USERSTATUS_ADJUST_DODGE = 0x00000080;
USERSTATUS_SHIELD = 0x00000100;
USERSTATUS_STIGMA = 0x00000200;
USERSTATUS_GHOST = 0x00000400;
USERSTATUS_DISAPPEARING = 0x00000800;
USERSTATUS_RED_NAME = 0x00004000;
USERSTATUS_BLACK_NAME = 0x00008000;
USERSTATUS_SUPERMAN = 0x00040000;
USERSTATUS_CYCLONE_ = 0x00800000;
USERSTATUS_DODGE = 0x04000000;
USERSTATUS_FLY = 0x08000000;
}
Patch 5017
Message Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 24 |
2 | UInt16 | MsgType | Type of message | 1017 |
4 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
8 | UInt32 | AttributeNum | Amount of attributes to update | 1 |
12 | UserAttrib[] | Attributes | Attributes list | See below |
UserAttrib Definition
☑️ Assumed (Soul)
Type | Name | Description | Example |
---|---|---|---|
UInt32 | AttribType | The attribute to update | 2 |
UInt32[2] | Data | The new value of the attribute | 10 |
UserAttrib Type
☑️ Assumed (Observed) - COPSv6
enum UserAttribTypes {
USERATTRIB_LIFE = 0;
USERATTRIB_MAXLIFE = 1;
USERATTRIB_MANA = 2;
USERATTRIB_MAXMANA = 3;
USERATTRIB_MONEY = 4;
USERATTRIB_EXP = 5;
USERATTRIB_PK = 6;
USERATTRIB_PROFESSION = 7;
USERATTRIB_SIZE_ADD = 8;
USERATTRIB_PP = 9;
USERATTRIB_ADDPOINT = 11;
USERATTRIB_LOOK = 12;
USERATTRIB_LEV = 13;
USERATTRIB_SOUL = 14;
USERATTRIB_HEALTH = 15;
USERATTRIB_FORCE = 16;
USERATTRIB_SPEED = 17;
USERATTRIB_BLESS_SECONDS = 18;
USERATTRIB_DOUBLE_XP_SECONDS = 19;
USERATTRIB_SYN_WAR_POLE = 20;
USERATTRIB_CURSE_SECONDS = 21;
USERATTRIB_TIME_ADD_SECONDS = 22;
USERATTRIB_METEMPSYCHOSIS = 23;
USERATTRIB_USERSTATUS = 26;
USERATTRIB_HAIR = 27;
USERATTRIB_LUCKY_SECONDS = 29;
USERATTRIB_EMONEY = 30;
USERATTRIB_XP = 31;
USERATTRIB_OFFLINE_TRAINING_PROGRESS = 32;
}
UserAttrib Special Values
☑️ Assumed (Observed) - COPSv6
enum UserAttribSizeAddFlags {
USERATTRIB_SIZE_ADD_NONE = 0;
USERATTRIB_SIZE_ADD_CURSED = 1;
USERATTRIB_SIZE_ADD_BLESSED = 2;
}
enum UserStatusFlags {
USERSTATUS_NORMAL = 0x00000000;
USERSTATUS_FLASHING_NAME = 0x00000001;
USERSTATUS_POISONED = 0x00000002;
USERSTATUS_INVISIBLE = 0x00000004;
USERSTATUS_XPFULL = 0x00000010;
USERSTATUS_TEAM_LEADER = 0x00000040;
USERSTATUS_ADJUST_DODGE = 0x00000080;
USERSTATUS_SHIELD = 0x00000100;
USERSTATUS_STIGMA = 0x00000200;
USERSTATUS_GHOST = 0x00000400;
USERSTATUS_DISAPPEARING = 0x00000800;
USERSTATUS_RED_NAME = 0x00004000;
USERSTATUS_BLACK_NAME = 0x00008000;
USERSTATUS_SUPERMAN = 0x00040000;
USERSTATUS_CYCLONE_ = 0x00800000;
USERSTATUS_DODGE = 0x04000000;
USERSTATUS_FLY = 0x08000000;
USERSTATUS_CAST_PRAY = 0x40000000;
USERSTATUS_PRAYING = 0x80000000;
}
MsgUserCityInfo
MsgUserInfo
This message is sent to the game client from the game server to initialize the hero role with character data. It's expected to be sent after the game server processes MsgConnect after sending ANSWER_OK using MsgTalk. In response to this message, the client will then send a MsgAction message requesting the location of the character.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 73 |
2 | UInt16 | MsgType | Type of message | 1006 |
4 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
8 | UInt32 | Look | Character view mesh | 501002 |
12 | UInt16 | Hair | Hairstyle and hair color | 535 |
16 | UInt32 | Money | Earned virtual player currency in pocket | 10000 |
20 | UInt64 | Experience | Leveling experience | 1000 |
40 | UInt16 | Strength | Physical attack power | 7 |
42 | UInt16 | Agility | Physical accuracy | 2 |
44 | UInt16 | Vitality | Health increase | 4 |
46 | UInt16 | Spirit | Mana increase | 0 |
48 | UInt16 | Attributes | Unspent attribute points | 0 |
50 | UInt16 | Life | Current health of the character | 99 |
52 | UInt16 | Mana | Current mana of the character | 0 |
54 | UInt16 | Pk | PK points from slaying other players | 0 |
56 | Byte | Level | Character level | 1 |
57 | Byte | Profession | Current profession | 10 |
59 | Byte | Metempsychosis | Number of rebirths | 0 |
60 | Bool | AutoAllot | True to automatically allot attributes | 1 |
61 | NetStringPacker | Strings | Group of length prefixed strings |
NetStringPacker Fields
Name | Description | Example |
---|---|---|
Name | Name of the character | Player |
Mate | The character the player is married to | None |
Patch 4343
Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 77 |
2 | UInt16 | MsgType | Type of message | 1006 |
4 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
8 | UInt32 | Look | Character view mesh | 501002 |
12 | UInt16 | Hair | Hairstyle and hair color | 535 |
14 | UInt32 | Money | Earned virtual player currency in pocket | 10000 |
18 | UInt32 | EMoney | Paid virtual player currency in pocket | 0 |
22 | UInt64 | Experience | Leveling experience | 1000 |
44 | UInt16 | Strength | Physical attack power | 7 |
46 | UInt16 | Agility | Physical accuracy | 2 |
48 | UInt16 | Vitality | Health increase | 4 |
50 | UInt16 | Spirit | Mana increase | 0 |
52 | UInt16 | Attributes | Unspent attribute points | 0 |
54 | UInt16 | Life | Current health of the character | 99 |
56 | UInt16 | Mana | Current mana of the character | 0 |
58 | UInt16 | Pk | PK points from slaying other players | 0 |
60 | Byte | Level | Character level | 1 |
61 | Byte | Profession | Current profession | 10 |
63 | Byte | Metempsychosis | Number of rebirths | 0 |
64 | Bool | AutoAllot | True to automatically allot attributes | 1 |
65 | NetStringPacker | Strings | Group of length prefixed strings |
NetStringPacker Fields
Name | Description | Example |
---|---|---|
Name | Name of the character | Player |
Mate | The character the player is married to | None |
Patch 5017
Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 79 |
2 | UInt16 | MsgType | Type of message | 1006 |
4 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
8 | UInt32 | Look | Character view mesh | 501002 |
12 | UInt16 | Hair | Hairstyle and hair color | 535 |
14 | UInt32 | Money | Earned virtual player currency in pocket | 10000 |
18 | UInt32 | EMoney | Paid virtual player currency in pocket | 0 |
22 | UInt64 | Experience | Leveling experience | 1000 |
46 | UInt16 | Strength | Physical attack power | 7 |
48 | UInt16 | Agility | Physical accuracy | 2 |
50 | UInt16 | Vitality | Health increase | 4 |
52 | UInt16 | Spirit | Mana increase | 0 |
54 | UInt16 | Attributes | Unspent attribute points | 0 |
56 | UInt16 | Life | Current health of the character | 99 |
58 | UInt16 | Mana | Current mana of the character | 0 |
60 | UInt16 | Pk | PK points from slaying other players | 0 |
62 | Byte | Level | Character level | 1 |
63 | Byte | Profession | Current profession | 10 |
64 | Byte | Previous Profession | Profession before latest rebirth | 0 |
65 | Byte | Metempsychosis | Number of rebirths | 0 |
66 | Bool | AutoAllot | True to automatically allot attributes | 1 |
67 | NetStringPacker | Strings | Group of length prefixed strings |
NetStringPacker Fields
Name | Description | Example |
---|---|---|
Name | Name of the character | Player |
Mate | The character the player is married to | None |
Patch 5065
Message Definition
☑️ Assumed (Observed) - Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 83 |
2 | UInt16 | MsgType | Type of message | 1006 |
4 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
8 | UInt32 | Look | Character view mesh | 501002 |
12 | UInt16 | Hair | Hairstyle and hair color | 535 |
14 | UInt32 | Money | Earned virtual player currency in pocket | 10000 |
18 | UInt32 | EMoney | Paid virtual player currency in pocket | 0 |
22 | UInt64 | Experience | Leveling experience | 1000 |
50 | UInt16 | Strength | Physical attack power | 7 |
52 | UInt16 | Agility | Physical accuracy | 2 |
54 | UInt16 | Vitality | Health increase | 4 |
56 | UInt16 | Spirit | Mana increase | 0 |
58 | UInt16 | Attributes | Unspent attribute points | 0 |
60 | UInt16 | Life | Current health of the character | 99 |
62 | UInt16 | Mana | Current mana of the character | 0 |
64 | UInt16 | Pk | PK points from slaying other players | 0 |
66 | Byte | Level | Character level | 1 |
67 | Byte | Profession | Current profession | 10 |
68 | Byte | Previous Profession | Profession before latest rebirth | 0 |
69 | Byte | Metempsychosis | Number of rebirths | 0 |
70 | Bool | AutoAllot | True to automatically allot attributes | 1 |
71 | NetStringPacker | Strings | Group of length prefixed strings |
NetStringPacker Fields
Name | Description | Example |
---|---|---|
Name | Name of the character | Player |
Mate | The character the player is married to | None |
Patch 5095
Message Definition
☑️ Assumed (Observed) - CoEmu
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 91 |
2 | UInt16 | MsgType | Type of message | 1006 |
4 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
8 | UInt32 | Look | Character view mesh | 501002 |
12 | UInt16 | Hair | Hairstyle and hair color | 535 |
14 | UInt32 | Money | Earned virtual player currency in pocket | 10000 |
18 | UInt32 | EMoney | Paid virtual player currency in pocket | 0 |
22 | UInt64 | Experience | Leveling experience | 1000 |
54 | UInt16 | Strength | Physical attack power | 7 |
56 | UInt16 | Agility | Physical accuracy | 2 |
58 | UInt16 | Vitality | Health increase | 4 |
60 | UInt16 | Spirit | Mana increase | 0 |
62 | UInt16 | Attributes | Unspent attribute points | 0 |
64 | UInt16 | Life | Current health of the character | 99 |
66 | UInt16 | Mana | Current mana of the character | 0 |
68 | UInt16 | Pk | PK points from slaying other players | 0 |
70 | Byte | Level | Character level | 1 |
71 | Byte | Profession | Current profession | 10 |
72 | Byte | Previous Profession | Profession before latest rebirth | 0 |
73 | Byte | Metempsychosis | Number of rebirths | 0 |
74 | Bool | AutoAllot | True to automatically allot attributes | 1 |
75 | UInt32 | Quiz Points | Total quiz points | 0 |
79 | NetStringPacker | Strings | Group of length prefixed strings |
NetStringPacker Fields
Name | Description | Example |
---|---|---|
Name | Name of the character | Player |
Mate | The character the player is married to | None |
Patch 5165
Message Definition
❓ Unverified - Assumed from Impulse + Comet
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 99 |
2 | UInt16 | MsgType | Type of message | 1006 |
4 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
8 | UInt32 | Look | Character view mesh | 501002 |
12 | UInt16 | Hair | Hairstyle and hair color | 535 |
14 | UInt32 | Money | Earned virtual player currency in pocket | 10000 |
18 | UInt32 | EMoney | Paid virtual player currency in pocket | 0 |
22 | UInt64 | Experience | Leveling experience | 1000 |
50 | UInt16 | Strength | Physical attack power | 7 |
52 | UInt16 | Agility | Physical accuracy | 2 |
54 | UInt16 | Vitality | Health increase | 4 |
56 | UInt16 | Spirit | Mana increase | 0 |
58 | UInt16 | Attributes | Unspent attribute points | 0 |
60 | UInt16 | Life | Current health of the character | 99 |
62 | UInt16 | Mana | Current mana of the character | 0 |
64 | UInt16 | Pk | PK points from slaying other players | 0 |
66 | Byte | Level | Character level | 1 |
67 | Byte | Profession | Current profession | 10 |
68 | Byte | Previous Profession | Profession before latest rebirth | 0 |
69 | Byte | Metempsychosis | Number of rebirths | 0 |
68 | Byte | First Profession | Profession before first rebirth (if on second) | 0 |
70 | Bool | AutoAllot | True to automatically allot attributes | 1 |
71 | UInt32 | Quiz Points | Total quiz points | 0 |
75 | UInt16 | Enlighten Points | Enlightenment points progress | 0 |
77 | UInt16 | Enlighten Exp | Enlightenment experience | 0 |
87 | NetStringPacker | Strings | Group of length prefixed strings |
NetStringPacker Fields
Name | Description | Example |
---|---|---|
Name | Name of the character | Player |
Mate | The character the player is married to | None |
MsgUserIPInfo
MsgVerifyCheck
MsgVipFunctionValidNotify
MsgVipUserHandle
MsgWalk
This message is sent from the game client when the player moves on the ground in a direction. The server responds by validating the movement and then sending the movement to all observers within the player's screen. If the observer receives a MsgWalk message for a player that doesn't exist on their screen, then that'll trigger a MsgAction request for that player using the QueryPlayer action.
⚠️ WARNING
Although the client checks for invalid coordinates, a modified client can walk on invalid tiles or across occupied spaces (such as the guild gate). Be sure to validate the coordinates of movements on the server side.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 10 |
2 | UInt16 | MsgType | Type of message | 1005 |
4 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
8 | Byte | Direction | Movement direction | 0 |
9 | Bool | Run | True if the player is running | 1 |
Patch 5165
Message Definition
☑️ Assumed (Observed)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 16 |
2 | UInt16 | MsgType | Type of message | 1005 |
4 | UInt32 | Direction | Movement direction | 0 |
8 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
12 | UInt32 | Movement Mode | Type of ground movement | 1 |
Movement Modes
☑️ Assumed (Observed)
enum MovementModes {
MOVEMENT_MODE_WALK = 0;
MOVEMENT_MODE_RUN = 1;
MOVEMENT_MODE_MOUNTED = 9;
}
Patch 5517
Message Definition
☑️ Assumed (Observed)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 24 |
2 | UInt16 | MsgType | Type of message | 10005 |
4 | UInt32 | Direction | Movement direction | 0 |
8 | UInt32 | Hero ID | Unique identifier for the character | 1000000 |
12 | UInt32 | Movement Mode | Type of ground movement | 1 |
16 | UInt32 | System Time | Milliseconds of system uptime | 10000 |
20 | UInt32 | Map ID | Map identifier | 1002 |
Movement Modes
☑️ Assumed (Observed)
enum MovementModes {
MOVEMENT_MODE_WALK = 0;
MOVEMENT_MODE_RUN = 1;
MOVEMENT_MODE_MOUNTED = 9;
}
Patch 6132
Message Definition
❓ Unverified - Imported from the legacy wiki
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 24 |
2 | UInt16 | MsgType | Type of message | 10005 |
4 | Bytes | Protobuf | Serialized protobuf fields |
Protobuf Fields
❓ Unverified - Imported from the legacy wiki
Type | Name | ID | Description | Example |
---|---|---|---|---|
UInt32 | direction | 1 | Movement direction | 0 |
UInt32 | hero_id | 2 | Unique identifier for the character | 1000000 |
UInt32 | movement_mode | 3 | Type of ground movement | 1 |
UInt32 | system_time | 4 | Milliseconds of system uptime | 10000 |
UInt32 | map_id | 5 | Map identifier | 1002 |
Movement Modes
❓ Unverified - Imported from the legacy wiki
enum MovementModes {
MOVEMENT_MODE_WALK = 0;
MOVEMENT_MODE_RUN = 1;
MOVEMENT_MODE_MOUNTED = 9;
}
MsgWarFlag
MsgWeaponsInfo
MsgWeaponSkill
This message is sent by the game server to update the client's proficiency levels and experience.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 16 |
2 | UInt16 | MsgType | Type of message | 1025 |
4 | UInt32 | Type | The weapon skill type | 490 |
8 | UInt32 | Level | The new weapon skill level | 1 |
12 | UInt32 | Exp | The new weapon skill experience | 0 |
MsgWeather
This message updates the weather on a game map.
Table of Contents
Patch 4267
Message Definition
☑️ Assumed (Soul)
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | UInt16 | MsgSize | Size of the message | 20 |
2 | UInt16 | MsgType | Type of message | 1016 |
4 | UInt32 | Weather | The type of weather to display | 2 |
8 | UInt32 | Intensity | Scale of 1 to 1024 | 50 |
12 | Int32 | Direction | Angle delta of plus or minus 60 | 14 |
16 | UInt32 | Color | ARGB color | 0x00FFFFFF |
Weather Type
☑️ Assumed (Soul)
enum WeatherTypes {
WEATHER_NONE = 0;
WEATHER_FINE = 1;
WEATHER_RAINY = 2;
WEATHER_SNOWY = 3;
WEATHER_SANDS = 4;
WEATHER_LEAF = 5;
WEATHER_FLOWER = 7;
WEATHER_FLY = 8;
WEATHER_DANDELION = 9;
WEATHER_WORM = 10;
WEATHER_CLOUD = 11;
}
NetStringPacker
As stated on the Network overview page, Conquer Online uses a custom binary protocol in Little-endian. In order to send a string over the protocol, Conquer Online will either use a fixed length character buffer or prefix the string with a byte length.
TQ Digital Entertainment's NetStringPacker is a collection of byte length prefixed strings, prefixed by the total size of the collection (also represented as a byte).
Structure
Type | Name | Description |
---|---|---|
Byte | Amount | Total number of strings |
PString[] | Strings | Array of length-prefixed strings |
Example
The following example is from MsgTalk.
Pos | Type | Name | Description | Example |
---|---|---|---|---|
0 | Byte | Amount | Total number of strings | 4 |
1 | Byte | Length | Length of the first string | 6 |
2 | Char[6] | Speaker | Author of the message | SYSTEM |
8 | Byte | Length | Length of the second string | 8 |
9 | Char[8] | Header | Recipient of the message | ALLUSERS |
17 | Byte | Length | Length of the third string | 0 |
18 | Byte | Length | Length of the fourth string | 7 |
19 | Char[7] | Words | The body of the message | Testing |
The total size of this NetStringPacker is 26 bytes.
Timestamps
Some messages sent by the client include a time or timestamp.
Local Time
☑️ Assumed (Soul)
Messages such as MsgTalk use a time calculated using the following formula:
DWORD SysTimeGet(void)
{
time_t long_time;
time(&long_time); /* Get time as long integer. */
struct tm* pTime;
pTime = localtime(&long_time); /* Convert to local time. */
DWORD dwTime = pTime->tm_hour * 100 + pTime->tm_min;
return dwTime;
}
Considering that Conquer Online is a global game across multiple timezones, the local time being sent to the server cannot be used for any sort of visual element for observing players. However, it can be used for general spam detection or idempotency checks.
System Time
☑️ Assumed (Soul)
Messages such as MsgInteract use the system time, which is the timeGetTime function in the Windows API. The precision for these time fields can be five milliseconds or more, depending on the machine; therefore, it's unreasonable to use these timestamps to check for attack timing.
⚠️ WARNING
This is a 32-bit timestamp, meaning a possible range of 0 to 2^32 milliseconds (about 49.71 days). Do not use these timestamps to validate timing on the server unless the wrap around is taken into consideration.
Renderers
This section documents how the client renders an entity or object on screen.
Conquer Online is written in TQ Digital's custom game engine, called Conquer III (C3). The C3 engine is originally built on DirectX 8.1, but has been ported before to DirectX 9 and OpenGL. Although the C3 engine has been open-sourced officially before, it is no longer available and never perfectly matched up with running online games by TQ.
Hero
Item
NPC
Map
Monster
Security
This section documents security protocols and ciphers, which establish rules for data transfer and communication exchanges between the client and game servers.