/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2000, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Copyright (C) 1986-2008, Dave Pare, Jeff Bailey, Thomas Ruschak,
* Ken Stevens, Steve McClure
*
* This program is free software; you can redistribute it and/or modify
*
* ---
*
- * See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
- * related information and legal notices. It is expected that any future
- * projects/authors will amend these files as needed.
+ * 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.
*
* ---
*
* Dave Pare, 1986
*/
-#include "misc.h"
-#include "player.h"
-#include "xy.h"
-#include "var.h"
-#include "sect.h"
-#include "news.h"
+#include <config.h>
+
+#include "commands.h"
#include "item.h"
-#include "path.h"
-#include "nat.h"
-#include "file.h"
-#include "nsc.h"
#include "land.h"
-#include "commands.h"
+#include "news.h"
+#include "path.h"
int
shoo(void)
struct nstr_sect nstr;
struct nstr_item ni;
int nshot;
- int mob_cost;
double m;
- int item;
+ i_type item;
struct ichrstr *ip;
struct lndstr land;
int targets;
- s_char *p;
- int vec[I_MAX + 1], mil, nsec;
- s_char prompt[128];
- s_char buf[128];
+ char *p;
+ int mil, nsec;
+ char prompt[128];
+ char buf[1024];
ip = whatitem(player->argp[1], "Shoot what <civ or uw> ");
- if (ip == 0 || (ip->i_vtype != V_CIVIL && ip->i_vtype != V_UW))
+ if (ip == 0 || (ip->i_uid != I_CIVIL && ip->i_uid != I_UW))
return RET_SYN;
- item = ip->i_vtype;
+ item = ip->i_uid;
if (!snxtsct(&nstr, player->argp[2]))
return RET_SYN;
- sprintf(prompt, "number of %s to shoot (max 999)? ", ip->i_name);
+ sprintf(prompt, "number of %s to shoot? ", ip->i_name);
p = getstarg(player->argp[3], prompt, buf);
if (p == 0 || (targets = atoi(p)) <= 0)
return RET_SYN;
- if (targets > 999)
- targets = 999;
while (nxtsct(&nstr, §)) {
if (!player->owner)
continue;
- if (getvec(VT_ITEM, vec, (s_char *)§, EF_SECTOR) <= 0)
- continue;
- mil = vec[I_MILIT];
+ mil = sect.sct_item[I_MILIT];
nsec = 0;
snxtitem_xy(&ni, EF_LAND, sect.sct_x, sect.sct_y);
- while (nxtitem(&ni, (s_char *)&land)) {
- mil += total_mil(&land);
+ while (nxtitem(&ni, &land)) {
+ mil += land.lnd_item[I_MILIT];
if (lchr[(int)land.lnd_type].l_flags & L_SECURITY) {
- mil += total_mil(&land);
+ mil += land.lnd_item[I_MILIT];
nsec++;
}
}
- if (vec[item] == 0 || vec[I_CIVIL] > mil * 10)
+ if (sect.sct_item[item] == 0 || sect.sct_item[I_CIVIL] > mil * 10)
continue;
- nshot = vec[item] > targets ? targets : vec[item];
- m = ((double)nshot + 4.0) / 5.0;
-
- if (m > sect.sct_mobil) {
+ nshot = sect.sct_item[item] > targets ? targets : sect.sct_item[item];
+ if (nshot > sect.sct_mobil * 5)
nshot = sect.sct_mobil * 5;
- m = sect.sct_mobil;
- }
+ m = nshot / 5.0;
/*
* Each security unit lowers the cost of
* shooting a person by 10%. However, you
*/
if (nsec > 5)
nsec = 5;
- m = ((float)m * (1.0 - ((float)nsec * 0.1)));
+ m *= 1.0 - nsec * 0.1;
if (nshot <= 0)
continue;
if (m < 0)
m = 0;
if (m > sect.sct_mobil)
m = sect.sct_mobil;
- mob_cost = roundavg(m);
- sect.sct_mobil -= (u_char)mob_cost;
- vec[item] -= nshot;
+ sect.sct_mobil -= roundavg(m);
+ sect.sct_item[item] -= nshot;
pr("BANG!! (thump) %d %s shot in %s!\n",
nshot, ip->i_name, xyas(sect.sct_x, sect.sct_y, player->cnum));
if (chance(nshot / 100.0))
nreport(player->cnum, N_SHOOT_CIV, sect.sct_oldown, 1);
- if (vec[item] <= 0 && item == V_CIVIL
+ if (sect.sct_item[item] <= 0 && item == I_CIVIL
&& (sect.sct_own != sect.sct_oldown)) {
sect.sct_oldown = sect.sct_own;
pr(" %s is now completely yours\n",
xyas(sect.sct_x, sect.sct_y, player->cnum));
}
- sect.sct_item[item] = vec[item];
putsect(§);
}
return RET_OK;