浏览代码

Updated Hercules packets (#8368)

Lemongrass3110 11 月之前
父节点
当前提交
79935a75c9
共有 4 个文件被更改,包括 43 次插入31 次删除
  1. 10 10
      src/map/clif.cpp
  2. 1 1
      src/map/clif_packetdb.hpp
  3. 1 19
      src/map/packets.hpp
  4. 31 1
      src/map/packets_struct.hpp

+ 10 - 10
src/map/clif.cpp

@@ -4972,9 +4972,9 @@ void clif_storageclose( map_session_data& sd ){
 /// Notifies clients in an area of a player's souls.
 /// 01d0 <id>.L <amount>.W (ZC_SPIRITS)
 /// 01e1 <id>.L <amount>.W (ZC_SPIRITS2)
-/// 0b73 <id>.L <amount>.W
+/// 0b73 <id>.L <amount>.W (ZC_SOULENERGY)
 void clif_soulball( map_session_data *sd, struct block_list* target, enum send_target send_target ){
-#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
+#if PACKETVER_MAIN_NUM >= 20200414 || PACKETVER_RE_NUM >= 20200723 || PACKETVER_ZERO_NUM >= 20200506
 	struct PACKET_ZC_SOULENERGY p = {};
 
 	p.PacketType = HEADER_ZC_SOULENERGY;
@@ -19597,15 +19597,15 @@ void clif_autoshadowspell_list( map_session_data& sd ){
 
 	p->packetType = HEADER_ZC_SKILL_SELECT_REQUEST;
 	p->packetLength = sizeof( *p );
-	p->why = 1; // enum PACKET_ZC_SKILL_SELECT_REQUEST::enumWHY::WHY_SC_AUTOSHADOWSPELL =  0x1
+	p->flag = 1; // enum PACKET_ZC_SKILL_SELECT_REQUEST::enumWHY::WHY_SC_AUTOSHADOWSPELL =  0x1
 	
 	size_t count = 0;
 	for( size_t i = 0; i < MAX_SKILL; i++ ){
 		if( sd.status.skill[i].flag == SKILL_FLAG_PLAGIARIZED && sd.status.skill[i].id > 0 &&
 			skill_get_inf2(sd.status.skill[i].id, INF2_ISAUTOSHADOWSPELL))
 		{
-			p->skills[count].skill_id = sd.status.skill[i].id;
-			p->packetLength += sizeof( p->skills[0] );
+			p->skillIds[count] = sd.status.skill[i].id;
+			p->packetLength += sizeof( p->skillIds[0] );
 			count++;
 		}
 	}
@@ -19651,19 +19651,18 @@ int clif_skill_itemlistwindow( map_session_data *sd, uint16 skill_id, uint16 ski
 /*==========================================
  * Select a skill into a given list (used by SA_AUTOSPELL/SC_AUTOSHADOWSPELL)
  * 0443 <type>.L <skill_id>.W (CZ_SKILL_SELECT_RESPONSE)
- * RFIFOL(fd,2) - type (currently not used)
  *------------------------------------------*/
 void clif_parse_SkillSelectMenu(int fd, map_session_data *sd) {
+#if PACKETVER >= 20081210
 	if( sd == nullptr ){
 		return;
 	}
 
-	struct s_packet_db* info = &packet_db[RFIFOW(fd,0)];
-	//int type = RFIFOL(fd,info->pos[0]); //WHY_LOWERVER_COMPATIBILITY =  0x0, WHY_SC_AUTOSHADOWSPELL =  0x1,
+	PACKET_CZ_SKILL_SELECT_RESPONSE* p = reinterpret_cast<PACKET_CZ_SKILL_SELECT_RESPONSE*>( RFIFOP( fd, 0 ) );
 
 	if (sd->menuskill_id == SA_AUTOSPELL) {
 		sd->state.workinprogress = WIP_DISABLE_NONE;
-		skill_autospell(sd, RFIFOW(fd, info->pos[1]));
+		skill_autospell(sd, p->selectedSkillId);
 	} else if (sd->menuskill_id == SC_AUTOSHADOWSPELL) {
 		if (pc_istrading(sd)) {
 			clif_skill_fail( *sd, sd->ud.skill_id );
@@ -19671,11 +19670,12 @@ void clif_parse_SkillSelectMenu(int fd, map_session_data *sd) {
 			return;
 		}
 
-		skill_select_menu(*sd, RFIFOW(fd, info->pos[1]));
+		skill_select_menu(*sd, p->selectedSkillId);
 	} else
 		return;
 
 	clif_menuskill_clear(sd);
+#endif
 }
 
 

+ 1 - 1
src/map/clif_packetdb.hpp

@@ -1260,7 +1260,7 @@
 
 // 2008-12-10aSakexe
 #if PACKETVER >= 20081210
-	parseable_packet(0x0443,8,clif_parse_SkillSelectMenu,2,6);
+	parseable_packet( HEADER_CZ_SKILL_SELECT_RESPONSE, sizeof( PACKET_CZ_SKILL_SELECT_RESPONSE ), clif_parse_SkillSelectMenu, 0 );
 #endif
 
 // 2009-01-14aSakexe

+ 1 - 19
src/map/packets.hpp

@@ -209,13 +209,6 @@ struct PACKET_ZC_BROADCAST2{
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_BROADCAST2, 0x1c3)
 
-struct PACKET_ZC_SOULENERGY{
-	int16 PacketType;
-	uint32 AID;
-	uint16 num;
-} __attribute__((packed));
-DEFINE_PACKET_HEADER(ZC_SOULENERGY, 0xb73)
-
 struct PACKET_ZC_ENTRY_QUEUE_INIT {
 	int16 packetType;
 } __attribute__((packed));
@@ -474,17 +467,6 @@ struct PACKET_ZC_INVENTORY_TAB{
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_INVENTORY_TAB, 0x908)
 
-struct PACKET_ZC_SKILL_SELECT_REQUEST_sub{
-	int16 skill_id;
-} __attribute__((packed));
-
-struct PACKET_ZC_SKILL_SELECT_REQUEST{
-	int16 packetType;
-	int16 packetLength;
-	int32 why;
-	struct PACKET_ZC_SKILL_SELECT_REQUEST_sub skills[];
-} __attribute__((packed));
-
 struct PACKET_CZ_REQ_OPEN_BANKING{
 	int16 packetType;
 	uint32 AID;
@@ -1076,7 +1058,7 @@ DEFINE_PACKET_HEADER(CZ_REQ_MAKINGITEM, 0x25b)
 DEFINE_PACKET_HEADER(ZC_PC_CASH_POINT_ITEMLIST, 0x287)
 DEFINE_PACKET_HEADER(ZC_CASH_TIME_COUNTER, 0x298)
 DEFINE_PACKET_HEADER(ZC_CASH_ITEM_DELETE, 0x299)
-DEFINE_PACKET_HEADER(ZC_SKILL_SELECT_REQUEST, 0x442)
+DEFINE_PACKET_HEADER(CZ_SKILL_SELECT_RESPONSE, 0x443)
 DEFINE_PACKET_HEADER(ZC_FAILED_TRADE_BUYING_STORE_TO_SELLER, 0x824)
 DEFINE_PACKET_HEADER(CZ_SSILIST_ITEM_CLICK, 0x83c)
 DEFINE_PACKET_HEADER(ZC_ACK_SCHEDULER_CASHITEM, 0x8ca)

+ 31 - 1
src/map/packets_struct.hpp

@@ -3297,6 +3297,20 @@ struct PACKET_ZC_MAKINGARROW_LIST {
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_MAKINGARROW_LIST, 0x01ad);
 
+struct PACKET_ZC_SKILL_SELECT_REQUEST {
+	int16 packetType;
+	int16 packetLength;
+	int32 flag; //< 0 = old code compatibility; 1 = Auto Shadow Spell; same value is received in CZ_SKILL_SELECT_RESPONSE
+	int16 skillIds[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_SKILL_SELECT_REQUEST, 0x0442);
+
+struct PACKET_CZ_SKILL_SELECT_RESPONSE {
+	int16 packetType;
+	int32 flag; //< currently unused, matches ZC_SKILL_SELECT_REQUEST.flag
+	int16 selectedSkillId;
+} __attribute__((packed));
+
 #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723 || PACKETVER_ZERO_NUM >= 20221024
 #define REPAIRITEM_INFO REPAIRITEM_INFO2
 struct PACKET_ZC_REPAIRITEMLIST {
@@ -4752,7 +4766,7 @@ struct PACKET_ZC_NOTIFY_SKILL {
 	int8 action;
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_NOTIFY_SKILL, 0x01de);
-#endif 
+#endif
 
 #if PACKETVER_MAIN_NUM >= 20130731 || PACKETVER_RE_NUM >= 20130724 || defined(PACKETVER_ZERO)
 struct PACKET_ZC_USE_SKILL {
@@ -5548,6 +5562,22 @@ struct PACKET_ZC_SPIRITS {
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_SPIRITS, 0x01d0)
 
+struct PACKET_ZC_SPIRITS2 {
+	int16 PacketType;
+	uint32 AID;
+	int16 num;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_SPIRITS2, 0x01e1)
+
+#if PACKETVER_MAIN_NUM >= 20200414 || PACKETVER_RE_NUM >= 20200723 || PACKETVER_ZERO_NUM >= 20200506
+struct PACKET_ZC_SOULENERGY {
+	int16 PacketType;
+	uint32 AID;
+	uint16 num;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_SOULENERGY, 0x0b73)
+#endif
+
 struct PACKET_ZC_SAY_DIALOG {
 	int16 PacketType;
 	int16 PacketLength;