]> git.pond.sub.org Git - empserver/commitdiff
Refuse to auto-scuttle where it doesn't pay
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 13 Sep 2008 19:57:36 +0000 (15:57 -0400)
committerMarkus Armbruster <armbru@pond.sub.org>
Mon, 15 Sep 2008 22:59:26 +0000 (18:59 -0400)
When called from the scuttle command, scuttle_tradeship() asks for
confirmation when scuttling doesn't pay.  When called from the autonav
code, it can't ask.  Change it to fail then, and use that in
nav_ship() to avoid scuttle where it doesn't pay.  Also simplify some.

src/lib/commands/scut.c
src/lib/update/nav_ship.c

index 0446ed7f526e02d4160a36908cf4c67f080f85a6..9454f3e28edc44133a7641633ccde903e8a79b9f 100644 (file)
@@ -169,13 +169,8 @@ scuttle_tradeship(struct shpstr *sp, int interactive)
        dist = mapdist(sp->shp_x, sp->shp_y,
                       sp->shp_orig_x, sp->shp_orig_y);
        /* Don't disclose distance to to pirates */
-       if (sp->shp_own == sp->shp_orig_own) {
-           if (interactive)
-               pr("%s has gone %d sects\n", prship(sp), dist);
-           else
-               wu(0, sp->shp_own, "%s has gone %d sects\n",
-                  prship(sp), dist);
-       }
+       if (sp->shp_own == sp->shp_orig_own)
+           mpr(sp->shp_own, "%s has gone %d sects\n", prship(sp), dist);
        if (dist < trade_1_dist)
            cash = 0;
        else if (dist < trade_2_dist)
@@ -193,20 +188,23 @@ scuttle_tradeship(struct shpstr *sp, int interactive)
        }
     }
 
-    if (!interactive && cash) {
+    if (!cash && (dist < 0 || sp->shp_own == sp->shp_orig_own)) {
+       if (interactive) {
+           pr("You won't get any money if you scuttle in %s!",
+              xyas(sp->shp_x, sp->shp_y, player->cnum));
+           sprintf(buf, "Are you sure you want to scuttle %s? ", prship(sp));
+           return confirm(buf);
+       } else
+           return 0;
+    }
+
+    if (interactive) {
+       player->dolcost -= cash;
+    } else {
        natp = getnatp(sp->shp_own);
        natp->nat_money += cash;
        putnat(natp);
        wu(0, sp->shp_own, "You just made $%d.\n", (int)cash);
-    } else if (!cash && !interactive) {
-       wu(0, sp->shp_own, "Unfortunately, you make $0 on this trade.\n");
-    } else if (cash && interactive) {
-       player->dolcost -= cash;
-    } else if (interactive && (dist < 0 || sp->shp_own == sp->shp_orig_own)) {
-       pr("You won't get any money if you scuttle in %s!",
-          xyas(sp->shp_x, sp->shp_y, player->cnum));
-       sprintf(buf, "Are you sure you want to scuttle %s? ", prship(sp));
-       return confirm(buf);
     }
 
     if (ally_cash) {
index e1fe2b0b25f1b9ad3c3998c2739c716e021929a6..f49c2643e9fb6699e7d6feb687a2e99ffa859c54 100644 (file)
@@ -53,23 +53,19 @@ scuttle_it(struct shpstr *sp)
           sp->shp_x, sp->shp_y, sp->shp_uid);
        return;
     }
-    if (sectp->sct_type != SCT_HARBR || sectp->sct_effic < 2) {
-       wu(0, sp->shp_own,
-          "%s is not in a harbor at least 2%% eff!  Not scuttling.\n",
-          prship(sp));
-       return;
-    }
     if (opt_TRADESHIPS) {
        if (!(mchr[(int)sp->shp_type].m_flags & M_TRADE)) {
            wu(0, sp->shp_own, "You can only autoscuttle trade ships!\n");
            return;
        }
     }
+    if (!scuttle_tradeship(sp, 0)) {
+       wu(0, sp->shp_own,
+          "%s doesn't pay here!  Not scuttled.\n", prship(sp));
+       return;
+    }
     wu(0, sp->shp_own, "Scuttling %s in sector %s\n",
        prship(sp), xyas(sp->shp_x, sp->shp_y, sp->shp_own));
-    if (opt_TRADESHIPS) {
-       scuttle_tradeship(sp, 0);
-    }
     scuttle_ship(sp);
 }