diff options
-rw-r--r-- | sql/updates/world/master/2017_07_02_01_world.sql | 3 | ||||
-rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 5 |
5 files changed, 14 insertions, 3 deletions
diff --git a/sql/updates/world/master/2017_07_02_01_world.sql b/sql/updates/world/master/2017_07_02_01_world.sql new file mode 100644 index 00000000000..af8200f7007 --- /dev/null +++ b/sql/updates/world/master/2017_07_02_01_world.sql @@ -0,0 +1,3 @@ + UPDATE `quest_template` SET `RewardChoiceItemID1`=0, `RewardChoiceItemQuantity1`=0, `RewardChoiceItemID2`=0, `RewardChoiceItemQuantity2`=0 WHERE `ID`=26799; + UPDATE `quest_template` SET `RewardChoiceItemID1`=0, `RewardChoiceItemQuantity1`=0, `RewardChoiceItemID2`=0, `RewardChoiceItemQuantity2`=0, `RewardChoiceItemID3`=0, `RewardChoiceItemQuantity3`=0 WHERE `ID`=26800; +
\ No newline at end of file diff --git a/src/server/game/Entities/Item/ItemTemplate.cpp b/src/server/game/Entities/Item/ItemTemplate.cpp index f418640c9af..62ecabb6529 100644 --- a/src/server/game/Entities/Item/ItemTemplate.cpp +++ b/src/server/game/Entities/Item/ItemTemplate.cpp @@ -212,8 +212,11 @@ void ItemTemplate::GetDamage(uint32 itemLevel, float& minDamage, float& maxDamag maxDamage = floor(float(avgDamage * (GetStatScalingFactor() * 0.5f + 1.0f) + 0.5f)); } -bool ItemTemplate::IsUsableByLootSpecialization(Player const* player) const +bool ItemTemplate::IsUsableByLootSpecialization(Player const* player, bool alwaysAllowBoundToAccount) const { + if (GetFlags() & ITEM_FLAG_IS_BOUND_TO_ACCOUNT && alwaysAllowBoundToAccount) + return true; + uint32 spec = player->GetUInt32Value(PLAYER_FIELD_LOOT_SPEC_ID); if (!spec) spec = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID); diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index 3babccc4163..7395842cce5 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -803,7 +803,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 IsUsableByLootSpecialization(Player const* player) const; + bool IsUsableByLootSpecialization(Player const* player, bool alwaysAllowBoundToAccount) const; static std::size_t CalculateItemSpecBit(ChrSpecializationEntry const* spec); }; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 00492b56f50..3fbf3f4f4f6 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15103,7 +15103,7 @@ bool Player::CanSelectQuestPackageItem(QuestPackageItemEntry const* questPackage switch (questPackageItem->FilterType) { case QUEST_PACKAGE_FILTER_LOOT_SPECIALIZATION: - return rewardProto->IsUsableByLootSpecialization(this); + return rewardProto->IsUsableByLootSpecialization(this, true); case QUEST_PACKAGE_FILTER_CLASS: return !rewardProto->ItemSpecClassMask || (rewardProto->ItemSpecClassMask & getClassMask()) != 0; case QUEST_PACKAGE_FILTER_EVERYONE: diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 8d8673d3290..9acb9f6b5de 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -2902,6 +2902,11 @@ void ObjectMgr::LoadItemTemplates() } } + // Items that have no specializations set can be used by everyone + for (auto& specs : itemTemplate.Specializations) + if (specs.count() == 0) + specs.set(); + ++sparseCount; } |