summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
authorJared Adams <jaxad0127@gmail.com>2009-08-13 13:48:30 -0600
committerJared Adams <jaxad0127@gmail.com>2009-08-13 13:48:30 -0600
commit1b7508c510aae8906fdcd7309da47c97b2804184 (patch)
tree9c0342ba083fa520e8dba147487bc851afb4da3a /src/map
parent72eb808de6efd156af1463219572d809caf48978 (diff)
downloadtmwa-1b7508c510aae8906fdcd7309da47c97b2804184.tar.gz
tmwa-1b7508c510aae8906fdcd7309da47c97b2804184.tar.bz2
tmwa-1b7508c510aae8906fdcd7309da47c97b2804184.tar.xz
tmwa-1b7508c510aae8906fdcd7309da47c97b2804184.zip
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.
Diffstat (limited to 'src/map')
-rw-r--r--src/map/clif.c29
-rw-r--r--src/map/clif.h1
-rw-r--r--src/map/pc.c6
3 files changed, 35 insertions, 1 deletions
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;
}