From: Markus Armbruster Date: Tue, 9 Mar 2004 19:26:02 +0000 (+0000) Subject: (improve, shoo, spy, buildeff): Work directly on item arrays instead X-Git-Tag: v4.2.14~56 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=2a3b29ebe188d8f1832d31e1137fa40401fe7c4d (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. --- diff --git a/src/lib/commands/improve.c b/src/lib/commands/improve.c index 9c35b0c8d..25f696530 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 e44c534cb..eec20ccf6 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 55a62556f..db9e4fea0 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 abdc61c77..574e8c4f2 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; }