/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2005, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Copyright (C) 1986-2010, Dave Pare, Jeff Bailey, Thomas Ruschak,
* Ken Stevens, Steve McClure
*
* This program is free software; you can redistribute it and/or modify
*
* ---
*
- * See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
- * related information and legal notices. It is expected that any future
- * projects/authors will amend these files as needed.
+ * See files README, COPYING and CREDITS in the root of the source
+ * tree for related information and legal notices. It is expected
+ * that future projects/authors will amend these files as needed.
*
* ---
*
* conv.c: Convert conquered populace into uw's
- *
+ *
* Known contributors to this file:
* Dave Pare, 1986
*/
* format: convert <SECTS> <NUMBER PER SECTOR>
*/
-#include "misc.h"
-#include "player.h"
-#include "sect.h"
-#include "nat.h"
-#include "xy.h"
-#include "nsc.h"
-#include "file.h"
-#include "land.h"
-#include "commands.h"
+#include <config.h>
-static long do_conv(struct nstr_sect nstr, int uwtoconvert, int for_real);
+#include "commands.h"
+#include "land.h"
int
conv(void)
{
struct natstr *natp;
- long cash;
- long cost;
+ struct sctstr sect;
struct nstr_sect nstr;
- int uwtoconvert;
+ int uwtoconvert, newuw, totaluw, uw;
+ int maxpop, civ, mil, adj_mob, mob;
+ double security_extra = 1.0;
+ struct lndstr land;
+ struct nstr_item ni;
- natp = getnatp(player->cnum);
- cash = natp->nat_money;
if (!snxtsct(&nstr, player->argp[1]))
return RET_SYN;
uwtoconvert = onearg(player->argp[2], "Number to convert: ");
if (uwtoconvert < 0)
return RET_SYN;
- cost = do_conv(nstr, uwtoconvert, 0);
- if (chkmoney(cost, cash, player->argp[3]))
- return RET_SYN;
- return (int)do_conv(nstr, uwtoconvert, 1);
-}
-
-static long
-do_conv(struct nstr_sect nstr, int uwtoconvert, int for_real)
-{
- struct natstr *natp;
- struct sctstr sect;
- int newuw, totaluw, uw;
- int maxpop, civ, mil, adj_mob, mob;
- double security_extra = 1.0;
- struct lndstr land;
- struct nstr_item ni;
- long cost = 0;
totaluw = 0;
while (nxtsct(&nstr, §)) {
continue;
if (sect.sct_oldown == player->cnum)
continue;
- natp = getnatp(sect.sct_own);\r
+ natp = getnatp(sect.sct_own);
maxpop = max_pop(natp->nat_level[NAT_RLEV], §);
civ = sect.sct_item[I_CIVIL];
mil = sect.sct_item[I_MILIT];
/*
* Military units count according to the number of
- * mil in them. (i.e. attack/defense modified don't
+ * mil in them. (i.e. attack/defense modifier don't
* count.
*/
snxtitem_xy(&ni, EF_LAND, sect.sct_x, sect.sct_y);
while (nxtitem(&ni, &land)) {
- mil += lnd_getmil(&land);
+ mil += land.lnd_item[I_MILIT];
/* Anti-terrorist units count double */
if (lchr[(int)land.lnd_type].l_flags & L_SECURITY) {
*/
security_extra += .1;
land.lnd_mobil -= 10;
- if (for_real)
- putland(land.lnd_uid, &land);
- mil += lnd_getmil(&land);
+ mil += land.lnd_item[I_MILIT];
}
}
/*
newuw = adj_mob;
if (newuw <= 0)
continue;
- if (!for_real) {
- cost += newuw * 1.5;
- continue;
+ if (player->dolcost + newuw * 1.5 > natp->nat_money) {
+ pr("You can't afford to convert %d civilians in %s!\n",
+ newuw, xyas(sect.sct_x, sect.sct_y, player->cnum));
+ break;
}
player->btused += (newuw - 1) / 100 + 1;
player->dolcost += newuw * 1.5;
mob = roundavg(mob * 0.2);
if (mob > sect.sct_mobil)
mob = sect.sct_mobil;
- sect.sct_mobil -= (u_char)mob;
+ sect.sct_mobil -= mob;
pr("%3d conquered civilians converted in %s (%d)\n",
newuw, xyas(sect.sct_x, sect.sct_y, player->cnum), uw + newuw);
if (civ == 0) {
putsect(§);
totaluw += newuw;
}
- if (!for_real)
- return cost;
pr("Total civilians converted: %d\n", totaluw);
pr("Paperwork at conversion places ... %d\n", player->btused);
return RET_OK;