Просмотр исходного кода

- When enabling/disabling hiding/unhiding an npc, if the npc is a warp, it will use clearchar and spawn packets instead of changeoption. Thanks to Toms for the fix.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@7746 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 19 лет назад
Родитель
Сommit
64e01d9894
2 измененных файлов с 16 добавлено и 8 удалено
  1. 3 0
      Changelog-Trunk.txt
  2. 13 8
      src/map/npc.c

+ 3 - 0
Changelog-Trunk.txt

@@ -4,6 +4,9 @@ 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/07/19
+	* When enabling/disabling hiding/unhiding an npc, if the npc is a warp, it
+	  will use clearchar and spawn packets instead of changeoption. Thanks to
+	  Toms for the fix. [Skotlex]
 	* Corrected Trim chars to block 'enter', as explained by the Ultra mage.
 	  [Skotlex]
 	* When the client passes account version 0, the login server will set it to

+ 13 - 8
src/map/npc.c

@@ -122,19 +122,24 @@ int npc_enable(const char *name,int flag)
 	if (nd==NULL)
 		return 0;
 
-	if (flag&1) {	// —LŒø‰»
+	if (flag&1)
 		nd->sc.option&=~OPTION_INVISIBLE;
-		clif_changeoption(&nd->bl);
-	}else if (flag&2){
+	else if (flag&2)
 		nd->sc.option&=~OPTION_HIDE;
-		clif_changeoption(&nd->bl);
-	}else if (flag&4){
+	else if (flag&4)
 		nd->sc.option|= OPTION_HIDE;
-		clif_changeoption(&nd->bl);
-	}else{	//Can't change the view_data to invisible class because the view_data for all npcs is shared! [Skotlex]
+	else	//Can't change the view_data to invisible class because the view_data for all npcs is shared! [Skotlex]
 		nd->sc.option|= OPTION_INVISIBLE;
+
+	if (nd->class_ == WARP_CLASS)
+	{	//Client won't display option changes for warp portals [Toms]
+		if (nd->sc.option&(OPTION_HIDE|OPTION_INVISIBLE))
+			clif_clearchar(&nd->bl, 0);
+		else
+			clif_spawn(&nd->bl);
+	} else
 		clif_changeoption(&nd->bl);
-	}
+		
 	if(flag&3 && (nd->u.scr.xs > 0 || nd->u.scr.ys >0))
 		map_foreachinarea( npc_enable_sub,nd->bl.m,nd->bl.x-nd->u.scr.xs,nd->bl.y-nd->u.scr.ys,nd->bl.x+nd->u.scr.xs,nd->bl.y+nd->u.scr.ys,BL_PC,nd);