Browse Source

- Removed Lance's checks in clif.c to prevent sending packets when a player is in OPTION_INVISIBLE mode. Now pc_disguise won't change your viewclass when you diguise while hiding. The disguise should "show up" when you uncloak, instead.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@6597 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 19 năm trước cách đây
mục cha
commit
2c902be399
3 tập tin đã thay đổi với 9 bổ sung12 xóa
  1. 1 0
      Changelog-Trunk.txt
  2. 2 12
      src/map/clif.c
  3. 6 0
      src/map/pc.c

+ 1 - 0
Changelog-Trunk.txt

@@ -4,6 +4,7 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/05/15
+	* Some adjustments of how disguising + gm-hiding work together. [Skotlex]
 	* Fixed clif_GlobalMessage being the exact same function as clif_message
 	  (the first should send to ALL_CLIENT and the later should send to
 	  AREA_CHAT_WOS). Should fix globalmes script command. [Skotlex]

+ 2 - 12
src/map/clif.c

@@ -1311,8 +1311,6 @@ int clif_spawn(struct block_list *bl)
 
 	if (pcdb_checkid(vd->class_))
 	{	//Player spawn packet.
-		if(((TBL_PC *)bl)->status.option & OPTION_INVISIBLE)
-			return 0;
 		clif_set0078(bl, vd, buf);
 #if PACKETVER > 3
 		if (WBUFW(buf,0)==0x78) {
@@ -1480,11 +1478,8 @@ int clif_move(struct block_list *bl) {
 	
 	len = clif_set007b(bl,vd,ud,buf);
 	clif_send(buf,len,bl,AREA_WOS);
-	if (disguised(bl)){
-		if(((TBL_PC *)bl)->status.option & OPTION_INVISIBLE)
-			return 0;
+	if (disguised(bl))
 		clif_setdisguise((TBL_PC*)bl, buf, len, 0);
-	}
 		
 	//Stupid client that needs this resent every time someone walks :X
 	if(vd->cloth_color)
@@ -3734,9 +3729,6 @@ void clif_getareachar_char(struct map_session_data* sd,struct block_list *bl)
 	if (!vd || vd->class_ == INVISIBLE_CLASS)
 		return;
 
-	if(bl->type == BL_PC && ((TBL_PC *)bl)->status.option & OPTION_INVISIBLE)
-		return;
-
 	ud = unit_bl2ud(bl);
 	if (ud && ud->walktimer != -1)
 	{
@@ -3813,8 +3805,6 @@ int clif_fixpos2(struct block_list* bl)
 		len = clif_set0078(bl,vd,buf);
 
 	if (disguised(bl)) {
-		if(((TBL_PC *)bl)->status.option & OPTION_INVISIBLE)
-			return 0;
 		clif_send(buf,len,bl,AREA_WOS);
 		clif_setdisguise((TBL_PC*)bl, buf, len, 0);
 		clif_setdisguise((TBL_PC*)bl, buf, len, 1);
@@ -4118,7 +4108,7 @@ int clif_outsight(struct block_list *bl,va_list ap)
 	{	//tsd has lost sight of the bl object.
 		switch(bl->type){
 		case BL_PC:
-			if (((TBL_PC*)bl)->vd.class_ != INVISIBLE_CLASS || !(((TBL_PC*)bl)->status.option & OPTION_INVISIBLE))
+			if (((TBL_PC*)bl)->vd.class_ != INVISIBLE_CLASS)
 				clif_clearchar_id(bl->id,0,tsd->fd);
 			if(sd->chatID){
 				struct chat_data *cd;

+ 6 - 0
src/map/pc.c

@@ -1085,6 +1085,12 @@ int pc_disguise(struct map_session_data *sd, int class_) {
 	if (class_ && (sd->disguise == class_ || pc_isriding(sd)))
 		return 0;
 
+	if(sd->sc.option&OPTION_INVISIBLE)
+  	{	//Character is invisible. Stealth class-change. [Skotlex]
+		sd->disguise = class_; //viewdata is set on uncloaking.
+		return 2;
+	}
+	
 	pc_stop_walking(sd, 0);
 	clif_clearchar(&sd->bl, 0);