diff --git a/include/prototypes.h b/include/prototypes.h index ca38d2f2..c11e13e6 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -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 index 00000000..e6f1828b --- /dev/null +++ b/info/stockpile.t @@ -0,0 +1,43 @@ +.TH Command STOCKPILE +.NA stockpile "Designate members of a \*Qstockpile\*U" +.LV Expert +.SY "stockpile " +The stockpile command is used to specify the stockpile groupings +of your nukes. +.s1 +.EX stockpile +In the syntax 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, , +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 index 00000000..0e2835c8 --- /dev/null +++ b/src/lib/commands/stoc.c @@ -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 . + * + * --- + * + * 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 + +#include +#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; +} diff --git a/src/lib/player/empmod.c b/src/lib/player/empmod.c index f37d3e0e..7120819d 100644 --- a/src/lib/player/empmod.c +++ b/src/lib/player/empmod.c @@ -244,6 +244,7 @@ struct cmndstr player_coms[] = { {"sstat ", 0, sstat, 0, NORM}, {"start ", 1, start, C_MOD, NORM}, {"starvation [|l |s ]", 0, starve, 0, NORM}, + {"stockpile ", 0, stoc, C_MOD, NORM}, {"stop ", 1, stop, C_MOD, NORM}, {"strength ", 1, stre, C_MOD, NORM}, {"supply ", 1, supp, C_MOD, NORM + CAP},