/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2000, Dave Pare, Jeff Bailey, Thomas Ruschak,
- * Ken Stevens, Steve McClure
+ * Copyright (C) 1986-2011, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Ken Stevens, Steve McClure, Markus Armbruster
*
- * This program is free software; you can redistribute it and/or modify
+ * Empire is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* ---
*
- * 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.
*
* ---
*
* coun.c: Do a country roster
- *
+ *
* Known contributors to this file:
- *
+ *
*/
-#include "misc.h"
-#include "player.h"
-#include "var.h"
-#include "sect.h"
-#include "nat.h"
-#include "xy.h"
-#include "nsc.h"
-#include "file.h"
-#include "deity.h"
-#include <fcntl.h>
-#include <ctype.h>
+#include <config.h>
+
#include "commands.h"
+#include "optlist.h"
-static void coun_header(void);
-static void coun_list(natid cn, struct natstr *natp);
+static void coun_list(struct natstr *natp);
int
coun(void)
{
struct nstr_item ni;
struct natstr nat;
- int first;
- pr("The 'country' command is temporarily out of order.\n");
- pr("Please use the 'players' command instead.\n");
- if (!snxtitem(&ni, EF_NATION, player->argp[1]))
+ if (!snxtitem(&ni, EF_NATION, player->argp[1], NULL))
return RET_SYN;
- first = 1;
- while (nxtitem(&ni, (s_char *)&nat)) {
- if ((nat.nat_stat & STAT_INUSE) == 0)
- continue;
- if (((nat.nat_stat & GOD) != GOD) && !player->god)
+ prdate();
+ pr(" # last access %sstatus country name\n",
+ player->god ? "BTU " : "");
+ while (nxtitem(&ni, &nat)) {
+ if (nat.nat_stat == STAT_UNUSED)
continue;
- if (first) {
- coun_header();
- first = 0;
- }
- coun_list((natid)ni.cur, &nat);
+ coun_list(&nat);
}
return RET_OK;
}
static void
-coun_header(void)
+coun_list(struct natstr *natp)
{
- prdate();
- pr(" # last access time\tstatus\t\t country name\n");
-}
+ char *status;
+ natid cn = natp->nat_cnum;
-static void
-coun_list(natid cn, struct natstr *natp)
-{
- s_char *status;
- struct sctstr sect;
+ pr("%3d ", cn);
- if (natp->nat_connected)
- pr("%3d %-16.16s [%d]", cn, " Now logged on", natp->nat_btu);
- else
- pr("%3d %-16.16s [%d]", cn, ctime(&natp->nat_last_login),
- natp->nat_btu);
+ if (getplayer(cn)
+ && (player->god
+ || natp->nat_stat == STAT_GOD
+ || relations_with(cn, player->cnum) == ALLIED))
+ pr(" Now logged on ");
+ else if (player->god) {
+ if (natp->nat_last_login == 0)
+ pr(" Never logged on ");
+ else {
+ pr("%.16s - ", ctime(&natp->nat_last_login));
+ pr("%-16.16s",
+ natp->nat_last_login <= natp->nat_last_logout
+ ? ctime(&natp->nat_last_logout) : "?");
+ }
+ } else
+ pr(" Unknown ");
+
+ if (player->god)
+ pr(" %4d", natp->nat_btu);
- if (natp->nat_stat & STAT_GOD)
+ if (natp->nat_stat == STAT_GOD)
status = "DEITY";
- else if (natp->nat_stat & STAT_NEW)
+ else if (natp->nat_stat == STAT_NEW)
status = "New";
- else if (natp->nat_stat & STAT_SANCT)
+ else if (natp->nat_stat == STAT_SANCT)
status = "Sanctuary";
- else if (natp->nat_stat & STAT_NORM) {
- getsect(natp->nat_xcap, natp->nat_ycap, §);
- if (sect.sct_own != cn ||
- (sect.sct_type != SCT_CAPIT && sect.sct_type != SCT_MOUNT))
- status = "In flux";
- else if (natp->nat_money < 0)
- status = "Broke";
- else
- status = "Active";
+ else if (natp->nat_stat == STAT_ACTIVE) {
+ status = "Active";
+ if (!opt_HIDDEN || player->god) {
+ if (influx(natp))
+ status = "In flux";
+ else if (natp->nat_money < 0)
+ status = "Broke";
+ }
} else {
status = "Visitor";
}
- pr("\t%-9.9s\t %s\n", status, natp->nat_cnam);
+ pr(" %-9.9s %s\n", status, natp->nat_cnam);
}