Files
rathena/src/char/packets.hpp
2023-02-12 12:46:06 -08:00

141 lines
3.1 KiB
C++

// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
// For more information, see LICENCE in the main folder
#ifndef PACKETS_HPP
#define PACKETS_HPP
#include <common/mmo.hpp>
#pragma warning( push )
#pragma warning( disable : 4200 )
// NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
#if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
#pragma pack( push, 1 )
#endif
struct CHARACTER_INFO{
uint32 GID;
#if PACKETVER >= 20170830
int64 exp;
#else
int32 exp;
#endif
int32 money;
#if PACKETVER >= 20170830
int64 jobexp;
#else
int32 jobexp;
#endif
int32 joblevel;
int32 bodystate;
int32 healthstate;
int32 effectstate;
int32 virtue;
int32 honor;
int16 jobpoint;
#if PACKETVER_RE_NUM >= 20211103 || PACKETVER_MAIN_NUM >= 20220330
int64 hp;
int64 maxhp;
int64 sp;
int64 maxsp;
#else
int32 hp;
int32 maxhp;
int16 sp;
int16 maxsp;
#endif
int16 speed;
int16 job;
int16 head;
#if PACKETVER >= 20141022
int16 body;
#endif
int16 weapon;
int16 level;
int16 sppoint;
int16 accessory;
int16 shield;
int16 accessory2;
int16 accessory3;
int16 headpalette;
int16 bodypalette;
char name[24];
uint8 Str;
uint8 Agi;
uint8 Vit;
uint8 Int;
uint8 Dex;
uint8 Luk;
uint8 CharNum;
uint8 hairColor;
int16 bIsChangedCharName;
#if (PACKETVER >= 20100720 && PACKETVER <= 20100727) || PACKETVER >= 20100803
char mapName[16];
#endif
#if PACKETVER >= 20100803
int32 DelRevDate;
#endif
#if PACKETVER >= 20110111
int32 robePalette;
#endif
#if PACKETVER >= 20110928
int32 chr_slot_changeCnt;
#endif
#if PACKETVER >= 20111025
int32 chr_name_changeCnt;
#endif
#if PACKETVER >= 20141016
uint8 sex;
#endif
} __attribute__((packed));
struct PACKET_HC_NOTIFY_ACCESSIBLE_MAPNAME_sub{
int32 status;
char map[MAP_NAME_LENGTH_EXT];
} __attribute__((packed));
struct PACKET_HC_NOTIFY_ACCESSIBLE_MAPNAME{
int16 packetType;
int16 packetLength;
struct PACKET_HC_NOTIFY_ACCESSIBLE_MAPNAME_sub maps[];
} __attribute__((packed));
struct PACKET_CH_SELECT_ACCESSIBLE_MAPNAME{
int16 packetType;
int8 slot;
int8 mapnumber;
} __attribute__((packed));
#define DEFINE_PACKET_HEADER(name, id) const int16 HEADER_##name = id;
#if PACKETVER_MAIN_NUM >= 20201007 || PACKETVER_RE_NUM >= 20211103
DEFINE_PACKET_HEADER( HC_ACK_CHANGE_CHARACTER_SLOT, 0xb70 )
#else
DEFINE_PACKET_HEADER( HC_ACK_CHANGE_CHARACTER_SLOT, 0x8d5 )
#endif
#if PACKETVER_MAIN_NUM >= 20201007 || PACKETVER_RE_NUM >= 20211103
DEFINE_PACKET_HEADER( HC_ACK_CHARINFO_PER_PAGE, 0xb72 )
#else
DEFINE_PACKET_HEADER( HC_ACK_CHARINFO_PER_PAGE, 0x99d )
#endif
#if PACKETVER_MAIN_NUM >= 20201007 || PACKETVER_RE_NUM >= 20211103
DEFINE_PACKET_HEADER( HC_ACCEPT_MAKECHAR, 0xb6f )
#else
DEFINE_PACKET_HEADER( HC_ACCEPT_MAKECHAR, 0x6d )
#endif
DEFINE_PACKET_HEADER( HC_NOTIFY_ACCESSIBLE_MAPNAME, 0x840 )
DEFINE_PACKET_HEADER( CH_SELECT_ACCESSIBLE_MAPNAME, 0x841 )
#undef DEFINE_PACKET_HEADER
// NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
#if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
#pragma pack( pop )
#endif
#pragma warning( pop )
#endif /* PACKETS_HPP */