This file contains information about the protocol used to communicate between the client and the server. #define DEFAULTSOCKETID 0x0614 (1556) BNF grammar: ------------ ------------ line ::= command CR [ LF ] command ::= command_name SPACE value_list command_name ::= "LOGON" / "MOVE" / "LOGOFF" / "NOTIFY-LOGON" / "NOTIFY-MOVE" item ::= item_flag / item_value item_flag ::= literal item_value ::= literal SPACE EQUALS SPACE value value ::= value_location / value_string / value_quantity / value_object_type / value_handle / value_id / value_boolean / value_coord / value_list / value_result / value_msgtype / value_number / value_array / value_prop / value_char / value_short / value_long / value_ushort / value_ulong / value_bitarray / value_icon value_array ::= "ARRAY" SPACE number SPACE value_array_values value_array_values ::= value [ value_array_values ] value_location ::= value_location_pos / value_location_parent value_location_pos ::= "POS" SPACE value_id SPACE value_handle SPACE value_coord value_location_parent ::= "PARENT" SPACE value_handle value_string ::= "STR" SPACE string value_prop ::= "PROP" SPACE value_id SPACE "NAME" SPACE string SPACE value value_data ::= "DATA" SPACE hexstring value_char ::= "CHAR" SPACE number value_short ::= "SHORT" SPACE number value_long ::= "LONG" SPACE number value_ushort ::= "USHORT" SPACE number value_ulong ::= "ULONG" SPACE number value_bitarray ::= "BITARRAY" SPACE number value_quantity ::= "QUANT" SPACE number value_object_type ::= "OBJTYPE" SPACE value_object_type_value value_object_type_value ::= "NONE" / "UNKNOWN" / "PLAYER" / "NPC" / "CURRENCY" / "WEAPON" / "BAG" / "SIGN" / "PAPER" / "DOOR" / "KEY" / "PLANT" value_handle ::= "HANDLE" SPACE object_handle value_id ::= "ID" SPACE object_id value_icon ::= "ICONID" SPACE object_id value_coord ::= "COORD" SPACE "X" SPACE number SPACE "Y" SPACE number value_boolean ::= "BOOL" SPACE value_boolean_value value_boolean_value ::= "TRUE" / "FALSE" value_result ::= "OK" / value_result_failure value_result_failure ::= "FAILED" SPACE number value_msgtype ::= "MSGTYPE" SPACE value_msgtype_value value_msgtype_value ::= "TALK" / "REACTION" value_number ::= "NUM" SPACE number value_list ::= "{" SPACE value_list_items SPACE "}" value_list_items ::= item [ COMMA SPACE value_list_items ] id ::= "NONE" / number handle ::= "NONE" / number string ::= QUOTE 1*schar QUOTE schar ::= any ascii non-control char. excluding QUOTE literal ::= 1*lchar lchar ::= any capital letter or DASH number ::= 1*nchar nchar ::= zero thru nine Command Description: -------------------- -------------------- -------------------- MOVE Command Command: MOVE Parameters (in): OBJ-ORIGINATOR value_handle OBJ-TARGET value_handle SOURCE-PARTIAL value_quantity DELTA value_coord DEST-LOC value_location DEST-MERGE item_flag Examples: MOVE { SOURCE-OBJ = HANDLE 25, DEST-LOC = COORD X 1 Y 0 } MOVE { SOURCE-OBJ = HANDLE 25, DEST-LOC = POS ID 31 COORD X 5 Y 8 } MOVE { SOURCE-OBJ = HANDLE 25, DEST-LOC = HANDLE 18 } MOVE { SOURCE-OBJ = HANDLE 25, SOURCE-PARTIAL = QUANT 10, DEST-LOC = HANDLE 18 } MOVE { SOURCE-OBJ = HANDLE 25, SOURCE-PARTIAL = QUANT 10, DEST-LOC = HANDLE 18, DEST-MERGE } NOTIFY-MOVE Command Command: NOTIFY-MOVE Parameters (out): OBJ-ORIGINATOR value_handle OBJ-TARGET value_handle SOURCE-PARTIAL value_quantity DEST-LOC value_location SRC-LOC value_location DELTA value_coord DEST-MERGE item_flag DETAILS-TARGET value_list DETAILS-UNCOVERED value_list FLAG-ADD item_flag FLAG-DELETE item_flag FLAG-FYI item_flag DETAILS-UNCOVERED: DETAILS-TARGET: HANDLE value_handle ICONID value_id NAME value_string TYPE value_object_type QUANTITY value_quantity Examples: NOTIFY-MOVE { OBJ-TARGET = HANDLE 15, DETAILS-TARGET = { HANDLE = HANDLE 15, ICONID = ID 0, NAME = STR "Tiger", TYPE = OBJTYPE PLAYER, QUANTITY = QUANT 0 }, DEST-LOC = POS ID 0x1d HANDLE 0x0 COORD X 1 Y 8, FLAG-ADD } NOTIFY-MOVE { OBJ-TARGET = HANDLE 0x1000013, OBJ-ORIGINATOR = HANDLE 0x1000013, DETAILS-TARGET = { HANDLE = HANDLE 0x1000013, ICONID = ID 0x40010006, NAME = STR "Crazy Fred", TYPE = OBJTYPE NPC, QUANTITY = QUANT 0 }, DELTA = COORD X 0 Y 1, DEST-LOC = POS ID 0x1d HANDLE 0x0 COORD X 2 Y 9, SRC-LOC = POS ID 0x1d HANDLE 0x0 COORD X 2 Y 8 } LOGON Command Command: LOGON Parameters (in): ACCOUNT-ID value_id NAME value_string PASSWORD value_string Examples: LOGON { NAME = STR "Tiger", PASSWORD = STR "" } LOGON { ACCOUNT-ID = ID 235, NAME = STR "Tiger", PASSWORD = STR "xyz" } LOGON { ACCOUNT-ID = ID 235, PASSWORD = STR "xyz" } LOGON { ACCOUNT-ID = ID 235 } NOTIFY-LOGON Command Command: NOTIFY-LOGON Paramaters (out): RESULT value_result RESULT-EXPLAIN value_string ACCOUNT-ID value_id PLAYER-OBJ value_handle Examples: NOTIFY-LOGON { RESULT = OK, ACCOUNT-ID = ID 235, PLAYER-OBJ = HANDLE 15 } NOTIFY-LOGON { RESULT = FAILED 0x1002, RESULT-EXPLAIN = STR "The user was not found." } NOTIFY-LOGON { RESULT = FAILED 0x1027, RESULT-EXPLAIN = STR "The password was incorrect." } MESSAGE Command Command: MESSAGE Parameters (in): SENDER value_handle RECIPIENT value_handle RADIUS value_number TYPE value_msgtype TEXT value_string Examples: MESSAGE { SENDER = HANDLE 14, RADIUS = NUM 3, TYPE = MSGTYPE TALK, TEXT = STR "hey!" } MESSAGE { SENDER = HANDLE 14, RECIPIENT = HANDLE 27, TYPE = MSGTYPE TALK, TEXT = STR "hey!" } NOTIFY-MESSAGE Command Command: NOTIFY-MESSAGE Parameters (out): SENDER value_handle SENDER-POS value_location RECIPIENT value_handle RADIUS value_number TYPE value_msgtype TEXT value_string Examples: NOTIFY-MESSAGE { SENDER = HANDLE 14, SENDER-POS = POS ID 12 HANDLE 0 COORD X 7 Y 4, RECIPIENT = HANDLE NONE, RADIUS = NUM 3, TYPE = MSGTYPE TALK, TEXT = STR "Tiger - hey!" } NOTIFY-MESSAGE { SENDER = HANDLE NONE, RECIPIENT = HANDLE 16, TYPE = MSGTYPE REACTION, TEXT = STR "You can't move there, Farmer's Sack is already on that square." } NOTIFY-OBJUPDATE Command Command: NOTIFY-OBJUPDATE Parameters (out): ITEM value_list // multi-valued. ITEM: HANDLE value_handle ICONID value_id LOCATION value_location NAME value_string TYPE value_object_type QUANTITY value_quantity Examples: NOTIFY-OBJUPDATE { ITEM = { HANDLE = HANDLE 0x100000a, ICONID = ID 0x40010002, LOCATION = POS ID 0x1d HANDLE 0x0 COORD X 5 Y 5, NAME = STR "Farmer's Sack", TYPE = OBJTYPE BAG, QUANTITY = QUANT 1 }, ITEM = { HANDLE = HANDLE 0x1000013, ICONID = ID 0x40010006, LOCATION = POS ID 0x1d HANDLE 0x0 COORD X 3 Y 9, NAME = STR "Crazy Fred", TYPE = OBJTYPE NPC, QUANTITY = QUANT 1 }, ITEM = { HANDLE = HANDLE 0x1000015, ICONID = ID 0x0, LOCATION = POS ID 0x1d HANDLE 0x0 COORD X 1 Y 8, NAME = STR "Tiger", TYPE = OBJTYPE PLAYER, QUANTITY = QUANT 1 }, ITEM = { HANDLE = HANDLE 0x1000001, ICONID = ID 0x40010001, LOCATION = POS ID 0x1d HANDLE 0x0 COORD X 2 Y 7, NAME = STR "Don't Steal Food", TYPE = OBJTYPE SIGN, QUANTITY = QUANT 1 }, ITEM = { HANDLE = HANDLE 0x1000005, ICONID = ID 0x40010002, LOCATION = POS ID 0x1d HANDLE 0x0 COORD X 1 Y 7, NAME = STR "Farmer's Sack", TYPE = OBJTYPE BAG, QUANTITY = QUANT 1 } } EXAMINE Command Command: EXAMINE Parameters (in): ORIGINATOR value_handle TARGET value_handle Examples: EXAMINE { SENDER = HANDLE 14, TARGET = HANDLE 18 } NOTIFY-EXAMINE Command Command: NOTIFY-EXAMINE Parameters (out): ORIGINATOR value_handle TARGET value_handle NAME value_string ICONID value_id OBJDEFID value_id OBJTYPE value_object_type DESCRIPTION value_string QUANTITY value_quantity HEALTH value_number PROPS value_list Examples: OPERATE Command Command: OPERATE Parameters (in): ORIGINATOR value_handle SOURCE value_handle TARGET value_handle Examples: EXAMINE { ORIGINATOR = HANDLE 14, TARGET = HANDLE 18 } EXAMINE { ORIGINATOR = HANDLE 14, SOURCE = HANDLE 16, TARGET = HANDLE 18 }