├── .clang-format
├── .github
└── FUNDING.yml
├── CONTRIBUTING.md
├── LICENSE.md
├── README.md
├── cache
└── README.md
├── lobby
├── C2S_0x0007_RequestSelectChr.md
├── C2S_0x0014_RequestDeleteChr.md
├── C2S_0x001F_RequestGetChr.md
├── C2S_0x0021_RequestCreateChr.md
├── C2S_0x0022_RequestCreateChrPre.md
├── C2S_0x0024_RequestQueryWorldList.md
├── C2S_0x0026_RequestLobbyLogin.md
├── C2S_0x0028_RequestRenameChr.md
├── C2S_0x002B_RequestMoveGMChr.md
├── CharacterInfo.md
├── Header.md
├── Notes.md
├── Protocol.md
├── S2C_0x0003_ResponseOk.md
├── S2C_0x0004_ResponseError.md
├── S2C_0x0005_ResponseKey.md
├── S2C_0x000B_ResponseNextLogin.md
├── S2C_0x0020_ResponseChrInfo2.md
└── S2C_0x0023_ResponseWorldList.md
├── patch
├── Protocol.md
├── README.md
├── Reversing.md
└── packets
│ ├── 0x0001
│ └── README.md
│ ├── 0x0002
│ └── README.md
│ ├── 0x0003
│ └── README.md
│ ├── 0x0004
│ └── README.md
│ ├── 0x0005
│ └── README.md
│ ├── 0x0006
│ └── README.md
│ ├── 0x0007
│ └── README.md
│ ├── 0x0008
│ └── README.md
│ └── README.md
├── repo
└── icon.png
└── world
├── Header.md
├── README.md
├── client
├── 0x000A
│ └── README.md
├── 0x000B
│ └── README.md
├── 0x000C
│ └── README.md
├── 0x000D
│ └── README.md
├── 0x000F
│ └── README.md
├── 0x0011
│ └── README.md
├── 0x0015
│ └── README.md
├── 0x0016
│ └── README.md
├── 0x0017
│ └── README.md
├── 0x001A
│ └── README.md
├── 0x001B
│ └── README.md
├── 0x001C
│ └── README.md
├── 0x001E
│ └── README.md
├── 0x001F
│ └── README.md
├── 0x0028
│ └── README.md
├── 0x0029
│ └── README.md
├── 0x002A
│ └── README.md
├── 0x002B
│ └── README.md
├── 0x002C
│ └── README.md
├── 0x0032
│ └── README.md
├── 0x0033
│ └── README.md
├── 0x0034
│ └── README.md
├── 0x0035
│ └── README.md
├── 0x0036
│ └── README.md
├── 0x0037
│ └── README.md
├── 0x0038
│ └── README.md
├── 0x0039
│ └── README.md
├── 0x003A
│ └── README.md
├── 0x003B
│ └── README.md
├── 0x003C
│ └── README.md
├── 0x003D
│ └── README.md
├── 0x0041
│ └── README.md
├── 0x0042
│ └── README.md
├── 0x004B
│ └── README.md
├── 0x004D
│ └── README.md
├── 0x004E
│ └── README.md
├── 0x0050
│ └── README.md
├── 0x0051
│ └── README.md
├── 0x0052
│ └── README.md
├── 0x0053
│ └── README.md
├── 0x0058
│ └── README.md
├── 0x0059
│ └── README.md
├── 0x005A
│ └── README.md
├── 0x005B
│ └── README.md
├── 0x005C
│ └── README.md
├── 0x005D
│ └── README.md
├── 0x005E
│ └── README.md
├── 0x0060
│ └── README.md
├── 0x0061
│ └── README.md
├── 0x0063
│ └── README.md
├── 0x0064
│ └── README.md
├── 0x0066
│ └── README.md
├── 0x006E
│ └── README.md
├── 0x006F
│ └── README.md
├── 0x0070
│ └── README.md
├── 0x0071
│ └── README.md
├── 0x0072
│ └── README.md
├── 0x0073
│ └── README.md
├── 0x0074
│ └── README.md
├── 0x0075
│ └── README.md
├── 0x0076
│ └── README.md
├── 0x0077
│ └── README.md
├── 0x0078
│ └── README.md
├── 0x0082
│ └── README.md
├── 0x0083
│ └── README.md
├── 0x0084
│ └── README.md
├── 0x0085
│ └── README.md
├── 0x008C
│ └── README.md
├── 0x008D
│ └── README.md
├── 0x0096
│ └── README.md
├── 0x009B
│ └── README.md
├── 0x00A0
│ └── README.md
├── 0x00A1
│ └── README.md
├── 0x00A2
│ └── README.md
├── 0x00AA
│ └── README.md
├── 0x00AB
│ └── README.md
├── 0x00AC
│ └── README.md
├── 0x00AD
│ └── README.md
├── 0x00B5
│ └── README.md
├── 0x00B6
│ └── README.md
├── 0x00B7
│ └── README.md
├── 0x00BE
│ └── README.md
├── 0x00BF
│ └── README.md
├── 0x00C0
│ └── README.md
├── 0x00C3
│ └── README.md
├── 0x00C4
│ └── README.md
├── 0x00C9
│ └── README.md
├── 0x00CA
│ └── README.md
├── 0x00CB
│ └── README.md
├── 0x00CD
│ └── README.md
├── 0x00CE
│ └── README.md
├── 0x00CF
│ └── README.md
├── 0x00D0
│ └── README.md
├── 0x00D1
│ └── README.md
├── 0x00D2
│ └── README.md
├── 0x00D3
│ └── README.md
├── 0x00D4
│ └── README.md
├── 0x00D5
│ └── README.md
├── 0x00D8
│ └── README.md
├── 0x00DB
│ └── README.md
├── 0x00DC
│ └── README.md
├── 0x00DD
│ └── README.md
├── 0x00DE
│ └── README.md
├── 0x00E0
│ └── README.md
├── 0x00E1
│ └── README.md
├── 0x00E2
│ └── README.md
├── 0x00E4
│ └── README.md
├── 0x00E7
│ └── README.md
├── 0x00E8
│ └── README.md
├── 0x00E9
│ └── README.md
├── 0x00EA
│ └── README.md
├── 0x00EB
│ └── README.md
├── 0x00EC
│ └── README.md
├── 0x00F0
│ └── README.md
├── 0x00F1
│ └── README.md
├── 0x00F2
│ └── README.md
├── 0x00F4
│ └── README.md
├── 0x00F5
│ └── README.md
├── 0x00F6
│ └── README.md
├── 0x00FA
│ ├── README.md
│ ├── left.png
│ └── right.png
├── 0x00FB
│ └── README.md
├── 0x00FC
│ └── README.md
├── 0x00FD
│ └── README.md
├── 0x00FE
│ └── README.md
├── 0x00FF
│ └── README.md
├── 0x0100
│ └── README.md
├── 0x0101
│ └── README.md
├── 0x0102
│ └── README.md
├── 0x0104
│ └── README.md
├── 0x0105
│ └── README.md
├── 0x0106
│ └── README.md
├── 0x0109
│ └── README.md
├── 0x010A
│ └── README.md
├── 0x010B
│ └── README.md
├── 0x010C
│ └── README.md
├── 0x010D
│ └── README.md
├── 0x010E
│ └── README.md
├── 0x010F
│ └── README.md
├── 0x0110
│ └── README.md
├── 0x0111
│ └── README.md
├── 0x0112
│ └── README.md
├── 0x0113
│ └── README.md
├── 0x0114
│ └── README.md
├── 0x0115
│ └── README.md
├── 0x0116
│ └── README.md
├── 0x0117
│ └── README.md
├── 0x0118
│ └── README.md
├── 0x0119
│ └── README.md
├── 0x011A
│ └── README.md
├── 0x011B
│ └── README.md
├── 0x011C
│ └── README.md
├── 0x011D
│ └── README.md
└── README.md
└── server
├── 0x0005
└── README.md
├── 0x0006
└── README.md
├── 0x0008
└── README.md
├── 0x0009
└── README.md
├── 0x000A
└── README.md
├── 0x000B
└── README.md
├── 0x000D
└── README.md
├── 0x000E
└── README.md
├── 0x0011
└── README.md
├── 0x0012
└── README.md
├── 0x0013
└── README.md
├── 0x0014
└── README.md
├── 0x0016
└── README.md
├── 0x0017
└── README.md
├── 0x001B
└── README.md
├── 0x001C
└── README.md
├── 0x001D
└── README.md
├── 0x001E
└── README.md
├── 0x001F
└── README.md
├── 0x0020
└── README.md
├── 0x0021
└── README.md
├── 0x0022
└── README.md
├── 0x0023
└── README.md
├── 0x0024
└── README.md
├── 0x0025
└── README.md
├── 0x0026
└── README.md
├── 0x0027
└── README.md
├── 0x0028
├── README.md
└── Reversing.md
├── 0x0029
└── README.md
├── 0x002A
└── README.md
├── 0x002B
└── README.md
├── 0x002C
└── README.md
├── 0x002D
└── README.md
├── 0x002E
└── README.md
├── 0x002F
└── README.md
├── 0x0030
└── README.md
├── 0x0031
└── README.md
├── 0x0032
└── README.md
├── 0x0033
└── README.md
├── 0x0034
└── README.md
├── 0x0036
└── README.md
├── 0x0037
└── README.md
├── 0x0038
└── README.md
├── 0x0039
└── README.md
├── 0x003A
└── README.md
├── 0x003B
└── README.md
├── 0x003C
└── README.md
├── 0x003D
└── README.md
├── 0x003E
└── README.md
├── 0x003F
└── README.md
├── 0x0040
└── README.md
├── 0x0041
└── README.md
├── 0x0042
└── README.md
├── 0x0043
└── README.md
├── 0x0044
└── README.md
├── 0x0047
└── README.md
├── 0x0048
└── README.md
├── 0x0049
└── README.md
├── 0x004B
└── README.md
├── 0x004C
└── README.md
├── 0x004D
└── README.md
├── 0x004F
└── README.md
├── 0x0050
└── README.md
├── 0x0051
└── README.md
├── 0x0052
└── README.md
├── 0x0053
└── README.md
├── 0x0054
└── README.md
├── 0x0055
└── README.md
├── 0x0056
└── README.md
├── 0x0057
└── README.md
├── 0x0058
└── README.md
├── 0x0059
└── README.md
├── 0x005A
└── README.md
├── 0x005B
└── README.md
├── 0x005C
└── README.md
├── 0x005D
└── README.md
├── 0x005E
└── README.md
├── 0x005F
└── README.md
├── 0x0060
└── README.md
├── 0x0061
└── README.md
├── 0x0062
└── README.md
├── 0x0063
└── README.md
├── 0x0064
└── README.md
├── 0x0065
└── README.md
├── 0x0067
└── README.md
├── 0x0068
└── README.md
├── 0x0069
└── README.md
├── 0x006F
└── README.md
├── 0x0070
└── README.md
├── 0x0071
└── README.md
├── 0x0072
└── README.md
├── 0x0073
└── README.md
├── 0x0074
└── README.md
├── 0x0075
└── README.md
├── 0x0076
└── README.md
├── 0x0077
└── README.md
├── 0x0078
└── README.md
├── 0x0079
└── README.md
├── 0x0081
└── README.md
├── 0x0082
└── README.md
├── 0x0083
└── README.md
├── 0x0084
└── README.md
├── 0x0085
└── README.md
├── 0x0086
└── README.md
├── 0x008C
└── README.md
├── 0x008D
└── README.md
├── 0x0096
└── README.md
├── 0x0097
└── README.md
├── 0x0098
└── README.md
├── 0x0099
└── README.md
├── 0x009A
└── README.md
├── 0x009B
└── README.md
├── 0x009C
└── README.md
├── 0x009D
└── README.md
├── 0x009E
└── README.md
├── 0x00A0
└── README.md
├── 0x00AA
└── README.md
├── 0x00AB
└── README.md
├── 0x00AC
└── README.md
├── 0x00AD
└── README.md
├── 0x00AE
└── README.md
├── 0x00B4
└── README.md
├── 0x00B5
└── README.md
├── 0x00B6
└── README.md
├── 0x00B7
└── README.md
├── 0x00BF
└── README.md
├── 0x00C8
└── README.md
├── 0x00C9
└── README.md
├── 0x00CA
└── README.md
├── 0x00CC
└── README.md
├── 0x00D2
└── README.md
├── 0x00D3
└── README.md
├── 0x00DC
└── README.md
├── 0x00DD
└── README.md
├── 0x00DE
└── README.md
├── 0x00DF
└── README.md
├── 0x00E0
└── README.md
├── 0x00E1
└── README.md
├── 0x00E2
└── README.md
├── 0x00E6
└── README.md
├── 0x00F4
└── README.md
├── 0x00F5
└── README.md
├── 0x00F6
└── README.md
├── 0x00F9
└── README.md
├── 0x00FA
└── README.md
├── 0x0105
└── README.md
├── 0x0106
└── README.md
├── 0x0107
└── README.md
├── 0x0108
└── README.md
├── 0x0109
└── README.md
├── 0x010A
└── README.md
├── 0x010E
└── README.md
├── 0x010F
└── README.md
├── 0x0110
└── README.md
├── 0x0111
└── README.md
├── 0x0112
└── README.md
├── 0x0113
└── README.md
├── 0x0115
└── README.md
├── 0x0116
└── README.md
├── 0x0117
└── README.md
├── 0x0118
└── README.md
├── 0x0119
└── README.md
├── 0x011A
└── README.md
├── 0x011B
└── README.md
├── 0x011C
└── README.md
├── 0x011D
└── README.md
├── 0x011E
└── README.md
└── README.md
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: [atom0s]
4 | patreon: atom0s
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: # Replace with a single IssueHunt username
11 | otechie: # Replace with a single Otechie username
12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
13 | custom: ['https://paypal.me/atom0s']
14 |
--------------------------------------------------------------------------------
/cache/README.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
5 |
6 | # Cache Server
7 |
8 | The `cache` server, often referred to as the `search` server, is responsible for game traffic that may require a longer time to return a response. Unlike the `world` server which uses UDP for its traffic, the `cache` server transmits its traffic on a separate socket, using TCP.
9 |
10 | The `cache` server is responsible for the following:
11 |
12 | - **Auction House**
13 | - Auction History
14 | - Auction Lists
15 | - **Search**
16 | - List: Linkshell Members
17 | - List: Party / Alliance Members
18 | - List: Search (`/sea`, `/sea all`, etc.)
19 | - Search Comments
20 |
--------------------------------------------------------------------------------
/lobby/C2S_0x001F_RequestGetChr.md:
--------------------------------------------------------------------------------
1 | # `RequestGetChr`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **PS2 Name** | `RequestGetChr` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x001F` |
8 | | **Size** | `0x002C` |
9 |
10 | ## Description
11 |
12 | The client request packet sent to the server to receive the list of available characters and overall content id information.
13 |
14 | ## Packet Layout
15 |
16 | ```cpp
17 | // PS2: lpkt_get_chr2
18 | struct packet_t
19 | {
20 | //
21 | // Packet Header
22 | //
23 |
24 | uint32_t packet_size; // PS2: packet_size
25 | uint32_t terminator; // PS2: terminator
26 | uint32_t command; // PS2: command
27 | uint8_t identifer[16]; // PS2: identifer
28 |
29 | //
30 | // Packet Data
31 | //
32 |
33 | uint8_t passwd[16]; // PS2: passwd
34 | };
35 | ```
36 |
37 | ## Packet Fields
38 |
39 | ### packet_size, terminator, command, identifer
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/lobby/Header.md)_
44 |
45 | ### passwd
46 |
47 | _The random generated password MD5 hashed, using the current `md5key` of the clients session._
48 |
49 | _For more information on how the passwords work, please see: [**Passwords**](/lobby/Notes.md#passwords)_
50 |
51 | ## Example Packet
52 |
53 | ```
54 | 0000h: 2C 00 00 00 49 58 46 46 1F 00 00 00 48 41 53 48 ,...IXFF....HASH
55 | 0010h: 48 41 53 48 48 41 53 48 48 41 53 48 50 41 53 53 HASHHASHHASHPASS
56 | 0020h: 50 41 53 53 50 41 53 53 50 41 53 53 PASSPASSPASS
57 | ```
58 |
59 | _**Note:** Sensitive data has been removed and replaced with temporary data._
60 |
--------------------------------------------------------------------------------
/lobby/C2S_0x0024_RequestQueryWorldList.md:
--------------------------------------------------------------------------------
1 | # `RequestQueryWorldList`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **PS2 Name** | `RequestQueryWorldList` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0024` |
8 | | **Size** | `0x002C` |
9 |
10 | ## Description
11 |
12 | The client request packet sent to the server to receive the list of available worlds.
13 |
14 | ## Packet Layout
15 |
16 | ```cpp
17 | // PS2: lpkt_query_world_list
18 | struct packet_t
19 | {
20 | //
21 | // Packet Header
22 | //
23 |
24 | uint32_t packet_size; // PS2: packet_size
25 | uint32_t terminator; // PS2: terminator
26 | uint32_t command; // PS2: command
27 | uint8_t identifer[16]; // PS2: identifer
28 |
29 | //
30 | // Packet Data
31 | //
32 |
33 | uint8_t passwd[16]; // PS2: passwd
34 | };
35 | ```
36 |
37 | ## Packet Fields
38 |
39 | ### packet_size, terminator, command, identifer
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/lobby/Header.md)_
44 |
45 | ### passwd
46 |
47 | _The random generated password MD5 hashed, using the current `md5key` of the clients session._
48 |
49 | _For more information on how the passwords work, please see: [**Passwords**](/lobby/Notes.md#passwords)_
50 |
51 | ## Example Packet
52 |
53 | ```
54 | 0000h: 2C 00 00 00 49 58 46 46 24 00 00 00 48 41 53 48 ,...IXFF$...HASH
55 | 0010h: 48 41 53 48 48 41 53 48 48 41 53 48 50 41 53 53 HASHHASHHASHPASS
56 | 0020h: 50 41 53 53 50 41 53 53 50 41 53 53 PASSPASSPASS
57 | ```
58 |
59 | _**Note:** Sensitive data has been removed and replaced with temporary data._
60 |
--------------------------------------------------------------------------------
/lobby/Header.md:
--------------------------------------------------------------------------------
1 | # Lobby Packet Header
2 |
3 | Every packet sent between the client and the `lobby` server shares a common header. This header holds the basic information related to the packet.
4 |
5 | ## Header Structure
6 |
7 | ```cpp
8 | struct packet_t
9 | {
10 | //
11 | // Packet Header
12 | //
13 |
14 | uint32_t packet_size; // PS2: packet_size
15 | uint32_t terminator; // PS2: terminator
16 | uint32_t command; // PS2: command
17 | uint8_t identifer[16]; // PS2: identifer
18 |
19 | //
20 | // Packet Data
21 | //
22 |
23 | uint8_t data[]; // PS2: Per-packet fields replace this.
24 | };
25 | ```
26 |
27 | ## Packet Fields
28 |
29 | ### packet_size
30 |
31 | _The total size of the packet, including the header information._
32 |
33 | ### terminator
34 |
35 | _The lobby server packet signature._ _(`FFXI`)_
36 |
37 | ### command
38 |
39 | _The opcode of the packet, signifying its purpose._
40 |
41 | ### identifer
42 |
43 | _The MD5 checksum hash of the full packet._
44 |
45 | _The checksum is of the full packet (including the header data) with the `identifer` data nulled._
46 |
47 | ### data
48 |
49 | _The packet-specific data that relates to the given opcode. This field is replaced on the various packet information pages with the actual fields that populate the packets additional data._
50 |
--------------------------------------------------------------------------------
/lobby/S2C_0x0003_ResponseOk.md:
--------------------------------------------------------------------------------
1 | # `ResponseOk`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **PS2 Name** | `Unknown` |
6 | | **Direction** | `S -> C` |
7 | | **OpCode** | `0x0003` |
8 | | **Size** | `0x0020` |
9 |
10 | ## Description
11 |
12 | The server response packet sent to the client when a previous request was successfully completed.
13 |
14 | ## Packet Layout
15 |
16 | ```cpp
17 | struct packet_t
18 | {
19 | //
20 | // Packet Header
21 | //
22 |
23 | uint32_t packet_size; // PS2: packet_size
24 | uint32_t terminator; // PS2: terminator
25 | uint32_t command; // PS2: command
26 | uint8_t identifer[16]; // PS2: identifer
27 |
28 | //
29 | // Packet Data
30 | //
31 |
32 | uint32_t unknown0000; // PS2: (Unknown; not used.)
33 | };
34 | ```
35 |
36 | ## Packet Fields
37 |
38 | ### packet_size, terminator, command, identifer
39 |
40 | _These fields are part of the packet header._
41 |
42 | _You can find more information about the header fields here: [**Header**](/lobby/Header.md)_
43 |
44 | ### unknown0000
45 |
46 | _Unknown._
47 |
48 | _This field is never referenced within the client. It was always observed to be `0x10`, but the actual value or its purpose is unknown._
49 |
50 | ## Example Packet
51 |
52 | ```
53 | 0000h: 20 00 00 00 49 58 46 46 03 00 00 00 48 41 53 48 ...IXFF....HASH
54 | 0010h: 48 41 53 48 48 41 53 48 48 41 53 48 10 00 00 00 HASHHASHHASH....
55 | ```
56 |
57 | _**Note:** Sensitive data has been removed and replaced with temporary data._
58 |
--------------------------------------------------------------------------------
/patch/README.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
5 |
6 | # Patch Server
7 |
8 | The `patch` server is responsible for allowing the client to validate its current version(s) with the remote services and handle any kind of updates needed for the clients local files. This includes handling updates for the `PlayOnline` client as well as any of its supported titles that make use of the in-house versioning system. This is the first server that will be connected to, both for `PlayOnline` when logging in as well as when launching a supported title that uses this system. _(Such as `Final Fantasy XI`.)_
9 |
10 | ## Documentation Layout
11 |
12 | The `patch` server documentation is separated into additional pages, with the individual packet information found within the [packets](/patch/packets/) folder. _(Since the `patch` server has so few packets, all packets are contained within the same folder regardless of direction.)_
--------------------------------------------------------------------------------
/patch/packets/0x0006/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x0006`
2 |
3 | | Information | Notes |
4 | | ---: | --- |
5 | | **Function** | `_sqPatchPkt_MakeShutDown` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0006` |
8 | | **Size** | `0x0010` |
9 |
10 | ## Description
11 |
12 | The purpose of this packet is unknown.
13 |
14 | > [!NOTE]
15 | > This packet is deprecated and no longer used.
16 |
17 | ## Packet Layout
18 |
19 | The layout of this packet is the following:
20 |
21 | ```cpp
22 | struct packet_t
23 | {
24 | uint32_t size;
25 | uint32_t hash;
26 | uint32_t signature;
27 | uint32_t opcode;
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`packet_t`)
36 |
37 | ### `size`, `hash`, `signature`, `opcode`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Patch Server Protocol**](/patch/protocol.md)_
42 |
43 | ## Additional Information
44 |
45 | The purpose of this packet is not unknown and is no longer used, however the function to generate it still exists. This packet does not contain any additional fields outside of the normal header. It is assumed this packet was originally used by the client to inform the server of when it was disconnecting. Sending this packet to the server now will cause the server to disconnect the client without an error.
46 |
47 | ## Example Packets
48 |
49 | _This packet has not been observed in a live environment. Its handler is never called or referenced._
--------------------------------------------------------------------------------
/patch/packets/README.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
5 |
6 | # Patch Server Packets
7 |
8 | The following list is the various packets that are currently sent between the client and `patch` server:
9 |
10 | - :x: - _Initial documentation incomplete._
11 | - :warning: - _Initial documentation partially finished._
12 | - :white_check_mark: = _Initial documentation done._
13 |
14 | | Id | Direction | Packet Function Name | First Pass Documented |
15 | | --- | --- | --- | --- |
16 | | [`0x0001`](/patch/packets/0x0001/README.md) | `C -> S` | `_sqPatchPkt_MakeStatusRequest` | :white_check_mark: |
17 | | [`0x0002`](/patch/packets/0x0002/README.md) | `S -> C` | `_sqPatchPkt_CnvStatusReply` | :white_check_mark: |
18 | | [`0x0003`](/patch/packets/0x0003/README.md) | `C -> S` | `_sqPatchPkt_MakeDownLoadRequest`| :white_check_mark: |
19 | | [`0x0004`](/patch/packets/0x0004/README.md) | `S -> C` | `_sqPatchPkt_CnvSendFile` | :white_check_mark: |
20 | | [`0x0005`](/patch/packets/0x0005/README.md) | `S -> C` | `_sqPatchPkt_CnvError` | :white_check_mark: |
21 | | [`0x0006`](/patch/packets/0x0006/README.md) | `C -> S` | `_sqPatchPkt_MakeShutDown` | :white_check_mark: |
22 | | [`0x0007`](/patch/packets/0x0007/README.md) | `C -> S` | `_sqPatchPkt_MakeAskNewest` | :white_check_mark: |
23 | | [`0x0008`](/patch/packets/0x0008/README.md) | `S -> C` | `_sqPatchPkt_CnvReplyNewest` | :white_check_mark: |
24 |
--------------------------------------------------------------------------------
/repo/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atom0s/XiPackets/6731598c33ddb5aea00b8ce4c7dd965a188bb6f6/repo/icon.png
--------------------------------------------------------------------------------
/world/README.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
5 |
6 | # World Server
7 |
8 | The `world` server, often referred to as the `game` server, is the server responsible for handling the main gameplay traffic for a given zone, or set of zones. On retail servers, the `world` server instances are clustered for an entire server (ie. `Asura`) where each zone is ran on its own instance. This allows retail to take individual zones offline for emergency maintenance.
9 |
10 | Through IP and port monitoring, it has been observed that retail generally clusters zones together based on the type of zone, such as cities will run on individual `world` server instances within a single server hosted on the same port.
11 |
12 | The `world` server is responsible for all other traffic not already handled by the `cache` and `lobby` servers.
13 |
14 | ## Documentation Layout
15 |
16 | The `world` server documentation is broken into two separate main categories:
17 |
18 | - `client` - Contains packet information about packets sent by the client to the server.
19 | - `server` - Contains packet information about packets sent by the server to the client.
20 |
21 | Within these folders, each packet will be separated into its own folder and have its own `README.md` file. This allows each packet to contain additional resources and information all contained within its own folder, making it easer to find, read and reference.
22 |
--------------------------------------------------------------------------------
/world/client/0x000C/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GAMEOK`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GAMEOK` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x000C` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when the client is in a state, after zoning, that is ready to begin obtaining additional packets from the server.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_GAMEOK
20 | struct GP_CLI_GAMEOK
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t ClientState; // PS2: ClientState
26 | uint32_t DebugClientFlg : 1; // PS2: DebugClientFlg
27 | uint32_t unused : 31; // PS2: unused
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_CLI_GAMEOK`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `ClientState`
44 |
45 | _The client state._
46 |
47 | This value is always set to `0`.
48 |
49 | ### `DebugClientFlg`
50 |
51 | _Flag set if the client is a debug client._
52 |
53 | This flag value is always set to `0` on the normal retail client.
54 |
55 | ### `unused`
56 |
57 | _Unused._
58 |
--------------------------------------------------------------------------------
/world/client/0x000D/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_NETEND`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_NETEND` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x000D` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when it is being logged out of a zone.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_NETEND
20 | struct GP_CLI_NETEND
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint16_t State; // PS2: State
26 | uint16_t padding00; // PS2: Dammy
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_CLI_NETEND`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `State`
43 |
44 | _The client state._
45 |
46 | This value is always set to 0.
47 |
48 | ### `padding00`
49 |
50 | _Padding; unused._
51 |
52 | ## Additional Information
53 |
54 | The client sends this packet when it receives an `0x000B` packet from the server, depending on that packets `LogoutState`. If the `LogoutState` is `GP_GAME_LOGOUT_STATE_CANCEL` (`4`), then this packet will not be sent.
55 |
--------------------------------------------------------------------------------
/world/client/0x0011/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x0011`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0011` |
8 | | **Size** | `0x0006` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when it has successfully entered the requested zone, confirming it has entered the new area.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t unknown00;
26 | uint8_t unknown01;
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`packet_t`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `unknown00`
43 |
44 | _Unknown._
45 |
46 | This value is always set to `2`.
47 |
48 | ### `unknown01`
49 |
50 | _Unknown._
51 |
52 | This value is always set to `0`.
53 |
--------------------------------------------------------------------------------
/world/client/0x0016/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_CHARREQ`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_CHARREQ` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0016` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client if it is attempting to access an entity it does not have valid data for yet. _(Generally during events.)_
13 |
14 | This packet is used to request that the server send an entity update _(`0x000E`)_ packet for a given entity.
15 |
16 | ## Packet Layout
17 |
18 | The layout of this packet is the following:
19 |
20 | ```cpp
21 | // PS2: GP_CLI_CHARREQ
22 | struct GP_CLI_CHARREQ
23 | {
24 | uint16_t id: 9;
25 | uint16_t size: 7;
26 | uint16_t sync;
27 | uint16_t ActIndex; // PS2: ActIndex
28 | uint16_t padding00; // PS2: Dammy
29 | };
30 | ```
31 |
32 | ## Packet Fields
33 |
34 | The following information describes the structures outlined above.
35 |
36 | ## Structure Fields (`GP_CLI_CHARREQ`)
37 |
38 | ### `id`, `size`, `sync`
39 |
40 | _These fields are part of the packet header._
41 |
42 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
43 |
44 | ### `ActIndex`
45 |
46 | _The target index of the entity being requested._
47 |
48 | ### `padding00`
49 |
50 | _Padding; unused._
51 |
--------------------------------------------------------------------------------
/world/client/0x001B/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_FRIENDPASS`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_FRIENDPASS` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x001B` |
8 | | **Size** | `0x001C` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when it is interacting with, and ultimately purchasing from, a world pass vendor NPC.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_FRIENDPASS
20 | struct GP_CLI_FRIENDPASS
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint16_t Para; // PS2: Para
26 | uint16_t padding00; // PS2: Dammy
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_CLI_FRIENDPASS`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `Para`
43 |
44 | _The parameter of the packet._
45 |
46 | | Id | Purpose |
47 | | --- | --- |
48 | | `0` | _Client has requested to begin the purchase of a world pass._ |
49 | | `1` | _Client has confirmed the purchase of a world pass._ |
50 | | `2` | _Client has requested to begin the purchase of a gold world pass._ |
51 | | `3` | _Client has confirmed the purchase of a gold world pass._ |
52 |
53 | _**Note:** If the client rejects the confirmation for either world pass type, it will simply exit the event. It does not send a packet to the server._
54 |
55 | ### `padding00`
56 |
57 | _Padding; unused._
58 |
--------------------------------------------------------------------------------
/world/client/0x001C/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x001C`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x001C` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | The purpose of this packet is currently unknown.
13 |
14 | The client will send this packet each time the player uses a job ability while having a pet active.
15 |
16 | ## Packet Layout
17 |
18 | The layout of this packet is the following:
19 |
20 | ```cpp
21 | // PS2: (New; did not exist.)
22 | struct packet_t
23 | {
24 | uint16_t id: 9;
25 | uint16_t size: 7;
26 | uint16_t sync;
27 | uint16_t unknown00;
28 | uint16_t padding00;
29 | uint32_t unknown01;
30 | };
31 | ```
32 |
33 | ## Packet Fields
34 |
35 | The following information describes the structures outlined above.
36 |
37 | ## Structure Fields (`packet_t`)
38 |
39 | ### `id`, `size`, `sync`
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
44 |
45 | ### `unknown00`
46 |
47 | _Unknown._
48 |
49 | This value is always set to the local players target index.
50 |
51 | ### `padding00`
52 |
53 | _Padding; unused._
54 |
55 | ### `unknown01`
56 |
57 | _Unknown._
58 |
59 | This value is always set to `1`.
60 |
--------------------------------------------------------------------------------
/world/client/0x001E/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GM`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GM` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x001E` |
8 | | **Size** | `(varies)` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > This is a special GM-related packet!
14 |
15 | This packet is sent by the client when using GM commands.
16 |
17 | _**Note:** The system to actually make use of this packet is no longer implemented in the retail client. However, the functions that send this packet still exist._
18 |
19 | ## Packet Layout
20 |
21 | The layout of this packet is the following:
22 |
23 | ```cpp
24 | // PS2: GP_CLI_GM
25 | struct GP_CLI_GM
26 | {
27 | uint16_t id: 9;
28 | uint16_t size: 7;
29 | uint16_t sync;
30 | uint8_t Command[]; // PS2: Command
31 | };
32 | ```
33 |
34 | ## Packet Fields
35 |
36 | The following information describes the structures outlined above.
37 |
38 | ## Structure Fields (`GP_CLI_GM`)
39 |
40 | ### `id`, `size`, `sync`
41 |
42 | _These fields are part of the packet header._
43 |
44 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
45 |
46 | ### `Command`
47 |
48 | _The GM command string to execute._
49 |
--------------------------------------------------------------------------------
/world/client/0x001F/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GMCOMMAND`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GMCOMMAND` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x001F` |
8 | | **Size** | `(varies)` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > This is a special GM-related packet!
14 |
15 | This packet is sent by the client in response to a remote GM command execution request.
16 |
17 | ## Packet Layout
18 |
19 | The layout of this packet is the following:
20 |
21 | ```cpp
22 | // PS2: GP_CLI_GMCOMMAND
23 | struct GP_CLI_GMCOMMAND
24 | {
25 | uint16_t id: 9;
26 | uint16_t size: 7;
27 | uint16_t sync;
28 | uint32_t GMUniqueNo; // PS2: GMUniqueNo
29 | uint8_t Command[]; // PS2: Command
30 | };
31 | ```
32 |
33 | ## Packet Fields
34 |
35 | The following information describes the structures outlined above.
36 |
37 | ## Structure Fields (`GP_CLI_GMCOMMAND`)
38 |
39 | ### `id`, `size`, `sync`
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
44 |
45 | ### `GMUniqueNo`
46 |
47 | _The server id of the GM._
48 |
49 | ### `Command`
50 |
51 | _The GM command string._
52 |
53 | ## Additional Information
54 |
55 | The client has several commands built into it to return information to a GM when requested. A GM client can cause a normal players client to execute a given command locally, then respond with information from the executed command using this packet.
56 |
57 | For example, there is a remote GM command called `eventinfo`. If a GM sends this command to a client, it will send this packet in response with the `Command` information populated with information related to the clients current event state.
58 |
--------------------------------------------------------------------------------
/world/client/0x0028/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_ITEM_DUMP`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_ITEM_DUMP` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0028` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when it drops an item.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_ITEM_DUMP
20 | struct GP_CLI_ITEM_DUMP
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t ItemNum; // PS2: ItemNum
26 | uint8_t Category; // PS2: Category
27 | uint8_t ItemIndex; // PS2: ItemIndex
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_CLI_ITEM_DUMP`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `ItemNum`
44 |
45 | _The quantity of the item to be dropped._
46 |
47 | ### `Category`
48 |
49 | _The container holding the item._
50 |
51 | ### `ItemIndex`
52 |
53 | _The index inside of the container this item is located._
54 |
--------------------------------------------------------------------------------
/world/client/0x0029/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_ITEM_MOVE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_ITEM_MOVE` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0029` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when moving items around containers.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_ITEM_MOVE
20 | struct GP_CLI_ITEM_MOVE
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t ItemNum; // PS2: ItemNum
26 | uint8_t Category1; // PS2: Category1
27 | uint8_t Category2; // PS2: Category2
28 | uint8_t ItemIndex1; // PS2: ItemIndex1
29 | uint8_t ItemIndex2; // PS2: ItemIndex2
30 | };
31 | ```
32 |
33 | ## Packet Fields
34 |
35 | The following information describes the structures outlined above.
36 |
37 | ## Structure Fields (`GP_CLI_ITEM_MOVE`)
38 |
39 | ### `id`, `size`, `sync`
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
44 |
45 | ### `ItemNum`
46 |
47 | _The quantity of the item to be moved._
48 |
49 | ### `Category1`
50 |
51 | _The container holding the item._
52 |
53 | ### `Category2`
54 |
55 | _The container to move the item to._
56 |
57 | ### `ItemIndex1`
58 |
59 | _The index inside of the container (`Category1`) this item is currently located._
60 |
61 | ### `ItemIndex2`
62 |
63 | _The index inside of the container (`Category2`) this item is being moved to._
64 |
65 | This value will be set to `82` when the client is moving items to another container.
66 |
--------------------------------------------------------------------------------
/world/client/0x002A/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_ITEM_ATTR`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_ITEM_ATTR` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x002A` |
8 | | **Size** | `0x0006` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | > [!NOTE]
16 | > This is a special GM-related packet!
17 |
18 | This packet is used with the GM command `//itemattr`.
19 |
20 | ## Packet Layout
21 |
22 | The layout of this packet is the following:
23 |
24 | ```cpp
25 | // PS2: GP_CLI_ITEM_ATTR
26 | struct GP_CLI_ITEM_ATTR
27 | {
28 | uint16_t id: 9;
29 | uint16_t size: 7;
30 | uint16_t sync;
31 | uint8_t Category; // PS2: Category
32 | uint8_t ItemIndex; // PS2: ItemIndex
33 | };
34 | ```
35 |
36 | ## Packet Fields
37 |
38 | The following information describes the structures outlined above.
39 |
40 | ## Structure Fields (`GP_CLI_ITEM_ATTR`)
41 |
42 | ### `id`, `size`, `sync`
43 |
44 | _These fields are part of the packet header._
45 |
46 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
47 |
48 | ### `Category`
49 |
50 | _The container holding the item._
51 |
52 | ### `ItemIndex`
53 |
54 | _The index inside of the container this item is located._
55 |
--------------------------------------------------------------------------------
/world/client/0x002C/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x002C`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x002C` |
8 | | **Size** | `0x0048` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when using the `/itemsearch` command.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t Language;
26 | uint8_t padding00[3];
27 | uint8_t Name[64];
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`packet_t`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `Language`
44 |
45 | _The clients language id._
46 |
47 | - `0` - _Japanese_
48 | - `1` - _English_
49 | - `2` - _French (Deprecated)_
50 | - `3` - _German (Deprecated)_
51 |
52 | ### `padding00`
53 |
54 | _Padding; unused._
55 |
56 | ### `Name`
57 |
58 | _The name of the item to be searched for._
59 |
--------------------------------------------------------------------------------
/world/client/0x0032/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_ITEM_TRADE_REQ`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_ITEM_TRADE_REQ` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0032` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when it is requesting to trade with another player.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_ITEM_TRADE_REQ
20 | struct GP_CLI_ITEM_TRADE_REQ
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t UniqueNo; // PS2: UniqueNo
26 | uint16_t ActIndex; // PS2: ActIndex
27 | uint16_t padding00; // PS2: dammy2
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_CLI_ITEM_TRADE_REQ`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `UniqueNo`
44 |
45 | _The server id of the player to trade with._
46 |
47 | ### `ActIndex`
48 |
49 | _The target index of the player to trade with._
50 |
51 | ### `padding00`
52 |
53 | _Padding; unused._
54 |
--------------------------------------------------------------------------------
/world/client/0x0034/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_ITEM_TRADE_LIST`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_ITEM_TRADE_LIST` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0034` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when setting an item inside of the trade window.
13 |
14 | ```cpp
15 | // PS2: GP_CLI_ITEM_TRADE_LIST
16 | struct GP_CLI_ITEM_TRADE_LIST
17 | {
18 | uint16_t id: 9;
19 | uint16_t size: 7;
20 | uint16_t sync;
21 | uint32_t ItemNum; // PS2: ItemNum
22 | uint16_t ItemNo; // PS2: ItemNo
23 | uint8_t ItemIndex; // PS2: ItemIndex
24 | uint8_t TradeIndex; // PS2: TradeIndex
25 | };
26 | ```
27 |
28 | ## Packet Fields
29 |
30 | The following information describes the structures outlined above.
31 |
32 | ## Structure Fields (`GP_CLI_ITEM_TRADE_LIST`)
33 |
34 | ### `id`, `size`, `sync`
35 |
36 | _These fields are part of the packet header._
37 |
38 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
39 |
40 | ### `ItemNum`
41 |
42 | _The quantity of the item to be traded._
43 |
44 | ### `ItemNo`
45 |
46 | _The id of the item being traded._
47 |
48 | ### `ItemIndex`
49 |
50 | _The index within the players inventory the item is located._
51 |
52 | ### `TradeIndex`
53 |
54 | _The trade window slot index._
55 |
--------------------------------------------------------------------------------
/world/client/0x0035/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_ITEM_PRESENT`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_ITEM_PRESENT` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0035` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | > [!NOTE]
16 | > This is a special GM-related packet!
17 |
18 | This packet is used with the GM command `//itempresent`.
19 |
20 | ```cpp
21 | // PS2: GP_CLI_ITEM_PRESENT
22 | struct GP_CLI_ITEM_PRESENT
23 | {
24 | uint16_t id: 9;
25 | uint16_t size: 7;
26 | uint16_t sync;
27 | uint8_t Index; // PS2: Index
28 | uint8_t ReqID; // PS2: ReqID
29 | uint8_t TakeFlg; // PS2: TakeFlg
30 | };
31 | ```
32 |
33 | ## Packet Fields
34 |
35 | The following information describes the structures outlined above.
36 |
37 | ## Structure Fields (`GP_CLI_ITEM_PRESENT`)
38 |
39 | ### `id`, `size`, `sync`
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
44 |
45 | ### `Index`
46 |
47 | _Unknown._
48 |
49 | ### `ReqID`
50 |
51 | _Unknown._
52 |
53 | ### `TakeFlg`
54 |
55 | _Unknown._
56 |
57 | ## Additional Information
58 |
59 | This packets intended purpose is unknown. The command that made use of this packet is no longer part of the retail client. However, the function that sends this packet still exists.
60 |
--------------------------------------------------------------------------------
/world/client/0x0038/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_ITEM_MAKE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_ITEM_MAKE` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0038` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | > [!NOTE]
16 | > This is a special GM-related packet!
17 |
18 | This packet is used with the GM command `//itemmake`.
19 |
20 | ## Packet Layout
21 |
22 | The layout of this packet is the following:
23 |
24 | ```cpp
25 | // PS2: GP_CLI_ITEM_MAKE
26 | struct GP_CLI_ITEM_MAKE
27 | {
28 | uint16_t id: 9;
29 | uint16_t size: 7;
30 | uint16_t sync;
31 | uint32_t ItemNum; // PS2: ItemNum
32 | uint16_t ItemNo; // PS2: ItemNo
33 | uint16_t padding00; // PS2: padding00
34 | };
35 | ```
36 |
37 | ## Packet Fields
38 |
39 | The following information describes the structures outlined above.
40 |
41 | ## Structure Fields (`GP_CLI_ITEM_MAKE`)
42 |
43 | ### `id`, `size`, `sync`
44 |
45 | _These fields are part of the packet header._
46 |
47 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
48 |
49 | ### `ItemNum`
50 |
51 | _The count of items._
52 |
53 | ### `ItemNo`
54 |
55 | _The item id._
56 |
57 | ### `padding00`
58 |
59 | _Padding; unused._
60 |
--------------------------------------------------------------------------------
/world/client/0x0039/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMAMND_ITEM_LIST`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMAMND_ITEM_LIST` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0039` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | > [!NOTE]
16 | > This is a special GM-related packet!
17 |
18 | This packet is used with the GM command `//itemlist`.
19 |
20 | ## Packet Layout
21 |
22 | The layout of this packet is the following:
23 |
24 | ```cpp
25 | // PS2: GP_CLI_ITEM_LIST
26 | struct GP_CLI_ITEM_LIST
27 | {
28 | uint16_t id: 9;
29 | uint16_t size: 7;
30 | uint16_t sync;
31 | };
32 | ```
33 |
34 | ## Packet Fields
35 |
36 | The following information describes the structures outlined above.
37 |
38 | ## Structure Fields (`GP_CLI_ITEM_LIST`)
39 |
40 | ### `id`, `size`, `sync`
41 |
42 | _These fields are part of the packet header._
43 |
44 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
45 |
--------------------------------------------------------------------------------
/world/client/0x003A/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_ITEM_STACK`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_ITEM_STACK` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x003A` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when sorting an inventory container.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_ITEM_STACK
20 | struct GP_CLI_ITEM_STACK
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t Category; // PS2: Category
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_CLI_ITEM_STACK`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `Category`
42 |
43 | _The container holding the item._
44 |
--------------------------------------------------------------------------------
/world/client/0x0041/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_TROPHY_ENTRY`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_TROPHY_ENTRY` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0041` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when casting lots on treasure pool items.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_TROPHY_ENTRY
20 | struct GP_CLI_TROPHY_ENTRY
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t TrophyItemIndex; // PS2: TrophyItemIndex
26 | uint8_t PropertyItemIndex; // PS2: PropertyItemIndex
27 | uint8_t padding00[2]; // PS2: (New; did not exist.)
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_CLI_TROPHY_ENTRY`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `TrophyItemIndex`
44 |
45 | _The treasure pool window index of the item being lotted on._
46 |
47 | ### `PropertyItemIndex`
48 |
49 | _The clients local inventory index where it assumed the item can be placed._
50 |
51 | The client obtains this value using its `gcItemOneSpeaceGet` function. It walks the clients inventory _(starting at index 1 to skip gil)_ to locate the first item entry that has no set valid item. This value is the incremented index found to be empty.
52 |
53 | ### `padding00`
54 |
55 | _Padding; unused._
56 |
--------------------------------------------------------------------------------
/world/client/0x0042/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_TROPHY_ABSENCE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_TROPHY_ABSENCE` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0042` |
8 | | **Size** | `0x0006` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when passing on treasure pool items.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_TROPHY_ABSENCE
20 | struct GP_CLI_TROPHY_ABSENCE
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t TrophyItemIndex; // PS2: TrophyItemIndex
26 | uint8_t padding00; // PS2: (New; did not exist.)
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_CLI_TROPHY_ABSENCE`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `TrophyItemIndex`
43 |
44 | _The treasure pool window index of the item being passed on._
45 |
46 | ### `padding00`
47 |
48 | _Padding; unused._
49 |
--------------------------------------------------------------------------------
/world/client/0x0050/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_EQUIP_SET`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_EQUIP_SET` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0050` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when changing equipment.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_EQUIP_SET
20 | struct GP_CLI_EQUIP_SET
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t PropertyItemIndex; // PS2: PropertyItemIndex
26 | uint8_t EquipKind; // PS2: EquipKind
27 | uint8_t Category; // PS2: (New; did not exist.)
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_CLI_EQUIP_SET`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `PropertyItemIndex`
44 |
45 | _The index within the container where the item is located to be equipped._
46 |
47 | When the slot is being unequipped, this value is set to `0`.
48 |
49 | ### `EquipKind`
50 |
51 | _The equipment slot being modified._
52 |
53 | ### `Category`
54 |
55 | _The container that holds the item being equipped or unequipped._
56 |
--------------------------------------------------------------------------------
/world/client/0x005A/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_REQCONQUEST`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_REQCONQUEST` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x005A` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting the current Conquest map information.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (Unnamed packet.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | };
26 | ```
27 |
28 | ## Packet Fields
29 |
30 | The following information describes the structures outlined above.
31 |
32 | ## Structure Fields (`packet_t`)
33 |
34 | ### `id`, `size`, `sync`
35 |
36 | _These fields are part of the packet header._
37 |
38 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
39 |
--------------------------------------------------------------------------------
/world/client/0x0063/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_DIG`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_DIG` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0063` |
8 | | **Size** | `0x0010` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when it has completed the chocobo digging animation; informing the server it is ready for the results.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_DIG
20 | struct GP_CLI_DIG
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t UniqueNo; // PS2: UniqueNo
26 | uint32_t para; // PS2: para
27 | uint16_t ActIndex; // PS2: ActIndex
28 | uint8_t mode; // PS2: mode
29 | uint8_t padding00; // PS2: dammy
30 | };
31 | ```
32 |
33 | ## Packet Fields
34 |
35 | The following information describes the structures outlined above.
36 |
37 | ## Structure Fields (`GP_CLI_DIG`)
38 |
39 | ### `id`, `size`, `sync`
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
44 |
45 | ### `UniqueNo`
46 |
47 | _The clients server id._
48 |
49 | ### `para`
50 |
51 | _The packet parameter._
52 |
53 | The client always sets this value to `0x00` for this packet.
54 |
55 | ### `ActIndex`
56 |
57 | _The clients target index._
58 |
59 | ### `mode`
60 |
61 | _The packet mode._
62 |
63 | The client always sets this value to `0x11` for this packet. _(This value matches the beginning action id sent by the client when requesting to dig.)_
64 |
65 | ### `padding00`
66 |
67 | _Padding; unused._
68 |
--------------------------------------------------------------------------------
/world/client/0x006E/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GROUP_SOLICIT_REQ`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GROUP_SOLICIT_REQ` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x006E` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when sending party or alliance invites to other players.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_GROUP_SOLICIT_REQ
20 | struct GP_CLI_GROUP_SOLICIT_REQ
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t UniqueNo; // PS2: UniqueNo
26 | uint16_t ActIndex; // PS2: ActIndex
27 | uint8_t Kind; // PS2: Kind
28 | uint8_t padding00; // PS2: dammy2
29 | };
30 | ```
31 |
32 | ## Packet Fields
33 |
34 | The following information describes the structures outlined above.
35 |
36 | ## Structure Fields (`GP_CLI_GROUP_SOLICIT_REQ`)
37 |
38 | ### `id`, `size`, `sync`
39 |
40 | _These fields are part of the packet header._
41 |
42 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
43 |
44 | ### `UniqueNo`
45 |
46 | _The server id of the player being invited._
47 |
48 | ### `ActIndex`
49 |
50 | _The target index of the player being invited._
51 |
52 | This value is only set if the target player is within the same zone as the local player.
53 |
54 | ### `Kind`
55 |
56 | _The kind of party invite._
57 |
58 | | Kind | Purpose |
59 | | `0` | _Party Invite_ |
60 | | `5` | _Alliance Invite_ |
61 |
62 | ### `padding00`
63 |
64 | _Padding; unused._
65 |
--------------------------------------------------------------------------------
/world/client/0x006F/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GROUP_LEAVE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GROUP_LEAVE` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x006F` |
8 | | **Size** | `0x0006` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when leaving a party or alliance.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_COMMAND_GROUP_LEAVE
20 | struct GP_CLI_COMMAND_GROUP_LEAVE
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t Kind; // PS2: Kind
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_CLI_COMMAND_GROUP_LEAVE`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `Kind`
42 |
43 | _The kind of party invite._
44 |
45 | | Kind | Purpose |
46 | | `0` | _Leave Party_ |
47 | | `5` | _Leave Alliance_ |
48 |
--------------------------------------------------------------------------------
/world/client/0x0070/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GROUP_BREAKUP`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GROUP_BREAKUP` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0070` |
8 | | **Size** | `0x0006` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when dissolving a party or alliance.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_GROUP_BREAKUP
20 | struct GP_CLI_GROUP_BREAKUP
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t Kind; // PS2: Kind
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_CLI_GROUP_BREAKUP`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `Kind`
42 |
43 | _The kind of party invite._
44 |
45 | | Kind | Purpose |
46 | | `0` | _Dissolve Party_ |
47 | | `5` | _Dissolve Alliance_ |
48 |
--------------------------------------------------------------------------------
/world/client/0x0074/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GROUP_SOLICIT_RES`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GROUP_SOLICIT_RES` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0074` |
8 | | **Size** | `0x0006` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when responding to a party or alliance invite.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_GROUP_SOLICIT_RES
20 | struct GP_CLI_GROUP_SOLICIT_RES
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t Res; // PS2: Res
26 | uint8_t padding00; // PS2: (New; did not exist.)
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_CLI_GROUP_SOLICIT_RES`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `Res`
43 |
44 | _The party invite response value._
45 |
46 | This value is the clients response to the current pending invite.
47 |
48 | | Res | Purpose |
49 | | --- | --- |
50 | | `0` | _The client has declined the invite. (`/decline`)_ |
51 | | `1` | _The client has accepted the invite. (`/join`)_ |
52 |
--------------------------------------------------------------------------------
/world/client/0x0075/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GROUP_TALK`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GROUP_TALK` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0075` |
8 | | **Size** | `(varies)` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | The purpose of this packet is unknown. While this packet was present in the PS2 beta as well, it was not implemented or used.
16 |
17 | ## Packet Layout
18 |
19 | The layout of this packet is the following:
20 |
21 | ```cpp
22 | // PS2: GP_CLI_GROUP_TALK
23 | struct GP_CLI_GROUP_TALK
24 | {
25 | uint16_t id: 9;
26 | uint16_t size: 7;
27 | uint16_t sync;
28 | uint16_t padding00; // PS2: dammy
29 | uint8_t Kind; // PS2: Kind
30 | uint8_t Attr; // PS2: Attr
31 | uint8_t Str[]; // PS2: Str
32 | };
33 | ```
34 |
35 | ## Packet Fields
36 |
37 | The following information describes the structures outlined above.
38 |
39 | ## Structure Fields (`GP_CLI_GROUP_TALK`)
40 |
41 | ### `id`, `size`, `sync`
42 |
43 | _These fields are part of the packet header._
44 |
45 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
46 |
47 | ### `padding00`
48 |
49 | _Padding; unused._
50 |
51 | ### `Kind`
52 |
53 | _The packet kind._
54 |
55 | ### `Attr`
56 |
57 | _The packet attribute._
58 |
59 | ### `Str`
60 |
61 | _The message string._
62 |
--------------------------------------------------------------------------------
/world/client/0x0076/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GROUP_LIST_REQ`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GROUP_LIST_REQ` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0076` |
8 | | **Size** | `0x0006` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when it has attempted to access invalid party member information.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_GROUP_LIST_REQ
20 | struct GP_CLI_GROUP_LIST_REQ
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t Kind; // PS2: Kind
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_CLI_GROUP_LIST_REQ`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `Kind`
42 |
43 | _The packet kind._
44 |
45 | ## Additional Information
46 |
47 | This packet is sent when the client has attempted to make use of an invalid / missing party members information. The client has an iterator function to walk the party member list _(`FUNC_gcGroupLookNext`)_ to return the next expected member in the party _(with sorting)_ that is valid. At the end of this function, it checks if the members name is valid/set. If it is not set, then this packet will be sent to request that the server send the client an updated snapshot of the current party information.
48 |
49 | This is the only usage of this packet, and the `Kind` value will always be set to `0`.
50 |
--------------------------------------------------------------------------------
/world/client/0x0082/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_SHOP_REQ`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_SHOP_REQ` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0082` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | > [!NOTE]
16 | > This is a special GM-related packet!
17 |
18 | This packet is used with the GM command `//slist`. The purpose of this packet is unknown.
19 |
20 | ## Packet Layout
21 |
22 | The layout of this packet is the following:
23 |
24 | ```cpp
25 | // PS2: GP_CLI_SHOP_REQ
26 | struct GP_CLI_SHOP_REQ
27 | {
28 | uint16_t id: 9;
29 | uint16_t size: 7;
30 | uint16_t sync;
31 | uint16_t ShopNo; // PS2: ShopNo
32 | uint8_t ShopItemOffsetIndex;// PS2: ShopItemOffsetIndex
33 | uint8_t padding00; // PS2: padding00
34 | };
35 | ```
36 |
37 | ## Packet Fields
38 |
39 | The following information describes the structures outlined above.
40 |
41 | ## Structure Fields (`GP_CLI_SHOP_REQ`)
42 |
43 | ### `id`, `size`, `sync`
44 |
45 | _These fields are part of the packet header._
46 |
47 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
48 |
49 | ### `ShopNo`
50 |
51 | _Unknown._
52 |
53 | The client does not use or set this value.
54 |
55 | ### `ShopItemOffsetIndex`
56 |
57 | _The shop item index._
58 |
59 | ### `padding00`
60 |
61 | _Padding; unused._
62 |
--------------------------------------------------------------------------------
/world/client/0x0083/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_SHOP_BUY`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_SHOP_BUY` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0083` |
8 | | **Size** | `0x0010` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when purchasing items from a shop.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_SHOP_BUY
20 | struct GP_CLI_SHOP_BUY
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t ItemNum; // PS2: ItemNum
26 | uint16_t ShopNo; // PS2: ShopNo
27 | uint16_t ShopItemIndex; // PS2: ShopItemIndex
28 | uint8_t PropertyItemIndex; // PS2: PropertyItemIndex
29 | uint8_t padding00[3]; // PS2: dammy
30 | };
31 | ```
32 |
33 | ## Packet Fields
34 |
35 | The following information describes the structures outlined above.
36 |
37 | ## Structure Fields (`GP_CLI_SHOP_BUY`)
38 |
39 | ### `id`, `size`, `sync`
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
44 |
45 | ### `ItemNum`
46 |
47 | _The quantity of the item to be purchased._
48 |
49 | ### `ShopNo`
50 |
51 | _Unused._
52 |
53 | The client does not set or use this value.
54 |
55 | ### `ShopItemIndex`
56 |
57 | _The index within the shops item list of the item being purchased._
58 |
59 | ### `PropertyItemIndex`
60 |
61 | _The index within the clients inventory to store the item._
62 |
63 | This value is always set to `0`. The server is responsible for determining where to place the item.
64 |
65 | ### `padding00`
66 |
67 | _Padding; unused._
68 |
--------------------------------------------------------------------------------
/world/client/0x0084/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_SHOP_SELL_REQ`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_SHOP_SELL_REQ` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0084` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to sell an item to a shop. This packet is used to appraise the item to determine the price it is worth prior to actually selling it.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_SHOP_SELL_REQ
20 | struct GP_CLI_SHOP_SELL_REQ
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t ItemNum; // PS2: ItemNum
26 | uint16_t ItemNo; // PS2: ItemNo
27 | uint8_t ItemIndex; // PS2: ItemIndex
28 | uint8_t padding00; // PS2: dammy
29 | };
30 | ```
31 |
32 | ## Packet Fields
33 |
34 | The following information describes the structures outlined above.
35 |
36 | ## Structure Fields (`GP_CLI_SHOP_SELL_REQ`)
37 |
38 | ### `id`, `size`, `sync`
39 |
40 | _These fields are part of the packet header._
41 |
42 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
43 |
44 | ### `ItemNum`
45 |
46 | _The quantity of the item to be sold._
47 |
48 | ### `ItemNo`
49 |
50 | _The item id being sold._
51 |
52 | ### `ItemIndex`
53 |
54 | _The index within the clients inventory that holds the item to be sold._
55 |
56 | ### `padding00`
57 |
58 | _Padding; unused._
59 |
--------------------------------------------------------------------------------
/world/client/0x0085/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_SHOP_SELL_SET`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_SHOP_SELL_SET` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0085` |
8 | | **Size** | `0x0006` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when confirming the sale of an item to a shop.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_SHOP_SELL_SET
20 | struct GP_CLI_SHOP_SELL_SET
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint16_t SellFlag; // PS2: SellFlag
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_CLI_SHOP_SELL_SET`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `SellFlag`
42 |
43 | _Flag set to confirm the sale of an item to the shop._
44 |
45 | This value is always set to `1`.
46 |
47 | ## Additional Information
48 |
49 | When the client is selling items to a shop, it will first send an `0x0084` packet to obtain the sale price that the item is worth. It will then send this packet to confirm the sale of the previously selected item. The client will always send an `0x0084` packet first when selling an item to ensure the proper item is set as the selling item. Even if the client has already price checked an item in the same menu, it will send both packets every time.
50 |
--------------------------------------------------------------------------------
/world/client/0x008C/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_PREFERENCE_READ`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_PREFERENCE_READ` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x008C` |
8 | | **Size** | `0x0006` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | > [!NOTE]
16 | > This is a special GM-related packet!
17 |
18 | This packet is used with the GM command `//getpref`. The purpose of this packet is unknown.
19 |
20 | ## Packet Layout
21 |
22 | The layout of this packet is the following:
23 |
24 | ```cpp
25 | // PS2: GP_CLI_PREFERENCE_READ
26 | struct GP_CLI_PREFERENCE_READ
27 | {
28 | uint16_t id: 9;
29 | uint16_t size: 7;
30 | uint16_t sync;
31 | uint16_t padding00; // PS2: Dummy
32 | };
33 | ```
34 |
35 | ## Packet Fields
36 |
37 | The following information describes the structures outlined above.
38 |
39 | ## Structure Fields (`GP_CLI_PREFERENCE_READ`)
40 |
41 | ### `id`, `size`, `sync`
42 |
43 | _These fields are part of the packet header._
44 |
45 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
46 |
--------------------------------------------------------------------------------
/world/client/0x008D/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_PREFERENCE_SAVE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_PREFERENCE_SAVE` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x008D` |
8 | | **Size** | `0x0040` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | > [!NOTE]
16 | > This is a special GM-related packet!
17 |
18 | This packet is used with the GM command `//savepref`. The purpose of this packet is unknown.
19 |
20 | ## Packet Layout
21 |
22 | The layout of this packet is the following:
23 |
24 | ```cpp
25 | // PS2: GP_CLI_PREFERENCE_SAVE
26 | struct GP_CLI_PREFERENCE_SAVE
27 | {
28 | uint16_t id: 9;
29 | uint16_t size: 7;
30 | uint16_t sync;
31 | int32_t ContentLen; // PS2: ContentLen
32 | int32_t SegmentIndex; // PS2: SegmentIndex
33 | char PreferenceData[50]; // PS2: PreferenceData
34 | char SendDone; // PS2: SendDone
35 | };
36 | ```
37 |
38 | ## Packet Fields
39 |
40 | The following information describes the structures outlined above.
41 |
42 | ## Structure Fields (`GP_CLI_PREFERENCE_SAVE`)
43 |
44 | ### `id`, `size`, `sync`
45 |
46 | _These fields are part of the packet header._
47 |
48 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
49 |
50 | ### `ContentLen`
51 |
52 | _The length of the preference data content contained within `PreferenceData`._
53 |
54 | ### `SegmentIndex`
55 |
56 | _The index of the current data segment._
57 |
58 | ### `PreferenceData`
59 |
60 | _The actual preference data string segment._
61 |
62 | ### `SendDone`
63 |
64 | _Flag set when all data has been sent._
65 |
--------------------------------------------------------------------------------
/world/client/0x00A0/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_SWITCH_PROPOSAL`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_SWITCH_PROPOSAL` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00A0` |
8 | | **Size** | `(varies)` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when making a proposal. _(via `/nominate` or `/propose`)_
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_SWITCH_PROPOSAL
20 | struct GP_CLI_SWITCH_PROPOSAL
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t Kind; // PS2: Kind
26 | uint8_t Str[]; // PS2: Str
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_CLI_SWITCH_PROPOSAL`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `Kind`
43 |
44 | _The proposal kind._
45 |
46 | This value is used as the chat mode parameter that is given when creating the proposal.
47 |
48 | | Kind | Purpose |
49 | | --- | --- |
50 | | `0x01` | _Party_ |
51 | | `0x02` | _Linkshell (1)_ |
52 | | `0x03` | _Linkshell (2)_ |
53 | | `0x05` | _Say_ |
54 | | `0x06` | _Shout_ |
55 |
56 | ### `Str`
57 |
58 | _The proposal string._
59 |
60 | This value is the clients question and options that were given when using the `/nominate` or `/propose` command. If the client is cancelling their proposal, then this will be a null string.
61 |
--------------------------------------------------------------------------------
/world/client/0x00A1/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_SWITCH_VOTE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_SWITCH_VOTE` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00A1` |
8 | | **Size** | `(varies)` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when voting in a proposal. _(via `/vote`)_
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_SWITCH_VOTE
20 | struct GP_CLI_SWITCH_VOTE
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t Index; // PS2: Index
26 | uint8_t Name[]; // PS2: Name
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_CLI_SWITCH_VOTE`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `Index`
43 |
44 | _The index of the option the client is voting for in the proposal._
45 |
46 | ### `Name`
47 |
48 | _The name of the player who made the proposal the client is voting in._
49 |
50 | This value will be the name of the player that made the proposal the client is voting it. The client can give this name when using the `/vote` command. If they do not give a name, then the client will automatically use the name of the player who made the last seen proposal.
51 |
--------------------------------------------------------------------------------
/world/client/0x00A2/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_DICE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_DICE` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00A2` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when using the `/random` command.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_DICE
20 | struct GP_CLI_DICE
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t unknown00; // PS2: Dammy
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_CLI_DICE`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `unknown00`
42 |
43 | _Unknown._
44 |
45 | This value is set by the client as the numerical parameter given to the `/random` command. However, it does not appear to have any actual affect. _(It is assumed this was intended to be a range limiter to allow players to roll between 0 and a given number at some point.)_
46 |
--------------------------------------------------------------------------------
/world/client/0x00AA/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GUILD_BUY`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GUILD_BUY` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00AA` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when buying items from a guild shop.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (Unnamed packet.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint16_t ItemNo;
26 | uint8_t PropertyItemIndex;
27 | uint8_t ItemNum;
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`packet_t`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `ItemNo`
44 |
45 | _The item id being purchased._
46 |
47 | ### `PropertyItemIndex`
48 |
49 | _The index within the clients inventory to place the item._
50 |
51 | This value is always set to `0`.
52 |
53 | ### `ItemNum`
54 |
55 | _The quantity of items being purchased._
56 |
--------------------------------------------------------------------------------
/world/client/0x00AB/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GUILD_BUYLIST`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GUILD_BUYLIST` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00AB` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting the current guild stock. _(When opening the `Buy` window.)_
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (Unnamed packet.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | };
26 | ```
27 |
28 | ## Packet Fields
29 |
30 | The following information describes the structures outlined above.
31 |
32 | ## Structure Fields (`packet_t`)
33 |
34 | ### `id`, `size`, `sync`
35 |
36 | _These fields are part of the packet header._
37 |
38 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
39 |
40 | ## Additional Information
41 |
42 | The client uses this packet when it needs to request the current guild vendors item stock. This can happen if the client gets into a state where the current local guild stock information becomes invalidated or is too old and needs to be refreshed.
43 |
--------------------------------------------------------------------------------
/world/client/0x00AC/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GUILD_SELL`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GUILD_SELL` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00AC` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when selling items to a guild shop.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (Unnamed packet.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint16_t ItemNo;
26 | uint8_t PropertyItemIndex;
27 | uint8_t ItemNum;
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`packet_t`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `ItemNo`
44 |
45 | _The item id being sold._
46 |
47 | ### `PropertyItemIndex`
48 |
49 | _The index within the clients inventory of the item being sold._
50 |
51 | ### `ItemNum`
52 |
53 | _The quantity of items being sold._
54 |
--------------------------------------------------------------------------------
/world/client/0x00AD/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GUILD_SELLLIST`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GUILD_SELLLIST` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00AD` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting the current guild stock. _(When opening the `Sell` window.)_
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (Unnamed packet.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | };
26 | ```
27 |
28 | ## Packet Fields
29 |
30 | The following information describes the structures outlined above.
31 |
32 | ## Structure Fields (`packet_t`)
33 |
34 | ### `id`, `size`, `sync`
35 |
36 | _These fields are part of the packet header._
37 |
38 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
39 |
40 | ## Additional Information
41 |
42 | The client uses this packet when it needs to request the current guild vendors item stock. This can happen if the client gets into a state where the current local guild stock information becomes invalidated or is too old and needs to be refreshed.
43 |
--------------------------------------------------------------------------------
/world/client/0x00B6/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_CHAT_NAME`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_CHAT_NAME` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00B6` |
8 | | **Size** | `(varies)` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when sending tells to another player.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_CHAT_NAME
20 | struct GP_CLI_CHAT_NAME
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t unknown00;
26 | uint8_t unknown01;
27 | uint8_t sName[15];
28 | uint8_t Mes[];
29 | };
30 | ```
31 |
32 | ## Packet Fields
33 |
34 | The following information describes the structures outlined above.
35 |
36 | ## Structure Fields (`GP_CLI_CHAT_NAME`)
37 |
38 | ### `id`, `size`, `sync`
39 |
40 | _These fields are part of the packet header._
41 |
42 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
43 |
44 | ### `unknown00`
45 |
46 | _Unknown._
47 |
48 | This value is used as a flag, however the client always sets it to `3`.
49 |
50 | ### `unknown01`
51 |
52 | _Unknown._
53 |
54 | This value is used as a flag, however the client always sets it to `0`.
55 |
56 | ### `sName`
57 |
58 | _The name of the recipient who should receive the message._
59 |
60 | ### `Mes`
61 |
62 | _The message string._
63 |
--------------------------------------------------------------------------------
/world/client/0x00BF/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x00BF`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00BF` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when spending job points.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint16_t Index;
26 | uint16_t padding00;
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`packet_t`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `Index`
43 |
44 | _The index of the job point being purchased._
45 |
46 | ### `padding00`
47 |
48 | _Padding; unused._
49 |
--------------------------------------------------------------------------------
/world/client/0x00C0/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x00C0`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00C0` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting job points information.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | };
26 | ```
27 |
28 | ## Packet Fields
29 |
30 | The following information describes the structures outlined above.
31 |
32 | ## Structure Fields (`packet_t`)
33 |
34 | ### `id`, `size`, `sync`
35 |
36 | _These fields are part of the packet header._
37 |
38 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
39 |
--------------------------------------------------------------------------------
/world/client/0x00C3/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GROUP_COMLINK_MAKE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GROUP_COMLINK_MAKE` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00C3` |
8 | | **Size** | `0x0006` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to create a link pearl for an equipped linkshell.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_GROUP_COMLINK_MAKE
20 | struct GP_CLI_GROUP_COMLINK_MAKE
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t State; // PS2: State
26 | uint8_t LinkshellId;// PS2: (New; did not exist.)
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_CLI_GROUP_COMLINK_MAKE`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `State`
43 |
44 | _The command state._
45 |
46 | The client will default this value to `0`. However, this value does come from the clients input to the given command, such as `/makelinkshell 4`. If this value is anything other than `0`, then it will fail to do anything on the server side.
47 |
48 | ### `LinkshellId`
49 |
50 | _The linkshell id._
51 |
52 | This value is set to the linkshell id that is having a pearl created for it.
53 |
54 | - `1` - _Linkshell 1_
55 | - `2` - _Linkshell 2_
56 |
--------------------------------------------------------------------------------
/world/client/0x00C9/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_MYROOM_ENTER`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_MYROOM_ENTER` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00C9` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | > [!NOTE]
16 | > This is a special GM-related packet!
17 |
18 | This packet is used with the GM command `//myroom`.
19 |
20 | ## Packet Layout
21 |
22 | The layout of this packet is the following:
23 |
24 | ```cpp
25 | // PS2: _GP_MYROOM_GATE_REQ
26 | struct _GP_MYROOM_GATE_REQ
27 | {
28 | uint16_t id: 9;
29 | uint16_t size: 7;
30 | uint16_t sync;
31 | uint16_t No; // PS2: No
32 | uint16_t unknown00; // PS2: (New; did not exist.)
33 | };
34 | ```
35 |
36 | ## Packet Fields
37 |
38 | The following information describes the structures outlined above.
39 |
40 | ## Structure Fields (`_GP_MYROOM_GATE_REQ`)
41 |
42 | ### `id`, `size`, `sync`
43 |
44 | _These fields are part of the packet header._
45 |
46 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
47 |
48 | ### `No`
49 |
50 | _Unknown._
51 |
52 | This value is assumed to be the server id of the characters mog house to enter.
53 |
54 | ### `unknown00`
55 |
56 | _Unknown._
57 |
58 | The purpose of this value is unknown.
59 |
--------------------------------------------------------------------------------
/world/client/0x00CA/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_MYROOM_EXIT`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_MYROOM_EXIT` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00CA` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | > [!NOTE]
16 | > This is a special GM-related packet!
17 |
18 | This packet is used with the GM command `//myroom`.
19 |
20 | ## Packet Layout
21 |
22 | The layout of this packet is the following:
23 |
24 | ```cpp
25 | // PS2: _GP_MYROOM_GATE_REQ
26 | struct _GP_MYROOM_GATE_REQ
27 | {
28 | uint16_t id: 9;
29 | uint16_t size: 7;
30 | uint16_t sync;
31 | uint16_t No; // PS2: No
32 | uint16_t unknown00; // PS2: (New; did not exist.)
33 | };
34 | ```
35 |
36 | ## Packet Fields
37 |
38 | The following information describes the structures outlined above.
39 |
40 | ## Structure Fields (`_GP_MYROOM_GATE_REQ`)
41 |
42 | ### `id`, `size`, `sync`
43 |
44 | _These fields are part of the packet header._
45 |
46 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
47 |
48 | ### `No`
49 |
50 | _Unused._
51 |
52 | The client does not use this value with this packet.
53 |
54 | ### `unknown00`
55 |
56 | _Unused._
57 |
58 | The client does not use this value with this packet.
59 |
60 | ## Additional Information
61 |
62 | This packet shares the same structure as the `0x00C9` packet. However, the client does not use the packets fields with this version of the packet. The client sends this packet if the GM is already within a mog house when using the `//myroom` command again, regardless of any parameters given.
63 |
--------------------------------------------------------------------------------
/world/client/0x00CE/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_MYROOM_RAISE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_MYROOM_RAISE` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00CE` |
8 | | **Size** | `0x000A` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | The purpose of this packet is unknown.
16 |
17 | ## Packet Layout
18 |
19 | The layout of this packet is the following:
20 |
21 | ```cpp
22 | // PS2: (New; did not exist.)
23 | struct packet_t
24 | {
25 | uint16_t id: 9;
26 | uint16_t size: 7;
27 | uint16_t sync;
28 | uint16_t unknown00;
29 | uint16_t unknown01;
30 | uint8_t unknown02;
31 | uint8_t unknown03;
32 | };
33 | ```
34 |
35 | ## Packet Fields
36 |
37 | The following information describes the structures outlined above.
38 |
39 | ## Structure Fields (`packet_t`)
40 |
41 | ### `id`, `size`, `sync`
42 |
43 | _These fields are part of the packet header._
44 |
45 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
46 |
47 | ### `unknown00`
48 |
49 | _Unknown._
50 |
51 | ### `unknown01`
52 |
53 | _Unknown._
54 |
55 | ### `unknown02`
56 |
57 | _Unknown._
58 |
59 | ### `unknown03`
60 |
61 | _Unknown._
62 |
63 | ## Additional Information
64 |
65 | This packet is deprecated and no longer used by the client. While it is connected to the client command `MYROOM_RAISE`, there is no usage of the function that generates the packet. The original PS2 beta does not make use of this packet id at all either, thus the function was added sometime after the PS2 beta period.
66 |
--------------------------------------------------------------------------------
/world/client/0x00CF/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_MYROOM_HARVEST`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_MYROOM_HARVEST` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00CF` |
8 | | **Size** | `0x000A` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | The purpose of this packet is unknown.
16 |
17 | ## Packet Layout
18 |
19 | The layout of this packet is the following:
20 |
21 | ```cpp
22 | // PS2: (New; did not exist.)
23 | struct packet_t
24 | {
25 | uint16_t id: 9;
26 | uint16_t size: 7;
27 | uint16_t sync;
28 | uint16_t unknown00;
29 | uint16_t unknown01;
30 | uint8_t unknown02;
31 | uint8_t unknown03;
32 | };
33 | ```
34 |
35 | ## Packet Fields
36 |
37 | The following information describes the structures outlined above.
38 |
39 | ## Structure Fields (`packet_t`)
40 |
41 | ### `id`, `size`, `sync`
42 |
43 | _These fields are part of the packet header._
44 |
45 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
46 |
47 | ### `unknown00`
48 |
49 | _Unknown._
50 |
51 | ### `unknown01`
52 |
53 | _Unused._
54 |
55 | The client does not use this value.
56 |
57 | ### `unknown02`
58 |
59 | _Unknown._
60 |
61 | ### `unknown03`
62 |
63 | _Unused._
64 |
65 | The client does not use this value.
66 |
67 | ## Additional Information
68 |
69 | This packet is deprecated and no longer used by the client. While it is connected to the client command `MYROOM_HARVEST`, there is no usage of the function that generates the packet. The original PS2 beta does not make use of this packet id at all either, thus the function was added sometime after the PS2 beta period.
70 |
--------------------------------------------------------------------------------
/world/client/0x00D0/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_MYROOM_DIARY`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_MYROOM_DIARY` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00D0` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | The purpose of this packet is unknown. The below information is based on the PS2 data.
16 |
17 | ## Packet Layout
18 |
19 | The layout of this packet is the following:
20 |
21 | ```cpp
22 | // PS2: _GP_MYROOM_DIARY_REQ
23 | struct _GP_MYROOM_DIARY_REQ
24 | {
25 | uint16_t id: 9;
26 | uint16_t size: 7;
27 | uint16_t sync;
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`_GP_MYROOM_DIARY_REQ`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ## Additional Information
44 |
45 | The naming of this packet and the response packet information from the server implies that this may have been used allow players to view another players lifetime statistics. _(Kill count, death count, other interaction stats, etc.)_ Or to have some kind of guest book system when visiting others' mog houses.
46 |
--------------------------------------------------------------------------------
/world/client/0x00D1/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_MYROOM_PLACE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_MYROOM_PLACE` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00D1` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | The purpose of this packet is unknown. _(It appears to be the old furniture placement request packet or a GM command based packet.)_
16 |
17 | ## Packet Layout
18 |
19 | The layout of this packet is the following:
20 |
21 | ```cpp
22 | // PS2: _GP_MYROOM_PLACE_REQ
23 | struct _GP_MYROOM_PLACE_REQ
24 | {
25 | uint16_t id: 9;
26 | uint16_t size: 7;
27 | uint16_t sync;
28 | uint16_t ItemNo; // PS2: ItemNo
29 | int8_t X; // PS2: X
30 | int8_t Y; // PS2: Y
31 | int8_t Z; // PS2: Z
32 | int8_t V; // PS2: V
33 | uint8_t TableNo; // PS2: TableNo
34 | uint8_t padding00; // PS2: (New; did not exist.)
35 | };
36 | ```
37 |
38 | ## Packet Fields
39 |
40 | The following information describes the structures outlined above.
41 |
42 | ## Structure Fields (`_GP_MYROOM_PLACE_REQ`)
43 |
44 | ### `id`, `size`, `sync`
45 |
46 | _These fields are part of the packet header._
47 |
48 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
49 |
50 | ### `ItemNo`
51 |
52 | _Unknown._
53 |
54 | ### `X`
55 |
56 | _Unknown._
57 |
58 | ### `Y`
59 |
60 | _Unknown._
61 |
62 | ### `Z`
63 |
64 | _Unknown._
65 |
66 | ### `V`
67 |
68 | _Unknown._
69 |
70 | ### `TableNo`
71 |
72 | _Unknown._
73 |
74 | ### `padding00`
75 |
76 | _Unknown._
77 |
--------------------------------------------------------------------------------
/world/client/0x00D2/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_MAP_GROUP`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_MAP_GROUP` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00D2` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting party member map marker information.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: _GP_MAP_GROUP_REQ
20 | struct _GP_MAP_GROUP_REQ
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t ZoneNo; // PS2: ZoneNo
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`_GP_MAP_GROUP_REQ`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `ZoneNo`
42 |
43 | _The local clients current zone id._
44 |
--------------------------------------------------------------------------------
/world/client/0x00DD/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_EQUIP_INSPECT`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_EQUIP_INSPECT` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00DD` |
8 | | **Size** | `0x0010` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when inspecting entities. This is used for several means of inspection such as:
13 |
14 | - `/check`
15 | - `/checkname`
16 | - `/checkparam`
17 |
18 | ## Packet Layout
19 |
20 | The layout of this packet is the following:
21 |
22 | ```cpp
23 | // PS2: GP_CLI_EQUIP_INSPECT
24 | struct GP_CLI_EQUIP_INSPECT
25 | {
26 | uint16_t id: 9;
27 | uint16_t size: 7;
28 | uint16_t sync;
29 | uint32_t UniqueNo; // PS2: UniqueNo
30 | uint32_t ActIndex; // PS2: ActIndex
31 | uint8_t Kind; // PS2: (New; did not exist.)
32 | uint8_t padding00[3]; // PS2: (New; did not exist.)
33 | };
34 | ```
35 |
36 | ## Packet Fields
37 |
38 | The following information describes the structures outlined above.
39 |
40 | ## Structure Fields (`GP_CLI_EQUIP_INSPECT`)
41 |
42 | ### `id`, `size`, `sync`
43 |
44 | _These fields are part of the packet header._
45 |
46 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
47 |
48 | ### `UniqueNo`
49 |
50 | _The server id of the entity being inspected._
51 |
52 | ### `ActIndex`
53 |
54 | _The target index of the entity being inspected._
55 |
56 | ### `Kind`
57 |
58 | _The kind of inspection being performed._
59 |
60 | | Kind | Purpose |
61 | | --- | --- |
62 | | `0x00` | _Used with: `/check`._ |
63 | | `0x01` | _Used with: `/checkname`_ |
64 | | `0x02` | _Used with: `/checkparam`_ |
65 |
66 | ### `padding00`
67 |
68 | _Padding; unused._
69 |
--------------------------------------------------------------------------------
/world/client/0x00DE/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_INSPECT_MESSAGE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_INSPECT_MESSAGE` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00DE` |
8 | | **Size** | `0x0080` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when changing their bazaar message.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_INSPECT_MESSAGE
20 | struct GP_CLI_INSPECT_MESSAGE
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t sInspectMessage[123]; // PS2: sInspectMessage
26 | uint8_t padding00; // PS2: (New; did not exist.)
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_CLI_INSPECT_MESSAGE`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `sInspectMessage`
43 |
44 | _The bazaar message._
45 |
46 | This value holds the full bazaar message. While the client does show the bazaar message as three separate lines visually, the actual buffer that holds the lines is a single array. Each line takes up 40 characters within the array, with a remaining 3 characters at the end being unused. The manner in which this buffer works is also different than other normal strings. By default the client treats every unused character in this buffer as a space _(`0x20`)_ character.
47 |
48 | ### `padding00`
49 |
50 | _Padding; unused._
51 |
--------------------------------------------------------------------------------
/world/client/0x00E7/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_REQLOGOUT`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_REQLOGOUT` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00E7` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to logout or shutdown.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_REQLOGOUT
20 | struct GP_CLI_REQLOGOUT
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint16_t Mode; // PS2: Mode
26 | uint16_t Kind; // PS2: (New; did not exist.)
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_CLI_REQLOGOUT`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `Mode`
43 |
44 | _The packet mode._
45 |
46 | This value is used to indicate the mode of the command. _(Toggle, On, Off)_
47 |
48 | | Mode | Purpose |
49 | | --- | --- |
50 | | `0x00` | _Mode: (Toggle)_ |
51 | | `0x01` | _Mode: `on` (Used with `/logout on`)_ |
52 | | `0x02` | _Mode: `off` (Used with both `/logout off` and `/shutdown off`)_ |
53 | | `0x03` | _Mode: `on` (Used with: `/shutdown on`)_ |
54 |
55 | ### `Kind`
56 |
57 | _The packet kind._
58 |
59 | This value is used to determine which command the client has used to cause this packet to be sent.
60 |
61 | | Kind | Purpose |
62 | | --- | --- |
63 | | `0x01` | _Logout (`/logout`)_ |
64 | | `0x03` | _Shutdown (`/shutdown`)_ |
65 |
--------------------------------------------------------------------------------
/world/client/0x00E8/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_CAMP`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_CAMP` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00E8` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to heal. (`/heal`)
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_CAMP
20 | struct GP_CLI_CAMP
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t Mode; // PS2: Mode
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_CLI_CAMP`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `Mode`
42 |
43 | _The packet mode._
44 |
45 | This value is used to indicate the mode of the command. _(Toggle, On, Off)_
46 |
47 | | Mode | Purpose |
48 | | --- | --- |
49 | | `0x00` | _Mode: (Toggle)_ |
50 | | `0x01` | _Mode: `on`_ |
51 | | `0x02` | _Mode: `off`_ |
52 |
--------------------------------------------------------------------------------
/world/client/0x00E9/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_GLOBALUNIQUENO_REQ`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_GLOBALUNIQUENO_REQ` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00E9` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | The purpose of this packet is unknown.
16 |
17 | ## Packet Layout
18 |
19 | The layout of this packet is the following:
20 |
21 | ```cpp
22 | // PS2: GP_CLI_GLOBALUNIQUENO_REQ
23 | struct GP_CLI_GLOBALUNIQUENO_REQ
24 | {
25 | uint16_t id: 9;
26 | uint16_t size: 7;
27 | uint16_t sync;
28 | uint32_t UniqueNo; // PS2: UniqueNo
29 | uint16_t ActIndex; // PS2: ActIndex
30 | uint16_t padding00; // PS2: dammy
31 | };
32 | ```
33 |
34 | ## Packet Fields
35 |
36 | The following information describes the structures outlined above.
37 |
38 | ## Structure Fields (`GP_CLI_GLOBALUNIQUENO_REQ`)
39 |
40 | ### `id`, `size`, `sync`
41 |
42 | _These fields are part of the packet header._
43 |
44 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
45 |
46 | ### `UniqueNo`
47 |
48 | _The entity server id._
49 |
50 | ### `ActIndex`
51 |
52 | _The entity target index._
53 |
54 | ### `padding00`
55 |
56 | _Padding; unused._
57 |
58 | ## Additional Information
59 |
60 | This packet is not used by the client but the function to send it still exists. It is assumed, based on the packets command name, that this was likely used with a GM command.
61 |
--------------------------------------------------------------------------------
/world/client/0x00EA/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_SIT`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_SIT` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00EA` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to sit. (`/sit`)
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_SIT
20 | struct GP_CLI_SIT
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t Mode; // PS2: Mode
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_CLI_SIT`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `Mode`
42 |
43 | _The packet mode._
44 |
45 | This value is used to indicate the mode of the command. _(Toggle, On, Off)_
46 |
47 | | Mode | Purpose |
48 | | --- | --- |
49 | | `0x00` | _Mode: (Toggle)_ |
50 | | `0x01` | _Mode: `on`_ |
51 | | `0x02` | _Mode: `off`_ |
52 |
--------------------------------------------------------------------------------
/world/client/0x00EB/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_REQSUBMAPNUM`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_REQSUBMAPNUM` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00EB` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client during events where it needs information about a sub-map.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_REQSUBMAPNUM
20 | struct GP_CLI_REQSUBMAPNUM
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | };
26 | ```
27 |
28 | ## Packet Fields
29 |
30 | The following information describes the structures outlined above.
31 |
32 | ## Structure Fields (`GP_CLI_REQSUBMAPNUM`)
33 |
34 | ### `id`, `size`, `sync`
35 |
36 | _These fields are part of the packet header._
37 |
38 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
39 |
--------------------------------------------------------------------------------
/world/client/0x00EC/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_REQLOGOUTINFO`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_REQLOGOUTINFO` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00EC` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | The purpose of this packet is unknown.
16 |
17 | ## Packet Layout
18 |
19 | The layout of this packet is the following:
20 |
21 | ```cpp
22 | // PS2: GP_CLI_REQLOGOUTINFO
23 | struct GP_CLI_REQLOGOUTINFO
24 | {
25 | uint16_t id: 9;
26 | uint16_t size: 7;
27 | uint16_t sync;
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_CLI_REQLOGOUTINFO`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
--------------------------------------------------------------------------------
/world/client/0x00F0/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_RESCUE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_RESCUE` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00F0` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to be unstuck via the GM Help Desk system.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_RESCUE
20 | struct GP_CLI_RESCUE
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t State; // PS2: State
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_CLI_RESCUE`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `State`
42 |
43 | _The client state._
44 |
45 | This value is always set to `0`.
46 |
47 | ## Additional Information
48 |
49 | This packet is sent by the client when requesting to be unstuck via the GM Help Desk system. The client will only send this packet when selecting the following menu option: `Help Desk -> I can't move my character or log out of the game. -> My character is stuck. -> I am stuck and need to get out. My movement is not being restricted by a GM.`
50 |
--------------------------------------------------------------------------------
/world/client/0x00F1/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_BUFFCANCEL`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_BUFFCANCEL` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00F1` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when cancelling a buff.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_BUFFCANCEL
20 | struct GP_CLI_BUFFCANCEL
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint16_t BuffNo; // PS2: BuffNo
26 | uint16_t padding00; // PS2: Dammy
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_CLI_BUFFCANCEL`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `BuffNo`
43 |
44 | _The id of the buff being cancelled._
45 |
46 | ### `padding00`
47 |
48 | _Padding; unused._
49 |
--------------------------------------------------------------------------------
/world/client/0x00F4/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_TRACKING_LIST`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_TRACKING_LIST` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00F4` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting the current wide scan list for the entities around the player.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_TRACKING_LIST
20 | struct GP_CLI_TRACKING_LIST
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t SendFlg; // PS2: SendFlg
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_CLI_TRACKING_LIST`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `SendFlg`
42 |
43 | _Unknown._
44 |
45 | The purpose of this flag is unknown. The client always sets this value to `1`.
46 |
--------------------------------------------------------------------------------
/world/client/0x00F5/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_TRACKING_START`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_TRACKING_START` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00F5` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to begin tracking an entity through the wide scan system.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_TRACKING_START
20 | struct GP_CLI_TRACKING_START
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t ActIndex; // PS2: ActIndex
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_CLI_TRACKING_START`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `ActIndex`
42 |
43 | _The target index of the entity the client wishes to track._
44 |
--------------------------------------------------------------------------------
/world/client/0x00F6/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_TRACKING_END`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_TRACKING_END` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00F6` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to end tracking an entity through the wide scan system.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_TRACKING_END
20 | struct GP_CLI_TRACKING_END
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t padding00; // PS2: Dammy
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_CLI_TRACKING_END`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `padding00`
42 |
43 | _Padding; unused._
44 |
45 | The client always sets this value to `0`.
46 |
--------------------------------------------------------------------------------
/world/client/0x00FA/left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atom0s/XiPackets/6731598c33ddb5aea00b8ce4c7dd965a188bb6f6/world/client/0x00FA/left.png
--------------------------------------------------------------------------------
/world/client/0x00FA/right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atom0s/XiPackets/6731598c33ddb5aea00b8ce4c7dd965a188bb6f6/world/client/0x00FA/right.png
--------------------------------------------------------------------------------
/world/client/0x00FB/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_MYROOM_BANKIN`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_MYROOM_BANKIN` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00FB` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when removing a placed piece of furniture in their mog house.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_MYROOM_BANKIN
20 | struct GP_CLI_MYROOM_BANKIN
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint16_t MyroomItemNo; // PS2: MyroomItemNo
26 | uint8_t MyroomItemIndex;// PS2: MyroomItemIndex
27 | uint8_t MyroomCategory; // PS2: (New; did not exist.)
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_CLI_MYROOM_BANKIN`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `MyroomItemNo`
44 |
45 | _The item id of the furnishing being modified._
46 |
47 | ### `MyroomItemIndex`
48 |
49 | _The index within the container that holds the furnishing being modified._
50 |
51 | ### `MyroomCategory`
52 |
53 | _The item container that holds the furnishing being modified._
54 |
--------------------------------------------------------------------------------
/world/client/0x00FD/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_MYROOM_PLANT_CHECK`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_MYROOM_PLANT_CHECK` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00FD` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when examining a plant within their mog house.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_MYROOM_PLANT_CHECK
20 | struct GP_CLI_MYROOM_PLANT_CHECK
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint16_t MyroomPlantItemNo; // PS2: MyroomPlantItemNo
26 | uint8_t MyroomPlantItemIndex; // PS2: MyroomPlantItemIndex
27 | uint8_t MyroomPlantCategory; // PS2: (New; did not exist.)
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_CLI_MYROOM_PLANT_CHECK`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `MyroomPlantItemNo`
44 |
45 | _The item id of the plant/pot being examined._
46 |
47 | ### `MyroomPlantItemIndex`
48 |
49 | _The index within the container that the plant/pot is located._
50 |
51 | ### `MyroomPlantCategory`
52 |
53 | _The container that holds the plant/pot._
54 |
--------------------------------------------------------------------------------
/world/client/0x00FF/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_MYROOM_PLANT_STOP`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_MYROOM_PLANT_STOP` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x00FF` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when drying out a plant within their mog house.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_MYROOM_PLANT_STOP
20 | struct GP_CLI_MYROOM_PLANT_STOP
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint16_t MyroomPlantItemNo; // PS2: MyroomPlantItemNo
26 | uint8_t MyroomPlantItemIndex; // PS2: MyroomPlantItemIndex
27 | uint8_t MyroomPlantCategory; // PS2: (New; did not exist.)
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_CLI_MYROOM_PLANT_STOP`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `MyroomPlantItemNo`
44 |
45 | _The item id of the plant/pot being dried out._
46 |
47 | ### `MyroomPlantItemIndex`
48 |
49 | _The index within the container that the plant/pot is located._
50 |
51 | ### `MyroomPlantCategory`
52 |
53 | _The container that holds the plant/pot._
54 |
--------------------------------------------------------------------------------
/world/client/0x0100/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_MYROOM_JOB`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_MYROOM_JOB` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0100` |
8 | | **Size** | `0x0006` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to change jobs.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_MYROOM_JOB
20 | struct GP_CLI_MYROOM_JOB
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t MainJobIndex; // PS2: MainJobIndex
26 | uint8_t SupportJobIndex;// PS2: SupportJobIndex
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_CLI_MYROOM_JOB`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `MainJobIndex`
43 |
44 | _The index of the main job the client wishes to change to._
45 |
46 | This value is set to `0` when the client is changing their support job.
47 |
48 | ### `SupportJobIndex`
49 |
50 | _The index of the support job the client wishes to change to._
51 |
52 | This value is set to `0` when the client is changing their main job.
53 |
--------------------------------------------------------------------------------
/world/client/0x0101/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_MYROOM_DANCER`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_MYROOM_DANCER` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0101` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | > [!NOTE]
16 | > This is a special GM-related packet!
17 |
18 | This packet is used with the GM command `//dancer`. The purpose of this packet is unknown.
19 |
20 | ## Packet Layout
21 |
22 | The layout of this packet is the following:
23 |
24 | ```cpp
25 | // PS2: GP_CLI_MYROOM_DANCER
26 | struct GP_CLI_MYROOM_DANCER
27 | {
28 | uint16_t id: 9;
29 | uint16_t size: 7;
30 | uint16_t sync;
31 | };
32 | ```
33 |
34 | ## Packet Fields
35 |
36 | The following information describes the structures outlined above.
37 |
38 | ## Structure Fields (`GP_CLI_MYROOM_DANCER`)
39 |
40 | ### `id`, `size`, `sync`
41 |
42 | _These fields are part of the packet header._
43 |
44 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
45 |
--------------------------------------------------------------------------------
/world/client/0x0104/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_BAZAAR_EXIT`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_BAZAAR_EXIT` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0104` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when exiting a bazaar.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_BAZAAR_EXIT
20 | struct GP_CLI_BAZAAR_EXIT
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | };
26 | ```
27 |
28 | ## Packet Fields
29 |
30 | The following information describes the structures outlined above.
31 |
32 | ## Structure Fields (`GP_CLI_BAZAAR_EXIT`)
33 |
34 | ### `id`, `size`, `sync`
35 |
36 | _These fields are part of the packet header._
37 |
38 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
39 |
--------------------------------------------------------------------------------
/world/client/0x0105/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_BAZAAR_LIST`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_BAZAAR_LIST` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0105` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to view a bazaar.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_BAZAAR_LIST
20 | struct GP_CLI_BAZAAR_LIST
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t UniqueNo; // PS2: UniqueNo
26 | uint16_t ActIndex; // PS2: ActIndex
27 | uint16_t padding00; // PS2: Dammy
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_CLI_BAZAAR_LIST`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `UniqueNo`
44 |
45 | _The server id of the player whos bazaar is being requested._
46 |
47 | ### `ActIndex`
48 |
49 | _The target index of the player whos bazaar is being requested._
50 |
51 | ### `padding00`
52 |
53 | _Padding; unused._
54 |
--------------------------------------------------------------------------------
/world/client/0x0106/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_BAZAAR_BUY`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_BAZAAR_BUY` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0106` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to purchase an item from a bazaar.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_BAZAAR_BUY
20 | struct GP_CLI_BAZAAR_BUY
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t BazaarItemIndex;// PS2: BazaarItemIndex
26 | uint8_t padding00[3]; // PS2: Dammy
27 | uint32_t BuyNum; // PS2: BuyNum
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_CLI_BAZAAR_BUY`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `BazaarItemIndex`
44 |
45 | _The index within the bazaar where the item being requested for purchase is located._
46 |
47 | ### `padding00`
48 |
49 | _Padding; unused._
50 |
51 | ### `BuyNum`
52 |
53 | _The count of items the client is requesting to purchase._
54 |
--------------------------------------------------------------------------------
/world/client/0x0109/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_BAZAAR_OPEN`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_BAZAAR_OPEN` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0109` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when exiting the bazaar 'Set Prices' menu with at least one item having a sale price set.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_BAZAAR_OPEN
20 | struct GP_CLI_BAZAAR_OPEN
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | };
26 | ```
27 |
28 | ## Packet Fields
29 |
30 | The following information describes the structures outlined above.
31 |
32 | ## Structure Fields (`GP_CLI_BAZAAR_OPEN`)
33 |
34 | ### `id`, `size`, `sync`
35 |
36 | _These fields are part of the packet header._
37 |
38 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
39 |
40 | ## Additional Information
41 |
42 | The client sends this packet when exiting the bazaar 'Set Prices' menu after the client has set a price on at least one item. If the client unsets all prices then exits the menu, this packet will not be sent. _(The client makes use of packet `0x010A` to update a bazaar items price.)_
43 |
--------------------------------------------------------------------------------
/world/client/0x010A/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_BAZAAR_ITEMSET`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_BAZAAR_ITEMSET` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x010A` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when setting an items sale price within the players personal bazaar.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_BAZAAR_ITEMSET
20 | struct GP_CLI_BAZAAR_ITEMSET
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t ItemIndex; // PS2: ItemIndex
26 | uint8_t padding00[3]; // PS2: Dammy
27 | uint32_t Price; // PS2: Price
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_CLI_BAZAAR_ITEMSET`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `ItemIndex`
44 |
45 | _The index of the item in the clients inventory._
46 |
47 | ### `padding00`
48 |
49 | _Padding; unused._
50 |
51 | ### `Price`
52 |
53 | _The item sale price._
54 |
55 | This value is set to the price the client wishes to sell the item for. If the client wishes to no longer sell the item, this value will be `0`.
56 |
--------------------------------------------------------------------------------
/world/client/0x010B/README.md:
--------------------------------------------------------------------------------
1 | # `GP_CLI_COMMAND_BAZAAR_CLOSE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_CLI_COMMAND_BAZAAR_CLOSE` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x010B` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when entering the bazaar 'Set Prices' menu.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: GP_CLI_BAZAAR_CLOSE
20 | struct GP_CLI_BAZAAR_CLOSE
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t AllListClearFlg; // PS2: AllListClearFlg
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_CLI_BAZAAR_CLOSE`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `AllListClearFlg`
42 |
43 | _Unknown._
44 |
45 | The client always sets this value to `0`.
46 |
47 | ## Additional Information
48 |
49 | This packet is sent by the client each time it enters the `Set Prices` bazaar menu. This is used to inform the server that it should hide the clients personal bazaar until they have finished updating their desired pricing.
50 |
--------------------------------------------------------------------------------
/world/client/0x010C/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x010C`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x010C` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to start a Records of Eminence objective.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint16_t ObjectiveId;
26 | uint16_t padding00;
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`packet_t`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `ObjectiveId`
43 |
44 | _The Records of Eminence object id._
45 |
46 | This value holds the normalized Records of Eminence objective id the client is requesting to set. This value is normalized by subtracting `57344` from the id before writing it to the packet. _(The client also masks the id to 12 bits, leaving the remaining 4 bits unused.)_
47 |
48 | ### `padding00`
49 |
50 | _Padding; unused._
51 |
--------------------------------------------------------------------------------
/world/client/0x010D/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x010D`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x010D` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to remove an active Records of Eminence objective.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint16_t ObjectiveId;
26 | uint16_t padding00;
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`packet_t`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `ObjectiveId`
43 |
44 | _The Records of Eminence object id._
45 |
46 | This value holds the normalized Records of Eminence objective id the client is requesting to remove. This value is normalized by subtracting `57344` from the id before writing it to the packet. _(The client also masks the id to 12 bits, leaving the remaining 4 bits unused.)_
47 |
48 | ### `padding00`
49 |
50 | _Padding; unused._
51 |
--------------------------------------------------------------------------------
/world/client/0x010E/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x010E`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x010E` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to claim a completed Records of Eminence objectives reward.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint16_t ObjectiveId;
26 | uint16_t padding00;
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`packet_t`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `ObjectiveId`
43 |
44 | _The Records of Eminence object id._
45 |
46 | This value holds the normalized Records of Eminence objective id the client is requesting to claim the reward for. This value is normalized by subtracting `57344` from the id before writing it to the packet. _(The client also masks the id to 12 bits, leaving the remaining 4 bits unused.)_
47 |
48 | ### `padding00`
49 |
50 | _Padding; unused._
51 |
--------------------------------------------------------------------------------
/world/client/0x010F/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x010F`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x010F` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting the information to populate the Currencies window.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | };
26 | ```
27 |
28 | ## Packet Fields
29 |
30 | The following information describes the structures outlined above.
31 |
32 | ## Structure Fields (`packet_t`)
33 |
34 | ### `id`, `size`, `sync`
35 |
36 | _These fields are part of the packet header._
37 |
38 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
39 |
--------------------------------------------------------------------------------
/world/client/0x0111/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x0111`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0111` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | This packet was sent by the client when requesting to lock their style. This packet is no longer used as the style lock system has undergone several changes since this packet was first added. Other packets are now used to handle this feature.
16 |
17 | ## Packet Layout
18 |
19 | The layout of this packet is the following:
20 |
21 | ```cpp
22 | // PS2: (New; did not exist.)
23 | struct packet_t
24 | {
25 | uint16_t id: 9;
26 | uint16_t size: 7;
27 | uint16_t sync;
28 | uint32_t Status;
29 | };
30 | ```
31 |
32 | ## Packet Fields
33 |
34 | The following information describes the structures outlined above.
35 |
36 | ## Structure Fields (`packet_t`)
37 |
38 | ### `id`, `size`, `sync`
39 |
40 | _These fields are part of the packet header._
41 |
42 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
43 |
44 | ### `Status`
45 |
46 | _The style lock status._
47 |
48 | This value was used to determine if the client wishes to lock or unlock their style.
49 |
50 | - `0` - _Unlock_
51 | - `1` - _Lock_
52 |
--------------------------------------------------------------------------------
/world/client/0x0113/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x0113`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0113` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting to sit in a chair. _(`/sitchair`)_
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t Mode;
26 | uint32_t ChairId;
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`packet_t`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `Mode`
43 |
44 | _The packet mode._
45 |
46 | This value is used to indicate the mode of the command. _(Toggle, On, Off)_
47 |
48 | | Mode | Purpose |
49 | | --- | --- |
50 | | `0x00` | _Mode: (Toggle)_ |
51 | | `0x01` | _Mode: `on`_ |
52 | | `0x02` | _Mode: `off`_ |
53 |
54 | ### `ChairId`
55 |
56 | _The id of the chair the client wishes to sit on._
57 |
58 | This value is default to `0` if no argument was given.
59 |
--------------------------------------------------------------------------------
/world/client/0x0114/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x0114`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0114` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting the current maps markers. _(ie. Homepoint Crystals, Abyssea Maws, Survival Guides, Waypoints, Telepoints, etc.)_
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | };
26 | ```
27 |
28 | ## Packet Fields
29 |
30 | The following information describes the structures outlined above.
31 |
32 | ## Structure Fields (`packet_t`)
33 |
34 | ### `id`, `size`, `sync`
35 |
36 | _These fields are part of the packet header._
37 |
38 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
39 |
--------------------------------------------------------------------------------
/world/client/0x0115/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x0115`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0115` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting the information to populate the Currencies 2 window.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | };
26 | ```
27 |
28 | ## Packet Fields
29 |
30 | The following information describes the structures outlined above.
31 |
32 | ## Structure Fields (`packet_t`)
33 |
34 | ### `id`, `size`, `sync`
35 |
36 | _These fields are part of the packet header._
37 |
38 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
39 |
--------------------------------------------------------------------------------
/world/client/0x0117/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x0117`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0117` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting its Unity quest information.
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t Kind;
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`packet_t`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ### `Kind`
42 |
43 | _The packet kind._
44 |
45 | This value is always set to `0`.
46 |
47 | The retail client has handling for additional `Kind` values _(`1` and `2`)_ but no call is made that would produce these values to happen.
48 |
49 | ## Additional Information
50 |
51 | The client sends this packet when requesting additional Unity information. This packet will be used when the client does the following:
52 |
53 | - Opening the `Main Menu -> Status -> Unity -> Ranking Info -> (either sub menu)` menus.
54 | - Opening the `Main Menu -> Quests -> Records of Eminence -> Current` menu.
55 | - Opening the `Main Menu -> Quests -> Records of Eminence -> Objective List` menu.
56 |
--------------------------------------------------------------------------------
/world/client/0x0118/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x0118`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0118` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when changing their Unity chat setting. _(Active or Inactive)_
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t Mode;
26 | uint8_t padding00[3];
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`packet_t`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `Mode`
43 |
44 | _The chat mode._
45 |
46 | | Mode | Purpose |
47 | | --- | --- |
48 | | `0x00` | _Inactive_ |
49 | | `0x01` | _Active_ |
50 |
51 | ### `padding00`
52 |
53 | _Padding; unused._
54 |
--------------------------------------------------------------------------------
/world/client/0x0119/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x0119`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x0119` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when requesting the its available chairs (`/sitchair`) and job emotes (`/jobemote`).
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | };
26 | ```
27 |
28 | ## Packet Fields
29 |
30 | The following information describes the structures outlined above.
31 |
32 | ## Structure Fields (`packet_t`)
33 |
34 | ### `id`, `size`, `sync`
35 |
36 | _These fields are part of the packet header._
37 |
38 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
39 |
--------------------------------------------------------------------------------
/world/client/0x011A/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x011A`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x011A` |
8 | | **Size** | `0x0004` |
9 |
10 | ## Description
11 |
12 | > [!NOTE]
13 | > Deprecated: This packet is no longer used.
14 |
15 | The purpose of this packet is unknown.
16 |
17 | ## Packet Layout
18 |
19 | The layout of this packet is the following:
20 |
21 | ```cpp
22 | // PS2: (New; did not exist.)
23 | struct packet_t
24 | {
25 | uint16_t id: 9;
26 | uint16_t size: 7;
27 | uint16_t sync;
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`packet_t`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
--------------------------------------------------------------------------------
/world/client/0x011B/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x011B`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x011B` |
8 | | **Size** | `0x0008` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when changing their job mastery display. _(`/jobmasterdisp`)_
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint8_t Mode;
26 | uint8_t padding00[3];
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`packet_t`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `Mode`
43 |
44 | _The packet mode._
45 |
46 | This value is used to indicate the mode of the command.
47 |
48 | | Mode | Purpose |
49 | | --- | --- |
50 | | `0x00` | _Mode: `off`_ |
51 | | `0x01` | _Mode: `on`_ |
52 |
53 | ### `padding00`
54 |
55 | _Padding; unused._
56 |
--------------------------------------------------------------------------------
/world/client/0x011C/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x011C`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x011C` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when using the party request command. _(`/partyrequestcmd`)_
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t UniqueNo;
26 | uint16_t ActIndex;
27 | uint8_t Kind;
28 | uint8_t padding00;
29 | };
30 | ```
31 |
32 | ## Packet Fields
33 |
34 | The following information describes the structures outlined above.
35 |
36 | ## Structure Fields (`packet_t`)
37 |
38 | ### `id`, `size`, `sync`
39 |
40 | _These fields are part of the packet header._
41 |
42 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
43 |
44 | ### `UniqueNo`
45 |
46 | _The server id of the player whos party the client is requesting to join._
47 |
48 | ### `ActIndex`
49 |
50 | _The target index of the player whos party the client is requesting to join._
51 |
52 | ### `Kind`
53 |
54 | _The packet kind._
55 |
56 | | Kind | Purpose |
57 | | --- | --- |
58 | | `0x00` | _Add - Request to join the target players party._ |
59 | | `0x01` | _Remove - Remove request to join the target players party._ |
60 |
61 | ### `padding00`
62 |
63 | _Padding; unused._
64 |
--------------------------------------------------------------------------------
/world/client/0x011D/README.md:
--------------------------------------------------------------------------------
1 | # `Packet: 0x011D`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Direction** | `C -> S` |
7 | | **OpCode** | `0x011D` |
8 | | **Size** | `0x000C` |
9 |
10 | ## Description
11 |
12 | This packet is sent by the client when using the jump command. _(`/jump`)_
13 |
14 | ## Packet Layout
15 |
16 | The layout of this packet is the following:
17 |
18 | ```cpp
19 | // PS2: (New; did not exist.)
20 | struct packet_t
21 | {
22 | uint16_t id: 9;
23 | uint16_t size: 7;
24 | uint16_t sync;
25 | uint32_t UniqueNo;
26 | uint16_t ActIndex;
27 | uint8_t padding00[2];
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`packet_t`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `UniqueNo`
44 |
45 | _The local clients server id._
46 |
47 | ### `ActIndex`
48 |
49 | _The local clients target index._
50 |
51 | ### `padding00`
52 |
53 | _Padding; unused._
54 |
--------------------------------------------------------------------------------
/world/server/0x0011/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_CHAR_DEL`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_CHAR_DEL` |
6 | | **Client Handler** | `RecvCharDel` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0011` |
9 | | **Size** | `(unknown)` |
10 |
11 | ## Description
12 |
13 | The purpose of this packet is unknown.
14 |
15 | ## Packet Layout
16 |
17 | The current layout of this packet is unknown.
18 |
19 | ```cpp
20 | // PS2: GP_SERV_CHAR_DEL
21 | struct GP_SERV_CHAR_DEL
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_SERV_CHAR_DEL`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ## Additional Information
42 |
43 | The purpose of this packet is unknown and has not been observed in any packet logs. The original PS2 beta information shows this packet may have been used as a means to despawn a player entity. However, both the PS2 and current retail PC handlers for this packet are empty. The packet information is not used at all.
44 |
--------------------------------------------------------------------------------
/world/server/0x001E/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_ITEM_NUM`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_ITEM_NUM` |
6 | | **Client Handlers** | `RecvItemNum`, `RecvItemChange` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x001E` |
9 | | **Size** | `0x000C` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to inform the client that an item change has happened within a container.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_ITEM_NUM
21 | struct GP_SERV_ITEM_NUM
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint32_t ItemNum; // PS2: ItemNum
27 | uint8_t Category; // PS2: Category
28 | uint8_t ItemIndex; // PS2: ItemIndex
29 | uint8_t LockFlg; // PS2: LockFlg
30 | };
31 | ```
32 |
33 | ## Packet Fields
34 |
35 | The following information describes the structures outlined above.
36 |
37 | ## Structure Fields (`GP_SERV_ITEM_NUM`)
38 |
39 | ### `id`, `size`, `sync`
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
44 |
45 | ### `ItemNum`
46 |
47 | _The updated quantity of items to be set._
48 |
49 | ### `Category`
50 |
51 | _The container holding the item being updated._
52 |
53 | ### `ItemIndex`
54 |
55 | _The index inside of the container of the item being updated._
56 |
57 | ### `LockFlg`
58 |
59 | _The item lock flag._
60 |
--------------------------------------------------------------------------------
/world/server/0x001F/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_ITEM_LIST`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_ITEM_LIST` |
6 | | **Client Handlers** | `RecvItemList`, `RecvItemChange` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x001F` |
9 | | **Size** | `0x0010` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to inform the client of an item within a container.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_ITEM_LIST
21 | struct GP_SERV_ITEM_LIST
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint32_t ItemNum; // PS2: ItemNum
27 | uint16_t ItemNo; // PS2: ItemNo
28 | uint8_t Category; // PS2: Category
29 | uint8_t ItemIndex; // PS2: ItemIndex
30 | uint8_t LockFlg; // PS2: LockFlg
31 | };
32 | ```
33 |
34 | ## Packet Fields
35 |
36 | The following information describes the structures outlined above.
37 |
38 | ## Structure Fields (`GP_SERV_ITEM_LIST`)
39 |
40 | ### `id`, `size`, `sync`
41 |
42 | _These fields are part of the packet header._
43 |
44 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
45 |
46 | ### `ItemNum`
47 |
48 | _The quantity of the item._
49 |
50 | ### `ItemNo`
51 |
52 | _The item id._
53 |
54 | ### `Category`
55 |
56 | _The container holding the item._
57 |
58 | ### `ItemIndex`
59 |
60 | _The index inside of the container this item is located._
61 |
62 | ### `LockFlg`
63 |
64 | _The item lock flag._
65 |
--------------------------------------------------------------------------------
/world/server/0x0021/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_ITEM_TRADE_REQ`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_ITEM_TRADE_REQ` |
6 | | **Client Handlers** | `RecvItemTradeReq`, `CTkTrade::TkRecvItemTradeReq` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0021` |
9 | | **Size** | `0x000C` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to inform the player of a trade request.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_ITEM_TRADE_REQ
21 | struct GP_SERV_ITEM_TRADE_REQ
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint32_t UniqueNo; // PS2: UniqueNo
27 | uint16_t ActIndex; // PS2: ActIndex
28 | uint16_t padding00; // PS2: dammy2
29 | };
30 | ```
31 |
32 | ## Packet Fields
33 |
34 | The following information describes the structures outlined above.
35 |
36 | ## Structure Fields (`GP_SERV_ITEM_TRADE_REQ`)
37 |
38 | ### `id`, `size`, `sync`
39 |
40 | _These fields are part of the packet header._
41 |
42 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
43 |
44 | ### `UniqueNo`
45 |
46 | _The server id of the entity who sent the trade request._
47 |
48 | ### `ActIndex`
49 |
50 | _The target index of the entity who sent the trade request._
51 |
52 | ### `padding00`
53 |
54 | _Padding; unused._
55 |
--------------------------------------------------------------------------------
/world/server/0x0024/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_ITEM_PRESENT`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_ITEM_PRESENT` |
6 | | **Client Handler** | `RecvItemPresent` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0024` |
9 | | **Size** | `(Unknown)` |
10 |
11 | ## Description
12 |
13 | Unknown. This packet is assumed to be deprecated.
14 |
15 | > [!WARNING]
16 | > This packets information is dumped from the PS2 beta but was also unused then. Thus the usage of this packet is unknown.
17 |
18 | ## Packet Layout
19 |
20 | The layout of this packet is the following:
21 |
22 | ```cpp
23 | // PS2: GP_SERV_ITEM_PRESENT
24 | struct GP_SERV_ITEM_PRESENT
25 | {
26 | uint16_t id: 9;
27 | uint16_t size: 7;
28 | uint16_t sync;
29 | uint32_t ItemNum; // PS2: ItemNum
30 | uint16_t ItemNo; // PS2: ItemNo
31 | uint8_t ReqID; // PS2: ReqID
32 | uint8_t ReqIndex; // PS2: ReqIndex
33 | uint8_t ItemData[]; // PS2: ItemData
34 | };
35 | ```
36 |
37 | ## Packet Fields
38 |
39 | The following information describes the structures outlined above.
40 |
41 | ## Structure Fields (`GP_SERV_ITEM_PRESENT`)
42 |
43 | ### `id`, `size`, `sync`
44 |
45 | _These fields are part of the packet header._
46 |
47 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
48 |
49 | ### `ItemNum`
50 |
51 | _The item quantity._
52 |
53 | ### `ItemNo`
54 |
55 | _The item id._
56 |
57 | ### `ReqID`
58 |
59 | _Unknown._
60 |
61 | ### `ReqIndex`
62 |
63 | _Unknown._
64 |
65 | ### `ItemData`
66 |
67 | _Unknown._
68 |
--------------------------------------------------------------------------------
/world/server/0x0025/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_ITEM_TRADE_MYLIST`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_ITEM_TRADE_MYLIST` |
6 | | **Client Handler** | `RecvItemTradeMyList` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0025` |
9 | | **Size** | `0x000C` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to inform the player of a trade item update. _(This update is related to the local players items.)_
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_ITEM_TRADE_MYLIST
21 | struct GP_SERV_ITEM_TRADE_MYLIST
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint32_t ItemNum; // PS2: ItemNum
27 | uint16_t ItemNo; // PS2: ItemNo
28 | uint8_t TradeIndex; // PS2: TradeIndex
29 | uint8_t ItemIndex; // PS2: ItemIndex
30 | };
31 | ```
32 |
33 | ## Packet Fields
34 |
35 | The following information describes the structures outlined above.
36 |
37 | ## Structure Fields (`GP_SERV_ITEM_TRADE_MYLIST`)
38 |
39 | ### `id`, `size`, `sync`
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
44 |
45 | ### `ItemNum`
46 |
47 | _The item quantity._
48 |
49 | ### `ItemNo`
50 |
51 | _The item id._
52 |
53 | ### `TradeIndex`
54 |
55 | _The trade container index._
56 |
57 | ### `ItemIndex`
58 |
59 | _The item index._
60 |
--------------------------------------------------------------------------------
/world/server/0x002B/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_CHANNEL_ITEM`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_CHANNEL_ITEM` |
6 | | **Client Handler** | `RecvChannelItem` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x002B` |
9 | | **Size** | `(unknown)` |
10 |
11 | ## Description
12 |
13 | > [!NOTE]
14 | > Deprecated: This packet is no longer used.
15 |
16 | The purpose of this packet is unknown. The below information is based on the PS2 data.
17 |
18 | ## Packet Layout
19 |
20 | The layout of this packet is the following:
21 |
22 | ```cpp
23 | // PS2: GP_SERV_CHANNEL_ITEM
24 | struct GP_SERV_CHANNEL_ITEM
25 | {
26 | uint16_t id: 9;
27 | uint16_t size: 7;
28 | uint16_t sync;
29 | uint8_t PropertyItemIndex; // PS2: PropertyItemIndex
30 | uint8_t ChannelIndex; // PS2: ChannelIndex
31 | };
32 | ```
33 |
34 | ## Packet Fields
35 |
36 | The following information describes the structures outlined above.
37 |
38 | ## Structure Fields (`GP_SERV_TELL`)
39 |
40 | ### `id`, `size`, `sync`
41 |
42 | _These fields are part of the packet header._
43 |
44 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
45 |
46 | ### `PropertyItemIndex`
47 |
48 | _Unknown._
49 |
50 | ### `ChannelIndex`
51 |
52 | _Unknown._
53 |
--------------------------------------------------------------------------------
/world/server/0x002C/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_CHANNEL_STATE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_CHANNEL_STATE` |
6 | | **Client Handler** | `RecvChannelState` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x002C` |
9 | | **Size** | `(unknown)` |
10 |
11 | ## Description
12 |
13 | > [!NOTE]
14 | > Deprecated: This packet is no longer used.
15 |
16 | The purpose of this packet is unknown. The below information is based on the PS2 data.
17 |
18 | ## Packet Layout
19 |
20 | The layout of this packet is the following:
21 |
22 | ```cpp
23 | // PS2: GP_SERV_CHANNEL_STATE
24 | struct GP_SERV_CHANNEL_STATE
25 | {
26 | uint16_t id: 9;
27 | uint16_t size: 7;
28 | uint16_t sync;
29 | uint32_t UniqueNo; // PS2: UniqueNo
30 | uint32_t ZoneNo; // PS2: ZoneNo
31 | uint32_t IP; // PS2: IP
32 | uint16_t ActIndex; // PS2: ActIndex
33 | uint16_t Port; // PS2: Port
34 | uint8_t ChannelIndex; // PS2: ChannelIndex
35 | uint8_t HP; // PS2: HP
36 | };
37 | ```
38 |
39 | ## Packet Fields
40 |
41 | The following information describes the structures outlined above.
42 |
43 | ## Structure Fields (`GP_SERV_CHANNEL_STATE`)
44 |
45 | ### `id`, `size`, `sync`
46 |
47 | _These fields are part of the packet header._
48 |
49 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
50 |
51 | ### `UniqueNo`
52 |
53 | _Unknown._
54 |
55 | ### `ZoneNo`
56 |
57 | _Unknown._
58 |
59 | ### `IP`
60 |
61 | _Unknown._
62 |
63 | ### `ActIndex`
64 |
65 | _Unknown._
66 |
67 | ### `Port`
68 |
69 | _Unknown._
70 |
71 | ### `ChannelIndex`
72 |
73 | _Unknown._
74 |
75 | ### `HP`
76 |
77 | _Unknown._
78 |
--------------------------------------------------------------------------------
/world/server/0x002E/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_OPENMOGMENU`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_OPENMOGMENU` |
6 | | **Client Handler** | `RecvOpenMogMenu` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x002E` |
9 | | **Size** | `0x0004` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to inform the client to open the mog house menu.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_OPENMOGMENU
21 | struct GP_SERV_OPENMOGMENU
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | };
27 | ```
28 |
29 | ## Packet Fields
30 |
31 | The following information describes the structures outlined above.
32 |
33 | ## Structure Fields (`GP_SERV_OPENMOGMENU`)
34 |
35 | ### `id`, `size`, `sync`
36 |
37 | _These fields are part of the packet header._
38 |
39 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
40 |
41 | ## Additional Information
42 |
43 | This packet has no actual data, it simply informs the client that the mog house menu should be opened. This is done by setting a global variable in the client `OpenMogMenuFlag` which will then be checked on the next frame.
44 |
--------------------------------------------------------------------------------
/world/server/0x0038/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_SCHEDULOR`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_SCHEDULOR` |
6 | | **Client Handler** | `RecvSchedulor` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0038` |
9 | | **Size** | `0x0014` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to inform the client of a scheduler animation/event that should play.
14 |
15 | _This is used to play additional entity animations._
16 |
17 | ## Packet Layout
18 |
19 | The layout of this packet is the following:
20 |
21 | ```cpp
22 | // PS2: GP_SERV_SCHEDULOR
23 | struct GP_SERV_SCHEDULOR
24 | {
25 | uint16_t id: 9;
26 | uint16_t size: 7;
27 | uint16_t sync;
28 | uint32_t UniqueNoCas; // PS2: UniqueNoCas
29 | uint32_t UniqueNoTar; // PS2: UniqueNoTar
30 | uint32_t id; // PS2: id
31 | uint16_t ActIndexCast; // PS2: ActIndexCast
32 | uint16_t ActIndexTar; // PS2: ActIndexTar
33 | };
34 | ```
35 |
36 | ## Packet Fields
37 |
38 | The following information describes the structures outlined above.
39 |
40 | ## Structure Fields (`GP_SERV_SCHEDULOR`)
41 |
42 | ### `id`, `size`, `sync`
43 |
44 | _These fields are part of the packet header._
45 |
46 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
47 |
48 | ### `UniqueNoCas`
49 |
50 | _The caster entity server id._
51 |
52 | ### `UniqueNoTar`
53 |
54 | _The target entity server id._
55 |
56 | ### `id`
57 |
58 | _The 'FourCC' code tag for the scheduler to load._
59 |
60 | ### `ActIndexCast`
61 |
62 | _The caster entity target index._
63 |
64 | ### `ActIndexTar`
65 |
66 | _The target entity target index._
67 |
--------------------------------------------------------------------------------
/world/server/0x0039/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_MAPSCHEDULOR`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_MAPSCHEDULOR` |
6 | | **Client Handler** | `RecvMapSchedulor` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0039` |
9 | | **Size** | `0x0014` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to inform the client of a map scheduler animation/event that should play.
14 |
15 | _This is used to play additional environment/map animations._
16 |
17 | ## Packet Layout
18 |
19 | The layout of this packet is the following:
20 |
21 | ```cpp
22 | // PS2: GP_SERV_MAPSCHEDULOR
23 | struct GP_SERV_MAPSCHEDULOR
24 | {
25 | uint16_t id: 9;
26 | uint16_t size: 7;
27 | uint16_t sync;
28 | uint32_t UniqueNoCas; // PS2: UniqueNoCas
29 | uint32_t UniqueNoTar; // PS2: UniqueNoTar
30 | uint32_t id; // PS2: id
31 | uint16_t ActIndexCast; // PS2: ActIndexCast
32 | uint16_t ActIndexTar; // PS2: ActIndexTar
33 | };
34 | ```
35 |
36 | ## Packet Fields
37 |
38 | The following information describes the structures outlined above.
39 |
40 | ## Structure Fields (`GP_SERV_MAPSCHEDULOR`)
41 |
42 | ### `id`, `size`, `sync`
43 |
44 | _These fields are part of the packet header._
45 |
46 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
47 |
48 | ### `UniqueNoCas`
49 |
50 | _The caster entity server id._
51 |
52 | ### `UniqueNoTar`
53 |
54 | _The target entity server id._
55 |
56 | ### `id`
57 |
58 | _The 'FourCC' code tag for the scheduler to load._
59 |
60 | ### `ActIndexCast`
61 |
62 | _The caster entity target index._
63 |
64 | ### `ActIndexTar`
65 |
66 | _The target entity target index._
67 |
--------------------------------------------------------------------------------
/world/server/0x003B/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_EVENTMES`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_EVENTMES` |
6 | | **Client Handler** | `RecvEventMes` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x003B` |
9 | | **Size** | `0x000C` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to display a formatted message loaded from the DAT files.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_EVENTMES
21 | struct GP_SERV_EVENTMES
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint32_t UniqueNo; // PS2: UniqueNoCas
27 | uint16_t ActIndex; // PS2: ActIndexCast
28 | uint16_t Number; // PS2: Number
29 | };
30 | ```
31 |
32 | ## Packet Fields
33 |
34 | The following information describes the structures outlined above.
35 |
36 | ## Structure Fields (`GP_SERV_EVENTMES`)
37 |
38 | ### `id`, `size`, `sync`
39 |
40 | _These fields are part of the packet header._
41 |
42 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
43 |
44 | ### `UniqueNo`
45 |
46 | _The message entities server id._
47 |
48 | ### `ActIndex`
49 |
50 | _The message entities target index._
51 |
52 | ### `Number`
53 |
54 | _The message number._
55 |
56 | The `Number` value holds two separate values; the actual message number and a flag which is used to determine if the message should make use of the given entities name. The entity is always validated regardless if this flag is set in this packet.
57 |
58 | - The message number can be filtered with: `pkt->Number & 0x7FFF`
59 | - The flag can be checked with: `pkt->Number & 0x8000`
60 |
--------------------------------------------------------------------------------
/world/server/0x003E/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_SHOP_OPEN`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_SHOP_OPEN` |
6 | | **Client Handlers** | `RecvShopOpen`, `YkWndShopMain::RecvShopOpen` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x003E` |
9 | | **Size** | `0x0008` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to inform the client to prepare to open a shop window.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_SHOP_OPEN
21 | struct GP_SERV_SHOP_OPEN
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint16_t ShopListNum; // PS2: ShopListNum
27 | uint16_t padding00;
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_SERV_SHOP_OPEN`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `ShopListNum`
44 |
45 | _The number of items within the shop._
46 |
47 | ### `padding00`
48 |
49 | _Padding; unused._
50 |
--------------------------------------------------------------------------------
/world/server/0x003F/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_SHOP_BUY`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_SHOP_BUY` |
6 | | **Client Handlers** | `RecvShopBuy`, `(UnnamedHandler)` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x003F` |
9 | | **Size** | `0x000C` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to inform the client of a completed purchase.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_SHOP_BUY
21 | struct GP_SERV_SHOP_BUY
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint16_t ShopItemIndex;
27 | uint8_t BuyState;
28 | uint8_t padding00;
29 | uint32_t Count;
30 | };
31 | ```
32 |
33 | ## Packet Fields
34 |
35 | The following information describes the structures outlined above.
36 |
37 | ## Structure Fields (`GP_SERV_SHOP_BUY`)
38 |
39 | ### `id`, `size`, `sync`
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
44 |
45 | ### `ShopItemIndex`
46 |
47 | _The shop item index._
48 |
49 | ### `BuyState`
50 |
51 | _Unknown._
52 |
53 | The client does not use this value.
54 |
55 | ### `padding00`
56 |
57 | _Padding; unused._
58 |
59 | ### `Count`
60 |
61 | _The item count being purchased._
62 |
63 | The client does not use this value.
64 |
--------------------------------------------------------------------------------
/world/server/0x0040/README.md:
--------------------------------------------------------------------------------
1 | # `Unknown - Packet: 0x0040`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Client Handler** | `(Unknown)` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0040` |
9 | | **Size** | `(unknown)` |
10 |
11 | ## Description
12 |
13 | > [!NOTE]
14 | > Deprecated: This packet is no longer used.
15 |
16 | This packet has not been observed and is assumed to be deprecated. _(Please see additional information below.)_
17 |
18 | ## Packet Layout
19 |
20 | The current layout of this packet is unknown. However, the client does not expect any data from the server for this packet to be handled properly.
21 |
22 | ```cpp
23 | // PS2: (New; did not exist.)
24 | struct packet_t
25 | {
26 | uint16_t id: 9;
27 | uint16_t size: 7;
28 | uint16_t sync;
29 | };
30 | ```
31 |
32 | ## Packet Fields
33 |
34 | The following information describes the structures outlined above.
35 |
36 | ## Structure Fields (`packet_t`)
37 |
38 | ### `id`, `size`, `sync`
39 |
40 | _These fields are part of the packet header._
41 |
42 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
43 |
44 | ## Additional Information
45 |
46 | This packet has not been observed through normal packet logging means and is being considered deprecated. The handler for this packet in the client is setup to close the clients currently opened shop window. Due to this, it is assumed that the name for this packet would be `RecvShopClose` to follow the similar shop packet namings.
47 |
48 | The client will still handle this packet if its sent, which will close any currently opened shop window.
49 |
--------------------------------------------------------------------------------
/world/server/0x0048/README.md:
--------------------------------------------------------------------------------
1 | # `Unknown - Packet: 0x0048`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Client Handler** | `(Unknown)` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0048` |
9 | | **Size** | `0x0080` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server when the client is interacting with a linkshell concierge NPC.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: (New; did not exist.)
21 | struct packet_t
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint8_t data[124];
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`packet_t`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `data`
43 |
44 | _The response data for the previous client request._
45 |
46 | This field will hold different data based on the type of request that was made by the client. _(TODO: Additional reversing will be done later.)_
47 |
--------------------------------------------------------------------------------
/world/server/0x004F/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_EQUIP_CLEAR`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_EQUIP_CLEAR` |
6 | | **Client Handler** | `RecvEquipClear` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x004F` |
9 | | **Size** | `0x0008` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to inform the client to clear its current equipment information.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_EQUIP_CLEAR
21 | struct GP_SERV_EQUIP_CLEAR
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint32_t padding00;
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_SERV_EQUIP_CLEAR`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `padding00`
43 |
44 | _Padding; unused._
45 |
46 | ## Additional Information
47 |
48 | This packet causes the client to clear the current equipment information stored within the `zone->EquipSys.EquipTbl`. The client will then invoke a callback that will rebuild an internal sub-table of equipment information and repopulate this table. The sub-table is used for ability related functionality.
49 |
--------------------------------------------------------------------------------
/world/server/0x0053/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_SYSTEMMES`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_SYSTEMMES` |
6 | | **Client Handler** | `RecvSystemMessage` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0053` |
9 | | **Size** | `0x0010` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to display a formatted message loaded from the DAT files. _(via `PutSystemMessage`)_
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_SYSTEMMES
21 | struct GP_SERV_SYSTEMMES
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint32_t para; // PS2: para
27 | uint32_t para2; // PS2: para2
28 | uint16_t Number; // PS2: Number
29 | uint16_t padding00; // PS2: padding00
30 | };
31 | ```
32 |
33 | ## Packet Fields
34 |
35 | The following information describes the structures outlined above.
36 |
37 | ## Structure Fields (`GP_SERV_SYSTEMMES`)
38 |
39 | ### `id`, `size`, `sync`
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
44 |
45 | ### `para`
46 |
47 | _The message parameter. (1)_
48 |
49 | ### `para2`
50 |
51 | _The message parameter. (2)_
52 |
53 | ### `Number`
54 |
55 | _The message number._
56 |
57 | ### `padding00`
58 |
59 | _Padding; unused._
60 |
61 | ## Additional Information
62 |
63 | This packet loads and prints a formatted message from the following DAT files:
64 |
65 | | Language | File Id | File |
66 | | --- | --- | --- |
67 | | `Japanese` | `7030` | `ROM/27/75.DAT` |
68 | | `English` | `7031` | `ROM/27/76.DAT` |
69 |
--------------------------------------------------------------------------------
/world/server/0x0054/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_DEBUGPRINT`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_DEBUGPRINT` |
6 | | **Client Handler** | `RecvDebufPrint` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0054` |
9 | | **Size** | `0x000C` |
10 |
11 | ## Description
12 |
13 | The purpose of this packet is unknown.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_DEBUGPRINT
21 | struct GP_SERV_DEBUGPRINT
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | int32_t data; // PS2: data
27 | uint8_t port; // PS2: port
28 | uint8_t padding00[3]; // PS2: (New; did not exist.)
29 | };
30 | ```
31 |
32 | ## Packet Fields
33 |
34 | The following information describes the structures outlined above.
35 |
36 | ## Structure Fields (`GP_SERV_DEBUGPRINT`)
37 |
38 | ### `id`, `size`, `sync`
39 |
40 | _These fields are part of the packet header._
41 |
42 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
43 |
44 | ### `data`
45 |
46 | _The data value._
47 |
48 | ### `port`
49 |
50 | _The port value._
51 |
52 | This value is limited to values `0` to `7`.
53 |
54 | ### `padding00`
55 |
56 | _Padding; unused._
57 |
58 | ## Additional Information
59 |
60 | The intended purpose of this packet is unknown. The client still handles the data and will populate the internal buffers this was used with, however those buffers are no longer used anywhere in the client code. Originally, this was used to print data during the `AtelIdle` function, but that functionality has since been stripped from this function in the current retail client.
61 |
--------------------------------------------------------------------------------
/world/server/0x0055/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_SCENARIOITEM`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_SCENARIOITEM` |
6 | | **Client Handler** | `RecvScenarioItem` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0055` |
9 | | **Size** | `0x0088` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to populate the clients key item information.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_SCENARIOITEM
21 | struct GP_SERV_SCENARIOITEM
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint32_t GetItemFlag[16]; // PS2: GetItemFlag
27 | uint32_t LookItemFlag[16]; // PS2: LookItemFlag
28 | uint16_t TableIndex; // PS2: (New; did not exist.)
29 | uint16_t padding00; // PS2: (New; did not exist.)
30 | };
31 | ```
32 |
33 | ## Packet Fields
34 |
35 | The following information describes the structures outlined above.
36 |
37 | ## Structure Fields (`GP_SERV_SCENARIOITEM`)
38 |
39 | ### `id`, `size`, `sync`
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
44 |
45 | ### `GetItemFlag`
46 |
47 | _The clients obtained key item bit data._
48 |
49 | ### `LookItemFlag`
50 |
51 | _The clients viewed key item bit data._
52 |
53 | ### `TableIndex`
54 |
55 | _The key item table index this data will populate._
56 |
57 | This value can be `0` to `6`.
58 |
59 | ### `padding00`
60 |
61 | _Padding; unused._
62 |
--------------------------------------------------------------------------------
/world/server/0x0058/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_ASSIST`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_ASSIST` |
6 | | **Client Handler** | `RecvAssist` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0058` |
9 | | **Size** | `0x0010` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to respond to a client assist request. _(`/assist`)_
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_ASSIST
21 | struct GP_SERV_ASSIST
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint32_t UniqueNo;
27 | uint32_t AssistNo;
28 | uint16_t ActIndex;
29 | uint16_t padding00;
30 | };
31 | ```
32 |
33 | ## Packet Fields
34 |
35 | The following information describes the structures outlined above.
36 |
37 | ## Structure Fields (`GP_SERV_ASSIST`)
38 |
39 | ### `id`, `size`, `sync`
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
44 |
45 | ### `UniqueNo`
46 |
47 | _The local player server id._
48 |
49 | ### `AssistNo`
50 |
51 | _The assist target server id._
52 |
53 | ### `ActIndex`
54 |
55 | _The actor index._
56 |
57 | The client does not use this value.
58 |
59 | ### `padding00`
60 |
61 | _Padding; unused._
62 |
--------------------------------------------------------------------------------
/world/server/0x005C/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_PENDINGNUM`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_PENDINGNUM` |
6 | | **Client Handler** | `RecvPendingNum` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x005C` |
9 | | **Size** | `0x0024` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to update the clients event work parameters.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_PENDINGNUM
21 | struct GP_SERV_PENDINGNUM
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | int32_t num[8]; // PS2: num
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_SERV_PENDINGNUM`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `num`
43 |
44 | The event parameter values to be updated.
45 |
46 | The client copies this data into its local `PTR_Work_Zone` buffer, starting at index `2`. _(This buffer is used by the event system to hold information that events can store and read from as needed.)_
--------------------------------------------------------------------------------
/world/server/0x005D/README.md:
--------------------------------------------------------------------------------
1 | # `Unknown - Packet: 0x005D`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Client Handler** | `(Unknown)` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x005D` |
9 | | **Size** | `0x0068` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to update the clients event parameters.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: (New; packet has been repurposed.)
21 | struct packet_t
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | int32_t num[9];
27 | char string1[16];
28 | char string2[16];
29 | char string3[16];
30 | char string4[16];
31 | };
32 | ```
33 |
34 | ## Packet Fields
35 |
36 | The following information describes the structures outlined above.
37 |
38 | ## Structure Fields (`packet_t`)
39 |
40 | ### `id`, `size`, `sync`
41 |
42 | _These fields are part of the packet header._
43 |
44 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
45 |
46 | ### `num`
47 |
48 | _The event number parameters._
49 |
50 | The client does not use the values of these at all. It's data is entirely ignored.
51 |
52 | ### `string1`, `string2`, `string3`, `string4`
53 |
54 | _The event string parameters._
55 |
56 | These values are copied into the clients `PTR_EventStrings` container in 256 byte blocks.
57 |
--------------------------------------------------------------------------------
/world/server/0x005E/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_CONQUEST`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_CONQUEST` |
6 | | **Client Handler** | `RecvConquest` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x005E` |
9 | | **Size** | `Todo` |
10 |
11 | ## Description
12 |
13 | _Todo._
14 |
--------------------------------------------------------------------------------
/world/server/0x005F/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_MUSIC`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_MUSIC` |
6 | | **Client Handler** | `RecvMusic` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x005F` |
9 | | **Size** | `0x0008` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to update a music file to be played.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_MUSIC
21 | struct GP_SERV_MUSIC
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint16_t Slot;
27 | uint16_t MusicNum;
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_SERV_MUSIC`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `Slot`
44 |
45 | _The music slot to be updated._
46 |
47 | This value can be 0 to 7 and represents which music kind will be changed.
48 |
49 | | Slot | Purpose |
50 | | --- | --- |
51 | | `0` | _Zone (Day)_ |
52 | | `1` | _Zone (Night)_ |
53 | | `2` | _Combat (Solo)_ |
54 | | `3` | _Combat (Party)_ |
55 | | `4` | _Mount_ |
56 | | `5` | _Dead_ |
57 | | `6` | _Mog House_ |
58 | | `7` | _Fishing_ |
59 |
60 | ### `MusicNum`
61 |
62 | _The music id._
63 |
--------------------------------------------------------------------------------
/world/server/0x0060/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_MUSICVOLUME`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_MUSICVOLUME` |
6 | | **Client Handler** | `RecvMusicVolume` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0060` |
9 | | **Size** | `0x0008` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to update the clients music volume.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_MUSICVOLUME
21 | struct GP_SERV_MUSICVOLUME
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint16_t time;
27 | uint16_t volume;
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_SERV_MUSICVOLUME`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### time
44 |
45 | _The amount of time to take to reach the given `volume` level._
46 |
47 | The client uses linear interpolation to adjust the volume over time based on this value until it reaches the desired level.
48 |
49 | ### volume
50 |
51 | _The volume level._
52 |
53 | This value ranges from 0 to 127, with 127 being the loudest.
54 |
--------------------------------------------------------------------------------
/world/server/0x0062/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_CLISTATUS2`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_CLISTATUS2` |
6 | | **Client Handler** | `RecvCliStatus2` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0062` |
9 | | **Size** | `0x0100` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to update the clients skill base information.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_CLISTATUS2
21 | struct GP_SERV_CLISTATUS2
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint32_t CommandRecast[31]; // PS2: CommandRecast
27 | uint16_t skill_base[64]; // PS2: skill_base
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_SERV_CLISTATUS2`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `CommandRecast`
44 |
45 | _The client ability recast timers._
46 |
47 | The client no longer uses this block of data. This information is sent in different packets now.
48 |
49 | ### `skill_base`
50 |
51 | _The clients various skill base values._
52 |
53 | The client walks this block of data and copies each value individually into the clients player skill information table, starting at `PTR_status_data.CombatSkills`.
54 |
55 | The first 48 entries are the skills combat skills, while the remaining 16 are the clients crafting skills.
56 |
--------------------------------------------------------------------------------
/world/server/0x0065/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_WPOS2`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_WPOS2` |
6 | | **Client Handler** | `RecvWpos2` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0065` |
9 | | **Size** | `0x001C` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to update an entities position information. (2)
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_WPOS2
21 | struct GP_SERV_WPOS2
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | float x; // PS2: x
27 | float y; // PS2: y
28 | float z; // PS2: z
29 | uint32_t UniqueNo; // PS2: UniqueNo
30 | uint16_t ActIndex; // PS2: ActIndex
31 | uint8_t Mode; // PS2: Mode
32 | char dir; // PS2: dir
33 | uint32_t padding00; // PS2: (New; did not exist.)
34 | };
35 | ```
36 |
37 | ## Packet Fields
38 |
39 | This packet is a duplicate of `GP_SERV_WPOS`.
40 |
41 | You can find that packets information here: [**0x05B - GP_SERV_WPOS**](/world/server/0x005B/README.md)
42 |
--------------------------------------------------------------------------------
/world/server/0x0068/README.md:
--------------------------------------------------------------------------------
1 | # `Unknown - Packet: 0x0068`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Client Handler** | `(Unknown)` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0068` |
9 | | **Size** | `(varies)` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to update entity information.
14 |
15 | ## Packet Layout
16 |
17 | This packet is a duplicate of `0x0067`.
18 |
19 | You can find that packets information here: [**0x067**](/world/server/0x0067/README.md)
20 |
21 | _**Note:** While the packet layout and usage is the same for these two packets, the server will only use the specific packet id for a given type in most cases. `0x068` is almost always used with the local player pet entity updates._
22 |
--------------------------------------------------------------------------------
/world/server/0x0072/README.md:
--------------------------------------------------------------------------------
1 | # `Unknown - Packet: 0x0072`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Client Handler** | `(Unknown)` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0072` |
9 | | **Size** | `Todo` |
10 |
11 | ## Description
12 |
13 | _Todo._
14 |
--------------------------------------------------------------------------------
/world/server/0x0073/README.md:
--------------------------------------------------------------------------------
1 | # `Unknown - Packet: 0x0073`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Client Handler** | `(Unknown)` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0073` |
9 | | **Size** | `Todo` |
10 |
11 | ## Description
12 |
13 | _Todo._
14 |
--------------------------------------------------------------------------------
/world/server/0x0074/README.md:
--------------------------------------------------------------------------------
1 | # `Unknown - Packet: 0x0074`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Client Handler** | `(Unknown)` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0074` |
9 | | **Size** | `Todo` |
10 |
11 | ## Description
12 |
13 | _Todo._
14 |
--------------------------------------------------------------------------------
/world/server/0x0081/README.md:
--------------------------------------------------------------------------------
1 | # `Unknown - Packet: 0x0081`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Client Handler** | `(Unknown)` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0081` |
9 | | **Size** | `Todo` |
10 |
11 | ## Description
12 |
13 | _Todo._
14 |
--------------------------------------------------------------------------------
/world/server/0x0097/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_MYROOM_EXIT`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_MYROOM_EXIT` |
6 | | **Client Handler** | `RecvMyroomExit` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0097` |
9 | | **Size** | `0x0008` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server when the client is exiting the mog house of another player.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: _GP_MYROOM_GATE
21 | struct _GP_MYROOM_GATE
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint8_t Result; // PS2: Result
27 | uint8_t padding00[3]; // PS2: (New; did not exist.)
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`_GP_MYROOM_GATE`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `Result`
44 |
45 | _The packet result._
46 |
47 | ### `padding00`
48 |
49 | _Padding; unused._
50 |
51 | ## Additional Information
52 |
53 | The client does not actually make use of this packet or its data in any manner. While the client does have a handler for this packet, the manner in which it works causes the packet to be ignored. It checks to see if a callback function has been set to handle the packet data, if not it simply exits. The callback function pointer used with this handler is never set, thus, the packet data is never used.
54 |
--------------------------------------------------------------------------------
/world/server/0x0098/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_MYROOM_IS`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_MYROOM_IS` |
6 | | **Client Handler** | `RecvMyroomIs` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0098` |
9 | | **Size** | `0x0008` |
10 |
11 | ## Description
12 |
13 | The purpose of this packet is unknown. The below information is based on the PS2 data.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: _GP_MYROOM_GATE
21 | struct _GP_MYROOM_GATE
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint8_t Result; // PS2: Result
27 | uint8_t padding00[3]; // PS2: (New; did not exist.)
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`_GP_MYROOM_GATE`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `Result`
44 |
45 | _The packet result._
46 |
47 | ### `padding00`
48 |
49 | _Padding; unused._
50 |
51 | ## Additional Information
52 |
53 | The client does not actually make use of this packet or its data in any manner. While the client does have a handler for this packet, the manner in which it works causes the packet to be ignored. It checks to see if a callback function has been set to handle the packet data, if not it simply exits. The callback function pointer used with this handler is never set, thus, the packet data is never used.
54 |
--------------------------------------------------------------------------------
/world/server/0x00A0/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_MAP_GROUP`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_MAP_GROUP` |
6 | | **Client Handler** | `RecvMapGroup` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x00A0` |
9 | | **Size** | `0x0018` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to inform the client of its party members locations when viewing the map.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: _GP_MAP_GROUP
21 | struct _GP_MAP_GROUP
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint32_t UniqueID; // PS2: UniqueID
27 | int16_t zone; // PS2: zone
28 | uint16_t padding00; // PS2: padding00
29 | float x; // PS2: x
30 | float y; // PS2: y
31 | float z; // PS2: z
32 | };
33 | ```
34 |
35 | ## Packet Fields
36 |
37 | The following information describes the structures outlined above.
38 |
39 | ## Structure Fields (`_GP_MAP_GROUP`)
40 |
41 | ### `id`, `size`, `sync`
42 |
43 | _These fields are part of the packet header._
44 |
45 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
46 |
47 | ### `UniqueID`
48 |
49 | _The server id of the party member._
50 |
51 | ### `zone`
52 |
53 | _The zone id of the party member._
54 |
55 | ### `padding00`
56 |
57 | _Padding; unused._
58 |
59 | ### `x`
60 |
61 | _The x position of the party member._
62 |
63 | ### `y`
64 |
65 | _The y position of the party member._
66 |
67 | ### `z`
68 |
69 | _The z position of the party member._
70 |
--------------------------------------------------------------------------------
/world/server/0x00AB/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_FEAT_DATA`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_FEAT_DATA` |
6 | | **Client Handler** | `RecvFeatData` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x00AB` |
9 | | **Size** | `0x0018` |
10 |
11 | ## Description
12 |
13 | The purpose of this packet is unknown. The below information is based on the PS2 data.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_FEAT_DATA
21 | struct GP_SERV_FEAT_DATA
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint8_t FeatDataTbl[20];
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_SERV_FEAT_DATA`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `FeatDataTbl`
43 |
44 | _Unknown._
45 |
46 | ## Additional Information
47 |
48 | The purpose of this packet is unknown. The client uses this information as part of the feature system, which includes the clients available abilities, spells, etc. However, this packets data is stored in the clients local `PTR_pGlobalNowZone->FeatSys.FeatDataTbl` buffer and then never used. All observed packets across multiple accounts/characters have shown this data to always be fully zero.
49 |
--------------------------------------------------------------------------------
/world/server/0x00E0/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_GROUP_COMLINK`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_GROUP_COMLINK` |
6 | | **Client Handler** | `RecvComlink` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x00E0` |
9 | | **Size** | `0x0008` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to update the clients equipped linkshell information.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_GROUP_COMLINK
21 | struct GP_SERV_GROUP_COMLINK
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint8_t LinkshellNum;
27 | uint8_t ItemIndex;
28 | uint8_t Category;
29 | uint8_t padding00;
30 | };
31 | ```
32 |
33 | ## Packet Fields
34 |
35 | The following information describes the structures outlined above.
36 |
37 | ## Structure Fields (`GP_SERV_GROUP_COMLINK`)
38 |
39 | ### `id`, `size`, `sync`
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
44 |
45 | ### `LinkshellNum`
46 |
47 | _The linkshell slot number._
48 |
49 | - `0` - _The packet will affect the main linkshell._
50 | - `1` - _The packet will affect the secondary linkshell._
51 |
52 | ### `ItemIndex`
53 |
54 | _The linkshell item index._
55 |
56 | ### `Category`
57 |
58 | _The container that the linkshell item is located in._
59 |
60 | ### `padding00`
61 |
62 | _Padding; unused._
63 |
--------------------------------------------------------------------------------
/world/server/0x00E1/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_GROUP_CHECKID`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_GROUP_CHECKID` |
6 | | **Client Handler** | `RecvCheckID` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x00E1` |
9 | | **Size** | `0x0008` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to inform the client of their parties `GroupID`.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_GROUP_CHECKID
21 | struct GP_SERV_GROUP_CHECKID
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint32_t GroupID;
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_SERV_GROUP_CHECKID`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `GroupID`
43 |
44 | _The party group id._
45 |
46 | ## Additional Information
47 |
48 | This packet is used when the client will be requesting additional information from the server about their party. Things like requesting the party player list when selecting a level sync. The server will send this packet to tell the client its party group id, which the client will then use to send the needed requests to the cache server which handles searches.
49 |
--------------------------------------------------------------------------------
/world/server/0x0106/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_BAZAAR_BUY`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_BAZAAR_BUY` |
6 | | **Client Handlers** | `RecvBuy`, `RecvBazarBuy` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0106` |
9 | | **Size** | `0x001C` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server when the client has made, or attempted to make, a purchase from another players Bazaar.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_BAZAAR_BUY_STATE
21 | enum GP_BAZAAR_BUY_STATE
22 | {
23 | GP_BAZAAR_BUY_STATE_OK,
24 | GP_BAZAAR_BUY_STATE_ERR,
25 | GP_BAZAAR_BUY_STATE_END
26 | };
27 |
28 | // PS2: GP_SERV_BAZAAR_BUY
29 | struct GP_SERV_BAZAAR_BUY
30 | {
31 | uint16_t id: 9;
32 | uint16_t size: 7;
33 | uint16_t sync;
34 | GP_BAZAAR_BUY_STATE State; // PS2: State
35 | uint8_t sName[16]; // PS2: sName
36 | };
37 | ```
38 |
39 | ## Packet Fields
40 |
41 | The following information describes the structures outlined above.
42 |
43 | ## Structure Fields (`GP_SERV_BAZAAR_BUY`)
44 |
45 | ### `id`, `size`, `sync`
46 |
47 | _These fields are part of the packet header._
48 |
49 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
50 |
51 | ### `State`
52 |
53 | _The state of the purchase._
54 |
55 | | State | Name | Purpose |
56 | | --- | --- | --- |
57 | | `0` | `GP_BAZAAR_BUY_STATE_OK` | _The purchase was successful._ |
58 | | `1` | `GP_BAZAAR_BUY_STATE_ERR` | _There was an error attempting the purchase._ |
59 |
60 | ### `sName`
61 |
62 | _The name of the player whos bazaar the item was purchased from._
63 |
--------------------------------------------------------------------------------
/world/server/0x0107/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_BAZAAR_CLOSE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_BAZAAR_CLOSE` |
6 | | **Client Handlers** | `RecvClose`, `RecvBazarClose` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x0107` |
9 | | **Size** | `0x0018` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server when the selling players bazaar has closed while the client was viewing it. _(Either all items have been purchased, or the seller manually closed it._)
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_BAZAAR_CLOSE
21 | struct GP_SERV_BAZAAR_CLOSE
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint8_t sName[16]; // PS2: sName
27 | uint8_t padding00[4]; // PS2: (New; did not exist.)
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`GP_SERV_BAZAAR_CLOSE`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `sName`
44 |
45 | _The name of the player whos bazaar was closed._
46 |
47 | ### `padding00`
48 |
49 | _Padding; unused._
50 |
--------------------------------------------------------------------------------
/world/server/0x010A/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_BAZAAR_SALE`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_BAZAAR_SALE` |
6 | | **Client Handler** | `RecvSale` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x010A` |
9 | | **Size** | `0x001C` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server when a bazaar sale was successful.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_BAZAAR_SALE
21 | struct GP_SERV_BAZAAR_SALE
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint32_t ItemNum; // PS2: ItemNum
27 | uint16_t ItemNo; // PS2: ItemNo
28 | uint8_t sName[16]; // PS2: sName
29 | uint8_t padding00[2]; // PS2: padding00
30 | };
31 | ```
32 |
33 | ## Packet Fields
34 |
35 | The following information describes the structures outlined above.
36 |
37 | ## Structure Fields (`GP_SERV_BAZAAR_SALE`)
38 |
39 | ### `id`, `size`, `sync`
40 |
41 | _These fields are part of the packet header._
42 |
43 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
44 |
45 | ### `ItemNum`
46 |
47 | _The number of items sold._
48 |
49 | ### `ItemNo`
50 |
51 | _The item id._
52 |
53 | ### `sName`
54 |
55 | _The name of the buyer._
56 |
57 | ### `padding00`
58 |
59 | _Padding; unused._
60 |
--------------------------------------------------------------------------------
/world/server/0x010F/README.md:
--------------------------------------------------------------------------------
1 | # `GP_SERV_COMMAND_REQLOGOUTINFO`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `GP_SERV_COMMAND_REQLOGOUTINFO` |
6 | | **Client Handler** | `RecvLogoutInfo` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x010F` |
9 | | **Size** | `0x0008` |
10 |
11 | ## Description
12 |
13 | The purpose of this packet is unknown. The below information is based on the PS2 data.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: GP_SERV_REQLOGOUTINFO
21 | struct GP_SERV_REQLOGOUTINFO
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint32_t Mode; // PS2: Mode
27 | };
28 | ```
29 |
30 | ## Packet Fields
31 |
32 | The following information describes the structures outlined above.
33 |
34 | ## Structure Fields (`GP_SERV_REQLOGOUTINFO`)
35 |
36 | ### `id`, `size`, `sync`
37 |
38 | _These fields are part of the packet header._
39 |
40 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
41 |
42 | ### `Mode`
43 |
44 | _The logout mode._
45 |
46 | ## Additional Information
47 |
48 | This packet does not appear to be used any longer and is assumed to be deprecated.
49 |
50 | The handler for this packet expects a callback function to be set in order for it to be handled. In order for this callback function to be set, another function must be called which puts the client in a state that would await for this packet response. The client will send a `0x00EC` packet to the server and wait for this packet to be sent back to handle a means of logging out. The method that sends the packet to the server is not implemented or invoked anywhere else in the client, thus both packets appear to be deprecated.
51 |
52 |
--------------------------------------------------------------------------------
/world/server/0x011E/README.md:
--------------------------------------------------------------------------------
1 | # `Unknown - Packet: 0x011E`
2 |
3 | | Information | Notes |
4 | |--- |--- |
5 | | **Command Name** | `(Unknown)` |
6 | | **Client Handler** | `(Unknown)` |
7 | | **Direction** | `S -> C` |
8 | | **OpCode** | `0x011E` |
9 | | **Size** | `0x0008` |
10 |
11 | ## Description
12 |
13 | This packet is sent by the server to inform the client of another player that has used `/jump`.
14 |
15 | ## Packet Layout
16 |
17 | The layout of this packet is the following:
18 |
19 | ```cpp
20 | // PS2: (New; did not exist.)
21 | struct packet_t
22 | {
23 | uint16_t id: 9;
24 | uint16_t size: 7;
25 | uint16_t sync;
26 | uint16_t ActIndex;
27 | uint8_t padding00[2];
28 | };
29 | ```
30 |
31 | ## Packet Fields
32 |
33 | The following information describes the structures outlined above.
34 |
35 | ## Structure Fields (`packet_t`)
36 |
37 | ### `id`, `size`, `sync`
38 |
39 | _These fields are part of the packet header._
40 |
41 | _You can find more information about the header fields here: [**Header**](/world/HEADER.md)_
42 |
43 | ### `ActIndex`
44 |
45 | _The target index of the entity that jumped._
46 |
47 | ### `padding00`
48 |
49 | _Padding; unused._
50 |
--------------------------------------------------------------------------------