]> git.pond.sub.org Git - empserver/commitdiff
(improve, shoo, spy, buildeff): Work directly on item arrays instead
authorMarkus Armbruster <armbru@pond.sub.org>
Tue, 9 Mar 2004 19:26:02 +0000 (19:26 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Tue, 9 Mar 2004 19:26:02 +0000 (19:26 +0000)
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
src/lib/commands/shoo.c
src/lib/commands/spy.c
src/lib/commands/work.c

index 9c35b0c8d688a54887b53af8eb836ca1c0c99a9f..25f69653067bb8c337baa9a9eb6293590c7ff548 100644 (file)
@@ -59,7 +59,6 @@ improve(void)
     s_char buf[1024];
     s_char inbuf[128];
     int type;
     s_char buf[1024];
     s_char inbuf[128];
     int type;
-    int vec[I_MAX + 1];
     int value;
     int ovalue;
     int maxup;
     int value;
     int ovalue;
     int maxup;
@@ -101,7 +100,6 @@ improve(void)
            continue;
        if (!check_sect_ok(&sect))
            continue;
            continue;
        if (!check_sect_ok(&sect))
            continue;
-       getvec(VT_ITEM, vec, (s_char *)&sect, EF_SECTOR);
        maxup = 100 - value;
        wanted = atoi(p);
        if (wanted < 0)
        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;
        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",
            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;
        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",
            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)
        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)
        if (!opt_NO_HCMS)
-           vec[I_HCM] -= hneeded;
+           sect.sct_item[I_HCM] -= hneeded;
        sect.sct_mobil -= mneeded;
        sect.sct_mobil -= mneeded;
-       putvec(VT_ITEM, vec, (s_char *)&sect, EF_SECTOR);
        ovalue = value;
        value += maxup;
        if (value > 100)
        ovalue = value;
        value += maxup;
        if (value > 100)
index e44c534cb24fada233a400dc4f05d1d48169ab78..eec20ccf6fde017b44ae37feae465f3e496d25e7 100644 (file)
@@ -59,7 +59,7 @@ shoo(void)
     struct lndstr land;
     int targets;
     s_char *p;
     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];
 
     s_char prompt[128];
     s_char buf[128];
 
@@ -78,9 +78,7 @@ shoo(void)
     while (nxtsct(&nstr, &sect)) {
        if (!player->owner)
            continue;
     while (nxtsct(&nstr, &sect)) {
        if (!player->owner)
            continue;
-       if (getvec(VT_ITEM, vec, (s_char *)&sect, 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)) {
        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;
            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) {
        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;
            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);
        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_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(&sect);
     }
     return RET_OK;
        putsect(&sect);
     }
     return RET_OK;
index 55a62556fd2eb343b18e523053cb5887046564af..db9e4fea046b4eca3bcf0da132243706b54c9d49 100644 (file)
@@ -111,7 +111,6 @@ spy(void)
     while (nxtsct(&nstr, &from)) {
        if (!player->owner && !player->god)
            continue;
     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);
        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 (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;
            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;
        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);
        }
     }
            putsect(&from);
        }
     }
index abdc61c772854da747a683294133caf84a86753c..574e8c4f2e842c76d7b4291cbb999155884def30 100644 (file)
@@ -130,8 +130,6 @@ buildeff(struct sctstr *sp, int work, double *money)
     int n, hcms, lcms;
     int effdone = 0;
 
     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) {
        /*
     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) {
            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) {
            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;
            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)) {
 
        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;
     }
        }
        effdone += work_cost;
     }
-    putvec(VT_ITEM, vec, (s_char *)sp, EF_SECTOR);
     return effdone;
 }
     return effdone;
 }