From 1b7508c510aae8906fdcd7309da47c97b2804184 Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Thu, 13 Aug 2009 13:48:30 -0600 Subject: Change sending of hair style and color Send them together in overloaded change looks packets (twice for older clients). This lets newer clients be more flexible with their handling of hair. --- src/map/clif.c | 29 +++++++++++++++++++++++++++++ src/map/clif.h | 1 + src/map/pc.c | 6 +++++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/map/clif.c b/src/map/clif.c index 908e9ff..e734efe 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -2388,6 +2388,35 @@ int clif_changelook_towards(struct block_list *bl,int type,int val, struct map_s return 0; } +int clif_changehair(struct block_list *bl, int hairStyle, int hairColor) +{ + unsigned char buf[32]; + struct map_session_data *sd = NULL; + + nullpo_retr(0, bl); + + if(bl->type == BL_PC) + sd = (struct map_session_data *)bl; + + if(sd && sd->disguise > 23 && sd->disguise < 4001) // mob disguises [Valaris] + return 0; + + if (sd && sd->status.option & OPTION_INVISIBILITY) + return 0; + + WBUFW(buf,0)=0x1d7; + WBUFL(buf,2)=bl->id; + WBUFB(buf,6)=LOOK_HAIR; + WBUFW(buf,7)=hairStyle; + WBUFW(buf,9)=hairColor; + clif_send(buf, packet_len_table[0x1d7], bl, AREA); + + WBUFB(buf,6)=LOOK_HAIR_COLOR; + WBUFW(buf,7)=hairColor; + WBUFW(buf,9)=hairStyle; + clif_send(buf, packet_len_table[0x1d7], bl, AREA); +} + /*========================================== * *------------------------------------------ diff --git a/src/map/clif.h b/src/map/clif.h index 198bbff..0816093 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -63,6 +63,7 @@ int clif_damage(struct block_list *,struct block_list *,unsigned int,int,int,int #define clif_takeitem(src,dst) clif_damage(src,dst,0,0,0,0,0,1,0) int clif_changelook(struct block_list *,int,int); // area int clif_changelook_towards(struct block_list *,int,int, struct map_session_data *dst); // area or target +int clif_changehair(struct block_list *,int,int); void clif_changelook_accessories(struct block_list *bl, struct map_session_data *dst); // area or target; list gloves, boots etc. int clif_arrowequip(struct map_session_data *sd,int val); //self int clif_arrow_fail(struct map_session_data *sd,int type); //self diff --git a/src/map/pc.c b/src/map/pc.c index e0b4c89..1310743 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -5763,7 +5763,11 @@ int pc_changelook(struct map_session_data *sd,int type,int val) case LOOK_SHOES: break; } - clif_changelook(&sd->bl,type,val); + + if (type == LOOK_HAIR || type == LOOK_HAIR_COLOR) + clif_changehair(&sd->bl,sd->status.hair,sd->status.hair_color); + else + clif_changelook(&sd->bl,type,val); return 0; } -- cgit v1.2.3-70-g09d2