aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/DataStores/DBCStructure.h2
-rwxr-xr-xsrc/server/game/Entities/Item/Item.cpp8
-rwxr-xr-xsrc/server/game/Entities/Item/Item.h5
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp13
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;
}