Skip to content

DML Records

To decode a binary representation of a DML message, a serializer must understand a standardized template ahead of time in order to compute readable data. To do this, the game client employs an entire representation of said data in a DML record.

Each record will also have it's own template as found in the nodes that follow the protocol information node.

Record Syntax

Each DML record starts as an XML node named as a short identifier, prefixed with MSG_[...]. This node holds one child node, RECORD, where each DML element is written in order of encoding.

xml
<MSG_CREATECHARACTERRESPONSE>
    <RECORD>
      <_MsgOrder TYPE="UBYT" NOXFER="TRUE">5</_MsgOrder>
      <_MsgName TYPE="STR" NOXFER="TRUE">MSG_CREATECHARACTERRESPONSE</_MsgName>
      <_MsgDescription TYPE="STR" NOXFER="TRUE">Server sends this when character creation is completed.</_MsgDescription>
      <_MsgHandler TYPE="STR" NOXFER="TRUE">MSG_CreateCharacterResponse</_MsgHandler>
      <ErrorCode TYPE="INT"></ErrorCode>
    </RECORD>
</MSG_CREATECHARACTERRESPONSE>
<MSG_CREATECHARACTERRESPONSE>
    <RECORD>
      <_MsgOrder TYPE="UBYT" NOXFER="TRUE">5</_MsgOrder>
      <_MsgName TYPE="STR" NOXFER="TRUE">MSG_CREATECHARACTERRESPONSE</_MsgName>
      <_MsgDescription TYPE="STR" NOXFER="TRUE">Server sends this when character creation is completed.</_MsgDescription>
      <_MsgHandler TYPE="STR" NOXFER="TRUE">MSG_CreateCharacterResponse</_MsgHandler>
      <ErrorCode TYPE="INT"></ErrorCode>
    </RECORD>
</MSG_CREATECHARACTERRESPONSE>

Figure A.I - An example of a DML Record.

A message may have a metadata node named MsgAccessLevel, which is a value between 0 and 1. In its absence, it is safe to assume the access level of the message is 0.

An access level of 1 declares that this message may only be processed once a valid session has been established.

INFO

There will be some metadata in every record. The majority is developer semantics, but one crucial field—either _MsgOrder or _MsgType—is utilized immediately during encoding. The game client does not not provide this metadata piece for all protocols, for whatever reason.

In the event that such a situation occurs, each record's unique message ID will be the order in which they appear when ordinally sorted.

DML Elements

xml
<UserID TYPE="GID" [NOXFER="TRUE"]></UserID>
<UserID TYPE="GID" [NOXFER="TRUE"]></UserID>

Figure A.II - An example of a DML element.

Each DML element has a TYPE attribute to signfy how it is serialized binarily during the encoding process.

The NOXFER attribute, which indicates a metadata node that is not included in the encoding process, is optional.

WARNING

These records do not enforce any sort of lint, and attributes may be misspelled.