diff options
| author | Shauren <shauren.trinity@gmail.com> | 2020-09-07 20:59:50 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2020-09-07 20:59:50 +0200 |
| commit | dd21e7ff404aed1d449b09db2b7fcbe2be8536c3 (patch) | |
| tree | f51435ee96abc57792a5bb4ff10f453d73b49a58 /src/server/game/Entities/Item | |
| parent | 3d4910d6baabb6e43c93b2b18012cac23cda774f (diff) | |
Core/Spells: Implemented using base weapon damage in spell attack power formulas
Diffstat (limited to 'src/server/game/Entities/Item')
| -rw-r--r-- | src/server/game/Entities/Item/Item.h | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.cpp | 29 | ||||
| -rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.h | 1 |
3 files changed, 18 insertions, 14 deletions
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index 9861459f114..7aa3e3327da 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -331,8 +331,6 @@ class TC_GAME_API Item : public Object SocketColor GetSocketColor(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_SOCKETS); return SocketColor(_bonusData.SocketColor[index]); } uint32 GetAppearanceModId() const { return m_itemData->ItemAppearanceModID; } void SetAppearanceModId(uint32 appearanceModId) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ItemAppearanceModID), appearanceModId); } - 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(Player const* owner) const; ItemModifiedAppearanceEntry const* GetItemModifiedAppearance() const; float GetRepairCostMultiplier() const { return _bonusData.RepairCostMultiplier; } diff --git a/src/server/game/Entities/Item/ItemTemplate.cpp b/src/server/game/Entities/Item/ItemTemplate.cpp index b43ff8d31c8..78b4dbe0ea7 100644 --- a/src/server/game/Entities/Item/ItemTemplate.cpp +++ b/src/server/game/Entities/Item/ItemTemplate.cpp @@ -175,16 +175,11 @@ uint32 ItemTemplate::GetArmor(uint32 itemLevel) const return uint32(shield->Quality[quality] + 0.5f); } -void ItemTemplate::GetDamage(uint32 itemLevel, float& minDamage, float& maxDamage) const +float ItemTemplate::GetDPS(uint32 itemLevel) const { - minDamage = maxDamage = 0.0f; uint32 quality = ItemQualities(GetQuality()) != ITEM_QUALITY_HEIRLOOM ? ItemQualities(GetQuality()) : ITEM_QUALITY_RARE; if (GetClass() != ITEM_CLASS_WEAPON || quality > ITEM_QUALITY_ARTIFACT) - return; - - // get the right store here - if (GetInventoryType() > INVTYPE_RANGEDRIGHT) - return; + return 0.0f; float dps = 0.0f; switch (GetInventoryType()) @@ -215,7 +210,7 @@ void ItemTemplate::GetDamage(uint32 itemLevel, float& minDamage, float& maxDamag dps = sItemDamageTwoHandStore.AssertEntry(itemLevel)->Quality[quality]; break; default: - return; + break; } break; case INVTYPE_WEAPON: @@ -227,12 +222,22 @@ void ItemTemplate::GetDamage(uint32 itemLevel, float& minDamage, float& maxDamag dps = sItemDamageOneHandStore.AssertEntry(itemLevel)->Quality[quality]; break; default: - return; + break; } - float avgDamage = dps * GetDelay() * 0.001f; - minDamage = (GetDmgVariance() * -0.5f + 1.0f) * avgDamage; - maxDamage = floor(float(avgDamage * (GetDmgVariance() * 0.5f + 1.0f) + 0.5f)); + return dps; +} + +void ItemTemplate::GetDamage(uint32 itemLevel, float& minDamage, float& maxDamage) const +{ + minDamage = maxDamage = 0.0f; + float dps = GetDPS(itemLevel); + if (dps > 0.0f) + { + float avgDamage = dps * GetDelay() * 0.001f; + minDamage = (GetDmgVariance() * -0.5f + 1.0f) * avgDamage; + maxDamage = floor(float(avgDamage * (GetDmgVariance() * 0.5f + 1.0f) + 0.5f)); + } } bool ItemTemplate::IsUsableByLootSpecialization(Player const* player, bool alwaysAllowBoundToAccount) const diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index b1c522d5860..86ddaea9e41 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -826,6 +826,7 @@ struct TC_GAME_API ItemTemplate 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; static std::size_t CalculateItemSpecBit(ChrSpecializationEntry const* spec); |
