From 3615cfc8ac8b93c5c7648519e5b0be3a41308bd2 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 3 Aug 2008 16:54:14 -0400 Subject: [PATCH] Don't permit work command to spend more money than available Stop work() when there's not enough money left for the current engineer. --- src/lib/commands/work.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/lib/commands/work.c b/src/lib/commands/work.c index f2e5268a3..8ab378064 100644 --- a/src/lib/commands/work.c +++ b/src/lib/commands/work.c @@ -49,6 +49,8 @@ work(void) int work_amt, eff_amt, w; char *p; char buf[1024]; + double cost; + struct natstr *natp = getnatp(player->cnum); if (!snxtitem(&ni, EF_LAND, player->argp[1], NULL)) return RET_SYN; @@ -83,11 +85,18 @@ work(void) prland(&land)); continue; } - nunits++; - eff_amt = ((6 * buildeff(§, w, &player->dolcost)) / - (land.lnd_effic / 100.0)); + cost = 0.0; + w = buildeff(§, w, &cost); + if (player->dolcost + cost > natp->nat_money) { + pr("You can't afford to work that much in %s!\n", + xyas(land.lnd_x, land.lnd_y, player->cnum)); + break; + } + player->dolcost += cost; + eff_amt = ((6 * w) / (land.lnd_effic / 100.0)); land.lnd_mission = 0; land.lnd_mobil -= eff_amt; + nunits++; pr("%s %s efficiency at %s to %d\n", prland(&land), sect.sct_type == sect.sct_newtype ? "raised" : "lowered", -- 2.43.0