Allow BUC menu options when dealing with containers
not just when dropping. Alters the way the BUC patch works, so that it uses getobj() callbacks.
This commit is contained in:
@@ -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() */
|
||||
|
||||
37
src/do.c
37
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,
|
||||
|
||||
26
src/pickup.c
26
src/pickup.c
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user