Merge branch 'NetHack-3.6.2-beta01' into NetHack-3.6.2

This commit is contained in:
nhmall
2018-12-17 07:31:39 -05:00
6 changed files with 43 additions and 19 deletions

View File

@@ -278,6 +278,11 @@ while inside a shop, dropping an unpaid item inside an engulfer would leave
the engulfer was killed; treat dropping shop items inside an engulfer
as stealing them and giving them to that engulfer--hero must pay for
for them and shop retains ownership of them
while levitating inside a shop, throwing an unpaid item and having recoil move
hero out of shop (or to shopkeeper's spot in front of door) would
leave the item unpaid on shop floor and also on the shop's bill but
not visible via 'Iu' or 'Ix'; leaving the shop after that would anger
the shopkeeper and summon kops
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 extern.h $NHDT-Date: 1544998887 2018/12/16 22:21:27 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.671 $ */
/* NetHack 3.6 extern.h $NHDT-Date: 1545043771 2018/12/17 10:49:31 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.673 $ */
/* Copyright (c) Steve Creps, 1988. */
/* NetHack may be freely redistributed. See license for details. */

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 do.c $NHDT-Date: 1545005168 2018/12/17 00:06:08 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.179 $ */
/* NetHack 3.6 do.c $NHDT-Date: 1545043771 2018/12/17 10:49:31 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.181 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Derek S. Ray, 2015. */
/* NetHack may be freely redistributed. See license for details. */
@@ -588,8 +588,7 @@ register struct obj *obj;
/* doname can call s_suffix, reusing its buffer */
Strcpy(monbuf, s_suffix(mon_nam(u.ustuck)));
onam_p = obj->unpaid ? yobjnam(obj, (char *) 0) : doname(obj);
onam_p = is_unpaid(obj) ? yobjnam(obj, (char *) 0) : doname(obj);
You("drop %s into %s %s.", onam_p, monbuf,
mbodypart(u.ustuck, STOMACH));
}
@@ -684,7 +683,7 @@ boolean with_impact;
could_grow = (obj->corpsenm == PM_WRAITH);
could_heal = (obj->corpsenm == PM_NURSE);
}
if (obj->unpaid)
if (is_unpaid(obj))
(void) stolen_value(obj, u.ux, u.uy, TRUE, FALSE);
(void) mpickobj(u.ustuck, obj);
if (is_animal(u.ustuck->data)) {

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 dothrow.c $NHDT-Date: 1544401268 2018/12/10 00:21:08 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.153 $ */
/* NetHack 3.6 dothrow.c $NHDT-Date: 1545044705 2018/12/17 11:05:05 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.154 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2013. */
/* NetHack may be freely redistributed. See license for details. */
@@ -893,21 +893,26 @@ struct obj *obj;
xchar x, y;
boolean broken;
{
boolean costly_xy;
struct monst *shkp = shop_keeper(*u.ushops);
if (!shkp)
return;
if (broken || !costly_spot(x, y)
|| *in_rooms(x, y, SHOPBASE) != *u.ushops) {
costly_xy = costly_spot(x, y);
if (broken || !costly_xy || *in_rooms(x, y, SHOPBASE) != *u.ushops) {
/* thrown out of a shop or into a different shop */
if (is_unpaid(obj))
(void) stolen_value(obj, u.ux, u.uy, (boolean) shkp->mpeaceful,
FALSE);
if (broken)
obj->no_charge = 1;
} else {
if (costly_spot(u.ux, u.uy) && costly_spot(x, y)) {
} else if (costly_xy) {
char *oshops = in_rooms(x, y, SHOPBASE);
/* ushops0: in case we threw while levitating and recoiled
out of shop (most likely to the shk's spot in front of door) */
if (*oshops == *u.ushops || *oshops == *u.ushops0) {
if (is_unpaid(obj))
subfrombill(obj, shkp);
else if (x != shkp->mx || y != shkp->my)

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 invent.c $NHDT-Date: 1541145517 2018/11/02 07:58:37 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.241 $ */
/* NetHack 3.6 invent.c $NHDT-Date: 1545043772 2018/12/17 10:49:32 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.244 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Derek S. Ray, 2015. */
/* NetHack may be freely redistributed. See license for details. */
@@ -25,8 +25,8 @@ STATIC_DCL boolean FDECL(only_here, (struct obj *));
STATIC_DCL void FDECL(compactify, (char *));
STATIC_DCL boolean FDECL(taking_off, (const char *));
STATIC_DCL boolean FDECL(putting_on, (const char *));
STATIC_PTR int FDECL(ckunpaid, (struct obj *));
STATIC_PTR int FDECL(ckvalidcat, (struct obj *));
STATIC_PTR int FDECL(ckunpaid, (struct obj *));
STATIC_PTR char *FDECL(safeq_xprname, (struct obj *));
STATIC_PTR char *FDECL(safeq_shortxprname, (struct obj *));
STATIC_DCL char FDECL(display_pickinv, (const char *, const char *,

View File

@@ -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;