fix #Q221 - inappropriate vault guard message when embedded gold reached

From a bug report:  when a guard who's
leading the character out of a vault comes across gold (from mineralize()
usually, but a player could deliberately seed the area in xorn form), the
message "the guard calms down and picks up the gold" was given even though
the guard wasn't angry.  Pick up such gold as soon as temporary corridor
reaches it so that on his next move the guard won't mistakenly think that
the hero has just dropped it.
This commit is contained in:
nethack.rankin
2005-11-12 03:19:22 +00:00
parent 0a3ac165cc
commit 90a9978c33
2 changed files with 12 additions and 2 deletions

View File

@@ -152,6 +152,8 @@ incubi react to mirrors
alignment of Angels was handled inconsistently
pets capable of digging could pass through walls and stone on the Rogue level
avoid inappropriate "the corridor disappears" when vault guard gets killed
avoid inappropriate "the guard calms down" if vault guard's magic corridor
reaches a spot where gold is embedded in the rock
adjust message for gas effect from chest trap if hero resists hallucination

View File

@@ -454,7 +454,7 @@ register struct monst *grd;
long umoney = money_cnt(invent);
register boolean u_carry_gold = ((umoney + hidden_gold()) > 0L);
#endif
boolean see_guard;
boolean see_guard, newspot = FALSE;
if(!on_level(&(egrd->gdlevel), &u.uz)) return(-1);
nx = ny = m = n = 0;
@@ -695,6 +695,7 @@ nextpos:
}
crm->typ = CORR;
proceed:
newspot = TRUE;
unblock_point(nx, ny); /* doesn't block light */
if (cansee(nx,ny))
newsym(nx,ny);
@@ -738,7 +739,14 @@ cleanup:
egrd->ogy = grd->my;
remove_monster(grd->mx, grd->my);
place_monster(grd, nx, ny);
newsym(grd->mx,grd->my);
if (newspot && g_at(nx, ny)) {
/* if there's gold already here (most likely from mineralize()),
pick it up now so that guard doesn't later think hero dropped
it and give an inappropriate message */
mpickgold(grd);
if (canspotmon(grd)) pline("%s picks up some gold.", Monnam(grd));
} else
newsym(grd->mx, grd->my);
restfakecorr(grd);
return(1);
}