aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Item
diff options
context:
space:
mode:
authorRyan <roc13x@gmail.com>2017-09-15 20:23:41 +0100
committerShauren <shauren.trinity@gmail.com>2017-09-15 21:23:41 +0200
commit115dffde983019acb1f167583b60f0ce1aaa90de (patch)
tree6713a964debd945ef472cdbe86320c330a1e6395 /src/server/game/Entities/Item
parent6eb997394722fcd4b5248646b5abfa185a7ec58f (diff)
Core/Items: Implement ItemLevelSelector.db2 (#20325)
ItemLevelSelector replaced ITEM_BONUS_ITEM_LEVEL_OVERRIDE in 7.2
Diffstat (limited to 'src/server/game/Entities/Item')
-rw-r--r--src/server/game/Entities/Item/Item.cpp32
-rw-r--r--src/server/game/Entities/Item/Item.h2
2 files changed, 10 insertions, 24 deletions
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index 20fc96a2394..abb36054914 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -2170,21 +2170,18 @@ uint32 Item::GetItemLevel(Player const* owner) const
return MIN_ITEM_LEVEL;
uint32 itemLevel = stats->GetBaseItemLevel();
- if (_bonusData.HasItemLevelBonus || !_bonusData.ItemLevelOverride)
+ if (ScalingStatDistributionEntry const* ssd = sScalingStatDistributionStore.LookupEntry(GetScalingStatDistribution()))
{
- if (ScalingStatDistributionEntry const* ssd = sScalingStatDistributionStore.LookupEntry(GetScalingStatDistribution()))
- {
- uint32 level = owner->getLevel();
- if (uint32 fixedLevel = GetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL))
- level = fixedLevel;
- if (uint32 heirloomIlvl = uint32(sDB2Manager.GetCurveValueAt(ssd->ItemLevelCurveID, level)))
- itemLevel = heirloomIlvl;
- }
-
- itemLevel += _bonusData.ItemLevelBonus;
+ uint32 level = owner->getLevel();
+ if (uint32 fixedLevel = GetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL))
+ level = fixedLevel;
+ else
+ level = std::min(std::max(level, ssd->MinLevel), ssd->MaxLevel);
+ if (uint32 heirloomIlvl = uint32(sDB2Manager.GetCurveValueAt(ssd->ItemLevelCurveID, level)))
+ itemLevel = heirloomIlvl;
}
- else
- itemLevel = _bonusData.ItemLevelOverride;
+
+ itemLevel += _bonusData.ItemLevelBonus;
if (ItemUpgradeEntry const* upgrade = sItemUpgradeStore.LookupEntry(GetModifier(ITEM_MODIFIER_UPGRADE_ID)))
itemLevel += upgrade->ItemLevelBonus;
@@ -2509,13 +2506,11 @@ void BonusData::Initialize(ItemTemplate const* proto)
AppearanceModID = 0;
RepairCostMultiplier = 1.0f;
ScalingStatDistribution = proto->GetScalingStatDistribution();
- ItemLevelOverride = 0;
RelicType = -1;
HasItemLevelBonus = false;
_state.AppearanceModPriority = std::numeric_limits<int32>::max();
_state.ScalingStatDistributionPriority = std::numeric_limits<int32>::max();
- _state.ItemLevelOverridePriority = std::numeric_limits<int32>::max();
_state.HasQualityBonus = false;
}
@@ -2599,13 +2594,6 @@ void BonusData::AddBonus(uint32 type, int32 const (&values)[2])
_state.ScalingStatDistributionPriority = values[1];
}
break;
- case ITEM_BONUS_ITEM_LEVEL_OVERRIDE:
- if (values[1] < _state.ItemLevelOverridePriority)
- {
- ItemLevelOverride = static_cast<uint32>(values[0]);
- _state.ItemLevelOverridePriority = values[1];
- }
- break;
case ITEM_BONUS_BONDING:
Bonding = ItemBondingType(values[0]);
break;
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index 84e3e0f200a..b1721ed98a7 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -86,7 +86,6 @@ struct BonusData
uint32 AppearanceModID;
float RepairCostMultiplier;
uint32 ScalingStatDistribution;
- uint32 ItemLevelOverride;
uint32 GemItemLevelBonus[MAX_ITEM_PROTO_SOCKETS];
int32 GemRelicType[MAX_ITEM_PROTO_SOCKETS];
uint16 GemRelicRankBonus[MAX_ITEM_PROTO_SOCKETS];
@@ -102,7 +101,6 @@ private:
{
int32 AppearanceModPriority;
int32 ScalingStatDistributionPriority;
- int32 ItemLevelOverridePriority;
bool HasQualityBonus;
} _state;
};