diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.h | 3 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 2 |
3 files changed, 12 insertions, 4 deletions
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index b7217457718..7fa8e9e5e6e 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -1738,12 +1738,17 @@ void Item::ItemContainerDeleteLootMoneyAndLootItemsFromDB() uint32 Item::GetItemLevel() const { + ItemTemplate const* stats = GetTemplate(); + if (!stats) + return MIN_ITEM_LEVEL; + + uint32 itemLevel = stats->GetBaseItemLevel(); if (Player const* owner = GetOwner()) - if (ScalingStatDistributionEntry const* ssd = sScalingStatDistributionStore.LookupEntry(GetTemplate()->GetScalingStatDistribution())) + if (ScalingStatDistributionEntry const* ssd = sScalingStatDistributionStore.LookupEntry(stats->GetScalingStatDistribution())) if (uint32 heirloomIlvl = GetHeirloomItemLevel(ssd->ItemLevelCurveID, owner->getLevel())) - return heirloomIlvl + _bonusData.ItemLevel; + itemLevel = heirloomIlvl; - return GetTemplate()->GetBaseItemLevel() + _bonusData.ItemLevel; + return std::min(std::max(itemLevel + _bonusData.ItemLevel, uint32(MIN_ITEM_LEVEL)), uint32(MAX_ITEM_LEVEL)); } int32 Item::GetItemStatValue(uint32 index) const diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index 9a35182885e..8f88feec644 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -587,6 +587,9 @@ struct ItemEffect #pragma pack(pop) +#define MIN_ITEM_LEVEL 1 +#define MAX_ITEM_LEVEL 1000 + struct ItemTemplate { ItemEntry const* BasicData; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 7f04e1aa101..1487e934f24 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -17547,7 +17547,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff) Field* fields = result->Fetch(); if (Item* item = _LoadItem(trans, zoneId, timeDiff, fields)) { - ObjectGuid bagGuid = fields[14].GetUInt64() ? ObjectGuid::Create<HighGuid::Item>(fields[15].GetUInt64()) : ObjectGuid::Empty; + ObjectGuid bagGuid = fields[15].GetUInt64() ? ObjectGuid::Create<HighGuid::Item>(fields[15].GetUInt64()) : ObjectGuid::Empty; uint8 slot = fields[16].GetUInt8(); uint8 err = EQUIP_ERR_OK; |