aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-07-02 16:30:02 +0200
committerShauren <shauren.trinity@gmail.com>2017-07-02 16:30:02 +0200
commit71a4021f4df34804a667e503eb2bad6dbd1491d2 (patch)
tree03e2f10534aff450174d653887a1b051a179a0e8
parent4e6ca8c21b62cc0f0d9d0fa88ede0b886fdc17d2 (diff)
Core/Quests: Fixed selecting quest package rewards
* Also revert 7e9a0414708ed1f9373c4c0e87ade501d3f7bc98
-rw-r--r--sql/updates/world/master/2017_07_02_01_world.sql3
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.cpp5
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp5
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;
}