fix B18010 fatal exploding chest at ball & chain

This commit is contained in:
nethack.allison
2003-02-08 22:00:58 +00:00
parent 02d9ab252d
commit 7dbed130dc
2 changed files with 14 additions and 0 deletions

View File

@@ -372,6 +372,8 @@ monks lose their to-hit bonus for bare-handed attacking if wearing a shield
fix case on leading character in "Crunched in the head..." in ball.c
using travel mode to move next to a known trap and then trying to step onto
that trap required an extra step; the first one ended up as a no-op
punished with ball and chain on the same floor square as a trapped chest
when it exploded resulted in panic "remove_object: obj not on floor"
Platform- and/or Interface-Specific Fixes

View File

@@ -3479,6 +3479,18 @@ boolean disarm;
loss += stolen_value(obj, ox, oy,
(boolean)shkp->mpeaceful, TRUE);
delete_contents(obj);
/* we're about to delete all things at this location,
* which could include the ball & chain.
* If we attempt to call unpunish() in the
* for-loop below we can end up with otmp2
* being invalid once the chain is gone.
* Deal with ball & chain right now instead.
*/
if (Punished && !carried(uball) &&
((uchain->ox == u.ux && uchain->oy == u.uy) ||
(uball->ox == u.ux && uball->oy == u.uy)))
unpunish();
for(otmp = level.objects[u.ux][u.uy];
otmp; otmp = otmp2) {
otmp2 = otmp->nexthere;