Browse Source

deduplicate NPC sell/buy code

pull/6458/head
qndel 3 years ago committed by Anders Jenbo
parent
commit
1e6277595d
  1. 119
      Source/stores.cpp

119
Source/stores.cpp

@ -348,6 +348,32 @@ bool StoreAutoPlace(Item &item, bool persistItem)
return AutoPlaceItemInInventory(player, item, persistItem);
}
void ScrollVendorStore(Item *itemData, int storeLimit, int idx, int selling = true)
{
ClearSText(5, 21);
stextup = 5;
for (int l = 5; l < 20 && idx < storeLimit; l += 4) {
const Item &item = itemData[idx];
if (!item.isEmpty()) {
UiFlags itemColor = item.getTextColorWithStatCheck();
AddSText(20, l, item.getName(), itemColor, true, item._iCurs, true);
AddSTextVal(l, item._iIdentified ? item._iIvalue : item._ivalue);
PrintStoreItem(item, l + 1, itemColor, true);
stextdown = l;
} else {
l -= 4;
}
idx++;
}
if (selling) {
if (stextsel != -1 && !stext[stextsel].isSelectable() && stextsel != BackButtonLine())
stextsel = stextdown;
} else {
stextsmax = std::max(storeLimit - 4, 0);
}
}
void StartSmith()
{
stextsize = false;
@ -367,22 +393,7 @@ void StartSmith()
void ScrollSmithBuy(int idx)
{
ClearSText(5, 21);
stextup = 5;
for (int l = 5; l < 20; l += 4) {
if (!smithitem[idx].isEmpty()) {
UiFlags itemColor = smithitem[idx].getTextColorWithStatCheck();
AddSText(20, l, smithitem[idx].getName(), itemColor, true, smithitem[idx]._iCurs, true);
AddSTextVal(l, smithitem[idx]._iIvalue);
PrintStoreItem(smithitem[idx], l + 1, itemColor, true);
stextdown = l;
idx++;
}
}
if (stextsel != -1 && !stext[stextsel].isSelectable() && stextsel != BackButtonLine())
stextsel = stextdown;
ScrollVendorStore(smithitem, std::size(smithitem), idx);
}
uint32_t TotalPlayerGold()
@ -422,29 +433,13 @@ void StartSmithBuy()
void ScrollSmithPremiumBuy(int boughtitems)
{
ClearSText(5, 21);
stextup = 5;
int idx = 0;
for (; boughtitems != 0; idx++) {
if (!premiumitems[idx].isEmpty())
boughtitems--;
}
for (int l = 5; l < 20 && idx < SMITH_PREMIUM_ITEMS; l += 4) {
if (!premiumitems[idx].isEmpty()) {
UiFlags itemColor = premiumitems[idx].getTextColorWithStatCheck();
AddSText(20, l, premiumitems[idx].getName(), itemColor, true, premiumitems[idx]._iCurs, true);
AddSTextVal(l, premiumitems[idx]._iIvalue);
PrintStoreItem(premiumitems[idx], l + 1, itemColor, true);
stextdown = l;
} else {
l -= 4;
}
idx++;
}
if (stextsel != -1 && !stext[stextsel].isSelectable() && stextsel != BackButtonLine())
stextsel = stextdown;
ScrollVendorStore(premiumitems, std::size(premiumitems), idx);
}
bool StartSmithPremiumBuy()
@ -511,30 +506,7 @@ bool SmithSellOk(int i)
void ScrollSmithSell(int idx)
{
ClearSText(5, 21);
stextup = 5;
for (int l = 5; l < 20; l += 4) {
if (idx >= storenumh)
break;
if (!storehold[idx].isEmpty()) {
UiFlags itemColor = storehold[idx].getTextColorWithStatCheck();
if (storehold[idx]._iMagical != ITEM_QUALITY_NORMAL && storehold[idx]._iIdentified) {
AddSText(20, l, storehold[idx].getName(), itemColor, true, storehold[idx]._iCurs, true);
AddSTextVal(l, storehold[idx]._iIvalue);
} else {
AddSText(20, l, storehold[idx].getName(), itemColor, true, storehold[idx]._iCurs, true);
AddSTextVal(l, storehold[idx]._ivalue);
}
PrintStoreItem(storehold[idx], l + 1, itemColor, true);
stextdown = l;
}
idx++;
}
stextsmax = std::max(storenumh - 4, 0);
ScrollVendorStore(storehold, storenumh, idx, false);
}
void StartSmithSell()
@ -714,22 +686,7 @@ void StartWitch()
void ScrollWitchBuy(int idx)
{
ClearSText(5, 21);
stextup = 5;
for (int l = 5; l < 20; l += 4) {
if (!witchitem[idx].isEmpty()) {
UiFlags itemColor = witchitem[idx].getTextColorWithStatCheck();
AddSText(20, l, witchitem[idx].getName(), itemColor, true, witchitem[idx]._iCurs, true);
AddSTextVal(l, witchitem[idx]._iIvalue);
PrintStoreItem(witchitem[idx], l + 1, itemColor, true);
stextdown = l;
idx++;
}
}
if (stextsel != -1 && !stext[stextsel].isSelectable() && stextsel != BackButtonLine())
stextsel = stextdown;
ScrollVendorStore(witchitem, std::size(witchitem), idx);
}
void WitchBookLevel(Item &bookItem)
@ -1078,21 +1035,7 @@ void StartHealer()
void ScrollHealerBuy(int idx)
{
ClearSText(5, 21);
stextup = 5;
for (int l = 5; l < 20; l += 4) {
if (!healitem[idx].isEmpty()) {
UiFlags itemColor = healitem[idx].getTextColorWithStatCheck();
AddSText(20, l, healitem[idx].getName(), itemColor, true, healitem[idx]._iCurs, true);
AddSTextVal(l, healitem[idx]._iIvalue);
PrintStoreItem(healitem[idx], l + 1, itemColor, true);
stextdown = l;
idx++;
}
}
if (stextsel != -1 && !stext[stextsel].isSelectable() && stextsel != BackButtonLine())
stextsel = stextdown;
ScrollVendorStore(healitem, std::size(healitem), idx);
}
void StartHealerBuy()

Loading…
Cancel
Save