summaryrefslogtreecommitdiff
path: root/src/map/path.c
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-02-13 04:04:46 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-02-13 04:04:46 +0000
commitd2111363fea81d55450430a92e371d3a606e4629 (patch)
tree9f4a2d791b7ff8ece7d3e1951a96f03fc9c799ac /src/map/path.c
parent462927e702cf7254e08dcc935beed0fa16fa203f (diff)
downloadhercules-d2111363fea81d55450430a92e371d3a606e4629.tar.gz
hercules-d2111363fea81d55450430a92e371d3a606e4629.tar.bz2
hercules-d2111363fea81d55450430a92e371d3a606e4629.tar.xz
hercules-d2111363fea81d55450430a92e371d3a606e4629.zip
- Added CELL_CHKSTACK to check if a map cell is stacked (CELL_NOSTACK server mod)
- Added flag 0x3000 to path_search to specify that path searching should go through stacked cells. Used for skill_wall_check calls. - easy path_search will be successful in CELL_NOSTACK mode if the search fails only on the target cell (it is presumed the target cell contains the character one is trying to reach). The walk routines will take care of stopping the character from walking into another one when stacked. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@5263 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/path.c')
-rw-r--r--src/map/path.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/map/path.c b/src/map/path.c
index ad5c06f0f..7cab27683 100644
--- a/src/map/path.c
+++ b/src/map/path.c
@@ -172,6 +172,11 @@ static int can_place(struct map_data *m,int x,int y,int flag)
return 1;
if((flag&0x10000)&&map_getcellp(m,x,y,CELL_CHKGROUND))
return 1;
+#ifdef CELL_NOSTACK
+ //Special flag for CELL_NOSTACK systems. Returns true when the given cell is stacked. [Skotlex]
+ if((flag&0x30000)&&map_getcellp(m,x,y,CELL_CHKSTACK))
+ return 1;
+#endif
return 0;
}
@@ -332,9 +337,18 @@ int path_search(struct walkpath_data *wpd,int m,int x0,int y0,int x1,int y1,int
if(!map[m].gat)
return -1;
md=&map[m];
- if(x1<0 || x1>=md->xs || y1<0 || y1>=md->ys || map_getcellp(md,x1,y1,CELL_CHKNOPASS))
+
+ if(x1<0 || x1>=md->xs || y1<0 || y1>=md->ys)
return -1;
+#ifdef CELL_NOSTACK
+ if (map_getcellp(md,x1,y1,CELL_CHKNOPASS) && !map_getcellp(md,x1,y1,CELL_CHKSTACK))
+ return -1;
+#else
+ if (map_getcellp(md,x1,y1,CELL_CHKNOPASS))
+ return -1;
+#endif
+
// easy
dx = (x1-x0<0) ? -1 : 1;
dy = (y1-y0<0) ? -1 : 1;
@@ -366,6 +380,15 @@ int path_search(struct walkpath_data *wpd,int m,int x0,int y0,int x1,int y1,int
return 0;
}
+#ifdef CELL_NOSTACK
+ //If you fail by 1 cell, consider easy path successful, too. [Skotlex]
+ if (check_distance(x-x1,y-y1,1)) {
+ wpd->path_len=i;
+ wpd->path_pos=0;
+ wpd->path_half=0;
+ return 0;
+ }
+#endif
if(flag&1)
return -1;