45 {
46#define ADD_HPKT(i, j, k) _hpacket_length_table.insert(i, std::make_pair(j, std::make_shared<k>(s)))
47#define ADD_TPKT(i, j, k) _tpacket_length_table.insert(i, std::make_pair(j, std::make_shared<k>(s)))
48
49#if PACKET_VERSION >= 20040419
50 ADD_HPKT(0x01fb, 56, CH_DELETE_CHAR2);
51#endif
52
53#if PACKET_VERSION >= 20040621
54 ADD_TPKT(0x020d, -1, HC_BLOCK_CHARACTER);
55#endif
56
57#if PACKET_VERSION >= 20050628
58 ADD_TPKT(0x023e, 4, HC_REQUEST_CHARACTER_PASSWORD);
59#endif
60
61#if PACKET_VERSION >= 20061030
62 ADD_HPKT(0x028f, 6, CH_REQ_CHANGE_CHARNAME);
63 ADD_HPKT(0x028d, 34, CH_REQ_IS_VALID_CHARNAME);
64 ADD_HPKT(0x028c, 46, CH_SELECT_CHAR_GOINGTOBEUSED);
65 ADD_TPKT(0x0290, 4, HC_ACK_CHANGE_CHARNAME);
66 ADD_TPKT(0x028e, 4, HC_ACK_IS_VALID_CHARNAME);
67 ADD_TPKT(0x028b, -1, HC_CHARNOTBEENSELECTED);
68#endif
69
70#if PACKET_VERSION >= 20070821
71 ADD_TPKT(0x02ca, 3, HC_REFUSE_SELECTCHAR);
72#endif
73
74#if PACKET_VERSION >= 20090225
75 ADD_TPKT(0x0448, -1, HC_CHARACTER_LIST);
76#endif
77
78#if PACKET_VERSION >= 20090701
80#endif
81
82#if PACKET_VERSION >= 20090922
84 ADD_HPKT(0x07e5, 8, CH_ENTER_CHECKBOT);
86 ADD_TPKT(0x07e9, 5, HC_CHECKBOT_RESULT);
87#endif
88
89#if PACKET_VERSION >= 20100713
90 ADD_HPKT(0x082b, 6, CH_DELETE_CHAR3_CANCEL);
91 ADD_HPKT(0x0827, 6, CH_DELETE_CHAR3_RESERVED);
92 ADD_TPKT(0x082a, 10, HC_DELETE_CHAR3);
93 ADD_TPKT(0x0828, 14, HC_DELETE_CHAR3_RESERVED);
94 ADD_TPKT(0x0840, -1, HC_NOTIFY_ACCESSIBLE_MAPNAME);
95#endif
96
97#if PACKET_VERSION >= 20100714
98 ADD_HPKT(0x0841, 4, CH_SELECT_ACCESSIBLE_MAPNAME);
99#endif
100
101#if PACKET_VERSION >= 20100720
102 ADD_TPKT(0x082c, 10, HC_DELETE_CHAR3_CANCEL);
103#endif
104
105#if PACKET_VERSION >= 20100728
106 ADD_HPKT(0x0829, 12, CH_DELETE_CHAR3);
107#endif
108
109#if PACKET_VERSION >= 20101221
110 ADD_TPKT(0x082d, -1, HC_ACCEPT_ENTER2);
111#endif
112
113#if PACKET_VERSION >= 20101228
114 ADD_TPKT(0x08af, 10, HC_WAITING_LOGIN);
115#endif
116
117#if PACKET_VERSION >= 20110111
118 ADD_HPKT(0x08b0, 17, CH_WAITING_LOGIN);
119#endif
120
121#if PACKET_VERSION >= 20110215
122 ADD_TPKT(0x08b7, 10, HC_SECOND_PASSWD_REQ);
123#endif
124
125#if PACKET_VERSION >= 20110222
126 ADD_TPKT(0x08b9, 12, HC_SECOND_PASSWD_LOGIN);
127#endif
128
129#if PACKET_VERSION >= 20110228
130 ADD_TPKT(0x08c6, 4, HC_AVAILABLE_SECOND_PASSWD);
131#endif
132
133#if PACKET_VERSION >= 20110308
134 ADD_HPKT(0x08c5, 6, CH_AVAILABLE_SECOND_PASSWD);
135 ADD_HPKT(0x08bc, 10, CH_DELETE_SECOND_PASSWD);
136 ADD_HPKT(0x08be, 14, CH_EDIT_SECOND_PASSWD);
137 ADD_HPKT(0x08ba, 10, CH_MAKE_SECOND_PASSWD);
138 ADD_HPKT(0x08c3, 10, CH_NOT_AVAILABLE_SECOND_PASSWD);
139 ADD_HPKT(0x08b8, 10, CH_SECOND_PASSWD_ACK);
140 ADD_TPKT(0x08bf, 8, HC_EDIT_SECOND_PASSWD);
141 ADD_TPKT(0x08bb, 8, HC_MAKE_SECOND_PASSWD);
142 ADD_TPKT(0x08c4, 8, HC_NOT_AVAILABLE_SECOND_PASSWD);
143#endif
144
145#if PACKET_VERSION >= 20110906
146 ADD_TPKT(0x08d5, -1, HC_ACK_CHANGE_CHARACTER_SLOT);
147#endif
148
149#if PACKET_VERSION >= 20111101
150 ADD_HPKT(0x08fd, 6, CH_ACK_CHANGE_CHARACTERNAME);
151 ADD_HPKT(0x08fc, 30, CH_REQ_CHANGE_CHARACTERNAME);
152 ADD_HPKT(0x08d4, 8, CH_REQ_CHANGE_CHARACTER_SLOT);
153 ADD_TPKT(0x08e3, 146, HC_UPDATE_CHARINFO);
154#endif
155
156#if PACKET_VERSION >= 20111207
157 ADD_TPKT(0x08bd, 8, HC_DELETE_SECOND_PASSWD);
158#endif
159
160#if PACKET_VERSION >= 20120214
161 ADD_HPKT(0x0970, 31, CH_MAKE_CHAR_NOT_STATS);
162#endif
163
164#if PACKET_VERSION >= 20120724
165 ADD_HPKT(0x098f, -1, CH_DELETE_CHAR3_EXT);
166#endif
167
168#if PACKET_VERSION >= 20121024
169 ADD_HPKT(0x099c, 6, CH_REQ_CHARINFO_PER_PAGE);
170 ADD_TPKT(0x099d, -1, HC_ACK_CHARINFO_PER_PAGE);
171#endif
172
173#if PACKET_VERSION >= 20121128
174 ADD_TPKT(0x099e, 12, HC_QUEUE_ORDER);
175#endif
176
177#if PACKET_VERSION >= 20121212
178 ADD_HPKT(0x09a1, 2, CH_CHARLIST_REQ);
179 ADD_TPKT(0x09a0, 6, HC_CHARLIST_NOTIFY);
180#endif
181
182#if PACKET_VERSION >= 20130522
183 ADD_TPKT(0x09c2, -1, HC_SECRETSCAN_DATA);
184#endif
185
186#if PACKET_VERSION >= 20150415
188#endif
189
190#if PACKET_VERSION >= 20170228
191 ADD_TPKT(0x0ac5, 156, HC_NOTIFY_ZONESVR);
192#endif
193
194#if PACKET_VERSION >= 20170906
195 ADD_TPKT(0x006d, 157, HC_ACCEPT_MAKECHAR);
196#elif PACKET_VERSION >= 20170104
197 ADD_TPKT(0x006d, 149, HC_ACCEPT_MAKECHAR);
198#endif
199
200#if PACKET_VERSION >= 20201007
201 ADD_TPKT(0x0b6f, 177, HC_ACCEPT_MAKECHAR);
202 ADD_TPKT(0x0b72, -1, HC_ACK_CHARINFO_PER_PAGE);
203 ADD_TPKT(0x006d, 177, HC_ACCEPT_MAKECHAR);
204#endif
205
206#if CLIENT_TYPE == 'M' && PACKET_VERSION >= 20180124 \
207|| CLIENT_TYPE == 'R' && PACKET_VERSION >= 20180124 \
208|| CLIENT_TYPE == 'Z' && PACKET_VERSION >= 20180131
209 ADD_TPKT(0x0ae9, 13, HC_SECOND_PASSWD_LOGIN);
210#elif PACKET_VERSION >= 20171220
211 ADD_TPKT(0x0ae9, 64, HC_SECOND_PASSWD_LOGIN);
212#endif
213#undef ADD_TPKT
214#undef ADD_HPKT
215 }
#define ADD_HPKT(i, j, k)
#define ADD_TPKT(i, j, k)