getobj using counts from inventory display
getobj used display_inventory when "?" was selected. However, any count entered via the menu interface was lost. Provide a new internal function that can return both a letter and a count
This commit is contained in:
@@ -408,6 +408,7 @@ impose additional teleport restrictions on the no-teleport Plane of Air
|
|||||||
landmines set off by pushed boulders have same effects as stepping on them
|
landmines set off by pushed boulders have same effects as stepping on them
|
||||||
secret corridor detected out of vision range is still displayed (prevents bug
|
secret corridor detected out of vision range is still displayed (prevents bug
|
||||||
where wand of secret door detection found nothing but still identified)
|
where wand of secret door detection found nothing but still identified)
|
||||||
|
getobj can now see user-specified count when using inventory to make selection
|
||||||
|
|
||||||
|
|
||||||
Platform- and/or Interface-Specific Fixes
|
Platform- and/or Interface-Specific Fixes
|
||||||
|
|||||||
64
src/invent.c
64
src/invent.c
@@ -17,6 +17,7 @@ STATIC_DCL boolean FDECL(only_here, (struct obj *));
|
|||||||
#endif /* OVL1 */
|
#endif /* OVL1 */
|
||||||
STATIC_DCL void FDECL(compactify,(char *));
|
STATIC_DCL void FDECL(compactify,(char *));
|
||||||
STATIC_PTR int FDECL(ckunpaid,(struct obj *));
|
STATIC_PTR int FDECL(ckunpaid,(struct obj *));
|
||||||
|
static char FDECL(display_pickinv, (const char *,BOOLEAN_P, long *));
|
||||||
#ifdef OVLB
|
#ifdef OVLB
|
||||||
STATIC_DCL boolean FDECL(this_type_only, (struct obj *));
|
STATIC_DCL boolean FDECL(this_type_only, (struct obj *));
|
||||||
STATIC_DCL void NDECL(dounpaid);
|
STATIC_DCL void NDECL(dounpaid);
|
||||||
@@ -934,6 +935,26 @@ register const char *let,*word;
|
|||||||
return(mkgoldobj(cnt));
|
return(mkgoldobj(cnt));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
if(ilet == '?' || ilet == '*') {
|
||||||
|
char *allowed_choices = (ilet == '?') ? lets : (char *)0;
|
||||||
|
long ctmp = 0;
|
||||||
|
|
||||||
|
if (ilet == '?' && !*lets && *altlets)
|
||||||
|
allowed_choices = altlets;
|
||||||
|
ilet = display_pickinv(allowed_choices, TRUE,
|
||||||
|
allowcnt ? &ctmp : (long *)0);
|
||||||
|
if(!ilet) continue;
|
||||||
|
if (ctmp) {
|
||||||
|
cnt = ctmp;
|
||||||
|
allowcnt = 2;
|
||||||
|
}
|
||||||
|
if(ilet == '\033') {
|
||||||
|
if(flags.verbose)
|
||||||
|
pline(Never_mind);
|
||||||
|
return((struct obj *)0);
|
||||||
|
}
|
||||||
|
/* they typed a letter (not a space) at the prompt */
|
||||||
|
}
|
||||||
if(allowcnt == 2 && !strcmp(word,"throw")) {
|
if(allowcnt == 2 && !strcmp(word,"throw")) {
|
||||||
/* permit counts for throwing gold, but don't accept
|
/* permit counts for throwing gold, but don't accept
|
||||||
* counts for other things since the throw code will
|
* counts for other things since the throw code will
|
||||||
@@ -951,20 +972,6 @@ register const char *let,*word;
|
|||||||
#ifdef GOLDOBJ
|
#ifdef GOLDOBJ
|
||||||
flags.botl = 1; /* May have changed the amount of money */
|
flags.botl = 1; /* May have changed the amount of money */
|
||||||
#endif
|
#endif
|
||||||
if(ilet == '?' || ilet == '*') {
|
|
||||||
char *allowed_choices = (ilet == '?') ? lets : (char *)0;
|
|
||||||
|
|
||||||
if (ilet == '?' && !*lets && *altlets)
|
|
||||||
allowed_choices = altlets;
|
|
||||||
ilet = display_inventory(allowed_choices, TRUE);
|
|
||||||
if(!ilet) continue;
|
|
||||||
if(ilet == '\033') {
|
|
||||||
if(flags.verbose)
|
|
||||||
pline(Never_mind);
|
|
||||||
return((struct obj *)0);
|
|
||||||
}
|
|
||||||
/* they typed a letter (not a space) at the prompt */
|
|
||||||
}
|
|
||||||
#ifdef REDO
|
#ifdef REDO
|
||||||
savech(ilet);
|
savech(ilet);
|
||||||
#endif
|
#endif
|
||||||
@@ -1520,16 +1527,15 @@ find_unpaid(list, last_found)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If lets == NULL or "", list all objects in the inventory. Otherwise,
|
* Internal function used by display_inventory and getobj that can display
|
||||||
* list all objects with object classes that match the order in lets.
|
* inventory and return a count as well as a letter. If out_cnt is not null,
|
||||||
*
|
* any count returned from the menu selection is placed here.
|
||||||
* Returns the letter identifier of a selected item, or 0 if nothing
|
|
||||||
* was selected.
|
|
||||||
*/
|
*/
|
||||||
char
|
static char
|
||||||
display_inventory(lets, want_reply)
|
display_pickinv(lets, want_reply, out_cnt)
|
||||||
register const char *lets;
|
register const char *lets;
|
||||||
boolean want_reply;
|
boolean want_reply;
|
||||||
|
long* out_cnt;
|
||||||
{
|
{
|
||||||
struct obj *otmp;
|
struct obj *otmp;
|
||||||
char ilet, ret;
|
char ilet, ret;
|
||||||
@@ -1623,6 +1629,7 @@ nextclass:
|
|||||||
n = select_menu(win, want_reply ? PICK_ONE : PICK_NONE, &selected);
|
n = select_menu(win, want_reply ? PICK_ONE : PICK_NONE, &selected);
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
ret = selected[0].item.a_char;
|
ret = selected[0].item.a_char;
|
||||||
|
if (out_cnt) *out_cnt = selected[0].count;
|
||||||
free((genericptr_t)selected);
|
free((genericptr_t)selected);
|
||||||
} else
|
} else
|
||||||
ret = !n ? '\0' : '\033'; /* cancelled */
|
ret = !n ? '\0' : '\033'; /* cancelled */
|
||||||
@@ -1630,6 +1637,21 @@ nextclass:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If lets == NULL or "", list all objects in the inventory. Otherwise,
|
||||||
|
* list all objects with object classes that match the order in lets.
|
||||||
|
*
|
||||||
|
* Returns the letter identifier of a selected item, or 0 if nothing
|
||||||
|
* was selected.
|
||||||
|
*/
|
||||||
|
char
|
||||||
|
display_inventory(lets, want_reply)
|
||||||
|
register const char *lets;
|
||||||
|
boolean want_reply;
|
||||||
|
{
|
||||||
|
return display_pickinv(lets, want_reply, (long *)0);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns the number of unpaid items within the given list. This includes
|
* Returns the number of unpaid items within the given list. This includes
|
||||||
* contained objects.
|
* contained objects.
|
||||||
|
|||||||
Reference in New Issue
Block a user