aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Item/Item.cpp16
-rw-r--r--src/server/game/Entities/Item/Item.h8
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.cpp4
-rw-r--r--src/server/game/Entities/Player/Player.cpp10
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp12
6 files changed, 26 insertions, 26 deletions
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index c66d5e5e076..90bbb1c2278 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -1735,28 +1735,28 @@ void Item::ItemContainerDeleteLootMoneyAndLootItemsFromDB()
ItemContainerDeleteLootItemsFromDB();
}
-uint32 Item::GetItemLevel() const
+uint32 Item::GetItemLevel(Player const* owner) 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(stats->GetScalingStatDistribution()))
- if (uint32 heirloomIlvl = sDB2Manager.GetHeirloomItemLevel(ssd->ItemLevelCurveID, owner->getLevel()))
- itemLevel = heirloomIlvl;
+ if (ScalingStatDistributionEntry const* ssd = sScalingStatDistributionStore.LookupEntry(stats->GetScalingStatDistribution()))
+ if (uint32 heirloomIlvl = sDB2Manager.GetHeirloomItemLevel(ssd->ItemLevelCurveID, owner->getLevel()))
+ itemLevel = heirloomIlvl;
return std::min(std::max(itemLevel + _bonusData.ItemLevel, uint32(MIN_ITEM_LEVEL)), uint32(MAX_ITEM_LEVEL));
}
-int32 Item::GetItemStatValue(uint32 index) const
+int32 Item::GetItemStatValue(uint32 index, Player const* owner) const
{
ASSERT(index < MAX_ITEM_PROTO_STATS);
- if (uint32 randomPropPoints = GetRandomPropertyPoints(GetItemLevel(), GetQuality(), GetTemplate()->GetInventoryType(), GetTemplate()->GetSubClass()))
+ uint32 itemLevel = GetItemLevel(owner);
+ if (uint32 randomPropPoints = GetRandomPropertyPoints(itemLevel, GetQuality(), GetTemplate()->GetInventoryType(), GetTemplate()->GetSubClass()))
{
float statValue = float(_bonusData.ItemStatAllocation[index] * randomPropPoints) * 0.0001f;
- if (GtItemSocketCostPerLevelEntry const* gtCost = sGtItemSocketCostPerLevelStore.EvaluateTable(GetItemLevel() - 1, 0))
+ if (GtItemSocketCostPerLevelEntry const* gtCost = sGtItemSocketCostPerLevelStore.EvaluateTable(itemLevel - 1, 0))
statValue -= float(int32(_bonusData.ItemStatSocketCostMultiplier[index] * gtCost->ratio));
return int32(std::floor(statValue + 0.5f));
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index 810bbdac704..545d402b699 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -375,14 +375,14 @@ class Item : public Object
bool IsConjuredConsumable() const { return GetTemplate()->IsConjuredConsumable(); }
bool IsRangedWeapon() const { return GetTemplate()->IsRangedWeapon(); }
uint32 GetQuality() const { return _bonusData.Quality; }
- uint32 GetItemLevel() const;
+ uint32 GetItemLevel(Player const* owner) const;
int32 GetRequiredLevel() const { return _bonusData.RequiredLevel; }
int32 GetItemStatType(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return _bonusData.ItemStatType[index]; }
- int32 GetItemStatValue(uint32 index) const;
+ int32 GetItemStatValue(uint32 index, Player const* owner) const;
SocketColor GetSocketColor(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_SOCKETS); return SocketColor(_bonusData.SocketColor[index]); }
uint32 GetAppearanceModId() const { return _bonusData.AppearanceModID; }
- uint32 GetArmor() const { return GetTemplate()->GetArmor(GetItemLevel()); }
- void GetDamage(float& minDamage, float& maxDamage) const { GetTemplate()->GetDamage(GetItemLevel(), minDamage, maxDamage); }
+ uint32 GetArmor(Player const* owner) const { return GetTemplate()->GetArmor(GetItemLevel(owner)); }
+ void GetDamage(Player const* owner, float& minDamage, float& maxDamage) const { GetTemplate()->GetDamage(GetItemLevel(owner), minDamage, maxDamage); }
uint32 GetDisplayId() const;
// Item Refund system
diff --git a/src/server/game/Entities/Item/ItemTemplate.cpp b/src/server/game/Entities/Item/ItemTemplate.cpp
index a21a4f1aa3f..bbb923fddf6 100644
--- a/src/server/game/Entities/Item/ItemTemplate.cpp
+++ b/src/server/game/Entities/Item/ItemTemplate.cpp
@@ -37,7 +37,7 @@ char const* ItemTemplate::GetDefaultLocaleName() const
uint32 ItemTemplate::GetArmor(uint32 itemLevel) const
{
- uint32 quality = GetQuality() != ITEM_QUALITY_HEIRLOOM ? GetQuality() : ITEM_QUALITY_RARE;
+ uint32 quality = ItemQualities(GetQuality()) != ITEM_QUALITY_HEIRLOOM ? GetQuality() : ITEM_QUALITY_RARE;
if (quality > ITEM_QUALITY_ARTIFACT)
return 0;
@@ -74,7 +74,7 @@ uint32 ItemTemplate::GetArmor(uint32 itemLevel) const
void ItemTemplate::GetDamage(uint32 itemLevel, float& minDamage, float& maxDamage) const
{
minDamage = maxDamage = 0.0f;
- uint32 quality = GetQuality() != ITEM_QUALITY_HEIRLOOM ? GetQuality() : ITEM_QUALITY_RARE;
+ uint32 quality = ItemQualities(GetQuality()) != ITEM_QUALITY_HEIRLOOM ? GetQuality() : ITEM_QUALITY_RARE;
if (GetClass() != ITEM_CLASS_WEAPON || quality > ITEM_QUALITY_ARTIFACT)
return;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 21e9516bace..3365b1c79dd 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -7634,7 +7634,7 @@ void Player::_ApplyItemBonuses(Item* item, uint8 slot, bool apply)
if (statType == -1)
continue;
- int32 val = item->GetItemStatValue(i);
+ int32 val = item->GetItemStatValue(i, this);
if (val == 0)
continue;
@@ -7800,7 +7800,7 @@ void Player::_ApplyItemBonuses(Item* item, uint8 slot, bool apply)
}
}
- if (uint32 armor = item->GetArmor())
+ if (uint32 armor = item->GetArmor(this))
{
UnitModifierType modType = TOTAL_VALUE;
if (proto->GetClass() == ITEM_CLASS_ARMOR)
@@ -7860,7 +7860,7 @@ void Player::_ApplyWeaponDamage(uint8 slot, Item* item, bool apply)
}
float minDamage, maxDamage;
- item->GetDamage(minDamage, maxDamage);
+ item->GetDamage(this, minDamage, maxDamage);
if (minDamage > 0)
{
@@ -24633,7 +24633,7 @@ void Player::StoreLootItem(uint8 lootSlot, Loot* loot)
--loot->unlootedCount;
if (sObjectMgr->GetItemTemplate(item->itemid))
- if (newitem->GetQuality() > ITEM_QUALITY_EPIC || (newitem->GetQuality() == ITEM_QUALITY_EPIC && newitem->GetItemLevel() >= MinNewsItemLevel[sWorld->getIntConfig(CONFIG_EXPANSION)]))
+ if (newitem->GetQuality() > ITEM_QUALITY_EPIC || (newitem->GetQuality() == ITEM_QUALITY_EPIC && newitem->GetItemLevel(this) >= MinNewsItemLevel[sWorld->getIntConfig(CONFIG_EXPANSION)]))
if (Guild* guild = GetGuild())
guild->AddGuildNews(GUILD_NEWS_ITEM_LOOTED, GetGUID(), 0, item->itemid);
@@ -25975,7 +25975,7 @@ float Player::GetAverageItemLevel()
continue;
if (m_items[i] && m_items[i]->GetTemplate())
- sum += m_items[i]->GetItemLevel();
+ sum += m_items[i]->GetItemLevel(this);
++count;
}
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 3106ac4bc5a..4dcd0e681e9 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -1511,7 +1511,7 @@ void Spell::DoCreateItem(uint32 /*i*/, uint32 itemtype)
// send info to the client
player->SendNewItem(pItem, num_to_add, true, bgType == 0);
- if (pItem->GetQuality() > ITEM_QUALITY_EPIC || (pItem->GetQuality() == ITEM_QUALITY_EPIC && pItem->GetItemLevel() >= MinNewsItemLevel[sWorld->getIntConfig(CONFIG_EXPANSION)]))
+ if (pItem->GetQuality() > ITEM_QUALITY_EPIC || (pItem->GetQuality() == ITEM_QUALITY_EPIC && pItem->GetItemLevel(player) >= MinNewsItemLevel[sWorld->getIntConfig(CONFIG_EXPANSION)]))
if (Guild* guild = player->GetGuild())
guild->AddGuildNews(GUILD_NEWS_ITEM_CRAFTED, player->GetGUID(), 0, pProto->GetId());
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
index 385a208b5ad..a8cad32333b 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
@@ -777,8 +777,8 @@ class instance_ulduar : public InstanceMapScript
if (Player* player = itr->GetSource())
for (uint8 slot = EQUIPMENT_SLOT_MAINHAND; slot <= EQUIPMENT_SLOT_RANGED; ++slot)
if (Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot))
- if (item->GetItemLevel() > _maxWeaponItemLevel)
- _maxWeaponItemLevel = item->GetItemLevel();
+ if (item->GetItemLevel(player) > _maxWeaponItemLevel)
+ _maxWeaponItemLevel = item->GetItemLevel(player);
}
else if (state == IN_PROGRESS)
{
@@ -797,11 +797,11 @@ class instance_ulduar : public InstanceMapScript
{
if (slot >= EQUIPMENT_SLOT_MAINHAND && slot <= EQUIPMENT_SLOT_RANGED)
{
- if (item->GetItemLevel() > _maxWeaponItemLevel)
- _maxWeaponItemLevel = item->GetItemLevel();
+ if (item->GetItemLevel(player) > _maxWeaponItemLevel)
+ _maxWeaponItemLevel = item->GetItemLevel(player);
}
- else if (item->GetItemLevel() > _maxArmorItemLevel)
- _maxArmorItemLevel = item->GetItemLevel();
+ else if (item->GetItemLevel(player) > _maxArmorItemLevel)
+ _maxArmorItemLevel = item->GetItemLevel(player);
}
}
}