]> git.pond.sub.org Git - empserver/commitdiff
stockpile: New command, counterpart of fleetadd, wingadd, army
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 29 Dec 2013 18:55:44 +0000 (19:55 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Thu, 2 Jan 2014 13:33:48 +0000 (14:33 +0100)
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
include/prototypes.h
info/stockpile.t [new file with mode: 0644]
src/lib/commands/stoc.c [new file with mode: 0644]
src/lib/player/empmod.c

index ca38d2f2d722ef386e4cc5e0336dbb19a7a6d242..c11e13e6ca305c9f170de20763e82e5d38025267 100644 (file)
@@ -223,6 +223,7 @@ int spy(void);
 int sstat(void);
 int start(void);
 int starve(void);
+int stoc(void);
 int stop(void);
 int stre(void);
 int supp(void);
diff --git a/info/stockpile.t b/info/stockpile.t
new file mode 100644 (file)
index 0000000..e6f1828
--- /dev/null
@@ -0,0 +1,43 @@
+.TH Command STOCKPILE
+.NA stockpile "Designate members of a \*Qstockpile\*U"
+.LV Expert
+.SY "stockpile <STOCKPILE> <NUKE/STOCKPILE>"
+The stockpile command is used to specify the stockpile groupings
+of your nukes.
+.s1
+.EX stockpile <STOCKPILE> <NUKE/STOCKPILE>
+In the syntax <STOCKPILE> is the alphabetic character to be used as the
+stockpile designation.
+This character can be chosen from the set of
+upper or lower case a-z and tilde (~).
+The pseudo-stockpile specification tilde
+specifies all nukes not currently in any stockpile.
+.s1
+The specification of nukes, <NUKE/STOCKPILE>,
+can have one of several syntaxes:
+.NF
+example     meaning
+-------     -------
+23          nuke 23
+2/14/23     nukes 2, 14, and 23
+c           all nukes currently in stockpile `c'
+~           all nukes currently in the \*Qnull\*U stockpile
+2,3         all nukes in sector 2,3
+-1:3,0:2    all nukes in the square area bounded by -1,0 & 3,2
+.FI
+All stockpiles, (with the exception of the `~' stockpile),
+are limited to some maximum size
+and you will be informed how many nukes can be added
+when this command is run.
+.s1
+Having nukes organized into stockpiles can be very helpful in
+loading, moving, etc.,
+in that fewer commands are required to perform these commands
+on groups of nukes if they can be specified by stockpile number.
+.s1
+Note that you can remove nukes from a stockpile by adding them to
+the `~' stockpile.  e.g.
+.EX stockpile ~ A
+This command would purge all nukes from stockpile `A'.
+.s1
+.SA "nuke, transport, Nukes"
diff --git a/src/lib/commands/stoc.c b/src/lib/commands/stoc.c
new file mode 100644 (file)
index 0000000..0e2835c
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ *  Empire - A multi-player, client/server Internet based war game.
+ *  Copyright (C) 1986-2013, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *                Ken Stevens, Steve McClure, Markus Armbruster
+ *
+ *  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 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  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, see <http://www.gnu.org/licenses/>.
+ *
+ *  ---
+ *
+ *  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.
+ *
+ *  ---
+ *
+ *  stoc.c: Add nukes to a stockpile
+ *
+ *  Known contributors to this file:
+ *     Markus Armbruster, 2013
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include "commands.h"
+#include "nuke.h"
+
+int
+stoc(void)
+{
+    struct nukstr nuke;
+    int count;
+    char *cp;
+    char c;
+    struct nstr_item nstr;
+    char buf[1024];
+
+    cp = getstarg(player->argp[1], "stockpile? ", buf);
+    if (!cp)
+       return RET_SYN;
+    c = *cp;
+    if (!isalpha(c) && c != '~') {
+       pr("Specify stockpile, (1 alpha char or '~')\n");
+       return RET_SYN;
+    }
+    if (c == '~')
+       c = 0;
+    if (!snxtitem(&nstr, EF_NUKE, player->argp[2], NULL))
+       return RET_SYN;
+    count = 0;
+    while (nxtitem(&nstr, &nuke)) {
+       if (!player->owner)
+           continue;
+       if (nuke.nuk_stockpile == c)
+           continue;
+       nuke.nuk_stockpile = c;
+       putnuke(nuke.nuk_uid, &nuke);
+       count++;
+    }
+    pr("%d nuke%s added to stockpile `%1.1s'\n", count, splur(count), &c);
+    return RET_OK;
+}
index f37d3e0ee3daeb8029a9f6e57fbbedc48d35d424..7120819d469b909b5ddfabaa8faa766c86a7249a 100644 (file)
@@ -244,6 +244,7 @@ struct cmndstr player_coms[] = {
     {"sstat <SHIPS>", 0, sstat, 0, NORM},
     {"start <TYPE> <SECTS|PLANES|SHIPS|UNITS|NUKES>", 1, start, C_MOD, NORM},
     {"starvation [<SECTS>|l <UNITS>|s <SHIPS>]", 0, starve, 0, NORM},
+    {"stockpile <STOCKPILE> <NUKES>", 0, stoc, C_MOD, NORM},
     {"stop <TYPE> <SECTS|PLANES|SHIPS|UNITS|NUKES>", 1, stop, C_MOD, NORM},
     {"strength <SECTS>", 1, stre, C_MOD, NORM},
     {"supply <LAND UNITS>", 1, supp, C_MOD, NORM + CAP},