diff options
| -rw-r--r-- | sql/updates/world/4.x/2011_11_26_02_world_quest_template.sql (renamed from sql/updates/world/4.x/2011_12_26_02_world_quest_template.sql) | 0 | ||||
| -rw-r--r-- | sql/updates/world/4.x/2011_11_26_03_world_disenchant_loot_template.sql | 225 | ||||
| -rw-r--r-- | src/server/game/DataStores/DB2Stores.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/DataStores/DB2Stores.h | 3 | ||||
| -rw-r--r-- | src/server/game/DataStores/DB2Structure.h | 22 | ||||
| -rw-r--r-- | src/server/game/DataStores/DB2fmt.h | 1 | ||||
| -rwxr-xr-x | src/server/game/Globals/ObjectMgr.cpp | 41 |
7 files changed, 274 insertions, 24 deletions
diff --git a/sql/updates/world/4.x/2011_12_26_02_world_quest_template.sql b/sql/updates/world/4.x/2011_11_26_02_world_quest_template.sql index b43abd6f85d..b43abd6f85d 100644 --- a/sql/updates/world/4.x/2011_12_26_02_world_quest_template.sql +++ b/sql/updates/world/4.x/2011_11_26_02_world_quest_template.sql diff --git a/sql/updates/world/4.x/2011_11_26_03_world_disenchant_loot_template.sql b/sql/updates/world/4.x/2011_11_26_03_world_disenchant_loot_template.sql new file mode 100644 index 00000000000..48f5d712533 --- /dev/null +++ b/sql/updates/world/4.x/2011_11_26_03_world_disenchant_loot_template.sql @@ -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); diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 77d16501415..2db85542132 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -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 @@ -115,4 +117,4 @@ void LoadDB2Stores(const std::string& dataPath) sLog->outString(">> Initialized %d DB2 data stores.", DB2FilesCount); sLog->outString(); -}
\ No newline at end of file +} diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index e60892e05eb..6cf719da70b 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -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); diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 1f455eec0c2..23bf8339c0d 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -33,14 +33,20 @@ // Structures used to access raw DB2 data and required packing to portability struct ItemEntry { - uint32 ID; // 0 - uint32 Class; // 1 - uint32 SubClass; // 2 - int32 Unk0; // 3 - int32 Material; // 4 - uint32 DisplayId; // 5 - uint32 InventoryType; // 6 - uint32 Sheath; // 7 + uint32 ID; // 0 + uint32 Class; // 1 + uint32 SubClass; // 2 + int32 Unk0; // 3 + int32 Material; // 4 + uint32 DisplayId; // 5 + uint32 InventoryType; // 6 + uint32 Sheath; // 7 +}; + +struct ItemCurrencyCostEntry +{ + uint32 Id; + uint32 ItemId; }; struct ItemSparseEntry diff --git a/src/server/game/DataStores/DB2fmt.h b/src/server/game/DataStores/DB2fmt.h index 435309cbae4..ed48443d543 100644 --- a/src/server/game/DataStores/DB2fmt.h +++ b/src/server/game/DataStores/DB2fmt.h @@ -19,6 +19,7 @@ #define TRINITY_DB2SFRM_H const char Itemfmt[]="niiiiiii"; +const char ItemCurrencyCostfmt[]="xn"; const char ItemSparsefmt[]="niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisssssiiiiiiiiiiiiiiiiiiiiiiifiiifii"; const char ItemExtendedCostEntryfmt[]="nxxiiiiiiiiiiiixiiiiiiiiiixxxxx"; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 8a47e91b32b..bac87dd1f25 100755 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -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(); @@ -3589,7 +3604,7 @@ void ObjectMgr::LoadQuests() QueryResult result = WorldDatabase.Query("SELECT " //0 1 2 3 4 5 6 7 8 9 10 11 12 "Id, Method, Level, MinLevel, MaxLevel, ZoneOrSort, Type, SuggestedPlayers, LimitTime, RequiredClasses, RequiredRaces, RequiredSkillId, RequiredSkillPoints, " - // 13 14 15 16 17 18 19 20 + // 13 14 15 16 17 18 19 20 "RequiredFactionId1, RequiredFactionId2, RequiredFactionValue1, RequiredFactionValue2, RequiredMinRepFaction, RequiredMaxRepFaction, RequiredMinRepValue, RequiredMaxRepValue, " // 21 22 23 24 25 26 27 28 29 30 31 "PrevQuestId, NextQuestId, ExclusiveGroup, NextQuestIdChain, RewardXPId, RewardOrRequiredMoney, RewardMoneyMaxLevel, RewardSpell, RewardSpellCast, RewardHonor, RewardHonorMultiplier, " |
