fix #H4347 - revival of carried corpse in shop

Zapping wand of undead turning at self while inside a shop and
carrying a corpse caused the shopkeeper to claim a use-up fee for
the corpse regardless of whether it was owned by the shop.

Not mentioned in the report:  casting stone-to-flesh as self while
carrying a figurine or statue behaved similarly.
This commit is contained in:
PatR
2016-05-24 18:00:57 -07:00
parent caafec1bc7
commit 955c53eba5
4 changed files with 23 additions and 17 deletions

View File

@@ -263,6 +263,10 @@ new character with OPTIONS=role:Valk,race:!human,align:!lawful yielded
new character with OPTIONS=role:Valk,race:random yielded
"Shall I pick your Valkyrie's race and alignment for you?" instead
of honoring race:random without asking
while in shop, undead turning at self causing carried, hero owned corpse to
resurrect claimed it belonged to shopkeeper
while in shop, stone-to-flesh at self causing carried, hero owned figurine
or statue to animate claimed it belonged to shopkeeper
Fixes to Post-3.6.0 Problems that Were Exposed Via git Respository

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 shk.c $NHDT-Date: 1463620377 2016/05/19 01:12:57 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.131 $ */
/* NetHack 3.6 shk.c $NHDT-Date: 1464138042 2016/05/25 01:00:42 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.132 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -2559,9 +2559,10 @@ boolean ininv, dummy, silent;
}
obj->quan = 1L; /* fool xname() into giving singular */
pline("%s %ld %s %s %s%s.\"", buf, ltmp, currency(ltmp),
(save_quan > 1L) ? "per" : (contentscount && !obj->unpaid)
? "for the contents of this"
: "for this",
(save_quan > 1L) ? "per"
: (contentscount && !obj->unpaid)
? "for the contents of this"
: "for this",
xname(obj),
(contentscount && obj->unpaid) ? and_its_contents : "");
obj->quan = save_quan;

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 trap.c $NHDT-Date: 1461568321 2016/04/25 07:12:01 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.268 $ */
/* NetHack 3.6 trap.c $NHDT-Date: 1464138044 2016/05/25 01:00:44 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.272 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -690,6 +690,7 @@ int *fail_reason;
which refers to "it" so needs to follow a message describing
the object ("the statue comes to life" one above) */
if (cause != ANIMATE_NORMAL && costly_spot(x, y)
&& (carried(statue) ? statue->unpaid : !statue->no_charge)
&& (shkp = shop_keeper(*in_rooms(x, y, SHOPBASE))) != 0
/* avoid charging for Manlobbi's statue of Manlobbi
if stone-to-flesh is used on petrified shopkeep */

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 zap.c $NHDT-Date: 1463533826 2016/05/18 01:10:26 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.255 $ */
/* NetHack 3.6 zap.c $NHDT-Date: 1464138044 2016/05/25 01:00:44 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.257 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -795,7 +795,8 @@ boolean by_hero;
struct monst *shkp = 0;
x = corpse->ox, y = corpse->oy;
if (costly_spot(x, y))
if (costly_spot(x, y)
&& (carried(corpse) ? corpse->unpaid : !corpse->no_charge))
shkp = shop_keeper(*in_rooms(x, y, SHOPBASE));
if (cansee(x, y)) {
@@ -1612,9 +1613,9 @@ int id;
if (*u.ushops
&& *in_rooms(u.ux, u.uy, 0)
== *in_rooms(shkp->mx, shkp->my, 0)
&& !costly_spot(u.ux, u.uy))
&& !costly_spot(u.ux, u.uy)) {
make_angry_shk(shkp, ox, oy);
else {
} else {
pline("%s gets angry!", Monnam(shkp));
hot_pursuit(shkp);
}
@@ -1633,7 +1634,7 @@ struct obj *obj;
{
int res = 1; /* affected object by default */
struct permonst *ptr;
struct monst *mon;
struct monst *mon, *shkp;
struct obj *item;
xchar oox, ooy;
boolean smell = FALSE, golem_xform = FALSE;
@@ -1664,19 +1665,18 @@ struct obj *obj;
break;
}
if (obj->otyp == STATUE) {
/* animate_statue() forces all golems to become flesh golems
*/
/* animate_statue() forces all golems to become flesh golems */
mon = animate_statue(obj, oox, ooy, ANIMATE_SPELL, (int *) 0);
} else { /* (obj->otyp == FIGURINE) */
if (golem_xform)
ptr = &mons[PM_FLESH_GOLEM];
mon = makemon(ptr, oox, ooy, NO_MINVENT);
if (mon) {
if (costly_spot(oox, ooy) && !obj->no_charge) {
if (costly_spot(u.ux, u.uy))
addtobill(obj, carried(obj), FALSE, FALSE);
else
stolen_value(obj, oox, ooy, TRUE, FALSE);
if (costly_spot(oox, ooy)
&& (carried(obj) ? obj->unpaid : !obj->no_charge)) {
shkp = shop_keeper(*in_rooms(oox, ooy, SHOPBASE));
stolen_value(obj, oox, ooy,
(shkp && shkp->mpeaceful), FALSE);
}
if (obj->timed)
obj_stop_timers(obj);