]> git.pond.sub.org Git - empserver/blob - src/lib/commands/show.c
a728c7aa799864d186f1dde4130d2da2eea0a453
[empserver] / src / lib / commands / show.c
1 /*
2  *  Empire - A multi-player, client/server Internet based war game.
3  *  Copyright (C) 1986-2020, Dave Pare, Jeff Bailey, Thomas Ruschak,
4  *                Ken Stevens, Steve McClure, Markus Armbruster
5  *
6  *  Empire is free software: you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation, either version 3 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  *
19  *  ---
20  *
21  *  See files README, COPYING and CREDITS in the root of the source
22  *  tree for related information and legal notices.  It is expected
23  *  that future projects/authors will amend these files as needed.
24  *
25  *  ---
26  *
27  *  show.c: Give info on empire objects, planes, boats, nukes, etc.
28  *
29  *  Known contributors to this file:
30  *     Julian Onions, 1988
31  *     Steve McClure, 1997
32  */
33
34 #include <config.h>
35
36 #include "commands.h"
37 #include "nuke.h"
38 #include "optlist.h"
39
40 int
41 show(void)
42 {
43     char *p;
44     void (*cfunc)(int);
45     void (*sfunc)(int);
46     void (*bfunc)(int);
47     struct natstr *natp;
48     int tlev;
49     char buf[1024];
50     int rlev;
51
52 again:
53     p = getstarg(player->argp[1], "Show what ('?' to list options)? ", buf);
54     if (!p || !*p)
55         return RET_SYN;
56     if (*p == '?') {
57         pr("bridge, item, land, news, nuke, plane, sect, ship, product, tower, updates\n");
58         goto again;
59     }
60
61     natp = getnatp(player->cnum);
62     rlev = (int)(1.25 * natp->nat_level[NAT_RLEV]);
63
64     if (!player->argp[3]) {
65         tlev = (int)(1.25 * natp->nat_level[NAT_TLEV]);
66         if (player->god)
67             tlev = 1000;
68     } else {
69         tlev = (int)atoi(player->argp[3]);
70         if (tlev > (int)(1.25 * natp->nat_level[NAT_TLEV]) && !player->god)
71             tlev = (int)(1.25 * natp->nat_level[NAT_TLEV]);
72     }
73     if (player->god)
74         rlev = 1000;
75     switch (*p) {
76     case 'b':
77         show_bridge(99999);
78         return RET_OK;
79     case 't':
80         show_tower(99999);
81         return RET_OK;
82     case 'i':
83         show_item(99999);
84         return RET_OK;
85     case 'n':
86         if (*(p + 1) == 'e') {
87             show_news(99999);
88             return RET_OK;
89         }
90         if (drnuke_const > MIN_DRNUKE_CONST)
91             tlev = ((rlev / drnuke_const) > tlev ? tlev :
92                     (rlev / drnuke_const));
93         bfunc = show_nuke_build;
94         cfunc = show_nuke_capab;
95         sfunc = show_nuke_stats;
96         break;
97     case 'l':
98         bfunc = show_land_build;
99         sfunc = show_land_stats;
100         cfunc = show_land_capab;
101         break;
102     case 'p':
103         if (p[1] == 'r') {
104             show_product(99999);
105             return RET_OK;
106         }
107         bfunc = show_plane_build;
108         sfunc = show_plane_stats;
109         cfunc = show_plane_capab;
110         break;
111     case 's':
112         if (*(p + 1) == 'e') {
113             bfunc = show_sect_build;
114             sfunc = show_sect_stats;
115             cfunc = show_sect_capab;
116         } else {
117             bfunc = show_ship_build;
118             sfunc = show_ship_stats;
119             cfunc = show_ship_capab;
120         }
121         break;
122     case 'u':
123         show_updates(player->argp[2] ? atoi(player->argp[2]) : 8);
124         return RET_OK;
125     default:
126         return RET_SYN;
127     }
128
129     p = getstarg(player->argp[2],
130                  "Build, stats, or capability data (b,s,c)? ", buf);
131     if (!p || !*p)
132         return RET_SYN;
133     pr("Printing for tech level '%d'\n", tlev);
134     if (*p == 'B' || *p == 'b')
135         bfunc(tlev);
136     else if (*p == 'C' || *p == 'c')
137         cfunc(tlev);
138     else if (*p == 'S' || *p == 's')
139         sfunc(tlev);
140     else
141         return RET_SYN;
142     return RET_OK;
143 }