failing to carry a wished-for item behaved differenctly from dropping one
life-saving while weak/starving/fainting boosted nutrition without restoring
lost point of strength, making temporary loss be permanent
+unlike #chat in a shop, walking on an item in a shop failed to include price
+ for hero-owned container holding shop-owned items
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
pit ends when either of those starts so doesn't apply)
early level traps are sometimes covered by the remains of fake players
fake player characters resist Conflict
+when inside a shop, far-look now includes shop prices for items marked as
+ having been seen up close
NetHack Community Patches (or Variation) Included
-/* NetHack 3.6 objnam.c $NHDT-Date: 1544520422 2018/12/11 09:27:02 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.230 $ */
+/* NetHack 3.6 objnam.c $NHDT-Date: 1545774525 2018/12/25 21:48:45 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.231 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2011. */
/* NetHack may be freely redistributed. See license for details. */
obj->unpaid ? "unpaid" : "contents",
quotedprice, currency(quotedprice));
} else if (with_price) {
- long price = get_cost_of_shop_item(obj);
+ long price = get_cost_of_shop_item(obj); /* updates obj->ox,oy */
- if (price > 0)
+ if (price > 0L)
Sprintf(eos(bp), " (%ld %s)", price, currency(price));
+ else if (obj->no_charge /* only set for items on shop floor */
+ && *u.ushops /* but make sure hero is inside same shop */
+ && (*in_rooms(u.ux, u.uy, SHOPBASE)
+ == *in_rooms(obj->ox, obj->oy, SHOPBASE)))
+ Strcat(bp, " (no charge)");
}
if (!strncmp(prefix, "a ", 2)) {
/* save current prefix, without "a "; might be empty */
-/* NetHack 3.6 pager.c $NHDT-Date: 1545595360 2018/12/23 20:02:40 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.144 $ */
+/* NetHack 3.6 pager.c $NHDT-Date: 1545774524 2018/12/25 21:48:44 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.145 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2018. */
/* NetHack may be freely redistributed. See license for details. */
if (otmp) {
Strcpy(buf, (otmp->otyp != STRANGE_OBJECT)
- ? distant_name(otmp, doname_vague_quan)
+ ? distant_name(otmp, otmp->dknown ? doname_with_price
+ : doname_vague_quan)
: obj_descr[STRANGE_OBJECT].oc_name);
if (fakeobj)
dealloc_obj(otmp), otmp = 0;
-/* NetHack 3.6 shk.c $NHDT-Date: 1545383616 2018/12/21 09:13:36 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.144 $ */
+/* NetHack 3.6 shk.c $NHDT-Date: 1545774524 2018/12/25 21:48:44 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.145 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */
if (onbill(obj, shkp, TRUE))
break;
}
- /* sanity check, more or less */
+ /* sanity check, in case obj is on bill but not marked 'unpaid' */
if (!shkp)
shkp = shop_keeper(*u.ushops);
/*
return (struct obj *) 0;
}
-/* Returns the price of an arbitrary item in the shop.
- Returns 0 if the item doesn't belong to a shopkeeper. */
+/* Returns the price of an arbitrary item in the shop,
+ 0 if the item doesn't belong to a shopkeeper or hero is not in the shop. */
long
get_cost_of_shop_item(obj)
register struct obj *obj;
xchar x, y;
long cost = 0L;
- if (*u.ushops
- && obj->oclass != COIN_CLASS
+ if (*u.ushops && obj->oclass != COIN_CLASS
&& obj != uball && obj != uchain
&& get_obj_location(obj, &x, &y, 0)
- && (obj->unpaid
- || (obj->where == OBJ_FLOOR
- && !obj->no_charge && costly_spot(x, y)))
- && (shkp = shop_keeper(*in_rooms(x, y, SHOPBASE))) != 0
- && inhishop(shkp)) {
- cost = obj->quan * get_cost(obj, shkp);
+ && *in_rooms(u.ux, u.uy, SHOPBASE) == *in_rooms(x, y, SHOPBASE)
+ && (shkp = shop_keeper(inside_shop(x, y))) != 0 && inhishop(shkp)) {
+ cost = obj->no_charge ? 0L : obj->quan * get_cost(obj, shkp);
if (Has_contents(obj))
cost += contained_cost(obj, shkp, 0L, FALSE, FALSE);
}
for (otmp = first_obj; otmp; otmp = otmp->nexthere) {
if (otmp->oclass == COIN_CLASS)
continue;
- cost = (otmp->no_charge || otmp == uball || otmp == uchain)
- ? 0L
- : get_cost(otmp, (struct monst *) 0);
+ cost = (otmp->no_charge || otmp == uball || otmp == uchain) ? 0L
+ : get_cost(otmp, shkp);
contentsonly = !cost;
if (Has_contents(otmp))
cost += contained_cost(otmp, shkp, 0L, FALSE, FALSE);