diff options
author | Asheraf <acheraf1998@gmail.com> | 2019-05-26 07:43:35 +0100 |
---|---|---|
committer | Haru <haru@dotalux.com> | 2020-02-09 20:52:57 +0100 |
commit | 7880742956210d463ba364b88dc7ddc5ca51355c (patch) | |
tree | 63c72157378bf56b3ab6782b9ee39f5476948825 | |
parent | c76c63d2dddb8c7ec4461dd660b7bb0210f4db96 (diff) | |
download | hercules-7880742956210d463ba364b88dc7ddc5ca51355c.tar.gz hercules-7880742956210d463ba364b88dc7ddc5ca51355c.tar.bz2 hercules-7880742956210d463ba364b88dc7ddc5ca51355c.tar.xz hercules-7880742956210d463ba364b88dc7ddc5ca51355c.zip |
Update PACKET_ZC_STATE_CHANGE to use struct format
-rw-r--r-- | src/map/clif.c | 56 | ||||
-rw-r--r-- | src/map/packets_struct.h | 21 |
2 files changed, 39 insertions, 38 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index 942e492c2..9e69dcc44 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -4032,51 +4032,31 @@ static void clif_misceffect(struct block_list *bl, int type) /// 0229 <id>.L <body state>.W <health state>.W <effect state>.L <pk mode>.B (ZC_STATE_CHANGE3) static void clif_changeoption(struct block_list *bl) { - unsigned char buf[32]; - struct status_change *sc; - struct map_session_data* sd; - nullpo_retv(bl); - if ( !(sc = status->get_sc(bl)) && bl->type != BL_NPC ) return; //How can an option change if there's no sc? + struct status_change *sc = status->get_sc(bl); - sd = BL_CAST(BL_PC, bl); + if (sc == NULL && bl->type != BL_NPC) // How can an option change if there's no sc? + return; -#if PACKETVER >= 7 - WBUFW(buf,0) = 0x229; - WBUFL(buf,2) = bl->id; - WBUFW(buf,6) = (sc) ? sc->opt1 : 0; - WBUFW(buf,8) = (sc) ? sc->opt2 : 0; - WBUFL(buf,10) = (sc != NULL) ? sc->option : ((bl->type == BL_NPC) ? BL_UCCAST(BL_NPC, bl)->option : 0); - WBUFB(buf,14) = (sd)? sd->status.karma : 0; - if (clif->isdisguised(bl)) { - clif->send(buf,packet_len(0x229),bl,AREA_WOS); - WBUFL(buf,2) = -bl->id; - clif->send(buf,packet_len(0x229),bl,SELF); - WBUFL(buf,2) = bl->id; - WBUFL(buf,10) = OPTION_INVISIBLE; - clif->send(buf,packet_len(0x229),bl,SELF); - } else { - clif->send(buf,packet_len(0x229),bl,AREA); - } -#else - WBUFW(buf,0) = 0x119; - WBUFL(buf,2) = bl->id; - WBUFW(buf,6) = (sc) ? sc->opt1 : 0; - WBUFW(buf,8) = (sc) ? sc->opt2 : 0; - WBUFL(buf,10) = (sc != NULL) ? sc->option : ((bl->type == BL_NPC) ? BL_UCCAST(BL_NPC, bl)->option : 0); - WBUFB(buf,12) = (sd)? sd->status.karma : 0; + struct map_session_data *sd = BL_CAST(BL_PC, bl); + struct PACKET_ZC_STATE_CHANGE p; + p.packetType = HEADER_ZC_STATE_CHANGE; + p.AID = bl->id; + p.bodyState = (sc != NULL) ? sc->opt1 : 0; + p.healthState = (sc != NULL) ? sc->opt2 : 0; + p.effectState = (sc != NULL) ? sc->option : BL_UCCAST(BL_NPC, bl)->option; + p.isPKModeON = (sd != NULL) ? sd->status.karma : 0; if (clif->isdisguised(bl)) { - clif->send(buf,packet_len(0x119),bl,AREA_WOS); - WBUFL(buf,2) = -bl->id; - clif->send(buf,packet_len(0x119),bl,SELF); - WBUFL(buf,2) = bl->id; - WBUFW(buf,10) = OPTION_INVISIBLE; - clif->send(buf,packet_len(0x119),bl,SELF); + clif->send(&p, sizeof(p), bl, AREA_WOS); + p.AID = -bl->id; + clif->send(&p, sizeof(p), bl, SELF); + p.AID = bl->id; + p.effectState = OPTION_INVISIBLE; + clif->send(&p, sizeof(p), bl, SELF); } else { - clif->send(buf,packet_len(0x119),bl,AREA); + clif->send(&p, sizeof(p), bl, AREA); } -#endif } /// Displays status change effects on NPCs/monsters (ZC_NPC_SHOWEFST_UPDATE). diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index c2c99629a..31b28e831 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -3851,6 +3851,27 @@ struct PACKET_CZ_NPC_EXPANDED_BARTER_PURCHASE { DEFINE_PACKET_HEADER(CZ_NPC_EXPANDED_BARTER_PURCHASE, 0x0b57); #endif +#if PACKETVER >= 7 +struct PACKET_ZC_STATE_CHANGE { + int16 packetType; + uint32 AID; + int16 bodyState; + int16 healthState; + int32 effectState; + int8 isPKModeON; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_STATE_CHANGE, 0x0229); +#else +struct PACKET_ZC_STATE_CHANGE { + int16 PacketType; + uint32 AID; + int16 bodyState; + int16 healthState; + int16 effectState; + int8 isPKModeON; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_STATE_CHANGE, 0x0119); +#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) |