From f0ab8d2a52eb393d4ee0d2d86a70134b9b9009ba Mon Sep 17 00:00:00 2001 From: Lemongrass3110 Date: Sat, 15 Jul 2017 22:45:12 +0200 Subject: [PATCH] Overhauled and dropped packet db (#2263) Adds support for a lot of missing clients and features almost all clients from 2016 and 2017 clientinfo.xml's version value will be ignored from now on By setting PACKETVER the server will configure everything else on it's own from now on Dropped is_clientver script command And a lot more --- .travis.yml | 2 - conf/battle/client.conf | 52 - conf/help.txt | 1 - conf/login_athena.conf | 6 - conf/msg_conf/map_msg.conf | 3 +- conf/msg_conf/map_msg_chn.conf | 3 +- conf/msg_conf/map_msg_frn.conf | 3 +- conf/msg_conf/map_msg_idn.conf | 3 +- conf/msg_conf/map_msg_rus.conf | 3 +- conf/msg_conf/map_msg_tha.conf | 3 +- db/import-tmpl/packet_db.txt | 35 - db/packet_db.txt | 2675 --------------------- doc/atcommands.txt | 3 - doc/packet_interserv.txt | 14 +- doc/script_commands.txt | 12 - npc/re/guides/navigation.txt | 3 +- rAthena.sln | 1 + src/char/char.h | 1 - src/char/char_clif.c | 49 +- src/char/char_logif.c | 14 +- src/char/char_mapif.c | 6 +- src/common/mmo.h | 23 +- src/common/utils.c | 53 - src/common/utils.h | 2 - src/config/core.h | 11 +- src/config/packets.h | 63 + src/custom/defines_post.h | 13 + src/custom/defines_pre.h | 13 + src/login/login.cpp | 14 - src/login/login.h | 4 - src/login/loginchrif.c | 14 +- src/login/loginclif.c | 67 +- src/map/atcommand.c | 10 +- src/map/battle.c | 2 - src/map/battle.h | 2 - src/map/chrif.c | 7 +- src/map/clif.c | 1560 +++--------- src/map/clif.h | 11 +- src/map/clif_obfuscation.h | 347 +++ src/map/clif_packetdb.h | 2308 ++++++++++++++++++ src/map/clif_shuffle.h | 3511 ++++++++++++++++++++++++++++ src/map/map-server.vcxproj.filters | 9 + src/map/pc.c | 4 +- src/map/pc.h | 1 - src/map/script.c | 31 - 45 files changed, 6731 insertions(+), 4241 deletions(-) delete mode 100644 db/import-tmpl/packet_db.txt delete mode 100644 db/packet_db.txt create mode 100644 src/config/packets.h create mode 100644 src/custom/defines_post.h create mode 100644 src/custom/defines_pre.h create mode 100644 src/map/clif_obfuscation.h create mode 100644 src/map/clif_packetdb.h create mode 100644 src/map/clif_shuffle.h diff --git a/.travis.yml b/.travis.yml index 270132a191..13745097b4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,7 +34,6 @@ script: - ./configure $CONFIGURE_FLAGS - make clean - make server - - 'echo packet_db_ver: $PACKETDBVER >> db/import/packet_db.txt' - ./map-server --run-once env: @@ -44,7 +43,6 @@ env: - DB_NAME="ragnarok" - DB_USER="ragnarok" - DB_PASS="ragnarok" - - PACKETDBVER=45 matrix: - CONFIGURE_FLAGS="--enable-prere=no --enable-vip=no --enable-buildbot=yes" - CONFIGURE_FLAGS="--enable-prere=yes --enable-vip=no --enable-buildbot=yes" diff --git a/conf/battle/client.conf b/conf/battle/client.conf index f2e5e1be51..65b7eda241 100644 --- a/conf/battle/client.conf +++ b/conf/battle/client.conf @@ -9,58 +9,6 @@ // assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary) //-------------------------------------------------------------- -// Set here which client version do you accept. Add all values of clients: -// Clients older than accepted versions, and versions not set to 'accepted' -// here will be rejected when logging in -// 0x00000001: Clients older than 2004-09-06aSakray (packet versions 5-9) -// 0x00000002: 2004-09-06 aSakexe (version 10) -// 0x00000004: 2004-09-20 aSakexe (version 11) -// 0x00000008: 2004-10-05 aSakexe (version 12) -// 0x00000010: 2004-10-25 aSakexe (version 13) -// 0x00000020: 2004-11-29 aSakexe (version 14) -// 0x00000040: 2005-01-10 bSakexe (version 15) -// 0x00000080: 2005-05-09 aSakexe (version 16) -// 0x00000100: 2005-06-28 aSakexe (version 17) -// 0x00000200: 2005-07-18 aSakexe (version 18) -// 0x00000400: 2005-07-19 bSakexe (version 19) -// 0x00000800: 2006-03-27 aSakexe (version 20) -// 0x00001000: 2007-01-08 aSakexe (version 21) -// 0x00002000: 2007-02-12 aSakexe (version 22) -// 0x00004000: 2008-09-10 aSakexe (version 23) -// 0x00008000: 2008-08-27 aRagexeRE (version 24) -// 0x00010000: 2008-09-10 aRagexeRE (version 25) -// 0x00020000: 2010-11-24 aRagexeRE (version 26) -// 0x00040000: 2011-10-05 aRagexeRE (version 27) -// 0x00080000: 2011-11-02 aRagexe (version 28) -// 0x00100000: 2012-03-07 fRagexeRE (version 29) -// 0x00200000: 2012-04-10 aRagexeRE (version 30) -// 0x00400000: 2012-04-18 aRagexeRE (version 31) -// 0x00800000: 2012-06-18 unknow (version 32) -// 0x01000000: 2012-07-02 aRagexeRE (version 33) -// 0x02000000: 2013-03-20 Ragexe (version 34) -// 0x04000000: 2013-05-15 aRagexe (version 35) -// 0x08000000: 2013-05-22 Ragexe (version 36) -// 0x10000000: 2013-05-29 Ragexe (version 37) -// 0x20000000: 2013-06-05 Ragexe (version 38) -// 0x40000000: 2013-06-12 Ragexe (version 39) -// default value: 0x7FFFFFFF (all clients/versions [5;39]) -packet_ver_flag: 0x7FFFFFFF - -// 0x00000001: 2013-06-18 Ragexe (version 40) -// 0x00000002: 2013-06-26 Ragexe (version 41) -// 0x00000004: 2013-07-03 Ragexe (version 42) -// 0x00000008: 2013-07-10 Ragexe (version 43) -// 0x00000010: 2013-07-17 Ragexe (version 44) -// 0x00000020: 2013-08-07 Ragexe (version 45) -// 0x00000040: 2013-12-23 Ragexe (version 46) -// 0x00000080: ???? -// 0x00000100: ???? -// 0x00000200: ???? -// 0x00000400: 2014-10-16 Ragexe (version 50) -// 0x00000800: 2014-10-22 Ragexe (version 51) -// default value: 0x7FFFFFFF (all clients/versions [41;72]) -packet_ver_flag2: 0x7FFFFFFF - // Minimum delay between whisper/global/party/guild messages (in ms) // Messages that break this threshold are silently omitted. min_chat_delay: 0 diff --git a/conf/help.txt b/conf/help.txt index d904b39c4a..8bcb8e3250 100644 --- a/conf/help.txt +++ b/conf/help.txt @@ -310,7 +310,6 @@ reloaditemdb: "Reload item database." reloadmobdb: "Reload monster database." reloadmotd: "Reload Message of the Day." reloadmsgconf: "Reload message configuration." -reloadpacketdb: "Reload packet database." reloadpcdb: "Reload player settings." reloadquestdb: "Reload quest database." reloadscript: "Reload all scripts." diff --git a/conf/login_athena.conf b/conf/login_athena.conf index 08c7a31d91..ddd5ddd890 100644 --- a/conf/login_athena.conf +++ b/conf/login_athena.conf @@ -106,12 +106,6 @@ vip_char_increase: -1 // 0 or more: new accounts automatically expire after the given value, in seconds start_limited_time: -1 -// Check the clientversion field set in clientinfo.xml? -check_client_version: no - -// What version is allowed to connect? (if the option above is enabled) -client_version_to_connect: 20 - // Store passwords as MD5 hashes instead of plain text? // NOTE: Will not work with clients that use use_MD5_passwords: no diff --git a/conf/msg_conf/map_msg.conf b/conf/msg_conf/map_msg.conf index 1eefc87487..40151e8697 100644 --- a/conf/msg_conf/map_msg.conf +++ b/conf/msg_conf/map_msg.conf @@ -1615,8 +1615,7 @@ 1475: ---- My Channels ---- 1476: You have not joined any channels. -// @reloadpacketdb -1477: Packet database has been reloaded. +//1477 free // @partysharelvl 1478: Party share level range has been changed successfully. diff --git a/conf/msg_conf/map_msg_chn.conf b/conf/msg_conf/map_msg_chn.conf index 0825d8724e..76c5420bb0 100644 --- a/conf/msg_conf/map_msg_chn.conf +++ b/conf/msg_conf/map_msg_chn.conf @@ -1469,8 +1469,7 @@ 1475: ---- 我的頻道 ---- 1476: 你沒有加入任何的頻道 -// @reloadpacketdb -1477: 完成重載封包數據庫. +//1477 free // @partysharelvl 1478: 隊伍經驗均分的等級間距已成功變更。 diff --git a/conf/msg_conf/map_msg_frn.conf b/conf/msg_conf/map_msg_frn.conf index ef24eaddca..fe94892bc0 100644 --- a/conf/msg_conf/map_msg_frn.conf +++ b/conf/msg_conf/map_msg_frn.conf @@ -1480,8 +1480,7 @@ 1475: ---- Canaux rejoins ---- 1476: Vous n'avez rejoins aucun canal. -// @reloadpacketdb -1477: Base de donne des 'Packets' recharge. +//1477 free // @partysharelvl 1478: Diffrence de niveau pour le partage en quipe chang. diff --git a/conf/msg_conf/map_msg_idn.conf b/conf/msg_conf/map_msg_idn.conf index 3ea211e779..feee972a27 100644 --- a/conf/msg_conf/map_msg_idn.conf +++ b/conf/msg_conf/map_msg_idn.conf @@ -1571,8 +1571,7 @@ 1475: ---- Channel yang diikuti ---- 1476: Kamu tidak bergabung ke channel manapun saat ini. -// @reloadpacketdb -1477: Database paket telah dimuat ulang. +//1477 free // @partysharelvl 1478: Jarak level dalam party share telah diubah dengan sukses. diff --git a/conf/msg_conf/map_msg_rus.conf b/conf/msg_conf/map_msg_rus.conf index ae78d70d30..ad1e3a06f8 100644 --- a/conf/msg_conf/map_msg_rus.conf +++ b/conf/msg_conf/map_msg_rus.conf @@ -1480,8 +1480,7 @@ 1475: ---- ---- 1476: . -// @reloadpacketdb -1477: . +//1477 free // @partysharelvl 1478: . diff --git a/conf/msg_conf/map_msg_tha.conf b/conf/msg_conf/map_msg_tha.conf index 5b6ce2cbb0..c34d07c0a4 100644 --- a/conf/msg_conf/map_msg_tha.conf +++ b/conf/msg_conf/map_msg_tha.conf @@ -1473,8 +1473,7 @@ 1475: ---- Channels ѹ ---- 1476: س channels . -// @reloadpacketdb -1477: ҹ Packet ١Ŵº. +//1477 free // @partysharelvl 1478: дѺ Level Ѻ ١Ѻ¹º. diff --git a/db/import-tmpl/packet_db.txt b/db/import-tmpl/packet_db.txt deleted file mode 100644 index de90db50e0..0000000000 --- a/db/import-tmpl/packet_db.txt +++ /dev/null @@ -1,35 +0,0 @@ -// Client<->Map Packet Database -// -// Structure of Database: -// PacketType,PacketLength[,Name,FieldIndex1:FieldIndex2:FieldIndex3:...] -// -// 01. PacketType ID of the packet. -// 02. PacketLength Length of the packet. If 0, packet is disabled in current packet version. If -1, packet has variable size. -// 03. Name Name of the packet parser function (optional, for incoming packets only). -// 04. FieldIndex Specifies the offset of a packet field in bytes from the begin of the packet (only specified when Name is given). -// Can be 0, when the layout is not known. -// ... -// -// NOTE: Up to MAX_PACKET_POS (typically 20) field indexes may be used. -// -// The packet database allows you to add support for new clients, -// because packets change every release. -// -// Note: Every packet version needs a wanttoconnection specification, since -// that is the packet used to identify a client's version. -// If multiple versions have the same connection packet, the higher version -// will be used (unless the lower one is specified as the default) -// -// Incoming packets have their parser function and layout specified, which enables -// them for the current and all higher versions, unless explicitely disabled. -// -// Outgoing packets must be specified in order to enable them for the current -// and all higher versions, unless explicitely disabled. Packets that are not -// enabled for a packet version are silently discarded when sent as multicast. -// -// Every packet version inherits packet definitions from the previous (lower) -// packet version. -// -// Main packet version of the DB to use (default = max available version) -// Client detection is faster when all clients use this version. -// Version 23 is the latest Sakexe (above versions are for Renewal clients) diff --git a/db/packet_db.txt b/db/packet_db.txt deleted file mode 100644 index d79a306ef1..0000000000 --- a/db/packet_db.txt +++ /dev/null @@ -1,2675 +0,0 @@ -// Client<->Map Packet Database -// -// Structure of Database: -// PacketType,PacketLength[,Name,FieldIndex1:FieldIndex2:FieldIndex3:...] -// -// 01. PacketType ID of the packet. -// 02. PacketLength Length of the packet. If 0, packet is disabled in current packet version. If -1, packet has variable size. -// 03. Name Name of the packet parser function (optional, for incoming packets only). -// 04. FieldIndex Specifies the offset of a packet field in bytes from the begin of the packet (only specified when Name is given). -// Can be 0, when the layout is not known. -// ... -// -// NOTE: Up to MAX_PACKET_POS (typically 20) field indexes may be used. -// -// The packet database allows you to add support for new clients, -// because packets change every release. -// -// Note: Every packet version needs a wanttoconnection specification, since -// that is the packet used to identify a client's version. -// If multiple versions have the same connection packet, the higher version -// will be used (unless the lower one is specified as the default) -// -// Incoming packets have their parser function and layout specified, which enables -// them for the current and all higher versions, unless explicitely disabled. -// -// Outgoing packets must be specified in order to enable them for the current -// and all higher versions, unless explicitely disabled. Packets that are not -// enabled for a packet version are silently discarded when sent as multicast. -// -// Every packet version inherits packet definitions from the previous (lower) -// packet version. -// -// Main packet version of the DB to use (default = max available version) -// Client detection is faster when all clients use this version. -// Version 23 is the latest Sakexe (above versions are for Renewal clients) -// -// packet_keys values are default value for each packet version, if no value -// or value is 'default' in packet_keys_use, server will uses default keys -// according to used packet_db_ver. packet_keys_use is user-defined keys. -// Maximum key value is 0x7FFFFFFF. -// NOTE: Keys won't be reloaded, initialized on first load only. -// -//packet_db_ver: 46 -packet_db_ver: default -packet_keys_use: default - -packet_ver: 5 -0x0064,55 -0x0065,17 -0x0066,6 -0x0067,37 -0x0068,46 -0x0069,-1 -0x006a,23 -0x006b,-1 -0x006c,3 -0x006d,108 -0x006e,3 -0x006f,2 -0x0070,6 -0x0071,28 -0x0072,19,wanttoconnection,2:6:10:14:18 -0x0073,11 -0x0074,3 -0x0075,-1 -0x0076,9 -0x0077,5 -0x0078,54 -0x0079,53 -0x007a,58 -0x007b,60 -0x007c,41 -0x007d,2,loadendack,0 -0x007e,6,ticksend,2 -0x007f,6 -0x0080,7 -0x0081,3 -0x0082,2 -0x0083,2 -0x0084,2 -0x0085,5,walktoxy,2 -0x0086,16 -0x0087,12 -0x0088,10 -0x0089,7,actionrequest,2:6 -0x008a,29 -0x008b,2 -0x008c,-1,globalmessage,2:4 -0x008d,-1 -0x008e,-1 -//0x008f,-1 -0x0090,7,npcclicked,2:6 -0x0091,22 -0x0092,28 -0x0093,2 -0x0094,6,getcharnamerequest,2 -0x0095,30 -0x0096,-1,wis,2:4:28 -0x0097,-1 -0x0098,3 -0x0099,-1,broadcast,2:4 -0x009a,-1 -0x009b,5,changedir,2:4 -0x009c,9 -0x009d,17 -0x009e,17 -0x009f,6,takeitem,2 -0x00a0,23 -0x00a1,6 -0x00a2,6,dropitem,2:4 -0x00a3,-1 -0x00a4,-1 -0x00a5,-1 -0x00a6,-1 -0x00a7,8,useitem,2:4 -0x00a8,7 -0x00a9,6,equipitem,2:4 -0x00aa,7,ZC_WEAR_EQUIP_ACK,2:4:6 -0x00ab,4,unequipitem,2 -0x00ac,7 -//0x00ad,-1 -0x00ae,-1 -0x00af,6 -0x00b0,8 -0x00b1,8 -0x00b2,3,restart,2 -0x00b3,3 -0x00b4,-1 -0x00b5,6 -0x00b6,6 -0x00b7,-1 -0x00b8,7,npcselectmenu,2:6 -0x00b9,6,npcnextclicked,2 -0x00ba,2 -0x00bb,5,statusup,2:4 -0x00bc,6 -0x00bd,44 -0x00be,5 -0x00bf,3,emotion,2 -0x00c0,7 -0x00c1,2,howmanyconnections,0 -0x00c2,6 -0x00c3,8 -0x00c4,6 -0x00c5,7,npcbuysellselected,2:6 -0x00c6,-1 -0x00c7,-1 -0x00c8,-1,npcbuylistsend,2:4 -0x00c9,-1,npcselllistsend,2:4 -0x00ca,3 -0x00cb,3 -0x00cc,6,gmkick,2 -0x00cd,3 -0x00ce,2,killall,0 -0x00cf,27,wisexin,2:26 -0x00d0,3,wisall,2 -0x00d1,4 -0x00d2,4 -0x00d3,2,wisexlist,0 -0x00d4,-1 -0x00d5,-1,createchatroom,2:4:6:7:15 -0x00d6,3 -0x00d7,-1 -0x00d8,6 -0x00d9,14,chataddmember,2:6 -0x00da,3 -0x00db,-1 -0x00dc,28 -0x00dd,29 -0x00de,-1,chatroomstatuschange,2:4:6:7:15 -0x00df,-1 -0x00e0,30,changechatowner,2:6 -0x00e1,30 -0x00e2,26,kickfromchat,2 -0x00e3,2,chatleave,0 -0x00e4,6,traderequest,2 -0x00e5,26 -0x00e6,3,tradeack,2 -0x00e7,3 -0x00e8,8,tradeadditem,2:4 -0x00e9,19 -0x00ea,5 -0x00eb,2,tradeok,0 -0x00ec,3 -0x00ed,2,tradecancel,0 -0x00ee,2 -0x00ef,2,tradecommit,0 -0x00f0,3 -0x00f1,2 -0x00f2,6 -0x00f3,8,movetokafra,2:4 -0x00f4,21 -0x00f5,8,movefromkafra,2:4 -0x00f6,8 -0x00f7,2,closekafra,0 -0x00f8,2 -0x00f9,26,createparty,2 -0x00fa,3 -0x00fb,-1 -0x00fc,6,partyinvite,2 -0x00fd,27 -0x00fe,30 -0x00ff,10,replypartyinvite,2:6 -0x0100,2,leaveparty,0 -0x0101,6 -0x0102,6,partychangeoption,2 -0x0103,30,removepartymember,2:6 -0x0104,79 -0x0105,31 -0x0106,10 -0x0107,10 -0x0108,-1,partymessage,2:4 -0x0109,-1 -0x010a,4 -0x010b,6 -0x010c,6 -0x010d,2 -0x010e,11 -0x010f,-1 -0x0110,10 -0x0111,39 -0x0112,4,skillup,2 -0x0113,10,useskilltoid,2:4:6 -0x0114,31 -0x0115,35 -0x0116,10,useskilltopos,2:4:6:8 -0x0117,18 -0x0118,2,stopattack,0 -0x0119,13 -0x011a,15 -0x011b,20,useskillmap,2:4 -0x011c,68 -0x011d,2,requestmemo,0 -0x011e,3 -0x011f,16 -0x0120,6 -0x0121,14 -0x0122,-1 -0x0123,-1 -0x0124,21 -0x0125,8 -0x0126,8,putitemtocart,2:4 -0x0127,8,getitemfromcart,2:4 -0x0128,8,movefromkafratocart,2:4 -0x0129,8,movetokafrafromcart,2:4 -0x012a,2,removeoption,0 -0x012b,2 -0x012c,3 -0x012d,4 -0x012e,2,closevending,0 -0x012f,-1,openvending,2:4:0:84 -0x0130,6,vendinglistreq,2 -0x0131,86 -0x0132,6 -0x0133,-1 -0x0134,-1,purchasereq,2:4:8 -0x0135,7 -0x0136,-1 -0x0137,6 -0x0138,3 -0x0139,16 -0x013a,4 -0x013b,4 -0x013c,4 -0x013d,6 -0x013e,24 -0x013f,26,itemmonster,2 -0x0140,22,mapmove,2:18:20 -0x0141,14 -0x0142,6 -0x0143,10,npcamountinput,2:6 -0x0144,23 -0x0145,19 -0x0146,6,npccloseclicked,2 -0x0147,39 -0x0148,8 -0x0149,9,gmreqnochat,2:6:7 -0x014a,6 -0x014b,27 -0x014c,-1 -0x014d,2,guildcheckmaster,0 -0x014e,6 -0x014f,6,guildrequestinfo,2 -0x0150,110 -0x0151,6,guildrequestemblem,2 -0x0152,-1 -0x0153,-1,guildchangeemblem,2:4 -0x0154,-1 -0x0155,-1,guildchangememberposition,2:4 -0x0156,-1 -0x0157,6 -0x0158,-1 -0x0159,54,guildleave,2:6:10:14 -0x015a,66 -0x015b,54,guildexpulsion,2:6:10:14 -0x015c,90 -0x015d,42,guildbreak,2 -0x015e,6 -0x015f,42 -0x0160,-1 -0x0161,-1,guildchangepositioninfo,2:4 -0x0162,-1 -0x0163,-1 -0x0164,-1 -0x0165,30,createguild,2:6 -0x0166,-1 -0x0167,3 -0x0168,14,guildinvite,2:6:10 -0x0169,3 -0x016a,30 -0x016b,10,guildreplyinvite,2:6 -0x016c,43 -0x016d,14 -0x016e,186,guildchangenotice,2:6:66 -0x016f,182 -0x0170,14,guildrequestalliance,2:6:10 -0x0171,30 -0x0172,10,guildreplyalliance,2:6 -0x0173,3 -0x0174,-1 -0x0175,6 -0x0176,106 -0x0177,-1 -0x0178,4,itemidentify,2 -0x0179,5 -0x017a,4,usecard,2 -0x017b,-1 -0x017c,6,insertcard,2:4 -0x017d,7 -0x017e,-1,guildmessage,2:4 -0x017f,-1 -0x0180,6,guildopposition,2 -0x0181,3 -0x0182,106 -0x0183,10,guilddelalliance,2:6 -0x0184,10 -0x0185,34 -//0x0186,-1 -0x0187,6 -0x0188,8 -0x0189,4 -0x018a,4,quitgame,2 -0x018b,4 -0x018c,29 -0x018d,-1 -0x018e,10,producemix,2:4:6:8 -0x018f,6 -0x0190,90,useskilltoposinfo,2:4:6:8:10 -0x0191,86 -0x0192,24 -0x0193,6,solvecharname,2 -0x0194,30 -0x0195,102 -0x0196,9 -0x0197,4,resetchar,2 -0x0198,8,changemaptype,2:4:6 -0x0199,4 -0x019a,14 -0x019b,10 -0x019c,-1,localbroadcast,2:4 -0x019d,6,gmhide,2 -0x019e,2 -0x019f,6,catchpet,2 -0x01a0,3 -0x01a1,3,petmenu,2 -0x01a2,35 -0x01a3,5 -0x01a4,11 -0x01a5,26,changepetname,2 -0x01a6,-1 -0x01a7,4,selectegg,2 -0x01a8,4 -0x01a9,6,sendemotion,2 -0x01aa,10 -0x01ab,12 -0x01ac,6 -0x01ad,-1 -0x01ae,4,selectarrow,2 -0x01af,4,changecart,2 -0x01b0,11 -0x01b1,7 -0x01b2,-1,openvending,2:4:84:85 -0x01b3,67 -0x01b4,12 -0x01b5,18 -0x01b6,114 -0x01b7,6 -0x01b8,3 -0x01b9,6 -0x01ba,26,remove,2 -0x01bb,26,shift,2 -0x01bc,26,recall,2 -0x01bd,26,summon,2 -0x01be,2 -0x01bf,3 -0x01c0,2 -0x01c1,14 -0x01c2,10 -0x01c3,-1 -0x01c4,22 -0x01c5,22 -0x01c6,4 -0x01c7,2 -0x01c8,13 -0x01c9,97 -//0x01ca,-1 -0x01cb,9 -0x01cc,9 -0x01cd,30 -0x01ce,6,autospell,2 -0x01cf,28 -0x01d0,8 -0x01d1,14 -0x01d2,10 -0x01d3,35 -0x01d4,6 -0x01d5,-1,npcstringinput,2:4:8 -0x01d6,4 -0x01d7,11 -0x01d8,54 -0x01d9,53 -0x01da,60 -0x01db,2 -0x01dc,-1 -0x01dd,47 -0x01de,33 -0x01df,6,gmreqaccname,2 -0x01e0,30 -0x01e1,8 -0x01e2,34 -0x01e3,14 -0x01e4,2 -0x01e5,6 -0x01e6,26 -0x01e7,2,sndoridori,0 -0x01e8,28,createparty2,2:26:27 -0x01e9,81 -0x01ea,6 -0x01eb,10 -0x01ec,26 -0x01ed,2,snexplosionspirits,0 -0x01ee,-1 -0x01ef,-1 -0x01f0,-1 -0x01f1,-1 -0x01f2,20 -0x01f3,10 -0x01f4,32 -0x01f5,9 -0x01f6,34 -0x01f7,14,adoptreply,2:6:10 -0x01f8,2 -0x01f9,6,adoptrequest,2 -0x01fa,48 -0x01fb,56 -0x01fc,-1 -0x01fd,4,repairitem,2 -0x01fe,5 -0x01ff,10 -0x0200,26 -0x0201,-1 -0x0202,26,friendslistadd,2 -0x0203,10,friendslistremove,2:6 -0x0204,18 -0x0205,26 -0x0206,11 -0x0207,34 -0x0208,11,friendslistreply,2:6:10 -0x0209,36 -0x020a,10 -//0x020b,-1 -//0x020c,-1 -0x020d,-1 -0x8b3,-1 -0x8d6,6,ZC_CLEAR_DIALOG,2 - -//2004-07-05aSakexe -packet_ver: 6 -0x0072,22,wanttoconnection,5:9:13:17:21 -0x0085,8,walktoxy,5 -0x00a7,13,useitem,5:9 -0x0113,15,useskilltoid,4:9:11 -0x0116,15,useskilltopos,4:9:11:13 -0x0190,95,useskilltoposinfo,4:9:11:13:15 -0x0208,14,friendslistreply,2:6:10 -0x020e,24 - -//2004-07-13aSakexe -packet_ver: 7 -0x0072,39,wanttoconnection,12:22:30:34:38 -0x0085,9,walktoxy,6 -0x009b,13,changedir,5:12 -0x009f,10,takeitem,6 -0x00a7,17,useitem,6:13 -0x0113,19,useskilltoid,7:9:15 -0x0116,19,useskilltopos,7:9:15:17 -0x0190,99,useskilltoposinfo,7:9:15:17:19 - -//2004-07-26aSakexe -packet_ver: 8 -0x0072,14,dropitem,5:12 -0x007e,33,wanttoconnection,12:18:24:28:32 -0x0085,20,useskilltoid,7:12:16 -0x0089,15,getcharnamerequest,11 -0x008c,23,useskilltopos,3:6:17:21 -0x0094,10,takeitem,6 -0x009b,6,walktoxy,3 -0x009f,13,changedir,5:12 -0x00a2,103,useskilltoposinfo,3:6:17:21:23 -0x00a7,12,solvecharname,8 -0x00f3,-1,globalmessage,2:4 -0x00f5,17,useitem,6:12 -0x00f7,10,ticksend,6 -0x0113,16,movetokafra,5:12 -0x0116,2,closekafra,0 -0x0190,26,movefromkafra,10:22 -0x0193,9,actionrequest,3:8 - -//2004-08-09aSakexe -packet_ver: 9 -0x0072,17,dropitem,8:15 -0x007e,37,wanttoconnection,9:21:28:32:36 -0x0085,26,useskilltoid,11:18:22 -0x0089,12,getcharnamerequest,8 -0x008c,40,useskilltopos,5:15:29:38 -0x0094,13,takeitem,9 -0x009b,15,walktoxy,12 -0x009f,12,changedir,7:11 -0x00a2,120,useskilltoposinfo,5:15:29:38:40 -0x00a7,11,solvecharname,7 -0x00f5,24,useitem,9:20 -0x00f7,13,ticksend,9 -0x0113,23,movetokafra,5:19 -0x0190,26,movefromkafra,11:22 -0x0193,18,actionrequest,7:17 - -//2004-08-16aSakexe -0x0212,26,rc,2 -0x0213,26,check,2 -0x0214,42 - -//2004-08-17aSakexe -0x020f,10,pvpinfo,2:6 -0x0210,22 - -//2004-09-06aSakexe -packet_ver: 10 -0x0072,20,useitem,9:20 -0x007e,19,movetokafra,3:15 -0x0085,23,actionrequest,9:22 -0x0089,9,walktoxy,6 -0x008c,105,useskilltoposinfo,10:14:18:23:25 -0x0094,17,dropitem,6:15 -0x009b,14,getcharnamerequest,10 -0x009f,-1,globalmessage,2:4 -0x00a2,14,solvecharname,10 -0x00a7,25,useskilltopos,10:14:18:23 -0x00f3,10,changedir,4:9 -0x00f5,34,wanttoconnection,7:15:25:29:33 -0x00f7,2,closekafra,0 -0x0113,11,takeitem,7 -0x0116,11,ticksend,7 -0x0190,22,useskilltoid,9:15:18 -0x0193,17,movefromkafra,3:13 - -//2004-09-20aSakexe -packet_ver: 11 -0x0072,18,useitem,10:14 -0x007e,25,movetokafra,6:21 -0x0085,9,actionrequest,3:8 -0x0089,14,walktoxy,11 -0x008c,109,useskilltoposinfo,16:20:23:27:29 -0x0094,19,dropitem,12:17 -0x009b,10,getcharnamerequest,6 -0x00a2,10,solvecharname,6 -0x00a7,29,useskilltopos,6:20:23:27 -0x00f3,18,changedir,8:17 -0x00f5,32,wanttoconnection,10:17:23:27:31 -0x0113,14,takeitem,10 -0x0116,14,ticksend,10 -0x0190,14,useskilltoid,4:7:10 -0x0193,12,movefromkafra,4:8 - -//2004-10-05aSakexe -packet_ver: 12 -0x0072,17,useitem,6:13 -0x007e,16,movetokafra,5:12 -0x0089,6,walktoxy,3 -0x008c,103,useskilltoposinfo,2:6:17:21:23 -0x0094,14,dropitem,5:12 -0x009b,15,getcharnamerequest,11 -0x00a2,12,solvecharname,8 -0x00a7,23,useskilltopos,3:6:17:21 -0x00f3,13,changedir,5:12 -0x00f5,33,wanttoconnection,12:18:24:28:32 -0x0113,10,takeitem,6 -0x0116,10,ticksend,6 -0x0190,20,useskilltoid,7:12:16 -0x0193,26,movefromkafra,10:22 - -//2004-10-25aSakexe -packet_ver: 13 -0x0072,13,useitem,5:9 -0x007e,13,movetokafra,6:9 -0x0085,15,actionrequest,4:14 -0x008c,108,useskilltoposinfo,6:9:23:26:28 -0x0094,12,dropitem,6:10 -0x009b,10,getcharnamerequest,6 -0x00a2,16,solvecharname,12 -0x00a7,28,useskilltopos,6:9:23:26 -0x00f3,15,changedir,6:14 -0x00f5,29,wanttoconnection,5:14:20:24:28 -0x0113,9,takeitem,5 -0x0116,9,ticksend,5 -0x0190,26,useskilltoid,4:10:22 -0x0193,22,movefromkafra,12:18 - -//2004-11-01aSakexe -0x0084,-1 -0x0215,6 - -//2004-11-08aSakexe -0x0084,2 -0x0216,6 -0x0217,2,blacksmith,0 -0x0218,2,alchemist,0 -0x0219,282 -0x021a,282 -0x021b,10 -0x021c,10 - -//2004-11-15aSakexe -0x021d,6,lesseffect,2 - -//2004-11-29aSakexe -packet_ver: 14 -0x0072,22,useskilltoid,8:12:18 -0x007e,30,useskilltopos,4:9:22:28 -0x0085,-1,globalmessage,2:4 -0x0089,7,ticksend,3 -0x008c,13,getcharnamerequest,9 -0x0094,14,movetokafra,4:10 -0x009b,2,closekafra,0 -0x009f,18,actionrequest,6:17 -0x00a2,7,takeitem,3 -0x00a7,7,walktoxy,4 -0x00f3,8,changedir,3:7 -0x00f5,29,wanttoconnection,3:10:20:24:28 -0x00f7,14,solvecharname,10 -0x0113,110,useskilltoposinfo,4:9:22:28:30 -0x0116,12,dropitem,4:10 -0x0190,15,useitem,3:11 -0x0193,21,movefromkafra,4:17 -0x0221,-1 -0x0222,6,weaponrefine,2 -0x0223,8 - -//2004-12-13aSakexe -//skipped: many packets being set to -1 -0x0066,3 -0x0070,3 -0x01ca,3 -0x021e,6 -0x021f,66 -0x0220,10 - -//2005-01-10bSakexe -packet_ver: 15 -0x0072,26,useskilltoid,8:16:22 -0x007e,114,useskilltoposinfo,10:18:22:32:34 -0x0085,23,changedir,12:22 -0x0089,9,ticksend,5 -0x008c,8,getcharnamerequest,4 -0x0094,20,movetokafra,10:16 -0x009b,32,wanttoconnection,3:12:23:27:31 -0x009f,17,useitem,5:13 -0x00a2,11,solvecharname,7 -0x00a7,13,walktoxy,10 -0x00f3,-1,globalmessage,2:4 -0x00f5,9,takeitem,5 -0x00f7,21,movefromkafra,11:17 -0x0113,34,useskilltopos,10:18:22:32 -0x0116,20,dropitem,15:18 -0x0190,20,actionrequest,9:19 -0x0193,2,closekafra,0 - -//2005-03-28aSakexe -0x0224,10 -0x0225,2,taekwon,0 -0x0226,282 - -//2005-04-04aSakexe -0x0227,18 -0x0228,18 - -//2005-04-11aSakexe -0x0229,15 -0x022a,58 -0x022b,57 -0x022c,64 - -//2005-04-25aSakexe -0x022d,5,hommenu,2:4 -0x0232,9,hommoveto,2:6 -0x0233,11,homattack,2:6:10 -0x0234,6,hommovetomaster,2 - -//2005-05-09aSakexe -packet_ver: 16 -0x0072,25,useskilltoid,6:10:21 -0x007e,102,useskilltoposinfo,5:9:12:20:22 -0x0085,11,changedir,7:10 -0x0089,8,ticksend,4 -0x008c,11,getcharnamerequest,7 -0x0094,14,movetokafra,7:10 -0x009b,26,wanttoconnection,4:9:17:21:25 -0x009f,14,useitem,4:10 -0x00a2,15,solvecharname,11 -0x00a7,8,walktoxy,5 -0x00f5,8,takeitem,4 -0x00f7,22,movefromkafra,14:18 -0x0113,22,useskilltopos,5:9:12:20 -0x0116,10,dropitem,5:8 -0x0190,19,actionrequest,5:18 - -//2005-05-23aSakexe -0x022e,69 -0x0230,12 - -//2005-05-30aSakexe -0x022e,71 -0x0235,-1 -0x0236,10 -0x0237,2,rankingpk,0 -0x0238,282 - -//2005-05-31aSakexe -0x0216,2 -0x0239,11 - -//2005-06-08aSakexe -0x0216,6 -0x0217,2,blacksmith,0 -0x022f,5 -0x0231,26,changehomunculusname,2 -0x023a,4 -0x023b,36,storagepassword,2:4:20 -0x023c,6 - -//2005-06-22aSakexe -0x022e,71 - -//2005-06-28aSakexe -packet_ver: 17 -0x0072,34,useskilltoid,6:17:30 -0x007e,113,useskilltoposinfo,12:15:18:31:33 -0x0085,17,changedir,8:16 -0x0089,13,ticksend,9 -0x008c,8,getcharnamerequest,4 -0x0094,31,movetokafra,16:27 -0x009b,32,wanttoconnection,9:15:23:27:31 -0x009f,19,useitem,9:15 -0x00a2,9,solvecharname,5 -0x00a7,11,walktoxy,8 -0x00f5,13,takeitem,9 -0x00f7,18,movefromkafra,11:14 -0x0113,33,useskilltopos,12:15:18:31 -0x0116,12,dropitem,3:10 -0x0190,24,actionrequest,11:23 -0x0216,-1 -0x023d,-1 -0x023e,4 - -//2005-07-18aSakexe -packet_ver: 18 -0x0072,19,useskilltoid,5:11:15 -0x007e,110,useskilltoposinfo,9:15:23:28:30 -0x0085,11,changedir,6:10 -0x0089,7,ticksend,3 -0x008c,11,getcharnamerequest,7 -0x0094,21,movetokafra,12:17 -0x009b,31,wanttoconnection,3:13:22:26:30 -0x009f,12,useitem,3:8 -0x00a2,18,solvecharname,14 -0x00a7,15,walktoxy,12 -0x00f5,7,takeitem,3 -0x00f7,13,movefromkafra,5:9 -0x0113,30,useskilltopos,9:15:23:28 -0x0116,12,dropitem,6:10 -0x0190,21,actionrequest,5:20 -0x0216,6 -0x023f,2,mailrefresh,0 -0x0240,8 -0x0241,6,mailread,2 -0x0242,-1 -0x0243,6,maildelete,2 -0x0244,6,mailgetattach,2 -0x0245,7 -0x0246,4,mailwinopen,2 -0x0247,8,mailsetattach,2:4 -0x0248,68 -0x0249,3 -0x024a,70 -0x024b,4,auctioncancelreg,2 -0x024c,8,auctionsetitem,2:4 -0x024d,14 -0x024e,6,auctioncancel,2 -0x024f,10,auctionbid,2:6 -0x0250,3 -0x0251,2 -0x0252,-1 - -//2005-07-19bSakexe -packet_ver: 19 -0x0072,34,useskilltoid,6:17:30 -0x007e,113,useskilltoposinfo,12:15:18:31:33 -0x0085,17,changedir,8:16 -0x0089,13,ticksend,9 -0x008c,8,getcharnamerequest,4 -0x0094,31,movetokafra,16:27 -0x009b,32,wanttoconnection,9:15:23:27:31 -0x009f,19,useitem,9:15 -0x00a2,9,solvecharname,5 -0x00a7,11,walktoxy,8 -0x00f5,13,takeitem,9 -0x00f7,18,movefromkafra,11:14 -0x0113,33,useskilltopos,12:15:18:31 -0x0116,12,dropitem,3:10 -0x0190,24,actionrequest,11:23 - -//2005-08-01aSakexe -0x0245,3 -0x0251,4 - -//2005-08-08aSakexe -0x024d,12,auctionregister,2:6:10 -0x024e,4 - -//2005-08-17aSakexe -0x0253,3 -0x0254,3,feelsaveok,2 - -//2005-08-29aSakexe -0x0240,-1 -0x0248,-1,mailsend,2:4:28:68:69 -0x0255,5 -0x0256,-1 -0x0257,8 - -//2005-09-12bSakexe -0x0256,5 -0x0258,2 -0x0259,3 - -//2005-10-10aSakexe -0x020e,32 -0x025a,-1 -0x025b,6,cooking,2:4 - -//2005-10-13aSakexe -0x007a,6 -0x0251,32 -0x025c,4,auctionbuysell,2 - -//2005-10-17aSakexe -0x007a,58 -0x025d,6,auctionclose,2 -0x025e,4 - -//2005-10-24aSakexe -0x025f,6 -0x0260,6 - -//2005-11-07aSakexe -0x024e,6,auctioncancel,2 -0x0251,34,auctionsearch,2:4:8:32 - -//2006-01-09aSakexe -0x0261,11 -0x0262,11 -0x0263,11 -0x0264,20 -0x0265,20 -0x0266,30 -0x0267,4 -0x0268,4 -0x0269,4 -0x026a,4 -0x026b,4 -0x026c,4 -0x026d,4 -0x026f,2 -0x0270,2 -0x0271,38 -0x0272,44 - -//2006-01-26aSakexe -0x0271,40 - -//2006-03-06aSakexe -0x0273,6 -0x0274,8 - -//2006-03-13aSakexe -0x0273,30,mailreturn,2:6 - -//2006-03-27aSakexe -packet_ver: 20 -0x0072,26,useskilltoid,11:18:22 -0x007e,120,useskilltoposinfo,5:15:29:38:40 -0x0085,12,changedir,7:11 -//0x0089,13,ticksend,9 -0x008c,12,getcharnamerequest,8 -0x0094,23,movetokafra,5:19 -0x009b,37,wanttoconnection,9:21:28:32:36 -0x009f,24,useitem,9:20 -0x00a2,11,solvecharname,7 -0x00a7,15,walktoxy,12 -0x00f5,13,takeitem,9 -0x00f7,26,movefromkafra,11:22 -0x0113,40,useskilltopos,5:15:29:38 -0x0116,17,dropitem,8:15 -0x0190,18,actionrequest,7:17 - -//2006-10-23aSakexe -0x006d,110 - -//2006-04-24aSakexe to 2007-01-02aSakexe -0x023e,8 -0x0277,84 -0x0278,2 -0x0279,2 -0x027a,-1 -0x027b,14 -0x027c,60 -0x027d,62 -0x027e,-1 -0x027f,8 -0x0280,12 -0x0281,4 -0x0282,284 -0x0283,6 -0x0284,14 -0x0285,6 -0x0286,4 -0x0287,-1 -0x0288,6 -0x0289,8 -0x028a,18 -0x028b,-1 -0x028c,46 -0x028d,34 -0x028e,4 -0x028f,6 -0x0290,4 -0x0291,4 -0x0292,2,autorevive,0 -0x0293,70 -0x0294,10 -0x0295,-1 -0x0296,-1 -0x0297,-1 -0x0298,8 -0x0299,6 -0x029a,27 -0x029c,66 -0x029d,-1 -0x029e,11 -0x029f,3,mermenu,2 -0x02a0,-1 -0x02a1,-1 -0x02a2,8 - -//2007-01-08aSakexe -packet_ver: 21 -0x0072,30,useskilltoid,10:14:26 -0x007e,120,useskilltoposinfo,10:19:23:38:40 -0x0085,14,changedir,10:13 -0x0089,11,ticksend,7 -0x008c,17,getcharnamerequest,13 -0x0094,17,movetokafra,4:13 -0x009b,35,wanttoconnection,7:21:26:30:34 -0x009f,21,useitem,7:17 -0x00a2,10,solvecharname,6 -0x00a7,8,walktoxy,5 -0x00f5,11,takeitem,7 -0x00f7,15,movefromkafra,3:11 -0x0113,40,useskilltopos,10:19:23:38 -0x0116,19,dropitem,11:17 -0x0190,10,actionrequest,4:9 - -//2007-01-22aSakexe -0x02a3,18 -0x02a4,2 - -//2007-01-29aSakexe -0x029b,72 -0x02a3,-1 -0x02a4,-1 -0x02a5,8 - -// 2007-02-05aSakexe -0x02aa,4 -0x02ab,36 -0x02ac,6 - -//2007-02-12aSakexe -packet_ver: 22 -0x0072,25,useskilltoid,6:10:21 -0x007e,102,useskilltoposinfo,5:9:12:20:22 -0x0085,11,changedir,7:10 -0x0089,8,ticksend,4 -0x008c,11,getcharnamerequest,7 -0x0094,14,movetokafra,7:10 -0x009b,26,wanttoconnection,4:9:17:21:25 -0x009f,14,useitem,4:10 -0x00a2,15,solvecharname,11 -//0x00a7,8,walktoxy,5 -0x00f5,8,takeitem,4 -0x00f7,22,movefromkafra,14:18 -0x0113,22,useskilltopos,5:9:12:20 -0x0116,10,dropitem,5:8 -0x0190,19,actionrequest,5:18 - -//2007-05-07aSakexe -0x01fd,15,repairitem,2:4:6:7:9:11:13 - -//2007-02-27aSakexe to 2007-10-02aSakexe -0x0288,10,cashshopbuy,2:4:6 -0x0289,12 -0x02a6,22 -0x02a7,22 -0x02a8,162 -0x02a9,58 -0x02ad,8 -0x02b0,85 -0x02b1,-1 -0x02b2,-1 -0x02b3,107 -0x02b4,6 -0x02b5,-1 -0x02b6,7,queststate,2:6 -0x02b7,7 -0x02b8,22 -0x02b9,191 -0x02ba,11,hotkey,2:4:5:9 -0x02bb,8 -0x02bc,6 -0x02bf,10 -0x02c0,2 -0x02c1,-1 -0x02c2,-1 -0x02c4,26,partyinvite2,2 -0x02c5,30 -0x02c6,30 -0x02c7,7,replypartyinvite2,2:6 -0x02c8,3,partytick,2 -0x02c9,3 -0x02ca,3 -0x02cb,20 -0x02cc,4 -0x02cd,26 -0x02ce,10 -0x02cf,6 -0x02d0,-1 -0x02d1,-1 -0x02d2,-1 -0x02d3,4,ZC_NOTIFY_BIND_ON_EQUIP,2 -0x02d4,29 -0x02d5,2 -0x02d6,6,viewplayerequip,2 -0x02d7,-1 -0x02d8,10,equiptickbox,2:6 -0x02d9,10 -0x02da,3 -0x02db,-1,battlechat,2:4 -0x02dc,-1 -0x02dd,32 -0x02de,6 -0x02df,36 -0x02e0,34 - -//2007-10-23aSakexe -0x02cb,65 -0x02cd,71 - -//2007-11-06aSakexe -0x0078,55 -0x007c,42 -0x022c,65 -0x029b,80 - -//2007-11-13aSakexe -0x02e1,33 - -//2007-11-20aSakexe -//0x01df,10 <- ??? -0x02e2,14 -0x02e3,25 -0x02e4,8 -0x02e5,8 -0x02e6,6 - -//2007-11-27aSakexe -0x02e7,-1 - -//2008-01-02aSakexe -0x01df,6,gmreqaccname,2 -0x02e8,-1 -0x02e9,-1 -0x02ea,-1 -0x02eb,13 -0x02ec,67 -0x02ed,59 -0x02ee,60 -0x02ef,8 - -//2008-03-18aSakexe -0x02bf,-1 -0x02c0,-1 -0x02f0,10 -0x02f1,2,progressbar,0 -0x02f2,2 - -//2008-03-25bSakexe -0x02f3,-1 -0x02f4,-1 -0x02f5,-1 -0x02f6,-1 -0x02f7,-1 -0x02f8,-1 -0x02f9,-1 -0x02fa,-1 -0x02fb,-1 -0x02fc,-1 -0x02fd,-1 -0x02fe,-1 -0x02ff,-1 -0x0300,-1 - -//2008-04-01aSakexe -0x0301,-1 -0x0302,-1 -0x0303,-1 -0x0304,-1 -0x0305,-1 -0x0306,-1 -0x0307,-1 -0x0308,-1 -0x0309,-1 -0x030a,-1 -0x030b,-1 -0x030c,-1 -0x030d,-1 -0x030e,-1 -0x030f,-1 -0x0310,-1 -0x0311,-1 -0x0312,-1 -0x0313,-1 -0x0314,-1 -0x0315,-1 -0x0316,-1 -0x0317,-1 -0x0318,-1 -0x0319,-1 -0x031a,-1 -0x031b,-1 -0x031c,-1 -0x031d,-1 -0x031e,-1 -0x031f,-1 -0x0320,-1 -0x0321,-1 -0x0322,-1 -0x0323,-1 -0x0324,-1 -0x0325,-1 -0x0326,-1 -0x0327,-1 -0x0328,-1 -0x0329,-1 -0x032a,-1 -0x032b,-1 -0x032c,-1 -0x032d,-1 -0x032e,-1 -0x032f,-1 -0x0330,-1 -0x0331,-1 -0x0332,-1 -0x0333,-1 -0x0334,-1 -0x0335,-1 -0x0336,-1 -0x0337,-1 -0x0338,-1 -0x0339,-1 -0x033a,-1 -0x033b,-1 -0x033c,-1 -0x033d,-1 -0x033e,-1 -0x033f,-1 -0x0340,-1 -0x0341,-1 -0x0342,-1 -0x0343,-1 -0x0344,-1 -0x0345,-1 -0x0346,-1 -0x0347,-1 -0x0348,-1 -0x0349,-1 -0x034a,-1 -0x034b,-1 -0x034c,-1 -0x034d,-1 -0x034e,-1 -0x034f,-1 -0x0350,-1 -0x0351,-1 -0x0352,-1 -0x0353,-1 -0x0354,-1 -0x0355,-1 -0x0356,-1 -0x0357,-1 -0x0358,-1 -0x0359,-1 -0x035a,-1 - -//2008-05-27aSakexe -0x035b,-1 -0x035c,2 -0x035d,-1 -0x035e,2 -0x035f,-1 -0x0389,-1 - -//2008-08-20aSakexe -0x040c,-1 -0x040d,-1 -0x040e,-1 -0x040f,-1 -0x0410,-1 -0x0411,-1 -0x0412,-1 -0x0413,-1 -0x0414,-1 -0x0415,-1 -0x0416,-1 -0x0417,-1 -0x0418,-1 -0x0419,-1 -0x041a,-1 -0x041b,-1 -0x041c,-1 -0x041d,-1 -0x041e,-1 -0x041f,-1 -0x0420,-1 -0x0421,-1 -0x0422,-1 -0x0423,-1 -0x0424,-1 -0x0425,-1 -0x0426,-1 -0x0427,-1 -0x0428,-1 -0x0429,-1 -0x042a,-1 -0x042b,-1 -0x042c,-1 -0x042d,-1 -0x042e,-1 -0x042f,-1 -0x0430,-1 -0x0431,-1 -0x0432,-1 -0x0433,-1 -0x0434,-1 -0x0435,-1 - -//2008-09-10aSakexe -packet_ver: 23 -0x0436,19,wanttoconnection,2:6:10:14:18 -0x0437,7,actionrequest,2:6 -0x0438,10,useskilltoid,2:4:6 -0x0439,8,useitem,2:4 - -//2008-11-13aSakexe -0x043d,8 -0x043e,-1 -0x043f,8 - -//2008-11-26aSakexe -0x01a2,37 -0x0440,10 -0x0441,4 - -//2008-12-10aSakexe -0x0442,-1 -0x0443,8,skillselectmenu,2:6 - -//2009-01-14aSakexe -0x043f,25 -0x0444,-1 -0x0445,10 - -//2009-02-18aSakexe -0x0446,14 - -//2009-02-25aSakexe -0x0448,-1 - -//2009-03-30aSakexe -0x0449,4 - -//2009-04-08aSakexe -0x02a6,-1 -0x02a7,-1 -0x044a,6,clientversion,2 - -//Renewal Clients -//2008-08-27aRagexeRE -packet_ver: 24 -0x0072,22,useskilltoid,9:15:18 -0x007c,44 -0x007e,105,useskilltoposinfo,10:14:18:23:25 -0x0085,10,changedir,4:9 -0x0089,11,ticksend,7 -0x008c,14,getcharnamerequest,10 -0x0094,19,movetokafra,3:15 -0x009b,34,wanttoconnection,7:15:25:29:33 -0x009f,20,useitem,7:20 -0x00a2,14,solvecharname,10 -0x00a7,9,walktoxy,6 -0x00f5,11,takeitem,7 -0x00f7,17,movefromkafra,3:13 -0x0113,25,useskilltopos,10:14:18:23 -0x0116,17,dropitem,6:15 -0x0190,23,actionrequest,9:22 -0x02e2,20 -0x02e3,22 -0x02e4,11 -0x02e5,9 - -//2008-09-10aRagexeRE -packet_ver: 25 -0x0436,19,wanttoconnection,2:6:10:14:18 -0x0437,7,actionrequest,2:6 -0x0438,10,useskilltoid,2:4:6 -0x0439,8,useitem,2:4 - -//2008-11-12aRagexeRE -0x043d,8 -//0x043e,-1 -0x043f,8 - -//2008-12-17aRagexeRE -0x01a2,37 -//0x0440,10 -//0x0441,4 -//0x0442,8 -//0x0443,8 - -//2008-12-17bRagexeRE -0x006d,114 - -//2009-01-21aRagexeRE -0x043f,25 -//0x0444,-1 -//0x0445,10 - -//2009-02-18aRagexeRE -//0x0446,14 - -//2009-02-26cRagexeRE -//0x0448,-1 - -//2009-04-01aRagexeRE -//0x0449,4 - -//2009-05-14aRagexeRE -//0x044b,2 - -//2009-05-20aRagexeRE -//0x07d0,6 -//0x07d1,2 -//0x07d2,-1 -//0x07d3,4 -//0x07d4,4 -//0x07d5,4 -//0x07d6,4 -//0x0447,2 - -//2009-06-03aRagexeRE -0x07d7,8,partychangeoption,2:6:7 -0x07d8,8 -0x07d9,254 -0x07da,6,partychangeleader,2 - -//2009-06-10aRagexeRE -//0x07db,8 - -//2009-06-17aRagexeRE -0x07d9,268 -//0x07dc,6 -//0x07dd,54 -//0x07de,30 -//0x07df,54 - -//2009-07-01aRagexeRE -//0x0275,37 -//0x0276,-1 - -//2009-07-08aRagexeRE -//0x07e0,58 - -//2009-07-15aRagexeRE -0x07e1,15 - -//2009-08-05aRagexeRE -0x07e2,8 - -//2009-08-18aRagexeRE -0x07e3,6 -0x07e4,-1,itemlistwindowselected,2:4:8:12 -0x07e6,8 - -//2009-08-25aRagexeRE -//0x07e6,28 -0x07e7,5 - -//2009-09-22aRagexeRE -0x07e5,8 -0x07e6,8 -0x07e7,32 -0x07e8,-1 -0x07e9,5 - -//2009-09-29aRagexeRE -//0x07ea,2 -//0x07eb,-1 -//0x07ec,6 -//0x07ed,8 -//0x07ee,6 -//0x07ef,8 -//0x07f0,4 -//0x07f2,4 -//0x07f3,3 - -//2009-10-06aRagexeRE -//0x07ec,8 -//0x07ed,10 -//0x07f0,8 -//0x07f1,15 -//0x07f2,6 -//0x07f3,4 -//0x07f4,3 - -//2009-10-27aRagexeRE -0x07f5,6,gmfullstrip,2 -0x07f6,14 - -//2009-11-03aRagexeRE -0x07f7,-1 -0x07f8,-1 -0x07f9,-1 - -//2009-11-17aRagexeRE -0x07fa,8 - -//2009-11-24aRagexeRE -0x07fb,25 - -//2009-12-01aRagexeRE -0x07fc,10 -0x07fd,-1,ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN,0 -0x07fe,26 -//0x07ff,-1 - -//2009-12-15aRagexeRE -0x0800,-1 -//0x0801,-1 - -//2009-12-22aRagexeRE -0x0802,18,bookingregreq,2:4:6 // Booking System -0x0803,4 -0x0804,8 // Booking System -0x0805,-1 -0x0806,4,bookingdelreq,2 // Booking System -//0x0807,2 -0x0808,4 // Booking System -//0x0809,14 -//0x080A,50 -//0x080B,18 -//0x080C,6 - -//2009-12-29aRagexeRE -0x0804,14,bookingsearchreq,2:4:6:8:12 // Booking System -0x0806,2,bookingdelreq,0 // Booking System -0x0807,4 -0x0808,14,bookingupdatereq,2 // Booking System -0x0809,50 -0x080A,18 -0x080B,6 // Booking System - -//2010-01-05aRagexeRE -0x0801,-1,purchasereq2,2:4:8:12 - -//2010-01-26aRagexeRE -//0x080C,2 -//0x080D,3 -0x080E,14 - -//2010-02-09aRagexeRE -//0x07F0,6 - -//2010-02-23aRagexeRE -0x080F,20 - -//2010-03-03aRagexeRE -0x0810,3 -0x0811,-1,reqopenbuyingstore,2:4:8:9:89 -//0x0812,86 -//0x0813,6 -//0x0814,6 -//0x0815,-1 -//0x0817,-1 -//0x0818,6 -//0x0819,4 - -//2010-03-09aRagexeRE -0x0813,-1 -//0x0814,2 -//0x0815,6 -0x0816,6 -0x0818,-1 -//0x0819,10 -//0x081A,4 -//0x081B,4 -//0x081C,6 -0x081d,22 -0x081e,8 - -//2010-03-23aRagexeRE -//0x081F,-1 - -//2010-04-06aRagexeRE -//0x081A,6 - -//2010-04-13aRagexeRE -//0x081A,10 -0x0820,11 -//0x0821,2 -//0x0822,9 -//0x0823,-1 - -//2010-04-14dRagexeRE -//0x081B,8 - -//2010-04-20aRagexeRE -0x0812,8 -0x0814,86 -0x0815,2,reqclosebuyingstore,0 -0x0817,6,reqclickbuyingstore,2 -0x0819,-1,reqtradebuyingstore,2:4:8:12 -0x081a,4 -0x081b,10 -0x081c,10 -0x0824,6 - -//2010-06-01aRagexeRE -//0x0825,-1 -//0x0826,4 -0x0835,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0836,-1 -0x0837,3 -//0x0838,3 - -//2010-06-08aRagexeRE -0x0838,2,searchstoreinfonextpage,0 -0x083A,4 // Search Stalls Feature -0x083B,2,closesearchstoreinfo,0 -0x083C,12,searchstoreinfolistitemclick,2:6:10 -0x083D,6 - -//2010-06-15aRagexeRE -//0x083E,26 - -//2010-06-22aRagexeRE -//0x083F,22 - -//2010-06-29aRagexeRE -0x00AA,9,ZC_WEAR_EQUIP_ACK,2:4:6:8 -//0x07F1,18 -//0x07F2,8 -//0x07F3,6 - -//2010-07-01aRagexeRE -0x083A,5 // Search Stalls Feature - -//2010-07-13aRagexeRE -//0x0827,6 -//0x0828,14 -//0x0829,6 -//0x082A,10 -//0x082B,6 -//0x082C,14 -//0x0840,-1 -//0x0841,19 - -//2010-07-14aRagexeRE -//0x0841,4 - -//2010-08-03aRagexeRE -0x0839,66 -0x0842,6,recall2,2 -0x0843,6,remove2,2 - -//2010-11-24aRagexeRE -packet_ver: 26 -0x0288,-1,cashshopbuy,2:4:8:10 -0x0436,19,wanttoconnection,2:6:10:14:18 -0x035f,5,walktoxy,2 -0x0360,6,ticksend,2 -0x0361,5,changedir,2:4 -0x0362,6,takeitem,2 -0x0363,6,dropitem,2:4 -0x0364,8,movetokafra,2:4 -0x0365,8,movefromkafra,2:4 -0x0366,10,useskilltopos,2:4:6:8 -0x0367,90,useskilltoposinfo,2:4:6:8:10 -0x0368,6,getcharnamerequest,2 -0x0369,6,solvecharname,2 -0x0856,-1 -0x0857,-1 -0x0858,-1 -0x0859,-1 -0x08d0,9,ZC_WEAR_EQUIP_ACK,2:4:6:8 - -//2011-10-05aRagexeRE -packet_ver: 27 -packet_keys: 0x291E6762,0x77CD391A,0x60AC2F16 // [Shakto] -0x0364,5,walktoxy,2 -0x0817,6,ticksend,2 -0x0366,5,changedir,2:4 -0x0815,6,takeitem,2 -0x0885,6,dropitem,2:4 -0x0893,8,movetokafra,2:4 -0x0897,8,movefromkafra,2:4 -0x0369,10,useskilltopos,2:4:6:8 -0x08ad,90,useskilltoposinfo,2:4:6:8:10 -0x088a,6,getcharnamerequest,2 -0x0838,6,solvecharname,2 -0x0439,8,useitem,2:4 -0x08d2,10 -0x08d1,7 -0x0846,4,cashshopreqtab,2 //2011-07-18 - -// 2011-11-02aRagexe -packet_ver: 28 -packet_keys: 0x5324329D,0x5D545D52,0x06137269 // [Shakto] -0x0436,26,friendslistadd,2 -0x0898,5,hommenu,2:4 -0x0281,36,storagepassword,2:4:20 -0x088d,26,partyinvite2,2 -0x083c,19,wanttoconnection,2:6:10:14:18 -0x08aa,7,actionrequest,2:6 -0x02c4,10,useskilltoid,2:4:6 -0x0811,-1,itemlistwindowselected,2:4:8:12 -0x0890,8 -0x08a5,18,bookingregreq,2:4:6 -0x0835,-1,reqopenbuyingstore,2:4:8:9:89 -0x089b,2,reqclosebuyingstore,0 -0x08a1,6,reqclickbuyingstore,2 -0x089e,-1,reqtradebuyingstore,2:4:8:12 -0x08ab,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x088b,2,searchstoreinfonextpage,0 -0x08a2,12,searchstoreinfolistitemclick,2:6:10 -0x08cf,10 //Amulet spirits - -//2012-03-07fRagexeRE -packet_ver:29 -packet_keys: 0x382A6DEF,0x5CBE7202,0x61F46637 // [Shakto] -0x086A,19,wanttoconnection,2:6:10:14:18 -0x0437,5,walktoxy,2 -0x0887,6,ticksend,2 -0x0890,5,changedir,2:4 -0x0865,6,takeitem,2 -0x02C4,6,dropitem,2:4 -0x093B,8,movetokafra,2:4 -0x0963,8,movefromkafra,2:4 -0x0438,10,useskilltopos,2:4:6:8 -0x0366,90,useskilltoposinfo,2:4:6:8:10 -0x096A,6,getcharnamerequest,2 -0x0368,6,solvecharname,2 -0x0369,26,friendslistadd,2 -0x0863,5,hommenu,2:4 -0x0861,36,storagepassword,2:4:20 -0x0929,26,partyinvite2,2 -0x0885,7,actionrequest,2:6 -0x0889,10,useskilltoid,2:4:6 -0x0870,-1,itemlistwindowselected,2:4:8:12 -//0x0926,41,bookingregreq,2:4:6 -0x0815,-1,reqopenbuyingstore,2:4:8:9:89 -0x0817,2,reqclosebuyingstore,0 -0x0360,6,reqclickbuyingstore,2 -0x0811,-1,reqtradebuyingstore,2:4:8:12 -0x0884,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0835,2,searchstoreinfonextpage,0 -0x0838,12,searchstoreinfolistitemclick,2:6:10 -0x0439,8,useitem,2:4 -0x0365,41,bookingregreq,2:4:6 - -// New Packet -0x090F,-1 // ZC_NOTIFY_NEWENTRY7 -0x0914,-1 // ZC_NOTIFY_MOVEENTRY8 -0x0915,-1 // ZC_NOTIFY_STANDENTRY9 - -//2012-04-10aRagexeRE -packet_ver: 30 -packet_keys: 0x01581359,0x452D6FFA,0x6AFB6E2E // [Shakto] -0x01fd,15,repairitem,2:4:6:7:9:11:13 -0x089c,26,friendslistadd,2 -0x0885,5,hommenu,2:4 -0x0961,36,storagepassword,2:4:20 -0x0288,-1,cashshopbuy,2:4:8:10 -0x091c,26,partyinvite2,2 -0x094b,19,wanttoconnection,2:6:10:14:18 -0x0369,7,actionrequest,2:6 -0x083c,10,useskilltoid,2:4:6 -0x0439,8,useitem,2:4 -0x0945,-1,itemlistwindowselected,2:4:8:12 -0x0815,-1,reqopenbuyingstore,2:4:8:9:89 -0x0817,2,reqclosebuyingstore,0 -0x0360,6,reqclickbuyingstore,2 -0x0811,-1,reqtradebuyingstore,2:4:8:12 -0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0835,2,searchstoreinfonextpage,0 -0x0838,12,searchstoreinfolistitemclick,2:6:10 -0x0437,5,walktoxy,2 -0x0886,6,ticksend,2 -0x0871,5,changedir,2:4 -0x0938,6,takeitem,2 -0x0891,6,dropitem,2:4 -0x086c,8,movetokafra,2:4 -0x08a6,8,movefromkafra,2:4 -0x0438,10,useskilltopos,2:4:6:8 -0x0366,90,useskilltoposinfo,2:4:6:8:10 -0x0889,6,getcharnamerequest,2 -0x0884,6,solvecharname,2 -0x08e6,4 -0x08e7,10,bookingsearchreq,2:4:6:8:12 -0x08e8,-1 -0x08e9,2,bookingdelreq,0 -0x08ea,4 -0x08eb,39,bookingupdatereq,2 -0x08ec,73 -0x08ed,43 -0x08ee,6 -0x08ef,6,bookingignorereq,2 -0x08f0,6 -0x08f1,6,bookingjoinpartyreq,2 -0x08f2,36 -0x08f3,-1 -0x08f4,6 -0x08f5,-1,bookingsummonmember,2:4 -0x08f6,22 -0x08f7,3 -0x08f8,7 -0x08f9,6 -0x08fa,6 -0x08fb,6,bookingcanceljoinparty,2 -0x0907,5,moveitem,2:4 -0x0908,5 -0x08d7,28,battlegroundreg,2:4 -0x0977,14 //Monster HP Bar -0x0916,26,guildinvite2,2 -0x091d,41,bookingregreq,2:4:6 -0x08cb,10,ZC_PERSONAL_INFOMATION,2:4:6:8:10:11:13:15 //Still need further information -// Merge Item -0x096D,-1,ZC_MERGE_ITEM_OPEN,2:4 // ZC_MERGE_ITEM_OPEN -0x096E,-1,mergeitem_req,2:4 // CZ_REQ_MERGE_ITEM -0x096F,7,ZC_ACK_MERGE_ITEM,2:4:6 // ZC_ACK_MERGE_ITEM -0x0974,2,mergeitem_cancel,0 // CZ_CANCEL_MERGE_ITEM -0x0844,2,cashshopopen,0 -0x0849,16 //clif_cashshop_result -0x0848,-1,cashshopbuy,2:6:4:10 -0x084a,2,cashshopclose,0 -0x08c9,2,cashshopitemlist,0 - -//2012-04-18aRagexeRE [Special Thanks to Judas!] -packet_ver: 31 -packet_keys: 0x01540E48,0x13041224,0x31247924 // [Shakto] -0x023B,26,friendslistadd,2 -0x0361,5,hommenu,2:4 -0x08A8,36,storagepassword,2:4:20 -0x0802,26,partyinvite2,2 -0x022D,19,wanttoconnection,2:6:10:14:18 -0x0281,-1,itemlistwindowselected,2:4:8:12 -0x035F,6,ticksend,2 -0x0202,5,changedir,2:4 -0x07E4,6,takeitem,2 -0x0362,6,dropitem,2:4 -0x07EC,8,movetokafra,2:4 -0x0364,8,movefromkafra,2:4 -0x096A,6,getcharnamerequest,2 -0x0368,6,solvecharname,2 -0x08E5,41,bookingregreq,2:4:6 //Added to prevent disconnections -0x08d2,10 - -//2012-06-18 -packet_ver: 32 -packet_keys: 0x261F261F,0x261F261F,0x261F261F // [Shakto] -0x0983,29 // ZC_MSG_STATE_CHANGE3 -0x0861,41,bookingregreq,2:4:6 //actually 12-05-03 - -//2012-07-02aRagexeRE (unstable) -packet_ver: 33 -packet_keys: 0x25733B31,0x53486CFD,0x398649BD // [Shakto] -0x0363,19,wanttoconnection,2:6:10:14:18 -0x0364,6,ticksend,2 -0x085a,7,actionrequest,2:6 -0x0861,8,movefromkafra,2:4 -0x0862,10,useskilltoid,2:4:6 -0x0863,10,useskilltopos,2:4:6:8 -0x0886,6,solvecharname,2 -0x0889,90,useskilltoposinfo,2:4:6:8:10 -0x089e,6,dropitem,2:4 -0x089f,6,takeitem,2 -0x08a0,8,movetokafra,2:4 -0x094a,6,getcharnamerequest,2 -0x0953,5,walktoxy,2 -0x0960,5,changedir,2:4 -0x0879,41,bookingregreq,2:4:6 - -//2013-03-20Ragexe (Judas) -packet_ver: 34 -packet_keys: 0x3F094C49,0x55F86C1E,0x58AA359A // [Shakto] -0x014f,6,guildrequestinfo,2 -0x01fd,15,repairitem,2:4:6:7:9:11:13 -//0x0281,-1,itemlistwindowselected,2:4:8:12 -0x035f,6,reqclickbuyingstore,2 -0x0363,6,ticksend,2 -0x0365,12,searchstoreinfolistitemclick,2:6:10 -0x0438,6,dropitem,2:4 -0x0447,2,booking_playcancel,0 // CZ_BLOCKING_PLAY_CANCEL -0x044A,6,clientversion,2 -0x0844,2,cashshopopen,0 -0x0849,16 //clif_cashshop_result -0x0848,-1,cashshopbuy,2:6:4:10 -0x084a,2,cashshopclose,0 -0x084b,19 //fallitem4 -0x085a,90,useskilltoposinfo,2:4:6:8:10 -0x085d,18,bookingregreq,2:4:6 -0x0868,-1,itemlistwindowselected,2:4:8:12 -0x086d,26,partyinvite2,2 -0x086f,26,friendslistadd,2 -0x0874,8,movefromkafra,2:4 -0x0881,5,walktoxy,2 -0x0886,2,reqclosebuyingstore,0 -0x0888,19,wanttoconnection,2:6:10:14:18 -0x088e,7,actionrequest,2:6 -0x0897,5,changedir,2:4 -0x0898,6,getcharnamerequest,2 -0x089b,10,useskilltoid,2:4:6 -0x08ac,8,movetokafra,2:4 -0x08c9,2,cashshopitemlist,0 -0x08cf,10 //Amulet spirits -0x08d2,10 -0x0907,5,moveitem,2:4 -0x0908,5 -0x0922,-1,reqtradebuyingstore,2:4:8:12 -//0x092e,2,searchstoreinfonextpage,0 -0x0933,6,takeitem,2 -0x0938,-1,reqopenbuyingstore,2:4:8:9:89 -0x093f,5,hommenu,2:4 -0x0947,36,storagepassword,2:4:20 -0x094c,6,solvecharname,2 -0x094e,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0959,10,useskilltopos,2:4:6:8 -//0x095a,8,mailsetattach,2:4 -0x0977,14 //Monster HP Bar -0x0978,6,reqworldinfo,2 -0x0979,50 //ackworldinfo -0x097b,16,ZC_PERSONAL_INFOMATION,2:4:8:12:16:17:21:25 //Still need further information -//0x0981,12,ZC_PERSONAL_INFOMATION_CHN,2:4:6:8:12:13:15:17:10 // Disabled until further information is found. -0x0990,31 //additem -0x0991,-1 //inv itemlist normal -0x0992,-1 //inv itemlist equip -0x0993,-1 //cart itemlist normal -0x0994,-1 //cart itemlist equip -0x0995,-1 //store itemlist normal -0x0996,-1 //store itemlist equip -0x0997,-1 //ZC_EQUIPWIN_MICROSCOPE_V5 -0x0998,8,equipitem,2:4 // CZ_REQ_WEAR_EQUIP_V5 -0x0999,11,ZC_WEAR_EQUIP_ACK,2:4:8:10 // cz_wear_equipv5 -0x099a,9 // take_off_equipv5 -0x099b,8 //maptypeproperty2 - -// New Packets -0x08C8,34 // ZC_NOTIFY_ACT3 -0x08ff,24 // ZC_EFST_SET_ENTER -0x0984,28 // ZC_EFST_SET_ENTER2 -0x099f,22 // ZC_SKILL_ENTRY4 - -//2013-05-15aRagexe (Yommy) -packet_ver: 35 -packet_keys: 0x75794A38,0x58A96BC1,0x296E6FB8 // [Shakto] -0x0369,7,actionrequest,2:6 -0x083C,10,useskilltoid,2:4:6 -0x0437,5,walktoxy,2 -0x035F,6,ticksend,2 -0x0362,5,changedir,2:4 -0x08A1,6,takeitem,2 -0x0944,6,dropitem,2:4 -0x0887,8,movetokafra,2:4 -0x08AC,8,movefromkafra,2:4 -0x0438,10,useskilltopos,2:4:6:8 -0x0366,90,useskilltoposinfo,2:4:6:8:10 -0x096A,6,getcharnamerequest,2 -0x0368,6,solvecharname,2 -0x0838,12,searchstoreinfolistitemclick,2:6:10 -0x0835,2,searchstoreinfonextpage,0 -0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0811,-1,reqtradebuyingstore,2:4:8:12 -0x0360,6,reqclickbuyingstore,2 -0x0817,2,reqclosebuyingstore,0 -0x0815,-1,reqopenbuyingstore,2:4:8:9:89 -0x092D,18,bookingregreq,2:4:6 -//0x08AA,8 CZ_JOIN_BATTLE_FIELD -0x0963,-1,itemlistwindowselected,2:4:8:12 -0x0943,19,wanttoconnection,2:6:10:14:18 -0x0947,26,partyinvite2,2 -//0x0862,4 CZ_GANGSI_RANK -0x0962,26,friendslistadd,2 -0x0931,5,hommenu,2:4 -0x093e,36,storagepassword,2:4:20 - -//2013-05-22Ragexe (Yommy) -packet_ver: 36 -packet_keys: 0x6948050B,0x06511D9D,0x725D4DF1 // [Shakto] -0x08A2,7,actionrequest,2:6 -0x095C,10,useskilltoid,2:4:6 -0x0360,5,walktoxy,2 -0x07EC,6,ticksend,2 -0x0925,5,changedir,2:4 -0x095E,6,takeitem,2 -0x089C,6,dropitem,2:4 -0x08a3,8,movetokafra,2:4 -0x087E,8,movefromkafra,2:4 -0x0811,10,useskilltopos,2:4:6:8 -0x0964,90,useskilltoposinfo,2:4:6:8:10 -0x08a6,6,getcharnamerequest,2 -0x0369,6,solvecharname,2 -0x093e,12,searchstoreinfolistitemclick,2:6:10 -0x08aa,2,searchstoreinfonextpage,0 -0x095b,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0952,-1,reqtradebuyingstore,2:4:8:12 -0x0368,6,reqclickbuyingstore,2 -0x086E,2,reqclosebuyingstore,0 -0x0874,-1,reqopenbuyingstore,2:4:8:9:89 -0x089B,18,bookingregreq,2:4:6 -//0x0965,8 CZ_JOIN_BATTLE_FIELD -0x086A,-1,itemlistwindowselected,2:4:8:12 -0x08A9,19,wanttoconnection,2:6:10:14:18 -0x0950,26,partyinvite2,2 -//0x08AC,4 CZ_GANGSI_RANK -0x0362,26,friendslistadd,2 -0x0926,5,hommenu,2:4 -0x088e,36,storagepassword,2:4:20 - -//2013-05-29Ragexe (Shakto) -packet_ver: 37 -packet_keys: 0x023A6C87,0x14BF1F1E,0x5CC70CC9 // [Shakto] -0x0890,7,actionrequest,2:6 -0x0438,10,useskilltoid,2:4:6 -0x0876,5,walktoxy,2 -0x0897,6,ticksend,2 -0x0951,5,changedir,2:4 -0x0895,6,takeitem,2 -0x08A7,6,dropitem,2:4 -0x0938,8,movetokafra,2:4 -0x0957,8,movefromkafra,2:4 -0x0917,10,useskilltopos,2:4:6:8 -0x085E,90,useskilltoposinfo,2:4:6:8:10 -0x0863,6,getcharnamerequest,2 -0x0937,6,solvecharname,2 -0x085A,12,searchstoreinfolistitemclick,2:6:10 -0x0941,2,searchstoreinfonextpage,0 -0x0918,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0936,-1,reqtradebuyingstore,2:4:8:12 -0x0892,6,reqclickbuyingstore,2 -0x0964,2,reqclosebuyingstore,0 -0x0869,-1,reqopenbuyingstore,2:4:8:9:89 -0x0874,18,bookingregreq,2,4:6 -//0x088E,8 // CZ_JOIN_BATTLE_FIELD -0x0958,-1,itemlistwindowselected,2:4:8:12 -0x0919,19,wanttoconnection,2:6:10:14:18 -0x08A8,26,partyinvite2,2 -//0x0888,4 // CZ_GANGSI_RANK -0x0877,26,friendslistadd,2 -0x023B,5,hommenu,2:4 -0x0956,36,storagepassword,2:4:20 - -//2013-06-05Ragexe (Shakto) -packet_ver: 38 -packet_keys: 0x646E08D9,0x5F153AB5,0x61B509B5 // [Shakto] -0x0369,7,actionrequest,2:6 -0x083C,10,useskilltoid,2:4:6 -0x0437,5,walktoxy,2 -0x035F,6,ticksend,2 -0x0202,5,changedir,2:4 -0x07E4,6,takeitem,2 -0x0362,6,dropitem,2:4 -0x07EC,8,movetokafra,2:4 -0x0364,8,movefromkafra,2:4 -0x0438,10,useskilltopos,2:4:6:8 -0x0366,90,useskilltoposinfo,2:4:6:8:10 -0x096A,6,getcharnamerequest,2 -0x0368,6,solvecharname,2 -0x0838,12,searchstoreinfolistitemclick,2:6:10 -0x0835,2,searchstoreinfonextpage,0 -0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0811,-1,reqtradebuyingstore,2:4:8:12 -0x0360,6,reqclickbuyingstore,2 -0x0817,2,reqclosebuyingstore,0 -0x0815,-1,reqopenbuyingstore,2:4:8:9:89 -0x0365,18,bookingregreq,2:4:6 -//0x0363,8 // CZ_JOIN_BATTLE_FIELD -0x0281,-1,itemlistwindowselected,2:4:8:12 -0x022D,19,wanttoconnection,2:6:10:14:18 -0x0802,26,partyinvite2,2 -//0x0436,4 // CZ_GANGSI_RANK -0x023B,26,friendslistadd,2 -0x0361,5,hommenu,2,4 -0x0883,36,storagepassword,2:4:20 -0x097C,4,ranklist,2 - -//2013-06-12Ragexe (Shakto) -packet_ver: 39 -packet_keys: 0x6D166F66,0x3C000FCF,0x295B0FCB // [Shakto] -0x0369,7,actionrequest,2:6 -0x083C,10,useskilltoid,2:4:6 -0x0437,5,walktoxy,2 -0x035F,6,ticksend,2 -0x087E,5,changedir,2:4 -0x07E4,6,takeitem,2 -0x0362,6,dropitem,2:4 -0x07EC,8,movetokafra,2:4 -0x0364,8,movefromkafra,2:4 -0x0438,10,useskilltopos,2:4:6:8 -0x0366,90,useskilltoposinfo,2:4:6:8:10 -0x096A,6,getcharnamerequest,2 -0x0368,6,solvecharname,2 -0x0838,12,searchstoreinfolistitemclick,2:6:10 -0x0835,2,searchstoreinfonextpage,0 -0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0811,-1,reqtradebuyingstore,2:4:8:12 -0x0360,6,reqclickbuyingstore,2 -0x0817,2,reqclosebuyingstore,0 -0x0815,-1,reqopenbuyingstore,2:4:8:9:89 -0x0365,18,bookingregreq,2:4:6 -//0x0363,8 // CZ_JOIN_BATTLE_FIELD -0x0281,-1,itemlistwindowselected,2:4:8:12 -0x0919,19,wanttoconnection,2:6:10:14:18 -0x0802,26,partyinvite2,2 -//0x0436,4 // CZ_GANGSI_RANK -0x0940,26,friendslistadd,2 -0x093A,5,hommenu,2:4 -0x0964,36,storagepassword,2:4:20 - -//2013-06-18Ragexe (Shakto) -packet_ver: 40 -packet_keys: 0x434115DE,0x34A10FE9,0x6791428E // [Shakto] -0x0889,7,actionrequest,2:6 -0x0951,10,useskilltoid,2:4:6 -0x088E,5,walktoxy,2 -0x0930,6,ticksend,2 -0x08A6,5,changedir,2:4 -0x0962,6,takeitem,2 -0x0917,6,dropitem,2:4 -0x0885,8,movetokafra,2:4 -0x0936,8,movefromkafra,2:4 -0x096A,10,useskilltopos,2:4:6:8 -0x094F,90,useskilltoposinfo,2:4:6:8:10 -0x0944,6,getcharnamerequest,2 -0x0945,6,solvecharname,2 -0x0890,12,searchstoreinfolistitemclick,2:6:10 -0x0363,2,searchstoreinfonextpage,0 -0x0281,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0891,-1,reqtradebuyingstore,2:4:8:12 -0x0862,6,reqclickbuyingstore,2 -0x085A,2,reqclosebuyingstore,0 -0x0932,-1,reqopenbuyingstore,2:4:8:9:89 -0x08A7,18,bookingregreq,2:4:6 -//0x087A,8 // CZ_JOIN_BATTLE_FIELD -0x0942,-1,itemlistwindowselected,2:4:8:12 -0x095B,19,wanttoconnection,2:6:10:14:18 -0x0887,26,partyinvite2,2 -//0x0878,4 // CZ_GANGSI_RANK -0x0953,26,friendslistadd,2 -0x02C4,5,hommenu,2:4 -0x0864,36,storagepassword,2:4:20 - -//2013-06-26Ragexe -packet_ver: 41 -packet_keys: 0x38F453EF,0x6A040FD8,0X65BD6668 // [Shakto] -0x0369,7,actionrequest,2:6 -0x083C,10,useskilltoid,2:4:6 -0x0437,5,walktoxy,2 -0x035F,6,ticksend,2 -0x094D,5,changedir,2:4 -0x088B,6,takeitem,2 -0x0952,6,dropitem,2:4 -0x0921,8,movetokafra,2:4 -0x0817,8,movefromkafra,2:4 -0x0438,10,useskilltopos,2:4:6:8 -0x0366,90,useskilltoposinfo,2:4:6:8:10 -0x096A,6,getcharnamerequest,2 -0x0368,6,solvecharname,2 -0x0838,12,searchstoreinfolistitemclick,2:6:10 -0x0835,2,searchstoreinfonextpage,0 -0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0811,-1,reqtradebuyingstore,2:4:8:12 -0x0360,6,reqclickbuyingstore,2 -0x0365,2,reqclosebuyingstore,0 -0x0815,-1,reqopenbuyingstore,2:4:8:9:89 -0x0894,18,bookingregreq,2:4:6 -//0x0860,8 // CZ_JOIN_BATTLE_FIELD -0x08A5,-1,itemlistwindowselected,2:4:8:12 -0x088C,19,wanttoconnection,2:6:10:14:18 -0x0895,26,partyinvite2,2 -//0x088F,4 // CZ_GANGSI_RANK -0x08AB,26,friendslistadd,2 -0x0960,5,hommenu,2:4 -0x0930,36,storagepassword,2:4:20 - -//2013-07-03Ragexe -packet_ver: 42 -packet_keys: 0x4FF90E23,0x0F1432F2,0x4CFA1EDA // [Shakto] -0x0369,7,actionrequest,2:6 -0x083C,10,useskilltoid,2:4:6 -0x0437,5,walktoxy,2 -0x035F,6,ticksend,2 -0x0930,5,changedir,2:4 -0x07E4,6,takeitem,2 -0x0362,6,dropitem,2:4 -0x07EC,8,movetokafra,2:4 -0x0364,8,movefromkafra,2:4 -0x0438,10,useskilltopos,2:4:6:8 -0x0366,90,useskilltoposinfo,2:4:6:8:10 -0x096A,6,getcharnamerequest,2 -0x0368,6,solvecharname,2 -0x0838,12,searchstoreinfolistitemclick,2:6:10 -0x0835,2,searchstoreinfonextpage,0 -0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0811,-1,reqtradebuyingstore,2:4:8:12 -0x0202,6,reqclickbuyingstore,2 -0x0817,2,reqclosebuyingstore,0 -0x0815,-1,reqopenbuyingstore,2:4:8:9:89 -0x0365,18,bookingregreq,2:4:6 -//0x0363,8 // CZ_JOIN_BATTLE_FIELD -0x0281,-1,itemlistwindowselected,2:4:8:12 -0x022D,19,wanttoconnection,2:6:10:14:18 -0x0802,26,partyinvite2,2 -//0x0436,4 // CZ_GANGSI_RANK -0x0360,26,friendslistadd,2 -0x094A,5,hommenu,2:4 -0x0873,36,storagepassword,2:4:20 - -//2013-07-10Ragexe -packet_ver: 43 -packet_keys: 0x458F758F,0x4CCF3F8F,0x4A9C4237 -0x0369,7,actionrequest,2:6 -0x083C,10,useskilltoid,2:4:6 -0x0437,5,walktoxy,2 -0x035F,6,ticksend,2 -0x0202,5,changedir,2:4 -0x07E4,6,takeitem,2 -0x0362,6,dropitem,2:4 -0x07EC,8,movetokafra,2:4 -0x0364,8,movefromkafra,2:4 -0x0438,10,useskilltopos,2:4:6:8 -0x0366,90,useskilltoposinfo,2:4:6:8:10 -0x096A,6,getcharnamerequest,2 -0x0368,6,solvecharname,2 -0x0838,12,searchstoreinfolistitemclick,2:6:10 -0x0835,2,searchstoreinfonextpage,0 -0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0811,-1,reqtradebuyingstore,2:4:8:12 -0x0360,6,reqclickbuyingstore,2 -0x0817,2,reqclosebuyingstore,0 -0x0815,-1,reqopenbuyingstore,2:4:8:9:89 -0x0365,18,bookingregreq,2:4:6 -//0x0363,8 // CZ_JOIN_BATTLE_FIELD -0x0281,-1,itemlistwindowselected,2:4:8:12 -0x022D,19,wanttoconnection,2:6:10:14:18 -0x0802,26,partyinvite2,2 -//0x0436,4 // CZ_GANGSI_RANK -0x023B,26,friendslistadd,2 -0x0361,5,hommenu,2:4 -0x0880,36,storagepassword,2:4:20 -0x0848,-1,cashshopbuy,2:6:4:10 -0x097D,288 //ZC_ACK_RANKING - -//2013-07-17Ragexe -packet_ver: 44 -packet_keys: 0x2BED4F91,0x5F9E00CF,0x5EE5520C -0x0918,7,actionrequest,2:6 -0x091E,10,useskilltoid,2:4:6 -0x083C,5,walktoxy,2 -0x02C4,6,ticksend,2 -0x088C,5,changedir,2:4 -0x08A9,6,takeitem,2 -0x0917,6,dropitem,2:4 -0x089B,8,movetokafra,2:4 -0x0956,8,movefromkafra,2:4 -0x0882,10,useskilltopos,2:4:6:8 -0x0952,90,useskilltoposinfo,2:4:6:8:10 -0x0958,6,getcharnamerequest,2 -0x0967,6,solvecharname,2 -0x0960,12,searchstoreinfolistitemclick,2:6:10 -0x0819,2,searchstoreinfonextpage,0 -0x086B,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x093B,-1,reqtradebuyingstore,2:4:8:12 -0x0898,6,reqclickbuyingstore,2 -0x096A,2,reqclosebuyingstore,0 -0x08AA,-1,reqopenbuyingstore,2:4:8:9:89 -0x0862,18,bookingregreq,2:4:6 -//0x08A6,8 // CZ_JOIN_BATTLE_FIELD -0x0897,-1,itemlistwindowselected,2:4:8:12 -0x091D,19,wanttoconnection,2:6:10:14:18 -0x092F,26,partyinvite2,2 -//0x086C,4 // CZ_GANGSI_RANK -0x0863,26,friendslistadd,2 -0x088A,5,hommenu,2:4 -0x095B,36,storagepassword,2:4:20 -0x09A6,12,ZC_BANKING_CHECK,2:10 -0x09A7,10,bankdeposit,2:6 -0x09A8,16,ZC_ACK_BANKING_DEPOSIT,2:4:12 -0x09A9,10,bankwithdrawal,2:6 -0x09AA,16,ZC_ACK_BANKING_WITHDRAW,2:4:12 -0x09AB,6,bankcheck,2 -0x09B6,6,bankopen,2 -0x09B7,4,ZC_ACK_OPEN_BANKING,2 -0x09B8,6,bankclose,2 -0x09B9,4,ZC_ACK_CLOSE_BANKING,2 - -//2013-07-31cRagexe -0x09ca,23 // ZC_SKILL_ENTRY5 -0x09cb,17 // ZC_USE_SKILL2 - -//2013-08-07Ragexe -packet_ver: 45 -packet_keys: 0x7E241DE0,0x5E805580,0x3D807D80 // [Shakto] -0x0369,7,actionrequest,2:6 -0x083C,10,useskilltoid,2:4:6 -0x0437,5,walktoxy,2 -0x035F,6,ticksend,2 -0x0202,5,changedir,2:4 -0x07E4,6,takeitem,2 -0x0362,6,dropitem,2:4 -0x07EC,8,movetokafra,2:4 -0x0364,8,movefromkafra,2:4 -0x0438,10,useskilltopos,2:4:6:8 -0x0366,90,useskilltoposinfo,2:4:6:8:10 -0x096A,6,getcharnamerequest,2 -0x0368,6,solvecharname,2 -0x0838,12,searchstoreinfolistitemclick,2:6:10 -0x0835,2,searchstoreinfonextpage,0 -0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0811,-1,reqtradebuyingstore,2:4:8:12 -0x0360,6,reqclickbuyingstore,2 -0x0817,2,reqclosebuyingstore,0 -0x0815,-1,reqopenbuyingstore,2:4:8:9:89 -0x0365,18,bookingregreq,2:4:6 -//0x363,8 // CZ_JOIN_BATTLE_FIELD -0x0281,-1,itemlistwindowselected,2:4:8:12 -0x022D,19,wanttoconnection,2:6:10:14:18 -0x0802,26,partyinvite2,2 -//0x436,4 // CZ_GANGSI_RANK -0x023B,26,friendslistadd,2 -0x0361,5,hommenu,2:4 -0x0887,36,storagepassword,2:4:20 -0x09C1,10,ZC_C_MARKERINFO,2:6:8 -// Merge Item -0x096D,-1,ZC_MERGE_ITEM_OPEN,2:4 // ZC_MERGE_ITEM_OPEN -0x096E,-1,mergeitem_req,2:4 // CZ_REQ_MERGE_ITEM -0x096F,7,ZC_ACK_MERGE_ITEM,2:4:6:7 // ZC_ACK_MERGE_ITEM -0x0974,2,mergeitem_cancel,0 // CZ_CANCEL_MERGE_ITEM - -//2013-12-23Ragexe -packet_ver: 46 -packet_keys: 0x631C511C,0x111C111C,0x111C111C // [Shakto] -0x0369,7,actionrequest,2:6 -0x083C,10,useskilltoid,2:4:6 -0x0437,5,walktoxy,2 -0x035F,6,ticksend,2 -0x0202,5,changedir,2:4 -0x07E4,6,takeitem,2 -0x0362,6,dropitem,2:4 -0x07EC,8,movetokafra,2:4 -0x0364,8,movefromkafra,2:4 -0x0438,10,useskilltopos,2:4:6:8 -0x0366,90,useskilltoposinfo,2:4:6:8:10 -0x096A,6,getcharnamerequest,2 -0x0368,6,solvecharname,2 -0x0838,12,searchstoreinfolistitemclick,2:6:10 -0x0835,2,searchstoreinfonextpage,0 -0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0811,-1,reqtradebuyingstore,2:4:8:12 -0x0360,6,reqclickbuyingstore,2 -0x0817,2,reqclosebuyingstore,0 -0x0815,-1,reqopenbuyingstore,2:4:8:9:89 -0x0365,18,bookingregreq,2:4:6 -//0x363,8 // CZ_JOIN_BATTLE_FIELD -0x0281,-1,itemlistwindowselected,2:4:8:12 -0x022D,19,wanttoconnection,2:6:10:14:18 -0x0802,26,partyinvite2,2 -//0x436,4 // CZ_GANGSI_RANK -0x023B,26,friendslistadd,2 -0x0361,5,hommenu,2:4 -0x08A4,36,storagepassword,2:4:20 -//New Packets -//0x097E,12 //ZC_UPDATE_RANKING_POINT -0x09CE,102,itemmonster,2 -0x09D4,2,npcshopclosed,0 -//NPC Market -0x09D5,-1 -0x09D6,-1,npcmarketpurchase,2:4:6 -0x09D7,-1 -0x09D8,2,npcmarketclosed,0 -// Clan System -0x0988,6 -0x0989,2 -0x098A,-1 -0x098D,-1,clanchat,2:4 -0x098E,-1 -// Sale -0x09AC,-1,salesearch,2:4:8 -0x09AD,8 -0x09AE,17,saleadd,2:6:8:12:16 -0x09AF,4 -0x09B0,8,saleremove,2:6 -0x09B1,4 -0x09B2,8 -0x09B3,4 -0x09B4,6,saleopen,2 -0x09BC,6,saleclose,2 -0x09C3,8,salerefresh,2:6 -0x09C4,8 - -// New Packet -0x097A,-1 // ZC_ALL_QUEST_LIST2 -0x09DB,-1 // ZC_NOTIFY_MOVEENTRY10 -0x09DC,-1 // ZC_NOTIFY_NEWENTRY10 -0x09DD,-1 // ZC_NOTIFY_STANDENTRY10 -0x09DF,7 // ZC_ACK_WHISPER02 - -//2014-10-16Ragexe -packet_ver: 50 -packet_keys: 0x2DFF467C,0x444B37EE,0x2C1B634F // [YomRawr] -0x0369,7,actionrequest,2:6 -0x083C,10,useskilltoid,2:4:6 -0x0437,5,walktoxy,2 -0x035F,6,ticksend,2 -0x0967,5,changedir,2:4 -0x07E4,6,takeitem,2 -0x0362,6,dropitem,2:4 -0x07EC,8,movetokafra,2:4 -0x022D,8,movefromkafra,2:4 -0x0438,10,useskilltopos,2:4:6:8 -0x0366,90,useskilltoposinfo,2:4:6:8:10 -0x096A,6,getcharnamerequest,2 -0x0368,6,solvecharname,2 -0x0838,12,searchstoreinfolistitemclick,2:6:10 -0x0835,2,searchstoreinfonextpage,0 -0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0811,-1,reqtradebuyingstore,2:4:8:12 -0x0360,6,reqclickbuyingstore,2 -0x0817,2,reqclosebuyingstore,0 -0x0815,-1,reqopenbuyingstore,2:4:8:9:89 -0x0365,18,bookingregreq,2:4 -// 0x0363,8 // CZ_JOIN_BATTLE_FIELD -0x0281,-1,itemlistwindowselected,2:4:8 -0x086E,19,wanttoconnection,2:6:10:14:18 -0x0802,26,partyinvite,2 -// 0x0922,4 // CZ_GANGSI_RANK -0x094B,26,friendslistadd,2 -0x0364,5,hommenu,2:4 -0x0936,36,storagepassword,0 -0x09DF,7 - -// New packet -0x0A00,269 // ZC_SHORTCUT_KEY_LIST_V3 -0x0A01,3,hotkeyrowshift,2 // CZ_SHORTCUTKEYBAR_ROTATE -0x0A02,4 // ZC_DRESSROOM_OPEN -0x0A0E,14 // ZC_BATTLEFIELD_NOTIFY_HP2 -0x09F7,75 // ZC_PROPERTY_HOMUN_2 -0x09E5,18 // ZC_DELETEITEM_FROM_MCSTORE2 -0x09E6,22 // ZC_UPDATE_ITEM_FROM_BUYING_STORE2 - -// Roulette System [Yommy] -0x0A19,2,rouletteopen,0 // CZ_REQ_OPEN_ROULETTE -0x0A1A,23 // ZC_ACK_OPEN_ROULETTE -0x0A1B,2,rouletteinfo,0 // CZ_REQ_ROULETTE_INFO -0x0A1C,-1 // ZC_ACK_ROULETTE_INFO -0x0A1D,2,rouletteclose,0 // CZ_REQ_CLOSE_ROULETTE -0x0A1E,3 // ZC_ACK_CLOSE_ROULETTE -0x0A1F,2,roulettegenerate,0 // CZ_REQ_GENERATE_ROULETTE -0x0A20,21 // ZC_ACK_GENERATE_ROULETTE -0x0A21,3,rouletterecvitem,2 // CZ_RECV_ROULETTE_ITEM -0x0A22,5 // ZC_RECV_ROULETTE_ITEM - -//2014-10-22bRagexe -packet_ver: 51 -packet_keys: 0x290551EA,0x2B952C75,0x2D67669B // [YomRawr] -0x006d,149 -0x023b,10,useskilltopos,2:4:6:8 -0x0281,-1,itemlistwindowselected,2:4:8:12 -0x035f,6,ticksend,2 -0x0360,6,reqclickbuyingstore,2 -0x0366,90,useskilltoposinfo,2:4:6:8:10 -0x0368,6,solvecharname,2 -0x0369,7,actionrequest,2:6 -0x0437,5,walktoxy,2 -0x0438,36,storagepassword,2:4:20 -0x0811,-1,reqtradebuyingstore,2:4:8:12 -0x0815,-1,reqopenbuyingstore,2:4:8:9:89 -0x0817,2,reqclosebuyingstore,0 -0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0835,12,searchstoreinfolistitemclick,2:6:10 -0x083c,10,useskilltoid,2:4:6 -0x0878,8,movetokafra,2:4 -0x087d,6,dropitem,2:4 -0x0896,26,partyinvite2,2 -0x0899,5,hommenu,2:4 -0x08aa,8,movefromkafra,2:4 -//0x08ab,4 // CZ_GANGSI_RANK -0x08ad,5,changedir,2:4 -0x08e3,149 -0x091a,26,friendslistadd,2 -//0x092b,8 // CZ_JOIN_BATTLE_FIELD -0x093b,19,wanttoconnection,2:6:10:14:18 -0x0940,2,searchstoreinfonextpage,0 -0x094e,6,takeitem,2 -0x0955,18,bookingregreq,2:4:6 -0x096a,6,getcharnamerequest,2 - -// New Packet -0x0A18,14 // ZC_ACCEPT_ENTER3 -0x0A28,3 // ZC_ACK_OPENSTORE2 -0x09FD,-1 // ZC_NOTIFY_MOVEENTRY11 -0x09FE,-1 // ZC_NOTIFY_NEWENTRY11 -0x09FF,-1 // ZC_NOTIFY_STANDENTRY11 -//0x09F8,-1 // ZC_ALL_QUEST_LIST3 - -//2015-05-13aRagexe -packet_ver: 52 -packet_keys: 0x62C86D09,0x75944F17,0x112C133D // [YomRawr] -0x0369,7,actionrequest,2:6 -0x083C,10,useskilltoid,2:4:6 -0x0437,5,walktoxy,2 -0x035F,6,ticksend,2 -0x0924,5,changedir,2:4 -0x0958,6,takeitem,2 -0x0885,6,dropitem,2:4 -0x0879,8,movetokafra,2:4 -0x0864,8,movefromkafra,2:4 -0x0438,10,useskilltopos,2:4:6:8 -0x0366,90,useskilltoposinfo,2:4:6:8:10 -0x096A,6,getcharnamerequest,2 -0x0368,6,solvecharname,2 -0x0838,12,searchstoreinfolistitemclick,2:6:10 -0x0835,2,searchstoreinfonextpage,0 -0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0811,-1,reqtradebuyingstore,2:4:8:12 -0x0360,6,reqclickbuyingstore,2 -0x022D,2,reqclosebuyingstore,0 -0x0815,-1,reqopenbuyingstore,2:4:8:9:89 -0x0883,18,bookingregreq,2:4:6 -// 0x02C4,8 CZ_JOIN_BATTLE_FIELD -0x0960,-1,itemlistwindowselected,2:4:8:12 -0x0363,19,wanttoconnection,2:6:10:14:18 -0x094A,26,partyinvite2,2 -// 0x0927,4 CZ_GANGSI_RANK -0x08A8,26,friendslistadd,2 -0x0817,5,hommenu,2:4 -0x0923,36,storagepassword,2:4:20 - -// New Packets -0xA3B,-1 // ZC_HAT_EFFECT - -// RODEX Mail system -0x09E7,3 // ZC_NOTIFY_UNREADMAIL -0x09E8,11,mailrefresh,2:3 // CZ_OPEN_MAILBOX -0x09E9,2,dull,0 // CZ_CLOSE_MAILBOX -0x09EA,11,mailread,2:3 // CZ_REQ_READ_MAIL -0x09EB,-1 // ZC_ACK_READ_MAIL -0x09EC,-1,mailsend,2:4:28:52:60:62:64 // CZ_REQ_WRITE_MAIL -0x09ED,3 // ZC_ACK_WRITE_MAIL -0x09EE,11,mailrefresh,2:3 // CZ_REQ_NEXT_MAIL_LIST -0x09EF,11,mailrefresh,2:3 // CZ_REQ_REFRESH_MAIL_LIST -0x09F0,-1 // ZC_ACK_MAIL_LIST -0x09F1,11,mailgetattach,0 // CZ_REQ_ZENY_FROM_MAIL -0x09F2,12 // ZC_ACK_ZENY_FROM_MAIL -0x09F3,11,mailgetattach,0 // CZ_REQ_ITEM_FROM_MAIL -0x09F4,12 // ZC_ACK_ITEM_FROM_MAIL -0x09F5,11,maildelete,0 // CZ_REQ_DELETE_MAIL -0x09F6,11 // ZC_ACK_DELETE_MAIL -0x0A03,2,mailcancel,0 // CZ_REQ_CANCEL_WRITE_MAIL -0x0A04,6,mailsetattach,2:4 // CZ_REQ_ADD_ITEM_TO_MAIL -0x0A05,53 // ZC_ACK_ADD_ITEM_TO_MAIL -0x0A06,6,mailwinopen,2:4 // CZ_REQ_REMOVE_ITEM_MAIL -0x0A07,9 // ZC_ACK_REMOVE_ITEM_MAIL -0x0A08,26,mailbegin,0 // CZ_REQ_OPEN_WRITE_MAIL -0x0A12,27 // ZC_ACK_OPEN_WRITE_MAIL -0x0A13,26,mailreceiver,2 // CZ_CHECK_RECEIVE_CHARACTER_NAME -0x0A14,10 // ZC_CHECK_RECEIVE_CHARACTER_NAME -0x0A32,2 // ZC_OPEN_RODEX_THROUGH_NPC_ONLY - -// New EquipPackets Support -0x0A09,45 // ZC_ADD_EXCHANGE_ITEM3 -0x0A0A,47 // ZC_ADD_ITEM_TO_STORE3 -0x0A0B,47 // ZC_ADD_ITEM_TO_CART3 -0x0A0C,56 // ZC_ITEM_PICKUP_ACK_V6 -0x0A0D,-1 // ZC_INVENTORY_ITEMLIST_EQUIP_V6 -0x0A0F,-1 // ZC_CART_ITEMLIST_EQUIP_V6 -0x0A10,-1 // ZC_STORE_ITEMLIST_EQUIP_V6 -0x0A2D,-1 // ZC_EQUIPWIN_MICROSCOPE_V6 - -// OneClick Itemidentify -0x0A35,4,oneclick_itemidentify,2 // CZ_REQ_ONECLICK_ITEMIDENTIFY - -// Achievement System -0x0A23,-1 // ZC_ALL_ACH_LIST -0x0A24,66 // ZC_ACH_UPDATE -0x0A25,6,dull,0 // CZ_REQ_ACH_REWARD -0x0A26,7 // ZC_REQ_ACH_REWARD_ACK - -// Title System -0x0A2E,6,dull,0 // CZ_REQ_CHANGE_TITLE -0x0A2F,7 // ZC_ACK_CHANGE_TITLE -0x0A30,106 // ZC_ACK_REQNAMEALL2 - -// Pet Evolution System -0x09FB,-1,dull,0 // CZ_PET_EVOLUTION -0x09FC,6 // ZC_PET_EVOLUTION_RESULT - -//2015-05-20aRagexe -0x0A3D,18,saleadd,2:6:8:12:16 - -//2015-09-16Ragexe -packet_ver: 53 -packet_keys: 0x17F83A19,0x116944F4,0x1CC541E9 // [Napster] -0x0869,7,actionrequest,2:6 -0x093E,10,useskilltoid,2:4:6 -0x0877,5,walktoxy,2 -0x08AC,6,ticksend,2 -0x0936,5,changedir,2:4 -0x089C,6,takeitem,2 -0x092F,6,dropitem,2:4 -0x0934,8,movetokafra,2:4 -0x085E,8,movefromkafra,2:4 -0x022D,10,useskilltopos,2:4:6:8 -0x0873,90,useskilltoposinfo,2:4:6:8:10 -0x095A,6,getcharnamerequest,2 -0x0942,6,solvecharname,2 -0x087F,12,searchstoreinfolistitemclick,2:6:10 -0x0817,2,searchstoreinfonextpage,0 -0x0920,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0881,-1,reqtradebuyingstore,2:4:8:12 -0x0835,6,reqclickbuyingstore,2 -0x092E,2,reqclosebuyingstore,0 -0x0948,-1,reqopenbuyingstore,2:4:8:9:89 -0x089B,18,bookingregreq,2:4:6 -// 0x094F,8 CZ_JOIN_BATTLE_FIELD -0x0961,-1,itemlistwindowselected,2:4:8:12 -0x0969,19,wanttoconnection,2:6:10:14:18 -0x0924,26,partyinvite2,2 -// 0x0938,4 CZ_GANGSI_RANK -0x089E,26,friendslistadd,2 -0x0960,5,hommenu,2:4 -0x0941,36,storagepassword,2:4:20 - -// New Packet -0x097F,-1 // ZC_SELECTCART -0x0980,7,selectcart,2:6 // CZ_SELECTCART - -//2015-10-01bRagexeRE -packet_ver: 54 -packet_keys: 0x45B945B9,0x45B945B9,0x45B945B9 // [Dastgir] -0x0369,7,actionrequest,2:6 -0x083c,10,useskilltoid,2:4:6 -0x0437,5,walktoxy,2 -0x035f,6,ticksend,2 -0x0202,5,changedir,2:4 -0x07e4,6,takeitem,2 -0x0362,6,dropitem,2:4 -0x07ec,8,movetokafra,2:4 -0x0364,8,movefromkafra,2:4 -0x0438,10,useskilltopos,2:4:6:8 -0x0366,90,useskilltoposmoreinfo,2:4:6:8:10 -0x096a,6,getcharnamerequest,2 -0x0368,6,solvecharname,2 -0x0838,12,searchstoreinfolistitemclick,2:6:10 -0x0835,2,searchstoreinfonextpage,0 -0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0811,-1,reqtradebuyingstore,2:4:8:12 -0x0360,6,reqclickbuyingstore,2 -0x0817,2,reqclosebuyingstore,0 -0x0815,-1,reqopenbuyingstore,2:4:8:9:89 -0x0365,18,partybookingregisterreq,2:4:6 -//0x0363,8 // CZ_JOIN_BATTLE_FIELD -0x0281,-1,itemlistwindowselected,2:4:8:12 -0x022d,19,wanttoconnection,2:6:10:14:18 -0x0802,26,partyinvite2,2 -//0x0436,4 // CZ_GANGSI_RANK -0x023b,26,friendslistadd,2 -0x0361,5,hommenu,2:4 -0x0860,36,storagepassword,2:4:20 - -//2015-11-04aRagexe -packet_ver: 55 -packet_keys: 0x4C17382A,0x7ED174C9,0x29961E4F // [Winnie] -0x0369,7,actionrequest,2:6 -0x083C,10,useskilltoid,2:4:6 -0x0363,5,walktoxy,2 -0x0886,6,ticksend,2 -0x0928,5,changedir,2:4 -0x0964,6,takeitem,2 -0x0437,6,dropitem,2:4 -0x088B,8,movetokafra,2:4 -0x0364,8,movefromkafra,2:4 -0x0438,10,useskilltopos,2:4:6:8 -0x0366,90,useskilltoposinfo,2:4:6:8:10 -0x0887,6,getcharnamerequest,2 -0x0368,6,solvecharname,2 -0x0838,12,searchstoreinfolistitemclick,2:6:10 -0x0835,2,searchstoreinfonextpage,0 -0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 -0x0815,-1,reqtradebuyingstore,2:4:8:12 -0x0436,6,reqclickbuyingstore,2 -0x0817,2,reqclosebuyingstore,0 -0x023B,-1,reqopenbuyingstore,2:4:8:9:89 -0x0811,18,bookingregreq,2:4:6 -//0x0939,8 CZ_JOIN_BATTLE_FIELD -0x093A,-1,itemlistwindowselected,2:4:8:12 -0x0360,19,wanttoconnection,2:6:10:14:18 -0x08A5,26,partyinvite2,2 -//0x08A3,4 CZ_GANGSI_RANK -0x07EC,26,friendslistadd,2 -0x088D,5,hommenu,2:4 -0x0940,36,storagepassword,2:4:20 - -// 2016-03-02bRagexe -0x0A51,34 - -// 2016-03-30aRagexe -0x0A6E,-1,mailsend,2:4:28:52:60:62:64:68 // CZ_REQ_WRITE_MAIL2 - -// 2016-06-01aRagexe -0x0A7D,-1 - -// 2017-05-02dRagexeRE -0x0A43,85 -0x0A44,-1 -0x0ABD,10 - -//Add new packets here -//packet_ver: 56 diff --git a/doc/atcommands.txt b/doc/atcommands.txt index e7b9e488f7..7997c73eb4 100644 --- a/doc/atcommands.txt +++ b/doc/atcommands.txt @@ -1320,7 +1320,6 @@ This will also send a packet to clients causing them to close. @reloadmobdb @reloadmotd @reloadmsgconf -@reloadpacketdb @reloadpcdb @reloadquestdb @reloadscript @@ -1333,7 +1332,6 @@ Databases: -- instancedb: Instance Database -- itemdb: Item Database -- mobdb: Monster Database --- packetdb: Packet Database -- questdb: Quest Database -- script: NPC Scripts -- skilldb: Skill Database @@ -1354,7 +1352,6 @@ Affected files: -- mobdb: mob_db.txt, mob_item_ratio.txt, mob_chat_db.txt, mob_avail.txt, mob_race2_db.txt, mob_branch.txt, mob_poring.txt, mob_boss.txt, mob_pouch.txt, mob_classchange.txt, pet_db.txt, homunculus_db.txt, homun_skill_tree.txt, exp_homun.txt, mercenary_db.txt, mercenary_skill_db.txt, elemental_db.txt, elemental_skill_db.txt -- motd: motd.txt -- msgconf: atcommand_athena.conf --- packetdb: packet_db.txt -- pcdb: statpoint.txt, job_exp.txt, skill_tree.txt, attr_fix.txt, job_db1.txt, job_db2.txt, job_basehpsp_db.txt, job_maxhpsp_db.txt, job_param_db.txt, level_penalty.txt -- questdb: quest_db.txt -- script: /npc/*.txt, /npc/*.conf diff --git a/doc/packet_interserv.txt b/doc/packet_interserv.txt index 28afd7ad6e..5b1f0ca1b7 100644 --- a/doc/packet_interserv.txt +++ b/doc/packet_interserv.txt @@ -47,9 +47,9 @@ Currently the max packet size is 0xFFFF (see 'WFIFOSET()' in 'src/common/socket. 0x2713: Type: AH - Structure: .W .L .L .L .B .B .L .L .B - index: 0,2,6,10,14,15,16,20,24 - len: 25 + Structure: .W .L .L .L .B .B .L .B + index: 0,2,6,10,14,15,16,20 + len: 21 parameter: - cmd : packet identification (0x2713) - aid : account identification @@ -58,7 +58,6 @@ Currently the max packet size is 0xFFFF (see 'WFIFOSET()' in 'src/common/socket. - sex: the sex of the account - ok : 1=auth failed, 1=ok - request_id: unknown @FIXME - - version: client version, (clientinfo version) - clienttype: unknown @FIXME desc: - Acknowledge the authentication request from char-serv @@ -2769,16 +2768,15 @@ Currently the max packet size is 0xFFFF (see 'WFIFOSET()' in 'src/common/socket. 0x2b02 Type: ZA - Structure: .W .L .L .L .L .B - index: 0,2,6,10,14,18 - len: 19 + Structure: .W .L .L .L .L + index: 0,2,6,10,14 + len: 18 parameter: - cmd : packet identification (0x2b02) - id - login_id1 - login_id2 - s_ip - - packet_ver desc: - chrif_charselectreq diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 47e262dda5..da1ef38a82 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -3723,18 +3723,6 @@ The renewal feature to check is determined by type. 4 - RENEWAL_LVDMG (renewal level modifier on damage) 5 - RENEWAL_ASPD (renewal ASPD) ---------------------------------------- - -*is_clientver(,{,}) - -Checks a character's client version against a specified value. If no char id is -given, the command will run for the invoking character. The function will return -1 if the player's version is greater than or equal to the value, and 0 otherwise. - -Available types are: - 0 - version number (packet_db_ver) - 1 - client date (YYYYMMDD) - --------------------------------------- \\ 3,1.- Item-related commands diff --git a/npc/re/guides/navigation.txt b/npc/re/guides/navigation.txt index 8ab9d833ad..ff749c42e0 100644 --- a/npc/re/guides/navigation.txt +++ b/npc/re/guides/navigation.txt @@ -13,11 +13,12 @@ //===== Additional Comments: ================================= //= 1.0 First version. //= 1.1 Added 'is_clientver' command. [Euphy] +//= 1.2 Dropped 'is_clientver' command. [Lemongrass] //============================================================ function script F_Navi { - if (!is_clientver(1,20111010)) + if ( PACKETVER < 20111010 ) set .@disabled,1; // This function takes 0 ~ 3 parameters. diff --git a/rAthena.sln b/rAthena.sln index 3c95e03e27..f28c81e592 100644 --- a/rAthena.sln +++ b/rAthena.sln @@ -21,6 +21,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Config", "Config", "{60D331 src\config\const.h = src\config\const.h src\config\core.h = src\config\core.h src\config\classes\general.h = src\config\classes\general.h + src\config\packets.h = src\config\packets.h src\config\renewal.h = src\config\renewal.h src\config\secure.h = src\config\secure.h EndProjectSection diff --git a/src/char/char.h b/src/char/char.h index ed19ec928b..0684ba64de 100644 --- a/src/char/char.h +++ b/src/char/char.h @@ -222,7 +222,6 @@ struct char_session_data { uint8 char_slots; // total number of characters that can be created uint8 chars_vip; uint8 chars_billing; - uint32 version; uint8 clienttype; char new_name[NAME_LENGTH]; char birthdate[10+1]; // YYYY-MM-DD diff --git a/src/char/char_clif.c b/src/char/char_clif.c index 4ced9243a2..83c21ff2f1 100644 --- a/src/char/char_clif.c +++ b/src/char/char_clif.c @@ -303,8 +303,7 @@ int chclif_parse_pincode_setnew( int fd, struct char_session_data* sd ){ //---------------------------------------- void chclif_charlist_notify( int fd, struct char_session_data* sd ){ // This is needed on RE clients from october 2015 onwards -// If you want to use one replace false by true here -#if false && PACKETVER >= 20151001 +#if defined(PACKETVER_RE) && PACKETVER >= 20151001 WFIFOHEAD(fd, 10); WFIFOW(fd, 0) = 0x9a0; // pages to req / send them all in 1 until mmo_chars_fromsql can split them up @@ -324,21 +323,25 @@ void chclif_charlist_notify( int fd, struct char_session_data* sd ){ // Function to send characters to a player //---------------------------------------- int chclif_mmo_send006b(int fd, struct char_session_data* sd){ - int j, offset = 0; - bool newvers = (sd->version >= date2version(20100413) ); - if(newvers) //20100413 - offset += 3; + int j, offset; + +#if PACKETVER >= 20100413 + offset = 3; +#else + offset = 0; +#endif + if (charserv_config.save_log) ShowInfo("Loading Char Data ("CL_BOLD"%d"CL_RESET")\n",sd->account_id); j = 24 + offset; // offset WFIFOHEAD(fd,j + MAX_CHARS*MAX_CHAR_BUF); WFIFOW(fd,0) = 0x6b; - if(newvers){ //20100413 +#if PACKETVER >= 20100413 WFIFOB(fd,4) = MAX_CHARS; // Max slots. WFIFOB(fd,5) = MIN_CHARS; // Available slots. (PremiumStartSlot) WFIFOB(fd,6) = MIN_CHARS+sd->chars_vip; // Premium slots. (Any existent chars past sd->char_slots but within MAX_CHARS will show a 'Premium Service' in red) - } +#endif memset(WFIFOP(fd,4 + offset), 0, 20); // unknown bytes j+=char_mmo_chars_fromsql(sd, WFIFOP(fd,j)); WFIFOW(fd,2) = j; // packet len @@ -377,16 +380,18 @@ void chclif_mmo_send099d(int fd, struct char_session_data *sd) { * Function to choose wich kind of charlist to send to client depending on his version */ void chclif_mmo_char_send(int fd, struct char_session_data* sd){ - ShowInfo("sd->version = %d\n",sd->version); - if(sd->version >= date2version(20130000) ){ - chclif_mmo_send082d(fd,sd); - chclif_mmo_send006b(fd,sd); - chclif_charlist_notify(fd,sd); - } else - chclif_mmo_send006b(fd,sd); +#if PACKETVER >= 20130000 + chclif_mmo_send082d(fd, sd); + chclif_mmo_send006b(fd, sd); + chclif_charlist_notify(fd, sd); +#else + chclif_mmo_send006b(fd,sd); //@FIXME dump from kro doesn't show 6b transmission - if(sd->version >= date2version(20060819) ) - chclif_block_character(fd,sd); +#endif + +#if PACKETVER >= 20060819 + chclif_block_character(fd,sd); +#endif } /* @@ -435,14 +440,11 @@ void chclif_char_delete2_ack(int fd, uint32 char_id, uint32 result, time_t delet /// Any (0x718): An unknown error has occurred. /// HC: <082a>.W .L .L void chclif_char_delete2_accept_ack(int fd, uint32 char_id, uint32 result) { +#if PACKETVER >= 20130000 if(result == 1 ){ - struct char_session_data* sd; - sd = (struct char_session_data*)session[fd]->session_data; - - if( sd->version >= date2version(20130000) ){ - chclif_mmo_char_send(fd, sd); - } + chclif_mmo_char_send(fd, session[fd]->session_data); } +#endif WFIFOHEAD(fd,10); WFIFOW(fd,0) = 0x82a; @@ -751,7 +753,6 @@ int chclif_parse_reqtoconnect(int fd, struct char_session_data* sd,uint32 ipl){ node->login_id2 == login_id2 /*&& node->ip == ipl*/ ) {// authentication found (coming from map server) - sd->version = node->version; idb_remove(auth_db, account_id); char_auth_ok(fd, sd); } diff --git a/src/char/char_logif.c b/src/char/char_logif.c index a65f0e2b9a..53773b1fa6 100644 --- a/src/char/char_logif.c +++ b/src/char/char_logif.c @@ -295,7 +295,7 @@ int chlogif_parse_ackconnect(int fd, struct char_session_data* sd){ } int chlogif_parse_ackaccreq(int fd, struct char_session_data* sd){ - if (RFIFOREST(fd) < 25) + if (RFIFOREST(fd) < 21) return 0; { uint32 account_id = RFIFOL(fd,2); @@ -304,19 +304,14 @@ int chlogif_parse_ackaccreq(int fd, struct char_session_data* sd){ uint8 sex = RFIFOB(fd,14); uint8 result = RFIFOB(fd,15); int request_id = RFIFOL(fd,16); - uint32 version = RFIFOL(fd,20); - uint8 clienttype = RFIFOB(fd,24); - RFIFOSKIP(fd,25); + uint8 clienttype = RFIFOB(fd,20); + RFIFOSKIP(fd,21); if( session_isActive(request_id) && (sd=(struct char_session_data*)session[request_id]->session_data) && !sd->auth && sd->account_id == account_id && sd->login_id1 == login_id1 && sd->login_id2 == login_id2 && sd->sex == sex ) { int client_fd = request_id; - sd->version = version; sd->clienttype = clienttype; - if(sd->version != date2version(PACKETVER)) - ShowWarning("aid=%d has an incorect version=%d in clientinfo. Server compiled for %d\n", - sd->account_id,sd->version,date2version(PACKETVER)); switch( result ) { @@ -372,8 +367,7 @@ int chlogif_parse_reqaccdata(int fd, struct char_session_data* sd){ // send characters to player chclif_mmo_char_send(u_fd, sd); #if PACKETVER_SUPPORTS_PINCODE - if(sd->version >= date2version(20110309)) - chlogif_pincode_start(u_fd,sd); + chlogif_pincode_start(u_fd,sd); #endif } } diff --git a/src/char/char_mapif.c b/src/char/char_mapif.c index 2479b5fbf1..7274d83f0a 100644 --- a/src/char/char_mapif.c +++ b/src/char/char_mapif.c @@ -453,15 +453,14 @@ void chmapif_charselres(int fd, uint32 aid, uint8 res){ * @return : 0 not enough data received, 1 success */ int chmapif_parse_authok(int fd){ - if( RFIFOREST(fd) < 19 ) + if( RFIFOREST(fd) < 18 ) return 0; else{ uint32 account_id = RFIFOL(fd,2); uint32 login_id1 = RFIFOL(fd,6); uint32 login_id2 = RFIFOL(fd,10); uint32 ip = RFIFOL(fd,14); - int version = RFIFOB(fd,18); - RFIFOSKIP(fd,19); + RFIFOSKIP(fd,18); if( runflag != CHARSERVER_ST_RUNNING ){ chmapif_charselres(fd,account_id,0); @@ -478,7 +477,6 @@ int chmapif_parse_authok(int fd){ node->login_id2 = login_id2; //node->sex = 0; node->ip = ntohl(ip); - node->version = version; //upd version for mapserv //node->expiration_time = 0; // unlimited/unknown time by default (not display in map-server) //node->gmlevel = 0; idb_put(auth_db, account_id, node); diff --git a/src/common/mmo.h b/src/common/mmo.h index abbff80467..23cae6a173 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -9,31 +9,10 @@ #include "db.h" #include -// server->client protocol version -// 0 - pre-? -// 1 - ? - 0x196 -// 2 - ? - 0x78, 0x79 -// 3 - ? - 0x1c8, 0x1c9, 0x1de -// 4 - ? - 0x1d7, 0x1d8, 0x1d9, 0x1da -// 5 - 2003-12-18aSakexe+ - 0x1ee, 0x1ef, 0x1f0, ?0x1c4, 0x1c5? -// 6 - 2004-03-02aSakexe+ - 0x1f4, 0x1f5 -// 7 - 2005-04-11aSakexe+ - 0x229, 0x22a, 0x22b, 0x22c -// see conf/battle/client.conf for other version - #ifndef PACKETVER - #define PACKETVER 20151104 - //#define PACKETVER 20120410 + #error Please define PACKETVER in src/config/packets.h #endif -// Check if the specified packetversion supports the pincode system -#define PACKETVER_SUPPORTS_PINCODE PACKETVER>=20110309 - -/// Check if the client needs delete_date as remaining time and not the actual delete_date (actually it was tested for clients since 2013) -#define PACKETVER_CHAR_DELETEDATE (PACKETVER > 20130000 && PACKETVER <= 20141022) || PACKETVER >= 20150513 - -// Check if the specified packetvresion supports the cashshop sale system -#define PACKETVER_SUPPORTS_SALES PACKETVER>=20131223 - ///Remove/Comment this line to disable sc_data saving. [Skotlex] #define ENABLE_SC_SAVING /** Remove/Comment this line to disable server-side hot-key saving support [Skotlex] diff --git a/src/common/utils.c b/src/common/utils.c index 881bae3e67..f4e7adf7aa 100644 --- a/src/common/utils.c +++ b/src/common/utils.c @@ -358,59 +358,6 @@ float GetFloat(const unsigned char* buf) return *((float*)(void*)&val); } -uint32 date2version(int date) { - if(date < 20040906) return 5; - else if(date < 20040920) return 10; - else if(date < 20041005) return 11; - else if(date < 20041025) return 12; - else if(date < 20041129) return 13; - else if(date < 20050110) return 14; - else if(date < 20050509) return 15; - else if(date < 20050628) return 16; - else if(date < 20050718) return 17; - else if(date < 20050719) return 18; - else if(date < 20060327) return 19; - else if(date < 20070108) return 20; - else if(date < 20070212) return 21; - //wtf @FIXME - //else if(date < 20080910) return 22; - else if(date < 20080827) return 23; - else if(date < 20080910) return 24; - //unable to solve from date - else if(date < 20101124) return 25; - else if(date < 20111005) return 26; - else if(date < 20111102) return 27; - else if(date < 20120307) return 28; - else if(date < 20120410) return 29; - else if(date < 20120418) return 30; - else if(date < 20120618) return 31; - else if(date < 20120702) return 32; - else if(date < 20130320) return 33; - else if(date < 20130515) return 34; - else if(date < 20130522) return 35; - else if(date < 20130529) return 36; - else if(date < 20130605) return 37; - else if(date < 20130612) return 38; - else if(date < 20130618) return 39; - else if(date < 20130626) return 40; - else if(date < 20130703) return 41; - else if(date < 20130710) return 42; - else if(date < 20130717) return 43; - else if(date < 20130807) return 44; - else if(date < 20131223) return 45; - else if(date < 20140212) return 46; - //else if(date < 20140613) return 47; - //else if(date < 20141016) return 48; - else if(date < 20141022) return 50; - else if(date < 20150513) return 51; - else if(date < 20150916) return 52; - else if(date < 20151001) return 53; - else if(date < 20151104) return 54; - else if(date >= 20151104) return 55; - - else return 30; //default -} - /// calculates the value of A / B, in percent (rounded down) unsigned int get_percentage(const unsigned int A, const unsigned int B) { diff --git a/src/common/utils.h b/src/common/utils.h index 8dfa9ebb3d..04bea94984 100644 --- a/src/common/utils.h +++ b/src/common/utils.h @@ -50,8 +50,6 @@ extern uint32 GetULong(const unsigned char* buf); extern int32 GetLong(const unsigned char* buf); extern float GetFloat(const unsigned char* buf); -uint32 date2version(int date); - int levenshtein(const char *s1, const char *s2); #ifdef __cplusplus diff --git a/src/config/core.h b/src/config/core.h index e6febaf11f..4f55c6616a 100644 --- a/src/config/core.h +++ b/src/config/core.h @@ -8,6 +8,8 @@ * For detailed guidance on these check http://rathena.org/wiki/SRC/config/ **/ +#include "../custom/defines_pre.h" + /// Max number of items on @autolootid list #define AUTOLOOTITEM_SIZE 10 @@ -76,12 +78,6 @@ #define MAX_CHAR_BILLING 0 // This must be less than MAX_CHARS #endif -/// Comment to disable the official packet obfuscation support. -/// When enabled, make sure there is value for 'packet_keys' of used packet version or -/// defined 'packet_keys_use' in db/[import/]packet_db.txt. -/// This requires PACKETVER 2011-08-17 or newer. -#define PACKET_OBFUSCATION - /// Comment to disable warnings for deprecated script commands #define SCRIPT_COMMAND_DEPRECATION @@ -91,6 +87,7 @@ /** * No settings past this point **/ +#include "./packets.h" #include "./renewal.h" #include "./secure.h" #include "./classes/general.h" @@ -100,4 +97,6 @@ **/ #include "./const.h" +#include "../custom/defines_post.h" + #endif // _CONFIG_CORE_H_ diff --git a/src/config/packets.h b/src/config/packets.h new file mode 100644 index 0000000000..542ca86639 --- /dev/null +++ b/src/config/packets.h @@ -0,0 +1,63 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder +#ifndef _CONFIG_PACKETS_H_ +#define _CONFIG_PACKETS_H_ + +/** + * rAthena configuration file (http://rathena.org) + * For detailed guidance on these check http://rathena.org/wiki/SRC/config/ + **/ + +#ifndef PACKETVER + #define PACKETVER 20151104 +#endif + +#ifndef PACKETVER_RE + /// From this point on only kRO RE clients are supported + #if PACKETVER > 20151104 + #define PACKETVER_RE + #endif +#endif + +#if PACKETVER >= 20110817 + /// Comment to disable the official packet obfuscation support. + /// This requires PACKETVER 2011-08-17 or newer. + #ifndef PACKET_OBFUSCATION + #define PACKET_OBFUSCATION + + // Define these inside src/custom/defines_pre.h or src/custom/defines_post.h + //#define PACKET_OBFUSCATION_KEY1 + //#define PACKET_OBFUSCATION_KEY2 + //#define PACKET_OBFUSCATION_KEY3 + + /// Comment this to disable warnings for missing client side encryption + #define PACKET_OBFUSCATION_WARN + #endif +#else + #if defined(PACKET_OBFUSCATION) + #error You enabled packet obfuscation for a version which is too old. Minimum supported client is 2011-08-17. + #endif +#endif + +#ifndef DUMP_UNKNOWN_PACKET + //#define DUMP_UNKNOWN_PACKET +#endif + +#ifndef DUMP_INVALID_PACKET + //#define DUMP_INVALID_PACKET +#endif + +/** + * No settings past this point + **/ + +/// Check if the specified packetversion supports the pincode system +#define PACKETVER_SUPPORTS_PINCODE PACKETVER >= 20110309 + +/// Check if the client needs delete_date as remaining time and not the actual delete_date (actually it was tested for clients since 2013) +#define PACKETVER_CHAR_DELETEDATE (PACKETVER > 20130000 && PACKETVER <= 20141022) || PACKETVER >= 20150513 + +/// Check if the specified packetvresion supports the cashshop sale system +#define PACKETVER_SUPPORTS_SALES PACKETVER >= 20131223 + +#endif // _CONFIG_PACKETS_H_ diff --git a/src/custom/defines_post.h b/src/custom/defines_post.h new file mode 100644 index 0000000000..33f34d4a77 --- /dev/null +++ b/src/custom/defines_post.h @@ -0,0 +1,13 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder +#ifndef _CONFIG_CUSTOM_DEFINES_POST_H_ +#define _CONFIG_CUSTOM_DEFINES_POST_H_ + +/** + * rAthena configuration file (http://rathena.org) + * For detailed guidance on these check http://rathena.org/wiki/SRC/config/ + **/ + + + +#endif // _CONFIG_CUSTOM_DEFINES_POST_H_ diff --git a/src/custom/defines_pre.h b/src/custom/defines_pre.h new file mode 100644 index 0000000000..ceed7e774c --- /dev/null +++ b/src/custom/defines_pre.h @@ -0,0 +1,13 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder +#ifndef _CONFIG_CUSTOM_DEFINES_PRE_H_ +#define _CONFIG_CUSTOM_DEFINES_PRE_H_ + +/** + * rAthena configuration file (http://rathena.org) + * For detailed guidance on these check http://rathena.org/wiki/SRC/config/ + **/ + + + +#endif // _CONFIG_CUSTOM_DEFINES_PRE_H_ diff --git a/src/login/login.cpp b/src/login/login.cpp index f525f1d59b..24acaca376 100644 --- a/src/login/login.cpp +++ b/src/login/login.cpp @@ -303,13 +303,6 @@ int login_mmo_auth(struct login_session_data* sd, bool isServer) { } - //Client Version check - if( login_config.check_client_version && sd->version != login_config.client_version_to_connect ){ - ShowNotice("Invalid version (account: '%s', auth_vers: '%d', received version: '%d', ip: %s)\n", - sd->userid, login_config.client_version_to_connect, sd->version, ip); - return 5; - } - len = strnlen(sd->userid, NAME_LENGTH); // Account creation with _M/_F @@ -591,10 +584,6 @@ bool login_config_read(const char* cfgName, bool normal) { login_config.new_acc_length_limit = (bool)config_switch(w2); else if(!strcmpi(w1, "start_limited_time")) login_config.start_limited_time = atoi(w2); - else if(!strcmpi(w1, "check_client_version")) - login_config.check_client_version = (bool)config_switch(w2); - else if(!strcmpi(w1, "client_version_to_connect")) - login_config.client_version_to_connect = strtoul(w2, NULL, 10); else if(!strcmpi(w1, "use_MD5_passwords")) login_config.use_md5_passwds = (bool)config_switch(w2); else if(!strcmpi(w1, "group_id_to_connect")) @@ -701,9 +690,6 @@ void login_set_defaults() { login_config.use_md5_passwds = false; login_config.group_id_to_connect = -1; login_config.min_group_id_to_connect = -1; - login_config.check_client_version = false; - login_config.client_version_to_connect = date2version(PACKETVER); //20120410 => 30 - ShowInfo("loginconfig: client_version_to_connect = %d\n",login_config.client_version_to_connect); login_config.ipban = true; login_config.dynamic_pass_failure_ban = true; diff --git a/src/login/login.h b/src/login/login.h index 670533b295..653b0ac377 100644 --- a/src/login/login.h +++ b/src/login/login.h @@ -46,7 +46,6 @@ struct login_session_data { char lastlogin[24]; ///date when last logged, Y-M-D HH:MM:SS uint8 group_id; ///groupid of account uint8 clienttype; /// ??? - uint32 version; ///version contained in clientinfo uint8 client_hash[16]; ///hash of client int has_client_hash; ///client ha sent an hash @@ -86,8 +85,6 @@ struct Login_Config { bool use_md5_passwds; /// work with password hashes instead of plaintext passwords? int group_id_to_connect; /// required group id to connect int min_group_id_to_connect; /// minimum group id to connect - bool check_client_version; /// check the clientversion set in the clientinfo ? - uint32 client_version_to_connect; /// the client version needed to connect (if checking is enabled) bool ipban; /// perform IP blocking (via contents of `ipbanlist`) ? bool dynamic_pass_failure_ban; /// automatic IP blocking due to failed login attempts ? @@ -143,7 +140,6 @@ struct auth_node { uint32 login_id2; uint32 ip; char sex; - uint32 version; uint8 clienttype; }; extern DBMap* auth_db; // uint32 account_id -> struct auth_node* diff --git a/src/login/loginchrif.c b/src/login/loginchrif.c index 3ef53ff289..49e0dd6c03 100644 --- a/src/login/loginchrif.c +++ b/src/login/loginchrif.c @@ -96,7 +96,7 @@ int logchrif_parse_reqauth(int fd, int id,char* ip){ //ShowStatus("Char-server '%s': authentication of the account %d accepted (ip: %s).\n", server[id].name, account_id, ip); // send ack - WFIFOHEAD(fd,25); + WFIFOHEAD(fd,21); WFIFOW(fd,0) = 0x2713; WFIFOL(fd,2) = account_id; WFIFOL(fd,6) = login_id1; @@ -104,15 +104,14 @@ int logchrif_parse_reqauth(int fd, int id,char* ip){ WFIFOB(fd,14) = sex; WFIFOB(fd,15) = 0;// ok WFIFOL(fd,16) = request_id; - WFIFOL(fd,20) = node->version; - WFIFOB(fd,24) = node->clienttype; - WFIFOSET(fd,25); + WFIFOB(fd,20) = node->clienttype; + WFIFOSET(fd,21); // each auth entry can only be used once idb_remove(auth_db, account_id); }else{// authentication not found ShowStatus("Char-server '%s': authentication of the account %d REFUSED (ip: %s).\n", ch_server[id].name, account_id, ip); - WFIFOHEAD(fd,25); + WFIFOHEAD(fd,21); WFIFOW(fd,0) = 0x2713; WFIFOL(fd,2) = account_id; WFIFOL(fd,6) = login_id1; @@ -120,9 +119,8 @@ int logchrif_parse_reqauth(int fd, int id,char* ip){ WFIFOB(fd,14) = sex; WFIFOB(fd,15) = 1;// auth failed WFIFOL(fd,16) = request_id; - WFIFOL(fd,20) = 0; - WFIFOB(fd,24) = 0; - WFIFOSET(fd,25); + WFIFOB(fd,20) = 0; + WFIFOSET(fd,21); } } return 1; diff --git a/src/login/loginclif.c b/src/login/loginclif.c index 4ae3088d76..d69aa983b8 100644 --- a/src/login/loginclif.c +++ b/src/login/loginclif.c @@ -159,7 +159,6 @@ static void logclif_auth_ok(struct login_session_data* sd) { node->login_id2 = sd->login_id2; node->sex = sd->sex; node->ip = ip; - node->version = sd->version; node->clienttype = sd->clienttype; idb_put(auth_db, sd->account_id, node); { @@ -181,7 +180,7 @@ static void logclif_auth_ok(struct login_session_data* sd) { 3 = Rejected from Server 4 = You have been blocked by the GM Team 5 = Your Game's EXE file is not the latest version - 6 = Your are Prohibited to log in until %s + 6 = You are prohibited to log in until %s 7 = Server is jammed due to over populated 8 = No more accounts may be connected from this company 9 = MSI_REFUSE_BAN_BY_DBA @@ -216,37 +215,33 @@ static void logclif_auth_failed(struct login_session_data* sd, int result) { if( (result == 0 || result == 1) && login_config.dynamic_pass_failure_ban ) ipban_log(ip); // log failed password attempt -//#if PACKETVER >= 20120000 /* not sure when this started */ - if( sd->version >= date2version(20120000) ){ /* not sure when this started */ - WFIFOHEAD(fd,26); - WFIFOW(fd,0) = 0x83e; - WFIFOL(fd,2) = result; - if( result != 6 ) - memset(WFIFOP(fd,6), '\0', 20); - else { // 6 = Your are Prohibited to log in until %s - struct mmo_account acc; - AccountDB* accounts = login_get_accounts_db(); - time_t unban_time = ( accounts->load_str(accounts, &acc, sd->userid) ) ? acc.unban_time : 0; - timestamp2string(WFIFOCP(fd,6), 20, unban_time, login_config.date_format); - } - WFIFOSET(fd,26); +#if PACKETVER >= 20120000 /* not sure when this started */ + WFIFOHEAD(fd,26); + WFIFOW(fd,0) = 0x83e; + WFIFOL(fd,2) = result; + if( result != 6 ) + memset(WFIFOP(fd,6), '\0', 20); + else { // 6 = You are prohibited to log in until %s + struct mmo_account acc; + AccountDB* accounts = login_get_accounts_db(); + time_t unban_time = ( accounts->load_str(accounts, &acc, sd->userid) ) ? acc.unban_time : 0; + timestamp2string(WFIFOCP(fd,6), 20, unban_time, login_config.date_format); } -//#else - else { - WFIFOHEAD(fd,23); - WFIFOW(fd,0) = 0x6a; - WFIFOB(fd,2) = (uint8)result; - if( result != 6 ) - memset(WFIFOP(fd,3), '\0', 20); - else { // 6 = Your are Prohibited to log in until %s - struct mmo_account acc; - AccountDB* accounts = login_get_accounts_db(); - time_t unban_time = ( accounts->load_str(accounts, &acc, sd->userid) ) ? acc.unban_time : 0; - timestamp2string(WFIFOCP(fd,3), 20, unban_time, login_config.date_format); - } - WFIFOSET(fd,23); + WFIFOSET(fd,26); +#else + WFIFOHEAD(fd,23); + WFIFOW(fd,0) = 0x6a; + WFIFOB(fd,2) = (uint8)result; + if( result != 6 ) + memset(WFIFOP(fd,3), '\0', 20); + else { // 6 = You are prohibited to log in until %s + struct mmo_account acc; + AccountDB* accounts = login_get_accounts_db(); + time_t unban_time = ( accounts->load_str(accounts, &acc, sd->userid) ) ? acc.unban_time : 0; + timestamp2string(WFIFOCP(fd,3), 20, unban_time, login_config.date_format); } -//#endif + WFIFOSET(fd,23); +#endif } /** @@ -306,7 +301,6 @@ static int logclif_parse_reqauth(int fd, struct login_session_data *sd, int comm return 0; else { int result; - uint32 version; char username[NAME_LENGTH]; char password[PASSWD_LENGTH]; unsigned char passhash[16]; @@ -320,8 +314,6 @@ static int logclif_parse_reqauth(int fd, struct login_session_data *sd, int comm size_t uAccLen = strlen(accname); size_t uTokenLen = RFIFOREST(fd) - 0x5C; - version = RFIFOL(fd,4); - if(uAccLen > NAME_LENGTH - 1 || uAccLen == 0 || uTokenLen > NAME_LENGTH - 1 || uTokenLen == 0) { logclif_auth_failed(sd, 3); @@ -334,7 +326,6 @@ static int logclif_parse_reqauth(int fd, struct login_session_data *sd, int comm } else { - version = RFIFOL(fd,2); safestrncpy(username, RFIFOCP(fd,6), NAME_LENGTH); if( israwpass ) { @@ -350,11 +341,10 @@ static int logclif_parse_reqauth(int fd, struct login_session_data *sd, int comm RFIFOSKIP(fd,RFIFOREST(fd)); // assume no other packet was sent sd->clienttype = clienttype; - sd->version = version; safestrncpy(sd->userid, username, NAME_LENGTH); if( israwpass ) { - ShowStatus("Request for connection of %s (ip: %s) version=%d\n", sd->userid, ip,sd->version); + ShowStatus("Request for connection of %s (ip: %s)\n", sd->userid, ip); safestrncpy(sd->passwd, password, NAME_LENGTH); if( login_config.use_md5_passwds ) MD5_String(sd->passwd, sd->passwd); @@ -362,7 +352,7 @@ static int logclif_parse_reqauth(int fd, struct login_session_data *sd, int comm } else { - ShowStatus("Request for connection (passwdenc mode) of %s (ip: %s) version=%d\n", sd->userid, ip,sd->version); + ShowStatus("Request for connection (passwdenc mode) of %s (ip: %s)\n", sd->userid, ip); bin2hex(sd->passwd, passhash, 16); // raw binary data here! sd->passwdenc = PASSWORDENC; } @@ -430,7 +420,6 @@ static int logclif_parse_reqcharconnec(int fd, struct login_session_data *sd, ch if( login_config.use_md5_passwds ) MD5_String(sd->passwd, sd->passwd); sd->passwdenc = 0; - sd->version = login_config.client_version_to_connect; // hack to skip version check server_ip = ntohl(RFIFOL(fd,54)); server_port = ntohs(RFIFOW(fd,58)); safestrncpy(server_name, RFIFOCP(fd,60), 20); diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 7c9ed34f6e..7512f8af39 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -185,12 +185,12 @@ ACMD_FUNC(send) long num; if(len) {// show packet length - sprintf(atcmd_output, msg_txt(sd,904), type, packet_db[sd->packet_ver][type].len); // Packet 0x%x length: %d + sprintf(atcmd_output, msg_txt(sd,904), type, packet_db[type].len); // Packet 0x%x length: %d clif_displaymessage(fd, atcmd_output); return 0; } - len=packet_db[sd->packet_ver][type].len; + len=packet_db[type].len; off=2; if(len == 0) {// unknown packet - ERROR @@ -341,7 +341,7 @@ ACMD_FUNC(send) SKIP_VALUE(message); } - if(packet_db[sd->packet_ver][type].len == -1) + if(packet_db[type].len == -1) {// send dynamic packet WFIFOW(fd,2)=TOW(off); WFIFOSET(fd,off); @@ -3927,9 +3927,6 @@ ACMD_FUNC(reload) { } else if (strstr(command, "questdb") || strncmp(message, "questdb", 3) == 0) { do_reload_quest(); clif_displaymessage(fd, msg_txt(sd,1377)); // Quest database has been reloaded. - } else if (strstr(command, "packetdb") || strncmp(message, "packetdb", 4) == 0) { - packetdb_readdb(true); - clif_displaymessage(fd, msg_txt(sd,1477)); // Packet database has been reloaded. } else if (strstr(command, "instancedb") || strncmp(message, "instancedb", 4) == 0) { instance_reload(); clif_displaymessage(fd, msg_txt(sd,516)); // Instance database has been reloaded. @@ -10085,7 +10082,6 @@ void atcommand_basecommands(void) { ACMD_DEF2("reloadmotd", reload), ACMD_DEF2("reloadquestdb", reload), ACMD_DEF2("reloadmsgconf", reload), - ACMD_DEF2("reloadpacketdb", reload), ACMD_DEF2("reloadinstancedb", reload), ACMD_DEF(partysharelvl), ACMD_DEF(mapinfo), diff --git a/src/map/battle.c b/src/map/battle.c index 63987390dd..7754f85f12 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -8194,8 +8194,6 @@ static const struct _battle_data { { "night_at_start", &battle_config.night_at_start, 0, 0, 1, }, { "show_mob_info", &battle_config.show_mob_info, 0, 0, 1|2|4, }, { "ban_hack_trade", &battle_config.ban_hack_trade, 0, 0, INT_MAX, }, - { "packet_ver_flag", &battle_config.packet_ver_flag, 0x7FFFFFFF,0, INT_MAX, }, - { "packet_ver_flag2", &battle_config.packet_ver_flag2, 0x7FFFFFFF,0, INT_MAX, }, { "min_hair_style", &battle_config.min_hair_style, 0, 0, INT_MAX, }, { "max_hair_style", &battle_config.max_hair_style, 23, 0, INT_MAX, }, { "min_hair_color", &battle_config.min_hair_color, 0, 0, INT_MAX, }, diff --git a/src/map/battle.h b/src/map/battle.h index 1f11a667b5..bd046a1ba6 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -373,8 +373,6 @@ extern struct Battle_Config int day_duration; // added by [Yor] int night_duration; // added by [Yor] int ban_hack_trade; // added by [Yor] - int packet_ver_flag; // added by [Yor] - int packet_ver_flag2; // expend of packet_ver_flag int min_hair_style; // added by [MouseJstr] int max_hair_style; // added by [MouseJstr] diff --git a/src/map/chrif.c b/src/map/chrif.c index aeaa14e6a7..1c96972fe4 100644 --- a/src/map/chrif.c +++ b/src/map/chrif.c @@ -36,7 +36,7 @@ static bool char_init_done = false; //server already initialized? Used for Inter static const int packet_len_table[0x3d] = { // U - used, F - free 60, 3,-1,-1,10,-1, 6,-1, // 2af8-2aff: U->2af8, U->2af9, U->2afa, U->2afb, U->2afc, U->2afd, U->2afe, U->2aff - 6,-1,19, 7,-1,39,30, 10, // 2b00-2b07: U->2b00, U->2b01, U->2b02, U->2b03, U->2b04, U->2b05, U->2b06, U->2b07 + 6,-1,18, 7,-1,39,30, 10, // 2b00-2b07: U->2b00, U->2b01, U->2b02, U->2b03, U->2b04, U->2b05, U->2b06, U->2b07 6,30, 10, -1,86, 7,44,34, // 2b08-2b0f: U->2b08, U->2b09, U->2b0a, U->2b0b, U->2b0c, U->2b0d, U->2b0e, U->2b0f 11,10,10, 0,11, -1,266,10, // 2b10-2b17: U->2b10, U->2b11, U->2b12, F->2b13, U->2b14, U->2b15, U->2b16, U->2b17 2,10, 2,-1,-1,-1, 2, 7, // 2b18-2b1f: U->2b18, U->2b19, U->2b1a, U->2b1b, U->2b1c, U->2b1d, U->2b1e, U->2b1f @@ -809,14 +809,13 @@ int chrif_charselectreq(struct map_session_data* sd, uint32 s_ip) { chrif_check(-1); - WFIFOHEAD(char_fd,19); + WFIFOHEAD(char_fd,18); WFIFOW(char_fd, 0) = 0x2b02; WFIFOL(char_fd, 2) = sd->bl.id; WFIFOL(char_fd, 6) = sd->login_id1; WFIFOL(char_fd,10) = sd->login_id2; WFIFOL(char_fd,14) = htonl(s_ip); - WFIFOB(char_fd,18) = sd->packet_ver; - WFIFOSET(char_fd,19); + WFIFOSET(char_fd,18); return 0; } diff --git a/src/map/clif.c b/src/map/clif.c index a773ebd0f9..338ee87914 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -55,21 +55,9 @@ /* for clif_clearunit_delayed */ static struct eri *delay_clearunit_ers; -//#define DUMP_UNKNOWN_PACKET -//#define DUMP_INVALID_PACKET - -struct Clif_Config { - int packet_db_ver; //Preferred packet version. - int connect_cmd[MAX_PACKET_VER + 1]; //Store the connect command for all versions. [Skotlex] -} clif_config; - -struct s_packet_db packet_db[MAX_PACKET_VER + 1][MAX_PACKET_DB + 1]; -int packet_db_ack[MAX_PACKET_VER + 1][MAX_ACK_FUNC + 1]; -#ifdef PACKET_OBFUSCATION -static struct s_packet_keys *packet_keys[MAX_PACKET_VER + 1]; -static unsigned int clif_cryptKey[3]; // Used keys -#endif -static unsigned short clif_parse_cmd(int fd, struct map_session_data *sd); +struct s_packet_db packet_db[MAX_PACKET_DB + 1]; +int packet_db_ack[MAX_ACK_FUNC + 1]; +#include "clif_obfuscation.h" static bool clif_session_isValid(struct map_session_data *sd); #if PACKETVER >= 20150513 @@ -295,9 +283,7 @@ static inline unsigned char clif_bl_type(struct block_list *bl) { #endif static bool clif_session_isValid(struct map_session_data *sd) { - if (sd != NULL && sd->packet_ver <= MAX_PACKET_VER && session_isActive(sd->fd)) - return true; - return false; + return ( sd != NULL && session_isActive(sd->fd) ); } /*========================================== @@ -373,10 +359,8 @@ static int clif_send_sub(struct block_list *bl, va_list ap) return 0; } - if (packet_db[sd->packet_ver][RBUFW(buf,0)].len) { // packet must exist for the client version - memcpy(WFIFOP(fd,0), buf, len); - WFIFOSET(fd,len); - } + memcpy(WFIFOP(fd,0), buf, len); + WFIFOSET(fd,len); return 0; } @@ -404,14 +388,10 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target case ALL_CLIENT: //All player clients. iter = mapit_getallusers(); - while( (tsd = (TBL_PC*)mapit_next(iter)) != NULL ) - { - if( packet_db[tsd->packet_ver][RBUFW(buf,0)].len ) - { // packet must exist for the client version - WFIFOHEAD(tsd->fd, len); - memcpy(WFIFOP(tsd->fd,0), buf, len); - WFIFOSET(tsd->fd,len); - } + while( (tsd = (TBL_PC*)mapit_next(iter)) != NULL ){ + WFIFOHEAD(tsd->fd, len); + memcpy(WFIFOP(tsd->fd, 0), buf, len); + WFIFOSET(tsd->fd, len); } mapit_free(iter); break; @@ -420,8 +400,7 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target iter = mapit_getallusers(); while( (tsd = (TBL_PC*)mapit_next(iter)) != NULL ) { - if( bl->m == tsd->bl.m && packet_db[tsd->packet_ver][RBUFW(buf,0)].len ) - { // packet must exist for the client version + if( bl->m == tsd->bl.m ){ WFIFOHEAD(tsd->fd, len); memcpy(WFIFOP(tsd->fd,0), buf, len); WFIFOSET(tsd->fd,len); @@ -458,13 +437,10 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target for(i = 0; i < cd->users; i++) { if (type == CHAT_WOS && cd->usersd[i] == sd) continue; - if (packet_db[cd->usersd[i]->packet_ver][RBUFW(buf,0)].len) { // packet must exist for the client version - if ((fd=cd->usersd[i]->fd) >0 && session[fd]) // Added check to see if session exists [PoW] - { - WFIFOHEAD(fd,len); - memcpy(WFIFOP(fd,0), buf, len); - WFIFOSET(fd,len); - } + if ((fd=cd->usersd[i]->fd) >0 && session[fd]){ // Added check to see if session exists [PoW] + WFIFOHEAD(fd,len); + memcpy(WFIFOP(fd,0), buf, len); + WFIFOSET(fd,len); } } } @@ -500,12 +476,9 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target if( (type == PARTY_AREA || type == PARTY_AREA_WOS) && (sd->bl.x < x0 || sd->bl.y < y0 || sd->bl.x > x1 || sd->bl.y > y1) ) continue; - if( packet_db[sd->packet_ver][RBUFW(buf,0)].len ) - { // packet must exist for the client version - WFIFOHEAD(fd,len); - memcpy(WFIFOP(fd,0), buf, len); - WFIFOSET(fd,len); - } + WFIFOHEAD(fd, len); + memcpy(WFIFOP(fd, 0), buf, len); + WFIFOSET(fd, len); } if (!enable_spy) //Skip unnecessary parsing. [Skotlex] break; @@ -513,8 +486,7 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target iter = mapit_getallusers(); while( (tsd = (TBL_PC*)mapit_next(iter)) != NULL ) { - if( tsd->partyspy == p->party.party_id && packet_db[tsd->packet_ver][RBUFW(buf,0)].len ) - { // packet must exist for the client version + if( tsd->partyspy == p->party.party_id ){ WFIFOHEAD(tsd->fd, len); memcpy(WFIFOP(tsd->fd,0), buf, len); WFIFOSET(tsd->fd,len); @@ -533,8 +505,7 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target { if( type == DUEL_WOS && bl->id == tsd->bl.id ) continue; - if( sd->duel_group == tsd->duel_group && packet_db[tsd->packet_ver][RBUFW(buf,0)].len ) - { // packet must exist for the client version + if( sd->duel_group == tsd->duel_group ){ WFIFOHEAD(tsd->fd, len); memcpy(WFIFOP(tsd->fd,0), buf, len); WFIFOSET(tsd->fd,len); @@ -544,7 +515,7 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target break; case SELF: - if (sd && (fd=sd->fd) && packet_db[sd->packet_ver][RBUFW(buf,0)].len) { // packet must exist for the client version + if (sd && (fd=sd->fd)) { WFIFOHEAD(fd,len); memcpy(WFIFOP(fd,0), buf, len); WFIFOSET(fd,len); @@ -585,12 +556,9 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target if( (type == GUILD_AREA || type == GUILD_AREA_WOS) && (sd->bl.x < x0 || sd->bl.y < y0 || sd->bl.x > x1 || sd->bl.y > y1) ) continue; - if( packet_db[sd->packet_ver][RBUFW(buf,0)].len ) - { // packet must exist for the client version - WFIFOHEAD(fd,len); - memcpy(WFIFOP(fd,0), buf, len); - WFIFOSET(fd,len); - } + WFIFOHEAD(fd,len); + memcpy(WFIFOP(fd,0), buf, len); + WFIFOSET(fd,len); } } if (!enable_spy) //Skip unnecessary parsing. [Skotlex] @@ -599,8 +567,7 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target iter = mapit_getallusers(); while( (tsd = (TBL_PC*)mapit_next(iter)) != NULL ) { - if( tsd->guildspy == g->guild_id && packet_db[tsd->packet_ver][RBUFW(buf,0)].len ) - { // packet must exist for the client version + if( tsd->guildspy == g->guild_id ){ WFIFOHEAD(tsd->fd, len); memcpy(WFIFOP(tsd->fd,0), buf, len); WFIFOSET(tsd->fd,len); @@ -632,12 +599,9 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target continue; if( (type == BG_AREA || type == BG_AREA_WOS) && (sd->bl.x < x0 || sd->bl.y < y0 || sd->bl.x > x1 || sd->bl.y > y1) ) continue; - if( packet_db[sd->packet_ver][RBUFW(buf,0)].len ) - { // packet must exist for the client version - WFIFOHEAD(fd,len); - memcpy(WFIFOP(fd,0), buf, len); - WFIFOSET(fd,len); - } + WFIFOHEAD(fd,len); + memcpy(WFIFOP(fd,0), buf, len); + WFIFOSET(fd,len); } } break; @@ -650,11 +614,9 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target continue; } - if( packet_db[sd->packet_ver][RBUFW(buf,0)].len ){ // packet must exist for the client version - WFIFOHEAD(fd,len); - memcpy(WFIFOP(fd,0), buf, len); - WFIFOSET(fd,len); - } + WFIFOHEAD(fd,len); + memcpy(WFIFOP(fd,0), buf, len); + WFIFOSET(fd,len); } if (!enable_spy) //Skip unnecessary parsing. [Skotlex] @@ -662,8 +624,7 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target iter = mapit_getallusers(); while ((tsd = (TBL_PC*)mapit_next(iter)) != NULL){ - if (tsd->clanspy == clan->id && packet_db[tsd->packet_ver][RBUFW(buf, 0)].len) - { // packet must exist for the client version + if (tsd->clanspy == clan->id){ WFIFOHEAD(tsd->fd, len); memcpy(WFIFOP(tsd->fd, 0), buf, len); WFIFOSET(tsd->fd, len); @@ -2046,7 +2007,7 @@ void clif_npc_market_open(struct map_session_data *sd, struct npc_data *nd) { if (sd->state.trading) return; - info = &packet_db[sd->packet_ver][cmd]; + info = &packet_db[cmd]; if (!info || info->len == 0) return; @@ -2093,7 +2054,7 @@ void clif_npc_market_purchase_ack(struct map_session_data *sd, uint8 res, uint8 nullpo_retv(sd); nullpo_retv((nd = map_id2nd(sd->npc_shopid))); - info = &packet_db[sd->packet_ver][cmd]; + info = &packet_db[cmd]; if (!info || info->len == 0) return; @@ -2137,7 +2098,7 @@ void clif_parse_NPCMarketPurchase(int fd, struct map_session_data *sd) { if (!sd->npc_shopid) return; - info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + info = &packet_db[RFIFOW(fd,0)]; if (!info || info->len == 0) return; len = RFIFOW(fd,info->pos[0]); @@ -2246,9 +2207,9 @@ void clif_scriptclear(struct map_session_data *sd, int npcid) nullpo_retv(sd); - cmd = packet_db_ack[sd->packet_ver][ZC_CLEAR_DIALOG]; + cmd = packet_db_ack[ZC_CLEAR_DIALOG]; if(!cmd) cmd = 0x8d6; //default - info = &packet_db[sd->packet_ver][cmd]; + info = &packet_db[cmd]; len = info->len; fd = sd->fd; @@ -3814,8 +3775,8 @@ void clif_equipitemack(struct map_session_data *sd,int n,int pos,uint8 flag) nullpo_retv(sd); - cmd = packet_db_ack[sd->packet_ver][ZC_WEAR_EQUIP_ACK]; - if (!cmd || !(info = &packet_db[sd->packet_ver][cmd]) || !info->len) + cmd = packet_db_ack[ZC_WEAR_EQUIP_ACK]; + if (!cmd || !(info = &packet_db[cmd]) || !info->len) return; fd = sd->fd; @@ -3829,12 +3790,12 @@ void clif_equipitemack(struct map_session_data *sd,int n,int pos,uint8 flag) switch (cmd) { case 0xaa: WFIFOW(fd, info->pos[1]) = pos; - if (sd->packet_ver < date2version(20100629)) - WFIFOW(fd, info->pos[2]) = (flag == ITEM_EQUIP_ACK_OK ? 1 : 0); - else { - WFIFOL(fd, info->pos[2]) = look; - WFIFOW(fd, info->pos[3]) = (flag == ITEM_EQUIP_ACK_OK ? 1 : 0); - } +#if PACKETVER < 20100629 + WFIFOW(fd, info->pos[2]) = (flag == ITEM_EQUIP_ACK_OK ? 1 : 0); +#else + WFIFOL(fd, info->pos[2]) = look; + WFIFOW(fd, info->pos[3]) = (flag == ITEM_EQUIP_ACK_OK ? 1 : 0); +#endif break; case 0x8d0: if (flag == ITEM_EQUIP_ACK_FAILLEVEL) @@ -6882,7 +6843,7 @@ void clif_parse_BankOpen(int fd, struct map_session_data* sd) { return; } else { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int aid = RFIFOL(fd,info->pos[0]); //unused should we check vs fd ? if(sd->status.account_id == aid){ sd->state.banking = 1; @@ -6913,7 +6874,7 @@ void clif_bank_close(struct map_session_data *sd){ * 09B8 L ??? (dunno just wild guess checkme) */ void clif_parse_BankClose(int fd, struct map_session_data* sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int aid = RFIFOL(fd,info->pos[0]); //unused should we check vs fd ? nullpo_retv(sd); @@ -6939,9 +6900,9 @@ void clif_Bank_Check(struct map_session_data* sd) { nullpo_retv(sd); - cmd = packet_db_ack[sd->packet_ver][ZC_BANKING_CHECK]; + cmd = packet_db_ack[ZC_BANKING_CHECK]; if(!cmd) cmd = 0x09A6; //default - info = &packet_db[sd->packet_ver][cmd]; + info = &packet_db[cmd]; len = info->len; if(!len) return; //version as packet disable // sd->state.banking = 1; //mark opening and closing @@ -6964,7 +6925,7 @@ void clif_parse_BankCheck(int fd, struct map_session_data* sd) { return; } else { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int aid = RFIFOL(fd,info->pos[0]); //unused should we check vs fd ? if(sd->status.account_id == aid) //since we have it let check it for extra security clif_Bank_Check(sd); @@ -6983,9 +6944,9 @@ void clif_bank_deposit(struct map_session_data *sd, enum e_BANKING_DEPOSIT_ACK r nullpo_retv(sd); - cmd = packet_db_ack[sd->packet_ver][ZC_ACK_BANKING_DEPOSIT]; + cmd = packet_db_ack[ZC_ACK_BANKING_DEPOSIT]; if(!cmd) cmd = 0x09A8; - info = &packet_db[sd->packet_ver][cmd]; + info = &packet_db[cmd]; len = info->len; if(!len) return; //version as packet disable @@ -7008,7 +6969,7 @@ void clif_parse_BankDeposit(int fd, struct map_session_data* sd) { return; } else { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int aid = RFIFOL(fd,info->pos[0]); //unused should we check vs fd ? int money = RFIFOL(fd,info->pos[1]); @@ -7031,9 +6992,9 @@ void clif_bank_withdraw(struct map_session_data *sd,enum e_BANKING_WITHDRAW_ACK nullpo_retv(sd); - cmd = packet_db_ack[sd->packet_ver][ZC_ACK_BANKING_WITHDRAW]; + cmd = packet_db_ack[ZC_ACK_BANKING_WITHDRAW]; if(!cmd) cmd = 0x09AA; - info = &packet_db[sd->packet_ver][cmd]; + info = &packet_db[cmd]; len = info->len; if(!len) return; //version as packet disable @@ -7056,7 +7017,7 @@ void clif_parse_BankWithdraw(int fd, struct map_session_data* sd) { return; } else { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int aid = RFIFOL(fd,info->pos[0]); //unused should we check vs fd ? int money = RFIFOL(fd,info->pos[1]); if(sd->status.account_id == aid){ @@ -9914,7 +9875,7 @@ static bool clif_process_message(struct map_session_data* sd, bool whisperFormat fd = sd->fd; - info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + info = &packet_db[RFIFOW(fd,0)]; packetLength = RFIFOW(fd,info->pos[0]); input = RFIFOCP(fd,info->pos[1]); @@ -10037,7 +9998,7 @@ static bool clif_process_message(struct map_session_data* sd, bool whisperFormat } // --------------------- -// clif_guess_PacketVer +// clif_parse_wanttoconnect // --------------------- // Parses a WantToConnection packet to try to identify which is the packet version used. [Skotlex] // error codes: @@ -10049,74 +10010,33 @@ static bool clif_process_message(struct map_session_data* sd, bool whisperFormat // 5 - Invalid client_tick (reserved) // 6 - Invalid sex // Only the first 'invalid' error that appears is used. -static int clif_guess_PacketVer(int fd, int get_previous, int *error) +static int clif_parse_WantToConnection_sub(int fd) { - static int err = 1; - static int packet_ver = -1; int packet_len, value; //Value is used to temporarily store account/char_id/sex unsigned short cmd; - if (get_previous) - {//For quick reruns, since the normal code flow is to fetch this once to identify the packet version, then again in the wanttoconnect function. [Skotlex] - if( error ) - *error = err; - return packet_ver; - } - //By default, start searching on the default one. - err = 1; - packet_ver = clif_config.packet_db_ver; - cmd = clif_parse_cmd(fd, NULL); + cmd = RFIFOW(fd, 0); packet_len = RFIFOREST(fd); -#define SET_ERROR(n) \ - if( err == 1 )\ - err = n;\ -//define SET_ERROR - // FIXME: If the packet is not received at once, this will FAIL. // Figure out, when it happens, that only part of the packet is // received, or fix the function to be able to deal with that // case. -#define CHECK_PACKET_VER() \ - if( cmd != clif_config.connect_cmd[packet_ver] || packet_len != packet_db[packet_ver][cmd].len )\ - ;/* not wanttoconnection or wrong length */\ - else if( (value=(int)RFIFOL(fd, packet_db[packet_ver][cmd].pos[0])) < START_ACCOUNT_NUM || value > END_ACCOUNT_NUM )\ - { SET_ERROR(2); }/* invalid account_id */\ - else if( (value=(int)RFIFOL(fd, packet_db[packet_ver][cmd].pos[1])) <= 0 )\ - { SET_ERROR(3); }/* invalid char_id */\ - /* RFIFOL(fd, packet_db[packet_ver][cmd].pos[2]) - don't care about login_id1 */\ - /* RFIFOL(fd, packet_db[packet_ver][cmd].pos[3]) - don't care about client_tick */\ - else if( (value=(int)RFIFOB(fd, packet_db[packet_ver][cmd].pos[4])) != 0 && value != 1 )\ - { SET_ERROR(6); }/* invalid sex */\ - else\ - {\ - err = 0;\ - if( error )\ - *error = 0;\ - return packet_ver;\ - }\ -//define CHECK_PACKET_VER - - CHECK_PACKET_VER();//Default packet version found. - - for (packet_ver = MAX_PACKET_VER; packet_ver > 0; packet_ver--) { //Start guessing the version, giving priority to the newer ones. [Skotlex] - CHECK_PACKET_VER(); - } - if( error ) - *error = err; - packet_ver = -1; - return -1; -#undef SET_ERROR -#undef CHECK_PACKET_VER + if( packet_len != packet_db[cmd].len ) + return 1; /* wrong length */ + else if( (value=(int)RFIFOL(fd, packet_db[cmd].pos[0])) < START_ACCOUNT_NUM || value > END_ACCOUNT_NUM ) + return 2; /* invalid account_id */ + else if( (value=(int)RFIFOL(fd, packet_db[cmd].pos[1])) <= 0 ) + return 3; /* invalid char_id */ + /* RFIFOL(fd, packet_db[cmd].pos[2]) - don't care about login_id1 */ + /* RFIFOL(fd, packet_db[cmd].pos[3]) - don't care about client_tick */ + else if( (value=(int)RFIFOB(fd, packet_db[cmd].pos[4])) != 0 && value != 1 ) + return 6; /* invalid sex */ + else + return 0; } -// ------------ -// clif_parse_* -// ------------ -// Parses incoming (player) connection - - /// Request to connect to map-server. /// 0072 .L .L .L .L .B (CZ_ENTER) /// 0436 .L .L .L .L .B (CZ_ENTER2) @@ -10125,35 +10045,46 @@ void clif_parse_WantToConnection(int fd, struct map_session_data* sd) { struct block_list* bl; struct auth_node* node; - int cmd, account_id, char_id, login_id1, sex; + int cmd, account_id, char_id, login_id1, sex, err; unsigned int client_tick; //The client tick is a tick, therefore it needs be unsigned. [Skotlex] - int packet_ver; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04, 11: 21sept04, 12: 18oct04, 13: 25oct04 (by [Yor]) if (sd) { ShowError("clif_parse_WantToConnection : invalid request (character already logged in)\n"); return; } - // Only valid packet version get here - packet_ver = clif_guess_PacketVer(fd, 1, NULL); + cmd = RFIFOW(fd, 0); + account_id = RFIFOL(fd, packet_db[cmd].pos[0]); + char_id = RFIFOL(fd, packet_db[cmd].pos[1]); + login_id1 = RFIFOL(fd, packet_db[cmd].pos[2]); + client_tick = RFIFOL(fd, packet_db[cmd].pos[3]); + sex = RFIFOB(fd, packet_db[cmd].pos[4]); - cmd = RFIFOW(fd,0); - account_id = RFIFOL(fd, packet_db[packet_ver][cmd].pos[0]); - char_id = RFIFOL(fd, packet_db[packet_ver][cmd].pos[1]); - login_id1 = RFIFOL(fd, packet_db[packet_ver][cmd].pos[2]); - client_tick = RFIFOL(fd, packet_db[packet_ver][cmd].pos[3]); - sex = RFIFOB(fd, packet_db[packet_ver][cmd].pos[4]); + err = clif_parse_WantToConnection_sub(fd); - if( packet_ver < 5 || // reject really old client versions - (packet_ver <= 9 && (battle_config.packet_ver_flag & 1) == 0) || // older than 6sept04 - (packet_ver > 9 && packet_ver <40 && (battle_config.packet_ver_flag & 1<<(packet_ver-9)) == 0) || // version not allowed - (packet_ver >= 40 && packet_ver <=72 && (battle_config.packet_ver_flag2 & 1<<(packet_ver-40)) == 0) ) - {// packet version rejected - ShowInfo("Rejected connection attempt, forbidden packet version (AID/CID: '"CL_WHITE"%d/%d"CL_RESET"', Packet Ver: '"CL_WHITE"%d"CL_RESET"', IP: '"CL_WHITE"%s"CL_RESET"').\n", account_id, char_id, packet_ver, ip2str(session[fd]->client_addr, NULL)); + if( err ){ // connection rejected + ShowInfo("clif_parse: Disconnecting session #%d with unknown connect packet 0x%04x(length:%d)%s\n", fd, cmd, RFIFOREST(fd), ( + err == 1 ? "." : + err == 2 ? ", possibly for having an invalid account_id." : + err == 3 ? ", possibly for having an invalid char_id." : + /* Uncomment when checks are added in clif_parse_WantToConnection_sub. [FlavioJS] + err == 4 ? ", possibly for having an invalid login_id1." : + err == 5 ? ", possibly for having an invalid client_tick." : + */ + err == 6 ? ", possibly for having an invalid sex." : + ". ERROR invalid error code")); + WFIFOHEAD(fd,packet_len(0x6a)); WFIFOW(fd,0) = 0x6a; - WFIFOB(fd,2) = 5; // Your Game's EXE file is not the latest version + WFIFOB(fd,2) = err; WFIFOSET(fd,packet_len(0x6a)); + +#ifdef DUMP_INVALID_PACKET + ShowDump(RFIFOP(fd, 0), RFIFOREST(fd)); +#endif + + RFIFOSKIP(fd, RFIFOREST(fd)); + set_eof(fd); return; } @@ -10185,7 +10116,6 @@ void clif_parse_WantToConnection(int fd, struct map_session_data* sd) CREATE(sd, TBL_PC, 1); sd->fd = fd; - sd->packet_ver = packet_ver; #ifdef PACKET_OBFUSCATION sd->cryptKey = (((((clif_cryptKey[0] * clif_cryptKey[1]) + clif_cryptKey[2]) & 0xFFFFFFFF) * clif_cryptKey[1]) + clif_cryptKey[2]) & 0xFFFFFFFF; #endif @@ -10595,7 +10525,7 @@ void clif_notify_time(struct map_session_data* sd, unsigned long time) /// There are various variants of this packet, some of them have padding between fields. void clif_parse_TickSend(int fd, struct map_session_data *sd) { - sd->client_tick = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + sd->client_tick = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); clif_notify_time(sd, gettick()); } @@ -10638,7 +10568,7 @@ void clif_hotkeys_send(struct map_session_data *sd) { /// Request to update a position on the hotkey row bar void clif_parse_HotkeyRowShift(int fd, struct map_session_data *sd) { int cmd = RFIFOW(fd, 0); - sd->status.hotkey_rowshift = RFIFOB(fd, packet_db[sd->packet_ver][cmd].pos[0]); + sd->status.hotkey_rowshift = RFIFOB(fd, packet_db[cmd].pos[0]); } /// Request to update a position on the hotkey bar (CZ_SHORTCUT_KEY_CHANGE). @@ -10646,7 +10576,7 @@ void clif_parse_HotkeyRowShift(int fd, struct map_session_data *sd) { void clif_parse_Hotkey(int fd, struct map_session_data *sd) { #ifdef HOTKEY_SAVING unsigned short idx; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; idx = RFIFOW(fd, info->pos[0]); if (idx >= MAX_HOTKEYS) return; @@ -10723,7 +10653,7 @@ void clif_parse_WalkToXY(int fd, struct map_session_data *sd) if(sd->sc.data[SC_RUN] || sd->sc.data[SC_WUGDASH]) return; - RFIFOPOS(fd, packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0], &x, &y, NULL); + RFIFOPOS(fd, packet_db[RFIFOW(fd,0)].pos[0], &x, &y, NULL); //A move command one cell west is only valid if the target cell is free if(battle_config.official_cell_stack_limit > 0 @@ -10769,7 +10699,7 @@ void clif_disconnect_ack(struct map_session_data* sd, short result) void clif_parse_QuitGame(int fd, struct map_session_data *sd) { /* Rovert's prevent logout option fixed [Valaris] */ - //int type = RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + //int type = RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0]); if( !sd->sc.data[SC_CLOAKING] && !sd->sc.data[SC_HIDING] && !sd->sc.data[SC_CHASEWALK] && !sd->sc.data[SC_CLOAKINGEXCEED] && !sd->sc.data[SC_SUHIDE] && (!battle_config.prevent_logout || sd->canlog_tick == 0 || DIFF_TICK(gettick(), sd->canlog_tick) > battle_config.prevent_logout) ) { @@ -10788,7 +10718,7 @@ void clif_parse_QuitGame(int fd, struct map_session_data *sd) /// There are various variants of this packet, some of them have padding between fields. void clif_parse_GetCharNameRequest(int fd, struct map_session_data *sd) { - int id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + int id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); struct block_list* bl; //struct status_change *sc; @@ -10868,7 +10798,7 @@ void clif_parse_MapMove(int fd, struct map_session_data *sd) { char command[MAP_NAME_LENGTH_EXT+25]; char* map_name; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; map_name = RFIFOCP(fd,info->pos[0]); map_name[MAP_NAME_LENGTH_EXT-1]='\0'; @@ -10920,7 +10850,7 @@ void clif_changed_dir(struct block_list *bl, enum send_target target) void clif_parse_ChangeDir(int fd, struct map_session_data *sd) { unsigned char headdir, dir; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; headdir = RFIFOB(fd,info->pos[0]); dir = RFIFOB(fd,info->pos[1]); @@ -10936,7 +10866,7 @@ void clif_parse_ChangeDir(int fd, struct map_session_data *sd) /// @see enum emotion_type void clif_parse_Emotion(int fd, struct map_session_data *sd) { - int emoticon = RFIFOB(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + int emoticon = RFIFOB(fd,packet_db[RFIFOW(fd,0)].pos[0]); if (battle_config.basic_skill_check == 0 || pc_checkskill(sd, NV_BASIC) >= 2 || pc_checkskill(sd, SU_BASIC_SKILL) >= 1) { if (emoticon == E_MUTE) {// prevent use of the mute emote [Valaris] @@ -11095,7 +11025,7 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, /// There are various variants of this packet, some of them have padding between fields. void clif_parse_ActionRequest(int fd, struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; clif_parse_ActionRequest_sub(sd, RFIFOB(fd,info->pos[1]), RFIFOL(fd,info->pos[0]), @@ -11111,7 +11041,7 @@ void clif_parse_ActionRequest(int fd, struct map_session_data *sd) /// 1 = char-select (disconnect) void clif_parse_Restart(int fd, struct map_session_data *sd) { - switch(RFIFOB(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])) { + switch(RFIFOB(fd,packet_db[RFIFOW(fd,0)].pos[0])) { case 0x00: pc_respawn(sd,CLR_OUTSIGHT); break; @@ -11256,7 +11186,7 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd) /// 0099 .W .?B 00 void clif_parse_Broadcast(int fd, struct map_session_data* sd) { char command[CHAT_SIZE_MAX+11]; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; unsigned int len = RFIFOW(fd,info->pos[0])-4; char* msg = RFIFOCP(fd,info->pos[1]); @@ -11277,7 +11207,7 @@ void clif_parse_TakeItem(int fd, struct map_session_data *sd) struct flooritem_data *fitem; int map_object_id; - map_object_id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + map_object_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); fitem = (struct flooritem_data*)map_id2bl(map_object_id); @@ -11308,7 +11238,7 @@ void clif_parse_TakeItem(int fd, struct map_session_data *sd) /// 0363 .W .W (CZ_ITEM_THROW2) /// There are various variants of this packet, some of them have padding between fields. void clif_parse_DropItem(int fd, struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int item_index = RFIFOW(fd,info->pos[0]) -2; int item_amount = RFIFOW(fd,info->pos[1]) ; @@ -11359,7 +11289,7 @@ void clif_parse_UseItem(int fd, struct map_session_data *sd) //Whether the item is used or not is irrelevant, the char ain't idle. [Skotlex] if (battle_config.idletime_option&IDLE_USEITEM) sd->idletime = last_tick; - n = RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])-2; + n = RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0])-2; if(n <0 || n >= MAX_INVENTORY) return; @@ -11374,7 +11304,7 @@ void clif_parse_UseItem(int fd, struct map_session_data *sd) void clif_parse_EquipItem(int fd,struct map_session_data *sd) { int index; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if(pc_isdead(sd)) { clif_clearunit_area(&sd->bl,CLR_DEAD); @@ -11441,7 +11371,7 @@ void clif_parse_UnequipItem(int fd,struct map_session_data *sd) else if (pc_cant_act2(sd)) return; - index = RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])-2; + index = RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0])-2; if (battle_config.idletime_option&IDLE_USEITEM) sd->idletime = last_tick; @@ -11457,7 +11387,7 @@ void clif_parse_UnequipItem(int fd,struct map_session_data *sd) void clif_parse_NpcClicked(int fd,struct map_session_data *sd) { struct block_list *bl; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if(pc_isdead(sd)) { clif_clearunit_area(&sd->bl,CLR_DEAD); @@ -11503,7 +11433,7 @@ void clif_parse_NpcClicked(int fd,struct map_session_data *sd) /// 1 = sell void clif_parse_NpcBuySellSelected(int fd,struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if (sd->state.trading) return; npc_buysellsel(sd,RFIFOL(fd,info->pos[0]),RFIFOB(fd,info->pos[1])); @@ -11532,7 +11462,7 @@ void clif_npc_buy_result(struct map_session_data* sd, unsigned char result) /// 00c8 .W { .W .W }* void clif_parse_NpcBuyListSend(int fd, struct map_session_data* sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; uint16 n = (RFIFOW(fd,info->pos[0])-4) /4; int result; @@ -11568,7 +11498,7 @@ void clif_parse_NpcSellListSend(int fd,struct map_session_data *sd) { int fail=0,n; unsigned short *item_list; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; n = (RFIFOW(fd,info->pos[0])-4) /4; // (pktlen-(cmd+len))/listsize item_list = (unsigned short*)RFIFOP(fd,info->pos[1]); @@ -11590,7 +11520,7 @@ void clif_parse_NpcSellListSend(int fd,struct map_session_data *sd) /// 1 = public void clif_parse_CreateChatRoom(int fd, struct map_session_data* sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int len = RFIFOW(fd,info->pos[0])-15; int limit = RFIFOW(fd,info->pos[1]); bool pub = (RFIFOB(fd,info->pos[2]) != 0); @@ -11628,7 +11558,7 @@ void clif_parse_CreateChatRoom(int fd, struct map_session_data* sd) /// Chatroom join request (CZ_REQ_ENTER_ROOM). /// 00d9 .L .8B void clif_parse_ChatAddMember(int fd, struct map_session_data* sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int chatid = RFIFOL(fd,info->pos[0]); const char* password = RFIFOCP(fd,info->pos[1]); // not zero-terminated @@ -11642,7 +11572,7 @@ void clif_parse_ChatAddMember(int fd, struct map_session_data* sd){ /// 0 = private /// 1 = public void clif_parse_ChatRoomStatusChange(int fd, struct map_session_data* sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int len = RFIFOW(fd,info->pos[0])-15; int limit = RFIFOW(fd,info->pos[1]); bool pub = (RFIFOB(fd,info->pos[2]) != 0); @@ -11668,8 +11598,8 @@ void clif_parse_ChatRoomStatusChange(int fd, struct map_session_data* sd){ /// 1 = normal void clif_parse_ChangeChatOwner(int fd, struct map_session_data* sd) { - //int role = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); - chat_changechatowner(sd,RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1])); + //int role = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); + chat_changechatowner(sd,RFIFOCP(fd,packet_db[RFIFOW(fd,0)].pos[1])); } @@ -11677,7 +11607,7 @@ void clif_parse_ChangeChatOwner(int fd, struct map_session_data* sd) /// 00e2 .24B void clif_parse_KickFromChat(int fd,struct map_session_data *sd) { - chat_kickchat(sd,RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + chat_kickchat(sd,RFIFOCP(fd,packet_db[RFIFOW(fd,0)].pos[0])); } @@ -11711,7 +11641,7 @@ void clif_parse_TradeRequest(int fd,struct map_session_data *sd) { struct map_session_data *t_sd; - t_sd = map_id2sd(RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + t_sd = map_id2sd(RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0])); if(!sd->chatID && pc_cant_act(sd)) return; //You can trade while in a chatroom. @@ -11752,7 +11682,7 @@ void clif_parse_TradeRequest(int fd,struct map_session_data *sd) /// 4 = rejected void clif_parse_TradeAck(int fd,struct map_session_data *sd) { - trade_tradeack(sd,RFIFOB(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + trade_tradeack(sd,RFIFOB(fd,packet_db[RFIFOW(fd,0)].pos[0])); } @@ -11760,7 +11690,7 @@ void clif_parse_TradeAck(int fd,struct map_session_data *sd) /// 00e8 .W .L void clif_parse_TradeAddItem(int fd,struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; short index = RFIFOW(fd,info->pos[0]); int amount = RFIFOL(fd,info->pos[1]); @@ -11808,7 +11738,7 @@ void clif_parse_StopAttack(int fd,struct map_session_data *sd) /// 0126 .W .L void clif_parse_PutItemToCart(int fd,struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if (pc_istrading(sd)) return; if (!pc_iscarton(sd)) @@ -11821,7 +11751,7 @@ void clif_parse_PutItemToCart(int fd,struct map_session_data *sd) /// 0127 .W .L void clif_parse_GetItemFromCart(int fd,struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if (!pc_iscarton(sd)) return; pc_getitemfromcart(sd,RFIFOW(fd,info->pos[0])-2,RFIFOL(fd,info->pos[1])); @@ -11902,7 +11832,7 @@ void clif_parse_ChangeCart(int fd,struct map_session_data *sd) } #endif - type = (int)RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + type = (int)RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0]); if( #ifdef NEW_CARTS @@ -11929,13 +11859,13 @@ void clif_parse_ChangeCart(int fd,struct map_session_data *sd) /// Newer clients (2013-12-23 and newer) send the correct amount. void clif_parse_StatusUp(int fd,struct map_session_data *sd) { - int increase_amount = RFIFOB(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1]); + int increase_amount = RFIFOB(fd,packet_db[RFIFOW(fd,0)].pos[1]); if( increase_amount < 0 ) { ShowDebug("clif_parse_StatusUp: Negative 'increase' value sent by client! (fd: %d, value: %d)\n", fd, increase_amount); } - pc_statusup(sd,RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]),increase_amount); + pc_statusup(sd,RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0]),increase_amount); } @@ -11943,7 +11873,7 @@ void clif_parse_StatusUp(int fd,struct map_session_data *sd) /// 0112 .W void clif_parse_SkillUp(int fd,struct map_session_data *sd) { - pc_skillup(sd,RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + pc_skillup(sd,RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0])); } static void clif_parse_UseSkillToId_homun(struct homun_data *hd, struct map_session_data *sd, unsigned int tick, uint16 skill_id, uint16 skill_lv, int target_id) @@ -12060,7 +11990,7 @@ void clif_parse_UseSkillToId(int fd, struct map_session_data *sd) uint16 skill_id, skill_lv; int inf,target_id; unsigned int tick = gettick(); - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; skill_lv = RFIFOW(fd,info->pos[0]); skill_id = RFIFOW(fd,info->pos[1]); @@ -12252,7 +12182,7 @@ static void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, uin /// There are various variants of this packet, some of them have padding between fields. void clif_parse_UseSkillToPos(int fd, struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if (pc_cant_act(sd)) return; if (pc_issit(sd)) @@ -12274,7 +12204,7 @@ void clif_parse_UseSkillToPos(int fd, struct map_session_data *sd) /// There are various variants of this packet, some of them have padding between fields. void clif_parse_UseSkillToPosMoreInfo(int fd, struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if (pc_cant_act(sd)) return; if (pc_issit(sd)) @@ -12294,7 +12224,7 @@ void clif_parse_UseSkillToPosMoreInfo(int fd, struct map_session_data *sd) /// 011b .W .16B void clif_parse_UseSkillMap(int fd, struct map_session_data* sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; uint16 skill_id = RFIFOW(fd,info->pos[0]); char map_name[MAP_NAME_LENGTH]; @@ -12327,7 +12257,7 @@ void clif_parse_RequestMemo(int fd,struct map_session_data *sd) /// Answer to pharmacy item selection dialog (CZ_REQMAKINGITEM). /// 018e .W { .W }*3 void clif_parse_ProduceMix(int fd,struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; unsigned short nameid = RFIFOW(fd,info->pos[0]); int slot1 = RFIFOW(fd,info->pos[1]); int slot2 = RFIFOW(fd,info->pos[2]); @@ -12365,7 +12295,7 @@ void clif_parse_ProduceMix(int fd,struct map_session_data *sd){ /// 5 = GN_MAKEBOMB /// 6 = GN_S_PHARMACY void clif_parse_Cooking(int fd,struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int type = RFIFOW(fd,info->pos[0]); unsigned short nameid = RFIFOW(fd,info->pos[1]); int amount = sd->menuskill_val2 ? sd->menuskill_val2 : 1; @@ -12399,11 +12329,11 @@ void clif_parse_RepairItem(int fd, struct map_session_data *sd) clif_menuskill_clear(sd); return; } - skill_repairweapon(sd,RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); - //nameid = RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1]); - //refine = RFIFOB(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[2]); + skill_repairweapon(sd,RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0])); + //nameid = RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[1]); + //refine = RFIFOB(fd,packet_db[RFIFOW(fd,0)].pos[2]); //for(i = 0; ipacket_ver][RFIFOW(fd,0)].pos[3+i]); + // card[i] = RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[3+i]); clif_menuskill_clear(sd); } @@ -12422,7 +12352,7 @@ void clif_parse_WeaponRefine(int fd, struct map_session_data *sd) clif_menuskill_clear(sd); return; } - idx = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + idx = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); skill_weaponrefine(sd, idx-2); clif_menuskill_clear(sd); } @@ -12436,7 +12366,7 @@ void clif_parse_WeaponRefine(int fd, struct map_session_data *sd) /// NOTE: If there were more than 254 items in the list, choice /// overflows to choice%256. void clif_parse_NpcSelectMenu(int fd,struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int npc_id = RFIFOL(fd,info->pos[0]); uint8 select = RFIFOB(fd,info->pos[1]); @@ -12462,14 +12392,14 @@ void clif_parse_NpcSelectMenu(int fd,struct map_session_data *sd){ /// 00b9 .L void clif_parse_NpcNextClicked(int fd,struct map_session_data *sd) { - npc_scriptcont(sd,RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]), false); + npc_scriptcont(sd,RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]), false); } /// NPC numeric input dialog value (CZ_INPUT_EDITDLG). /// 0143 .L .L void clif_parse_NpcAmountInput(int fd,struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int npcid = RFIFOL(fd,info->pos[0]); int amount = (int)RFIFOL(fd,info->pos[1]); @@ -12481,7 +12411,7 @@ void clif_parse_NpcAmountInput(int fd,struct map_session_data *sd){ /// NPC text input dialog value (CZ_INPUT_EDITDLGSTR). /// 01d5 .W .L .?B void clif_parse_NpcStringInput(int fd, struct map_session_data* sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int message_len = RFIFOW(fd,info->pos[0])-8; int npcid = RFIFOL(fd,info->pos[1]); const char* message = RFIFOCP(fd,info->pos[2]); @@ -12504,7 +12434,7 @@ void clif_parse_NpcCloseClicked(int fd,struct map_session_data *sd) { if (!sd->npc_id) //Avoid parsing anything when the script was done with. [Skotlex] return; - npc_scriptcont(sd, RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]), true); + npc_scriptcont(sd, RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]), true); } @@ -12513,7 +12443,7 @@ void clif_parse_NpcCloseClicked(int fd,struct map_session_data *sd) /// index: /// -1 = cancel void clif_parse_ItemIdentify(int fd,struct map_session_data *sd) { - short idx = RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]) - 2; + short idx = RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0]) - 2; if (sd->menuskill_id != MC_IDENTIFY) return; @@ -12538,7 +12468,7 @@ void clif_parse_ItemIdentify(int fd,struct map_session_data *sd) { /// Answer to arrow crafting item selection dialog (CZ_REQ_MAKINGARROW). /// 01ae .W void clif_parse_SelectArrow(int fd,struct map_session_data *sd) { - unsigned short nameid = RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + unsigned short nameid = RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0]); if (pc_istrading(sd)) { //Make it fail to avoid shop exploits where you sell something different than you see. clif_skill_fail(sd,sd->ud.skill_id,USESKILL_FAIL_LEVEL,0); @@ -12574,7 +12504,7 @@ void clif_parse_AutoSpell(int fd,struct map_session_data *sd) if (sd->menuskill_id != SA_AUTOSPELL) return; sd->state.workinprogress = WIP_DISABLE_NONE; - skill_autospell(sd,RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + skill_autospell(sd,RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0])); clif_menuskill_clear(sd); } @@ -12585,7 +12515,7 @@ void clif_parse_UseCard(int fd,struct map_session_data *sd) { if (sd->state.trading != 0) return; - clif_use_card(sd,RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])-2); + clif_use_card(sd,RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0])-2); } @@ -12593,7 +12523,7 @@ void clif_parse_UseCard(int fd,struct map_session_data *sd) /// 017c .W .W void clif_parse_InsertCard(int fd,struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if (sd->state.trading != 0) return; pc_insert_card(sd,RFIFOW(fd,info->pos[0])-2,RFIFOW(fd,info->pos[1])-2); @@ -12608,7 +12538,7 @@ void clif_parse_SolveCharName(int fd, struct map_session_data *sd) { int charid; - charid = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + charid = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); map_reqnickdb(sd, charid); } @@ -12622,7 +12552,7 @@ void clif_parse_SolveCharName(int fd, struct map_session_data *sd) void clif_parse_ResetChar(int fd, struct map_session_data *sd) { char cmd[15]; - if( RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]) ) + if( RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0]) ) safesnprintf(cmd,sizeof(cmd),"%cresetskill",atcommand_symbol); else safesnprintf(cmd,sizeof(cmd),"%cresetstat",atcommand_symbol); @@ -12636,7 +12566,7 @@ void clif_parse_ResetChar(int fd, struct map_session_data *sd) { /// 019c .W .?B void clif_parse_LocalBroadcast(int fd, struct map_session_data* sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; char command[CHAT_SIZE_MAX+16]; unsigned int len = RFIFOW(fd,info->pos[0])-4; char* msg = RFIFOCP(fd,info->pos[1]); @@ -12656,7 +12586,7 @@ void clif_parse_LocalBroadcast(int fd, struct map_session_data* sd) void clif_parse_MoveToKafra(int fd, struct map_session_data *sd) { int item_index, item_amount; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if (pc_istrading(sd)) return; @@ -12683,7 +12613,7 @@ void clif_parse_MoveToKafra(int fd, struct map_session_data *sd) void clif_parse_MoveFromKafra(int fd,struct map_session_data *sd) { int item_index, item_amount; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; item_index = RFIFOW(fd,info->pos[0])-1; item_amount = RFIFOL(fd,info->pos[1]); @@ -12700,7 +12630,7 @@ void clif_parse_MoveFromKafra(int fd,struct map_session_data *sd) /// Request to move an item from cart to storage (CZ_MOVE_ITEM_FROM_CART_TO_STORE). /// 0129 .W .L void clif_parse_MoveToKafraFromCart(int fd, struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int idx = RFIFOW(fd,info->pos[0]) - 2; int amount = RFIFOL(fd,info->pos[1]); @@ -12722,7 +12652,7 @@ void clif_parse_MoveToKafraFromCart(int fd, struct map_session_data *sd){ /// Request to move an item from storage to cart (CZ_MOVE_ITEM_FROM_STORE_TO_CART). /// 0128 .W .L void clif_parse_MoveFromKafraToCart(int fd, struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int idx = RFIFOW(fd,info->pos[0]) - 1; int amount = RFIFOL(fd,info->pos[1]); @@ -12781,7 +12711,7 @@ void clif_storagepassword(struct map_session_data* sd, short info) /// 3 = check password /// NOTE: This packet is only available on certain non-kRO clients. void clif_parse_StoragePassword(int fd, struct map_session_data *sd){ //@TODO -// struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; +// struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; // int type = RFIFOW(fd,info->pos[0]); // char* password = RFIFOP(fd,info->pos[1]); // char* new_password = RFIFOP(fd,info->pos[2]); @@ -12815,7 +12745,7 @@ void clif_storagepassword_result(struct map_session_data* sd, short result, shor /// Party creation request /// 00f9 .24B (CZ_MAKE_GROUP) void clif_parse_CreateParty(int fd, struct map_session_data *sd){ - char* name = RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + char* name = RFIFOCP(fd,packet_db[RFIFOW(fd,0)].pos[0]); name[NAME_LENGTH-1] = '\0'; if( map[sd->bl.m].flag.partylock ) {// Party locked. @@ -12832,7 +12762,7 @@ void clif_parse_CreateParty(int fd, struct map_session_data *sd){ /// 01e8 .24B .B .B (CZ_MAKE_GROUP2) void clif_parse_CreateParty2(int fd, struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; char* name = RFIFOCP(fd,info->pos[0]); int item1 = RFIFOB(fd,info->pos[1]); int item2 = RFIFOB(fd,info->pos[2]); @@ -12862,7 +12792,7 @@ void clif_parse_PartyInvite(int fd, struct map_session_data *sd) return; } - t_sd = map_id2sd(RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + t_sd = map_id2sd(RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0])); if(t_sd && t_sd->state.noask) {// @noask [LuzZza] clif_noask_sub(sd, t_sd, 1); @@ -12875,7 +12805,7 @@ void clif_parse_PartyInvite(int fd, struct map_session_data *sd) /// 02c4 .24B (CZ_PARTY_JOIN_REQ) void clif_parse_PartyInvite2(int fd, struct map_session_data *sd){ struct map_session_data *t_sd; - char *name = RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + char *name = RFIFOCP(fd,packet_db[RFIFOW(fd,0)].pos[0]); name[NAME_LENGTH-1] = '\0'; if(map[sd->bl.m].flag.partylock) {// Party locked. @@ -12902,14 +12832,14 @@ void clif_parse_PartyInvite2(int fd, struct map_session_data *sd){ /// 1 = accept void clif_parse_ReplyPartyInvite(int fd,struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; party_reply_invite(sd,RFIFOL(fd,info->pos[0]), RFIFOL(fd,info->pos[1])); } //(CZ_PARTY_JOIN_REQ_ACK) void clif_parse_ReplyPartyInvite2(int fd,struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; party_reply_invite(sd,RFIFOL(fd,info->pos[0]), RFIFOB(fd,info->pos[1])); } @@ -12931,7 +12861,7 @@ void clif_parse_LeaveParty(int fd, struct map_session_data *sd) /// 0103 .L .24B void clif_parse_RemovePartyMember(int fd, struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if(map[sd->bl.m].flag.partylock) {// Party locked. clif_displaymessage(fd, msg_txt(sd,227)); return; @@ -12949,7 +12879,7 @@ void clif_parse_PartyChangeOption(int fd, struct map_session_data *sd) struct party_data *p; int i,expflag; int cmd = RFIFOW(fd,0); - struct s_packet_db* info = &packet_db[sd->packet_ver][cmd]; + struct s_packet_db* info = &packet_db[cmd]; if( !sd->status.party_id ) return; @@ -12990,7 +12920,7 @@ void clif_parse_PartyMessage(int fd, struct map_session_data* sd){ /// Changes Party Leader (CZ_CHANGE_GROUP_MASTER). /// 07da .L void clif_parse_PartyChangeLeader(int fd, struct map_session_data* sd){ - party_changeleader(sd, map_id2sd(RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])),NULL); + party_changeleader(sd, map_id2sd(RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0])),NULL); } @@ -13000,7 +12930,7 @@ void clif_parse_PartyChangeLeader(int fd, struct map_session_data* sd){ /// Request to register a party booking advertisment (CZ_PARTY_BOOKING_REQ_REGISTER). /// 0802 .W .W { .W }*6 void clif_parse_PartyBookingRegisterReq(int fd, struct map_session_data* sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; short level = RFIFOW(fd,info->pos[0]); short mapid = RFIFOW(fd,info->pos[1]); int idxpbj = info->pos[2]; @@ -13034,7 +12964,7 @@ void clif_PartyBookingRegisterAck(struct map_session_data *sd, int flag) /// Request to search for party booking advertisments (CZ_PARTY_BOOKING_REQ_SEARCH). /// 0804 .W .W .W .L .W void clif_parse_PartyBookingSearchReq(int fd, struct map_session_data* sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; short level = RFIFOW(fd,info->pos[0]); short mapid = RFIFOW(fd,info->pos[1]); short job = RFIFOW(fd,info->pos[2]); @@ -13107,7 +13037,7 @@ void clif_parse_PartyBookingUpdateReq(int fd, struct map_session_data* sd) { short job[MAX_PARTY_BOOKING_JOBS]; int i; - int idxpbu = packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]; + int idxpbu = packet_db[RFIFOW(fd,0)].pos[0]; for(i=0; inpc_id ) {// using an NPC return; } - vending_vendinglistreq(sd,RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + vending_vendinglistreq(sd,RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0])); } /// Shop item(s) purchase request (CZ_PC_PURCHASE_ITEMLIST_FROMMC). /// 0134 .W .L { .W .W }* void clif_parse_PurchaseReq(int fd, struct map_session_data* sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int len = (int)RFIFOW(fd,info->pos[0]) - 8; int id = (int)RFIFOL(fd,info->pos[1]); const uint8* data = (uint8*)RFIFOP(fd,info->pos[2]); @@ -13205,7 +13135,7 @@ void clif_parse_PurchaseReq(int fd, struct map_session_data* sd){ /// Shop item(s) purchase request (CZ_PC_PURCHASE_ITEMLIST_FROMMC2). /// 0801 .W .L .L { .W .W }* void clif_parse_PurchaseReq2(int fd, struct map_session_data* sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int len = (int)RFIFOW(fd,info->pos[0]) - 12; int aid = (int)RFIFOL(fd,info->pos[1]); int uid = (int)RFIFOL(fd,info->pos[2]); @@ -13226,7 +13156,7 @@ void clif_parse_PurchaseReq2(int fd, struct map_session_data* sd){ /// 1 = open void clif_parse_OpenVending(int fd, struct map_session_data* sd){ int cmd = RFIFOW(fd,0); - struct s_packet_db* info = &packet_db[sd->packet_ver][cmd]; + struct s_packet_db* info = &packet_db[cmd]; short len = (short)RFIFOW(fd,info->pos[0]); const char* message = RFIFOCP(fd,info->pos[1]); const uint8* data = (uint8*)RFIFOP(fd,info->pos[3]); @@ -13266,8 +13196,8 @@ void clif_parse_OpenVending(int fd, struct map_session_data* sd){ /// Guild creation request (CZ_REQ_MAKE_GUILD). /// 0165 .L .24B void clif_parse_CreateGuild(int fd,struct map_session_data *sd){ - //int charid = RFIFOL(fd,packet_db[sd->packet_ver][cmd].pos[0]); - char* name = RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1]); + //int charid = RFIFOL(fd,packet_db[cmd].pos[0]); + char* name = RFIFOCP(fd,packet_db[RFIFOW(fd,0)].pos[1]); name[NAME_LENGTH-1] = '\0'; if(map[sd->bl.m].flag.guildlock) { //Guild locked. @@ -13304,7 +13234,7 @@ void clif_parse_GuildCheckMaster(int fd, struct map_session_data *sd) /// 6 = notice void clif_parse_GuildRequestInfo(int fd, struct map_session_data *sd) { - int type = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + int type = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); if( !sd->status.guild_id && !sd->bg_id ) return; @@ -13340,7 +13270,7 @@ void clif_parse_GuildRequestInfo(int fd, struct map_session_data *sd) void clif_parse_GuildChangePositionInfo(int fd, struct map_session_data *sd) { int i; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int len = RFIFOW(fd,info->pos[0]); int idxgpos = info->pos[1]; @@ -13358,7 +13288,7 @@ void clif_parse_GuildChangePositionInfo(int fd, struct map_session_data *sd) void clif_parse_GuildChangeMemberPosition(int fd, struct map_session_data *sd) { int i; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int len = RFIFOW(fd,info->pos[0]); int idxgpos = info->pos[1]; @@ -13397,7 +13327,7 @@ void clif_parse_GuildChangeMemberPosition(int fd, struct map_session_data *sd) void clif_parse_GuildRequestEmblem(int fd,struct map_session_data *sd) { struct guild* g; - int guild_id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + int guild_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); if( (g = guild_search(guild_id)) != NULL ) clif_guild_emblem(sd,g); @@ -13443,7 +13373,7 @@ static enum e_result_validate_emblem clif_validate_emblem(const uint8* emblem, u /// Request to update the guild emblem (CZ_REGISTER_GUILD_EMBLEM_IMG). /// 0153 .W .?B void clif_parse_GuildChangeEmblem(int fd,struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; unsigned long emblem_len = RFIFOW(fd,info->pos[0])-4; const uint8* emblem = RFIFOP(fd,info->pos[1]); int emb_val=0; @@ -13474,7 +13404,7 @@ void clif_parse_GuildChangeEmblem(int fd,struct map_session_data *sd){ /// Guild notice update request (CZ_GUILD_NOTICE). /// 016e .L .60B .120B void clif_parse_GuildChangeNotice(int fd, struct map_session_data* sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int guild_id = RFIFOL(fd,info->pos[0]); char* msg1 = RFIFOCP(fd,info->pos[1]); char* msg2 = RFIFOCP(fd,info->pos[2]); @@ -13518,7 +13448,7 @@ int clif_sub_guild_invite(int fd, struct map_session_data *sd, struct map_sessio /// Guild invite request (CZ_REQ_JOIN_GUILD). /// 0168 .L .L .L void clif_parse_GuildInvite(int fd,struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; struct map_session_data *t_sd = map_id2sd(RFIFOL(fd,info->pos[0])); // int inv_aid = RFIFOL(fd,info->pos[1]); // int inv_cid = RFIFOL(fd,info->pos[2]); @@ -13531,7 +13461,7 @@ void clif_parse_GuildInvite(int fd,struct map_session_data *sd){ /// 0916 .24B (CZ_REQ_JOIN_GUILD2) void clif_parse_GuildInvite2(int fd, struct map_session_data *sd) { - struct map_session_data *t_sd = map_nick2sd(RFIFOCP(fd, packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]),false); + struct map_session_data *t_sd = map_nick2sd(RFIFOCP(fd, packet_db[RFIFOW(fd,0)].pos[0]),false); if (clif_sub_guild_invite(fd, sd, t_sd)) return; @@ -13544,7 +13474,7 @@ clif_parse_GuildInvite2(int fd, struct map_session_data *sd) { /// 0 = refuse /// 1 = accept void clif_parse_GuildReplyInvite(int fd,struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; guild_reply_invite(sd,RFIFOL(fd,info->pos[0]), RFIFOL(fd,info->pos[1])); } @@ -13553,7 +13483,7 @@ void clif_parse_GuildReplyInvite(int fd,struct map_session_data *sd){ /// Request to leave guild (CZ_REQ_LEAVE_GUILD). /// 0159 .L .L .L .40B void clif_parse_GuildLeave(int fd,struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if(map[sd->bl.m].flag.guildlock) { //Guild locked. clif_displaymessage(fd, msg_txt(sd,228)); return; @@ -13573,7 +13503,7 @@ void clif_parse_GuildLeave(int fd,struct map_session_data *sd){ /// Request to expel a member of a guild (CZ_REQ_BAN_GUILD). /// 015b .L .L .L .40B void clif_parse_GuildExpulsion(int fd,struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if( map[sd->bl.m].flag.guildlock || sd->bg_id ) { // Guild locked. clif_displaymessage(fd, msg_txt(sd,228)); @@ -13616,9 +13546,9 @@ void clif_parse_GuildRequestAlliance(int fd, struct map_session_data *sd) return; } - t_sd = map_id2sd(RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); - //inv_aid = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1]); - //inv_cid = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[2]); + t_sd = map_id2sd(RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0])); + //inv_aid = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[1]); + //inv_cid = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[2]); // @noask [LuzZza] if(t_sd && t_sd->state.noask) { @@ -13636,7 +13566,7 @@ void clif_parse_GuildRequestAlliance(int fd, struct map_session_data *sd) /// 0 = refuse /// 1 = accept void clif_parse_GuildReplyAlliance(int fd, struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; guild_reply_reqalliance(sd, RFIFOL(fd,info->pos[0]), RFIFOL(fd,info->pos[1])); @@ -13649,7 +13579,7 @@ void clif_parse_GuildReplyAlliance(int fd, struct map_session_data *sd){ /// 0 = Ally /// 1 = Enemy void clif_parse_GuildDelAlliance(int fd, struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if(!sd->state.gmaster_flag) return; @@ -13677,7 +13607,7 @@ void clif_parse_GuildOpposition(int fd, struct map_session_data *sd) return; } - t_sd = map_id2sd(RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + t_sd = map_id2sd(RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0])); // @noask [LuzZza] if(t_sd && t_sd->state.noask) { @@ -13700,7 +13630,7 @@ void clif_parse_GuildBreak(int fd, struct map_session_data *sd) clif_displaymessage(fd, msg_txt(sd,228)); return; } - guild_break(sd,RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + guild_break(sd,RFIFOCP(fd,packet_db[RFIFOW(fd,0)].pos[0])); } @@ -13716,14 +13646,14 @@ void clif_parse_GuildBreak(int fd, struct map_session_data *sd) /// 3 = return to egg /// 4 = unequip accessory void clif_parse_PetMenu(int fd, struct map_session_data *sd){ - pet_menu(sd,RFIFOB(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + pet_menu(sd,RFIFOB(fd,packet_db[RFIFOW(fd,0)].pos[0])); } /// Attempt to tame a monster (CZ_TRYCAPTURE_MONSTER). /// 019f .L void clif_parse_CatchPet(int fd, struct map_session_data *sd){ - pet_catch_process2(sd,RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + pet_catch_process2(sd,RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0])); } @@ -13733,7 +13663,7 @@ void clif_parse_SelectEgg(int fd, struct map_session_data *sd){ if (sd->menuskill_id != SA_TAMINGMONSTER || sd->menuskill_val != -1) return; - pet_select_egg(sd,RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])-2); + pet_select_egg(sd,RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0])-2); clif_menuskill_clear(sd); } @@ -13765,7 +13695,7 @@ void clif_parse_SelectEgg(int fd, struct map_session_data *sd){ void clif_parse_SendEmotion(int fd, struct map_session_data *sd) { if(sd->pd) - clif_pet_emotion(sd->pd,RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + clif_pet_emotion(sd->pd,RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0])); } @@ -13773,7 +13703,7 @@ void clif_parse_SendEmotion(int fd, struct map_session_data *sd) /// 01a5 .24B void clif_parse_ChangePetName(int fd, struct map_session_data *sd) { - pet_change_name(sd,RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + pet_change_name(sd,RFIFOCP(fd,packet_db[RFIFOW(fd,0)].pos[0])); } @@ -13786,7 +13716,7 @@ void clif_parse_GMKick(int fd, struct map_session_data *sd) struct block_list *target; int tid; - tid = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + tid = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); target = map_id2bl(tid); if (!target) { clif_GM_kickack(sd, 0); @@ -13857,7 +13787,7 @@ void clif_parse_GMShift(int fd, struct map_session_data *sd) char *player_name; char command[NAME_LENGTH+8]; - player_name = RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + player_name = RFIFOCP(fd,packet_db[RFIFOW(fd,0)].pos[0]); player_name[NAME_LENGTH-1] = '\0'; safesnprintf(command,sizeof(command),"%cjumpto %s", atcommand_symbol, player_name); @@ -13873,7 +13803,7 @@ void clif_parse_GMRemove2(int fd, struct map_session_data* sd) uint32 account_id; struct map_session_data* pl_sd; - account_id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + account_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); if( (pl_sd = map_id2sd(account_id)) != NULL ) { char command[NAME_LENGTH+8]; safesnprintf(command,sizeof(command),"%cjumpto %s", atcommand_symbol, pl_sd->status.name); @@ -13894,7 +13824,7 @@ void clif_parse_GMRecall(int fd, struct map_session_data *sd) char *player_name; char command [NAME_LENGTH+8]; - player_name = RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + player_name = RFIFOCP(fd,packet_db[RFIFOW(fd,0)].pos[0]); player_name[NAME_LENGTH-1] = '\0'; safesnprintf(command,sizeof(command),"%crecall %s", atcommand_symbol, player_name); @@ -13910,7 +13840,7 @@ void clif_parse_GMRecall2(int fd, struct map_session_data* sd) uint32 account_id; struct map_session_data* pl_sd; - account_id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + account_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); if( (pl_sd = map_id2sd(account_id)) != NULL ) { char command[NAME_LENGTH+8]; safesnprintf(command,sizeof(command),"%crecall %s", atcommand_symbol, pl_sd->status.name); @@ -13934,7 +13864,7 @@ void clif_parse_GMRecall2(int fd, struct map_session_data* sd) /// 09ce .100B [Ind/Yommy] void clif_parse_GM_Item_Monster(int fd, struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int mob_id = 0; struct item_data *id = NULL; struct mob_db *mob = NULL; @@ -13998,7 +13928,7 @@ void clif_parse_GM_Item_Monster(int fd, struct map_session_data *sd) /// TODO: Any OPTION_* ? void clif_parse_GMHide(int fd, struct map_session_data *sd) { char cmd[6]; - //int eff_st = RFIFOL(packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + //int eff_st = RFIFOL(packet_db[RFIFOW(fd,0)].pos[0]); safesnprintf(cmd,sizeof(cmd),"%chide",atcommand_symbol); is_atcommand(fd, sd, cmd, 1); @@ -14016,7 +13946,7 @@ void clif_parse_GMReqNoChat(int fd,struct map_session_data *sd) int id, type, value; struct map_session_data *dstsd; char command[NAME_LENGTH+15]; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; id = RFIFOL(fd,info->pos[0]); @@ -14046,7 +13976,7 @@ void clif_parse_GMReqNoChat(int fd,struct map_session_data *sd) void clif_parse_GMRc(int fd, struct map_session_data* sd) { char command[NAME_LENGTH+15]; - char *name = RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + char *name = RFIFOCP(fd,packet_db[RFIFOW(fd,0)].pos[0]); name[NAME_LENGTH-1] = '\0'; safesnprintf(command,sizeof(command),"%cmute %d %s", atcommand_symbol, 60, name); @@ -14071,7 +14001,7 @@ void clif_account_name(int fd, uint32 account_id, const char* accname) //! TODO: Figure out how does this actually work void clif_parse_GMReqAccountName(int fd, struct map_session_data *sd) { - uint32 account_id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + uint32 account_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); /* char query[30]; safesnprintf(query,sizeof(query),"%d", account_id); @@ -14091,7 +14021,7 @@ void clif_parse_GMReqAccountName(int fd, struct map_session_data *sd) void clif_parse_GMChangeMapType(int fd, struct map_session_data *sd) { int x,y,type; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if(! pc_has_permission(sd, PC_PERM_USE_CHANGEMAPTYPE) ) return; @@ -14117,7 +14047,7 @@ void clif_parse_PMIgnore(int fd, struct map_session_data* sd) char* nick; uint8 type; int i; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; nick = RFIFOCP(fd,info->pos[0]); nick[NAME_LENGTH-1] = '\0'; // to be sure that the player name has at most 23 characters @@ -14168,7 +14098,7 @@ void clif_parse_PMIgnore(int fd, struct map_session_data* sd) /// 1 = (/inall) allow all speech void clif_parse_PMIgnoreAll(int fd, struct map_session_data *sd) { - int type = RFIFOB(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]), flag; + int type = RFIFOB(fd,packet_db[RFIFOW(fd,0)].pos[0]), flag; if( type == 0 ) {// Deny all if( sd->state.ignoreAll ) { @@ -14383,7 +14313,7 @@ void clif_parse_FriendsListAdd(int fd, struct map_session_data *sd) struct map_session_data *f_sd; int i; - f_sd = map_nick2sd(RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]),false); + f_sd = map_nick2sd(RFIFOCP(fd,packet_db[RFIFOW(fd,0)].pos[0]),false); // Friend doesn't exist (no player with this name) if (f_sd == NULL) { @@ -14435,14 +14365,15 @@ void clif_parse_FriendsListReply(int fd, struct map_session_data *sd) struct map_session_data *f_sd; uint32 account_id; char reply; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; account_id = RFIFOL(fd,info->pos[0]); //char_id = RFIFOL(fd,info->pos[1]); - if(sd->packet_ver < 6) - reply = RFIFOB(fd,info->pos[2]); - else - reply = RFIFOL(fd,info->pos[2]); +#if PACKETVER < 6 + reply = RFIFOB(fd,info->pos[2]); +#else + reply = RFIFOL(fd,info->pos[2]); +#endif if( sd->bl.id == account_id ) {// adding oneself as friend return; @@ -14499,7 +14430,7 @@ void clif_parse_FriendsListRemove(int fd, struct map_session_data *sd) struct map_session_data *f_sd = NULL; uint32 account_id, char_id; int i, j; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; account_id = RFIFOL(fd,info->pos[0]); char_id = RFIFOL(fd,info->pos[1]); @@ -14579,8 +14510,8 @@ void clif_PVPInfo(struct map_session_data* sd) void clif_parse_PVPInfo(int fd,struct map_session_data *sd) { // TODO: Is there a way to use this on an another player (char/acc id)? - //int cid = RFIFOB(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); - //int aid = RFIFOB(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1]); + //int cid = RFIFOB(fd,packet_db[RFIFOW(fd,0)].pos[0]); + //int aid = RFIFOB(fd,packet_db[RFIFOW(fd,0)].pos[1]); clif_PVPInfo(sd); } @@ -14593,7 +14524,7 @@ void clif_parse_PVPInfo(int fd,struct map_session_data *sd) void clif_parse_FeelSaveOk(int fd,struct map_session_data *sd) { int i; - //int wich = RFIFOB(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + //int wich = RFIFOB(fd,packet_db[RFIFOW(fd,0)].pos[0]); if (sd->menuskill_id != SG_FEEL) return; i = sd->menuskill_val-1; @@ -14631,14 +14562,14 @@ void clif_feel_req(int fd, struct map_session_data *sd, uint16 skill_lv) /// Request to change homunculus' name (CZ_RENAME_MER). /// 0231 .24B void clif_parse_ChangeHomunculusName(int fd, struct map_session_data *sd){ - hom_change_name(sd,RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + hom_change_name(sd,RFIFOCP(fd,packet_db[RFIFOW(fd,0)].pos[0])); } /// Request to warp/move homunculus/mercenary to it's owner (CZ_REQUEST_MOVETOOWNER). /// 0234 .L void clif_parse_HomMoveToMaster(int fd, struct map_session_data *sd){ - int id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); // Mercenary or Homunculus + int id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); // Mercenary or Homunculus struct block_list *bl = NULL; struct unit_data *ud = NULL; @@ -14658,7 +14589,7 @@ void clif_parse_HomMoveToMaster(int fd, struct map_session_data *sd){ /// Request to move homunculus/mercenary (CZ_REQUEST_MOVENPC). /// 0232 .L .3B void clif_parse_HomMoveTo(int fd, struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int id = RFIFOL(fd,info->pos[0]); // Mercenary or Homunculus struct block_list *bl = NULL; short x, y; @@ -14683,7 +14614,7 @@ void clif_parse_HomMoveTo(int fd, struct map_session_data *sd){ void clif_parse_HomAttack(int fd,struct map_session_data *sd) { struct block_list *bl = NULL; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int id = RFIFOL(fd,info->pos[0]); int target_id = RFIFOL(fd,info->pos[1]); int action_type = RFIFOB(fd,info->pos[2]); @@ -14710,11 +14641,11 @@ void clif_parse_HomAttack(int fd,struct map_session_data *sd) void clif_parse_HomMenu(int fd, struct map_session_data *sd) { //[orn] int cmd = RFIFOW(fd,0); - //int type = RFIFOW(fd,packet_db[sd->packet_ver][cmd].pos[0]); + //int type = RFIFOW(fd,packet_db[cmd].pos[0]); if(!hom_is_active(sd->hd)) return; - hom_menu(sd,RFIFOB(fd,packet_db[sd->packet_ver][cmd].pos[1])); + hom_menu(sd,RFIFOB(fd,packet_db[cmd].pos[1])); } @@ -14802,7 +14733,7 @@ void clif_parse_Check(int fd, struct map_session_data *sd) if(!pc_has_permission(sd, PC_PERM_USE_CHECK)) return; - safestrncpy(charname, RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]), sizeof(charname)); + safestrncpy(charname, RFIFOCP(fd,packet_db[RFIFOW(fd,0)].pos[0]), sizeof(charname)); if( ( pl_sd = map_nick2sd(charname,false) ) == NULL || pc_get_group_level(sd) < pc_get_group_level(pl_sd) ) { @@ -15333,7 +15264,7 @@ void clif_Mail_read(struct map_session_data *sd, int mail_id) /// 09ea .B .Q (CZ_REQ_READ_MAIL) void clif_parse_Mail_read(int fd, struct map_session_data *sd){ #if PACKETVER < 20150513 - int mail_id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + int mail_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); #else //uint8 openType = RFIFOB(fd, 2); int mail_id = (int)RFIFOQ(fd, 3); @@ -15423,7 +15354,7 @@ void clif_parse_Mail_getattach( int fd, struct map_session_data *sd ){ int i; struct mail_message* msg; #if PACKETVER < 20150513 - int mail_id = RFIFOL(fd, packet_db[sd->packet_ver][RFIFOW(fd, 0)].pos[0]); + int mail_id = RFIFOL(fd, packet_db[RFIFOW(fd, 0)].pos[0]); int attachment = MAIL_ATT_ALL; #else uint16 packet_id = RFIFOW(fd, 0); @@ -15520,7 +15451,7 @@ void clif_parse_Mail_getattach( int fd, struct map_session_data *sd ){ /// 09f5 .B .Q (CZ_REQ_DELETE_MAIL) void clif_parse_Mail_delete(int fd, struct map_session_data *sd){ #if PACKETVER < 20150513 - int mail_id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + int mail_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); #else //int openType = RFIFOB(fd, 2); int mail_id = (int)RFIFOQ(fd, 3); @@ -15563,8 +15494,8 @@ void clif_parse_Mail_delete(int fd, struct map_session_data *sd){ /// Request to return a mail (CZ_REQ_MAIL_RETURN). /// 0273 .L .24B void clif_parse_Mail_return(int fd, struct map_session_data *sd){ - int mail_id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); - //char *rec_name = RFIFOP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1]); + int mail_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); + //char *rec_name = RFIFOP(fd,packet_db[RFIFOW(fd,0)].pos[1]); int i; if( mail_id <= 0 ) @@ -15584,7 +15515,7 @@ void clif_parse_Mail_return(int fd, struct map_session_data *sd){ /// 0247 .W .L (CZ_MAIL_ADD_ITEM) /// 0a04 .W .W (CZ_REQ_ADD_ITEM_TO_MAIL) void clif_parse_Mail_setattach(int fd, struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int idx = RFIFOW(fd,info->pos[0]); #if PACKETVER < 20150513 int amount = RFIFOL(fd,info->pos[1]); @@ -15627,7 +15558,7 @@ void clif_mail_removeitem( struct map_session_data* sd, bool success, int index, void clif_parse_Mail_winopen(int fd, struct map_session_data *sd) { #if PACKETVER < 20150513 - int type = RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + int type = RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0]); if (type == 0 || type == 1) mail_removeitem(sd, 0, sd->mail.item[0].index, sd->mail.item[0].amount); @@ -15647,7 +15578,7 @@ void clif_parse_Mail_winopen(int fd, struct map_session_data *sd) /// 0a6e .W .24B .24B .Q .W <body length>.W <char id>.L <title>.?B <body>.?B (CZ_REQ_WRITE_MAIL2) void clif_parse_Mail_send(int fd, struct map_session_data *sd){ #if PACKETVER < 20150513 - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if( !chrif_isconnected() ) return; @@ -15806,7 +15737,7 @@ static void clif_Auction_setitem(int fd, int index, bool fail) /// 1 = cancel (cancel pressed on register tab) /// ? = junk, uninitialized value (ex. when switching between list filters) void clif_parse_Auction_cancelreg(int fd, struct map_session_data *sd){ - //int type = RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + //int type = RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0]); if( sd->auction.amount > 0 ) clif_additem(sd, sd->auction.index, sd->auction.amount, 0); @@ -15817,7 +15748,7 @@ void clif_parse_Auction_cancelreg(int fd, struct map_session_data *sd){ /// Request to add an item to the action (CZ_AUCTION_ADD_ITEM). /// 024c <index>.W <count>.L void clif_parse_Auction_setitem(int fd, struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int idx = RFIFOW(fd,info->pos[0]) - 2; int amount = RFIFOL(fd,info->pos[1]); // Always 1 struct item_data *item; @@ -15901,7 +15832,7 @@ void clif_parse_Auction_register(int fd, struct map_session_data *sd) { struct auction_data auction; struct item_data *item; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if( !battle_config.feature_auction ) return; @@ -15984,7 +15915,7 @@ void clif_parse_Auction_register(int fd, struct map_session_data *sd) /// Cancels an auction (CZ_AUCTION_ADD_CANCEL). /// 024e <auction id>.L void clif_parse_Auction_cancel(int fd, struct map_session_data *sd){ - unsigned int auction_id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + unsigned int auction_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); intif_Auction_cancel(sd->status.char_id, auction_id); } @@ -15992,7 +15923,7 @@ void clif_parse_Auction_cancel(int fd, struct map_session_data *sd){ /// Closes an auction (CZ_AUCTION_REQ_MY_SELL_STOP). /// 025d <auction id>.L void clif_parse_Auction_close(int fd, struct map_session_data *sd){ - unsigned int auction_id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + unsigned int auction_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); intif_Auction_close(sd->status.char_id, auction_id); } @@ -16000,7 +15931,7 @@ void clif_parse_Auction_close(int fd, struct map_session_data *sd){ /// Places a bid on an auction (CZ_AUCTION_BUY). /// 024f <auction id>.L <money>.L void clif_parse_Auction_bid(int fd, struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; unsigned int auction_id = RFIFOL(fd,info->pos[0]); int bid = RFIFOL(fd,info->pos[1]); @@ -16033,7 +15964,7 @@ void clif_parse_Auction_bid(int fd, struct map_session_data *sd){ /// 5 = auction id search void clif_parse_Auction_search(int fd, struct map_session_data* sd){ char search_text[NAME_LENGTH]; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; short type = RFIFOW(fd,info->pos[0]); int price = RFIFOL(fd,info->pos[1]); // FIXME: bug #5071 int page = RFIFOW(fd,info->pos[3]); @@ -16055,7 +15986,7 @@ void clif_parse_Auction_search(int fd, struct map_session_data* sd){ /// 1 = buy (own bids) void clif_parse_Auction_buysell(int fd, struct map_session_data* sd) { - short type = RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]) + 6; + short type = RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0]) + 6; if( !battle_config.feature_auction ) return; @@ -16092,7 +16023,7 @@ void clif_parse_cashshop_close( int fd, struct map_session_data* sd ){ //0846 <tabid>.W (CZ_REQ_SE_CASH_TAB_CODE)) //08c0 <len>.W <openIdentity>.L <itemcount>.W (ZC_ACK_SE_CASH_ITEM_LIST2) void clif_parse_CashShopReqTab(int fd, struct map_session_data *sd) { - short tab = RFIFOW(fd, packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + short tab = RFIFOW(fd, packet_db[RFIFOW(fd,0)].pos[0]); int j; if( tab < 0 || tab >= CASHSHOP_TAB_MAX ) @@ -16242,7 +16173,7 @@ void clif_parse_cashshop_buy(int fd, struct map_session_data *sd){ nullpo_retv(sd); - info = &packet_db[sd->packet_ver][cmd]; + info = &packet_db[cmd]; if( sd->state.trading || !sd->npc_shopid ) { clif_cashshop_ack(sd,1); @@ -16317,7 +16248,7 @@ void clif_Adopt_request(struct map_session_data *sd, struct map_session_data *sr /// 01f9 <account id>.L void clif_parse_Adopt_request(int fd, struct map_session_data *sd) { - TBL_PC *tsd = map_id2sd(RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + TBL_PC *tsd = map_id2sd(RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0])); TBL_PC *p_sd = map_charid2sd(sd->status.partner_id); if( pc_try_adopt(sd, p_sd, tsd) == ADOPT_ALLOWED ) @@ -16334,7 +16265,7 @@ void clif_parse_Adopt_request(int fd, struct map_session_data *sd) /// 0 = rejected /// 1 = accepted void clif_parse_Adopt_reply(int fd, struct map_session_data *sd){ - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int p1_id = RFIFOL(fd,info->pos[0]); int p2_id = RFIFOL(fd,info->pos[1]); int result = RFIFOL(fd,info->pos[2]); @@ -16403,7 +16334,7 @@ void clif_bossmapinfo(int fd, struct mob_data *md, short flag) /// 02d6 <account id>.L void clif_parse_ViewPlayerEquip(int fd, struct map_session_data* sd) { - int aid = RFIFOL(fd, packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + int aid = RFIFOL(fd, packet_db[RFIFOW(fd,0)].pos[0]); struct map_session_data* tsd = map_id2sd(aid); if (!tsd) @@ -16425,8 +16356,8 @@ void clif_parse_ViewPlayerEquip(int fd, struct map_session_data* sd) /// 1 = enabled void clif_parse_EquipTick(int fd, struct map_session_data* sd) { - //int type = RFIFOL(fd,packet_db[sd->packet_ver][cmd].pos[0]); - bool flag = (bool)RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1]); + //int type = RFIFOL(fd,packet_db[cmd].pos[0]); + bool flag = (bool)RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[1]); sd->status.show_equip = flag; clif_equiptickack(sd, flag); } @@ -16636,7 +16567,7 @@ void clif_quest_update_objective(struct map_session_data *sd, struct quest *qd, /// 02b6 <quest id>.L <active>.B void clif_parse_questStateAck(int fd, struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; quest_update_status(sd, RFIFOL(fd,info->pos[0]), RFIFOB(fd,info->pos[1])?Q_ACTIVE:Q_INACTIVE); } @@ -16842,7 +16773,7 @@ void clif_mercenary_skillblock(struct map_session_data *sd) /// 2 = delete void clif_parse_mercenary_action(int fd, struct map_session_data* sd) { - int option = RFIFOB(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + int option = RFIFOB(fd,packet_db[RFIFOW(fd,0)].pos[0]); if( sd->md == NULL ) return; @@ -17273,7 +17204,7 @@ void clif_showdigit(struct map_session_data* sd, unsigned char type, int value) /// as the only skill unit, that is sent with 0x1c9 is /// Graffiti. void clif_parse_LessEffect(int fd, struct map_session_data* sd){ - int isLess = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + int isLess = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); sd->state.lesseffect = ( isLess != 0 ); } @@ -17281,7 +17212,7 @@ void clif_parse_LessEffect(int fd, struct map_session_data* sd){ /// S 0945 <length>.w <option>.l <val>.l {<index>.w <amount>.w).4b* (CZ_* RagexeRE 2012-04-10a) /// S 0281 <length>.w <option>.l <val>.l {<index>.w <amount>.w).4b* (CZ_* Ragexe 2013-08-07) void clif_parse_ItemListWindowSelected(int fd, struct map_session_data* sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int n = (RFIFOW(fd,info->pos[0])-12) / 4; int type = RFIFOL(fd,info->pos[1]); int flag = RFIFOL(fd,info->pos[2]); // Button clicked: 0 = Cancel, 1 = OK @@ -17398,7 +17329,7 @@ static void clif_parse_ReqOpenBuyingStore(int fd, struct map_session_data* sd) unsigned char result; int zenylimit; unsigned int count, packet_len; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; packet_len = RFIFOW(fd,info->pos[0]); @@ -17532,7 +17463,7 @@ static void clif_parse_ReqClickBuyingStore(int fd, struct map_session_data* sd) { uint32 account_id; - account_id = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + account_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); buyingstore_open(sd, account_id); } @@ -17572,7 +17503,7 @@ static void clif_parse_ReqTradeBuyingStore(int fd, struct map_session_data* sd) uint8* itemlist; uint32 account_id; unsigned int count, packet_len, buyer_id; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; packet_len = RFIFOW(fd,info->pos[0]); @@ -17704,7 +17635,7 @@ static void clif_parse_SearchStoreInfo(int fd, struct map_session_data* sd) const uint8* cardlist; unsigned char type; unsigned int min_price, max_price, packet_len, count, item_count, card_count; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; packet_len = RFIFOW(fd,info->pos[0]); @@ -17857,7 +17788,7 @@ static void clif_parse_SearchStoreInfoListItemClick(int fd, struct map_session_d { unsigned short nameid; uint32 account_id, store_id; - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; account_id = RFIFOL(fd,info->pos[0]); store_id = RFIFOL(fd,info->pos[1]); @@ -17890,7 +17821,7 @@ void clif_parse_debug(int fd,struct map_session_data *sd) cmd = RFIFOW(fd,0); if( sd ) { - packet_len = packet_db[sd->packet_ver][cmd].len; + packet_len = packet_db[cmd].len; if( packet_len == 0 ) {// unknown @@ -18135,7 +18066,7 @@ int clif_skill_itemlistwindow( struct map_session_data *sd, uint16 skill_id, uin * RFIFOL(fd,2) - type (currently not used) *------------------------------------------*/ void clif_parse_SkillSelectMenu(int fd, struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; //int type = RFIFOL(fd,info->pos[0]); //WHY_LOWERVER_COMPATIBILITY = 0x0, WHY_SC_AUTOSHADOWSPELL = 0x1, if( sd->menuskill_id != SC_AUTOSHADOWSPELL ) return; @@ -18176,7 +18107,7 @@ void clif_spiritcharm(struct map_session_data *sd) { /// 1 = move item to normal tab void clif_parse_MoveItem(int fd, struct map_session_data *sd) { #if PACKETVER >= 20111122 - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int index = RFIFOW(fd,info->pos[0]) - 2; int type = RFIFOB(fd, info->pos[1]); @@ -18435,7 +18366,7 @@ void clif_ranklist(struct map_session_data *sd, int16 rankingType) { * 3: /pk * */ void clif_parse_ranklist(int fd,struct map_session_data *sd) { - struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int16 rankingtype = RFIFOW(fd,info->pos[0]); //type clif_ranklist(sd,rankingtype); @@ -18603,8 +18534,8 @@ void clif_display_pinfo(struct map_session_data *sd, int cmdtype) { details_penalty[3] = 0; /* End - Penalty set*/ - cmd = packet_db_ack[sd->packet_ver][cmdtype]; - info = &packet_db[sd->packet_ver][cmd]; + cmd = packet_db_ack[cmdtype]; + info = &packet_db[cmd]; len = info->len; //this is the base len without details if(!len) return; //version as packet disable @@ -18674,10 +18605,10 @@ void clif_crimson_marker(struct map_session_data *sd, struct block_list *bl, boo nullpo_retv(sd); - cmd = packet_db_ack[sd->packet_ver][ZC_C_MARKERINFO]; + cmd = packet_db_ack[ZC_C_MARKERINFO]; if (!cmd) cmd = 0x09C1; //default - info = &packet_db[sd->packet_ver][cmd]; + info = &packet_db[cmd]; if (!(len = info->len)) return; @@ -18697,8 +18628,8 @@ void clif_notify_bindOnEquip(struct map_session_data *sd, int n) { nullpo_retv(sd); - cmd = packet_db_ack[sd->packet_ver][ZC_NOTIFY_BIND_ON_EQUIP]; - info = &packet_db[sd->packet_ver][cmd]; + cmd = packet_db_ack[ZC_NOTIFY_BIND_ON_EQUIP]; + info = &packet_db[cmd]; if (!cmd || !info->len) return; @@ -18887,26 +18818,6 @@ void clif_clan_leave( struct map_session_data* sd ){ #endif } -/** - * Decrypt packet identifier for player - * @param fd - * @param sd - * @param packet_ver - * Orig author [Ind/Hercules] - **/ -static unsigned short clif_parse_cmd(int fd, struct map_session_data *sd) { -#ifndef PACKET_OBFUSCATION - return RFIFOW(fd, 0); -#else - unsigned short cmd = RFIFOW(fd,0); // Check if it is a player that tries to connect to the map server. - if (sd) - cmd = (cmd ^ ((sd->cryptKey >> 16) & 0x7FFF)); // Decrypt the current packet ID with the last key stored in the session. - else - cmd = (cmd ^ ((((clif_cryptKey[0] * clif_cryptKey[1]) + clif_cryptKey[2]) >> 16) & 0x7FFF)); // A player tries to connect - use the initial keys for the decryption of the packet ID. - return cmd; // Return the decrypted packet ID. -#endif -} - #ifdef DUMP_UNKNOWN_PACKET void DumpUnknown(int fd,TBL_PC *sd,int cmd,int packet_len) { @@ -19039,7 +18950,7 @@ static void clif_roulette_recvitem_ack(struct map_session_data *sd, enum RECV_RO nullpo_retv(sd); - if (packet_db[sd->packet_ver][cmd].len == 0) + if (packet_db[cmd].len == 0) return; WBUFW(buf,0) = cmd; @@ -19220,9 +19131,9 @@ void clif_merge_item_ack(struct map_session_data *sd, unsigned short index, unsi if (!clif_session_isValid(sd)) return; - if (!(cmd = packet_db_ack[sd->packet_ver][ZC_ACK_MERGE_ITEM])) + if (!(cmd = packet_db_ack[ZC_ACK_MERGE_ITEM])) return; - if (!(info = &packet_db[sd->packet_ver][cmd]) || info->len == 0) + if (!(info = &packet_db[cmd]) || info->len == 0) return; WBUFW(buf, 0) = cmd; @@ -19287,9 +19198,9 @@ void clif_merge_item_open(struct map_session_data *sd) { nullpo_retv(sd); if (!clif_session_isValid(sd)) return; - if (!(cmd = packet_db_ack[sd->packet_ver][ZC_MERGE_ITEM_OPEN])) + if (!(cmd = packet_db_ack[ZC_MERGE_ITEM_OPEN])) return; - if (!(info = &packet_db[sd->packet_ver][cmd]) || info->len == 0) + if (!(info = &packet_db[cmd]) || info->len == 0) return; // Get entries @@ -19329,7 +19240,7 @@ void clif_parse_merge_item_req(int fd, struct map_session_data* sd) { nullpo_retv(sd); if (!clif_session_isValid(sd)) return; - if (!(info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]) || info->len == 0) + if (!(info = &packet_db[RFIFOW(fd,0)]) || info->len == 0) return; n = (RFIFOW(fd, info->pos[0]) - 4) / 2; @@ -19396,10 +19307,10 @@ void clif_broadcast_obtain_special_item(const char *char_name, unsigned short na unsigned short cmd = 0; struct s_packet_db *info = NULL; - if (!(cmd = packet_db_ack[clif_config.packet_db_ver][ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN])) + if (!(cmd = packet_db_ack[ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN])) return; - if (!(info = &packet_db[clif_config.packet_db_ver][cmd]) || info->len == 0) + if (!(info = &packet_db[cmd]) || info->len == 0) return; WBUFW(buf, 0) = 0x7fd; @@ -19454,7 +19365,7 @@ void clif_dressing_room(struct map_session_data *sd, int flag) { /// 0A35 <result>.W void clif_parse_Oneclick_Itemidentify(int fd, struct map_session_data *sd) { #if PACKETVER >= 20150513 - short idx = RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]) - 2, magnifier_idx; + short idx = RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0]) - 2, magnifier_idx; // Ignore the request // - Invalid item index @@ -19834,9 +19745,12 @@ void clif_parse_sale_remove( int fd, struct map_session_data* sd ){ *------------------------------------------*/ static int clif_parse(int fd) { - int cmd, packet_ver, packet_len, err; + int cmd, packet_len; TBL_PC* sd; int pnum; +#ifdef PACKET_OBFUSCATION + int cmd2; +#endif //TODO apply delays or disconnect based on packet throughput [FlavioJS] // Note: "click masters" can do 80+ clicks in 10 seconds @@ -19873,52 +19787,54 @@ static int clif_parse(int fd) if (RFIFOREST(fd) < 2) return 0; - cmd = clif_parse_cmd(fd, sd); + cmd = RFIFOW(fd, 0); - // identify client's packet version - if (sd) { - packet_ver = sd->packet_ver; - } else { - // check authentification packet to know packet version - packet_ver = clif_guess_PacketVer(fd, 0, &err); - if( err ) {// failed to identify packet version - ShowInfo("clif_parse: Disconnecting session #%d with unknown packet version%s (p:0x%04x,l:%d).\n", fd, ( - err == 1 ? "" : - err == 2 ? ", possibly for having an invalid account_id" : - err == 3 ? ", possibly for having an invalid char_id." : - /* Uncomment when checks are added in clif_guess_PacketVer. [FlavioJS] - err == 4 ? ", possibly for having an invalid login_id1." : - err == 5 ? ", possibly for having an invalid client_tick." : - */ - err == 6 ? ", possibly for having an invalid sex." : - ". ERROR invalid error code"), cmd, RFIFOREST(fd)); - WFIFOHEAD(fd,packet_len(0x6a)); - WFIFOW(fd,0) = 0x6a; - WFIFOB(fd,2) = 3; // Rejected from Server - WFIFOSET(fd,packet_len(0x6a)); +#ifdef PACKET_OBFUSCATION + // Check if it is a player that tries to connect to the map server. + if( sd ){ + // Decrypt the current packet ID with the last key stored in the session. + cmd = (cmd ^ ((sd->cryptKey >> 16) & 0x7FFF)); + }else{ + // Store the original value for checking + cmd2 = cmd; -#ifdef DUMP_INVALID_PACKET - ShowDump(RFIFOP(fd,0), RFIFOREST(fd)); + // A player tries to connect - use the initial keys for the decryption of the packet ID. + cmd = (cmd ^ ((((clif_cryptKey[0] * clif_cryptKey[1]) + clif_cryptKey[2]) >> 16) & 0x7FFF)); + } #endif - RFIFOSKIP(fd, RFIFOREST(fd)); - set_eof(fd); - return 0; - } - } - // filter out invalid / unsupported packets - if (cmd > MAX_PACKET_DB || cmd < MIN_PACKET_DB || packet_db[packet_ver][cmd].len == 0) { + if (cmd > MAX_PACKET_DB || cmd < MIN_PACKET_DB || packet_db[cmd].len == 0) { ShowWarning("clif_parse: Received unsupported packet (packet 0x%04x, %d bytes received), disconnecting session #%d.\n", cmd, RFIFOREST(fd), fd); + #ifdef DUMP_INVALID_PACKET ShowDump(RFIFOP(fd,0), RFIFOREST(fd)); #endif + +#ifdef PACKET_OBFUSCATION_WARN + // If it is a connection attempt, check if the packet would have been valid without decrypting it + if( !sd ){ +#ifdef PACKET_OBFUSCATION + if( cmd2 >= MIN_PACKET_DB && cmd2 < MAX_PACKET_DB && packet_db[cmd2].len != 0 && packet_db[cmd2].func == clif_parse_WantToConnection ){ + ShowWarning( "clif_parse: It looks like you have enabled PACKET_OBFUSCATION on server side, but disabled it on client side.\n" ); + } +#else + // Try to use the initial keys for the decryption of the packet ID. + cmd = (cmd ^ ((((clif_cryptKey[0] * clif_cryptKey[1]) + clif_cryptKey[2]) >> 16) & 0x7FFF)); + + if( cmd >= MIN_PACKET_DB && cmd < MAX_PACKET_DB && packet_db[cmd].len != 0 && packet_db[cmd].func == clif_parse_WantToConnection ){ + ShowWarning( "clif_parse: It looks like you have disabled PACKET_OBFUSCATION on server side, but enabled it on client side.\n" ); + } +#endif + } +#endif + set_eof(fd); return 0; } // determine real packet length - packet_len = packet_db[packet_ver][cmd].len; + packet_len = packet_db[cmd].len; if (packet_len == -1) { // variable-length packet if (RFIFOREST(fd) < 4) return 0; @@ -19942,16 +19858,16 @@ static int clif_parse(int fd) sd->cryptKey = ((sd->cryptKey * clif_cryptKey[1]) + clif_cryptKey[2]) & 0xFFFFFFFF; // Update key for the next packet #endif - if( packet_db[packet_ver][cmd].func == clif_parse_debug ) - packet_db[packet_ver][cmd].func(fd, sd); - else if( packet_db[packet_ver][cmd].func != NULL ) { - if( !sd && packet_db[packet_ver][cmd].func != clif_parse_WantToConnection ) + if( packet_db[cmd].func == clif_parse_debug ) + packet_db[cmd].func(fd, sd); + else if( packet_db[cmd].func != NULL ) { + if( !sd && packet_db[cmd].func != clif_parse_WantToConnection ) ; //Only valid packet when there is no session else - if( sd && sd->bl.prev == NULL && packet_db[packet_ver][cmd].func != clif_parse_LoadEndAck ) + if( sd && sd->bl.prev == NULL && packet_db[cmd].func != clif_parse_LoadEndAck ) ; //Only valid packet when player is not on a map else - packet_db[packet_ver][cmd].func(fd, sd); + packet_db[cmd].func(fd, sd); } #ifdef DUMP_UNKNOWN_PACKET else DumpUnknown(fd,sd,cmd,packet_len); @@ -19962,782 +19878,51 @@ static int clif_parse(int fd) return 0; } +void packetdb_addpacket( uint16 cmd, uint16 length, void (*func)(int, struct map_session_data *), ... ){ + va_list argp; + int i; + + if(cmd <= 0 || cmd > MAX_PACKET_DB) + return; + + packet_db[cmd].len = length; + packet_db[cmd].func = func; + + va_start(argp, func); + + for( i = 0; i < MAX_PACKET_POS; i++ ){ + int offset = va_arg(argp, int); + + if( offset == 0 ){ + break; + } + + packet_db[cmd].pos[i] = offset; + } + + if( i == MAX_PACKET_POS ){ + ShowError( "Too many positions found for packet 0x%04x (max=%d).\n", cmd, MAX_PACKET_POS ); + } + + va_end(argp); +} + /*========================================== - * Reads packet_db.txt and setups its array reference + * Reads packets and setups its array reference *------------------------------------------*/ -void packetdb_readdb(bool reload) -{ - char line[1024]; - int cmd,i,j; - int max_cmd=-1; - bool skip_ver = false; - int warned = 0; - int packet_ver = MAX_PACKET_VER; // read into packet_db's version by default -#ifdef PACKET_OBFUSCATION - bool key_defined = false; - int last_key_defined = -1; -#endif - - int packet_len_table[MAX_PACKET_DB] = { - 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0040 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -#if PACKETVER <= 20081217 - 0, 0, 0, 0, 55, 17, 3, 37, 46, -1, 23, -1, 3,110, 3, 2, -#else - 0, 0, 0, 0, 55, 17, 3, 37, 46, -1, 23, -1, 3,114, 3, 2, -#endif -#if PACKETVER < 2 - 3, 28, 19, 11, 3, -1, 9, 5, 52, 51, 56, 58, 41, 2, 6, 6, -#elif PACKETVER < 20071106 // 78-7b Lv99 effect for later Kameshima - 3, 28, 19, 11, 3, -1, 9, 5, 54, 53, 58, 60, 41, 2, 6, 6, -#elif PACKETVER <= 20081217 // change in 0x78 and 0x7c - 3, 28, 19, 11, 3, -1, 9, 5, 55, 53, 58, 60, 42, 2, 6, 6, -#else - 3, 28, 19, 11, 3, -1, 9, 5, 55, 53, 58, 60, 44, 2, 6, 6, -#endif - //#0x0080 - 7, 3, 2, 2, 2, 5, 16, 12, 10, 7, 29, 2, -1, -1, -1, 0, // 0x8b changed to 2 (was 23) - 7, 22, 28, 2, 6, 30, -1, -1, 3, -1, -1, 5, 9, 17, 17, 6, -#if PACKETVER <= 20100622 - 23, 6, 6, -1, -1, -1, -1, 8, 7, 6, 7, 4, 7, 0, -1, 6, -#else - 23, 6, 6, -1, -1, -1, -1, 8, 7, 6, 9, 4, 7, 0, -1, 6, // 0xaa changed to 9 (was 7) -#endif - 8, 8, 3, 3, -1, 6, 6, -1, 7, 6, 2, 5, 6, 44, 5, 3, - //#0x00C0 - 7, 2, 6, 8, 6, 7, -1, -1, -1, -1, 3, 3, 6, 3, 2, 27, // 0xcd change to 3 (was 6) - 3, 4, 4, 2, -1, -1, 3, -1, 6, 14, 3, -1, 28, 29, -1, -1, - 30, 30, 26, 2, 6, 26, 3, 3, 8, 19, 5, 2, 3, 2, 2, 2, - 3, 2, 6, 8, 21, 8, 8, 2, 2, 26, 3, -1, 6, 27, 30, 10, - //#0x0100 - 2, 6, 6, 30, 79, 31, 10, 10, -1, -1, 4, 6, 6, 2, 11, -1, - 10, 39, 4, 10, 31, 35, 10, 18, 2, 13, 15, 20, 68, 2, 3, 16, - 6, 14, -1, -1, 21, 8, 8, 8, 8, 8, 2, 2, 3, 4, 2, -1, - 6, 86, 6, -1, -1, 7, -1, 6, 3, 16, 4, 4, 4, 6, 24, 26, - //#0x0140 - 22, 14, 6, 10, 23, 19, 6, 39, 8, 9, 6, 27, -1, 2, 6, 6, - 110, 6, -1, -1, -1, -1, -1, 6, -1, 54, 66, 54, 90, 42, 6, 42, - -1, -1, -1, -1, -1, 30, -1, 3, 14, 3, 30, 10, 43, 14,186,182, - 14, 30, 10, 3, -1, 6,106, -1, 4, 5, 4, -1, 6, 7, -1, -1, - //#0x0180 - 6, 3,106, 10, 10, 34, 0, 6, 8, 4, 4, 4, 29, -1, 10, 6, -#if PACKETVER < 1 - 90, 86, 24, 6, 30,102, 8, 4, 8, 4, 14, 10, -1, 6, 2, 6, -#else // 196 comodo icon status display for later - 90, 86, 24, 6, 30,102, 9, 4, 8, 4, 14, 10, -1, 6, 2, 6, -#endif -#if PACKETVER < 20081126 - 3, 3, 35, 5, 11, 26, -1, 4, 4, 6, 10, 12, 6, -1, 4, 4, -#else // 0x1a2 changed (35->37) - 3, 3, 37, 5, 11, 26, -1, 4, 4, 6, 10, 12, 6, -1, 4, 4, -#endif - 11, 7, -1, 67, 12, 18,114, 6, 3, 6, 26, 26, 26, 26, 2, 3, - //#0x01C0, Set 0x1d5=-1 - 2, 14, 10, -1, 22, 22, 4, 2, 13, 97, 3, 9, 9, 30, 6, 28, - 8, 14, 10, 35, 6, -1, 4, 11, 54, 53, 60, 2, -1, 47, 33, 6, - 30, 8, 34, 14, 2, 6, 26, 2, 28, 81, 6, 10, 26, 2, -1, -1, - -1, -1, 20, 10, 32, 9, 34, 14, 2, 6, 48, 56, -1, 4, 5, 10, - //#0x0200 - 26, -1, 26, 10, 18, 26, 11, 34, 14, 36, 10, 0, 0, -1, 32, 10, // 0x20c change to 0 (was 19) - 22, 0, 26, 26, 42, 6, 6, 2, 2,282,282, 10, 10, -1, -1, 66, -#if PACKETVER < 20071106 - 10, -1, -1, 8, 10, 2,282, 18, 18, 15, 58, 57, 64, 5, 71, 5, -#else // 0x22c changed - 10, -1, -1, 8, 10, 2,282, 18, 18, 15, 58, 57, 65, 5, 71, 5, -#endif - 12, 26, 9, 11, -1, -1, 10, 2,282, 11, 4, 36, 6, -1, 4, 2, - //#0x0240 - -1, -1, -1, -1, -1, 3, 4, 8, -1, 3, 70, 4, 8, 12, 4, 10, - 3, 32, -1, 3, 3, 5, 5, 8, 2, 3, -1, 6, 4, 6, 4, 6, - 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0280 -#if PACKETVER < 20070711 - 0, 0, 0, 6, 14, 0, 0, -1, 6, 8, 18, 0, 0, 0, 0, 0, -#else - 0, 0, 0, 6, 14, 0, 0, -1, 10, 12, 18, 0, 0, 0, 0, 0, // 0x288, 0x289 increase by 4 (kafra points) -#endif - 0, 4, 0, 70, 10, 0, 0, 0, 8, 6, 27, 80, 0, -1, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 85, -1, -1,107, 6, -1, 7, 7, 22,191, 0, 8, 0, 0, 0, 0, - //#0x02C0 - 0, -1, 0, 0, 0, 30, 30, 0, 0, 3, 0, 65, 4, 71, 10, 0, - -1, -1, -1, 0, 29, 0, 6, -1, 10, 10, 3, 0, -1, 32, 6, 36, - 34, 33, 0, 0, 0, 0, 0, 0, -1, -1, -1, 13, 67, 59, 60, 8, - 10, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0300 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0340 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0380 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x03C0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0400 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 25, - //#0x0440 - 10, 4, -1, 0, 0, 0, 14, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0480 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x04C0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0500 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, - //#0x0540 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0580 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x05C0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0600 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, - //#0x0640 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0680 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x06C0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0700 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, - //#0x0740 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0780 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x07C0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -#if PACKETVER < 20090617 - 6, 2, -1, 4, 4, 4, 4, 8, 8,254, 6, 8, 6, 54, 30, 54, -#else // 0x7d9 changed - 6, 2, -1, 4, 4, 4, 4, 8, 8,268, 6, 8, 6, 54, 30, 54, -#endif - 0, 15, 8, 6, -1, 8, 8, 32, -1, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 14, -1, -1, -1, 8, 25, 10, 0, 26, 0, - //#0x0800 -#if PACKETVER < 20091229 - -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 20, -#else // for Party booking ( PACKETVER >= 20091229 ) - -1, -1, 18, 4, 8, 6, 2, 4, 14, 50, 18, 6, 2, 3, 14, 20, -#endif - 3, -1, 8, -1, 86, 2, 6, 6, -1, -1, 4, 10, 10, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -1, -1, 3, 2, 66, 5, 2, 12, 6, 0, 0, - //#0x0840 -#if PACKETVER < 20130000 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -#else - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 19, 0, 0, 0, 0, -#endif - 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0880 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x08C0 - 0, 0, 0, 0, 0, 0, 0, 20, 34, 0, 0, 0, 0, 0, 0, 10, - 9, 7, 10, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, - //#0x0900 - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, -1, - 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0940 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 7, - 0, 0, 0, 0, 2, 0, 0, 14, 6, 50, -1, 0, 0, 0, 12, -1, - //#0x0980 - 7, 0, 0, 29, 28, 0, 0, 0, 6, 2, -1, 0, 0, -1, -1, 0, - 31, 0, 0, 0, 0, 0, 0, -1, 8, 11, 9, 8, 0, 0, 0, 22, - 0, 0, 0, 0, 0, 0, 12, 10, 14, 10, 14, 6, -1, 8, 17, 4, - 8, 4, 8, 4, 6, 0, 6, 4, 6, 4, 0, 0, 6, 0, 0, 0, - //#0x09C0 - 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 23, 17, 0, 0,102, 0, - 0, 0, 0, 0, 2, 0, -1, -1, 2, 0, 0, -1, -1, -1, 0, 7, - 0, 0, 0, 0, 0, 18, 22, 3, 11, 0, 11, -1, 0, 3, 11, 0, - -1, 11, 12, 11, 0, 0, 0, 75, -1,143, 0, 0, 0, -1, -1, -1, - //#0x0A00 -#if PACKETVER >= 20141022 - 269, 3, 4, 2, 6, 49, 6, 9, 26, 45, 47, 47, 56, -1, 14, -1, -#else - 269, 0, 0, 2, 6, 48, 6, 9, 26, 45, 47, 47, 56, -1, 14, 0, -#endif - -1, 0, 0, 26, 10, 0, 0, 0, 14, 2, 23, 2, -1, 2, 3, 2, - 21, 3, 5, 0, 66, 0, 0, 8, 3, 0, 0, -1, 0, -1, 0, 0, - 106, 0, 0, 0, 0, 4, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0A40 - 0, 0, 0, 85, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - //#0x0A80 - 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, - //#0x0AC0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0x0AFF is currently defined as maximum - }; - struct { - void (*func)(int, struct map_session_data *); - char *name; - } clif_parse_func[]={ - {clif_parse_WantToConnection,"wanttoconnection"}, - {clif_parse_LoadEndAck,"loadendack"}, - {clif_parse_TickSend,"ticksend"}, - {clif_parse_WalkToXY,"walktoxy"}, - {clif_parse_QuitGame,"quitgame"}, - {clif_parse_GetCharNameRequest,"getcharnamerequest"}, - {clif_parse_GlobalMessage,"globalmessage"}, - {clif_parse_MapMove,"mapmove"}, - {clif_parse_ChangeDir,"changedir"}, - {clif_parse_Emotion,"emotion"}, - {clif_parse_HowManyConnections,"howmanyconnections"}, - {clif_parse_ActionRequest,"actionrequest"}, - {clif_parse_Restart,"restart"}, - {clif_parse_WisMessage,"wis"}, - {clif_parse_Broadcast,"broadcast"}, - {clif_parse_TakeItem,"takeitem"}, - {clif_parse_DropItem,"dropitem"}, - {clif_parse_UseItem,"useitem"}, - {clif_parse_EquipItem,"equipitem"}, - {clif_parse_UnequipItem,"unequipitem"}, - {clif_parse_NpcClicked,"npcclicked"}, - {clif_parse_NpcBuySellSelected,"npcbuysellselected"}, - {clif_parse_NpcBuyListSend,"npcbuylistsend"}, - {clif_parse_NpcSellListSend,"npcselllistsend"}, - {clif_parse_CreateChatRoom,"createchatroom"}, - {clif_parse_ChatAddMember,"chataddmember"}, - {clif_parse_ChatRoomStatusChange,"chatroomstatuschange"}, - {clif_parse_ChangeChatOwner,"changechatowner"}, - {clif_parse_KickFromChat,"kickfromchat"}, - {clif_parse_ChatLeave,"chatleave"}, - {clif_parse_TradeRequest,"traderequest"}, - {clif_parse_TradeAck,"tradeack"}, - {clif_parse_TradeAddItem,"tradeadditem"}, - {clif_parse_TradeOk,"tradeok"}, - {clif_parse_TradeCancel,"tradecancel"}, - {clif_parse_TradeCommit,"tradecommit"}, - {clif_parse_StopAttack,"stopattack"}, - {clif_parse_PutItemToCart,"putitemtocart"}, - {clif_parse_GetItemFromCart,"getitemfromcart"}, - {clif_parse_RemoveOption,"removeoption"}, - {clif_parse_ChangeCart,"changecart"}, - {clif_parse_StatusUp,"statusup"}, - {clif_parse_SkillUp,"skillup"}, - {clif_parse_UseSkillToId,"useskilltoid"}, - {clif_parse_UseSkillToPos,"useskilltopos"}, - {clif_parse_UseSkillToPosMoreInfo,"useskilltoposinfo"}, - {clif_parse_UseSkillMap,"useskillmap"}, - {clif_parse_RequestMemo,"requestmemo"}, - {clif_parse_ProduceMix,"producemix"}, - {clif_parse_Cooking,"cooking"}, - {clif_parse_NpcSelectMenu,"npcselectmenu"}, - {clif_parse_NpcNextClicked,"npcnextclicked"}, - {clif_parse_NpcAmountInput,"npcamountinput"}, - {clif_parse_NpcStringInput,"npcstringinput"}, - {clif_parse_NpcCloseClicked,"npccloseclicked"}, - {clif_parse_ItemIdentify,"itemidentify"}, - {clif_parse_SelectArrow,"selectarrow"}, - {clif_parse_AutoSpell,"autospell"}, - {clif_parse_UseCard,"usecard"}, - {clif_parse_InsertCard,"insertcard"}, - {clif_parse_RepairItem,"repairitem"}, - {clif_parse_WeaponRefine,"weaponrefine"}, - {clif_parse_SolveCharName,"solvecharname"}, - {clif_parse_ResetChar,"resetchar"}, - {clif_parse_LocalBroadcast,"localbroadcast"}, - {clif_parse_MoveToKafra,"movetokafra"}, - {clif_parse_MoveFromKafra,"movefromkafra"}, - {clif_parse_MoveToKafraFromCart,"movetokafrafromcart"}, - {clif_parse_MoveFromKafraToCart,"movefromkafratocart"}, - {clif_parse_CloseKafra,"closekafra"}, - {clif_parse_CreateParty,"createparty"}, - {clif_parse_CreateParty2,"createparty2"}, - {clif_parse_PartyInvite,"partyinvite"}, - {clif_parse_PartyInvite2,"partyinvite2"}, - {clif_parse_ReplyPartyInvite,"replypartyinvite"}, - {clif_parse_ReplyPartyInvite2,"replypartyinvite2"}, - {clif_parse_LeaveParty,"leaveparty"}, - {clif_parse_RemovePartyMember,"removepartymember"}, - {clif_parse_PartyChangeOption,"partychangeoption"}, - {clif_parse_PartyMessage,"partymessage"}, - {clif_parse_PartyChangeLeader,"partychangeleader"}, - {clif_parse_CloseVending,"closevending"}, - {clif_parse_VendingListReq,"vendinglistreq"}, - {clif_parse_PurchaseReq,"purchasereq"}, - {clif_parse_PurchaseReq2,"purchasereq2"}, - {clif_parse_OpenVending,"openvending"}, - {clif_parse_CreateGuild,"createguild"}, - {clif_parse_GuildCheckMaster,"guildcheckmaster"}, - {clif_parse_GuildRequestInfo,"guildrequestinfo"}, - {clif_parse_GuildChangePositionInfo,"guildchangepositioninfo"}, - {clif_parse_GuildChangeMemberPosition,"guildchangememberposition"}, - {clif_parse_GuildRequestEmblem,"guildrequestemblem"}, - {clif_parse_GuildChangeEmblem,"guildchangeemblem"}, - {clif_parse_GuildChangeNotice,"guildchangenotice"}, - {clif_parse_GuildInvite,"guildinvite"}, - {clif_parse_GuildReplyInvite,"guildreplyinvite"}, - {clif_parse_GuildLeave,"guildleave"}, - {clif_parse_GuildExpulsion,"guildexpulsion"}, - {clif_parse_GuildMessage,"guildmessage"}, - {clif_parse_GuildRequestAlliance,"guildrequestalliance"}, - {clif_parse_GuildReplyAlliance,"guildreplyalliance"}, - {clif_parse_GuildDelAlliance,"guilddelalliance"}, - {clif_parse_GuildOpposition,"guildopposition"}, - {clif_parse_GuildBreak,"guildbreak"}, - {clif_parse_PetMenu,"petmenu"}, - {clif_parse_CatchPet,"catchpet"}, - {clif_parse_SelectEgg,"selectegg"}, - {clif_parse_SendEmotion,"sendemotion"}, - {clif_parse_ChangePetName,"changepetname"}, - - {clif_parse_GMKick,"gmkick"}, - {clif_parse_GMHide,"gmhide"}, - {clif_parse_GMReqNoChat,"gmreqnochat"}, - {clif_parse_GMReqAccountName,"gmreqaccname"}, - {clif_parse_GMKickAll,"killall"}, - {clif_parse_GMRecall,"recall"}, - {clif_parse_GMRecall,"summon"}, - {clif_parse_GM_Item_Monster,"itemmonster"}, - {clif_parse_GMShift,"remove"}, - {clif_parse_GMShift,"shift"}, - {clif_parse_GMChangeMapType,"changemaptype"}, - {clif_parse_GMRc,"rc"}, - {clif_parse_GMRecall2,"recall2"}, - {clif_parse_GMRemove2,"remove2"}, - {clif_parse_GMFullStrip,"gmfullstrip"}, - - {clif_parse_NoviceDoriDori,"sndoridori"}, - {clif_parse_NoviceExplosionSpirits,"snexplosionspirits"}, - {clif_parse_PMIgnore,"wisexin"}, - {clif_parse_PMIgnoreList,"wisexlist"}, - {clif_parse_PMIgnoreAll,"wisall"}, - {clif_parse_FriendsListAdd,"friendslistadd"}, - {clif_parse_FriendsListRemove,"friendslistremove"}, - {clif_parse_FriendsListReply,"friendslistreply"}, - {clif_parse_Blacksmith,"blacksmith"}, - {clif_parse_Alchemist,"alchemist"}, - {clif_parse_Taekwon,"taekwon"}, - {clif_parse_RankingPk,"rankingpk"}, - {clif_parse_FeelSaveOk,"feelsaveok"}, - {clif_parse_debug,"debug"}, - {clif_parse_ChangeHomunculusName,"changehomunculusname"}, - {clif_parse_HomMoveToMaster,"hommovetomaster"}, - {clif_parse_HomMoveTo,"hommoveto"}, - {clif_parse_HomAttack,"homattack"}, - {clif_parse_HomMenu,"hommenu"}, - {clif_parse_StoragePassword,"storagepassword"}, - {clif_parse_Hotkey,"hotkey"}, - {clif_parse_AutoRevive,"autorevive"}, - {clif_parse_Check,"check"}, - {clif_parse_Adopt_request,"adoptrequest"}, - {clif_parse_Adopt_reply,"adoptreply"}, - // MAIL SYSTEM - {clif_parse_Mail_refreshinbox,"mailrefresh"}, - {clif_parse_Mail_read,"mailread"}, - {clif_parse_Mail_getattach,"mailgetattach"}, - {clif_parse_Mail_delete,"maildelete"}, - {clif_parse_Mail_return,"mailreturn"}, - {clif_parse_Mail_setattach,"mailsetattach"}, - {clif_parse_Mail_winopen,"mailwinopen"}, - {clif_parse_Mail_send,"mailsend"}, - {clif_parse_Mail_beginwrite,"mailbegin"}, - {clif_parse_Mail_cancelwrite,"mailcancel"}, - {clif_parse_Mail_Receiver_Check,"mailreceiver"}, - // AUCTION SYSTEM - {clif_parse_Auction_search,"auctionsearch"}, - {clif_parse_Auction_buysell,"auctionbuysell"}, - {clif_parse_Auction_setitem,"auctionsetitem"}, - {clif_parse_Auction_cancelreg,"auctioncancelreg"}, - {clif_parse_Auction_register,"auctionregister"}, - {clif_parse_Auction_cancel,"auctioncancel"}, - {clif_parse_Auction_close,"auctionclose"}, - {clif_parse_Auction_bid,"auctionbid"}, - // Quest Log System - {clif_parse_questStateAck,"queststate"}, - {clif_parse_ViewPlayerEquip,"viewplayerequip"}, - {clif_parse_EquipTick,"equiptickbox"}, - {clif_parse_BattleChat,"battlechat"}, - {clif_parse_mercenary_action,"mermenu"}, - {clif_parse_progressbar,"progressbar"}, - {clif_parse_SkillSelectMenu,"skillselectmenu"}, - {clif_parse_ItemListWindowSelected,"itemlistwindowselected"}, -#if PACKETVER >= 20091229 - {clif_parse_PartyBookingRegisterReq,"bookingregreq"}, - {clif_parse_PartyBookingSearchReq,"bookingsearchreq"}, - {clif_parse_PartyBookingUpdateReq,"bookingupdatereq"}, - {clif_parse_PartyBookingDeleteReq,"bookingdelreq"}, -#endif - {clif_parse_BankCheck,"bankcheck"}, - {clif_parse_BankDeposit,"bankdeposit"}, - {clif_parse_BankWithdraw,"bankwithdrawal"}, - {clif_parse_BankOpen,"bankopen"}, - {clif_parse_BankClose,"bankclose"}, - - {clif_parse_PVPInfo,"pvpinfo"}, - {clif_parse_LessEffect,"lesseffect"}, - // Buying Store - {clif_parse_ReqOpenBuyingStore,"reqopenbuyingstore"}, - {clif_parse_ReqCloseBuyingStore,"reqclosebuyingstore"}, - {clif_parse_ReqClickBuyingStore,"reqclickbuyingstore"}, - {clif_parse_ReqTradeBuyingStore,"reqtradebuyingstore"}, - // Store Search - {clif_parse_SearchStoreInfo,"searchstoreinfo"}, - {clif_parse_SearchStoreInfoNextPage,"searchstoreinfonextpage"}, - {clif_parse_CloseSearchStoreInfo,"closesearchstoreinfo"}, - {clif_parse_SearchStoreInfoListItemClick,"searchstoreinfolistitemclick"}, - // Cashshop - { clif_parse_cashshop_open_request, "cashshopopen" }, - { clif_parse_cashshop_close, "cashshopclose" }, - { clif_parse_cashshop_list_request, "cashshopitemlist" }, - { clif_parse_cashshop_buy, "cashshopbuy" }, - { clif_parse_CashShopReqTab, "cashshopreqtab"}, - /* */ - { clif_parse_MoveItem , "moveitem" }, - { clif_parse_PartyTick, "partytick" }, - { clif_parse_dull, "dull" }, - { clif_parse_GuildInvite2 , "guildinvite2" }, - { clif_parse_reqworldinfo, "reqworldinfo"}, - { clif_parse_client_version, "clientversion"}, - { clif_parse_blocking_playcancel, "booking_playcancel"}, - { clif_parse_ranklist, "ranklist"}, - // Market NPC - { clif_parse_NPCShopClosed, "npcshopclosed" }, - { clif_parse_NPCMarketClosed, "npcmarketclosed" }, - { clif_parse_NPCMarketPurchase, "npcmarketpurchase" }, - // Roulette - { clif_parse_RouletteOpen, "rouletteopen" }, - { clif_parse_RouletteInfo, "rouletteinfo" }, - { clif_parse_RouletteClose, "rouletteclose" }, - { clif_parse_RouletteGenerate, "roulettegenerate" }, - { clif_parse_RouletteRecvItem, "rouletterecvitem" }, - // Merge Item - { clif_parse_merge_item_req, "mergeitem_req"}, - { clif_parse_merge_item_cancel, "mergeitem_cancel"}, - // HotkeyRowShift - { clif_parse_HotkeyRowShift, "hotkeyrowshift"}, - // OneClick Item Identify - { clif_parse_Oneclick_Itemidentify, "oneclick_itemidentify" }, - // NewChange Cart2 - { clif_parse_SelectCart, "selectcart" }, - // Clan System - { clif_parse_clan_chat, "clanchat" }, - // Sale - { clif_parse_sale_search, "salesearch" }, - { clif_parse_sale_add, "saleadd" }, - { clif_parse_sale_remove, "saleremove" }, - { clif_parse_sale_open, "saleopen" }, - { clif_parse_sale_close, "saleclose" }, - { clif_parse_sale_refresh, "salerefresh" }, - {NULL,NULL} - }; - struct { - char *name; //function name - int funcidx; // - } clif_ack_func[]={ //hash - { "ZC_ACK_OPEN_BANKING", ZC_ACK_OPEN_BANKING}, - { "ZC_ACK_BANKING_DEPOSIT", ZC_ACK_BANKING_DEPOSIT}, - { "ZC_ACK_BANKING_WITHDRAW", ZC_ACK_BANKING_WITHDRAW}, - { "ZC_BANKING_CHECK", ZC_BANKING_CHECK}, - { "ZC_BANKING_CHECK", ZC_BANKING_CHECK}, - { "ZC_PERSONAL_INFOMATION", ZC_PERSONAL_INFOMATION}, - { "ZC_PERSONAL_INFOMATION_CHN", ZC_PERSONAL_INFOMATION_CHN}, - { "ZC_CLEAR_DIALOG", ZC_CLEAR_DIALOG}, - { "ZC_C_MARKERINFO", ZC_C_MARKERINFO}, - { "ZC_NOTIFY_BIND_ON_EQUIP", ZC_NOTIFY_BIND_ON_EQUIP }, - { "ZC_WEAR_EQUIP_ACK", ZC_WEAR_EQUIP_ACK }, - { "ZC_MERGE_ITEM_OPEN", ZC_MERGE_ITEM_OPEN }, - { "ZC_ACK_MERGE_ITEM", ZC_ACK_MERGE_ITEM }, - { "ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN", ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN }, - }; - const char *filename[] = { "packet_db.txt", DBIMPORT"/packet_db.txt"}; - int f; - +void packetdb_readdb(){ memset(packet_db,0,sizeof(packet_db)); memset(packet_db_ack,0,sizeof(packet_db_ack)); - // initialize packet_db[SERVER] from hardcoded packet_len_table[] values - for( i = 0; i < ARRAYLENGTH(packet_len_table); ++i ) - packet_len(i) = packet_len_table[i]; +#include "clif_packetdb.h" +#include "clif_shuffle.h" - clif_config.packet_db_ver = MAX_PACKET_VER; - for(f = 0; f < ARRAYLENGTH(filename); f++) { - FILE *fp; - int ln = 0; - int entries = 0; - char *str[64], *p, *str2[64], *p2; - - sprintf(line, "%s/%s", db_path, filename[f]); - if( (fp = fopen(line,"r")) == NULL ) { - if (f == 0) { - ShowFatalError("Can't read %s\n", line); - exit(EXIT_FAILURE); - } - return; - } - - while( fgets(line, sizeof(line), fp) ) { - char w1[256],w2[256]; - ln++; - if(line[0]=='/' && line[1]=='/') - continue; - if (sscanf(line,"%255[^:]: %255[^\r\n]",w1,w2) == 2) { - if (strcmpi(w1,"packet_ver") == 0) { - int prev_ver = packet_ver; - skip_ver = false; - packet_ver = atoi(w2); - if ( packet_ver > MAX_PACKET_VER ) - { //Check to avoid overflowing. [Skotlex] - if( (warned&1) == 0 ) - ShowWarning("The packet_db table only has support up to version %d.\n", MAX_PACKET_VER); - warned &= 1; - skip_ver = true; - } - else if( packet_ver < 0 ) - { - if( (warned&2) == 0 ) - ShowWarning("Negative packet versions are not supported.\n"); - warned &= 2; - skip_ver = true; - } - else if( packet_ver == SERVER ) - { - if( (warned&4) == 0 ) - ShowWarning("Packet version %d is reserved for server use only.\n", SERVER); - warned &= 4; - skip_ver = true; - } - - if( skip_ver ) - { - ShowWarning("Skipping packet version %d.\n", packet_ver); - packet_ver = prev_ver; - continue; - } - // copy from previous version into new version and continue - // - indicating all following packets should be read into the newer version - memcpy(&packet_db[packet_ver], &packet_db[prev_ver], sizeof(packet_db[0])); - memcpy(&packet_db_ack[packet_ver], &packet_db_ack[prev_ver], sizeof(packet_db_ack[0])); - continue; - } else if(strcmpi(w1,"packet_db_ver")==0) { - if (strcmpi(w2,"default") == 0) //This is the preferred version. - clif_config.packet_db_ver = MAX_PACKET_VER; - else // to manually set the packet DB version - clif_config.packet_db_ver = cap_value(atoi(w2), 0, MAX_PACKET_VER); - continue; - } -#ifdef PACKET_OBFUSCATION - else if (!reload && strcmpi(w1,"packet_keys") == 0) { - char key1[12] = { 0 }, key2[12] = { 0 }, key3[12] = { 0 }; - trim(w2); - if (sscanf(w2, "%11[^,],%11[^,],%11[^ \r\n/]", key1, key2, key3) == 3) { - if (!packet_keys[packet_ver]) - CREATE(packet_keys[packet_ver], struct s_packet_keys, 1); - packet_keys[packet_ver]->keys[0] = strtol(key1, NULL, 0); - packet_keys[packet_ver]->keys[1] = strtol(key2, NULL, 0); - packet_keys[packet_ver]->keys[2] = strtol(key3, NULL, 0); - last_key_defined = packet_ver; - if (battle_config.etc_log) - ShowInfo("Packet Ver:%d -> Keys: 0x%08X, 0x%08X, 0x%08X\n", packet_ver, packet_keys[packet_ver]->keys[0], packet_keys[packet_ver]->keys[1], packet_keys[packet_ver]->keys[2]); - } - continue; - } else if (!reload && strcmpi(w1,"packet_keys_use") == 0) { - char key1[12] = { 0 }, key2[12] = { 0 }, key3[12] = { 0 }; - trim(w2); - if (strcmpi(w2,"default") == 0) - continue; - if (sscanf(w2, "%11[^,],%11[^,],%11[^ \r\n/]", key1, key2, key3) == 3) { - clif_cryptKey[0] = strtol(key1, NULL, 0); - clif_cryptKey[1] = strtol(key2, NULL, 0); - clif_cryptKey[2] = strtol(key3, NULL, 0); - key_defined = true; - if (battle_config.etc_log) - ShowInfo("Defined keys: 0x%08X, 0x%08X, 0x%08X\n", clif_cryptKey[0], clif_cryptKey[1], clif_cryptKey[2]); - } - continue; - } -#endif - } - - if( skip_ver ) - continue; // Skipping current packet version - - memset(str,0,sizeof(str)); - for (j = 0, p = line; j < 4 && p; ++j) { - str[j] = p; - p = strchr(p,','); - if (p) - *p++=0; - } - if (str[0] == NULL) - continue; - cmd = strtol(str[0],(char **)NULL,0); - - if(max_cmd < cmd) - max_cmd = cmd; - if(cmd <= 0 || cmd > MAX_PACKET_DB) - continue; - if(str[1]==NULL){ - ShowError("packet_db: packet len error\n"); - continue; - } - - packet_db[packet_ver][cmd].len = (short)atoi(str[1]); - - if(str[2]==NULL){ - packet_db[packet_ver][cmd].func = NULL; - ln++; - continue; - } - - // look up processing function by name - ARR_FIND( 0, ARRAYLENGTH(clif_parse_func), j, clif_parse_func[j].name != NULL && strcmp(str[2],clif_parse_func[j].name)==0 ); - if( j < ARRAYLENGTH(clif_parse_func) ) - packet_db[packet_ver][cmd].func = clif_parse_func[j].func; - else { //search if it's a mapped ack func - ARR_FIND( 0, ARRAYLENGTH(clif_ack_func), j, clif_ack_func[j].name != NULL && strcmp(str[2],clif_ack_func[j].name)==0 ); - if( j < ARRAYLENGTH(clif_ack_func)) { - int fidx = clif_ack_func[j].funcidx; - packet_db_ack[packet_ver][fidx] = cmd; - //ShowInfo("Added %s, <=> %X i=%d for v=%d\n",clif_ack_func[j].name,cmd,fidx,packet_ver); - } - } - - // set the identifying cmd for the packet_db version - if (strcmp(str[2],"wanttoconnection")==0) - clif_config.connect_cmd[packet_ver] = cmd; - - if(str[3]==NULL){ - ShowError("packet_db: packet error\n"); - exit(EXIT_FAILURE); - } - for(j = 0, p2 = str[3]; p2; j++){ - short k; - str2[j] = p2; - p2 = strchr(p2,':'); - if(p2) - *p2++=0; - k = atoi(str2[j]); - // if (packet_db[packet_ver][cmd].pos[j] != k && clif_config.prefer_packet_db) // not used for now - - if( j >= MAX_PACKET_POS ) - { - ShowError("Too many positions found for packet 0x%04x (max=%d).\n", cmd, MAX_PACKET_POS); - break; - } - - packet_db[packet_ver][cmd].pos[j] = k; - } - entries++; - } - fclose(fp); - if(max_cmd > MAX_PACKET_DB) { - ShowWarning("Found packets up to 0x%X, ignored 0x%X and above.\n", max_cmd, MAX_PACKET_DB); - ShowWarning("Please increase MAX_PACKET_DB and recompile.\n"); - } - //Locate the nearest version that we still support. [Skotlex] - if (!clif_config.connect_cmd[clif_config.packet_db_ver]) { - for(j = clif_config.packet_db_ver; j >= 0 && !clif_config.connect_cmd[j]; j--); - - clif_config.packet_db_ver = j?j:MAX_PACKET_VER; - } - sprintf(line, "%s/%s", db_path,filename[f]); - ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", entries, line); - } - ShowStatus("Using default packet version: "CL_WHITE"%d"CL_RESET".\n", clif_config.packet_db_ver); + ShowStatus("Using packet version: "CL_WHITE"%d"CL_RESET".\n", PACKETVER); #ifdef PACKET_OBFUSCATION - if (!key_defined && !clif_cryptKey[0] && !clif_cryptKey[1] && !clif_cryptKey[2]) { // Not defined - int use_key = last_key_defined; - - if (last_key_defined == -1) - ShowError("Can't find packet obfuscation keys!\n"); - else { - if (packet_keys[clif_config.packet_db_ver]) - use_key = clif_config.packet_db_ver; - - ShowInfo("Using default packet obfuscation keys for packet_db_ver: %d\n", use_key); - memcpy(&clif_cryptKey, &packet_keys[use_key]->keys, sizeof(packet_keys[use_key]->keys)); - } - } ShowStatus("Packet Obfuscation: "CL_GREEN"Enabled"CL_RESET". Keys: "CL_WHITE"0x%08X, 0x%08X, 0x%08X"CL_RESET"\n", clif_cryptKey[0], clif_cryptKey[1], clif_cryptKey[2]); - - for (i = 0; i < ARRAYLENGTH(packet_keys); i++) { - if (packet_keys[i]) { - aFree(packet_keys[i]); - packet_keys[i] = NULL; - } - } +#else + ShowStatus("Packet Obfuscation: "CL_RED"Disabled"CL_RESET".\n"); #endif } @@ -20762,14 +19947,7 @@ void do_init_clif(void) { color_table[i] = (color_table[i] & 0x0000FF) << 16 | (color_table[i] & 0x00FF00) | (color_table[i] & 0xFF0000) >> 16;//RGB to BGR } - clif_config.packet_db_ver = -1; // the main packet version of the DB - memset(clif_config.connect_cmd, 0, sizeof(clif_config.connect_cmd)); //The default connect command will be determined after reading the packet_db [Skotlex] -#ifdef PACKET_OBFUSCATION - memset(clif_cryptKey, 0, sizeof(clif_cryptKey)); -#endif - - //Using the packet_db file is the only way to set up packets now [Skotlex] - packetdb_readdb(false); + packetdb_readdb(); set_defaultparse(clif_parse); if( make_listen_bind(bind_ip,map_port) == -1 ) { diff --git a/src/map/clif.h b/src/map/clif.h index 0e7e488b35..8ae9dd7929 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -44,12 +44,12 @@ enum mail_attachment_type; enum { // packet DB MIN_PACKET_DB = 0x064, MAX_PACKET_DB = 0xAFF, - MAX_PACKET_VER = 55, MAX_PACKET_POS = 20, }; enum e_packet_ack { ZC_ACK_OPEN_BANKING = 0, + ZC_ACK_CLOSE_BANKING, ZC_ACK_BANKING_DEPOSIT, ZC_ACK_BANKING_WITHDRAW, ZC_BANKING_CHECK, @@ -171,11 +171,9 @@ enum e_party_invite_reply { PARTY_REPLY_INVALID_MAPPROPERTY_ME, ///< return=9 : !TODO "Cannot join a party in this map" -> MsgStringTable[1871] (since 20110205) }; -// packet_db[SERVER] is reserved for server use -#define SERVER 0 -#define packet_len(cmd) packet_db[SERVER][cmd].len -extern struct s_packet_db packet_db[MAX_PACKET_VER+1][MAX_PACKET_DB+1]; -extern int packet_db_ack[MAX_PACKET_VER + 1][MAX_ACK_FUNC + 1]; +#define packet_len(cmd) packet_db[cmd].len +extern struct s_packet_db packet_db[MAX_PACKET_DB+1]; +extern int packet_db_ack[MAX_ACK_FUNC + 1]; // local define typedef enum send_target { @@ -534,7 +532,6 @@ void clif_setport(uint16 port); uint32 clif_getip(void); uint32 clif_refresh_ip(void); uint16 clif_getport(void); -void packetdb_readdb(bool reload); void clif_authok(struct map_session_data *sd); void clif_authrefuse(int fd, uint8 error_code); diff --git a/src/map/clif_obfuscation.h b/src/map/clif_obfuscation.h new file mode 100644 index 0000000000..da7df952e0 --- /dev/null +++ b/src/map/clif_obfuscation.h @@ -0,0 +1,347 @@ +// Copyright (c) Athena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#ifndef _CLIF_OBFUSCATION_H_ +#define _CLIF_OBFUSCATION_H_ + + #define packet_keys(a,b,c) static unsigned int clif_cryptKey[] = { a, b, c }; + + #if defined(PACKET_OBFUSCATION_KEY1) || defined(PACKET_OBFUSCATION_KEY2) || defined(PACKET_OBFUSCATION_KEY3) + #ifndef PACKET_OBFUSCATION_KEY1 + #error You enabled custom packet obfuscation keys, but did not specify key number 1. + #endif + #ifndef PACKET_OBFUSCATION_KEY2 + #error You enabled custom packet obfuscation keys, but did not specify key number 2. + #endif + #ifndef PACKET_OBFUSCATION_KEY3 + #error You enabled custom packet obfuscation keys, but did not specify key number 3. + #endif + + packet_keys(PACKET_OBFUSCATION_KEY1,PACKET_OBFUSCATION_KEY2,PACKET_OBFUSCATION_KEY3); + #elif PACKETVER == 20110817 + packet_keys(0x053D5CED,0x3DED6DED,0x6DED6DED); + #elif PACKETVER == 20110824 + packet_keys(0x35C91401,0x262A5556,0x28FA03AA); + #elif PACKETVER == 20110831 + packet_keys(0x3AD67ED0,0x44703C69,0x6F876809); + #elif PACKETVER == 20110906 + packet_keys(0x3AD67ED0,0x44703C69,0x6F876809); // unchanged from 2011-08-31 + #elif PACKETVER == 20111005 // 2011-10-05aRagexeRE + packet_keys(0x291E6762,0x77CD391A,0x60AC2F16); + #elif PACKETVER == 20111012 + packet_keys(0x7F3C2D29,0x59B01DE6,0x1DBB44CA); + #elif PACKETVER == 20111021 + packet_keys(0x357D55DC,0x5A8D759F,0x245C30F5); + #elif PACKETVER == 20111025 + packet_keys(0x50AE1A63,0x3CE579B5,0x29C10406); + #elif PACKETVER == 20111102 // 2011-11-02aRagexe + packet_keys(0x5324329D,0x5D545D52,0x06137269); + #elif PACKETVER == 20111109 + packet_keys(0x0B642BDA,0x6ECB1D1C,0x61C7454B); + #elif PACKETVER == 20111122 + packet_keys(0x3B550F07,0x1F666C7C,0x60304EF5); + #elif PACKETVER == 20111207 + packet_keys(0x2A610886,0x3E09165E,0x57C11888); + #elif PACKETVER == 20111214 + packet_keys(0x5151306B,0x7AE32886,0x53060628); + #elif PACKETVER == 20111220 + packet_keys(0x05D53871,0x7D0027B4,0x29975333); + #elif PACKETVER == 20111228 + packet_keys(0x0FF87E93,0x6CFF7860,0x3A3D1DEC); + #elif PACKETVER == 20120104 + packet_keys(0x262034A1,0x674542A5,0x73A50BA5); + #elif PACKETVER == 20120111 + packet_keys(0x2B412AFC,0x4FF94487,0x6705339D); + #elif PACKETVER == 20120120 + packet_keys(0x504345D0,0x3D427B1B,0x794C2DCC); + #elif PACKETVER == 20120202 + packet_keys(0x2CFC0A71,0x2BA91D8D,0x087E39E0); + #elif PACKETVER == 20120207 + packet_keys(0x1D373F5D,0x5ACD604D,0x1C4D7C4D); + #elif PACKETVER == 20120214 + packet_keys(0x7A255EFA,0x30977276,0x2D4A0448); + #elif PACKETVER == 20120229 + packet_keys(0x520B4C64,0x2800407D,0x47651458); + #elif PACKETVER == 20120307 // 2012-03-07fRagexeRE + packet_keys(0x382A6DEF,0x5CBE7202,0x61F46637); + #elif PACKETVER == 20120314 + packet_keys(0x689C1729,0x11812639,0x60F82967); + #elif PACKETVER == 20120321 + packet_keys(0x21F9683F,0x710C5CA5,0x1FD910E9); + #elif PACKETVER == 20120328 + packet_keys(0x75B8553B,0x37F20B12,0x385C2B40); + #elif PACKETVER == 20120404 + packet_keys(0x0036310C,0x2DCD0BED,0x1EE62A78); + #elif PACKETVER == 20120410 // 2012-04-10aRagexeRE + packet_keys(0x01581359,0x452D6FFA,0x6AFB6E2E); + #elif PACKETVER == 20120418 // 2012-04-18aRagexeRE + packet_keys(0x01540E48,0x13041224,0x31247924); + #elif PACKETVER == 20120424 + packet_keys(0x411D1DBB,0x4CBA4848,0x1A432FC4); + #elif PACKETVER == 20120509 + packet_keys(0x16CF3301,0x1F472B9B,0x0B4A3CD2); + #elif PACKETVER == 20120515 + packet_keys(0x4A715EF9,0x79103E4F,0x405C1238); + #elif PACKETVER == 20120525 + packet_keys(0x70EB4CCB,0x0487713C,0x398D4B08); + #elif PACKETVER == 20120605 + packet_keys(0x68CA3080,0x31B74BDD,0x505208F1); + #elif PACKETVER == 20120612 + packet_keys(0x32E45D64,0x35643564,0x35643564); + #elif PACKETVER == 20120618 // 2012-06-18 + packet_keys(0x261F261F,0x261F261F,0x261F261F); + #elif PACKETVER == 20120702 // 2012-07-02aRagexeRE + packet_keys(0x25733B31,0x53486CFD,0x398649BD); + #elif PACKETVER == 20120716 + packet_keys(0x76052205,0x22052205,0x22052205); + #elif PACKETVER == 20130320 // 2013-03-20Ragexe + packet_keys(0x3F094C49,0x55F86C1E,0x58AA359A); + #elif PACKETVER == 20130515 // 2013-05-15aRagexe + packet_keys(0x75794A38,0x58A96BC1,0x296E6FB8); + #elif PACKETVER == 20130522 // 2013-05-22Ragexe + packet_keys(0x6948050B,0x06511D9D,0x725D4DF1); + #elif PACKETVER == 20130529 // 2013-05-29Ragexe + packet_keys(0x023A6C87,0x14BF1F1E,0x5CC70CC9); + #elif PACKETVER == 20130605 // 2013-06-05Ragexe + packet_keys(0x646E08D9,0x5F153AB5,0x61B509B5); + #elif PACKETVER == 20130612 // 2013-06-12Ragexe + packet_keys(0x6D166F66,0x3C000FCF,0x295B0FCB); + #elif PACKETVER == 20130618 // 2013-06-18Ragexe + packet_keys(0x434115DE,0x34A10FE9,0x6791428E); + #elif PACKETVER == 20130626 // 2013-06-26Ragexe + packet_keys(0x38F453EF,0x6A040FD8,0X65BD6668); + #elif PACKETVER == 20130703 // 2013-07-03Ragexe + packet_keys(0x4FF90E23,0x0F1432F2,0x4CFA1EDA); + #elif PACKETVER == 20130710 // 2013-07-10Ragexe + packet_keys(0x458F758F,0x4CCF3F8F,0x4A9C4237); + #elif PACKETVER == 20130717 // 2013-07-17Ragexe + packet_keys(0x2BED4F91,0x5F9E00CF,0x5EE5520C); + #elif PACKETVER == 20130807 // 2013-08-07Ragexe + packet_keys(0x7E241DE0,0x5E805580,0x3D807D80); + #elif PACKETVER == 20130814 + packet_keys(0x23A23148,0x0C41420E,0x53785AD7); + #elif PACKETVER == 20131218 + packet_keys(0x6A596301,0x76866D0E,0x32294A45); + #elif PACKETVER == 20131223 // 2013-12-23Ragexe + packet_keys(0x631C511C,0x111C111C,0x111C111C); + #elif PACKETVER == 20131230 + packet_keys(0x611B7097,0x01F957A1,0x768A0FCB); + #elif PACKETVER == 20140115 + packet_keys(0x63224335,0x0F3A1F27,0x6D217B24); + #elif PACKETVER == 20140205 + packet_keys(0x63DC7BDC,0x7BDC7BDC,0x7BDC7BDC); + #elif PACKETVER == 20140305 + packet_keys(0x116763F2,0x41117DAC,0x7FD13C45); + #elif PACKETVER == 20140402 + packet_keys(0x15D3271C,0x004D725B,0x111A3A37); + #elif PACKETVER == 20140416 + packet_keys(0x04810281,0x42814281,0x42814281); + #elif PACKETVER == 20141016 // 2014-10-16Ragexe + packet_keys(0x2DFF467C,0x444B37EE,0x2C1B634F); + #elif PACKETVER == 20141022 // 2014-10-22bRagexe + packet_keys(0x290551EA,0x2B952C75,0x2D67669B); + #elif PACKETVER == 20150107 // 2015-01-07aRagexeRE + packet_keys(0x6C494A14, 0x4DDB6427, 0x3E6D7B65); + #elif PACKETVER == 20150114 // 2015-01-14aRagexe + packet_keys(0x21C96102, 0x13142934, 0x1ABF4EA3); + #elif PACKETVER == 20150128 // 2015-01-28aRagexe + packet_keys(0x77CA2D55,0x28B608F0,0x75B47957); + #elif PACKETVER == 20150204 // 2015-02-04aRagexe + packet_keys(0x134529DB,0x5B4F6CEF,0x29EF11EF); + #elif PACKETVER == 20150225 || PACKETVER == 20150226 // 2015-02-25aRagexeRE or 2015-02-26aRagexeRE + packet_keys(0x57FD4B7B,0x19CC16FB,0x0D255D72); + #elif PACKETVER == 20150311 // 2015-03-11aRagexeRE + packet_keys(0x48C45D97,0x06CE09B0,0x5836642F); + #elif PACKETVER == 20150325 // 2015-03-25aRagexe + packet_keys(0x68F62B8C, 0x337C3468, 0x38FC0AC7); + #elif PACKETVER == 20150401 // 2015-04-01aRagexe + packet_keys(0x207F3A08,0x57E6160C,0x02A60382); + #elif PACKETVER == 20150422 // 2015-04-22aRagexeRE + packet_keys(0x10D22CE2,0x69E279E2,0x79E279E2); + #elif PACKETVER == 20150429 // 2015-04-29aRagexe + packet_keys(0x2BF61A71,0x565D5DDF,0x0FB90019); + #elif PACKETVER == 20150507 // 2015-05-07bRagexe + packet_keys(0x55B54373,0x58967821,0x67F41832); + #elif PACKETVER == 20150513 // 2015-05-13aRagexe + packet_keys(0x62C86D09,0x75944F17,0x112C133D); + #elif PACKETVER == 20150527 // 2015-05-27aRagexe + packet_keys(0x35AE7BAE,0x3BAE3BAE,0x3BAE3BAE); + #elif PACKETVER == 20150617 || PACKETVER == 20150618 // 2015-06-17aRagexeRE or 2015-06-18aRagexeRE + packet_keys(0x250F7E09,0x25416076,0x029A780E); + #elif PACKETVER == 20150819 // 2015-08-19aRagexeRE + packet_keys(0x1A2400E0,0x736E5686,0x10F315D5); + #elif PACKETVER == 20150826 // 2015-08-26aRagexeRE + packet_keys(0x77883C56,0x1829359F,0x0DE635B6); + #elif PACKETVER == 20150916 // 2015-09-16Ragexe + packet_keys(0x17F83A19,0x116944F4,0x1CC541E9); + #elif PACKETVER == 20151001 // 2015-10-01bRagexeRE + packet_keys(0x45B945B9,0x45B945B9,0x45B945B9); + #elif PACKETVER == 20151007 // 2015-10-07aRagexeRE + packet_keys(0x3C6447A8,0x032170D7,0x6490476C); + #elif PACKETVER == 20151014 // 2015-10-14bRagexeRE + packet_keys(0x402728A8,0x5D0E309F,0x240018FD); + #elif PACKETVER == 20151028 // 2015-10-28cRagexeRE + packet_keys(0x45B945B9,0x45B945B9,0x45B945B9); + #elif PACKETVER == 20151029 // 2015-10-29aRagexe + packet_keys(0x45B945B9,0x45B945B9,0x45B945B9); + #elif PACKETVER == 20151104 // 2015-11-04aRagexe + packet_keys(0x4C17382A,0x7ED174C9,0x29961E4F); + #elif PACKETVER == 20151118 // 2015-11-18aRagexeRE + packet_keys(0x734C3241,0x6E846F34,0x731C06D6); + #elif PACKETVER == 20151202 // 2015-12-02bRagexeRE + packet_keys(0x4EDE52DE,0x52DE52DE,0x52DE52DE); + #elif PACKETVER == 20151216 // 2015-12-16aRagexe + packet_keys(0x25DD643D,0x61AC39DE,0x77A8206D); + #elif PACKETVER == 20151223 // 2015-12-23bRagexeRE + packet_keys(0x347D68D0,0x2C705320,0x7B4A199D); + #elif PACKETVER == 20160106 // 2016-01-06aRagexeRE + packet_keys(0x40520265,0x33FE26FC,0x7136294F); + #elif PACKETVER == 20160113 // 2016-01-13cRagexeRE + packet_keys(0x18005C4B,0x19A94A72,0x73F678EC); + #elif PACKETVER == 20160120 // 2016-01-20aRagexeRE + packet_keys(0x51495149,0x51495149,0x51495149); + #elif PACKETVER == 20160127 // 2016-01-27bRagexeRE + packet_keys(0x6B1E7146,0x612C47E6,0x274E56EE); + #elif PACKETVER == 20160203 // 2016-02-03aRagexeRE + packet_keys(0x3E1411AF,0x6C744497,0x7CFA1BDE); + #elif PACKETVER == 20160211 // 2016-02-11aRagexeRE + packet_keys(0x613813EA,0x05251DAB,0x1FD35E33); + #elif PACKETVER == 20160217 // 2016-02-17cRagexeRE + packet_keys(0x25895A8E,0x09421C19,0x763A2D7A); + #elif PACKETVER == 20160224 // 2016-02-24bRagexeRE + packet_keys(0x7088019A,0x13471F02,0x42356A7D); + #elif PACKETVER == 20160302 // 2016-03-02bRagexeRE + packet_keys(0x7B4441B9,0x5BBC63AF,0x45DA0E71); + #elif PACKETVER == 20160309 // 2016-03-09aRagexeRE + packet_keys(0x21587520,0x353A7706,0x1B722B25); + #elif PACKETVER == 20160316 // 2016-03-16aRagexeRE + packet_keys(0x62363E36,0x3E363E36,0x3E363E36); + #elif PACKETVER == 20160323 // 2016-03-23aRagexeRE + packet_keys(0x73E35A83,0x62142FA8,0x12BA36BD); + #elif PACKETVER == 20160330 // 2016-03-30aRagexeRE + packet_keys(0x02050940,0x545336FF,0x7E7D4902); + #elif PACKETVER == 20160406 // 2016-04-06aRagexeRE + packet_keys(0x568611EA,0x32457D8D,0x2B020477); + #elif PACKETVER == 20160414 // 2016-04-14bRagexeRE + packet_keys(0x31BD479A,0x40C61398,0x397C1A80); + #elif PACKETVER == 20160420 // 2016-04-20aRagexeRE + packet_keys(0x67D2163A,0x3068215B,0x4835474D); + #elif PACKETVER == 20160427 // 2016-04-27aRagexeRE + packet_keys(0x12DC378E,0x4E3E7EBE,0x0ABE2ABE); + #elif PACKETVER == 20160504 // 2016-05-04aRagexeRE + packet_keys(0x09E0544C,0x0231251D,0x2F4E195F); + #elif PACKETVER == 20160511 // 2016-05-11aRagexeRE + packet_keys(0x3C666FE2,0x27E84E3E,0x53E11BA5); + #elif PACKETVER == 20160518 // 2016-05-18aRagexeRE + packet_keys(0x57DB7CA1,0x1FEA1629,0x26DD244D); + #elif PACKETVER == 20160525 // 2016-05-25aRagexeRE + packet_keys(0x485C45B6,0x47DC6192,0x76B34A36); + #elif PACKETVER == 20160601 // 2016-06-01aRagexeRE + packet_keys(0x3DAD32C4,0x59F001BE,0x73F65E56); + #elif PACKETVER == 20160608 // 2016-06-08aRagexeRE + packet_keys(0x11D74609,0x77C43E8A,0x44290F53); + #elif PACKETVER == 20160615 // 2016-06-15aRagexeRE + packet_keys(0x062C5C26,0x6CF47E82,0x4DD53480); + #elif PACKETVER == 20160622 // 2016-06-22aRagexeRE + packet_keys(0x426548AB,0x5C0F5DD4,0x03022710); + #elif PACKETVER == 20160630 // 2016-06-30aRagexeRE + packet_keys(0x0DF31CCC,0x54281606,0x5C4C6855); + #elif PACKETVER == 20160706 // 2016-07-06cRagexeRE + packet_keys(0x33A766D0,0x743F04F8,0x0FA0276C); + #elif PACKETVER == 20160713 // 2016-07-13bRagexeRE + packet_keys(0x714F2495,0x7DDC6F32,0x3FD8533D); + #elif PACKETVER == 20160720 // 2016-07-20aRagexeRE + packet_keys(0x4F8A19C0,0x2D8E085C,0x37BB67D6); + #elif PACKETVER == 20160727 // 2016-07-27bRagexeRE + packet_keys(0x3C6952AB,0x26E4077F,0x37E25DF7); + #elif PACKETVER == 20160803 // 2016-08-03bRagexeRE + packet_keys(0x67F438C2,0x512A4EB7,0x2D353182); + #elif PACKETVER == 20160810 // 2016-08-10aRagexeRE + packet_keys(0x2F252886,0x242234A2,0x48BC5032); + #elif PACKETVER == 20160831 // 2016-08-31bRagexeRE + packet_keys(0x564E13B0,0x7F680549,0x382D273B); + #elif PACKETVER == 20160907 // 2016-09-07aRagexeRE + packet_keys(0x32E5237D,0x57BD4DBD,0x5DBD5DBD); + #elif PACKETVER == 20160913 // 2016-09-13aRagexeRE + packet_keys(0x7C79748F,0x1AA03B1D,0x6EAC4747); + #elif PACKETVER == 20160921 // 2016-09-21bRagexeRE + packet_keys(0x11CD15CD,0x15CD15CD,0x15CD15CD); + #elif PACKETVER == 20160928 // 2016-09-28dRagexeRE + packet_keys(0x2F8C67F5,0x22D42C38,0x57513774); + #elif PACKETVER == 20161005 // 2016-10-05aRagexeRE + packet_keys(0x5BAE21F8,0x021E2FFC,0x3BEB7C31); + #elif PACKETVER == 20161012 // 2016-10-12aRagexeRE + packet_keys(0x5E2311F2,0x14FD012C,0x76EB64F6); + #elif PACKETVER == 20161019 // 2016-10-19aRagexeRE + packet_keys(0x34882F11,0x7C870E70,0x7E61350D); + #elif PACKETVER == 20161026 // 2016-10-26bRagexeRE + packet_keys(0x2CB86AE6,0x7D12660E,0x1B004DEB); + #elif PACKETVER == 20161103 // 2016-11-03aRagexeRE + packet_keys(0x76725C17,0x72FE4EC1,0x07A91BFD); + #elif PACKETVER == 20161109 // 2016-11-09bRagexeRE + packet_keys(0x0A5277C0,0x2DB17506,0x0E8F26DA); + #elif PACKETVER == 20161116 // 2016-11-16cRagexeRE + packet_keys(0x780C5C3F,0x15E92272,0x2BA770C5); + #elif PACKETVER == 20161123 // 2016-11-23aRagexeRE + packet_keys(0x66FF559F,0x00D3535B,0x236246F7); + #elif PACKETVER == 20161130 // 2016-11-30bRagexeRE + packet_keys(0x2ED80296,0x0D837373,0x20266F9A); + #elif PACKETVER == 20161207 // 2016-12-07eRagexeRE + packet_keys(0x52D267AA,0x4FE42156,0x1292153E); + #elif PACKETVER == 20161214 // 2016-12-14bRagexeRE + packet_keys(0x4DDE217B,0x07863AE0,0x5B591656); + #elif PACKETVER == 20161221 // 2016-12-21aRagexeRE + packet_keys(0x69CB4F56,0x793C165E,0x673A2354); + #elif PACKETVER == 20161228 // 2016-12-28aRagexeRE + packet_keys(0x09366971,0x005672F1,0x6F3712AE); + #elif PACKETVER == 20170104 // 2017-01-04bRagexeRE + packet_keys(0x44416BC3,0x6C8D1817,0x072D75D5); + #elif PACKETVER == 20170111 // 2017-01-11aRagexeRE + packet_keys(0x19B637F9,0x0E9C378A,0x41673186); + #elif PACKETVER == 20170118 // 2017-01-18aRagexeRE + packet_keys(0x456B36EB,0x15EB34B0,0x18C42E43); + #elif PACKETVER == 20170125 // 2017-01-25aRagexeRE + packet_keys(0x066E04FE,0x3004224A,0x04FF0458); + #elif PACKETVER == 20170201 // 2017-02-01aRagexeRE + packet_keys(0x2011228E,0x00453005,0x628E7F0A); + #elif PACKETVER == 20170208 // 2017-02-08aRagexeRE + packet_keys(0x6A764E5F,0x0609570D,0x28AE07FA); + #elif PACKETVER == 20170215 // 2017-02-15aRagexeRE + packet_keys(0x50C01315,0x51012A42,0x679E16C3); + #elif PACKETVER == 20170222 // 2017-02-22aRagexeRE + packet_keys(0x5A242F2F,0x6C556187,0x73C022CB); + #elif PACKETVER == 20170228 // 2017-02-28aRagexeRE + packet_keys(0x771D4F2B,0x20EF1F4C,0x0D5135C8); + #elif PACKETVER == 20170308 // 2017-03-08bRagexeRE + packet_keys(0x653470A9,0x6B316A71,0x5C712C71); + #elif PACKETVER == 20170315 // 2017-03-15cRagexeRE + packet_keys(0x399A0856,0x56642A94,0x7F77157D); + #elif PACKETVER == 20170322 // 2017-03-22aRagexeRE + packet_keys(0x2050167B,0x01731233,0x40337033); + #elif PACKETVER == 20170329 // 2017-03-29dRagexeRE + packet_keys(0x18B31A80,0x1B0B1D56,0x16857D6A); + #elif PACKETVER == 20170405 // 2017-04-05bRagexeRE + packet_keys(0x1FDE7DAC,0x2F9F5B63,0x3F2062AF); + #elif PACKETVER == 20170412 // 2017-04-12aRagexeRE + packet_keys(0x39223393,0x5C847779,0x10217985); + #elif PACKETVER == 20170419 // 2017-04-19bRagexeRE + packet_keys(0x1F8F4B3F,0x2E481F03,0x39ED4178); + #elif PACKETVER == 20170426 // 2017-04-26dRagexeRE + packet_keys(0x167642A7,0x1DEC3D26,0x6D046D4C); + #elif PACKETVER == 20170502 // 2017-05-02dRagexeRE + packet_keys(0x05224194,0x466D4204,0x31F02EE0); + #elif PACKETVER == 20170517 // 2017-05-17aRagexeRE + packet_keys(0x2CC4749A,0x1FA954DC,0x72276857); + #elif PACKETVER == 20170524 // 2017-05-24aRagexeRE + packet_keys(0x0B4E03A6,0x2B93427C,0x583D4477); + #elif PACKETVER == 20170531 // 2017-05-31aRagexeRE + packet_keys(0x03FA5A97,0x20B802D5,0x339F1977); + #elif PACKETVER == 20170607 // 2017-06-07cRagexeRE + packet_keys(0x50564ACD,0x79CA4E15,0x405F4894); + #elif PACKETVER > 20110817 + #error Unsupported packet version. + #endif + + #undef packet_keys + +#endif /* _CLIF_OBFUSCATION_H_ */ diff --git a/src/map/clif_packetdb.h b/src/map/clif_packetdb.h new file mode 100644 index 0000000000..52bb6331fd --- /dev/null +++ b/src/map/clif_packetdb.h @@ -0,0 +1,2308 @@ +// Copyright (c) Athena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#ifndef _CLIF_PACKETDB_H_ +#define _CLIF_PACKETDB_H_ + + #define packet(cmd,length) packetdb_addpacket(cmd,length,NULL,0) + #define parseable_packet(cmd,length,func,...) packetdb_addpacket(cmd,length,func,__VA_ARGS__,0) + #define ack_packet(type,cmd,length,...) \ + packetdb_addpacket(cmd,length,NULL,__VA_ARGS__,0); \ + packet_db_ack[type] = cmd + + packet(0x0064,55); + packet(0x0065,17); + packet(0x0066,6); + packet(0x0067,37); + packet(0x0068,46); + packet(0x0069,-1); + packet(0x006a,23); + packet(0x006b,-1); + packet(0x006c,3); + packet(0x006d,108); + packet(0x006e,3); + packet(0x006f,2); + packet(0x0070,6); + packet(0x0071,28); + parseable_packet(0x0072,19,clif_parse_WantToConnection,2,6,10,14,18); + packet(0x0073,11); + packet(0x0074,3); + packet(0x0075,-1); + packet(0x0076,9); + packet(0x0077,5); + packet(0x0078,54); + packet(0x0079,53); + packet(0x007a,58); + packet(0x007b,60); + packet(0x007c,41); + parseable_packet(0x007d,2,clif_parse_LoadEndAck,0); + parseable_packet(0x007e,6,clif_parse_TickSend,2); + packet(0x007f,6); + packet(0x0080,7); + packet(0x0081,3); + packet(0x0082,2); + packet(0x0083,2); + packet(0x0084,2); + parseable_packet(0x0085,5,clif_parse_WalkToXY,2); + packet(0x0086,16); + packet(0x0087,12); + packet(0x0088,10); + parseable_packet(0x0089,7,clif_parse_ActionRequest,2,6); + packet(0x008a,29); + packet(0x008b,2); + parseable_packet(0x008c,-1,clif_parse_GlobalMessage,2,4); + packet(0x008d,-1); + packet(0x008e,-1); + //packet(0x008f,-1); + parseable_packet(0x0090,7,clif_parse_NpcClicked,2,6); + packet(0x0091,22); + packet(0x0092,28); + packet(0x0093,2); + parseable_packet(0x0094,6,clif_parse_GetCharNameRequest,2); + packet(0x0095,30); + parseable_packet(0x0096,-1,clif_parse_WisMessage,2,4,28); + packet(0x0097,-1); + packet(0x0098,3); + parseable_packet(0x0099,-1,clif_parse_Broadcast,2,4); + packet(0x009a,-1); + parseable_packet(0x009b,5,clif_parse_ChangeDir,2,4); + packet(0x009c,9); + packet(0x009d,17); + packet(0x009e,17); + parseable_packet(0x009f,6,clif_parse_TakeItem,2); + packet(0x00a0,23); + packet(0x00a1,6); + parseable_packet(0x00a2,6,clif_parse_DropItem,2,4); + packet(0x00a3,-1); + packet(0x00a4,-1); + packet(0x00a5,-1); + packet(0x00a6,-1); + parseable_packet(0x00a7,8,clif_parse_UseItem,2,4); + packet(0x00a8,7); + parseable_packet(0x00a9,6,clif_parse_EquipItem,2,4); + ack_packet(ZC_WEAR_EQUIP_ACK,0x00aa,7,2,4,6); + parseable_packet(0x00ab,4,clif_parse_UnequipItem,2); + packet(0x00ac,7); + //packet(0x00ad,-1); + packet(0x00ae,-1); + packet(0x00af,6); + packet(0x00b0,8); + packet(0x00b1,8); + parseable_packet(0x00b2,3,clif_parse_Restart,2); + packet(0x00b3,3); + packet(0x00b4,-1); + packet(0x00b5,6); + packet(0x00b6,6); + packet(0x00b7,-1); + parseable_packet(0x00b8,7,clif_parse_NpcSelectMenu,2,6); + parseable_packet(0x00b9,6,clif_parse_NpcNextClicked,2); + packet(0x00ba,2); + parseable_packet(0x00bb,5,clif_parse_StatusUp,2,4); + packet(0x00bc,6); + packet(0x00bd,44); + packet(0x00be,5); + parseable_packet(0x00bf,3,clif_parse_Emotion,2); + packet(0x00c0,7); + parseable_packet(0x00c1,2,clif_parse_HowManyConnections,0); + packet(0x00c2,6); + packet(0x00c3,8); + packet(0x00c4,6); + parseable_packet(0x00c5,7,clif_parse_NpcBuySellSelected,2,6); + packet(0x00c6,-1); + packet(0x00c7,-1); + parseable_packet(0x00c8,-1,clif_parse_NpcBuyListSend,2,4); + parseable_packet(0x00c9,-1,clif_parse_NpcSellListSend,2,4); + packet(0x00ca,3); + packet(0x00cb,3); + parseable_packet(0x00cc,6,clif_parse_GMKick,2); + packet(0x00cd,3); + parseable_packet(0x00ce,2,clif_parse_GMKickAll,0); + parseable_packet(0x00cf,27,clif_parse_PMIgnore,2,26); + parseable_packet(0x00d0,3,clif_parse_PMIgnoreAll,2); + packet(0x00d1,4); + packet(0x00d2,4); + parseable_packet(0x00d3,2,clif_parse_PMIgnoreList,0); + packet(0x00d4,-1); + parseable_packet(0x00d5,-1,clif_parse_CreateChatRoom,2,4,6,7,15); + packet(0x00d6,3); + packet(0x00d7,-1); + packet(0x00d8,6); + parseable_packet(0x00d9,14,clif_parse_ChatAddMember,2,6); + packet(0x00da,3); + packet(0x00db,-1); + packet(0x00dc,28); + packet(0x00dd,29); + parseable_packet(0x00de,-1,clif_parse_ChatRoomStatusChange,2,4,6,7,15); + packet(0x00df,-1); + parseable_packet(0x00e0,30,clif_parse_ChangeChatOwner,2,6); + packet(0x00e1,30); + parseable_packet(0x00e2,26,clif_parse_KickFromChat,2); + parseable_packet(0x00e3,2,clif_parse_ChatLeave,0); + parseable_packet(0x00e4,6,clif_parse_TradeRequest,2); + packet(0x00e5,26); + parseable_packet(0x00e6,3,clif_parse_TradeAck,2); + packet(0x00e7,3); + parseable_packet(0x00e8,8,clif_parse_TradeAddItem,2,4); + packet(0x00e9,19); + packet(0x00ea,5); + parseable_packet(0x00eb,2,clif_parse_TradeOk,0); + packet(0x00ec,3); + parseable_packet(0x00ed,2,clif_parse_TradeCancel,0); + packet(0x00ee,2); + parseable_packet(0x00ef,2,clif_parse_TradeCommit,0); + packet(0x00f0,3); + packet(0x00f1,2); + packet(0x00f2,6); + parseable_packet(0x00f3,8,clif_parse_MoveToKafra,2,4); + packet(0x00f4,21); + parseable_packet(0x00f5,8,clif_parse_MoveFromKafra,2,4); + packet(0x00f6,8); + parseable_packet(0x00f7,2,clif_parse_CloseKafra,0); + packet(0x00f8,2); + parseable_packet(0x00f9,26,clif_parse_CreateParty,2); + packet(0x00fa,3); + packet(0x00fb,-1); + parseable_packet(0x00fc,6,clif_parse_PartyInvite,2); + packet(0x00fd,27); + packet(0x00fe,30); + parseable_packet(0x00ff,10,clif_parse_ReplyPartyInvite,2,6); + parseable_packet(0x0100,2,clif_parse_LeaveParty,0); + packet(0x0101,6); + parseable_packet(0x0102,6,clif_parse_PartyChangeOption,2); + parseable_packet(0x0103,30,clif_parse_RemovePartyMember,2,6); + packet(0x0104,79); + packet(0x0105,31); + packet(0x0106,10); + packet(0x0107,10); + parseable_packet(0x0108,-1,clif_parse_PartyMessage,2,4); + packet(0x0109,-1); + packet(0x010a,4); + packet(0x010b,6); + packet(0x010c,6); + packet(0x010d,2); + packet(0x010e,11); + packet(0x010f,-1); + packet(0x0110,10); + packet(0x0111,39); + parseable_packet(0x0112,4,clif_parse_SkillUp,2); + parseable_packet(0x0113,10,clif_parse_UseSkillToId,2,4,6); + packet(0x0114,31); + packet(0x0115,35); + parseable_packet(0x0116,10,clif_parse_UseSkillToPos,2,4,6,8); + packet(0x0117,18); + parseable_packet(0x0118,2,clif_parse_StopAttack,0); + packet(0x0119,13); + packet(0x011a,15); + parseable_packet(0x011b,20,clif_parse_UseSkillMap,2,4); + packet(0x011c,68); + parseable_packet(0x011d,2,clif_parse_RequestMemo,0); + packet(0x011e,3); + packet(0x011f,16); + packet(0x0120,6); + packet(0x0121,14); + packet(0x0122,-1); + packet(0x0123,-1); + packet(0x0124,21); + packet(0x0125,8); + parseable_packet(0x0126,8,clif_parse_PutItemToCart,2,4); + parseable_packet(0x0127,8,clif_parse_GetItemFromCart,2,4); + parseable_packet(0x0128,8,clif_parse_MoveFromKafraToCart,2,4); + parseable_packet(0x0129,8,clif_parse_MoveToKafraFromCart,2,4); + parseable_packet(0x012a,2,clif_parse_RemoveOption,0); + packet(0x012b,2); + packet(0x012c,3); + packet(0x012d,4); + parseable_packet(0x012e,2,clif_parse_CloseVending,0); + parseable_packet(0x012f,-1,clif_parse_OpenVending,2,4,0,84); + parseable_packet(0x0130,6,clif_parse_VendingListReq,2); + packet(0x0131,86); + packet(0x0132,6); + packet(0x0133,-1); + parseable_packet(0x0134,-1,clif_parse_PurchaseReq,2,4,8); + packet(0x0135,7); + packet(0x0136,-1); + packet(0x0137,6); + packet(0x0138,3); + packet(0x0139,16); + packet(0x013a,4); + packet(0x013b,4); + packet(0x013c,4); + packet(0x013d,6); + packet(0x013e,24); + parseable_packet(0x013f,26,clif_parse_GM_Item_Monster,2); + parseable_packet(0x0140,22,clif_parse_MapMove,2,18,20); + packet(0x0141,14); + packet(0x0142,6); + parseable_packet(0x0143,10,clif_parse_NpcAmountInput,2,6); + packet(0x0144,23); + packet(0x0145,19); + parseable_packet(0x0146,6,clif_parse_NpcCloseClicked,2); + packet(0x0147,39); + packet(0x0148,8); + parseable_packet(0x0149,9,clif_parse_GMReqNoChat,2,6,7); + packet(0x014a,6); + packet(0x014b,27); + packet(0x014c,-1); + parseable_packet(0x014d,2,clif_parse_GuildCheckMaster,0); + packet(0x014e,6); + parseable_packet(0x014f,6,clif_parse_GuildRequestInfo,2); + packet(0x0150,110); + parseable_packet(0x0151,6,clif_parse_GuildRequestEmblem,2); + packet(0x0152,-1); + parseable_packet(0x0153,-1,clif_parse_GuildChangeEmblem,2,4); + packet(0x0154,-1); + parseable_packet(0x0155,-1,clif_parse_GuildChangeMemberPosition,2,4); + packet(0x0156,-1); + packet(0x0157,6); + packet(0x0158,-1); + parseable_packet(0x0159,54,clif_parse_GuildLeave,2,6,10,14); + packet(0x015a,66); + parseable_packet(0x015b,54,clif_parse_GuildExpulsion,2,6,10,14); + packet(0x015c,90); + parseable_packet(0x015d,42,clif_parse_GuildBreak,2); + packet(0x015e,6); + packet(0x015f,42); + packet(0x0160,-1); + parseable_packet(0x0161,-1,clif_parse_GuildChangePositionInfo,2,4); + packet(0x0162,-1); + packet(0x0163,-1); + packet(0x0164,-1); + parseable_packet(0x0165,30,clif_parse_CreateGuild,2,6); + packet(0x0166,-1); + packet(0x0167,3); + parseable_packet(0x0168,14,clif_parse_GuildInvite,2,6,10); + packet(0x0169,3); + packet(0x016a,30); + parseable_packet(0x016b,10,clif_parse_GuildReplyInvite,2,6); + packet(0x016c,43); + packet(0x016d,14); + parseable_packet(0x016e,186,clif_parse_GuildChangeNotice,2,6,66); + packet(0x016f,182); + parseable_packet(0x0170,14,clif_parse_GuildRequestAlliance,2,6,10); + packet(0x0171,30); + parseable_packet(0x0172,10,clif_parse_GuildReplyAlliance,2,6); + packet(0x0173,3); + packet(0x0174,-1); + packet(0x0175,6); + packet(0x0176,106); + packet(0x0177,-1); + parseable_packet(0x0178,4,clif_parse_ItemIdentify,2); + packet(0x0179,5); + parseable_packet(0x017a,4,clif_parse_UseCard,2); + packet(0x017b,-1); + parseable_packet(0x017c,6,clif_parse_InsertCard,2,4); + packet(0x017d,7); + parseable_packet(0x017e,-1,clif_parse_GuildMessage,2,4); + packet(0x017f,-1); + parseable_packet(0x0180,6,clif_parse_GuildOpposition,2); + packet(0x0181,3); + packet(0x0182,106); + parseable_packet(0x0183,10,clif_parse_GuildDelAlliance,2,6); + packet(0x0184,10); + packet(0x0185,34); + //packet(0x0186,-1); + packet(0x0187,6); + packet(0x0188,8); + packet(0x0189,4); + parseable_packet(0x018a,4,clif_parse_QuitGame,2); + packet(0x018b,4); + packet(0x018c,29); + packet(0x018d,-1); + parseable_packet(0x018e,10,clif_parse_ProduceMix,2,4,6,8); + packet(0x018f,6); + parseable_packet(0x0190,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + packet(0x0191,86); + packet(0x0192,24); + parseable_packet(0x0193,6,clif_parse_SolveCharName,2); + packet(0x0194,30); + packet(0x0195,102); + packet(0x0196,9); + parseable_packet(0x0197,4,clif_parse_ResetChar,2); + parseable_packet(0x0198,8,clif_parse_GMChangeMapType,2,4,6); + packet(0x0199,4); + packet(0x019a,14); + packet(0x019b,10); + parseable_packet(0x019c,-1,clif_parse_LocalBroadcast,2,4); + parseable_packet(0x019d,6,clif_parse_GMHide,2); + packet(0x019e,2); + parseable_packet(0x019f,6,clif_parse_CatchPet,2); + packet(0x01a0,3); + parseable_packet(0x01a1,3,clif_parse_PetMenu,2); + packet(0x01a2,35); + packet(0x01a3,5); + packet(0x01a4,11); + parseable_packet(0x01a5,26,clif_parse_ChangePetName,2); + packet(0x01a6,-1); + parseable_packet(0x01a7,4,clif_parse_SelectEgg,2); + packet(0x01a8,4); + parseable_packet(0x01a9,6,clif_parse_SendEmotion,2); + packet(0x01aa,10); + packet(0x01ab,12); + packet(0x01ac,6); + packet(0x01ad,-1); + parseable_packet(0x01ae,4,clif_parse_SelectArrow,2); + parseable_packet(0x01af,4,clif_parse_ChangeCart,2); + packet(0x01b0,11); + packet(0x01b1,7); + parseable_packet(0x01b2,-1,clif_parse_OpenVending,2,4,84,85); + packet(0x01b3,67); + packet(0x01b4,12); + packet(0x01b5,18); + packet(0x01b6,114); + packet(0x01b7,6); + packet(0x01b8,3); + packet(0x01b9,6); + parseable_packet(0x01ba,26,clif_parse_GMShift,2); + parseable_packet(0x01bb,26,clif_parse_GMShift,2); + parseable_packet(0x01bc,26,clif_parse_GMRecall,2); + parseable_packet(0x01bd,26,clif_parse_GMRecall,2); + packet(0x01be,2); + packet(0x01bf,3); + packet(0x01c0,2); + packet(0x01c1,14); + packet(0x01c2,10); + packet(0x01c3,-1); + packet(0x01c4,22); + packet(0x01c5,22); + packet(0x01c6,4); + packet(0x01c7,2); + packet(0x01c8,13); + packet(0x01c9,97); + //packet(0x01ca,-1); + packet(0x01cb,9); + packet(0x01cc,9); + packet(0x01cd,30); + parseable_packet(0x01ce,6,clif_parse_AutoSpell,2); + packet(0x01cf,28); + packet(0x01d0,8); + packet(0x01d1,14); + packet(0x01d2,10); + packet(0x01d3,35); + packet(0x01d4,6); + parseable_packet(0x01d5,-1,clif_parse_NpcStringInput,2,4,8); + packet(0x01d6,4); + packet(0x01d7,11); + packet(0x01d8,54); + packet(0x01d9,53); + packet(0x01da,60); + packet(0x01db,2); + packet(0x01dc,-1); + packet(0x01dd,47); + packet(0x01de,33); + parseable_packet(0x01df,6,clif_parse_GMReqAccountName,2); + packet(0x01e0,30); + packet(0x01e1,8); + packet(0x01e2,34); + packet(0x01e3,14); + packet(0x01e4,2); + packet(0x01e5,6); + packet(0x01e6,26); + parseable_packet(0x01e7,2,clif_parse_NoviceDoriDori,0); + parseable_packet(0x01e8,28,clif_parse_CreateParty2,2,26,27); + packet(0x01e9,81); + packet(0x01ea,6); + packet(0x01eb,10); + packet(0x01ec,26); + parseable_packet(0x01ed,2,clif_parse_NoviceExplosionSpirits,0); + packet(0x01ee,-1); + packet(0x01ef,-1); + packet(0x01f0,-1); + packet(0x01f1,-1); + packet(0x01f2,20); + packet(0x01f3,10); + packet(0x01f4,32); + packet(0x01f5,9); + packet(0x01f6,34); + parseable_packet(0x01f7,14,clif_parse_Adopt_reply,2,6,10); + packet(0x01f8,2); + parseable_packet(0x01f9,6,clif_parse_Adopt_request,2); + packet(0x01fa,48); + packet(0x01fb,56); + packet(0x01fc,-1); + parseable_packet(0x01fd,4,clif_parse_RepairItem,2); + packet(0x01fe,5); + packet(0x01ff,10); + packet(0x0200,26); + packet(0x0201,-1); + parseable_packet(0x0202,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0203,10,clif_parse_FriendsListRemove,2,6); + packet(0x0204,18); + packet(0x0205,26); + packet(0x0206,11); + packet(0x0207,34); + parseable_packet(0x0208,11,clif_parse_FriendsListReply,2,6,10); + packet(0x0209,36); + packet(0x020a,10); + //packet(0x020b,-1); + //packet(0x020c,-1); + packet(0x020d,-1); + packet(0x8b3,-1); + ack_packet(ZC_CLEAR_DIALOG,0x8d6,6,2); + +// 2004-07-05aSakexe +#if PACKETVER >= 20040705 + parseable_packet(0x0072,22,clif_parse_WantToConnection,5,9,13,17,21); + parseable_packet(0x0085,8,clif_parse_WalkToXY,5); + parseable_packet(0x00a7,13,clif_parse_UseItem,5,9); + parseable_packet(0x0113,15,clif_parse_UseSkillToId,4,9,11); + parseable_packet(0x0116,15,clif_parse_UseSkillToPos,4,9,11,13); + parseable_packet(0x0190,95,clif_parse_UseSkillToPosMoreInfo,4,9,11,13,15); + parseable_packet(0x0208,14,clif_parse_FriendsListReply,2,6,10); + packet(0x020e,24); +#endif + +// 2004-07-13aSakexe +#if PACKETVER >= 20040713 + parseable_packet(0x0072,39,clif_parse_WantToConnection,12,22,30,34,38); + parseable_packet(0x0085,9,clif_parse_WalkToXY,6); + parseable_packet(0x009b,13,clif_parse_ChangeDir,5,12); + parseable_packet(0x009f,10,clif_parse_TakeItem,6); + parseable_packet(0x00a7,17,clif_parse_UseItem,6,13); + parseable_packet(0x0113,19,clif_parse_UseSkillToId,7,9,15); + parseable_packet(0x0116,19,clif_parse_UseSkillToPos,7,9,15,17); + parseable_packet(0x0190,99,clif_parse_UseSkillToPosMoreInfo,7,9,15,17,19); +#endif + +// 2004-07-26aSakexe +#if PACKETVER >= 20040726 + parseable_packet(0x0072,14,clif_parse_DropItem,5,12); + parseable_packet(0x007e,33,clif_parse_WantToConnection,12,18,24,28,32); + parseable_packet(0x0085,20,clif_parse_UseSkillToId,7,12,16); + parseable_packet(0x0089,15,clif_parse_GetCharNameRequest,11); + parseable_packet(0x008c,23,clif_parse_UseSkillToPos,3,6,17,21); + parseable_packet(0x0094,10,clif_parse_TakeItem,6); + parseable_packet(0x009b,6,clif_parse_WalkToXY,3); + parseable_packet(0x009f,13,clif_parse_ChangeDir,5,12); + parseable_packet(0x00a2,103,clif_parse_UseSkillToPosMoreInfo,3,6,17,21,23); + parseable_packet(0x00a7,12,clif_parse_SolveCharName,8); + parseable_packet(0x00f3,-1,clif_parse_GlobalMessage,2,4); + parseable_packet(0x00f5,17,clif_parse_UseItem,6,12); + parseable_packet(0x00f7,10,clif_parse_TickSend,6); + parseable_packet(0x0113,16,clif_parse_MoveToKafra,5,12); + parseable_packet(0x0116,2,clif_parse_CloseKafra,0); + parseable_packet(0x0190,26,clif_parse_MoveFromKafra,10,22); + parseable_packet(0x0193,9,clif_parse_ActionRequest,3,8); +#endif + +// 2004-08-09aSakexe +#if PACKETVER >= 20040809 + parseable_packet(0x0072,17,clif_parse_DropItem,8,15); + parseable_packet(0x007e,37,clif_parse_WantToConnection,9,21,28,32,36); + parseable_packet(0x0085,26,clif_parse_UseSkillToId,11,18,22); + parseable_packet(0x0089,12,clif_parse_GetCharNameRequest,8); + parseable_packet(0x008c,40,clif_parse_UseSkillToPos,5,15,29,38); + parseable_packet(0x0094,13,clif_parse_TakeItem,9); + parseable_packet(0x009b,15,clif_parse_WalkToXY,12); + parseable_packet(0x009f,12,clif_parse_ChangeDir,7,11); + parseable_packet(0x00a2,120,clif_parse_UseSkillToPosMoreInfo,5,15,29,38,40); + parseable_packet(0x00a7,11,clif_parse_SolveCharName,7); + parseable_packet(0x00f5,24,clif_parse_UseItem,9,20); + parseable_packet(0x00f7,13,clif_parse_TickSend,9); + parseable_packet(0x0113,23,clif_parse_MoveToKafra,5,19); + parseable_packet(0x0190,26,clif_parse_MoveFromKafra,11,22); + parseable_packet(0x0193,18,clif_parse_ActionRequest,7,17); +#endif + +// 2004-08-16aSakexe +#if PACKETVER >= 20040816 + parseable_packet(0x0212,26,clif_parse_GMRc,2); + parseable_packet(0x0213,26,clif_parse_Check,2); + packet(0x0214,42); +#endif + +// 2004-08-17aSakexe +#if PACKETVER >= 20040817 + parseable_packet(0x020f,10,clif_parse_PVPInfo,2,6); + packet(0x0210,22); +#endif + +// 2004-09-06aSakexe +#if PACKETVER >= 20040906 + parseable_packet(0x0072,20,clif_parse_UseItem,9,20); + parseable_packet(0x007e,19,clif_parse_MoveToKafra,3,15); + parseable_packet(0x0085,23,clif_parse_ActionRequest,9,22); + parseable_packet(0x0089,9,clif_parse_WalkToXY,6); + parseable_packet(0x008c,105,clif_parse_UseSkillToPosMoreInfo,10,14,18,23,25); + parseable_packet(0x0094,17,clif_parse_DropItem,6,15); + parseable_packet(0x009b,14,clif_parse_GetCharNameRequest,10); + parseable_packet(0x009f,-1,clif_parse_GlobalMessage,2,4); + parseable_packet(0x00a2,14,clif_parse_SolveCharName,10); + parseable_packet(0x00a7,25,clif_parse_UseSkillToPos,10,14,18,23); + parseable_packet(0x00f3,10,clif_parse_ChangeDir,4,9); + parseable_packet(0x00f5,34,clif_parse_WantToConnection,7,15,25,29,33); + parseable_packet(0x00f7,2,clif_parse_CloseKafra,0); + parseable_packet(0x0113,11,clif_parse_TakeItem,7); + parseable_packet(0x0116,11,clif_parse_TickSend,7); + parseable_packet(0x0190,22,clif_parse_UseSkillToId,9,15,18); + parseable_packet(0x0193,17,clif_parse_MoveFromKafra,3,13); +#endif + +// 2004-09-20aSakexe +#if PACKETVER >= 20040920 + parseable_packet(0x0072,18,clif_parse_UseItem,10,14); + parseable_packet(0x007e,25,clif_parse_MoveToKafra,6,21); + parseable_packet(0x0085,9,clif_parse_ActionRequest,3,8); + parseable_packet(0x0089,14,clif_parse_WalkToXY,11); + parseable_packet(0x008c,109,clif_parse_UseSkillToPosMoreInfo,16,20,23,27,29); + parseable_packet(0x0094,19,clif_parse_DropItem,12,17); + parseable_packet(0x009b,10,clif_parse_GetCharNameRequest,6); + parseable_packet(0x00a2,10,clif_parse_SolveCharName,6); + parseable_packet(0x00a7,29,clif_parse_UseSkillToPos,6,20,23,27); + parseable_packet(0x00f3,18,clif_parse_ChangeDir,8,17); + parseable_packet(0x00f5,32,clif_parse_WantToConnection,10,17,23,27,31); + parseable_packet(0x0113,14,clif_parse_TakeItem,10); + parseable_packet(0x0116,14,clif_parse_TickSend,10); + parseable_packet(0x0190,14,clif_parse_UseSkillToId,4,7,10); + parseable_packet(0x0193,12,clif_parse_MoveFromKafra,4,8); +#endif + +// 2004-10-05aSakexe +#if PACKETVER >= 20041005 + parseable_packet(0x0072,17,clif_parse_UseItem,6,13); + parseable_packet(0x007e,16,clif_parse_MoveToKafra,5,12); + parseable_packet(0x0089,6,clif_parse_WalkToXY,3); + parseable_packet(0x008c,103,clif_parse_UseSkillToPosMoreInfo,2,6,17,21,23); + parseable_packet(0x0094,14,clif_parse_DropItem,5,12); + parseable_packet(0x009b,15,clif_parse_GetCharNameRequest,11); + parseable_packet(0x00a2,12,clif_parse_SolveCharName,8); + parseable_packet(0x00a7,23,clif_parse_UseSkillToPos,3,6,17,21); + parseable_packet(0x00f3,13,clif_parse_ChangeDir,5,12); + parseable_packet(0x00f5,33,clif_parse_WantToConnection,12,18,24,28,32); + parseable_packet(0x0113,10,clif_parse_TakeItem,6); + parseable_packet(0x0116,10,clif_parse_TickSend,6); + parseable_packet(0x0190,20,clif_parse_UseSkillToId,7,12,16); + parseable_packet(0x0193,26,clif_parse_MoveFromKafra,10,22); +#endif + +// 2004-10-25aSakexe +#if PACKETVER >= 20041025 + parseable_packet(0x0072,13,clif_parse_UseItem,5,9); + parseable_packet(0x007e,13,clif_parse_MoveToKafra,6,9); + parseable_packet(0x0085,15,clif_parse_ActionRequest,4,14); + parseable_packet(0x008c,108,clif_parse_UseSkillToPosMoreInfo,6,9,23,26,28); + parseable_packet(0x0094,12,clif_parse_DropItem,6,10); + parseable_packet(0x009b,10,clif_parse_GetCharNameRequest,6); + parseable_packet(0x00a2,16,clif_parse_SolveCharName,12); + parseable_packet(0x00a7,28,clif_parse_UseSkillToPos,6,9,23,26); + parseable_packet(0x00f3,15,clif_parse_ChangeDir,6,14); + parseable_packet(0x00f5,29,clif_parse_WantToConnection,5,14,20,24,28); + parseable_packet(0x0113,9,clif_parse_TakeItem,5); + parseable_packet(0x0116,9,clif_parse_TickSend,5); + parseable_packet(0x0190,26,clif_parse_UseSkillToId,4,10,22); + parseable_packet(0x0193,22,clif_parse_MoveFromKafra,12,18); +#endif + +// 2004-11-01aSakexe +#if PACKETVER >= 20041101 + packet(0x0084,-1); + packet(0x0215,6); +#endif + +// 2004-11-08aSakexe +#if PACKETVER >= 20041108 + packet(0x0084,2); + packet(0x0216,6); + parseable_packet(0x0217,2,clif_parse_Blacksmith,0); + parseable_packet(0x0218,2,clif_parse_Alchemist,0); + packet(0x0219,282); + packet(0x021a,282); + packet(0x021b,10); + packet(0x021c,10); +#endif + +// 2004-11-15aSakexe +#if PACKETVER >= 20041115 + parseable_packet(0x021d,6,clif_parse_LessEffect,2); +#endif + +// 2004-11-29aSakexe +#if PACKETVER >= 20041129 + parseable_packet(0x0072,22,clif_parse_UseSkillToId,8,12,18); + parseable_packet(0x007e,30,clif_parse_UseSkillToPos,4,9,22,28); + parseable_packet(0x0085,-1,clif_parse_GlobalMessage,2,4); + parseable_packet(0x0089,7,clif_parse_TickSend,3); + parseable_packet(0x008c,13,clif_parse_GetCharNameRequest,9); + parseable_packet(0x0094,14,clif_parse_MoveToKafra,4,10); + parseable_packet(0x009b,2,clif_parse_CloseKafra,0); + parseable_packet(0x009f,18,clif_parse_ActionRequest,6,17); + parseable_packet(0x00a2,7,clif_parse_TakeItem,3); + parseable_packet(0x00a7,7,clif_parse_WalkToXY,4); + parseable_packet(0x00f3,8,clif_parse_ChangeDir,3,7); + parseable_packet(0x00f5,29,clif_parse_WantToConnection,3,10,20,24,28); + parseable_packet(0x00f7,14,clif_parse_SolveCharName,10); + parseable_packet(0x0113,110,clif_parse_UseSkillToPosMoreInfo,4,9,22,28,30); + parseable_packet(0x0116,12,clif_parse_DropItem,4,10); + parseable_packet(0x0190,15,clif_parse_UseItem,3,11); + parseable_packet(0x0193,21,clif_parse_MoveFromKafra,4,17); + packet(0x0221,-1); + parseable_packet(0x0222,6,clif_parse_WeaponRefine,2); + packet(0x0223,8); +#endif + +// 2004-12-13aSakexe +#if PACKETVER >= 20041213 + //skipped: many packets being set to -1 + packet(0x0066,3); + packet(0x0070,3); + packet(0x01ca,3); + packet(0x021e,6); + packet(0x021f,66); + packet(0x0220,10); +#endif + +// 2005-01-10bSakexe +#if PACKETVER >= 20050110 + parseable_packet(0x0072,26,clif_parse_UseSkillToId,8,16,22); + parseable_packet(0x007e,114,clif_parse_UseSkillToPosMoreInfo,10,18,22,32,34); + parseable_packet(0x0085,23,clif_parse_ChangeDir,12,22); + parseable_packet(0x0089,9,clif_parse_TickSend,5); + parseable_packet(0x008c,8,clif_parse_GetCharNameRequest,4); + parseable_packet(0x0094,20,clif_parse_MoveToKafra,10,16); + parseable_packet(0x009b,32,clif_parse_WantToConnection,3,12,23,27,31); + parseable_packet(0x009f,17,clif_parse_UseItem,5,13); + parseable_packet(0x00a2,11,clif_parse_SolveCharName,7); + parseable_packet(0x00a7,13,clif_parse_WalkToXY,10); + parseable_packet(0x00f3,-1,clif_parse_GlobalMessage,2,4); + parseable_packet(0x00f5,9,clif_parse_TakeItem,5); + parseable_packet(0x00f7,21,clif_parse_MoveFromKafra,11,17); + parseable_packet(0x0113,34,clif_parse_UseSkillToPos,10,18,22,32); + parseable_packet(0x0116,20,clif_parse_DropItem,15,18); + parseable_packet(0x0190,20,clif_parse_ActionRequest,9,19); + parseable_packet(0x0193,2,clif_parse_CloseKafra,0); +#endif + +// 2005-03-28aSakexe +#if PACKETVER >= 20050328 + packet(0x0224,10); + parseable_packet(0x0225,2,clif_parse_Taekwon,0); + packet(0x0226,282); +#endif + +// 2005-04-04aSakexe +#if PACKETVER >= 20050404 + packet(0x0227,18); + packet(0x0228,18); +#endif + +// 2005-04-11aSakexe +#if PACKETVER >= 20050411 + packet(0x0229,15); + packet(0x022a,58); + packet(0x022b,57); + packet(0x022c,64); +#endif + +// 2005-04-25aSakexe +#if PACKETVER >= 20050425 + parseable_packet(0x022d,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0232,9,clif_parse_HomMoveTo,2,6); + parseable_packet(0x0233,11,clif_parse_HomAttack,2,6,10); + parseable_packet(0x0234,6,clif_parse_HomMoveToMaster,2); +#endif + +// 2005-05-09aSakexe +#if PACKETVER >= 20050509 + parseable_packet(0x0072,25,clif_parse_UseSkillToId,6,10,21); + parseable_packet(0x007e,102,clif_parse_UseSkillToPosMoreInfo,5,9,12,20,22); + parseable_packet(0x0085,11,clif_parse_ChangeDir,7,10); + parseable_packet(0x0089,8,clif_parse_TickSend,4); + parseable_packet(0x008c,11,clif_parse_GetCharNameRequest,7); + parseable_packet(0x0094,14,clif_parse_MoveToKafra,7,10); + parseable_packet(0x009b,26,clif_parse_WantToConnection,4,9,17,21,25); + parseable_packet(0x009f,14,clif_parse_UseItem,4,10); + parseable_packet(0x00a2,15,clif_parse_SolveCharName,11); + parseable_packet(0x00a7,8,clif_parse_WalkToXY,5); + parseable_packet(0x00f5,8,clif_parse_TakeItem,4); + parseable_packet(0x00f7,22,clif_parse_MoveFromKafra,14,18); + parseable_packet(0x0113,22,clif_parse_UseSkillToPos,5,9,12,20); + parseable_packet(0x0116,10,clif_parse_DropItem,5,8); + parseable_packet(0x0190,19,clif_parse_ActionRequest,5,18); +#endif + +// 2005-05-23aSakexe +#if PACKETVER >= 20050523 + packet(0x022e,69); + packet(0x0230,12); +#endif + +// 2005-05-30aSakexe +#if PACKETVER >= 20050530 + packet(0x022e,71); + packet(0x0235,-1); + packet(0x0236,10); + parseable_packet(0x0237,2,clif_parse_RankingPk,0); + packet(0x0238,282); +#endif + +// 2005-05-31aSakexe +#if PACKETVER >= 20050531 + packet(0x0216,2); + packet(0x0239,11); +#endif + +// 2005-06-08aSakexe +#if PACKETVER >= 20050608 + packet(0x0216,6); + parseable_packet(0x0217,2,clif_parse_Blacksmith,0); + packet(0x022f,5); + parseable_packet(0x0231,26,clif_parse_ChangeHomunculusName,2); + packet(0x023a,4); + parseable_packet(0x023b,36,clif_parse_StoragePassword,2,4,20); + packet(0x023c,6); +#endif + +// 2005-06-22aSakexe +#if PACKETVER >= 20050622 + packet(0x022e,71); +#endif + +// 2005-06-28aSakexe +#if PACKETVER >= 20050628 + parseable_packet(0x0072,34,clif_parse_UseSkillToId,6,17,30); + parseable_packet(0x007e,113,clif_parse_UseSkillToPosMoreInfo,12,15,18,31,33); + parseable_packet(0x0085,17,clif_parse_ChangeDir,8,16); + parseable_packet(0x0089,13,clif_parse_TickSend,9); + parseable_packet(0x008c,8,clif_parse_GetCharNameRequest,4); + parseable_packet(0x0094,31,clif_parse_MoveToKafra,16,27); + parseable_packet(0x009b,32,clif_parse_WantToConnection,9,15,23,27,31); + parseable_packet(0x009f,19,clif_parse_UseItem,9,15); + parseable_packet(0x00a2,9,clif_parse_SolveCharName,5); + parseable_packet(0x00a7,11,clif_parse_WalkToXY,8); + parseable_packet(0x00f5,13,clif_parse_TakeItem,9); + parseable_packet(0x00f7,18,clif_parse_MoveFromKafra,11,14); + parseable_packet(0x0113,33,clif_parse_UseSkillToPos,12,15,18,31); + parseable_packet(0x0116,12,clif_parse_DropItem,3,10); + parseable_packet(0x0190,24,clif_parse_ActionRequest,11,23); + packet(0x0216,-1); + packet(0x023d,-1); + packet(0x023e,4); +#endif + +// 2005-07-18aSakexe +#if PACKETVER >= 20050718 + parseable_packet(0x0072,19,clif_parse_UseSkillToId,5,11,15); + parseable_packet(0x007e,110,clif_parse_UseSkillToPosMoreInfo,9,15,23,28,30); + parseable_packet(0x0085,11,clif_parse_ChangeDir,6,10); + parseable_packet(0x0089,7,clif_parse_TickSend,3); + parseable_packet(0x008c,11,clif_parse_GetCharNameRequest,7); + parseable_packet(0x0094,21,clif_parse_MoveToKafra,12,17); + parseable_packet(0x009b,31,clif_parse_WantToConnection,3,13,22,26,30); + parseable_packet(0x009f,12,clif_parse_UseItem,3,8); + parseable_packet(0x00a2,18,clif_parse_SolveCharName,14); + parseable_packet(0x00a7,15,clif_parse_WalkToXY,12); + parseable_packet(0x00f5,7,clif_parse_TakeItem,3); + parseable_packet(0x00f7,13,clif_parse_MoveFromKafra,5,9); + parseable_packet(0x0113,30,clif_parse_UseSkillToPos,9,15,23,28); + parseable_packet(0x0116,12,clif_parse_DropItem,6,10); + parseable_packet(0x0190,21,clif_parse_ActionRequest,5,20); + packet(0x0216,6); + parseable_packet(0x023f,2,clif_parse_Mail_refreshinbox,0); + packet(0x0240,8); + parseable_packet(0x0241,6,clif_parse_Mail_read,2); + packet(0x0242,-1); + parseable_packet(0x0243,6,clif_parse_Mail_delete,2); + parseable_packet(0x0244,6,clif_parse_Mail_getattach,2); + packet(0x0245,7); + parseable_packet(0x0246,4,clif_parse_Mail_winopen,2); + parseable_packet(0x0247,8,clif_parse_Mail_setattach,2,4); + packet(0x0248,68); + packet(0x0249,3); + packet(0x024a,70); + parseable_packet(0x024b,4,clif_parse_Auction_cancelreg,2); + parseable_packet(0x024c,8,clif_parse_Auction_setitem,2,4); + packet(0x024d,14); + parseable_packet(0x024e,6,clif_parse_Auction_cancel,2); + parseable_packet(0x024f,10,clif_parse_Auction_bid,2,6); + packet(0x0250,3); + packet(0x0251,2); + packet(0x0252,-1); +#endif + +// 2005-07-19bSakexe +#if PACKETVER >= 20050719 + parseable_packet(0x0072,34,clif_parse_UseSkillToId,6,17,30); + parseable_packet(0x007e,113,clif_parse_UseSkillToPosMoreInfo,12,15,18,31,33); + parseable_packet(0x0085,17,clif_parse_ChangeDir,8,16); + parseable_packet(0x0089,13,clif_parse_TickSend,9); + parseable_packet(0x008c,8,clif_parse_GetCharNameRequest,4); + parseable_packet(0x0094,31,clif_parse_MoveToKafra,16,27); + parseable_packet(0x009b,32,clif_parse_WantToConnection,9,15,23,27,31); + parseable_packet(0x009f,19,clif_parse_UseItem,9,15); + parseable_packet(0x00a2,9,clif_parse_SolveCharName,5); + parseable_packet(0x00a7,11,clif_parse_WalkToXY,8); + parseable_packet(0x00f5,13,clif_parse_TakeItem,9); + parseable_packet(0x00f7,18,clif_parse_MoveFromKafra,11,14); + parseable_packet(0x0113,33,clif_parse_UseSkillToPos,12,15,18,31); + parseable_packet(0x0116,12,clif_parse_DropItem,3,10); + parseable_packet(0x0190,24,clif_parse_ActionRequest,11,23); +#endif + +// 2005-08-01aSakexe +#if PACKETVER >= 20050801 + packet(0x0245,3); + packet(0x0251,4); +#endif + +// 2005-08-08aSakexe +#if PACKETVER >= 20050808 + parseable_packet(0x024d,12,clif_parse_Auction_register,2,6,10); + packet(0x024e,4); +#endif + +// 2005-08-17aSakexe +#if PACKETVER >= 20050817 + packet(0x0253,3); + parseable_packet(0x0254,3,clif_parse_FeelSaveOk,2); +#endif + +// 2005-08-29aSakexe +#if PACKETVER >= 20050829 + packet(0x0240,-1); + parseable_packet(0x0248,-1,clif_parse_Mail_send,2,4,28,68,69); + packet(0x0255,5); + packet(0x0256,-1); + packet(0x0257,8); +#endif + +// 2005-09-12bSakexe +#if PACKETVER >= 20050912 + packet(0x0256,5); + packet(0x0258,2); + packet(0x0259,3); +#endif + +// 2005-10-10aSakexe +#if PACKETVER >= 20051010 + packet(0x020e,32); + packet(0x025a,-1); + parseable_packet(0x025b,6,clif_parse_Cooking,2,4); +#endif + +// 2005-10-13aSakexe +#if PACKETVER >= 20051013 + packet(0x007a,6); + packet(0x0251,32); + parseable_packet(0x025c,4,clif_parse_Auction_buysell,2); +#endif + +// 2005-10-17aSakexe +#if PACKETVER >= 20051017 + packet(0x007a,58); + parseable_packet(0x025d,6,clif_parse_Auction_close,2); + packet(0x025e,4); +#endif + +// 2005-10-24aSakexe +#if PACKETVER >= 20051024 + packet(0x025f,6); + packet(0x0260,6); +#endif + +// 2005-11-07aSakexe +#if PACKETVER >= 20051107 + parseable_packet(0x024e,6,clif_parse_Auction_cancel,2); + parseable_packet(0x0251,34,clif_parse_Auction_search,2,4,8,32); +#endif + +// 2006-01-09aSakexe +#if PACKETVER >= 20060109 + packet(0x0261,11); + packet(0x0262,11); + packet(0x0263,11); + packet(0x0264,20); + packet(0x0265,20); + packet(0x0266,30); + packet(0x0267,4); + packet(0x0268,4); + packet(0x0269,4); + packet(0x026a,4); + packet(0x026b,4); + packet(0x026c,4); + packet(0x026d,4); + packet(0x026f,2); + packet(0x0270,2); + packet(0x0271,38); + packet(0x0272,44); +#endif + +// 2006-01-26aSakexe +#if PACKETVER >= 20060126 + packet(0x0271,40); +#endif + +// 2006-03-06aSakexe +#if PACKETVER >= 20060306 + packet(0x0273,6); + packet(0x0274,8); +#endif + +// 2006-03-13aSakexe +#if PACKETVER >= 20060313 + parseable_packet(0x0273,30,clif_parse_Mail_return,2,6); +#endif + +// 2006-03-27aSakexe +#if PACKETVER >= 20060327 + parseable_packet(0x0072,26,clif_parse_UseSkillToId,11,18,22); + parseable_packet(0x007e,120,clif_parse_UseSkillToPosMoreInfo,5,15,29,38,40); + parseable_packet(0x0085,12,clif_parse_ChangeDir,7,11); + //parseable_packet(0x0089,13,clif_parse_TickSend,9); + parseable_packet(0x008c,12,clif_parse_GetCharNameRequest,8); + parseable_packet(0x0094,23,clif_parse_MoveToKafra,5,19); + parseable_packet(0x009b,37,clif_parse_WantToConnection,9,21,28,32,36); + parseable_packet(0x009f,24,clif_parse_UseItem,9,20); + parseable_packet(0x00a2,11,clif_parse_SolveCharName,7); + parseable_packet(0x00a7,15,clif_parse_WalkToXY,12); + parseable_packet(0x00f5,13,clif_parse_TakeItem,9); + parseable_packet(0x00f7,26,clif_parse_MoveFromKafra,11,22); + parseable_packet(0x0113,40,clif_parse_UseSkillToPos,5,15,29,38); + parseable_packet(0x0116,17,clif_parse_DropItem,8,15); + parseable_packet(0x0190,18,clif_parse_ActionRequest,7,17); +#endif + +// 2006-10-23aSakexe +#if PACKETVER >= 20061023 + packet(0x006d,110); +#endif + +//2006-04-24aSakexe to 2007-01-02aSakexe +#if PACKETVER >= 20060424 + packet(0x023e,8); + packet(0x0277,84); + packet(0x0278,2); + packet(0x0279,2); + packet(0x027a,-1); + packet(0x027b,14); + packet(0x027c,60); + packet(0x027d,62); + packet(0x027e,-1); + packet(0x027f,8); + packet(0x0280,12); + packet(0x0281,4); + packet(0x0282,284); + packet(0x0283,6); + packet(0x0284,14); + packet(0x0285,6); + packet(0x0286,4); + packet(0x0287,-1); + packet(0x0288,6); + packet(0x0289,8); + packet(0x028a,18); + packet(0x028b,-1); + packet(0x028c,46); + packet(0x028d,34); + packet(0x028e,4); + packet(0x028f,6); + packet(0x0290,4); + packet(0x0291,4); + parseable_packet(0x0292,2,clif_parse_AutoRevive,0); + packet(0x0293,70); + packet(0x0294,10); + packet(0x0295,-1); + packet(0x0296,-1); + packet(0x0297,-1); + packet(0x0298,8); + packet(0x0299,6); + packet(0x029a,27); + packet(0x029c,66); + packet(0x029d,-1); + packet(0x029e,11); + parseable_packet(0x029f,3,clif_parse_mercenary_action,2); + packet(0x02a0,-1); + packet(0x02a1,-1); + packet(0x02a2,8); +#endif + +// 2007-01-08aSakexe +#if PACKETVER >= 20070108 + parseable_packet(0x0072,30,clif_parse_UseSkillToId,10,14,26); + parseable_packet(0x007e,120,clif_parse_UseSkillToPosMoreInfo,10,19,23,38,40); + parseable_packet(0x0085,14,clif_parse_ChangeDir,10,13); + parseable_packet(0x0089,11,clif_parse_TickSend,7); + parseable_packet(0x008c,17,clif_parse_GetCharNameRequest,13); + parseable_packet(0x0094,17,clif_parse_MoveToKafra,4,13); + parseable_packet(0x009b,35,clif_parse_WantToConnection,7,21,26,30,34); + parseable_packet(0x009f,21,clif_parse_UseItem,7,17); + parseable_packet(0x00a2,10,clif_parse_SolveCharName,6); + parseable_packet(0x00a7,8,clif_parse_WalkToXY,5); + parseable_packet(0x00f5,11,clif_parse_TakeItem,7); + parseable_packet(0x00f7,15,clif_parse_MoveFromKafra,3,11); + parseable_packet(0x0113,40,clif_parse_UseSkillToPos,10,19,23,38); + parseable_packet(0x0116,19,clif_parse_DropItem,11,17); + parseable_packet(0x0190,10,clif_parse_ActionRequest,4,9); +#endif + +// 2007-01-22aSakexe +#if PACKETVER >= 20070122 + packet(0x02a3,18); + packet(0x02a4,2); +#endif + +// 2007-01-29aSakexe +#if PACKETVER >= 20070129 + packet(0x029b,72); + packet(0x02a3,-1); + packet(0x02a4,-1); + packet(0x02a5,8); +#endif + +// 2007-02-05aSakexe +#if PACKETVER >= 20070205 + packet(0x02aa,4); + packet(0x02ab,36); + packet(0x02ac,6); +#endif + +// 2007-02-12aSakexe +#if PACKETVER >= 20070212 + parseable_packet(0x0072,25,clif_parse_UseSkillToId,6,10,21); + parseable_packet(0x007e,102,clif_parse_UseSkillToPosMoreInfo,5,9,12,20,22); + parseable_packet(0x0085,11,clif_parse_ChangeDir,7,10); + parseable_packet(0x0089,8,clif_parse_TickSend,4); + parseable_packet(0x008c,11,clif_parse_GetCharNameRequest,7); + parseable_packet(0x0094,14,clif_parse_MoveToKafra,7,10); + parseable_packet(0x009b,26,clif_parse_WantToConnection,4,9,17,21,25); + parseable_packet(0x009f,14,clif_parse_UseItem,4,10); + parseable_packet(0x00a2,15,clif_parse_SolveCharName,11); + //parseable_packet(0x00a7,8,clif_parse_WalkToXY,5); + parseable_packet(0x00f5,8,clif_parse_TakeItem,4); + parseable_packet(0x00f7,22,clif_parse_MoveFromKafra,14,18); + parseable_packet(0x0113,22,clif_parse_UseSkillToPos,5,9,12,20); + parseable_packet(0x0116,10,clif_parse_DropItem,5,8); + parseable_packet(0x0190,19,clif_parse_ActionRequest,5,18); +#endif + +// 2007-05-07aSakexe +#if PACKETVER >= 20070507 + parseable_packet(0x01fd,15,clif_parse_RepairItem,2,4,6,7,9,11,13); +#endif + +// 2007-02-27aSakexe to 2007-10-02aSakexe +#if PACKETVER >= 20070227 + parseable_packet(0x0288,10,clif_parse_cashshop_buy,2,4,6); + packet(0x0289,12); + packet(0x02a6,22); + packet(0x02a7,22); + packet(0x02a8,162); + packet(0x02a9,58); + packet(0x02ad,8); + packet(0x02b0,85); + packet(0x02b1,-1); + packet(0x02b2,-1); + packet(0x02b3,107); + packet(0x02b4,6); + packet(0x02b5,-1); + parseable_packet(0x02b6,7,clif_parse_questStateAck,2,6); + packet(0x02b7,7); + packet(0x02b8,22); + packet(0x02b9,191); + parseable_packet(0x02ba,11,clif_parse_Hotkey,2,4,5,9); + packet(0x02bb,8); + packet(0x02bc,6); + packet(0x02bf,10); + packet(0x02c0,2); + packet(0x02c1,-1); + packet(0x02c2,-1); + parseable_packet(0x02c4,26,clif_parse_PartyInvite2,2); + packet(0x02c5,30); + packet(0x02c6,30); + parseable_packet(0x02c7,7,clif_parse_ReplyPartyInvite2,2,6); + parseable_packet(0x02c8,3,clif_parse_PartyTick,2); + packet(0x02c9,3); + packet(0x02ca,3); + packet(0x02cb,20); + packet(0x02cc,4); + packet(0x02cd,26); + packet(0x02ce,10); + packet(0x02cf,6); + packet(0x02d0,-1); + packet(0x02d1,-1); + packet(0x02d2,-1); + ack_packet(ZC_NOTIFY_BIND_ON_EQUIP,0x02d3,4,2); + packet(0x02d4,29); + packet(0x02d5,2); + parseable_packet(0x02d6,6,clif_parse_ViewPlayerEquip,2); + packet(0x02d7,-1); + parseable_packet(0x02d8,10,clif_parse_EquipTick,2,6); + packet(0x02d9,10); + packet(0x02da,3); + parseable_packet(0x02db,-1,clif_parse_BattleChat,2,4); + packet(0x02dc,-1); + packet(0x02dd,32); + packet(0x02de,6); + packet(0x02df,36); + packet(0x02e0,34); +#endif + +// 2007-10-23aSakexe +#if PACKETVER >= 20071023 + packet(0x02cb,65); + packet(0x02cd,71); +#endif + +// 2007-11-06aSakexe +#if PACKETVER >= 20071106 + packet(0x0078,55); + packet(0x007c,42); + packet(0x022c,65); + packet(0x029b,80); +#endif + +// 2007-11-13aSakexe +#if PACKETVER >= 20071113 + packet(0x02e1,33); +#endif + +// 2007-11-20aSakexe +#if PACKETVER >= 20071120 + //packet(0x01df,10 <- ???); + packet(0x02e2,14); + packet(0x02e3,25); + packet(0x02e4,8); + packet(0x02e5,8); + packet(0x02e6,6); +#endif + +// 2007-11-27aSakexe +#if PACKETVER >= 20071127 + packet(0x02e7,-1); +#endif + +// 2008-01-02aSakexe +#if PACKETVER >= 20080102 + parseable_packet(0x01df,6,clif_parse_GMReqAccountName,2); + packet(0x02e8,-1); + packet(0x02e9,-1); + packet(0x02ea,-1); + packet(0x02eb,13); + packet(0x02ec,67); + packet(0x02ed,59); + packet(0x02ee,60); + packet(0x02ef,8); +#endif + +// 2008-03-18aSakexe +#if PACKETVER >= 20080318 + packet(0x02bf,-1); + packet(0x02c0,-1); + packet(0x02f0,10); + parseable_packet(0x02f1,2,clif_parse_progressbar,0); + packet(0x02f2,2); +#endif + +// 2008-03-25bSakexe +#if PACKETVER >= 20080325 + packet(0x02f3,-1); + packet(0x02f4,-1); + packet(0x02f5,-1); + packet(0x02f6,-1); + packet(0x02f7,-1); + packet(0x02f8,-1); + packet(0x02f9,-1); + packet(0x02fa,-1); + packet(0x02fb,-1); + packet(0x02fc,-1); + packet(0x02fd,-1); + packet(0x02fe,-1); + packet(0x02ff,-1); + packet(0x0300,-1); +#endif + +// 2008-04-01aSakexe +#if PACKETVER >= 20080401 + packet(0x0301,-1); + packet(0x0302,-1); + packet(0x0303,-1); + packet(0x0304,-1); + packet(0x0305,-1); + packet(0x0306,-1); + packet(0x0307,-1); + packet(0x0308,-1); + packet(0x0309,-1); + packet(0x030a,-1); + packet(0x030b,-1); + packet(0x030c,-1); + packet(0x030d,-1); + packet(0x030e,-1); + packet(0x030f,-1); + packet(0x0310,-1); + packet(0x0311,-1); + packet(0x0312,-1); + packet(0x0313,-1); + packet(0x0314,-1); + packet(0x0315,-1); + packet(0x0316,-1); + packet(0x0317,-1); + packet(0x0318,-1); + packet(0x0319,-1); + packet(0x031a,-1); + packet(0x031b,-1); + packet(0x031c,-1); + packet(0x031d,-1); + packet(0x031e,-1); + packet(0x031f,-1); + packet(0x0320,-1); + packet(0x0321,-1); + packet(0x0322,-1); + packet(0x0323,-1); + packet(0x0324,-1); + packet(0x0325,-1); + packet(0x0326,-1); + packet(0x0327,-1); + packet(0x0328,-1); + packet(0x0329,-1); + packet(0x032a,-1); + packet(0x032b,-1); + packet(0x032c,-1); + packet(0x032d,-1); + packet(0x032e,-1); + packet(0x032f,-1); + packet(0x0330,-1); + packet(0x0331,-1); + packet(0x0332,-1); + packet(0x0333,-1); + packet(0x0334,-1); + packet(0x0335,-1); + packet(0x0336,-1); + packet(0x0337,-1); + packet(0x0338,-1); + packet(0x0339,-1); + packet(0x033a,-1); + packet(0x033b,-1); + packet(0x033c,-1); + packet(0x033d,-1); + packet(0x033e,-1); + packet(0x033f,-1); + packet(0x0340,-1); + packet(0x0341,-1); + packet(0x0342,-1); + packet(0x0343,-1); + packet(0x0344,-1); + packet(0x0345,-1); + packet(0x0346,-1); + packet(0x0347,-1); + packet(0x0348,-1); + packet(0x0349,-1); + packet(0x034a,-1); + packet(0x034b,-1); + packet(0x034c,-1); + packet(0x034d,-1); + packet(0x034e,-1); + packet(0x034f,-1); + packet(0x0350,-1); + packet(0x0351,-1); + packet(0x0352,-1); + packet(0x0353,-1); + packet(0x0354,-1); + packet(0x0355,-1); + packet(0x0356,-1); + packet(0x0357,-1); + packet(0x0358,-1); + packet(0x0359,-1); + packet(0x035a,-1); +#endif + +// 2008-05-27aSakexe +#if PACKETVER >= 20080527 + packet(0x035b,-1); + packet(0x035c,2); + packet(0x035d,-1); + packet(0x035e,2); + packet(0x035f,-1); + packet(0x0389,-1); +#endif + +// 2008-08-20aSakexe +#if PACKETVER >= 20080820 + packet(0x040c,-1); + packet(0x040d,-1); + packet(0x040e,-1); + packet(0x040f,-1); + packet(0x0410,-1); + packet(0x0411,-1); + packet(0x0412,-1); + packet(0x0413,-1); + packet(0x0414,-1); + packet(0x0415,-1); + packet(0x0416,-1); + packet(0x0417,-1); + packet(0x0418,-1); + packet(0x0419,-1); + packet(0x041a,-1); + packet(0x041b,-1); + packet(0x041c,-1); + packet(0x041d,-1); + packet(0x041e,-1); + packet(0x041f,-1); + packet(0x0420,-1); + packet(0x0421,-1); + packet(0x0422,-1); + packet(0x0423,-1); + packet(0x0424,-1); + packet(0x0425,-1); + packet(0x0426,-1); + packet(0x0427,-1); + packet(0x0428,-1); + packet(0x0429,-1); + packet(0x042a,-1); + packet(0x042b,-1); + packet(0x042c,-1); + packet(0x042d,-1); + packet(0x042e,-1); + packet(0x042f,-1); + packet(0x0430,-1); + packet(0x0431,-1); + packet(0x0432,-1); + packet(0x0433,-1); + packet(0x0434,-1); + packet(0x0435,-1); +#endif + +// 2008-09-10aSakexe +#if PACKETVER >= 20080910 + parseable_packet(0x0436,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0437,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0438,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0439,8,clif_parse_UseItem,2,4); +#endif + +// 2008-11-13aSakexe +#if PACKETVER >= 20081113 + packet(0x043d,8); + packet(0x043e,-1); + packet(0x043f,8); +#endif + +// 2008-11-26aSakexe +#if PACKETVER >= 20081126 + packet(0x01a2,37); + packet(0x0440,10); + packet(0x0441,4); +#endif + +// 2008-12-10aSakexe +#if PACKETVER >= 20081210 + packet(0x0442,-1); + parseable_packet(0x0443,8,clif_parse_SkillSelectMenu,2,6); +#endif + +// 2009-01-14aSakexe +#if PACKETVER >= 20090114 + packet(0x043f,25); + packet(0x0444,-1); + packet(0x0445,10); +#endif + +// 2009-02-18aSakexe +#if PACKETVER >= 20090218 + packet(0x0446,14); +#endif + +// 2009-02-25aSakexe +#if PACKETVER >= 20090225 + packet(0x0448,-1); +#endif + +// 2009-03-30aSakexe +#if PACKETVER >= 20090330 + packet(0x0449,4); +#endif + +// 2009-04-08aSakexe +#if PACKETVER >= 20090408 + packet(0x02a6,-1); + packet(0x02a7,-1); + parseable_packet(0x044a,6,clif_parse_client_version,2); +#endif + +// Renewal Clients +// 2008-08-27aRagexeRE +#if PACKETVER >= 20080827 + parseable_packet(0x0072,22,clif_parse_UseSkillToId,9,15,18); + packet(0x007c,44); + parseable_packet(0x007e,105,clif_parse_UseSkillToPosMoreInfo,10,14,18,23,25); + parseable_packet(0x0085,10,clif_parse_ChangeDir,4,9); + parseable_packet(0x0089,11,clif_parse_TickSend,7); + parseable_packet(0x008c,14,clif_parse_GetCharNameRequest,10); + parseable_packet(0x0094,19,clif_parse_MoveToKafra,3,15); + parseable_packet(0x009b,34,clif_parse_WantToConnection,7,15,25,29,33); + parseable_packet(0x009f,20,clif_parse_UseItem,7,20); + parseable_packet(0x00a2,14,clif_parse_SolveCharName,10); + parseable_packet(0x00a7,9,clif_parse_WalkToXY,6); + parseable_packet(0x00f5,11,clif_parse_TakeItem,7); + parseable_packet(0x00f7,17,clif_parse_MoveFromKafra,3,13); + parseable_packet(0x0113,25,clif_parse_UseSkillToPos,10,14,18,23); + parseable_packet(0x0116,17,clif_parse_DropItem,6,15); + parseable_packet(0x0190,23,clif_parse_ActionRequest,9,22); + packet(0x02e2,20); + packet(0x02e3,22); + packet(0x02e4,11); + packet(0x02e5,9); +#endif + +// 2008-09-10aRagexeRE +#if PACKETVER >= 20080910 + parseable_packet(0x0436,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0437,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0438,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0439,8,clif_parse_UseItem,2,4); +#endif + +// 2008-11-12aRagexeRE +#if PACKETVER >= 20081112 + packet(0x043d,8); + //packet(0x043e,-1); + packet(0x043f,8); +#endif + +// 2008-12-17aRagexeRE +#if PACKETVER >= 20081217 + packet(0x01a2,37); + //packet(0x0440,10); + //packet(0x0441,4); + //packet(0x0442,8); + //packet(0x0443,8); +#endif + +// 2008-12-17bRagexeRE +#if PACKETVER >= 20081217 + packet(0x006d,114); +#endif + +// 2009-01-21aRagexeRE +#if PACKETVER >= 20090121 + packet(0x043f,25); + //packet(0x0444,-1); + //packet(0x0445,10); +#endif + +// 2009-02-18aRagexeRE +#if PACKETVER >= 20090218 + //packet(0x0446,14); +#endif + +// 2009-02-26cRagexeRE +#if PACKETVER >= 20090226 + //packet(0x0448,-1); +#endif + +// 2009-04-01aRagexeRE +#if PACKETVER >= 20090401 + //packet(0x0449,4); +#endif + +// 2009-05-14aRagexeRE +#if PACKETVER >= 20090514 + //packet(0x044b,2); +#endif + +// 2009-05-20aRagexeRE +#if PACKETVER >= 20090520 + //packet(0x07d0,6); + //packet(0x07d1,2); + //packet(0x07d2,-1); + //packet(0x07d3,4); + //packet(0x07d4,4); + //packet(0x07d5,4); + //packet(0x07d6,4); + //packet(0x0447,2); +#endif + +// 2009-06-03aRagexeRE +#if PACKETVER >= 20090603 + parseable_packet(0x07d7,8,clif_parse_PartyChangeOption,2,6,7); + packet(0x07d8,8); + packet(0x07d9,254); + parseable_packet(0x07da,6,clif_parse_PartyChangeLeader,2); +#endif + +// 2009-06-10aRagexeRE +#if PACKETVER >= 20090610 + //packet(0x07db,8); +#endif + +// 2009-06-17aRagexeRE +#if PACKETVER >= 20090617 + packet(0x07d9,268); + //packet(0x07dc,6); + //packet(0x07dd,54); + //packet(0x07de,30); + //packet(0x07df,54); +#endif + +// 2009-07-01aRagexeRE +#if PACKETVER >= 20090701 + //packet(0x0275,37); + //packet(0x0276,-1); +#endif + +// 2009-07-08aRagexeRE +#if PACKETVER >= 20090708 + //packet(0x07e0,58); +#endif + +// 2009-07-15aRagexeRE +#if PACKETVER >= 20090715 + packet(0x07e1,15); +#endif + +// 2009-08-05aRagexeRE +#if PACKETVER >= 20090805 + packet(0x07e2,8); +#endif + +// 2009-08-18aRagexeRE +#if PACKETVER >= 20090818 + packet(0x07e3,6); + parseable_packet(0x07e4,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + packet(0x07e6,8); +#endif + +// 2009-08-25aRagexeRE +#if PACKETVER >= 20090825 + //packet(0x07e6,28); + packet(0x07e7,5); +#endif + +// 2009-09-22aRagexeRE +#if PACKETVER >= 20090922 + packet(0x07e5,8); + packet(0x07e6,8); + packet(0x07e7,32); + packet(0x07e8,-1); + packet(0x07e9,5); +#endif + +// 2009-09-29aRagexeRE +#if PACKETVER >= 20090929 + //packet(0x07ea,2); + //packet(0x07eb,-1); + //packet(0x07ec,6); + //packet(0x07ed,8); + //packet(0x07ee,6); + //packet(0x07ef,8); + //packet(0x07f0,4); + //packet(0x07f2,4); + //packet(0x07f3,3); +#endif + +// 2009-10-06aRagexeRE +#if PACKETVER >= 20091006 + //packet(0x07ec,8); + //packet(0x07ed,10); + //packet(0x07f0,8); + //packet(0x07f1,15); + //packet(0x07f2,6); + //packet(0x07f3,4); + //packet(0x07f4,3); +#endif + +// 2009-10-27aRagexeRE +#if PACKETVER >= 20091027 + parseable_packet(0x07f5,6,clif_parse_GMFullStrip,2); + packet(0x07f6,14); +#endif + +// 2009-11-03aRagexeRE +#if PACKETVER >= 20091103 + packet(0x07f7,-1); + packet(0x07f8,-1); + packet(0x07f9,-1); +#endif + +// 2009-11-17aRagexeRE +#if PACKETVER >= 20091117 + packet(0x07fa,8); +#endif + +// 2009-11-24aRagexeRE +#if PACKETVER >= 20091124 + packet(0x07fb,25); +#endif + +// 2009-12-01aRagexeRE +#if PACKETVER >= 20091201 + packet(0x07fc,10); + ack_packet(ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN,0x07fd,-1,0); + packet(0x07fe,26); + //packet(0x07ff,-1); +#endif + +// 2009-12-15aRagexeRE +#if PACKETVER >= 20091215 + packet(0x0800,-1); + //packet(0x0801,-1); +#endif + +// 2009-12-22aRagexeRE +#if PACKETVER >= 2009122 + parseable_packet(0x0802,18,clif_parse_PartyBookingRegisterReq,2,4,6); // Booking System + packet(0x0803,4); + packet(0x0804,8); // Booking System + packet(0x0805,-1); + parseable_packet(0x0806,4,clif_parse_PartyBookingDeleteReq,2); // Booking System + //packet(0x0807,2); + packet(0x0808,4); // Booking System + //packet(0x0809,14); + //packet(0x080A,50); + //packet(0x080B,18); + //packet(0x080C,6); +#endif + +// 2009-12-29aRagexeRE +#if PACKETVER >= 20091229 + parseable_packet(0x0804,14,clif_parse_PartyBookingSearchReq,2,4,6,8,12); // Booking System + parseable_packet(0x0806,2,clif_parse_PartyBookingDeleteReq,0); // Booking System + packet(0x0807,4); + parseable_packet(0x0808,14,clif_parse_PartyBookingUpdateReq,2); // Booking System + packet(0x0809,50); + packet(0x080A,18); + packet(0x080B,6); // Booking System +#endif + +// 2010-01-05aRagexeRE +#if PACKETVER >= 20100105 + parseable_packet(0x0801,-1,clif_parse_PurchaseReq2,2,4,8,12); +#endif + +// 2010-01-26aRagexeRE +#if PACKETVER >= 20100126 + //packet(0x080C,2); + //packet(0x080D,3); + packet(0x080E,14); +#endif + +// 2010-02-09aRagexeRE +#if PACKETVER >= 20100209 + //packet(0x07F0,6); +#endif + +// 2010-02-23aRagexeRE +#if PACKETVER >= 20100223 + packet(0x080F,20); +#endif + +// 2010-03-03aRagexeRE +#if PACKETVER >= 20100303 + packet(0x0810,3); + parseable_packet(0x0811,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + //packet(0x0812,86); + //packet(0x0813,6); + //packet(0x0814,6); + //packet(0x0815,-1); + //packet(0x0817,-1); + //packet(0x0818,6); + //packet(0x0819,4); +#endif + +// 2010-03-09aRagexeRE +#if PACKETVER >= 20100309 + packet(0x0813,-1); + //packet(0x0814,2); + //packet(0x0815,6); + packet(0x0816,6); + packet(0x0818,-1); + //packet(0x0819,10); + //packet(0x081A,4); + //packet(0x081B,4); + //packet(0x081C,6); + packet(0x081d,22); + packet(0x081e,8); +#endif + +// 2010-03-23aRagexeRE +#if PACKETVER >= 20100323 + //packet(0x081F,-1); +#endif + +// 2010-04-06aRagexeRE +#if PACKETVER >= 20100406 + //packet(0x081A,6); +#endif + +// 2010-04-13aRagexeRE +#if PACKETVER >= 20100413 + //packet(0x081A,10); + packet(0x0820,11); + //packet(0x0821,2); + //packet(0x0822,9); + //packet(0x0823,-1); +#endif + +// 2010-04-14dRagexeRE +#if PACKETVER >= 20100414 + //packet(0x081B,8); +#endif + +// 2010-04-20aRagexeRE +#if PACKETVER >= 20100420 + packet(0x0812,8); + packet(0x0814,86); + parseable_packet(0x0815,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0817,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0819,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + packet(0x081a,4); + packet(0x081b,10); + packet(0x081c,10); + packet(0x0824,6); +#endif + +// 2010-06-01aRagexeRE +#if PACKETVER >= 20100601 + //packet(0x0825,-1); + //packet(0x0826,4); + parseable_packet(0x0835,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + packet(0x0836,-1); + packet(0x0837,3); + //packet(0x0838,3); +#endif + +// 2010-06-08aRagexeRE +#if PACKETVER >= 20100608 + parseable_packet(0x0838,2,clif_parse_SearchStoreInfoNextPage,0); + packet(0x083A,4); // Search Stalls Feature + parseable_packet(0x083B,2,clif_parse_CloseSearchStoreInfo,0); + parseable_packet(0x083C,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + packet(0x083D,6); +#endif + +// 2010-06-15aRagexeRE +#if PACKETVER >= 20100615 + //packet(0x083E,26); +#endif + +// 2010-06-22aRagexeRE +#if PACKETVER >= 20100622 + //packet(0x083F,22); +#endif + +// 2010-06-29aRagexeRE +#if PACKETVER >= 20100629 + ack_packet(ZC_WEAR_EQUIP_ACK,0x00AA,9,2,4,6,8); + //packet(0x07F1,18); + //packet(0x07F2,8); + //packet(0x07F3,6); +#endif + +// 2010-07-01aRagexeRE +#if PACKETVER >= 20100701 + packet(0x083A,5); // Search Stalls Feature +#endif + +// 2010-07-13aRagexeRE +#if PACKETVER >= 20100713 + //packet(0x0827,6); + //packet(0x0828,14); + //packet(0x0829,6); + //packet(0x082A,10); + //packet(0x082B,6); + //packet(0x082C,14); + //packet(0x0840,-1); + //packet(0x0841,19); +#endif + +// 2010-07-14aRagexeRE +#if PACKETVER >= 20100714 + //packet(0x0841,4); +#endif + +// 2010-08-03aRagexeRE +#if PACKETVER >= 20100803 + packet(0x0839,66); + parseable_packet(0x0842,6,clif_parse_GMRecall2,2); + parseable_packet(0x0843,6,clif_parse_GMRemove2,2); +#endif + +// 2010-11-24aRagexeRE +#if PACKETVER >= 20101124 + parseable_packet(0x0288,-1,clif_parse_cashshop_buy,2,4,8,10); + parseable_packet(0x0436,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x035f,5,clif_parse_WalkToXY,2); + parseable_packet(0x0360,6,clif_parse_TickSend,2); + parseable_packet(0x0361,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0362,6,clif_parse_TakeItem,2); + parseable_packet(0x0363,6,clif_parse_DropItem,2,4); + parseable_packet(0x0364,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0365,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0366,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0367,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0369,6,clif_parse_SolveCharName,2); + packet(0x0856,-1); + packet(0x0857,-1); + packet(0x0858,-1); + packet(0x0859,-1); + ack_packet(ZC_WEAR_EQUIP_ACK,0x08d0,9,2,4,6,8); +#endif + +// 2011-10-05aRagexeRE +#if PACKETVER >= 20111005 + parseable_packet(0x0364,5,clif_parse_WalkToXY,2); + parseable_packet(0x0817,6,clif_parse_TickSend,2); + parseable_packet(0x0366,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0815,6,clif_parse_TakeItem,2); + parseable_packet(0x0885,6,clif_parse_DropItem,2,4); + parseable_packet(0x0893,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0897,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0369,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x08ad,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x088a,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0838,6,clif_parse_SolveCharName,2); + parseable_packet(0x0439,8,clif_parse_UseItem,2,4); + packet(0x08d2,10); + packet(0x08d1,7); + parseable_packet(0x0846,4,clif_parse_CashShopReqTab,2); //2011-07-18 +#endif + +// 2011-11-02aRagexe +#if PACKETVER >= 20111102 + parseable_packet(0x0436,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0898,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0281,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x088d,26,clif_parse_PartyInvite2,2); + parseable_packet(0x083c,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x08aa,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x02c4,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0811,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + packet(0x0890,8); + parseable_packet(0x08a5,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0835,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x089b,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x08a1,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x089e,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x08ab,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x088b,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x08a2,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + packet(0x08cf,10); //Amulet spirits +#endif + +// 2012-03-07fRagexeRE +#if PACKETVER >= 20120307 + parseable_packet(0x086A,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0887,6,clif_parse_TickSend,2); + parseable_packet(0x0890,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0865,6,clif_parse_TakeItem,2); + parseable_packet(0x02C4,6,clif_parse_DropItem,2,4); + parseable_packet(0x093B,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0963,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0863,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0861,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x0929,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0885,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0889,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0870,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + //parseable_packet(0x0926,41,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0884,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0439,8,clif_parse_UseItem,2,4); + parseable_packet(0x0365,41,clif_parse_PartyBookingRegisterReq,2,4,6); + // New Packet + packet(0x090F,-1); // ZC_NOTIFY_NEWENTRY7 + packet(0x0914,-1); // ZC_NOTIFY_MOVEENTRY8 + packet(0x0915,-1); // ZC_NOTIFY_STANDENTRY9 +#endif + +// 2012-04-10aRagexeRE +#if PACKETVER >= 20120410 + parseable_packet(0x01fd,15,clif_parse_RepairItem,2,4,6,7,9,11,13); + parseable_packet(0x089c,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0885,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0961,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x0288,-1,clif_parse_cashshop_buy,2,4,8,10); + parseable_packet(0x091c,26,clif_parse_PartyInvite2,2); + parseable_packet(0x094b,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0439,8,clif_parse_UseItem,2,4); + parseable_packet(0x0945,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0886,6,clif_parse_TickSend,2); + parseable_packet(0x0871,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0938,6,clif_parse_TakeItem,2); + parseable_packet(0x0891,6,clif_parse_DropItem,2,4); + parseable_packet(0x086c,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x08a6,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0889,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0884,6,clif_parse_SolveCharName,2); + packet(0x08e6,4); + parseable_packet(0x08e7,10,clif_parse_PartyBookingSearchReq,2,4,6,8,12); + packet(0x08e8,-1); + parseable_packet(0x08e9,2,clif_parse_PartyBookingDeleteReq,0); + packet(0x08ea,4); + parseable_packet(0x08eb,39,clif_parse_PartyBookingUpdateReq,2); + packet(0x08ec,73); + packet(0x08ed,43); + packet(0x08ee,6); + parseable_packet(0x08ef,6,NULL,2); + packet(0x08f0,6); + parseable_packet(0x08f1,6,NULL,2); + packet(0x08f2,36); + packet(0x08f3,-1); + packet(0x08f4,6); + parseable_packet(0x08f5,-1,NULL,2,4); + packet(0x08f6,22); + packet(0x08f7,3); + packet(0x08f8,7); + packet(0x08f9,6); + packet(0x08fa,6); + parseable_packet(0x08fb,6,NULL,2); + parseable_packet(0x0907,5,clif_parse_MoveItem,2,4); + packet(0x0908,5); + parseable_packet(0x08d7,28,NULL,2,4); + packet(0x0977,14); //Monster HP Bar + parseable_packet(0x0916,26,clif_parse_GuildInvite2,2); + parseable_packet(0x091d,41,clif_parse_PartyBookingRegisterReq,2,4,6); + ack_packet(ZC_PERSONAL_INFOMATION,0x08cb,10,2,4,6,8,10,11,13,15); //Still need further information + // Merge Item + ack_packet(ZC_MERGE_ITEM_OPEN,0x096D,-1,2,4); // ZC_MERGE_ITEM_OPEN + parseable_packet(0x096E,-1,clif_parse_merge_item_req,2,4); // CZ_REQ_MERGE_ITEM + ack_packet(ZC_ACK_MERGE_ITEM,0x096F,7,2,4,6); // ZC_ACK_MERGE_ITEM + parseable_packet(0x0974,2,clif_parse_merge_item_cancel,0); // CZ_CANCEL_MERGE_ITEM + parseable_packet(0x0844,2,clif_parse_cashshop_open_request,0); + packet(0x0849,16); //clif_cashshop_result + parseable_packet(0x0848,-1,clif_parse_cashshop_buy,2,6,4,10); + parseable_packet(0x084a,2,clif_parse_cashshop_close,0); + parseable_packet(0x08c9,2,clif_parse_cashshop_list_request,0); +#endif + +// 2012-04-18aRagexeRE [Special Thanks to Judas!] +#if PACKETVER >= 20120418 + parseable_packet(0x023B,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x08A8,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x022D,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x035F,6,clif_parse_TickSend,2); + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x07E4,6,clif_parse_TakeItem,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x08E5,41,clif_parse_PartyBookingRegisterReq,2,4,6); //Added to prevent disconnections + packet(0x08d2,10); +#endif + +// 2012-06-18 +#if PACKETVER >= 20120618 + packet(0x0983,29); // ZC_MSG_STATE_CHANGE3 + parseable_packet(0x0861,41,clif_parse_PartyBookingRegisterReq,2,4,6); //actually 12-05-03 +#endif + +// 2012-07-02aRagexeRE (unstable) +#if PACKETVER >= 20120702 + parseable_packet(0x0363,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0364,6,clif_parse_TickSend,2); + parseable_packet(0x085a,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0861,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0862,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0863,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0886,6,clif_parse_SolveCharName,2); + parseable_packet(0x0889,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x089e,6,clif_parse_DropItem,2,4); + parseable_packet(0x089f,6,clif_parse_TakeItem,2); + parseable_packet(0x08a0,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x094a,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0953,5,clif_parse_WalkToXY,2); + parseable_packet(0x0960,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0879,41,clif_parse_PartyBookingRegisterReq,2,4,6); +#endif + +// 2013-03-20Ragexe (Judas) +#if PACKETVER >= 20130320 + parseable_packet(0x014f,6,clif_parse_GuildRequestInfo,2); + parseable_packet(0x01fd,15,clif_parse_RepairItem,2,4,6,7,9,11,13); + //parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x035f,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0363,6,clif_parse_TickSend,2); + parseable_packet(0x0365,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0438,6,clif_parse_DropItem,2,4); + parseable_packet(0x0447,2,clif_parse_blocking_playcancel,0); // CZ_BLOCKING_PLAY_CANCEL + parseable_packet(0x044A,6,clif_parse_client_version,2); + parseable_packet(0x0844,2,clif_parse_cashshop_open_request,0); + packet(0x0849,16); //clif_cashshop_result + parseable_packet(0x0848,-1,clif_parse_cashshop_buy,2,6,4,10); + parseable_packet(0x084a,2,clif_parse_cashshop_close,0); + packet(0x084b,19); //fallitem4 + parseable_packet(0x085a,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x085d,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0868,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x086d,26,clif_parse_PartyInvite2,2); + parseable_packet(0x086f,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0874,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0881,5,clif_parse_WalkToXY,2); + parseable_packet(0x0886,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0888,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x088e,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0897,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0898,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x089b,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x08ac,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x08c9,2,clif_parse_cashshop_list_request,0); + packet(0x08cf,10); //Amulet spirits + packet(0x08d2,10); + parseable_packet(0x0907,5,clif_parse_MoveItem,2,4); + packet(0x0908,5); + parseable_packet(0x0922,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + //parseable_packet(0x092e,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0933,6,clif_parse_TakeItem,2); + parseable_packet(0x0938,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x093f,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0947,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x094c,6,clif_parse_SolveCharName,2); + parseable_packet(0x094e,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0959,10,clif_parse_UseSkillToPos,2,4,6,8); + //parseable_packet(0x095a,8,clif_parse_Mail_setattach,2,4); + packet(0x0977,14); //Monster HP Bar + parseable_packet(0x0978,6,clif_parse_reqworldinfo,2); + packet(0x0979,50); //ackworldinfo + ack_packet(ZC_PERSONAL_INFOMATION,0x097b,16,2,4,8,12,16,17,21,25); //Still need further information + //ack_packet(ZC_PERSONAL_INFOMATION_CHN,0x0981,12,2,4,6,8,12,13,15,17,10); // Disabled until further information is found. + packet(0x0990,31); //additem + packet(0x0991,-1); //inv itemlist normal + packet(0x0992,-1); //inv itemlist equip + packet(0x0993,-1); //cart itemlist normal + packet(0x0994,-1); //cart itemlist equip + packet(0x0995,-1); //store itemlist normal + packet(0x0996,-1); //store itemlist equip + packet(0x0997,-1); //ZC_EQUIPWIN_MICROSCOPE_V5 + parseable_packet(0x0998,8,clif_parse_EquipItem,2,4); // CZ_REQ_WEAR_EQUIP_V5 + ack_packet(ZC_WEAR_EQUIP_ACK,0x0999,11,2,4,8,10); // cz_wear_equipv5 + packet(0x099a,9); // take_off_equipv5 + packet(0x099b,8); //maptypeproperty2 + // New Packets + packet(0x08C8,34); // ZC_NOTIFY_ACT3 + packet(0x08ff,24); // ZC_EFST_SET_ENTER + packet(0x0984,28); // ZC_EFST_SET_ENTER2 + packet(0x099f,22); // ZC_SKILL_ENTRY4 +#endif + +// 2013-06-05Ragexe +#if PACKETVER >= 20130605 + parseable_packet(0x097C,4,clif_parse_ranklist,2); +#endif + +// 2013-07-10Ragexe +#if PACKETVER >= 20130710 + parseable_packet(0x0848,-1,clif_parse_cashshop_buy,2,6,4,10); + packet(0x097D,288); //ZC_ACK_RANKING +#endif + +// 2013-07-17Ragexe +#if PACKETVER >= 20130717 + ack_packet(ZC_BANKING_CHECK,0x09A6,12,2,10); + parseable_packet(0x09A7,10,clif_parse_BankDeposit,2,6); + ack_packet(ZC_ACK_BANKING_DEPOSIT,0x09A8,16,2,4,12); + parseable_packet(0x09A9,10,clif_parse_BankWithdraw,2,6); + ack_packet(ZC_ACK_BANKING_WITHDRAW,0x09AA,16,2,4,12); + parseable_packet(0x09AB,6,clif_parse_BankCheck,2); + parseable_packet(0x09B6,6,clif_parse_BankOpen,2); + ack_packet(ZC_ACK_OPEN_BANKING,0x09B7,4,2); + parseable_packet(0x09B8,6,clif_parse_BankClose,2); + ack_packet(ZC_ACK_CLOSE_BANKING,0x09B9,4,2); +#endif + +// 2013-07-31cRagexe +#if PACKETVER >= 20130731 + packet(0x09ca,23); // ZC_SKILL_ENTRY5 + packet(0x09cb,17); // ZC_USE_SKILL2 +#endif + +// 2013-08-07Ragexe +#if PACKETVER >= 20130807 + ack_packet(ZC_C_MARKERINFO,0x09C1,10,2,6,8); + // Merge Item + ack_packet(ZC_MERGE_ITEM_OPEN,0x096D,-1,2,4); // ZC_MERGE_ITEM_OPEN + parseable_packet(0x096E,-1,clif_parse_merge_item_req,2,4); // CZ_REQ_MERGE_ITEM + ack_packet(ZC_ACK_MERGE_ITEM,0x096F,7,2,4,6,7); // ZC_ACK_MERGE_ITEM + parseable_packet(0x0974,2,clif_parse_merge_item_cancel,0); // CZ_CANCEL_MERGE_ITEM +#endif + +// 2013-12-23Ragexe +#if PACKETVER >= 20131223 + //New Packets + //packet(0x097E,12); //ZC_UPDATE_RANKING_POINT + parseable_packet(0x09CE,102,clif_parse_GM_Item_Monster,2); + parseable_packet(0x09D4,2,clif_parse_NPCShopClosed,0); + //NPC Market + packet(0x09D5,-1); + parseable_packet(0x09D6,-1,clif_parse_NPCMarketPurchase,2,4,6); + packet(0x09D7,-1); + parseable_packet(0x09D8,2,clif_parse_NPCMarketClosed,0); + // Clan System + packet(0x0988,6); + packet(0x0989,2); + packet(0x098A,-1); + parseable_packet(0x098D,-1,clif_parse_clan_chat,2,4); + packet(0x098E,-1); + // Sale + parseable_packet(0x09AC,-1,clif_parse_sale_search,2,4,8); + packet(0x09AD,8); + parseable_packet(0x09AE,17,clif_parse_sale_add,2,6,8,12,16); + packet(0x09AF,4); + parseable_packet(0x09B0,8,clif_parse_sale_remove,2,6); + packet(0x09B1,4); + packet(0x09B2,8); + packet(0x09B3,4); + parseable_packet(0x09B4,6,clif_parse_sale_open,2); + parseable_packet(0x09BC,6,clif_parse_sale_close,2); + parseable_packet(0x09C3,8,clif_parse_sale_refresh,2,6); + packet(0x09C4,8); + // New Packet + packet(0x097A,-1); // ZC_ALL_QUEST_LIST2 + packet(0x09DB,-1); // ZC_NOTIFY_MOVEENTRY10 + packet(0x09DC,-1); // ZC_NOTIFY_NEWENTRY10 + packet(0x09DD,-1); // ZC_NOTIFY_STANDENTRY10 + packet(0x09DF,7); // ZC_ACK_WHISPER02 +#endif + +// 2014-10-16Ragexe +#if PACKETVER >= 20141016 + packet(0x09DF,7); + // New packet + packet(0x0A00,269); // ZC_SHORTCUT_KEY_LIST_V3 + parseable_packet(0x0A01,3,clif_parse_HotkeyRowShift,2); // CZ_SHORTCUTKEYBAR_ROTATE + packet(0x0A02,4); // ZC_DRESSROOM_OPEN + packet(0x0A0E,14); // ZC_BATTLEFIELD_NOTIFY_HP2 + packet(0x09F7,75); // ZC_PROPERTY_HOMUN_2 + packet(0x09E5,18); // ZC_DELETEITEM_FROM_MCSTORE2 + packet(0x09E6,22); // ZC_UPDATE_ITEM_FROM_BUYING_STORE2 + // Roulette System [Yommy] + parseable_packet(0x0A19,2,clif_parse_RouletteOpen,0); // CZ_REQ_OPEN_ROULETTE + packet(0x0A1A,23); // ZC_ACK_OPEN_ROULETTE + parseable_packet(0x0A1B,2,clif_parse_RouletteInfo,0); // CZ_REQ_ROULETTE_INFO + packet(0x0A1C,-1); // ZC_ACK_ROULETTE_INFO + parseable_packet(0x0A1D,2,clif_parse_RouletteClose,0); // CZ_REQ_CLOSE_ROULETTE + packet(0x0A1E,3); // ZC_ACK_CLOSE_ROULETTE + parseable_packet(0x0A1F,2,clif_parse_RouletteGenerate,0); // CZ_REQ_GENERATE_ROULETTE + packet(0x0A20,21); // ZC_ACK_GENERATE_ROULETTE + parseable_packet(0x0A21,3,clif_parse_RouletteRecvItem,2); // CZ_RECV_ROULETTE_ITEM + packet(0x0A22,5); // ZC_RECV_ROULETTE_ITEM +#endif + +// 2014-10-22bRagexe +#if PACKETVER >= 20141022 + packet(0x006d,149); + packet(0x08e3,149); + // New Packet + packet(0x0A18,14); // ZC_ACCEPT_ENTER3 + packet(0x0A28,3); // ZC_ACK_OPENSTORE2 + packet(0x09FD,-1); // ZC_NOTIFY_MOVEENTRY11 + packet(0x09FE,-1); // ZC_NOTIFY_NEWENTRY11 + packet(0x09FF,-1); // ZC_NOTIFY_STANDENTRY11 + //packet(0x09F8,-1); // ZC_ALL_QUEST_LIST3 +#endif + +// 2015-05-13aRagexe +#if PACKETVER >= 20150513 + // New Packets + packet(0xA3B,-1); // ZC_HAT_EFFECT + // RODEX Mail system + packet(0x09E7,3); // ZC_NOTIFY_UNREADMAIL + parseable_packet(0x09E8,11,clif_parse_Mail_refreshinbox,2,3); // CZ_OPEN_MAILBOX + parseable_packet(0x09E9,2,clif_parse_dull,0); // CZ_CLOSE_MAILBOX + parseable_packet(0x09EA,11,clif_parse_Mail_read,2,3); // CZ_REQ_READ_MAIL + packet(0x09EB,-1); // ZC_ACK_READ_MAIL + parseable_packet(0x09EC,-1,clif_parse_Mail_send,2,4,28,52,60,62,64); // CZ_REQ_WRITE_MAIL + packet(0x09ED,3); // ZC_ACK_WRITE_MAIL + parseable_packet(0x09EE,11,clif_parse_Mail_refreshinbox,2,3); // CZ_REQ_NEXT_MAIL_LIST + parseable_packet(0x09EF,11,clif_parse_Mail_refreshinbox,2,3); // CZ_REQ_REFRESH_MAIL_LIST + packet(0x09F0,-1); // ZC_ACK_MAIL_LIST + parseable_packet(0x09F1,11,clif_parse_Mail_getattach,0); // CZ_REQ_ZENY_FROM_MAIL + packet(0x09F2,12); // ZC_ACK_ZENY_FROM_MAIL + parseable_packet(0x09F3,11,clif_parse_Mail_getattach,0); // CZ_REQ_ITEM_FROM_MAIL + packet(0x09F4,12); // ZC_ACK_ITEM_FROM_MAIL + parseable_packet(0x09F5,11,clif_parse_Mail_delete,0); // CZ_REQ_DELETE_MAIL + packet(0x09F6,11); // ZC_ACK_DELETE_MAIL + parseable_packet(0x0A03,2,clif_parse_Mail_cancelwrite,0); // CZ_REQ_CANCEL_WRITE_MAIL + parseable_packet(0x0A04,6,clif_parse_Mail_setattach,2,4); // CZ_REQ_ADD_ITEM_TO_MAIL + packet(0x0A05,53); // ZC_ACK_ADD_ITEM_TO_MAIL + parseable_packet(0x0A06,6,clif_parse_Mail_winopen,2,4); // CZ_REQ_REMOVE_ITEM_MAIL + packet(0x0A07,9); // ZC_ACK_REMOVE_ITEM_MAIL + parseable_packet(0x0A08,26,clif_parse_Mail_beginwrite,0); // CZ_REQ_OPEN_WRITE_MAIL + packet(0x0A12,27); // ZC_ACK_OPEN_WRITE_MAIL + parseable_packet(0x0A13,26,clif_parse_Mail_Receiver_Check,2); // CZ_CHECK_RECEIVE_CHARACTER_NAME + packet(0x0A14,10); // ZC_CHECK_RECEIVE_CHARACTER_NAME + packet(0x0A32,2); // ZC_OPEN_RODEX_THROUGH_NPC_ONLY + // New EquipPackets Support + packet(0x0A09,45); // ZC_ADD_EXCHANGE_ITEM3 + packet(0x0A0A,47); // ZC_ADD_ITEM_TO_STORE3 + packet(0x0A0B,47); // ZC_ADD_ITEM_TO_CART3 + packet(0x0A0C,56); // ZC_ITEM_PICKUP_ACK_V6 + packet(0x0A0D,-1); // ZC_INVENTORY_ITEMLIST_EQUIP_V6 + packet(0x0A0F,-1); // ZC_CART_ITEMLIST_EQUIP_V6 + packet(0x0A10,-1); // ZC_STORE_ITEMLIST_EQUIP_V6 + packet(0x0A2D,-1); // ZC_EQUIPWIN_MICROSCOPE_V6 + // OneClick Itemidentify + parseable_packet(0x0A35,4,clif_parse_Oneclick_Itemidentify,2); // CZ_REQ_ONECLICK_ITEMIDENTIFY + // Achievement System + packet(0x0A23,-1); // ZC_ALL_ACH_LIST + packet(0x0A24,66); // ZC_ACH_UPDATE + parseable_packet(0x0A25,6,clif_parse_dull,0); // CZ_REQ_ACH_REWARD + packet(0x0A26,7); // ZC_REQ_ACH_REWARD_ACK + // Title System + parseable_packet(0x0A2E,6,clif_parse_dull,0); // CZ_REQ_CHANGE_TITLE + packet(0x0A2F,7); // ZC_ACK_CHANGE_TITLE + packet(0x0A30,106); // ZC_ACK_REQNAMEALL2 + // Pet Evolution System + parseable_packet(0x09FB,-1,clif_parse_dull,0); // CZ_PET_EVOLUTION + packet(0x09FC,6); // ZC_PET_EVOLUTION_RESULT +#endif + +// 2015-05-20aRagexe +#if PACKETVER >= 20150520 + parseable_packet(0x0A3D,18,clif_parse_sale_add,2,6,8,12,16); +#endif + +// 2015-09-16Ragexe +#if PACKETVER >= 20150916 + // New Packet + packet(0x097F,-1); // ZC_SELECTCART + parseable_packet(0x0980,7,clif_parse_SelectCart,2,6); // CZ_SELECTCART +#endif + +// 2016-03-02bRagexe +#if PACKETVER >= 20160302 + packet(0x0A51,34); +#endif + +// 2016-03-30aRagexe +#if PACKETVER >= 20160330 + parseable_packet(0x0A6E,-1,clif_parse_Mail_send,2,4,28,52,60,62,64,68); // CZ_REQ_WRITE_MAIL2 +#endif + +// 2016-06-01aRagexe +#if PACKETVER >= 20160601 + packet(0x0A7D,-1); +#endif + +// 2017-05-02dRagexeRE +#if PACKETVER >= 20170502 + packet(0x0A43,85); + packet(0x0A44,-1); + packet(0x0ABD,10); +#endif + +#endif /* _CLIF_PACKETDB_H_ */ diff --git a/src/map/clif_shuffle.h b/src/map/clif_shuffle.h new file mode 100644 index 0000000000..24351d1cf5 --- /dev/null +++ b/src/map/clif_shuffle.h @@ -0,0 +1,3511 @@ +// Copyright (c) Athena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#ifndef _CLIF_SHUFFLE_H_ +#define _CLIF_SHUFFLE_H_ + +// 2013-05-15aRagexe +#if PACKETVER == 20130515 + parseable_packet(0x035F,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6); + //parseable_packet(0x0862,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0887,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x08A1,6,clif_parse_TakeItem,2); + //parseable_packet(0x08AA,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x08AC,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x092D,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0931,5,clif_parse_HomMenu,2,4); + parseable_packet(0x093e,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x0943,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0944,6,clif_parse_DropItem,2,4); + parseable_packet(0x0947,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0962,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0963,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2); +// 2013-05-22Ragexe +#elif PACKETVER == 20130522 + parseable_packet(0x0360,5,clif_parse_WalkToXY,2); + parseable_packet(0x0362,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0368,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0369,6,clif_parse_SolveCharName,2); + parseable_packet(0x07EC,6,clif_parse_TickSend,2); + parseable_packet(0x0811,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x086A,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x086E,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0874,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x087E,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x088e,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x089B,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x089C,6,clif_parse_DropItem,2,4); + parseable_packet(0x08A2,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x08A9,19,clif_parse_WantToConnection,2,6,10,14,18); + //parseable_packet(0x08AC,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x08a3,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x08a6,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x08aa,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0925,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0926,5,clif_parse_HomMenu,2,4); + parseable_packet(0x093e,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0950,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0952,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x095C,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x095E,6,clif_parse_TakeItem,2); + parseable_packet(0x095b,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0964,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + //parseable_packet(0x0965,8,NULL,0); // CZ_JOIN_BATTLE_FIELD +// 2013-05-29Ragexe +#elif PACKETVER == 20130529 + parseable_packet(0x023B,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0438,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x085A,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x085E,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0863,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0869,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0874,18,clif_parse_PartyBookingRegisterReq,2); + parseable_packet(0x0876,5,clif_parse_WalkToXY,2); + parseable_packet(0x0877,26,clif_parse_FriendsListAdd,2); + //parseable_packet(0x0888,4,NULL,0); // CZ_GANGSI_RANK + //parseable_packet(0x088E,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0890,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0892,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0895,6,clif_parse_TakeItem,2); + parseable_packet(0x0897,6,clif_parse_TickSend,2); + parseable_packet(0x08A7,6,clif_parse_DropItem,2,4); + parseable_packet(0x08A8,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0917,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0918,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0919,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0936,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0937,6,clif_parse_SolveCharName,2); + parseable_packet(0x0938,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0941,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0951,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0956,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x0957,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0958,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x0964,2,clif_parse_ReqCloseBuyingStore,0); +// 2013-06-05Ragexe +#elif PACKETVER == 20130605 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022D,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023B,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x035F,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07E4,6,clif_parse_TakeItem,2); + parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0883,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2); +// 2013-06-12Ragexe +#elif PACKETVER == 20130612 + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x035F,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07E4,6,clif_parse_TakeItem,2); + parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x087E,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0919,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x093A,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0940,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0964,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2); +// 2013-06-18Ragexe +#elif PACKETVER == 20130618 + parseable_packet(0x0281,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x02C4,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0363,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x085A,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0862,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0864,36,clif_parse_StoragePassword,2,4,20); + //parseable_packet(0x0878,4,NULL,0); // CZ_GANGSI_RANK + //parseable_packet(0x087A,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0885,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0887,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0889,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x088E,5,clif_parse_WalkToXY,2); + parseable_packet(0x0890,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0891,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x08A6,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x08A7,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0917,6,clif_parse_DropItem,2,4); + parseable_packet(0x0930,6,clif_parse_TickSend,2); + parseable_packet(0x0932,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0936,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0942,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x0944,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0945,6,clif_parse_SolveCharName,2); + parseable_packet(0x094F,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0951,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0953,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x095B,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0962,6,clif_parse_TakeItem,2); + parseable_packet(0x096A,10,clif_parse_UseSkillToPos,2,4,6,8); +// 2013-06-26Ragexe +#elif PACKETVER == 20130626 + parseable_packet(0x035F,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0365,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6); + //parseable_packet(0x0860,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x088B,6,clif_parse_TakeItem,2); + parseable_packet(0x088C,19,clif_parse_WantToConnection,2,6,10,14,18); + //parseable_packet(0x088F,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0894,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0895,26,clif_parse_PartyInvite2,2); + parseable_packet(0x08A5,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x08AB,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0921,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0930,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x094D,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0952,6,clif_parse_DropItem,2,4); + parseable_packet(0x0960,5,clif_parse_HomMenu,2,4); + parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2); +// 2013-07-03Ragexe +#elif PACKETVER == 20130703 + parseable_packet(0x0202,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x022D,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x035F,6,clif_parse_TickSend,2); + parseable_packet(0x0360,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07E4,6,clif_parse_TakeItem,2); + parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0873,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x0930,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x094A,5,clif_parse_HomMenu,2,4); + parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2); +// 2013-07-10Ragexe +#elif PACKETVER == 20130710 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022D,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023B,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x035F,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07E4,6,clif_parse_TakeItem,2); + parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0880,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2); +// 2013-07-17Ragexe +#elif PACKETVER == 20130717 + parseable_packet(0x02C4,6,clif_parse_TickSend,2); + parseable_packet(0x0819,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x083C,5,clif_parse_WalkToXY,2); + parseable_packet(0x0862,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0863,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x086B,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + //parseable_packet(0x086C,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0882,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x088A,5,clif_parse_HomMenu,2,4); + parseable_packet(0x088C,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0897,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x0898,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x089B,8,clif_parse_MoveToKafra,2,4); + //parseable_packet(0x08A6,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x08A9,6,clif_parse_TakeItem,2); + parseable_packet(0x08AA,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0917,6,clif_parse_DropItem,2,4); + parseable_packet(0x0918,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x091D,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x091E,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x092F,26,clif_parse_PartyInvite2,2); + parseable_packet(0x093B,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0952,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0956,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0958,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x095B,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x0960,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0967,6,clif_parse_SolveCharName,2); + parseable_packet(0x096A,2,clif_parse_ReqCloseBuyingStore,0); +// 2013-08-07Ragexe +#elif PACKETVER == 20130807 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022D,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023B,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x035F,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07E4,6,clif_parse_TakeItem,2); + parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0887,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2); +// 2013-12-23Ragexe +#elif PACKETVER == 20131223 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022D,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023B,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x035F,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07E4,6,clif_parse_TakeItem,2); + parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x08A4,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2); +// 2014-10-16Ragexe +#elif PACKETVER == 20141016 + parseable_packet(0x022D,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035F,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07E4,6,clif_parse_TakeItem,2); + parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x086E,19,clif_parse_WantToConnection,2,6,10,14,18); + //parseable_packet(0x0922,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0936,36,clif_parse_StoragePassword,0); + parseable_packet(0x094B,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0967,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2); +// 2014-10-22bRagexe +#elif PACKETVER == 20141022 + parseable_packet(0x023b,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0878,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x087d,6,clif_parse_DropItem,2,4); + parseable_packet(0x0896,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0899,5,clif_parse_HomMenu,2,4); + parseable_packet(0x08aa,8,clif_parse_MoveFromKafra,2,4); + //parseable_packet(0x08ab,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x08ad,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x091a,26,clif_parse_FriendsListAdd,2); + //parseable_packet(0x092b,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x093b,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0940,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x094e,6,clif_parse_TakeItem,2); + parseable_packet(0x0955,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2015-01-07aRagexeRE +#elif PACKETVER == 20150107 + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x087c,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0895,36,clif_parse_StoragePassword,0); + parseable_packet(0x092d,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0943,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0947,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2015-01-14aRagexe +#elif PACKETVER == 20150114 + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0436,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0868,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0899,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0946,36,clif_parse_StoragePassword,0); + //parseable_packet(0x0955,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0957,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2015-01-28aRagexe +#elif PACKETVER == 20150128 + parseable_packet(0x0202,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x023b,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x035f,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0365,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + //parseable_packet(0x0368,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0838,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x085a,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0864,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x086d,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0870,5,clif_parse_WalkToXY,2); + parseable_packet(0x0874,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0875,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0876,5,clif_parse_HomMenu,2,4); + parseable_packet(0x087d,6,clif_parse_SolveCharName,2); + parseable_packet(0x0888,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x089a,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x08ab,6,clif_parse_TakeItem,2); + parseable_packet(0x091f,6,clif_parse_TickSend,2); + parseable_packet(0x0927,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0929,36,clif_parse_StoragePassword,0); + parseable_packet(0x092d,2,clif_parse_SearchStoreInfoNextPage,0); + //parseable_packet(0x0938,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x093a,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0944,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x094d,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x094e,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0952,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0963,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0968,6,clif_parse_DropItem,2,4); +// 2015-02-04aRagexe +#elif PACKETVER == 20150204 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0966,36,clif_parse_StoragePassword,0); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2015-02-25aRagexeRE or 2015-02-26aRagexeRE +#elif PACKETVER == 20150225 || PACKETVER == 20150226 + parseable_packet(0x02c4,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0362,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0436,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,6,clif_parse_TakeItem,2); + parseable_packet(0x0819,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0867,18,clif_parse_PartyBookingRegisterReq,2,4); + //parseable_packet(0x0885,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0896,-1,clif_parse_ItemListWindowSelected,2,4,8); + //parseable_packet(0x089b,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x089c,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x08a4,36,clif_parse_StoragePassword,0); + parseable_packet(0x0940,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0946,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0948,6,clif_parse_DropItem,2,4); + parseable_packet(0x094f,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0952,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0955,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x096a,19,clif_parse_WantToConnection,2,6,10,14,18); +// 2015-03-11aRagexeRE +#elif PACKETVER == 20150311 + parseable_packet(0x023b,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0360,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0436,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0438,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0838,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x086a,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x086c,36,clif_parse_StoragePassword,0); + parseable_packet(0x087b,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0883,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0886,5,clif_parse_WalkToXY,2); + parseable_packet(0x0888,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0896,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x08a1,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x08a3,6,clif_parse_TakeItem,2); + parseable_packet(0x08a5,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x08a6,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x091c,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0928,5,clif_parse_ChangeDir,2,4); + //parseable_packet(0x092a,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x092e,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x093b,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0943,6,clif_parse_SolveCharName,2); + //parseable_packet(0x0946,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0957,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0958,6,clif_parse_TickSend,2); + parseable_packet(0x095b,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0963,6,clif_parse_DropItem,2,4); + parseable_packet(0x0964,8,clif_parse_MoveToKafra,2,4); +// 2015-03-25aRagexe +#elif PACKETVER == 20150325 + parseable_packet(0x0202,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0363,6,clif_parse_DropItem,2,4); + parseable_packet(0x0365,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0438,2,clif_parse_SearchStoreInfoNextPage,0); + //parseable_packet(0x0802,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0819,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x085d,6,clif_parse_SolveCharName,2); + parseable_packet(0x086f,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x087c,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x087e,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0883,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0885,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0891,6,clif_parse_GetCharNameRequest,2); + //parseable_packet(0x0893,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0897,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0899,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x08a1,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x08a7,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0919,36,clif_parse_StoragePassword,0); + parseable_packet(0x092c,6,clif_parse_TakeItem,2); + parseable_packet(0x0931,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0932,5,clif_parse_WalkToXY,2); + parseable_packet(0x0938,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0940,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0947,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x094a,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0950,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0954,6,clif_parse_TickSend,2); + parseable_packet(0x0969,8,clif_parse_MoveFromKafra,2,4); +// 2015-04-01aRagexe +#elif PACKETVER == 20150401 + parseable_packet(0x0362,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0367,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0437,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x083c,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x085e,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x086f,5,clif_parse_WalkToXY,2); + parseable_packet(0x0875,-1,clif_parse_ItemListWindowSelected,2,4,8); + //parseable_packet(0x087e,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x088c,6,clif_parse_DropItem,2,4); + parseable_packet(0x088f,6,clif_parse_TickSend,2); + parseable_packet(0x0895,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0898,5,clif_parse_HomMenu,2,4); + parseable_packet(0x089c,36,clif_parse_StoragePassword,0); + parseable_packet(0x08a5,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x091b,26,clif_parse_PartyInvite2,2); + parseable_packet(0x091c,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0922,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0924,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0938,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0939,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x093a,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x093b,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x093e,2,clif_parse_SearchStoreInfoNextPage,0); + //parseable_packet(0x0946,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0949,6,clif_parse_TakeItem,2); + parseable_packet(0x094b,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0953,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x095f,6,clif_parse_SolveCharName,2); + parseable_packet(0x0964,5,clif_parse_ChangeDir,2,4); +// 2015-04-22aRagexeRE +#elif PACKETVER == 20150422 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0955,36,clif_parse_StoragePassword,0); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2015-04-29aRagexe +#elif PACKETVER == 20150429 + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0363,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0867,36,clif_parse_StoragePassword,0); + parseable_packet(0x086a,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0886,26,clif_parse_PartyInvite2,2); + parseable_packet(0x088f,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0894,6,clif_parse_DropItem,2,4); + parseable_packet(0x0899,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x089f,-1,clif_parse_ItemListWindowSelected,2,4,8); + //parseable_packet(0x08a6,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + //parseable_packet(0x08a8,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x08ad,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0929,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x093d,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0943,6,clif_parse_TakeItem,2); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2015-05-07bRagexe +#elif PACKETVER == 20150507 + parseable_packet(0x023b,5,clif_parse_HomMenu,2,4); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,6,clif_parse_TakeItem,2); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x085a,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0864,26,clif_parse_PartyInvite2,2); + //parseable_packet(0x0887,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0889,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0924,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x092e,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x093b,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0941,8,clif_parse_MoveFromKafra,2,4); + //parseable_packet(0x0942,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0953,36,clif_parse_StoragePassword,0); + parseable_packet(0x0955,6,clif_parse_DropItem,2,4); + parseable_packet(0x0958,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2015-05-13aRagexe +#elif PACKETVER == 20150513 + parseable_packet(0x022D,2,clif_parse_ReqCloseBuyingStore,0); + //parseable_packet(0x02C4,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x035F,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0363,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0864,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0879,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0883,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0885,6,clif_parse_DropItem,2,4); + parseable_packet(0x08A8,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0923,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x0924,5,clif_parse_ChangeDir,2,4); + //parseable_packet(0x0927,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x094A,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0958,6,clif_parse_TakeItem,2); + parseable_packet(0x0960,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2); +// 2015-05-27aRagexe +#elif PACKETVER == 20150527 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x083c,36,clif_parse_StoragePassword,0); + parseable_packet(0x0940,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2015-06-17aRagexeRE or 2015-06-18aRagexeRE +#elif PACKETVER == 20150617 || PACKETVER == 20150618 + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_TakeItem,2); + parseable_packet(0x0362,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0363,36,clif_parse_StoragePassword,0); + parseable_packet(0x0365,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0436,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07ec,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + //parseable_packet(0x0811,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0869,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x086a,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x086b,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0870,26,clif_parse_PartyInvite2,2); + parseable_packet(0x087a,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0886,5,clif_parse_HomMenu,2,4); + //parseable_packet(0x0894,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0940,6,clif_parse_DropItem,2,4); + parseable_packet(0x094e,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2015-08-19aRagexeRE +#elif PACKETVER == 20150819 + parseable_packet(0x0202,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x022d,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0281,6,clif_parse_TakeItem,2); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x085d,8,clif_parse_MoveFromKafra,2,4); + //parseable_packet(0x0862,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0865,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0871,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0888,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0919,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x091e,36,clif_parse_StoragePassword,0); + parseable_packet(0x0927,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0940,6,clif_parse_DropItem,2,4); + parseable_packet(0x0961,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0967,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2015-08-26aRagexeRE +#elif PACKETVER == 20150826 + parseable_packet(0x0362,36,clif_parse_StoragePassword,0); + parseable_packet(0x0368,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0436,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x07ec,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0819,6,clif_parse_ReqClickBuyingStore,2); + //parseable_packet(0x0861,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0865,5,clif_parse_WalkToXY,2); + parseable_packet(0x086b,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0870,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x087b,6,clif_parse_SolveCharName,2); + parseable_packet(0x088b,26,clif_parse_PartyInvite2,2); + parseable_packet(0x088d,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0890,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0891,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x08a0,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x08a1,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x08a4,6,clif_parse_TakeItem,2); + parseable_packet(0x08a8,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0924,6,clif_parse_DropItem,2,4); + parseable_packet(0x0928,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x092e,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x093b,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0945,5,clif_parse_HomMenu,2,4); + parseable_packet(0x094f,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0951,6,clif_parse_TickSend,2); + parseable_packet(0x0959,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0964,19,clif_parse_WantToConnection,2,6,10,14,18); + //parseable_packet(0x0968,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0969,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); +// 2015-09-16Ragexe +#elif PACKETVER == 20150916 + parseable_packet(0x022D,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0817,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0835,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x085E,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0869,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0873,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0877,5,clif_parse_WalkToXY,2); + parseable_packet(0x087F,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0881,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x089B,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x089C,6,clif_parse_TakeItem,2); + parseable_packet(0x089E,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x08AC,6,clif_parse_TickSend,2); + parseable_packet(0x0920,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0924,26,clif_parse_PartyInvite2,2); + parseable_packet(0x092E,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x092F,6,clif_parse_DropItem,2,4); + parseable_packet(0x0934,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0936,5,clif_parse_ChangeDir,2,4); + //parseable_packet(0x0938,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x093E,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0941,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x0942,6,clif_parse_SolveCharName,2); + parseable_packet(0x0948,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + //parseable_packet(0x094F,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x095A,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0960,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0961,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x0969,19,clif_parse_WantToConnection,2,6,10,14,18); +// 2015-10-01bRagexeRE +#elif PACKETVER == 20151001 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,NULL,2,4,6); + parseable_packet(0x0366,90,NULL,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0860,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2015-10-07aRagexeRE +#elif PACKETVER == 20151007 + parseable_packet(0x0202,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + //parseable_packet(0x0862,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x093f,5,clif_parse_HomMenu,2,4); + parseable_packet(0x095f,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0961,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0967,36,clif_parse_StoragePassword,0); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2015-10-14bRagexeRE +#elif PACKETVER == 20151014 + parseable_packet(0x0202,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0817,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0838,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x085a,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x085c,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0860,6,clif_parse_DropItem,2,4); + parseable_packet(0x0863,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0867,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0872,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0874,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0881,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0883,6,clif_parse_TickSend,2); + parseable_packet(0x0884,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0889,6,clif_parse_ReqClickBuyingStore,2); + //parseable_packet(0x088e,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + //parseable_packet(0x089a,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x089b,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x089f,5,clif_parse_WalkToXY,2); + parseable_packet(0x08aa,6,clif_parse_TakeItem,2); + parseable_packet(0x091c,26,clif_parse_PartyInvite2,2); + parseable_packet(0x091d,36,clif_parse_StoragePassword,0); + parseable_packet(0x0930,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0934,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0944,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x094f,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0956,6,clif_parse_SolveCharName,2); + parseable_packet(0x095e,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0961,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0964,19,clif_parse_WantToConnection,2,6,10,14,18); +// 2015-10-28cRagexeRE +#elif PACKETVER == 20151028 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0860,36,clif_parse_StoragePassword,0); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2015-10-29aRagexe +#elif PACKETVER == 20151029 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022D,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023B,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035F,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07E4,6,clif_parse_TakeItem,2); + parseable_packet(0x07EC,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0860,36,clif_parse_StoragePassword,0); + parseable_packet(0x096A,6,clif_parse_GetCharNameRequest,2); +// 2015-11-04aRagexe +#elif PACKETVER == 20151104 + parseable_packet(0x023B,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0360,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0363,5,clif_parse_WalkToXY,2); + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0436,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0437,6,clif_parse_DropItem,2,4); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07EC,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0811,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0815,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083C,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0886,6,clif_parse_TickSend,2); + parseable_packet(0x0887,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x088B,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x088D,5,clif_parse_HomMenu,2,4); + //parseable_packet(0x08A3,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x08A5,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0928,5,clif_parse_ChangeDir,2,4); + //parseable_packet(0x0939,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x093A,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x0940,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x0964,6,clif_parse_TakeItem,2); +// 2015-11-18aRagexeRE +#elif PACKETVER == 20151118 + parseable_packet(0x022d,6,clif_parse_TickSend,2); + parseable_packet(0x035f,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0365,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x086b,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x088b,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x08ab,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0921,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0925,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x092e,5,clif_parse_ChangeDir,2,4); + //parseable_packet(0x092f,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x093c,6,clif_parse_DropItem,2,4); + parseable_packet(0x0943,6,clif_parse_TakeItem,2); + parseable_packet(0x0946,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + //parseable_packet(0x0957,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x095c,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2015-12-02bRagexeRE +#elif PACKETVER == 20151202 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0870,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +#elif PACKETVER == 20151216 + parseable_packet(0x022D,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0361,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,5,clif_parse_HomMenu,2,4); + //parseable_packet(0x0364,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0436,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083C,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x085B,6,clif_parse_TickSend,2); + parseable_packet(0x0864,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0865,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x086E,26,clif_parse_PartyInvite2,2); + //parseable_packet(0x086a,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0870,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0874,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0885,36,clif_parse_StoragePassword,0); + parseable_packet(0x088B,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x089D,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x089E,6,clif_parse_SolveCharName,2); + parseable_packet(0x08A2,5,clif_parse_WalkToXY,2); + parseable_packet(0x08A9,6,clif_parse_TakeItem,2); + parseable_packet(0x08AC,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x091D,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0944,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0947,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0949,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0954,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0960,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0966,6,clif_parse_DropItem,2,4); + parseable_packet(0x0968,10,clif_parse_UseSkillToId,2,4,6); +// 2015-12-23bRagexeRE +#elif PACKETVER == 20151223 + parseable_packet(0x02c4,8,clif_parse_MoveToKafra,2,4); + //parseable_packet(0x0362,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,6,clif_parse_TakeItem,2); + //parseable_packet(0x0802,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0815,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0864,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0866,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x086e,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0872,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0875,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0876,6,clif_parse_DropItem,2,4); + parseable_packet(0x0881,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0884,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0886,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x088d,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0890,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0891,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0898,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x08aa,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0918,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x091a,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x091b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0920,5,clif_parse_WalkToXY,2); + parseable_packet(0x0923,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0924,6,clif_parse_TickSend,2); + parseable_packet(0x095e,6,clif_parse_SolveCharName,2); + parseable_packet(0x095f,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0965,36,clif_parse_StoragePassword,0); + parseable_packet(0x0967,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); +// 2016-01-06aRagexeRE +#elif PACKETVER == 20160106 + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07ec,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0861,6,clif_parse_TakeItem,2); + parseable_packet(0x086a,6,clif_parse_DropItem,2,4); + //parseable_packet(0x086c,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0878,36,clif_parse_StoragePassword,0); + parseable_packet(0x087a,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x087f,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0885,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0889,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x088a,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0891,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x08a0,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x091d,-1,clif_parse_ItemListWindowSelected,2,4,8); + //parseable_packet(0x0940,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-01-13cRagexeRE +#elif PACKETVER == 20160113 + parseable_packet(0x022d,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x023b,5,clif_parse_WalkToXY,2); + parseable_packet(0x035f,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0815,36,clif_parse_StoragePassword,0); + parseable_packet(0x085b,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0864,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x086d,5,clif_parse_HomMenu,2,4); + //parseable_packet(0x0873,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0875,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0888,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x088b,26,clif_parse_PartyInvite2,2); + parseable_packet(0x088c,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0892,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0893,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0899,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x089a,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x08a0,6,clif_parse_TickSend,2); + parseable_packet(0x08a6,6,clif_parse_TakeItem,2); + parseable_packet(0x08aa,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0919,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x091b,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0924,6,clif_parse_DropItem,2,4); + parseable_packet(0x0930,6,clif_parse_SolveCharName,2); + parseable_packet(0x0932,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x093c,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0941,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x094d,19,clif_parse_WantToConnection,2,6,10,14,18); + //parseable_packet(0x094f,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0967,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); +// 2016-01-20aRagexeRE +#elif PACKETVER == 20160120 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0865,36,clif_parse_StoragePassword,0); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-01-27bRagexeRE +#elif PACKETVER == 20160127 + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x085e,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0922,5,clif_parse_HomMenu,2,4); + parseable_packet(0x095a,36,clif_parse_StoragePassword,0); + parseable_packet(0x0961,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-02-03aRagexeRE +#elif PACKETVER == 20160203 + parseable_packet(0x0202,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0436,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0437,6,clif_parse_TickSend,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0811,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0835,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x086c,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0872,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0873,36,clif_parse_StoragePassword,0); + //parseable_packet(0x088c,4,NULL,0); // CZ_GANGSI_RANK + //parseable_packet(0x0918,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x093e,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0940,5,clif_parse_WalkToXY,2); + parseable_packet(0x0947,6,clif_parse_DropItem,2,4); + parseable_packet(0x0954,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x095a,6,clif_parse_TakeItem,2); + parseable_packet(0x095d,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-02-11aRagexeRE +#elif PACKETVER == 20160211 + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023b,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,36,clif_parse_StoragePassword,0); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x086c,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0870,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0886,5,clif_parse_HomMenu,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-02-17cRagexeRE +#elif PACKETVER == 20160217 + parseable_packet(0x0202,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x023b,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0362,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0365,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0864,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0870,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0873,5,clif_parse_HomMenu,2,4); + parseable_packet(0x087a,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0888,6,clif_parse_TickSend,2); + parseable_packet(0x088d,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x088f,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0899,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x08a0,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x08a9,26,clif_parse_PartyInvite2,2); + parseable_packet(0x08ac,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x08ad,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x091d,5,clif_parse_WalkToXY,2); + parseable_packet(0x0920,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0926,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x092e,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x093b,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x093e,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0941,6,clif_parse_TakeItem,2); + parseable_packet(0x094a,10,clif_parse_UseSkillToPos,2,4,6,8); + //parseable_packet(0x094f,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x095e,36,clif_parse_StoragePassword,0); + parseable_packet(0x0966,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0967,6,clif_parse_SolveCharName,2); + parseable_packet(0x0969,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); +// 2016-02-24bRagexeRE +#elif PACKETVER == 20160224 + parseable_packet(0x022d,26,clif_parse_PartyInvite2,2); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0364,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0436,6,clif_parse_DropItem,2,4); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0861,19,clif_parse_WantToConnection,2,6,10,14,18); + //parseable_packet(0x086b,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0884,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0885,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0888,5,clif_parse_WalkToXY,2); + parseable_packet(0x08a9,26,clif_parse_FriendsListAdd,2); + //parseable_packet(0x0920,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0929,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x092f,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0936,36,clif_parse_StoragePassword,0); + parseable_packet(0x0938,6,clif_parse_TakeItem,2); + parseable_packet(0x094c,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0961,5,clif_parse_HomMenu,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-03-02bRagexeRE +#elif PACKETVER == 20160302 + parseable_packet(0x022d,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0367,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0802,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0819,5,clif_parse_WalkToXY,2); + parseable_packet(0x085b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0864,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0865,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0867,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0868,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0873,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0875,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x087a,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x087d,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0883,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x08a6,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x08a9,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x091a,6,clif_parse_DropItem,2,4); + parseable_packet(0x0927,6,clif_parse_TakeItem,2); + //parseable_packet(0x092d,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x092f,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0945,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x094e,36,clif_parse_StoragePassword,0); + //parseable_packet(0x0950,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0957,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x095a,6,clif_parse_TickSend,2); + parseable_packet(0x0960,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0961,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0967,6,clif_parse_SolveCharName,2); + parseable_packet(0x0968,7,clif_parse_ActionRequest,2,6); +// 2016-03-09aRagexeRE +#elif PACKETVER == 20160309 + parseable_packet(0x023b,6,clif_parse_DropItem,2,4); + parseable_packet(0x0281,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0364,36,clif_parse_StoragePassword,0); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0819,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0838,5,clif_parse_WalkToXY,2); + parseable_packet(0x083c,26,clif_parse_PartyInvite2,2); + parseable_packet(0x085a,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x085f,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0866,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x086a,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + //parseable_packet(0x0873,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x087c,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x087e,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x089b,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x089d,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x08a7,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x091d,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0920,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0922,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + //parseable_packet(0x0929,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x092a,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x092e,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0932,5,clif_parse_HomMenu,2,4); + parseable_packet(0x094f,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0956,6,clif_parse_TickSend,2); + parseable_packet(0x095e,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x096a,6,clif_parse_TakeItem,2); +// 2016-03-16aRagexeRE +#elif PACKETVER == 20160316 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0922,36,clif_parse_StoragePassword,0); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-03-23aRagexeRE +#elif PACKETVER == 20160323 + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0365,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + //parseable_packet(0x0867,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0869,6,clif_parse_TakeItem,2); + parseable_packet(0x086a,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0872,36,clif_parse_StoragePassword,0); + parseable_packet(0x0878,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0883,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0896,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x089a,5,clif_parse_HomMenu,2,4); + //parseable_packet(0x091b,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0926,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0927,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0933,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x093c,6,clif_parse_DropItem,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-03-30aRagexeRE +#elif PACKETVER == 20160330 + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0365,36,clif_parse_StoragePassword,0); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0867,26,clif_parse_PartyInvite2,2); + parseable_packet(0x086d,6,clif_parse_TakeItem,2); + //parseable_packet(0x0878,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x087f,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0889,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x088b,5,clif_parse_HomMenu,2,4); + //parseable_packet(0x088d,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0918,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0925,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x092a,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x092c,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0930,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0939,6,clif_parse_DropItem,2,4); + parseable_packet(0x093b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-04-06aRagexeRE +#elif PACKETVER == 20160406 + parseable_packet(0x0364,6,clif_parse_SolveCharName,2); + parseable_packet(0x07e4,6,clif_parse_DropItem,2,4); + parseable_packet(0x0819,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x085a,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x085c,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0869,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0877,6,clif_parse_TakeItem,2); + parseable_packet(0x0878,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0879,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0884,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0892,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0895,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0898,26,clif_parse_PartyInvite2,2); + parseable_packet(0x089b,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x089e,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x08a1,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x08a9,2,clif_parse_ReqCloseBuyingStore,0); + //parseable_packet(0x08ac,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0927,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x092d,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0933,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0934,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0940,6,clif_parse_TickSend,2); + parseable_packet(0x0949,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x094d,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0953,36,clif_parse_StoragePassword,0); + parseable_packet(0x095d,5,clif_parse_HomMenu,2,4); + parseable_packet(0x095f,5,clif_parse_WalkToXY,2); + //parseable_packet(0x0962,4,NULL,0); // CZ_GANGSI_RANK +// 2016-04-14bRagexeRE +#elif PACKETVER == 20160414 + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0363,6,clif_parse_TakeItem,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0862,19,clif_parse_WantToConnection,2,6,10,14,18); + //parseable_packet(0x087a,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0880,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0885,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x089e,26,clif_parse_PartyInvite2,2); + //parseable_packet(0x0918,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0922,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0927,36,clif_parse_StoragePassword,0); + parseable_packet(0x0931,6,clif_parse_DropItem,2,4); + parseable_packet(0x0934,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0945,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0953,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-04-20aRagexeRE +#elif PACKETVER == 20160420 + parseable_packet(0x022d,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x02c4,6,clif_parse_TickSend,2); + parseable_packet(0x035f,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0864,6,clif_parse_TakeItem,2); + //parseable_packet(0x0870,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0872,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0874,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0884,6,clif_parse_DropItem,2,4); + parseable_packet(0x0888,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x088b,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x08a5,36,clif_parse_StoragePassword,0); + parseable_packet(0x092f,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0935,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x094e,-1,clif_parse_ItemListWindowSelected,2,4,8); + //parseable_packet(0x095c,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-04-27aRagexeRE +#elif PACKETVER == 20160427 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0835,36,clif_parse_StoragePassword,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0940,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-05-04aRagexeRE +#elif PACKETVER == 20160504 + parseable_packet(0x0202,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0363,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + //parseable_packet(0x0365,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x083c,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x085f,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x086b,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x087f,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0884,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0886,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0887,26,clif_parse_PartyInvite2,2); + parseable_packet(0x088a,6,clif_parse_TakeItem,2); + parseable_packet(0x088d,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x088f,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0890,6,clif_parse_DropItem,2,4); + parseable_packet(0x0893,18,clif_parse_PartyBookingRegisterReq,2,4); + //parseable_packet(0x0898,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x089d,6,clif_parse_SolveCharName,2); + parseable_packet(0x08ad,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0918,6,clif_parse_TickSend,2); + parseable_packet(0x0921,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0922,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0924,5,clif_parse_WalkToXY,2); + parseable_packet(0x093e,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0940,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0941,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0948,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0952,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x095b,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0969,36,clif_parse_StoragePassword,0); +// 2016-05-11aRagexeRE +#elif PACKETVER == 20160511 + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x085e,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0894,26,clif_parse_FriendsListAdd,2); + //parseable_packet(0x089b,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0918,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0920,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0940,36,clif_parse_StoragePassword,0); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-05-18aRagexeRE +#elif PACKETVER == 20160518 + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x086c,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0874,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x089a,36,clif_parse_StoragePassword,0); + parseable_packet(0x08a9,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0928,5,clif_parse_HomMenu,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-05-25aRagexeRE +#elif PACKETVER == 20160525 + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + //parseable_packet(0x085a,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x085e,6,clif_parse_DropItem,2,4); + parseable_packet(0x0867,5,clif_parse_HomMenu,2,4); + parseable_packet(0x086a,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0899,6,clif_parse_TakeItem,2); + parseable_packet(0x089c,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x091d,36,clif_parse_StoragePassword,0); + parseable_packet(0x092c,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0937,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0945,26,clif_parse_PartyInvite2,2); + parseable_packet(0x094a,8,clif_parse_MoveToKafra,2,4); + //parseable_packet(0x094e,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0951,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0956,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-06-01aRagexeRE +#elif PACKETVER == 20160601 + parseable_packet(0x0202,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x02c4,26,clif_parse_PartyInvite2,2); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0863,6,clif_parse_TakeItem,2); + parseable_packet(0x0870,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x087d,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x088d,6,clif_parse_DropItem,2,4); + parseable_packet(0x088f,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0895,5,clif_parse_HomMenu,2,4); + //parseable_packet(0x08a7,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x08ac,19,clif_parse_WantToConnection,2,6,10,14,18); + //parseable_packet(0x0924,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x095b,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x095f,36,clif_parse_StoragePassword,0); + parseable_packet(0x0961,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-06-08aRagexeRE +#elif PACKETVER == 20160608 + parseable_packet(0x022d,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x02c4,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x035f,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0436,5,clif_parse_WalkToXY,2); + parseable_packet(0x0437,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07ec,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0802,6,clif_parse_TickSend,2); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + //parseable_packet(0x085c,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0885,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0889,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0899,6,clif_parse_TakeItem,2); + parseable_packet(0x089b,5,clif_parse_HomMenu,2,4); + parseable_packet(0x08a6,8,clif_parse_MoveFromKafra,2,4); + //parseable_packet(0x093b,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x094d,6,clif_parse_DropItem,2,4); + parseable_packet(0x0958,36,clif_parse_StoragePassword,0); + parseable_packet(0x095b,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0969,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-06-15aRagexeRE +#elif PACKETVER == 20160615 + parseable_packet(0x0281,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0363,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0364,36,clif_parse_StoragePassword,0); + parseable_packet(0x0369,5,clif_parse_HomMenu,2,4); + parseable_packet(0x083c,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0866,5,clif_parse_WalkToXY,2); + //parseable_packet(0x0870,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x087d,6,clif_parse_SolveCharName,2); + parseable_packet(0x087e,6,clif_parse_TakeItem,2); + parseable_packet(0x087f,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + //parseable_packet(0x0884,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0887,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0888,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x088a,6,clif_parse_TickSend,2); + parseable_packet(0x088d,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0891,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0898,6,clif_parse_DropItem,2,4); + parseable_packet(0x092f,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x093e,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0947,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0948,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x094a,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x094b,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0954,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0957,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0958,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x095c,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x095e,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0961,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); +// 2016-06-22aRagexeRE +#elif PACKETVER == 20160622 + parseable_packet(0x023b,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x035f,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0361,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x07e4,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0861,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + //parseable_packet(0x0865,4,NULL,0); // CZ_GANGSI_RANK + //parseable_packet(0x0867,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0880,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0887,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0890,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0891,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0892,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x089a,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x089e,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x08a2,6,clif_parse_SolveCharName,2); + parseable_packet(0x08a8,36,clif_parse_StoragePassword,0); + parseable_packet(0x091c,6,clif_parse_TakeItem,2); + parseable_packet(0x092d,6,clif_parse_TickSend,2); + parseable_packet(0x092f,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0936,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0937,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x093b,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x093f,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0946,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0959,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0965,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0969,6,clif_parse_DropItem,2,4); +// 2016-06-30aRagexeRE +#elif PACKETVER == 20160630 + parseable_packet(0x0202,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x022d,5,clif_parse_WalkToXY,2); + //parseable_packet(0x035f,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0363,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0368,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x085c,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + //parseable_packet(0x085e,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0860,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0861,6,clif_parse_DropItem,2,4); + parseable_packet(0x0863,6,clif_parse_SolveCharName,2); + parseable_packet(0x0867,36,clif_parse_StoragePassword,0); + parseable_packet(0x086b,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0881,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0885,5,clif_parse_HomMenu,2,4); + parseable_packet(0x088e,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0893,6,clif_parse_TickSend,2); + parseable_packet(0x091e,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0922,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0925,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0926,26,clif_parse_PartyInvite2,2); + parseable_packet(0x093e,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0946,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0948,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x094a,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0957,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x095a,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0968,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0969,6,clif_parse_TakeItem,2); + parseable_packet(0x096a,8,clif_parse_MoveToKafra,2,4); +// 2016-07-06cRagexeRE +#elif PACKETVER == 20160706 + parseable_packet(0x0362,6,clif_parse_SolveCharName,2); + parseable_packet(0x0436,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x085f,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0860,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0869,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x086b,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0884,26,clif_parse_FriendsListAdd,2); + //parseable_packet(0x0886,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0889,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0892,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0899,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x08a4,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x08a5,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x08a8,6,clif_parse_TickSend,2); + parseable_packet(0x0918,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x091b,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0924,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0926,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0927,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0929,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x092d,5,clif_parse_WalkToXY,2); + parseable_packet(0x0939,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x093d,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0944,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0945,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x094c,36,clif_parse_StoragePassword,0); + parseable_packet(0x0952,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0957,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0958,6,clif_parse_TakeItem,2); +// 2016-07-13bRagexeRE +#elif PACKETVER == 20160713 + parseable_packet(0x022d,36,clif_parse_StoragePassword,0); + parseable_packet(0x0363,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0364,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0838,6,clif_parse_TakeItem,2); + parseable_packet(0x0860,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0865,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0869,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0875,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0877,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x087b,6,clif_parse_TickSend,2); + parseable_packet(0x0883,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x088d,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0892,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x089a,26,clif_parse_PartyInvite2,2); + //parseable_packet(0x089f,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x08a2,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x08a4,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x091c,5,clif_parse_WalkToXY,2); + parseable_packet(0x091d,6,clif_parse_SolveCharName,2); + parseable_packet(0x0921,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0922,5,clif_parse_HomMenu,2,4); + parseable_packet(0x092c,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0931,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0939,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0944,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0945,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0947,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0957,6,clif_parse_DropItem,2,4); + //parseable_packet(0x095b,8,NULL,0); // CZ_JOIN_BATTLE_FIELD +// 2016-07-20aRagexeRE +#elif PACKETVER == 20160720 + parseable_packet(0x0362,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0363,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0365,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x07e4,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0819,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0838,5,clif_parse_WalkToXY,2); + parseable_packet(0x085b,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x086a,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x086d,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x087f,6,clif_parse_DropItem,2,4); + parseable_packet(0x0883,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0887,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0897,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x089a,36,clif_parse_StoragePassword,0); + parseable_packet(0x089c,5,clif_parse_HomMenu,2,4); + parseable_packet(0x089e,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x08a0,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x08aa,-1,clif_parse_ItemListWindowSelected,2,4,8); + //parseable_packet(0x0917,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x091c,6,clif_parse_TakeItem,2); + parseable_packet(0x092a,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x093b,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x093e,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0946,6,clif_parse_TickSend,2); + parseable_packet(0x094d,6,clif_parse_SolveCharName,2); + //parseable_packet(0x0953,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x095b,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0960,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0969,26,clif_parse_PartyInvite2,2); +// 2016-07-27bRagexeRE +#elif PACKETVER == 20160727 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + //parseable_packet(0x023b,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0362,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0363,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0436,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0438,6,clif_parse_TickSend,2); + parseable_packet(0x07ec,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0866,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0868,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0869,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0874,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0877,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0883,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0887,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x088e,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0891,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x089f,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x08a2,36,clif_parse_StoragePassword,0); + parseable_packet(0x08a4,6,clif_parse_SolveCharName,2); + parseable_packet(0x08a7,6,clif_parse_TakeItem,2); + parseable_packet(0x092e,5,clif_parse_WalkToXY,2); + parseable_packet(0x0936,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0941,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0946,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0949,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0951,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x095f,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0966,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0969,-1,clif_parse_ItemListWindowSelected,2,4,8); +// 2016-08-03bRagexeRE +#elif PACKETVER == 20160803 + parseable_packet(0x0364,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x085d,6,clif_parse_ReqClickBuyingStore,2); + //parseable_packet(0x0878,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x087f,5,clif_parse_WalkToXY,2); + parseable_packet(0x0881,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0886,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0887,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0888,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x088b,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0891,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0895,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x089c,6,clif_parse_DropItem,2,4); + parseable_packet(0x089e,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x08a1,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x091b,6,clif_parse_TakeItem,2); + parseable_packet(0x0929,36,clif_parse_StoragePassword,0); + parseable_packet(0x0930,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0932,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0934,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0937,10,clif_parse_UseSkillToPos,2,4,6,8); + //parseable_packet(0x093a,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x093e,6,clif_parse_TickSend,2); + parseable_packet(0x093f,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0952,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0955,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0956,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0959,6,clif_parse_SolveCharName,2); + parseable_packet(0x095a,26,clif_parse_PartyInvite2,2); + parseable_packet(0x096a,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); +// 2016-08-10aRagexeRE +#elif PACKETVER == 20160810 + parseable_packet(0x0361,36,clif_parse_StoragePassword,0); + parseable_packet(0x0819,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0838,26,clif_parse_PartyInvite2,2); + parseable_packet(0x085d,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x085e,6,clif_parse_DropItem,2,4); + parseable_packet(0x085f,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0860,6,clif_parse_SolveCharName,2); + parseable_packet(0x086f,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0875,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0879,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x087a,5,clif_parse_WalkToXY,2); + parseable_packet(0x0885,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0888,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0890,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x089d,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x089f,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x08a9,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x091a,6,clif_parse_TakeItem,2); + parseable_packet(0x091b,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x091c,10,clif_parse_UseSkillToId,2,4,6); + //parseable_packet(0x0926,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x092b,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x092d,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0935,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0943,6,clif_parse_TickSend,2); + parseable_packet(0x094b,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0959,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x095b,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0967,8,NULL,0); // CZ_JOIN_BATTLE_FIELD +// 2016-08-31bRagexeRE +#elif PACKETVER == 20160831 + parseable_packet(0x022d,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0366,6,clif_parse_DropItem,2,4); + parseable_packet(0x07ec,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0835,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0865,5,clif_parse_WalkToXY,2); + parseable_packet(0x086d,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0870,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0874,26,clif_parse_PartyInvite2,2); + //parseable_packet(0x0876,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0878,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x087c,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x08a8,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x08a9,6,clif_parse_TickSend,2); + parseable_packet(0x0917,36,clif_parse_StoragePassword,0); + //parseable_packet(0x091b,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x092c,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x092e,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0938,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x093a,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0946,6,clif_parse_SolveCharName,2); + parseable_packet(0x094a,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x094f,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0950,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0954,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0957,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x095e,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0960,6,clif_parse_TakeItem,2); + parseable_packet(0x0964,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0967,10,clif_parse_UseSkillToId,2,4,6); +// 2016-09-07aRagexeRE +#elif PACKETVER == 20160907 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x091c,36,clif_parse_StoragePassword,0); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-09-13aRagexeRE +#elif PACKETVER == 20160913 + parseable_packet(0x0361,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0817,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x085b,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0865,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0874,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0875,6,clif_parse_TickSend,2); + parseable_packet(0x0879,6,clif_parse_DropItem,2,4); + //parseable_packet(0x087a,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x087b,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0887,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0889,6,clif_parse_TakeItem,2); + parseable_packet(0x088e,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x088f,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0891,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0892,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x089b,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x089c,36,clif_parse_StoragePassword,0); + parseable_packet(0x08a5,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0928,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0935,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x093a,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0949,26,clif_parse_PartyInvite2,2); + parseable_packet(0x094a,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0950,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0952,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0954,5,clif_parse_WalkToXY,2); + //parseable_packet(0x0962,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0963,6,clif_parse_SolveCharName,2); + parseable_packet(0x0968,2,clif_parse_ReqCloseBuyingStore,0); +// 2016-09-21bRagexeRE +#elif PACKETVER == 20160921 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x094a,36,clif_parse_StoragePassword,0); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-09-28dRagexeRE +#elif PACKETVER == 20160928 + parseable_packet(0x0202,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0366,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0436,6,clif_parse_ReqClickBuyingStore,2); + //parseable_packet(0x0811,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0838,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0864,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0866,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x086d,6,clif_parse_DropItem,2,4); + parseable_packet(0x0872,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0878,6,clif_parse_SolveCharName,2); + parseable_packet(0x087f,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0889,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x088e,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0897,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x089a,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x08a2,36,clif_parse_StoragePassword,0); + parseable_packet(0x08a9,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0919,5,clif_parse_WalkToXY,2); + parseable_packet(0x091e,6,clif_parse_TickSend,2); + parseable_packet(0x0927,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x092d,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0944,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x094d,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x094e,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0953,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0955,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0957,6,clif_parse_TakeItem,2); + //parseable_packet(0x095a,4,NULL,0); // CZ_GANGSI_RANK +// 2016-10-05aRagexeRE +#elif PACKETVER == 20161005 + parseable_packet(0x0202,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0838,36,clif_parse_StoragePassword,0); + parseable_packet(0x0863,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0886,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x088e,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0891,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0892,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x089b,26,clif_parse_PartyInvite2,2); + parseable_packet(0x089c,6,clif_parse_TakeItem,2); + parseable_packet(0x08a0,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x08ac,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x08ad,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0918,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0919,6,clif_parse_SolveCharName,2); + //parseable_packet(0x091e,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x092b,6,clif_parse_TickSend,2); + parseable_packet(0x0931,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0932,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x093b,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0942,6,clif_parse_DropItem,2,4); + parseable_packet(0x0944,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0945,5,clif_parse_WalkToXY,2); + parseable_packet(0x094a,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x094d,5,clif_parse_HomMenu,2,4); + //parseable_packet(0x0952,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x095a,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x095b,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0967,10,clif_parse_UseSkillToId,2,4,6); +// 2016-10-12aRagexeRE +#elif PACKETVER == 20161012 + parseable_packet(0x023b,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + parseable_packet(0x0364,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0365,6,clif_parse_TickSend,2); + parseable_packet(0x0369,26,clif_parse_PartyInvite2,2); + parseable_packet(0x07ec,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0819,26,clif_parse_FriendsListAdd,2); + //parseable_packet(0x085b,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x085e,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0863,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0868,6,clif_parse_TakeItem,2); + parseable_packet(0x086d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0872,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0875,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0880,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0893,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x08a0,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x092d,6,clif_parse_SolveCharName,2); + parseable_packet(0x0936,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0937,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0939,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0943,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0944,8,clif_parse_MoveFromKafra,2,4); + //parseable_packet(0x094f,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0951,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x095c,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0962,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0966,5,clif_parse_WalkToXY,2); + parseable_packet(0x0967,36,clif_parse_StoragePassword,0); +// 2016-10-19aRagexeRE +#elif PACKETVER == 20161019 + parseable_packet(0x022d,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0361,5,clif_parse_WalkToXY,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0889,36,clif_parse_StoragePassword,0); + //parseable_packet(0x0892,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0946,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0963,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-10-26bRagexeRE +#elif PACKETVER == 20161026 + parseable_packet(0x0363,36,clif_parse_StoragePassword,0); + parseable_packet(0x0438,5,clif_parse_WalkToXY,2); + parseable_packet(0x0802,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x085a,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x085f,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0861,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0862,6,clif_parse_TickSend,2); + parseable_packet(0x086a,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x086c,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + //parseable_packet(0x086e,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x087a,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + //parseable_packet(0x087c,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x087f,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0886,6,clif_parse_DropItem,2,4); + parseable_packet(0x0891,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0894,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0898,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x091a,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x091b,6,clif_parse_TakeItem,2); + parseable_packet(0x0926,6,clif_parse_SolveCharName,2); + parseable_packet(0x092c,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x092e,5,clif_parse_HomMenu,2,4); + parseable_packet(0x092f,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0930,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x094b,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0953,26,clif_parse_PartyInvite2,2); + parseable_packet(0x095c,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x095e,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0962,5,clif_parse_ChangeDir,2,4); +// 2016-11-03aRagexeRE +#elif PACKETVER == 20161103 + parseable_packet(0x0361,8,clif_parse_MoveFromKafra,2,4); + //parseable_packet(0x0367,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0436,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0802,6,clif_parse_TakeItem,2); + parseable_packet(0x0838,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x083c,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x085f,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0869,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x086c,2,clif_parse_SearchStoreInfoNextPage,0); + //parseable_packet(0x086f,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0874,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0886,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x088f,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0890,6,clif_parse_DropItem,2,4); + parseable_packet(0x089f,26,clif_parse_PartyInvite2,2); + parseable_packet(0x08a2,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x08aa,5,clif_parse_WalkToXY,2); + parseable_packet(0x091b,36,clif_parse_StoragePassword,0); + parseable_packet(0x0922,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0925,6,clif_parse_SolveCharName,2); + parseable_packet(0x0928,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x092f,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0936,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0946,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0949,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x095e,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0964,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0965,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0966,6,clif_parse_TickSend,2); +// 2016-11-09bRagexeRE +#elif PACKETVER == 20161109 + parseable_packet(0x02c4,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0361,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0362,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,6,clif_parse_TickSend,2); + parseable_packet(0x0366,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,6,clif_parse_SolveCharName,2); + parseable_packet(0x085d,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x085e,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0865,5,clif_parse_WalkToXY,2); + parseable_packet(0x086a,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x086d,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0870,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0876,6,clif_parse_ReqClickBuyingStore,2); + //parseable_packet(0x087a,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0881,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x088e,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0891,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0898,6,clif_parse_TakeItem,2); + parseable_packet(0x089a,6,clif_parse_DropItem,2,4); + parseable_packet(0x089d,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + //parseable_packet(0x089f,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x08a7,5,clif_parse_HomMenu,2,4); + parseable_packet(0x08ad,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0927,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0937,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x093c,36,clif_parse_StoragePassword,0); + parseable_packet(0x093f,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0954,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0956,5,clif_parse_ChangeDir,2,4); +// 2016-11-16cRagexeRE +#elif PACKETVER == 20161116 + parseable_packet(0x0368,6,clif_parse_TickSend,2); + parseable_packet(0x0369,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0835,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x085f,6,clif_parse_DropItem,2,4); + parseable_packet(0x0864,26,clif_parse_PartyInvite2,2); + parseable_packet(0x086f,6,clif_parse_TakeItem,2); + parseable_packet(0x0885,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x088b,5,clif_parse_HomMenu,2,4); + parseable_packet(0x088d,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x088f,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0890,5,clif_parse_WalkToXY,2); + parseable_packet(0x0892,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0893,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x08a1,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x08a2,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x08aa,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x08ac,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0920,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0925,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x092a,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0931,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x093c,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x094a,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0952,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0957,6,clif_parse_SolveCharName,2); + parseable_packet(0x095b,36,clif_parse_StoragePassword,0); + //parseable_packet(0x095d,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x095f,2,clif_parse_SearchStoreInfoNextPage,0); + //parseable_packet(0x0967,8,NULL,0); // CZ_JOIN_BATTLE_FIELD +// 2016-11-23aRagexeRE +#elif PACKETVER == 20161123 + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0362,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0437,6,clif_parse_TickSend,2); + parseable_packet(0x085c,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0861,5,clif_parse_WalkToXY,2); + parseable_packet(0x0862,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0866,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x086f,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0871,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x087f,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0880,36,clif_parse_StoragePassword,0); + parseable_packet(0x0882,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x088b,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x089c,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x08a9,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x08aa,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x091a,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0926,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x092a,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x092f,6,clif_parse_TakeItem,2); + parseable_packet(0x0930,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0941,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x094d,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x094f,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + //parseable_packet(0x095a,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x095b,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0962,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x096a,6,clif_parse_SolveCharName,2); +// 2016-11-30bRagexeRE +#elif PACKETVER == 20161130 + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,6,clif_parse_TickSend,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + //parseable_packet(0x088f,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0931,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0943,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0954,36,clif_parse_StoragePassword,0); + parseable_packet(0x0959,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-12-07eRagexeRE +#elif PACKETVER == 20161207 + parseable_packet(0x023b,5,clif_parse_HomMenu,2,4); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0867,26,clif_parse_FriendsListAdd,2); + //parseable_packet(0x0868,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0875,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x087e,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0886,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x08a1,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x08a2,6,clif_parse_TakeItem,2); + parseable_packet(0x08ad,6,clif_parse_DropItem,2,4); + parseable_packet(0x0918,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x091d,8,clif_parse_MoveFromKafra,2,4); + //parseable_packet(0x0943,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x095d,36,clif_parse_StoragePassword,0); + parseable_packet(0x0965,26,clif_parse_PartyInvite2,2); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-12-14bRagexeRE +#elif PACKETVER == 20161214 + parseable_packet(0x022d,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0281,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x02c4,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0364,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0436,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + //parseable_packet(0x0819,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x085a,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0862,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x086d,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0887,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0895,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0899,36,clif_parse_StoragePassword,0); + parseable_packet(0x08a6,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x092e,6,clif_parse_TakeItem,2); + parseable_packet(0x093d,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2016-12-21aRagexeRE +#elif PACKETVER == 20161221 + parseable_packet(0x035f,6,clif_parse_TakeItem,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + parseable_packet(0x0366,6,clif_parse_SolveCharName,2); + parseable_packet(0x0438,5,clif_parse_WalkToXY,2); + parseable_packet(0x0817,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x085b,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0866,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0876,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0881,6,clif_parse_GetCharNameRequest,2); + //parseable_packet(0x0884,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0885,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x088c,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0890,36,clif_parse_StoragePassword,0); + //parseable_packet(0x0899,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x089a,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x089b,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x08aa,6,clif_parse_TickSend,2); + parseable_packet(0x091e,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0926,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0928,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x092c,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x092e,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0930,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0943,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0946,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x094b,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x095a,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0964,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0965,5,clif_parse_ChangeDir,2,4); +// 2016-12-28aRagexeRE +#elif PACKETVER == 20161228 + parseable_packet(0x0362,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x085a,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x085e,5,clif_parse_HomMenu,4); + parseable_packet(0x0865,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x086a,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x086c,6,clif_parse_TakeItem,2); + parseable_packet(0x086d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0870,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0871,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0875,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x087f,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0886,5,clif_parse_WalkToXY,2); + parseable_packet(0x0889,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0893,6,clif_parse_DropItem,2,4); + parseable_packet(0x089f,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x08a2,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x08a3,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x08a5,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x08ab,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x08ac,6,clif_parse_SolveCharName,2); + parseable_packet(0x08ad,36,clif_parse_StoragePassword,0); + parseable_packet(0x091c,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0929,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x092c,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0934,26,clif_parse_PartyInvite2,2); + //parseable_packet(0x0935,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + //parseable_packet(0x0938,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x093d,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0944,6,clif_parse_TickSend,2); +// 2017-01-04bRagexeRE +#elif PACKETVER == 20170104 + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x085a,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x087f,36,clif_parse_StoragePassword,0); + parseable_packet(0x0896,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x091b,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0940,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2017-01-11aRagexeRE +#elif PACKETVER == 20170111 + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x085d,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0877,26,clif_parse_FriendsListAdd,2); + //parseable_packet(0x087f,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x088a,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x08a1,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x08a3,6,clif_parse_TakeItem,2); + parseable_packet(0x08a6,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x091a,36,clif_parse_StoragePassword,0); + parseable_packet(0x091b,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0940,6,clif_parse_DropItem,2,4); + parseable_packet(0x094c,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0961,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0969,26,clif_parse_PartyInvite2,2); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2017-01-18aRagexeRE +#elif PACKETVER == 20170118 + parseable_packet(0x022d,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0364,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0436,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0862,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0865,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x086f,6,clif_parse_TakeItem,2); + //parseable_packet(0x0873,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x089e,26,clif_parse_PartyInvite2,2); + parseable_packet(0x08ad,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x091f,18,clif_parse_PartyBookingRegisterReq,2,4); + //parseable_packet(0x0927,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0933,6,clif_parse_DropItem,2,4); + parseable_packet(0x0958,36,clif_parse_StoragePassword,0); + parseable_packet(0x0962,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x096a,8,clif_parse_MoveToKafra,2,4); +// 2017-01-25aRagexeRE +#elif PACKETVER == 20170125 + parseable_packet(0x0438,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0811,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x086e,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0876,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0877,6,clif_parse_DropItem,2,4); + parseable_packet(0x0879,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x087b,6,clif_parse_TakeItem,2); + parseable_packet(0x087d,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0881,5,clif_parse_ChangeDir,2,4); + //parseable_packet(0x0884,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0893,36,clif_parse_StoragePassword,0); + //parseable_packet(0x0894,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0895,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0898,6,clif_parse_SolveCharName,2); + parseable_packet(0x089b,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x08a5,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x091b,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x091c,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x091d,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0920,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0929,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x092b,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0930,5,clif_parse_WalkToXY,2); + parseable_packet(0x093c,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0943,6,clif_parse_TickSend,2); + parseable_packet(0x0944,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x095c,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0965,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0968,2,clif_parse_SearchStoreInfoNextPage,0); +// 2017-02-01aRagexeRE +#elif PACKETVER == 20170201 + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0815,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x085d,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x085e,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0875,6,clif_parse_TakeItem,2); + //parseable_packet(0x0879,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0881,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0884,5,clif_parse_WalkToXY,2); + parseable_packet(0x0885,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0886,36,clif_parse_StoragePassword,0); + parseable_packet(0x088b,6,clif_parse_DropItem,2,4); + //parseable_packet(0x08a4,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0919,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0920,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0938,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0940,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x094c,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0966,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0969,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2017-02-08aRagexeRE +#elif PACKETVER == 20170208 + //parseable_packet(0x02c4,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0367,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x085c,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0860,5,clif_parse_ChangeDir,2,4); + //parseable_packet(0x087a,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x088c,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0892,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x08a1,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x08ac,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0921,6,clif_parse_DropItem,2,4); + parseable_packet(0x0923,6,clif_parse_TakeItem,2); + parseable_packet(0x092d,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0932,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0937,36,clif_parse_StoragePassword,0); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2017-02-15aRagexeRE +#elif PACKETVER == 20170215 + parseable_packet(0x02c4,36,clif_parse_StoragePassword,0); + parseable_packet(0x035f,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0360,6,clif_parse_TickSend,2); + parseable_packet(0x0811,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x083c,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x085c,6,clif_parse_DropItem,2,4); + parseable_packet(0x0876,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x087c,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x087d,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x087e,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0883,6,clif_parse_SolveCharName,2); + //parseable_packet(0x0884,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x088a,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x088b,26,clif_parse_PartyInvite2,2); + parseable_packet(0x088c,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0890,10,clif_parse_UseSkillToPos,2,4,6,8); + //parseable_packet(0x0896,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x089b,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x08a2,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x08a8,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x091c,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0925,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x092b,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x092d,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0942,6,clif_parse_TakeItem,2); + parseable_packet(0x094e,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x095f,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0962,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0969,5,clif_parse_WalkToXY,2); +// 2017-02-22aRagexeRE +#elif PACKETVER == 20170222 + parseable_packet(0x0202,5,clif_parse_HomMenu,2,4); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x085f,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0866,6,clif_parse_DropItem,2,4); + parseable_packet(0x0870,18,clif_parse_PartyBookingRegisterReq,2,4); + //parseable_packet(0x0871,4,NULL,0); // CZ_GANGSI_RANK + //parseable_packet(0x0877,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0889,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0894,6,clif_parse_TakeItem,2); + parseable_packet(0x08a3,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x08a8,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0937,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0939,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0943,36,clif_parse_StoragePassword,0); + parseable_packet(0x095d,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0962,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2017-02-28aRagexeRE +#elif PACKETVER == 20170228 + parseable_packet(0x022d, 6, clif_parse_DropItem, 2, 4); + parseable_packet(0x0360, 7, clif_parse_ActionRequest, 2, 6); + parseable_packet(0x0362, 5, clif_parse_HomMenu, 2, 4); + parseable_packet(0x0819, 12, clif_parse_SearchStoreInfoListItemClick, 2, 6, 10); + parseable_packet(0x085e, 90, clif_parse_UseSkillToPosMoreInfo, 2, 4, 6, 8, 10); + parseable_packet(0x0863, -1, clif_parse_SearchStoreInfo, 2, 4, 5, 9, 13, 14, 15); + parseable_packet(0x086b, 19, clif_parse_WantToConnection, 2, 6, 10, 14, 18); + parseable_packet(0x0873, -1, clif_parse_ItemListWindowSelected, 2, 4, 8); + parseable_packet(0x0874, -1, clif_parse_ReqOpenBuyingStore, 2, 4, 8, 9, 89); + parseable_packet(0x0876, 2, clif_parse_ReqCloseBuyingStore, 0); + parseable_packet(0x0883, 2, clif_parse_SearchStoreInfoNextPage, 0); + parseable_packet(0x0884, 5, clif_parse_WalkToXY, 2); + parseable_packet(0x0889, 5, clif_parse_ChangeDir, 2, 4); + parseable_packet(0x0893, 6, clif_parse_GetCharNameRequest, 2); + parseable_packet(0x089e, 8, clif_parse_MoveToKafra, 2, 4); + parseable_packet(0x08a0, 26, clif_parse_FriendsListAdd, 2); + parseable_packet(0x08a2, 36, clif_parse_StoragePassword, 0); + //parseable_packet(0x08a6,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x08a7, 6, clif_parse_ReqClickBuyingStore, 2); + parseable_packet(0x091f, 10, clif_parse_UseSkillToId, 2, 4, 6); + parseable_packet(0x092a, 6, clif_parse_TakeItem, 2); + parseable_packet(0x092e, -1, clif_parse_ReqTradeBuyingStore, 2, 4, 8, 12); + parseable_packet(0x0937, 6, clif_parse_TickSend, 2); + //parseable_packet(0x093e,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0944, 8, clif_parse_MoveFromKafra, 2, 4); + parseable_packet(0x0947, 6, clif_parse_SolveCharName, 2); + parseable_packet(0x0948, 26, clif_parse_PartyInvite2, 2); + parseable_packet(0x0952, 10, clif_parse_UseSkillToPos, 2, 4, 6, 8); + parseable_packet(0x0955, 18, clif_parse_PartyBookingRegisterReq, 2, 4); +// 2017-03-08bRagexeRE +#elif PACKETVER == 20170308 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x087d,36,clif_parse_StoragePassword,0); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2017-03-15cRagexeRE +#elif PACKETVER == 20170315 + parseable_packet(0x02c4,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x035f,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0360,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0366,6,clif_parse_TakeItem,2); + parseable_packet(0x0367,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0436,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x07ec,6,clif_parse_TickSend,2); + //parseable_packet(0x085c,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0863,5,clif_parse_HomMenu,2,4); + parseable_packet(0x086a,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0872,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x087b,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0884,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x088b,18,clif_parse_PartyBookingRegisterReq,2,4); + //parseable_packet(0x088d,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x088f,5,clif_parse_WalkToXY,2); + parseable_packet(0x0892,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x089c,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x08aa,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x091a,6,clif_parse_DropItem,2,4); + parseable_packet(0x091b,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x091d,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0920,6,clif_parse_SolveCharName,2); + parseable_packet(0x0922,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0944,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x094a,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x094e,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0950,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0952,36,clif_parse_StoragePassword,0); +// 2017-03-22aRagexeRE +#elif PACKETVER == 20170322 + parseable_packet(0x0202,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x022d,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x023b,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0361,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x091a,36,clif_parse_StoragePassword,0); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2017-03-29dRagexeRE +#elif PACKETVER == 20170329 + parseable_packet(0x0281,26,clif_parse_PartyInvite2,2); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0363,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x085d,36,clif_parse_StoragePassword,0); + parseable_packet(0x087a,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0888,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x08a8,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0917,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0926,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0929,6,clif_parse_TakeItem,2); + parseable_packet(0x092e,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0937,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0939,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0949,8,clif_parse_MoveFromKafra,2,4); + //parseable_packet(0x095f,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2017-04-05bRagexeRE +#elif PACKETVER == 20170405 + parseable_packet(0x022d,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0281,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0363,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,6,clif_parse_TakeItem,2); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x085f,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0860,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0864,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0865,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x086f,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0893,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x08a5,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x094c,36,clif_parse_StoragePassword,0); + //parseable_packet(0x094f,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0964,6,clif_parse_DropItem,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2017-04-12aRagexeRE +#elif PACKETVER == 20170412 + parseable_packet(0x023b,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0365,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0863,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0869,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x086d,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0878,5,clif_parse_WalkToXY,2); + //parseable_packet(0x0879,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x087b,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x088b,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0890,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0893,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0898,6,clif_parse_SolveCharName,2); + parseable_packet(0x089a,5,clif_parse_HomMenu,2,4); + parseable_packet(0x089c,6,clif_parse_DropItem,2,4); + parseable_packet(0x08a1,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x091a,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x091e,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0929,6,clif_parse_TickSend,2); + //parseable_packet(0x092e,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0938,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0942,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0945,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0949,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x094f,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0952,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0959,6,clif_parse_TakeItem,2); + parseable_packet(0x095b,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x095c,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x095d,36,clif_parse_StoragePassword,0); +// 2017-04-19bRagexeRE +#elif PACKETVER == 20170419 + parseable_packet(0x0811,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0819,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0838,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x085a,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x085e,5,clif_parse_WalkToXY,2); + parseable_packet(0x0862,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0868,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x086a,18,clif_parse_PartyBookingRegisterReq,2,4); + //parseable_packet(0x0872,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0881,36,clif_parse_StoragePassword,0); + parseable_packet(0x088d,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x088f,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0897,6,clif_parse_DropItem,2,4); + parseable_packet(0x0898,6,clif_parse_TickSend,2); + parseable_packet(0x089d,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x08aa,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x091b,6,clif_parse_SolveCharName,2); + parseable_packet(0x0920,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0922,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0930,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0931,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0935,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x093a,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x093f,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0942,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x095c,6,clif_parse_TakeItem,2); + parseable_packet(0x095d,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + //parseable_packet(0x0963,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0965,6,clif_parse_ReqClickBuyingStore,2); +// 2017-04-26dRagexeRE +#elif PACKETVER == 20170426 + parseable_packet(0x0281,36,clif_parse_StoragePassword,0); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0866,-1,clif_parse_ItemListWindowSelected,2,4,8); + //parseable_packet(0x086f,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x087a,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0887,6,clif_parse_SolveCharName,2); + parseable_packet(0x0899,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x089c,5,clif_parse_HomMenu,2,4); + parseable_packet(0x08a2,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x08a4,6,clif_parse_TakeItem,2); + //parseable_packet(0x091f,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0927,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0940,6,clif_parse_DropItem,2,4); + parseable_packet(0x0958,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0963,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2017-05-02dRagexeRE +#elif PACKETVER == 20170502 + parseable_packet(0x0281,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x035f,6,clif_parse_TickSend,2); + parseable_packet(0x0360,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0362,6,clif_parse_DropItem,2,4); + //parseable_packet(0x0363,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0364,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0365,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0366,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0368,6,clif_parse_SolveCharName,2); + parseable_packet(0x0369,7,clif_parse_ActionRequest,2,6); + //parseable_packet(0x0436,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0437,5,clif_parse_WalkToXY,2); + parseable_packet(0x0438,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x07e4,6,clif_parse_TakeItem,2); + parseable_packet(0x07ec,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x0802,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0811,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0815,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0817,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0819,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0835,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0838,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x083c,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0875,36,clif_parse_StoragePassword,0); + parseable_packet(0x0894,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x089c,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x093c,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0950,5,clif_parse_HomMenu,2,4); + parseable_packet(0x096a,6,clif_parse_GetCharNameRequest,2); +// 2017-05-17aRagexeRE +#elif PACKETVER == 20170517 + //parseable_packet(0x0364,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0367,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0437,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0802,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0815,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0817,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0868,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0875,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x087b,6,clif_parse_SolveCharName,2); + parseable_packet(0x087d,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x088c,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x088d,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0894,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0896,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0899,26,clif_parse_PartyInvite2,2); + //parseable_packet(0x089e,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x089f,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x08a2,6,clif_parse_TickSend,2); + parseable_packet(0x08a8,5,clif_parse_WalkToXY,2); + parseable_packet(0x08aa,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x091b,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0923,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x093b,6,clif_parse_DropItem,2,4); + parseable_packet(0x0945,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0946,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0947,36,clif_parse_StoragePassword,0); + parseable_packet(0x0958,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0960,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0964,6,clif_parse_TakeItem,2); +// 2017-05-24aRagexeRE +#elif PACKETVER == 20170524 + parseable_packet(0x0364,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0368,36,clif_parse_StoragePassword,0); + parseable_packet(0x0802,6,clif_parse_DropItem,2,4); + parseable_packet(0x085e,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x085f,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0860,6,clif_parse_TickSend,2); + parseable_packet(0x0864,6,clif_parse_TakeItem,2); + parseable_packet(0x0866,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0868,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x086d,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0873,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x0874,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x087d,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x0882,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x088d,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x0894,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x089c,5,clif_parse_WalkToXY,2); + parseable_packet(0x08a1,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + //parseable_packet(0x091e,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0923,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x0925,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0934,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0946,10,clif_parse_UseSkillToPos,2,4,6,8); + //parseable_packet(0x0958,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x095a,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x095b,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0964,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0967,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x0968,6,clif_parse_SolveCharName,2); +// 2017-05-31aRagexeRE +#elif PACKETVER == 20170531 + parseable_packet(0x0361,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x0369,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x07e4,5,clif_parse_WalkToXY,2); + parseable_packet(0x07ec,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0819,6,clif_parse_TickSend,2); + //parseable_packet(0x085b,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x085f,6,clif_parse_SolveCharName,2); + parseable_packet(0x0861,26,clif_parse_FriendsListAdd,2); + //parseable_packet(0x0868,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0873,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0875,10,clif_parse_UseSkillToPos,2,4,6,8); + parseable_packet(0x0878,26,clif_parse_PartyInvite2,2); + parseable_packet(0x087b,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x0885,-1,clif_parse_ItemListWindowSelected,2,4,8); + parseable_packet(0x088b,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); + parseable_packet(0x088d,6,clif_parse_DropItem,2,4); + parseable_packet(0x0894,19,clif_parse_WantToConnection,2,6,10,14,18); + parseable_packet(0x089a,36,clif_parse_StoragePassword,0); + parseable_packet(0x089c,5,clif_parse_HomMenu,4); + parseable_packet(0x08a2,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x08ac,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x08ad,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x092d,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0933,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0937,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0940,18,clif_parse_PartyBookingRegisterReq,2,4); + parseable_packet(0x0945,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0963,6,clif_parse_TakeItem,2); + parseable_packet(0x0968,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); +// 2017-06-07cRagexeRE +#elif PACKETVER == 20170607 + parseable_packet(0x0361,-1,clif_parse_ItemListWindowSelected,2,4,8,12); + parseable_packet(0x0364,36,clif_parse_StoragePassword,2,4,20); + parseable_packet(0x07e4,6,clif_parse_TickSend,2); + parseable_packet(0x085a,5,clif_parse_ChangeDir,2,4); + parseable_packet(0x085e,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); + parseable_packet(0x0862,6,clif_parse_GetCharNameRequest,2); + parseable_packet(0x0863,6,clif_parse_ReqClickBuyingStore,2); + parseable_packet(0x0864,6,clif_parse_DropItem,2,4); + parseable_packet(0x0871,19,clif_parse_WantToConnection,2,6,10,14,18); + //parseable_packet(0x0873,8,NULL,0); // CZ_JOIN_BATTLE_FIELD + parseable_packet(0x0875,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); + parseable_packet(0x0885,26,clif_parse_FriendsListAdd,2); + parseable_packet(0x088a,8,clif_parse_MoveFromKafra,2,4); + parseable_packet(0x0897,6,clif_parse_TakeItem,2); + parseable_packet(0x089d,8,clif_parse_MoveToKafra,2,4); + parseable_packet(0x08a9,10,clif_parse_UseSkillToId,2,4,6); + parseable_packet(0x08ab,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); + parseable_packet(0x0917,2,clif_parse_SearchStoreInfoNextPage,0); + parseable_packet(0x0918,18,clif_parse_PartyBookingRegisterReq,2,4,6); + parseable_packet(0x0919,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); + parseable_packet(0x0925,26,clif_parse_PartyInvite2,2); + parseable_packet(0x0927,10,clif_parse_UseSkillToPos,2,4,6,8); + //parseable_packet(0x0931,4,NULL,0); // CZ_GANGSI_RANK + parseable_packet(0x0934,5,clif_parse_WalkToXY,2); + parseable_packet(0x0938,7,clif_parse_ActionRequest,2,6); + parseable_packet(0x093d,2,clif_parse_ReqCloseBuyingStore,0); + parseable_packet(0x0942,5,clif_parse_HomMenu,2,4); + parseable_packet(0x0944,6,clif_parse_SolveCharName,2); + parseable_packet(0x0949,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); +#endif + +#endif /* _CLIF_SHUFFLE_H_ */ diff --git a/src/map/map-server.vcxproj.filters b/src/map/map-server.vcxproj.filters index b78f42f62a..751815681b 100644 --- a/src/map/map-server.vcxproj.filters +++ b/src/map/map-server.vcxproj.filters @@ -131,6 +131,15 @@ <ClInclude Include="clan.h"> <Filter>Header Files</Filter> </ClInclude> + <ClInclude Include="clif_obfuscation.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="clif_packetdb.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="clif_shuffle.h"> + <Filter>Header Files</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="atcommand.c"> diff --git a/src/map/pc.c b/src/map/pc.c index c941e0dd24..ee1c222f6f 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1228,10 +1228,10 @@ bool pc_authok(struct map_session_data *sd, uint32 login_id2, time_t expiration_ //display login notice ShowInfo("'"CL_WHITE"%s"CL_RESET"' logged in." " (AID/CID: '"CL_WHITE"%d/%d"CL_RESET"'," - " Packet Ver: '"CL_WHITE"%d"CL_RESET"', IP: '"CL_WHITE"%d.%d.%d.%d"CL_RESET"'," + " IP: '"CL_WHITE"%d.%d.%d.%d"CL_RESET"'," " Group '"CL_WHITE"%d"CL_RESET"').\n", sd->status.name, sd->status.account_id, sd->status.char_id, - sd->packet_ver, CONVIP(ip), sd->group_id); + CONVIP(ip), sd->group_id); // Send friends list clif_friendslist_send(sd); diff --git a/src/map/pc.h b/src/map/pc.h index 3853d8294d..7e72a76b9e 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -289,7 +289,6 @@ struct map_session_data { int count_rewarp; //count how many time we being rewarped int langtype; - uint32 packet_ver; // 5: old, 6: 7july04, 7: 13july04, 8: 26july04, 9: 9aug04/16aug04/17aug04, 10: 6sept04, 11: 21sept04, 12: 18oct04, 13: 25oct04 ... 18 struct mmo_charstatus status; // Item Storages diff --git a/src/map/script.c b/src/map/script.c index e7bcfbae7a..1303898aba 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -21284,36 +21284,6 @@ BUILDIN_FUNC(party_destroy) return SCRIPT_CMD_SUCCESS; } -/** Checks if a player's client version meets a required version or date. -* @param type: 0 - check by version number; 1 - check by date -* @param data: Input -*/ -BUILDIN_FUNC(is_clientver) { - TBL_PC *sd = NULL; - int type; - int data; - int ret = 0; - - if ( !script_charid2sd(4,sd) ) { - script_pushint(st,0); - return SCRIPT_CMD_FAILURE; - } - - type = script_getnum(st,2); - data = script_getnum(st,3); - - switch(type){ - case 0: - ret = (sd->packet_ver >= data)?1:0; - break; - case 1: - ret = (sd->packet_ver >= date2version(data))?1:0; - break; - } - script_pushint(st,ret); - return SCRIPT_CMD_SUCCESS; -} - /** Returns various information about a player's VIP status. Need to enable VIP system * vip_status <type>,{"<character name>"}; * @param type: Info type, see enum vip_status_type @@ -23758,7 +23728,6 @@ struct script_function buildin_func[] = { BUILDIN_DEF(clan_join,"i?"), BUILDIN_DEF(clan_leave,"?"), - BUILDIN_DEF(is_clientver,"ii?"), BUILDIN_DEF2(montransform, "transform", "vi?????"), // Monster Transform [malufett/Hercules] BUILDIN_DEF2(montransform, "active_transform", "vi?????"), BUILDIN_DEF(vip_status,"i?"),