(improve, shoo, spy, buildeff): Work directly on item arrays instead
of copies made by getvec(). This is safe, because the old code made single copies and always flushed them back into the unit structures before flushing those.
This commit is contained in:
parent
4ad649950e
commit
2a3b29ebe1
4 changed files with 18 additions and 29 deletions
|
@ -59,7 +59,6 @@ improve(void)
|
|||
s_char buf[1024];
|
||||
s_char inbuf[128];
|
||||
int type;
|
||||
int vec[I_MAX + 1];
|
||||
int value;
|
||||
int ovalue;
|
||||
int maxup;
|
||||
|
@ -101,7 +100,6 @@ improve(void)
|
|||
continue;
|
||||
if (!check_sect_ok(§))
|
||||
continue;
|
||||
getvec(VT_ITEM, vec, (s_char *)§, EF_SECTOR);
|
||||
maxup = 100 - value;
|
||||
wanted = atoi(p);
|
||||
if (wanted < 0)
|
||||
|
@ -113,8 +111,8 @@ improve(void)
|
|||
lneeded = intrchr[type].in_lcms * maxup;
|
||||
if (opt_NO_LCMS)
|
||||
lneeded = 0;
|
||||
if (vec[I_LCM] < lneeded) {
|
||||
lneeded = vec[I_LCM];
|
||||
if (sect.sct_item[I_LCM] < lneeded) {
|
||||
lneeded = sect.sct_item[I_LCM];
|
||||
maxup = lneeded / intrchr[type].in_lcms;
|
||||
if (maxup <= 0) {
|
||||
pr("Not enough lcms in %s\n",
|
||||
|
@ -125,8 +123,8 @@ improve(void)
|
|||
hneeded = intrchr[type].in_hcms * maxup;
|
||||
if (opt_NO_HCMS)
|
||||
hneeded = 0;
|
||||
if (vec[I_HCM] < hneeded) {
|
||||
hneeded = vec[I_HCM];
|
||||
if (sect.sct_item[I_HCM] < hneeded) {
|
||||
hneeded = sect.sct_item[I_HCM];
|
||||
maxup = hneeded / intrchr[type].in_hcms;
|
||||
if (maxup <= 0) {
|
||||
pr("Not enough hcms in %s\n",
|
||||
|
@ -168,11 +166,10 @@ improve(void)
|
|||
dneeded = intrchr[type].in_dcost * maxup;
|
||||
player->dolcost += dneeded;
|
||||
if (!opt_NO_LCMS)
|
||||
vec[I_LCM] -= lneeded;
|
||||
sect.sct_item[I_LCM] -= lneeded;
|
||||
if (!opt_NO_HCMS)
|
||||
vec[I_HCM] -= hneeded;
|
||||
sect.sct_item[I_HCM] -= hneeded;
|
||||
sect.sct_mobil -= mneeded;
|
||||
putvec(VT_ITEM, vec, (s_char *)§, EF_SECTOR);
|
||||
ovalue = value;
|
||||
value += maxup;
|
||||
if (value > 100)
|
||||
|
|
|
@ -59,7 +59,7 @@ shoo(void)
|
|||
struct lndstr land;
|
||||
int targets;
|
||||
s_char *p;
|
||||
int vec[I_MAX + 1], mil, nsec;
|
||||
int mil, nsec;
|
||||
s_char prompt[128];
|
||||
s_char buf[128];
|
||||
|
||||
|
@ -78,9 +78,7 @@ shoo(void)
|
|||
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)) {
|
||||
|
@ -92,9 +90,9 @@ shoo(void)
|
|||
}
|
||||
}
|
||||
|
||||
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];
|
||||
nshot = sect.sct_item[item] > targets ? targets : sect.sct_item[item];
|
||||
m = ((double)nshot + 4.0) / 5.0;
|
||||
|
||||
if (m > sect.sct_mobil) {
|
||||
|
@ -117,18 +115,17 @@ shoo(void)
|
|||
m = sect.sct_mobil;
|
||||
mob_cost = roundavg(m);
|
||||
sect.sct_mobil -= (u_char)mob_cost;
|
||||
vec[item] -= nshot;
|
||||
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;
|
||||
|
|
|
@ -111,7 +111,6 @@ spy(void)
|
|||
while (nxtsct(&nstr, &from)) {
|
||||
if (!player->owner && !player->god)
|
||||
continue;
|
||||
getvec(VT_ITEM, vec, (s_char *)&from, EF_SECTOR);
|
||||
nrecon = 0;
|
||||
nunits = 0;
|
||||
snxtitem_xy(&ni, EF_LAND, from.sct_x, from.sct_y);
|
||||
|
@ -120,7 +119,7 @@ spy(void)
|
|||
if (lchr[(int)land.lnd_type].l_flags & L_RECON)
|
||||
nrecon++;
|
||||
}
|
||||
if ((military = vec[I_MILIT]) == 0 && (nunits == 0))
|
||||
if ((military = from.sct_item[I_MILIT]) == 0 && (nunits == 0))
|
||||
continue;
|
||||
x = from.sct_x;
|
||||
y = from.sct_y;
|
||||
|
@ -205,8 +204,7 @@ spy(void)
|
|||
if ((savemil != military) && (savemil > 0)) {
|
||||
if ((military < 0) || (military > savemil))
|
||||
military = 0;
|
||||
vec[I_MILIT] = military;
|
||||
putvec(VT_ITEM, vec, (s_char *)&from, EF_SECTOR);
|
||||
from.sct_item[I_MILIT] = military;
|
||||
putsect(&from);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -130,8 +130,6 @@ buildeff(struct sctstr *sp, int work, double *money)
|
|||
int n, hcms, lcms;
|
||||
int effdone = 0;
|
||||
|
||||
getvec(VT_ITEM, vec, (s_char *)sp, EF_SECTOR);
|
||||
|
||||
work_cost = 0;
|
||||
if (sp->sct_type != sp->sct_newtype) {
|
||||
/*
|
||||
|
@ -159,13 +157,13 @@ buildeff(struct sctstr *sp, int work, double *money)
|
|||
work_cost = work;
|
||||
|
||||
if (dchr[sp->sct_type].d_lcms > 0) {
|
||||
lcms = vec[I_LCM];
|
||||
lcms = sp->sct_item[I_LCM];
|
||||
lcms /= dchr[sp->sct_type].d_lcms;
|
||||
if (work_cost > lcms)
|
||||
work_cost = lcms;
|
||||
}
|
||||
if (dchr[sp->sct_type].d_hcms > 0) {
|
||||
hcms = vec[I_HCM];
|
||||
hcms = sp->sct_item[I_HCM];
|
||||
hcms /= dchr[sp->sct_type].d_hcms;
|
||||
if (work_cost > hcms)
|
||||
work_cost = hcms;
|
||||
|
@ -176,11 +174,10 @@ buildeff(struct sctstr *sp, int work, double *money)
|
|||
|
||||
if ((dchr[sp->sct_type].d_lcms > 0) ||
|
||||
(dchr[sp->sct_type].d_hcms > 0)) {
|
||||
vec[I_LCM] -= work_cost * dchr[sp->sct_type].d_lcms;
|
||||
vec[I_HCM] -= work_cost * dchr[sp->sct_type].d_hcms;
|
||||
sp->sct_item[I_LCM] -= work_cost * dchr[sp->sct_type].d_lcms;
|
||||
sp->sct_item[I_HCM] -= work_cost * dchr[sp->sct_type].d_hcms;
|
||||
}
|
||||
effdone += work_cost;
|
||||
}
|
||||
putvec(VT_ITEM, vec, (s_char *)sp, EF_SECTOR);
|
||||
return effdone;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue