浏览代码

Fixed clif_changelook betraying the presence of gm-hidden players (bugreport:2283).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@13240 54d463be-8e91-2dee-dedb-b68131a5f0ec
ultramage 16 年之前
父节点
当前提交
5b970f8c18
共有 2 个文件被更改,包括 12 次插入3 次删除
  1. 2 0
      Changelog-Trunk.txt
  2. 10 3
      src/map/clif.c

+ 2 - 0
Changelog-Trunk.txt

@@ -3,6 +3,8 @@ Date	Added
 AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
+2008/09/27
+	* Fixed clif_changelook betraying the presence of gm-hidden players (bugreport:2283) [ultramage]
 2008/09/11
 	* Rev. 13226 Corrected Lex Divina not showing animation on fail. (bugreport:1740) [L0ne_W0lf]
 	* Rev. 13225 Corrected Offensive Res using Turn Undead cast time. (bugreport:1704) [L0ne_W0lf]

+ 10 - 3
src/map/clif.c

@@ -2318,12 +2318,15 @@ void clif_changelook(struct block_list *bl,int type,int val)
 {
 	unsigned char buf[16];
 	struct map_session_data* sd = NULL;
+	struct status_change* sc;
 	struct view_data* vd;
+	enum send_target target = AREA;
 	nullpo_retv(bl);
 
 	sd = BL_CAST(BL_PC, bl);
+	sc = status_get_sc(bl);
 	vd = status_get_viewdata(bl);
-	//nullpo_ret(vd);	
+	//nullpo_ret(vd);
 	if( vd ) //temp hack to let Warp Portal change appearance
 	switch(type)
 	{
@@ -2395,12 +2398,16 @@ void clif_changelook(struct block_list *bl,int type,int val)
 		break;
 	}
 
+	// prevent leaking the presence of GM-hidden objects
+	if( sc->option&OPTION_INVISIBLE )
+		target = SELF;
+
 #if PACKETVER < 4
 	WBUFW(buf,0)=0xc3;
 	WBUFL(buf,2)=bl->id;
 	WBUFB(buf,6)=type;
 	WBUFB(buf,7)=val;
-	clif_send(buf,packet_len(0xc3),bl,AREA);
+	clif_send(buf,packet_len(0xc3),bl,target);
 #else
 	WBUFW(buf,0)=0x1d7;
 	WBUFL(buf,2)=bl->id;
@@ -2413,7 +2420,7 @@ void clif_changelook(struct block_list *bl,int type,int val)
 		WBUFW(buf,7)=val;
 		WBUFW(buf,9)=0;
 	}
-	clif_send(buf,packet_len(0x1d7),bl,AREA);
+	clif_send(buf,packet_len(0x1d7),bl,target);
 #endif
 }