summaryrefslogtreecommitdiff
path: root/src/map/packets_struct.h
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2018-11-06 04:15:56 +0300
committerAndrei Karas <akaras@inbox.ru>2018-11-14 06:00:50 +0300
commit172f8c8ac189e1f6590324eb0aca14cffdba3083 (patch)
tree28145c62104455d9ab69c2f8f3b75e8d206a1bf8 /src/map/packets_struct.h
parent27fb22d9f492cffe206594e5af0f854cf8fa3ce5 (diff)
downloadhercules-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.h45
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