diff options
Diffstat (limited to 'src/server/game/Entities/Item')
| -rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.cpp | 14 | ||||
| -rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.h | 4 |
2 files changed, 13 insertions, 5 deletions
diff --git a/src/server/game/Entities/Item/ItemTemplate.cpp b/src/server/game/Entities/Item/ItemTemplate.cpp index 77848112014..d76985b269d 100644 --- a/src/server/game/Entities/Item/ItemTemplate.cpp +++ b/src/server/game/Entities/Item/ItemTemplate.cpp @@ -212,9 +212,11 @@ void ItemTemplate::GetDamage(uint32 itemLevel, float& minDamage, float& maxDamag maxDamage = floor(float(avgDamage * (GetStatScalingFactor() * 0.5f + 1.0f) + 0.5f)); } -bool ItemTemplate::IsUsableBySpecialization(Player const* player) const +bool ItemTemplate::IsUsableByLootSpecialization(Player const* player) const { - uint32 spec = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID); + uint32 spec = player->GetUInt32Value(PLAYER_FIELD_LOOT_SPEC_ID); + if (!spec) + spec = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID); if (!spec) spec = player->GetDefaultSpecId(); @@ -222,7 +224,13 @@ bool ItemTemplate::IsUsableBySpecialization(Player const* player) const if (!chrSpecialization) return false; - return Specializations[player->getLevel() > 40].test(CalculateItemSpecBit(chrSpecialization)); + std::size_t levelIndex = 0; + if (player->getLevel() >= 110) + levelIndex = 2; + else if (player->getLevel() > 40) + levelIndex = 1; + + return Specializations[levelIndex].test(CalculateItemSpecBit(chrSpecialization)); } std::size_t ItemTemplate::CalculateItemSpecBit(ChrSpecializationEntry const* spec) diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index fb08248e4d3..5b997200758 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -776,7 +776,7 @@ struct TC_GAME_API ItemTemplate uint32 MaxMoneyLoot; uint32 FlagsCu; float SpellPPMRate; - std::bitset<MAX_CLASSES * MAX_SPECIALIZATIONS> Specializations[2]; // one set for 1-40 level range and another for 41-100 + std::bitset<MAX_CLASSES * MAX_SPECIALIZATIONS> Specializations[3]; // one set for 1-40 level range and another for 41-109 and one for 110 uint32 ItemSpecClassMask; // helpers @@ -807,7 +807,7 @@ struct TC_GAME_API ItemTemplate char const* GetDefaultLocaleName() const; uint32 GetArmor(uint32 itemLevel) const; void GetDamage(uint32 itemLevel, float& minDamage, float& maxDamage) const; - bool IsUsableBySpecialization(Player const* player) const; + bool IsUsableByLootSpecialization(Player const* player) const; static std::size_t CalculateItemSpecBit(ChrSpecializationEntry const* spec); }; |
