locate() can take more than one type and prefer all of them
authorAri Johnson <ari@cobramush.org>
Fri, 13 Apr 2007 03:50:40 +0000 (03:50 +0000)
committerAri Johnson <ari@theari.com>
Thu, 24 Mar 2011 15:58:45 +0000 (15:58 +0000)
(cherry picked from commit 42ea0853eb2f3d4b491380f644169212567ef7fc)

game/txt/changes/0.73
src/fundb.c

index b6795bf2d5430bc67ae14fd1e4eb317750686b1f..7c50af5ab4ba6bdc487b3bdde53b27e9be7da55d 100644 (file)
@@ -194,4 +194,5 @@ CobraMUSH Version 0.73
    * make distclean is now more thorough. [RLB]
    * FIXED flag restriction on 'home' is now entirely in restrict.cnf [AEJ]
    * @chan/list works better for people who increase CHAN_NAME_LEN [AEJ]
+   * locate() can take multiple types and prefer all of them [AEJ]
 
index 35b19711721f60acdeba63ba949f146b2d01b791..6212e3e284e3fbe8e667fe7941264ac9fa0c6db9 100644 (file)
@@ -1666,26 +1666,26 @@ FUNCTION(fun_locate)
   }
 
   /* find out our preferred match type and flags */
-  pref_type = NOTYPE;
+  pref_type = 0;
   for (p = args[2]; *p; p++) {
     switch (*p) {
     case 'N':
-      pref_type = NOTYPE;
+      pref_type |= NOTYPE;
       break;
     case 'E':
-      pref_type = TYPE_EXIT;
+      pref_type |= TYPE_EXIT;
       break;
     case 'P':
-      pref_type = TYPE_PLAYER;
+      pref_type |= TYPE_PLAYER;
       break;
     case 'R':
-      pref_type = TYPE_ROOM;
+      pref_type |= TYPE_ROOM;
       break;
     case 'T':
-      pref_type = TYPE_THING;
+      pref_type |= TYPE_THING;
       break;
     case 'D':
-      pref_type = TYPE_DIVISION;
+      pref_type |= TYPE_DIVISION;
       break;
     case 'L':
       keys = 1;
@@ -1734,6 +1734,8 @@ FUNCTION(fun_locate)
       break;
     }
   }
+  if (!pref_type)
+    pref_type = NOTYPE;
 
   if (keys)
     match_flags = MAT_CHECK_KEYS;
@@ -1749,7 +1751,7 @@ FUNCTION(fun_locate)
     return;
   }
 
-  if (force_type && pref_type != NOTYPE && !(Typeof(item) == pref_type)) {
+  if (force_type && !(Typeof(item) & pref_type)) {
     safe_dbref(NOTHING, buff, bp);
     return;
   }