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

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