aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Item
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-09-07 20:59:50 +0200
committerShauren <shauren.trinity@gmail.com>2020-09-07 20:59:50 +0200
commitdd21e7ff404aed1d449b09db2b7fcbe2be8536c3 (patch)
treef51435ee96abc57792a5bb4ff10f453d73b49a58 /src/server/game/Entities/Item
parent3d4910d6baabb6e43c93b2b18012cac23cda774f (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.h2
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.cpp29
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.h1
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);