From 2a3b29ebe188d8f1832d31e1137fa40401fe7c4d Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Tue, 9 Mar 2004 19:26:02 +0000 Subject: [PATCH] (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. --- src/lib/commands/improve.c | 15 ++++++--------- src/lib/commands/shoo.c | 15 ++++++--------- src/lib/commands/spy.c | 6 ++---- src/lib/commands/work.c | 11 ++++------- 4 files changed, 18 insertions(+), 29 deletions(-) diff --git a/src/lib/commands/improve.c b/src/lib/commands/improve.c index 9c35b0c8..25f69653 100644 --- a/src/lib/commands/improve.c +++ b/src/lib/commands/improve.c @@ -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) diff --git a/src/lib/commands/shoo.c b/src/lib/commands/shoo.c index e44c534c..eec20ccf 100644 --- a/src/lib/commands/shoo.c +++ b/src/lib/commands/shoo.c @@ -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; diff --git a/src/lib/commands/spy.c b/src/lib/commands/spy.c index 55a62556..db9e4fea 100644 --- a/src/lib/commands/spy.c +++ b/src/lib/commands/spy.c @@ -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); } } diff --git a/src/lib/commands/work.c b/src/lib/commands/work.c index abdc61c7..574e8c4f 100644 --- a/src/lib/commands/work.c +++ b/src/lib/commands/work.c @@ -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; }