X-Git-Url: http://git.pond.sub.org/?p=empserver;a=blobdiff_plain;f=src%2Flib%2Fcommands%2Fconv.c;h=ddb265d29e0eadbcf33cd9562e74474bfcaf3b82;hp=f4ccdedf28c1573e6019f4a84add706d63b69cdf;hb=9b7adfbe;hpb=5f263a7753dc728809ff85c993af975f6c76e61e diff --git a/src/lib/commands/conv.c b/src/lib/commands/conv.c index f4ccdedf2..ddb265d29 100644 --- a/src/lib/commands/conv.c +++ b/src/lib/commands/conv.c @@ -51,137 +51,136 @@ long do_conv(struct nstr_sect nstr, int uwtoconvert, int for_real); int conv(void) { - struct natstr *natp; - long cash; - long cost; - struct nstr_sect nstr; - int uwtoconvert; + struct natstr *natp; + long cash; + long cost; + struct nstr_sect nstr; + int uwtoconvert; - 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); + 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); } long do_conv(struct nstr_sect nstr, int uwtoconvert, int for_real) { - struct sctstr sect; - int newuw, totaluw, uw; - int civ, mil, adj_mob, mob; - double security_extra=1.0; - struct lndstr land; - struct nstr_item ni; - long cost = 0; + struct sctstr sect; + int newuw, totaluw, uw; + int 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, §)) { - if (!player->owner) - continue; - if (sect.sct_oldown == player->cnum) - continue; - civ = getvar(V_CIVIL, (s_char *)§, EF_SECTOR); - if (civ == 0) - continue; - mil = getvar(V_MILIT, (s_char *)§, EF_SECTOR); + totaluw = 0; + while (nxtsct(&nstr, §)) { + if (!player->owner) + continue; + if (sect.sct_oldown == player->cnum) + continue; + civ = getvar(V_CIVIL, (s_char *)§, EF_SECTOR); + if (civ == 0) + continue; + mil = getvar(V_MILIT, (s_char *)§, EF_SECTOR); - /* - * Military units count according to the number of - * mil in them. (i.e. attack/defense modified don't - * count. - */ - snxtitem_xy(&ni, EF_LAND, sect.sct_x, sect.sct_y); - while (nxtitem(&ni, (s_char *)&land)){ - mil += lnd_getmil(&land); + /* + * Military units count according to the number of + * mil in them. (i.e. attack/defense modified don't + * count. + */ + snxtitem_xy(&ni, EF_LAND, sect.sct_x, sect.sct_y); + while (nxtitem(&ni, (s_char *)&land)) { + mil += lnd_getmil(&land); /* mil += (lnd_getmil(&land) * ((double)land.lnd_effic/100.0));*/ - /* Anti-terrorist units count double */ - if (lchr[(int)land.lnd_type].l_flags & L_SECURITY){ + /* Anti-terrorist units count double */ + if (lchr[(int)land.lnd_type].l_flags & L_SECURITY) { - /* - * They also increase the efficiency of - * the conversion process by 10% each. - * (but they use 10 mobility doing it) - */ - security_extra += .1; - land.lnd_mobil -= 10; - if (for_real) - putland(land.lnd_uid,&land); - mil += lnd_getmil(&land); -/* mil += (lchr[land.lnd_type].l_mil * - ((double)land.lnd_effic/100.0));*/ - } - } - /* - * Must have military control to convert captured civs. - */ - if (mil * 10 < civ) - continue; - newuw = civ; - if (newuw > uwtoconvert) - newuw = uwtoconvert; - uw = getvar(V_UW, (s_char *)§, EF_SECTOR); - if (uw > 999) - continue; - if (newuw > 999 - uw) - newuw = 999 - uw; - if (newuw == 0) - continue; /* - * So entire civilian populations don't disappear immediately - * into re-education camps, charge a healthy mobility cost for - * conversions. + * They also increase the efficiency of + * the conversion process by 10% each. + * (but they use 10 mobility doing it) */ - mob = sect.sct_mobil * 5; + security_extra += .1; + land.lnd_mobil -= 10; + if (for_real) + putland(land.lnd_uid, &land); + mil += lnd_getmil(&land); +/* mil += (lchr[land.lnd_type].l_mil * + ((double)land.lnd_effic/100.0));*/ + } + } + /* + * Must have military control to convert captured civs. + */ + if (mil * 10 < civ) + continue; + newuw = civ; + if (newuw > uwtoconvert) + newuw = uwtoconvert; + uw = getvar(V_UW, (s_char *)§, EF_SECTOR); + if (uw > 999) + continue; + if (newuw > 999 - uw) + newuw = 999 - uw; + if (newuw == 0) + continue; + /* + * So entire civilian populations don't disappear immediately + * into re-education camps, charge a healthy mobility cost for + * conversions. + */ + mob = sect.sct_mobil * 5; - /* security troops make conversion more effective */ - adj_mob = ldround(((double)mob*security_extra),1); + /* security troops make conversion more effective */ + adj_mob = ldround(((double)mob * security_extra), 1); - if (adj_mob < newuw) - newuw = adj_mob; - if (newuw <= 0) - continue; - if (!for_real) { - cost += newuw * 1.5; - continue; - } - player->btused += (newuw - 1) / 100 + 1; - player->dolcost += newuw * 1.5; - if (newuw < mob) - mob = newuw; - if (putvar(V_UW, newuw + uw, (s_char *)§, EF_SECTOR) == 0) { - pr("No room for new uw in %s\n", - xyas(sect.sct_x, sect.sct_y, player->cnum)); - continue; - } - civ -= newuw; - putvar(V_CIVIL, civ, (s_char *)§, EF_SECTOR); - mob = roundavg(mob * 0.2); - if (mob > sect.sct_mobil) - mob = sect.sct_mobil; - sect.sct_mobil -= (u_char)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) { - sect.sct_oldown = sect.sct_own; - pr("%s is now completely yours.\n", - xyas(sect.sct_x, sect.sct_y, player->cnum)); - } - putsect(§); - totaluw += newuw; + if (adj_mob < newuw) + newuw = adj_mob; + if (newuw <= 0) + continue; + if (!for_real) { + cost += newuw * 1.5; + continue; + } + player->btused += (newuw - 1) / 100 + 1; + player->dolcost += newuw * 1.5; + if (newuw < mob) + mob = newuw; + if (putvar(V_UW, newuw + uw, (s_char *)§, EF_SECTOR) == 0) { + pr("No room for new uw in %s\n", + xyas(sect.sct_x, sect.sct_y, player->cnum)); + continue; + } + civ -= newuw; + putvar(V_CIVIL, civ, (s_char *)§, EF_SECTOR); + mob = roundavg(mob * 0.2); + if (mob > sect.sct_mobil) + mob = sect.sct_mobil; + sect.sct_mobil -= (u_char)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) { + sect.sct_oldown = sect.sct_own; + pr("%s is now completely yours.\n", + xyas(sect.sct_x, sect.sct_y, player->cnum)); } - if (!for_real) - return cost; - pr("Total civilians converted: %d\n", totaluw); - pr("Paperwork at conversion places ... %d\n", player->btused); - return RET_OK; + 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; }