diff options
| author | Shauren <shauren.trinity@gmail.com> | 2016-11-08 00:04:19 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2016-11-08 00:04:19 +0100 |
| commit | fcbb4397ea5c803b5b46bda770606ae7a79e565f (patch) | |
| tree | 07bbcd1f1f45c27503617301e7bc36c68b185f43 /src/server/game/Entities/Item | |
| parent | 0abb9873ec3798b6476400c8d283a6410d9418fe (diff) | |
Core/Quests: Implemented handling all QuestPackageItem types
Closes #18209
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); }; |
