From ab482ecd3938fadf66b64e0643455547241fd0f1 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Tue, 9 Mar 2004 19:31:30 +0000 Subject: [PATCH] (grin): Stop grinding before grind puts more than ITEM_MAX bar constituents in sector. 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/grin.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/lib/commands/grin.c b/src/lib/commands/grin.c index 67f6970e5..07155c2a0 100644 --- a/src/lib/commands/grin.c +++ b/src/lib/commands/grin.c @@ -46,12 +46,12 @@ int grin(void) { struct nstr_sect nstr; - int vec[I_MAX + 1]; struct sctstr sect; s_char *p; int i, n, qty; int avail; s_char buf[1024]; + double grind_eff = 0.8; if ((p = getstarg(player->argp[1], "Sectors? ", buf)) == 0) return RET_SYN; @@ -65,29 +65,27 @@ grin(void) while (nxtsct(&nstr, §)) { if (!player->owner) continue; -/* getsect(item.sct_x, item.sct_y, §); */ if (sect.sct_effic < 60 || sect.sct_own != player->cnum) continue; - getvec(VT_ITEM, vec, (s_char *)§, EF_SECTOR); - n = (vec[I_BAR] >= qty) ? qty : vec[I_BAR]; + n = sect.sct_item[I_BAR] >= qty ? qty : sect.sct_item[I_BAR]; avail = n * 5.0; if (avail > sect.sct_avail) { n = sect.sct_avail / 5; avail = sect.sct_avail; - if (n == 0) - continue; } - if (n) { - vec[I_BAR] -= n; + for (i = 0; i < pchr[P_BAR].p_nv; i++) { + n = min(n, + (double)(ITEM_MAX - sect.sct_item[pchr[P_BAR].p_vtype[i]]) + / (pchr[P_BAR].p_vamt[i] * grind_eff)); + } + if (n > 0) { pr("%d bars ground up in %s\n", n, xyas(sect.sct_x, sect.sct_y, player->cnum)); + sect.sct_item[I_BAR] -= n; for (i = 0; i < pchr[P_BAR].p_nv; i++) { - vec[unitem(pchr[P_BAR].p_vtype[i])] += (int)((n * - pchr[P_BAR]. - p_vamt[i]) * - 0.8); + sect.sct_item[pchr[P_BAR].p_vtype[i]] + += n * pchr[P_BAR].p_vamt[i] * grind_eff; } - putvec(VT_ITEM, vec, (s_char *)§, EF_SECTOR); sect.sct_avail -= avail; putsect(§); } -- 2.43.0