From e197f8a551263d2641643681709916d07090c590 Mon Sep 17 00:00:00 2001 From: glighta Date: Thu, 13 Jun 2013 21:39:17 +0000 Subject: [PATCH] -Follow up r17361 -- update client.conf, (description for version and flag). bugreport:7731 -- add packet_ver_flag2 battle_conf to expand version restriction. -Upd charserv to allow multiple clientversion at once. (2012 and 2013 PACKETVER was creating conflict of info sent ver30 shouldn't have 0x82 for exemple) --NB: clientvers rely on clientinfo version, paid attention you have set the good one for your client. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17363 54d463be-8e91-2dee-dedb-b68131a5f0ec --- conf/battle/client.conf | 56 +++++++++++++++++++++++++++-------------- db/packet_db.txt | 2 +- src/char/char.c | 27 ++++++++++---------- src/login/login.c | 4 +-- src/map/battle.c | 3 ++- src/map/battle.h | 1 + src/map/clif.c | 11 +++++--- 7 files changed, 63 insertions(+), 41 deletions(-) diff --git a/conf/battle/client.conf b/conf/battle/client.conf index e41ad19566..eb50f72afe 100644 --- a/conf/battle/client.conf +++ b/conf/battle/client.conf @@ -12,25 +12,43 @@ // 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 -// 0x00001: Clients older than 2004-09-06aSakray (packet versions 5-9) -// 0x00002: 2004-09-06aSakexe (version 10) -// 0x00004: 2004-09-20aSakexe (version 11) -// 0x00008: 2004-10-05aSakexe (version 12) -// 0x00010: 2004-10-25aSakexe (version 13) -// 0x00020: 2004-11-29aSakexe (version 14) -// 0x00040: 2005-01-10bSakexe (version 15) -// 0x00080: 2005-05-09aSakexe (version 16) -// 0x00100: 2005-06-28aSakexe (version 17) -// 0x00200: 2005-07-18aSakexe (version 18) -// 0x00400: 2005-07-19bSakexe (version 19) -// 0x00800: 2006-03-27aSakexe (version 20) -// 0x01000: 2007-01-08aSakexe (version 21) -// 0x02000: 2007-02-12aSakexe (version 22) -// 0x04000: 2008-09-10aSakexe (version 23) -// 0x08000: 2008-08-27aRagexeRE (version 24) -// 0x10000: 2008-09-10aRagexeRE (version 25) -// default value: 0xFFFFFFF (all clients) -packet_ver_flag: 0xFFFFFFF +// 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;40]) +packet_ver_flag: 0x7FFFFFFF + +// 0x00000001: 2013-06-19 Ragexe (version 40) +// 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. diff --git a/db/packet_db.txt b/db/packet_db.txt index 0cc67cc1cd..3b00e675c7 100644 --- a/db/packet_db.txt +++ b/db/packet_db.txt @@ -1784,7 +1784,7 @@ packet_ver:31 //2012-06-18 packet_ver: 32 0x0983,29 -0x0861,18,bookingregreq,2:4:6 //actually 05-03 +0x0861,18,bookingregreq,2:4:6 //actually 12-05-03 //2012-07-02aRagexeRE (unstable) packet_ver: 33 diff --git a/src/char/char.c b/src/char/char.c index 4de4ecbf46..8bbe47d7e7 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -1960,20 +1960,19 @@ void char_parse_req_charlist(int fd, struct char_session_data* sd){ //---------------------------------------- int mmo_char_send006b(int fd, struct char_session_data* sd){ int j, offset = 0; -#if PACKETVER >= 20100413 - offset += 3; -#endif + if(sd->version > 25) //20100413 + offset += 3; if (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 PACKETVER >= 20100413 - WFIFOB(fd,4) = MAX_CHARS; // Max slots. - WFIFOB(fd,5) = sd->char_slots; // Available slots. (PremiumStartSlot) - WFIFOB(fd,6) = MAX_CHARS; // Premium slots. (Any existent chars past sd->char_slots but within MAX_CHARS will show a 'Premium Service' in red) -#endif + if(sd->version > 25){ //20100413 + WFIFOB(fd,4) = MAX_CHARS; // Max slots. + WFIFOB(fd,5) = sd->char_slots; // Available slots. (PremiumStartSlot) + WFIFOB(fd,6) = MAX_CHARS; // Premium slots. (Any existent chars past sd->char_slots but within MAX_CHARS will show a 'Premium Service' in red) + } memset(WFIFOP(fd,4 + offset), 0, 20); // unknown bytes j+=mmo_chars_fromsql(sd, WFIFOP(fd,j)); WFIFOW(fd,2) = j; // packet len @@ -2001,14 +2000,14 @@ void mmo_char_send082d(int fd, struct char_session_data* sd) { } void mmo_char_send(int fd, struct char_session_data* sd){ -#if PACKETVER >= 20130000 - mmo_char_send082d(fd,sd); - char_charlist_notify(fd,sd); - char_block_character(fd,sd); -#endif + ShowInfo("sd->version = %d\n",sd->version); + if(sd->version >= 34){ //20130000 + mmo_char_send082d(fd,sd); + char_charlist_notify(fd,sd); + char_block_character(fd,sd); + } //@FIXME dump from kro doesn't show 6b transmission mmo_char_send006b(fd,sd); -//#endif } int char_married(int pl1, int pl2) diff --git a/src/login/login.c b/src/login/login.c index d3675fe749..e41b7865e1 100644 --- a/src/login/login.c +++ b/src/login/login.c @@ -1486,7 +1486,7 @@ int parse_login(int fd) safestrncpy(sd->userid, username, NAME_LENGTH); if( israwpass ) { - ShowStatus("Request for connection of %s (ip: %s).\n", sd->userid, ip); + ShowStatus("Request for connection of %s (ip: %s) version=%d\n", sd->userid, ip,sd->version); safestrncpy(sd->passwd, password, NAME_LENGTH); if( login_config.use_md5_passwds ) MD5_String(sd->passwd, sd->passwd); @@ -1494,7 +1494,7 @@ int parse_login(int fd) } else { - ShowStatus("Request for connection (passwdenc mode) of %s (ip: %s).\n", sd->userid, ip); + ShowStatus("Request for connection (passwdenc mode) of %s (ip: %s) version=%d\n", sd->userid, ip,sd->version); bin2hex(sd->passwd, passhash, 16); // raw binary data here! sd->passwdenc = PASSWORDENC; } diff --git a/src/map/battle.c b/src/map/battle.c index 29e0758fc6..3f5e995455 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -5812,7 +5812,8 @@ 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, 0xFFFFFF,0x0000,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 d76439e630..7deb53179f 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -337,6 +337,7 @@ extern struct Battle_Config 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/clif.c b/src/map/clif.c index 5b616f2d14..b8491b856e 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -721,7 +721,7 @@ void clif_charselectok(int id, uint8 ok) /// Makes an item appear on the ground. /// 009e .L .W .B .W .W .B .B .W (ZC_ITEM_FALL_ENTRY) -/// 084b(2013) .L .W .W .B .W .W .B .B .W (ZC_ITEM_FALL_ENTRY4) +/// 084b .L .W .W .B .W .W .B .B .W (ZC_ITEM_FALL_ENTRY4) void clif_dropflooritem(struct flooritem_data* fitem) { #if PACKETVER >= 20130000 @@ -3211,7 +3211,9 @@ void clif_arrowequip(struct map_session_data *sd,int val) nullpo_retv(sd); pc_stop_attack(sd); // [Valaris] - +#if PACKETVER >= 20121128 + clif_status_change(&sd->bl, SI_CLIENT_ONLY_EQUIP_ARROW, 1, INVALID_TIMER, 0, 0, 0); +#endif fd=sd->fd; WFIFOHEAD(fd, packet_len(0x013c)); WFIFOW(fd,0)=0x013c; @@ -9061,8 +9063,9 @@ void clif_parse_WantToConnection(int fd, struct map_session_data* sd) sex = RFIFOB(fd, packet_db[packet_ver][cmd].pos[4]); 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 && (battle_config.packet_ver_flag & 1<<(packet_ver-9)) == 0)) // version not allowed + (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)); WFIFOHEAD(fd,packet_len(0x6a));