fix the "big abuse" reported a few days ago
It was possible to get a shopkeeper to carry the Amulet from the
bottom of the dungeon up to the location of his shop, thereby bypassing
the usual labor of lugging it up yourself. [Drop the Amulet somewhere;
rob a shop so that the Kops are summoned and the shk comes after you;
when shk is next you, level teleport to the Amulet (probably two hops,
one to the Valley and another deeper into Gehennom); walk to the vicinity
of the Amulet; shk will eventually pick it up (shopkeepers like to pick
up magic items); now, pay him for the stolen goods--he'll be pacified
and migrate back to his shop, taking his inventory with him; lastly,
return to his shop and relieve him of his burder.] This patch makes
shopkeepers drop the Amulet or invocation tools if/when they set set to
migrate to their normal location.
Also fix another long standing risk that a monster that is sent
away (nurse when healing, Kops when you pacify a shopkeeper) might be
carrying the Amulet or one of the invocation tools and make the game
unwinnable. I doubt that that's ever actually happened but I think it'd
be possible if a monster that likes magic items ever got polymorphed
into a Kop. Such dismissed monsters will now drop the same stuff as
the shk above prior to leaving the game.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* SCCS Id: @(#)shk.c 3.4 2003/08/18 */
|
||||
/* SCCS Id: @(#)shk.c 3.4 2003/12/04 */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -975,6 +975,9 @@ register boolean silentkops;
|
||||
} else {
|
||||
/* if sensed, does disappear regardless whether seen */
|
||||
if (sensemon(shkp)) vanished = TRUE;
|
||||
/* can't act as porter for the Amulet, even if shk
|
||||
happens to be going farther down rather than up */
|
||||
mdrop_special_objs(shkp);
|
||||
/* arrive near shop's door */
|
||||
migrate_to_level(shkp, ledger_no(&eshkp->shoplevel),
|
||||
MIGR_APPROX_XY, &eshkp->shd);
|
||||
|
||||
Reference in New Issue
Block a user