From: PatR Date: Tue, 25 Dec 2018 21:48:51 +0000 (-0800) Subject: prices of items on shop floor X-Git-Tag: NetHack-3.6.2_Released~120^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3aca92215c66e8fa6b1034e01830d19bf491f5ff;p=nethack prices of items on shop floor get_cost_of_item() was giving different information from shop #chat when dealing with containers owned by hero containing objects owned by the shop. And when it was legitimately reporting a price of 0, doname_with_price() wasn't reporting 'no charge' for items inside a shop that were owned by hero or that shopkeeper didn't care about. Extend the shop price reveal to far-look, but only when hero and item being examined are inside the same shop. --- diff --git a/doc/fixes36.2 b/doc/fixes36.2 index 14f45097e..2b164de23 100644 --- a/doc/fixes36.2 +++ b/doc/fixes36.2 @@ -303,6 +303,8 @@ limit carrying heavy loads from water to land 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 @@ -458,6 +460,8 @@ being trapped (bear trap, web, molten or solidified lava, chained to buried 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 diff --git a/src/objnam.c b/src/objnam.c index 6a805852d..597a79249 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -1,4 +1,4 @@ -/* 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. */ @@ -1210,10 +1210,15 @@ unsigned doname_flags; 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 */ diff --git a/src/pager.c b/src/pager.c index e8748452e..2ae5d8074 100644 --- a/src/pager.c +++ b/src/pager.c @@ -1,4 +1,4 @@ -/* 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. */ @@ -223,7 +223,8 @@ int x, y, glyph; 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; diff --git a/src/shk.c b/src/shk.c index 315de4c1d..9f6715415 100644 --- a/src/shk.c +++ b/src/shk.c @@ -1,4 +1,4 @@ -/* 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. */ @@ -921,7 +921,7 @@ register struct obj *obj, *merge; 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); /* @@ -1962,8 +1962,8 @@ unsigned id; 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; @@ -1972,16 +1972,12 @@ 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); } @@ -4168,9 +4164,8 @@ register struct obj *first_obj; 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);