diff options
-rw-r--r-- | src/map/clif.c | 45 |
1 files changed, 26 insertions, 19 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index 9ebf50600..cd14c4393 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -984,30 +984,37 @@ static int clif_set_unit_spawned(struct block_list* bl, unsigned char* buf) //Modifies the buffer for disguise characters and sends it to self. //Flag = 0: change id to negative, buf will have disguise data. //Flag = 1: change id to positive, class and option to make your own char invisible. -//Luckily, the offsets that need to be changed are the same in packets 0x78, 0x7b, 0x1d8 and 0x1da -//But no longer holds true for those packet of PACKETVER 7. static void clif_setdisguise(struct map_session_data *sd, unsigned char *buf,int len, int flag) { - if (flag) { - WBUFL(buf,2)=sd->bl.id; -#if PACKETVER >= 7 - switch (WBUFW(buf,0)) { - case 0x22c: - case 0x22b: - case 0x22a: - WBUFL(buf,12)=OPTION_INVISIBLE; - WBUFW(buf,16)=sd->status.class_; - break; - default: + if (!flag) { + WBUFL(buf,2)=-sd->bl.id; + clif_send(buf, len, &sd->bl, SELF); + return; + } + WBUFL(buf,2)=sd->bl.id; + switch (WBUFW(buf,0)) { + case 0x22c: +#if PACKETVER >= 9 + WBUFL(buf,13)=OPTION_INVISIBLE; + WBUFW(buf,17)=sd->status.class_; + break; + case 0x78: + case 0x7c: + WBUFW(buf,13)=OPTION_INVISIBLE; + WBUFW(buf,15)=sd->status.class_; + break; #endif - WBUFW(buf,12)=OPTION_INVISIBLE; - WBUFW(buf,14)=sd->status.class_; #if PACKETVER >= 7 - break; - } + case 0x22b: + case 0x22a: + WBUFL(buf,12)=OPTION_INVISIBLE; + WBUFW(buf,16)=sd->status.class_; + break; #endif - } else { - WBUFL(buf,2)=-sd->bl.id; + default: //0x78, 0x7b, 0x1d8 and 0x1da + WBUFW(buf,12)=OPTION_INVISIBLE; + WBUFW(buf,14)=sd->status.class_; + break; } clif_send(buf, len, &sd->bl, SELF); } |