diff options
author | Andrei Karas <akaras@inbox.ru> | 2019-01-30 16:43:10 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2019-02-05 01:16:50 +0300 |
commit | 0b408f5971a9e4152b2aadc2b9208a0e8643f6e3 (patch) | |
tree | 235b49b7270841822ae6b3a28405ec750115b8ef | |
parent | bf78b2e823334a0b876bfbb0f0f199982db27abe (diff) | |
download | hercules-0b408f5971a9e4152b2aadc2b9208a0e8643f6e3.tar.gz hercules-0b408f5971a9e4152b2aadc2b9208a0e8643f6e3.tar.bz2 hercules-0b408f5971a9e4152b2aadc2b9208a0e8643f6e3.tar.xz hercules-0b408f5971a9e4152b2aadc2b9208a0e8643f6e3.zip |
Update packet ZC_USESKILL_ACK
-rw-r--r-- | src/map/clif.c | 41 | ||||
-rw-r--r-- | src/map/packets_struct.h | 41 |
2 files changed, 61 insertions, 21 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index d41570640..44635d699 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -5417,32 +5417,31 @@ static void clif_skillinfo(struct map_session_data *sd, int skill_id, int inf) /// 1 = no text static void clif_useskill(struct block_list *bl, int src_id, int dst_id, int dst_x, int dst_y, uint16 skill_id, uint16 skill_lv, int casttime) { -#if PACKETVER < 20091124 - const int cmd = 0x13e; -#else - const int cmd = 0x7fb; -#endif - unsigned char buf[32]; - int property = skill->get_ele(skill_id, skill_lv); + nullpo_retv(bl); - WBUFW(buf,0) = cmd; - WBUFL(buf,2) = src_id; - WBUFL(buf,6) = dst_id; - WBUFW(buf,10) = dst_x; - WBUFW(buf,12) = dst_y; - WBUFW(buf,14) = skill_id; - WBUFL(buf,16) = property<0?0:property; //Avoid sending negatives as element [Skotlex] - WBUFL(buf,20) = casttime; -#if PACKETVER >= 20091124 - WBUFB(buf,24) = 0; // isDisposable + const int element = skill->get_ele(skill_id, skill_lv); + struct PACKET_ZC_USESKILL_ACK p; + p.packetType = HEADER_ZC_USESKILL_ACK; + p.srcId = src_id; + p.dstId = dst_id; + p.x = dst_x; + p.y = dst_y; + p.skillId = skill_id; + p.element = element < 0 ? 0 : element; //Avoid sending negatives as element [Skotlex] + p.delayTime = casttime; +#if PACKETVER_MAIN_NUM >= 20091124 || PACKETVER_RE_NUM >= 20091124 || defined(PACKETVER_ZERO) + p.disposable = 0; +#endif +#if PACKETVER_ZERO_NUM >= 20190130 + p.unknown = 0; #endif if (clif->isdisguised(bl)) { - clif->send(buf,packet_len(cmd), bl, AREA_WOS); - WBUFL(buf,2) = -src_id; - clif->send(buf,packet_len(cmd), bl, SELF); + clif->send(&p, sizeof(p), bl, AREA_WOS); + p.srcId = -src_id; + clif->send(&p, sizeof(p), bl, SELF); } else { - clif->send(buf,packet_len(cmd), bl, AREA); + clif->send(&p, sizeof(p), bl, AREA); } #if PACKETVER >= 20151223 if ((skill->get_inf2(skill_id) & INF2_SHOW_SKILL_SCALE) != 0) diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index 534da6378..9ebc8a75e 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -3111,6 +3111,47 @@ struct PACKET_CZ_NPC_BARTER_PURCHASE { DEFINE_PACKET_HEADER(CZ_NPC_BARTER_PURCHASE, 0x0b0f); #endif +#if PACKETVER_ZERO_NUM >= 20190130 +struct PACKET_ZC_USESKILL_ACK { + int16 packetType; + uint32 srcId; + uint32 dstId; + uint16 x; + uint16 y; + uint16 skillId; + uint32 element; + uint32 delayTime; + uint8 disposable; + uint32 unknown; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_USESKILL_ACK, 0x0b1a); +#elif PACKETVER_MAIN_NUM >= 20091124 || PACKETVER_RE_NUM >= 20091124 || defined(PACKETVER_ZERO) +struct PACKET_ZC_USESKILL_ACK { + int16 packetType; + uint32 srcId; + uint32 dstId; + uint16 x; + uint16 y; + uint16 skillId; + uint32 element; + uint32 delayTime; + uint8 disposable; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_USESKILL_ACK, 0x07fb); +#elif PACKETVER_MAIN_NUM >= 20090406 || PACKETVER_SAK_NUM >= 20080618 || PACKETVER_RE_NUM >= 20080827 || defined(PACKETVER_ZERO) +struct PACKET_ZC_USESKILL_ACK { + int16 packetType; + uint32 srcId; + uint32 dstId; + uint16 x; + uint16 y; + uint16 skillId; + uint32 element; + uint32 delayTime; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_USESKILL_ACK, 0x013e); +#endif + #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 |