]> granicus.if.org Git - nethack/commitdiff
Allow BUC menu options when dealing with containers
authornethack.allison <nethack.allison>
Mon, 11 Feb 2002 05:43:38 +0000 (05:43 +0000)
committernethack.allison <nethack.allison>
Mon, 11 Feb 2002 05:43:38 +0000 (05:43 +0000)
not just when dropping. Alters the way the BUC patch
works, so that it uses getobj() callbacks.

include/hack.h
src/do.c
src/pickup.c

index 4e6362b037467ed8c6ae2e51478d734c3cca503c..6529f4f609b559506c33282c8f0008389c92c31f 100644 (file)
@@ -162,6 +162,7 @@ NEARDATA extern coord bhitpos;      /* place where throw or zap hits or stops */
 #define BUC_CURSED   0x100
 #define BUC_UNCURSED 0x200
 #define BUC_UNKNOWN  0x400
+#define BUC_ALLBKNOWN (BUC_BLESSED|BUC_CURSED|BUC_UNCURSED)
 #define ALL_TYPES_SELECTED -2
 
 /* Flags to control find_mid() */
index 2dd8ca8405ed2519494d76ca9a5afd32fd322d20..84e726cf3f9f3c29656561381919fd47cef4b66a 100644 (file)
--- a/src/do.c
+++ b/src/do.c
@@ -643,14 +643,6 @@ int retry;
                all_categories = TRUE;
            else if (pick_list[i].item.a_int == 'A')
                drop_everything = TRUE;
-           else if (pick_list[i].item.a_int == 'B')
-               drop_blessed = TRUE;
-           else if (pick_list[i].item.a_int == 'C')
-               drop_cursed = TRUE;
-           else if (pick_list[i].item.a_int == 'U')
-               drop_uncursed = TRUE;
-           else if (pick_list[i].item.a_int == 'X')
-               drop_buc_unknown = TRUE;
            else
                add_valid_menu_class(pick_list[i].item.a_int);
        }
@@ -672,35 +664,6 @@ int retry;
            otmp2 = otmp->nobj;
            n_dropped += drop(otmp);
        }
-    } else if (drop_blessed) {
-       for(otmp = invent; otmp; otmp = otmp2) {
-           /* zw, gold is never blessed or cursed */
-           otmp2 = otmp->nobj;
-           if (otmp->oclass != GOLD_CLASS && otmp->bknown && otmp->blessed)
-               n_dropped += drop(otmp);
-       }
-    } else if (drop_cursed) {
-       for(otmp = invent; otmp; otmp = otmp2) {
-           /* zw, gold is never blessed or cursed */
-           otmp2 = otmp->nobj;
-           if (otmp->oclass != GOLD_CLASS && otmp->bknown && otmp->cursed)
-               n_dropped += drop(otmp);
-       }
-    } else if (drop_uncursed) {
-       for(otmp = invent; otmp; otmp = otmp2) {
-           /* zw, gold is never blessed or cursed */
-           otmp2 = otmp->nobj;
-           if (otmp->oclass != GOLD_CLASS &&
-                   otmp->bknown && !otmp->blessed && !otmp->cursed)
-               n_dropped += drop(otmp);
-       }
-    } else if (drop_buc_unknown) {
-       for(otmp = invent; otmp; otmp = otmp2) {
-           /* zw, gold is never blessed or cursed */
-           otmp2 = otmp->nobj;
-           if (otmp->oclass != GOLD_CLASS && !otmp->bknown)
-               n_dropped += drop(otmp);
-       }
     } else {
        /* should coordinate with perm invent, maybe not show worn items */
        n = query_objlist("What would you like to drop?", invent,
index e0412220d7466985a8ba0ebf81267b8c661fd006..f524750db3fcdbb5806e1e48b81a9df4b3c1392d 100644 (file)
@@ -315,6 +315,18 @@ struct obj *obj;
     if (((index(valid_menu_classes,'u') != (char *)0) && obj->unpaid) ||
        (index(valid_menu_classes, obj->oclass) != (char *)0))
        return TRUE;
+    else if (((index(valid_menu_classes,'U') != (char *)0) &&
+       (obj->oclass != GOLD_CLASS && obj->bknown && !obj->blessed && !obj->cursed)))
+       return TRUE;
+    else if (((index(valid_menu_classes,'B') != (char *)0) &&
+       (obj->oclass != GOLD_CLASS && obj->bknown && obj->blessed)))
+       return TRUE;
+    else if (((index(valid_menu_classes,'C') != (char *)0) &&
+       (obj->oclass != GOLD_CLASS && obj->bknown && obj->cursed)))
+       return TRUE;
+    else if (((index(valid_menu_classes,'X') != (char *)0) &&
+       (obj->oclass != GOLD_CLASS && !obj->bknown)))
+       return TRUE;
     else
        return FALSE;
 }
@@ -830,28 +842,29 @@ int how;                  /* type of query */
                any.a_void = 0;
                any.a_int = 'B';
                add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
-                       "Auto-select blessed items", MENU_UNSELECTED);
+                       "items known to be Blessed", MENU_UNSELECTED);
        }
        if (do_cursed) {
                invlet = 'C';
                any.a_void = 0;
                any.a_int = 'C';
                add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
-                       "Auto-select cursed items", MENU_UNSELECTED);
+                       "items known to be Cursed", MENU_UNSELECTED);
        }
        if (do_uncursed) {
                invlet = 'U';
                any.a_void = 0;
                any.a_int = 'U';
                add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
-                       "Auto-select known uncursed items", MENU_UNSELECTED);
+                       "items known to be Uncursed", MENU_UNSELECTED);
        }
        if (do_buc_unknown) {
                invlet = 'X';
                any.a_void = 0;
                any.a_int = 'X';
                add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
-                       "Auto-select un-b/u/c known items", MENU_UNSELECTED);
+                       "items of unknown B/C/U status",
+                       MENU_UNSELECTED);
        }
        end_menu(win, qstr);
        n = select_menu(win, how, pick_list);
@@ -2120,13 +2133,16 @@ boolean put_in;
     menu_item *pick_list;
     int mflags, res;
     long count;
+    boolean all_blessed, all_cursed, all_uncursed, all_buc_unknown;
 
+    all_blessed = all_cursed = all_uncursed = all_buc_unknown = FALSE;
     if (retry) {
        all_categories = (retry == -2);
     } else if (flags.menu_style == MENU_FULL) {
        all_categories = FALSE;
        Sprintf(buf,"%s what type of objects?", put_in ? putin : takeout);
-       mflags = put_in ? ALL_TYPES : ALL_TYPES|CHOOSE_ALL;
+       mflags = put_in ? ALL_TYPES | BUC_ALLBKNOWN | BUC_UNKNOWN :
+                         ALL_TYPES | CHOOSE_ALL | BUC_ALLBKNOWN | BUC_UNKNOWN;
        n = query_category(buf, put_in ? invent : container->cobj,
                           mflags, &pick_list, PICK_ANY);
        if (!n) return 0;