diff options
author | Andrei Karas <akaras@inbox.ru> | 2018-11-06 04:15:56 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2018-11-14 06:00:50 +0300 |
commit | 172f8c8ac189e1f6590324eb0aca14cffdba3083 (patch) | |
tree | 28145c62104455d9ab69c2f8f3b75e8d206a1bf8 /src/map/packets_struct.h | |
parent | 27fb22d9f492cffe206594e5af0f854cf8fa3ce5 (diff) | |
download | hercules-172f8c8ac189e1f6590324eb0aca14cffdba3083.tar.gz hercules-172f8c8ac189e1f6590324eb0aca14cffdba3083.tar.bz2 hercules-172f8c8ac189e1f6590324eb0aca14cffdba3083.tar.xz hercules-172f8c8ac189e1f6590324eb0aca14cffdba3083.zip |
Add compile time validation for packet ZC_ITEM_PREVIEW.
Diffstat (limited to 'src/map/packets_struct.h')
-rw-r--r-- | src/map/packets_struct.h | 45 |
1 files changed, 29 insertions, 16 deletions
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 |