buy: Fix bogus error when lot gets reused at the last prompt
authorMarkus Armbruster <armbru@pond.sub.org>
Tue, 12 Jan 2021 20:42:42 +0000 (21:42 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Sat, 23 Jan 2021 07:39:14 +0000 (08:39 +0100)
When the lot being bid for goes away and gets reused while the player
is at the prompt for the destination sector, comm.com_amount gets
stale.  We use it before we detect the change and fail the command
This can lead to a misleading ""You don't have that much to spend!"
error.  Messed up when the code was fixed to deal with lot changes in
4.0.2.

Fix by checking for lot change earlier.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
src/lib/commands/buy.c

index 3d7b079bf1e12291dd050a41f389db0b702c6a04..72afa28c20e10c86349a77d15dfadd1a31864f9d 100644 (file)
@@ -141,6 +141,8 @@ buy(void)
        pr("Could not access sector");
        return RET_FAIL;
     }
        pr("Could not access sector");
        return RET_FAIL;
     }
+    if (!check_comm_ok(&comm))
+       return RET_FAIL;
     if ((sect.sct_type != SCT_WAREH && sect.sct_type != SCT_HARBR) ||
        sect.sct_own != player->cnum) {
        pr("The destination sector is not one of your warehouses.\n");
     if ((sect.sct_type != SCT_WAREH && sect.sct_type != SCT_HARBR) ||
        sect.sct_own != player->cnum) {
        pr("The destination sector is not one of your warehouses.\n");
@@ -161,8 +163,6 @@ buy(void)
        pr("You don't have that much to spend!\n");
        return RET_FAIL;
     }
        pr("You don't have that much to spend!\n");
        return RET_FAIL;
     }
-    if (!check_comm_ok(&comm))
-       return RET_FAIL;
     if (bid > 0.04 + comm.com_price) {
        comm.com_price = bid;
        time(&now);
     if (bid > 0.04 + comm.com_price) {
        comm.com_price = bid;
        time(&now);