-$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.231 $ $NHDT-Date: 1547846557 2019/01/18 21:22:37 $
+$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.232 $ $NHDT-Date: 1547849604 2019/01/18 22:13:24 $
This fixes36.2 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.1 in April 2018. Please note, however,
the hero owned the container
when engulfed while in a shop, dropping an item into the engulfer and then
using ':' to look at current location could cause a crash
+when items were on the floor just inside a shop's door where the shopkeeper
+ doesn't buy and sell stuff, those items showed a 'for sale' price
tty: turn off an optimization that is the suspected cause of Windows reported
partial status lines following level changes
tty: ensure that current status fields are always copied to prior status
-/* NetHack 3.6 shk.c $NHDT-Date: 1546770990 2019/01/06 10:36:30 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.152 $ */
+/* NetHack 3.6 shk.c $NHDT-Date: 1547849604 2019/01/18 22:13:24 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.153 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2012. */
/* NetHack may be freely redistributed. See license for details. */
struct monst *shkp;
struct obj *top;
xchar x, y;
+ boolean freespot;
long cost = 0L;
*nochrg = -1; /* assume 'not applicable' */
&& (shkp = shop_keeper(inside_shop(x, y))) != 0 && inhishop(shkp)) {
for (top = obj; top->where == OBJ_CONTAINED; top = top->ocontainer)
continue;
- *nochrg = (top->where == OBJ_FLOOR && obj->no_charge);
+ freespot = (top->where == OBJ_FLOOR
+ && x == ESHK(shkp)->shk.x && y == ESHK(shkp)->shk.y);
+ /* no_charge is only set for floor items inside shop proper;
+ items on freespot are implicitly 'no charge' */
+ *nochrg = (top->where == OBJ_FLOOR && (obj->no_charge || freespot));
if (carried(top) ? (int) obj->unpaid : !*nochrg)
cost = obj->quan * get_cost(obj, shkp);
- if (Has_contents(obj))
+ if (Has_contents(obj) && !freespot)
cost += contained_cost(obj, shkp, 0L, FALSE, FALSE);
}
return cost;