From 772d51c1266040ef6fe195330caac1676a88ad41 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Fri, 19 Feb 2021 01:48:03 +0100 Subject: [PATCH] [diablo] Fill gold stacks before creating new ones Before if you had a stack of 4990 and picked up 12 gold you would end up with one of 4990 and one of 12. Now you will have one of 5000 and one of 2. --- Source/inv.cpp | 119 ++++++++++++++++++------------------------------- 1 file changed, 44 insertions(+), 75 deletions(-) diff --git a/Source/inv.cpp b/Source/inv.cpp index 0fb7b1e88..ca8fcd426 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -682,84 +682,53 @@ BOOL SpecialAutoPlace(int pnum, int ii, int sx, int sy) BOOL GoldAutoPlace(int pnum) { - int ii; - int xx, yy; - BOOL done; + bool done = false; - done = FALSE; for (int i = 0; i < plr[pnum]._pNumInv && !done; i++) { - if (plr[pnum].InvList[i]._itype == ITYPE_GOLD) { - int gold = plr[pnum].InvList[i]._ivalue + plr[pnum].HoldItem._ivalue; - if (gold <= MaxGold) { - plr[pnum].InvList[i]._ivalue = gold; - SetPlrHandGoldCurs(&plr[pnum].InvList[i]); - plr[pnum]._pGold = CalculateGold(pnum); - done = TRUE; -#ifdef HELLFIRE - plr[pnum].HoldItem._ivalue = 0; - } else { - int max_gold = MaxGold; - if (plr[pnum].InvList[i]._ivalue < max_gold) { - int gold = max_gold - plr[pnum].InvList[i]._ivalue; - plr[pnum].InvList[i]._ivalue = max_gold; - plr[pnum].InvList[i]._iCurs = ICURS_GOLD_LARGE; - plr[pnum].HoldItem._ivalue -= gold; - if (plr[pnum].HoldItem._ivalue < 0) { - plr[pnum].HoldItem._ivalue = 0; - done = TRUE; - } - GetPlrHandSeed(&plr[pnum].HoldItem); - control_set_gold_curs(pnum); - plr[pnum]._pGold = CalculateGold(pnum); - } -#endif - } - } - } - -#ifndef HELLFIRE - if (!done) - for (int i = 0; i < plr[pnum]._pNumInv && !done; i++) { - if (plr[pnum].InvList[i]._itype == ITYPE_GOLD && plr[pnum].InvList[i]._ivalue < GOLD_MAX_LIMIT) { - if (plr[pnum].HoldItem._ivalue + plr[pnum].InvList[i]._ivalue <= GOLD_MAX_LIMIT) { - plr[pnum].InvList[i]._ivalue = plr[pnum].HoldItem._ivalue + plr[pnum].InvList[i]._ivalue; - SetPlrHandGoldCurs(&plr[pnum].InvList[i]); - plr[pnum]._pGold = CalculateGold(pnum); - done = TRUE; - } - } - } -#endif + if (plr[pnum].InvList[i]._itype != ITYPE_GOLD) + continue; + if (plr[pnum].InvList[i]._ivalue >= MaxGold) + continue; - if (!done) - for (int i = 39; i >= 0 && !done; i--) { - yy = 10 * (i / 10); - xx = i % 10; - if (plr[pnum].InvGrid[xx + yy] == 0) { - ii = plr[pnum]._pNumInv; - plr[pnum].InvList[ii] = plr[pnum].HoldItem; - plr[pnum]._pNumInv = plr[pnum]._pNumInv + 1; - plr[pnum].InvGrid[xx + yy] = plr[pnum]._pNumInv; - GetPlrHandSeed(&plr[pnum].InvList[ii]); -#ifdef HELLFIRE - int gold = plr[pnum].HoldItem._ivalue; - if (gold > MaxGold) { - gold -= MaxGold; - plr[pnum].HoldItem._ivalue = gold; - GetPlrHandSeed(&plr[pnum].HoldItem); - plr[pnum].InvList[ii]._ivalue = MaxGold; - } else { - plr[pnum].HoldItem._ivalue = 0; - done = TRUE; - plr[pnum]._pGold = CalculateGold(pnum); - SetCursor_(CURSOR_HAND); - } -#else + plr[pnum].InvList[i]._ivalue += plr[pnum].HoldItem._ivalue; + if (plr[pnum].InvList[i]._ivalue > MaxGold) { + plr[pnum].HoldItem._ivalue = plr[pnum].InvList[i]._ivalue - MaxGold; + SetPlrHandGoldCurs(&plr[pnum].HoldItem); + plr[pnum].InvList[i]._ivalue = MaxGold; + if (gbIsHellfire) + GetPlrHandSeed(&plr[pnum].HoldItem); + } else { + plr[pnum].HoldItem._ivalue = 0; + done = true; + } + + SetPlrHandGoldCurs(&plr[pnum].InvList[i]); + plr[pnum]._pGold = CalculateGold(pnum); + } + + for (int i = 39; i >= 0 && !done; i--) { + int yy = 10 * (i / 10); + int xx = i % 10; + if (plr[pnum].InvGrid[xx + yy] == 0) { + int ii = plr[pnum]._pNumInv; + plr[pnum].InvList[ii] = plr[pnum].HoldItem; + plr[pnum]._pNumInv = plr[pnum]._pNumInv + 1; + plr[pnum].InvGrid[xx + yy] = plr[pnum]._pNumInv; + GetPlrHandSeed(&plr[pnum].InvList[ii]); + int gold = plr[pnum].HoldItem._ivalue; + if (gold > MaxGold) { + gold -= MaxGold; + plr[pnum].HoldItem._ivalue = gold; + GetPlrHandSeed(&plr[pnum].HoldItem); + plr[pnum].InvList[ii]._ivalue = MaxGold; + } else { + plr[pnum].HoldItem._ivalue = 0; + done = true; plr[pnum]._pGold = CalculateGold(pnum); - done = TRUE; -#endif + SetCursor_(CURSOR_HAND); } } + } return done; } @@ -1755,10 +1724,10 @@ void AutoGetItem(int pnum, int ii) SetICursor(plr[pnum].HoldItem._iCurs + CURSOR_FIRSTITEM); if (plr[pnum].HoldItem._itype == ITYPE_GOLD) { done = GoldAutoPlace(pnum); -#ifdef HELLFIRE - if (!done) + if (!done) { item[ii]._ivalue = plr[pnum].HoldItem._ivalue; -#endif + SetPlrHandGoldCurs(&item[ii]); + } } else { done = FALSE; if (((plr[pnum]._pgfxnum & 0xF) == ANIM_ID_UNARMED