From db1277e76bb5f81c22fb062f7330defaea407109 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 Date: Tue, 9 Jun 2020 22:41:54 +0200 Subject: [PATCH] Fixed some invalid packet version checks (#5072) Fixes #5069 Thanks to @sader1992 --- src/map/clif.cpp | 16 ++++++---------- src/map/clif_packetdb.hpp | 27 +++++---------------------- src/map/packets.hpp | 13 +++++++++++++ 3 files changed, 24 insertions(+), 32 deletions(-) diff --git a/src/map/clif.cpp b/src/map/clif.cpp index b0dda5ea75..6f630f7585 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -12850,27 +12850,23 @@ void clif_parse_SelectArrow(int fd,struct map_session_data *sd) { return; } -#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114 - int nameid = RFIFOL(fd, 2); -#else - int nameid = RFIFOW(fd, 2); -#endif + struct PACKET_CZ_REQ_MAKINGARROW* p = (struct PACKET_CZ_REQ_MAKINGARROW*)RFIFOP( fd, 0 ); switch (sd->menuskill_id) { case AC_MAKINGARROW: - skill_arrow_create(sd,nameid); + skill_arrow_create(sd,p->itemId); break; case SA_CREATECON: - skill_produce_mix(sd,SA_CREATECON,nameid,0,0,0,1,-1); + skill_produce_mix(sd,SA_CREATECON,p->itemId,0,0,0,1,-1); break; case WL_READING_SB: - skill_spellbook(sd,nameid); + skill_spellbook(sd,p->itemId); break; case GC_POISONINGWEAPON: - skill_poisoningweapon(sd,nameid); + skill_poisoningweapon(sd,p->itemId); break; case NC_MAGICDECOY: - skill_magicdecoy(sd,nameid); + skill_magicdecoy(sd,p->itemId); break; } diff --git a/src/map/clif_packetdb.hpp b/src/map/clif_packetdb.hpp index 5903d2f6cb..26511bfeeb 100644 --- a/src/map/clif_packetdb.hpp +++ b/src/map/clif_packetdb.hpp @@ -308,7 +308,7 @@ packet(0x018b,4); packet(0x018c,29); packet(0x018d,-1); - parseable_packet(0x018e,10,clif_parse_ProduceMix,2,4,6,8); + parseable_packet( HEADER_CZ_REQMAKINGITEM, sizeof( struct PACKET_CZ_REQMAKINGITEM ), clif_parse_ProduceMix, 0 ); packet(0x018f,6); parseable_packet(0x0190,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); packet( HEADER_ZC_TALKBOX_CHATCONTENTS, sizeof( struct PACKET_ZC_TALKBOX_CHATCONTENTS ) ); @@ -340,7 +340,7 @@ packet(0x01ab,12); packet(0x01ac,6); packet(0x01ad,-1); - parseable_packet(0x01ae,4,clif_parse_SelectArrow,2); + parseable_packet( HEADER_CZ_REQ_MAKINGARROW, sizeof( PACKET_CZ_REQ_MAKINGARROW ), clif_parse_SelectArrow, 0 ); parseable_packet(0x01af,4,clif_parse_ChangeCart,2); packet(0x01b0,11); packet(0x01b1,7); @@ -419,7 +419,7 @@ packet(0x01fa,48); packet(0x01fb,56); packet(0x01fc,-1); - parseable_packet(0x01fd,4,clif_parse_RepairItem,0); + parseable_packet( HEADER_CZ_REQ_ITEMREPAIR, sizeof( struct PACKET_CZ_REQ_ITEMREPAIR ), clif_parse_RepairItem, 0 ); packet(0x01fe,5); packet(0x01ff,10); packet(0x0200,26); @@ -875,7 +875,7 @@ #if PACKETVER >= 20051010 packet(0x020e,32); packet(0x025a,-1); - parseable_packet(0x025b,6,clif_parse_Cooking,2,4); + parseable_packet( HEADER_CZ_REQ_MAKINGITEM, sizeof( struct PACKET_CZ_REQ_MAKINGITEM ), clif_parse_Cooking, 0 ); #endif // 2005-10-13aSakexe @@ -1072,11 +1072,6 @@ parseable_packet(0x0190,19,clif_parse_ActionRequest,5,18); #endif -// 2007-05-07aSakexe -#if PACKETVER >= 20070507 - parseable_packet(0x01fd,15,clif_parse_RepairItem,0); -#endif - // 2007-02-27aSakexe to 2007-10-02aSakexe #if PACKETVER >= 20070227 parseable_packet(0x0288,10,clif_parse_npccashshop_buy,2,4,6); @@ -1915,7 +1910,6 @@ // 2012-04-10aRagexeRE #if PACKETVER >= 20120410 - parseable_packet(0x01fd,15,clif_parse_RepairItem,0); 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); @@ -2049,7 +2043,6 @@ // 2013-03-20Ragexe (Judas) #if PACKETVER >= 20130320 parseable_packet(0x014f,6,clif_parse_GuildRequestInfo,2); - parseable_packet(0x01fd,15,clif_parse_RepairItem,0); //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); @@ -2428,7 +2421,7 @@ // 2018-03-21aRagexeRE #if PACKETVER >= 20180321 - parseable_packet(0x0A49,20,clif_parse_private_airship_request,0); + parseable_packet( 0x0A49, sizeof( struct PACKET_CZ_PRIVATE_AIRSHIP_REQUEST ), clif_parse_private_airship_request, 0 ); packet(0x0A4A,6); packet(0x0A4B,22); packet(0x0A4C,28); @@ -2439,16 +2432,6 @@ packet(0x0ADD, 22); #endif -#if PACKETVER >= 20180704 - parseable_packet( 0x018e, sizeof( struct PACKET_CZ_REQMAKINGITEM ), clif_parse_ProduceMix, 0 ); - parseable_packet( 0x01ae, 6, clif_parse_SelectArrow, 0 ); - parseable_packet( 0x01fd, sizeof( struct PACKET_CZ_REQ_ITEMREPAIR ), clif_parse_RepairItem, 0 ); - parseable_packet( 0x025b, sizeof( struct PACKET_CZ_REQ_MAKINGITEM ), clif_parse_Cooking, 0 ); - // this is done in clif_shuffle - //parseable_packet( 0x083C, sizeof( struct PACKET_CZ_SSILIST_ITEM_CLICK ), clif_parse_SearchStoreInfoListItemClick, 0 ); - parseable_packet( 0x0A49, sizeof( struct PACKET_CZ_PRIVATE_AIRSHIP_REQUEST ), clif_parse_private_airship_request, 0 ); -#endif - #if PACKETVER_MAIN_NUM >= 20181002 || PACKETVER_RE_NUM >= 20181002 || PACKETVER_ZERO_NUM >= 20181010 parseable_packet( 0x0B10, sizeof( struct PACKET_CZ_START_USE_SKILL ), clif_parse_StartUseSkillToId, 0 ); parseable_packet( 0x0B11, sizeof( struct PACKET_CZ_STOP_USE_SKILL ), clif_parse_StopUseSkillToId, 0 ); diff --git a/src/map/packets.hpp b/src/map/packets.hpp index 401e325f64..803695f5c8 100644 --- a/src/map/packets.hpp +++ b/src/map/packets.hpp @@ -39,6 +39,15 @@ #pragma pack( push, 1 ) #endif +struct PACKET_CZ_REQ_MAKINGARROW{ + int16 packetType; +#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114 + uint32 itemId; +#else + uint16 itemId; +#endif +} __attribute__((packed)); + struct PACKET_CZ_SE_PC_BUY_CASHITEM_LIST_sub{ uint32 itemId; uint32 amount; @@ -163,6 +172,10 @@ struct PACKET_ZC_ACK_GUILDSTORAGE_LOG{ #pragma pack( pop ) #endif +const uint16 HEADER_CZ_REQMAKINGITEM = 0x18e; +const uint16 HEADER_CZ_REQ_MAKINGARROW = 0x1ae; +const uint16 HEADER_CZ_REQ_ITEMREPAIR = 0x1fd; +const uint16 HEADER_CZ_REQ_MAKINGITEM = 0x25b; const uint16 HEADER_CZ_REQ_CASH_BARGAIN_SALE_ITEM_INFO = 0x9ac; const uint16 HEADER_ZC_ACK_CASH_BARGAIN_SALE_ITEM_INFO = 0x9ad; const uint16 HEADER_CZ_REQ_APPLY_BARGAIN_SALE_ITEM = 0x9ae;