]> git.pond.sub.org Git - empserver/blobdiff - src/lib/commands/add.c
commands: Rename the command functions
[empserver] / src / lib / commands / add.c
index 6bb4fdc6bf18576e4a15709e4a92ddd0d1ab6c6e..754986f9f34f3491328970a56e93b8c638513db0 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2011, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *  Copyright (C) 1986-2021, Dave Pare, Jeff Bailey, Thomas Ruschak,
  *                Ken Stevens, Steve McClure, Markus Armbruster
  *
  *  Empire is free software: you can redistribute it and/or modify
@@ -28,7 +28,7 @@
  *
  *  Known contributors to this file:
  *     Steve McClure, 2000
- *     Markus Armbruster, 2004-2011
+ *     Markus Armbruster, 2004-2016
  */
 
 #include <config.h>
 #include "commands.h"
 
 int
-add(void)
+c_add(void)
 {
     struct natstr *natp;
     int i;
     char cntryname[sizeof(natp->nat_cnam)];
     char pname[sizeof(natp->nat_pnam)];
-    natid coun;
     natid freecn;
     char prompt[128];
     char buf[1024];
@@ -61,20 +60,19 @@ add(void)
     if (!p || !*p)
        return RET_SYN;
     i = atoi(p);
-    if (i >= MAXNOC) {
-       pr("Max # countries is %d\n", MAXNOC);
+    if (i == 0) {
+       pr("Not allowed to add country #0\n");
        return RET_FAIL;
     }
-    coun = i;
-    if (coun == 0) {
-       pr("Not allowed to add country #0\n");
+    natp = getnatp(i);
+    if (!natp) {
+       pr("Can't add country #%d\n", i);
        return RET_FAIL;
     }
-    natp = getnatp(coun);
     p = getstarg(player->argp[2], "Country name? ", buf);
     if (!p)
        return RET_SYN;
-    if (!check_nat_name(p, coun))
+    if (!check_nat_name(p, natp->nat_cnum))
        return RET_FAIL;
     strcpy(cntryname, p);
     p = getstarg(player->argp[3], "Representative? ", buf);
@@ -93,10 +91,6 @@ add(void)
     case 'v':
        stat = STAT_VIS;
        break;
-    case 'n':
-       pr("Argument 'new' is deprecated and will go away in a future release.\n"
-          "Use 'player' instead.\n");
-       /* fall through */
     case 'p':
        stat = STAT_NEW;
        break;
@@ -110,14 +104,20 @@ add(void)
        pr("Illegal status\n");
        return RET_SYN;
     }
-    strcpy(natp->nat_cnam, cntryname);
-    strcpy(natp->nat_pnam, pname);
-    if (stat == STAT_NEW || stat == STAT_VIS)
-       nat_reset(natp, stat, 0, 0);
-    else {
-       natp->nat_stat = stat;
-       pr("No special initializations done...\n");
+    if (stat == STAT_UNUSED
+       ? natp->nat_stat >= STAT_SANCT : natp->nat_stat != STAT_UNUSED) {
+       pr("Country %s status is %s.\n"
+          "%s it in this state is normally a bad idea.",
+          prnat(natp), symbol_by_value(natp->nat_stat, nation_status),
+          stat == STAT_UNUSED ? "Deleting" : "Replacing");
+       if (!askyn("Are you sure? "))
+           return RET_FAIL;
     }
-    putnat(natp);
-    return 0;
+    if (getplayer(natp->nat_cnum)) {
+       pr("%s is logged in!\n", prnat(natp));
+       return RET_FAIL;
+    }
+
+    nat_reset(natp->nat_cnum, cntryname, pname, stat);
+    return RET_OK;
 }