From: PatR Date: Sun, 31 May 2015 01:22:14 +0000 (-0700) Subject: get_cost_from_price X-Git-Tag: NetHack-3.6.0_RC01~323^2^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=24b4872e2f1b34837c0655ac41a59a2c4e236896;p=nethack get_cost_from_price I couldn't figure out why walking over a container in a shop might give the wrong price; the code looks correct. But I've reorganized get_cost_from_price to perform the cheapest tests first. The u.ushops check should probably be done in doname to avoid calling this routine at all 99.99% of the time. --- diff --git a/src/shk.c b/src/shk.c index 6988640f0..7d2a79f79 100644 --- a/src/shk.c +++ b/src/shk.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 shk.c $NHDT-Date: 1432512768 2015/05/25 00:12:48 $ $NHDT-Branch: master $:$NHDT-Revision: 1.109 $ */ +/* NetHack 3.6 shk.c $NHDT-Date: 1433035328 2015/05/31 01:22:08 $ $NHDT-Branch: master $:$NHDT-Revision: 1.111 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1873,24 +1873,20 @@ register struct obj *obj; { struct monst *shkp; xchar x, y; - int cost=0; - - if (get_obj_location(obj, &x, &y, 0) && - (obj->unpaid || - (obj->where == OBJ_FLOOR && !obj->no_charge && costly_spot(x,y)))) { - - if (!(shkp = shop_keeper(*in_rooms(x, y, SHOPBASE)))) return 0; - if (!inhishop(shkp)) return 0; - if (!costly_spot(x, y)) return 0; - if (!*u.ushops) return 0; - - if (obj->oclass != COIN_CLASS) { - cost = (obj == uball || obj == uchain) ? 0L : - obj->quan * get_cost(obj, shkp); - if (Has_contents(obj)) { - cost += contained_cost(obj, shkp, 0L, FALSE, FALSE); - } - } + long cost = 0L; + + 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); + if (Has_contents(obj)) + cost += contained_cost(obj, shkp, 0L, FALSE, FALSE); } return cost; }