aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Item
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-11-08 00:04:19 +0100
committerShauren <shauren.trinity@gmail.com>2016-11-08 00:04:19 +0100
commitfcbb4397ea5c803b5b46bda770606ae7a79e565f (patch)
tree07bbcd1f1f45c27503617301e7bc36c68b185f43 /src/server/game/Entities/Item
parent0abb9873ec3798b6476400c8d283a6410d9418fe (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.cpp14
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.h4
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);
};