aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.cpp60
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.h3
-rw-r--r--src/server/game/Entities/Player/Player.cpp11
3 files changed, 8 insertions, 66 deletions
diff --git a/src/server/game/Entities/Item/ItemTemplate.cpp b/src/server/game/Entities/Item/ItemTemplate.cpp
index 7722087a304..1b58631ed0c 100644
--- a/src/server/game/Entities/Item/ItemTemplate.cpp
+++ b/src/server/game/Entities/Item/ItemTemplate.cpp
@@ -139,66 +139,6 @@ char const* ItemTemplate::GetDefaultLocaleName() const
return ExtendedData->Display[sWorld->GetDefaultDbcLocale()];
}
-uint32 ItemTemplate::GetArmor(uint32 itemLevel) const
-{
- uint32 quality = ItemQualities(GetQuality()) != ITEM_QUALITY_HEIRLOOM ? ItemQualities(GetQuality()) : ITEM_QUALITY_RARE;
- if (quality > ITEM_QUALITY_ARTIFACT)
- return 0;
-
- // all items but shields
- if (GetClass() != ITEM_CLASS_ARMOR || GetSubClass() != ITEM_SUBCLASS_ARMOR_SHIELD)
- {
- ItemArmorQualityEntry const* armorQuality = sItemArmorQualityStore.LookupEntry(itemLevel);
- ItemArmorTotalEntry const* armorTotal = sItemArmorTotalStore.LookupEntry(itemLevel);
- if (!armorQuality || !armorTotal)
- return 0;
-
- uint32 inventoryType = GetInventoryType();
- if (inventoryType == INVTYPE_ROBE)
- inventoryType = INVTYPE_CHEST;
-
- ArmorLocationEntry const* location = sArmorLocationStore.LookupEntry(inventoryType);
- if (!location)
- return 0;
-
- if (GetSubClass() < ITEM_SUBCLASS_ARMOR_CLOTH || GetSubClass() > ITEM_SUBCLASS_ARMOR_PLATE)
- return 0;
-
- float total = 1.0f;
- float locationModifier = 1.0f;
- switch (GetSubClass())
- {
- case ITEM_SUBCLASS_ARMOR_CLOTH:
- total = armorTotal->Cloth;
- locationModifier = location->Clothmodifier;
- break;
- case ITEM_SUBCLASS_ARMOR_LEATHER:
- total = armorTotal->Leather;
- locationModifier = location->Leathermodifier;
- break;
- case ITEM_SUBCLASS_ARMOR_MAIL:
- total = armorTotal->Mail;
- locationModifier = location->Chainmodifier;
- break;
- case ITEM_SUBCLASS_ARMOR_PLATE:
- total = armorTotal->Plate;
- locationModifier = location->Platemodifier;
- break;
- default:
- break;
- }
-
- return uint32(armorQuality->Qualitymod[quality] * total * locationModifier + 0.5f);
- }
-
- // shields
- ItemArmorShieldEntry const* shield = sItemArmorShieldStore.LookupEntry(itemLevel);
- if (!shield)
- return 0;
-
- return uint32(shield->Quality[quality] + 0.5f);
-}
-
float ItemTemplate::GetDPS(uint32 itemLevel) const
{
uint32 quality = ItemQualities(GetQuality()) != ITEM_QUALITY_HEIRLOOM ? ItemQualities(GetQuality()) : ITEM_QUALITY_RARE;
diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h
index 1536cce605f..37f87cc9905 100644
--- a/src/server/game/Entities/Item/ItemTemplate.h
+++ b/src/server/game/Entities/Item/ItemTemplate.h
@@ -823,6 +823,8 @@ struct TC_GAME_API ItemTemplate
float GetDmgVariance() const { return ExtendedData->DmgVariance; }
uint8 GetArtifactID() const { return ExtendedData->ArtifactID; }
uint8 GetRequiredExpansion() const { return ExtendedData->ExpansionID; }
+ int16 GetResistance(SpellSchools school) const { return ExtendedData->Resistances[school]; }
+ int16 GetShieldBlockValue() const { return BasicData->Resistances[SPELL_SCHOOL_NORMAL]; }
uint32 MaxDurability;
std::vector<ItemEffectEntry const*> Effects;
@@ -874,7 +876,6 @@ struct TC_GAME_API ItemTemplate
inline bool HasFlag(ItemFlagsCustom customFlag) const { return (FlagsCu & customFlag) != 0; }
char const* GetDefaultLocaleName() const;
- uint32 GetArmor(uint32 itemLevel) const;
float GetDPS(uint32 itemLevel) const;
void GetDamage(uint32 itemLevel, float& minDamage, float& maxDamage) const;
bool IsUsableByLootSpecialization(Player const* player, bool alwaysAllowBoundToAccount) const;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 7c92af82dd8..bf0919712ab 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -8037,12 +8037,13 @@ void Player::_ApplyItemBonuses(Item* item, uint8 slot, bool apply)
}
}
- if (uint32 armor = proto->GetArmor(itemLevel))
- {
- HandleStatFlatModifier(UNIT_MOD_ARMOR, TOTAL_VALUE, float(armor), apply);
+ for (uint8 i = 0; i < MAX_SPELL_SCHOOL; ++i)
+ if (int16 resistance = proto->GetResistance(SpellSchools(i)))
+ HandleStatFlatModifier(UnitMods(UNIT_MOD_ARMOR + i), BASE_VALUE, float(resistance), apply);
+
+ if (int16 shieldBlockValue = proto->GetShieldBlockValue())
if (proto->GetClass() == ITEM_CLASS_ARMOR && proto->GetSubClass() == ITEM_SUBCLASS_ARMOR_SHIELD)
- SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ShieldBlock), apply ? int32(armor * 2.5f) : 0);
- }
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ShieldBlock), apply ? shieldBlockValue : 0);
WeaponAttackType attType = Player::GetAttackBySlot(slot, proto->GetInventoryType());
if (attType != MAX_ATTACK)