aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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.sql225
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp6
-rw-r--r--src/server/game/DataStores/DB2Stores.h3
-rw-r--r--src/server/game/DataStores/DB2Structure.h22
-rw-r--r--src/server/game/DataStores/DB2fmt.h1
-rwxr-xr-xsrc/server/game/Globals/ObjectMgr.cpp41
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, "