Преглед на файлове

* Players with OPTION_INVISIBLE should not be sent to clients.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@6594 54d463be-8e91-2dee-dedb-b68131a5f0ec
Lance преди 19 години
родител
ревизия
6fa0186000
променени са 2 файла, в които са добавени 13 реда и са изтрити 2 реда
  1. 1 0
      Changelog-Trunk.txt
  2. 12 2
      src/map/clif.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
+	* Players with OPTION_INVISIBLE should not be sent to clients. [Lance]
 	* Remaining fixes for item scripts. [Lance]
 	* Added NPC event deprecated warnings to ease debugging old scripts. [Lance]
 

+ 12 - 2
src/map/clif.c

@@ -1319,6 +1319,8 @@ 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) {
@@ -1486,8 +1488,11 @@ 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 (disguised(bl)){
+		if(((TBL_PC *)bl)->status.option & OPTION_INVISIBLE)
+			return 0;
 		clif_setdisguise((TBL_PC*)bl, buf, len, 0);
+	}
 		
 	//Stupid client that needs this resent every time someone walks :X
 	if(vd->cloth_color)
@@ -3737,6 +3742,9 @@ 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,6 +3821,8 @@ 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);
@@ -4116,7 +4126,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)
+			if (((TBL_PC*)bl)->vd.class_ != INVISIBLE_CLASS || !(((TBL_PC*)bl)->status.option & OPTION_INVISIBLE))
 				clif_clearchar_id(bl->id,0,tsd->fd);
 			if(sd->chatID){
 				struct chat_data *cd;