Jelajahi Sumber

- Added pc_issit check to pc_can_move
- Stone/Freeze/Stun/Sleep now make you stand up as well.
- Some logic pointer fixes on map_searchrandfreecell.


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@5251 54d463be-8e91-2dee-dedb-b68131a5f0ec

skotlex 19 tahun lalu
induk
melakukan
5b7bbaa4eb
4 mengubah file dengan 14 tambahan dan 7 penghapusan
  1. 1 0
      Changelog-Trunk.txt
  2. 6 6
      src/map/map.c
  3. 3 0
      src/map/pc.c
  4. 4 1
      src/map/status.c

+ 1 - 0
Changelog-Trunk.txt

@@ -5,6 +5,7 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.  EV
 GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
 
 2006/02/10
+	* Fixed map_searchrandcell function. [Skotlex]
 	* Modified the NPC_BREAK* skills to break equipment at a 10%*lv rate. [Skotlex]
 	* Modified the drop item routines to perform stacking checks only for
 	  player attempted item drops, therefore, mob drops will stack up to

+ 6 - 6
src/map/map.c

@@ -1324,18 +1324,18 @@ int map_searchrandfreecell(int m,int *x,int *y,int stack) {
 	int free_cells[9][2];
 
 	for(free_cell=0,i=-1;i<=1;i++){
-		if(i+y<0 || i+y>=map[m].ys)
+		if(i+*y<0 || i+*y>=map[m].ys)
 			continue;
 		for(j=-1;j<=1;j++){
-			if(j+x<0 || j+x>=map[m].xs)
+			if(j+*x<0 || j+*x>=map[m].xs)
 				continue;
-			if(map_getcell(m,j+x,i+y,CELL_CHKNOPASS))
+			if(map_getcell(m,j+*x,i+*y,CELL_CHKNOPASS))
 				continue;
 			//Avoid item stacking to prevent against exploits. [Skotlex]
-			if(stack && map_count_oncell(m,j+x,i+y, BL_ITEM) > stack)
+			if(stack && map_count_oncell(m,j+*x,i+*y, BL_ITEM) > stack)
 				continue;
-			free_cells[free_cell][0] = j+x;
-			free_cells[free_cell++][1] = i+y;
+			free_cells[free_cell][0] = j+*x;
+			free_cells[free_cell++][1] = i+*y;
 		}
 	}
 	if(free_cell==0)

+ 3 - 0
src/map/pc.c

@@ -359,6 +359,9 @@ int pc_can_move(struct map_session_data *sd)
 
 	if ((sd->sc.option & OPTION_HIDE) && pc_checkskill(sd, RG_TUNNELDRIVE) <= 0)
 		return 0;
+
+	if (pc_issit(sd))
+		return 0; //Can't move while sitting...
 	
 	if (DIFF_TICK(sd->canmove_tick, gettick()) > 0)
 		return 0;

+ 4 - 1
src/map/status.c

@@ -3745,7 +3745,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
 			if (elem == 1 && !(flag&1))
 				return 0; //Can't freeze water elementals.
 		case SC_STONE:
-			//I've been informed that undead chars are inmune to stone curse too. [Skotlex]
+			//Undead are inmune to Freeze/Stone
 			if (undead_flag && !(flag&1))
 				return 0;
 		case SC_SLEEP:
@@ -4631,6 +4631,9 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
 		case SC_FREEZE:
 		case SC_STAN:
 		case SC_SLEEP:
+		case SC_STONE:
+			if (sd && pc_issit(sd)) //Avoid sprite sync problems.
+				pc_setstand(sd);
 		case SC_TRICKDEAD:
 			battle_stopattack(bl);
 			skill_stop_dancing(bl);	/* ‰‰‘t/ƒ_ƒ“ƒX‚Ì’†? */