more dropping unpaid shop items inside engulfer
I thought that the earlier fix for #H2504 was too easy for anything shop related. It didn't deal sensibly with containers owned by hero but holding unpaid shop goods.
This commit is contained in:
29
src/shk.c
29
src/shk.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 shk.c $NHDT-Date: 1542853899 2018/11/22 02:31:39 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.142 $ */
|
||||
/* NetHack 3.6 shk.c $NHDT-Date: 1545036290 2018/12/17 08:44:50 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.143 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2012. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -2763,6 +2763,15 @@ boolean peaceful, silent;
|
||||
char roomno = *in_rooms(x, y, SHOPBASE);
|
||||
struct bill_x *bp;
|
||||
struct monst *shkp = 0;
|
||||
boolean was_unpaid;
|
||||
long c_count = 0L, u_count = 0L;
|
||||
|
||||
/* gather information for message(s) prior to manipulating bill */
|
||||
was_unpaid = obj->unpaid ? TRUE : FALSE;
|
||||
if (Has_contents(obj)) {
|
||||
c_count = count_contents(obj, TRUE, FALSE, TRUE);
|
||||
u_count = count_contents(obj, TRUE, FALSE, FALSE);
|
||||
}
|
||||
|
||||
if (!billable(&shkp, obj, roomno, FALSE)) {
|
||||
/* things already on the bill yield a not-billable result, so
|
||||
@@ -2810,6 +2819,7 @@ boolean peaceful, silent;
|
||||
ESHK(shkp)->debit += value;
|
||||
|
||||
if (!silent) {
|
||||
char buf[BUFSZ];
|
||||
const char *still = "";
|
||||
|
||||
if (credit_use) {
|
||||
@@ -2823,12 +2833,17 @@ boolean peaceful, silent;
|
||||
}
|
||||
still = "still ";
|
||||
}
|
||||
if (obj->oclass == COIN_CLASS)
|
||||
You("%sowe %s %ld %s!", still, shkname(shkp), value,
|
||||
currency(value));
|
||||
else
|
||||
You("%sowe %s %ld %s for %s!", still, shkname(shkp),
|
||||
value, currency(value), (obj->quan > 1L) ? "them" : "it");
|
||||
Sprintf(buf, "%sowe %s %ld %s", still, shkname(shkp),
|
||||
value, currency(value));
|
||||
if (u_count) /* u_count > 0 implies Has_contents(obj) */
|
||||
Sprintf(eos(buf), " for %s%sits contents",
|
||||
was_unpaid ? "it and " : "",
|
||||
(c_count > u_count) ? "some of " : "");
|
||||
else if (obj->oclass != COIN_CLASS)
|
||||
Sprintf(eos(buf), " for %s",
|
||||
(obj->quan > 1L) ? "them" : "it");
|
||||
|
||||
You("%s!", buf); /* "You owe <shk> N zorkmids for it!" */
|
||||
}
|
||||
} else {
|
||||
ESHK(shkp)->robbed += value;
|
||||
|
||||
Reference in New Issue
Block a user