]> git.pond.sub.org Git - empserver/blob - src/lib/commands/ldump.c
Import of Empire 4.2.12
[empserver] / src / lib / commands / ldump.c
1 /*
2  *  Empire - A multi-player, client/server Internet based war game.
3  *  Copyright (C) 1986-2000, Dave Pare, Jeff Bailey, Thomas Ruschak,
4  *                           Ken Stevens, Steve McClure
5  *
6  *  This program 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 2 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, write to the Free Software
18  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  *  ---
21  *
22  *  See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
23  *  related information and legal notices. It is expected that any future
24  *  projects/authors will amend these files as needed.
25  *
26  *  ---
27  *
28  *  ldump.c: Dump land unit information
29  * 
30  *  Known contributors to this file:
31  *     John Yockey, 1997
32  *     Steve McClure, 1998
33  */
34
35 #include "misc.h"
36 #include "player.h"
37 #include "xy.h"
38 #include "sect.h"
39 #include "land.h"
40 #include "nat.h"
41 #include "nsc.h"
42 #include "deity.h"
43 #include "file.h"
44 #include "optlist.h"
45 #include "var.h"
46 #include "commands.h"
47
48 int
49 ldump(void)
50 {
51         int     nunits;
52         int     field[128];
53         struct  nstr_item ni;
54         struct  lndstr land;
55         int     vec[I_MAX+1];
56         s_char  *mission_short_name();
57         int     n,i;
58         struct  natstr *np;
59         time_t  now;
60
61         if (!snxtitem(&ni, EF_LAND, player->argp[1]))
62                 return RET_SYN;
63         prdate();
64         nunits = 0;
65
66         if (!player->argp[2]) {
67                 for (n = 1; n <= 39; n++) field[n-1] = n;
68                 field[n-1] = 0;
69         } else {
70                 n = 2;
71                 i = 0;
72                 while (player->argp[n]) {
73                         if (!strcmp("type",player->argp[n])) {
74                                 field[i++] = 1;
75                         } else if (!strcmp("x",player->argp[n])) {
76                                 field[i++] = 2;
77                         } else if (!strcmp("y",player->argp[n])) {
78                                 field[i++] = 3;
79                         } else if (!strcmp("army",player->argp[n])) {
80                                 field[i++] = 4;
81                         } else if (!strcmp("eff",player->argp[n])) {
82                                 field[i++] = 5;
83                         } else if (!strcmp("mil",player->argp[n])) {
84                                 field[i++] = 6;
85                         } else if (!strcmp("fort",player->argp[n])) {
86                                 field[i++] = 7;
87                         } else if (!strcmp("mob",player->argp[n])) {
88                                 field[i++] = 8;
89                         } else if (!strcmp("food",player->argp[n])) {
90                                 field[i++] = 9;
91                         } else if (!strcmp("fuel",player->argp[n])) {
92                                 field[i++] = 10;
93                         } else if (!strcmp("tech",player->argp[n])) {
94                                 field[i++] = 11;
95                         } else if (!strcmp("retr",player->argp[n])) {
96                                 field[i++] = 12;
97                         } else if (!strcmp("react",player->argp[n])) {
98                                 field[i++] = 13;
99                         } else if (!strcmp("xl",player->argp[n])) {
100                                 field[i++] = 14;
101                         } else if (!strcmp("nland",player->argp[n])) {
102                                 field[i++] = 15;
103                         } else if (!strcmp("land",player->argp[n])) {
104                                 field[i++] = 16;
105                         } else if (!strcmp("ship",player->argp[n])) {
106                                 field[i++] = 17;
107                         } else if (!strcmp("shell",player->argp[n])) {
108                                 field[i++] = 18;
109                         } else if (!strcmp("gun",player->argp[n])) {
110                                 field[i++] = 19;
111                         } else if (!strcmp("petrol",player->argp[n])) {
112                                 field[i++] = 20;
113                         } else if (!strcmp("iron",player->argp[n])) {
114                                 field[i++] = 21;
115                         } else if (!strcmp("dust",player->argp[n])) {
116                                 field[i++] = 22;
117                         } else if (!strcmp("bar",player->argp[n])) {
118                                 field[i++] = 23;
119                         } else if (!strcmp("oil",player->argp[n])) {
120                                 field[i++] = 24;
121                         } else if (!strcmp("lcm",player->argp[n])) {
122                                 field[i++] = 25;
123                         } else if (!strcmp("hcm",player->argp[n])) {
124                                 field[i++] = 26;
125                         } else if (!strcmp("rad",player->argp[n])) {
126                                 field[i++] = 27;
127                         } else if (!strcmp("att",player->argp[n])) {
128                                 field[i++] = 28;
129                         } else if (!strcmp("def",player->argp[n])) {
130                                 field[i++] = 29;
131                         } else if (!strcmp("vul",player->argp[n])) {
132                                 field[i++] = 30;
133                         } else if (!strcmp("spd",player->argp[n])) {
134                                 field[i++] = 31;
135                         } else if (!strcmp("vis",player->argp[n])) {
136                                 field[i++] = 32;
137                         } else if (!strcmp("spy",player->argp[n])) {
138                                 field[i++] = 33;
139                         } else if (!strcmp("radius",player->argp[n])) {
140                                 field[i++] = 34;
141                         } else if (!strcmp("frg",player->argp[n])) {
142                                 field[i++] = 35;
143                         } else if (!strcmp("acc",player->argp[n])) {
144                                 field[i++] = 36;
145                         } else if (!strcmp("dam",player->argp[n])) {
146                                 field[i++] = 37;
147                         } else if (!strcmp("amm",player->argp[n])) {
148                                 field[i++] = 38;
149                         } else if (!strcmp("aaf",player->argp[n])) {
150                                 field[i++] = 39;
151                         } else {
152                                 pr("Unrecognized field %s\n",player->argp[n]);
153                         }
154                         if (n++ > 100) {
155                                 pr("Too many fields\n");
156                                 return RET_FAIL;
157                         }
158                 }
159                 field[i] = 0;
160         }
161
162         if (player->god)
163                 pr("   ");
164         time(&now);
165         pr("DUMP LAND UNITS %d\n", now);
166         if (player->god)
167                 pr("own ");
168         pr("id");
169         n = 0;
170         while (field[n]) {
171                 switch (field[n]) {
172                 case 1: pr(" type"); break;
173                 case 2: pr(" x"); break;
174                 case 3: pr(" y"); break;
175                 case 4: pr(" army"); break;
176                 case 5: pr(" eff"); break;
177                 case 6: pr(" mil"); break;
178                 case 7: pr(" fort"); break;
179                 case 8: pr(" mob"); break;
180                 case 9: pr(" food"); break;
181                 case 10: pr(" fuel"); break;
182                 case 11: pr(" tech"); break;
183                 case 12: pr(" retr"); break;
184                 case 13: pr(" react"); break;
185                 case 14: pr(" xl"); break;
186                 case 15: pr(" nland"); break;
187                 case 16: pr(" land"); break;
188                 case 17: pr(" ship"); break;
189                 case 18: pr(" shell"); break;
190                 case 19: pr(" gun"); break;
191                 case 20: pr(" petrol"); break;
192                 case 21: pr(" iron"); break;
193                 case 22: pr(" dust"); break;
194                 case 23: pr(" bar"); break;
195                 case 24: pr(" oil"); break;
196                 case 25: pr(" lcm"); break;
197                 case 26: pr(" hcm"); break;
198                 case 27: pr(" rad"); break;
199                 case 28: pr(" att"); break;
200                 case 29: pr(" def"); break;
201                 case 30: pr(" vul"); break;
202                 case 31: pr(" spd"); break;
203                 case 32: pr(" vis"); break;
204                 case 33: pr(" spy"); break;
205                 case 34: pr(" radius"); break;
206                 case 35: pr(" frg"); break;
207                 case 36: pr(" acc"); break;
208                 case 37: pr(" dam"); break;
209                 case 38: pr(" amm"); break;
210                 case 39: pr(" aaf"); break;
211                 }
212                 n++;
213         }
214         pr("\n");
215
216         np = getnatp(player->cnum);
217         while (nxtitem(&ni, (s_char *)&land)) {
218                 if (land.lnd_own == 0)
219                         continue;
220                 if (!player->owner && !player->god)
221                         continue;
222                 if (land.lnd_type < 0 || land.lnd_type > lnd_maxno) {
223                         pr("bad unit type %d (#%d)\n",
224                                 land.lnd_type, ni.cur);
225                         continue;
226                 }
227                 count_land_planes(&land);
228                 lnd_count_units(&land);
229
230                 nunits++;
231                 if (player->god)
232                         pr("%3d ", land.lnd_own);
233                 pr("%d", ni.cur);
234                 n = 0;
235                 getvec(VT_ITEM, vec, (s_char *)&land, EF_LAND);
236                 while (field[n]) {
237                         switch (field[n++]) {
238                         case 1: pr(" %0.4s",lchr[(int)land.lnd_type].l_name); break;
239                         case 2: pr(" %d", xrel(np, land.lnd_x)); break;
240                         case 3: pr(" %d", yrel(np, land.lnd_y)); break;
241                         case 4: if (land.lnd_army == ' ') 
242                                         pr(" ~");
243                                 else
244                                         pr(" %c", land.lnd_army);
245                                 break;
246                         case 5: pr(" %d", land.lnd_effic); break;
247                         case 6: pr(" %d", lnd_getmil(&land)); break;
248                         case 7: pr(" %d", land.lnd_harden); break;
249                         case 8: pr(" %d", land.lnd_mobil); break;
250                         case 9: pr(" %d", vec[I_FOOD]); break;
251                         case 10: if (opt_FUEL)
252                                         pr(" %d",land.lnd_fuel);
253                                 else
254                                         pr(" 0");
255                                 break;
256                         case 11: pr(" %d", land.lnd_tech); break;
257                         case 12: pr(" %d", land.lnd_retreat); break;
258                         case 13: pr(" %d", land.lnd_rad_max); break;
259                         case 14: pr(" %d", land.lnd_nxlight); break;
260                         case 15: pr(" %d", land.lnd_nland); break;
261                         case 16: pr(" %d", land.lnd_land); break;
262                         case 17: pr(" %d", land.lnd_ship); break;
263                         case 18: pr(" %d", vec[I_SHELL]); break;
264                         case 19: pr(" %d", vec[I_GUN]); break;
265                         case 20: pr(" %d", vec[I_PETROL]); break;
266                         case 21: pr(" %d", vec[I_IRON]); break;
267                         case 22: pr(" %d", vec[I_DUST]); break;
268                         case 23: pr(" %d", vec[I_BAR]); break;
269                         case 24: pr(" %d", vec[I_OIL]); break;
270                         case 25: pr(" %d", vec[I_LCM]); break;
271                         case 26: pr(" %d", vec[I_HCM]); break;
272                         case 27: pr(" %d", vec[I_RAD]); break;
273                         case 28: pr(" %1.2f", (float)land.lnd_att); break;
274                         case 29: pr(" %1.2f", (float)land.lnd_def); break;
275                         case 30: pr(" %d", land.lnd_vul); break;
276                         case 31: pr(" %d", land.lnd_spd); break;
277                         case 32: pr(" %d", land.lnd_vis); break;
278                         case 33: pr(" %d", land.lnd_spy); break;
279                         case 34: pr(" %d", land.lnd_rad); break;
280                         case 35: pr(" %d", land.lnd_frg); break;
281                         case 36: pr(" %d", land.lnd_acc); break;
282                         case 37: pr(" %d", land.lnd_dam); break;
283                         case 38: pr(" %d", land.lnd_ammo); break;
284                         case 39: pr(" %d", land.lnd_aaf); break;
285                         }
286                 }
287                 pr("\n");
288         }
289         if (nunits == 0) {
290                 if (player->argp[1])
291                         pr("%s: No unit(s)\n", player->argp[1]);
292                 else
293                         pr("%s: No unit(s)\n", "");
294                 return RET_FAIL;
295         }else
296                 pr("%d unit%s\n", nunits, splur(nunits));
297         return RET_OK;
298 }
299