'Iu' vs unknown container contents
An inventory of unpaid items where more than one was present would show |> bag's contents N zorkmids if any of the items were inside a container whose contents aren't known. But if there was only one item (so container must be owned by hero) the 'Iu' output menu was skipped for pline and yielded |> scroll of magic mapping 133 zorkmids Force the menu display if the lone unpaid item is inside a container whose contents are unknown. I'm not sure whether a hero-owned container can have both unknown contents and an unpaid item in normal play. I managed it while trying to fix a reported problem--except I can no longer find the relevant report--where itemized shop billing also revealed unseen container contents (for any number of items, not just 1). That isn't fixed yet, but I want to get the simpler 'Iu' part out of the way.
This commit is contained in:
@@ -507,6 +507,8 @@ shopkeepers in their own shop and priests in their own temple are no longer
|
||||
frightened by hero standing on scroll of scare monster
|
||||
the Wizard, Angels and lawful minions, the Riders, shopkeep/priest in own room
|
||||
are never frightened by tooled horns
|
||||
'Iu' would reveal unknown container contents if carrying one unpaid item inside
|
||||
a hero-owned container whose contents weren't known
|
||||
|
||||
|
||||
Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 extern.h $NHDT-Date: 1517128658 2018/01/28 08:37:38 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.624 $ */
|
||||
/* NetHack 3.6 extern.h $NHDT-Date: 1518053385 2018/02/08 01:29:45 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.625 $ */
|
||||
/* Copyright (c) Steve Creps, 1988. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -1284,6 +1284,7 @@ E struct obj *FDECL(splitobj, (struct obj *, long));
|
||||
E struct obj *FDECL(unsplitobj, (struct obj *));
|
||||
E void NDECL(clear_splitobjs);
|
||||
E void FDECL(replace_object, (struct obj *, struct obj *));
|
||||
E struct obj *FDECL(unknwn_contnr_contents, (struct obj *));
|
||||
E void FDECL(bill_dummy_object, (struct obj *));
|
||||
E void FDECL(costly_alteration, (struct obj *, int));
|
||||
E struct obj *FDECL(mksobj, (int, BOOLEAN_P, BOOLEAN_P));
|
||||
|
||||
14
src/invent.c
14
src/invent.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 invent.c $NHDT-Date: 1512473628 2017/12/05 11:33:48 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.223 $ */
|
||||
/* NetHack 3.6 invent.c $NHDT-Date: 1518053384 2018/02/08 01:29:44 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.224 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -2541,22 +2541,26 @@ STATIC_OVL void
|
||||
dounpaid()
|
||||
{
|
||||
winid win;
|
||||
struct obj *otmp, *marker;
|
||||
struct obj *otmp, *marker, *contnr;
|
||||
register char ilet;
|
||||
char *invlet = flags.inv_order;
|
||||
int classcount, count, num_so_far;
|
||||
long cost, totcost;
|
||||
|
||||
count = count_unpaid(invent);
|
||||
otmp = marker = contnr = (struct obj *) 0;
|
||||
|
||||
if (count == 1) {
|
||||
marker = (struct obj *) 0;
|
||||
otmp = find_unpaid(invent, &marker);
|
||||
contnr = unknwn_contnr_contents(otmp);
|
||||
}
|
||||
if (otmp && !contnr) {
|
||||
/* 1 item; use pline instead of popup menu */
|
||||
cost = unpaid_cost(otmp, FALSE);
|
||||
iflags.suppress_price++; /* suppress "(unpaid)" suffix */
|
||||
pline1(xprname(otmp, distant_name(otmp, doname),
|
||||
carried(otmp) ? otmp->invlet : CONTAINED_SYM, TRUE,
|
||||
cost, 0L));
|
||||
carried(otmp) ? otmp->invlet : CONTAINED_SYM,
|
||||
TRUE, cost, 0L));
|
||||
iflags.suppress_price--;
|
||||
return;
|
||||
}
|
||||
|
||||
19
src/mkobj.c
19
src/mkobj.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 mkobj.c $NHDT-Date: 1513298759 2017/12/15 00:45:59 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.129 $ */
|
||||
/* NetHack 3.6 mkobj.c $NHDT-Date: 1518053380 2018/02/08 01:29:40 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.130 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -579,6 +579,23 @@ struct obj *otmp;
|
||||
}
|
||||
}
|
||||
|
||||
/* is 'obj' inside a container whose contents aren't known?
|
||||
if so, return the outermost container meeting that criterium */
|
||||
struct obj *
|
||||
unknwn_contnr_contents(obj)
|
||||
struct obj *obj;
|
||||
{
|
||||
struct obj *result = 0, *parent;
|
||||
|
||||
while (obj->where == OBJ_CONTAINED) {
|
||||
parent = obj->ocontainer;
|
||||
if (!parent->cknown)
|
||||
result = parent;
|
||||
obj = parent;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a dummy duplicate to put on shop bill. The duplicate exists
|
||||
* only in the billobjs chain. This function is used when a shop object
|
||||
|
||||
Reference in New Issue
Block a user