From 79935a75c90e9c0be172b2a4d70dedd20282393a Mon Sep 17 00:00:00 2001 From: Lemongrass3110 Date: Sun, 26 May 2024 17:31:23 +0200 Subject: [PATCH] Updated Hercules packets (#8368) --- src/map/clif.cpp | 20 ++++++++++---------- src/map/clif_packetdb.hpp | 2 +- src/map/packets.hpp | 20 +------------------- src/map/packets_struct.hpp | 32 +++++++++++++++++++++++++++++++- 4 files changed, 43 insertions(+), 31 deletions(-) diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 75d8c0c18c..8df3898194 100644 --- a/src/map/clif.cpp +++ b/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 .L .W (ZC_SPIRITS) /// 01e1 .L .W (ZC_SPIRITS2) -/// 0b73 .L .W +/// 0b73 .L .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 .L .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( 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 } diff --git a/src/map/clif_packetdb.hpp b/src/map/clif_packetdb.hpp index 479578f4a0..205f582df8 100644 --- a/src/map/clif_packetdb.hpp +++ b/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 diff --git a/src/map/packets.hpp b/src/map/packets.hpp index 36fc8bf530..0992406ba3 100644 --- a/src/map/packets.hpp +++ b/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) diff --git a/src/map/packets_struct.hpp b/src/map/packets_struct.hpp index 8760ce6a43..3e3d2e91f7 100644 --- a/src/map/packets_struct.hpp +++ b/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;