fix #U1202 - shop robbery oversights

A user reported that when breaking potions inside a box in a shop, he
wasn't charged for them.  The code was calling stolen_value() as intended,
but that routine only charged for types of items which the shop normally
carries.  That meant that breaking the contents of a box in a general
store would charge for them but doing so in a tool shop would, not even
though the tool shopkeeper would gladly sell such things when you picked
them up instead of causing them to go away.

     When fixing this, I noticed that stolen_value() was only charging
for single items.  Most of the time that was right, because throwing and
kicking things always split one off, but there are cases (such as zapping
a wand of teleportation at shop goods) where an entire stack gets stolen
as a group.  This makes stolen_value() handle all quantities.
This commit is contained in:
nethack.rankin
2004-11-20 01:41:01 +00:00
parent 05923e795f
commit 6336dbbb65
2 changed files with 8 additions and 3 deletions

View File

@@ -1,4 +1,4 @@
/* SCCS Id: @(#)shk.c 3.4 2004/06/23 */
/* SCCS Id: @(#)shk.c 3.4 2004/11/17 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -2412,8 +2412,11 @@ register boolean peaceful, silent;
value += stolen_container(obj, shkp, value, ininv);
if(!ininv) gvalue += contained_gold(obj);
} else if (!obj->no_charge && saleable(shkp, obj)) {
value += get_cost(obj, shkp);
} else if (!obj->no_charge) {
/* treat items inside containers as "saleable" */
if ((saleable(shkp, obj) || obj->where == OBJ_CONTAINED) &&
(obj->oclass != FOOD_CLASS || !obj->oeaten))
value += obj->quan * get_cost(obj, shkp);
}
if(gvalue + value == 0L) return(0L);