stockpile: New command, counterpart of fleetadd, wingadd, army

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
Markus Armbruster 2013-12-29 19:55:44 +01:00
parent 76b5de8343
commit 5dd2cbd423
4 changed files with 118 additions and 0 deletions

View 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);

43
info/stockpile.t Normal file
View file

@ -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"

73
src/lib/commands/stoc.c Normal file
View file

@ -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;
}

View 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},