chore: stage all pending changes (DB cleanup, corrections, compiler, init, plugin API)
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,211 +0,0 @@
|
|||||||
---@class HardcoreBlacklist
|
|
||||||
local HardcoreBlacklist = QuestieLoader:CreateModule("HardcoreBlacklist")
|
|
||||||
|
|
||||||
|
|
||||||
---@return table<QuestId, boolean>
|
|
||||||
function HardcoreBlacklist:Load()
|
|
||||||
return {
|
|
||||||
[5892] = true, -- Irondeep Supplies
|
|
||||||
[5893] = true, -- Coldtooth Supplies
|
|
||||||
[6741] = true, -- More Booty!
|
|
||||||
[6781] = true, -- More Armor Scraps
|
|
||||||
[6801] = true, -- Lokholar the Ice Lord
|
|
||||||
[6825] = true, -- Call of Air - Guse's Fleet
|
|
||||||
[6826] = true, -- Call of Air - Jeztor's Fleet
|
|
||||||
[6827] = true, -- Call of Air - Mulverick's Fleet
|
|
||||||
[6846] = true, -- Begin the Attack!
|
|
||||||
[6847] = true, -- Master Ryson's All Seeing Eye
|
|
||||||
[6848] = true, -- Master Ryson's All Seeing Eye
|
|
||||||
[6861] = true, -- Zinfizzlex's Portable Shredder Unit
|
|
||||||
[6862] = true, -- Zinfizzlex's Portable Shredder Unit
|
|
||||||
[6881] = true, -- Ivus the Forest Lord
|
|
||||||
[6901] = true, -- Launch the Attack!
|
|
||||||
[6941] = true, -- Call of Air - Vipore's Fleet
|
|
||||||
[6942] = true, -- Call of Air - Slidore's Fleet
|
|
||||||
[6943] = true, -- Call of Air - Ichman's Fleet
|
|
||||||
[6982] = true, -- Coldtooth Supplies
|
|
||||||
[6985] = true, -- Irondeep Supplies
|
|
||||||
[7001] = true, -- Empty Stables
|
|
||||||
[7002] = true, -- Ram Hide Harnesses
|
|
||||||
[7026] = true, -- Ram Riding Harnesses
|
|
||||||
[7027] = true, -- Empty Stables
|
|
||||||
[7081] = true, -- Alterac Valley Graveyards
|
|
||||||
[7082] = true, -- The Graveyards of Alterac
|
|
||||||
[7101] = true, -- Towers and Bunkers
|
|
||||||
[7102] = true, -- Towers and Bunkers
|
|
||||||
[7121] = true, -- The Quartermaster
|
|
||||||
[7122] = true, -- Capture a Mine
|
|
||||||
[7123] = true, -- Speak with our Quartermaster
|
|
||||||
[7124] = true, -- Capture a Mine
|
|
||||||
[7141] = true, -- The Battle of Alterac
|
|
||||||
[7142] = true, -- The Battle for Alterac
|
|
||||||
[7161] = true, -- Proving Grounds
|
|
||||||
[7162] = true, -- Proving Grounds
|
|
||||||
[7163] = true, -- Rise and Be Recognized
|
|
||||||
[7164] = true, -- Honored Amongst the Clan
|
|
||||||
[7165] = true, -- Earned Reverence
|
|
||||||
[7166] = true, -- Legendary Heroes
|
|
||||||
[7167] = true, -- The Eye of Command
|
|
||||||
[7168] = true, -- Rise and Be Recognized
|
|
||||||
[7169] = true, -- Honored Amongst the Guard
|
|
||||||
[7170] = true, -- Earned Reverence
|
|
||||||
[7171] = true, -- Legendary Heroes
|
|
||||||
[7172] = true, -- The Eye of Command
|
|
||||||
[7181] = true, -- The Legend of Korrak
|
|
||||||
[7202] = true, -- Korrak the Bloodrager
|
|
||||||
[7221] = true, -- Speak with Prospector Stonehewer
|
|
||||||
[7222] = true, -- Speak with Voggah Deathgrip
|
|
||||||
[7223] = true, -- Armor Scraps
|
|
||||||
[7224] = true, -- Enemy Booty
|
|
||||||
[7241] = true, -- In Defense of Frostwolf
|
|
||||||
[7261] = true, -- The Sovereign Imperative
|
|
||||||
[7281] = true, -- Brotherly Love
|
|
||||||
[7282] = true, -- Brotherly Love
|
|
||||||
[7301] = true, -- Fallen Sky Lords
|
|
||||||
[7302] = true, -- Fallen Sky Lords
|
|
||||||
[7361] = true, -- Favor Amongst the Darkspear
|
|
||||||
[7362] = true, -- Ally of the Tauren
|
|
||||||
[7363] = true, -- The Human Condition
|
|
||||||
[7364] = true, -- Gnomeregan Bounty
|
|
||||||
[7365] = true, -- Staghelm's Requiem
|
|
||||||
[7366] = true, -- The Archbishop's Mercy
|
|
||||||
[7367] = true, -- Defusing the Threat
|
|
||||||
[7368] = true, -- Defusing the Threat
|
|
||||||
[7381] = true, -- The Return of Korrak
|
|
||||||
[7382] = true, -- Korrak the Everliving
|
|
||||||
[7385] = true, -- A Gallon of Blood
|
|
||||||
[7386] = true, -- Crystal Cluster
|
|
||||||
[7401] = true, -- WANTED: Dwarves!
|
|
||||||
[7402] = true, -- WANTED: Orcs!
|
|
||||||
[7421] = true, -- Darkspear Defense
|
|
||||||
[7422] = true, -- Tuft it Out
|
|
||||||
[7423] = true, -- I've Got A Fever For More Bone Chips
|
|
||||||
[7424] = true, -- What the Hoof?
|
|
||||||
[7425] = true, -- Staghelm's Mojo Jamboree
|
|
||||||
[7426] = true, -- One Man's Love
|
|
||||||
[7427] = true, -- Wanted: MORE DWARVES!
|
|
||||||
[7428] = true, -- Wanted: MORE ORCS!
|
|
||||||
[7788] = true, -- Vanquish the Invaders!
|
|
||||||
[7789] = true, -- Quell the Silverwing Usurpers
|
|
||||||
[7871] = true, -- Vanquish the Invaders!
|
|
||||||
[7872] = true, -- Vanquish the Invaders!
|
|
||||||
[7873] = true, -- Vanquish the Invaders!
|
|
||||||
[7874] = true, -- Quell the Silverwing Usurpers
|
|
||||||
[7875] = true, -- Quell the Silverwing Usurpers
|
|
||||||
[7876] = true, -- Quell the Silverwing Usurpers
|
|
||||||
[7886] = true, -- Talismans of Merit
|
|
||||||
[7887] = true, -- Talismans of Merit
|
|
||||||
[7888] = true, -- Talismans of Merit
|
|
||||||
[7921] = true, -- Talismans of Merit
|
|
||||||
[7922] = true, -- Mark of Honor
|
|
||||||
[7923] = true, -- Mark of Honor
|
|
||||||
[7924] = true, -- Mark of Honor
|
|
||||||
[7925] = true, -- Mark of Honor
|
|
||||||
[8001] = true, -- Warsong Outriders <NYI> <TXT>
|
|
||||||
[8002] = true, -- Silverwing Sentinels <NYI> <TXT>
|
|
||||||
[8080] = true, -- Arathi Basin Resources!
|
|
||||||
[8081] = true, -- More Resource Crates
|
|
||||||
[8105] = true, -- The Battle for Arathi Basin!
|
|
||||||
[8114] = true, -- Control Four Bases
|
|
||||||
[8115] = true, -- Control Five Bases
|
|
||||||
[8120] = true, -- The Battle for Arathi Basin!
|
|
||||||
[8121] = true, -- Take Four Bases
|
|
||||||
[8122] = true, -- Take Five Bases
|
|
||||||
[8123] = true, -- Cut Arathor Supply Lines
|
|
||||||
[8124] = true, -- More Resource Crates
|
|
||||||
[8154] = true, -- Arathi Basin Resources!
|
|
||||||
[8155] = true, -- Arathi Basin Resources!
|
|
||||||
[8156] = true, -- Arathi Basin Resources!
|
|
||||||
[8157] = true, -- More Resource Crates
|
|
||||||
[8158] = true, -- More Resource Crates
|
|
||||||
[8159] = true, -- More Resource Crates
|
|
||||||
[8160] = true, -- Cut Arathor Supply Lines
|
|
||||||
[8161] = true, -- Cut Arathor Supply Lines
|
|
||||||
[8162] = true, -- Cut Arathor Supply Lines
|
|
||||||
[8163] = true, -- More Resource Crates
|
|
||||||
[8164] = true, -- More Resource Crates
|
|
||||||
[8165] = true, -- More Resource Crates
|
|
||||||
[8166] = true, -- The Battle for Arathi Basin!
|
|
||||||
[8167] = true, -- The Battle for Arathi Basin!
|
|
||||||
[8168] = true, -- The Battle for Arathi Basin!
|
|
||||||
[8169] = true, -- The Battle for Arathi Basin!
|
|
||||||
[8170] = true, -- The Battle for Arathi Basin!
|
|
||||||
[8171] = true, -- The Battle for Arathi Basin!
|
|
||||||
[8260] = true, -- Arathor Basic Care Package
|
|
||||||
[8261] = true, -- Arathor Standard Care Package
|
|
||||||
[8262] = true, -- Arathor Advanced Care Package
|
|
||||||
[8263] = true, -- Defiler's Basic Care Package
|
|
||||||
[8264] = true, -- Defiler's Standard Care Package
|
|
||||||
[8265] = true, -- Defiler's Advanced Care Package
|
|
||||||
[8266] = true, -- Ribbons of Sacrifice
|
|
||||||
[8267] = true, -- Ribbons of Sacrifice
|
|
||||||
[8268] = true, -- Ribbons of Sacrifice
|
|
||||||
[8269] = true, -- Ribbons of Sacrifice
|
|
||||||
[8271] = true, -- Hero of the Stormpike
|
|
||||||
[8272] = true, -- Hero of the Frostwolf
|
|
||||||
[8289] = true, -- Talismans of Merit
|
|
||||||
[8290] = true, -- Vanquish the Invaders
|
|
||||||
[8291] = true, -- Vanquish the Invaders!
|
|
||||||
[8292] = true, -- Talismans of Merit
|
|
||||||
[8293] = true, -- Mark of Honor
|
|
||||||
[8294] = true, -- Quell the Silverwing Usurpers
|
|
||||||
[8295] = true, -- Quell the Silverwing Usurpers
|
|
||||||
[8296] = true, -- Mark of Honor
|
|
||||||
[8297] = true, -- Arathi Basin Resources!
|
|
||||||
[8298] = true, -- More Resource Crates
|
|
||||||
[8299] = true, -- Cut Arathor Supply Lines
|
|
||||||
[8300] = true, -- More Resource Crates
|
|
||||||
[8368] = true, -- Battle of Warsong Gulch
|
|
||||||
[8367] = true, -- For Great Honor
|
|
||||||
[8369] = true, -- Invaders of Alterac Valley
|
|
||||||
[8370] = true, -- Conquering Arathi Basin
|
|
||||||
[8371] = true, -- Concerted Efforts
|
|
||||||
[8372] = true, -- Fight for Warsong Gulch
|
|
||||||
[8374] = true, -- Claiming Arathi Basin
|
|
||||||
[8375] = true, -- Remember Alterac Valley
|
|
||||||
[8383] = true, -- Remember Alterac Valley
|
|
||||||
[8384] = true, -- Claiming Arathi Basin
|
|
||||||
[8385] = true, -- Concerted Efforts
|
|
||||||
[8386] = true, -- Fight for Warsong Gulch
|
|
||||||
[8387] = true, -- Invaders of Alterac Valley
|
|
||||||
[8388] = true, -- For Great Honor
|
|
||||||
[8389] = true, -- Battle of Warsong Gulch
|
|
||||||
[8390] = true, -- Conquering Arathi Basin
|
|
||||||
[8391] = true, -- Claiming Arathi Basin
|
|
||||||
[8392] = true, -- Claiming Arathi Basin
|
|
||||||
[8393] = true, -- Claiming Arathi Basin
|
|
||||||
[8394] = true, -- Claiming Arathi Basin
|
|
||||||
[8395] = true, -- Claiming Arathi Basin
|
|
||||||
[8396] = true, -- Claiming Arathi Basin
|
|
||||||
[8397] = true, -- Claiming Arathi Basin
|
|
||||||
[8398] = true, -- Claiming Arathi Basin
|
|
||||||
[8399] = true, -- Fight for Warsong Gulch
|
|
||||||
[8400] = true, -- Fight for Warsong Gulch
|
|
||||||
[8401] = true, -- Fight for Warsong Gulch
|
|
||||||
[8402] = true, -- Fight for Warsong Gulch
|
|
||||||
[8403] = true, -- Fight for Warsong Gulch
|
|
||||||
[8404] = true, -- Fight for Warsong Gulch
|
|
||||||
[8405] = true, -- Fight for Warsong Gulch
|
|
||||||
[8406] = true, -- Fight for Warsong Gulch
|
|
||||||
[8407] = true, -- Fight for Warsong Gulch
|
|
||||||
[8408] = true, -- Fight for Warsong Gulch
|
|
||||||
[8426] = true, -- Battle of Warsong Gulch
|
|
||||||
[8427] = true, -- Battle of Warsong Gulch
|
|
||||||
[8428] = true, -- Battle of Warsong Gulch
|
|
||||||
[8429] = true, -- Battle of Warsong Gulch
|
|
||||||
[8430] = true, -- Battle of Warsong Gulch
|
|
||||||
[8431] = true, -- Battle of Warsong Gulch
|
|
||||||
[8432] = true, -- Battle of Warsong Gulch
|
|
||||||
[8433] = true, -- Battle of Warsong Gulch
|
|
||||||
[8434] = true, -- Battle of Warsong Gulch
|
|
||||||
[8435] = true, -- Battle of Warsong Gulch
|
|
||||||
[8436] = true, -- Conquering Arathi Basin
|
|
||||||
[8437] = true, -- Conquering Arathi Basin
|
|
||||||
[8438] = true, -- Conquering Arathi Basin
|
|
||||||
[8439] = true, -- Conquering Arathi Basin
|
|
||||||
[8440] = true, -- Conquering Arathi Basin
|
|
||||||
[8441] = true, -- Conquering Arathi Basin
|
|
||||||
[8442] = true, -- Conquering Arathi Basin
|
|
||||||
[8443] = true, -- Conquering Arathi Basin
|
|
||||||
}
|
|
||||||
end
|
|
||||||
@@ -17,10 +17,6 @@ local QuestieQuestBlacklist = QuestieLoader:ImportModule("QuestieQuestBlacklist"
|
|||||||
local QuestieNPCBlacklist = QuestieLoader:ImportModule("QuestieNPCBlacklist")
|
local QuestieNPCBlacklist = QuestieLoader:ImportModule("QuestieNPCBlacklist")
|
||||||
---@type QuestieItemBlacklist
|
---@type QuestieItemBlacklist
|
||||||
local QuestieItemBlacklist = QuestieLoader:ImportModule("QuestieItemBlacklist")
|
local QuestieItemBlacklist = QuestieLoader:ImportModule("QuestieItemBlacklist")
|
||||||
---@type HardcoreBlacklist
|
|
||||||
local HardcoreBlacklist = QuestieLoader:ImportModule("HardcoreBlacklist")
|
|
||||||
---@type SeasonOfDiscovery
|
|
||||||
local SeasonOfDiscovery = QuestieLoader:ImportModule("SeasonOfDiscovery")
|
|
||||||
|
|
||||||
---@type QuestieQuestFixes
|
---@type QuestieQuestFixes
|
||||||
local QuestieQuestFixes = QuestieLoader:ImportModule("QuestieQuestFixes")
|
local QuestieQuestFixes = QuestieLoader:ImportModule("QuestieQuestFixes")
|
||||||
@@ -79,8 +75,6 @@ QuestieCorrections.TBC_ONLY = 1 -- Hide only in TBC
|
|||||||
QuestieCorrections.CLASSIC_ONLY = 2 -- Hide only in Classic
|
QuestieCorrections.CLASSIC_ONLY = 2 -- Hide only in Classic
|
||||||
QuestieCorrections.WOTLK_ONLY = 3 -- Hide only in Wotlk
|
QuestieCorrections.WOTLK_ONLY = 3 -- Hide only in Wotlk
|
||||||
QuestieCorrections.TBC_AND_WOTLK = 4 -- Hide in TBC and Wotlk
|
QuestieCorrections.TBC_AND_WOTLK = 4 -- Hide in TBC and Wotlk
|
||||||
QuestieCorrections.SOD_ONLY = 5 -- Hide when *not* Season of Discovery; use for SoD-only quests
|
|
||||||
QuestieCorrections.HIDE_SOD = 6 -- Hide when Season of Discovery; use to hide quests that are not available in SoD
|
|
||||||
QuestieCorrections.CLASSIC_AND_TBC = 7 -- Hide in both Classic and TBC
|
QuestieCorrections.CLASSIC_AND_TBC = 7 -- Hide in both Classic and TBC
|
||||||
|
|
||||||
QuestieCorrections.killCreditObjectiveFirst = {} -- Only used for TBC quests
|
QuestieCorrections.killCreditObjectiveFirst = {} -- Only used for TBC quests
|
||||||
@@ -93,7 +87,6 @@ local function filterExpansion(values)
|
|||||||
local isClassic = Questie.IsClassic
|
local isClassic = Questie.IsClassic
|
||||||
local isTBC = Questie.IsTBC
|
local isTBC = Questie.IsTBC
|
||||||
local isWotlk = Questie.IsWotlk
|
local isWotlk = Questie.IsWotlk
|
||||||
local isSoD = Questie.IsSoD
|
|
||||||
for k, v in pairs(values) do
|
for k, v in pairs(values) do
|
||||||
if v == QuestieCorrections.WOTLK_ONLY then
|
if v == QuestieCorrections.WOTLK_ONLY then
|
||||||
if isWotlk then
|
if isWotlk then
|
||||||
@@ -119,18 +112,6 @@ local function filterExpansion(values)
|
|||||||
else
|
else
|
||||||
values[k] = nil
|
values[k] = nil
|
||||||
end
|
end
|
||||||
elseif v == QuestieCorrections.SOD_ONLY then
|
|
||||||
if not isSoD then
|
|
||||||
values[k] = true
|
|
||||||
else
|
|
||||||
values[k] = nil
|
|
||||||
end
|
|
||||||
elseif v == QuestieCorrections.HIDE_SOD then
|
|
||||||
if isSoD then
|
|
||||||
values[k] = true
|
|
||||||
else
|
|
||||||
values[k] = nil
|
|
||||||
end
|
|
||||||
elseif v == QuestieCorrections.CLASSIC_AND_TBC then
|
elseif v == QuestieCorrections.CLASSIC_AND_TBC then
|
||||||
if isClassic or isTBC then
|
if isClassic or isTBC then
|
||||||
values[k] = true
|
values[k] = true
|
||||||
@@ -188,11 +169,6 @@ do
|
|||||||
addOverride(QuestieDB.objectDataOverrides, QuestieWotlkObjectFixes:LoadFactionFixes())
|
addOverride(QuestieDB.objectDataOverrides, QuestieWotlkObjectFixes:LoadFactionFixes())
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Season of Discovery Corrections
|
|
||||||
if Questie.IsSoD then
|
|
||||||
addOverride(QuestieDB.questDataOverrides, SeasonOfDiscovery:LoadFactionQuestFixes())
|
|
||||||
end
|
|
||||||
|
|
||||||
QuestieCorrections.questItemBlacklist = filterExpansion(QuestieItemBlacklist:Load())
|
QuestieCorrections.questItemBlacklist = filterExpansion(QuestieItemBlacklist:Load())
|
||||||
QuestieCorrections.questNPCBlacklist = filterExpansion(QuestieNPCBlacklist:Load())
|
QuestieCorrections.questNPCBlacklist = filterExpansion(QuestieNPCBlacklist:Load())
|
||||||
QuestieCorrections.hiddenQuests = filterExpansion(QuestieQuestBlacklist:Load())
|
QuestieCorrections.hiddenQuests = filterExpansion(QuestieQuestBlacklist:Load())
|
||||||
@@ -218,13 +194,6 @@ do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Hardcore Blacklist
|
|
||||||
if (Questie.IsHardcore) then
|
|
||||||
for id, _ in pairs(HardcoreBlacklist:Load()) do
|
|
||||||
QuestieCorrections.hiddenQuests[id] = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if QuestieCompat.Is335 then QuestieCompat.LoadBlacklists() end
|
if QuestieCompat.Is335 then QuestieCompat.LoadBlacklists() end
|
||||||
|
|
||||||
if Questie.db.profile.showEventQuests then
|
if Questie.db.profile.showEventQuests then
|
||||||
@@ -245,6 +214,7 @@ end
|
|||||||
---@param noOverwrites true? Do not overwrite existing values
|
---@param noOverwrites true? Do not overwrite existing values
|
||||||
---@param noNewEntries true? Do not create new entries in the database
|
---@param noNewEntries true? Do not create new entries in the database
|
||||||
local _LoadCorrections = function(databaseTableName, corrections, reversedKeys, validationTables, noOverwrites, noNewEntries)
|
local _LoadCorrections = function(databaseTableName, corrections, reversedKeys, validationTables, noOverwrites, noNewEntries)
|
||||||
|
if not QuestieDB[databaseTableName] then return end
|
||||||
for id, data in pairs(corrections) do
|
for id, data in pairs(corrections) do
|
||||||
for key, value in pairs(data) do
|
for key, value in pairs(data) do
|
||||||
-- Create the id if missing unless noNewEntries is set
|
-- Create the id if missing unless noNewEntries is set
|
||||||
@@ -271,39 +241,30 @@ end
|
|||||||
|
|
||||||
---@param validationTables table? Only used by the CI validation scripts to validate the corrections against the original database values and find irrelevant corrections
|
---@param validationTables table? Only used by the CI validation scripts to validate the corrections against the original database values and find irrelevant corrections
|
||||||
function QuestieCorrections:Initialize(validationTables)
|
function QuestieCorrections:Initialize(validationTables)
|
||||||
|
if QuestieQuestFixes and QuestieQuestFixes.LoadMissingQuests then
|
||||||
QuestieQuestFixes:LoadMissingQuests()
|
QuestieQuestFixes:LoadMissingQuests()
|
||||||
|
end
|
||||||
|
|
||||||
-- Classic Corrections
|
-- Classic Corrections
|
||||||
_LoadCorrections("questData", QuestieClassicQuestReputationFixes:Load(), QuestieDB.questKeysReversed, validationTables)
|
if QuestieClassicQuestReputationFixes then _LoadCorrections("questData", QuestieClassicQuestReputationFixes:Load(), QuestieDB.questKeysReversed, validationTables) end
|
||||||
_LoadCorrections("questData", QuestieQuestFixes:Load(), QuestieDB.questKeysReversed, validationTables)
|
if QuestieQuestFixes then _LoadCorrections("questData", QuestieQuestFixes:Load(), QuestieDB.questKeysReversed, validationTables) end
|
||||||
_LoadCorrections("npcData", QuestieNPCFixes:Load(), QuestieDB.npcKeysReversed, validationTables)
|
if QuestieNPCFixes then _LoadCorrections("npcData", QuestieNPCFixes:Load(), QuestieDB.npcKeysReversed, validationTables) end
|
||||||
_LoadCorrections("itemData", QuestieItemFixes:Load(), QuestieDB.itemKeysReversed, validationTables)
|
if QuestieItemFixes then _LoadCorrections("itemData", QuestieItemFixes:Load(), QuestieDB.itemKeysReversed, validationTables) end
|
||||||
_LoadCorrections("objectData", QuestieObjectFixes:Load(), QuestieDB.objectKeysReversed, validationTables)
|
if QuestieObjectFixes then _LoadCorrections("objectData", QuestieObjectFixes:Load(), QuestieDB.objectKeysReversed, validationTables) end
|
||||||
|
|
||||||
if Questie.IsTBC or Questie.IsWotlk then
|
if Questie.IsTBC or Questie.IsWotlk or QuestieCompat.Is335 then
|
||||||
_LoadCorrections("questData", QuestieTBCQuestFixes:Load(), QuestieDB.questKeysReversed, validationTables)
|
if QuestieTBCQuestFixes then _LoadCorrections("questData", QuestieTBCQuestFixes:Load(), QuestieDB.questKeysReversed, validationTables) end
|
||||||
_LoadCorrections("npcData", QuestieTBCNpcFixes:Load(), QuestieDB.npcKeysReversed, validationTables)
|
if QuestieTBCNpcFixes then _LoadCorrections("npcData", QuestieTBCNpcFixes:Load(), QuestieDB.npcKeysReversed, validationTables) end
|
||||||
_LoadCorrections("itemData", QuestieTBCItemFixes:Load(), QuestieDB.itemKeysReversed, validationTables)
|
if QuestieTBCItemFixes then _LoadCorrections("itemData", QuestieTBCItemFixes:Load(), QuestieDB.itemKeysReversed, validationTables) end
|
||||||
_LoadCorrections("objectData", QuestieTBCObjectFixes:Load(), QuestieDB.objectKeysReversed, validationTables)
|
if QuestieTBCObjectFixes then _LoadCorrections("objectData", QuestieTBCObjectFixes:Load(), QuestieDB.objectKeysReversed, validationTables) end
|
||||||
end
|
end
|
||||||
|
|
||||||
if Questie.IsWotlk then
|
if Questie.IsWotlk or QuestieCompat.Is335 then
|
||||||
_LoadCorrections("questData", QuestieWotlkQuestFixes:Load(), QuestieDB.questKeysReversed, validationTables)
|
if QuestieWotlkQuestFixes then _LoadCorrections("questData", QuestieWotlkQuestFixes:Load(), QuestieDB.questKeysReversed, validationTables) end
|
||||||
_LoadCorrections("npcData", QuestieWotlkNpcFixes:LoadAutomatics(), QuestieDB.npcKeysReversed, validationTables)
|
if QuestieWotlkNpcFixes then _LoadCorrections("npcData", QuestieWotlkNpcFixes:LoadAutomatics(), QuestieDB.npcKeysReversed, validationTables) end
|
||||||
_LoadCorrections("npcData", QuestieWotlkNpcFixes:Load(), QuestieDB.npcKeysReversed, validationTables)
|
if QuestieWotlkNpcFixes then _LoadCorrections("npcData", QuestieWotlkNpcFixes:Load(), QuestieDB.npcKeysReversed, validationTables) end
|
||||||
_LoadCorrections("itemData", QuestieWotlkItemFixes:Load(), QuestieDB.itemKeysReversed, validationTables)
|
if QuestieWotlkItemFixes then _LoadCorrections("itemData", QuestieWotlkItemFixes:Load(), QuestieDB.itemKeysReversed, validationTables) end
|
||||||
_LoadCorrections("objectData", QuestieWotlkObjectFixes:Load(), QuestieDB.objectKeysReversed, validationTables)
|
if QuestieWotlkObjectFixes then _LoadCorrections("objectData", QuestieWotlkObjectFixes:Load(), QuestieDB.objectKeysReversed, validationTables) end
|
||||||
end
|
|
||||||
|
|
||||||
if Questie.IsSoD then
|
|
||||||
_LoadCorrections("questData", SeasonOfDiscovery:LoadBaseQuests(), QuestieDB.questKeysReversed, validationTables)
|
|
||||||
_LoadCorrections("questData", SeasonOfDiscovery:LoadQuests(), QuestieDB.questKeysReversed, validationTables)
|
|
||||||
_LoadCorrections("npcData", SeasonOfDiscovery:LoadBaseNPCs(), QuestieDB.npcKeysReversed, validationTables)
|
|
||||||
_LoadCorrections("npcData", SeasonOfDiscovery:LoadNPCs(), QuestieDB.npcKeysReversed, validationTables)
|
|
||||||
_LoadCorrections("itemData", SeasonOfDiscovery:LoadBaseItems(), QuestieDB.itemKeysReversed, validationTables)
|
|
||||||
_LoadCorrections("itemData", SeasonOfDiscovery:LoadItems(), QuestieDB.itemKeysReversed, validationTables)
|
|
||||||
_LoadCorrections("objectData", SeasonOfDiscovery:LoadBaseObjects(), QuestieDB.objectKeysReversed, validationTables)
|
|
||||||
_LoadCorrections("objectData", SeasonOfDiscovery:LoadObjects(), QuestieDB.objectKeysReversed, validationTables)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Corrections that apply to all versions
|
--- Corrections that apply to all versions
|
||||||
@@ -312,6 +273,7 @@ function QuestieCorrections:Initialize(validationTables)
|
|||||||
if QuestieCompat.Is335 then QuestieCompat.LoadCorrections(_LoadCorrections, validationTables) end
|
if QuestieCompat.Is335 then QuestieCompat.LoadCorrections(_LoadCorrections, validationTables) end
|
||||||
|
|
||||||
local patchCount = 0
|
local patchCount = 0
|
||||||
|
if type(QuestieDB.questData) == "table" then
|
||||||
for _, quest in pairs(QuestieDB.questData) do
|
for _, quest in pairs(QuestieDB.questData) do
|
||||||
if (not quest[QuestieDB.questKeys.requiredRaces]) or quest[QuestieDB.questKeys.requiredRaces] == 0 then
|
if (not quest[QuestieDB.questKeys.requiredRaces]) or quest[QuestieDB.questKeys.requiredRaces] == 0 then
|
||||||
-- check against questgiver
|
-- check against questgiver
|
||||||
@@ -349,6 +311,7 @@ function QuestieCorrections:Initialize(validationTables)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end -- type(questData) == "table"
|
||||||
|
|
||||||
QuestieCorrections:MinimalInit()
|
QuestieCorrections:MinimalInit()
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,532 +0,0 @@
|
|||||||
---@type QuestieQuestBlacklist
|
|
||||||
local QuestieQuestBlacklist = QuestieLoader:ImportModule("QuestieQuestBlacklist")
|
|
||||||
|
|
||||||
local currentPhase = 5 -- TODO: Use API function which hopefully will come in the future
|
|
||||||
|
|
||||||
-- This function blacklists any quests in phases LATER than the currentPhase value
|
|
||||||
-- so in Phase 1, quests in phases 2+ are blacklisted, in phase 2, phases 3+ are blacklisted, etc
|
|
||||||
-- Phase 1 is omitted, because everything not in this list is supposed to be available in Phase 1
|
|
||||||
local questsToBlacklistBySoMPhase = {
|
|
||||||
[1] = {}, -- Phase 1 - Regular Phase 1 + Dire Maul + Tier 0.5 quests (this is required for counting, but should stay empty)
|
|
||||||
[2] = { -- Phase 2 - World Bosses
|
|
||||||
},
|
|
||||||
[3] = { -- Phase 3 - BWL + Darkmoon Faire
|
|
||||||
[7761] = true, -- Blackhand's Command BWL pre quest
|
|
||||||
[7787] = true,
|
|
||||||
-- Darkmoon Faire quests
|
|
||||||
[7902] = true,
|
|
||||||
[7903] = true,
|
|
||||||
[8222] = true,
|
|
||||||
[7901] = true,
|
|
||||||
[7899] = true,
|
|
||||||
[7940] = true,
|
|
||||||
[7900] = true,
|
|
||||||
[7907] = true,
|
|
||||||
[7927] = true,
|
|
||||||
[7929] = true,
|
|
||||||
[7928] = true,
|
|
||||||
[7946] = true,
|
|
||||||
[8223] = true,
|
|
||||||
[7934] = true,
|
|
||||||
[7981] = true,
|
|
||||||
[7943] = true,
|
|
||||||
[7894] = true,
|
|
||||||
[7933] = true,
|
|
||||||
[7898] = true,
|
|
||||||
[7885] = true,
|
|
||||||
[7942] = true,
|
|
||||||
[7883] = true,
|
|
||||||
[7892] = true,
|
|
||||||
[7937] = true,
|
|
||||||
[7939] = true,
|
|
||||||
[7893] = true,
|
|
||||||
[7891] = true,
|
|
||||||
[7896] = true,
|
|
||||||
[7884] = true,
|
|
||||||
[7882] = true,
|
|
||||||
[7897] = true,
|
|
||||||
[7895] = true,
|
|
||||||
[7941] = true,
|
|
||||||
[7881] = true,
|
|
||||||
[7890] = true,
|
|
||||||
[7889] = true,
|
|
||||||
[7945] = true,
|
|
||||||
[7935] = true,
|
|
||||||
[7938] = true,
|
|
||||||
[7944] = true,
|
|
||||||
[7932] = true,
|
|
||||||
[7930] = true,
|
|
||||||
[7931] = true,
|
|
||||||
[7936] = true,
|
|
||||||
[9249] = true,
|
|
||||||
[10939] = true,
|
|
||||||
[10940] = true,
|
|
||||||
[10941] = true,
|
|
||||||
-----------------
|
|
||||||
},
|
|
||||||
[4] = { -- Phase 4 - Zul'Gurub
|
|
||||||
[8411] = true,
|
|
||||||
[8056] = true,
|
|
||||||
[8057] = true,
|
|
||||||
[8064] = true,
|
|
||||||
[8065] = true,
|
|
||||||
[8074] = true,
|
|
||||||
[8075] = true,
|
|
||||||
[8110] = true,
|
|
||||||
[8111] = true,
|
|
||||||
[8112] = true,
|
|
||||||
[8113] = true,
|
|
||||||
[8116] = true,
|
|
||||||
[8117] = true,
|
|
||||||
[8118] = true,
|
|
||||||
[8119] = true,
|
|
||||||
[8041] = true,
|
|
||||||
[8042] = true,
|
|
||||||
[8043] = true,
|
|
||||||
[8044] = true,
|
|
||||||
[8045] = true,
|
|
||||||
[8046] = true,
|
|
||||||
[8047] = true,
|
|
||||||
[8048] = true,
|
|
||||||
[8049] = true,
|
|
||||||
[8050] = true,
|
|
||||||
[8051] = true,
|
|
||||||
[8052] = true,
|
|
||||||
[8053] = true,
|
|
||||||
[8054] = true,
|
|
||||||
[8055] = true,
|
|
||||||
[8058] = true,
|
|
||||||
[8059] = true,
|
|
||||||
[8060] = true,
|
|
||||||
[8061] = true,
|
|
||||||
[8062] = true,
|
|
||||||
[8063] = true,
|
|
||||||
[8066] = true,
|
|
||||||
[8067] = true,
|
|
||||||
[8068] = true,
|
|
||||||
[8069] = true,
|
|
||||||
[8070] = true,
|
|
||||||
[8071] = true,
|
|
||||||
[8072] = true,
|
|
||||||
[8073] = true,
|
|
||||||
[8076] = true,
|
|
||||||
[8077] = true,
|
|
||||||
[8078] = true,
|
|
||||||
[8079] = true,
|
|
||||||
[8101] = true,
|
|
||||||
[8102] = true,
|
|
||||||
[8103] = true,
|
|
||||||
[8104] = true,
|
|
||||||
[8106] = true,
|
|
||||||
[8107] = true,
|
|
||||||
[8108] = true,
|
|
||||||
[8109] = true,
|
|
||||||
[8141] = true,
|
|
||||||
[8142] = true,
|
|
||||||
[8143] = true,
|
|
||||||
[8144] = true,
|
|
||||||
[8145] = true,
|
|
||||||
[8146] = true,
|
|
||||||
[8147] = true,
|
|
||||||
[8148] = true,
|
|
||||||
[8184] = true,
|
|
||||||
[8185] = true,
|
|
||||||
[8186] = true,
|
|
||||||
[8187] = true,
|
|
||||||
[8188] = true,
|
|
||||||
[8189] = true,
|
|
||||||
[8190] = true,
|
|
||||||
[8191] = true,
|
|
||||||
[8192] = true,
|
|
||||||
[8195] = true,
|
|
||||||
[8196] = true,
|
|
||||||
[8201] = true,
|
|
||||||
[8227] = true,
|
|
||||||
[8238] = true,
|
|
||||||
[8239] = true,
|
|
||||||
[8240] = true,
|
|
||||||
[8243] = true,
|
|
||||||
[8246] = true,
|
|
||||||
[8446] = true,
|
|
||||||
[8447] = true,
|
|
||||||
[9208] = true,
|
|
||||||
[9209] = true,
|
|
||||||
[9210] = true,
|
|
||||||
[8307] = true,
|
|
||||||
[8313] = true,
|
|
||||||
[8317] = true,
|
|
||||||
[8282] = true,
|
|
||||||
[8278] = true,
|
|
||||||
[8323] = true,
|
|
||||||
[8324] = true,
|
|
||||||
[8275] = true,
|
|
||||||
[8309] = true,
|
|
||||||
[8310] = true,
|
|
||||||
[8315] = true,
|
|
||||||
[8319] = true,
|
|
||||||
[8341] = true,
|
|
||||||
[8342] = true,
|
|
||||||
[8343] = true,
|
|
||||||
[8331] = true,
|
|
||||||
[8332] = true,
|
|
||||||
[8333] = true,
|
|
||||||
[8306] = true,
|
|
||||||
[8321] = true,
|
|
||||||
[8362] = true,
|
|
||||||
[8364] = true,
|
|
||||||
[9248] = true,
|
|
||||||
[8281] = true,
|
|
||||||
[8285] = true,
|
|
||||||
[8279] = true,
|
|
||||||
[8287] = true,
|
|
||||||
[8314] = true,
|
|
||||||
},
|
|
||||||
[5] = { -- Phase 5 - AQ
|
|
||||||
[8277] = true,
|
|
||||||
[8280] = true,
|
|
||||||
[8283] = true,
|
|
||||||
[8284] = true,
|
|
||||||
[8304] = true,
|
|
||||||
[8318] = true,
|
|
||||||
[8320] = true,
|
|
||||||
[8361] = true,
|
|
||||||
[8276] = true,
|
|
||||||
[8747] = true,
|
|
||||||
[8748] = true,
|
|
||||||
[8749] = true,
|
|
||||||
[8750] = true,
|
|
||||||
[8752] = true,
|
|
||||||
[8753] = true,
|
|
||||||
[8754] = true,
|
|
||||||
[8755] = true,
|
|
||||||
[8757] = true,
|
|
||||||
[8758] = true,
|
|
||||||
[8759] = true,
|
|
||||||
[8760] = true,
|
|
||||||
[8800] = true,
|
|
||||||
[8751] = true,
|
|
||||||
[8756] = true,
|
|
||||||
[8761] = true,
|
|
||||||
[8801] = true,
|
|
||||||
[8802] = true,
|
|
||||||
[8764] = true,
|
|
||||||
[8765] = true,
|
|
||||||
[8766] = true,
|
|
||||||
[8620] = true,
|
|
||||||
[8621] = true,
|
|
||||||
[8622] = true,
|
|
||||||
[8623] = true,
|
|
||||||
[8624] = true,
|
|
||||||
[8625] = true,
|
|
||||||
[8626] = true,
|
|
||||||
[8627] = true,
|
|
||||||
[8628] = true,
|
|
||||||
[8629] = true,
|
|
||||||
[8630] = true,
|
|
||||||
[8631] = true,
|
|
||||||
[8632] = true,
|
|
||||||
[8633] = true,
|
|
||||||
[8634] = true,
|
|
||||||
[8637] = true,
|
|
||||||
[8638] = true,
|
|
||||||
[8639] = true,
|
|
||||||
[8640] = true,
|
|
||||||
[8641] = true,
|
|
||||||
[8655] = true,
|
|
||||||
[8656] = true,
|
|
||||||
[8657] = true,
|
|
||||||
[8658] = true,
|
|
||||||
[8659] = true,
|
|
||||||
[8660] = true,
|
|
||||||
[8661] = true,
|
|
||||||
[8662] = true,
|
|
||||||
[8663] = true,
|
|
||||||
[8664] = true,
|
|
||||||
[8665] = true,
|
|
||||||
[8666] = true,
|
|
||||||
[8667] = true,
|
|
||||||
[8668] = true,
|
|
||||||
[8669] = true,
|
|
||||||
[8689] = true,
|
|
||||||
[8690] = true,
|
|
||||||
[8691] = true,
|
|
||||||
[8692] = true,
|
|
||||||
[8693] = true,
|
|
||||||
[8694] = true,
|
|
||||||
[8695] = true,
|
|
||||||
[8696] = true,
|
|
||||||
[8697] = true,
|
|
||||||
[8698] = true,
|
|
||||||
[8699] = true,
|
|
||||||
[8700] = true,
|
|
||||||
[8701] = true,
|
|
||||||
[8702] = true,
|
|
||||||
[8703] = true,
|
|
||||||
[8704] = true,
|
|
||||||
[8705] = true,
|
|
||||||
[8706] = true,
|
|
||||||
[8707] = true,
|
|
||||||
[8708] = true,
|
|
||||||
[8709] = true,
|
|
||||||
[8710] = true,
|
|
||||||
[8711] = true,
|
|
||||||
[8712] = true,
|
|
||||||
[8728] = true,
|
|
||||||
[8729] = true,
|
|
||||||
[8730] = true,
|
|
||||||
[8733] = true,
|
|
||||||
[8734] = true,
|
|
||||||
[8735] = true,
|
|
||||||
[8736] = true,
|
|
||||||
[8741] = true,
|
|
||||||
[8742] = true,
|
|
||||||
[8743] = true,
|
|
||||||
[8745] = true,
|
|
||||||
[8783] = true,
|
|
||||||
[8784] = true,
|
|
||||||
[8789] = true,
|
|
||||||
[8790] = true,
|
|
||||||
[8791] = true,
|
|
||||||
[8602] = true,
|
|
||||||
[8603] = true,
|
|
||||||
[8606] = true,
|
|
||||||
[8592] = true,
|
|
||||||
[8593] = true,
|
|
||||||
[8594] = true,
|
|
||||||
[8595] = true,
|
|
||||||
[8596] = true,
|
|
||||||
[8597] = true,
|
|
||||||
[8598] = true,
|
|
||||||
[8599] = true,
|
|
||||||
[8584] = true,
|
|
||||||
[8585] = true,
|
|
||||||
[8586] = true,
|
|
||||||
[8587] = true,
|
|
||||||
[8555] = true,
|
|
||||||
[8556] = true,
|
|
||||||
[8557] = true,
|
|
||||||
[8558] = true,
|
|
||||||
[8559] = true,
|
|
||||||
[8560] = true,
|
|
||||||
[8561] = true,
|
|
||||||
[8562] = true,
|
|
||||||
[8572] = true,
|
|
||||||
[8573] = true,
|
|
||||||
[8574] = true,
|
|
||||||
[8575] = true,
|
|
||||||
[8576] = true,
|
|
||||||
[8577] = true,
|
|
||||||
[8578] = true,
|
|
||||||
[8496] = true,
|
|
||||||
[8579] = true,
|
|
||||||
[8544] = true,
|
|
||||||
[8519] = true,
|
|
||||||
[8856] = true,
|
|
||||||
[8829] = true,
|
|
||||||
[8497] = true,
|
|
||||||
[8804] = true,
|
|
||||||
[8805] = true,
|
|
||||||
[8536] = true,
|
|
||||||
[8857] = true,
|
|
||||||
[8498] = true,
|
|
||||||
[8806] = true,
|
|
||||||
[8308] = true,
|
|
||||||
[8858] = true,
|
|
||||||
[8859] = true,
|
|
||||||
[8807] = true,
|
|
||||||
[8771] = true,
|
|
||||||
[8773] = true,
|
|
||||||
[8775] = true,
|
|
||||||
[8777] = true,
|
|
||||||
[8809] = true,
|
|
||||||
[8787] = true,
|
|
||||||
[8785] = true,
|
|
||||||
[8538] = true,
|
|
||||||
[8534] = true,
|
|
||||||
[8738] = true,
|
|
||||||
[8502] = true,
|
|
||||||
[8537] = true,
|
|
||||||
[8539] = true,
|
|
||||||
[8786] = true,
|
|
||||||
[8737] = true,
|
|
||||||
[8687] = true,
|
|
||||||
[8739] = true,
|
|
||||||
[8501] = true,
|
|
||||||
[8535] = true,
|
|
||||||
[8808] = true,
|
|
||||||
[8810] = true,
|
|
||||||
[8740] = true,
|
|
||||||
[8381] = true,
|
|
||||||
[8779] = true,
|
|
||||||
[8540] = true,
|
|
||||||
[8541] = true,
|
|
||||||
[8778] = true,
|
|
||||||
[8780] = true,
|
|
||||||
[8781] = true,
|
|
||||||
[8782] = true,
|
|
||||||
[8770] = true,
|
|
||||||
[8772] = true,
|
|
||||||
[8774] = true,
|
|
||||||
[8776] = true,
|
|
||||||
[8316] = true,
|
|
||||||
[9023] = true,
|
|
||||||
[8382] = true,
|
|
||||||
[8286] = true,
|
|
||||||
[8288] = true,
|
|
||||||
[8301] = true,
|
|
||||||
[8302] = true,
|
|
||||||
[8303] = true,
|
|
||||||
[8305] = true,
|
|
||||||
[8548] = true,
|
|
||||||
[8818] = true,
|
|
||||||
[8817] = true,
|
|
||||||
[8816] = true,
|
|
||||||
[8815] = true,
|
|
||||||
[8814] = true,
|
|
||||||
[8820] = true,
|
|
||||||
[8826] = true,
|
|
||||||
[8825] = true,
|
|
||||||
[8824] = true,
|
|
||||||
[8823] = true,
|
|
||||||
[8822] = true,
|
|
||||||
[8821] = true,
|
|
||||||
[8819] = true,
|
|
||||||
},
|
|
||||||
[6] = { --Phase 6 - Naxxramas
|
|
||||||
[9085] = true,
|
|
||||||
[9142] = true,
|
|
||||||
[9165] = true,
|
|
||||||
[9141] = true,
|
|
||||||
[9033] = true,
|
|
||||||
[9034] = true,
|
|
||||||
[9036] = true,
|
|
||||||
[9037] = true,
|
|
||||||
[9038] = true,
|
|
||||||
[9039] = true,
|
|
||||||
[9040] = true,
|
|
||||||
[9041] = true,
|
|
||||||
[9042] = true,
|
|
||||||
[9043] = true,
|
|
||||||
[9044] = true,
|
|
||||||
[9045] = true,
|
|
||||||
[9046] = true,
|
|
||||||
[9047] = true,
|
|
||||||
[9048] = true,
|
|
||||||
[9049] = true,
|
|
||||||
[9050] = true,
|
|
||||||
[9054] = true,
|
|
||||||
[9055] = true,
|
|
||||||
[9056] = true,
|
|
||||||
[9057] = true,
|
|
||||||
[9058] = true,
|
|
||||||
[9059] = true,
|
|
||||||
[9060] = true,
|
|
||||||
[9061] = true,
|
|
||||||
[9068] = true,
|
|
||||||
[9069] = true,
|
|
||||||
[9070] = true,
|
|
||||||
[9071] = true,
|
|
||||||
[9072] = true,
|
|
||||||
[9073] = true,
|
|
||||||
[9074] = true,
|
|
||||||
[9075] = true,
|
|
||||||
[9077] = true,
|
|
||||||
[9078] = true,
|
|
||||||
[9079] = true,
|
|
||||||
[9080] = true,
|
|
||||||
[9081] = true,
|
|
||||||
[9082] = true,
|
|
||||||
[9083] = true,
|
|
||||||
[9084] = true,
|
|
||||||
[9086] = true,
|
|
||||||
[9087] = true,
|
|
||||||
[9088] = true,
|
|
||||||
[9089] = true,
|
|
||||||
[9090] = true,
|
|
||||||
[9091] = true,
|
|
||||||
[9092] = true,
|
|
||||||
[9093] = true,
|
|
||||||
[9095] = true,
|
|
||||||
[9096] = true,
|
|
||||||
[9097] = true,
|
|
||||||
[9098] = true,
|
|
||||||
[9099] = true,
|
|
||||||
[9100] = true,
|
|
||||||
[9101] = true,
|
|
||||||
[9102] = true,
|
|
||||||
[9103] = true,
|
|
||||||
[9104] = true,
|
|
||||||
[9105] = true,
|
|
||||||
[9106] = true,
|
|
||||||
[9107] = true,
|
|
||||||
[9108] = true,
|
|
||||||
[9109] = true,
|
|
||||||
[9110] = true,
|
|
||||||
[9111] = true,
|
|
||||||
[9112] = true,
|
|
||||||
[9113] = true,
|
|
||||||
[9114] = true,
|
|
||||||
[9115] = true,
|
|
||||||
[9116] = true,
|
|
||||||
[9117] = true,
|
|
||||||
[9118] = true,
|
|
||||||
[9120] = true,
|
|
||||||
[9121] = true,
|
|
||||||
[9122] = true,
|
|
||||||
[9123] = true,
|
|
||||||
[9124] = true,
|
|
||||||
[9125] = true,
|
|
||||||
[9126] = true,
|
|
||||||
[9127] = true,
|
|
||||||
[9128] = true,
|
|
||||||
[9129] = true,
|
|
||||||
[9131] = true,
|
|
||||||
[9132] = true,
|
|
||||||
[9136] = true,
|
|
||||||
[9137] = true,
|
|
||||||
[9153] = true,
|
|
||||||
[9211] = true,
|
|
||||||
[9213] = true,
|
|
||||||
[9221] = true,
|
|
||||||
[9222] = true,
|
|
||||||
[9223] = true,
|
|
||||||
[9224] = true,
|
|
||||||
[9225] = true,
|
|
||||||
[9226] = true,
|
|
||||||
[9227] = true,
|
|
||||||
[9228] = true,
|
|
||||||
[9229] = true,
|
|
||||||
[9230] = true,
|
|
||||||
[9232] = true,
|
|
||||||
[9233] = true,
|
|
||||||
[9234] = true,
|
|
||||||
[9235] = true,
|
|
||||||
[9236] = true,
|
|
||||||
[9237] = true,
|
|
||||||
[9238] = true,
|
|
||||||
[9239] = true,
|
|
||||||
[9240] = true,
|
|
||||||
[9241] = true,
|
|
||||||
[9242] = true,
|
|
||||||
[9243] = true,
|
|
||||||
[9244] = true,
|
|
||||||
[9245] = true,
|
|
||||||
[9246] = true,
|
|
||||||
[9250] = true,
|
|
||||||
[9251] = true,
|
|
||||||
-- Silithus/EPL PvP
|
|
||||||
[9248] = true,
|
|
||||||
[9422] = true,
|
|
||||||
[9415] = true,
|
|
||||||
[9419] = true,
|
|
||||||
[9416] = true,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
---@return table<number, table<number, boolean>> @All quests that should be blacklisted separated by phase
|
|
||||||
function QuestieQuestBlacklist:GetSoMQuestsToBlacklist()
|
|
||||||
for phase = 1, currentPhase do
|
|
||||||
questsToBlacklistBySoMPhase[phase] = {} -- empty table instead of nil to keep table size
|
|
||||||
end
|
|
||||||
return questsToBlacklistBySoMPhase
|
|
||||||
end
|
|
||||||
@@ -16,6 +16,7 @@ local l10n = QuestieLoader:ImportModule("l10n")
|
|||||||
-- https://github.com/Questie/Questie/wiki/Corrections
|
-- https://github.com/Questie/Questie/wiki/Corrections
|
||||||
|
|
||||||
function QuestieQuestFixes:LoadMissingQuests()
|
function QuestieQuestFixes:LoadMissingQuests()
|
||||||
|
if not QuestieDB.questData then return end
|
||||||
QuestieDB.questData[5640] = {} -- Desperate Prayer
|
QuestieDB.questData[5640] = {} -- Desperate Prayer
|
||||||
QuestieDB.questData[5678] = {} -- Arcane Feedback
|
QuestieDB.questData[5678] = {} -- Arcane Feedback
|
||||||
|
|
||||||
|
|||||||
@@ -1,174 +0,0 @@
|
|||||||
---@type SeasonOfDiscovery
|
|
||||||
local SeasonOfDiscovery = QuestieLoader:ImportModule("SeasonOfDiscovery")
|
|
||||||
---@type QuestieDB
|
|
||||||
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
|
|
||||||
|
|
||||||
function SeasonOfDiscovery:LoadItems()
|
|
||||||
local itemKeys = QuestieDB.itemKeys
|
|
||||||
local itemClasses = QuestieDB.itemClasses
|
|
||||||
|
|
||||||
return {
|
|
||||||
[5359] = { -- Lorgalis Manuscript
|
|
||||||
[itemKeys.relatedQuests] = {78923}, -- SoD Knowledge in the Deeps
|
|
||||||
},
|
|
||||||
[5881] = { -- Head of Kelris
|
|
||||||
[itemKeys.relatedQuests] = {78921,78922}, -- SoD Blackfathom Villainy A,H
|
|
||||||
[itemKeys.npcDrops] = {209678}, -- now drops from raid version of npc
|
|
||||||
},
|
|
||||||
[5952] = { -- Corrupted Brain Stem
|
|
||||||
[itemKeys.relatedQuests] = {78926}, -- SoD Researching the Corruption
|
|
||||||
[itemKeys.npcDrops] = {216660, 4788, 4789, 4803, 4802, 4805, 4807, 4799, 4798, 204645, 216662, 4831, 216659, 216661, 204068}, -- now drops from raid version of npc
|
|
||||||
},
|
|
||||||
[204806] = { -- Rune of Victory Rush
|
|
||||||
[itemKeys.npcDrops] = {706,946,1986},
|
|
||||||
},
|
|
||||||
[205944] = { -- Reciprocal Epiphany
|
|
||||||
[itemKeys.npcDrops] = {204937},
|
|
||||||
},
|
|
||||||
[206157] = { -- Seaforium Mining Charge
|
|
||||||
[itemKeys.objectDrops] = {403041},
|
|
||||||
},
|
|
||||||
[206170] = { -- Windfury Cone
|
|
||||||
[itemKeys.objectDrops] = {403105},
|
|
||||||
},
|
|
||||||
[206264] = { -- Rune of Inspiration
|
|
||||||
[itemKeys.npcDrops] = {204937},
|
|
||||||
},
|
|
||||||
[206469] = { -- Prairie Flower
|
|
||||||
[itemKeys.objectDrops] = {403718},
|
|
||||||
},
|
|
||||||
[208085] = { -- Scarlet Lieutenant Signet Ring
|
|
||||||
[itemKeys.npcDrops] = {1662,1664,1665},
|
|
||||||
},
|
|
||||||
[208609] = { -- Glade Flower
|
|
||||||
[itemKeys.objectDrops] = {407247},
|
|
||||||
},
|
|
||||||
[208612] = { -- Severed Spider Head
|
|
||||||
[itemKeys.npcDrops] = {1998,1999,2000,2001},
|
|
||||||
},
|
|
||||||
[208689] = { -- Ferocious Idol
|
|
||||||
[itemKeys.npcDrops] = {98,117,500,1972,6788},
|
|
||||||
},
|
|
||||||
[208771] = { -- Rune of Blade Dance
|
|
||||||
[itemKeys.objectDrops] = {407453,408718,414532},
|
|
||||||
},
|
|
||||||
[208772] = { -- Rune of Saber Slash
|
|
||||||
[itemKeys.objectDrops] = {407457,407731,409131,414624},
|
|
||||||
},
|
|
||||||
[209693] = { -- Alliance Blackfathom Pearl
|
|
||||||
[itemKeys.relatedQuests] = {78916},
|
|
||||||
[itemKeys.startQuest] = 78916,
|
|
||||||
},
|
|
||||||
[209846] = { -- Secrets of the Dreamers
|
|
||||||
[itemKeys.objectDrops] = {409692},
|
|
||||||
},
|
|
||||||
[210026] = { -- Symbol of the Third Owl
|
|
||||||
[itemKeys.objectDrops] = {409942,409949},
|
|
||||||
},
|
|
||||||
[210044] = { -- Symbol of the First Owl
|
|
||||||
[itemKeys.objectDrops] = {410220},
|
|
||||||
},
|
|
||||||
[210055] = { -- Hillsbrad Human Bones
|
|
||||||
[itemKeys.npcDrops] = {2265,2266,2267,2268,2360,2387},
|
|
||||||
},
|
|
||||||
[210195] = { -- Unbalanced Idol
|
|
||||||
[itemKeys.npcDrops] = {1769,1770,1779},
|
|
||||||
},
|
|
||||||
[210589] = { -- Echo of the Ancestors
|
|
||||||
[itemKeys.npcDrops] = {204937},
|
|
||||||
},
|
|
||||||
[210955] = { -- Scarlet Initiate's Uniform
|
|
||||||
[itemKeys.objectDrops] = {412147},
|
|
||||||
},
|
|
||||||
[211452] = { -- Horde Blackfathom Pearl
|
|
||||||
[itemKeys.relatedQuests] = {78917},
|
|
||||||
[itemKeys.startQuest] = 78917,
|
|
||||||
},
|
|
||||||
[211454] = { -- Horde Strange Water Globe (starts Baron Aquanis)
|
|
||||||
[itemKeys.relatedQuests] = {78920},
|
|
||||||
[itemKeys.startQuest] = 78920,
|
|
||||||
},
|
|
||||||
[211818] = { -- Alliance Strange Water Globe (required for but does not start Baron Aquanis)
|
|
||||||
[itemKeys.relatedQuests] = {79099},
|
|
||||||
[itemKeys.startQuest] = nil,
|
|
||||||
},
|
|
||||||
[212347] = { -- Illari's Key
|
|
||||||
[itemKeys.npcDrops] = {215655},
|
|
||||||
},
|
|
||||||
[213446] = { -- Tarnished Prayer Bead III
|
|
||||||
[itemKeys.npcDrops] = {2552,2553,2554,2555,2556,2557,2562,2564,2566,2569,2570,2572,2573,2574,2575,2586,2587,2588,2589,2590,2618,2619,4062},
|
|
||||||
},
|
|
||||||
[215376] = { -- Crusader's Mace
|
|
||||||
[itemKeys.npcDrops] = {4281,4283,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302,4303,4306,4540},
|
|
||||||
},
|
|
||||||
[216635] = { -- Spent Voidcore
|
|
||||||
[itemKeys.npcDrops] = {5335,5336,5337},
|
|
||||||
},
|
|
||||||
[216946] = { -- Glittering Dalaran Relic
|
|
||||||
[itemKeys.npcDrops] = {900000},
|
|
||||||
},
|
|
||||||
[216947] = { -- Whirring Dalaran Relic
|
|
||||||
[itemKeys.npcDrops] = {900001},
|
|
||||||
},
|
|
||||||
[216948] = { -- Odd Dalaran Relic
|
|
||||||
[itemKeys.npcDrops] = {900002},
|
|
||||||
},
|
|
||||||
[216949] = { -- Heavy Dalaran Relic
|
|
||||||
[itemKeys.npcDrops] = {900003},
|
|
||||||
},
|
|
||||||
[216950] = { -- Creepy Dalaran Relic
|
|
||||||
[itemKeys.npcDrops] = {900004},
|
|
||||||
},
|
|
||||||
[216951] = { -- Slippery Dalaran Relic
|
|
||||||
[itemKeys.npcDrops] = {900005},
|
|
||||||
},
|
|
||||||
[219759] = { -- Charla's Field Report
|
|
||||||
[itemKeys.npcDrops] = {221472},
|
|
||||||
},
|
|
||||||
[219770] = { -- Gemeron's Field Report
|
|
||||||
[itemKeys.npcDrops] = {221482},
|
|
||||||
},
|
|
||||||
[219771] = { -- Thandros' Field Report
|
|
||||||
[itemKeys.npcDrops] = {221484},
|
|
||||||
},
|
|
||||||
[219772] = { -- Fallia's Field Report
|
|
||||||
[itemKeys.npcDrops] = {221483},
|
|
||||||
},
|
|
||||||
[219776] = { -- Intelligence Report: Vul'gol Ogre Mound
|
|
||||||
[itemKeys.npcDrops] = {221222},
|
|
||||||
},
|
|
||||||
[219778] = { -- Intelligence Report: Rotting Orchard
|
|
||||||
[itemKeys.npcDrops] = {221221},
|
|
||||||
},
|
|
||||||
[219803] = { -- Intelligence Report: Yorgen Farmstead
|
|
||||||
[itemKeys.npcDrops] = {221220},
|
|
||||||
},
|
|
||||||
[219924] = { -- Intelligence Report: Forest Song
|
|
||||||
[itemKeys.npcDrops] = {221271},
|
|
||||||
},
|
|
||||||
[219925] = { -- Intelligence Report: Satyrnaar
|
|
||||||
[itemKeys.npcDrops] = {221272},
|
|
||||||
},
|
|
||||||
[219926] = { -- Intelligence Report: Warsong Lumber Camp
|
|
||||||
[itemKeys.npcDrops] = {221273},
|
|
||||||
},
|
|
||||||
[219928] = { -- Intelligence Report: Agol'watha
|
|
||||||
[itemKeys.npcDrops] = {221353},
|
|
||||||
},
|
|
||||||
[219937] = { -- Intelligence Report: Shaol'watha
|
|
||||||
[itemKeys.npcDrops] = {221352},
|
|
||||||
},
|
|
||||||
[219938] = { -- Intelligence Report: Skulk Rock
|
|
||||||
[itemKeys.npcDrops] = {221351},
|
|
||||||
},
|
|
||||||
[219957] = { -- Intelligence Report: Oneiros
|
|
||||||
[itemKeys.npcDrops] = {221401},
|
|
||||||
},
|
|
||||||
[219958] = { -- Intelligence Report: Twin Colossals
|
|
||||||
[itemKeys.npcDrops] = {221402},
|
|
||||||
},
|
|
||||||
[219959] = { -- Intelligence Report: Ruins of Ravenwind
|
|
||||||
[itemKeys.npcDrops] = {221404},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end
|
|
||||||
@@ -1,714 +0,0 @@
|
|||||||
---@type SeasonOfDiscovery
|
|
||||||
local SeasonOfDiscovery = QuestieLoader:ImportModule("SeasonOfDiscovery")
|
|
||||||
---@type QuestieDB
|
|
||||||
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
|
|
||||||
---@type ZoneDB
|
|
||||||
local ZoneDB = QuestieLoader:ImportModule("ZoneDB")
|
|
||||||
|
|
||||||
function SeasonOfDiscovery:LoadNPCs()
|
|
||||||
local npcKeys = QuestieDB.npcKeys
|
|
||||||
local zoneIDs = ZoneDB.zoneIDs
|
|
||||||
local npcFlags = QuestieDB.npcFlags
|
|
||||||
local waypointPresets = QuestieDB.waypointPresets
|
|
||||||
|
|
||||||
return {
|
|
||||||
[15076] = { -- Zandalarian Emissary
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.STRANGLETHORN_VALE] = {{27.2, 77.0},{39.5, 5.0}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[202060] = { -- Frozen Murloc
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ELWYNN_FOREST] = {{76.8, 51.4}},
|
|
||||||
[zoneIDs.TIRISFAL_GLADES] = {{66.4, 40.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[202699] = { -- Baron Aquanis
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.BLACKFATHOM_DEEPS] = {{-1, -1}},
|
|
||||||
},
|
|
||||||
[npcKeys.zoneID] = zoneIDs.BLACKFATHOM_DEEPS,
|
|
||||||
},
|
|
||||||
[203079] = { -- Wandering Swordsman
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[1] = {{53.5, 47.5}},
|
|
||||||
[12] = {{24.6, 75.2},{38.6, 75.2}},
|
|
||||||
[14] = {{36, 47.4},{41, 49.4},{55.8, 38.4},{56.6, 26.6}},
|
|
||||||
[141] = {{39.6, 37.6},{39.8, 69.4},{43.8, 77},{54.8, 66},{62.6, 71.8}},
|
|
||||||
[215] = {{40.4, 53.2},{45.6, 36.4},{60.2, 67.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[203226] = { -- Viktoria Woods
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.STORMWIND_CITY] = {{69.6, 50.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[203475] = { -- Liv Bradford
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.STORMWIND_CITY] = {{22.4, 64.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[203478] = { -- Stuart
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.STORMWIND_CITY] = {{22.6, 54.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[204068] = { -- Lady Sarevess
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.BLACKFATHOM_DEEPS] = {{-1, -1}},
|
|
||||||
},
|
|
||||||
[npcKeys.zoneID] = zoneIDs.BLACKFATHOM_DEEPS,
|
|
||||||
},
|
|
||||||
[204070] = { -- Soboz
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[1] = {{42, 36.6}},
|
|
||||||
[14] = {{67.4, 89.2}},
|
|
||||||
[1497] = {{24.6, 40.6}},
|
|
||||||
[1519] = {{25, 77.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[204827] = { -- Adventurer's Remains
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUN_MOROGH] = {{43, 49.4}},
|
|
||||||
[zoneIDs.ELWYNN_FOREST] = {{52.2, 84.4}},
|
|
||||||
[zoneIDs.DUROTAR] = {{48, 79.4}},
|
|
||||||
[zoneIDs.TELDRASSIL] = {{33.6, 35.4}},
|
|
||||||
[zoneIDs.MULGORE] = {{60.4, 33.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[204989] = { -- Wounded Adventurer
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ELWYNN_FOREST] = {{61.8, 47.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[204503] = { -- Dead Acolyte
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ELWYNN_FOREST] = {{56.4, 57.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[205153] = { -- Ada Gelhardt
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUSKWOOD] = {{4.4, 28.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[205278] = { -- Brother Romulus
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.STORMWIND_CITY] = {{38.4, 27.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[205382] = { -- Mokwa
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.MULGORE] = {{35.8, 57.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[206248] = { -- Wooden Effigy
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.TELDRASSIL] = {{66.8, 58}},
|
|
||||||
[zoneIDs.MULGORE] = {{37.4, 49.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[207515] = { -- Lurkmane
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.MULGORE] = {{30.6, 61.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[207577] = { -- Lunar Stone
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.TELDRASSIL] = {{52.8, 79.8}},
|
|
||||||
[zoneIDs.MULGORE] = {{35.2, 69.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[207743] = { -- Netali Proudwind
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THUNDER_BLUFF] = {{28.6, 18.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[207754] = { -- Mooart
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THUNDER_BLUFF] = {{26.6,19.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[207957] = { -- Vahi Bonesplitter
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUROTAR] = {{53, 43.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[208023] = { -- Gru'ark
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ORGRIMMAR] = {{58.8, 53.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[208124] = { -- Raluk
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUROTAR] = {{68.6, 71.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[208196] = { -- Gillgar
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.TIRISFAL_GLADES] = {{28.4, 46.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[208275] = { -- Frozen Makrura
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUROTAR] = {{58.6, 45.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[208619] = { -- Dorac Graves
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.TIRISFAL_GLADES] = {{47.2, 71.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[208638] = { -- Fyodi
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUN_MOROGH] = {{35.4,37.4},{30.4,41.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[208652] = { -- Junni Steelpass
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUN_MOROGH] = {{46.4, 53.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[208711] = { -- Toby
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUN_MOROGH] = {{63.6, 50.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[208752] = { -- Frozen Trogg
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUN_MOROGH] = {{69.2, 58.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[208802] = { -- Wounded Adventurer
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUN_MOROGH] = {{25.4, 43.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[208812] = { -- Jorul
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUN_MOROGH] = {{37.8, 42.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[208919] = { -- Blueheart
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.TIRISFAL_GLADES] = {{61.6, 51.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[208927] = { -- Dead Acolyte
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.TIRISFAL_GLADES] = {{76.4, 44.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[209004] = { -- Bruart
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.IRONFORGE] = {{71.2, 73.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[209524] = { -- Patrolling Cheetah
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {{44.4, 55.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[209607] = { -- Lieutenant Stonebrew
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[209608] = { -- Delwynna
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DARNASSUS] = {{63.4, 22}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[209678] = { -- Twilight Lord Kelris
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.BLACKFATHOM_DEEPS] = {{-1, -1}},
|
|
||||||
},
|
|
||||||
[npcKeys.zoneID] = zoneIDs.BLACKFATHOM_DEEPS,
|
|
||||||
},
|
|
||||||
[209742] = { -- Desert Mirage
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {{57.6, 35.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[209797] = { -- Bruuz
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {{64.8, 39.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[209872] = { -- Syllart
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.TELDRASSIL] = {{56.6, 57.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[209908] = { -- Heretic Idol
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.LOCH_MODAN] = {{71.8, 27.0}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[209928] = { -- Mowgh
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.TELDRASSIL] = {{48.0, 31.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[209948] = { -- Relaeron
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DARNASSUS] = {{39.2, 9.0}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[209954] = { -- Demonic Remains
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.LOCH_MODAN] = {{72.6, 68.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[209958] = { -- Graix
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.LOCH_MODAN] = {{72.6, 68.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[210107] = { -- Kackle
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.LOCH_MODAN] = {{55.0, 55.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[210451] = { -- Lady Sedorax
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DARKSHORE] = {{55.4, 36.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[210482] = { -- Paxnozz
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DARKSHORE] = {{47.8, 16.0}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[210483] = { -- Aggressive Squashling
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.WESTFALL] = {{51.2, 22.3},{54, 31.8},{44.6, 35.2},{38.4, 52.5},{62.5, 61.1}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[210533] = { -- Silverspur
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.WESTFALL] = {{35.6, 38.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[210537] = { -- Undying Laborer
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.WESTFALL] = {{44.9, 24},{31.5, 45}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[210549] = { -- Defias Scout
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.WESTFALL] = {{51.2, 46.8},{51.6, 55.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[210845] = { -- Jixo Madrocket
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.STONETALON_MOUNTAINS] = {{59.2, 62.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[210995] = { -- Alonso
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{43.4, 70.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[211022] = { -- Owen Thadd
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.UNDERCITY] = {{73.4, 33}},
|
|
||||||
},
|
|
||||||
[npcKeys.friendlyToFaction] = "H",
|
|
||||||
},
|
|
||||||
[211033] = { -- Garion Wendell
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.STORMWIND_CITY] = {{37.8, 80.2}},
|
|
||||||
},
|
|
||||||
[npcKeys.friendlyToFaction] = "A",
|
|
||||||
},
|
|
||||||
[211146] = { -- Lost Adventurer
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.SILVERPINE_FOREST] = {},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[211736] = { -- Grizzled Protector
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.SILVERPINE_FOREST] = {},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[211951] = { -- Koartul
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.HILLSBRAD_FOOTHILLS] = {{60.8, 31.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[211965] = { -- Carrodin
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.WETLANDS] = {{46.6, 65.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[211200] = { -- Agon
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUSKWOOD] = {{65.1, 23.7}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212261] = { -- Awakened Lich
|
|
||||||
[npcKeys.spawns] = {},
|
|
||||||
},
|
|
||||||
[212694] = { -- Hirzek
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {{43.2, 78.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212699] = { -- Silverwing Archer
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{28.6, 27.4},{51.2, 55.6},{59, 72.4},{73.6, 74.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212703] = { -- Silverwing Dryad
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{28.6, 27.4},{51.2, 55.6},{59, 72.4},{73.6, 74.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212706] = { -- Silverwing Druid
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{28.6, 27.4},{51.2, 55.6},{59, 72.4},{73.6, 74.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212707] = { -- Larodar
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{51.6, 54.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212727] = { -- Warsong Grunt
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{21.8, 38.6},{40.2, 65.2},{54, 54.6},{69.4, 62.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212728] = { -- Warsong Raider
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{21.8, 38.6},{40.2, 65.2},{54, 54.6},{69.4, 62.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212729] = { -- Warsong Shaman
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{21.8, 38.6},{40.2, 65.2},{54, 54.6},{69.4, 62.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212730] = { -- Tojara
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{53.6, 54.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212801] = { -- Jubei
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{21.6, 36.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212802] = { -- Moogul the Sly
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{70.2, 62.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212803] = { -- Ceredwyn
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{73.4, 73.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212804] = { -- Centrius
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{28.6, 27.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212809] = { -- Wailing Spirit
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.SILVERPINE_FOREST] = {{59.6, 71.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212837] = { -- Primordial Anomaly
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.STONETALON_MOUNTAINS] = {{32.6, 67.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212969] = { -- Kazragore
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{39.4, 67.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[212970] = { -- Felore Moonray
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{59.8, 72.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[213077] = { -- Elaine Compton
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.STORMWIND_CITY] = {{54.4, 61.2}},
|
|
||||||
},
|
|
||||||
[npcKeys.friendlyToFaction] = "A",
|
|
||||||
},
|
|
||||||
[214070] = { -- Jornah
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ORGRIMMAR] = {{51.4, 63.8}},
|
|
||||||
},
|
|
||||||
[npcKeys.friendlyToFaction] = "H",
|
|
||||||
},
|
|
||||||
[214096] = { -- Dokimi
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THUNDER_BLUFF] = {{39.2, 53.4}},
|
|
||||||
},
|
|
||||||
[npcKeys.friendlyToFaction] = "H",
|
|
||||||
},
|
|
||||||
[214098] = { -- Gishah
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.UNDERCITY] = {{64, 39.2}},
|
|
||||||
},
|
|
||||||
[npcKeys.friendlyToFaction] = "H",
|
|
||||||
},
|
|
||||||
[214099] = { -- Tamelyn Aldridge
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.IRONFORGE] = {{24.4, 67.6}},
|
|
||||||
},
|
|
||||||
[npcKeys.friendlyToFaction] = "A",
|
|
||||||
},
|
|
||||||
[214101] = { -- Marcy Baker
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DARNASSUS] = {{59.8, 56.4}},
|
|
||||||
},
|
|
||||||
[npcKeys.friendlyToFaction] = "A",
|
|
||||||
},
|
|
||||||
[214456] = { -- Dro'zem the Blasphemous
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.REDRIDGE_MOUNTAINS] = {{35.4, 8.6},{64.2, 45.8},{77.4, 69.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[214519] = { -- Incinerator Gar'im
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.REDRIDGE_MOUNTAINS] = {{77.6, 85.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[215850] = { -- Raszel Ander
|
|
||||||
[npcKeys.friendlyToFaction] = "AH",
|
|
||||||
},
|
|
||||||
[216289] = { -- Orokai
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.MOONGLADE] = {{41.2, 43.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[216902] = { -- Wulmort Jinglepocket
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.IRONFORGE] = {{33.7, 67.23}},
|
|
||||||
},
|
|
||||||
[npcKeys.friendlyToFaction] = "AH",
|
|
||||||
},
|
|
||||||
[216915] = { -- Strange Snowman
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ALTERAC_MOUNTAINS]={{35.43, 72.45}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[216924] = { -- Kaymard Copperpinch
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ORGRIMMAR] = {{53.3, 66.47}},
|
|
||||||
},
|
|
||||||
[npcKeys.friendlyToFaction] = "AH",
|
|
||||||
},
|
|
||||||
[217392] = {
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DESOLACE]={{56.4, 21.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[217669] = { -- Scorched Screeching Roguefeather
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THOUSAND_NEEDLES] = {{26.4, 46.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[217683] = {
|
|
||||||
[npcKeys.zoneID] = zoneIDs.THOUSAND_NEEDLES,
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THOUSAND_NEEDLES] = {{39.4,42}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[217703] = { -- Singed Highperch Consort
|
|
||||||
[npcKeys.friendlyToFaction] = "H",
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THOUSAND_NEEDLES] = {{10.4, 40.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[217706] = { -- Kazragore
|
|
||||||
[npcKeys.friendlyToFaction] = "H",
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{74.0, 60.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[217707] = { -- Felore Moonray
|
|
||||||
[npcKeys.friendlyToFaction] = "A",
|
|
||||||
},
|
|
||||||
[217711] = { -- Seared Needles Cougar
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THOUSAND_NEEDLES] = {{23.4, 23.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[217412] = { -- Amaryllis Webb
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.SWAMP_OF_SORROWS] = {{25.2, 54.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[217588] = { -- Arbor Tarantula
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.STRANGLETHORN_VALE] = {{45.2, 19.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[217589] = { -- Hay Weevil
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ARATHI_HIGHLANDS] = {{30.8, 28.6},{54.2, 38.6},{61.2, 55.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[217590] = { -- Flesh Picker
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DESOLACE] = {{51.4, 59.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[218115] = { -- Mai'zin
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.STRANGLETHORN_VALE] = {{31.2, 48.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[218160] = { -- Aeonas the Vindicated
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.STORMWIND_CITY] = {{37.4, 31.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[218237] = { -- Wirdal Wondergear
|
|
||||||
[npcKeys.friendlyToFaction] = "AH",
|
|
||||||
[npcKeys.zoneID] = zoneIDs.FERALAS,
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.FERALAS] = {{84.2,43.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[218931] = { -- Dark Rider Deadwind Pass
|
|
||||||
[npcKeys.zoneID] = zoneIDs.DEADWIND_PASS,
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DEADWIND_PASS] = {{43,29}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[221210] = { -- Kroll Mountainshade
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUSKWOOD] = {{66.11, 69.28}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[221215] = { -- Alara Grovemender
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUSKWOOD] = {{49.15, 77.55}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[221216] = { -- Elenora Marshwalker
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUSKWOOD] = {{32.39, 69.48}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[221268] = { -- Doran Dreambough
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{87.23, 43.56}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[221269] = { -- Maseara Autumnmoon
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{81.2, 50.5}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[221270] = { -- Alyssian Windcaller
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{92, 54.0}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[221335] = { -- Elianar Shadowdrinker
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_HINTERLANDS] = {{53.47, 39.05}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[221336] = { -- Serlina Starbright
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_HINTERLANDS] = {{71.11, 47.98}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[221337] = { -- Veanna Cloudsleeper
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_HINTERLANDS] = {{57.29, 42.80}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[221395] = { -- Mellias Earthtender
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.FERALAS] = {{49.65, 15.35}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[221398] = { -- Nerene Brooksinger
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.FERALAS] = {{46.00, 16.50}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[221399] = { -- Jamniss Treemender
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.FERALAS] = {{40.62, 8.08}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[221484] = { -- Scout Thandros
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.FERALAS] = {{51.06,10.54}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[222188] = { -- Shadowy Figure
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.MOONGLADE] = {{52.12,40.89}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- fake NPCs
|
|
||||||
[900000] = {
|
|
||||||
[npcKeys.name] = "Dark Rider",
|
|
||||||
[npcKeys.minLevel] = 41,
|
|
||||||
[npcKeys.maxLevel] = 41,
|
|
||||||
[npcKeys.zoneID] = zoneIDs.DUSKWOOD,
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DUSKWOOD] = {{23,47}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[900001] = {
|
|
||||||
[npcKeys.name] = "Dark Rider",
|
|
||||||
[npcKeys.minLevel] = 41,
|
|
||||||
[npcKeys.maxLevel] = 41,
|
|
||||||
[npcKeys.zoneID] = zoneIDs.ARATHI_HIGHLANDS,
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.ARATHI_HIGHLANDS] = {{60,40}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[900002] = {
|
|
||||||
[npcKeys.name] = "Dark Rider",
|
|
||||||
[npcKeys.minLevel] = 41,
|
|
||||||
[npcKeys.maxLevel] = 41,
|
|
||||||
[npcKeys.zoneID] = zoneIDs.SWAMP_OF_SORROWS,
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.SWAMP_OF_SORROWS] = {{69,28}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[900003] = {
|
|
||||||
[npcKeys.name] = "Dark Rider",
|
|
||||||
[npcKeys.minLevel] = 41,
|
|
||||||
[npcKeys.maxLevel] = 41,
|
|
||||||
[npcKeys.zoneID] = zoneIDs.THE_BARRENS,
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {{52,36}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[900004] = {
|
|
||||||
[npcKeys.name] = "Dark Rider",
|
|
||||||
[npcKeys.minLevel] = 41,
|
|
||||||
[npcKeys.maxLevel] = 41,
|
|
||||||
[npcKeys.zoneID] = zoneIDs.DESOLACE,
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.DESOLACE] = {{65,25}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[900005] = {
|
|
||||||
[npcKeys.name] = "Dark Rider",
|
|
||||||
[npcKeys.minLevel] = 41,
|
|
||||||
[npcKeys.maxLevel] = 41,
|
|
||||||
[npcKeys.zoneID] = zoneIDs.BADLANDS,
|
|
||||||
[npcKeys.spawns] = {
|
|
||||||
[zoneIDs.BADLANDS] = {{58,54}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end
|
|
||||||
@@ -1,474 +0,0 @@
|
|||||||
---@type SeasonOfDiscovery
|
|
||||||
local SeasonOfDiscovery = QuestieLoader:ImportModule("SeasonOfDiscovery")
|
|
||||||
---@type QuestieDB
|
|
||||||
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
|
|
||||||
---@type ZoneDB
|
|
||||||
local ZoneDB = QuestieLoader:ImportModule("ZoneDB")
|
|
||||||
|
|
||||||
function SeasonOfDiscovery:LoadObjects()
|
|
||||||
local objectKeys = QuestieDB.objectKeys
|
|
||||||
local zoneIDs = ZoneDB.zoneIDs
|
|
||||||
|
|
||||||
return {
|
|
||||||
[386675] = { -- Buried Treasure
|
|
||||||
[objectKeys.zoneID] = zoneIDs.DUN_MOROGH,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DUN_MOROGH] = {{46.96,43.73}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[386691] = { -- Library Book
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.IRONFORGE] = {{76, 10.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[386777] = { -- Dusty Chest Stormwind
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.STORMWIND_CITY] = {{61.9, 29.3}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[402215] = { -- Charred Note
|
|
||||||
[objectKeys.zoneID] = zoneIDs.STORMWIND_CITY,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.STORMWIND_CITY] = {{33,24.7}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[403041] = { -- Blasting Supplies
|
|
||||||
[objectKeys.zoneID] = zoneIDs.MULGORE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.MULGORE] = {{63.8,44.1}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[403105] = { -- Windfury Cone
|
|
||||||
[objectKeys.zoneID] = zoneIDs.MULGORE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.MULGORE] = {{31.2,22.8},{31,26.4},{32.4,27.6},{35,13.6},{38.2,9},{39.6,7},{51,7.2},{55.2,12},{55.8,16}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[403718] = { -- Prairie Flower
|
|
||||||
[objectKeys.zoneID] = zoneIDs.MULGORE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.MULGORE] = {{37.81, 65.45},{38.17, 57.14},{39.85, 51.63},{41.39, 63.2},{45.01, 46.77},{50.97, 46.03},{51.77, 67.3},{53.29, 63.13},{54.31, 58.05},{58.41, 66.64},{58.85, 51.32}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[404352] = { -- Artifact Storage Mulgore
|
|
||||||
[objectKeys.zoneID] = zoneIDs.MULGORE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.MULGORE] = {{31.6, 49.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[405201] = { -- Shipwreck Cache Tirisfal Glades
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.TIRISFAL_GLADES] = {{66.7, 24.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[405946] = { -- Dusty Chest
|
|
||||||
[objectKeys.zoneID] = zoneIDs.IRONFORGE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.IRONFORGE] = {{52.0, 13.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[406736] = { -- Lost Stash
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.TIRISFAL_GLADES] = {{24.7, 59.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[407117] = { -- Abandoned Snapjaw Nest
|
|
||||||
[objectKeys.zoneID] = zoneIDs.THE_BARRENS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {{44,22}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[407120] = { -- Empty Snapjaw Nest
|
|
||||||
[objectKeys.zoneID] = zoneIDs.THE_BARRENS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {{48,40}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[407247] = { -- Glade Flower
|
|
||||||
[objectKeys.zoneID] = zoneIDs.TELDRASSIL,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.TELDRASSIL] = {{57.06, 65.57},{58.05, 73.19},{59.63, 60.05},{61.09, 54.02},{63.88, 64.90},{64.89, 54.77},{65.64, 59.22},{66.56, 51.55},{67.36, 64.15},{69.56, 55.75}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[407289] = { -- Horde Warbanner
|
|
||||||
[objectKeys.zoneID] = zoneIDs.THE_BARRENS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {{52.2,31.1}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[407291] = { -- Alliance Warbanner
|
|
||||||
[objectKeys.zoneID] = zoneIDs.THE_BARRENS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {{62.55,56.31}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[407453] = { -- Southsea Loot Stash
|
|
||||||
[objectKeys.zoneID] = zoneIDs.THE_BARRENS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {{61.81,45.84}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[407454] = { -- Gunpowder Keg
|
|
||||||
[objectKeys.zoneID] = zoneIDs.THE_BARRENS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {{61.78,45.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[407457] = { -- Stable Hand's Trunk
|
|
||||||
[objectKeys.zoneID] = zoneIDs.THE_BARRENS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {{61.3, 54.1}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[407505] = { -- Etched Carving
|
|
||||||
[objectKeys.zoneID] = zoneIDs.THE_BARRENS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {{45,79}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[407731] = { -- Stonemason's Toolbox
|
|
||||||
[objectKeys.zoneID] = zoneIDs.LOCH_MODAN,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.LOCH_MODAN] = {{46.5, 12.7}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[407734] = { -- Gnarlpine Cache
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.TELDRASSIL] = {{44.1, 61.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[407844] = { -- Libram of Blessings
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.LOCH_MODAN] = {{35.8, 49.5}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[407850] = { -- Sunken Reliquary
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.LOCH_MODAN] = {{36.8, 91.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[407918] = { -- Empty Trophy Display
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.LOCH_MODAN] = {{83.6, 65.5}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[408004] = { -- Tangled Blight Pile
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.LOCH_MODAN] = {{71.7, 21.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[408718] = { -- Equipment Stash
|
|
||||||
[objectKeys.zoneID] = zoneIDs.WESTFALL,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.WESTFALL] = {{40.8,80.24}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[408799] = { -- Idol of the Deep
|
|
||||||
[objectKeys.zoneID] = zoneIDs.WESTFALL,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.WESTFALL] = {{26,69.5}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[409289] = { -- Strange Orb
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DARKSHORE] = {{56.2, 26.4},},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[409311] = {
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{89.4, 77.1}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[409562] = { -- Spellbook
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.WESTFALL] = {{45.4, 70.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[409692] = { -- Scrolls
|
|
||||||
[objectKeys.zoneID] = zoneIDs.THE_BARRENS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.THE_BARRENS] = {{49.3,33.5}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[409731] = { -- Scrolls
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.LOCH_MODAN] = {{77.4, 14}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[409735] = { -- Spellbook
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DUSKWOOD] = {{16.7, 28.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[409942] = { -- Twin Owl Statue
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.HILLSBRAD_FOOTHILLS] = {{36.9, 76.1}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[409949] = { -- Twin Owl Statue
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.HILLSBRAD_FOOTHILLS] = {{54.0, 83.0}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[410020] = { -- Owl Statue
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{87.0, 43.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[410089] = { -- Owl Statue
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DUSKWOOD] = {{49.5, 33.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[410847] = { -- Rusty Safe Western Plaguelands
|
|
||||||
[objectKeys.zoneID] = zoneIDs.WESTERN_PLAGUELANDS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.WESTERN_PLAGUELANDS] = {{59.5, 84.5}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[411328] = { -- Slumbering Bones
|
|
||||||
[objectKeys.zoneID] = zoneIDs.DUSKWOOD,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DUSKWOOD] = {{17,37.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[411674] = { -- Prophecy of a King's Demise
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[130] = {{65.8, 23.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[412147] = { -- Supply Locker
|
|
||||||
[objectKeys.zoneID] = zoneIDs.TIRISFAL_GLADES,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.TIRISFAL_GLADES] = {{81.18,32.12}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[414658] = { -- Rubble
|
|
||||||
[objectKeys.zoneID] = zoneIDs.HILLSBRAD_FOOTHILLS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.HILLSBRAD_FOOTHILLS] = {{79.7, 40.9}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[415107] = {
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.WESTFALL] = {{37.4, 50.7}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[419741] = { -- Sacrificial Altar
|
|
||||||
[objectKeys.zoneID] = zoneIDs.DESOLACE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DESOLACE] = {{81.4,79.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[420055] = { -- Rowboat
|
|
||||||
[objectKeys.zoneID] = zoneIDs.ARATHI_HIGHLANDS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.ARATHI_HIGHLANDS] = {{53.7,91.9}},
|
|
||||||
[zoneIDs.WETLANDS] = {{58.31,6.94}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[422895] = {
|
|
||||||
[objectKeys.zoneID] = zoneIDs.DESOLACE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DESOLACE] = {{39,57}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[423898] = { -- Mysterious Book
|
|
||||||
[objectKeys.zoneID] = zoneIDs.DESOLACE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DESOLACE] = {{55,26.2}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[424074] = { -- Quadrangulation Beacon 001
|
|
||||||
[objectKeys.zoneID] = zoneIDs.DUSTWALLOW_MARSH,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DUSTWALLOW_MARSH] = {{58.6, 13.0}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[424075] = { -- Quadrangulation Beacon 002
|
|
||||||
[objectKeys.zoneID] = zoneIDs.DESOLACE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DESOLACE] = {{32.0, 72.7}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[424076] = { -- Quadrangulation Beacon 003
|
|
||||||
[objectKeys.zoneID] = zoneIDs.TANARIS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.TANARIS] = {{37.8, 27.3}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[424077] = { -- Quadrangulation Beacon 004
|
|
||||||
[objectKeys.zoneID] = zoneIDs.FERALAS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.FERALAS] = {{29.3, 93.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[424082] = {
|
|
||||||
[objectKeys.spawns] = {},
|
|
||||||
},
|
|
||||||
[424264] = { -- Grave
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DUSTWALLOW_MARSH] = {{63.7, 42.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[424265] = { -- Grave
|
|
||||||
[objectKeys.zoneID] = zoneIDs.SWAMP_OF_SORROWS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.SWAMP_OF_SORROWS] = {{16.8,53.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[424266] = { -- Grave
|
|
||||||
[objectKeys.zoneID] = zoneIDs.SCARLET_MONASTERY,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.SCARLET_MONASTERY] = {{-1,-1}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[424267] = { -- Grave
|
|
||||||
[objectKeys.zoneID] = zoneIDs.ARATHI_HIGHLANDS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.ARATHI_HIGHLANDS] = {{62,54}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[441848] = { -- Small Burrow
|
|
||||||
[objectKeys.zoneID] = zoneIDs.STRANGLETHORN_VALE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.STRANGLETHORN_VALE] = {{40.75,85.72}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- fake ID - no clue yet what the correct ones are
|
|
||||||
[450000] = {
|
|
||||||
[objectKeys.name] = "Arcane Shard",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.ASHENVALE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{13.1,24.8},{13,15},{14,19}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450001] = {
|
|
||||||
[objectKeys.name] = "The Lessons of Ta'zo",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.ORGRIMMAR,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.ORGRIMMAR] = {{38.7,78.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450002] = {
|
|
||||||
[objectKeys.name] = "Medusa Statue",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.WESTFALL,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.WESTFALL] = {{26,70}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450003] = {
|
|
||||||
[objectKeys.name] = "Thistlefur Dreamcatcher",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.ASHENVALE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{38,26}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450004] = {
|
|
||||||
[objectKeys.name] = "Wishing Well",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.LOCH_MODAN,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.ASHENVALE] = {{36.4,19.6}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450005] = {
|
|
||||||
[objectKeys.name] = "Buried Treasure",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.ELWYNN_FOREST,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.ELWYNN_FOREST] = {{80.3, 79.1}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450006] = {
|
|
||||||
[objectKeys.name] = "Buried Treasure",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.DUROTAR,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DUROTAR] = {{62.1, 94.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450007] = {
|
|
||||||
[objectKeys.name] = "Buried Treasure",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.TIRISFAL_GLADES,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.TIRISFAL_GLADES] = {{52.9, 54}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450008] = {
|
|
||||||
[objectKeys.name] = "Buried Treasure",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.TELDRASSIL,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.TELDRASSIL] = {{55.3, 90.8}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450009] = {
|
|
||||||
[objectKeys.name] = "Secluded Grave",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.DUSKWOOD,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DUSKWOOD] = {{90.9,30.5}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450010] = {
|
|
||||||
[objectKeys.name] = "Raven Hill Statue",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.DUSKWOOD,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DUSKWOOD] = {{19.9,45.5}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450011] = {
|
|
||||||
[objectKeys.name] = "Galvanic Icon",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.DUROTAR,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DUROTAR] = {{38.01, 35.53},{53.36, 50.48},{51.78, 56.39},{36.95, 45.53},{56.53, 28.37},{39.43, 50.06}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450012] = {
|
|
||||||
[objectKeys.name] = "Galvanic Icon",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.MULGORE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.MULGORE] = {{54.07, 55.82},{36.3, 9.8},{37.5, 52.5},{41.65, 55.98},{37.99, 60.04}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450013] = {
|
|
||||||
[objectKeys.name] = "Beastly Effigy",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.THOUSAND_NEEDLES,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.THOUSAND_NEEDLES] = {{69.0, 55.0}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450014] = {
|
|
||||||
[objectKeys.name] = "Witherbark Gong",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.ARATHI_HIGHLANDS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.ARATHI_HIGHLANDS] = {{69.33, 81.50}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450015] = {
|
|
||||||
[objectKeys.name] = "Satyrweed Bulb Location",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.DESOLACE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.DESOLACE] = {{70.0, 70.0}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450016] = {
|
|
||||||
[objectKeys.name] = "Strahnbrad Bellows",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.ALTERAC_MOUNTAINS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.ALTERAC_MOUNTAINS] = {{60.0, 46.4}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450017] = {
|
|
||||||
[objectKeys.name] = "Crate",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.MOONGLADE,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.MOONGLADE] = {{55.6,66.5}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[450018] = {
|
|
||||||
[objectKeys.name] = "Soft Soil",
|
|
||||||
[objectKeys.zoneID] = zoneIDs.ARATHI_HIGHLANDS,
|
|
||||||
[objectKeys.spawns] = {
|
|
||||||
[zoneIDs.ARATHI_HIGHLANDS] = {{34,44}},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
---@class QuestieTBCQuestFixes
|
---@class QuestieTBCQuestFixes
|
||||||
local QuestieTBCQuestFixes = QuestieLoader:CreateModule("QuestieTBCQuestFixes")
|
local QuestieTBCQuestFixes = QuestieLoader:CreateModule("QuestieTBCQuestFixes")
|
||||||
local _QuestieTBCQuestFixes = {}
|
local _QuestieTBCQuestFixes = {}
|
||||||
|
|
||||||
@@ -5295,6 +5295,7 @@ function QuestieTBCQuestFixes:Load()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function _QuestieTBCQuestFixes:InsertMissingQuestIds()
|
function _QuestieTBCQuestFixes:InsertMissingQuestIds()
|
||||||
|
if not QuestieDB.questData then return end
|
||||||
QuestieDB.questData[12192] = {} -- This One Time, When I Was Drunk... (Horde)
|
QuestieDB.questData[12192] = {} -- This One Time, When I Was Drunk... (Horde)
|
||||||
QuestieDB.questData[12420] = {} -- Brew of the Month Club (Alliance)
|
QuestieDB.questData[12420] = {} -- Brew of the Month Club (Alliance)
|
||||||
QuestieDB.questData[12421] = {} -- Brew of the Month Club (Horde)
|
QuestieDB.questData[12421] = {} -- Brew of the Month Club (Horde)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
---@class QuestieWotlkItemFixes
|
---@class QuestieWotlkItemFixes
|
||||||
local QuestieWotlkItemFixes = QuestieLoader:CreateModule("QuestieWotlkItemFixes")
|
local QuestieWotlkItemFixes = QuestieLoader:CreateModule("QuestieWotlkItemFixes")
|
||||||
local _QuestieWotlkItemFixes = {}
|
local _QuestieWotlkItemFixes = {}
|
||||||
|
|
||||||
@@ -734,6 +734,7 @@ function QuestieWotlkItemFixes:Load()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function _QuestieWotlkItemFixes:InsertMissingItemIds()
|
function _QuestieWotlkItemFixes:InsertMissingItemIds()
|
||||||
|
if not QuestieDB.itemData then return end
|
||||||
-- Boost quest items
|
-- Boost quest items
|
||||||
QuestieDB.itemData[199335] = {} -- Teleport Scroll: Menethil Harbor
|
QuestieDB.itemData[199335] = {} -- Teleport Scroll: Menethil Harbor
|
||||||
QuestieDB.itemData[199336] = {} -- Teleport Scroll: Stormwind Harbor
|
QuestieDB.itemData[199336] = {} -- Teleport Scroll: Stormwind Harbor
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
---@class QuestieWotlkQuestFixes
|
---@class QuestieWotlkQuestFixes
|
||||||
local QuestieWotlkQuestFixes = QuestieLoader:CreateModule("QuestieWotlkQuestFixes")
|
local QuestieWotlkQuestFixes = QuestieLoader:CreateModule("QuestieWotlkQuestFixes")
|
||||||
local _QuestieWotlkQuestFixes = {}
|
local _QuestieWotlkQuestFixes = {}
|
||||||
|
|
||||||
@@ -7049,6 +7049,7 @@ function QuestieWotlkQuestFixes:Load()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function _QuestieWotlkQuestFixes:InsertMissingQuestIds()
|
function _QuestieWotlkQuestFixes:InsertMissingQuestIds()
|
||||||
|
if not QuestieDB.questData then return end
|
||||||
|
|
||||||
-- Alliance boosted quests
|
-- Alliance boosted quests
|
||||||
QuestieDB.questData[70395] = {} -- A New Beginning
|
QuestieDB.questData[70395] = {} -- A New Beginning
|
||||||
|
|||||||
+30
-2
@@ -1166,9 +1166,31 @@ function QuestieDB.GetQuest(questId) -- /dump QuestieDB.GetQuest(867)
|
|||||||
if questId == 0 then
|
if questId == 0 then
|
||||||
Questie:Error("[QuestieDB.GetQuest] rawdata is nil for questID:", questId)
|
Questie:Error("[QuestieDB.GetQuest] rawdata is nil for questID:", questId)
|
||||||
print(debugstack())
|
print(debugstack())
|
||||||
end
|
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
-- Build a minimal live-fallback quest from the quest log so the tracker still works
|
||||||
|
local logEntry = QuestLogCache.GetQuest(questId)
|
||||||
|
if not logEntry then return nil end
|
||||||
|
local fallback = {
|
||||||
|
Id = questId,
|
||||||
|
name = logEntry.title or tostring(questId),
|
||||||
|
level = logEntry.level or 0,
|
||||||
|
questLevel = logEntry.level or 0,
|
||||||
|
requiredLevel = 0,
|
||||||
|
zoneOrSort = 0,
|
||||||
|
questFlags = 0,
|
||||||
|
specialFlags = 0,
|
||||||
|
Starts = { CreatureStarts = {}, ObjectStarts = {}, ItemStarts = {} },
|
||||||
|
Finisher = { Type = "monster", Id = 0, Name = "" },
|
||||||
|
Objectives = {},
|
||||||
|
ObjectiveData = {},
|
||||||
|
ExtraObjectives= {},
|
||||||
|
_isLogFallback = true,
|
||||||
|
isComplete = (logEntry.isComplete == 1),
|
||||||
|
}
|
||||||
|
_QuestieDB.questCache[questId] = fallback
|
||||||
|
return fallback
|
||||||
|
end
|
||||||
|
|
||||||
---@class Quest
|
---@class Quest
|
||||||
---@field public Id QuestId
|
---@field public Id QuestId
|
||||||
@@ -1435,12 +1457,16 @@ function QuestieDB.GetQuest(questId) -- /dump QuestieDB.GetQuest(867)
|
|||||||
local spawnList = {}
|
local spawnList = {}
|
||||||
|
|
||||||
for _, ref in pairs(o[5]) do
|
for _, ref in pairs(o[5]) do
|
||||||
for k, v in pairs(_QuestieQuest.objectiveSpawnListCallTable[ref[1]](ref[2], specialObjective)) do
|
local callFn = _QuestieQuest.objectiveSpawnListCallTable[ref[1]]
|
||||||
|
local spawnResult = callFn and callFn(ref[2], specialObjective)
|
||||||
|
if spawnResult then
|
||||||
|
for k, v in pairs(spawnResult) do
|
||||||
-- we want to be able to override the icon in the corrections (e.g. Questie.ICON_TYPE_OBJECT on objects instead of Questie.ICON_TYPE_LOOT)
|
-- we want to be able to override the icon in the corrections (e.g. Questie.ICON_TYPE_OBJECT on objects instead of Questie.ICON_TYPE_LOOT)
|
||||||
v.Icon = o[2]
|
v.Icon = o[2]
|
||||||
spawnList[k] = v
|
spawnList[k] = v
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
specialObjective.spawnList = spawnList
|
specialObjective.spawnList = spawnList
|
||||||
end
|
end
|
||||||
@@ -1712,8 +1738,10 @@ function _QuestieDB:DeleteGatheringNodes()
|
|||||||
local objectSpawnsKey = QuestieDB.objectKeys.spawns
|
local objectSpawnsKey = QuestieDB.objectKeys.spawns
|
||||||
for i=1, #prune do
|
for i=1, #prune do
|
||||||
local id = prune[i]
|
local id = prune[i]
|
||||||
|
if QuestieDB.objectData[id] then
|
||||||
QuestieDB.objectData[id][objectSpawnsKey] = nil
|
QuestieDB.objectData[id][objectSpawnsKey] = nil
|
||||||
end
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
+37
-18
@@ -345,13 +345,23 @@ readers["extraobjectives"] = function(stream)
|
|||||||
if count > 0 then
|
if count > 0 then
|
||||||
local ret = {}
|
local ret = {}
|
||||||
for i=1,count do
|
for i=1,count do
|
||||||
ret[i] = {
|
local entry = {
|
||||||
readers["spawnlist"](stream),
|
readers["spawnlist"](stream),
|
||||||
stream:ReadInt24(),
|
stream:ReadInt24(),
|
||||||
stream:ReadShortString(),
|
stream:ReadShortString(),
|
||||||
stream:ReadInt24(),
|
stream:ReadInt24(),
|
||||||
readers["reflist"](stream)
|
readers["reflist"](stream)
|
||||||
}
|
}
|
||||||
|
local condCount = stream:ReadByte()
|
||||||
|
if condCount > 0 then
|
||||||
|
local conds = {}
|
||||||
|
for _=1,condCount do
|
||||||
|
local k = stream:ReadShortString()
|
||||||
|
conds[k] = stream:ReadInt24()
|
||||||
|
end
|
||||||
|
entry[6] = conds
|
||||||
|
end
|
||||||
|
ret[i] = entry
|
||||||
end
|
end
|
||||||
return ret
|
return ret
|
||||||
end
|
end
|
||||||
@@ -663,6 +673,18 @@ QuestieDBCompiler.writers = {
|
|||||||
stream:WriteShortString(data[3]) -- description
|
stream:WriteShortString(data[3]) -- description
|
||||||
stream:WriteInt24(data[4] or 0) -- objective index (or 0)
|
stream:WriteInt24(data[4] or 0) -- objective index (or 0)
|
||||||
QuestieDBCompiler.writers["reflist"](stream, data[5] or {})
|
QuestieDBCompiler.writers["reflist"](stream, data[5] or {})
|
||||||
|
local conds = data[6]
|
||||||
|
if type(conds) == "table" then
|
||||||
|
local n = 0
|
||||||
|
for _ in pairs(conds) do n = n + 1 end
|
||||||
|
stream:WriteByte(n)
|
||||||
|
for k, v in pairs(conds) do
|
||||||
|
stream:WriteShortString(k)
|
||||||
|
stream:WriteInt24(v)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
stream:WriteByte(0)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
stream:WriteByte(0)
|
stream:WriteByte(0)
|
||||||
@@ -792,6 +814,11 @@ skippers["extraobjectives"] = function(stream)
|
|||||||
stream._pointer = stream:ReadShort() + stream._pointer
|
stream._pointer = stream:ReadShort() + stream._pointer
|
||||||
stream._pointer = stream._pointer + 3
|
stream._pointer = stream._pointer + 3
|
||||||
reflistSkipper(stream)
|
reflistSkipper(stream)
|
||||||
|
local condCount = stream:ReadByte()
|
||||||
|
for _=1,condCount do
|
||||||
|
stream._pointer = stream:ReadShort() + stream._pointer -- skip ShortString key
|
||||||
|
stream._pointer = stream._pointer + 3 -- skip Int24 value
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1029,6 +1056,14 @@ function QuestieDBCompiler:Compile()
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local hasData = type(QuestieDB.questData) == "string"
|
||||||
|
or type(QuestieDB.questData) == "table"
|
||||||
|
or (type(QuestieDB.questDataOverrides) == "table" and next(QuestieDB.questDataOverrides) ~= nil)
|
||||||
|
if not hasData then
|
||||||
|
Questie:Print("|cFFFF4444[Questie-X]|r No database plugin loaded. Install a DB plugin for your server — see Options \226\134\146 Database.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
QuestieDBCompiler._isCompiling = true -- some unknown addon that is popular in china causes player_logged_in event to fire many times which triggers db compile multiple times
|
QuestieDBCompiler._isCompiling = true -- some unknown addon that is popular in china causes player_logged_in event to fire many times which triggers db compile multiple times
|
||||||
|
|
||||||
QuestieDBCompiler.startTime = GetTime()
|
QuestieDBCompiler.startTime = GetTime()
|
||||||
@@ -1087,10 +1122,6 @@ function QuestieDBCompiler:ValidateNPCs()
|
|||||||
elseif type(a) == "table" then
|
elseif type(a) == "table" then
|
||||||
if not equals(a, (b or {})) then
|
if not equals(a, (b or {})) then
|
||||||
Questie:Warning("Nonmatching table at " .. key .. " " .. id .. " for ID: ".. npcId)
|
Questie:Warning("Nonmatching table at " .. key .. " " .. id .. " for ID: ".. npcId)
|
||||||
DevTools_Dump({
|
|
||||||
["Compiled Table:"] = a,
|
|
||||||
["Base Table:"] = b
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1135,10 +1166,6 @@ function QuestieDBCompiler:ValidateObjects()
|
|||||||
elseif type(a) == "table" then
|
elseif type(a) == "table" then
|
||||||
if not equals(a, (b or {})) then
|
if not equals(a, (b or {})) then
|
||||||
Questie:Warning("Nonmatching table at " .. key .. " " .. id .. " for ID: ".. objectId)
|
Questie:Warning("Nonmatching table at " .. key .. " " .. id .. " for ID: ".. objectId)
|
||||||
DevTools_Dump({
|
|
||||||
["Compiled Table:"] = a,
|
|
||||||
["Base Table:"] = b
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1252,10 +1279,6 @@ function QuestieDBCompiler:ValidateItems()
|
|||||||
elseif type(a) == "table" then
|
elseif type(a) == "table" then
|
||||||
if not equals(a, (b or {})) then
|
if not equals(a, (b or {})) then
|
||||||
Questie:Warning("Nonmatching table at " .. key .. " " .. id .. " for ID: ".. itemId)
|
Questie:Warning("Nonmatching table at " .. key .. " " .. id .. " for ID: ".. itemId)
|
||||||
DevTools_Dump({
|
|
||||||
["Compiled Table:"] = a,
|
|
||||||
["Base Table:"] = b
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1291,7 +1314,7 @@ function QuestieDBCompiler:ValidateQuests()
|
|||||||
local function getTbcLevel(questLevel, requiredLevel, playerLevel)
|
local function getTbcLevel(questLevel, requiredLevel, playerLevel)
|
||||||
if (questLevel == -1) then
|
if (questLevel == -1) then
|
||||||
local level = playerLevel
|
local level = playerLevel
|
||||||
if (requiredLevel > level) then
|
if (requiredLevel and requiredLevel > level) then
|
||||||
questLevel = requiredLevel;
|
questLevel = requiredLevel;
|
||||||
else
|
else
|
||||||
questLevel = level;
|
questLevel = level;
|
||||||
@@ -1349,10 +1372,6 @@ function QuestieDBCompiler:ValidateQuests()
|
|||||||
|
|
||||||
if not equals(a, (b or {})) then
|
if not equals(a, (b or {})) then
|
||||||
Questie:Warning("Nonmatching table at " .. key .. " " .. id .. " for ID: ".. questId)
|
Questie:Warning("Nonmatching table at " .. key .. " " .. id .. " for ID: ".. questId)
|
||||||
DevTools_Dump({
|
|
||||||
["Compiled Table:"] = a,
|
|
||||||
["Base Table:"] = b
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -122,3 +122,5 @@ QuestieDB._itemAdapterQueryOrder = {}
|
|||||||
for key, id in pairs(QuestieDB.itemKeys) do
|
for key, id in pairs(QuestieDB.itemKeys) do
|
||||||
QuestieDB._itemAdapterQueryOrder[id] = key
|
QuestieDB._itemAdapterQueryOrder[id] = key
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- itemData is nil until a DB plugin sets it
|
||||||
|
|||||||
@@ -95,3 +95,5 @@ QuestieDB._npcAdapterQueryOrder = {}
|
|||||||
for key, id in pairs(QuestieDB.npcKeys) do
|
for key, id in pairs(QuestieDB.npcKeys) do
|
||||||
QuestieDB._npcAdapterQueryOrder[id] = key
|
QuestieDB._npcAdapterQueryOrder[id] = key
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- npcData is nil until a DB plugin sets it
|
||||||
|
|||||||
@@ -38,3 +38,5 @@ QuestieDB._objectAdapterQueryOrder = {}
|
|||||||
for key, id in pairs(QuestieDB.objectKeys) do
|
for key, id in pairs(QuestieDB.objectKeys) do
|
||||||
QuestieDB._objectAdapterQueryOrder[id] = key
|
QuestieDB._objectAdapterQueryOrder[id] = key
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- objectData is nil until a DB plugin sets it
|
||||||
|
|||||||
@@ -126,3 +126,6 @@ QuestieDB._questAdapterQueryOrder = {}
|
|||||||
for key, id in pairs(QuestieDB.questKeys) do
|
for key, id in pairs(QuestieDB.questKeys) do
|
||||||
QuestieDB._questAdapterQueryOrder[id] = key
|
QuestieDB._questAdapterQueryOrder[id] = key
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- questData is nil until a DB plugin sets it (e.g. Questie-X-WotLKDB)
|
||||||
|
-- LoadDatabase checks truthiness before calling loadstring; {} would be truthy and crash it
|
||||||
|
|||||||
@@ -253,6 +253,7 @@ end
|
|||||||
---@param level number @The quest level
|
---@param level number @The quest level
|
||||||
---@param blizzLike boolean @True = [40+], false/nil = [40D/R]
|
---@param blizzLike boolean @True = [40+], false/nil = [40D/R]
|
||||||
function QuestieLib:GetQuestString(questId, name, level, blizzLike)
|
function QuestieLib:GetQuestString(questId, name, level, blizzLike)
|
||||||
|
if not name then return tostring(questId) end
|
||||||
local questType, questTag = QuestieDB.GetQuestTagInfo(questId)
|
local questType, questTag = QuestieDB.GetQuestTagInfo(questId)
|
||||||
|
|
||||||
if questType and questTag then
|
if questType and questTag then
|
||||||
|
|||||||
@@ -106,10 +106,10 @@ end
|
|||||||
|
|
||||||
-- The only public class except for Questie
|
-- The only public class except for Questie
|
||||||
---@class QuestieLoader
|
---@class QuestieLoader
|
||||||
QuestieLoader = {}
|
QuestieLoader = QuestieLoader or {}
|
||||||
|
|
||||||
|
|
||||||
local modules = {}
|
local modules = (QuestieLoader._modules) or {}
|
||||||
|
|
||||||
QuestieLoader._modules = modules -- store reference so modules can be iterated for profiling
|
QuestieLoader._modules = modules -- store reference so modules can be iterated for profiling
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,20 @@
|
|||||||
local QuestiePluginAPI = QuestieLoader:CreateModule("QuestiePluginAPI")
|
local QuestiePluginAPI = QuestieLoader:CreateModule("QuestiePluginAPI")
|
||||||
|
|
||||||
QuestiePluginAPI.registeredPlugins = {}
|
QuestiePluginAPI.registeredPlugins = {}
|
||||||
|
QuestiePluginAPI.loadedDBFlavor = nil -- set by the first DB plugin that calls FinishLoading
|
||||||
|
|
||||||
|
--- Returns true if at least one DB plugin has fully loaded.
|
||||||
|
---@return boolean
|
||||||
|
function QuestiePluginAPI:IsAnyPluginLoaded()
|
||||||
|
for _ in pairs(self.registeredPlugins) do return true end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Returns the flavor key of the loaded DB plugin ("WotLK", "Classic", "TBC", "Turtle", "Ascension", etc.)
|
||||||
|
---@return string|nil
|
||||||
|
function QuestiePluginAPI:GetLoadedFlavor()
|
||||||
|
return self.loadedDBFlavor
|
||||||
|
end
|
||||||
|
|
||||||
---@class QuestiePlugin
|
---@class QuestiePlugin
|
||||||
local QuestiePlugin = {}
|
local QuestiePlugin = {}
|
||||||
@@ -181,7 +195,8 @@ function QuestiePlugin:InjectUiMapData(customUiMapData)
|
|||||||
end
|
end
|
||||||
|
|
||||||
--- Signals that the plugin has finished loading. This automatically cleans up necessary caches.
|
--- Signals that the plugin has finished loading. This automatically cleans up necessary caches.
|
||||||
function QuestiePlugin:FinishLoading()
|
---@param flavorKey string|nil Optional flavor label e.g. "WotLK", "Classic", "Turtle"
|
||||||
|
function QuestiePlugin:FinishLoading(flavorKey)
|
||||||
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
|
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
|
||||||
if not QuestieDB then
|
if not QuestieDB then
|
||||||
Questie:Debug(Questie.DEBUG_CRITICAL, "[QuestiePluginAPI] Plugin '" .. self.name .. "' FinishLoading failed: QuestieDB module not found.")
|
Questie:Debug(Questie.DEBUG_CRITICAL, "[QuestiePluginAPI] Plugin '" .. self.name .. "' FinishLoading failed: QuestieDB module not found.")
|
||||||
@@ -195,5 +210,40 @@ function QuestiePlugin:FinishLoading()
|
|||||||
if QuestieDB.autoBlacklist then
|
if QuestieDB.autoBlacklist then
|
||||||
QuestieDB.autoBlacklist = {}
|
QuestieDB.autoBlacklist = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if flavorKey then
|
||||||
|
QuestiePluginAPI.loadedDBFlavor = flavorKey
|
||||||
|
elseif not QuestiePluginAPI.loadedDBFlavor then
|
||||||
|
QuestiePluginAPI.loadedDBFlavor = self.name
|
||||||
|
end
|
||||||
|
|
||||||
Questie:Debug(Questie.DEBUG_INFO, "[QuestiePluginAPI] Plugin '" .. self.name .. "' finished loading successfully.")
|
Questie:Debug(Questie.DEBUG_INFO, "[QuestiePluginAPI] Plugin '" .. self.name .. "' finished loading successfully.")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Injects XP-per-level data used by QuestieXP. The table must be keyed by level number.
|
||||||
|
---@param xpTable table { [level] = xp_required, ... }
|
||||||
|
function QuestiePlugin:InjectXpData(xpTable)
|
||||||
|
if type(xpTable) ~= "table" then return end
|
||||||
|
local QuestXP = QuestieLoader:ImportModule("QuestieXP")
|
||||||
|
if not QuestXP then
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestiePluginAPI] Plugin '" .. self.name .. "': InjectXpData — QuestieXP module not loaded, skipping.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
QuestXP.db = xpTable
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestiePluginAPI] Plugin '" .. self.name .. "' injected XP data (" .. tostring(#xpTable) .. " levels).")
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Applies expansion-specific correction tables that are stored in QuestieDB
|
||||||
|
--- correction globals (set by correction files loaded by the plugin TOC).
|
||||||
|
--- Call this AFTER InjectDatabase calls and BEFORE FinishLoading.
|
||||||
|
function QuestiePlugin:InjectCorrections()
|
||||||
|
local QuestieCorrections = QuestieLoader:ImportModule("QuestieCorrections")
|
||||||
|
if not QuestieCorrections then
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestiePluginAPI] Plugin '" .. self.name .. "': InjectCorrections — QuestieCorrections module not loaded, skipping.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if QuestieCorrections.ApplyAll then
|
||||||
|
QuestieCorrections:ApplyAll()
|
||||||
|
end
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestiePluginAPI] Plugin '" .. self.name .. "' applied corrections.")
|
||||||
|
end
|
||||||
|
|||||||
@@ -978,6 +978,11 @@ function QuestieQuest:UpdateObjectiveNotes(quest)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Fallback quests have no static DB data; their objectives are managed in PopulateQuestLogInfo
|
||||||
|
if quest._isLogFallback then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
Questie:Debug(Questie.DEBUG_INFO, "[QuestieQuest] UpdateObjectiveNotes:", quest.Id)
|
Questie:Debug(Questie.DEBUG_INFO, "[QuestieQuest] UpdateObjectiveNotes:", quest.Id)
|
||||||
for objectiveIndex, objective in pairs(quest.Objectives) do
|
for objectiveIndex, objective in pairs(quest.Objectives) do
|
||||||
local result, err = xpcall(QuestieQuest.PopulateObjective, ERR_FUNCTION, QuestieQuest, quest, objectiveIndex,
|
local result, err = xpcall(QuestieQuest.PopulateObjective, ERR_FUNCTION, QuestieQuest, quest, objectiveIndex,
|
||||||
@@ -988,7 +993,7 @@ function QuestieQuest:UpdateObjectiveNotes(quest)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if next(quest.SpecialObjectives) then
|
if quest.SpecialObjectives and next(quest.SpecialObjectives) then
|
||||||
for _, objective in pairs(quest.SpecialObjectives) do
|
for _, objective in pairs(quest.SpecialObjectives) do
|
||||||
local result, err = xpcall(QuestieQuest.PopulateObjective, ERR_FUNCTION, QuestieQuest, quest, 0, objective,
|
local result, err = xpcall(QuestieQuest.PopulateObjective, ERR_FUNCTION, QuestieQuest, quest, 0, objective,
|
||||||
true)
|
true)
|
||||||
@@ -1639,7 +1644,27 @@ function QuestieQuest:PopulateQuestLogInfo(quest)
|
|||||||
-- Live fallback quests (no static DB entry) manage their own Objectives.
|
-- Live fallback quests (no static DB entry) manage their own Objectives.
|
||||||
-- Their per-objective Update() functions read directly from QuestLogCache.
|
-- Their per-objective Update() functions read directly from QuestLogCache.
|
||||||
if quest._isLogFallback then
|
if quest._isLogFallback then
|
||||||
|
-- Seed objectives from QuestLogCache on first call
|
||||||
|
if not next(quest.Objectives) then
|
||||||
|
local cachedObjectives = QuestLogCache.GetQuestObjectives(quest.Id)
|
||||||
|
if cachedObjectives then
|
||||||
|
for index, obj in pairs(cachedObjectives) do
|
||||||
|
quest.Objectives[index] = {
|
||||||
|
questId = quest.Id,
|
||||||
|
Index = index,
|
||||||
|
Description = obj.text or "",
|
||||||
|
Type = obj.type or "monster",
|
||||||
|
Collected = obj.numFulfilled or 0,
|
||||||
|
Needed = obj.numRequired or 0,
|
||||||
|
Completed = obj.finished or false,
|
||||||
|
isUpdated = false,
|
||||||
|
Update = _QuestieQuest.ObjectiveUpdate,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
for _, obj in pairs(quest.Objectives) do
|
for _, obj in pairs(quest.Objectives) do
|
||||||
|
obj.isUpdated = false
|
||||||
obj:Update()
|
obj:Update()
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
|
|||||||
@@ -67,7 +67,10 @@ killcredit = function(npcId, objective, objectiveData)
|
|||||||
local ret = {}
|
local ret = {}
|
||||||
for npcIdIndex = 1, #objectiveData.IdList do
|
for npcIdIndex = 1, #objectiveData.IdList do
|
||||||
local killCreditNpcId = objectiveData.IdList[npcIdIndex]
|
local killCreditNpcId = objectiveData.IdList[npcIdIndex]
|
||||||
ret[killCreditNpcId] = monster(killCreditNpcId, objective)[killCreditNpcId]
|
local monsterResult = monster(killCreditNpcId, objective)
|
||||||
|
if monsterResult then
|
||||||
|
ret[killCreditNpcId] = monsterResult[killCreditNpcId]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
return ret
|
return ret
|
||||||
end
|
end
|
||||||
|
|||||||
+53
-3
@@ -94,15 +94,31 @@ local C_Timer = QuestieCompat.C_Timer
|
|||||||
|
|
||||||
local coYield = coroutine.yield
|
local coYield = coroutine.yield
|
||||||
|
|
||||||
|
local function _dbStats(t)
|
||||||
|
if type(t) ~= "table" then return "type=" .. type(t) end
|
||||||
|
local n, minK, maxK = 0, math.huge, 0
|
||||||
|
for k in pairs(t) do
|
||||||
|
n = n + 1
|
||||||
|
if type(k) == "number" then
|
||||||
|
if k < minK then minK = k end
|
||||||
|
if k > maxK then maxK = k end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return "count=" .. n .. " minID=" .. (minK == math.huge and 0 or minK) .. " maxID=" .. maxK
|
||||||
|
end
|
||||||
|
|
||||||
local function loadFullDatabase()
|
local function loadFullDatabase()
|
||||||
print("\124cFF4DDBFF [1/9] " .. l10n("Loading database") .. "...")
|
print("\124cFF4DDBFF [1/9] " .. l10n("Loading database") .. "...")
|
||||||
|
|
||||||
QuestieInit:LoadBaseDB()
|
QuestieInit:LoadBaseDB()
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[DBDiag] After LoadBaseDB - quest:" .. _dbStats(QuestieDB.questData) .. " npc:" .. _dbStats(QuestieDB.npcData))
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[DBDiag] obj:" .. _dbStats(QuestieDB.objectData) .. " item:" .. _dbStats(QuestieDB.itemData))
|
||||||
|
|
||||||
print("\124cFF4DDBFF [2/9] " .. l10n("Applying database corrections") .. "...")
|
print("\124cFF4DDBFF [2/9] " .. l10n("Applying database corrections") .. "...")
|
||||||
|
|
||||||
coYield()
|
coYield()
|
||||||
QuestieCorrections:Initialize()
|
QuestieCorrections:Initialize()
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[DBDiag] After Corrections - quest:" .. _dbStats(QuestieDB.questData) .. " npc:" .. _dbStats(QuestieDB.npcData))
|
||||||
|
|
||||||
print("\124cFF4DDBFF [3/9] " .. l10n("Initializing townfolks") .. "...")
|
print("\124cFF4DDBFF [3/9] " .. l10n("Initializing townfolks") .. "...")
|
||||||
coYield()
|
coYield()
|
||||||
@@ -221,9 +237,12 @@ QuestieInit.Stages[1] = function() -- run as a coroutine
|
|||||||
l10n("Questie DB has updated!") ..
|
l10n("Questie DB has updated!") ..
|
||||||
"\124r\124cFFFF6F22 " .. l10n("Data is being processed, this may take a few moments and cause some lag..."))
|
"\124r\124cFFFF6F22 " .. l10n("Data is being processed, this may take a few moments and cause some lag..."))
|
||||||
loadFullDatabase()
|
loadFullDatabase()
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[DBDiag] Before Compile - quest:" .. _dbStats(QuestieDB.questData) .. " npc:" .. _dbStats(QuestieDB.npcData))
|
||||||
QuestieDBCompiler:Compile()
|
QuestieDBCompiler:Compile()
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[DBDiag] After Compile - quest:type=" .. type(QuestieDB.questData) .. " npc:type=" .. type(QuestieDB.npcData))
|
||||||
dbCompiled = true
|
dbCompiled = true
|
||||||
else
|
else
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[DBDiag] DB was CACHED (no recompile)")
|
||||||
l10n:Initialize()
|
l10n:Initialize()
|
||||||
coYield()
|
coYield()
|
||||||
QuestieCorrections:MinimalInit()
|
QuestieCorrections:MinimalInit()
|
||||||
@@ -388,17 +407,48 @@ end
|
|||||||
|
|
||||||
|
|
||||||
function QuestieInit:LoadDatabase(key)
|
function QuestieInit:LoadDatabase(key)
|
||||||
if QuestieDB[key] then
|
if type(QuestieDB[key]) == "string" then
|
||||||
coYield()
|
coYield()
|
||||||
QuestieDB[key] = loadstring(QuestieDB[key]) -- load the table from string (returns a function)
|
local fn, loadErr = loadstring(QuestieDB[key])
|
||||||
coYield()
|
coYield()
|
||||||
QuestieDB[key] = QuestieDB[key]() -- execute the function (returns the table)
|
if fn then
|
||||||
|
local ok, result = pcall(fn)
|
||||||
|
if ok then
|
||||||
|
QuestieDB[key] = result
|
||||||
|
else
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[DBDiag] ERROR executing('" .. key .. "'): " .. tostring(result))
|
||||||
|
QuestieDB[key] = nil
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[DBDiag] ERROR loadstring('" .. key .. "'): " .. tostring(loadErr) .. " | len=" .. string.len(QuestieDB[key] or ""))
|
||||||
|
QuestieDB[key] = nil
|
||||||
|
end
|
||||||
|
elseif type(QuestieDB[key]) == "table" then
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[LoadDatabase] '" .. key .. "' already a table (split-file format), skipping loadstring")
|
||||||
else
|
else
|
||||||
Questie:Debug(Questie.DEBUG_DEVELOP, "Database is missing, this is likely do to era vs tbc: ", key)
|
Questie:Debug(Questie.DEBUG_DEVELOP, "Database is missing, this is likely do to era vs tbc: ", key)
|
||||||
end
|
end
|
||||||
|
if not QuestieDB[key] then
|
||||||
|
QuestieDB[key] = {}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function QuestieInit:LoadBaseDB()
|
function QuestieInit:LoadBaseDB()
|
||||||
|
local function _pullGlobal(dbKey, globalName)
|
||||||
|
if type(_G[globalName]) == "table" then
|
||||||
|
QuestieDB[dbKey] = _G[globalName]
|
||||||
|
_G[globalName] = nil
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
local _pulled = {
|
||||||
|
quest = _pullGlobal("questData", "QuestieX_WotLKDB_quest"),
|
||||||
|
npc = _pullGlobal("npcData", "QuestieX_WotLKDB_npc"),
|
||||||
|
object = _pullGlobal("objectData", "QuestieX_WotLKDB_object"),
|
||||||
|
item = _pullGlobal("itemData", "QuestieX_WotLKDB_item"),
|
||||||
|
}
|
||||||
|
Questie:Debug(Questie.DEBUG_DEVELOP, "[DBDiag] WotLKDB pull: quest=" .. tostring(_pulled.quest) .. " npc=" .. tostring(_pulled.npc) .. " obj=" .. tostring(_pulled.object) .. " item=" .. tostring(_pulled.item))
|
||||||
QuestieInit:LoadDatabase("npcData")
|
QuestieInit:LoadDatabase("npcData")
|
||||||
QuestieInit:LoadDatabase("objectData")
|
QuestieInit:LoadDatabase("objectData")
|
||||||
QuestieInit:LoadDatabase("questData")
|
QuestieInit:LoadDatabase("questData")
|
||||||
|
|||||||
@@ -402,7 +402,7 @@ function Townsfolk:PopulateVendors(itemList, existingTable, restrictLevel)
|
|||||||
if not flagCache[vendorId] then
|
if not flagCache[vendorId] then
|
||||||
flagCache[vendorId] = flags
|
flagCache[vendorId] = flags
|
||||||
end
|
end
|
||||||
if bitband(flags, QuestieDB.npcFlags.VENDOR) == QuestieDB.npcFlags.VENDOR then
|
if flags and bitband(flags, QuestieDB.npcFlags.VENDOR) == QuestieDB.npcFlags.VENDOR then
|
||||||
tbl[vendorId] = true
|
tbl[vendorId] = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+80
-23
@@ -1,17 +1,34 @@
|
|||||||
---@class QuestieServer
|
---@class QuestieServer
|
||||||
local QuestieServer = QuestieLoader:CreateModule("QuestieServer")
|
local QuestieServer = QuestieLoader:CreateModule("QuestieServer")
|
||||||
|
|
||||||
-- Check for runtime server globals or profile matches early in the initialization phase.
|
|
||||||
-- We do this BEFORE any database tables evaluate so their memory isn't allocated if unused.
|
|
||||||
|
|
||||||
---@type string
|
---@type string
|
||||||
local realmName = GetRealmName() or ""
|
local realmName = GetRealmName() or ""
|
||||||
|
|
||||||
|
-- Client flavor detection from WoW globals
|
||||||
|
local WOW_PROJECT_ID = WOW_PROJECT_ID or -1
|
||||||
|
local WOW_PROJECT_CLASSIC = WOW_PROJECT_CLASSIC or 2
|
||||||
|
local WOW_PROJECT_BURNING_CRUSADE_CLASSIC = WOW_PROJECT_BURNING_CRUSADE_CLASSIC or 5
|
||||||
|
local WOW_PROJECT_WRATH_CLASSIC = WOW_PROJECT_WRATH_CLASSIC or 11
|
||||||
|
local WOW_PROJECT_MAINLINE = WOW_PROJECT_MAINLINE or 1
|
||||||
|
|
||||||
|
-- Expansion detection
|
||||||
|
Questie.IsRetail = (WOW_PROJECT_ID == WOW_PROJECT_MAINLINE)
|
||||||
|
Questie.IsWotLK = (WOW_PROJECT_ID == WOW_PROJECT_WRATH_CLASSIC)
|
||||||
|
Questie.IsTBC = (WOW_PROJECT_ID == WOW_PROJECT_BURNING_CRUSADE_CLASSIC)
|
||||||
|
Questie.IsClassicEra = (WOW_PROJECT_ID == WOW_PROJECT_CLASSIC)
|
||||||
|
|
||||||
|
-- Try GetBuildInfo for Turtle WoW (Interface: 11200, no WOW_PROJECT globals)
|
||||||
|
local _, _, _, tocVersion = GetBuildInfo()
|
||||||
|
Questie.IsTurtle = (not Questie.IsRetail and not Questie.IsWotLK and not Questie.IsTBC and
|
||||||
|
not Questie.IsClassicEra and tocVersion and tocVersion < 20000)
|
||||||
|
|
||||||
|
-- Custom server detection
|
||||||
Questie.IsEbonhold = false
|
Questie.IsEbonhold = false
|
||||||
Questie.IsAscension = false
|
Questie.IsAscension = false
|
||||||
Questie.IsValanior = false
|
Questie.IsValanior = false
|
||||||
|
|
||||||
if _G.IsAscensionServer or realmName == "Ascension" or realmName:find("Area 52") or realmName:find("Al'ar") or realmName:find("Thrall") then
|
if _G.IsAscensionServer or realmName:find("Ascension") or realmName:find("Area 52") or
|
||||||
|
realmName:find("Al'ar") or realmName:find("Thrall") then
|
||||||
Questie.IsAscension = true
|
Questie.IsAscension = true
|
||||||
elseif realmName == "Ebonhold" or realmName == "Test Ebonhold" then
|
elseif realmName == "Ebonhold" or realmName == "Test Ebonhold" then
|
||||||
Questie.IsEbonhold = true
|
Questie.IsEbonhold = true
|
||||||
@@ -19,23 +36,69 @@ elseif realmName == "Valanior" then
|
|||||||
Questie.IsValanior = true
|
Questie.IsValanior = true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Also check QuestieConfig if it was loaded (fallback for forcing a profile)
|
-- Derive expected DB plugin name for this client
|
||||||
if QuestieConfig and QuestieConfig.profileKeys then
|
local function GetExpectedPluginFlavor()
|
||||||
-- It's theoretically possible a player has explicitly overridden the profile in Ace3 Options
|
if Questie.IsAscension then return "AscensionDB", "Questie-X-AscensionDB" end
|
||||||
-- but usually we trust the dynamic realm name detection over saved profiles for the core loader.
|
if Questie.IsEbonhold then return "EbonholdDB", "Questie-X-EbonholdDB" end
|
||||||
|
if Questie.IsValanior then return "ValaniorDB", "Questie-X-ValaniorDB" end
|
||||||
|
if Questie.IsTurtle then return "TurtleDB", "Questie-X-TurtleDB" end
|
||||||
|
if Questie.IsWotLK then return "WotLKDB", "Questie-X-WotLKDB" end
|
||||||
|
if Questie.IsTBC then return "TBCDB", "Questie-X-TBCDB" end
|
||||||
|
if Questie.IsClassicEra then return "ClassicDB", "Questie-X-ClassicDB" end
|
||||||
|
if Questie.IsRetail then return "RetailDB", "Questie-X-RetailDB" end
|
||||||
|
return nil, nil
|
||||||
end
|
end
|
||||||
|
|
||||||
function QuestieServer:Init()
|
function QuestieServer:Init()
|
||||||
-- This handles any universal server logic before Database Init
|
Questie:Debug(Questie.DEBUG_INFO, "[QuestieServer] Realm:", realmName)
|
||||||
Questie:Debug(Questie.DEBUG_INFO, "[QuestieServer] Detected Realm:", realmName)
|
Questie:Debug(Questie.DEBUG_INFO, "[QuestieServer] WOW_PROJECT_ID:", tostring(WOW_PROJECT_ID))
|
||||||
Questie:Debug(Questie.DEBUG_INFO, "[QuestieServer] IsAscension:", Questie.IsAscension)
|
Questie:Debug(Questie.DEBUG_INFO, "[QuestieServer] IsWotLK:", tostring(Questie.IsWotLK), "IsTBC:", tostring(Questie.IsTBC),
|
||||||
Questie:Debug(Questie.DEBUG_INFO, "[QuestieServer] IsEbonhold:", Questie.IsEbonhold)
|
"IsClassicEra:", tostring(Questie.IsClassicEra), "IsTurtle:", tostring(Questie.IsTurtle),
|
||||||
Questie:Debug(Questie.DEBUG_INFO, "[QuestieServer] IsValanior:", Questie.IsValanior)
|
"IsAscension:", tostring(Questie.IsAscension), "IsEbonhold:", tostring(Questie.IsEbonhold))
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Checks if the correct DB plugin is loaded for the detected client/server.
|
||||||
|
--- Prints a friendly actionable warning to the chat frame if none is found.
|
||||||
|
function QuestieServer:WarnIfMissingPlugin()
|
||||||
|
local QuestiePluginAPI = QuestieLoader:ImportModule("QuestiePluginAPI")
|
||||||
|
if not QuestiePluginAPI then return end
|
||||||
|
|
||||||
|
if QuestiePluginAPI:IsAnyPluginLoaded() then
|
||||||
|
local flavor, addonName = GetExpectedPluginFlavor()
|
||||||
|
local loadedFlavor = QuestiePluginAPI:GetLoadedFlavor()
|
||||||
|
|
||||||
|
if flavor and loadedFlavor and loadedFlavor ~= flavor then
|
||||||
|
Questie:Print(string.format(
|
||||||
|
"|cFFFF8800[Questie-X]|r Warning: loaded database is |cFFFFFFFF%s|r but this client expects |cFFFFFFFF%s|r. " ..
|
||||||
|
"Quest data may be incorrect. Install |cFF5EBAF3%s|r for best results.",
|
||||||
|
loadedFlavor, flavor, addonName or flavor
|
||||||
|
))
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- No plugin at all
|
||||||
|
local flavor, addonName = GetExpectedPluginFlavor()
|
||||||
|
local msg
|
||||||
|
if addonName then
|
||||||
|
msg = string.format(
|
||||||
|
"|cFFFF4444[Questie-X]|r No database plugin loaded. " ..
|
||||||
|
"Download and install |cFF5EBAF3%s|r into your |cFFFFFFFFInterface/AddOns/|r folder, then reload. " ..
|
||||||
|
"Questie-X will show no quest data until a database is installed.",
|
||||||
|
addonName
|
||||||
|
)
|
||||||
|
else
|
||||||
|
msg = "|cFFFF4444[Questie-X]|r No database plugin loaded and server type is unknown. " ..
|
||||||
|
"Install the appropriate Questie-X database plugin for your server."
|
||||||
|
end
|
||||||
|
|
||||||
|
if DEFAULT_CHAT_FRAME then
|
||||||
|
DEFAULT_CHAT_FRAME:AddMessage(msg)
|
||||||
|
end
|
||||||
|
Questie:Debug(Questie.DEBUG_CRITICAL, msg)
|
||||||
end
|
end
|
||||||
|
|
||||||
function QuestieServer:GetCustomQuest(questId)
|
function QuestieServer:GetCustomQuest(questId)
|
||||||
-- This provides a formal API for fetching quests injected by custom server DBs
|
|
||||||
-- that bypasses the binary stream without using function monkeypatching.
|
|
||||||
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
|
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
|
||||||
if not QuestieDB.questDataOverrides or not QuestieDB.questDataOverrides[questId] then
|
if not QuestieDB.questDataOverrides or not QuestieDB.questDataOverrides[questId] then
|
||||||
return nil
|
return nil
|
||||||
@@ -46,15 +109,9 @@ function QuestieServer:GetCustomQuest(questId)
|
|||||||
|
|
||||||
local level = QuestieDB.QueryQuestSingle(questId, "level") or QuestieDB.QueryQuestSingle(questId, "questLevel")
|
local level = QuestieDB.QueryQuestSingle(questId, "level") or QuestieDB.QueryQuestSingle(questId, "questLevel")
|
||||||
local reqLevel = QuestieDB.QueryQuestSingle(questId, "requiredLevel") or QuestieDB.QueryQuestSingle(questId, "minLevel")
|
local reqLevel = QuestieDB.QueryQuestSingle(questId, "requiredLevel") or QuestieDB.QueryQuestSingle(questId, "minLevel")
|
||||||
local desc = QuestieDB.QueryQuestSingle(questId, "objectiveText") or QuestieDB.QueryQuestSingle(questId, "description") or QuestieDB.QueryQuestSingle(questId, "details")
|
local desc = QuestieDB.QueryQuestSingle(questId, "objectiveText") or QuestieDB.QueryQuestSingle(questId, "description")
|
||||||
|
|
||||||
local startedBy = QuestieDB.QueryQuestSingle(questId, "startedBy")
|
local startedBy = QuestieDB.QueryQuestSingle(questId, "startedBy")
|
||||||
local starts = {
|
|
||||||
NPC = startedBy and startedBy[1] or {},
|
|
||||||
GameObject = startedBy and startedBy[2] or {},
|
|
||||||
Item = startedBy and startedBy[3] or {},
|
|
||||||
}
|
|
||||||
|
|
||||||
local finishedBy = QuestieDB.QueryQuestSingle(questId, "finishedBy")
|
local finishedBy = QuestieDB.QueryQuestSingle(questId, "finishedBy")
|
||||||
local specialFlags = QuestieDB.QueryQuestSingle(questId, "specialFlags")
|
local specialFlags = QuestieDB.QueryQuestSingle(questId, "specialFlags")
|
||||||
local isRepeatable = specialFlags and (bit.band(specialFlags, 1) ~= 0) or false
|
local isRepeatable = specialFlags and (bit.band(specialFlags, 1) ~= 0) or false
|
||||||
@@ -66,7 +123,7 @@ function QuestieServer:GetCustomQuest(questId)
|
|||||||
level = level or reqLevel or 0,
|
level = level or reqLevel or 0,
|
||||||
requiredLevel = reqLevel or 0,
|
requiredLevel = reqLevel or 0,
|
||||||
Description = desc,
|
Description = desc,
|
||||||
Starts = starts,
|
Starts = { NPC = startedBy and startedBy[1] or {}, GameObject = startedBy and startedBy[2] or {}, Item = startedBy and startedBy[3] or {} },
|
||||||
finishedBy = finishedBy,
|
finishedBy = finishedBy,
|
||||||
IsRepeatable = isRepeatable,
|
IsRepeatable = isRepeatable,
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-27
@@ -11,9 +11,9 @@
|
|||||||
## Notes-esES: Ayundante de misión
|
## Notes-esES: Ayundante de misión
|
||||||
## Notes-ptBR: Ajudante de missão
|
## Notes-ptBR: Ajudante de missão
|
||||||
## Notes-frFR: Assistant de quête
|
## Notes-frFR: Assistant de quête
|
||||||
## Version: 1.1.4
|
## Version: 1.2.2
|
||||||
## RequiredDeps:
|
## RequiredDeps:
|
||||||
## OptionalDeps: Ace3, CallbackHandler-1.0, HereBeDragons, LibDataBroker-1.1, LibDBIcon-1.0, LibSharedMedia-3.0, LibStub, LibUIDropDownMenu
|
## OptionalDeps: Ace3, CallbackHandler-1.0, HereBeDragons, LibDataBroker-1.1, LibDBIcon-1.0, LibSharedMedia-3.0, LibStub, LibUIDropDownMenu, Questie-X-WotLKDB, Questie-X-ClassicDB, Questie-X-TBCDB, Questie-X-TurtleDB, Questie-X-AscensionDB, Questie-X-EbonholdDB
|
||||||
## SavedVariables: QuestieConfig, QuestieLearnerDB
|
## SavedVariables: QuestieConfig, QuestieLearnerDB
|
||||||
## SavedVariablesPerCharacter: QuestieConfigCharacter
|
## SavedVariablesPerCharacter: QuestieConfigCharacter
|
||||||
## X-Curse-Project-ID: 334372
|
## X-Curse-Project-ID: 334372
|
||||||
@@ -28,6 +28,7 @@ Modules\Libs\QuestiePluginAPI.lua
|
|||||||
|
|
||||||
# COMPATIBILITY
|
# COMPATIBILITY
|
||||||
Modules\QuestieCompat.lua
|
Modules\QuestieCompat.lua
|
||||||
|
Libs\LibStub\LibStub.lua
|
||||||
Compat\embeds.xml
|
Compat\embeds.xml
|
||||||
Libs\XXH_Lua_Lib\XXH_Lua_Lib.lua
|
Libs\XXH_Lua_Lib\XXH_Lua_Lib.lua
|
||||||
|
|
||||||
@@ -43,22 +44,15 @@ Modules\Libs\MessageHandler.lua
|
|||||||
|
|
||||||
#Quest XP
|
#Quest XP
|
||||||
Database\QuestXP\QuestieXP.lua
|
Database\QuestXP\QuestieXP.lua
|
||||||
Database\QuestXP\DB\xpDB-wotlk.lua
|
|
||||||
|
|
||||||
# stream module (used by DB)
|
# stream module (used by DB)
|
||||||
Modules\QuestieStream.lua
|
Modules\QuestieStream.lua
|
||||||
|
|
||||||
# Zones
|
# Zones
|
||||||
Database\Zones\zoneTables.lua
|
Database\Zones\zoneTables.lua
|
||||||
|
|
||||||
Database\Zones\zoneDB.lua
|
Database\Zones\zoneDB.lua
|
||||||
|
|
||||||
|
# Core Database schema (data injected by DB plugins)
|
||||||
# Databases
|
|
||||||
Database\Wotlk\wotlkItemDB.lua
|
|
||||||
Database\Wotlk\wotlkNpcDB.lua
|
|
||||||
Database\Wotlk\wotlkObjectDB.lua
|
|
||||||
Database\Wotlk\wotlkQuestDB.lua
|
|
||||||
Database\QuestieDB.lua
|
Database\QuestieDB.lua
|
||||||
Database\questDB.lua
|
Database\questDB.lua
|
||||||
Database\objectDB.lua
|
Database\objectDB.lua
|
||||||
@@ -67,39 +61,36 @@ Database\itemDB.lua
|
|||||||
Database\Constants.lua
|
Database\Constants.lua
|
||||||
Database\MeetingStones.lua
|
Database\MeetingStones.lua
|
||||||
|
|
||||||
|
# Corrections framework (expansion-specific fixes loaded by DB plugins)
|
||||||
|
|
||||||
# Corrections
|
|
||||||
Database\Corrections\AutoTableUpdates.lua
|
Database\Corrections\AutoTableUpdates.lua
|
||||||
Database\Corrections\QuestieCorrections.lua
|
Database\Corrections\QuestieCorrections.lua
|
||||||
Database\Corrections\QuestieItemBlacklist.lua
|
Database\Corrections\QuestieItemBlacklist.lua
|
||||||
Database\Corrections\QuestieNPCBlacklist.lua
|
Database\Corrections\QuestieNPCBlacklist.lua
|
||||||
Database\Corrections\QuestieQuestBlacklist.lua
|
Database\Corrections\QuestieQuestBlacklist.lua
|
||||||
#Database\Corrections\SoMPhases.lua
|
|
||||||
Database\Corrections\QuestieEvent.lua
|
Database\Corrections\QuestieEvent.lua
|
||||||
|
|
||||||
# Automatic General Corrections
|
# Classic corrections (always loaded; _LoadCorrections skips missing IDs gracefully)
|
||||||
Database\Corrections\Automatic\itemStartFixes.lua
|
|
||||||
Database\Corrections\Automatic\classicQuestReputationFixes.lua
|
|
||||||
|
|
||||||
# Classic Corrections
|
|
||||||
Database\Corrections\classicQuestFixes.lua
|
Database\Corrections\classicQuestFixes.lua
|
||||||
Database\Corrections\classicNPCFixes.lua
|
Database\Corrections\classicNPCFixes.lua
|
||||||
Database\Corrections\classicItemFixes.lua
|
Database\Corrections\classicItemFixes.lua
|
||||||
Database\Corrections\classicObjectFixes.lua
|
Database\Corrections\classicObjectFixes.lua
|
||||||
|
|
||||||
# TBC Corrections
|
# TBC corrections (gated by Questie.IsTBC / Questie.IsWotLK inside QuestieCorrections)
|
||||||
Database\Corrections\tbcQuestFixes.lua
|
Database\Corrections\tbcQuestFixes.lua
|
||||||
Database\Corrections\tbcNPCFixes.lua
|
Database\Corrections\tbcNPCFixes.lua
|
||||||
Database\Corrections\tbcItemFixes.lua
|
Database\Corrections\tbcItemFixes.lua
|
||||||
Database\Corrections\tbcObjectFixes.lua
|
Database\Corrections\tbcObjectFixes.lua
|
||||||
|
|
||||||
# Wotlk Corrections
|
# WotLK corrections (gated by Questie.IsWotLK inside QuestieCorrections)
|
||||||
Database\Corrections\wotlkQuestFixes.lua
|
Database\Corrections\wotlkQuestFixes.lua
|
||||||
Database\Corrections\wotlkNPCFixes.lua
|
Database\Corrections\wotlkNPCFixes.lua
|
||||||
Database\Corrections\wotlkItemFixes.lua
|
Database\Corrections\wotlkItemFixes.lua
|
||||||
Database\Corrections\wotlkObjectFixes.lua
|
Database\Corrections\wotlkObjectFixes.lua
|
||||||
|
|
||||||
|
# Automatic General Corrections
|
||||||
|
Database\Corrections\Automatic\itemStartFixes.lua
|
||||||
|
Database\Corrections\Automatic\classicQuestReputationFixes.lua
|
||||||
|
|
||||||
# Compiler
|
# Compiler
|
||||||
Database\compiler.lua
|
Database\compiler.lua
|
||||||
|
|
||||||
@@ -109,10 +100,6 @@ Localization\Translations\Translations.xml
|
|||||||
|
|
||||||
Localization\lookups\lookupQuestCategories.lua
|
Localization\lookups\lookupQuestCategories.lua
|
||||||
Localization\lookups\lookupZones.lua
|
Localization\lookups\lookupZones.lua
|
||||||
Localization\lookups\Wotlk\lookupItems\lookupItems.xml
|
|
||||||
Localization\lookups\Wotlk\lookupNpcs\lookupNpcs.xml
|
|
||||||
Localization\lookups\Wotlk\lookupObjects\lookupObjects.xml
|
|
||||||
Localization\lookups\Wotlk\lookupQuests\lookupQuests.xml
|
|
||||||
|
|
||||||
# Libs
|
# Libs
|
||||||
Modules\Libs\QuestieLib.lua
|
Modules\Libs\QuestieLib.lua
|
||||||
@@ -170,7 +157,6 @@ Modules\Map\QuestieMapUtils.lua
|
|||||||
Modules\Map\HBDHooks.lua
|
Modules\Map\HBDHooks.lua
|
||||||
Modules\Map\WeaponMasterSkills.lua
|
Modules\Map\WeaponMasterSkills.lua
|
||||||
|
|
||||||
|
|
||||||
# Quest
|
# Quest
|
||||||
Modules\Quest\AvailableQuests.lua
|
Modules\Quest\AvailableQuests.lua
|
||||||
Modules\Quest\QuestLogCache.lua
|
Modules\Quest\QuestLogCache.lua
|
||||||
@@ -247,4 +233,3 @@ Modules\QuestieProfiler.lua
|
|||||||
# Main
|
# Main
|
||||||
Questie.lua
|
Questie.lua
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user