From 172f8c8ac189e1f6590324eb0aca14cffdba3083 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 6 Nov 2018 04:15:56 +0300 Subject: Add compile time validation for packet ZC_ITEM_PREVIEW. --- src/map/HPMmap.c | 1 - src/map/clif.c | 2 +- src/map/packets_struct.h | 45 +++++++++++++++++++++++++++++---------------- 3 files changed, 30 insertions(+), 18 deletions(-) (limited to 'src/map') diff --git a/src/map/HPMmap.c b/src/map/HPMmap.c index 8ea524d23..6eff37df8 100644 --- a/src/map/HPMmap.c +++ b/src/map/HPMmap.c @@ -74,7 +74,6 @@ #include "map/mercenary.h" #include "map/mob.h" #include "map/npc.h" -#include "map/packets_struct.h" #include "map/party.h" #include "map/path.h" #include "map/pc.h" diff --git a/src/map/clif.c b/src/map/clif.c index d4c378f27..9f1038d2c 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -21971,7 +21971,7 @@ static void clif_item_preview(struct map_session_data *sd, int n) Assert_retv(n >= 0 && n < MAX_INVENTORY); struct PACKET_ZC_ITEM_PREVIEW p; - p.packetType = itemPreview; + p.packetType = HEADER_ZC_ITEM_PREVIEW; p.index = n + 2; #if PACKETVER_MAIN_NUM >= 20181017 || PACKETVER_RE_NUM >= 20181017 || PACKETVER_ZERO_NUM >= 20181024 p.isDamaged = (sd->status.inventory[n].attribute & ATTR_BROKEN) != 0 ? 1 : 0; diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index 5d097104e..cd3a3b989 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -25,10 +25,15 @@ #include "common/cbasetypes.h" #include "common/mmo.h" +#include "common/packetsstatic_len.h" // Packet DB #define MAX_PACKET_POS 20 +#define DEFINE_PACKET_HEADER(name, id) \ + STATIC_ASSERT(sizeof(struct PACKET_##name) == PACKET_LEN_##id, "Wrong size PACKET_"#name); \ + enum { HEADER_##name = id }; + /** * **/ @@ -449,11 +454,6 @@ enum packet_headers { #else guildLeave = 0x15a, #endif -#if PACKETVER_MAIN_NUM >= 20181017 || PACKETVER_RE_NUM >= 20181017 || PACKETVER_ZERO_NUM >= 20181024 - itemPreview = 0xb13, -#else - itemPreview = 0xab9, -#endif #if PACKETVER_RE_NUM >= 20181031 autoSpellList = 0xafb, #else @@ -2882,17 +2882,6 @@ struct PACKET_ZC_CAMERA_INFO { float latitude; } __attribute__((packed)); -struct PACKET_ZC_ITEM_PREVIEW { - int16 packetType; - int16 index; -#if PACKETVER_MAIN_NUM >= 20181017 || PACKETVER_RE_NUM >= 20181017 || PACKETVER_ZERO_NUM >= 20181024 - int8 isDamaged; -#endif - int16 refiningLevel; - struct EQUIPSLOTINFO slot; - struct ItemOptions option_data[MAX_ITEM_OPTIONS]; -} __attribute__((packed)); - #if PACKETVER_RE_NUM >= 20181031 #define PACKET_ZC_AUTOSPELLLIST PACKET_ZC_AUTOSPELLLIST2 #else @@ -2910,6 +2899,30 @@ struct PACKET_ZC_AUTOSPELLLIST2 { int skills[]; } __attribute__((packed)); +#if PACKETVER_MAIN_NUM >= 20170726 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO) +#if PACKETVER_MAIN_NUM >= 20181017 || PACKETVER_RE_NUM >= 20181017 || PACKETVER_ZERO_NUM >= 20181024 +struct PACKET_ZC_ITEM_PREVIEW { + int16 packetType; + int16 index; + int8 isDamaged; + int16 refiningLevel; + struct EQUIPSLOTINFO slot; + struct ItemOptions option_data[MAX_ITEM_OPTIONS]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ITEM_PREVIEW, 0x0b13); +#else // PACKETVER_MAIN_NUM >= 20181017 || PACKETVER_RE_NUM >= 20181017 || PACKETVER_ZERO_NUM >= 20181024 + +struct PACKET_ZC_ITEM_PREVIEW { + int16 packetType; + int16 index; + int16 refiningLevel; + struct EQUIPSLOTINFO slot; + struct ItemOptions option_data[MAX_ITEM_OPTIONS]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ITEM_PREVIEW, 0x0ab9); +#endif // PACKETVER_MAIN_NUM >= 20181017 || PACKETVER_RE_NUM >= 20181017 || PACKETVER_ZERO_NUM >= 20181024 +#endif // PACKETVER_MAIN_NUM >= 20170726 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO) + #if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute #pragma pack(pop) #endif // not NetBSD < 6 / Solaris -- cgit v1.2.3-60-g2f50