aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-11-30 21:17:15 +0100
committerShauren <shauren.trinity@gmail.com>2016-11-30 21:17:15 +0100
commit2c5474e319da0a24b704c1a3521be4876d7a4da3 (patch)
tree51d3e025d55c2d577849b5a2847a99cdbef47131 /src
parent9b006e511bf40020e1660adf290ceb6ed6f4fd86 (diff)
Core/Items: Implemented new 7.1 ItemSpec rule - PrimaryStat can now be set to ITEM_SPEC_STAT_NONE
Closes #18360 Closes #18357 Closes #18358 Closes #18359
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp61
2 files changed, 33 insertions, 30 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index c88f7933704..a6e526a1984 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -14873,7 +14873,7 @@ bool Player::CanSelectQuestPackageItem(QuestPackageItemEntry const* questPackage
case QUEST_PACKAGE_FILTER_LOOT_SPECIALIZATION:
return rewardProto->IsUsableByLootSpecialization(this);
case QUEST_PACKAGE_FILTER_CLASS:
- return (rewardProto->ItemSpecClassMask & getClassMask()) != 0;
+ return !rewardProto->ItemSpecClassMask || (rewardProto->ItemSpecClassMask & getClassMask()) != 0;
case QUEST_PACKAGE_FILTER_EVERYONE:
return true;
default:
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 9d026296724..94f64519292 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -2617,6 +2617,7 @@ struct ItemSpecStats
}
else if (item->Class == ITEM_CLASS_GEM)
{
+ ItemType = 7;
if (GemPropertiesEntry const* gem = sGemPropertiesStore.LookupEntry(sparse->GemProperties))
{
if (gem->Type & SOCKET_COLOR_RELIC_IRON)
@@ -2747,47 +2748,49 @@ void ObjectMgr::LoadItemTemplates()
if (std::vector<ItemSpecOverrideEntry const*> const* itemSpecOverrides = sDB2Manager.GetItemSpecOverrides(sparse->ID))
{
for (ItemSpecOverrideEntry const* itemSpecOverride : *itemSpecOverrides)
+ {
if (ChrSpecializationEntry const* specialization = sChrSpecializationStore.LookupEntry(itemSpecOverride->SpecID))
+ {
+ itemTemplate.ItemSpecClassMask |= 1 << (specialization->ClassID - 1);
itemTemplate.Specializations[0].set(ItemTemplate::CalculateItemSpecBit(specialization));
-
- itemTemplate.Specializations[1] |= itemTemplate.Specializations[0];
+ itemTemplate.Specializations[1] |= itemTemplate.Specializations[0];
+ itemTemplate.Specializations[2] |= itemTemplate.Specializations[0];
+ }
+ }
}
else
{
ItemSpecStats itemSpecStats(db2Data, sparse);
- if (itemSpecStats.ItemSpecStatCount)
+ for (ItemSpecEntry const* itemSpec : sItemSpecStore)
{
- for (ItemSpecEntry const* itemSpec : sItemSpecStore)
- {
- if (itemSpecStats.ItemType != itemSpec->ItemType)
- continue;
+ if (itemSpecStats.ItemType != itemSpec->ItemType)
+ continue;
- bool hasPrimary = false;
- bool hasSecondary = itemSpec->SecondaryStat == ITEM_SPEC_STAT_NONE;
- for (uint32 i = 0; i < itemSpecStats.ItemSpecStatCount; ++i)
- {
- if (itemSpecStats.ItemSpecStatTypes[i] == itemSpec->PrimaryStat)
- hasPrimary = true;
- if (itemSpecStats.ItemSpecStatTypes[i] == itemSpec->SecondaryStat)
- hasSecondary = true;
- }
+ bool hasPrimary = itemSpec->PrimaryStat == ITEM_SPEC_STAT_NONE;
+ bool hasSecondary = itemSpec->SecondaryStat == ITEM_SPEC_STAT_NONE;
+ for (uint32 i = 0; i < itemSpecStats.ItemSpecStatCount; ++i)
+ {
+ if (itemSpecStats.ItemSpecStatTypes[i] == itemSpec->PrimaryStat)
+ hasPrimary = true;
+ if (itemSpecStats.ItemSpecStatTypes[i] == itemSpec->SecondaryStat)
+ hasSecondary = true;
+ }
- if (!hasPrimary || !hasSecondary)
- continue;
+ if (!hasPrimary || !hasSecondary)
+ continue;
- if (ChrSpecializationEntry const* specialization = sChrSpecializationStore.LookupEntry(itemSpec->SpecID))
+ if (ChrSpecializationEntry const* specialization = sChrSpecializationStore.LookupEntry(itemSpec->SpecID))
+ {
+ if ((1 << (specialization->ClassID - 1)) & sparse->AllowableClass)
{
- if ((1 << (specialization->ClassID - 1)) & sparse->AllowableClass)
- {
- itemTemplate.ItemSpecClassMask |= 1 << (specialization->ClassID - 1);
- std::size_t specBit = ItemTemplate::CalculateItemSpecBit(specialization);
- itemTemplate.Specializations[0].set(specBit);
- if (itemSpec->MaxLevel > 40)
- itemTemplate.Specializations[1].set(specBit);
- if (itemSpec->MaxLevel >= 110)
- itemTemplate.Specializations[2].set(specBit);
- }
+ itemTemplate.ItemSpecClassMask |= 1 << (specialization->ClassID - 1);
+ std::size_t specBit = ItemTemplate::CalculateItemSpecBit(specialization);
+ itemTemplate.Specializations[0].set(specBit);
+ if (itemSpec->MaxLevel > 40)
+ itemTemplate.Specializations[1].set(specBit);
+ if (itemSpec->MaxLevel >= 110)
+ itemTemplate.Specializations[2].set(specBit);
}
}
}