From 645461d7504632780e546fcd4c8ea5f8938b01c0 Mon Sep 17 00:00:00 2001 From: "nethack.rankin" Date: Sun, 18 Nov 2007 19:52:44 +0000 Subject: [PATCH] shop gold vs hangup From the newsgroup: hangup save while picking up gold from the floor in a shop would duplicate that gold in the save file. First the gold amount was being added to hero's gold, then two messages were given [pline() or prinv() about pickup followed by one from costly_gold() about shop credit], and lastly the floor gold would be removed. The second message could trigger --More-- and provide a controllable interruption point between giving the gold to the hero and removing it from the floor. Change this to do the removal step before feedback. --- doc/fixes34.4 | 1 + src/pickup.c | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/fixes34.4 b/doc/fixes34.4 index b645ddf87..251fb6367 100644 --- a/doc/fixes34.4 +++ b/doc/fixes34.4 @@ -366,6 +366,7 @@ could get "suddenly you cannot see the " while invisible mon remained cutting a long worm in half would trigger segfault/accvio crash if the hit took parent down to 1 hit point or if long worms had become extinct blinded invisible hero can't see self as invisible via ';' or '/' +a hangup save while picking up gold from shop floor could duplicate that gold Platform- and/or Interface-Specific Fixes diff --git a/src/pickup.c b/src/pickup.c index 617af5185..70c8a1082 100644 --- a/src/pickup.c +++ b/src/pickup.c @@ -1281,6 +1281,10 @@ boolean telekinesis; /* not picking it up directly by hand */ costly_gold(obj->ox, obj->oy, gold_capacity); } else { u.ugold += count; + if (count == obj->quan) + delobj(obj); + else + obj->quan -= count; if ((nearload = near_capacity()) != 0) pline("%s %ld gold piece%s.", nearload < MOD_ENCUMBER ? @@ -1289,10 +1293,6 @@ boolean telekinesis; /* not picking it up directly by hand */ else prinv((char *) 0, obj, count); costly_gold(obj->ox, obj->oy, count); - if (count == obj->quan) - delobj(obj); - else - obj->quan -= count; } context.botl = 1; if (context.run) nomul(0);