]> git.pond.sub.org Git - empserver/commitdiff
Clean up path finding in getpath()
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 27 Mar 2011 06:44:30 +0000 (08:44 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Tue, 12 Apr 2011 19:51:32 +0000 (21:51 +0200)
Don't claim the destination sector is unreachable when the best path
is longer than 99 characters or the complete path is longer than 1023
characters.  Instead, report that the path is too long when the total
path is longer than 1023 characters.

src/lib/subs/paths.c

index c1d740f4cac5ad22ae1cf64322c49068100852fa..eda00616781d400d86bfe471d8b4be38873a139b 100644 (file)
  *
  *  ---
  *
- *  path.c: Routines associated with paths, directions, etc.
+ *  paths.c: Routines associated with paths, directions, etc.
  *
  *  Known contributors to this file:
- *     Markus Armbruster, 2005-2009
+ *     Markus Armbruster, 2005-2011
  */
 
 #include <config.h>
@@ -113,51 +113,20 @@ getpath(char *buf, char *arg, coord x, coord y, int onlyown, int showdes,
 more:
     while (*p) {
        if (sarg_xy(p, &dx, &dy)) {
-           bp = NULL;
-           switch (mobtype) {
-           default:
-               CANT_REACH();
-               pr("Destination sectors not allowed here!\n");
-               break;
-           case MOB_FLY:
-               if (path_find(x, y, dx, dy, 0, MOB_FLY) < 0)
-                   bp = NULL;
-               else {
-                   len = path_find_route(buf2, 100, x, y, dx, dy);
-                   if (len >= 100)
-                       bp = NULL;
-                   else {
-                       if (len == 0)
-                           strcpy(buf2, "h");
-                       bp = buf2;
-                   }
-               }
-               break;
-           case MOB_SAIL:
-               if (path_find(x, y, dx, dy, player->cnum, MOB_SAIL) < 0)
-                   bp = NULL;
-               else {
-                   len = path_find_route(buf2, 100, x, y, dx, dy);
-                   if (len >= 100)
-                       bp = NULL;
-                   else {
-                       if (len == 0)
-                           strcpy(buf2, "h");
-                       bp = buf2;
-                   }
-               }
+           if (path_find(x, y, dx, dy, player->cnum, mobtype) < 0) {
+               pr("Can't get to %s from here!\n",
+                  xyas(dx, dy, player->cnum));
                break;
            }
-           if (bp && p + strlen(bp) + 1 < buf + MAX_PATH_LEN) {
-               strcpy(p, bp);
-               pr("Using best path  '%s'\n", p);
-               pr("Using total path '%s'\n", buf);
-               return buf;
-           } else {
-               pr("Can't get to %s from here!\n",
+           len = path_find_route(p, buf + MAX_PATH_LEN - p, x, y, dx, dy);
+           if (p + len >= buf + MAX_PATH_LEN) {
+               pr("Can't handle path to %s, it's too long, sorry.\n",
                   xyas(dx, dy, player->cnum));
+               break;
            }
-           break;
+           pr("Using best path  '%s'\n", p);
+           pr("Using total path '%s'\n", buf);
+           return buf;
        }
        dir = chkdir(*p, DIR_STOP, DIR_LAST);
        if (dir < 0) {