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