diff options
-rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.cpp | 60 | ||||
-rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.h | 3 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 11 |
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) |