Fixes equip bug with random suffix rings (#1757)

* Check item score of rings/trinkets to determine the correct slot to equip

* Early return, removed unecessary if statements, single line statements

Simplify logic for equipping items by reducing nested conditions.
This commit is contained in:
avirar
2025-11-05 09:27:50 +11:00
committed by GitHub
parent 26a135a1ec
commit 80dbd22ba1

View File

@@ -271,19 +271,38 @@ void EquipAction::EquipItem(Item* item)
{
if (equippedItems[1])
{
// Both slots are full - pick the worst item to replace
// Both slots are full - pick the worst item to replace, but only if new item is better
StatsWeightCalculator calc(bot);
calc.SetItemSetBonus(false);
calc.SetOverflowPenalty(false);
float firstItemScore = calc.CalculateItem(equippedItems[0]->GetTemplate()->ItemId);
float secondItemScore = calc.CalculateItem(equippedItems[1]->GetTemplate()->ItemId);
// Calculate new item score with random properties
int32 newItemRandomProp = item->GetItemRandomPropertyId();
float newItemScore = calc.CalculateItem(itemId, newItemRandomProp);
// If the second slot is worse, place the new item there
if (firstItemScore > secondItemScore)
// Calculate equipped items scores with random properties
int32 firstRandomProp = equippedItems[0]->GetItemRandomPropertyId();
int32 secondRandomProp = equippedItems[1]->GetItemRandomPropertyId();
float firstItemScore = calc.CalculateItem(equippedItems[0]->GetTemplate()->ItemId, firstRandomProp);
float secondItemScore = calc.CalculateItem(equippedItems[1]->GetTemplate()->ItemId, secondRandomProp);
// Determine which slot (if any) should be replaced
bool betterThanFirst = newItemScore > firstItemScore;
bool betterThanSecond = newItemScore > secondItemScore;
// Early return if new item is not better than either equipped item
if (!betterThanFirst && !betterThanSecond)
return;
if (betterThanFirst && betterThanSecond)
{
dstSlot++;
// New item is better than both - replace the worse of the two equipped items
if (firstItemScore > secondItemScore)
dstSlot++; // Replace second slot (worse)
// else: keep dstSlot as-is (replace first slot)
}
else if (betterThanSecond)
dstSlot++; // Only better than second slot - replace it
}
else
{