Core/Items: Added more checks determining item disenchanting loot

DB/Loot: Added all disenchant templates
This commit is contained in:
Shauren
2011-11-26 16:36:01 +01:00
parent 711858c43b
commit bbf9703b73
7 changed files with 274 additions and 24 deletions
@@ -0,0 +1,225 @@
SET @LESSER_MAGIC = 10938;
SET @GREATER_MAGIC = 10939;
SET @STRANGE_DUST = 10940;
SET @SMALL_GLIMMERING = 10978;
SET @LESSER_ASTRAL = 10998;
SET @GREATER_ASTRAL = 11082;
SET @SOUL_DUST = 11083;
SET @LARGE_GLIMMERING = 11084;
SET @LESSER_MYSTIC = 11134;
SET @GREATER_MYSTIC = 11135;
SET @VISION_DUST = 11137;
SET @SMALL_GLOWING = 11138;
SET @LARGE_GLOWING = 11139;
SET @LESSER_NETHER = 11174;
SET @GREATER_NETHER = 11175;
SET @DREAM_DUST = 11176;
SET @SMALL_RADIANT = 11177;
SET @LARGE_RADIANT = 11178;
SET @SMALL_BRILLIANT = 14343;
SET @LARGE_BRILLIANT = 14344;
SET @LESSER_ETERNAL = 16202;
SET @GREATER_ETERNAL = 16203;
SET @ILLUSION_DUST = 16204;
SET @NEXUS_CRYSTAL = 20725;
SET @ARCANE_DUST = 22445;
SET @GREATER_PLANAR = 22446;
SET @LESSER_PLANAR = 22447;
SET @SMALL_PRISMATIC = 22448;
SET @LARGE_PRISMATIC = 22449;
SET @VOID_CRYSTAL = 22450;
SET @DREAM_SHARD = 34052;
SET @SMALL_DREAM = 34053;
SET @INFINITE_DUST = 34054;
SET @GREATER_COSMIC = 34055;
SET @LESSER_COSMIC = 34056;
SET @ABYSS_CRYSTAL = 34057;
SET @HEAVENLY_SHARD = 52721;
SET @SMALL_HEAVENLY = 52720;
SET @HYPN_DUST = 52555;
SET @GREATER_CEL = 52719;
SET @LESSER_CEL = 52718;
SET @MAELSTROM_CRYSTAL = 52722;
TRUNCATE `disenchant_loot_template`;
INSERT INTO `disenchant_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES
(3,@STRANGE_DUST,20,1,1,1,2),
(4,@STRANGE_DUST,80,1,1,1,2),
(5,@STRANGE_DUST,75,1,1,2,3),
(6,@STRANGE_DUST,20,1,1,2,3),
(7,@STRANGE_DUST,15,1,1,4,6),
(8,@STRANGE_DUST,75,1,1,4,6),
(13,@SOUL_DUST,75,1,1,1,2),
(14,@SOUL_DUST,20,1,1,1,2),
(17,@SOUL_DUST,75,1,1,2,5),
(18,@SOUL_DUST,20,1,1,2,5),
(21,@VISION_DUST,75,1,1,1,2),
(22,@VISION_DUST,20,1,1,1,2),
(25,@VISION_DUST,75,1,1,2,5),
(26,@VISION_DUST,20,1,1,2,5),
(29,@DREAM_DUST,75,1,1,1,2),
(30,@DREAM_DUST,20,1,1,1,2),
(31,@DREAM_DUST,22,1,1,2,5),
(32,@DREAM_DUST,75,1,1,2,5),
(46,@ILLUSION_DUST,75,1,1,1,2),
(47,@ILLUSION_DUST,22,1,1,1,2),
(52,@ILLUSION_DUST,75,1,1,2,5),
(53,@ILLUSION_DUST,22,1,1,2,5),
(56,@ARCANE_DUST,75,1,1,1,3),
(57,@ARCANE_DUST,22,1,1,1,2),
(62,@ARCANE_DUST,22,1,1,2,5),
(63,@ARCANE_DUST,75,1,1,2,5),
(70,@ARCANE_DUST,75,1,1,2,3),
(71,@ARCANE_DUST,22,1,1,2,3),
(82,@INFINITE_DUST,75,1,1,1,3),
(83,@INFINITE_DUST,22,1,1,1,3),
(88,@INFINITE_DUST,75,1,1,4,7),
(89,@INFINITE_DUST,22,1,1,4,7),
(94,@HYPN_DUST,75,1,1,1,2),
(95,@HYPN_DUST,75,1,1,1,3),
(96,@HYPN_DUST,60,1,1,1,4),
(97,@HYPN_DUST,80,1,1,2,4),
(98,@HYPN_DUST,50,1,1,2,5),
(99,@HYPN_DUST,25,1,1,1,2),
(100,@HYPN_DUST,25,1,1,1,3),
(101,@HYPN_DUST,35,1,1,1,4),
(102,@HYPN_DUST,30,1,1,2,4),
(103,@HYPN_DUST,30,1,1,2,5),
(3,@LESSER_MAGIC,80,1,1,1,2),
(4,@LESSER_MAGIC,20,1,1,1,2),
(5,@GREATER_MAGIC,20,1,1,1,2),
(6,@GREATER_MAGIC,75,1,1,1,2),
(7,@LESSER_ASTRAL,75,1,1,1,2),
(8,@LESSER_ASTRAL,15,1,1,1,2),
(13,@GREATER_ASTRAL,20,1,1,1,2),
(14,@GREATER_ASTRAL,75,1,1,1,2),
(17,@LESSER_MYSTIC,20,1,1,1,2),
(18,@LESSER_MYSTIC,75,1,1,1,2),
(21,@GREATER_MYSTIC,20,1,1,1,2),
(22,@GREATER_MYSTIC,75,1,1,1,2),
(25,@LESSER_NETHER,20,1,1,1,2),
(26,@LESSER_NETHER,75,1,1,1,2),
(29,@GREATER_NETHER,20,1,1,1,2),
(30,@GREATER_NETHER,75,1,1,1,2),
(31,@LESSER_ETERNAL,75,1,1,1,2),
(32,@LESSER_ETERNAL,20,1,1,1,2),
(46,@GREATER_ETERNAL,20,1,1,1,2),
(47,@GREATER_ETERNAL,75,1,1,1,2),
(52,@GREATER_ETERNAL,20,1,1,2,3),
(53,@GREATER_ETERNAL,75,1,1,2,3),
(56,@LESSER_PLANAR,22,1,1,1,3),
(57,@LESSER_PLANAR,75,1,1,1,2),
(62,@GREATER_PLANAR,75,1,1,1,2),
(63,@GREATER_PLANAR,22,1,1,1,2),
(70,@LESSER_PLANAR,22,1,1,2,3),
(71,@LESSER_PLANAR,75,1,1,2,3),
(82,@LESSER_COSMIC,22,1,1,1,2),
(83,@LESSER_COSMIC,75,1,1,1,2),
(88,@GREATER_COSMIC,22,1,1,1,2),
(89,@GREATER_COSMIC,75,1,1,1,2),
(94,@LESSER_CEL,25,1,1,1,2),
(95,@LESSER_CEL,25,1,1,1,3),
(96,@LESSER_CEL,40,1,1,2,4),
(97,@GREATER_CEL,20,1,1,1,2),
(98,@GREATER_CEL,50,1,1,2,3),
(99,@LESSER_CEL,75,1,1,1,2),
(100,@LESSER_CEL,75,1,1,1,3),
(101,@LESSER_CEL,65,1,1,2,4),
(102,@GREATER_CEL,70,1,1,1,2),
(103,@GREATER_CEL,70,1,1,2,3),
(5,@SMALL_GLIMMERING,5,1,1,1,1),
(6,@SMALL_GLIMMERING,5,1,1,1,1),
(7,@SMALL_GLIMMERING,10,1,1,1,1),
(8,@SMALL_GLIMMERING,10,1,1,1,1),
(9,@SMALL_GLIMMERING,100,1,1,1,1),
(10,@SMALL_GLIMMERING,100,1,1,1,1),
(11,@LARGE_GLIMMERING,100,1,1,1,1),
(12,@LARGE_GLIMMERING,100,1,1,1,1),
(13,@LARGE_GLIMMERING,5,1,1,1,1),
(14,@LARGE_GLIMMERING,5,1,1,1,1),
(15,@SMALL_GLOWING,100,1,1,1,1),
(16,@SMALL_GLOWING,100,1,1,1,1),
(17,@SMALL_GLOWING,5,1,1,1,1),
(18,@SMALL_GLOWING,5,1,1,1,1),
(19,@LARGE_GLOWING,100,1,1,1,1),
(20,@LARGE_GLOWING,100,1,1,1,1),
(21,@LARGE_GLOWING,5,1,1,1,1),
(22,@LARGE_GLOWING,5,1,1,1,1),
(23,@SMALL_RADIANT,100,1,1,1,1),
(24,@SMALL_RADIANT,100,1,1,1,1),
(25,@SMALL_RADIANT,5,1,1,1,1),
(26,@SMALL_RADIANT,5,1,1,1,1),
(27,@LARGE_RADIANT,100,1,1,1,1),
(28,@LARGE_RADIANT,100,1,1,1,1),
(29,@LARGE_RADIANT,5,1,1,1,1),
(30,@LARGE_RADIANT,5,1,1,1,1),
(31,@SMALL_BRILLIANT,3,1,1,1,1),
(32,@SMALL_BRILLIANT,5,1,1,1,1),
(34,@SMALL_BRILLIANT,100,1,1,1,1),
(35,@SMALL_BRILLIANT,100,1,1,1,1),
(38,@SMALL_RADIANT,100,1,1,2,4),
(39,@SMALL_RADIANT,100,1,1,2,4),
(40,@LARGE_RADIANT,100,1,1,2,4),
(41,@LARGE_RADIANT,100,1,1,2,4),
(42,@SMALL_BRILLIANT,100,1,1,2,4),
(43,@SMALL_BRILLIANT,100,1,1,2,4),
(44,@LARGE_BRILLIANT,99.5,1,1,1,1),
(45,@LARGE_BRILLIANT,99.5,1,1,1,1),
(46,@LARGE_BRILLIANT,5,1,1,1,1),
(47,@LARGE_BRILLIANT,3,1,1,1,1),
(50,@SMALL_PRISMATIC,99.5,1,1,1,1),
(51,@SMALL_PRISMATIC,99.5,1,1,1,1),
(52,@LARGE_BRILLIANT,5,1,1,1,1),
(53,@LARGE_BRILLIANT,3,1,1,1,1),
(56,@SMALL_PRISMATIC,3,1,1,1,1),
(57,@SMALL_PRISMATIC,3,1,1,1,1),
(58,@SMALL_PRISMATIC,100,1,1,1,1),
(59,@SMALL_PRISMATIC,100,1,1,1,1),
(62,@LARGE_PRISMATIC,3,1,1,1,1),
(63,@LARGE_PRISMATIC,3,1,1,1,1),
(64,@LARGE_PRISMATIC,99.5,1,1,1,1),
(65,@LARGE_PRISMATIC,99.5,1,1,1,1),
(68,@SMALL_PRISMATIC,100,1,1,1,2),
(69,@SMALL_PRISMATIC,100,1,1,1,2),
(70,@SMALL_PRISMATIC,3,1,1,1,1),
(71,@SMALL_PRISMATIC,3,1,1,1,1),
(72,@SMALL_GLIMMERING,100,1,1,2,4),
(73,@SMALL_GLIMMERING,100,1,1,2,4),
(74,@LARGE_GLIMMERING,100,1,1,2,4),
(75,@LARGE_GLIMMERING,100,1,1,2,4),
(76,@SMALL_GLOWING,100,1,1,2,4),
(77,@SMALL_GLOWING,100,1,1,2,4),
(78,@LARGE_GLOWING,100,1,1,2,4),
(79,@LARGE_GLOWING,100,1,1,2,4),
(82,@SMALL_DREAM,3,1,1,1,1),
(83,@SMALL_DREAM,3,1,1,1,1),
(84,@SMALL_DREAM,100,1,1,1,1),
(85,@SMALL_DREAM,100,1,1,1,1),
(86,@DREAM_SHARD,99.5,1,1,1,1),
(87,@DREAM_SHARD,99.5,1,1,1,1),
(88,@DREAM_SHARD,3,1,1,1,1),
(89,@DREAM_SHARD,3,1,1,1,1),
(104,@SMALL_HEAVENLY,100,1,1,1,1),
(105,@SMALL_HEAVENLY,100,1,1,1,2),
(106,@HEAVENLY_SHARD,100,1,1,1,1),
(107,@HEAVENLY_SHARD,100,1,1,1,1),
(44,@NEXUS_CRYSTAL,0.5,1,1,1,1),
(45,@NEXUS_CRYSTAL,0.5,1,1,1,1),
(48,@NEXUS_CRYSTAL,100,1,1,1,1),
(49,@NEXUS_CRYSTAL,100,1,1,1,1),
(50,@NEXUS_CRYSTAL,0.5,1,1,1,1),
(51,@NEXUS_CRYSTAL,0.5,1,1,1,1),
(54,@NEXUS_CRYSTAL,100,1,1,1,2),
(55,@NEXUS_CRYSTAL,100,1,1,1,2),
(60,@NEXUS_CRYSTAL,100,1,1,1,2),
(61,@NEXUS_CRYSTAL,100,1,1,1,2),
(64,@VOID_CRYSTAL,0.5,1,1,1,1),
(65,@VOID_CRYSTAL,0.5,1,1,1,1),
(66,@VOID_CRYSTAL,100,1,1,1,2),
(67,@VOID_CRYSTAL,100,1,1,1,2),
(80,@ABYSS_CRYSTAL,100,1,1,1,1),
(81,@ABYSS_CRYSTAL,100,1,1,1,1),
(86,@ABYSS_CRYSTAL,0.5,1,1,1,1),
(87,@ABYSS_CRYSTAL,0.5,1,1,1,1),
(108,@MAELSTROM_CRYSTAL,100,1,1,1,1),
(109,@MAELSTROM_CRYSTAL,100,1,1,1,1);
+3 -1
View File
@@ -25,8 +25,9 @@
#include <map>
DB2Storage <ItemEntry> sItemStore(Itemfmt);
DB2Storage <ItemSparseEntry> sItemSparseStore (ItemSparsefmt);
DB2Storage <ItemCurrencyCostEntry> sItemCurrencyCostStore(ItemCurrencyCostfmt);
DB2Storage <ItemExtendedCostEntry> sItemExtendedCostStore(ItemExtendedCostEntryfmt);
DB2Storage <ItemSparseEntry> sItemSparseStore (ItemSparsefmt);
typedef std::list<std::string> StoreProblemList1;
@@ -86,6 +87,7 @@ void LoadDB2Stores(const std::string& dataPath)
uint32 availableDb2Locales = 0xFFFFFFFF;
LoadDB2(availableDb2Locales, bad_db2_files, sItemStore, db2Path, "Item.db2");
LoadDB2(availableDb2Locales, bad_db2_files, sItemCurrencyCostStore, db2Path, "ItemCurrencyCost.db2");
LoadDB2(availableDb2Locales, bad_db2_files, sItemSparseStore, db2Path, "Item-sparse.db2");
LoadDB2(availableDb2Locales, bad_db2_files, sItemExtendedCostStore, db2Path, "ItemExtendedCost.db2");
// error checks
+2 -1
View File
@@ -25,8 +25,9 @@
#include <list>
extern DB2Storage <ItemEntry> sItemStore;
extern DB2Storage <ItemSparseEntry> sItemSparseStore;
extern DB2Storage <ItemCurrencyCostEntry> sItemCurrencyCostStore;
extern DB2Storage <ItemExtendedCostEntry> sItemExtendedCostStore;
extern DB2Storage <ItemSparseEntry> sItemSparseStore;
void LoadDB2Stores(const std::string& dataPath);
@@ -43,6 +43,12 @@ struct ItemEntry
uint32 Sheath; // 7
};
struct ItemCurrencyCostEntry
{
uint32 Id;
uint32 ItemId;
};
struct ItemSparseEntry
{
uint32 ID; // 0
+1
View File
@@ -19,6 +19,7 @@
#define TRINITY_DB2SFRM_H
const char Itemfmt[]="niiiiiii";
const char ItemCurrencyCostfmt[]="xn";
const char ItemSparsefmt[]="niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisssssiiiiiiiiiiiiiiiiiiiiiiifiiifii";
const char ItemExtendedCostEntryfmt[]="nxxiiiiiiiiiiiixiiiiiiiiiixxxxx";
+27 -12
View File
@@ -2194,27 +2194,44 @@ uint32 FillItemArmor(uint32 itemlevel, uint32 itemClass, uint32 itemSubclass, ui
return uint32(shield->Value[quality] + 0.5f);
}
void FillDisenchantFields(uint32* disenchantID, uint32* requiredDisenchantSkill, uint32 itemClass, uint32 quality, uint32 itemLevel)
void FillDisenchantFields(uint32* disenchantID, uint32* requiredDisenchantSkill, ItemTemplate const& itemTemplate)
{
*disenchantID = 0;
*(int32*)requiredDisenchantSkill = -1;
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)))
return;
for (uint32 i = 0; i < sItemDisenchantLootStore.GetNumRows(); ++i)
{
ItemDisenchantLootEntry const* disenchant = sItemDisenchantLootStore.LookupEntry(i);
if (!disenchant)
continue;
if (disenchant->ItemClass == itemClass &&
disenchant->ItemQuality == quality &&
disenchant->MinItemLevel <= itemLevel &&
disenchant->MaxItemLevel >= itemLevel)
if (disenchant->ItemClass == itemTemplate.Class &&
disenchant->ItemQuality == itemTemplate.Quality &&
disenchant->MinItemLevel <= itemTemplate.ItemLevel &&
disenchant->MaxItemLevel >= itemTemplate.ItemLevel)
{
// extra check for epics in range 90 - 99
if (disenchant->MinItemLevel < 90)
{
if (itemTemplate.RequiredLevel > 60 || itemTemplate.RequiredSkillRank > 300)
continue;
}
else
{
if (itemTemplate.RequiredLevel <= 60 || itemTemplate.RequiredSkillRank <= 300)
continue;
}
*disenchantID = disenchant->Id;
*requiredDisenchantSkill = disenchant->RequiredDisenchantSkill;
return;
}
}
*disenchantID = 0;
*(int32*)requiredDisenchantSkill = -1;
}
void ObjectMgr::LoadItemTemplates()
@@ -2314,8 +2331,7 @@ void ObjectMgr::LoadItemTemplates()
itemTemplate.socketBonus = sparse->SocketBonus;
itemTemplate.GemProperties = sparse->GemProperties;
FillDisenchantFields(&itemTemplate.DisenchantID, &itemTemplate.RequiredDisenchantSkill,
db2Data->Class, sparse->Quality, sparse->ItemLevel);
FillDisenchantFields(&itemTemplate.DisenchantID, &itemTemplate.RequiredDisenchantSkill, itemTemplate);
itemTemplate.ArmorDamageModifier = sparse->ArmorDamageModifier;
itemTemplate.Duration = sparse->Duration;
@@ -2463,8 +2479,7 @@ void ObjectMgr::LoadItemTemplates()
itemTemplate.socketBonus = fields[123].GetUInt32();
itemTemplate.GemProperties = fields[124].GetUInt32();
FillDisenchantFields(&itemTemplate.DisenchantID, &itemTemplate.RequiredDisenchantSkill,
itemTemplate.Class, itemTemplate.Quality, itemTemplate.ItemLevel);
FillDisenchantFields(&itemTemplate.DisenchantID, &itemTemplate.RequiredDisenchantSkill, itemTemplate);
itemTemplate.ArmorDamageModifier = fields[125].GetFloat();
itemTemplate.Duration = fields[126].GetUInt32();