Conquer Online

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)

FieldTypeDescriptionExample
StartStringStarting TME to play at start of processingrain01.TME
LastStringLasting TME playing until effect is removedwindblade7-1.TME
EndStringEnding TME to play at the end of processingline05.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)

PosTypeNameDescriptionExample
0Int64IndexStatus index1
1Char[64]3DEffect3D effect namepoisonstate
2Char[64]2DEffect2D effect nameNULL

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)

PosTypeNameDescriptionExample
0UInt32LevelWeapon skill level1
1UInt32ExpWeapon skill experience0

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)

PosTypeNameDescriptionExample
0UInt32IndexWeapon skill type index490
1Char[16]NameWeapon skill nameDagger

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.

MinMaxNameDescription
00000010000299999SceneScenery NPC
00000010000099999System NPCStatically spawned NPC
01000010000199999Dynamic NPCDynamically spawned NPC
04000010000499999MonsterWorld monster spawn
05000010000599999PetSyndicate monster spawn
07000010000799999Call PetPlayer monster spawn
09000010000989999Magic TrapPlayer spell trap from MsgMapItem
09900010000999999System TrapSystem trap from MsgMapItem
10000003999999999HeroPlayer 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).

PosTypeDescriptionExample
0UInt16Message Size60
2UInt16Message Type1001

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.

TypeNameAbstract
1001MsgRegisterNew character creation
1004MsgTalkGame chat and system messages to clients
1005MsgWalkRole movement on the ground
1006MsgUserInfoCharacter information on login
1008MsgItemInfoDetails on an player owned item
1009MsgItemRequest to use an item
1010MsgActionGeneral action for a player or entity
1012MsgTickRound-trip tick validation
1014MsgPlayerSpawn a player or entity
1015MsgNameClient string update request
1016MsgWeatherSet weather on the game map
1017MsgUserAttribSet user attributes for client
1019MsgFriendManages friend and enemy lists
1022MsgInteractInteract or attack player or entity
1023MsgTeamManages a team of players
1024MsgAllotAllot attribute points
1025MsgWeaponSkillWeapon proficiency update
1026MsgTeamMemberDetails on multiple teammates
1027MsgGemEmbedEmbed gem in an item
1028MsgFuseFuse material to an item
1029MsgTeamAward
1032MsgBattleEffectiveness
1033MsgDataGeneral integer data message
1034MsgDetainItemInfoDetails on a detailed item
1036MsgGodExp
1037MsgPing
1038MsgSolidify
1039MsgNpcPath
1040MsgPlayerAttribInfoPlayer's battle statistics
1041MsgEnemyList
1042MsgMonsterTransform
1043MsgTeamRoll
1044MsgLoadMap
1045MsgMailOperation
1046MsgMailList
1047MsgMailNotify
1048MsgMailContent
1049MsgPCServerConfig
1051MsgAccountLogin authentication request
1052MsgConnectGame server authorization request
1055MsgConnectExGame server connect info
1056MsgTradeTrade items and money with a player
1057MsgConnectWithBgp
1058MsgSynpOfferSyndicate donation
1059MsgEncryptCodeGenerated RC5 seed
1060MsgAccountLogin authentication request
1061MsgDutyMinContri
1062MsgSynCompete
1063MsgSelfSynMemAwardRank
1064MsgSponsor
1065MsgSponsorInfo
1066MsgMeteSpecial
1067MsgLoginNotice
1070MsgHangUp
1071MsgCompleteRank
1072MsgCampFight
1073MsgCampFightInfo
1074MsgPicKeyError
1075MsgPicKey
1081MsgCheatingProgram
1083MsgRequestKeyLogin
1084MsgConfirmKeyLogin
1086MsgAccountLogin authentication request
1090MsgLoginAccountEx
1098MsgConfirmKeyLoginMobile
1100MsgPCNumMac address of the client
1101MsgMapItemDropped item on the map floor
1102MsgAccountSoftKb
1102MsgPackageItem storage / warehouses
1103MsgMagicInfoMagic spell the player can cast
1104MsgFlushExpMagic spell or skill experience update
1105MsgMagicEffectCast a magical attack or effect
1106MsgSyndicateAttributeInfoGuild and guild member details
1107MsgSyndicateGuild action request
1108MsgItemInfoExItem details extended for a feature
1109MsgNpcInfoExNPC spawn with health
1110MsgMapInfoMap type flags
1111MsgMessageBoardCategorized message board
1112MsgSynMemberInfo
1113MsgDice
1114MsgSyncAction
1115MsgDisconnect
1121MsgFacebookAccount
1124MsgAccountSRP6
1125MsgAccountKalydo
1126MsgInviteTrans
1127MsgMentorPlayer
1128MsgVipUserHandle
1129MsgVipFunctionValidNotify
1130MsgTitle
1134MsgTaskStatus
1135MsgTaskDetailInfo
1136MsgAchievement
1150MsgFlower
1151MsgRank
1202MsgRegisterFaceBook
1203MsgConnectFaceBook
1213MsgLoginChallengeS
1214MsgLoginProofC
1312MsgFamily
1313MsgFamilyOccupy
1314MsgLottery
1315MsgOperatingAct
1316MsgOperatingActInfo
1320MsgAuction
1321MsgAuctionItem
1322MsgAuctionQuery
1323MsgPromotionAct
1324MsgPromotionInfo
1350MsgGameServerShutDown
1351MsgSlotAction
1352MsgSlotResult
1518MsgConnectLegalitySpec
1542MsgAccountSRP6Ex
1636MsgAccountSRP6Ex
2030MsgNpcInfoNPC spawn information
2031MsgNpc
2032MsgTaskDialog
2033MsgFriendInfo
2035MsgPetInfo
2036MsgDataArray
2041MsgAnnounceList
2042MsgAnnounceInfo
2043MsgTrainingInfo
2044MsgTraining
2045MsgAuraGroup
2046MsgTradeBuddy
2047MsgTradeBuddyInfo
2048MsgEquipLock
2050MsgPigeon
2051MsgPigeonQuery
2064MsgPeerage
2065MsgGuide
2066MsgGuideInfo
2067MsgContribute
2068MsgQuiz
2069MsgQuizSponsor
2070MsgSuitStatus
2071MsgRelation
2072MsgRaceTrackProp
2073MsgRaceTrackPropEffect
2075MsgRaceTrackStatus
2076MsgQuench
2077MsgItemStatus
2078MsgUserIPInfo
2079MsgServerInfo
2080MsgChangeName
2081MsgDeadMark
2082MsgUserCityInfo
2090MsgShowHandEnter
2091MsgShowHandDealtCard
2092MsgShowHandActivePlayer
2093MsgShowHandCallAction
2094MsgShowHandLayCard
2095MsgShowHandGameResult
2096MsgShowHandExit
2097MsgShowHandOnlineStatus
2098MsgShowHandLostInfo
2099MsgShowHandTrusteeship
2101MsgFactionRankInfo
2102MsgSynMemberList
2103MsgSynChgDomName
2110MsgSuperFlag
2170MsgLeaveWord
2171MsgTexasInteractive
2172MsgTexasNpcInfo
2201MsgTotemPoleInfo
2202MsgWeaponsInfo
2203MsgTotemPole
2205MsgQualifyingInteractive
2206MsgQualifyingFightersList
2207MsgQualifyingRank
2208MsgQualifyingSeasonRankList
2209MsgQualifyingDetailInfo
2210MsgArenicScore
2211MsgArenicWitness
2218MsgElitePKArenic
2219MsgPKEliteMatchInfo
2220MsgPKStatistic
2221MsgPKEnable
2222MsgElitePKScore
2223MsgElitePKGameRankInfo
2224MsgWarFlag
2225MsgSynRecruitAdvertising
2226MsgSynRecruitAdvertisingList
2227MsgSynRecruitAdvertisingOpt
2230MsgTeamPKArenic
2231MsgTeamPKArenicScore
2232MsgTeamPKMatchInfo
2233MsgTeamPKRankInfo
2240MsgDominateTeamName
2241MsgTeamArenaInteractive
2242MsgTeamArenaFightingTeamList
2243MsgTeamArenaRank
2244MsgTeamArenaYTop10List
2245MsgTeamArenaHeroData
2246MsgTeamArenaScore
2247MsgTeamArenaFightingMemberInfo
2250MsgTeamPopPKArenic
2251MsgTeamPopPKArenicScore
2252MsgTeamPopPKMatchInfo
2253MsgTeamPopPKRankInfo
2260MsgDominateTeamPopPkName
2261Msg2ndPsw
2262MsgPaint
2286MsgMapItem
2320MsgSubPro
2330MsgFactionMatch
2331MsgFMRoundRobin
2332MsgFMMatch
2333MsgFactionMatchWitness
2400MsgTransportor
2401MsgInstance
2410MsgAura
2420MsgVerifyCheck
2430MsgNationality
2501MsgCrossSwitch
2502MsgCrossFlagWar
2504MsgCrossFlagWarMerit
2505MsgCrossFlagWarAltar
2506MsgCrossFlagWarFlag
2507MsgCrossFlagWarRank
2510MsgFactionChiefBase
2521MsgKickOut
2533MsgTrainingVitality
2534MsgTrainingVitalityInfo
2535MsgTrainingVitalityScore
2600MsgGLRankingList
2601MsgGLHeroDetail
2602MsgGLLastSeasonTopScore
2603MsgGLChampionList
2604MsgGLInteractive
2700MsgOwnKongfuBase
2701MsgOwnKongfuImproveSummaryInfo
2702MsgOwnKongfuImproveFeedback
2703MsgOwnKongRank
2704MsgOwnKongfuPKSetting
2710MsgMagicCoat

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message52
2UInt16MsgTypeType of message1051
4Char[16]AccountFixed string of the usernamePlayer
20Char[16]PasswordEncrypted buffer containing the passwordRC5(Password)
36Char[16]ServerFixed string of the game serverMeteor

Patch 5165

Message Definition

✅ Verified (Client)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message276
2UInt16MsgTypeType of message1086
4Char[128]AccountFixed string of the usernamePlayer
132Char[128]PasswordEncrypted buffer containing the passwordRC5(Password)
260Char[16]ServerFixed string of the game serverMeteor

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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message28
2UInt16MsgTypeType of message1010
4UInt32System TimeMilliseconds of system uptime1579535985
8UInt32Hero IDUnique identifier for the character1000000
12UInt16XX coordinate of the action or hero320
14UInt16YY coordinate of the action or hero460
16UInt32DirectionAction direction0
20UInt32DataPayload or target identifier0
24UInt32ActionHow to processes the message0

Action Type

☑️ Assumed (Soul)

🔶 Response data

ValNameDescriptionRecipientIDData
124CHANGE_DIRChange facing directionServerHero ID
126CHANGE_EMOTIONChange emoting actionServerHero IDAction
130CHANGE_MAPChange map (portal)ServerHero ID
137ENTER_MAPRequest hero locationServerHero IDMap ID 🔶
138GET_ITEMSLoad items on loginServerHero ID
139GET_FRIENDSLoad friends on loginServerHero ID
141LEAVE_MAPRemove role entity from mapClientRole ID
142JUMPRole entity jumpServerRole IDLOW: X HIGH: Y
146UP_LEVELNotify new levelServerHero ID
147XP_CLEARNotify clear XPServerHero ID
148REVIVERequest reviveServerHero ID
149DEL_ROLEDelete heroServerHero ID
150GET_WEAPON_SKILLSLoad skills on loginServerHero ID
151GET_MAGICLoad spells on loginServerHero ID
152SET_PK_MODESet PK modeServerHero IDMode
153GET_SYN_ATTRGet guild infoServerHero ID
154GHOSTNotify deathServerHero ID
155SYNCHROSynchronize screenServerHero ID
156QUERY_FRIEND_INFOGet friend infoServerHero IDTarget ID
157QUERY_LEAVE_WORDGet offline messagesServerHero ID
158CHANGE_FACEChange teammate or own avatarBothHero IDFace
159MINEMine with pickaxeServerHero ID
160TEAM_MEMBER_POSTeammate positionClientHero IDLOW: X HIGH: Y
161QUERY_PLAYERGet player spawnServerHero ID
162ABORT_MAGICCancel magic or chargeupServerHero ID
164MAP_ARGBSet game map ARGBClientARGB
166QUERY_MEMBERGet team member infoServerHero IDTarget ID
167CREATE_BOOTHCreate market boothBothHero IDLOW: X HIGH: Y
168SUSPEND_BOOTHPause market booth (unused)ServerHero ID
169RESUME_BOOTHResume market boothBothHero IDLOW: X HIGH: Y
170DESTROY_BOOTHRemove market boothServerHero ID
172POST_CMDRun client commandClientHero IDCommand
173QUERY_EQUIPMENTGet player's equipmentServerHero ID
174ABORT_TRANSFORMCancel transformationServerHero ID
176LANDINGCancel flightServerHero ID
177GET_MONEYPick up moneyClientHero IDAmount
179ENEMY_INFOGet enemy infoServerHero ID
181KICKBACKRubberband to coordClientHero IDLOW: X HIGH: Y
182DROP_MAGICRemove magic typeClientHero IDMagic Type
183DROP_SKILLRemove weapon skillClientHero IDWeapon Skill Type
184SOUND_EFFECTMonster sound at coordClientHero IDMonster Type
186POST_DIALOGOpen a dialog windowClientHero IDDialog ID

Patch 5017

Message Definition

☑️ Assumed (Observed) - Redux

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message24
2UInt16MsgTypeType of message1010
4UInt32System TimeMilliseconds of system uptime1579535985
8UInt32Hero IDUnique identifier for the character1000000
12UInt32DataPayload or target identifier0
16UInt16XX coordinate of the action or hero320
18UInt16YY coordinate of the action or hero460
20UInt16DirectionAction direction0
22UInt16ActionHow to processes the message0

Action Type

☑️ Assumed (Observed) - COPSv6

🔶 Response data

ValNameDescriptionRecipientIDData
74GET_POSITIONRequest hero locationServerHero IDMap ID 🔶
75GET_ITEMSLoad items on loginServerHero ID
76GET_FRIENDSLoad friends on loginServerHero ID
77GET_WEAPON_SKILLSLoad skills on loginServerHero ID
78GET_MAGICLoad spells on loginServerHero ID
79CHANGE_DIRChange facing directionServerHero ID
81CHANGE_EMOTIONChange emoting actionServerHero IDEmotion
85CHANGE_MAPChange map (portal)ServerHero ID
86ENTER_MAPAdd entity to mapServerRole IDMap ID
92UP_LEVELNotify new levelServerHero ID
93XP_CLEARNotify clear XPServerHero ID
94REVIVERequest reviveServerHero ID
95DEL_ROLEDelete heroServerHero ID
96SET_PK_MODESet PK modeServerHero IDMode
97GET_SYN_ATTRGet guild infoServerHero ID
99MINEMine with pickaxeServerHero ID
101TEAM_LEAD_POSGet team leader positionClientHero IDGame Map Type
102QUERY_PLAYERGet player spawnServerHero ID
104MAP_ARGBSet game map ARGBClientARGB
105QUERY_MEMBERGet team member infoServerHero IDTarget ID
106TEAM_MEMBER_POSTeammate positionClientHero IDLOW: X HIGH: Y
108KICKBACKRubberband to coordClientHero IDLOW: X HIGH: Y
109DROP_MAGICRemove magic typeClientHero IDMagic Type
110DROP_SKILLRemove weapon skillClientHero IDWeapon Skill Type
111CREATE_BOOTHCreate market boothBothHero IDLOW: X HIGH: Y
112SUSPEND_BOOTHPause market booth (unused)ServerHero ID
113RESUME_BOOTHResume market boothBothHero IDLOW: X HIGH: Y
114DESTROY_BOOTHRemove market boothServerHero ID
116POST_CMDRun client commandClientHero IDCommand
117QUERY_EQUIPMENTGet player's equipmentServerHero ID
118ABORT_TRANSFORMCancel transformationServerHero ID
120LANDINGCancel flightServerHero ID
121GET_MONEYPick up moneyClientHero IDAmount
123ENEMY_INFOGet enemy infoServerHero ID
126POST_DIALOGOpen a dialog windowClientHero IDDialog ID
130QUERY_LEAVE_WORDGet offline messagesServerHero ID
132LEAVE_MAPRemove role entity from mapClientRole ID
133JUMPRole entity jumpServerRole IDLOW: X HIGH: Y
137GHOSTNotify deathServerHero ID
138SYNCHROSynchronize screenServerHero ID
140QUERY_FRIEND_INFOGet friend infoServerHero IDTarget ID
142CHANGE_FACEChange teammate or own avatarBothHero IDFace
162PATHFINDINGTrigger pathfinding to X, YClientHero ID
163ABORT_MAGICCancel magic or chargeupServerHero 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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message8
2UInt16MsgTypeType of message1024
4ByteForcePoints towards strength1
5ByteSpeedPoints towards dexterity2
6ByteHealthPoints towards vitality5
7ByteSoulPoints towards spirit0

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message28
2UInt16MsgTypeType of message1052
4UInt32Account IDAccount id from the account server1
8UInt32DataContents of the Res.dat file10
12Char[16]InfoName of the fileRes.dat

Game Server Message Definition

☑️ Assumed (Observed) - Comet

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message28
2UInt16MsgTypeType of message1052
4UInt32Account IDAccount id from the account server1
8UInt32DataEncryption key generator parameter6351601
12Char[16]InfoBuild version and language117 English

Patch 4343

Account Server Message Definition

☑️ Assumed (Observed) - Comet

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message28
2UInt16MsgTypeType of message1052
4UInt32Account IDAccount id from the account server1
8UInt32DataContents of the Res.dat file10
12Char[16]InfoName of the fileRes.dat

Game Server Message Definition

☑️ Assumed (Observed) - Comet

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message28
2UInt16MsgTypeType of message1052
4UInt32Account IDAccount id from the account server1
8UInt32DataEncryption key generator parameter6351601
12UInt16BuildBuild version of the client123
14Char[10]LanguageISO 639-1 language codeEn
24UInt32InfoContents of the Res.dat file10

Patch 5065

Account Server Message Definition

☑️ Assumed (Observed) - Comet

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message28
2UInt16MsgTypeType of message1052
4UInt32Account IDAccount id from the account server1
8UInt32DataContents of the Res.dat file10
12Char[16]InfoName of the fileRes.dat

Game Server Message Definition

☑️ Assumed (Observed) - Comet

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message28
2UInt16MsgTypeType of message1052
4UInt32Account IDAccount id from the account server1
8UInt32DataEncryption key generator parameter6351601
12UInt16BuildBuild version of the client123
14Char[2]LanguageISO 639-1 language codeEn
16Char[8]Mac AddressMac address of connecting interface0A0B0C0D0E0F
24UInt32InfoContents of the Res.dat file10

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message32
2UInt16MsgTypeType of message1055
4UInt32Account IDAccount id from the account server1
8UInt32DataEncryption key generator parameter6351601
12Char[16]InfoGame server's IP address192.168.1.2
28UInt32PortGame server's port5816

Reject Message Definition

☑️ Assumed (Observed) - Comet

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message28
2UInt16MsgTypeType of message1055
8UInt32DataRejection type10
12Char[16]InfoRejection message in GB2312 encoding帐号名或口令错

Rejection Type

☑️ Assumed (Observed) - Comet

TypeChineseEnglish
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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message32
2UInt16MsgTypeType of message1055
4UInt32Account IDAccount id from the account server1
8UInt32DataEncryption key generator parameter6351601
12Char[16]InfoGame server's IP address192.168.1.2
28UInt32PortGame server's port5816

Reject Message Definition

☑️ Assumed (Observed) - Comet

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message12
2UInt16MsgTypeType of message1055
8UInt32DataRejection type10

Rejection Type

☑️ Assumed (Observed) - Comet

TypeDescription
1Invalid account name or password
10Server down
11Try again later
12Account banned
20Server busy
22Account locked
30Account not activated
31Account activation failed
42Server timed out
51Max login attempts
70Server locked
73Old protocol
999Unknown error

Patch 5517

Accept Message Definition

❓ Unverified

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message52
2UInt16MsgTypeType of message1055
4UInt32Account IDAccount id from the account server1
8UInt32DataEncryption key generator parameter6351601
12UInt32PortGame server's port5816
20Char[32]InfoGame server's IP address192.168.1.2

Reject Message Definition

❓ Unverified

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message12
2UInt16MsgTypeType of message1055
8UInt32DataRejection type10

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message36
2UInt16MsgTypeType of message1033
4UInt32Data TypeHow to processes the message0
8UInt32[]Data ValuesArray of data values

Data Type

☑️ Assumed (Observed) - Chimera

ValNameDescriptionData
0DATETIMESet server datetimeYear, month, weekday, day, hour, minute, second

Patch 5165

Message Definition

☑️ Assumed (Observed) - Chimera

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message36
2UInt16MsgTypeType of message1033
4UInt32Data TypeHow to processes the message0
8UInt32[]Data ValuesArray of data values

Data Type

☑️ Assumed (Observed) - Chimera

ValNameDescriptionData
0DATETIMESet server datetimeYear, month, weekday, day, hour, minute, second
2VIGORSet 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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message112
2UInt16MsgTypeType of message1034
4UInt32Reward IDUnique identifier of the reward record103
8UInt32Item IDUnique identifier for the item (unless someone else's item)1
12UInt32Item TypeIdentifies the type of item730001
16UInt16AmountCurrent durability or amount of the item10000
18UInt16Max AmountTotal durability or amount the item can have10000
20ByteActionHow item info should be processed1
21ByteStatusCondition bit flags on the item0
22BytePositionPosition where the item appears0
24UInt32Socket ProgressProgress on creating a socket0
28ByteSocket 1The gem in the first socket position0
29ByteSocket 2The gem in the second socket position0
30ByteMagic 1Reserved for rebirth magic effect0
31ByteMagic 2Reserved for an unknown purpose0
32ByteMagic 3Reserved for magical plus rating0
33ByteBlessReduced damage percentage taken by the character0
34BoolBoundTrue if the item can't be traded0
35ByteEnchantAdded max life for the character0
36UInt32DataAdditional attributes for the item0
40BoolSuspiciousMarked as suspicious for trading0
42BoolLockedLocked from being dropped or traded0
44ByteColorColor modifier for the item3
48UInt32Owner IDRole ID of the item owner1000000
52Char[16]Owner NameOwner's character namePlayer
68UInt32Hunter IDRole ID of the hunter1000001
72Char[16]Hunter NameHunter's character nameHunter
88UInt32Capture DateDate string in the format YYYYMMDD20161001
96UInt32CPsCost for claiming1950
100BoolExpiredTrue if the detain window has expired1
108UInt32DaysDays remaining to detain6

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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message8
2UInt16MsgTypeType of message1059
4UInt32SeedGenerated seed for RC510000

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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message12
2UInt16MsgTypeType of message1104
4UInt32ExpUpdated experience towards leveling the spell0
8UInt16TypeMagic or skill type identifier1001
10UInt16ActionThe type of experience being updated0

Action Type

☑️ Assumed (Soul)

ValNameDescriptionFile
0WEAPON_SKILLWeapon skill proficiencyWeaponSkillLevelExp.ini
1MAGICMagic spell experienceMagicType.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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message28
2UInt16MsgTypeType of message1019
4UInt32Hero IDUnique identifier for the friend1000000
8ByteActionHow to processes the message11
9ByteIsOnlineTrue if the friend is online1
12Char[16]NameCharacter name as a fixed stringPlayer

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message36
2UInt16MsgTypeType of message1019
4UInt32Hero IDUnique identifier for the friend1000000
8ByteActionHow to processes the message11
9ByteIs OnlineTrue if the friend is online1
12UInt32Nobility RankNobility ranking3
16UInt32Flower RankFlower ranking0
20Char[16]NameCharacter name as a fixed stringPlayer

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message68
2UInt16MsgTypeType of message1019
4UInt32Hero IDUnique identifier for the friend1000000
8ByteActionHow to processes the message11
9ByteIs OnlineTrue if the friend is online1
12UInt32Nobility RankNobility ranking3
16UInt32Flower RankFlower ranking0
20Char[16]NameCharacter name as a fixed stringPlayer
36Char[32]Facebook IDIdentifier 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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message22
2UInt16MsgTypeType of message1028
4UInt32UserHero ID of the player1000001
8UInt16ActionThe type of fuse being performed0
10UInt32CountThe number of items included2
14UInt32[]ItemsArray 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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message20
2UInt16MsgTypeType of message1027
4UInt32UserHero ID of the player1000001
8UInt32ItemIdentifier for the item1
12UInt32GemIdentifier for the gem2
16UInt16PosGem socket to embed into or remove from1
18UInt16ActionEmbed or remove the gem0

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message28
2UInt16MsgTypeType of message1022
4UInt32System TimeMilliseconds of system uptime10000
8UInt32SenderRole ID of the initiator1000000
12UInt32TargetRole ID of the target1000001
16UInt16XX coordinate of the interaction320
18UInt16YY coordinate of the interaction460
20UInt32TypeHow to processes the message14
24UInt32DataValue associated with the interaction1

Interaction Type

☑️ Assumed (Observed) - CoFuture + Soul

🔶 Response data

ValNameDescriptionRecipientData
2ATTACKPhysical attackServerDamage 🔶
8COURTPropose to a playerServer
9MARRYAccept a proposalServer
14KILLConfirms kill of an entityClientCount
21MAGIC_ATTACKMagical attackServerHIGH: MagicType
23REFLECT_WEAPONReflect a physical attackClientDamage
24BUMPBumped from dashClientDirection
25SHOOTShoot projectileServerDamage 🔶
26REFLECT_MAGICReflect a magical attackClientDamage

Patch 5017

Message Definition

☑️ Assumed (Observed) - COPSv6

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message28
2UInt16MsgTypeType of message1022
4UInt32System TimeMilliseconds of system uptime10000
8UInt32SenderRole ID of the initiator1000000
12UInt32TargetRole ID of the target1000001
16UInt16XX coordinate of the interaction320
18UInt16YY coordinate of the interaction460
20UInt32TypeHow to processes the message14
24UInt32DataValue associated with the interaction1
28UInt32ProgressProgress on an interaction0

Interaction Type

☑️ Assumed (Observed) - COPSv6

🔶 Response data

ValNameDescriptionRecipientDataProgress
2ATTACKPhysical attackServerDamage 🔶
8COURTPropose to a playerServer
9MARRYAccept a proposalServer
14KILLConfirms kill of an entityClientCount
21MAGIC_ATTACKMagical attackServerHIGH: MagicType
23REFLECT_WEAPONReflect a physical attackClientDamage
24BUMPBumped from dashClientDirection
25SHOOTShoot projectileServerDamage 🔶
26REFLECT_MAGICReflect a magical attackClientDamage
30JAR_PROGRESSCloud Saint Jar countServer0Count 🔶

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message20
2UInt16MsgTypeType of message1009
4UInt32IDUnique identifier for the item or role1000000
8UInt32DataPayload usually of the item type or position730001
12UInt32ActionHow to processes the message2
16UInt32System TimeMilliseconds of system uptime1579535985

Item Action

☑️ Assumed (Observed) - CoFuture + Soul

🔶 Response data

ValNameDescriptionRecipientIDData
1BUYPurchase from shopServerNPCItem Type
2SELLSell to shopServerNPCItem ID
3DROPDrops an item or removes itServerItemLOW: X HIGH: Y 🔶
4EQUIPEquip to position on bodyServerItemPosition
5UPDATEUpdates an itemClientItemPosition
6UNEQUIPForce unequipClientItemPosition
8COMBINECombine two of same typeServerItemItem ID
9QUERY_MONEYRequest warehouse moneyServerNPCMoney 🔶
10SAVE_MONEYDeposit warehouse moneyServerNPCMoney
11DRAW_MONEYWithdraw warehouse moneyServerNPCMoney
12DROP_MONEYDrop money on the floorServerMoneyLOW: X HIGH: Y
14REPAIRRepair durabilityServerItem
17DURABILITYUpdate durabilityClientPositionDurability
18DROP_EQUIPMENTForce delete equipmentClientItemPosition
19IMPROVEQuality upgradeServerItemDragonball Item ID
20UPLEVLevel upgradeServerItemMeteor Item ID
21BOOTH_QUERYShow booth itemServerItem
22BOOTH_ADDAdd to boothServerItemMoney
23BOOTH_DELRemove from boothServerItemShop
24BOOTH_BUYBuy from a boothServerItemShop
27PINGLatency checkServerPlayer

Patch 5017

Message Definition

☑️ Assumed (Observed) - ApexConquer

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message24
2UInt16MsgTypeType of message1009
4UInt32IDUnique identifier for the item or role1000000
8UInt32DataPayload usually of the item type or position730001
12UInt32ActionHow the server processes the message2
16UInt32System TimeMilliseconds of system uptime1579535985
20UInt32AmountAmount of items being purchased or used0

Item Action

☑️ Assumed (Observed) - ApexConquer

🔶 Response data

ValNameDescriptionRecipientIDData
1BUYPurchase from shopServerNPCItem Type
2SELLSell to shopServerNPCItem ID
3DROPDrops an item or removes itServerItemLOW: X HIGH: Y 🔶
4EQUIPEquip to position on bodyServerItemPosition
5UPDATEUpdates an itemClientItemPosition
6UNEQUIPForce unequipClientItemPosition
8COMBINECombine two of same typeServerItemItem ID
9QUERY_MONEYRequest warehouse moneyServerNPCMoney 🔶
10SAVE_MONEYDeposit warehouse moneyServerNPCMoney
11DRAW_MONEYWithdraw warehouse moneyServerNPCMoney
12DROP_MONEYDrop money on the floorServerMoneyLOW: X HIGH: Y
14REPAIRRepair durabilityServerItem
17DURABILITYUpdate durabilityClientPositionDurability
18DROP_EQUIPMENTForce delete equipmentClientItemPosition
19IMPROVEQuality upgradeServerItemDragonball Item ID
20UPLEVLevel upgradeServerItemMeteor Item ID
21BOOTH_QUERYShow booth itemServerItem
22BOOTH_ADDAdd to boothServerItemMoney
23BOOTH_DELRemove from boothServerItemShop
24BOOTH_BUYBuy from a boothServerItemShop
27PINGLatency checkServerPlayer
28ENCHANTEnchant itemServerItemGem Item ID
29BOOTH_ADD_EMONEYAdd EMoney to boothServerItemEMoney

Patch 5517

Message Definition

☑️ Assumed (Observed) - ApexConquer

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message60
2UInt16MsgTypeType of message1009
4UInt32IDUnique identifier for the item or role1000000
8UInt32DataPayload usually of the item type or position730001
12UInt32ActionHow the server processes the message2
16UInt32System TimeMilliseconds of system uptime1579535985
20UInt32AmountAmount of items being purchased or used0
24UInt32[9]EquipmentEquipment in order of slot position0

Item Action

☑️ Assumed (Observed) - ConquerServerV3

🔶 Response data

ValNameDescriptionRecipientIDData
1BUYPurchase from shopServerNPCItem Type
2SELLSell to shopServerNPCItem ID
4EQUIPEquip to position on bodyServerItemPosition
5UPDATEUpdates an itemClientItemPosition
6UNEQUIPForce unequipClientItemPosition
9QUERY_MONEYRequest warehouse moneyServerNPCMoney 🔶
10SAVE_MONEYDeposit warehouse moneyServerNPCMoney
11DRAW_MONEYWithdraw warehouse moneyServerNPCMoney
14REPAIRRepair durabilityServerItem
17DURABILITYUpdate durabilityClientPositionDurability
18DROP_EQUIPMENTForce delete equipmentClientItemPosition
19IMPROVEQuality upgradeServerItemDragonball Item ID
20UPLEVLevel upgradeServerItemMeteor Item ID
21BOOTH_QUERYShow booth itemServerItem
22BOOTH_ADDAdd to boothServerItemMoney
23BOOTH_DELRemove from boothServerItemShop
24BOOTH_BUYBuy from a boothServerItemShop
27PINGLatency checkServerHero
28ENCHANTEnchant itemServerItemGem Item ID
29BOOTH_ADD_EMONEYAdd EMoney to boothServerItemEMoney
33DETAIN_REDEEMRedeem a detained itemServerItem
35SOCKETSocket a talismanServerItemItem ID
36SOCKET_EMONEYSocket talisman with EMoneyServerItemEMoney
37DROPDrops an item or removes itServerItem
38DROP_MONEYDrop money on the floorServerMoney
40UPBLESSUpgrade blessServerItem
41SHOW_ACCESSORYShow an accessoryServerItem
46SHOW_EQUIPMENTResponse for MsgActionClientHero
48COMBINECombine two of same typeServerItemItem ID
49SPLITSplit into twoServerItem
52SHOW_ITEMItem cardClientItem

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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message24
2UInt16MsgTypeType of message1008
4UInt32Item IDUnique identifier for the item (unless someone else's item)1
8UInt32Item TypeIdentifies the type of item730001
12UInt16AmountCurrent durability or amount of the item10000
14UInt16Max AmountTotal durability or amount the item can have10000
16ByteActionHow item info should be processed1
17ByteStatusCondition bit flags on the item0
18BytePositionPosition where the item appears0
19ByteSocket 1The gem in the first socket position0
20ByteSocket 2The gem in the second socket position0
21ByteMagic 1Reserved for rebirth magic effect0
22ByteMagic 2Reserved for an unknown purpose0
23ByteMagic 3Reserved for magical plus rating0

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message30
2UInt16MsgTypeType of message1008
4UInt32Item IDUnique identifier for the item (unless someone else's item)1
8UInt32Item TypeIdentifies the type of item730001
12UInt16AmountCurrent durability or amount of the item10000
14UInt16Max AmountTotal durability or amount the item can have10000
16ByteActionHow item info should be processed1
17ByteStatusCondition bit flags on the item0
18BytePositionPosition where the item appears0
19ByteSocket 1The gem in the first socket position0
20ByteSocket 2The gem in the second socket position0
21ByteMagic 1Reserved for rebirth magic effect0
22ByteMagic 2Reserved for an unknown purpose0
23ByteMagic 3Reserved for magical plus rating0
24ByteBlessReduced damage percentage taken by the character0
25ByteEnchantAdded max life for the character0
26UInt32DataAdditional attributes for the item0

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message36
2UInt16MsgTypeType of message1008
4UInt32Item IDUnique identifier for the item (unless someone else's item)1
8UInt32Item TypeIdentifies the type of item730001
12UInt16AmountCurrent durability or amount of the item10000
14UInt16Max AmountTotal durability or amount the item can have10000
16ByteActionHow item info should be processed1
17ByteStatusCondition bit flags on the item0
18BytePositionPosition where the item appears0
20UInt32Socket ProgressProgress on creating a socket0
24ByteSocket 1The gem in the first socket position0
25ByteSocket 2The gem in the second socket position0
26ByteMagic 1Reserved for rebirth magic effect0
27ByteMagic 2Reserved for an unknown purpose0
28ByteMagic 3Reserved for magical plus rating0
29ByteBlessReduced damage percentage taken by the character0
30ByteEnchantAdded max life for the character0
32UInt32DataAdditional attributes for the item0

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message48
2UInt16MsgTypeType of message1008
4UInt32Item IDUnique identifier for the item (unless someone else's item)1
8UInt32Item TypeIdentifies the type of item730001
12UInt16AmountCurrent durability or amount of the item10000
14UInt16Max AmountTotal durability or amount the item can have10000
16ByteActionHow item info should be processed1
17ByteStatusCondition bit flags on the item0
18BytePositionPosition where the item appears0
19UInt32Socket ProgressProgress on creating a socket0
23ByteSocket 1The gem in the first socket position0
24ByteSocket 2The gem in the second socket position0
25ByteMagic 1Reserved for rebirth magic effect0
26ByteMagic 2Reserved for an unknown purpose0
27ByteMagic 3Reserved for magical plus rating0
28ByteBlessReduced damage percentage taken by the character0
29BoolBoundTrue if the item can't be traded0
30ByteEnchantAdded max life for the character0
32UInt32DataAdditional attributes for the item0
36BoolSuspiciousMarked as suspicious for trading0
38BoolLockedLocked from being dropped or traded0
40ByteColorColor modifier for the item3
44UInt32Magic 3 ProgressProgress towards magical plus rating0

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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message37
2UInt16MsgTypeType of message1108
4UInt32IDUnique identifier for the item10
8UInt32Owner IDUnique identifier for the target player1000000
12UInt32PriceCost of the item if vending100
16UInt32Item TypeIdentifies the type of item730001
20UInt16AmountCurrent durability or amount of the item10000
22UInt16Max AmountTotal durability or amount the item can have10000
24ByteActionHow item info is extended1
25ByteStatusCondition bit flags on the item0
26BytePositionPosition where the item appears0
27ByteSocket 1The gem in the first socket position0
28ByteSocket 2The gem in the second socket position0
29ByteMagic 1Reserved for rebirth magic effect0
30ByteMagic 2Reserved for an unknown purpose0
31ByteMagic 3Reserved for magical plus rating0
32UInt32DataAdditional attributes for the item0
36NetStringPackerStringsGroup of length prefixed strings

Action Type

☑️ Assumed (Soul)

ValNameDescriptionStrings
1BOOTHVending at a player booth
2EQUIPMENTUpdates 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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message36
2UInt16MsgTypeType of message1105
4UInt32UserUnique identifier of the role1000000
8UInt32TargetUnique identifier of the target or a coordinateLOW: 320 HIGH: 460
12UInt16TypeType of magic being cast1001
14UInt16LevelLevel of the magic being cast1
16UInt32Effect NumNumber of effects to display1
20RoleInfo[]EffectsEffects to display on roles

Magic Effect Role Info

🚩 Incomplete

PosTypeNameDescriptionExample
0UInt32RoleRole ID of the target in the area effect1000001
1UInt32DataDamage associated with the area effect1
2UInt32ReservedUnknown0

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message12
2UInt16MsgTypeType of message1103
4UInt32ExpCurrent experience towards leveling the spell0
8UInt16TypeMagic type identifier1001
10UInt16LevelLevel of the spell1

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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message16
2UInt16MsgTypeType of message1110
4UInt32Map IDMap identifier1002
8UInt32Doc IDDMap identifier1002
12UInt32TypeMap type flags0

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message18
2UInt16MsgTypeType of message1101
4UInt32IDMap item identifier1
8UInt32TypeMap item type or trap look0
12UInt16Pos XX coordinate of the item or trap320
14UInt16Pos YY coordinate of the item or trap460
16UInt16ActionHow to processes the message1

Action Type

☑️ Assumed (Observed) - CoFuture + Soul

ValNameDescriptionRecipientIDType
1CREATECreate map itemClientMap Item IDItem Type
2DELETEDelete map itemClientMap Item ID
3PICKRequest to pick up map itemServerMap Item ID
10CAST_TRAPPlace a floor trapClientTrap IDLook
11SYNCHRO_TRAPUpdate a floor trapClientTrap IDLook
12DROP_TRAPStop a floor trapClientTrap ID

Patch 5095

Message Definition

☑️ Assumed (Observed) - Elite-CoEmu

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message24
2UInt16MsgTypeType of message1101
4UInt32IDMap item identifier1
8UInt32TypeMap item type or trap look0
12UInt16Pos XX coordinate of the item or trap320
14UInt16Pos YY coordinate of the item or trap460
16UInt16ColorColor modifier for the item3
18UInt16ActionHow to processes the message1
20UInt32UnusedConfirmed unused by the client0

Action Type

☑️ Assumed (Observed) - Elite-CoEmu

ValNameDescriptionRecipientIDType
1CREATECreate map itemClientMap Item IDItem Type
2DELETEDelete map itemClientMap Item ID
3PICKRequest to pick up map itemServerMap Item ID
4PICK_EFFECTPick up item with an effectClientMap Item ID
10CAST_TRAPPlace a floor trapClientTrap IDLook
11SYNCHRO_TRAPUpdate a floor trapClientTrap IDLook
12DROP_TRAPStop a floor trapClientTrap 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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message9
2UInt16MsgTypeType of message1111
4UInt16IndexMessage index for continuation0
6UInt16ChannelText Attributes2201
8ByteActionMessage action type2
9NetStringPackerStrings

Message Board Action

☑️ Assumed (Observed) - Soul + COPSv6

ValNameDescriptionRecipientStrings
1DELDeletes a message on the boardServer1 4 Hero
2GET_LISTFetches list of messages by indexServer
3LISTList of messages for a requested indexClient(See format)
4GET_WORDSRequest MsgTalk message for a postServer

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message10
2UInt16MsgTypeType of message1015
4UInt32DataA parameter, target role ID, or coordinates1000001
8ByteAction TypeThe type of contents in the message6
9NetStringPackerStringsGroup of length prefixed strings

Action Type

☑️ Assumed (Observed) - CoFuture + Soul

🔶 Response data

ValNameDescriptionRecipientDataNetStringPacker
1FIREWORKSSpawn fireworksClientHero ID1 4 Test
3CHANGE_SYNUpdate guild nameClientGuild ID1 4 Name
6MATEUpdate mateClientHero ID1 4 Mate
9MAP_EFFECTSpawn effect at coordinatesClientLOW: X HIGH: Y1 7 rainbow
10ROLE_EFFECTSpawn effect on roleClientRole ID1 9 warrior-s
11MEMBER_LISTGet guild member listServerIndex1 6 Member 🔶
16QUERY_MATEGet mate's nameServerHero ID1 4 Mate 🔶
17ADD_DICE_PLAYERAdd player / open gameServerDice Game ID 🔶1 6 Player
18DEL_DICE_PLAYERDelete player / close gameServerDice Game ID1 6 Player
19DICE_BONUSUpdate money bonusClientMoney1 6 Player
20PLAYER_WAVEPlay DX SoundClientLOW: X HIGH: Y1 11 sound/1.wav

Patch 5017

Message Definition

☑️ Assumed (Observed) - CoFuture

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message10
2UInt16MsgTypeType of message1015
4UInt32DataA parameter, target role ID, or coordinates1000001
8ByteAction TypeThe type of contents in the message6
9NetStringPackerStringsGroup of length prefixed strings

Action Type

☑️ Assumed (Observed) - CoFuture + Soul

🔶 Response data

ValNameDescriptionRecipientDataNetStringPacker
1FIREWORKSSpawn fireworksClientHero ID1 4 Test
3CHANGE_SYNUpdate guild nameClientGuild ID1 4 Name
6MATEUpdate mateClientHero ID1 4 Mate
9MAP_EFFECTSpawn effect at coordinatesClientLOW: X HIGH: Y1 7 rainbow
10ROLE_EFFECTSpawn effect on roleClientRole ID1 9 warrior-s
11MEMBER_LISTGet guild member listServerIndex1 6 Member 🔶
16QUERY_MATEGet mate's nameServerHero ID1 4 Mate 🔶
17ADD_DICE_PLAYERAdd player / open gameServerDice Game ID 🔶1 6 Player
18DEL_DICE_PLAYERDelete player / close gameServerDice Game ID1 6 Player
19DICE_BONUSUpdate money bonusClientMoney1 6 Player
20PLAYER_WAVEPlay DX SoundClientLOW: X HIGH: Y1 11 sound/1.wav
26WHISPER_DIALOGDialog window detailsServerSee below 🔶

Whisper NetStringPacker Fields

NameDescriptionExample
NameTarget playerPlayer
DetailsHeroID Level Potency GuildName1000001 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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message18
2UInt16MsgTypeType of message2030
4UInt32IDUnique identifier1
8UInt16XX coordinate of the NPC320
10UInt16YY coordinate of the NPC460
12UInt16RoleThe role the NPC plays1
14UInt16LookfaceThe type and direction of the NPC10
16UInt16SortSort flags or action type the NPC performs1
18NetStringPackerStringsOptional name of the NPC

NPC Sort Flags

☑️ Assumed (Observed) - CoFuture + Soul

ValNameDescriptionStrings
0NONENPC that responds as dialog
1TASKNPC that opens a window in the client
2RECYCLENPC 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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message36
2UInt16MsgTypeType of message1109
4UInt32IDUnique identifier6701
8UInt32Max LifeMaximum health of the NPC10000000
12UInt32LifeCurrent health of the NPC10000000
16UInt16XX coordinate of the NPC163
18UInt16YY coordinate of the NPC211
20UInt16RoleThe role the NPC plays26
22UInt16LookfaceThe type and direction of the NPC241
24UInt16SortSort flags or action type the NPC performs1
26NetStringPackerStringsOptional name of the NPC1 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.

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message14
2UInt16MsgTypeType of message1102
4UInt32IDIdentifier for a hero, NPC, or trunk8
8ByteActionHow to processes the message0
9ByteTypeThe type of package being processed10
10UInt32Item IDUnique identifier of the item1

The message definition below is used for returning a list of items back to the player.

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message28
2UInt16MsgTypeType of message1102
4UInt32IDIdentifier for a hero, NPC, or trunk8
8ByteActionHow to processes the message0
9ByteTypeThe type of package being processed10
10UInt16AmountAmount of items to send1
12PackageItem[]ItemsAbbreviated item infos

Package Item Definition

❓ Unverified

PosTypeNameDescriptionExample
0UInt32Item IDUnique identifier of the item1
4UInt32Item TypeIdentifies the type of item730001
8ByteStatusCondition bit flags on the item0
9ByteSocket 1The gem in the first socket position0
10ByteSocket 2The gem in the second socket position0
11ByteMagic 1Reserved for rebirth magic effect0
12ByteMagic 2Reserved for an unknown purpose0
13ByteMagic 3Reserved for magical plus rating0
14ByteBlessReduced damage percentage taken by the character0
15ByteEnchantAdded max life for the character0

Action Type

☑️ Assumed (Observed) - CoFuture + Soul

ValNameDescriptionRecipientIDData
0QUERY_LISTQuery for a list of itemsServerNPC IDPackageItem[]
1CHECK_INDeposit an itemServerNPC IDItemID
2CHECK_OUTWithdraw an itemServerNPC IDItemID

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.

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message14
2UInt16MsgTypeType of message1102
4UInt32IDIdentifier for a hero, NPC, or trunk8
8ByteActionHow to processes the message0
9ByteTypeThe type of package being processed10
10UInt32Item IDUnique identifier of the item1

The message definition below is used for returning a list of items back to the player.

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message38
2UInt16MsgTypeType of message1102
4UInt32IDIdentifier for a hero, NPC, or trunk8
8ByteActionHow to processes the message0
9ByteTypeThe type of package being processed10
10UInt16AmountAmount of items to send1
12PackageItem[]ItemsAbbreviated item infos

Package Item Definition

❓ Unverified

PosTypeNameDescriptionExample
0UInt32Item IDUnique identifier of the item1
4UInt32Item TypeIdentifies the type of item730001
8ByteStatusCondition bit flags on the item0
9ByteSocket 1The gem in the first socket position0
10ByteSocket 2The gem in the second socket position0
11ByteMagic 1Reserved for rebirth magic effect0
12ByteMagic 2Reserved for an unknown purpose0
13ByteMagic 3Reserved for magical plus rating0
14BoolBoundTrue if the item is bound to an account0
15ByteBlessReduced damage percentage taken by the character0
16ByteEnchantAdded max life for the character0
17UInt16DataAdditional attributes for the item0
19BoolSuspiciousMarked as suspicious for trading0
20BoolLockedLocked from being dropped or traded0
21ByteColorColor modifier for the item3
22UInt32Magic 3 ProgressProgress towards magical plus rating0

Action Type

❓ Unverified

ValNameDescriptionRecipientIDData
0QUERY_LISTQuery for a list of itemsServerNPC IDPackageItem[]
1CHECK_INDeposit an itemServerNPC IDItemID
2CHECK_OUTWithdraw an itemServerNPC IDItemID

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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message52
2UInt16MsgTypeType of message1100
4UInt32Account IDAccount id from the account server1
8Char[40]Mac addressMac address for the client interface0A0B0C0D0E0F

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message65
2UInt16MsgTypeType of message1014
4UInt32Hero IDUnique identifier for the entity1000000
8UInt32Look FaceMesh of the entity501002
12UInt32Status EffectStatus effect bitmap0
16UInt32Syn MaskSynID << 4 | SynRank & 0x00FFFFFF0
20UInt32GarmentGarment's item type identifier0
24UInt32ArmetHeadgear's item type identifier0
28UInt32ArmorArmor's item type identifier0
32UInt32Right HandWeapon's item type identifier0
36UInt32Left HandWeapon's item type identifier0
44UInt16XX coordinate of the entity320
46UInt16YY coordinate of the entity460
48UInt16HairHairstyle and hair color535
50ByteDirectionEntity direction0
51BytePosePlayer's current pose100
52NetStringPackerStringsGroup of length prefixed strings

NetStringPacker Fields

NameDescriptionExample
NameName of the playerPlayer
MateName of the player's spouseMate

Monster Message Definition

❓ Unverified

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message61
2UInt16MsgTypeType of message1014
4UInt32Hero IDUnique identifier for the entity400001
8UInt32Look FaceMesh of the entity102
12UInt32Status EffectStatus effect bitmap0
16UInt32Owner IDIdentifier of the pet's owner0
40UInt16LifeHitpoints of the entity12
42UInt16LevelLevel of the entity1
44UInt16XX coordinate of the entity320
46UInt16YY coordinate of the entity460
50ByteDirectionEntity direction0
51BytePosePlayer's current pose100
52NetStringPackerStringsGroup of length prefixed strings

NetStringPacker Fields

NameDescriptionExample
NameName of the monsterMonster

Patch 5103

Player Message Definition

❓ Unverified - Imported from legacy wiki

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message107
2UInt16MsgTypeType of message1014
4UInt32Look FaceMesh of the entity501002
8UInt32Hero IDUnique identifier for the entity1000000
12UInt32Syn MaskSynID << 4 | SynRank & 0x00FFFFFF0
16UInt64Status EffectStatus effect bitmap0
24UInt32GarmentGarment's item type identifier0
28UInt32ArmetHeadgear's item type identifier0
32UInt32ArmorArmor's item type identifier0
36UInt32Right HandWeapon's item type identifier0
40UInt32Left HandWeapon's item type identifier0
52UInt16HairHairstyle and hair color535
54UInt16XX coordinate of the entity320
56UInt16YY coordinate of the entity460
58ByteDirectionEntity direction0
59BytePosePlayer's current pose100
60UInt16MetempsychosisMetempsychosis level0
70UInt16Shared BPBattle power from mentor0
77UInt32Flower RankFlower ranking0
81UInt32Nobility RankNobility ranking12
85UInt16Armor ColorColor of equipped armor3
87UInt16Shield ColorColor of equipped shield4
89UInt16Armet ColorColor of equipped headgear3
91UInt32Study PointsQuiz show points6546
95NetStringPackerStringsGroup of length prefixed strings

NetStringPacker Fields

NameDescriptionExample
NameName of the playerPlayer
MateName of the player's spouseMate

Monster Message Definition

❓ Unverified

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message103
2UInt16MsgTypeType of message10014
4UInt32Look FaceMesh of the entity501002
8UInt32Hero IDUnique identifier for the entity1000000
12UInt32Owner IDIdentifier of the pet's owner0
16UInt64Status EffectStatus effect bitmap0
48UInt16LifeHitpoints of the entity12
54UInt16XX coordinate of the entity320
56UInt16YY coordinate of the entity460
58ByteDirectionEntity direction0
59BytePosePlayer's current pose100
62UInt16LevelLevel of the entity1
95NetStringPackerStringsGroup of length prefixed strings

NetStringPacker Fields

NameDescriptionExample
NameName of the monsterMonster

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message136
2UInt16MsgTypeType of message1040
4UInt32Hero IDUnique identifier for the character1000000
8UInt32LifeCurrent hitpoints100
12UInt32ManaCurrent mana points0
16UInt32MaxAttackPhysical max attack before modifiers7
20UInt32MinAttackPhysical min attack before modifiers14
24UInt32DefenseEffective defense before modifiers32
28UInt32MagicAttackMagic attack modifier0
32UInt32MagicDefenseMagic defense modifier0
36UInt32DodgePercentDodge increase92
40UInt32AgilityRaw agility attribute20
44UInt32AccuracyHit rate accuracy10
48UInt32BonusAttackPercentPhysical attack increase0
52UInt32BonusMagicPercentMagic attack increase0
56UInt32ReduceDamagePercentOverall damage reduction7
60UInt32CurseDamagePercentCursed damage increase0
64UInt32BlessPercentBless damage reduction0
68UInt32CriticalStrikePercentPhysical critical hit increase0
72UInt32MagicCriticalStrikePercentMagic critical hit increase0
76UInt32ImmunityPercentCritical hit negation increase0
80UInt32PenetrationPercentMagic defense negation0
84UInt32BlockPercentPhysical damage block0
88UInt32BreakthroughPercentMax attack increase for higher BP0
92UInt32CounteractionPercentBreakthrough counteraction0
96UInt32DetoxicationPercentPoison attack reduction0
100UInt32FinalAttackFinal physical attack increase7
104UInt32FinalMagicAttackFinal magic attack increase0
108UInt32FinalDefenseFinal physical attack reduction32
112UInt32FinalMagicDefenseFinal magic attack reduction0
116UInt32MetalResistPercentMetal boss damage reduction0
120UInt32WoodResistPercentWood boss damage reduction0
124UInt32WaterResistPercentWater boss damage reduction0
128UInt32FireResistPercentFire boss damage reduction0
132UInt32EarthResistPercentEarth boss damage reduction0

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message60
2UInt16MsgTypeType of message1001
4Char[16]UsernameAccount username from loginadmin
20Char[16]Hero NameRequested name to be checkedPlayer
36Char[16]PasswordAccount password (missing RC5 wrapper)test
52UInt16Hero LookSelected character model1003
54UInt16Hero ProfessionSelected character profession10
56UInt32Account IDAccount id from the account server1

Patch 5017

Message Definition

☑️ Assumed (Observed) - Comet

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message60
2UInt16MsgTypeType of message1001
4Char[16]UsernameAccount username from loginadmin
20Char[16]Hero NameRequested name to be checkedPlayer
36Char[16]Masked PasswordHidden password****
52UInt16Hero LookSelected character model1003
54UInt16Hero ProfessionSelected character profession10
56UInt32Account IDAccount id from the account server1

Patch 5065

Message Definition

☑️ Assumed (Observed) - Comet

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message60
2UInt16MsgTypeType of message1001
4Char[16]UsernameAccount username from loginadmin
20Char[16]Hero NameRequested name to be checkedPlayer
52UInt16Hero LookSelected character model1003
54UInt16Hero ProfessionSelected character profession10
56UInt32Account IDAccount id from the account server1

Patch 5165

Message Definition

❓ Unverified - Imported from the legacy wiki

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message104
2UInt16MsgTypeType of message1001
4Char[16]UsernameAccount username from loginadmin
20Char[16]Hero NameRequested name to be checkedPlayer
52UInt16Hero LookSelected character model1003
54UInt16Hero ProfessionSelected character profession10
56UInt32Account IDAccount id from the account server1
60UInt16[6]MacAddressNetwork device identifier00,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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message12
2UInt16MsgTypeType of message1107
4UInt32ActionGuild action being performed1
8UInt32TargetTarget individual or guild identifier1000000

Action Types

☑️ Assumed (Observed) - CoFuture + Soul

🔶 Response data

ValNameDescriptionRecipientTarget
1APPLY_JOINApply to join a guild (sends INVITE_JOIN)ServerTarget ID
2INVITE_JOINInvite a player to join a guildClientTarget ID
3LEAVE_SYNRequest to leave current guildServer
4KICKOUT_MEMBERKick a member from guildClientTarget ID
6QUERY_SYN_NAMESends MsgName with guild nameServerSyndicate ID
7ALLY_APPLYSets a guild as an allyServerAlly's Syndicate ID
8CLEAR_ALLYRemoves an ally guildServerAlly's Syndicate ID
9ANTAGONIZESets a guild as an enemyServerEnemy's Syndicate ID
10CLEAR_ANTAGONIZERemoves an enemy guildServerEnemy's Syndicate ID
11DONATE_MONEYAdd silver to the guild fundServerAmount
12QUERY_SYNATTRQuery for guild attributesServerTarget ID
14SET_SYNSent on login to set syndicate IDClientSyndicate ID
19DESTROY_SYNTerminates a guildClientSyndicate 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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message40
2UInt16MsgTypeType of message1106
4UInt32Syndicate IDUnique identifier of the player1000000
8UInt32ProfferSilver amount offered as donation10000
12UInt32FundTotal silver fund10000
16UInt32PopulationNumber of guild members1
20ByteRankPosition in the guild100
21Char[16]LeaderName of the guild leaderPlayer

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message92
2UInt16MsgTypeType of message1106
4UInt32Syndicate IDUnique identifier of the player1000000
8UInt32ProfferSilver amount offered as donation10000
12UInt64FundTotal silver fund10000
20UInt32EMoney FundTotal CPs fund0
24UInt32PopulationNumber of guild members1
28ByteRankPosition in the guild100
32Char[16]LeaderName of the guild leaderPlayer
48UInt32Level ReqRequired minimum level for joining1
52UInt32Metempsychosis ReqRequired minimum rebirth for joining1
56UInt32Profession ReqRequired professions for joining as a bitmap0
60UInt32LevelOverall guild level1
67UInt32Registration DateDay the guild was registered on in YYYYMMDD20150116

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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message84
2UInt16MsgTypeType of message1058
4UInt32SynpOfferUpdateFlagsWhich donations to update0
8Int32MoneyAmount of money donated / debted0
12Int32EMoneyAmount of CPs donated / debted0
16UInt32EducationAmount of education points0
20UInt32ExploitsAmount of PK merit0
24UInt32ArsenalPoints in the arsenal0
28UInt32RosesFlower points from roses0
32UInt32OrchidsFlower points from orchids0
36UInt32LiliesFlower points from lilies0
40UInt32TulipsFlower points from tulips0
44UInt32FactionAmount of merit from faction PK0

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message42
2UInt16MsgTypeType of message1004
4Int32Text ColorARGB32 color of the text00FF0000
8UInt16Text AttributeDefines where the text appears2000
10Uint16Text StyleDefines how the text appears0
12UInt32Local TimeHours and minutes1241
16NetStringPackerStringsGroup of length prefixed strings

NetStringPacker Fields

NameDescriptionExample
SpeakerAuthor of the messageSYSTEM
HeaderRecipient of the messageALLUSERS
EmotionA prefix to the message
WordsThe body of the messageTesting

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message50
2UInt16MsgTypeType of message1004
4Int32Text ColorARGB32 color of the text00FF0000
8UInt16Text AttributeDefines where the text appears2000
10Uint16Text StyleDefines how the text appears0
12UInt32Local TimeHours and minutes1241
16UInt32Hearer ViewCharacter view mesh for the hearer501002
20UInt32Speaker ViewCharacter view mesh for the speaker501002
24NetStringPackerStringsGroup of length prefixed strings

NetStringPacker Fields

NameDescriptionExample
SpeakerAuthor of the messageSYSTEM
HeaderRecipient of the messageALLUSERS
EmotionA prefix to the message
WordsThe body of the messageTesting

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message52
2UInt16MsgTypeType of message1004
4Int32Text ColorARGB32 color of the text00FF0000
8UInt16Text AttributeDefines where the text appears2000
10Uint16Text StyleDefines how the text appears0
12UInt32Local TimeHours and minutes1241
16UInt32Hearer ViewCharacter view mesh for the hearer501002
20UInt32Speaker ViewCharacter view mesh for the speaker501002
24NetStringPackerStringsGroup of length prefixed strings

NetStringPacker Fields

NameDescriptionExample
SpeakerAuthor of the messageSYSTEM
HeaderRecipient of the messageALLUSERS
EmotionA prefix to the message
WordsThe body of the messageTesting
UnknownNot referenced in the client assembly
UnknownNot 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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message56
2UInt16MsgTypeType of message1004
4UInt32System TimeMilliseconds of system uptime1579535985
8Int32Text ColorARGB32 color of the text00FF0000
12UInt16Text AttributeDefines where the text appears2000
14Uint16Text StyleDefines how the text appears0
16UInt32Local TimeHours and minutes1241
20UInt32Hearer ViewCharacter view mesh for the hearer501002
24UInt32Speaker ViewCharacter view mesh for the speaker501002
28NetStringPackerStringsGroup of length prefixed strings

NetStringPacker Fields

NameDescriptionExample
SpeakerAuthor of the messageSYSTEM
HeaderRecipient of the messageALLUSERS
EmotionA prefix to the message
WordsThe body of the messageTesting
UnknownNot referenced in the client assembly
UnknownNot 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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message8
2UInt16MsgTypeType of message1023
4UInt32ActionThe command being requested1
8UInt32PlayerHero ID of the target1000001

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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message34
2UInt16MsgTypeType of message1026
4ByteActionAdding or removing1
5ByteAmountNumber of team members being acted upon1
6TeamMemberMembersRepeated list of team members

Team Member Definition

☑️ Assumed (Soul)

PosTypeNameDescriptionExample
0Char[16]NameHero namePlayer
16UInt32IDHero ID of the member1000001
20UInt32Look FaceMesh of the entity501002
24UInt16Max HPTotal HP the member can have92
26UInt16HPTotal HP the member has54

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message20
2UInt16MsgTypeType of message1012
4UInt32Hero IDUnique identifier for the character1000000
8UInt32System TimeMilliseconds of system uptime ^ Hero ID1579846705
12UInt32Message CountThe total number of messages sent12
16UInt32Check DataChecksum using first two letters of the character's name2638960387

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message12
2UInt16MsgTypeType of message1056
4UInt32DataData or a unique Identifier10
8UInt16Action TypeThe type of trade message6

Action Type

☑️ Assumed (Observed) - CoFuture + Soul

ValNameDescriptionRecipientData
1APPLYRequest tradeBothRequester's Hero ID
2QUITRequest cancelServer
3OPENOpen trade windowClientTarget's Hero ID
4SUCCESSSuccessful tradeClient
5FALSEFailed tradeClient
6ADDITEMAdd item to trade windowServerItem ID
7ADDMONEYAdd money to trade windowServerMoney
8PLAYERTOTALMONEYTotal money traded by targetClientMoney
9HEROTOTALMONEYTotal money traded by heroClientMoney
10OKConfirm tradeBoth
11ADDITEM_FALSECannot add item for tradeClientItem ID

Patch 5017

Message Definition

❓ Unverified

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message12
2UInt16MsgTypeType of message1056
4UInt32DataData or a unique Identifier10
8UInt16Action TypeThe type of trade message6

Action Type

❓ Unverified

ValNameDescriptionRecipientData
1APPLYRequest tradeBothRequester's Hero ID
2QUITRequest cancelServer
3OPENOpen trade windowClientTarget's Hero ID
4SUCCESSSuccessful tradeClient
5FALSEFailed tradeClient
6ADDITEMAdd item to trade windowServerItem ID
7ADDMONEYAdd money to trade windowServerMoney
8PLAYERTOTALMONEYTotal money traded by targetClientMoney
9HEROTOTALMONEYTotal money traded by heroClientMoney
10OKConfirm tradeBoth
11ADDITEM_FALSECannot add item for tradeClientItem ID
12PLAYERTOTALEMONEYTotal CPs traded by targetClientCPs
13ADDEMONEYAdd CPs to trade windowServerCPs
14HEROTOTALEMONEYTotal CPs traded by heroClientCPs

Patch 5022

Message Definition

❓ Unverified

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message12
2UInt16MsgTypeType of message1056
4UInt32DataData or a unique Identifier10
8UInt16Action TypeThe type of trade message6

Action Type

❓ Unverified

ValNameDescriptionRecipientData
1APPLYRequest tradeBothRequester's Hero ID
2QUITRequest cancelServer
3OPENOpen trade windowClientTarget's Hero ID
4SUCCESSSuccessful tradeClient
5FALSEFailed tradeClient
6ADDITEMAdd item to trade windowServerItem ID
7ADDMONEYAdd money to trade windowServerMoney
8PLAYERTOTALMONEYTotal money traded by targetClientMoney
9HEROTOTALMONEYTotal money traded by heroClientMoney
10OKConfirm tradeBoth
11ADDITEM_FALSECannot add item for tradeClientItem ID
12PLAYERTOTALEMONEYTotal CPs traded by targetClientCPs
13ADDEMONEYAdd CPs to trade windowServerCPs
14HEROTOTALEMONEYTotal CPs traded by heroClientCPs
15SUSPICIOUS_PROMPTPrompt hero before confirmClient
16SUSPICIOUS_OKConfirm suspicious tradeServer

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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message24
2UInt16MsgTypeType of message1017
4UInt32Hero IDUnique identifier for the character1000000
8UInt32AttributeNumAmount of attributes to update1
12UserAttrib[]AttributesAttributes listSee below

UserAttrib Definition

☑️ Assumed (Soul)

TypeNameDescriptionExample
UInt32AttribTypeThe attribute to update2
UInt32[2]DataThe new value of the attribute10

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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message24
2UInt16MsgTypeType of message1017
4UInt32Hero IDUnique identifier for the character1000000
8UInt32AttributeNumAmount of attributes to update1
12UserAttrib[]AttributesAttributes listSee below

UserAttrib Definition

☑️ Assumed (Soul)

TypeNameDescriptionExample
UInt32AttribTypeThe attribute to update2
UInt32[2]DataThe new value of the attribute10

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message73
2UInt16MsgTypeType of message1006
4UInt32Hero IDUnique identifier for the character1000000
8UInt32LookCharacter view mesh501002
12UInt16HairHairstyle and hair color535
16UInt32MoneyEarned virtual player currency in pocket10000
20UInt64ExperienceLeveling experience1000
40UInt16StrengthPhysical attack power7
42UInt16AgilityPhysical accuracy2
44UInt16VitalityHealth increase4
46UInt16SpiritMana increase0
48UInt16AttributesUnspent attribute points0
50UInt16LifeCurrent health of the character99
52UInt16ManaCurrent mana of the character0
54UInt16PkPK points from slaying other players0
56ByteLevelCharacter level1
57ByteProfessionCurrent profession10
59ByteMetempsychosisNumber of rebirths0
60BoolAutoAllotTrue to automatically allot attributes1
61NetStringPackerStringsGroup of length prefixed strings

NetStringPacker Fields

NameDescriptionExample
NameName of the characterPlayer
MateThe character the player is married toNone

Patch 4343

Message Definition

☑️ Assumed (Observed) - Comet

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message77
2UInt16MsgTypeType of message1006
4UInt32Hero IDUnique identifier for the character1000000
8UInt32LookCharacter view mesh501002
12UInt16HairHairstyle and hair color535
14UInt32MoneyEarned virtual player currency in pocket10000
18UInt32EMoneyPaid virtual player currency in pocket0
22UInt64ExperienceLeveling experience1000
44UInt16StrengthPhysical attack power7
46UInt16AgilityPhysical accuracy2
48UInt16VitalityHealth increase4
50UInt16SpiritMana increase0
52UInt16AttributesUnspent attribute points0
54UInt16LifeCurrent health of the character99
56UInt16ManaCurrent mana of the character0
58UInt16PkPK points from slaying other players0
60ByteLevelCharacter level1
61ByteProfessionCurrent profession10
63ByteMetempsychosisNumber of rebirths0
64BoolAutoAllotTrue to automatically allot attributes1
65NetStringPackerStringsGroup of length prefixed strings

NetStringPacker Fields

NameDescriptionExample
NameName of the characterPlayer
MateThe character the player is married toNone

Patch 5017

Message Definition

☑️ Assumed (Observed) - Comet

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message79
2UInt16MsgTypeType of message1006
4UInt32Hero IDUnique identifier for the character1000000
8UInt32LookCharacter view mesh501002
12UInt16HairHairstyle and hair color535
14UInt32MoneyEarned virtual player currency in pocket10000
18UInt32EMoneyPaid virtual player currency in pocket0
22UInt64ExperienceLeveling experience1000
46UInt16StrengthPhysical attack power7
48UInt16AgilityPhysical accuracy2
50UInt16VitalityHealth increase4
52UInt16SpiritMana increase0
54UInt16AttributesUnspent attribute points0
56UInt16LifeCurrent health of the character99
58UInt16ManaCurrent mana of the character0
60UInt16PkPK points from slaying other players0
62ByteLevelCharacter level1
63ByteProfessionCurrent profession10
64BytePrevious ProfessionProfession before latest rebirth0
65ByteMetempsychosisNumber of rebirths0
66BoolAutoAllotTrue to automatically allot attributes1
67NetStringPackerStringsGroup of length prefixed strings

NetStringPacker Fields

NameDescriptionExample
NameName of the characterPlayer
MateThe character the player is married toNone

Patch 5065

Message Definition

☑️ Assumed (Observed) - Comet

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message83
2UInt16MsgTypeType of message1006
4UInt32Hero IDUnique identifier for the character1000000
8UInt32LookCharacter view mesh501002
12UInt16HairHairstyle and hair color535
14UInt32MoneyEarned virtual player currency in pocket10000
18UInt32EMoneyPaid virtual player currency in pocket0
22UInt64ExperienceLeveling experience1000
50UInt16StrengthPhysical attack power7
52UInt16AgilityPhysical accuracy2
54UInt16VitalityHealth increase4
56UInt16SpiritMana increase0
58UInt16AttributesUnspent attribute points0
60UInt16LifeCurrent health of the character99
62UInt16ManaCurrent mana of the character0
64UInt16PkPK points from slaying other players0
66ByteLevelCharacter level1
67ByteProfessionCurrent profession10
68BytePrevious ProfessionProfession before latest rebirth0
69ByteMetempsychosisNumber of rebirths0
70BoolAutoAllotTrue to automatically allot attributes1
71NetStringPackerStringsGroup of length prefixed strings

NetStringPacker Fields

NameDescriptionExample
NameName of the characterPlayer
MateThe character the player is married toNone

Patch 5095

Message Definition

☑️ Assumed (Observed) - CoEmu

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message91
2UInt16MsgTypeType of message1006
4UInt32Hero IDUnique identifier for the character1000000
8UInt32LookCharacter view mesh501002
12UInt16HairHairstyle and hair color535
14UInt32MoneyEarned virtual player currency in pocket10000
18UInt32EMoneyPaid virtual player currency in pocket0
22UInt64ExperienceLeveling experience1000
54UInt16StrengthPhysical attack power7
56UInt16AgilityPhysical accuracy2
58UInt16VitalityHealth increase4
60UInt16SpiritMana increase0
62UInt16AttributesUnspent attribute points0
64UInt16LifeCurrent health of the character99
66UInt16ManaCurrent mana of the character0
68UInt16PkPK points from slaying other players0
70ByteLevelCharacter level1
71ByteProfessionCurrent profession10
72BytePrevious ProfessionProfession before latest rebirth0
73ByteMetempsychosisNumber of rebirths0
74BoolAutoAllotTrue to automatically allot attributes1
75UInt32Quiz PointsTotal quiz points0
79NetStringPackerStringsGroup of length prefixed strings

NetStringPacker Fields

NameDescriptionExample
NameName of the characterPlayer
MateThe character the player is married toNone

Patch 5165

Message Definition

❓ Unverified - Assumed from Impulse + Comet

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message99
2UInt16MsgTypeType of message1006
4UInt32Hero IDUnique identifier for the character1000000
8UInt32LookCharacter view mesh501002
12UInt16HairHairstyle and hair color535
14UInt32MoneyEarned virtual player currency in pocket10000
18UInt32EMoneyPaid virtual player currency in pocket0
22UInt64ExperienceLeveling experience1000
50UInt16StrengthPhysical attack power7
52UInt16AgilityPhysical accuracy2
54UInt16VitalityHealth increase4
56UInt16SpiritMana increase0
58UInt16AttributesUnspent attribute points0
60UInt16LifeCurrent health of the character99
62UInt16ManaCurrent mana of the character0
64UInt16PkPK points from slaying other players0
66ByteLevelCharacter level1
67ByteProfessionCurrent profession10
68BytePrevious ProfessionProfession before latest rebirth0
69ByteMetempsychosisNumber of rebirths0
68ByteFirst ProfessionProfession before first rebirth (if on second)0
70BoolAutoAllotTrue to automatically allot attributes1
71UInt32Quiz PointsTotal quiz points0
75UInt16Enlighten PointsEnlightenment points progress0
77UInt16Enlighten ExpEnlightenment experience0
87NetStringPackerStringsGroup of length prefixed strings

NetStringPacker Fields

NameDescriptionExample
NameName of the characterPlayer
MateThe character the player is married toNone

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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message10
2UInt16MsgTypeType of message1005
4UInt32Hero IDUnique identifier for the character1000000
8ByteDirectionMovement direction0
9BoolRunTrue if the player is running1

Patch 5165

Message Definition

☑️ Assumed (Observed)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message16
2UInt16MsgTypeType of message1005
4UInt32DirectionMovement direction0
8UInt32Hero IDUnique identifier for the character1000000
12UInt32Movement ModeType of ground movement1

Movement Modes

☑️ Assumed (Observed)

enum MovementModes {

    MOVEMENT_MODE_WALK = 0;
    MOVEMENT_MODE_RUN = 1;
    MOVEMENT_MODE_MOUNTED = 9;
}

Patch 5517

Message Definition

☑️ Assumed (Observed)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message24
2UInt16MsgTypeType of message10005
4UInt32DirectionMovement direction0
8UInt32Hero IDUnique identifier for the character1000000
12UInt32Movement ModeType of ground movement1
16UInt32System TimeMilliseconds of system uptime10000
20UInt32Map IDMap identifier1002

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

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message24
2UInt16MsgTypeType of message10005
4BytesProtobufSerialized protobuf fields

Protobuf Fields

❓ Unverified - Imported from the legacy wiki

TypeNameIDDescriptionExample
UInt32direction1Movement direction0
UInt32hero_id2Unique identifier for the character1000000
UInt32movement_mode3Type of ground movement1
UInt32system_time4Milliseconds of system uptime10000
UInt32map_id5Map identifier1002

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)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message16
2UInt16MsgTypeType of message1025
4UInt32TypeThe weapon skill type490
8UInt32LevelThe new weapon skill level1
12UInt32ExpThe new weapon skill experience0

MsgWeather

This message updates the weather on a game map.

Table of Contents

Patch 4267

Message Definition

☑️ Assumed (Soul)

PosTypeNameDescriptionExample
0UInt16MsgSizeSize of the message20
2UInt16MsgTypeType of message1016
4UInt32WeatherThe type of weather to display2
8UInt32IntensityScale of 1 to 102450
12Int32DirectionAngle delta of plus or minus 6014
16UInt32ColorARGB color0x00FFFFFF

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

TypeNameDescription
ByteAmountTotal number of strings
PString[]StringsArray of length-prefixed strings

Example

The following example is from MsgTalk.

PosTypeNameDescriptionExample
0ByteAmountTotal number of strings4
1ByteLengthLength of the first string6
2Char[6]SpeakerAuthor of the messageSYSTEM
8ByteLengthLength of the second string8
9Char[8]HeaderRecipient of the messageALLUSERS
17ByteLengthLength of the third string0
18ByteLengthLength of the fourth string7
19Char[7]WordsThe body of the messageTesting

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.

DH Key Exchange

RC5

SRP6

TQ

Strings

Account Password

Account Username

Hero Name