diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DataStores/DBCStructure.h | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/Item/Item.cpp | 8 | ||||
-rwxr-xr-x | src/server/game/Entities/Item/Item.h | 5 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 13 |
4 files changed, 14 insertions, 14 deletions
diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index 948647dd6ab..1ca295fd7ba 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -1288,7 +1288,7 @@ struct ItemDisenchantLootEntry { uint32 Id; uint32 ItemClass; - int32 Unk; + int32 ItemSubClass; uint32 ItemQuality; uint32 MinItemLevel; uint32 MaxItemLevel; diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 12c6861bb47..fc8bcf0cbae 100755 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -1319,9 +1319,8 @@ bool Item::HasStats() const } // used by mail items, transmog cost, stationeryinfo and others -uint32 Item::GetSellPrice(bool& normalSellPrice) const +uint32 Item::GetSellPrice(ItemTemplate const* proto, bool& normalSellPrice) { - ItemTemplate const* proto = GetTemplate(); normalSellPrice = true; if (proto->Flags2 & ITEM_FLAGS_EXTRA_HAS_NORMAL_PRICE) @@ -1444,9 +1443,8 @@ uint32 Item::GetSellPrice(bool& normalSellPrice) const } } -uint32 Item::GetSpecialPrice(uint32 minimumPrice) const +uint32 Item::GetSpecialPrice(ItemTemplate const* proto, uint32 minimumPrice /*= 10000*/) { - ItemTemplate const* proto = GetTemplate(); uint32 cost = 0; if (proto->Flags2 & ITEM_FLAGS_EXTRA_HAS_NORMAL_PRICE) @@ -1454,7 +1452,7 @@ uint32 Item::GetSpecialPrice(uint32 minimumPrice) const else { bool normalPrice; - cost = GetSellPrice(normalPrice); + cost = Item::GetSellPrice(proto, normalPrice); if (!normalPrice) { diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index 0ae4ddac31e..f8d5428e6e8 100755 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -349,7 +349,8 @@ class Item : public Object bool CanBeTransmogrified() const; bool CanTransmogrify() const; static bool CanTransmogrifyItemWithItem(Item const* transmogrified, Item const* transmogrifier); - uint32 GetSpecialPrice(uint32 minimumPrice = 10000) const; + static uint32 GetSpecialPrice(ItemTemplate const* proto, uint32 minimumPrice = 10000); + uint32 GetSpecialPrice(uint32 minimumPrice = 10000) const { return Item::GetSpecialPrice(GetTemplate(), minimumPrice); } uint32 GetVisibleEntry() const { @@ -358,7 +359,7 @@ class Item : public Object return GetEntry(); } - uint32 GetSellPrice(bool& success) const; + static uint32 GetSellPrice(ItemTemplate const* proto, bool& success); int32 GetReforgableStat(ItemModType statType) const; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index e83be462285..2317d89ae24 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -2213,7 +2213,9 @@ void FillDisenchantFields(uint32* disenchantID, uint32* requiredDisenchantSkill, if ((itemTemplate.Flags & (ITEM_PROTO_FLAG_CONJURED | ITEM_PROTO_FLAG_UNK6)) || itemTemplate.Bonding == BIND_QUEST_ITEM || itemTemplate.Area || itemTemplate.Map || itemTemplate.Stackable > 1 || - !(itemTemplate.SellPrice || sItemCurrencyCostStore.LookupEntry(itemTemplate.ItemId))) + itemTemplate.Quality < ITEM_QUALITY_UNCOMMON || itemTemplate.Quality > ITEM_QUALITY_EPIC || + !(itemTemplate.Class == ITEM_CLASS_ARMOR || itemTemplate.Class == ITEM_CLASS_WEAPON) || + !(Item::GetSpecialPrice(&itemTemplate) || sItemCurrencyCostStore.LookupEntry(itemTemplate.ItemId))) return; for (uint32 i = 0; i < sItemDisenchantLootStore.GetNumRows(); ++i) @@ -2227,15 +2229,14 @@ void FillDisenchantFields(uint32* disenchantID, uint32* requiredDisenchantSkill, disenchant->MinItemLevel <= itemTemplate.ItemLevel && disenchant->MaxItemLevel >= itemTemplate.ItemLevel) { - // extra check for epics in range 90 - 99 - if (disenchant->MinItemLevel < 90) + if (disenchant->Id == 60 || disenchant->Id == 61) // epic item disenchant ilvl range 66-99 (classic) { if (itemTemplate.RequiredLevel > 60 || itemTemplate.RequiredSkillRank > 300) - continue; + continue; // skip to epic item disenchant ilvl range 90-199 (TBC) } - else + else if (disenchant->Id == 66 || disenchant->Id == 67) // epic item disenchant ilvl range 90-199 (TBC) { - if (itemTemplate.RequiredLevel <= 60 || itemTemplate.RequiredSkillRank <= 300) + if (itemTemplate.RequiredLevel <= 60 || (itemTemplate.RequiredSkill && itemTemplate.RequiredSkillRank <= 300)) continue; } |