diff --git a/src/pickup.c b/src/pickup.c index f2642a6ed..bbb0ec17b 100644 --- a/src/pickup.c +++ b/src/pickup.c @@ -2024,15 +2024,14 @@ register struct obj *obj; (void) snuff_lit(obj); if (floor_container && costly_spot(u.ux, u.uy)) { - if (obj->oclass == COIN_CLASS) { - ; /* defer gold until after put-in message */ - } else if (current_container->no_charge && !obj->unpaid) { - /* don't sell when putting the item into your own container */ - obj->no_charge = 1; - } else { + /* defer gold until after put-in message */ + if (obj->oclass != COIN_CLASS) { /* sellobj() will take an unpaid item off the shop bill */ was_unpaid = obj->unpaid ? TRUE : FALSE; - sellobj_state(SELL_DELIBERATE); + /* don't sell when putting the item into your own container, + * but handle billing correctly */ + sellobj_state(current_container->no_charge + ? SELL_DONTSELL : SELL_DELIBERATE); sellobj(obj, u.ux, u.uy); sellobj_state(SELL_NORMAL); } diff --git a/src/shk.c b/src/shk.c index 4d683f500..9f4ac071f 100644 --- a/src/shk.c +++ b/src/shk.c @@ -2889,12 +2889,13 @@ xchar x, y; offer = ltmp + cltmp; /* get one case out of the way: nothing to sell, and no gold */ - if (!isgold && ((offer + gltmp) == 0L || sell_how == SELL_DONTSELL)) { + if (!(isgold || cgold) + && ((offer + gltmp) == 0L || sell_how == SELL_DONTSELL)) { boolean unpaid = is_unpaid(obj); if (container) { dropped_container(obj, shkp, FALSE); - if (!obj->unpaid && !saleitem) + if (!obj->unpaid) obj->no_charge = 1; if (unpaid) subfrombill(obj, shkp); @@ -2965,11 +2966,11 @@ xchar x, y; currency(eshkp->credit)); } - if (!offer) { + if (!offer || sell_how == SELL_DONTSELL) { if (!isgold) { if (container) dropped_container(obj, shkp, FALSE); - if (!obj->unpaid && !saleitem) + if (!obj->unpaid) obj->no_charge = 1; subfrombill(obj, shkp); }