summaryrefslogblamecommitdiff
path: root/src/map/packets_struct.h
blob: 882c2fe24c99b62816c5b8e3db1ef6be16d1bb86 (plain) (tree)
1
2
3
4
5
6
7
8







                                                                                                


                          

    
                     


                                         
                                     




                              
                          













                              
                                            










                                                     
                                   
                                      

                               
                              
      









                               
                                            



                               




                           
                                 
                                          









                                 
                                            



                                 







                                           

                                         









                                   
                                            



                                  











































































                                        
                                  
                              




                                     



























                                  


                                               

































                                     



                                               



                          


                               
                                






                            


















                              

                           

                                    
                         




















                                             
                           





                           
                        

                          
                         
                                 
      


















                          
                         






                                

                           
                         
                                 
      














                          
                         



                                

                          




































                                 
                 



                     
                         
                          
                                





                            
                                           









                             
      
                        





                                 
                 


























                                   
                 



                     
                         
                          
                                  





                            
                                           










































                                 
                 



                     
                         
                          
                                






                            
                                           





















                                






                                 










                              



                                











                                                                                                                                                  


                          

                           
                           




                                     
                           


























                                       
                             















                                    



                            
 
                                     






                                     
                     

                                 
 




                                































                                    


















































































                                                  



                                
 


































                                


                               
// Copyright (c) Hercules Dev Team, licensed under GNU GPL.
// See the LICENSE file

/* Hercules Renewal: Phase Two http://hercules.ws/board/topic/383-hercules-renewal-phase-two/ */

#ifndef _PACKETS_STRUCT_H_
#define _PACKETS_STRUCT_H_

#include "../common/mmo.h"

/**
 *
 **/
enum packet_headers {
	banking_withdraw_ackType = 0x9aa,
	banking_deposit_ackType = 0x9a8,
	banking_checkType = 0x9a6,
	cart_additem_ackType = 0x12c,
	sc_notickType = 0x196,
#if PACKETVER < 20061218
	additemType = 0xa0,
#elif PACKETVER < 20071002
	additemType = 0x29a,
#elif PACKETVER < 20120925
	additemType = 0x2d4,
#else
	additemType = 0x990,
#endif
#if PACKETVER < 4
	idle_unitType = 0x78,
#elif PACKETVER < 7
	idle_unitType = 0x1d8,
#elif PACKETVER < 20080102
	idle_unitType = 0x22a,
#elif PACKETVER < 20091103
	idle_unitType = 0x2ee,
#elif PACKETVER < 20101124
	idle_unitType = 0x7f9,
#elif PACKETVER < 20140000 //actual 20120221
	idle_unitType = 0x857,
#else
	idle_unitType = 0x915,
#endif
#if PACKETVER >= 20120618
	status_changeType = 0x983,
#elif PACKETVER >= 20090121
	status_changeType = 0x43f,
#else
	status_changeType = sc_notickType,/* 0x196 */
#endif
	status_change2Type = 0x43f,
	status_change_endType = 0x196,
#if PACKETVER < 20091103
	spawn_unit2Type = 0x7c,
	idle_unit2Type = 0x78,
#endif
#if PACKETVER < 4
	spawn_unitType = 0x79,
#elif PACKETVER < 7
	spawn_unitType = 0x1d9,
#elif PACKETVER < 20080102
	spawn_unitType = 0x22b,
#elif PACKETVER < 20091103
	spawn_unitType = 0x2ed,
#elif PACKETVER < 20101124
	spawn_unitType = 0x7f8,
#elif PACKETVER < 20140000 //actual 20120221
	spawn_unitType = 0x858,
#else
	spawn_unitType = 0x90f,
#endif
#if PACKETVER < 20080102
	authokType = 0x73,
#else
	authokType = 0x2eb,
#endif
	script_clearType = 0x8d6,
	package_item_announceType = 0x7fd,
#if PACKETVER < 4
	unit_walkingType = 0x7b,
#elif PACKETVER < 7
	unit_walkingType = 0x1da,
#elif PACKETVER < 20080102
	unit_walkingType = 0x22c,
#elif PACKETVER < 20091103
	unit_walkingType = 0x2ec,
#elif PACKETVER < 20101124
	unit_walkingType = 0x7f7,
#elif PACKETVER < 20140000 //actual 20120221
	unit_walkingType = 0x856,
#else
	unit_walkingType = 0x914,
#endif
	bgqueue_ackType = 0x8d8,
	bgqueue_notice_deleteType = 0x8db,
	bgqueue_registerType = 0x8d7,
	bgqueue_updateinfoType = 0x8d9,
	bgqueue_checkstateType = 0x90a,
	bgqueue_revokereqType = 0x8da,
	bgqueue_battlebeginackType = 0x8e0,
	bgqueue_notify_entryType = 0x8d9,
	bgqueue_battlebeginsType = 0x8df,
	notify_bounditemType = 0x2d3,
#if PACKETVER < 3
	skill_entryType = 0x11f,
#elif PACKETVER < 20121212
	skill_entryType = 0x8c7,
#elif PACKETVER < 20130731
	skill_entryType = 0x99f,
#else
	skill_entryType = 0x9ca,
#endif
	graffiti_entryType = 0x1c9,
#if PACKETVER > 20130000 /* not sure date */
	dropflooritemType = 0x84b,
#else
	dropflooritemType = 0x9e,
#endif
#if PACKETVER >= 20120925
	inventorylistnormalType = 0x991,
#elif PACKETVER >= 20080102
	inventorylistnormalType = 0x2e8,
#elif PACKETVER >= 20071002
	inventorylistnormalType = 0x1ee,
#else
	inventorylistnormalType = 0xa3,
#endif
#if PACKETVER >= 20120925
	inventorylistequipType = 0x992,
#elif PACKETVER >= 20080102
	inventorylistequipType = 0x2d0,
#elif PACKETVER >= 20071002
	inventorylistequipType = 0x295,
#else
	inventorylistequipType = 0xa4,
#endif
#if PACKETVER >= 20120925
	storagelistnormalType = 0x995,
#elif PACKETVER >= 20080102
	storagelistnormalType = 0x2ea,
#elif PACKETVER >= 20071002
	storagelistnormalType = 0x295,
#else
	storagelistnormalType = 0xa5,
#endif
#if PACKETVER >= 20120925
	storagelistequipType = 0x996,
#elif PACKETVER >= 20080102
	storagelistequipType = 0x2d1,
#elif PACKETVER >= 20071002
	storagelistequipType = 0x296,
#else
	storagelistequipType = 0xa6,
#endif
#if PACKETVER >= 20120925
	cartlistnormalType = 0x993,
#elif PACKETVER >= 20080102
	cartlistnormalType = 0x2e9,
#elif PACKETVER >= 20071002
	cartlistnormalType = 0x1ef,
#else
	cartlistnormalType = 0x123,
#endif
#if PACKETVER >= 20120925
	cartlistequipType = 0x994,
#elif PACKETVER >= 20080102
	cartlistequipType = 0x2d2,
#elif PACKETVER >= 20071002
	cartlistequipType = 0x297,
#else
	cartlistequipType = 0x122,
#endif
#if PACKETVER >= 20120925
	equipitemType = 0x998,
#else
	equipitemType = 0xa9,
#endif
#if PACKETVER >= 20120925
	equipitemackType = 0x999,
#else
	equipitemackType = 0xaa,
#endif
#if PACKETVER >= 20120925
	unequipitemackType = 0x99a,
#else
	unequipitemackType = 0xac,
#endif
#if PACKETVER >= 20120925
	viewequipackType = 0x997,
#elif PACKETVER >= 20101124
	viewequipackType = 0x859,
#else
	viewequipackType = 0x2d7,
#endif
	notifybindonequip = 0x2d3,
	monsterhpType = 0x977,
	maptypeproperty2Type = 0x99b,
};

#pragma pack(push, 1)

/**
 * structs for data
 */
struct EQUIPSLOTINFO {
	unsigned short card[4];
} __attribute__((packed));

struct NORMALITEM_INFO {
	short index;
	unsigned short ITID;
	unsigned char type;
#if PACKETVER < 20120925
	uint8 IsIdentified;
#endif
	short count;
#if PACKETVER >= 20120925
	unsigned int WearState;
#else
	unsigned short WearState;
#endif
#if PACKETVER >= 5
	struct EQUIPSLOTINFO slot;
#endif
#if PACKETVER >= 20080102
	int HireExpireDate;
#endif
#if PACKETVER >= 20120925
	struct {
		unsigned char IsIdentified : 1;
		unsigned char PlaceETCTab : 1;
		unsigned char SpareBits : 6;
	} Flag;
#endif
} __attribute__((packed));

struct EQUIPITEM_INFO {
	short index;
	unsigned short ITID;
	unsigned char type;
#if PACKETVER < 20120925
	uint8 IsIdentified;
#endif
#if PACKETVER >= 20120925
	unsigned int location;
	unsigned int WearState;
#else
	unsigned short location;
	unsigned short WearState;
#endif
#if PACKETVER < 20120925
	uint8 IsDamaged;
#endif
	unsigned char RefiningLevel;
	struct EQUIPSLOTINFO slot;
#if PACKETVER >= 20071002
	int HireExpireDate;
#endif
#if PACKETVER >= 20080102
    unsigned short bindOnEquipType;
#endif
#if PACKETVER >= 20100629
    unsigned short wItemSpriteNumber;
#endif
#if PACKETVER >= 20120925
	struct {
		unsigned char IsIdentified : 1;
		unsigned char IsDamaged : 1;
		unsigned char PlaceETCTab : 1;
		unsigned char SpareBits : 5;
	} Flag;
#endif
} __attribute__((packed));

struct packet_authok {
	short PacketType;
	unsigned int startTime;
	unsigned char PosDir[3];
	unsigned char xSize;
	unsigned char ySize;
#if PACKETVER >= 20080102
	short font;
#endif
} __attribute__((packed));

struct packet_monster_hp {
	short PacketType;
	unsigned int GID;
	int HP;
	int MaxHP;
} __attribute__((packed));

struct packet_sc_notick {
	short PacketType;
	short index;
	unsigned int AID;
	unsigned char state;
} __attribute__((packed));

struct packet_additem {
	short PacketType;
	unsigned short Index;
	unsigned short count;
	unsigned short nameid;
	uint8 IsIdentified;
	uint8 IsDamaged;
	unsigned char refiningLevel;
	struct EQUIPSLOTINFO slot;
#if PACKETVER >= 20120925
	unsigned int location;
#else
	unsigned short location;
#endif
	unsigned char type;
	unsigned char result;
#if PACKETVER >= 20061218
	int HireExpireDate;
#endif
#if PACKETVER >= 20071002
	unsigned short bindOnEquipType;
#endif
} __attribute__((packed));

struct packet_dropflooritem {
	short PacketType;
	unsigned int ITAID;
	unsigned short ITID;
#if PACKETVER >= 20130000 /* not sure date */
	unsigned short type;
#endif
	uint8 IsIdentified;
	short xPos;
	short yPos;
	unsigned char subX;
	unsigned char subY;
	short count;
} __attribute__((packed));
#if PACKETVER < 20091103
struct packet_idle_unit2 {
	short PacketType;
#if PACKETVER >= 20071106
	unsigned char objecttype;
#endif
	unsigned int GID;
	short speed;
	short bodyState;
	short healthState;
	short effectState;
	short job;
	short head;
	short weapon;
	short accessory;
	short shield;
	short accessory2;
	short accessory3;
	short headpalette;
	short bodypalette;
	short headDir;
	unsigned int GUID;
	short GEmblemVer;
	short honor;
	short virtue;
	uint8 isPKModeON;
	unsigned char sex;
	unsigned char PosDir[3];
	unsigned char xSize;
	unsigned char ySize;
	unsigned char state;
	short clevel;
} __attribute__((packed));
struct packet_spawn_unit2 {
	short PacketType;
#if PACKETVER >= 20071106
	unsigned char objecttype;
#endif
	unsigned int GID;
	short speed;
	short bodyState;
	short healthState;
	short effectState;
	short head;
	short weapon;
	short accessory;
	short job;
	short shield;
	short accessory2;
	short accessory3;
	short headpalette;
	short bodypalette;
	short headDir;
	uint8 isPKModeON;
	unsigned char sex;
	unsigned char PosDir[3];
	unsigned char xSize;
	unsigned char ySize;
} __attribute__((packed));
#endif
struct packet_spawn_unit {
	short PacketType;
#if PACKETVER >= 20091103
	short PacketLength;
	unsigned char objecttype;
#endif
	unsigned int GID;
	short speed;
	short bodyState;
	short healthState;
#if PACKETVER < 20080102
	short effectState;
#else
	int effectState;
#endif
	short job;
	short head;
#if PACKETVER < 7
	short weapon;
#else
	int weapon;
#endif
	short accessory;
#if PACKETVER < 7
	short shield;
#endif
	short accessory2;
	short accessory3;
	short headpalette;
	short bodypalette;
	short headDir;
#if PACKETVER >= 20101124
	short robe;
#endif
	unsigned int GUID;
	short GEmblemVer;
	short honor;
#if PACKETVER > 7
	int virtue;
#else
	short virtue;
#endif
	uint8 isPKModeON;
	unsigned char sex;
	unsigned char PosDir[3];
	unsigned char xSize;
	unsigned char ySize;
	short clevel;
#if PACKETVER >= 20080102
	short font;
#endif
#if PACKETVER >= 20140000 //actual 20120221
	int maxHP;
	int HP;
	unsigned char isBoss;
#endif
} __attribute__((packed));

struct packet_unit_walking {
	short PacketType;
#if PACKETVER >= 20091103
	short PacketLength;
#endif
#if PACKETVER > 20071106
	unsigned char objecttype;
#endif
	unsigned int GID;
	short speed;
	short bodyState;
	short healthState;
#if PACKETVER < 7
	short effectState;
#else
	int effectState;
#endif
	short job;
	short head;
#if PACKETVER < 7
	short weapon;
#else
	int weapon;
#endif
	short accessory;
	unsigned int moveStartTime;
#if PACKETVER < 7
	short shield;
#endif
	short accessory2;
	short accessory3;
	short headpalette;
	short bodypalette;
	short headDir;
#if PACKETVER >= 20101124
	short robe;
#endif
	unsigned int GUID;
	short GEmblemVer;
	short honor;
#if PACKETVER > 7
	int virtue;
#else
	short virtue;
#endif
	uint8 isPKModeON;
	unsigned char sex;
	unsigned char MoveData[6];
	unsigned char xSize;
	unsigned char ySize;
	short clevel;
#if PACKETVER >= 20080102
	short font;
#endif
#if PACKETVER >= 20140000 //actual 20120221
	int maxHP;
	int HP;
	unsigned char isBoss;
#endif
} __attribute__((packed));

struct packet_idle_unit {
	short PacketType;
#if PACKETVER >= 20091103
	short PacketLength;
	unsigned char objecttype;
#endif
	unsigned int GID;
	short speed;
	short bodyState;
	short healthState;
#if PACKETVER < 20080102
	short effectState;
#else
	int effectState;
#endif
	short job;
	short head;
#if PACKETVER < 7
	short weapon;
#else
	int weapon;
#endif
	short accessory;
#if PACKETVER < 7
	short shield;
#endif
	short accessory2;
	short accessory3;
	short headpalette;
	short bodypalette;
	short headDir;
#if PACKETVER >= 20101124
	short robe;
#endif
	unsigned int GUID;
	short GEmblemVer;
	short honor;
#if PACKETVER > 7
	int virtue;
#else
	short virtue;
#endif
	uint8 isPKModeON;
	unsigned char sex;
	unsigned char PosDir[3];
	unsigned char xSize;
	unsigned char ySize;
	unsigned char state;
	short clevel;
#if PACKETVER >= 20080102
	short font;
#endif
#if PACKETVER >= 20140000 //actual 20120221
	int maxHP;
	int HP;
	unsigned char isBoss;
#endif
} __attribute__((packed));

struct packet_status_change {
	short PacketType;
	short index;
	unsigned int AID;
	unsigned char state;
#if PACKETVER >= 20120618
	unsigned int Total;
#endif
#if PACKETVER >= 20090121	
	unsigned int Left;
	int val1;
	int val2;
	int val3;
#endif
} __attribute__((packed));

struct packet_status_change_end {
	short PacketType;
	short index;
	unsigned int AID;
	unsigned char state;
} __attribute__((packed));

struct packet_status_change2 {
	short PacketType;
	short index;
	unsigned int AID;
	unsigned char state;
	unsigned int Left;
	int val1;
	int val2;
	int val3;
} __attribute__((packed));

struct packet_maptypeproperty2 {
	short PacketType;
	short type;
	struct {
		unsigned int party             : 1;  // Show attack cursor on non-party members (PvP)
		unsigned int guild             : 1;  // Show attack cursor on non-guild members (GvG)
		unsigned int siege             : 1;  // Show emblem over characters' heads when in GvG (WoE castle)
		unsigned int mineffect         : 1;  // Automatically enable /mineffect
		unsigned int nolockon          : 1;  // TODO: What does this do? (shows attack cursor on non-party members)
		unsigned int countpk           : 1;  /// Show the PvP counter
		unsigned int nopartyformation  : 1;  /// Prevent party creation/modification
		unsigned int bg                : 1;  // TODO: What does this do? Probably related to Battlegrounds, but I'm not sure on the effect
		unsigned int noitemconsumption : 1;  // TODO: What does this do? (shows a "Nothing found in the selected map" message when set)
		unsigned int usecart           : 1;  /// Allow opening cart inventory
		unsigned int summonstarmiracle : 1;  // TODO: What does this do? Related to Taekwon Masters, but I have no idea.
		unsigned int SpareBits         : 15; /// Currently ignored, reserved for future updates
	} flag;
} __attribute__((packed));

struct packet_bgqueue_ack {
	short PacketType;
	unsigned char type;
	char bg_name[NAME_LENGTH];
} __attribute__((packed));

struct packet_bgqueue_notice_delete {
	short PacketType;
	unsigned char type;
	char bg_name[NAME_LENGTH];
} __attribute__((packed));

struct packet_bgqueue_register {
	short PacketType;
	short type;
	char bg_name[NAME_LENGTH];
} __attribute__((packed));

struct packet_bgqueue_update_info {
	short PacketType;
	char bg_name[NAME_LENGTH];
	int	position;
} __attribute__((packed));

struct packet_bgqueue_checkstate {
	short PacketType;
	char bg_name[NAME_LENGTH];
} __attribute__((packed));

struct packet_bgqueue_revoke_req {
	short PacketType;
	char bg_name[NAME_LENGTH];
} __attribute__((packed));

struct packet_bgqueue_battlebegin_ack {
	short PacketType;
	unsigned char result;
	char bg_name[NAME_LENGTH];
	char game_name[NAME_LENGTH];
} __attribute__((packed));

struct packet_bgqueue_notify_entry {
	short PacketType;
	char name[NAME_LENGTH];
	int position;
} __attribute__((packed));

struct packet_bgqueue_battlebegins {
	short PacketType;
	char bg_name[NAME_LENGTH];
	char game_name[NAME_LENGTH];
} __attribute__((packed));

struct packet_script_clear {
	short PacketType;
	unsigned int NpcID;
} __attribute__((packed));

/* made possible thanks to Yommy!! */
struct packet_package_item_announce {
	short PacketType;
	short PacketLength;
	unsigned char type;
	unsigned short ItemID;
	char len;
	char Name[NAME_LENGTH];
	char unknown;
	unsigned short BoxItemID;
} __attribute__((packed));

struct packet_cart_additem_ack {
	short PacketType;
	char result;
} __attribute__((packed));

struct packet_banking_check {
	short PacketType;
	int64 Money;
	short Reason;
} __attribute__((packed));

struct packet_banking_deposit_req {
	short PacketType;
	unsigned int AID;
	int Money;
} __attribute__((packed));

struct packet_banking_withdraw_req {
	short PacketType;
	unsigned int AID;
	int Money;
} __attribute__((packed));

struct packet_banking_deposit_ack {
	short PacketType;
	short Reason;
	int64 Money;
	int Balance;
} __attribute__((packed));

struct packet_banking_withdraw_ack {
	short PacketType;
	short Reason;
	int64 Money;
	int Balance;
} __attribute__((packed));

struct packet_itemlist_normal {
	short PacketType;
	short PacketLength;
	struct NORMALITEM_INFO list[MAX_ITEMLIST];
} __attribute__((packed));

struct packet_itemlist_equip {
	short PacketType;
	short PacketLength;
	struct EQUIPITEM_INFO list[MAX_ITEMLIST];
} __attribute__((packed));

struct packet_storelist_normal {
	short PacketType;
	short PacketLength;
#if PACKETVER >= 20120925
	char name[NAME_LENGTH];
#endif
	struct NORMALITEM_INFO list[MAX_ITEMLIST];
} __attribute__((packed));

struct packet_storelist_equip {
	short PacketType;
	short PacketLength;
#if PACKETVER >= 20120925
	char name[NAME_LENGTH];
#endif
	struct EQUIPITEM_INFO list[MAX_ITEMLIST];
} __attribute__((packed));

struct packet_equip_item {
	short PacketType;
	unsigned short index;
#if PACKETVER >= 20120925
	unsigned int wearLocation;
#else
	unsigned short wearLocation;
#endif
} __attribute__((packed));

struct packet_equipitem_ack {
	short PacketType;
	unsigned short index;
#if PACKETVER >= 20120925
	unsigned int wearLocation;
#else
	unsigned short wearLocation;
#endif
#if PACKETVER >= 20100629
	unsigned short wItemSpriteNumber;
#endif
	unsigned char result;
} __attribute__((packed));

struct packet_unequipitem_ack {
	short PacketType;
	unsigned short index;
#if PACKETVER >= 20120925
	unsigned int wearLocation;
#else
	unsigned short wearLocation;
#endif
	unsigned char result;
} __attribute__((packed));

struct packet_viewequip_ack {
	short PacketType;
	short PacketLength;
	char characterName[NAME_LENGTH];
	short job;
	short head;
	short accessory;
	short accessory2;
	short accessory3;
#if PACKETVER >= 20101124
	short robe;
#endif
	short headpalette;
	short bodypalette;
	unsigned char sex;
	struct EQUIPITEM_INFO list[MAX_INVENTORY];
} __attribute__((packed));

struct packet_notify_bounditem {
	short PacketType;
	unsigned short index;
} __attribute__((packed));

struct packet_skill_entry {
	short PacketType;
#if PACKETVER >= 20110718
	short PacketLength;
#endif
	unsigned int AID;
	unsigned int creatorAID;
	short xPos;
	short yPos;
#if PACKETVER >= 20121212
	int job;
#else
	unsigned char job;
#endif
#if PACKETVER >= 20110718
	char RadiusRange;
#endif
	unsigned char isVisible;
#if PACKETVER >= 20130731
	unsigned char level;
#endif
} __attribute__((packed));

struct packet_graffiti_entry {
	short PacketType;
	unsigned int AID;
	unsigned int creatorAID;
	short xPos;
	short yPos;
	unsigned char job;
	unsigned char isVisible;
	unsigned char isContens;
	char msg[80];
} __attribute__((packed));

#pragma pack(pop)

#endif /* _PACKETS_STRUCT_H_ */