Fixed a possible division by zero.
This commit is contained in:
parent
0d6672bf5d
commit
9e9459a367
|
@ -1021,26 +1021,34 @@ cEnchantments cEnchantments::GetRandomEnchantmentFromVector(cWeightedEnchantment
|
|||
|
||||
|
||||
|
||||
cEnchantments cEnchantments::GenerateEnchantmentFromVector(cWeightedEnchantments & a_Enchantments, int a_Seed)
|
||||
cEnchantments cEnchantments::SelectEnchantmentFromVector(const cWeightedEnchantments & a_Enchantments, int a_Seed)
|
||||
{
|
||||
// Sum up all the enchantments' weights:
|
||||
int AllWeights = 0;
|
||||
for (const auto Enchantment : a_Enchantments)
|
||||
{
|
||||
AllWeights += Enchantment.m_Weight;
|
||||
}
|
||||
|
||||
// If there's no weight for any of the enchantments, return an empty enchantment
|
||||
if (AllWeights <= 0)
|
||||
{
|
||||
return cEnchantments();
|
||||
}
|
||||
|
||||
// Pick a random enchantment:
|
||||
cNoise Noise(a_Seed);
|
||||
int RandomNumber = Noise.IntNoise1DInt(AllWeights) / 7 % AllWeights;
|
||||
|
||||
for (const auto Enchantment : a_Enchantments)
|
||||
{
|
||||
RandomNumber -= Enchantment.m_Weight;
|
||||
if (RandomNumber < 0)
|
||||
if (RandomNumber <= 0)
|
||||
{
|
||||
return Enchantment.m_Enchantments;
|
||||
}
|
||||
}
|
||||
|
||||
// No enchantment picked, return an empty one (we probably shouldn't ever get here):
|
||||
return cEnchantments();
|
||||
}
|
||||
|
||||
|
|
|
@ -128,8 +128,10 @@ public:
|
|||
/** Gets random enchantment from Vector and returns it */
|
||||
static cEnchantments GetRandomEnchantmentFromVector(cWeightedEnchantments & a_Enchantments);
|
||||
|
||||
/** Returns an enchantment from a Vector using cNoise. Mostly used for generators.*/
|
||||
static cEnchantments GenerateEnchantmentFromVector(cWeightedEnchantments & a_Enchantments, int a_Seed);
|
||||
/** Selects one enchantment from a Vector using cNoise. Mostly used for generators.
|
||||
Uses the enchantments' weights for the random distribution.
|
||||
If a_Enchantments is empty, returns an empty enchantment. */
|
||||
static cEnchantments SelectEnchantmentFromVector(const cWeightedEnchantments & a_Enchantments, int a_Seed);
|
||||
|
||||
/** Returns true if a_Other doesn't contain exactly the same enchantments and levels */
|
||||
bool operator !=(const cEnchantments & a_Other) const;
|
||||
|
|
|
@ -646,7 +646,7 @@ void cItemGrid::GenerateRandomLootWithBooks(const cLootProbab * a_LootProbabs, s
|
|||
|
||||
for (int j = 0; j <= NumEnchantments; j++)
|
||||
{
|
||||
cEnchantments Enchantment = cEnchantments::GenerateEnchantmentFromVector(Enchantments, Noise.IntNoise2DInt(NumEnchantments, i));
|
||||
cEnchantments Enchantment = cEnchantments::SelectEnchantmentFromVector(Enchantments, Noise.IntNoise2DInt(NumEnchantments, i));
|
||||
CurrentLoot.m_Enchantments.Add(Enchantment);
|
||||
cEnchantments::RemoveEnchantmentWeightFromVector(Enchantments, Enchantment);
|
||||
cEnchantments::CheckEnchantmentConflictsFromVector(Enchantments, Enchantment);
|
||||
|
|
Loading…
Reference in New Issue