]> git.pond.sub.org Git - empserver/blobdiff - src/lib/commands/nati.c
Update copyright notice.
[empserver] / src / lib / commands / nati.c
index f79eb059819836b28c6386ec8bfd603a6695e3f4..8ee170a552eadf9eb0fef276baed59f7168a833a 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2000, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *  Copyright (C) 1986-2007, Dave Pare, Jeff Bailey, Thomas Ruschak,
  *                           Ken Stevens, Steve McClure
  *
  *  This program is free software; you can redistribute it and/or modify
@@ -19,9 +19,9 @@
  *
  *  ---
  *
- *  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.
  *
  *  ---
  *
  *     
  */
 
-#include "misc.h"
-#include "player.h"
-#include "var.h"
-#include "nat.h"
-#include "sect.h"
-#include "file.h"
-#include "xy.h"
-#include "optlist.h"
+#include <config.h>
+
 #include "commands.h"
+#include "optlist.h"
 
 int
 nati(void)
 {
-       extern  int etu_per_update;
-       extern  double obrate, uwbrate;
-       struct  natstr *natp;
-       struct  sctstr sect;
-       float   hap;
-       int     mil;
-       int     civ;
-       int     poplimit, safepop, uwpop;
-       double pfac;
+    struct natstr *natp;
+    struct sctstr sect;
+    double hap;
+    int mil;
+    int civ;
+    int cnum;
+    int poplimit, safepop, uwpop;
+    double pfac;
 
-       if ((natp = getnatp(player->cnum)) == 0) {
-               pr("Bad country number %d\n", player->cnum);
-               return RET_SYN;
-       }
-       pr("\n(#%i) %s Nation Report\t", player->cnum, cname(player->cnum));
-       prdate();
-       pr("Nation status is %s", natstate(natp));
-       pr("     Bureaucratic Time Units: %d\n", natp->nat_btu);
-       if (natp->nat_stat & STAT_INUSE) {
-               getsect(natp->nat_xcap, natp->nat_ycap, &sect);
-               if (!player->owner || (sect.sct_type != SCT_CAPIT &&
-                   sect.sct_type != SCT_MOUNT &&
-                   sect.sct_type != SCT_SANCT))
-                       pr("No capital. (was at %s)\n",
-                               xyas(sect.sct_x, sect.sct_y, player->cnum));
-               else {
-                       civ = getvar(V_CIVIL, (s_char *)&sect, EF_SECTOR);
-                       mil = getvar(V_MILIT, (s_char *)&sect, EF_SECTOR);
-                       pr("%d%% eff %s at %s has %d civilian%s & %d military\n",
-                              sect.sct_effic,
-                              (sect.sct_type == SCT_CAPIT ? "capital" : "mountain capital"),
-                              xyas(sect.sct_x, sect.sct_y, player->cnum), civ,
-                              splur(civ), mil);
-               }
-       }
-       pr(" The treasury has $%.2f", (double) natp->nat_money);
-       pr("     Military reserves: %d\n", natp->nat_reserve);
-       pr("Education..........%6.2f       Happiness.......%6.2f\n",
-               (double) natp->nat_level[NAT_ELEV],
-               (double) natp->nat_level[NAT_HLEV]);
-       pr("Technology.........%6.2f       Research........%6.2f\n",
-               (double) natp->nat_level[NAT_TLEV],
-               (double) natp->nat_level[NAT_RLEV]);
-       pr("Technology factor :%6.2f%%", tfact(player->cnum, 100.));
+    if (player->argp[1]) {
+       if (!(natp = natargp(player->argp[1], NULL)))
+           return RET_SYN;
+    } else
+       natp = getnatp(player->cnum);
 
-       if (opt_NO_PLAGUE) 
-               pfac = 0.0;
-       else 
-               pfac = ((double) natp->nat_level[NAT_TLEV] + 100.) /
-                       ((double) natp->nat_level[NAT_RLEV] + 100.);
-       pr("     Plague factor : %6.2f%%\n", pfac);
-       pr("\n");
+    cnum = natp->nat_cnum;
+    if (!player->god && cnum != player->cnum) {
+       pr("Only deities can request a nation report for another country.\n");
+       return RET_FAIL;
+    }
 
-       poplimit = 999;
-       if (opt_RES_POP)
-               poplimit = max_pop(natp->nat_level[NAT_RLEV], 0);
-       pr("Max population : %d\n", poplimit);
+    pr("\n(#%i) %s Nation Report\t", cnum, cname(cnum));
+    prdate();
+    pr("Nation status is %s", natstate(natp));
+    pr("     Bureaucratic Time Units: %d\n", natp->nat_btu);
+    if (natp->nat_stat != STAT_UNUSED) {
+       getsect(natp->nat_xcap, natp->nat_ycap, &sect);
+       if (influx(natp))
+           pr("No capital (was at %s).\n",
+              xyas(sect.sct_x, sect.sct_y, cnum));
+       else {
+           civ = sect.sct_item[I_CIVIL];
+           mil = sect.sct_item[I_MILIT];
+           pr("%d%% eff %s at %s has %d civilian%s & %d military\n",
+              sect.sct_effic,
+              (sect.sct_type ==
+               SCT_CAPIT ? "capital" : "mountain capital"),
+              xyas(sect.sct_x, sect.sct_y, cnum), civ, splur(civ),
+              mil);
+       }
+    }
+    pr(" The treasury has $%.2f", (double)natp->nat_money);
+    pr("     Military reserves: %ld\n", natp->nat_reserve);
+    pr("Education..........%6.2f       Happiness.......%6.2f\n",
+       natp->nat_level[NAT_ELEV], natp->nat_level[NAT_HLEV]);
+    pr("Technology.........%6.2f       Research........%6.2f\n",
+       natp->nat_level[NAT_TLEV], natp->nat_level[NAT_RLEV]);
+    pr("Technology factor :%6.2f%%", tfact(cnum, 100.));
 
-       safepop = (int)((double)poplimit/(1.0 + obrate*(double)etu_per_update));
-       uwpop = (int)((double)poplimit/(1.0 + uwbrate*(double)etu_per_update));
-       safepop++;
-       if (((double)safepop*(1.0 + obrate*(double)etu_per_update)) > ((double)poplimit+0.0000001))
-               safepop--;
-       uwpop++;
-       if (((double)uwpop*(1.0 + uwbrate*(double)etu_per_update)) > ((double)poplimit+0.0000001))
-               uwpop--;
+    if (opt_NO_PLAGUE)
+       pfac = 0.0;
+    else
+       pfac = (natp->nat_level[NAT_TLEV] + 100.0) /
+           (natp->nat_level[NAT_RLEV] + 100.0);
+    pr("     Plague factor : %6.2f%%\n", pfac);
+    pr("\n");
 
-       pr("Max safe population for civs/uws: %d/%d\n",safepop,uwpop);
+    poplimit = max_population(natp->nat_level[NAT_RLEV], SCT_MINE, 0);
+    pr("Max population : %d\n", poplimit);
 
-       hap = ((natp->nat_level[NAT_TLEV]-40)/40.0 +
-                       natp->nat_level[NAT_ELEV]/3.0);
+    safepop = (int)(poplimit / (1.0 + obrate * (double)etu_per_update));
+    uwpop = (int)(poplimit / (1.0 + uwbrate * (double)etu_per_update));
+    pr("Max safe population for civs/uws: %d/%d\n", safepop, uwpop);
 
-       if (hap > 0.0)
-               pr("Happiness needed is %f\n",hap);
-       else
-               pr("No happiness needed\n");
+    hap = hap_req(natp);
+    if (hap > 0.0)
+       pr("Happiness needed is %.2f\n", hap);
+    else
+       pr("No happiness needed\n");
 
-       return RET_OK;
+    return RET_OK;
 }