Browse Source

Tidy up code dealing with temporary arrays

pull/4599/head
ephphatha 4 years ago committed by Anders Jenbo
parent
commit
fc2a158a8f
  1. 63
      Source/items.cpp

63
Source/items.cpp

@ -1311,10 +1311,10 @@ int RndUItem(Monster *monster)
if (monster != nullptr && (monster->data().treasure & T_UNIQ) != 0 && !gbIsMultiplayer)
return -((monster->data().treasure & T_MASK) + 1);
int ril[512];
static std::array<int, 512> ril;
int curlv = ItemsGetCurrlevel();
int ri = 0;
size_t ri = 0;
for (int i = 0; AllItemsList[i].iLoc != ILOC_INVALID; i++) {
if (!IsItemAvailable(i))
continue;
@ -1339,13 +1339,13 @@ int RndUItem(Monster *monster)
okflag = false;
if (AllItemsList[i].iSpell == SPL_HEALOTHER && !gbIsMultiplayer)
okflag = false;
if (okflag && ri < 512) {
if (okflag && ri < ril.size()) {
ril[ri] = i;
ri++;
}
}
return ril[GenerateRnd(ri)];
return ril[GenerateRnd(static_cast<int>(ri))];
}
int RndAllItems()
@ -1353,32 +1353,30 @@ int RndAllItems()
if (GenerateRnd(100) > 25)
return IDI_GOLD;
int ril[512];
static std::array<int, 512> ril;
int curlv = ItemsGetCurrlevel();
int ri = 0;
size_t ri = 0;
for (int i = 0; AllItemsList[i].iLoc != ILOC_INVALID; i++) {
if (!IsItemAvailable(i))
continue;
if (IsAnyOf(AllItemsList[i].iSpell, SPL_RESURRECT, SPL_HEALOTHER) && !gbIsMultiplayer)
continue;
if (AllItemsList[i].iRnd != IDROP_NEVER && 2 * curlv >= AllItemsList[i].iMinMLvl && ri < 512) {
if (AllItemsList[i].iRnd != IDROP_NEVER && 2 * curlv >= AllItemsList[i].iMinMLvl && ri < ril.size()) {
ril[ri] = i;
ri++;
}
if (AllItemsList[i].iSpell == SPL_RESURRECT && !gbIsMultiplayer)
ri--;
if (AllItemsList[i].iSpell == SPL_HEALOTHER && !gbIsMultiplayer)
ri--;
}
return ril[GenerateRnd(ri)];
return ril[GenerateRnd(static_cast<int>(ri))];
}
int RndTypeItems(ItemType itemType, int imid, int lvl)
{
int ril[512];
static std::array<int, 512> ril;
int ri = 0;
size_t ri = 0;
for (int i = 0; AllItemsList[i].iLoc != ILOC_INVALID; i++) {
if (!IsItemAvailable(i))
continue;
@ -1392,13 +1390,13 @@ int RndTypeItems(ItemType itemType, int imid, int lvl)
okflag = false;
if (imid != -1 && AllItemsList[i].iMiscId != imid)
okflag = false;
if (okflag && ri < 512) {
if (okflag && ri < ril.size()) {
ril[ri] = i;
ri++;
}
}
return ril[GenerateRnd(ri)];
return ril[GenerateRnd(static_cast<int>(ri))];
}
_unique_items CheckUnique(Item &item, int lvl, int uper, bool recreate)
@ -1545,7 +1543,7 @@ void SetupAllUseful(Item &item, int iseed, int lvl)
switch (idx) {
case 0:
idx = IDI_PORTAL;
if ((lvl <= 1))
if (lvl <= 1)
idx = IDI_HEAL;
break;
case 1:
@ -1554,7 +1552,7 @@ void SetupAllUseful(Item &item, int iseed, int lvl)
break;
case 3:
idx = IDI_PORTAL;
if ((lvl <= 1))
if (lvl <= 1)
idx = IDI_MANA;
break;
case 4:
@ -1875,9 +1873,9 @@ bool SmithItemOk(const Player &player, int i)
template <bool (*Ok)(const Player &, int), bool ConsiderDropRate = false>
int RndVendorItem(const Player &player, int minlvl, int maxlvl)
{
int ril[512];
static std::array<int, 512> ril;
int ri = 0;
size_t ri = 0;
for (int i = 1; AllItemsList[i].iLoc != ILOC_INVALID; i++) {
if (!IsItemAvailable(i))
continue;
@ -1890,7 +1888,7 @@ int RndVendorItem(const Player &player, int minlvl, int maxlvl)
ril[ri] = i;
ri++;
if (ri == 512)
if (ri >= ril.size())
break;
if (!ConsiderDropRate || AllItemsList[i].iRnd != IDROP_DOUBLE)
@ -1898,11 +1896,11 @@ int RndVendorItem(const Player &player, int minlvl, int maxlvl)
ril[ri] = i;
ri++;
if (ri == 512)
if (ri >= ril.size())
break;
}
return ril[GenerateRnd(ri)] + 1;
return ril[GenerateRnd(static_cast<int>(ri))] + 1;
}
int RndSmithItem(const Player &player, int lvl)
@ -2234,20 +2232,20 @@ int RndItemForMonsterLevel(int8_t monsterLevel)
if (GenerateRnd(100) > 25)
return IDI_GOLD + 1;
int ril[512];
static std::array<int, 512> ril;
int ri = 0;
size_t ri = 0;
for (int i = 0; AllItemsList[i].iLoc != ILOC_INVALID; i++) {
if (!IsItemAvailable(i))
continue;
if (AllItemsList[i].iRnd == IDROP_DOUBLE && monsterLevel >= AllItemsList[i].iMinMLvl
&& ri < 512) {
&& ri < ril.size()) {
ril[ri] = i;
ri++;
}
if (AllItemsList[i].iRnd != IDROP_NEVER && monsterLevel >= AllItemsList[i].iMinMLvl
&& ri < 512) {
&& ri < ril.size()) {
ril[ri] = i;
ri++;
}
@ -2257,7 +2255,7 @@ int RndItemForMonsterLevel(int8_t monsterLevel)
ri--;
}
int r = GenerateRnd(ri);
int r = GenerateRnd(static_cast<int>(ri));
return ril[r] + 1;
}
@ -3068,7 +3066,7 @@ void SpawnItem(Monster &monster, Point position, bool sendmsg)
if (monster.isUnique() || ((monster.data().treasure & T_UNIQ) != 0 && gbIsMultiplayer)) {
idx = RndUItem(&monster);
if (idx < 0) {
SpawnUnique((_unique_items) - (idx + 1), position);
SpawnUnique(static_cast<_unique_items>(-(idx + 1)), position);
return;
}
onlygood = true;
@ -3080,7 +3078,7 @@ void SpawnItem(Monster &monster, Point position, bool sendmsg)
idx--;
onlygood = false;
} else {
SpawnUnique((_unique_items) - (idx + 1), position);
SpawnUnique(static_cast<_unique_items>(-(idx + 1)), position);
return;
}
} else {
@ -4456,9 +4454,6 @@ std::string DebugSpawnUniqueItem(std::string itemName)
if (ActiveItemCount >= MAXITEMS)
return "No space to generate the item!";
const int max_time = 3000;
const int max_iter = 1000000;
std::transform(itemName.begin(), itemName.end(), itemName.begin(), [](unsigned char c) { return std::tolower(c); });
UniqueItem uniqueItem;
bool foundUnique = false;
@ -4495,9 +4490,11 @@ std::string DebugSpawnUniqueItem(std::string itemName)
int i = 0;
for (uint32_t begin = SDL_GetTicks();; i++) {
constexpr int max_time = 3000;
if (SDL_GetTicks() - begin > max_time)
return StrCat("Item not found in ", max_time / 1000, " seconds!");
constexpr int max_iter = 1000000;
if (i > max_iter)
return StrCat("Item not found in ", max_iter, " tries!");

Loading…
Cancel
Save