]> git.pond.sub.org Git - empserver/blob - src/lib/commands/ldump.c
License upgrade to GPL version 3 or later
[empserver] / src / lib / commands / ldump.c
1 /*
2  *  Empire - A multi-player, client/server Internet based war game.
3  *  Copyright (C) 1986-2011, 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  *  ldump.c: Dump land unit information
28  *
29  *  Known contributors to this file:
30  *     John Yockey, 1997
31  *     Steve McClure, 1998
32  */
33
34 #include <config.h>
35
36 #include "commands.h"
37 #include "land.h"
38 #include "optlist.h"
39
40 int
41 ldump(void)
42 {
43     int nunits;
44     int field[128];
45     struct nstr_item ni;
46     struct lndstr land;
47     int n, i;
48     struct natstr *np;
49     time_t now;
50
51     if (!snxtitem(&ni, EF_LAND, player->argp[1], NULL))
52         return RET_SYN;
53     prdate();
54     nunits = 0;
55
56     if (!player->argp[2]) {
57         for (n = 1; n <= 41; n++)
58             field[n - 1] = n;
59         field[n - 1] = 0;
60     } else {
61         n = 2;
62         i = 0;
63         while (player->argp[n]) {
64             if (!strcmp("type", player->argp[n])) {
65                 field[i++] = 1;
66             } else if (!strcmp("x", player->argp[n])) {
67                 field[i++] = 2;
68             } else if (!strcmp("y", player->argp[n])) {
69                 field[i++] = 3;
70             } else if (!strcmp("army", player->argp[n])) {
71                 field[i++] = 4;
72             } else if (!strcmp("eff", player->argp[n])) {
73                 field[i++] = 5;
74             } else if (!strcmp("mil", player->argp[n])) {
75                 field[i++] = 6;
76             } else if (!strcmp("fort", player->argp[n])) {
77                 field[i++] = 7;
78             } else if (!strcmp("mob", player->argp[n])) {
79                 field[i++] = 8;
80             } else if (!strcmp("food", player->argp[n])) {
81                 field[i++] = 9;
82             } else if (!strcmp("fuel", player->argp[n])) {
83                 field[i++] = 10;
84             } else if (!strcmp("tech", player->argp[n])) {
85                 field[i++] = 11;
86             } else if (!strcmp("retr", player->argp[n])) {
87                 field[i++] = 12;
88             } else if (!strcmp("react", player->argp[n])) {
89                 field[i++] = 13;
90             } else if (!strcmp("xl", player->argp[n])) {
91                 field[i++] = 14;
92             } else if (!strcmp("nland", player->argp[n])) {
93                 field[i++] = 15;
94             } else if (!strcmp("land", player->argp[n])) {
95                 field[i++] = 16;
96             } else if (!strcmp("ship", player->argp[n])) {
97                 field[i++] = 17;
98             } else if (!strcmp("shell", player->argp[n])) {
99                 field[i++] = 18;
100             } else if (!strcmp("gun", player->argp[n])) {
101                 field[i++] = 19;
102             } else if (!strcmp("petrol", player->argp[n])) {
103                 field[i++] = 20;
104             } else if (!strcmp("iron", player->argp[n])) {
105                 field[i++] = 21;
106             } else if (!strcmp("dust", player->argp[n])) {
107                 field[i++] = 22;
108             } else if (!strcmp("bar", player->argp[n])) {
109                 field[i++] = 23;
110             } else if (!strcmp("oil", player->argp[n])) {
111                 field[i++] = 24;
112             } else if (!strcmp("lcm", player->argp[n])) {
113                 field[i++] = 25;
114             } else if (!strcmp("hcm", player->argp[n])) {
115                 field[i++] = 26;
116             } else if (!strcmp("rad", player->argp[n])) {
117                 field[i++] = 27;
118             } else if (!strcmp("att", player->argp[n])) {
119                 field[i++] = 28;
120             } else if (!strcmp("def", player->argp[n])) {
121                 field[i++] = 29;
122             } else if (!strcmp("vul", player->argp[n])) {
123                 field[i++] = 30;
124             } else if (!strcmp("spd", player->argp[n])) {
125                 field[i++] = 31;
126             } else if (!strcmp("vis", player->argp[n])) {
127                 field[i++] = 32;
128             } else if (!strcmp("spy", player->argp[n])) {
129                 field[i++] = 33;
130             } else if (!strcmp("radius", player->argp[n])) {
131                 field[i++] = 34;
132             } else if (!strcmp("frg", player->argp[n])) {
133                 field[i++] = 35;
134             } else if (!strcmp("acc", player->argp[n])) {
135                 field[i++] = 36;
136             } else if (!strcmp("dam", player->argp[n])) {
137                 field[i++] = 37;
138             } else if (!strcmp("amm", player->argp[n])) {
139                 field[i++] = 38;
140             } else if (!strcmp("aaf", player->argp[n])) {
141                 field[i++] = 39;
142             } else if (!strcmp("uw", player->argp[n])) {
143                 field[i++] = 40;
144             } else if (!strcmp("civ", player->argp[n])) {
145                 field[i++] = 41;
146             } else {
147                 pr("Unrecognized field %s\n", player->argp[n]);
148             }
149             if (n++ > 100) {
150                 pr("Too many fields\n");
151                 return RET_FAIL;
152             }
153         }
154         field[i] = 0;
155     }
156
157     if (player->god)
158         pr("   ");
159     time(&now);
160     pr("DUMP LAND UNITS %ld\n", (long)now);
161     if (player->god)
162         pr("own ");
163     pr("id");
164     n = 0;
165     while (field[n]) {
166         switch (field[n]) {
167         case 1:
168             pr(" type");
169             break;
170         case 2:
171             pr(" x");
172             break;
173         case 3:
174             pr(" y");
175             break;
176         case 4:
177             pr(" army");
178             break;
179         case 5:
180             pr(" eff");
181             break;
182         case 6:
183             pr(" mil");
184             break;
185         case 7:
186             pr(" fort");
187             break;
188         case 8:
189             pr(" mob");
190             break;
191         case 9:
192             pr(" food");
193             break;
194         case 10:
195             pr(" fuel");
196             break;
197         case 11:
198             pr(" tech");
199             break;
200         case 12:
201             pr(" retr");
202             break;
203         case 13:
204             pr(" react");
205             break;
206         case 14:
207             pr(" xl");
208             break;
209         case 15:
210             pr(" nland");
211             break;
212         case 16:
213             pr(" land");
214             break;
215         case 17:
216             pr(" ship");
217             break;
218         case 18:
219             pr(" shell");
220             break;
221         case 19:
222             pr(" gun");
223             break;
224         case 20:
225             pr(" petrol");
226             break;
227         case 21:
228             pr(" iron");
229             break;
230         case 22:
231             pr(" dust");
232             break;
233         case 23:
234             pr(" bar");
235             break;
236         case 24:
237             pr(" oil");
238             break;
239         case 25:
240             pr(" lcm");
241             break;
242         case 26:
243             pr(" hcm");
244             break;
245         case 27:
246             pr(" rad");
247             break;
248         case 28:
249             pr(" att");
250             break;
251         case 29:
252             pr(" def");
253             break;
254         case 30:
255             pr(" vul");
256             break;
257         case 31:
258             pr(" spd");
259             break;
260         case 32:
261             pr(" vis");
262             break;
263         case 33:
264             pr(" spy");
265             break;
266         case 34:
267             pr(" radius");
268             break;
269         case 35:
270             pr(" frg");
271             break;
272         case 36:
273             pr(" acc");
274             break;
275         case 37:
276             pr(" dam");
277             break;
278         case 38:
279             pr(" amm");
280             break;
281         case 39:
282             pr(" aaf");
283             break;
284         case 40:
285             pr(" uw");
286             break;
287         case 41:
288             pr(" civ");
289             break;
290         }
291         n++;
292     }
293     pr("\n");
294
295     np = getnatp(player->cnum);
296     while (nxtitem(&ni, &land)) {
297         if (land.lnd_own == 0)
298             continue;
299         if (!player->owner && !player->god)
300             continue;
301         nunits++;
302         if (player->god)
303             pr("%d ", land.lnd_own);
304         pr("%d", ni.cur);
305         n = 0;
306         while (field[n]) {
307             switch (field[n++]) {
308             case 1:
309                 pr(" %.4s", lchr[(int)land.lnd_type].l_name);
310                 break;
311             case 2:
312                 pr(" %d", xrel(np, land.lnd_x));
313                 break;
314             case 3:
315                 pr(" %d", yrel(np, land.lnd_y));
316                 break;
317             case 4:
318                 pr(" %c", land.lnd_army ? land.lnd_army : '~');
319                 break;
320             case 5:
321                 pr(" %d", land.lnd_effic);
322                 break;
323             case 6:
324                 pr(" %d", land.lnd_item[I_MILIT]);
325                 break;
326             case 7:
327                 pr(" %d", land.lnd_harden);
328                 break;
329             case 8:
330                 pr(" %d", land.lnd_mobil);
331                 break;
332             case 9:
333                 pr(" %d", land.lnd_item[I_FOOD]);
334                 break;
335             case 10:
336                 pr(" 0");
337                 break;
338             case 11:
339                 pr(" %d", land.lnd_tech);
340                 break;
341             case 12:
342                 pr(" %d", land.lnd_retreat);
343                 break;
344             case 13:
345                 pr(" 0");
346                 break;
347             case 14:
348                 pr(" %d", lnd_nxlight(&land));
349                 break;
350             case 15:
351                 pr(" %d", lnd_nland(&land));
352                 break;
353             case 16:
354                 pr(" %d", land.lnd_land);
355                 break;
356             case 17:
357                 pr(" %d", land.lnd_ship);
358                 break;
359             case 18:
360                 pr(" %d", land.lnd_item[I_SHELL]);
361                 break;
362             case 19:
363                 pr(" %d", land.lnd_item[I_GUN]);
364                 break;
365             case 20:
366                 pr(" %d", land.lnd_item[I_PETROL]);
367                 break;
368             case 21:
369                 pr(" %d", land.lnd_item[I_IRON]);
370                 break;
371             case 22:
372                 pr(" %d", land.lnd_item[I_DUST]);
373                 break;
374             case 23:
375                 pr(" %d", land.lnd_item[I_BAR]);
376                 break;
377             case 24:
378                 pr(" %d", land.lnd_item[I_OIL]);
379                 break;
380             case 25:
381                 pr(" %d", land.lnd_item[I_LCM]);
382                 break;
383             case 26:
384                 pr(" %d", land.lnd_item[I_HCM]);
385                 break;
386             case 27:
387                 pr(" %d", land.lnd_item[I_RAD]);
388                 break;
389             case 28:
390                 pr(" %1.2f", lnd_att(&land));
391                 break;
392             case 29:
393                 pr(" %1.2f", lnd_def(&land));
394                 break;
395             case 30:
396                 pr(" %d", lnd_vul(&land));
397                 break;
398             case 31:
399                 pr(" %d", lnd_spd(&land));
400                 break;
401             case 32:
402                 pr(" %d", lnd_vis(&land));
403                 break;
404             case 33:
405                 pr(" %d", lchr[land.lnd_type].l_spy);
406                 break;
407             case 34:
408                 pr(" %d", lchr[land.lnd_type].l_rad);
409                 break;
410             case 35:
411                 pr(" %d", lnd_frg(&land));
412                 break;
413             case 36:
414                 pr(" %d", lnd_acc(&land));
415                 break;
416             case 37:
417                 pr(" %d", lnd_dam(&land));
418                 break;
419             case 38:
420                 pr(" %d", lchr[land.lnd_type].l_ammo);
421                 break;
422             case 39:
423                 pr(" %d", lnd_aaf(&land));
424                 break;
425             case 40:
426                 pr(" %d", land.lnd_item[I_UW]);
427                 break;
428             case 41:
429                 pr(" %d", land.lnd_item[I_CIVIL]);
430                 break;
431             }
432         }
433         pr("\n");
434     }
435     if (nunits == 0) {
436         if (player->argp[1])
437             pr("%s: No unit(s)\n", player->argp[1]);
438         else
439             pr("%s: No unit(s)\n", "");
440         return RET_FAIL;
441     } else
442         pr("%d unit%s\n", nunits, splur(nunits));
443     return RET_OK;
444 }