v9.7.2: Ebonhold Database integration and core logic refinements

This commit is contained in:
Xurkon
2026-02-14 21:13:44 -06:00
parent 0a2cc15641
commit 6ef85d4e2d
573 changed files with 1751730 additions and 2 deletions
+283
View File
@@ -0,0 +1,283 @@
---@class AscensionLoader
---@type table
local AscensionLoader = QuestieLoader:CreateModule("AscensionLoader")
---@type QuestieDB
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
---@type table
local AscensionDB = QuestieLoader:ImportModule("AscensionDB")
_G.AscensionDB = _G.AscensionDB or AscensionDB
local _overridesInjected = false
local _zonesApplied = false
local function _LoadIfString(data, label)
if not data then return nil end
if type(data) == "string" then
local fn, err = loadstring(data)
if not fn then
if Questie and Questie.Debug then
Questie:Debug(Questie.DEBUG_CRITICAL, "[AscensionLoader] loadstring failed for " .. tostring(label) .. ": " .. tostring(err))
end
return nil
end
local ok, tbl = pcall(fn)
if not ok then
if Questie and Questie.Debug then
Questie:Debug(Questie.DEBUG_CRITICAL, "[AscensionLoader] executing chunk failed for " .. tostring(label) .. ": " .. tostring(tbl))
end
return nil
end
return tbl
end
return data
end
local function _MergeInto(dst, src)
if type(dst) ~= "table" or type(src) ~= "table" then return end
for id, entry in pairs(src) do
dst[id] = entry
end
end
-- Apply Ascension custom uiMapId->areaId mappings into ZoneDB (used by map/Journey)
function AscensionLoader:ApplyZoneTables()
if _zonesApplied then return end
if not AscensionZoneTables or not AscensionZoneTables.uiMapIdToAreaId then return end
local ZoneDB = QuestieLoader:ImportModule("ZoneDB")
if not ZoneDB then return end
ZoneDB.private = ZoneDB.private or {}
ZoneDB.private.uiMapIdToAreaId = ZoneDB.private.uiMapIdToAreaId or {}
ZoneDB.private.areaIdToUiMapId = ZoneDB.private.areaIdToUiMapId or {}
ZoneDB.private.subZoneToParentZone = ZoneDB.private.subZoneToParentZone or {}
for uiMapId, areaId in pairs(AscensionZoneTables.uiMapIdToAreaId) do
if uiMapId and areaId then
-- Always set these mappings (remove the nil check to ensure they're set)
ZoneDB.private.uiMapIdToAreaId[uiMapId] = areaId
-- Ascension uses custom map ids for spawns/waypoints (e.g. 1238 for Northshire Valley).
-- QuestieMap draws by converting AreaId->UiMapId, so register these ids as self-mapping.
ZoneDB.private.areaIdToUiMapId[uiMapId] = uiMapId
-- Register subzone to parent zone mapping so GetParentZoneId works with Ascension zones
if uiMapId ~= areaId then
ZoneDB.private.subZoneToParentZone[uiMapId] = areaId
end
end
end
-- Also map parentMapIDs (e.g. 10138) to a usable uiMapId to avoid fallback errors.
if AscensionUiMapData and AscensionUiMapData.uiMapData then
for uiMapId, data in pairs(AscensionUiMapData.uiMapData) do
if uiMapId and ZoneDB.private.areaIdToUiMapId[uiMapId] == nil then
ZoneDB.private.areaIdToUiMapId[uiMapId] = uiMapId
end
if data and type(data.parentMapID) == "number" and ZoneDB.private.areaIdToUiMapId[data.parentMapID] == nil then
ZoneDB.private.areaIdToUiMapId[data.parentMapID] = uiMapId
end
end
end
-- Register zone sort names for custom zones
if AscensionZoneTables.zoneSort then
ZoneDB.private.zoneSort = ZoneDB.private.zoneSort or {}
for zoneId, zoneName in pairs(AscensionZoneTables.zoneSort) do
ZoneDB.private.zoneSort[zoneId] = zoneName
end
end
-- Clear cached zone lookups after adding custom zones
if QuestieDB and QuestieDB.private and QuestieDB.private.zoneCache then
QuestieDB.private.zoneCache = {}
end
-- Clear auto-blacklist since zone validation might have changed
if QuestieDB and QuestieDB.autoBlacklist then
QuestieDB.autoBlacklist = {}
end
_zonesApplied = true
end
-- Inject Ascension tables into QuestieDB *Overrides* so QueryQuestSingle/QueryNPCSingle can see them
function AscensionLoader:InjectOverrides()
if _overridesInjected then return end
_overridesInjected = true
-- Apply zone tables FIRST, before any ZoneDB functions use the local variables
AscensionLoader:ApplyZoneTables()
QuestieDB.npcDataOverrides = QuestieDB.npcDataOverrides or {}
QuestieDB.objectDataOverrides = QuestieDB.objectDataOverrides or {}
QuestieDB.itemDataOverrides = QuestieDB.itemDataOverrides or {}
QuestieDB.questDataOverrides = QuestieDB.questDataOverrides or {}
local npcData = _LoadIfString(AscensionDB and AscensionDB.npcData, "AscensionDB.npcData")
local objectData = _LoadIfString(AscensionDB and AscensionDB.objectData, "AscensionDB.objectData")
local itemData = _LoadIfString(AscensionDB and AscensionDB.itemData, "AscensionDB.itemData")
local questData = _LoadIfString(AscensionDB and AscensionDB.questData, "AscensionDB.questData")
_MergeInto(QuestieDB.npcDataOverrides, npcData)
_MergeInto(QuestieDB.objectDataOverrides, objectData)
_MergeInto(QuestieDB.itemDataOverrides, itemData)
_MergeInto(QuestieDB.questDataOverrides, questData)
-- Keep a lightweight list of custom quest ids for search/UI (DO NOT touch QuestPointers; those are numeric stream pointers)
if type(questData) == "table" then
QuestieDB.ascensionQuestIds = QuestieDB.ascensionQuestIds or {}
for questId, _ in pairs(questData) do
if type(questId) == "number" then
QuestieDB.ascensionQuestIds[questId] = true
end
end
end
-- Keep a lightweight list of custom NPC ids for search/UI
if type(npcData) == "table" then
QuestieDB.ascensionNpcIds = QuestieDB.ascensionNpcIds or {}
for npcId, _ in pairs(npcData) do
if type(npcId) == "number" then
QuestieDB.ascensionNpcIds[npcId] = true
end
end
end
-- Keep a lightweight list of custom object ids for search/UI
if type(objectData) == "table" then
QuestieDB.ascensionObjectIds = QuestieDB.ascensionObjectIds or {}
for objectId, _ in pairs(objectData) do
if type(objectId) == "number" then
QuestieDB.ascensionObjectIds[objectId] = true
end
end
end
-- Keep a lightweight list of custom item ids for search/UI
if type(itemData) == "table" then
QuestieDB.ascensionItemIds = QuestieDB.ascensionItemIds or {}
for itemId, _ in pairs(itemData) do
if type(itemId) == "number" then
QuestieDB.ascensionItemIds[itemId] = true
end
end
end
end
-- Hook ZoneDB.Initialize to inject custom zones BEFORE standard zones are processed
do
local ZoneDB = QuestieLoader:ImportModule("ZoneDB")
if ZoneDB then
local originalZoneInitialize = ZoneDB.Initialize
if type(originalZoneInitialize) == "function" then
function ZoneDB:Initialize(...)
-- Apply custom zones FIRST, before standard zone processing
AscensionLoader:ApplyZoneTables()
-- Then initialize standard zones
return originalZoneInitialize(self, ...)
end
end
end
end
-- Hook QuestieDB.Initialize to guarantee timing for overrides
do
local originalInitialize = QuestieDB and QuestieDB.Initialize
if type(originalInitialize) == "function" then
function QuestieDB:Initialize(...)
-- 1) Inject overrides before the DB handles are created
AscensionLoader:InjectOverrides()
local ret = originalInitialize(self, ...)
-- 2) Refresh Journey caches (zoneMap/zones) so "Quests by Zone" sees the new data
local ZoneDB = QuestieLoader:ImportModule("ZoneDB")
local QuestieJourney = QuestieLoader:ImportModule("QuestieJourney")
if ZoneDB and QuestieJourney then
QuestieJourney.zoneMap = ZoneDB:GetZonesWithQuests(true)
QuestieJourney.zones = ZoneDB:GetRelevantZones()
-- Clear the UI cache so the tree gets rebuilt
if QuestieJourney.private then
QuestieJourney.private.treeCache = nil
QuestieJourney.private.lastZoneSelection = {}
end
-- If the Journey window is open, rebuild the current tab
if QuestieJourneyFrame and QuestieJourneyFrame:IsShown() and QuestieJourney.tabGroup then
local p = QuestieJourney.private
if p and p.containerCache and p.lastOpenWindow then
p:HandleTabChange(p.containerCache, p.lastOpenWindow)
end
end
end
return ret
end
end
end
-- >>> NEW: Make QuestieDB.GetQuest work for Ascension override quests (Journey needs this)
do
local originalGetQuest = QuestieDB.GetQuest
if type(originalGetQuest) == "function" then
function QuestieDB.GetQuest(questId)
local q = originalGetQuest(questId)
if q then return q end
-- Fallback: build a minimal quest object from QueryQuestSingle (works with overrides)
local name = QuestieDB.QueryQuestSingle(questId, "name")
if not name then return nil end
local level = QuestieDB.QueryQuestSingle(questId, "level") or QuestieDB.QueryQuestSingle(questId, "questLevel")
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")
-- Build the Starts field from startedBy (CRITICAL for available quests to show icons!)
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 {},
}
-- Also get other fields needed for quest display
local finishedBy = QuestieDB.QueryQuestSingle(questId, "finishedBy")
local specialFlags = QuestieDB.QueryQuestSingle(questId, "specialFlags")
local isRepeatable = specialFlags and (bit.band(specialFlags, 1) ~= 0) or false
-- Questie modules expect these common fields
return {
Id = questId,
id = questId,
name = name,
level = level or reqLevel or 0,
requiredLevel = reqLevel or 0,
Description = desc, -- Journey tooltip reads quest.Description
Starts = starts, -- CRITICAL: AvailableQuests needs this!
finishedBy = finishedBy,
IsRepeatable = isRepeatable,
}
end
end
end
-- Ensure zones also get applied when Questie finishes loading (covers edge cases)
do
local f = CreateFrame("Frame")
f:RegisterEvent("ADDON_LOADED")
f:SetScript("OnEvent", function(_, _, name)
if name ~= "Questie-335" then return end
if C_Timer and C_Timer.After then
C_Timer.After(0, function() AscensionLoader:ApplyZoneTables() end)
else
AscensionLoader:ApplyZoneTables()
end
end)
end
return AscensionLoader
@@ -0,0 +1,109 @@
---@type table
local AscensionDB = QuestieLoader:CreateModule("AscensionDB")
AscensionDB.itemData = AscensionDB.itemData or {
--Elwynn Forest
[559159]={[1]="Oracular Idol",[2]={161717},[3]=nil,[4]=nil,[5]=1660036,[6]=nil,[7]=nil,[8]=nil,[9]=1,[10]=1,[11]=nil,[12]=nil,[13]=0},
[5055565]={[1]="Tattered Orders",[2]={991516},[3]=nil,[4]=nil,[5]=100074,[6]=nil,[7]=nil,[8]=nil,[9]=1,[10]=1,[11]=nil,[12]=nil,[13]=0},
[558956]={[1]="Elgris Blossom Petals",[2]=nil,[3]=nil,[4]=nil,[5]=nil,[6]=nil,[7]=nil,[8]=nil,[9]=0,[10]=0,[11]=nil,[12]=12,[13]=0,[14]={162814},[15]={1660056}},
[558957]={[1]="Dun Kazad Liquor Concentrate",[2]=nil,[3]=nil,[4]=nil,[5]=nil,[6]=nil,[7]=nil,[8]=nil,[9]=0,[10]=0,[11]=nil,[12]=12,[13]=0,[14]={162811},[15]={1660056}},
[558958]={[1]="Pumpkin Juice",[2]=nil,[3]=nil,[4]=nil,[5]=nil,[6]=nil,[7]=nil,[8]=nil,[9]=0,[10]=0,[11]=nil,[12]=12,[13]=0,[14]={162809},[15]={1660056}},
[558959]={[1]="Murloc Eyeball",[2]=nil,[3]=nil,[4]=nil,[5]=nil,[6]=nil,[7]=nil,[8]=nil,[9]=0,[10]=0,[11]=nil,[12]=12,[13]=0,[14]={162826},[15]={1660056}},
[558960]={[1]="Agria's Incomplete Potion",[2]=nil,[3]=nil,[4]=nil,[5]=nil,[6]=nil,[7]=nil,[8]=nil,[9]=1,[10]=1,[11]=nil,[12]=15,[13]=0,[14]=nil,[15]={1660056}},
[558961]={[1]="Pumpkin",[2]=nil,[3]={999014},[4]=nil,[5]=nil,[6]=nil,[7]=nil,[8]=nil,[9]=0,[10]=0,[11]=nil,[12]=0,[13]=5},
[558962]={[1]="Melon",[2]=nil,[3]={999013},[4]=nil,[5]=nil,[6]=nil,[7]=nil,[8]=nil,[9]=0,[10]=0,[11]=nil,[12]=0,[13]=5},
[558963]={[1]="Apple",[2]=nil,[3]={999015},[4]=nil,[5]=nil,[6]=nil,[7]=nil,[8]=nil,[9]=0,[10]=0,[11]=nil,[12]=0,[13]=5},
[157001]={[1]="Gem Encrusted Spider Silk",[2]={43},[3]=nil,[4]=nil,[5]=nil,[6]=nil,[7]=2048,[8]=nil,[9]=1,[10]=0,[11]=0,[12]=12,[13]=0,[14]=nil,[15]={17001}},
[157006]={[1]="Simple Crystal Vial",[2]=nil,[3]=nil,[4]=nil,[5]=nil,[6]=nil,[7]=0,[8]=nil,[9]=5,[10]=0,[11]=nil,[12]=12,[13]=0,[14]=nil,[15]={17003},[16]=157006},
[157002]={[1]="Depleted Mana Gem",[2]={474},[3]=nil,[4]=nil,[5]=nil,[6]=nil,[7]=nil,[8]=nil,[9]=1,[10]=1,[11]=nil,[12]=15,[13]=0,[14]=nil,[15]={17002}},
[157007]={[1]="Gnoll Sword",[2]={97},[3]=nil,[4]=nil,[5]=nil,[6]=nil,[7]=nil,[8]=nil,[9]=1,[10]=6,[11]=nil,[12]=15,[13]=0,[14]=nil,[15]={17004}},
[157008]={[1]="Gnoll Axe",[2]={478},[3]=nil,[4]=nil,[5]=nil,[6]=nil,[7]=nil,[8]=nil,[9]=1,[10]=10,[11]=nil,[12]=15,[13]=0,[14]=nil,[15]={17004}},
[157012]={[1]="Smudged Note",[2]=nil,[3]=nil,[4]=nil,[5]=nil,[6]=nil,[7]=0,[8]=nil,[9]=1,[10]=1,[11]=nil,[12]=15,[13]=0,[14]=nil,[15]={17005}},
[157014]={[1]="Mirror Lake Apple",[2]=nil,[3]={9017008},[4]=nil,[5]=nil,[6]=nil,[7]=nil,[8]=nil,[9]=1,[10]=8,[11]=nil,[12]=15,[13]=0,[14]=nil,[15]={17008}},
[559130] = {[1]="Lost Page I",[3]={900001},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660001}},
[559131] = {[1]="Lost Page II",[3]={900002},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660001}},
[559132] = {[1]="Lost Page III",[3]={900003},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660001}},
[559133] = {[1]="Lost Page IV",[3]={900004},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660001}},
--Dan Morogh
[254000] = {[1]="Security Bot AN-29",[2]={254004},[9]=1,[10]=0,[12]=12,[13]=0,[15]={254000}},
[254001] = {[1]="Security Bot AN-32",[2]={254005},[9]=1,[10]=0,[12]=12,[13]=0,[15]={254001}},
[559142] = {[1]="Radiant Armor Piece",[2]={161772},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660008}},
[559161] = {[1]="Contamination Extractor",[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660010}},
[559162] = {[1]="Radioactive Slime Mutagen",[2]={161776},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660010}},
[559163] = {[1]="Radiation Sprayer",[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660011}},
[558964] = {[1]="Thunderbrew Hop",[3]={2300550},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660077}},
[558950] = {[1]="Gornarn Blunderbuss",[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660079}},
[558965] = {[1]="Reusable Mechanical Parts",[2]={162888,162889,162890},[9]=0,[10]=0,[12]=12,[13]=0,[15]={1660078}},
[254002] = {[1]="Mirsinth's Totem",[2]={254006},[9]=1,[10]=0,[12]=12,[13]=0,[15]={254004}},
[662336] = {[1]="Frostpine Log",[3]={244620},[9]=1,[10]=0,[12]=12,[13]=0,[15]={500005}},
--Teldrassil
[559143] = {[1]="Cut of Good Meat",[3]={2300512},[9]=1,[10]=0,[12]=0,[13]=0,[15]={1660014}},
[559144] = {[1]="Good Flesh Amalgam",[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660015}},
[559145] = {[1]="Blessed Good Flesh Amalgam",[15]={1660015}},
--Durotar
[11584] = {'Cactus Apple Surprise',nil,nil,nil,nil,nil,nil,nil,5,0,0,4,0,nil,{254010}},
[254005] = {'Strange Flower',nil,{254001},nil,nil,nil,nil,nil,1,0,0,12,0,nil,{254008}},
[254006] = {'Xaitoth\'s Blood',{254015},nil,nil,nil,nil,nil,nil,1,0,0,12,0,nil,nil},
[559146] = {'Witchs Amulet',nil,nil,nil,nil,nil,nil,nil,1,0,0,4,0,nil,{1660019}},
[559148] = {'Bat Spiritual Essence',{161793},nil,nil,nil,nil,nil,nil,1,0,0,4,0,nil,{1660020}},
[559149] = {'Spider Spiritual Essence',{161795},nil,nil,nil,nil,nil,nil,1,0,0,4,0,nil,{1660020}},
[559150] = {'Serpent Spiritual Essence',{161794},nil,nil,nil,nil,nil,nil,1,0,0,4,0,nil,{1660020}},
[559155] = {'Spiritual Unrest',{30719},nil,nil,nil,nil,nil,nil,0,0,0,4,0,nil,nil},
[559158] = {'Unremarkable Stone',nil,nil,nil,nil,nil,nil,1,1,0,0,12,0,nil,nil},
[559172] = {'Fire Elemental Shackles',nil,{1064805},nil,nil,nil,nil,nil,1,0,0,4,0,nil,{1660021}},
[559173] = {'Earth Elemental Shackles',nil,{2392807},nil,nil,nil,nil,nil,1,0,0,4,0,nil,{1660021}},
[559174] = {'Air Elemental Shackles',nil,{3478505},nil,nil,nil,nil,nil,1,0,0,4,0,nil,{1660021}},
[559175] = {'Water Elemental Shackles',nil,{4541078},nil,nil,nil,nil,nil,1,0,0,4,0,nil,{1660021}},
[558973] = {[1]="Empty Dirgran's Pitcher",[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660064}},
[558974] = {[1]="Full Dirgran's Pitcher",[3]={5954415},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660064}},
[254007] = {[1]="Metallic Debris",[3]={254003},[9]=1,[10]=0,[12]=12,[13]=0,[15]={254011}},
[558966] = {[1]="Elven Relic of Old",[3]={2300551,2300558,2300556,2300555,2300553,2300554,2300557},[10]=0,[12]=0,[13]=0,[15]={1660063}},
[254008] = {[1]="Ouru'Gai Crystal",[3]={254002},[9]=1,[10]=0,[12]=12,[13]=0,[15]={254014}},
--Tirisfal Glades
[16333] = {[1]="Samuel's Remains",[2]={1919},[9]=1,[10]=0,[12]=12,[13]=0,[15]={6395}},
[559164] = {[1]="Gaudy Painting",[3]={2300528},[9]=1,[10]=0,[12]=0,[13]=0,[15]={1660028}},
[559165] = {[1]="Shimmering Jewel",[3]={2300529},[9]=1,[10]=0,[12]=0,[13]=0,[15]={1660028}},
[559166] = {[1]="Crystal Ball",[2]={108586},[3]={2300530},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660028}},
[559167] = {[1]="Family Signet",[2]={108586},[3]={2300531},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660028}},
[559138] = {[1]="Majordomos Key Fragment",[2]={161753},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660026}},
[559139] = {[1]="Maids Key Fragment",[2]={161754},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660026}},
[559140] = {[1]="Stablemasters Key Fragment",[2]={161755},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660026}},
[354655] = {[1]="Rod Toxicstrike's Concoction",[9]=1,[10]=0,[12]=12,[13]=0,[15]={254064}},
[558953] = {[1]="Encapsulated Necrotic Spores",[3]={2300545},[9]=0,[10]=0,[12]=12,[13]=0,[15]={1660051}},
[558954] = {[1]="Clinging Necrotic Spores",[2]={162842},[9]=0,[10]=0,[12]=12,[13]=0,[15]={1660051}},
[558955] = {'Scarlet Letter',{162857},nil,nil,{1660053},nil,nil,nil,1,0,0,12,0,nil,nil},
[354678] = {[1]="Lieutenant Sanders's Head",[2]={13158},[9]=1,[10]=1,[12]=12,[13]=0,[15]={254056}},
[354654] = {[1]="Ralden's Transformation Elixir",[9]=1,[10]=0,[12]=12,[13]=0,[15]={254057}},
--Mulgore
[559156] = {[1]="Grimtotem Marauder Mane",[2]={161809},[9]=0,[10]=0,[12]=12,[13]=0,[15]={1660030}},
[559168] = {[1]="Offering Bone",[2]={161810},[3]={2300532},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660035}},
[559151] = {[1]="Grimtotem Armor Piece",[3]={2300514},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660032}},
[559152] = {[1]="Exalted Pendant",[3]={2300515},[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660032}},
[558972] = {[1]="Full Sanctuary Amphora",[3]={5195711},[15]={1660067}},
[558971] = {[1]="Empty Sanctuary Amphora",[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660067}},
[558967] = {[1]="Holy Water Blessing",[9]=1,[10]=0,[12]=12,[13]=0,[15]={1660068}},
[558968] = {[1]="Prairie Sap",[3]={2300552},[9]=0,[10]=0,[12]=0,[13]=0,[15]={1660069}},
[558969] = {[1]="Kodo Tallow",[2]={162909,2972,2973,2974},[9]=0,[10]=0,[12]=12,[13]=0,[15]={1660069}},
[662335] = {[1]="Ritual Totem",[2]={2965,2964},[9]=1,[10]=0,[12]=12,[13]=0,[15]={500004}},
}
AscensionItemDB=AscensionItemDB or {}
AscensionItemDB.itemData=AscensionDB.itemData
@@ -0,0 +1,229 @@
---@type table
local AscensionDB = QuestieLoader:CreateModule("AscensionDB")
AscensionDB.npcData = AscensionDB.npcData or {
--Beginner's Book of Ascension
[75118]={"Beginner's Book of Ascension",89,89,1,1,1,{[14]={{42.4,68.7},{52.2,43.2},{56.2,74.7}},[17]={{28.4,67.0},{63.2,37.0},{52.1,30.2}},[3430]={{44.2,70.9},{38.3,21.4},{47.0,46.1}},[12]={{48.1,41.9},{43.1,66.6}},[1]={{30.1,71.7},{46.9,52.4}},[141]={{58.7,44.3},{57.5,57.5}},[85]={{31.5,65.9},{61.4,53.0}},[3524]={{49.1,51.3},{80.7,46.3}},[215]={{47.1,60.9}},[148]={{37.3,44.0}},[130]={{43.4,41.8}},[38]={{34.9,47.7}},[3433]={{47.6,31.6}},[3525]={{55.1,59.6}},[44]={{28.2,47.7}},[331]={{36.3,49.3}},[10]={{73.9,48.0}},[40]={{56.9,54.7}}},nil,nil,{1903520},{1903520},31,"AH",nil,3},
--Elwynn Forest
[97921]={[1]='Garion Hunter',[2]=327,[3]=327,[4]=10,[5]=10,[6]=0,[7]={[12]={{43.97,64.16}}},[8]=nil,[9]=12,[10]={4420430,1903556},[11]={4420430},[12]=72,[13]="AH",[14]="",[15]=3},
[161700]={[1]='Bianca Spada',[2]=158,[3]=158,[4]=8,[5]=8,[6]=0,[7]={[12]={{48.1,42.4}}},[8]=nil,[9]=12,[10]={1660000},[11]=nil,[12]=12,[13]="A",[14]=nil,[15]=3},
[161701]={[1]='Moroi Spada',[2]=293,[3]=293,[4]=11,[5]=11,[6]=0,[7]={[1238]={{39.89,51.29}}},[8]=nil,[9]=12,[10]={1660001,1660002},[11]={1660000},[12]=12,[13]="A",[14]="Seminarian of Northshire Abbey",[15]=3},
[161702]={[1]='Sister Alma',[2]=4058,[3]=4058,[4]=55,[5]=55,[6]=0,[7]={[12]={{52.4,35}}},[8]=nil,[9]=12,[10]={},[11]={},[12]=72,[13]="AH",[14]="Ancient Priestess of Northshire",[15]=3},
[161705]={[1]='Injured Northshire Guard',[2]=510,[3]=510,[4]=17,[5]=17,[6]=0,[7]={[12]={{54.9,39.5}}},[8]=nil,[9]=12,[10]={1660005},[11]={1660005},[12]=72,[13]="AH",[14]="Injured Northshire Guard",[15]=3},
[161712]={[1]='Accursed Censor',[2]=341,[3]=341,[4]=4,[5]=4,[6]=0,[7]={[12]={{51.7,27.6}}},[8]=nil,[9]=12,[10]=nil,[11]={1660038},[12]=25,[13]=nil,[14]="",[15]=0},
[161713]={[1]='Wayward Theologian',[2]=341,[3]=341,[4]=7,[5]=7,[6]=0,[7]={[12]={{60.5,28.7}}},[8]=nil,[9]=12,[10]=nil,[11]={1660004},[12]=25,[13]=nil,[14]="",[15]=0},
[161716]={[1]='Shadewell Murloc',[2]=100,[3]=134,[4]=3,[5]=3,[6]=0,[7]={[12]={{58.11,31.87},{57.92,32.08},{57.29,32.93},{57.24,32.18},{57.74,31.54},{58.57,31.1},{58.33,30.11},{58.18,29.24},{58.36,28.44},{58.65,28.72},{58.79,29.02},{58.73,28.03},{59.24,26.92},{59.36,26.22},{58.98,25.92},{58.31,25.83},{58.31,25.15},{57.68,25.61},{57.82,26.2}}},[8]=nil,[9]=12,[10]=nil,[11]=nil,[12]=25,[13]=nil,[14]="",[15]=0},
[161717]={[1]='Shadewell Murloc Oracle',[2]=100,[3]=134,[4]=3,[5]=3,[6]=0,[7]={[12]={{58.25,31.47},{58.63,30.72},{58.54,29.36},{56.56,33.84},{59.02,25.53},{59.29,26.58}}},[8]=nil,[9]=12,[10]=nil,[11]=nil,[12]=72,[13]="AH",[14]="",[15]=3},
[161736]={[1]='Defias Plunderer',[2]=100,[3]=134,[4]=3,[5]=3,[6]=0,[7]={[12]={{55.62,38.74},{55.28,38.61},{54.83,38.23},{55.43,36.8},{56.1,37.49},{55.22,37.71},{55.52,37.63},{55.66,38.2},{55.67,37.51},{55.59,37.54},{55.66,38.05},{56.03,36.58}}},[8]=nil,[9]=12,[10]=nil,[11]=nil,[12]=25,[13]=nil,[14]="",[15]=0},
[161844]={[1]='Father Harnos',[2]=205,[3]=205,[4]=8,[5]=8,[6]=0,[7]={[12]={{49.16,41.71}}},[8]=nil,[9]=12,[10]=nil,[11]=nil,[12]=72,[13]="AH",[14]="",[15]=3},
[162800]={[1]='Dulcinea',[2]=510,[3]=510,[4]=17,[5]=17,[6]=0,[7]={[12]={{43.11,65.90}}},[8]=nil,[9]=12,[10]={},[11]={},[12]=72,[13]="AH",[14]="Maid of House Spada",[15]=3},
[162802]={[1]='Aldia Crayon',[2]=1394,[3]=1394,[4]=30,[5]=30,[6]=0,[7]={[12]={{30.72,57.72}}},[8]=nil,[9]=12,[10]={1660057},[11]={1660056,1660057},[12]=72,[13]="AH",[14]="",[15]=3},
[162805]={[1]="Clara the Mad",[2]=120,[3]=120,[4]=8,[5]=8,[6]=0,[7]={[12]={{43.22,70.87}}},[8]=nil,[9]=12,[10]={1660058},[11]={1660058},[12]=12,[13]="A",[14]=nil,[15]=2},
[162806]={[1]='Aliscar Lend',[2]=1593,[3]=1593,[4]=32,[5]=32,[6]=0,[7]={[12]={{44.59,62.99}}},[8]=nil,[9]=12,[10]={},[11]={},[12]=72,[13]="AH",[14]="",[15]=3},
[162943]={[1]='Arcane Projection of Aliscar',[2]=1593,[3]=1593,[4]=32,[5]=32,[6]=0,[7]={[12]={{44.44,63.39}}},[8]=nil,[9]=12,[10]={},[11]={},[12]=72,[13]="AH",[14]="",[15]=3},
[162809]={[1]="Rowena",[2]=120,[3]=120,[4]=8,[5]=8,[6]=0,[7]={[12]={{43.2,66.9}}},[8]=nil,[9]=12,[10]=nil,[11]=nil,[12]=12,[13]="A",[14]=nil,[15]=2},
[162811]={[1]="Darron",[2]=120,[3]=120,[4]=8,[5]=8,[6]=0,[7]={[12]={{42.5,65.9}}},[8]=nil,[9]=12,[10]=nil,[11]=nil,[12]=12,[13]="A",[14]=nil,[15]=2},
[162814]={[1]="Ainora",[2]=120,[3]=120,[4]=8,[5]=8,[6]=0,[7]={[12]={{43.6,62.6}}},[8]=nil,[9]=12,[10]=nil,[11]=nil,[12]=12,[13]="A",[14]=nil,[15]=2},
[162815]={[1]="Aldia",[2]=120,[3]=120,[4]=20,[5]=20,[6]=0,[7]={[12]={{34.4,82.9}}},[8]=nil,[9]=12,[10]={1660056},[11]={1660056},[12]=12,[13]="A",[14]=nil,[15]=2},
[162807]={[1]='Harvend Thorm',[2]=1923,[3]=1923,[4]=35,[5]=35,[6]=0,[7]={[12]={{42.42,70.12}}},[8]=nil,[9]=12,[10]={1660059},[11]={},[12]=72,[13]="AH",[14]="",[15]=3},
[162801]={[1]='Eldor Hammer',[2]=688,[3]=688,[4]=21,[5]=21,[6]=0,[7]={[12]={{43.96,70.25}}},[8]=nil,[9]=12,[10]={},[11]={1660059},[12]=72,[13]="AH",[14]="",[15]=3},
[162826]={[1]="Joaquin",[2]=120,[3]=120,[4]=8,[5]=8,[6]=0,[7]={[12]={{46.6,65.3}}},[8]=nil,[9]=12,[10]=nil,[11]=nil,[12]=12,[13]="A",[14]=nil,[15]=2},
[991516]={[1]='Suspicious Guard',[2]=309,[3]=309,[4]=8,[5]=8,[6]=0,[7]={[12]={{58.12,80.04}}},[8]=nil,[9]=12,[10]={},[11]={},[12]=72,[13]="AH",[14]="",[15]=3},
[9000017]={[1]='Esyra',[2]=211,[3]=211,[4]=9,[5]=9,[6]=0,[7]={[12]={{64.90,69.80}}},[8]=nil,[9]=12,[10]={17003,17002},[11]={17003,17002},[12]=72,[13]="AH",[14]="",[15]=3},
[197]={[1]="Marshal McBride",[2]=484,[3]=484,[4]=20,[5]=20,[6]=0,[7]={[12]={{48.0,41.9}}},[8]=nil,[9]=12,[10]={7,15,21,54,3100,3101,3102,3103,3104,3105},[11]={7,15,21,783},[12]=12,[13]="A",[14]=nil,[15]=3},
[240]={[1]="Marshal Dughan",[2]=713,[3]=713,[4]=25,[5]=25,[6]=0,[7]={[12]={{42.96,65.78}}},[8]=nil,[9]=12,[10]={35,59,62,76,109,147,239},[11]={39,40,54,62,76,123,147,176},[12]=12,[13]="A",[14]=nil,[15]=3},
[250]={[1]="Pa Maclure",[2]=120,[3]=120,[4]=6,[5]=6,[6]=0,[7]={[12]={{42.7,89.3}}},[8]=nil,[9]=12,[10]={17000},[11]={17000},[12]=12,[13]="A",[14]=nil,[15]=2},
[253]={[1]="William Pestle",[2]=120,[3]=120,[4]=6,[5]=6,[6]=0,[7]={[12]={{44.29,66.56}}},[8]=nil,[9]=12,[10]={60,61,112,114},[11]={60,107,112},[12]=12,[13]="A",[14]=nil,[15]=2},
[261]={[1]="Guard Thomas",[2]=1003,[3]=1003,[4]=30,[5]=30,[6]=0,[7]={[12]={{73.97,72.18}}},[8]=nil,[9]=12,[10]={37,39,46,52,109,17004},[11]={35,46,52,71,17004},[12]=12,[13]="A",[14]=nil,[15]=2},
[295]={[1]="Innkeeper Farley",[2]=1003,[3]=1003,[4]=30,[5]=30,[6]=0,[7]={[12]={{44.77,66.8}}},[8]=nil,[9]=12,[10]={70},[11]={69,2158},[12]=12,[13]="A",[14]="Innkeeper",[15]=66179},
[658]={[1]="Sten Stoutarm",[2]=102,[3]=102,[4]=5,[5]=5,[6]=0,[7]={[1]={{29.87,71.88}}},[8]=nil,[9]=1,[10]={179,233,3106,3107,3108,3109,3110,3112,3113,3114,3115},[11]={179},[12]=55,[13]="A",[14]=nil,[15]=3},
[713]={[1]="Balir Frosthammer",[2]=102,[3]=102,[4]=5,[5]=5,[6]=0,[7]={[1]={{29.92,71.16}}},[8]=nil,[9]=1,[10]={170},[11]={170},[12]=55,[13]="A",[14]=nil,[15]=2},
[823]={[1]="Deputy Willem",[2]=417,[3]=417,[4]=18,[5]=18,[6]=0,[7]={[12]={{48.0,43.6}}},[8]=nil,[9]=12,[10]={6,18,783,3903,5261},[11]={6,18},[12]=12,[13]="A",[14]=nil,[15]=2},
[917]={[1]="Keryn Sylvius",[2]=222,[3]=222,[4]=11,[5]=11,[6]=0,[7]={[12]={{44.89,66.70}}},[8]=nil,[9]=12,[10]={2205,2300},[11]=nil,[12]=12,[13]="A",[14]="Rogue Trainer",[15]=51},
[955]={[1]="Sergeant De Vries",[2]=198,[3]=198,[4]=10,[5]=10,[6]=0,[7]={[12]={{24.08,73.2}}},[8]=nil,[9]=12,[10]={17008},[11]={17008},[12]=12,[13]="A",[14]="Morale Officer",[15]=640},
[6778]={[1]="Melika Isenstrider",[2]=222,[3]=222,[4]=11,[5]=11,[6]=0,[7]={[12]={{44.47,67.03}}},[8]=nil,[9]=12,[10]=nil,[11]=nil,[12]=12,[13]="A",[14]="Assistant Innkeeper",[15]=2},
[11916]={[1]="Imelda",[2]=713,[3]=713,[4]=25,[5]=25,[6]=0,[7]={[1519]={{33.71,62.6}}},[8]=nil,[9]=1519,[10]=nil,[11]={17005},[12]=12,[13]="A",[14]=nil,[15]=1},
[466] = {'General Marcus Jonathan',42780,42780,72,72,1,{[1519]={{69.17,82.72}}},nil,1519,{100466,121},{120},12,"A","High Commander of Stormwind Defense",2},
--Dun Morogh
--NPCs
[254000] = {[1]="Efry Cogspark",[2]=299,[3]=299,[4]=10,[5]=10,[6]=0,[7]={[1239]={{65.49,45.96}},[38]={{35.20,48.60}}},[9]=1239,[10]={254000,254001,254002},[11]={254000,254001,254005},[12]=12,[13]="A"},
[161718] = {[1]="Groldha",[2]=187,[3]=187,[4]=8,[5]=8,[6]=0,[7]={[1239]={{62.70,43.90}}},[9]=1239,[10]={1660006,1660009},[12]=12,[13]="A"},
[161720] = {[1]="Arathror",[2]=584,[3]=584,[4]=20,[5]=20,[6]=0,[7]={[1239]={{41,33.96}}},[9]=1239,[10]={1660008,1660009,1660039},[11]={1660007,1660008},[12]=12,[13]="A"},
[161719] = {'Dead Crewman',212,212,9,9,0,{[1239]={{33.80,52.80}}},nil,1239,{1660007},{1660006},72,"AH","",0},
[161820] = {[1]="Redna",[2]=187,[3]=187,[4]=8,[5]=8,[6]=0,[7]={[1239]={{35.34,32.31}}},[9]=1239,[10]={1660010},[11]={1660010,1660039},[12]=72,[13]="AH"},
[161839] = {[1]="Lahud",[2]=91,[3]=91,[4]=3,[5]=3,[6]=0,[7]={[1239]={{55.23,21.02}}},[9]=1239,[10]={1660011},[11]={1660011},[12]=72,[13]="AH"},
[162882] = {[1]="Norhi Thunderbrew",[2]=329,[3]=329,[4]=13,[5]=13,[6]=0,[7]={[1239]={{63.04,45.22}}},[9]=1239,[10]={1660076},[12]=12,[13]="A"},
[254002] = {'Mountaineer Tagnur',22690,22690,57,57,0,{[1]={{36.20,62.40}}},nil,1,{254003}, {254002},72,"A","",3},
[162883] = {'Eyma Thunderbrew',395,395,15,15,0,{[1]={{47.30,52.70}}},nil,1,{1660077}, {1660076,1660077},72,"A","",3},
[7954] = {'Binjy Featherwhistle',2769,2769,50,50,0,{[1]={{49.15,48.13}}},nil,1,{4420432,1903556},{14084,4420432,1903556},875,"A","Mechanostrider Pilot",83},
[162901] = {[1]="Gravedigger Nonuid",[2]=503,[3]=503,[4]=18,[5]=18,[6]=0,[7]={[1]={{48.87,52.65}}},[9]=1,[10]={1660080},[11]={1660080},[12]=12,[13]="A"},
[162891] = {[1]="Gornarn",[2]=239,[3]=239,[4]=10,[5]=10,[6]=0,[7]={[1]={{49.23,53.74}}},[9]=1,[10]={1660079},[11]={1660079},[12]=12,[13]="A"},
[162917] = {'Target',122,122,5,5,0,{[1]={{49.00,53.70}}},nil,1,{}, {},72,"A","",3},
[162884] = {[1]="Ikoras",[2]=212,[3]=212,[4]=9,[5]=9,[6]=0,[7]={[1]={{48.90,55.90}}},[8]=nil,[9]=1,[10]={1660078},[11]={1660078},[12]=12,[13]="A",[14]=nil,[15]=0},
[254003] = {'Mirsinth the Exile',478,478,10,10,0,{[1]={{36.80,52.00}}},nil,1,{}, {254003},12,"A","",3},
[765556] = {[1]="Brunna Ironhew",[2]=267,[3]=267,[4]=11,[5]=11,[6]=0,[7]={[1]={{62.5,57.49}}},[9]=1,[10]={500005},[11]={500005},[12]=12,[13]="A"},
[764536] = {[1]="Old Kargan Stouthew",[2]=239,[3]=239,[4]=10,[5]=10,[6]=0,[7]={[1]={{61.9,57.74}}},[9]=1,[10]={500006},[11]={500006},[12]=12,[13]="A"},
--Creatures
[254004] = {'Damaged Security Bot',161,161,1,1,0,{[1239]={{31.41,73.19}}},nil,1239,nil,nil,72,nil,nil,0},
[254005] = {'Security Bot AN-32',161,161,1,1,0,{[1239]={{59.16,82.95}}},nil,1239,nil,nil,72,nil,nil,0},
[161772] = {[1]="Radiant Fanatic",[2]=78,[3]=78,[4]=3,[5]=3,[6]=0,[7]={[1239]={{43.84,25.51},{43.04,26.69},{41.49,26.36},{40.51,24.75},{42.05,24.54},{38.7,22.71},{38.94,20.46},{39.17,17.75},{38.54,17.54},{42.34,17.51},{41.7,19.44},{42.55,20.73},{45.74,21.15}}},[9]=1239},
[161776] = {'Radiant Slime',91,122,3,3,0,{[1239]={{49.80,20.31},{50.18,19.95},{49.47,23.21},{50.80,21.77},{51.38,22.23},{51.73,22.81},{52.99,23.20},{53.56,24.08},{55.20,22.80},{55.16,24.53},{54.90,25.98},{57.82,23.08},{58.30,22.87},{55.12,27.21},{58.59,29.38},{57.96,29.33},{58.37,30.84},{60.31,23.03},{60.99,23.35},{61.24,21.61}}},nil,1239,nil,nil,72,nil,nil,0},
[161835] = {'Right Hand of His Majesty',311,311,4,4,1,{[1239]={{56.04,24.44}}},nil,1239,nil,nil,72,nil,nil,0},
[161775] = {'His Radiant Majesty',414,414,7,7,1,{[1239]={{59.81,26.35}}},nil,1239,nil,nil,72,nil,nil,0},
[161786] = {'Radiant Devotee',91,122,3,3,0,{[1239]={{50.89,19.79},{53.29,22.45},{54.28,21.74},{50.47,22.60},{50.08,23.43},{49.82,23.66},{49.45,19.25},{51.25,20.38},{50.74,18.11},{51.15,17.81},{51.78,20.05},{52.48,20.85},{53.84,19.47},{53.95,19.13},{53.19,18.76},{54.40,24.45},{54.00,24.39},{55.64,24.86},{56.32,27.38},{56.94,27.45},{57.22,25.45},{57.42,25.12},{53.40,21.65},{53.08,24.47},{52.38,23.56},{52.15,24.75},{55.46,19.19},{56.89,19.36}}},nil,1239,nil,nil,72,nil,nil,0},
[162888] = {'Out-of-Control Automaton v1.1',122,122,6,6,0,{[1]={{49.84,55.71},{51.03,54.78},{51.86,56.41},{52.63,56.26},{53.65,55.68}}},nil,1,nil,nil,72,"AH",nil,0},
[162889] = {'Out-of-Control Automaton v1.2',144,144,6,6,0,{[1]={{50.4,56.03},{50.45,55.24},{50.72,54.47},{51.43,56.29},{52.1,55.31},{52.59,56.14}}},nil,1,nil,nil,72,"AH",nil,0},
[162890] = {'Out-of-Control Automaton v1.3',165,165,7,7,0,{[1]={{50.41,55.61},{51.37,55.85},{52.52,55.87},{53.69,55.47}}},nil,1,nil,nil,72,"AH",nil,0},
[254006] = {[1]="Jun'Kon",[2]=161,[3]=161,[4]=8,[5]=8,[6]=0,[7]={[1]={{21.59,51.64}}},[9]=1},
[76555] = {[1]="Icehide",[2]=563,[3]=563,[4]=14,[5]=14,[6]=1,[7]={[1]={{64.85,58.42}}},[9]=1},
--Teldrassil
--NPCs
[2083] = {'Syral Bladeleaf',247,247,12,12,0,{[141]={{57.2,56.83}}},nil,141,{489,997,1581},{1581},80,"A",nil,2},
[2078] = {'Athridas Bearmantle',222,222,11,11,0,{[141]={{57.34,56.11}}},nil,141,{475,483,486},{476,483,486},80,"A",nil,2},
[2151] = {'Moon Priestess Amara',713,713,25,25,0,{[141]={{55.30,58.40}}},nil,141,{487,489},{487},79,"A",nil,2},
[3567] = {'Tallonkai Swiftroot',222,222,11,11,0,{[141]={{57.36,55.35}}},nil,141,{932,2438,2459},{932,2438,2459},80,"A",nil,2},
[6736] = {'Innkeeper Keldamyr',1003,1003,30,30,0,{[141]={{57.26, 60.00}}},nil,141,nil,{2159},80,"A","Innkeeper",66179},
[6780] = {'Porthannius',137,137,7,7,0,{[141]={{54.58,84.52}}},nil,141,{2159},nil,80,"A",nil,2},
[449169] = {[1]="Sylindra Starweave",[2]=299,[3]=327,[4]=10,[5]=10,[6]=0,[7]={[141]={{56.26,57.01}}},[9]=141,[10]={1903556,449169,},[11]={1903556,449169},[12]=12,[13]="A"},
[161725] = {[1]="Thariel Wingstroke",[2]=293,[3]=293,[4]=11,[5]=11,[6]=0,[7]={[1243]={{51.34,67.86},{51.44,67.98}}},[9]=1243,[10]={1660012,1660071},[11]={1660085},[12]=12,[13]="A"},
[161726] = {[1]="Aryandel",[2]=361,[3]=361,[4]=13,[5]=13,[6]=0,[7]={[1243]={{62.03,35.03}}},[9]=1243,[10]={1660013},[11]={1660012},[12]=12,[13]="A"},
[161727] = {[1]="Lady Aegya",[2]=433,[3]=433,[4]=-1,[5]=-1,[6]=3,[7]={[1243]={{69.64,24.5}}},[9]=1243,[10]={1660014,1660015,1660085},[11]={1660013,1660014,1660016},[12]=12,[13]="A"},
[161728] = {[1]="Gilgaen",[2]=640,[3]=640,[4]=20,[5]=20,[6]=0,[7]={[1243]={{68.87,21.74}}},[9]=1243,[10]={1660016},[11]={1660015},[12]=12,[13]="A"},
[161848] = {[1]="Eldya",[2]=181,[3]=181,[4]=7,[5]=7,[6]=0,[7]={[1243]={{66.32,35.46},{66.32,35.46}}},[9]=1243,[10]={1660017},[11]={1660017},[12]=12,[13]="A"},
[161916] = {[1]="Sheelem",[2]=181,[3]=181,[4]=7,[5]=7,[6]=0,[7]={[1243]={{72.08,32.99}}},[9]=1243,[10]={1660040},[11]={1660040},[12]=12,[13]="A"},
[162879] = {[1]="Kaladir",[2]=232,[3]=232,[4]=9,[5]=9,[6]=0,[7]={[141]={{56.48,59.67}}},[9]=141,[10]={1660074},[11]={1660074},[12]=12,[13]="A"},
[162880] = {[1]="Adrilia Soultemper",[2]=1113,[3]=1113,[4]=27,[5]=27,[6]=0,[7]={[141]={{57.03,52.30}}},[9]=141,[10]={1660073},[11]={1660072,1660073},[12]=12,[13]="A"},
[162881] = {[1]="Alenna Whisperbough",[2]=940,[3]=940,[4]=25,[5]=25,[6]=0,[7]={[141]={{59.35,58.93}}},[9]=141,[10]={1660075},[11]={1660075},[12]=12,[13]="A"},
[162870] = {[1]="Theren-Dion Sentinel",[2]=144,[3]=158,[4]=6,[5]=7,[6]=0,[7]={[141]={{58.20,52.00},{57.70,50.50}}},[9]=141},
[162871] = {[1]="Theren-Dion Sentinel",[2]=144,[3]=158,[4]=6,[5]=7,[6]=0,[7]={[141]={{58.10,51.90},{57.10,50.30}}},[9]=141},
[162872] = {[1]="Theren-Dion Sentinel",[2]=144,[3]=158,[4]=6,[5]=7,[6]=0,[7]={[141]={{58.50,51.50},{58.30,48.80}}},[9]=141},
[162873] = {[1]="Theren-Dion Sentinel",[2]=144,[3]=158,[4]=6,[5]=7,[6]=0,[7]={[141]={{58.20,48.70},{57.80,49.60}}},[9]=141},
[162856] = {[1]="Theren-Dion Sentinel",[2]=144,[3]=158,[4]=6,[5]=7,[6]=0,[7]={[141]={{58.60,50.90},{57.30,50.00}}},[9]=141},
--Creatures
[161735] = {[1]="Rotworm",[2]=29,[3]=35,[4]=1,[5]=2,[6]=0,[7]={[2031]={{53.97,33.06},{53.33,28.5},{51.23,56.05},{36.2,54.26},{36.66,55.04},{39.02,51.87},{64.99,68.22},{65.8,66.49},{65.6,65.18},{52.47,63.9},{51.88,66.98},{54.03,63.64},{53.36,63.55},{51.11,68.3},{53.05,77.85},{52.37,80.54}},[1243]={{71.45,30.52}}},[9]=2031},
[161782] = {[1]="Fallen Aspirant",[2]=79,[3]=112,[4]=3,[5]=3,[6]=0,[7]={[2031]={{47.65,38.09},{48.3,38.18},{51.23,56.05},{52.08,59.8},{52.87,64.32},{40.42,74.45},{47.95,61.11}}},[9]=2031},
[161783] = {[1]="Aberrant Flesh Remnant",[2]=100,[3]=100,[4]=3,[5]=3,[6]=0,[7]={[1243]={{65.35,20.54}}},[9]=1243},
[161784] = {[1]="Elydna Wingstroke",[2]=945,[3]=945,[4]=7,[5]=7,[6]=1,[7]={[1243]={{71.73,21.17}}},[9]=1243},
[161787] = {[1]="Fretful Withered Treant",[2]=100,[3]=134,[4]=3,[5]=3,[6]=0,[7]={[1243]={{54.16,42.06},{58.8,49.23},{58.46,43.54},{58.95,44.98},{59.71,46.38},{57.67,45.94},{57.01,42.63},{56.49,40.05},{54.87,43.18},{55.27,44.46},{55.59,45.04},{60.5,44.16},{61.3,40.07},{60.35,38.47},{59.11,39.23},{58.78,39.82},{53.92,43.47}}},[9]=1243},
[161832] = {[1]="Rotting Flesh Spawn",[2]=403,[3]=403,[4]=4,[5]=4,[6]=1,[7]={[2031]={{50.51,61.86}}},[9]=2031},
[162874] = {[1]="Frenzied Vulture",[2]=158,[3]=158,[4]=7,[5]=7,[6]=0,[7]={[141]={{59.88,48.94},{59.52,49.65}}},[9]=141},
[162876] = {[1]="Barkshredder Termite",[2]=158,[3]=158,[4]=6,[5]=6,[6]=0,[7]={[141]={{54.86,61.82},{55.06,60.88},{55.3,60.28},{54.89,59.49},{54.74,62.82}}},[9]=141},
[162877] = {[1]="Barkshredder Queen",[2]=205,[3]=205,[4]=8,[5]=8,[6]=0,[7]={[141]={{54.96,59.31}}},[9]=141},
[162925] = {[1]="Vulture Egg",[2]=27,[3]=27,[4]=7,[5]=7,[6]=0,[7]={[141]={{59.32,49.26},{59.88,48.91}}},[9]=141,[12]=72,[13]="AH"},
--Durotar
--NPCs
[3287] = {'Hana\'zua',55,55,2,2,0,{[1244]={{34.24,46.61}}},nil,1244,{790,804},{790},126,"H",nil,2},
[161732] = {'Esgramor',326,326,12,12,0,{[1244]={{44.75,66.92}}},nil,1244,{1660018,1660022,1660023,1660061},{1660021,1660022,1660023},29,"H","",0},
[161733] = {'Swali',361,361,13,13,0,{[1244]={{35.57,41.53}}},nil,1244,{1660037,1660019},{1660018,1660037},29,"H","",0},
[161734] = {'Anjali',232,232,9,9,0,{[2030]={{14.74,50.80}}},nil,2030,{1660020,1660041,1660021},{1660019,1660041,1660020},29,"H","",0},
[254011] = {'Sakari',801,801,20,20,0,{[1244]={{42.58,61.97}}},nil,1244,{254008,254009,254010},{254008,254009},29,"H","",0},
[7953] = {'Xar\'Ti',2769,2769,50,50,0,{[14]={{55.28,75.49}}},nil,14,{4420437,1903557},{14088,4420437,1903557},126,"H","Riding Trainer",83},
[162839] = {[1]="Karagar",[2]=678,[3]=678,[4]=22,[5]=22,[6]=0,[7]={[14]={{53,40.92},{53,40.92},{53,40.92}}},[9]=14,[10]={1660062,1660087,1660089},[11]={1660061},[12]=29,[13]="H"},
[162840] = {[1]="Rilly",[2]=329,[3]=329,[4]=13,[5]=13,[6]=0,[7]={[14]={{57.19,41.85}}},[9]=14,[10]={1660063},[11]={1660063},[12]=29,[13]="H"},
[162838] = {'Foreman Dirgran',239,239,10,10,0,{[14]={{51.15,40.67}}},nil,5,{1660064},{1660064},29,"H","",0},
[162836] = {'Thirsty Peon',144,144,8,8,0,{[14]={{50.80,39.90},{50.60,39.90},{50.70,39.40},{50.60,39.30},{50.70,39.10},{50.50,39.00},{50.40,38.70},{50.50,38.60},{50.30,38.60},{50.40,38.30},{50.30,38.10},{50.20,38.10},{50.00,38.50},{49.90,38.60},{50.10,38.70}}},nil,14,nil,nil,29,"H",nil,0},
[254012] = {[1]="Queen Erethina",[2]=731,[3]=731,[4]=20,[5]=20,[6]=0,[7]={[14]={{48.92,34.82}}},[9]=14,[10]={254012},[11]={254011,254012},[12]=72,[13]="AH"},
[254013] = {'Sakari',731,731,20,20,0,{[1637]={{56.30,32.50}}},nil,1637,{254014}, {254013},126,"H",nil,2},
[254014] = {'Sakari',731,731,20,20,0,{[17]={{62.40,10.20}}},nil,17,{254015}, {254014,254015},126,"H",nil,2},
--Creatures
[30719] = {'Uneasy Citizen',nil,nil,nil,nil,nil,{[1244]={{44.54,63.16},{45.80,63.18},{43.80,62.37},{40.61,62.07},{40.29,65.35},{38.91,66.86},{37.62,67.10},{34.40,64.39},{34.13,65.10},{34.86,66.58},{42.11,71.20},{43.17,71.49}}},nil,1244,{559155}},
[161790] = {'Hirsutta the Witch',1000,1000,7,7,1,{[1244]={{27.50,33.58},{28.14,33.95}}},nil,1244,nil},
[161792] = {'Elder Guardian Spirit',100,134,3,3,0,{[1244]={{36.05,24.76},{36.02,24.86},{36.15,24.85},{36.11,24.92}},[2030]={{15.24,54.18},{44.30,66.59},{49.86,82.31},{49.73,81.90},{49.39,82.65},{73.27,58.79},{68.42,35.12},{69.04,35.12},{14.99,57.19},{14.91,57.05},{14.69,56.15},{14.92,51.82},{14.86,53.20},{14.68,56.62},{15.38,56.79},{16.40,56.70},{15.72,57.06},{14.95,54.90},{15.02,54.64},{14.79,56.29},{14.97,56.39},{14.75,56.26},{14.71,55.93},{16.01,57.57},{14.97,57.08},{15.25,56.50}}},nil,2030,{559175}},
[161793] = {'Sinister Bat',100,134,3,3,0,{[2030]={{47.39,40.03},{44.41,56.04},{42.71,58.67},{43.98,67.17},{45.49,73.12},{46.82,77.89},{47.26,76.27},{50.41,78.72},{71.26,42.00},{65.52,35.27}}},nil,2030,nil},
[161794] = {'Sinister Snake',100,134,3,3,0,{[2030]={{16.87,41.78},{18.68,37.45},{20.41,36.96},{22.27,39.15},{25.81,36.57},{28.02,36.25},{28.95,38.23},{34.84,41.81},{39.14,46.66},{44.51,49.30},{75.08,61.00}}},nil,2030,nil},
[161795] = {'Sinister Spider',100,134,3,3,0,{[2030]={{49.41,76.57},{54.99,83.38},{70.19,76.11},{72.83,72.78},{73.23,58.00},{77.18,58.24},{79.99,60.88},{74.75,50.15},{73.86,42.19},{67.59,37.73},{66.51,34.42}}},nil,2030,nil},
[161807] = {'Voodoo Devotee',94,125,4,4,0,{[1244]={{32.20,51.26},{30.76,50.13},{29.95,50.76},{29.99,52.77},{31.88,49.68},{32.26,47.30},{30.44,49.24},{31.39,41.65},{32.36,37.75},{31.12,36.71},{32.31,55.94},{33.37,53.37},{32.20,51.32},{30.91,52.63},{30.96,51.11},{31.29,46.45},{31.02,36.65}}},nil,1244,nil},
[161833] = {'Techla\'Tu, The Gatekeeper',403,403,4,4,1,{[2030]={{53.19,66.45}}},nil,2030,nil},
[161854] = {'Enchanted Tiki Mask',134,134,3,3,0,{[1244]={{34.60,38.13}}},nil,1244,nil},
[161855] = {'Chattering Tiki Mask',100,100,3,3,0,{[1244]={{31.19,44.56}}},nil,1244,nil},
[161856] = {'Possessed Tiki Mask',134,134,3,3,0,{[1244]={{36.98,41.30}}},nil,1244,nil},
[254015] = {'Xaitoth',225,225,3,3,0,{[1217]={{50.31,60.68}}},nil,1217,{254006}},
[162834] = {'Rivenruin Myrmidon',144,144,6,7,0,{[14]={{58.09,41.23},{57.90,40.96},{58.07,39.50},{58.26,39.18},{58.18,38.86},{57.99,37.85},{57.66,37.84},{56.54,38.47},{57.44,38.77},{58.31,36.91},{57.92,36.80},{58.16,37.21},{57.37,37.59},{57.45,38.47},{57.77,38.37},{57.72,39.44},{57.62,39.18}}},nil,14,nil,nil,72,nil,nil,0},
[162835] = {'Rivenruin Sorceress',134,134,6,7,0,{[14]={{58.31,40.96},{57.63,37.39},{57.72,38.79},{58.30,36.21},{57.91,36.25},{57.94,35.76},{57.84,35.53},{57.21,39.23},{56.32,39.68},{55.57,39.12}}},nil,14,nil,nil,72,nil,nil,0},
[162916] = {[1]="Rivenruin Brute",[2]=165,[3]=165,[4]=8,[5]=8,[6]=0,[7]={[14]={{59.06,39.29}}},[9]=14},
[162841] = {'Bagamul Skyfang',2484,2484,41,41,0,{[14]={{51.77,44.36}}},nil,14,{1660065},{1660065},29,"H","",0},
[254016] = {[1]="Queen Erethina",[2]=1323,[3]=1323,[4]=12,[5]=12,[6]=0,[7]={[17]={{62.4,10.2}}},[9]=17},
--Tirisfal Glades
--NPCs
[161739] = {'Anthon',165,165,7,7,0,{[1240]={{50.53,58.18}}},nil,1240,{1660024},{},29,"H","",0},
[161740] = {'Riscell Cain',329,329,13,13,0,{[1240]={{28.40,55.10}}},nil,1240,{1660025}, {1660024,1660050},72,"H","",3},
[161742] = {[1]="Deathguard Eric",[2]=395,[3]=395,[4]=15,[5]=15,[6]=0,[7]={[1240]={{27.66,55.67}}},[9]=1240,[10]={1660029,1660050},[11]={1660029},[12]=29,[13]="H",3},
[161746] = {[1]="Kalis",[2]=298,[3]=298,[4]=12,[5]=12,[6]=0,[7]={[1240]={{27.93,55.11}}},[9]=1240,[10]={1660042},[11]={1660042},[12]=29,[13]="H",3},
[161747] = {[1]="Thris",[2]=362,[3]=362,[4]=14,[5]=14,[6]=0,[7]={[1240]={{27.87,54.59}}},[9]=1240,[10]={1660028},[11]={1660028},[12]=29,[13]="H",3},
[161741] = {'Exsangue',584,584,20,20,0,{[1240]={{15.90,46.00}}},nil,1240,{}, {1660026},29,"H","",3},
[4773] = {'Velma Warnam',1003,1003,30,30,0,{[85]={{59.40,51.30}}},nil,85,{4420434,1903557},{14089,4420434,1903557},68,"H","Riding Trainer",83},
[162843] = {'Apothecary Flemer',267,267,11,11,0,{[85]={{58.10,52.40}}},nil,1420,{}, {1660050},29,"H","",3},
[1518] = {'Apothecary Johaan',484,484,20,20,0,{[85]={{58.40,52.80}}},nil,85,{367,368,369,407,445,492},{365,367,368,369},68,"H","Royal Apothecary Society",2},
[1519] = {'Deathguard Simmer',1210,1210,23,23,0,{[85]={{38.80,55.80}}},nil,85,{365},nil,68,"H",nil,2},
[749136] = {[1]="Rod Toxicstrike",[2]=366,[3]=366,[4]=10,[5]=10,[6]=0,[7]={[85]={{43.97,39.21}}},[9]=85,[10]={254064},[11]={254064},[12]=29,[13]="H"},
[162844] = {[1]="Delcard Sading",[2]=466,[3]=466,[4]=17,[5]=17,[6]=0,[7]={[85]={{59.9,52.76}}},[9]=85,[10]={1660052},[11]={1660052},[12]=29,[13]="H"},
[162847] = {[1]="Dark Priestess Ashara",[2]=1188,[3]=1188,[4]=29,[5]=29,[6]=0,[7]={[85]={{59.76,54.57}}},[9]=85,[10]={1660054},[11]={1660054},[12]=29,[13]="H"},
[991483] = {[1]="Father Alastor",[2]=348,[3]=348,[4]=15,[5]=15,[6]=0,[7]={[85]={{70.54,63.73},{70.53,63.75}}},[9]=85,[10]={254053,254054},[11]={254053,254054},[12]=29,[13]="H"},
[764555] = {[1]="Warden Kaelthar Graveborn",[2]=584,[3]=584,[4]=15,[5]=15,[6]=0,[7]={[85]={{76.08,45.05}}},[9]=85,[10]={254056},[12]=29,[13]="H"},
[764554] = {'Apothecary Ralden',584,584,15,15,0,{[85]={{75.80,44.70}}},nil,85,{}, {254056},29,"H","Royal Apothecary Society",3},
--Creatures
[161762] = {[1]="Mother",[2]=122,[3]=122,[4]=3,[5]=3,[6]=0,[7]={[1240]={{15.97,69.18}}},[9]=1240},
[161763] = {[1]="Father",[2]=91,[3]=91,[4]=3,[5]=3,[6]=0,[7]={[1240]={{16.02,65.36}}},[9]=1240},
[161764] = {[1]="Cousin Salem",[2]=122,[3]=122,[4]=3,[5]=3,[6]=0,[7]={[1240]={{18.46,71.3}}},[9]=1240},
[161765] = {[1]="Uncle Abel",[2]=103,[3]=103,[4]=3,[5]=3,[6]=0,[7]={[1240]={{20.08,66.61}}},[9]=1240},
[161836] = {[1]="Hound of House Cain",[2]=311,[3]=311,[4]=4,[5]=4,[6]=1,[7]={[1240]={{14.52,45.35}}},[9]=1240},
[161752] = {[1]="Ghoul",[2]=91,[3]=122,[4]=3,[5]=3,[6]=0,[7]={[1240]={{17.58,47.57},{17.49,45.07},{19.17,47.16},{18.7,46.25},{21.21,47.45},{20.54,46.05},{19.86,42.33},{14.52,47.64},{15.4,50.51}}},[9]=1240},
[161743] = {[1]="Necrotic Bear",[2]=91,[3]=122,[4]=3,[5]=3,[6]=0,[7]={[1240]={{17.12,64.35},{19.18,41.61},{17.97,40.44}}},[9]=1240},
[161749] = {[1]="Zombie",[2]=91,[3]=122,[4]=3,[5]=3,[6]=0,[7]={[1240]={{23.89,57.08},{23.19,55.84},{22.55,55.46},{23.35,54.84},{22.54,53.83},{21.57,53.79},{21.7,52.63},{25.33,53.73},{25.52,52.49},{26.27,52.61},{19.68,56.24},{19.44,56.82},{19.57,57.86},{18.59,57.18},{19.07,59.82},{19.27,60.74},{21.12,62.22},{21.13,58.48},{22.37,59.22},{21.2,50.87},{20.61,50.48},{16.81,55.72},{17.18,56.47},{17.4,55.7}}},[9]=1240},
[161753] = {[1]="Brainless Majordomo",[2]=97,[3]=115,[4]=3,[5]=3,[6]=0,[7]={[1240]={{19.99,47.87}}},[9]=1240},
[161754] = {[1]="Brainless Maid",[2]=97,[3]=97,[4]=3,[5]=3,[6]=0,[7]={[1240]={{14.32,46.3},{12.95,48.68}}},[9]=1240},
[161755] = {[1]="Brainless Stablemaster",[2]=87,[3]=87,[4]=3,[5]=3,[6]=0,[7]={[1240]={{18.5,52.72}}},[9]=1240},
[161757] = {[1]="Aberrant Progeny",[2]=913,[3]=913,[4]=7,[5]=7,[6]=1,[7]={[1240]={{17.28,46.49}}},[9]=1240},
[254584] = {'Mallek the Tormented',289,289,9,9,0,{[85]={{51.40,35.30}}},nil,1420},
[162842] = {'Sporephase Guardian',144,144,8,8,0,{[85]={{56.43,54.70},{56.72,55.75},{56.09,56.09},{57.95,57.73},{58.18,55.41},{57.56,54.83},{57.12,54.84},{56.47,54.91},{56.36,56.53},{57.31,56.98},{57.43,56.69},{57.85,56.49},{58.33,56.28},{57.64,55.29},{57.44,55.95},{57.66,54.14},{56.97,54.39}}},nil,85,nil,nil,72,nil,nil,0},
[162853] = {[1]="Brightwater Rebel",[2]=144,[3]=144,[4]=8,[5]=8,[6]=0,[7]={[85]={{67.01,50.35},{68.3,51},{67.34,51.06},{67.39,52.15}}},[9]=85},
[162854] = {[1]="Brightwater Rebel",[2]=144,[3]=144,[4]=8,[5]=8,[6]=0,[7]={[85]={{67.21,50.76},{67.11,50.01},{66.51,50.17},{67.06,51.94}}},[9]=85},
[162857] = {[1]="Alric Sading",[2]=144,[3]=144,[4]=8,[5]=8,[6]=0,[7]={[85]={{67.33,51.87}}},[9]=85},
[162859] = {[1]="Scarlet Soldier",[2]=144,[3]=144,[4]=8,[5]=8,[6]=0,[7]={[85]={{63.74,46.02},{63.74,45.52},{63.2,46.72},{62.63,47.04},{63.34,47.44}}},[9]=85},
[162860] = {[1]="Scarlet Mage",[2]=134,[3]=134,[4]=8,[5]=8,[6]=0,[7]={[85]={{64.51,46.79},{63.51,46.49},{63.72,45.06},{62.66,47.23},{63.6,47.79}}},[9]=85},
[162861] = {[1]="Scarlet Battler",[2]=122,[3]=165,[4]=8,[5]=8,[6]=0,[7]={[85]={{65,46.98},{64.45,46.62},{63.5,44.7},{63.35,45.82},{63.31,47.09}}},[9]=85},
[254936] = {[1]="Jorum Balnir",[2]=656,[3]=656,[4]=12,[5]=12,[6]=1,[7]={[85]={{77.1,59.94}}},[9]=85},
[254937] = {[1]="Vara Balnir",[2]=656,[3]=656,[4]=12,[5]=12,[6]=1,[7]={[85]={{77.5,62}}},[9]=85},
[254938] = {[1]="Jarim Balnir",[2]=656,[3]=656,[4]=12,[5]=12,[6]=1,[7]={[85]={{74.84,61.01},{74.7,61.74}}},[9]=85},
[13158] = {'Lieutenant Sanders',276,276,12,12,0,{[85]={{86.82,42.40}}},nil,85,nil,nil,72,nil,nil,0},
--Mulgore
--NPCs
[161817] = {'Redhorn',239,239,10,10,0,{[1245]={{30.83,28.37}}},nil,1245,{1660030},{},29,"H","",0},
[161818] = {'Morriga Hollowhoof',348,348,15,15,0,{[1245]={{64.84,66.09}}},nil,1245,{1660031,1660035},{1660030,1660033},29,"H","",0},
[161819] = {'Sage Nauchol',301,301,13,13,0,{[1245]={{72.33,88.30}}},nil,1245,{1660032,1660033},{1660031,1660032},29,"H","",0},
[161840] = {'Hyena Spirit',239,239,10,10,0,{[1245]={{68.71,89.81}}},nil,1245,{1660043,1660034},{1660035,1660043,1660034},72,"AH","",0},
[162902] = {'Handros',187,187,8,8,0,{[1245]={{28.86,32.82}}},nil,1245,{1660066},{},29,"H","",0},
[162903] = {'Ammus Grey-Eye',429,429,16,16,0,{[1245]={{14.42,28.93}}},nil,1245,{1660067,1660070},{1660066,1660070},29,"H","",0},
[162904] = {'Arkan Fairwind',212,212,9,9,0,{[1245]={{14.60,29.50}}},nil,1245,{}, {},29,"H","",0},
[162906] = {'Sage Muudren',584,584,20,20,0,{[215]={{44.22,59.08}}},nil,215,{1660068},{1660067},29,"H","",0},
[162908] = {'Ancestress Emnil',1756,1756,35,35,0,{[215]={{39.93,60.78}}},nil,215,{1660069},{1660069},29,"H","",0},
[991485] = {'Tharok Windhoof',499,499,20,20,0,{[215]={{46.76,49.48}}},nil,215,{500004},{500004},29,"H","",0},
[3690] = {'Kar Stormsinger',2138,2138,44,44,0,{[215]={{47.65,58.47}}},nil,215,{4420435,1903557},{14087,4420435,1903557},104,"H","Riding Trainer",83},
--Creatures
[161809] = {'Grimtotem Marauder',91,122,3,3,0,{[1245]={{46.69,53.15},{47.52,52.49},{47.90,56.97},{49.80,56.32},{49.55,59.98},{49.88,61.54},{52.64,62.10},{52.37,60.74},{52.47,57.32},{54.38,54.50},{55.30,58.82},{54.49,59.65},{50.84,64.79},{52.70,64.85},{54.13,64.67},{55.40,66.38},{56.91,64.29},{56.99,62.19},{57.21,59.75},{58.72,57.71},{61.06,59.71},{59.46,63.35},{57.84,69.81},{59.60,69.59},{60.85,70.88},{62.33,72.02},{60.04,73.13},{61.51,74.79}}},nil,1245,{559156}},
[161810] = {'Grimtotem Patrol',91,122,3,3,0,{[1245]={{61.84,68.48},{62.43,74.60},{64.72,76.08},{61.10,73.88},{57.66,78.70},{58.01,80.26},{59.62,81.12},{62.04,83.40},{66.10,84.68},{70.24,85.86},{71.83,88.29},{66.38,84.65}}},nil,1245,{559168}},
[161834] = {'Cruel Carrion Spirit',311,311,4,4,1,{[1245]={{71.02,86.27}}},nil,1245,nil},
[161850] = {[1]="Aquiline Totem",[2]=122,[3]=122,[4]=3,[5]=3,[6]=0,[7]={[1245]={{82.03,81.96}}},[9]=1245},
[161851] = {[1]="Owlish Totem",[2]=103,[3]=103,[4]=3,[5]=3,[6]=0,[7]={[1245]={{77.22,84.66}}},[9]=1245},
[161852] = {[1]="Taurine Totem",[2]=103,[3]=103,[4]=3,[5]=3,[6]=0,[7]={[1245]={{81.84,77.56}}},[9]=1245},
[161816] = {'Malgorm Hollowhoof',663,663,7,7,1,{[1245]={{79.07,74.63}}},nil,1245,nil},
[162907] = {[1]="Devouring Fire",[2]=144,[3]=144,[4]=6,[5]=6,[6]=0,[7]={[215]={{42.41,58.84},{41.83,59.47},{41.33,58.85},{41.49,58.01},{42.58,59.83},{42.52,60.66},{41.73,60.46},{40.99,59.53},{40.43,58.67},{39.86,58.04},{40.72,57.42}}},[9]=215},
[162909] = {'Thick Kodo',144,144,6,6,0,{[215]={{38.25,63.41},{41.26,62.62},{41.67,62.98},{41.12,63.15},{39.95,62.79}}},nil,215,nil,nil,72,nil,nil,0},
}
-- Backward compatibility (if any code still references AscensionNpcDB.npcData)
AscensionNpcDB = AscensionNpcDB or {}
AscensionNpcDB.npcData = AscensionDB.npcData
@@ -0,0 +1,129 @@
---@type table
local AscensionDB = QuestieLoader:CreateModule("AscensionDB")
AscensionDB.objectData = AscensionDB.objectData or {
-- Path of Ascension
[9908168]={[1]="Resurrect in Closest Town or Capital",[2]=nil,[3]=nil,[4]=nil,[5]=nil,[6]=nil},
[9942043]={[1]="Learn Novice Riding from the Riding Trainer",[2]=nil,[3]=nil,[4]={[12]={{43.97,64.16}},[141]={{56.29,57.01}},[215]={{47.69,58.52}},[14]={{55.28,75.49}},[1]={{49.15,48.13}},[85]={{59.40,51.30}}},[5]=12,[6]=nil},
[9903556]={[1]="Pets Tab (Shift+P), Mounts Tab, Summon Mount",[2]=nil,[3]=nil,[4]={[12]={{43.97,64.16}},[141]={{56.29,57.01}},[215]={{47.69,58.52}},[14]={{55.28,75.49}},[1]={{49.15,48.13}},[85]={{59.40,51.30}}},[5]=12,[6]=nil},
[9903553]={[1]="Open the Dungeon Finder (I) / Green Eye",[2]=nil,[3]=nil,[4]=nil,[5]=nil,[6]=nil},
[9903554]={[1]="Select dungeon(s) then click Find Group",[2]=nil,[3]=nil,[4]=nil,[5]=nil,[6]=nil},
[9905201]={[1]="Talk to the Beginner's Book of Ascension",[2]=nil,[3]=nil,[4]={[14]={{42.4,68.7},{52.2,43.2},{56.2,74.7}},[17]={{28.4,67.0},{63.2,37.0},{52.1,30.2}},[3430]={{44.2,70.9},{38.3,21.4},{47.0,46.1}},[12]={{48.1,41.9},{43.1,66.6}},[1]={{30.1,71.7},{46.9,52.4}},[141]={{58.7,44.3},{57.5,57.5}},[85]={{31.5,65.9},{61.4,53.0}},[3524]={{49.1,51.3},{80.7,46.3}},[215]={{47.1,60.9}},[148]={{37.3,44.0}},[130]={{43.4,41.8}},[38]={{34.9,47.7}},[3433]={{47.6,31.6}},[3525]={{55.1,59.6}},[44]={{28.2,47.7}},[331]={{36.3,49.3}},[10]={{73.9,48.0}},[40]={{56.9,54.7}}},[5]=12,[6]=nil},
[9905202]={[1]="Select Train Me and rank up your spells",[2]=nil,[3]=nil,[4]={[14]={{42.4,68.7},{52.2,43.2},{56.2,74.7}},[17]={{28.4,67.0},{63.2,37.0},{52.1,30.2}},[3430]={{44.2,70.9},{38.3,21.4},{47.0,46.1}},[12]={{48.1,41.9},{43.1,66.6}},[1]={{30.1,71.7},{46.9,52.4}},[141]={{58.7,44.3},{57.5,57.5}},[85]={{31.5,65.9},{61.4,53.0}},[3524]={{49.1,51.3},{80.7,46.3}},[215]={{47.1,60.9}},[148]={{37.3,44.0}},[130]={{43.4,41.8}},[38]={{34.9,47.7}},[3433]={{47.6,31.6}},[3525]={{55.1,59.6}},[44]={{28.2,47.7}},[331]={{36.3,49.3}},[10]={{73.9,48.0}},[40]={{56.9,54.7}}},[5]=12,[6]=nil},
[9903540]={[1]="Visit an Innkeeper and select \"Make this inn your home\"",[2]=nil,[3]=nil,[4]={[12]={{44.77,66.8},{43.45,66.2}},[1]={{47.38,52.52},{47.22,52.19}},[11]={{10.7,60.95}},[267]={{51.17,58.93},{62.78,19.03}},[17]={{51.99,29.89},{62.05,39.41},{45.58,59.04}},[1537]={{18.15,51.45}},[85]={{61.71,52.05}},[33]={{31.49,29.75},{27.04,77.31}},[15]={{66.59,45.22},{41.93,74.17},{36.89,32.35}},[44]={{27.01,44.82}},[38]={{35.53,48.4}},[1657]={{67.42,15.65}},[141]={{57.26, 60.00}},[148]={{37.04,44.13}},[331]={{36.99,49.22},{73.99,60.65}},[130]={{43.18,41.28}},[1519]={{60.39,75.28}},[1497]={{67.74,37.89}},[1638]={{45.81,64.71}},[215]={{46.62,61.09}},[10]={{73.87,44.41}},[14]={{51.51,41.64}},[1637]={{54.1,68.41},{51.14,72.6}},[8]={{45.16,56.66}},[406]={{47.47,62.13},{35.79,5.74}},[440]={{52.51,27.91}},[357]={{30.97,43.49},{74.8,45.18}},[47]={{14.15,41.57},{78.14,81.38}},[40]={{52.86,53.72}},[3]={{2.81,45.85}},[45]={{73.84,32.46}},[405]={{66.27,6.55},{24.09,68.21}},[400]={{46.07,51.52}},[618]={{61.36,38.83}},[1377]={{51.89,39.16}},[3430]={{43.67,71.31},{48.16,47.66}},[139]={{75.85,52.21}},[3433]={{48.91,32.42}},[3524]={{48.37,49.2}},[3483]={{56.71,37.47},{54.22,63.6},{26.88,59.53},{23.35,36.36}},[3487]={{79.48,58.21},{67.86,72.89}},[3557]={{59.59,19.4}},[3525]={{55.85,59.81}},[3521]={{30.66,50.93},{67.17,49.32},{78.49,62.94},{41.85,26.22}},[2367]={{-1,-1}},[3518]={{56.73,34.51},{54.22,76.1}},[3519]={{48.76,45.05},{56.7,53.27}},[3703]={{28.29,49.36},{56.32,81.54}},[3520]={{30.24,27.74},{37.06,58.27},{56.32,59.84},{61.12,28.24},{66.25,87.13}},[3522]={{53.37,55.42},{35.8,63.88},{76.09,60.31},{60.98,68.11},{62.86,38.31}},[3523]={{43.36,36.14},{31.96,64.42}},[495]={{58.39,62.45},{30.86,41.45},{49.51,10.78},{60.48,15.86},{52.15,66.41},{79.73,30.84},{25.39,59.85}},[4080]={{51.18,33.88}},[3537]={{58.29,68.05},{41.92,54.48},{57.12,18.72},{76.26,37.18},{49.67,10.19},{78.39,49.28}},[394]={{59.56,26.3},{65.42,46.89},{31.97,60.28},{20.79,64.58}},[65]={{38.19,46.65},{76.87,63.13},{77.41,51.77},{28.89,56.09},{48.14,74.76},{59.8,54.24}},[3711]={{26.75,59.27}},[4395]={{39.52,71.43},{50.25,39.52},{40.53,55.57},{65.61,32.16},{50.41,41.46},{44.66,63.34},{67.38,35.35}},[66]={{40.83,66.26},{59.33,57.3}},[67]={{41.09,85.91},{28.71,74.38},{37.13,49.52},{30.89,37.36},{67.61,50.61},{48.86,65.04}},[210]={{43.99,22.18},{76.19,19.66},{76.1,23.96}}},[5]=12,[6]=nil},
--Elwynn Forest
[900001]={[1]="Lost Page I",[4]={[12]={{50.29,42.06}}},[5]=12,[6]=nil},
[900002]={[1]="Lost Page II",[4]={[12]={{49.60,39.60}}},[5]=12,[6]=nil},
[900003]={[1]="Lost Page III",[4]={[12]={{49.50,40.80}}},[5]=12,[6]=nil},
[900004]={[1]="Lost Page IV",[4]={[12]={{49.60,39.70}}},[5]=12,[6]=nil},
[999005]={[1]="Abbess Journal Purified",[2]=nil,[3]=nil,[4]={[12]={{51.5,27.5}}},[5]=12,[6]=nil},
[999006]={[1]="Abbesss Staff Purified",[2]=nil,[3]=nil,[4]={[12]={{55.9,30.2}}},[5]=12,[6]=nil},
[999007]={[1]="Heretical Idol Purified",[2]=nil,[3]=nil,[4]={[12]={{52.3,29.4}}},[5]=12,[6]=nil},
[999008]={[1]="Jeweled Relic Purified",[2]=nil,[3]=nil,[4]={[12]={{53.4,31.1}}},[5]=12,[6]=nil},
[999010]={[1]="Hidden Path",[2]=nil,[3]=nil,[4]={[12]={{55.3,37.9}}},[5]=12,[6]=nil},
[999011]={[1]="Ruined Estate",[2]=nil,[3]=nil,[4]={[12]={{58.7,33.3}}},[5]=12,[6]=nil},
[999012]={[1]="Wayward Theologian",[2]=nil,[3]=nil,[4]={[12]={{60.5,28.7}}},[5]=12,[6]=nil},
[999013]={[1]="Melon",[2]=nil,[3]=nil,[4]={[12]={{41.54,67.68},{41.58,67.31},{41.59,67.55},{41.48,67.36},{41.36,67.49},{41.29,67.57},{41.29,67.42},{41.40,67.28},{41.31,67.25},{41.11,67.52}}},[5]=12,[6]=0},
[999014]={[1]="Pumpkin",[2]=nil,[3]=nil,[4]={[12]={{42.05,67.64},{42.22,67.53},{42.25,67.66}}},[5]=12,[6]=0},
[999015]={[1]="apple",[2]=nil,[3]=nil,[4]={[12]={{45.07,64.83},{45.09,64.96},{45.03,64.98},{45.04,65.22},{45.11,65.17},{45.21,65.02},{45.19,64.93},{45.26,64.91},{45.46,64.92},{45.51,65.02},{45.55,64.92},{45.57,65.08},{45.51,65.14},{45.55,65.19},{45.39,65.20},{45.36,65.18},{45.32,65.13}}},[5]=12,[6]=0},
[96000]={[1]="Maclure Supplies",[2]=nil,[3]=nil,[4]={[12]={{48.0,86.9},{48.0,86.9}}},[5]=12,[6]=0},
[2300579]={[1]="Kobold Warren",[2]=nil,[3]=nil,[4]={[12]={{40.4,73.2},{38.2,76.6},{39.3,77.1},{45.6,77.0},{44.6,77.4},{44.7,78.8},{43.3,79.2},{42.3,73.4},{42.3,78.0},{40.5,78.2},{42.3,78.8},{40.5,80.3},{41.2,74.4},{43.5,76.7},{39.5,76.0},{38.4,73.8},{41.0,76.7},{42.4,76.0}}},[5]=12,[6]=0},
[9000057]={[1]="Mirror Shard",[2]=nil,[3]=nil,[4]={[12]={{30.92,58.76},{30.80,58.09},{31.08,57.76},{31.05,57.52},{31.45,58.88},{31.22,58.97},{31.87,59.18},{30.35,59.43},{29.78,59.24},{30.44,58.11},{30.06,57.97},{31.20,57.50}}},[5]=12,[6]=nil},
[9017008]={[1]="Mirror Lake Harvest",[2]=nil,[3]=nil,[4]={[12]={{30.15,66.70},{30.24,66.40},{30.37,66.87},{30.52,66.35},{30.59,67.24},{30.71,66.86},{30.80,66.50},{31.02,66.95},{31.19,66.74},{31.24,66.35},{31.49,66.67}}},[5]=12,[6]=nil},
[9900730]={[1]="Stolen Supply Crate",[2]=nil,[3]=nil,[4]={[12]={{56.75,80.60},{56.90,79.96},{56.88,81.37},{57.11,81.04},{57.55,79.73},{57.78,80.52},{57.39,80.87},{56.90,79.94},{57.02,79.06},{56.98,78.56}}},[5]=12,[6]=nil},
[99017005]={[1]="Smudged Note",[2]={17005},[3]=nil,[4]={[12]={{64.57,41.80}}},[5]=12,[6]=nil},
[4673875] = {"Explore Stormwind to your heart's content, then visit Flightmaster Dungar Longdrink to fly to Westfall to continue your adventure",nil,nil,{[1519]={{71.00,72.66}}},1519,0},
--Dun Morogh
[2300507] = {[1]="Plating examined",[4]={[1239]={{37.8,58.23}}},[5]=1239},
[2300508] = {[1]="Crate examined",[4]={[1239]={{36.66,56.12}}},[5]=1239},
[2300509] = {[1]="Crystal shards examined",[4]={[1239]={{35.98,53.44}}},[5]=1239},
[2300510] = {[1]="Banner examined",[4]={[1239]={{35.31,51.84}}},[5]=1239},
[5401381] = {[1]="Hidden path tread",[4]={[1239]={{39.38,36.91}}},[5]=1239},
[5883992] = {[1]="Ask Arathror to help you put on the disguise",[4]={[1239]={{40.99,33.93}}},[5]=1239},
[5888887] = {[1]="Radiant Devotees doused",[4]={[1239]={{50.89,19.79},{53.29,22.45},{54.28,21.74},{50.47,22.60},{50.08,23.43},{49.82,23.66},{49.45,19.25},{51.25,20.38},{50.74,18.11},{51.15,17.81},{51.78,20.05},{52.48,20.85},{53.84,19.47},{53.95,19.13},{53.19,18.76},{54.40,24.45},{54.00,24.39},{55.64,24.86},{56.32,27.38},{56.94,27.45},{57.22,25.45},{57.42,25.12},{53.40,21.65},{53.08,24.47},{52.38,23.56},{52.15,24.75},{55.46,19.19},{56.89,19.36}}},[5]=1239},
[2300550] = {"Thunderbrew Hop",nil,nil,{[1]={{47.80,56.07},{47.87,55.58},{48.05,55.99},{47.91,56.32},{47.86,56.57},{48.15,56.66},{48.37,56.65}}},1,0},
[5855933] = {[1]="Listen to Gravedigger Nonuid",[4]={[1]={{48.87,52.65}}},[5]=1},
[244620] = {"Dun Morogh Tree",nil,nil,{[1]={{62.93,57.82},{46.76,52.29},{58.25,53.55},{58.38,54.34},{59.23,54.10},{58.42,57.43},{59.80,58.73},{60.68,58.27},{60.81,56.51},{60.33,55.39},{62.01,55.44},{63.67,55.44},{64.25,55.74},{64.09,54.75},{64.69,55.49},{62.81,57.06},{63.51,57.04},{64.34,59.66},{63.94,60.69},{63.14,60.37},{63.40,61.16},{62.21,60.30},{61.76,60.21},{61.58,59.79},{61.14,60.81},{60.77,61.21},{60.54,61.47}}},1,0},
--Teldrassil
[2300512] = {[1]="Cut of Good Meat",[4]={[2031]={{47.9,38.62},{47.83,38.14},{51.23,56.05},{52.08,59.8},{52.87,64.32}}},[5]=2031},
[2300513] = {[1]="Sanctified flesh offered",[4]={[1243]={{72.55,20.55}}},[5]=1243},
[2300526] = {[1]="Newborns saved",[4]={[1243]={{71.96,21.98}}},[5]=1243},
[5943833] = {[1]="Butterflies delivered",[4]={[1243]={{65.9,35.18}}},[5]=1243},
[5166357] = {[1]="Carrion Path traversed",[4]={[1243]={{61.66,36.17}}},[5]=1243},
[5911478] = {[1]="Communion completed",[4]={[1243]={{71.95,21.56}}},[5]=1243},
[5005829] = {[1]="Flesh sanctified at the Moonwell",[4]={[1243]={{65.35,20.54}}},[5]=1243},
[5861249] = {[1]="Speak with Lady Aegya",[4]={[1243]={{69.64,24.5}}},[5]=1243},
[5405229] = {[1]="Speak with Thariel Wingstroke",[4]={[1243]={{51.44,67.98}}},[5]=1243},
[5388202] = {[1]="Vulture Egg destroyed",[4]={[141]={{59.44,49.3},{57.91,50.7}}},[5]=141},
[5399902] = {[1]="Listen to Aleena Whisperbough",[4]={[141]={{59.35,58.93}}},[5]=141},
--Durotar
[1064805] = {"Elemental Fire",nil,nil,{[1244]={{35.31,24.22}}},1244,0},
[2392807] = {"Elemental Earth",nil,nil,{[1244]={{35.71,23.16}}},1244,0},
[3478505] = {"Elemental Air",nil,nil,{[1244]={{36.38,23.63}}},1244,0},
[4541078] = {"Elemental Water",nil,nil,{[1244]={{36.11,24.92}}},1244,0},
[254001] = {"Strange Flower",nil,nil,{[1244]={{35.64,35.81}}},1244,0},
[6649507] = {"Report delivered to Esgramor",nil,nil,{[1244]={{44.77,67.11}}},1244,0},
[9070546] = {"Speak with Karagar in Razor Hill.",nil,nil,{[1244]={{44.80,67.09}}},1244,0},
[2036820] = {"Magical barrier crossed",nil,nil,{[2030]={{16.15,59.24}}},2030,0},
[254004] = {"Crude Centaur Drawing",{254011},{254010},{[14]={{46.55,78.75}}},14,0},
[254003] = {[1]="Metallic Debris",[4]={[14]={{53.04,63.63},{52.79,65.08},{53.69,64.74},{54.05,62.31},{53.29,59.17},{53.96,57.62},{52.66,55.41},{52.81,53.54},{52.9,51.52}}},[5]=14},
[2300551] = {[1]="Elven Relic of Old",[4]={[14]={{58.26,39.18},{57.57,39.15}}},[5]=14},
[2300553] = {[1]="Elven Relic of Old",[4]={[14]={{57.54,37.43},{58.55,39.36}}},[5]=14},
[2300554] = {[1]="Elven Relic of Old",[4]={[14]={{57.51,37.37},{58.81,38.5},{58.16,37.21}}},[5]=14},
[2300555] = {[1]="Elven Relic of Old",[4]={[14]={{57.78,40.33},{59.04,39.44},{57.99,36.24}}},[5]=14},
[2300556] = {[1]="Elven Relic of Old",[4]={[14]={{57.78,38.4},{57.84,35.53}}},[5]=14},
[2300557] = {[1]="Elven Relic of Old",[4]={[14]={{57.83,38.81},{58.14,35.53}}},[5]=14},
[2300558] = {[1]="Elven Relic of Old",[4]={[14]={{58.06,38.53},{59.65,39.47},{58.81,38.16}}},[5]=14},
[5954015] = {[1]="Listen to Bagamul Skyfang",[4]={[14]={{51.77,44.36}}},[5]=14},
[5954415] = {[1]="Full Dirgran's Pitcher",[4]={[14]={{52.10,41.80}}},[5]=14},
[254002] = {[1]="Ouru'Gai Crystal",[4]={[17]={{56.79,20.1}}},[5]=1413},
[5777365] = {[1]="Reversion process observed",[4]={[17]={{62.36,10.25}}},[5]=17},
--Tirisfal Glades
[2300528] = {[1]="Gaudy Painting",[4]={[1240]={{15.83,47.58}}},[5]=1240},
[2300529] = {[1]="Shimmering Jewel",[4]={[1240]={{19.83,48.08}}},[5]=1240},
[2300530] = {[1]="Crystal Ball",[4]={[1240]={{17.67,47.52}}},[5]=1240},
[2300531] = {[1]="Family Signet",[4]={[1240]={{18.62,45.61}}},[5]=1240},
[2306601] = {[1]="Concoction Tested on Skeletons",[4]={[85]={{47.75,37.51},{42.39,33.63},{47.74,29.22},{47.88,34.06},{51.01,34.0},{43.32,32.55},{46.17,29.41},{46.6,31.97},{48.27,37.54},{44.88,35.97},{47.72,30.75},{48.21,30.36},{47.11,32.3},{50.45,31.51},{42.83,34.22},{47.33,30.18},{49.16,27.88},{43.59,28.6},{42.68,35.15},{43.87,30.53},{43.93,34.96},{45.63,30.43},{46.99,42.0},{45.27,42.87},{45.39,41.47},{47.44,38.28},{46.75,37.54},{44.39,38.28},{45.36,39.61},{48.33,39.46},{47.41,40.68},{46.77,39.86},{45.42,40.52},{45.15,37.54},{44.42,37.6},{45.26,32.42},{46.19,31.68},{45.27,34.88},{44.59,40.5},{48.91,42.83},{50.22,42.99},{49.88,36.82},{48.3,41.65},{47.58,42.83},{49.59,36.02},{49.22,33.88},{48.73,34.09},{49.02,34.13},{47.67,31.24},{49.02,35.26},{49.21,33.54},{46.87,33.38},{46.91,34.88},{49.24,36.25},{47.48,36.08},{42.69,32.27},{49.82,36.21}}},[5]=85},
[2306602] = {[1]="Concoction Tested on Zombies",[4]={[85]={{51.31,28.1},{54.72,31.34},{53.41,30.39},{52.1,32.85},{49.76,30.26},{53.26,31.03},{49.73,28.59},{54.36,29.2},{52.67,26.02},{51.58,33.43},{50.58,29.08},{48.6,31.98},{52.53,26.32},{52.4,26.48},{51.28,31.46},{52.64,26.31},{52.55,26.88},{52.02,30.57},{52.24,26.36},{51.97,26.8},{52.63,27.0},{51.78,27.0},{51.9,25.84}}},[5]=85},
[2306603] = {[1]="Concoction Tested on Banshees",[4]={[85]={{52.68,29.32},{55.16,29.96},{52.87,27.04},{54.74,29.53},{53.96,29.82},{51.87,31.48},{53.52,28.0},{52.01,26.7},{52.04,26.35},{50.98,30.53},{51.42,29.26},{52.23,27.45},{51.87,28.76},{52.61,25.83},{51.97,26.02},{52.03,25.63}}},[5]=85},
[2306604] = {[1]="Unusal Subject Tested",[4]={[85]={{51.40,35.30}}},[5]=85},
[5093560] = {[1]="Listen to Dark Priestess Ashara",[4]={[85]={{59.76,54.57}}},[5]=85},
[192380] = {[1]="Gravestone",[4]={[85]={{70.1,63.1},{70,63.3},{70,63.4},{70,63.6},{69.9,63.5},{69.8,63.7},{69.9,63.8},{70,63.8},{70,63.9},{70.1,63.9},{70.2,64},{70.2,63.8},{70.1,63.7},{70.2,63.6},{70.3,63.6},{70.3,63.4},{70.4,63.3}}},[5]=85},
[2300545] = {"Necrotic Spore",nil,nil,{[85]={{57.50,55.75},{57.70,55.74},{57.57,55.50},{57.40,55.30},{57.60,55.12},{57.81,55.01},{57.05,55.80},{57.03,55.51},{56.75,55.14},{56.72,54.76},{56.65,54.32},{57.68,54.42},{57.65,54.03},{57.12,53.67}}},85,0},
[254678] = {[1]="Invincible's Gravestone Polished",[4]={[85]={{78.64,59.52}}},[5]=85},
[254679] = {[1]="Scarlet Supplies Infected",[4]={[85]={{85.79,34.76},{86.42,34.59},{82.27,33.25},{81.36,31.72},{83.85,30.91}}},[5]=85},
--Mulgore
[5976414] = {[1]="Hard Basin discovered",[4]={[1245]={{66.53,84.56}}},[5]=1245},
[2300532] = {[1]="Offering Bone",[4]={[1245]={{61.38,76.42},{58.01,80.26},{62.04,83.4}}},[5]=1245},
[2300514] = {[1]="Grimtotem Armor Piece",[4]={[1245]={{72.63,81.8},{73.04,81.7},{73.78,81.66},{73.69,81.08},{73.31,81.12},{73.21,80.82},{72.88,80},{73.12,79.38},{73.35,79.77},{74.33,81.02},{74.57,80.03},{74.03,79.58},{73.57,78.94},{73.56,78.25}}},[5]=1245},
[2300515] = {[1]="Exalted Pendant",[4]={[1245]={{75.66,75.24}}},[5]=1245},
[2300527] = {"Aquiline Totem",nil,nil,{[1245]={{82.03,81.96}}},1245,0},
[2300533] = {"Owlish Totem",nil,nil,{[1245]={{77.22,84.87}}},1245,0},
[2300534] = {"Taurine Totem",nil,nil,{[1245]={{81.84,77.56}}},1245,0},
[5299566] = {[1]="Listen to Ammus Grey-Eye",[4]={[1245]={{14.39,28.95}}},[5]=1245},
[1942447] = {"Ask Nauchol to dress you in the disguise",nil,nil,{[1245]={{72.39,88.46}}},1245,0},
[5195713] = {[1]="Parachute Used",[4]={[1245]={{14.63,29.54}}},[5]=1245},
[5195711] = {[1]="Full Sanctuary Amphora",[4]={[1245]={{14.30,35.30}}},[5]=1245},
[2300552] = {[1]="Prairie Sap",[4]={[215]={{39.84,61.47},{39.42,60.23},{38.88,59.72},{38.78,59.32},{38.57,59.96},{37.27,59.58},{38.06,60.83},{37.65,61.39},{38.21,62.16},{38.59,62.23},{39.21,62.32},{38.95,63.63},{38.5,63.88},{38.62,64.23}}},[5]=215},
}
-- Backward compatibility (if any code still references AscensionObjectDB.objectData/objectDat)
AscensionObjectDB = AscensionObjectDB or {}
AscensionObjectDB.objectData = AscensionDB.objectData
@@ -0,0 +1,154 @@
---@type table
local AscensionDB = QuestieLoader:CreateModule("AscensionDB")
AscensionDB.questData = AscensionDB.questData or {
--Path of Ascension Quests
[1903520]={[1]="Path to Ascension: Rank Up Your Spells",[2]={{75118}},[3]={{75118}},[4]=7,[5]=8,[6]=0,[8]={"Talk to the Beginner's Book of Ascension: 0/1","Select Train Me and rank up your spells: 0/1"},[10]={nil,{{9905201,"Talk to the Beginner's Book of Ascension: 0/1"},{9905202,"Select Train Me and rank up your spells: 0/1"}}},[17]=nil,[30]=60},
[1903540]={[1]="Path to Ascension: Visit an Innkeeper",[2]={{75118}},[3]={{75118}},[4]=7,[5]=8,[6]=0,[8]={"Visit an Innkeeper and select Make this inn your home."},[10]={nil,{{9903540,'Visit an Innkeeper and select "Make this inn your home": 0/1'}}},[17]=nil,[30]=60},
[580168]={[1]="Path to Ascension: Less Running, More Ressing",[2]={{75118}},[3]={{75118}},[4]=8,[5]=8,[6]=0,[8]={"Cast Resurrect in Closest Town or Capital City next time you die.","Resurrect in Closest Town or Capital: 0/1"},[10]={nil,{{9908168,"Resurrect in Closest Town or Capital: 0/1"}}},[17]=nil,[30]=60},
[4420430]={[1]="Path to Ascension: Novice Rider",[2]={{97921}},[3]={{97921}},[4]=6,[5]=8,[6]=0,[8]={"Learn how to ride and claim your first mount.","Learn Novice Riding from the Riding Trainer: 0/1"},[10]={nil,{{9942043,"Learn Novice Riding from the Riding Trainer: 0/1"}}},[17]=nil,[30]=60},
[4420439] = {[1]="Path to Ascension: Novice Rider",[2]={{449169}},[4]=4,[5]=8,[6]=1101,[8]="Learn how to ride and claim your first mount.",[10]={nil,{{9942043,"Learn Novice Riding from the Riding Trainer: 0/1"}}},[17]=141,},
[1903556]={[1]="Path to Ascension: Mount Up!",[2]={{97921,449169,7954}},[3]={{97921,449169,7954}},[4]=6,[5]=8,[6]=0,[8]={"Learn how to mount up!","Pets Tab (Shift+P), Mounts Tab, Summon Mount: 0/1"},[10]={nil,{{9903556,"Pets Tab (Shift+P), Mounts Tab, Summon Mount: 0/1"}}},[13]={4420430,4420432},[17]=nil,[30]=60},
[1903553]={[1]="Path to Ascension: Dungeon Finder",[2]={{75118}},[3]={{75118}},[4]=15,[5]=15,[6]=0,[8]={"Open the Dungeon Finder and queue for a dungeon!","Open the Dungeon Finder (I) / Green Eye: 0/1","Select dungeon(s) then click Find Group: 0/1"},[10]={nil,{{9903553,"Open the Dungeon Finder (I) / Green Eye: 0/1"},{9903554,"Select dungeon(s) then click Find Group: 0/1"}}},[17]=12},
[4420435]={[1]="Path to Ascension: Novice Rider",[2]={{3690}},[4]=7,[5]=9,[6]=690,[7]=0,[8]={"Learn how to ride and claim your first mount."},[10]={nil,{{9942043,"Learn Novice Riding from the Riding Trainer: 0/1"}}},[17]=215},
[1903557]={[1]="Path to Ascension: Mount Up!",[2]={{3690,7953,4773}},[3]={{3690,7953,4773}},[4]=7,[5]=9,[6]=0,[7]=0,[8]={"Learn how to mount up!"},[10]={nil,{{9903556,"Pets Tab (Shift+P), Mounts Tab, Summon Mount: 0/1"}}},[13]={4420434,4420435,4420437},[17]=nil},
[4420437]={[1]="Path to Ascension: Novice Rider",[2]={{7953}},[4]=6,[5]=8,[6]=690,[7]=0,[8]={"Learn how to ride and claim your first mount."},[10]={nil,{{9942043,"Learn Novice Riding from the Riding Trainer: 0/1"}}},[17]=14},
[4420432] = {[1]="Path to Ascension: Novice Rider",[2]={{7954}},[3]={{7954}},[4]=5,[5]=9,[6]=1101,[8]="Learn how to ride and claim your first mount.",[10]={nil,{{9942043,"Learn Novice Riding from the Riding Trainer: 0/1"}}},[17]=1},
[4420434]={[1]="Path to Ascension: Novice Rider",[2]={{4773}},[3]={{4773}},[4]=6,[5]=8,[6]=690,[7]=0,[8]={"Learn how to ride and claim your first mount."},[10]={nil,{{9942043,"Learn Novice Riding from the Riding Trainer: 0/1"}}},[17]=85},
[100466]={[1]="Path to Ascension: Westfall",[2]={{466}},[4]=10,[5]=12,[6]=0,[7]=0,[8]={"Explore Stormwind to your heart's content, then visit Flightmaster Dungar Longdrink to fly to Westfall to continue your adventure."},[10]={nil,{{4673875}}},[17]=1519},
--Elwynn Forest
[17000]={[1]="Stolen Supplies",[2]={{250}},[3]={{250}},[4]=5,[5]=9,[6]=1101,[7]=nil,[8]={"Return the Stolen Supplies to Pa Maclure."},[9]=nil,[10]={nil,{{96000,"Retrieve the Stolen Supplies"}}},[11]=nil,[12]=nil,[13]=nil,[14]=nil,[15]=nil,[16]=nil,[17]=12,[18]=nil,[19]=nil,[20]=nil,[21]=nil,[22]=nil,[23]=nil,[24]=nil,[25]=nil,[26]={{72,25}}},
[100073]={[1]="Supply Run",[2]={{241}},[3]={{241}},[4]=6,[5]=8,[6]=1101,[7]=nil,[8]={"","Recover 4 Stolen Supply Crates from the Bandit Bastion, east of Goldshire.","","- Stolen Goods x 4"},[9]=nil,[10]={nil,{{9900730,"Stolen Supply Crate"}}},[11]=nil,[12]=nil,[13]={47},[14]=nil,[15]=nil,[16]=nil,[17]=12},
[17001]={[1]="Extravagant Order",[2]={{241}},[3]={{241}},[4]=6,[5]=8,[6]=1101,[7]=nil,[8]={"","Return 4 Gem Encrusted Spider Silk to Tharynn Bouden.","","- Gem Encrusted Spider Silk x 4"},[9]=nil,[10]={nil,nil,{{157001,"Gem Encrusted Spider Silk"}}},[11]=nil,[12]=nil,[13]={47},[14]=nil,[15]=nil,[16]=nil,[17]=12},
[17002]={[1]="The Master's Orders",[2]={{9000017}},[3]={{9000017}},[4]=8,[5]=10,[6]=1101,[7]=nil,[8]={"","Recover 10 Depleted Mana Gems and return to the Tower of Azora.","","- Depleted Mana Gem x 10"},[9]=nil,[10]={nil,nil,{{157002,"Depleted Mana Gem"}}},[11]=nil,[12]=nil,[13]=nil,[14]=nil,[15]=nil,[16]=nil,[17]=12,[18]=nil,[19]=nil,[20]=nil,[21]=nil,[22]=nil,[23]=nil,[24]=nil,[25]=nil,[26]=nil,[27]=nil,[28]=nil,[29]=nil,[30]=nil},
[17003]={[1]="Slimy Solution",[2]={{9000017}},[3]={{9000017}},[4]=8,[5]=10,[6]=1101,[7]=0,[8]={"Retrieve 10 Slimy Murloc Spittle Samples and return to the Tower of Azora."},[9]=nil,[10]={[5]={{{46,732},46,"Slimy Murloc Spittle Collected"}}},[11]=157006,[12]=nil,[13]=nil,[14]=nil,[15]=nil,[16]=nil,[17]=12},
[17004]={[1]="Disarming the Gnolls",[2]={{261}},[3]={{261}},[4]=8,[5]=10,[6]=1101,[7]=0,[8]={"","Retrieve 6 Gnoll Blades and 10 Gnoll Axes and return to Guard Thomas at the east Elwynn bridge.","","- Gnoll Sword x 6","- Gnoll Axe x 10"},[9]=nil,[10]={nil,nil,{{157007,"Gnoll Sword"},{157008,"Gnoll Axe"}}},[11]=nil,[12]=nil,[13]={35},[14]=nil,[15]=nil,[16]=nil,[17]=12},
[17005]={[1]="Last Memento",[2]={nil,{99017005},nil},[3]={{11916}},[4]=8,[5]=10,[6]=1101,[7]=0,[8]={"","Return the Smudged Note to Imelda in Stormwind."},[11]=157012,[17]=12},
[17008]={[1]="Reclaim the Harvest",[2]={{955}},[3]={{955}},[4]=8,[5]=10,[6]=1101,[7]=nil,[8]={"","Retrieve 8 Mirror Lake Apples and return them to Sergeant De Vries in Westbrook Garrison.","","- Mirror Lake Apple x 8"},[9]=nil,[10]={nil,nil,{{157014,"Mirror Lake Apple"}}},[11]=nil,[12]=nil,[13]=nil,[14]=nil,[15]=nil,[16]=nil,[17]=12,[18]=nil,[19]=nil,[20]=nil,[21]=nil,[22]=nil,[23]=nil,[24]=nil,[25]=nil,[26]=nil,[27]=nil,[28]=nil,[29]=nil,[30]=nil,[31]={{nil,4,"Mirror Lake Harvest",1,{{"object",9017008}}}},[32]=nil},
[1660056]={[1]="Agria's Medicine",[2]={{162815}},[3]={{162802}},[4]=5,[5]=8,[6]=1101,[7]=nil,[8]={"Buy the potion's ingredients at the Goldshire market: Elgris Blossom Petals, Dun Kazad Liquor Concentrate, Pumpkin Juice, and a Murloc Eyeball."},[9]=nil,[10]={[3]={{558956,"Collect Elgris Blossom Petals"},{558957,"Collect Dun Kazad Liquor Concentrate"},{558958,"Collect Pumpkin Juice"},{558959,"Collect Murloc Eyeball"}}},[11]=558960,[12]=nil,[13]={1660055},[14]=nil,[15]=nil,[16]=nil,[17]=12,[18]=nil,[19]=nil,[20]=nil,[21]={558956,558957,558958,558959},[22]=nil,[23]=nil,[24]=nil,[25]=nil,[26]={{72,250}}},
[1660057]={[1]="Seven Years of Bad Luck",[2]={{162802}},[3]={{162802}},[4]=8,[5]=10,[6]=1101,[7]=nil,[8]={"Inspect the broken mirror shards that Aldia Crayon blames for the curse afflicting Lady Agria Spada."},[9]=nil,[10]={nil,{{9000057,"Mirror Shard Inspected"}}},[11]=nil,[12]=nil,[13]={1660056},[14]=nil,[15]=nil,[16]=nil,[17]=12},
[1660058]={[1]="Worm-Eaten Apple",[2]={{162805}},[3]={{162805}},[4]=5,[5]=8,[6]=1101,[7]=nil,[8]={"Find and destroy the kobold warrens around Goldshire."},[9]=nil,[10]={nil,{{2300579,"Destroy Kobold Warrens"}}},[11]=nil,[12]=nil,[13]=nil,[14]=nil,[15]=nil,[16]=nil,[17]=12,[18]=nil,[19]=nil,[20]=nil,[21]=nil,[22]=nil,[23]=nil,[24]=nil,[25]=nil,[26]={{72,250}}},
[1660059]={[1]="Goldshire's Generosity",[2]={{162807}},[3]={{162801}},[4]=6,[5]=8,[6]=1101,[8]={"","Gather Melons, Pumpkins, and Apples from the farms around Goldshire. Then deliver them to Eldor Hammer, leader of the refugees.","","- Pumpkin x 3","- Melon x 3","- Apple x 10"},[10]={nil,nil,{{558961},{558962},{558963}}},[13]={1660055},[17]=12,[23]=0,[24]=0},
[1660000]={[1]="Bookworm",[2]={{161700}},[3]={{161701}},[4]=3,[5]=6,[6]=1101,[7]=nil,[8]={"Speak with Seminarian Moroi, brother of Bianca Spada."},[9]=nil,[10]=nil,[11]=nil,[12]=nil,[13]=nil,[14]=nil,[15]=nil,[16]=nil,[17]=9},
[1660001]={[1]="Knowledge Corrupts",[2]={{161701}},[3]={{161701}},[4]=3,[5]=6,[6]=1101,[7]=nil,[8]={"Recover the missing pages from Morois unclassified manuscript, scattered throughout the abbey."},[9]=nil,[10]={nil,nil,{{559130},{559131},{559132},{559133}}},[11]=nil,[12]=nil,[13]={1660000},[14]=nil,[15]=nil,[16]=nil,[17]=9},
[1660002]={[1]="The Ruins of Northshire",[2]={{161701}},[3]={{161702}},[4]=3,[5]=6,[6]=1101,[7]=nil,[8]={"Locate the cellar entrance to the Secret Inquisitorial Dungeon."},[9]={"Secret Inquisitorial Dungeon entrance found: 0/1",{[12]={{52.30,36.30}}}},[10]=nil,[11]=nil,[12]={1660001},[13]=nil,[14]=nil,[15]=nil,[16]=nil,[17]=9},
[1660003]={[1]="Accursed Sisterhood",[2]={{161702}},[3]={{161702}},[4]=3,[5]=6,[6]=1101,[7]=nil,[8]={"Purify the belongings of the former abbess, scattered throughout the Secret Inquisitorial Dungeon."},[9]=nil,[10]={nil,{{999005,"Abbess Journal purified"},{999006,"Abbesss Staff purified"},{999007,"Heretical Idol purified"},{999008,"Jeweled Relic purified"}}},[11]=nil,[12]=nil,[13]={1660002},[14]=nil,[15]=nil,[16]=nil,[17]=9},
[1660004]={[1]="Words That Shepherd Madness",[2]={{161702}},[3]={{161701}},[4]=3,[5]=6,[6]=1101,[7]=nil,[8]={"Find the hidden path leading to the top of the waterfall and confront the sins of the former abbess of Northshire."},[9]=nil,[10]={[2]={{999010,"Hidden Path found"},{999011,"Ruined Estate discovered"},{999012,"Wayward Theologian confronted"}}},[11]=nil,[12]=nil,[13]={1660003},[14]=nil,[15]=nil,[16]=nil,[17]=9},
[1660036]={[1]="Oracular Idol",[2]={nil,nil,{559159}},[3]={{161844}},[4]=3,[5]=6,[6]=1101,[7]=nil,[8]={"Collect three Prophet's Oracular Orbs from the murloc oracles roaming the Shadewell Spring."},[9]=nil,[10]={nil,nil,{{559159,"Prophet's Oracular Orb"}}},[11]=559159,[12]=nil,[13]=nil,[14]=nil,[15]=nil,[16]=nil,[17]=9},
[100074]={[1]="A Betrayal Within",[2]={{5055565}},[3]={{240}},[4]=4,[5]=8,[6]=1101,[7]=nil,[8]={"","Return to Marshal Dughan."},[9]=nil,[10]=nil,[11]=nil,[12]=nil,[13]=nil,[14]=nil,[15]=nil,[16]=nil,[17]=12},
[1660055]={[1]="The Maid I Left Behind",[2]={{161700}},[3]={{162800}},[4]=6,[5]=8,[6]=1101,[7]=nil,[8]=nil,[9]=nil,[10]=nil,[11]=nil,[12]=nil,[13]={1660004},[14]=nil,[15]=nil,[16]=nil,[17]=12},
[1660038]={[1]="The Saddest Among Us",[2]={{161702}},[3]={{161702}},[4]=3,[5]=6,[6]=1101,[7]=nil,[8]={"Defeat the Cursed Censor in the Secret Inquisitorial Dungeon."},[9]=nil,[10]={[1]={{161712,"Accursed Censor slain"}}},[11]=nil,[12]=nil,[13]={1660002},[14]=nil,[15]=nil,[16]=nil,[17]=9},
[1660005]={[1]="The Threat Swept Downstream",[2]={{161705}},[3]={{161705}},[4]=3,[5]=6,[6]=1101,[7]=nil,[8]={"Defeat the Defias lurking in the ruined tower and thin the ranks of the Shadewell murlocs atop the waterfall, across the rope bridge."},[9]=nil,[10]={[1]={{161736,"Defias Plunderer slain"},{161716,"Shadewell Murloc slain"}}},[11]=nil,[12]=nil,[13]={1660003},[14]=nil,[15]=nil,[16]=nil,[17]=9},
[1660060]={[1]="Stay a While",[2]={{162806}},[3]={{162806}},[4]=6,[5]=8,[6]=1101,[7]=nil,[8]={"","Take a moment from the noise and haste and stay a while to listen to Aliscar Lend.","","- Listen to Aliscar Lend x 1"},[9]=nil,[10]={[1]={{162943,"Listen to Aliscar Lend"}}},[11]=nil,[12]=nil,[13]=nil,[14]=nil,[15]=nil,[16]=nil,[17]=12},
[100071]={[1]="Defias Disruption",[2]={{6778}},[3]={{6778}},[4]=6,[5]=8,[6]=1101,[7]=nil,[8]={"","Thin the ranks of the Defias at the Bandit Bastion, east of Goldshire.","","- Defias Bandit x 6","- Defias Rogue Wizard x 4"},[9]=nil,[10]={[1]={{116,"Defias Bandit slain"},{474,"Defias Rogue Wizard slain"}}},[11]=nil,[12]=nil,[13]={47},[14]=nil,[15]=nil,[16]=nil,[17]=12},
--Dun Morogh
[254000] = {[1]="A Small Mistake",[2]={{254000}},[3]={{254000}},[4]=2,[5]=2,[6]=1101,[8]="Search the Frostmane Encampment for Clues.",[10]={nil,nil,{{254000}}},[17]=1239},
[254001] = {[1]="We Found Her!",[2]={{254000}},[3]={{254000}},[4]=2,[5]=2,[6]=1101,[8]="Search for Nylrisa to the south-west of Brewnall Village.",[10]={nil,nil,{{254001}}},[13]={254000},[17]=1239},
[254002] = {[1]="The Scout's Favor",[2]={{254000}},[3]={{254002}},[4]=1,[5]=2,[6]=1101,[8]="Slay 4 Rockjaw Raiders and meet with Mountaineer Tagnur on the other end of the tunnel.",[10]={{{1718}},nil,nil},[13]={57393},[17]=1239},
[254003] = {[1]="Old Mirsinth",[2]={{254002}},[3]={{254003}},[4]=1,[5]=4,[6]=1101,[8]="Find the exiled Frostmane troll.",[13]={254002},[17]=1},
[1660006] = {[1]="Smoke on the Wind",[2]={{161718}},[3]={{161719}},[4]=2,[5]=6,[6]=1101,[8]="Follow in the footsteps of Grelbin, son of Groldha, and investigate the source of the smoke.",[10]={{{2300507},{2300508},{2300509},{2300510}}},[17]=1239},
[1660007] = {[1]="A Promising Path",[2]={{161719}},[3]={{161720}},[4]=2,[5]=6,[6]=1101,[8]="Follow the mountain path to uncover the location of the mysterious group.",[10]={nil,{{5401381}},nil},[13]={1660006},[17]=1239},
[1660008] = {[1]="A Fitting Disguise",[2]={{161720}},[3]={{161720}},[4]=2,[5]=6,[6]=1101,[8]="Slay Radiant fanatics and collect their armor pieces. Deliver them to Arathror so he can craft a disguise.",[10]={nil,nil,{{559142}}},[13]={1660007},[17]=1239},
[1660009] = {[1]="His Radiant Majesty",[2]={{161720}},[3]={{161718}},[4]=2,[5]=6,[6]=1101,[8]="Tell Arathror when youre ready to don the disguise. Then infiltrate Radiance Town and slay the cult leader, His Radiant Majesty.",[10]={{{161775}},{{5883992}},nil},[13]={1660008},[17]=1239},
[1660010] = {[1]="Deciphering Radiation",[2]={{161820}},[3]={{161820}},[4]=2,[5]=6,[6]=1101,[8]="Slay radioactive slimes in Radiance Town and use the Contamination Extractor on their corpses to harvest mutagen.",[10]={nil,nil,{{559162}}},[11]=559161,[17]=1239},
[1660011] = {[1]="Soaking the Masses",[2]={{161839}},[3]={{161839}},[4]=2,[5]=6,[6]=1101,[8]="Use the Radiation Sprayer to douse Radiavilles townsfolk with radiation.",[10]={nil,{{5888887}},nil},[11]=559163,[17]=1239},
[1660039] = {[1]="Sever the Right Hand",[2]={{161720}},[3]={{161820}},[4]=2,[5]=6,[6]=1101,[8]="Defeat Right Hand of His Majesty in Radiance Town.",[10]={{{161835}},nil,nil},[13]={1660008},[17]=1239},
[1660076] = {[1]="A Growing Business",[2]={{162882}},[3]={{162883}},[4]=4,[5]=8,[6]=1101,[8]="Speak with Eyma Thunderbrew at the Thunderbrew Distillery in Kharanos.",[17]=1239},
[1660077] = {[1]="Thunderbrew's Hop",[2]={{162883}},[3]={{162883}},[4]=6,[5]=10,[6]=1101,[8]="Harvest seven Thunderbrew Hops from the Thunderbrew Distillery grounds in Kharanos.",[10]={nil,nil,{{558964}}},[13]={1660076},[17]=28},
[1660080] = {[1]="Stay a While",[2]={{162901}},[3]={{162901}},[4]=6,[5]=10,[6]=1101,[8]="Take a moment from the noise and haste and stay a while to listen to Gravedigger Nonuid.",[10]={nil,{{5855933}},nil},[17]=1},
[1660079] = {[1]="Live-Fire Demo",[2]={{162891}},[3]={{162891}},[4]=6,[5]=10,[6]=1101,[8]="Test Gornarn's Blunderbuss and ammo on the practice targets up on the ridge above Kharanos.",[10]={{{162917}},nil,nil},[11]=558950,[17]=1},
[1660078] = {[1]="Bots on Strike",[2]={{162884}},[3]={{162884}},[4]=6,[5]=10,[6]=1101,[8]="Defeat Out-of-Control Automata clogging the Kharanos tunnel and recover Reusable Mechanical Parts from their remains.",[10]={{{162888},{162889},{162890}},nil,{{558965}}},[17]=1},
[254004] = {[1]="A Brother's Betrayal",[2]={{254003}},[3]={{254003}},[4]=3,[5]=7,[6]=1101,[8]="Get Mirsinth the Exiles totem from JunKon at Frostmane Hold.",[10]={nil,nil,{{254002}}},[13]={254003},[17]=1},
[254005] = {[1]="The True Story",[2]={{254003}},[3]={{254000}},[4]=6,[5]=10,[6]=1101,[8]="Find Efry Cogspark at the Stoutlager Inn in Thelsamar.",[13]={254004},[17]=1},
[500005] = {[1]="Timber for the Coldhewn",[2]={{765556}},[3]={{765556}},[4]=6,[5]=10,[6]=1101,[8]="Chop down Dun Morogh trees near Coldhewn Camp and return with 12 Frostpine Logs.",[10]={nil,nil,{{662336}}},[17]=1},
[500006] = {[1]="Icehide the Unbroken",[2]={{764536}},[3]={{764536}},[4]=7,[5]=11,[6]=1101,[8]="Youve been asked to track and slay Icehide, the elite Frostsaber haunting Coldhewn Ridge above the camp.",[10]={{{76555}},nil,nil},[17]=1},
--Teldrassil
[1660012] = {[1]="The Carrion Road",[2]={{161725}},[3]={{161726}},[4]=2,[5]=6,[6]=1101,[8]="Walk the Carrion Path and defeat its guardians.",[10]={{{161787}},{{5166357}}},[17]=1243},
[1660013] = {[1]="The Sister Who Never Returned",[2]={{161726}},[3]={{161727}},[4]=2,[5]=6,[6]=1101,[8]="Speak with Lady Aegya, leader of the Vultures Cult, and ask what became of Thariels sister, Elydna.",[10]={nil,{{5861249}}},[13]={1660012},[17]=1243},
[1660014] = {[1]="Finding the Good Meat",[2]={{161727}},[3]={{161727}},[4]=2,[5]=6,[6]=1101,[8]="Gather five cuts of good meat from the Moonlit Ossuary within the Vulture Cult Eyrie.",[10]={nil,nil,{{559143}}},[13]={1660013},[17]=1243},
[1660015] = {[1]="Transsubstantiating the Flesh",[2]={{161727}},[3]={{161728}},[4]=2,[5]=6,[6]=1101,[8]="Carry the gathered flesh to the Moonwell and sanctify it in the waters.",[10]={nil,{{5005829}},{{559145}}},[11]=559144,[13]={1660014},[17]=1243},
[1660016] = {[1]="Communion Banquet",[2]={{161728}},[3]={{161727}},[4]=2,[5]=6,[6]=1101,[8]="Place the sanctified flesh upon the bowl in the Great Vultures nest. Then, aid Elydna in completing her communion.",[10]={nil,{{2300513},{5911478}}},[13]={1660015},[17]=1243},
[1660017] = {[1]="A Trail of Petals",[2]={{161848}},[3]={{161848}},[4]=2,[5]=6,[6]=1101,[8]="Channel Eldyas power over the newborns in the Great Nest to transform them into butterflies. Then guide the butterflies back to Eldya.",[10]={nil,{{2300526},{5943833}}},[13]={1660016},[17]=1243},
[1660040] = {[1]="Restless entrails",[2]={{161916}},[3]={{161916}},[4]=2,[5]=6,[6]=1101,[8]="Defeat the Rotting Flesh Spawn in the Lunar Ossuary.",[10]={{{161832}},nil,nil},[17]=1243},
[1660071] = {[1]="A Dark Warning",[2]={{161725}},[3]={{3567}},[4]=4,[5]=8,[6]=1101,[8]="Speak with Tallonkai Swiftroot in Dolanaar.",[13]={1660085},[17]=141},
[1660072] = {[1]="The Aid of Theren-Dion",[2]={{3567}},[3]={{162880}},[4]=4,[5]=8,[6]=1101,[8]="Speak with the Sentinels at Theren-Dion Sanctuary and challenge them to duels to aid their training.",[10]={[5]={{{162856,162870,162871,162872,162873},"Theren-Dion Sentinel"}}},[13]={1660071},[17]=141},
[1660073] = {[1]="No Place for Scavengers",[2]={{162880}},[3]={{162880}},[4]=4,[5]=8,[6]=1101,[8]="Destroy Vulture Eggs around the Theren-Dion Sanctuary near Dolanaar.",[10]={{{162925}},{{5388202}}},[13]={1660072},[17]=141},
[1660074] = {[1]="Termites in Teldrassil",[2]={{162879}},[3]={{162879}},[4]=5,[5]=9,[6]=1101,[8]="Enter the bark of Teldrassil near Dolanaar and defeat the termites infesting its depths.",[10]={{{162876},{162877}}},[13]={1660071},[17]=141},
[1660075] = {[1]="Stay a While",[2]={{162881}},[3]={{162881}},[4]=4,[5]=8,[6]=1101,[8]="Take a moment from the noise and haste and stay a while to listen to Alenna Whisperbough.",[10]={nil,{{5399902}}},[17]=141},
[1660085] = {[1]="Elydna's Heirloom",[2]={{161727}},[3]={{161725}},[4]=3,[5]=7,[6]=1101,[8]="Speak with Thariel Wingstroke and deliver to him the pendant of his sister, Elydna.",[10]={nil,{{5405229}}},[13]={1660016},[17]=141},
--Durotar
[254008]={[1]="To Find a Cure",[2]={{254011}},[3]={{254011}},[4]=1,[5]=2,[6]=690,[7]=0,[8]={"Find the strange flower."},[10]={nil,nil,{{254005}}},[17]=1244},
[254009]={[1]="A Dangerous Sample",[2]={{254011}},[3]={{254011}},[4]=1,[5]=2,[6]=690,[7]=0,[8]={"Collect demon blood from a strong demon."},[10]={nil,nil,{{254006}}},[13]={254008},[17]=1244},
[254010]={[1]="Knowledge of the Centaurs",[2]={{254011}},[3]={{254004}},[4]=2,[5]=4,[6]=690,[7]=0,[8]={"Search the centaur camp for clues to the flower's properties."},[11]=11584,[13]={254009},[17]=1244},
[1660018]={[1]="Those Who Fell",[2]={{161732}},[3]={{161733}},[4]=3,[5]=6,[6]=690,[7]=0,[8]={"Use the Unremarkable Stone to extract samples of spiritual unrest from the restless orcs and trolls, and present your findings to the witch of Zeb'Goro."},[10]={nil,nil,{{559155}}},[11]=559158,[17]=1244},
[1660019]={[1]="The Way is Shut",[2]={{161733}},[3]={{161734}},[4]=3,[5]=6,[6]=690,[7]=0,[8]={"Use the amulet given to you by Swa'li to break through the magical barrier guarding the entrance to the Sinister Lair."},[10]={nil,{{2036820}},nil},[11]=559146,[13]={1660018},[17]=1244},
[1660020]={[1]="The Sinister Triad",[2]={{161734}},[3]={{161734}},[4]=3,[5]=6,[6]=690,[7]=0,[8]={"Gather the spiritual essences of the beasts haunting the Sinister Lair. You will need one from a spider, one from a bat, and one from a serpent."},[10]={nil,nil,{{559148},{559149},{559150}}},[13]={1660019},[17]=2030},
[1660021]={[1]="So That He May Hear Again",[2]={{161734}},[3]={{161732}},[4]=3,[5]=6,[6]=690,[7]=0,[8]={"Free the elementals next to the cave. Then, speak with Esgramor and tell him of Hirsutta's true intentions."},[10]={nil,{{6649507}},{{559172},{559173},{559174},{559175}}},[13]={1660020},[17]=2030},
[1660022]={[1]="A Sinister Ritual",[2]={{161732}},[3]={{161732}},[4]=3,[5]=6,[6]=690,[7]=0,[8]={"Confront Hirsutta the Witch and put an end to her dark ritual."},[10]={{{161790}},nil,nil},[13]={1660021},[17]=1244},
[1660023]={[1]="Innocents for Sinners",[2]={{161732}},[3]={{161732}},[4]=3,[5]=6,[6]=690,[7]=0,[8]={"Defeat the voodoo devotees guarding the path that leads to Hirsutta."},[10]={{{161807}},nil,nil},[13]={1660021},[17]=1244},
[1660037]={[1]="Unease Makes Tongues Wag",[2]={{161733}},[3]={{161733}},[4]=3,[5]=6,[6]=690,[7]=0,[8]={"Destroy the talking Tiki Masks around Zeb'Goro."},[10]={{{161854},{161855},{161856}},nil,nil},[11]=559146,[13]={1660018},[17]=1244},
[1660041]={[1]="A Door Left Ajar",[2]={{161734}},[3]={{161734}},[4]=3,[5]=6,[6]=690,[7]=0,[8]={"Defeat Techla'tu, Gatekeeper, in the Sinister Lair."},[10]={{{161833},{161793},{161792}},nil,nil},[13]={1660019},[17]=2030},
[1660061]={[1]="Esgramor's Master",[2]={{161732}},[3]={{162839}},[4]=4,[5]=8,[6]=690,[7]=0,[8]={"Speak with Karagar in Razor Hill."},[10]={nil,{{9070546}},nil},[13]={1660022},[17]=1244},
[254011]={[1]="Shinies!",[2]={{254004}},[4]=2,[5]=4,[6]=690,[7]=0,[8]={"Collect metallic debris."},[10]={nil,nil,{{254007}}},[13]={254010},[17]=14},
[1660062] = {[1]="Echoes of Hirsutta",[2]={{162839}},[3]={{162839}},[4]=4,[5]=8,[6]=690,[8]="Defeat naga in Rivenruin Cave on the Durotar coast.",[10]={{{162834},{162835},{162916}}},[13]={1660061},[17]=14},
[1660063] = {[1]="Auction the Past",[2]={{162840}},[3]={{162840}},[4]=4,[5]=8,[6]=690,[8]="Recover Elven Relics of Old from the ruins in Rivenruin Cave, Durotar.",[10]={nil,nil,{{558966}}},[17]=14},
[1660065]={[1]="Stay a While",[2]={{162841}},[3]={{162841}},[4]=6,[5]=8,[6]=690,[7]=0,[8]={"Take a moment from the noise and haste and stay a while to listen to Bagamul Skyfang."},[10]={nil,{{5954015}}},[17]=14},
[1660064] = {[1]="Durotar's Dire Drought",[2]={{162838}},[3]={{162838}},[4]=6,[5]=8,[6]=690,[8]="Fill the pitcher with water from one of the pools outside Razor Hill, then give the mine peons a drink.",[10]={{{162836,"Thirsty peons served"}},nil,{{558974,"Full Dirgran's Pitcher"}}},[11]=558973,[17]=14},
[254012] = {[1]="The Queen's Decree",[2]={{254012}},[3]={{254012}},[4]=5,[5]=7,[6]=690,[8]="Slay harpies for Queen Erethina.",[10]={{{3115},{3116}}},[13]={254011},[17]=14},
[254013] = {[1]="Avianna's Rose",[2]={{254012}},[3]={{254013}},[4]=6,[5]=10,[6]=690,[8]="Bring the information you learned to Sakari in Orgrimmar.",[13]={254012},[17]=14},
[254014] = {[1]="The Last Piece",[2]={{254013}},[3]={{254014}},[4]=6,[5]=10,[6]=690,[8]="Find Ourugai Crystal in the Barrens.",[10]={nil,nil,{{254008}}},[13]={254014},[17]=1413},
[254015] = {[1]="Reversion",[2]={{254014}},[3]={{254014}},[4]=6,[5]=10,[6]=690,[8]="Watch Sakari create the cure.",[10]={{{254016}},{{5777365}}},[13]={254014},[17]=1413},
--Tirisfal Glades
[363] = {"Rude Awakening",{{1568}},{{1569}},1,1,16,nil,{"Speak with Shadow Priest Sarvis."},nil,{{{1512}},nil,nil},nil,nil,nil,nil,nil,nil,154,nil,nil,nil,nil,364,524296,nil,nil,{{68,75}}},
[6395] = {[1]="Marla's Last Wish",[2]={{1661}},[3]={{1661}},[4]=3,[5]=5,[6]=690,[8]="Bring Samuel Fipps' Remains to Marla's Grave, then return to Novice Elreth.",[10]={{{1919}},{{178090,"Samuel's Remains Buried"}},{{16333}}},[13]={364},[17]=1240,[21]={16333},[27]={{nil,4,"Samuel's Remains Buried",0,{{"object",178090}}}}},
[1660024]={[1]="Monsters With Noble Intentions",[2]={{161739}},[3]={{161740}},[4]=3,[5]=6,[6]=690,[7]=0,[8]={"Speak with Riscell Cain at the Heritage League camp."},[17]=1240},
[1660025] = {[1]="Restless Family Members",[2]={{161740}},[3]={{161740}},[4]=3,[5]=6,[6]=690,[8]="Purify the remains of Riscells deceased relatives in the Cain Family Crypt, and send their spirits back to the Afterlife.",[10]={{{161762},{161763},{161764},{161765}},nil,nil},[13]={1660024},[17]=1240},
[1660026] = {[1]="An Unspeakable Secret",[2]={{161740}},[3]={{161741}},[4]=3,[5]=6,[6]=690,[8]="Retrieve the key fragments held by the manors majordomo, maid, and stablemaster.",[10]={nil,nil,{{559138},{559139},{559140}}},[13]={1660025},[17]=1240},
[1660028] = {[1]="A Noble Heritage",[2]={{161747}},[3]={{161747}},[4]=3,[5]=6,[6]=690,[8]="Explore Cain Family Manor and recover whatever valuables remain. Then bring them to Thris.",[10]={nil,nil,{{559164},{559165},{559166},{559167}}},[13]={1660025},[17]=1240},
[1660027] = {[1]="The True Heir of the Cains",[2]={{161741}},[4]=3,[5]=6,[6]=690,[8]="Use the key to access the basement and defeat the creature within.",[10]={{{161757}}},[13]={1660026},[17]=1240},
[1660029] = {[1]="The Friends We Make Along the Way",[2]={{161742}},[3]={{161742}},[4]=3,[5]=6,[6]=690,[8]="Slay the creatures prowling Cain Manor: zombies, ghouls, and bears.",[10]={{{161743},{161752},{161749}},nil,nil},[13]={1660025},[17]=1240},
[1660042] = {[1]="I'm Home",[2]={{161746}},[3]={{161746}},[4]=3,[5]=6,[6]=690,[8]="Defeat the Hound of House Cain behind the manor.",[10]={{{161836}},nil,nil},[13]={1660025},[17]=1240},
[1660050] = {[1]="Apothecary Flemer",[2]={{161742}},[3]={{162843}},[4]=4,[5]=8,[6]=690,[8]="Speak with Apothecary Flemer in Brill.",[10]={nil,nil,nil},[13]={1660029},[17]=1240},
[254064] = {[1]="The Nature of Freedom",[2]={{749136}},[3]={{749136}},[4]=4,[5]=8,[6]=690,[8]="Test Rod Toxicstrike's concoction on 3 zombies, 3 skeletons, 3 banshees, and Mallek the Tormented",[10]={{{1522},{1530},{1534},{254584}},{{2306601},{2306602},{2306603},{2306604}},nil},[11]=354655,[17]=85},
[1660052] = {[1]="Spotless Standing",[2]={{162844}},[3]={{162844}},[4]=5,[5]=9,[6]=690,[8]="Find the Forsaken Rebels entrenched along the shores of Brightwater Lake and put them down.",[10]={{{162857},{162853},{162854}},nil,nil},[17]=85},
[1660054] = {[1]="Stay a While",[2]={{162847}},[3]={{162847}},[4]=4,[5]=8,[6]=690,[8]="Take a moment from the noise and haste and stay a while to listen to Dark Priestess Ashara.",[10]={nil,{{5093560}},nil},[17]=85},
[1660051] = {[1]="More Than the Sum of its Parts",[2]={{162843}},[3]={{162843}},[4]=4,[5]=8,[6]=690,[8]="Collect Necrotic Spores from the fungus in the abandoned tower overlooking Brill. They come in two forms: clinging to creatures and encapsulated in mucous globules on the ground.",[10]={nil,nil,{{558953},{558954}}},[13]={1660050},[17]=85},
[1660053] = {[1]="Scarlet Correspondence",[2]={nil,nil,{{558955}}},[3]={{162844}},[4]=4,[5]=8,[8]="Find the Scarlet Crusade camp and put down their agents.",[10]={{{162859},{162860},{162861}},nil,nil},[17]=85},
[254053] = {[1]="A Humble Duty",[2]={{991483}},[3]={{991483}},[4]=7,[5]=11,[6]=690,[8]="Polish 6 gravestones at Father Alastor's cemetary and Invincible's grave at Balnir Farmstead.",[10]={nil,{{192380},{254678}},nil},[17]=85},
[254054] = {[1]="The Balnirs' Rest",[2]={{991483}},[3]={{991483}},[4]=8,[5]=12,[6]=690,[8]="Put the spirits of the Balnir family, Jorum Balnir, Vara Balnir, and Jarim Balnir to rest.",[10]={{{254936},{254937},{254938}},nil,nil},[17]=85},
[254056] = {[1]="Brewing Disarray",[2]={{764555}},[3]={{764554}},[4]=8,[5]=12,[6]=690,[8]="Slay Lieutenant Sanders in Venomweb Vale and bring his head to Apothecary Ralden",[10]={nil,nil,{{354678}}},[17]=85},
[254057] = {[1]="This Is Justice",[2]={{764554}},[3]={{764554}},[4]=8,[5]=12,[6]=690,[8]="Use Ralden's Transformation Elixir to infiltrate the Scarlet Monastery's courtyard and infect their supplies.",[10]={nil,{{254679}},nil},[11]=354654,[13]={254056},[17]=85},
--Mulgore
[1660030] = {[1]="Death and Tribute",[2]={{161817}},[3]={{161818}},[4]=3,[5]=4,[6]=690,[8]="Slay seven Grimtotem Marauders in Red Cloud Mesa, take their manes as proof, and deliver them to Lady Redhorns mistress.",[10]={nil,nil,{{559156}}},[17]=1245},
[1660031]={[1]="Death and Exile",[2]={{161818}},[3]={{161819}},[4]=3,[5]=6,[5]=0,[7]=0,[8]={"Follow the Grimtotem Mountain Path to Hard Basin and show Morriga Hollowhoofs ring to Sage Nauchol."},[10]={nil,{{5976414}},nil},[11]=559157,[13]={1660030},[17]=1245},
[1660032]={[1]="Death and Dishonor",[2]={{161819}},[3]={{161819}},[4]=3,[5]=5,[6]=690,[7]=0,[8]={"Gather pieces of armor and the identifying pendant of Three Totems warriors to complete your disguise."},[10]={nil,nil,{{559151},{559152}}},[11]=559151,[13]={1660031},[17]=1245},
[1660033]={[1]="Death and Justice",[2]={{161819}},[3]={{161818}},[4]=3,[5]=5,[6]=690,[7]=0,[8]={"Speak with Nauchol when you are ready for the disguise, then infiltrate Three Totems and slay Malgorm Hollowhoof."},[10]={{{161816}},{{1942447}}},[13]={1660032},[17]=1245,[27]={{nil,4,"Ask Nauchol to dress you in the disguise",0,{{"object",1942447}}},{nil,1,"Malgorm Hollowhoof",0,{{"monster",161816}}}}},
[1660034]={[1]="Death by Laughter",[2]={{161840}},[3]={{161840}},[4]=3,[5]=5,[6]=690,[7]=0,[8]={"Channel the Great Hyenas blessing into the village totems and defeat the guardian spirits that protect them."},[10]={{{161850},{161851},{161852}},{{2300527},{2300533},{2300534}},nil},[13]={1660032},[17]=1245},
[1660035]={[1]="To Whom I Devote",[2]={{161818}},[3]={{161840}},[4]=3,[5]=5,[6]=690,[7]=0,[8]={"Gather bones along the mountain path and offer them at the Great Hyenas altar in Hard Basin."},[10]={nil,nil,{{559168}}},[11]=559168,[13]={1660030},[17]=1245},
[1660043]={[1]="Fighting Over Carrion",[2]={{161840}},[3]={{161840}},[4]=3,[5]=5,[6]=690,[7]=0,[8]={"Defeat the Cruel Carrion Spirit in Hard Basin."},[10]={{{161834}},nil,nil},[13]={1660035},[17]=1245},
[1660066]={[1]="Smoke on the Horizon",[2]={{162902}},[3]={{162903}},[4]=3,[5]=6,[6]=690,[7]=0,[8]={"Speak with Ammus Grey-Eye at the summit of the Iris Sanctuary."},[13]={1660033},[17]=1245},
[1660067] = {[1]="Amphora of Sacred Water",[2]={{162903}},[3]={{162906}},[4]=4,[5]=8,[6]=690,[8]="Fill the amphora with the blessed water of the Iris Sanctuary, and bring it to Sage Muudren in Bloodhoof Village.",[10]={nil,{{5195713},{5195711}},{{558972}}},[11]=558971,[13]={1660066},[17]=1245},
[1660070] = {[1]="Stay a While",[2]={{162903}},[3]={{162903}},[4]=4,[5]=8,[6]=690,[8]="Take a moment from the noise and haste and stay a while to listen to Ammus Grey-Eye.",[10]={nil,{{5299566}}},[13]={1660066},[17]=1245},
[1660068]={[1]="Exile of Embers",[2]={{162906}},[3]={{162906}},[4]=6,[5]=8,[6]=690,[7]=0,[8]={"Channel the blessing to weaken the fire elementals prowling around Ardunno's hut and banish them back to their elemental plane."},[10]={{{162907}},nil,nil},[11]=558967,[13]={1660067},[17]=1412},
[1660069] = {[1]="The Smoke that Remembers",[2]={{162908}},[3]={{162908}},[4]=4,[5]=8,[6]=690,[8]="Obtain incense for Ancestor Emnil's altar. You will need Prairie Sage and Kodo Tallow.",[10]={nil,nil,{{558968},{558969}}},[13]={1660067},[17]=1412},
[500004] = {[1]="The Circles Rite",[2]={{991485}},[3]={{991485}},[4]=6,[5]=10,[6]=690,[8]="Collect 8 Ritual Totems and bring them to Maur Tharok Windhoof at Stonefather's Circle.",[10]={nil,nil,{{662335}}},[17]=1412},
}
AscensionQuestDB = AscensionQuestDB or {}
AscensionQuestDB.questData = AscensionDB.questData
@@ -0,0 +1,326 @@
---@class AscensionUiMapData
AscensionUiMapData = AscensionUiMapData or {}
AscensionUiMapData.uiMapData = {
-- Alliance Starting Zone
[2031] = {
[1] = 302.51,
[2] = 200.0,
[3] = 581.66,
[4] = 10745.9,
instance = 1,
mapID = 2031,
name = "Moonlit Ossuary",
mapType = 3,
parentMapID = 10207,
},
[1230] = {
[1] = 230.01,
[2] = 153.34000000000015,
[3] = 1685.0,
[4] = 9881.67,
instance = 1,
mapID = 1230,
name = "Upper Ban'ethil Barrow Den",
mapType = 3,
parentMapID = 262,
},
[1231] = {
[1] = 380.01,
[2] = 253.34000000000015,
[3] = 1735.0,
[4] = 9931.67,
instance = 1,
mapID = 1231,
name = "Lower Ban'ethil Barrow Den",
mapType = 3,
parentMapID = 10133,
},
[1232] = {
[1] = 279.5999999999999,
[2] = 186.40000000000146,
[3] = 1249.8,
[4] = 10211.7,
instance = 1,
mapID = 1232,
name = "Fel Rock",
mapType = 3,
parentMapID = 258,
},
[1243] = {
[1] = 1450.0040000000001,
[2] = 966.5999999999985,
[3] = 1491.67,
[4] = 11033.3,
instance = 1,
mapID = 1243,
name = "Shadowglen",
mapType = 3,
parentMapID = 10143,
},
[1233] = {
[1] = 480.0,
[2] = 320.0,
[3] = 1140.0,
[4] = 11035.0,
instance = 1,
mapID = 1233,
name = "Shadowthread Cave",
mapType = 3,
parentMapID = 257,
},
[1222] = {
[1] = 323.25,
[2] = 215.5,
[3] = -445.875,
[4] = -8985.0,
instance = 0,
mapID = 1222,
name = "Jasperlode mine",
mapType = 3,
parentMapID = 10126,
},
[1220] = {
[1] = 240.0,
[2] = 160.0,
[3] = 281.75,
[4] = -9700.0,
instance = 0,
mapID = 1220,
name = "Upper Fargodeep Mine",
mapType = 3,
parentMapID = 10124,
},
[1221] = {
[1] = 255.0,
[2] = 170.0,
[3] = 289.25,
[4] = -9710.0,
instance = 0,
mapID = 1221,
name = "Lower Fargodeep Mine",
mapType = 3,
parentMapID = 10125,
},
[1238] = {
[1] = 968.75,
[2] = 645.8400000000001,
[3] = 187.5,
[4] = -8570.83,
["mapType"] = 3,
["parentMapID"] = 10138,
["mapID"] = 1238,
["instance"] = 0,
["name"] = "Northshire Valley",
},
[1226] = {
[1] = 279.0,
[2] = 186.0,
[3] = -27.0,
[4] = -8500.0,
["mapType"] = 3,
["parentMapID"] = 10130,
["mapID"] = 1226,
["instance"] = 0,
["name"] = "Echo Ridge Mine",
},
[2028] = {
[1] = 1300.008,
[2] = 866.67,
[3] = 266.658,
[4] = -7933.33,
mapType = 3,
parentMapID = 10196,
mapID = 2028,
instance = 0,
name = "Shadewell Spring",
},
[1202] = {
[1] = 204.99,
[2] = 136.67,
[3] = -660.0,
[4] = 2948.83,
mapType = 3,
parentMapID = 796,
mapID = 1202,
instance = 0,
name = "Scarlet Monastery Entrance",
},
[2029] = {
[1] = 499.9961,
[2] = 333.33,
[3] = -66.6719,
[4] = -8500.0,
mapType = 3,
parentMapID = 10197,
mapID = 2029,
instance = 0,
name = "Secret Inquisitorial Dungeon",
},
[1239] = {
[1] = 1266.8,
[2] = 842.0,
[3] = 1200.0,
[4] = -5724.66,
mapType = 3,
parentMapID = 10139,
mapID = 1239,
instance = 0,
name = "Coldridge Valley",
},
[1215] = {
[1] = 330.0,
[2] = 220.0,
[3] = 245.0,
[4] = -6020.0,
instance = 0,
mapID = 1215,
name = "Coldridge Pass",
mapType = 3,
parentMapID = 10120,
},
[1216] = {
[1] = 505.5,
[2] = 337.0,
[3] = 32.75,
[4] = -5313.0,
instance = 0,
mapID = 1216,
name = "The Grizzled Den",
mapType = 3,
parentMapID = 10121,
},
[1214] = {
[1] = 374.01,
[2] = 249.34000000000015,
[3] = -1542.99,
[4] = -5486.83,
instance = 0,
mapID = 1214,
name = "Gol'bolar Quarry",
mapType = 3,
parentMapID = 10119,
},
-- Horde Starting Zone
[1219] = {
[1] = 270.0,
[2] = 180.0,
[3] = -4629.0,
[4] = 1580.5,
instance = 1,
mapID = 1219,
name = "Skull Rock",
mapType = 3,
parentMapID = 10123,
},
[2030] = {
[1] = 550.29,
[2] = 366.6328125,
[3] = -4100.0,
[4] = 0.0078125,
instance = 1,
mapID = 2030,
name = "Sinister Lair",
mapType = 3,
parentMapID = 10205,
},
[1217] = {
[1] = 266.0,
[2] = 177.33,
[3] = -4166.5,
[4] = 5.5,
instance = 1,
mapID = 1217,
name = "Burning Blade Coven",
mapType = 3,
parentMapID = 365,
},
[1244] = {
[1] = 1350.0,
[2] = 900.0,
[3] = -3641.67,
[4] = 0.0,
instance = 1,
mapID = 1244,
name = "Valley of Trials",
mapType = 3,
parentMapID = 10144,
},
[1240] = {
[1] = 1089.5900000000001,
[2] = 727.0799999999999,
[3] = 2147.92,
[4] = 2270.83,
instance = 0,
mapID = 1240,
name = "Deathknell",
mapType = 3,
parentMapID = 10140,
},
[1213] = {
[1] = 220.0,
[2] = 146.66999999999985,
[3] = 2020.0,
[4] = 2123.33,
instance = 0,
mapID = 1213,
name = "Night Web's Hollow",
mapType = 3,
parentMapID = 10118,
},
[1245] = {
[1] = 1799.8799999999999,
[2] = 1200.0400000000004,
[3] = 266.54,
[4] = -2566.74,
instance = 1,
mapID = 1245,
name = "Camp Narache",
mapType = 3,
parentMapID = 10146,
},
[1225] = {
[1] = 741.0,
[2] = 494.0,
[3] = -818.0,
[4] = -1436.0,
instance = 1,
mapID = 1225,
name = "The Venture Co. Mine",
mapType = 3,
parentMapID = 10129,
},
[1224] = {
[1] = 350.01,
[2] = 233.32999999999993,
[3] = 580.0,
[4] = -2263.33,
instance = 1,
mapID = 1224,
name = "Palemane Rock",
mapType = 3,
parentMapID = 10128,
},
}
local function ApplyUiMapData()
if not QuestieCompat then return end
if not AscensionUiMapData or not AscensionUiMapData.uiMapData then return end
QuestieCompat.UiMapData = QuestieCompat.UiMapData or {}
for uiMapId, data in pairs(AscensionUiMapData.uiMapData) do
if QuestieCompat.UiMapData[uiMapId] == nil then
QuestieCompat.UiMapData[uiMapId] = data
end
end
end
if QuestieCompat and QuestieCompat.LoadUiMapData then
hooksecurefunc(QuestieCompat, "LoadUiMapData", ApplyUiMapData)
end
ApplyUiMapData()
@@ -0,0 +1,60 @@
---@class AscensionZoneTables
AscensionZoneTables = AscensionZoneTables or {}
AscensionZoneTables.uiMapIdToAreaId = AscensionZoneTables.uiMapIdToAreaId or {
--Alliance
[1238] = 12, -- Northshire Valley -> Elwynn Forest
[2029] = 12, -- Secret Inquisitorial Dungeon -> Elwynn Forest
[2028] = 12, -- Shadewell Spring -> Elwynn Forest
[1226] = 12, -- Echo Ridge Mine -> Elwynn Forest
[1222] = 12, -- Jasperlode mine -> Elwynn Forest
[1239] = 1, -- Coldridge Valley -> Dun Morogh
[1215] = 1, -- Coldridge Pass -> Dun Morogh
[1216] = 1, -- The Grizzled Den -> Dun Morogh
[1214] = 1, -- Gol'bolar Quarry -> Dun Morogh
[1243] = 141, -- Shadowglen -> Teldrassil
[1233] = 141, -- Shadowthread Cave -> Teldrassil
[1232] = 141, -- Fel Rock -> Teldrassil
[2031] = 141, -- Moonlit Ossuary -> Teldrassil
[1230] = 141, -- Upper Ban'ethil Barrow Den -> Teldrassil
[1231] = 141, -- Lower Ban'ethil Barrow Den -> Teldrassil
--Horde
[1244] = 14, -- Valley of Trials -> Durotar
[1217] = 14, -- Burning Blade Coven -> Durotar
[2030] = 14, -- Sinister Lair -> Durotar
[1219] = 14, -- Skull Rock -> Durotar
[1240] = 85, -- Deathknell -> Tirisfal Glades
[1213] = 85, -- Night Web's Hollow -> Tirisfal Glades
[1245] = 215, -- Camp Narache -> Mulgore
[1225] = 215, -- The Venture Co. Mine -> Mulgore
[1224] = 215, -- Palemane Rock -> Mulgore
}
-- Register zone sort names for custom zones so they can be used in quest zoneOrSort field
AscensionZoneTables.zoneSort = AscensionZoneTables.zoneSort or {
[1238] = "Northshire Valley",
[2029] = "Secret Inquisitorial Dungeon",
[2028] = "Shadewell Spring",
[1226] = "Echo Ridge Mine",
[1222] = "Jasperlode Mine",
[1239] = "Coldridge Valley",
[1215] = "Coldridge Pass",
[1243] = "Shadowglen",
[1233] = "Shadowthread Cave",
[1244] = "Valley of Trials",
[1217] = "Burning Blade Coven",
[2030] = "Sinister Lair",
[1240] = "Deathknell",
[1213] = "Night Web's Hollow",
[1245] = "Camp Narache",
[1232] = "Fel Rock",
[2031] = "Moonlit Ossuary",
[1230] = "Upper Ban'ethil Barrow Den",
[1231] = "Lower Ban'ethil Barrow Den",
[1225] = "The Venture Co. Mine",
[1224] = "Palemane Rock",
[1219] = "Skull Rock",
[1216] = "The Grizzled Den",
[1214] = "Gol'bolar Quarry",
}
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
+975
View File
@@ -0,0 +1,975 @@
---@type QuestieDB
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
--- COMPATIBILITY ---
local WOW_PROJECT_ID = QuestieCompat.WOW_PROJECT_ID
local WOW_PROJECT_WRATH_CLASSIC = QuestieCompat.WOW_PROJECT_WRATH_CLASSIC
QuestieDB.sortKeys = {
SEASONAL = -22,
HERBALISM = -24,
BATTLEGROUND = -25,
WARLOCK = -61,
WARRIOR = -81,
SHAMAN = -82,
FISHING = -101,
BLACKSMITHING = -121,
PALADIN = -141,
MAGE = -161,
ROGUE = -162,
ALCHEMY = -181,
LEATHERWORKING = -182,
ENGINEERING = -201,
HUNTER = -261,
PRIEST = -262,
DRUID = -263,
TAILORING = -264,
SPECIAL = -284,
COOKING = -304,
FIRST_AID = -324,
DARKMOON_FAIRE = -364,
LUNAR_FESTIVAL = -366,
REPUTATION = -367,
MIDSUMMER = -369,
BREWFEST = -370,
INSCRIPTION = -371,
DEATHKNIGHT = -372,
JEWELCRAFTING = -373,
NOBLEGARDEN = -374,
PILGRIMS_BOUNTY = -375,
LOVE_IS_IN_THE_AIR = -376,
NIGHTMARE_INCURSIONS = -641,
}
local isWotlk = WOW_PROJECT_ID == WOW_PROJECT_WRATH_CLASSIC
QuestieDB.factionTemplate = isWotlk and { -- [id] = EnemyGroup
[1] = 12,
[2] = 10,
[3] = 12,
[4] = 12,
[5] = 10,
[6] = 10,
[7] = 0,
[10] = 0,
[11] = 12,
[12] = 4,
[14] = 1,
[15] = 0,
[16] = 1,
[17] = 1,
[18] = 1,
[19] = 1,
[20] = 1,
[21] = 1,
[22] = 1,
[23] = 4,
[24] = 1,
[25] = 0,
[26] = 1,
[27] = 1,
[28] = 1,
[29] = 2,
[30] = 1,
[31] = 0,
[32] = 0,
[33] = 0,
[34] = 0,
[35] = 0,
[36] = 0,
[37] = 1,
[38] = 1,
[39] = 1,
[40] = 1,
[41] = 1,
[42] = 0,
[43] = 0,
[44] = 1,
[45] = 1,
[46] = 1,
[47] = 1,
[48] = 1,
[49] = 1,
[50] = 1,
[51] = 1,
[52] = 0,
[53] = 12,
[54] = 1,
[55] = 4,
[56] = 12,
[57] = 12,
[58] = 0,
[59] = 1,
[60] = 1,
[61] = 1,
[62] = 1,
[63] = 1,
[64] = 4,
[65] = 0,
[66] = 1,
[67] = 1,
[68] = 2,
[69] = 0,
[70] = 1,
[71] = 10,
[72] = 1,
[73] = 1,
[74] = 1,
[76] = 4,
[77] = 0,
[78] = 1,
[79] = 12,
[80] = 4,
[81] = 1,
[82] = 1,
[83] = 2,
[84] = 4,
[85] = 10,
[86] = 0,
[87] = 1,
[88] = 4,
[89] = 1,
[90] = 1,
[91] = 1,
[92] = 1,
[93] = 1,
[94] = 0,
[95] = 1,
[96] = 0,
[97] = 0,
[98] = 10,
[99] = 0,
[100] = 9,
[101] = 4,
[102] = 2,
[103] = 1,
[104] = 2,
[105] = 10,
[106] = 10,
[107] = 1,
[108] = 0,
[109] = 1,
[110] = 1,
[111] = 1,
[112] = 1,
[113] = 0,
[114] = 1,
[115] = 12,
[116] = 10,
[118] = 2,
[119] = 1,
[120] = 0,
[121] = 8,
[122] = 4,
[123] = 4,
[124] = 4,
[125] = 2,
[126] = 2,
[127] = 1,
[128] = 1,
[129] = 1,
[130] = 1,
[131] = 1,
[132] = 1,
[133] = 1,
[134] = 1,
[148] = 1,
[149] = 0,
[150] = 12,
[151] = 4,
[152] = 1,
[153] = 0,
[154] = 1,
[168] = 1,
[188] = 0,
[189] = 0,
[190] = 0,
[208] = 0,
[209] = 0,
[210] = 12,
[230] = 1,
[231] = 8,
[232] = 8,
[233] = 1,
[250] = 8,
[270] = 1,
[290] = 0,
[310] = 1,
[311] = 0,
[312] = 1,
[330] = 0,
[350] = 0,
[370] = 1,
[371] = 4,
[390] = 0,
[410] = 1,
[411] = 1,
[412] = 2,
[413] = 1,
[414] = 1,
[415] = 1,
[416] = 0,
[430] = 0,
[450] = 1,
[470] = 1,
[471] = 0,
[472] = 1,
[473] = 0,
[474] = 0,
[475] = 8,
[494] = 1,
[495] = 8,
[514] = 1,
[534] = 4, --* Changed from 0 -> 4 to be hostile towards horde
[554] = 7,
[574] = 1,
[575] = 1,
[594] = 0,
[614] = 0,
[634] = 0,
[635] = 0,
[636] = 1,
[637] = 8,
[654] = 1,
[655] = 5,
[674] = 0,
[694] = 4,
[695] = 0,
[714] = 2, --* Changed from 0 -> 2 to be hostile towards alliance
[734] = 0,
[735] = 0,
[736] = 1,
[754] = 1,
[774] = 0,
[775] = 0,
[776] = 0,
[777] = 0,
[778] = 1,
[794] = 0,
[795] = 1,
[814] = 0,
[834] = 1,
[854] = 8,
[855] = 0,
[874] = 4,
[875] = 4,
[876] = 2,
[877] = 10,
[894] = 4,
[914] = 0,
[934] = 1,
[954] = 1,
[974] = 1,
[994] = 0,
[995] = 2,
[996] = 8,
[1014] = 0,
[1015] = 0,
[1034] = 2,
[1054] = 12,
[1055] = 4,
[1074] = 2,
[1075] = 4,
[1076] = 4,
[1077] = 4,
[1078] = 4,
[1080] = 0,
[1081] = 1,
[1094] = 0,
[1095] = 0,
[1096] = 12,
[1097] = 4,
[1114] = 1,
[1134] = 10,
[1154] = 10,
[1174] = 2,
[1194] = 0,
[1214] = 10,
[1215] = 2,
[1216] = 12,
[1217] = 4,
[1234] = 1,
[1235] = 1,
[1236] = 1,
[1254] = 8,
[1274] = 4,
[1275] = 2,
[1294] = 1,
[1314] = 2,
[1315] = 4,
[1334] = 4,
[1335] = 2,
[1354] = 0,
[1355] = 0,
[1374] = 1,
[1375] = 9,
[1394] = 1,
[1395] = 1,
[1414] = 4,
[1415] = 2,
[1434] = 1,
[1454] = 0,
[1474] = 0,
[1475] = 0,
[1494] = 2,
[1495] = 10,
[1496] = 2,
[1514] = 4,
[1515] = 2,
[1534] = 4,
[1554] = 8,
[1555] = 0,
[1574] = 0,
[1575] = 12,
[1576] = 4,
[1577] = 4,
[1594] = 12,
[1595] = 10,
[1596] = 12,
[1597] = 10,
[1598] = 2,
[1599] = 4,
[1600] = 8,
[1601] = 0,
[1602] = 2,
[1603] = 10,
[1604] = 2,
[1605] = 1,
[1606] = 2,
[1607] = 2,
[1608] = 8,
[1610] = 10,
[1611] = 4,
[1612] = 2,
[1613] = 0,
[1614] = 1,
[1615] = 8,
[1616] = 0,
[1617] = 1,
[1618] = 12,
[1619] = 10,
[1620] = 15,
[1621] = 4,
[1622] = 4,
[1623] = 2,
[1624] = 8,
[1625] = 8,
[1626] = 1,
[1627] = 2,
[1628] = 2,
[1629] = 12,
[1630] = 15,
[1634] = 0,
[1635] = 0,
[1636] = 2,
[1637] = 2,
[1638] = 4,
[1639] = 12,
[1640] = 4,
[1641] = 2,
[1642] = 4,
[1643] = 1,
[1644] = 4,
[1645] = 12,
[1646] = 4,
[1647] = 12,
[1648] = 4,
[1649] = 4,
[1650] = 10,
[1651] = 2,
[1652] = 2,
[1653] = 2,
[1654] = 4,
[1655] = 4,
[1656] = 10,
[1657] = 2,
[1658] = 2,
[1659] = 8,
[1660] = 8,
[1661] = 8,
[1662] = 1,
[1663] = 1,
[1664] = 1,
[1665] = 8,
[1666] = 12,
[1667] = 4,
[1668] = 10,
[1669] = 2,
[1670] = 2,
[1671] = 4,
[1672] = 0,
[1673] = 0,
[1674] = 0,
[1675] = 0,
[1676] = 0,
[1677] = 0,
[1678] = 1,
[1679] = 1,
[1680] = 0,
[1681] = 1,
[1682] = 0,
[1683] = 0,
[1684] = 0,
[1685] = 4,
[1686] = 4,
[1687] = 1,
[1688] = 0,
[1689] = 0,
[1690] = 0,
[1691] = 0,
[1692] = 1,
[1693] = 1,
[1694] = 4,
[1695] = 2,
[1696] = 0,
[1697] = 1,
[1698] = 4,
[1699] = 4,
[1700] = 4,
[1701] = 7,
[1702] = 7,
[1703] = 0,
[1704] = 1,
[1705] = 1,
[1706] = 1,
[1707] = 8,
[1708] = 8,
[1709] = 8,
[1710] = 8,
[1711] = 1,
[1712] = 1,
[1713] = 1,
[1714] = 7,
[1715] = 1,
[1716] = 8,
[1717] = 0,
[1718] = 0,
[1719] = 8,
[1720] = 1,
[1721] = 12,
[1722] = 4,
[1723] = 4,
[1724] = 4,
[1725] = 8,
[1726] = 0,
[1727] = 8,
[1728] = 8,
[1729] = 2,
[1730] = 8,
[1731] = 8,
[1732] = 4,
[1733] = 4,
[1734] = 2,
[1735] = 2,
[1736] = 0,
[1737] = 4,
[1738] = 1,
[1739] = 1,
[1740] = 1,
[1741] = 8,
[1742] = 1,
[1743] = 0,
[1744] = 0,
[1745] = 2,
[1746] = 0,
[1747] = 0,
[1748] = 1,
[1749] = 0,
[1750] = 1,
[1751] = 1,
[1752] = 7,
[1753] = 7,
[1754] = 7,
[1755] = 0,
[1756] = 0,
[1757] = 0,
[1758] = 0,
[1759] = 0,
[1760] = 0,
[1761] = 15,
[1762] = 7,
[1763] = 7,
[1764] = 7,
[1765] = 7,
[1766] = 0,
[1767] = 0,
[1768] = 15,
[1769] = 15,
[1770] = 0,
[1771] = 1,
[1772] = 1,
[1773] = 0,
[1774] = 0,
[1775] = 8,
[1776] = 0,
[1777] = 0,
[1778] = 0,
[1779] = 0,
[1780] = 1,
[1781] = 1,
[1782] = 1,
[1783] = 1,
[1784] = 1,
[1785] = 1,
[1786] = 1,
[1787] = 1,
[1788] = 8,
[1789] = 7,
[1790] = 1,
[1791] = 1,
[1792] = 1,
[1793] = 7,
[1794] = 0,
[1795] = 0,
[1796] = 1,
[1797] = 0,
[1798] = 1,
[1799] = 1,
[1800] = 1,
[1801] = 10,
[1802] = 12,
[1803] = 4,
[1804] = 2,
[1805] = 0,
[1806] = 8,
[1807] = 8,
[1808] = 1,
[1809] = 1,
[1810] = 1,
[1811] = 1,
[1812] = 8,
[1813] = 1,
[1814] = 1,
[1815] = 1,
[1816] = 0,
[1818] = 0,
[1819] = 12,
[1820] = 0,
[1821] = 0,
[1822] = 0,
[1823] = 1,
[1824] = 0,
[1825] = 15,
[1826] = 1,
[1827] = 1,
[1828] = 0,
[1829] = 0,
[1830] = 0,
[1831] = 0,
[1832] = 0,
[1833] = 0,
[1834] = 15,
[1835] = 10,
[1836] = 8,
[1837] = 8,
[1838] = 0,
[1839] = 1,
[1840] = 0,
[1841] = 0,
[1842] = 1,
[1843] = 1,
[1844] = 0,
[1845] = 0,
[1846] = 1,
[1847] = 1,
[1848] = 1,
[1849] = 1,
[1850] = 0,
[1851] = 8,
[1852] = 0,
[1853] = 1,
[1854] = 0,
[1855] = 0,
[1856] = 0,
[1857] = 8,
[1858] = 0,
[1859] = 0,
[1860] = 0,
[1862] = 1,
[1863] = 1,
[1864] = 1,
[1865] = 1,
[1866] = 0,
[1867] = 0,
[1868] = 0,
[1869] = 0,
[1870] = 0,
[1871] = 1,
[1872] = 0,
[1873] = 1,
[1874] = 0,
[1875] = 0,
[1876] = 0,
[1877] = 1,
[1878] = 1,
[1879] = 1,
[1880] = 1,
[1881] = 1,
[1882] = 1,
[1883] = 7,
[1890] = 1,
[1896] = 8,
[1909] = 9,
[1913] = 0,
[1916] = 0,
[1930] = 0,
[1931] = 0,
[1934] = 4,
[1935] = 2,
[1936] = 0,
[1937] = 0,
[1938] = 0,
[1939] = 0,
[1940] = 0,
[1941] = 0,
[1942] = 0,
[1943] = 0,
[1944] = 0,
[1945] = 0,
[1951] = 12,
[1952] = 0,
[1956] = 0,
[1957] = 0,
[1958] = 1,
[1959] = 0,
[1960] = 0,
[1961] = 0,
[1962] = 1,
[1963] = 1,
[1964] = 1,
[1965] = 1,
[1966] = 0,
[1967] = 0,
[1971] = 0,
[1972] = 0,
[1990] = 1,
[1992] = 9,
[1995] = 2,
[1997] = 4,
[1998] = 1,
[2029] = 1,
[2074] = 0,
[3149] = 2,
[3150] = 0,
[3151] = 4,
[3152] = 0,
} or {
[1] = 12,
[2] = 10,
[3] = 12,
[4] = 12,
[5] = 10,
[6] = 10,
[7] = 0,
[10] = 0,
[11] = 12,
[12] = 4,
[14] = 1,
[15] = 0,
[16] = 1,
[17] = 1,
[18] = 1,
[19] = 1,
[20] = 1,
[21] = 1,
[22] = 1,
[23] = 4,
[24] = 1,
[25] = 0,
[26] = 1,
[27] = 1,
[28] = 1,
[29] = 2,
[30] = 1,
[31] = 0,
[32] = 0,
[33] = 0,
[34] = 0,
[35] = 0,
[36] = 0,
[37] = 1,
[38] = 1,
[39] = 1,
[40] = 1,
[41] = 1,
[42] = 0,
[43] = 0,
[44] = 1,
[45] = 1,
[46] = 1,
[47] = 1,
[48] = 1,
[49] = 1,
[50] = 1,
[51] = 1,
[52] = 0,
[53] = 12,
[54] = 1,
[55] = 4,
[56] = 12,
[57] = 12,
[58] = 0,
[59] = 1,
[60] = 1,
[61] = 1,
[62] = 1,
[63] = 1,
[64] = 4,
[65] = 0,
[66] = 1,
[67] = 1,
[68] = 2,
[69] = 0,
[70] = 1,
[71] = 10,
[72] = 1,
[73] = 1,
[74] = 1,
[76] = 4,
[77] = 0,
[78] = 1,
[79] = 12,
[80] = 4,
[81] = 1,
[82] = 1,
[83] = 2,
[84] = 4,
[85] = 10,
[86] = 0,
[87] = 1,
[88] = 4,
[89] = 1,
[90] = 1,
[91] = 1,
[92] = 1,
[93] = 1,
[94] = 0,
[95] = 1,
[96] = 0,
[97] = 0,
[98] = 10,
[99] = 0,
[100] = 9,
[101] = 4,
[102] = 2,
[103] = 1,
[104] = 2,
[105] = 10,
[106] = 10,
[107] = 1,
[108] = 0,
[109] = 1,
[110] = 1,
[111] = 1,
[112] = 1,
[113] = 0,
[114] = 1,
[115] = 12,
[116] = 10,
[118] = 2,
[119] = 1,
[120] = 0,
[121] = 8,
[122] = 4,
[123] = 4,
[124] = 4,
[125] = 2,
[126] = 2,
[127] = 1,
[128] = 1,
[129] = 1,
[130] = 1,
[131] = 1,
[132] = 1,
[133] = 1,
[134] = 1,
[148] = 1,
[149] = 0,
[150] = 12,
[151] = 4,
[152] = 1,
[153] = 0,
[154] = 1,
[168] = 1,
[188] = 0,
[189] = 0,
[190] = 0,
[208] = 0,
[209] = 0,
[210] = 12,
[230] = 1,
[231] = 8,
[232] = 8,
[233] = 1,
[250] = 8,
[270] = 1,
[290] = 0,
[310] = 1,
[311] = 0,
[312] = 1,
[330] = 0,
[350] = 0,
[370] = 1,
[371] = 4,
[390] = 0,
[410] = 1,
[411] = 1,
[412] = 2,
[413] = 1,
[414] = 1,
[415] = 1,
[416] = 0,
[430] = 0,
[450] = 1,
[470] = 1,
[471] = 0,
[472] = 1,
[473] = 0,
[474] = 0,
[475] = 8,
[494] = 1,
[495] = 8,
[514] = 1,
[534] = 4, --* Changed from 0 -> 4 to be hostile towards horde
[554] = 7,
[574] = 1,
[575] = 1,
[594] = 0,
[614] = 0,
[634] = 0,
[635] = 0,
[636] = 1,
[637] = 8,
[654] = 1,
[655] = 5,
[674] = 0,
[694] = 4,
[695] = 0,
[714] = 2, --* Changed from 0 -> 2 to be hostile towards alliance
[734] = 0,
[735] = 0,
[736] = 1,
[754] = 1,
[774] = 0,
[775] = 0,
[776] = 0,
[777] = 0,
[778] = 1,
[794] = 0,
[795] = 1,
[814] = 0,
[834] = 1,
[854] = 8,
[855] = 0,
[874] = 4,
[875] = 4,
[876] = 2,
[877] = 10,
[894] = 4,
[914] = 0,
[934] = 1,
[954] = 1,
[974] = 1,
[994] = 0,
[995] = 2,
[996] = 8,
[1014] = 0,
[1015] = 0,
[1034] = 2,
[1054] = 12,
[1055] = 4,
[1074] = 2,
[1075] = 4,
[1076] = 4,
[1077] = 4,
[1078] = 4,
[1080] = 0,
[1081] = 1,
[1094] = 0,
[1095] = 0,
[1096] = 12,
[1097] = 4,
[1114] = 1,
[1134] = 10,
[1154] = 10,
[1174] = 2,
[1194] = 0,
[1214] = 10,
[1215] = 2,
[1216] = 12,
[1217] = 4,
[1234] = 1,
[1235] = 1,
[1236] = 1,
[1254] = 8,
[1274] = 4,
[1275] = 2,
[1294] = 1,
[1314] = 2,
[1315] = 4,
[1334] = 4,
[1335] = 2,
[1354] = 0,
[1355] = 0,
[1374] = 1,
[1375] = 9,
[1394] = 1,
[1395] = 1,
[1414] = 4,
[1415] = 2,
[1434] = 1,
[1454] = 0,
[1474] = 0,
[1475] = 0,
[1494] = 2,
[1495] = 10,
[1496] = 2,
[1514] = 4,
[1515] = 2,
[1534] = 4,
[1554] = 8,
[1555] = 0,
[1574] = 0,
[1575] = 12,
[1576] = 4,
[1577] = 4,
[1594] = 12,
[1595] = 10,
[1596] = 12,
[1597] = 10,
[1598] = 2,
[1599] = 4,
[1600] = 8,
[1601] = 0,
[1605] = 1,
[1606] = 2,
[1607] = 2,
[1608] = 8,
[1611] = 4,
[1612] = 2,
[1613] = 0,
[1614] = 1,
[1615] = 8,
[1616] = 0,
[1617] = 1,
[1618] = 12,
[1619] = 10,
[1620] = 15,
[1621] = 4,
[1622] = 4,
[1624] = 8,
[1625] = 8,
[1626] = 1,
[1630] = 15,
[1634] = 0,
[1635] = 0,
[1641] = 2,
[1642] = 4,
[1673] = 0,
[1676] = 0,
[1677] = 0,
[3149] = 2,
[3150] = 0,
[3151] = 4,
[3152] = 0,
}
+440
View File
@@ -0,0 +1,440 @@
-- this file is used for large table updates that are automatically generated, since fitting those into corrections is a bad idea
-- not all of this data is validated as its generated from external sources
---@type QuestieDB
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
if Questie.IsClassic then
local npcsToUpdate = {
[239] = 2,
[240] = 2,
[313] = 18,
[384] = 7,
[715] = 2,
[786] = 2,
[931] = 9,
[1218] = 19,
[1261] = 7,
[1295] = 16388,
[1298] = 16388,
[1299] = 16388,
[1303] = 4,
[1304] = 4,
[1308] = 4,
[1310] = 16388,
[1314] = 16388,
[1318] = 4,
[1319] = 16388,
[1324] = 16388,
[1341] = 16388,
[1348] = 16388,
[1349] = 16388,
[1350] = 16388,
[1351] = 4,
[1387] = 8,
[1411] = 18,
[1458] = 19,
[1459] = 16404,
[1460] = 7,
[1519] = 2,
[1571] = 9,
[1701] = 16,
[1755] = 2,
[2122] = 18,
[2130] = 18,
[2153] = 2,
[2299] = 8,
[2389] = 8,
[2397] = 4,
[2405] = 0,
[2409] = 8,
[2432] = 8,
[2439] = 2,
[2464] = 2,
[2465] = 2,
[2487] = 2,
[2491] = 2,
[2497] = 2,
[2621] = 0,
[2663] = 4,
[2670] = 6,
[2700] = 2,
[2708] = 2,
[2737] = 0,
[2771] = 2,
[2785] = 2,
[2789] = 2,
[2796] = 0,
[2801] = 16,
[2802] = 16,
[2808] = 6,
[2818] = 16,
[2835] = 8,
[2851] = 8,
[2858] = 9,
[2859] = 9,
[2861] = 8,
[2870] = 16,
[2880] = 20,
[2881] = 20,
[2910] = 2,
[2920] = 2,
[2941] = 9,
[2981] = 2,
[3001] = 16,
[3079] = 16388,
[3137] = 16,
[3139] = 2,
[3155] = 18,
[3170] = 18,
[3182] = 0,
[3233] = 2,
[3292] = 2,
[3293] = 2,
[3305] = 9,
[3327] = 18,
[3357] = 16,
[3362] = 7,
[3370] = 1536,
[3401] = 18,
[3411] = 6,
[3418] = 2,
[3443] = 2,
[3467] = 0,
[3502] = 0,
[3628] = 0,
[3679] = 0,
[3685] = 7,
[3841] = 8,
[3845] = 2,
[3846] = 2,
[3848] = 2,
[3881] = 6,
[3936] = 2,
[4161] = 1536,
[4254] = 16,
[4256] = 7,
[4265] = 6,
[4267] = 8,
[4312] = 8,
[4314] = 9,
[4317] = 8,
[4319] = 8,
[4321] = 8,
[4407] = 8,
[4453] = 2,
[4501] = 2,
[4508] = 3,
[4582] = 18,
[4584] = 18,
[4598] = 16,
[4606] = 18,
[4607] = 18,
[4613] = 1536,
[4618] = 2,
[4730] = 7,
[4731] = 7,
[4885] = 7,
[4921] = 2,
[4941] = 2,
[4963] = 2,
[4974] = 1536,
[4981] = 4,
[5032] = 17,
[5037] = 17,
[5038] = 17,
[5040] = 17,
[5041] = 17,
[5054] = 1536,
[5086] = 3,
[5130] = 1536,
[5392] = 16,
[5395] = 2,
[5509] = 16388,
[5510] = 16388,
[5512] = 16390,
[5698] = 0,
[5749] = 7,
[5750] = 7,
[5753] = 7,
[5782] = 2,
[5843] = 0,
[5848] = 0,
[5875] = 2,
[6026] = 8,
[6027] = 7,
[6030] = 16390,
[6091] = 6,
[6301] = 6,
[6328] = 7,
[6373] = 7,
[6374] = 7,
[6376] = 7,
[6548] = 7,
[6706] = 8,
[6707] = 18,
[6726] = 8,
[6749] = 8192,
[6782] = 2,
[7172] = 3,
[7233] = 2,
[7770] = 2,
[7823] = 8,
[7824] = 8,
[7879] = 6,
[7937] = 2,
[7952] = 7,
[7955] = 7,
[7957] = 3,
[8018] = 9,
[8019] = 8,
[8020] = 8,
[8214] = 0,
[8320] = 0,
[8383] = 2,
[8416] = 2,
[8582] = 2,
[8586] = 2,
[8609] = 8,
[8610] = 8,
[8664] = 2,
[8665] = 20,
[8923] = 0,
[9022] = 0,
[9087] = 7,
[9177] = 2,
[9460] = 0,
[9540] = 2,
[9598] = 2,
[9679] = 0,
[9976] = 8192,
[9977] = 8192,
[9978] = 8192,
[9979] = 8192,
[9980] = 8192,
[9981] = 8192,
[9982] = 8192,
[9983] = 8192,
[9984] = 8192,
[9985] = 8192,
[9986] = 8192,
[9987] = 8192,
[9988] = 8192,
[9989] = 8192,
[10045] = 8192,
[10046] = 8192,
[10047] = 8192,
[10048] = 8192,
[10049] = 8192,
[10050] = 8192,
[10051] = 8192,
[10052] = 8192,
[10053] = 8192,
[10054] = 8192,
[10055] = 8192,
[10056] = 8192,
[10057] = 8192,
[10058] = 8192,
[10059] = 8192,
[10060] = 8192,
[10061] = 8192,
[10062] = 8192,
[10063] = 8192,
[10076] = 2,
[10085] = 8192,
[10118] = 6,
[10181] = 2,
[10260] = 2,
[10296] = 0,
[10299] = 0,
[10370] = 16,
[10378] = 9,
[10540] = 0,
[10583] = 8,
[10665] = 2,
[10666] = 2,
[10740] = 2,
[10776] = 1,
[10897] = 8,
[10917] = 2,
[10931] = 2,
[10941] = 2,
[11064] = 3,
[11069] = 8192,
[11073] = 16,
[11079] = 2,
[11104] = 8192,
[11105] = 8192,
[11117] = 8192,
[11119] = 8192,
[11138] = 8,
[11139] = 8,
[11176] = 3,
[11194] = 2,
[11277] = 0,
[11278] = 5,
[11279] = 0,
[11281] = 0,
[11286] = 2,
[11316] = 0,
[11390] = 0,
[11470] = 0,
[11486] = 0,
[11491] = 1,
[11555] = 6,
[11625] = 2,
[11626] = 2,
[11627] = 0,
[11696] = 2,
[11701] = 0,
[11832] = 2,
[11899] = 8,
[11900] = 8,
[11901] = 8,
[11948] = 2,
[11949] = 2,
[12096] = 6,
[12144] = 0,
[12246] = 4,
[12338] = 0,
[12577] = 8,
[12578] = 8,
[12596] = 8,
[12616] = 8,
[12617] = 8,
[12636] = 8,
[12740] = 8,
[12776] = 7,
[12777] = 4,
[12782] = 4,
[12792] = 4,
[12807] = 7,
[13018] = 6,
[13076] = 0,
[13088] = 0,
[13089] = 0,
[13097] = 0,
[13176] = 2,
[13177] = 8,
[13256] = 0,
[13257] = 2,
[13316] = 0,
[13429] = 7,
[13431] = 7,
[13437] = 2,
[13438] = 2,
[13439] = 2,
[13442] = 2,
[13443] = 0,
[13444] = 2,
[13447] = 2,
[13577] = 2,
[13616] = 8194,
[13617] = 8194,
[14321] = 1,
[14323] = 1,
[14337] = 16389,
[14338] = 2,
[14351] = 0,
[14353] = 0,
[14358] = 2,
[14368] = 2,
[14369] = 0,
[14371] = 4,
[14381] = 2,
[14382] = 2,
[14383] = 2,
[14395] = 0,
[14401] = 1,
[14450] = 6,
[14522] = 4,
[14581] = 4,
[14624] = 16391,
[14625] = 2,
[14637] = 6,
[14753] = 16390,
[14754] = 16390,
[14774] = 0,
[14776] = 0,
[14871] = 1,
[15077] = 2,
[15126] = 16390,
[15127] = 16390,
[15131] = 8192,
[15165] = 2,
[15177] = 9,
[15178] = 9,
[15199] = 7,
[15293] = 4,
[15350] = 3,
[15351] = 3,
[15354] = 5,
[15362] = 3,
[15378] = 2,
[15379] = 2,
[15380] = 2,
[15458] = 1,
[15459] = 3,
[15460] = 3,
[15469] = 3,
[15471] = 7,
[15477] = 3,
[15508] = 3,
[15512] = 3,
[15515] = 3,
[15522] = 3,
[15525] = 3,
[15528] = 3,
[15529] = 3,
[15532] = 3,
[15533] = 3,
[15534] = 3,
[15535] = 3,
[15589] = 2,
[15609] = 3,
[15610] = 3,
[15611] = 3,
[15700] = 3,
[15702] = 3,
[15703] = 3,
[15704] = 3,
[15707] = 3,
[15736] = 3,
[15737] = 3,
[15738] = 3,
[15739] = 3,
[16002] = 2,
[16031] = 2,
[16032] = 2,
[16033] = 3,
[16094] = 8192,
[16227] = 8,
[16230] = 1,
[16285] = 1,
[16359] = 1,
[16365] = 3,
[16376] = 16391,
[16384] = 1,
[16395] = 1,
[16431] = 3,
[16433] = 1,
[16434] = 1,
[16435] = 1,
[16436] = 1,
[16439] = 1,
[16478] = 3,
[16484] = 3,
[16531] = 3,
[16543] = 4,
[16786] = 2,
[16787] = 0
}
-- npcFlags table update
for id, flags in pairs(npcsToUpdate) do
if QuestieDB.npcData[id] then
QuestieDB.npcData[id][QuestieDB.npcKeys.npcFlags] = flags
end
end
end
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
File diff suppressed because it is too large Load Diff
+211
View File
@@ -0,0 +1,211 @@
---@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
+436
View File
@@ -0,0 +1,436 @@
---@class QuestieCorrections
local QuestieCorrections = QuestieLoader:CreateModule("QuestieCorrections")
---@type QuestieDB
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
---@type ZoneDB
local ZoneDB = QuestieLoader:ImportModule("ZoneDB")
---@type QuestieLib
local QuestieLib = QuestieLoader:ImportModule("QuestieLib")
---@type RamerDouglasPeucker
local RamerDouglasPeucker = QuestieLoader:ImportModule("RamerDouglasPeucker")
---@type QuestieEvent
local QuestieEvent = QuestieLoader:ImportModule("QuestieEvent")
---@type QuestieQuestBlacklist
local QuestieQuestBlacklist = QuestieLoader:ImportModule("QuestieQuestBlacklist")
---@type QuestieNPCBlacklist
local QuestieNPCBlacklist = QuestieLoader:ImportModule("QuestieNPCBlacklist")
---@type QuestieItemBlacklist
local QuestieItemBlacklist = QuestieLoader:ImportModule("QuestieItemBlacklist")
---@type HardcoreBlacklist
local HardcoreBlacklist = QuestieLoader:ImportModule("HardcoreBlacklist")
---@type SeasonOfDiscovery
local SeasonOfDiscovery = QuestieLoader:ImportModule("SeasonOfDiscovery")
---@type QuestieQuestFixes
local QuestieQuestFixes = QuestieLoader:ImportModule("QuestieQuestFixes")
---@type QuestieClassicQuestReputationFixes
local QuestieClassicQuestReputationFixes = QuestieLoader:ImportModule("QuestieClassicQuestReputationFixes")
---@type QuestieNPCFixes
local QuestieNPCFixes = QuestieLoader:ImportModule("QuestieNPCFixes")
---@type QuestieItemFixes
local QuestieItemFixes = QuestieLoader:ImportModule("QuestieItemFixes")
---@type QuestieObjectFixes
local QuestieObjectFixes = QuestieLoader:ImportModule("QuestieObjectFixes")
---@type QuestieTBCQuestFixes
local QuestieTBCQuestFixes = QuestieLoader:ImportModule("QuestieTBCQuestFixes")
---@type QuestieTBCNpcFixes
local QuestieTBCNpcFixes = QuestieLoader:ImportModule("QuestieTBCNpcFixes")
---@type QuestieTBCItemFixes
local QuestieTBCItemFixes = QuestieLoader:ImportModule("QuestieTBCItemFixes")
---@type QuestieTBCObjectFixes
local QuestieTBCObjectFixes = QuestieLoader:ImportModule("QuestieTBCObjectFixes")
---@type QuestieWotlkQuestFixes
local QuestieWotlkQuestFixes = QuestieLoader:ImportModule("QuestieWotlkQuestFixes")
---@type QuestieWotlkNpcFixes
local QuestieWotlkNpcFixes = QuestieLoader:ImportModule("QuestieWotlkNpcFixes")
---@type QuestieWotlkItemFixes
local QuestieWotlkItemFixes = QuestieLoader:ImportModule("QuestieWotlkItemFixes")
---@type QuestieWotlkObjectFixes
local QuestieWotlkObjectFixes = QuestieLoader:ImportModule("QuestieWotlkObjectFixes")
---@type IsleOfQuelDanas
local IsleOfQuelDanas = QuestieLoader:ImportModule("IsleOfQuelDanas")
--- Automatic corrections
local QuestieItemStartFixes = QuestieLoader:ImportModule("QuestieItemStartFixes")
--- COMPATIBILITY ---
local C_Timer = QuestieCompat.C_Timer
--[[
This file load the corrections of the database files.
It is a separate file so we can upstream those changes easier to cmangos and can still
update the database files with a script.
Most of the corrections can be done by accessing a specific key instead of copying the
whole object over and change it.
You can find the keys at the beginning of each file (e.g. 'questKeys' are at the beginning of 'questDB.lua').
Further information on how to use this can be found at the wiki
https://github.com/Questie/Questie/wiki/Corrections
--]]
-- flags that can be used in corrections (currently only blacklists)
QuestieCorrections.TBC_ONLY = 1 -- Hide only in TBC
QuestieCorrections.CLASSIC_ONLY = 2 -- Hide only in Classic
QuestieCorrections.WOTLK_ONLY = 3 -- Hide only in 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.killCreditObjectiveFirst = {} -- Only used for TBC quests
-- this function filters a table of values, if the value is TBC_ONLY or CLASSIC_ONLY, set it to true or nil if that case is met
---@generic T
---@param values T
---@return T
local function filterExpansion(values)
local isClassic = Questie.IsClassic
local isTBC = Questie.IsTBC
local isWotlk = Questie.IsWotlk
local isSoD = Questie.IsSoD
for k, v in pairs(values) do
if v == QuestieCorrections.WOTLK_ONLY then
if isWotlk then
values[k] = true
else
values[k] = nil
end
elseif v == QuestieCorrections.TBC_ONLY then
if isTBC then
values[k] = true
else
values[k] = nil
end
elseif v == QuestieCorrections.CLASSIC_ONLY then
if isTBC or isWotlk then
values[k] = nil
else
values[k] = true
end
elseif v == QuestieCorrections.TBC_AND_WOTLK then
if isTBC or isWotlk then
values[k] = true
else
values[k] = nil
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
if isClassic or isTBC then
values[k] = true
else
values[k] = nil
end
end
end
return values
end
do
local type, assert = type, assert
--- Add runtime overrides for the database
---@param override_table table<number, table<number, string|table|number>>
---@param new_overrides table<number, table<number, string|table|number>>
local function addOverride(override_table, new_overrides)
assert(type(override_table) == "table", "Override table must be a table!")
assert(type(new_overrides) == "table", "New overrides must be a table!")
for id, data in pairs(new_overrides) do
assert(type(id) == "number", "Override id must be a number!")
assert(type(data) == "table", "Override data must be a table!")
-- If no override exist assign it
if not override_table[id] then
override_table[id] = data
else
-- Override already exists, merge the new data
for key, value in pairs(data) do
override_table[id][key] = value
end
end
end
end
function QuestieCorrections:MinimalInit() -- db already compiled
-- Classic Era Corrections
addOverride(QuestieDB.itemDataOverrides, QuestieItemFixes:LoadFactionFixes())
addOverride(QuestieDB.npcDataOverrides, QuestieNPCFixes:LoadFactionFixes())
addOverride(QuestieDB.objectDataOverrides, QuestieObjectFixes:LoadFactionFixes())
addOverride(QuestieDB.questDataOverrides, QuestieQuestFixes:LoadFactionFixes())
-- TBC Corrections
if (Questie.IsTBC or Questie.IsWotlk) then
addOverride(QuestieDB.itemDataOverrides, QuestieTBCItemFixes:LoadFactionFixes())
addOverride(QuestieDB.npcDataOverrides, QuestieTBCNpcFixes:LoadFactionFixes())
addOverride(QuestieDB.objectDataOverrides, QuestieTBCObjectFixes:LoadFactionFixes())
addOverride(QuestieDB.questDataOverrides, QuestieTBCQuestFixes:LoadFactionFixes())
end
-- WOTLK Corrections
if (Questie.IsWotlk) then
addOverride(QuestieDB.npcDataOverrides, QuestieWotlkNpcFixes:LoadFactionFixes())
addOverride(QuestieDB.itemDataOverrides, QuestieWotlkItemFixes:LoadFactionFixes())
addOverride(QuestieDB.objectDataOverrides, QuestieWotlkObjectFixes:LoadFactionFixes())
end
-- Season of Discovery Corrections
if Questie.IsSoD then
addOverride(QuestieDB.questDataOverrides, SeasonOfDiscovery:LoadFactionQuestFixes())
end
QuestieCorrections.questItemBlacklist = filterExpansion(QuestieItemBlacklist:Load())
QuestieCorrections.questNPCBlacklist = filterExpansion(QuestieNPCBlacklist:Load())
QuestieCorrections.hiddenQuests = filterExpansion(QuestieQuestBlacklist:Load())
-- TBC Quel Danas Blacklist
if Questie.db.global.isleOfQuelDanasPhase == IsleOfQuelDanas.MAX_ISLE_OF_QUEL_DANAS_PHASES then
for id, hide in pairs(IsleOfQuelDanas.quests[Questie.db.global.isleOfQuelDanasPhase]) do
-- This has to be a nil-check, because the value could be false
if (QuestieCorrections.hiddenQuests[id] == nil) then
QuestieCorrections.hiddenQuests[id] = hide
end
end
end
-- Wotlk Blacklist
if (Questie.IsWotlk) then
-- We only add blacklist if no blacklist entry for the quest already exists
for id, hide in pairs(QuestieQuestBlacklist.LoadAutoBlacklistWotlk()) do
-- This has to be a nil-check, because the value could be false
if (QuestieCorrections.hiddenQuests[id] == nil) then
QuestieCorrections.hiddenQuests[id] = hide
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 Questie.db.profile.showEventQuests then
C_Timer.After(1, function()
-- This is done with a delay because on startup the Blizzard API seems to be
-- very slow and therefore the date calculation in QuestieEvents isn't done
-- correctly.
QuestieEvent:Load()
end)
end
end
end
---@param databaseTableName string The name of the QuestieDB field that should be manipulated (e.g. "itemData", "questData")
---@param corrections table All corrections for the given databaseTableName (e.g. all quest corrections)
---@param reversedKeys table The reverted QuestieDB keys for the given databaseTableName (e.g. QuestieDB.questKeys)
---@param validationTables table Only used by the CI validation scripts to validate the corrections against the original database values and find irrelevant corrections
---@param noOverwrites true? Do not overwrite existing values
---@param noNewEntries true? Do not create new entries in the database
local _LoadCorrections = function(databaseTableName, corrections, reversedKeys, validationTables, noOverwrites, noNewEntries)
for id, data in pairs(corrections) do
for key, value in pairs(data) do
-- Create the id if missing unless noNewEntries is set
if not QuestieDB[databaseTableName][id] and not noNewEntries then
QuestieDB[databaseTableName][id] = {}
end
if validationTables and QuestieDB[databaseTableName][id] then
if value and QuestieLib.equals(QuestieDB[databaseTableName][id][key], value) and validationTables[databaseTableName][id] and
QuestieLib.equals(validationTables[databaseTableName][id][key], value) then
Questie:Warning("Correction of " ..
databaseTableName .. " " .. tostring(id) .. "." .. reversedKeys[key] .. " matches base DB! Value:" .. tostring(value))
end
end
if QuestieDB[databaseTableName][id] then
if noOverwrites and QuestieDB[databaseTableName][id][key] == nil then
QuestieDB[databaseTableName][id][key] = value
elseif not noOverwrites then
QuestieDB[databaseTableName][id][key] = value
end
end
end
end
end
---@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)
QuestieQuestFixes:LoadMissingQuests()
-- Classic Corrections
_LoadCorrections("questData", QuestieClassicQuestReputationFixes:Load(), QuestieDB.questKeysReversed, validationTables)
_LoadCorrections("questData", QuestieQuestFixes:Load(), QuestieDB.questKeysReversed, validationTables)
_LoadCorrections("npcData", QuestieNPCFixes:Load(), QuestieDB.npcKeysReversed, validationTables)
_LoadCorrections("itemData", QuestieItemFixes:Load(), QuestieDB.itemKeysReversed, validationTables)
_LoadCorrections("objectData", QuestieObjectFixes:Load(), QuestieDB.objectKeysReversed, validationTables)
if Questie.IsTBC or Questie.IsWotlk then
_LoadCorrections("questData", QuestieTBCQuestFixes:Load(), QuestieDB.questKeysReversed, validationTables)
_LoadCorrections("npcData", QuestieTBCNpcFixes:Load(), QuestieDB.npcKeysReversed, validationTables)
_LoadCorrections("itemData", QuestieTBCItemFixes:Load(), QuestieDB.itemKeysReversed, validationTables)
_LoadCorrections("objectData", QuestieTBCObjectFixes:Load(), QuestieDB.objectKeysReversed, validationTables)
end
if Questie.IsWotlk then
_LoadCorrections("questData", QuestieWotlkQuestFixes:Load(), QuestieDB.questKeysReversed, validationTables)
_LoadCorrections("npcData", QuestieWotlkNpcFixes:LoadAutomatics(), QuestieDB.npcKeysReversed, validationTables)
_LoadCorrections("npcData", QuestieWotlkNpcFixes:Load(), QuestieDB.npcKeysReversed, validationTables)
_LoadCorrections("itemData", QuestieWotlkItemFixes:Load(), QuestieDB.itemKeysReversed, validationTables)
_LoadCorrections("objectData", QuestieWotlkObjectFixes:Load(), QuestieDB.objectKeysReversed, validationTables)
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
--- Corrections that apply to all versions
_LoadCorrections("itemData", QuestieItemStartFixes:LoadAutomaticQuestStarts(), QuestieDB.itemKeysReversed, validationTables, true, true)
if QuestieCompat.Is335 then QuestieCompat.LoadCorrections(_LoadCorrections, validationTables) end
local patchCount = 0
for _, quest in pairs(QuestieDB.questData) do
if (not quest[QuestieDB.questKeys.requiredRaces]) or quest[QuestieDB.questKeys.requiredRaces] == 0 then
-- check against questgiver
local canHorde = false
local canAlliance = false
local starts = quest[QuestieDB.questKeys.startedBy]
if starts then
starts = starts[1]
if starts then
for _, id in pairs(starts) do
local npc = QuestieDB.npcData[id]
if npc then
local friendly = npc[QuestieDB.npcKeys.friendlyToFaction]
if friendly then
if friendly == "H" then
canHorde = true
elseif friendly == "A" then
canAlliance = true
elseif friendly == "AH" then
canAlliance = true
canHorde = true
end
end
end
end
end
if canAlliance ~= canHorde then
patchCount = patchCount + 1
if canAlliance then
quest[QuestieDB.questKeys.requiredRaces] = QuestieDB.raceKeys.ALL_ALLIANCE
else
quest[QuestieDB.questKeys.requiredRaces] = QuestieDB.raceKeys.ALL_HORDE
end
end
end
end
end
QuestieCorrections:MinimalInit()
end
local WAYPOINT_MIN_DISTANCE = 1.5 -- todo: make this a config value maybe?
local ZONE_SCALES = {
[ZoneDB.zoneIDs.STORMWIND_CITY] = 0.5,
[ZoneDB.zoneIDs.IRONFORGE] = 0.5,
[ZoneDB.zoneIDs.TELDRASSIL] = 0.5,
[ZoneDB.zoneIDs.ORGRIMMAR] = 0.5,
[ZoneDB.zoneIDs.THUNDER_BLUFF] = 0.5,
[ZoneDB.zoneIDs.UNDERCITY] = 0.5,
}
local abs, sqrt = math.abs, math.sqrt
local function euclid(x, y, i, e)
local xd = abs(x - i)
local yd = abs(y - e)
return sqrt(xd * xd + yd * yd)
end
function QuestieCorrections:OptimizeWaypoints(waypointData)
local newWaypointZones = {}
for zone, waypointList in pairs(waypointData) do
local newWaypointList = {}
if waypointList[1] and type(waypointList[1][1]) == "number" then
waypointList = {waypointList} -- corrections support both {{x,y}, ...} and {{{x,y}, ...}, {{x,y}, ...}, ...}
end
for _, waypoints in pairs(waypointList) do
-- apply RDP algorithm
local minDist = WAYPOINT_MIN_DISTANCE * (ZONE_SCALES[zone] or 1)
local newWaypoints = RamerDouglasPeucker(waypoints, 0.1, true)
waypoints = newWaypoints
newWaypoints = {}
-- subdivide waypoints where needed
-- We do this because the clickable area of waypoint lines can only be a square, so lines need to be broken up in some places
local lastWay
for _, way in pairs(waypoints) do
if lastWay then
local dist = euclid(way[1], way[2], lastWay[1], lastWay[2])
if dist > minDist then
local divs = math.ceil(dist/minDist)
for i=1,divs do
local mul0 = i/divs
local mul1 = 1-mul0
newWaypoints[#newWaypoints+1] = {way[1] * mul0 + lastWay[1] * mul1, way[2] * mul0 + lastWay[2] * mul1}
end
else
newWaypoints[#newWaypoints+1] = way
end
else
newWaypoints[#newWaypoints+1] = way
end
lastWay = way
end
newWaypointList[#newWaypointList+1] = newWaypoints
end
newWaypointZones[zone] = newWaypointList
end
return newWaypointZones
end
function QuestieCorrections:PreCompile() -- this happens only if we are about to compile the database. Run intensive preprocessing tasks here (like ramer-douglas-peucker)
local waypointKey = QuestieDB.npcKeys["waypoints"]
local npcData = QuestieDB.npcData
local count = 0
for id, data in pairs(npcData) do
local way = data[waypointKey]
if way then
npcData[id][waypointKey] = QuestieCorrections:OptimizeWaypoints(way)
end
if count > 500 then -- 500 seems like a good number
count = 0
coroutine.yield()
end
count = count + 1
end
end
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,228 @@
---@class QuestieItemBlacklist
local QuestieItemBlacklist = QuestieLoader:CreateModule("QuestieItemBlacklist")
---@return table<ItemId, boolean>
function QuestieItemBlacklist:Load()
return {
[765] = true, -- silverleaf
[774] = true, -- malachite
[785] = true, -- mageroyal
[929] = true, -- Healing Potion
[1179] = true, -- ice cold milk
[1206] = true, -- moss agate
[1210] = true, -- shadowgem
[1529] = true, -- jade
[1705] = true, -- lesser moonstone
[2447] = true, -- peacebloom
[2449] = true, -- earthroot
[2450] = true, -- briarthorn
[2452] = true, -- swiftthistle
[2453] = true, -- bruiseweed
[2455] = true, -- Minor Mana Potion
[2589] = true, -- linen cloth
[2592] = true, -- wool cloth
[2842] = true, -- Silver Bar
[2997] = true, -- bolt of wool
[3355] = true, -- wild steelbloom
[3356] = true, -- kingsblood
[3357] = true, -- liferoot
[3358] = true, -- khadgar's whisker
[3369] = true, -- grave moss
[3818] = true, -- fadeleaf
[3819] = true, -- wintersbite
[3820] = true, -- stranglekelp
[3821] = true, -- goldthorn
[3864] = true, -- citrine
[4306] = true, -- silk cloth
[4338] = true, -- mageweave
[4625] = true, -- firebloom
[5056] = true, -- root sample
[7079] = true, -- globe of water
[7909] = true, -- aquamarine
[7910] = true, -- star ruby
[8153] = true, -- wildvine
[8244] = true, -- flawless-draenethyst-sphere
[8831] = true, -- purple lotus
[8836] = true, -- arthas tears
[8838] = true, -- sungrass
[8839] = true, -- blindweed
[8845] = true, -- ghost mushroom
[8846] = true, -- gromsblood
[8932] = true, -- Alterac Swiss
[8956] = true, -- Oil of Immolation
[9061] = true, -- Goblin Rocket Fuel
[10561] = true, -- Mithril Casing
[10593] = true, -- imperfect-draenethyst-fragment
[11178] = true, -- Large Radiant Shard
[12207] = true, -- giant egg
[12361] = true, -- blue sapphire
[12363] = true, -- arcane crystal
[12364] = true, -- huge emerald
[12799] = true, -- large opal
[12800] = true, -- azerothian diamond
[13422] = true, -- stonescale-eel
[13444] = true, -- major mana potion
[13446] = true, -- Major Healing Potion
[13461] = true, -- Greater Arcane Protection Potion
[13463] = true, -- dreamfoil
[13464] = true, -- golden sansam
[13465] = true, -- mountain silversage
[13466] = true, -- plaguebloom
[13467] = true, -- icecap
[13468] = true, -- black lotus
[13757] = true, -- Lightning Eel
[14047] = true, -- runecloth
[14048] = true, -- bolt of runecloth
[14227] = true, -- Ironweb Spider Silk
[14344] = true, -- large brilliant shard
[14530] = true, -- Heavy Runecloth Bandage
[15992] = true, -- Dense Blasting Powder
[18335] = true, -- Pristine Black Diamond
[19440] = true, -- Powerful Anti-Venom
[20452] = true, -- Smoked Desert Dumplings
-- stranglethorn pages
[2725] = true,
[2728] = true,
[2730] = true,
[2732] = true,
[2734] = true,
[2735] = true,
[2738] = true,
[2740] = true,
[2742] = true,
[2744] = true,
[2745] = true,
[2748] = true,
[2749] = true,
[2750] = true,
[2751] = true,
-- shredder operating manual
[16645] = true,
[16646] = true,
[16647] = true,
[16648] = true,
[16649] = true,
[16650] = true,
[16651] = true,
[16652] = true,
[16653] = true,
[16654] = true,
[16655] = true,
[16656] = true,
--zul'gurub coins and bijous
[19698] = true,
[19699] = true,
[19700] = true,
[19701] = true,
[19702] = true,
[19703] = true,
[19704] = true,
[19705] = true,
[19706] = true,
[19707] = true,
[19708] = true,
[19709] = true,
[19710] = true,
[19711] = true,
[19712] = true,
[19713] = true,
[19714] = true,
[19715] = true,
--ahn'qiraj scarabs and idols
[20858] = true,
[20859] = true,
[20860] = true,
[20861] = true,
[20862] = true,
[20863] = true,
[20864] = true,
[20865] = true,
[20866] = true,
[20867] = true,
[20868] = true,
[20869] = true,
[20870] = true,
[20871] = true,
[20872] = true,
[20873] = true,
[20874] = true,
[20875] = true,
[20876] = true,
[20877] = true,
[20878] = true,
[20879] = true,
[20889] = true,
--Tier 0.5 & Phase 5
[4265] = true, -- Heavy Armor Kit
[15564] = true, -- Rugged Armor Kit
[16671] = true, -- Bindings of Elements
[16673] = true, -- Cord of Elements
[16680] = true, -- Beaststalker's Belt
[16681] = true, -- Beaststalker's Bindings
[16683] = true, -- Magister's Bindings
[16685] = true, -- Magister's Belt
[16696] = true, -- Devout Belt
[16697] = true, -- Devout Bracers
[16702] = true, -- Dreadmist Belt
[16703] = true, -- Dreadmist Bracers
[16705] = true, -- Dreadmist Wraps
[16710] = true, -- Shadowcraft Bracers
[16713] = true, -- Shadowcraft Belt
[16714] = true, -- Wildheart Bracers
[16716] = true, -- Wildheart Belt
[16722] = true, -- Lightforge Bracers
[16723] = true, -- Lightforge Belt
[16735] = true, -- Bracers of Valor
[16736] = true, -- Belt of Valor
[20520] = true, -- Dark Rune
-- Phase 6
[12811] = true, -- righteous orb
[22525] = true, -- crypt fiend parts
[22526] = true, -- bone fragments
[22527] = true, -- core of elements
[22528] = true, -- dark iron scraps
[22529] = true, -- savage frond
-- TBC Phase 1
[21887] = true, -- Knothide Leather
[22445] = true, -- Arcane Dust
[22572] = true, -- Mote of Air
[22573] = true, -- Mote of Earth
[22574] = true, -- Mote of Fire
[22575] = true, -- Mote of Life
[22576] = true, -- Mote of Mana
[22577] = true, -- Mote of Shadow
[22578] = true, -- Mote of Water
[22786] = true, -- Dreaming Glory
[22790] = true, -- Ancient Lichen
[22829] = true, -- Super Healing Potion
[22832] = true, -- Super Mana Potion
[23445] = true, -- Fel Iron Bar
[23793] = true, -- Heavy Knothide Leather
[24246] = true, -- Sanguine Hibiscus
[24368] = true, -- Coilfang Armaments
[24401] = true, -- Unidentified Plant Parts
[26042] = true, -- Oshu'gun Crystal Powder Sample
[26043] = true, -- Oshu'gun Crystal Powder Sample
[29425] = true, -- Mark of Kiljaeden
[29426] = true, -- Firewing Signet
[29460] = true, -- Ethereum Prison Key
[29739] = true, -- Arcane Tome
[29740] = true, -- Fel Armament
[30809] = true, -- Mark of Sargeras
[30810] = true, -- Sunfury Signet
[32569] = true, -- Apexis Shard
-- Wrath of the Lich King : Phase 1
[33470] = true, -- Frostweave Cloth
[42780] = true, -- Relic of Ulduar
[43013] = true, -- Chilled Meat
}
end
@@ -0,0 +1,23 @@
---@class QuestieNPCBlacklist
local QuestieNPCBlacklist = QuestieLoader:CreateModule("QuestieNPCBlacklist")
---@type QuestieCorrections
local QuestieCorrections = QuestieLoader:ImportModule("QuestieCorrections")
---@return table<NpcId, boolean>
function QuestieNPCBlacklist:Load()
return {
[8001] = true,
[13151] = QuestieCorrections.CLASSIC_ONLY, -- Syndicate Master Ryson
[13153] = QuestieCorrections.CLASSIC_ONLY, -- Commander Mulfort
[13154] = QuestieCorrections.CLASSIC_ONLY, -- Commander Louis Philips
[13319] = QuestieCorrections.CLASSIC_ONLY, -- Commander Duffy
[13320] = QuestieCorrections.CLASSIC_ONLY, -- Commander Karl Philips
[13377] = QuestieCorrections.CLASSIC_ONLY, -- Master Engineer Zinfizzlex
[13446] = QuestieCorrections.CLASSIC_ONLY, -- Field Marshal Teravaine
[13449] = QuestieCorrections.CLASSIC_ONLY, -- Warmaster Garrick
[15799] = QuestieCorrections.CLASSIC_ONLY, -- Colossus Researcher Eazel (AQ Opening event)
[17544] = true, -- M'uru in Silvermoon City removed starting with SWP patch
[21155] = true, -- Bloodelf War Effort Recruiter
[178420] = QuestieCorrections.WOTLK_ONLY, -- removed in WotLK
}
end
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+532
View File
@@ -0,0 +1,532 @@
---@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
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+400
View File
@@ -0,0 +1,400 @@
---@class QuestieObjectFixes
local QuestieObjectFixes = QuestieLoader:CreateModule("QuestieObjectFixes")
-------------------------
--Import modules.
-------------------------
---@type QuestieDB
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
---@type ZoneDB
local ZoneDB = QuestieLoader:ImportModule("ZoneDB")
-- Further information on how to use this can be found at the wiki
-- https://github.com/Questie/Questie/wiki/Corrections
function QuestieObjectFixes:Load()
local objectKeys = QuestieDB.objectKeys
local zoneIDs = ZoneDB.zoneIDs
return {
[167] = {
[objectKeys.spawns] = {[zoneIDs.DUSKWOOD]={{33.42,76.35}}},
[objectKeys.zoneID] = zoneIDs.DUSKWOOD,
},
[331] = {
[objectKeys.spawns] = {[zoneIDs.WETLANDS]={{32.2,50.8},{32.3,48.4},{32.3,48.6},{32.7,51},{33.2,46.4},{33.3,49},{33.4,47.4},{33.4,47.6},{33.4,51.5},{33.8,48.6},{33.9,46.6},{34.1,49.7},{34.2,47.6},{34.2,50.8},{34.3,45.7},{34.4,44.4},{34.4,44.5},{34.7,52.5},{34.8,50.3},{34.9,47},{35,47.9},{35.1,51.5},{35.2,44.3},{35.2,44.5},{35.2,48.9},{35.2,51.4},{35.4,46.3},{35.5,45},{35.5,46},{35.6,47.9},{36.1,48.8},{36.1,50},{36.4,42.1},{36.6,42.2}}},
},
[333] = {
[objectKeys.spawns] = {[zoneIDs.WETLANDS]={{32.2,50.8},{32.3,48.4},{32.3,48.6},{32.7,51},{33.2,46.4},{33.3,49},{33.4,47.4},{33.4,47.6},{33.4,51.5},{33.8,48.6},{33.9,46.6},{34.1,49.7},{34.2,47.6},{34.2,50.8},{34.3,45.7},{34.4,44.4},{34.4,44.5},{34.7,52.5},{34.8,50.3},{34.9,47},{35,47.9},{35.1,51.5},{35.2,44.3},{35.2,44.5},{35.2,48.9},{35.2,51.4},{35.4,46.3},{35.5,45},{35.5,46},{35.6,47.9},{36.1,48.8},{36.1,50},{36.4,42.1},{36.6,42.2}}},
},
[334] = {
[objectKeys.spawns] = {[zoneIDs.WETLANDS]={{32.2,50.8},{32.3,48.4},{32.3,48.6},{32.7,51},{33.2,46.4},{33.3,49},{33.4,47.4},{33.4,47.6},{33.4,51.5},{33.8,48.6},{33.9,46.6},{34.1,49.7},{34.2,47.6},{34.2,50.8},{34.3,45.7},{34.4,44.4},{34.4,44.5},{34.7,52.5},{34.8,50.3},{34.9,47},{35,47.9},{35.1,51.5},{35.2,44.3},{35.2,44.5},{35.2,48.9},{35.2,51.4},{35.4,46.3},{35.5,45},{35.5,46},{35.6,47.9},{36.1,48.8},{36.1,50},{36.4,42.1},{36.6,42.2}}},
},
[1738] = {
[objectKeys.questStarts] = {510,511},
},
[1739] = {
[objectKeys.questStarts] = {510,511},
},
[2555] = {
[objectKeys.spawns] = {[zoneIDs.DUSTWALLOW_MARSH]={{31.11,66.14}}},
},
[2560] = {
[objectKeys.spawns] = {[zoneIDs.STRANGLETHORN_VALE]={{36.26,70.56},{39.73,77.42},{37.41,64.5},{33.79,77.68},{36.11,80.47},{36.56,77.09},{34.29,73.78}}},
},
[2712] = {
[objectKeys.spawns] = {[zoneIDs.ARATHI_HIGHLANDS]={{18,89},{19,90},{20,85},{21,87},{21,90},{21,92},{22,84},{22,90},{23,84},{23,90},{23,88},{23,89},{23,92},{24,87},{24,88},{24,89},{24,85},{24,86},{25,86},{25,87},{25,89},{25,90},{25,91}}},
},
[2744] = {
[objectKeys.spawns] = {[zoneIDs.STRANGLETHORN_VALE]={{23.6,23.4},{23.6,23.5},{23.7,27.2},{23.7,29.8},{23.8,29.1},{24,25.4},{24,25.5},{24.4,28},{24.8,29.5},{24.9,29.1},{25.2,26.9},{25.3,25},{25.3,26.4},{25.3,27.5},{25.4,22.7},{25.4,24.1},{25.7,22.9},{25.7,25.3},{25.8,24.4},{25.8,28.3},{25.9,29.4},{25.9,30.4},{26.1,30.6},{26.3,26.1},{26.4,27.1},{26.5,29.4},{26.5,29.5},{26.6,24.5},{26.8,30.8},{27.1,23.1},{27.1,26.5},{27.2,26.3},{27.3,24},{27.3,27.9},{27.5,24.2},{27.6,25.6},{27.6,29.2},{27.8,23},{27.8,25.3},{27.8,27.7},{28,26.7}}},
},
[2867] = {
[objectKeys.spawns] = {[zoneIDs.BADLANDS]={{66.6,22}}},
},
[10076] = {
[objectKeys.spawns] = {[zoneIDs.DARKSHORE]={{38.6,86.2}}},
[objectKeys.zoneID] = zoneIDs.DARKSHORE,
},
[19021] = {
[objectKeys.spawns] = {[zoneIDs.ASHENVALE]={{69.04,84.77},{77.03,73.8},{79.08,74.48},{70.53,73.58},{70.68,85.06},{69.29,82.67},{71.29,83.83},{77.97,65.82},{77.38,69.77},{77.06,68.3},{69.87,74.11},{78.3,73.6},{76.22,67.48},{76.62,70.67},{76.77,72.19},{78.31,69.73},{68.24,77.68},{77.68,72.63},{74.77,69.6},{78.26,64.58},{70.72,75.24},{74.23,69.47},{74.36,70.21},{75.88,73.52},{75.87,69.99},{69.89,85.32},{74.34,77.92},{70.1,76.08},{74.58,77.19},{74.67,75.39},{76.67,68.46},{68.94,84.86},{74.41,73.38},{74.46,75.56},{73.09,73.23},{71.04,73.8},{71.45,76.97},{73.68,76.95},{72.63,76.86},{70.77,75.99},{72.51,75.12}}},
[objectKeys.zoneID] = zoneIDs.ASHENVALE,
},
[19869] = {
[objectKeys.spawns] = {[zoneIDs.THOUSAND_NEEDLES]={{88.42,81.04},{87.27,73.47},{86.89,70.01},{87.86,76.59},{88.0,79.88},{83.75,86.66},{88.22,65.57},{78.4,89.97},{76.31,89.51},{75.39,56.37},{71.01,56.34},{69.6,61.3},{69.9,59},{70,78.4},{70,78.5},{70.1,60.2},{70.1,61.8},{70.1,63.1},{70.1,64.2},{70.2,57.2},{70.2,58},{70.3,66.2},{70.5,59.1},{70.6,77.1},{70.9,79.1},{71,56.4},{71,74.4},{71,74.5},{71.1,72},{71.4,57},{71.4,64.4},{71.4,64.5},{71.6,64.4},{71.6,64.5},{71.6,66.7},{71.6,78},{71.7,68.4},{71.7,68.7},{71.7,80.1},{72.3,56.5},{72.3,62.8},{72.3,70.3},{72.3,76.9},{72.4,56.4},{72.4,72.3},{72.4,74.4},{72.4,74.6},{72.4,80.7},{72.5,72.2},{72.5,72.5},{72.5,80.7},{73.1,55.6},{73.1,59.8},{73.2,55.4},{73.2,68.5},{73.4,57.9},{73.5,57.9},{74,61.1},{74.2,63.7},{74.4,55.4},{74.5,55.4},{74.6,59.6},{75.3,54},{75.4,56.2},{75.4,56.5},{75.5,54},{75.5,56.4},{75.9,55.3},{76.2,86.9},{76.3,89.4},{76.3,89.6},{76.8,84.3},{76.8,85.1},{77,53.2},{77.3,86.4},{77.3,86.5},{77.4,90.4},{77.4,90.5},{77.5,90.6},{77.6,54.1},{77.7,51.8},{77.9,84.2},{77.9,85.3},{78,85.5},{78.3,53},{78.4,55.1},{78.4,89.8},{78.5,90},{79,54.1},{79.2,56.2},{79.4,85.3},{79.4,85.5},{79.4,86.7},{79.5,59},{79.5,85.3},{79.8,55.1},{80,87.9},{80.7,54.3},{80.7,56.3},{80.7,89},{81.4,86.3},{81.5,86.3},{81.9,87.2},{81.9,87.5},{82.2,56.2},{82.2,90},{82.8,85.4},{82.8,85.5},{82.8,87.9},{82.9,55.3},{82.9,64.7},{83.6,56.3},{83.7,86.6},{85.3,58.4},{85.3,58.5},{85.6,61.6},{85.7,61.4},{85.8,62.5},{85.9,57.4},{86,59.7},{86.2,68.6},{86.2,74.4},{86.2,74.6},{86.6,63.5},{86.6,64.7},{86.7,58.3},{86.7,58.5},{86.7,63.4},{86.8,60.9},{86.8,67.9},{86.9,70.1},{86.9,72.3},{87,75.4},{87.1,75.5},{87.2,73.5},{87.3,66.9},{87.3,73.4},{87.6,62.9},{87.6,71.3},{87.7,78},{87.8,76.5},{87.9,60.9},{88,80},{88.1,67.8},{88.2,65.4},{88.2,65.7},{88.2,74.9},{88.4,80.9},{88.6,76.8},{88.8,66.4},{88.8,66.6}}},
},
[19870] = {
[objectKeys.spawns] = {[zoneIDs.THOUSAND_NEEDLES]={{87.75,78.07},{88.18,67.74},{85.64,61.5},{79.38,85.41},{77.96,85.39},{78.35,55.15},{73.44,57.79},{73.97,61.17},{70.6,59.13},{72.34,62.76},{69.7,61.1},{69.9,59},{70,63.1},{70,78.4},{70,78.5},{70.1,64.4},{70.1,64.5},{70.2,60.1},{70.2,62},{70.3,57.1},{70.3,58},{70.3,66.3},{70.5,59.2},{70.7,76.9},{70.8,79.2},{71,56.4},{71,71.9},{71,74.4},{71,74.6},{71.4,57},{71.4,64.4},{71.4,64.5},{71.5,64.4},{71.5,64.5},{71.6,66.5},{71.6,78.2},{71.6,80},{71.7,68.5},{72.3,56.6},{72.3,70.2},{72.3,74.4},{72.3,76.7},{72.4,56.4},{72.4,62.7},{72.4,74.6},{72.5,72.4},{72.5,80.7},{73.1,55.4},{73.1,59.6},{73.2,55.6},{73.2,68.7},{73.4,57.8},{73.5,57.7},{74,61.1},{74.2,63.7},{74.4,55.3},{74.5,55.4},{74.7,59.7},{75.4,54},{75.4,56.3},{75.5,53.9},{76,55.3},{76.1,87},{76.2,89.5},{76.3,89.4},{76.8,84.3},{76.8,85.1},{77,53.2},{77.3,86.5},{77.4,86.4},{77.4,90.4},{77.4,90.6},{77.5,54},{77.5,90.4},{77.5,90.5},{77.6,51.8},{77.8,84.3},{77.9,85.5},{78,85.3},{78.3,53},{78.4,55.2},{79.1,54.1},{79.3,56.2},{79.3,86.5},{79.4,85.3},{79.4,85.5},{79.5,59.1},{79.8,55.3},{79.9,88},{80.7,54.2},{80.7,56.3},{80.8,89.2},{81.4,86.2},{81.5,86.3},{81.9,87.3},{81.9,87.5},{82.2,56.2},{82.3,90},{82.8,55.3},{82.8,85.4},{82.8,85.5},{82.8,87.9},{82.9,64.6},{83.6,56.2},{83.7,86.6},{85.3,58.4},{85.3,58.5},{85.6,61.4},{85.7,61.5},{85.7,62.5},{85.9,57.4},{86,59.7},{86.1,68.7},{86.1,74.4},{86.2,74.5},{86.6,63.3},{86.6,63.5},{86.6,64.7},{86.7,58.4},{86.7,58.5},{86.7,60.9},{86.8,67.9},{86.9,70.1},{86.9,72.3},{87,75.4},{87.1,75.5},{87.2,73.5},{87.3,66.9},{87.3,73.4},{87.5,71.3},{87.6,62.9},{87.8,78},{87.9,60.9},{87.9,76.5},{88,79.8},{88.1,67.8},{88.3,65.6},{88.3,75.1},{88.4,81},{88.6,76.8},{88.8,66.4},{88.8,66.5}}},
},
[21015] = {
[objectKeys.spawns] = {[zoneIDs.DUSTWALLOW_MARSH]={{29.7,47.64}}},
[objectKeys.zoneID] = zoneIDs.DUSTWALLOW_MARSH,
},
[21016] = {
[objectKeys.spawns] = {[zoneIDs.DUSTWALLOW_MARSH]={{29.7,47.64}}},
[objectKeys.zoneID] = zoneIDs.DUSTWALLOW_MARSH,
},
[28604] = {
[objectKeys.spawns] = {[zoneIDs.SWAMP_OF_SORROWS]={{64.09,23.35},{45.82,35.58},{56.92,24.7},{62.27,22.5},{43.29,33.26},{33.64,46.01},{29.7,50.11},{14.19,38.22},{9.7,29.84},{54.39,30.59},{60.03,21.73},{29.91,38.31},{64.89,20.44},{4.64,31.2},{37.09,34.15},{12.8,34.43}}},
},
[35252] = {
[objectKeys.spawns] = {[zoneIDs.WETLANDS]={{32.2,50.8},{32.3,48.4},{32.3,48.6},{32.7,51},{33.2,46.4},{33.3,49},{33.4,47.4},{33.4,47.6},{33.4,51.5},{33.8,48.6},{33.9,46.6},{34.1,49.7},{34.2,47.6},{34.2,50.8},{34.3,45.7},{34.4,44.4},{34.4,44.5},{34.7,52.5},{34.8,50.3},{34.9,47},{35,47.9},{35.1,51.5},{35.2,44.3},{35.2,44.5},{35.2,48.9},{35.2,51.4},{35.4,46.3},{35.5,45},{35.5,46},{35.6,47.9},{36.1,48.8},{36.1,50},{36.4,42.1},{36.6,42.2}}},
},
[92423] = {
[objectKeys.spawns] = {
[zoneIDs.THOUSAND_NEEDLES]={{43.4, 32.7}},
[zoneIDs.THE_BARRENS]={{49.02,96.77}},
},
[objectKeys.zoneID] = zoneIDs.THOUSAND_NEEDLES,
},
[93192] = {
[objectKeys.spawns] = {[zoneIDs.ASHENVALE]={{31.55,31.57}}},
},
[103662] = {
[objectKeys.spawns] = {[zoneIDs.ARATHI_HIGHLANDS]={{52,50.8}}},
[objectKeys.zoneID] = zoneIDs.ARATHI_HIGHLANDS,
},
[105174] = {
[objectKeys.spawns] = {
[zoneIDs.STORMWIND_CITY]={{38.7,79.1}},
[zoneIDs.UNDERCITY]={{85.5,10.2}},
},
},
[112877] = {
[objectKeys.spawns] = {[zoneIDs.ULDAMAN]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.ULDAMAN,
},
[140971] = {
[objectKeys.spawns] = {[zoneIDs.TANARIS]={{36.1,56.4},{36.1,56.5},{36.4,52.3},{36.8,35.2},{37.7,29.6},{38.3,61.9},{38.9,65.8},{38.9,73},{39.1,70.7},{39.4,51.6},{39.7,74.4},{39.9,72.1},{40,31.1},{40.1,47.3},{40.2,73.3},{40.3,68.9},{40.3,77.4},{40.3,77.5},{40.4,74.7},{40.8,39.2},{40.8,43.4},{40.8,43.5},{41,71.6},{41,74.8},{41.1,71.1},{41.4,72.7},{41.5,73.7},{41.7,56.3},{41.9,73.3},{42.1,74.5},{42.2,58.5},{42.8,26.1},{43.1,62.1},{43.2,77.3},{44.2,45.7},{44.8,38.8},{44.8,65.2},{44.9,33.9},{44.9,64.4},{45.1,27},{45.1,52},{45.3,66},{45.6,64.6},{45.8,66.8},{46.1,49.4},{46.1,49.5},{46.1,65.6},{46.2,63.3},{46.2,70.3},{46.4,64.2},{46.5,64.2},{46.9,76.1},{47.1,30.4},{47.1,30.5},{47.1,64.5},{47.1,66},{47.2,67},{47.3,63.4},{47.4,38.4},{47.4,38.5},{47.5,38.4},{47.5,38.5},{47.6,57.2},{47.9,65.8},{48,52.7},{48,64.4},{48,67.4},{48.1,67.5},{48.2,64.7},{48.3,72.8},{48.4,44.4},{48.4,44.5},{48.5,44.4},{48.5,44.5},{48.6,28.7},{49.1,77.3},{49.6,35.9},{49.6,59.2},{49.7,69.1},{50.4,78.5},{50.7,61.1},{51.3,64.1},{52,37.4},{52.1,32.1},{52.3,45.3},{52.4,50.8},{52.9,52.7},{53,44},{53.2,45.2},{53.4,47.7},{53.5,47.6},{53.5,57.8},{53.7,46.2},{53.8,33.3},{54.8,39},{55.6,47.7},{55.6,60},{56.6,35.3},{56.7,52.4},{56.7,52.5},{57.1,47.6},{57.8,28.9},{57.8,57.9},{58.1,24.6},{58.1,48.8}}},
},
[142194] = {
[objectKeys.spawns] = {[zoneIDs.TANARIS]={{54,93}}},
[objectKeys.zoneID] = zoneIDs.TANARIS,
},
[144052] = {
[objectKeys.spawns] = {[zoneIDs.TANARIS]={{39,29}}},
[objectKeys.zoneID] = zoneIDs.TANARIS,
},
[144064] = {
[objectKeys.spawns] = {[zoneIDs.FERALAS]={{74.3,29},{74.6,30.2},{75.1,32.4},{75.1,32.5},{75.3,28.2},{75.3,33.7},{75.5,30.4},{75.5,30.5},{76,29},{76.3,34.4},{76.4,33.1},{76.4,34.5},{76.5,33.1},{76.7,33.8},{76.9,29.7},{77.5,35.1},{78.4,34},{78.5,34},{79.2,34.9},{80.4,34.3},{80.4,36},{80.5,34.2},{81,35.4},{81,35.5},{81.6,35}}}, -- #1160
[objectKeys.zoneID] = zoneIDs.FERALAS,
},
[148513] = {
[objectKeys.spawns] = {[zoneIDs.AZSHARA]={{34,59.9},{34.8,53.3},{35.4,58.5},{35.5,52.3},{35.6,49.6},{35.9,51.2},{36,56.9},{36.3,58.7},{36.3,62.2},{36.4,54},{36.4,60.6},{36.5,54.1},{37.4,60.7},{37.5,60.7},{37.7,52.4},{37.9,56.4},{38,51.3},{38.4,53.4},{38.7,63.3},{39.2,61.4},{39.2,61.6},{39.4,56.5},{39.5,56.5},{39.8,53.4},{39.8,53.5},{39.8,59.7},{40.1,62.4},{40.2,62.5},{40.5,61.1},{40.5,64},{41,55},{41.2,62},{42.2,64.6},{43.4,64},{43.9,64.7}}},
},
[148514] = {
[objectKeys.spawns] = {[zoneIDs.AZSHARA]={{34.2,57.8},{34.65,55.61},{35.7,56.51},{35.9,59},{36.2,52.6},{37.92,47.75},{39.3,57.6},{39.8,48.8},{39.84,45.88},{39.99,64.19},{40.2,45}}},
},
[148515] = {
[objectKeys.spawns] = {[zoneIDs.AZSHARA]={{35.6,55.9},{35.9,53.5},{36.1,59.9},{36.9,49.6},{37,54.5},{37.14,60.51},{37.29,48.08},{38.58,54.62},{38.6,47.5},{39.3,59.9},{41.51,65.04}}},
},
[148516] = {
[objectKeys.spawns] = {[zoneIDs.AZSHARA]={{34.1,50.5},{34.3,55.2},{35.19,58.02},{36,57.6},{36.8,60.5},{37.07,51.86},{38.4,60.3},{38.91,53.46},{39.54,64.32},{39.6,48.14}}},
},
[153123] = {
[objectKeys.spawns] = {[zoneIDs.AZSHARA]={{56.1,30.1},{56.3,28.8},{56.4,28.4},{56.5,28.8},{57.0,28.4},{57.0,29.9},{57.9,29.1},{58.2,27.7},{58.4,25.0},{58.5,25.0},{58.6,26.0},{58.6,29.1},{58.9,28.4},{59.2,23.0},{59.6,30.9}}}, --#1413
},
[154357] = {
[objectKeys.spawns] = {[zoneIDs.REDRIDGE_MOUNTAINS]={{21.9,53.2},{24.1,54.6},{25.9,54.1},{26.4,51.3},{28,56},{30.8,54.3},{33.6,55.2},{36.8,54.3},{37.9,54.5},{19.16,51.74},{34.13,53.37},{29.52,53.72}}}, -- #1176
},
[157936] = {
[objectKeys.spawns] = {[zoneIDs.UN_GORO_CRATER]={{21.92,38.58},{25.56,46.29},{27.01,40.16},{28.01,62.73},{29.7,30.6},{30.52,69.98},{30.61,56.66},{30.97,78.87},{31.03,34.12},{32.86,22.92},{33.11,65.36},{35.86,46.22},{36.35,69.75},{36.4,76.32},{38.2,23.1},{38.9,39.54},{40.37,26.87},{40.75,59.65},{41.11,79.78},{41.9,53.16},{42.21,45.46},{44.14,33.79},{44.7,54.42},{47,52.9},{48.9,58},{49.46,48.48},{49.4,83.5},{50.21,34.29},{50.45,90.1},{51.1,47},{52.49,78.92},{52.77,45.42},{52.83,55.91},{53.56,39.03},{55.58,28.65},{55.97,56.86},{56.56,83.45},{57.13,44.16},{58.13,36.33},{60,81.8},{62.16,17.57},{62.3,64},{63.3,47.9},{64.06,40.97},{64.9,78.4},{69.4,76.4},{71.67,75.91},{73.11,65.65},{73.41,58.29}}},
},
-- Un'Goro Crystals
[164658] = {
[objectKeys.spawns] = {[zoneIDs.UN_GORO_CRATER]={{19.7,38.9},{20.7,50},{23,59.1},{23.1,40.3},{23.7,59},{24,42.8},{25.1,67.0},{25.5,39.9},{25.8,53.9},{25.8,63.3},{26.0,59.9},{27.5,70.1},{27.7,46.3},{27.7,46.5},{30.1,21.3},{30.4,70.5},{30.7,63.3},{32.6,73.5},{33,29.7},{33.8,44.4},{33.9,76.7},{35.8,54.5},{37.7,20.4},{37.7,20.5},{37.8,66.4},{37.8,66.5},{38,41.8},{38.2,81.9},{39.3,14.5},{39.7,26.8},{40.5,49.9},{40.5,75.3},{40.8,79.9},{42.6,34.1},{42.8,86.1},{42.9,52.9},{42.9,66},{43,45.4},{43,45.5},{43.8,16.7},{43.9,21.3},{43.9,21.5},{44.2,88.8},{45.4,38.6},{45.4,66},{45.5,66},{45.7,92.5},{46.3,19.7},{46.8,14.9},{47,61.1},{47.3,13},{49.9,15.7},{50,92.3},{51.3,61.4},{51.6,13.6},{51.8,34.9},{51.9,87.5},{53.7,38.9},{54.1,18.1},{55.8,7.9},{56,18.5},{56.1,18.4},{56.2,60.6},{56.3,73.6},{56.4,12.3},{56.6,12.3},{56.8,76.2},{57.3,10.1},{57.4,82.5},{58.1,8.8},{58.1,49.8},{58.3,10.7},{58.3,65.9},{58.6,78.4},{59.2,20.3},{59.6,60.2},{59.8,49.4},{60.4,77.4},{60.9,68.4},{60.9,68.5},{61,15.1},{62,85.2},{62.1,40.4},{62.1,40.5},{62.3,68.4},{62.4,68.5},{62.4,70.3},{62.4,70.5},{62.6,16.7},{62.6,26.9},{63.2,75.2},{63.4,23},{64.2,53.9},{65.2,79.7},{66.1,21.1},{66.7,46.9},{66.8,73.3},{67.7,40.4},{67.7,40.5},{67.9,51.4},{68.3,25.3},{68.4,25.5},{68.4,59.7},{69.1,28.9},{69.4,79.9},{69.5,79.9},{69.6,35.1},{69.6,69.4},{69.6,69.5},{69.9,18.9},{70.1,77.1},{70.3,64.2},{71.1,42.9},{71.6,73.6},{71.7,63.5},{71.8,63.4},{71.9,23},{72.1,33.1},{72.2,21.1},{72.4,35.4},{72.4,35.6},{73,46.8},{73,65.4},{73,65.5},{73.8,53.4},{73.8,53.5},{74.4,56.9},{74.4,63.8},{74.5,57},{74.5,63.8},{74.8,29.6},{74.8,58.9},{74.9,70.5},{75.1,37.7},{75.2,61.6},{75.3,61.4},{75.9,40.1},{76.6,43.8},{76.8,57.7},{78.2,40.1},{79.3,57.9},{79.9,61.9},{80.4,49.7},{80.5,49.7},{80.7,43},{81.4,39.1},{81.5,39.1},{81.6,60.6}}}, -- #1156
},
[164659] = {
[objectKeys.spawns] = {[zoneIDs.UN_GORO_CRATER]={{19.7,38.9},{20.7,50},{23,59.1},{23.1,40.3},{23.7,59},{24,42.8},{25.1,67.0},{25.5,39.9},{25.8,53.9},{25.8,63.3},{26.0,59.9},{27.5,70.1},{27.7,46.3},{27.7,46.5},{30.1,21.3},{30.4,70.5},{30.7,63.3},{32.6,73.5},{33,29.7},{33.8,44.4},{33.9,76.7},{35.8,54.5},{37.7,20.4},{37.7,20.5},{37.8,66.4},{37.8,66.5},{38,41.8},{38.2,81.9},{39.3,14.5},{39.7,26.8},{40.5,49.9},{40.5,75.3},{40.8,79.9},{42.6,34.1},{42.8,86.1},{42.9,52.9},{42.9,66},{43,45.4},{43,45.5},{43.8,16.7},{43.9,21.3},{43.9,21.5},{44.2,88.8},{45.4,38.6},{45.4,66},{45.5,66},{45.7,92.5},{46.3,19.7},{46.8,14.9},{47,61.1},{47.3,13},{49.9,15.7},{50,92.3},{51.3,61.4},{51.6,13.6},{51.8,34.9},{51.9,87.5},{53.7,38.9},{54.1,18.1},{55.8,7.9},{56,18.5},{56.1,18.4},{56.2,60.6},{56.3,73.6},{56.4,12.3},{56.6,12.3},{56.8,76.2},{57.3,10.1},{57.4,82.5},{58.1,8.8},{58.1,49.8},{58.3,10.7},{58.3,65.9},{58.6,78.4},{59.2,20.3},{59.6,60.2},{59.8,49.4},{60.4,77.4},{60.9,68.4},{60.9,68.5},{61,15.1},{62,85.2},{62.1,40.4},{62.1,40.5},{62.3,68.4},{62.4,68.5},{62.4,70.3},{62.4,70.5},{62.6,16.7},{62.6,26.9},{63.2,75.2},{63.4,23},{64.2,53.9},{65.2,79.7},{66.1,21.1},{66.7,46.9},{66.8,73.3},{67.7,40.4},{67.7,40.5},{67.9,51.4},{68.3,25.3},{68.4,25.5},{68.4,59.7},{69.1,28.9},{69.4,79.9},{69.5,79.9},{69.6,35.1},{69.6,69.4},{69.6,69.5},{69.9,18.9},{70.1,77.1},{70.3,64.2},{71.1,42.9},{71.6,73.6},{71.7,63.5},{71.8,63.4},{71.9,23},{72.1,33.1},{72.2,21.1},{72.4,35.4},{72.4,35.6},{73,46.8},{73,65.4},{73,65.5},{73.8,53.4},{73.8,53.5},{74.4,56.9},{74.4,63.8},{74.5,57},{74.5,63.8},{74.8,29.6},{74.8,58.9},{74.9,70.5},{75.1,37.7},{75.2,61.6},{75.3,61.4},{75.9,40.1},{76.6,43.8},{76.8,57.7},{78.2,40.1},{79.3,57.9},{79.9,61.9},{80.4,49.7},{80.5,49.7},{80.7,43},{81.4,39.1},{81.5,39.1},{81.6,60.6}}}, -- #1156
},
[164660] = {
[objectKeys.spawns] = {[zoneIDs.UN_GORO_CRATER]={{19.7,38.9},{20.7,50},{23,59.1},{23.1,40.3},{23.7,59},{24,42.8},{25.1,67.0},{25.5,39.9},{25.8,53.9},{25.8,63.3},{26.0,59.9},{27.5,70.1},{27.7,46.3},{27.7,46.5},{30.1,21.3},{30.4,70.5},{30.7,63.3},{32.6,73.5},{33,29.7},{33.8,44.4},{33.9,76.7},{35.8,54.5},{37.7,20.4},{37.7,20.5},{37.8,66.4},{37.8,66.5},{38,41.8},{38.2,81.9},{39.3,14.5},{39.7,26.8},{40.5,49.9},{40.5,75.3},{40.8,79.9},{42.6,34.1},{42.8,86.1},{42.9,52.9},{42.9,66},{43,45.4},{43,45.5},{43.8,16.7},{43.9,21.3},{43.9,21.5},{44.2,88.8},{45.4,38.6},{45.4,66},{45.5,66},{45.7,92.5},{46.3,19.7},{46.8,14.9},{47,61.1},{47.3,13},{49.9,15.7},{50,92.3},{51.3,61.4},{51.6,13.6},{51.8,34.9},{51.9,87.5},{53.7,38.9},{54.1,18.1},{55.8,7.9},{56,18.5},{56.1,18.4},{56.2,60.6},{56.3,73.6},{56.4,12.3},{56.6,12.3},{56.8,76.2},{57.3,10.1},{57.4,82.5},{58.1,8.8},{58.1,49.8},{58.3,10.7},{58.3,65.9},{58.6,78.4},{59.2,20.3},{59.6,60.2},{59.8,49.4},{60.4,77.4},{60.9,68.4},{60.9,68.5},{61,15.1},{62,85.2},{62.1,40.4},{62.1,40.5},{62.3,68.4},{62.4,68.5},{62.4,70.3},{62.4,70.5},{62.6,16.7},{62.6,26.9},{63.2,75.2},{63.4,23},{64.2,53.9},{65.2,79.7},{66.1,21.1},{66.7,46.9},{66.8,73.3},{67.7,40.4},{67.7,40.5},{67.9,51.4},{68.3,25.3},{68.4,25.5},{68.4,59.7},{69.1,28.9},{69.4,79.9},{69.5,79.9},{69.6,35.1},{69.6,69.4},{69.6,69.5},{69.9,18.9},{70.1,77.1},{70.3,64.2},{71.1,42.9},{71.6,73.6},{71.7,63.5},{71.8,63.4},{71.9,23},{72.1,33.1},{72.2,21.1},{72.4,35.4},{72.4,35.6},{73,46.8},{73,65.4},{73,65.5},{73.8,53.4},{73.8,53.5},{74.4,56.9},{74.4,63.8},{74.5,57},{74.5,63.8},{74.8,29.6},{74.8,58.9},{74.9,70.5},{75.1,37.7},{75.2,61.6},{75.3,61.4},{75.9,40.1},{76.6,43.8},{76.8,57.7},{78.2,40.1},{79.3,57.9},{79.9,61.9},{80.4,49.7},{80.5,49.7},{80.7,43},{81.4,39.1},{81.5,39.1},{81.6,60.6}}}, -- #1156
},
[164661] = {
[objectKeys.spawns] = {[zoneIDs.UN_GORO_CRATER]={{19.7,38.9},{20.7,50},{23,59.1},{23.1,40.3},{23.7,59},{24,42.8},{25.1,67.0},{25.5,39.9},{25.8,53.9},{25.8,63.3},{26.0,59.9},{27.5,70.1},{27.7,46.3},{27.7,46.5},{30.1,21.3},{30.4,70.5},{30.7,63.3},{32.6,73.5},{33,29.7},{33.8,44.4},{33.9,76.7},{35.8,54.5},{37.7,20.4},{37.7,20.5},{37.8,66.4},{37.8,66.5},{38,41.8},{38.2,81.9},{39.3,14.5},{39.7,26.8},{40.5,49.9},{40.5,75.3},{40.8,79.9},{42.6,34.1},{42.8,86.1},{42.9,52.9},{42.9,66},{43,45.4},{43,45.5},{43.8,16.7},{43.9,21.3},{43.9,21.5},{44.2,88.8},{45.4,38.6},{45.4,66},{45.5,66},{45.7,92.5},{46.3,19.7},{46.8,14.9},{47,61.1},{47.3,13},{49.9,15.7},{50,92.3},{51.3,61.4},{51.6,13.6},{51.8,34.9},{51.9,87.5},{53.7,38.9},{54.1,18.1},{55.8,7.9},{56,18.5},{56.1,18.4},{56.2,60.6},{56.3,73.6},{56.4,12.3},{56.6,12.3},{56.8,76.2},{57.3,10.1},{57.4,82.5},{58.1,8.8},{58.1,49.8},{58.3,10.7},{58.3,65.9},{58.6,78.4},{59.2,20.3},{59.6,60.2},{59.8,49.4},{60.4,77.4},{60.9,68.4},{60.9,68.5},{61,15.1},{62,85.2},{62.1,40.4},{62.1,40.5},{62.3,68.4},{62.4,68.5},{62.4,70.3},{62.4,70.5},{62.6,16.7},{62.6,26.9},{63.2,75.2},{63.4,23},{64.2,53.9},{65.2,79.7},{66.1,21.1},{66.7,46.9},{66.8,73.3},{67.7,40.4},{67.7,40.5},{67.9,51.4},{68.3,25.3},{68.4,25.5},{68.4,59.7},{69.1,28.9},{69.4,79.9},{69.5,79.9},{69.6,35.1},{69.6,69.4},{69.6,69.5},{69.9,18.9},{70.1,77.1},{70.3,64.2},{71.1,42.9},{71.6,73.6},{71.7,63.5},{71.8,63.4},{71.9,23},{72.1,33.1},{72.2,21.1},{72.4,35.4},{72.4,35.6},{73,46.8},{73,65.4},{73,65.5},{73.8,53.4},{73.8,53.5},{74.4,56.9},{74.4,63.8},{74.5,57},{74.5,63.8},{74.8,29.6},{74.8,58.9},{74.9,70.5},{75.1,37.7},{75.2,61.6},{75.3,61.4},{75.9,40.1},{76.6,43.8},{76.8,57.7},{78.2,40.1},{79.3,57.9},{79.9,61.9},{80.4,49.7},{80.5,49.7},{80.7,43},{81.4,39.1},{81.5,39.1},{81.6,60.6}}}, -- #1156
},
[164778] = {
[objectKeys.spawns] = {[zoneIDs.UN_GORO_CRATER]={{19.7,38.9},{20.7,50},{23,59.1},{23.1,40.3},{23.7,59},{24,42.8},{25.1,67.0},{25.5,39.9},{25.8,53.9},{25.8,63.3},{26.0,59.9},{27.5,70.1},{27.7,46.3},{27.7,46.5},{30.1,21.3},{30.4,70.5},{30.7,63.3},{32.6,73.5},{33,29.7},{33.8,44.4},{33.9,76.7},{35.8,54.5},{37.7,20.4},{37.7,20.5},{37.8,66.4},{37.8,66.5},{38,41.8},{38.2,81.9},{39.3,14.5},{39.7,26.8},{40.5,49.9},{40.5,75.3},{40.8,79.9},{42.6,34.1},{42.8,86.1},{42.9,52.9},{42.9,66},{43,45.4},{43,45.5},{43.8,16.7},{43.9,21.3},{43.9,21.5},{44.2,88.8},{45.4,38.6},{45.4,66},{45.5,66},{45.7,92.5},{46.3,19.7},{46.8,14.9},{47,61.1},{47.3,13},{49.9,15.7},{50,92.3},{51.3,61.4},{51.6,13.6},{51.8,34.9},{51.9,87.5},{53.7,38.9},{54.1,18.1},{55.8,7.9},{56,18.5},{56.1,18.4},{56.2,60.6},{56.3,73.6},{56.4,12.3},{56.6,12.3},{56.8,76.2},{57.3,10.1},{57.4,82.5},{58.1,8.8},{58.1,49.8},{58.3,10.7},{58.3,65.9},{58.6,78.4},{59.2,20.3},{59.6,60.2},{59.8,49.4},{60.4,77.4},{60.9,68.4},{60.9,68.5},{61,15.1},{62,85.2},{62.1,40.4},{62.1,40.5},{62.3,68.4},{62.4,68.5},{62.4,70.3},{62.4,70.5},{62.6,16.7},{62.6,26.9},{63.2,75.2},{63.4,23},{64.2,53.9},{65.2,79.7},{66.1,21.1},{66.7,46.9},{66.8,73.3},{67.7,40.4},{67.7,40.5},{67.9,51.4},{68.3,25.3},{68.4,25.5},{68.4,59.7},{69.1,28.9},{69.4,79.9},{69.5,79.9},{69.6,35.1},{69.6,69.4},{69.6,69.5},{69.9,18.9},{70.1,77.1},{70.3,64.2},{71.1,42.9},{71.6,73.6},{71.7,63.5},{71.8,63.4},{71.9,23},{72.1,33.1},{72.2,21.1},{72.4,35.4},{72.4,35.6},{73,46.8},{73,65.4},{73,65.5},{73.8,53.4},{73.8,53.5},{74.4,56.9},{74.4,63.8},{74.5,57},{74.5,63.8},{74.8,29.6},{74.8,58.9},{74.9,70.5},{75.1,37.7},{75.2,61.6},{75.3,61.4},{75.9,40.1},{76.6,43.8},{76.8,57.7},{78.2,40.1},{79.3,57.9},{79.9,61.9},{80.4,49.7},{80.5,49.7},{80.7,43},{81.4,39.1},{81.5,39.1},{81.6,60.6}}}, -- #1156
},
[164779] = {
[objectKeys.spawns] = {[zoneIDs.UN_GORO_CRATER]={{19.7,38.9},{20.7,50},{23,59.1},{23.1,40.3},{23.7,59},{24,42.8},{25.1,67.0},{25.5,39.9},{25.8,53.9},{25.8,63.3},{26.0,59.9},{27.5,70.1},{27.7,46.3},{27.7,46.5},{30.1,21.3},{30.4,70.5},{30.7,63.3},{32.6,73.5},{33,29.7},{33.8,44.4},{33.9,76.7},{35.8,54.5},{37.7,20.4},{37.7,20.5},{37.8,66.4},{37.8,66.5},{38,41.8},{38.2,81.9},{39.3,14.5},{39.7,26.8},{40.5,49.9},{40.5,75.3},{40.8,79.9},{42.6,34.1},{42.8,86.1},{42.9,52.9},{42.9,66},{43,45.4},{43,45.5},{43.8,16.7},{43.9,21.3},{43.9,21.5},{44.2,88.8},{45.4,38.6},{45.4,66},{45.5,66},{45.7,92.5},{46.3,19.7},{46.8,14.9},{47,61.1},{47.3,13},{49.9,15.7},{50,92.3},{51.3,61.4},{51.6,13.6},{51.8,34.9},{51.9,87.5},{53.7,38.9},{54.1,18.1},{55.8,7.9},{56,18.5},{56.1,18.4},{56.2,60.6},{56.3,73.6},{56.4,12.3},{56.6,12.3},{56.8,76.2},{57.3,10.1},{57.4,82.5},{58.1,8.8},{58.1,49.8},{58.3,10.7},{58.3,65.9},{58.6,78.4},{59.2,20.3},{59.6,60.2},{59.8,49.4},{60.4,77.4},{60.9,68.4},{60.9,68.5},{61,15.1},{62,85.2},{62.1,40.4},{62.1,40.5},{62.3,68.4},{62.4,68.5},{62.4,70.3},{62.4,70.5},{62.6,16.7},{62.6,26.9},{63.2,75.2},{63.4,23},{64.2,53.9},{65.2,79.7},{66.1,21.1},{66.7,46.9},{66.8,73.3},{67.7,40.4},{67.7,40.5},{67.9,51.4},{68.3,25.3},{68.4,25.5},{68.4,59.7},{69.1,28.9},{69.4,79.9},{69.5,79.9},{69.6,35.1},{69.6,69.4},{69.6,69.5},{69.9,18.9},{70.1,77.1},{70.3,64.2},{71.1,42.9},{71.6,73.6},{71.7,63.5},{71.8,63.4},{71.9,23},{72.1,33.1},{72.2,21.1},{72.4,35.4},{72.4,35.6},{73,46.8},{73,65.4},{73,65.5},{73.8,53.4},{73.8,53.5},{74.4,56.9},{74.4,63.8},{74.5,57},{74.5,63.8},{74.8,29.6},{74.8,58.9},{74.9,70.5},{75.1,37.7},{75.2,61.6},{75.3,61.4},{75.9,40.1},{76.6,43.8},{76.8,57.7},{78.2,40.1},{79.3,57.9},{79.9,61.9},{80.4,49.7},{80.5,49.7},{80.7,43},{81.4,39.1},{81.5,39.1},{81.6,60.6}}}, -- #1156
},
[164780] = {
[objectKeys.spawns] = {[zoneIDs.UN_GORO_CRATER]={{19.7,38.9},{20.7,50},{23,59.1},{23.1,40.3},{23.7,59},{24,42.8},{25.1,67.0},{25.5,39.9},{25.8,53.9},{25.8,63.3},{26.0,59.9},{27.5,70.1},{27.7,46.3},{27.7,46.5},{30.1,21.3},{30.4,70.5},{30.7,63.3},{32.6,73.5},{33,29.7},{33.8,44.4},{33.9,76.7},{35.8,54.5},{37.7,20.4},{37.7,20.5},{37.8,66.4},{37.8,66.5},{38,41.8},{38.2,81.9},{39.3,14.5},{39.7,26.8},{40.5,49.9},{40.5,75.3},{40.8,79.9},{42.6,34.1},{42.8,86.1},{42.9,52.9},{42.9,66},{43,45.4},{43,45.5},{43.8,16.7},{43.9,21.3},{43.9,21.5},{44.2,88.8},{45.4,38.6},{45.4,66},{45.5,66},{45.7,92.5},{46.3,19.7},{46.8,14.9},{47,61.1},{47.3,13},{49.9,15.7},{50,92.3},{51.3,61.4},{51.6,13.6},{51.8,34.9},{51.9,87.5},{53.7,38.9},{54.1,18.1},{55.8,7.9},{56,18.5},{56.1,18.4},{56.2,60.6},{56.3,73.6},{56.4,12.3},{56.6,12.3},{56.8,76.2},{57.3,10.1},{57.4,82.5},{58.1,8.8},{58.1,49.8},{58.3,10.7},{58.3,65.9},{58.6,78.4},{59.2,20.3},{59.6,60.2},{59.8,49.4},{60.4,77.4},{60.9,68.4},{60.9,68.5},{61,15.1},{62,85.2},{62.1,40.4},{62.1,40.5},{62.3,68.4},{62.4,68.5},{62.4,70.3},{62.4,70.5},{62.6,16.7},{62.6,26.9},{63.2,75.2},{63.4,23},{64.2,53.9},{65.2,79.7},{66.1,21.1},{66.7,46.9},{66.8,73.3},{67.7,40.4},{67.7,40.5},{67.9,51.4},{68.3,25.3},{68.4,25.5},{68.4,59.7},{69.1,28.9},{69.4,79.9},{69.5,79.9},{69.6,35.1},{69.6,69.4},{69.6,69.5},{69.9,18.9},{70.1,77.1},{70.3,64.2},{71.1,42.9},{71.6,73.6},{71.7,63.5},{71.8,63.4},{71.9,23},{72.1,33.1},{72.2,21.1},{72.4,35.4},{72.4,35.6},{73,46.8},{73,65.4},{73,65.5},{73.8,53.4},{73.8,53.5},{74.4,56.9},{74.4,63.8},{74.5,57},{74.5,63.8},{74.8,29.6},{74.8,58.9},{74.9,70.5},{75.1,37.7},{75.2,61.6},{75.3,61.4},{75.9,40.1},{76.6,43.8},{76.8,57.7},{78.2,40.1},{79.3,57.9},{79.9,61.9},{80.4,49.7},{80.5,49.7},{80.7,43},{81.4,39.1},{81.5,39.1},{81.6,60.6}}}, -- #1156
},
[164781] = {
[objectKeys.spawns] = {[zoneIDs.UN_GORO_CRATER]={{19.7,38.9},{20.7,50},{23,59.1},{23.1,40.3},{23.7,59},{24,42.8},{25.1,67.0},{25.5,39.9},{25.8,53.9},{25.8,63.3},{26.0,59.9},{27.5,70.1},{27.7,46.3},{27.7,46.5},{30.1,21.3},{30.4,70.5},{30.7,63.3},{32.6,73.5},{33,29.7},{33.8,44.4},{33.9,76.7},{35.8,54.5},{37.7,20.4},{37.7,20.5},{37.8,66.4},{37.8,66.5},{38,41.8},{38.2,81.9},{39.3,14.5},{39.7,26.8},{40.5,49.9},{40.5,75.3},{40.8,79.9},{42.6,34.1},{42.8,86.1},{42.9,52.9},{42.9,66},{43,45.4},{43,45.5},{43.8,16.7},{43.9,21.3},{43.9,21.5},{44.2,88.8},{45.4,38.6},{45.4,66},{45.5,66},{45.7,92.5},{46.3,19.7},{46.8,14.9},{47,61.1},{47.3,13},{49.9,15.7},{50,92.3},{51.3,61.4},{51.6,13.6},{51.8,34.9},{51.9,87.5},{53.7,38.9},{54.1,18.1},{55.8,7.9},{56,18.5},{56.1,18.4},{56.2,60.6},{56.3,73.6},{56.4,12.3},{56.6,12.3},{56.8,76.2},{57.3,10.1},{57.4,82.5},{58.1,8.8},{58.1,49.8},{58.3,10.7},{58.3,65.9},{58.6,78.4},{59.2,20.3},{59.6,60.2},{59.8,49.4},{60.4,77.4},{60.9,68.4},{60.9,68.5},{61,15.1},{62,85.2},{62.1,40.4},{62.1,40.5},{62.3,68.4},{62.4,68.5},{62.4,70.3},{62.4,70.5},{62.6,16.7},{62.6,26.9},{63.2,75.2},{63.4,23},{64.2,53.9},{65.2,79.7},{66.1,21.1},{66.7,46.9},{66.8,73.3},{67.7,40.4},{67.7,40.5},{67.9,51.4},{68.3,25.3},{68.4,25.5},{68.4,59.7},{69.1,28.9},{69.4,79.9},{69.5,79.9},{69.6,35.1},{69.6,69.4},{69.6,69.5},{69.9,18.9},{70.1,77.1},{70.3,64.2},{71.1,42.9},{71.6,73.6},{71.7,63.5},{71.8,63.4},{71.9,23},{72.1,33.1},{72.2,21.1},{72.4,35.4},{72.4,35.6},{73,46.8},{73,65.4},{73,65.5},{73.8,53.4},{73.8,53.5},{74.4,56.9},{74.4,63.8},{74.5,57},{74.5,63.8},{74.8,29.6},{74.8,58.9},{74.9,70.5},{75.1,37.7},{75.2,61.6},{75.3,61.4},{75.9,40.1},{76.6,43.8},{76.8,57.7},{78.2,40.1},{79.3,57.9},{79.9,61.9},{80.4,49.7},{80.5,49.7},{80.7,43},{81.4,39.1},{81.5,39.1},{81.6,60.6}}}, -- #1156
},
-------------------
[174848] = {
[objectKeys.spawns] = {[zoneIDs.UNDERCITY]={{47.85,73.48}}}, -- #1520
},
[175265] = {
[objectKeys.spawns] = {[zoneIDs.UNDERCITY]={{47.74,73.57}}}, -- #1520
},
[175321] = {
[objectKeys.spawns] = {[zoneIDs.DUSTWALLOW_MARSH]={{56.37,87.83}}},
[objectKeys.zoneID] = zoneIDs.DUSTWALLOW_MARSH,
},
[175322] = {
[objectKeys.spawns] = {[zoneIDs.DUSTWALLOW_MARSH]={{56.37,87.83}}},
[objectKeys.zoneID] = zoneIDs.DUSTWALLOW_MARSH,
},
[176150] = {
[objectKeys.spawns] = {
[zoneIDs.WESTERN_PLAGUELANDS]={{43.60,69.97},{43.46,70.11},{43.38,69.97},{43.39,69.69},{43.37,69.51},{43.41,69.22},{43.59,69.30},{43.54,69.12},{43.42,68.78},{43.59,68.82}},
},
},
[176184] = {
[objectKeys.name] = "Corrupt Jaedenar Moonwell",
},
[176213] = {
[objectKeys.spawns] = {
[zoneIDs.WESTERN_PLAGUELANDS]={{35.9,57.4},{35.9,57.5},{36.4,53.7},{36.5,53.6},{38.2,56.3},{39.7,69.4},{39.7,69.6},{40.6,73.1},{40.7,57.4},{40.8,57.5},{41.4,62.1},{41.5,62.1},{41.9,70.5},{42.2,54.9},{42.8,64.2},{43.3,68.3},{43.6,70.4},{43.7,70.5},{44.2,65},{44.4,71.6},{44.5,53.3},{44.5,71.7},{44.6,53.5},{45.8,71.5},{45.9,51.1},{45.9,71.4},{46.7,34.4},{46.8,34.5},{47,59.9},{47,67.1},{47.6,70},{47.9,53.1},{49.4,68.1},{49.8,33.3},{52.2,66.5},{52.3,55},{52.3,66.3},{53,64.2},{53.2,66.5},{53.3,65.1},{53.3,66.2},{53.4,63.4},{53.5,63.3},{53.5,63.5},{54.9,27.1},{55.2,69.4},{55.3,69.6},{56.7,34.7},{57.8,66.4},{57.8,66.5},{62,58.3},{62,58.5},{62.9,57.2},{62.9,57.9},{63.2,59.2},{63.6,75.4},{63.6,75.5},{64,48.7},{64.1,57.9},{64.9,74.4},{64.9,74.5},{65.8,76.8},{66.4,42.1},{66.5,42.2},{67,53.9},{67.8,84.6},{68,44.7},{68.3,81.4},{68.3,81.6},{68.4,77.1},{68.5,77.1},{68.7,49.2},{68.7,79.2},{68.9,73.8},{69.5,78.6},},
[zoneIDs.EASTERN_PLAGUELANDS]={{7.1,50.7},{8,54.5},{14.2,64.7},{20,61},{20.5,66.9},{21.5,73.9},{22.1,85.1},{24.3,88.2},{26,74.7},{26.3,70.5},{26.7,69.5},{27.1,75.6},{27.3,64},{28.8,86},{29.2,78.8},{30.9,65.5},{32,71},{33.6,32.6},{34,80.2},{34.3,67.8},{34.4,76.9},{34.5,25.8},{35.6,73.3},{35.9,75.8},{36.7,38},{36.9,70.6},{37.1,65.7},{37.6,68.5},{38.4,31.1},{38.5,54},{38.8,26.7},{38.9,36.1},{40,49.9},{41.4,79.7},{41.5,65.7},{42.4,75.8},{44.9,32.9},{46.2,70.8},{46.3,64},{46.5,74.8},{47.5,40.8},{47.9,80},{48.9,67.2},{49.1,35.5},{50.3,45.5},{50.4,77.4},{51.8,70.3},{53.5,50.7},{55.5,58.7},{56.2,63.9},{56.5,76.1},{57.1,81.9},{57.4,71.9},{57.8,76.1},{58.1,79.7},{58.4,64.8},{58.6,79.6},{59.2,62.2},{59.3,80.9},{59.5,76},{59.9,67.5},{61.8,70.2},{63.6,67.7},{64.7,65.4},{64.7,81},{66.2,53},{67.6,66.8},{68.2,70.6},{68.3,74.6},{68.6,78.4},{68.8,80.8},{68.9,83.3},{69,71.5},{70.6,80.8},{70.7,69.5},{71.1,75.3},{72.2,78.4},{73.3,77.2},{73.4,69.8},{73.4,82.1},{73.6,76.8},{73.8,51.1},{74.1,83.8},{74.7,58.7},{75.6,55.3},{75.9,83.5},{76.1,78.2},{76.2,50.4},{76.7,72.4},{78.4,57.5},{78.7,67.3},{78.8,63.5},{80.4,59.8}},
[zoneIDs.TIRISFAL_GLADES]={{82.8,72.7},{83,71.4},{83,71.5}},
},
},
[176344] = {
[objectKeys.spawns] = {[zoneIDs.THOUSAND_NEEDLES]={{31.79,32.58}}},
},
[176589] = {
[objectKeys.spawns] = {
[zoneIDs.BURNING_STEPPES]={{13.2,30.8},{15.1,30.3},{18.8,48.7},{20.9,46.6},{21,46.4},{25.1,62.5},{26.4,59.2},{28.8,62.6},{31.4,61.7},{31.5,61.7},{31.9,69.4},{35.4,49.1},{35.5,49.1},{42.6,37.6},{43.1,34.4},{43.1,34.5},{44.2,57.1},{51,61.9},{54.3,63.4},{54.7,36.4},{56.3,53.7},{57.4,61.5},{57.6,61.6},{63.2,36.9},{63.7,60.8},{66.5,40},{76.4,47.2},{76.4,47.5},{76.5,47.2},{76.5,47.5},{82.5,34.2},{83,38},{92.1,53.2}},
[zoneIDs.EASTERN_PLAGUELANDS]={{16.4,33.7},{16.5,33.7},{22.9,32},{26.7,29.7},{27.6,85.1},{28.7,70.9},{37.9,51.8},{38.9,34.1},{39.8,25.1},{42.4,50.6},{42.5,50.6},{45.5,29.8},{46.2,34.2},{59.7,67.6},{65.6,21.8},{67.5,46.5},{69.4,83.4},{70.8,30.8},{72,51.9},{76.6,49.8},{80,71},{82,84.5},{85.9,46.4},{86,46.5},{87.9,82.8}},
[zoneIDs.WINTERSPRING]={{30.7,35.4},{30.7,35.5},{32.4,44.4},{35.8,36.5},{40.2,44.2},{40.6,36.1},{49.4,9.4},{52.3,40.3},{52.8,27.6},{54.8,10.6},{55.5,52.4},{55.5,52.5},{55.6,44.6},{57.6,49.5},{57.8,69.3},{58.8,53},{59.1,60.1},{59.4,74.2},{60.6,29.9},{63,17.7},{63.4,21.1},{64,73.8},{64.4,69.3},{65.1,64.3},{66.2,60.8},{67.4,41.4},{67.4,41.5},{67.5,41.4},{67.5,41.5},{68.1,53},{68.3,36.6}},
[zoneIDs.SILITHUS]={{19.7,84.6},{20.6,23.4},{20.6,23.5},{20.9,62},{22.4,39.4},{24.9,17.9},{25.7,58.6},{27.7,34.1},{33.7,13.5},{34.4,91.4},{37.9,34.9},{38.3,60.7},{38.5,60.8},{39.3,85},{39.5,85},{40.2,46.8},{43.7,18.2},{45.4,91.3},{45.4,91.5},{45.5,91.3},{46.3,83.5},{47.1,54.4},{51.4,50.3},{51.4,50.5},{51.5,50.3},{51.5,50.5},{53.6,76.4},{53.6,76.5},{56,20.3},{62.1,83.5},{62.2,83.3},{63,53.6},{63.2,29},{67.1,15},{70.7,23}},
},
},
[176630] = {
[objectKeys.spawns] = {[zoneIDs.ARATHI_HIGHLANDS]={{17.91,69.41},{18.5,66.2},{19.4,64.5},{20.8,65.8},{27.6,66.0},{29.3,64.9},{29.3,62.8}}},
},
[177241] = {
[objectKeys.spawns] = {[zoneIDs.WESTERN_PLAGUELANDS]={{45.27,69.21}}},
[objectKeys.zoneID] = zoneIDs.WESTERN_PLAGUELANDS,
},
[177784] = {
[objectKeys.spawns] = {[zoneIDs.DESOLACE]={{24.6,44.1},{25.4,47.8},{25.7,38.9},{26.2,36.7},{28.2,34.1},{29.7,36.7},{30,26.1},{30.1,29.1},{30.6,31.9},{30.6,34.3},{30.8,24.4},{32,30.5},{32.7,25.4},{32.8,35.2},{33,28.6},{33.9,33.2},{34.1,27.5},{34.1,30.6},{34.2,27.4},{34.3,23.2},{35.2,34.7},{35.4,25},{35.5,25},{34.11,30.7},{35.26,34.72},{32.8,35.3},{30.54,34.21},{34.15,27.46},{31.93,30.58},{32.94,28.58},{35.37,25.02},{32.69,25.26},{30.84,24.33},{34.32,23.12},{33.88,33.29}}},
},
[177785] = {
[objectKeys.spawns] = {[zoneIDs.MOONGLADE]={{48,47.1},{50.1,50.6},{52.1,53.4},{52.1,53.5},{52.9,48.5},{53.1,48.4},{54.1,50.1},{54.3,55.6},{54.7,46.4},{54.7,46.5},{56.3,53.7},{58.5,50.8},{60.5,58.3},{60.5,58.5}}},
},
[178227] = {
[objectKeys.spawns] = {[zoneIDs.ASHENVALE]={{56,63}}},
[objectKeys.zoneID] = zoneIDs.ASHENVALE,
},
[179544] = {
[objectKeys.name] = "Skeletal Remains of Telmius Dreamseeker",
},
[179908] = {
[objectKeys.spawns] = {[zoneIDs.THE_HINTERLANDS]={{53.3,38.8},{57.4,42.6},{57.5,42.6},{66.4,44.8},{71,48.6},{72.6,52.9}}},
},
[180204] = {
[objectKeys.name] = "Uther the Lightbringer",
[objectKeys.spawns] = {[zoneIDs.WESTERN_PLAGUELANDS]={{52.08,83.28}}},
},
[180205] = {
[objectKeys.name] = "Monument to Grom Hellscream",
[objectKeys.spawns] = {[zoneIDs.ASHENVALE]={{82.8,79.09}}},
},
[180449] = {
[objectKeys.spawns] = {[zoneIDs.HILLSBRAD_FOOTHILLS]={{49.75,56.97},{50.28,56.83},{49.91,57.45},{49.49,57.81}}},
[objectKeys.zoneID] = zoneIDs.HILLSBRAD_FOOTHILLS,
},
[180453] = {
[objectKeys.spawns] = {[zoneIDs.SILITHUS]={{51,99}}},
[objectKeys.zoneID] = zoneIDs.SILITHUS,
},
[180652] = {
[objectKeys.spawns] = {
[zoneIDs.TANARIS]={{59.30,99.30}},
[zoneIDs.SOUTH_SEAS]={{59.30,100}},
},
[objectKeys.zoneID] = zoneIDs.SOUTH_SEAS,
},
[180717] = {
[objectKeys.spawns] = {[zoneIDs.SILITHUS]={{25.72,90.86}}},
[objectKeys.zoneID] = zoneIDs.SILITHUS,
},
[187260] = {
[objectKeys.spawns] = {}, -- Mailbox possibly added in TBC/BC. Not there in Classic
},
[188123] = {
[objectKeys.spawns] = {}, -- Mailbox possibly added in TBC/BC. Not there in Classic
},
[190483] = {
[objectKeys.spawns] = {[zoneIDs.THOUSAND_NEEDLES]={{33.76,39.99}}},
[objectKeys.zoneID] = zoneIDs.THOUSAND_NEEDLES,
},
[190484] = {
[objectKeys.spawns] = {[zoneIDs.THOUSAND_NEEDLES]={{39.34,41.53}}},
[objectKeys.zoneID] = zoneIDs.THOUSAND_NEEDLES,
},
[375544] = {
[objectKeys.name] = "Wooden Figurine",
[objectKeys.spawns] = {[zoneIDs.ASHENVALE]={{26.61,22.03}}},
[objectKeys.zoneID] = zoneIDs.ASHENVALE,
},
-- Fake IDs
[400014] = {
[objectKeys.name] = "Unlit Torch",
[objectKeys.spawns] = {[zoneIDs.ASHENVALE]={{26.79,22.43}}},
[objectKeys.zoneID] = zoneIDs.ASHENVALE,
},
[400060] = {
[objectKeys.name] = "Serpent Statue", -- Desolace for quest 6027
[objectKeys.spawns] = {[zoneIDs.DESOLACE]={{28.24,6.67}}},
[objectKeys.zoneID] = zoneIDs.DESOLACE,
},
[400061] = {
[objectKeys.name] = "Maraudon Orange Crystal Pool", -- Desolace for quest 7041
[objectKeys.spawns] = {[zoneIDs.DESOLACE]={{33.22,65.67}}},
[objectKeys.zoneID] = zoneIDs.DESOLACE,
},
[400062] = {
[objectKeys.name] = "Rookery Egg", -- Rookery Egg in UBRS
[objectKeys.spawns] = {[zoneIDs.LOWER_BLACKROCK_SPIRE]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.LOWER_BLACKROCK_SPIRE,
},
[400063] = {
[objectKeys.name] = "Challenge to Urok",
[objectKeys.spawns] = {[zoneIDs.LOWER_BLACKROCK_SPIRE]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.LOWER_BLACKROCK_SPIRE,
},
[500000] = {
[objectKeys.name] = "Feralas Ahi Fishing Location",
[objectKeys.questStarts] = {},
[objectKeys.questEnds] = {},
[objectKeys.spawns] = {[zoneIDs.FERALAS]={{62.1,51.4},{62.2,49.9},{62.4,52.4},{62.4,52.5},{62.6,49.3},{62.6,50.2},{62.7,50.6},{62.8,51.5},{62.9,52.5},{63.5,53.6},{63.7,52.4},{64,53.2}}},
[objectKeys.zoneID] = zoneIDs.FERALAS
},
[500001] = {
[objectKeys.name] = "Misty Reed Mahi Mahi Fishing Location",
[objectKeys.questStarts] = {},
[objectKeys.questEnds] = {},
[objectKeys.spawns] = {[zoneIDs.SWAMP_OF_SORROWS]={{74.4,3.7},{74.5,3.3},{74.5,3.8},{75.1,95.9},{76,95.4},{76.3,4.3},{77.4,4.3},{77.4,95.5},{78.7,5.3},{78.9,95.7},{79.1,94.7},{79.8,94.7},{80.2,94.2},{81.2,93.6},{82.1,94.2},{84.4,91.6},{84.5,92.9},{84.9,92.1},{85.6,89.2},{86.2,88},{86.4,86.4},{86.6,16.8},{86.6,85.6},{87.3,80.7},{87.4,82.1},{87.7,79.7},{87.7,81.9},{88.5,76.6},{89.1,20},{89.8,23},{89.9,74.5},{90.2,22.4},{90.3,73.4},{90.4,71.9},{90.4,73.6},{90.5,73.5},{90.6,73},{90.7,72.1},{91.1,82.2},{91.4,30.1},{91.5,82.1},{91.7,30.4},{91.8,82.9},{93.6,37.2},{93.8,66.5},{94,38.4},{94.2,40.6},{94.2,65.1},{94.3,39.3},{94.3,64.3},{94.8,41.6},{95,43.8},{95.1,45.2},{95.2,45.9},{95.3,56.2},{95.7,47.5}}},
[objectKeys.zoneID] = zoneIDs.SWAMP_OF_SORROWS
},
[500002] = {
[objectKeys.name] = "Sar'theris Striker Fishing Location",
[objectKeys.questStarts] = {},
[objectKeys.questEnds] = {},
[objectKeys.spawns] = {[zoneIDs.DESOLACE]={{22.2,87.6},{22.8,76.8},{24.3,82.5},{24.5,81.9},{24.9,81.3},{25.6,81},{25.8,77.4},{25.8,77.5},{25.9,78.7},{26,80.1},{26.2,75.4},{26.2,76.2},{27.2,42.9},{33,36.8},{35.3,31.7},{36.1,32.8},{36.1,34.8},{38.8,23.2},{40.1,22.1}}},
[objectKeys.zoneID] = zoneIDs.DESOLACE
},
[500003] = {
[objectKeys.name] = "Savage Coast Blue Sailfin Fishing Location",
[objectKeys.questStarts] = {},
[objectKeys.questEnds] = {},
[objectKeys.spawns] = {[zoneIDs.STRANGLETHORN_VALE]={{13.5,15.7},{19.5,20.9},{22.2,19.8},{24.4,18.8},{24.5,65.7},{24.6,18.9},{25,58.3},{25.3,45.2},{25.4,49.3},{25.5,19.9},{25.7,66.9},{26.2,48.5},{26.3,67.8},{26.9,20.4},{27,39.7},{27.1,40.5},{27.3,68},{27.4,68.9},{27.7,21},{28.7,21.8},{29.2,23.2},{29.4,23.7},{29.4,24.6},{29.4,27.4},{29.4,27.7},{29.5,24.3},{29.5,25.1},{29.5,27.4},{29.5,27.7},{29.6,25.7},{31.9,32.1},{33,31.3},{33,32.1},{33.1,32.5},{34.2,32.4},{34.2,32.5},{34.2,34.7},{34.7,34.5},{34.8,33.7},{34.9,32.4},{35.1,35.6}}},
[objectKeys.zoneID] = zoneIDs.STRANGLETHORN_VALE
},
[500004] = {
[objectKeys.name] = "Stormwind City Fishing Location",
[objectKeys.questStarts] = {},
[objectKeys.questEnds] = {},
[objectKeys.spawns] = {[zoneIDs.STORMWIND_CITY]={{48.5,67.9},{45.7,60.5},{45.4,53.3},{35.7,45.6},{34.3,59},{51.8,47.1},{60.2,46.6},{65.2,53.7},{61.1,37},{65.6,32},{55.9,33.5},{50.9,23.8}}},
[objectKeys.zoneID] = zoneIDs.STORMWIND_CITY
},
[500005] = {
[objectKeys.name] = "Ironforge City Fishing Location",
[objectKeys.questStarts] = {},
[objectKeys.questEnds] = {},
[objectKeys.spawns] = {[zoneIDs.IRONFORGE]={{46.9,14.5}}},
[objectKeys.zoneID] = zoneIDs.IRONFORGE
},
[500006] = {
[objectKeys.name] = "Orgrimmar City Fishing Location",
[objectKeys.questStarts] = {},
[objectKeys.questEnds] = {},
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{70.4,28.3},{67.8,33.7},{64.8,26},{35.2,78.6},{37.6,81.7},{33.3,84.4},{36.3,86}}},
[objectKeys.zoneID] = zoneIDs.ORGRIMMAR
},
}
end
-- some objects are shared across factions but require different sources for each faction (not sure if there is a better way to implement this)
function QuestieObjectFixes:LoadFactionFixes()
local objectKeys = QuestieDB.objectKeys
local zoneIDs = ZoneDB.zoneIDs
local objectFixesHorde = {
[180743] = {
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{52.39,69.52}}},
},
[180746] = {
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{52.33,69.42}}},
},
[180747] = {
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{52.3,69.18}}},
},
[180748] = {
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{52.28,69.29}}},
},
[180793] = {
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{52.42,69.32}}},
},
}
local objectFixesAlliance = {
[180743] = {
[objectKeys.spawns] = {[zoneIDs.IRONFORGE]={{33.86,65.69}}},
},
[180746] = {
[objectKeys.spawns] = {[zoneIDs.IRONFORGE]={{33.46,65.57}}},
},
[180747] = {
[objectKeys.spawns] = {[zoneIDs.IRONFORGE]={{33.78,66.4}}},
},
[180748] = {
[objectKeys.spawns] = {[zoneIDs.IRONFORGE]={{33.9,66.68}}},
},
[180793] = {
[objectKeys.spawns] = {[zoneIDs.IRONFORGE]={{33.96,65.86}}},
},
}
if UnitFactionGroup("Player") == "Horde" then
return objectFixesHorde
else
return objectFixesAlliance
end
end
File diff suppressed because it is too large Load Diff
+174
View File
@@ -0,0 +1,174 @@
---@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
+714
View File
@@ -0,0 +1,714 @@
---@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
+474
View File
@@ -0,0 +1,474 @@
---@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
+526
View File
@@ -0,0 +1,526 @@
---@class QuestieTBCItemFixes
local QuestieTBCItemFixes = QuestieLoader:CreateModule("QuestieTBCItemFixes")
---@type QuestieDB
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
function QuestieTBCItemFixes:Load()
local itemKeys = QuestieDB.itemKeys
return {
[4503] = {
[itemKeys.npcDrops] = {2557,2556,2555,2553,2552,2558,2554},
},
[5445] = {
[itemKeys.npcDrops] = {3943},
},
[5959] = {
[itemKeys.npcDrops] = {4376,4378,4379,4380},
},
[6083] = {
[itemKeys.npcDrops] = {},
},
[8073] = {
[itemKeys.npcDrops] = {},
},
[12366] = {
[itemKeys.npcDrops] = {7457,7458,7459,7460},
},
[20023] = {
[itemKeys.npcDrops] = {6375,6377,6378,6379,6380,8759,8761,8762,8763,8764,8766,},
},
[21771] = {
[itemKeys.npcDrops] = {15668,15669},
},
[22435] = {
[itemKeys.npcDrops] = {6551,6552,6553,6554,6555,10040,10041},
},
[22775] = {
[itemKeys.npcDrops] = {16442},
},
[22776] = {
[itemKeys.npcDrops] = {16443},
},
[22777] = {
[itemKeys.npcDrops] = {16444},
},
[23217] = {
[itemKeys.npcDrops] = {16933},
},
[23339] = {
[itemKeys.npcDrops] = {},
},
[23361] = {
[itemKeys.class] = 12,
},
[23417] = {
[itemKeys.class] = 12,
},
[23645] = {
[itemKeys.class] = 12,
},
[23486] = {
[itemKeys.npcDrops] = {17034},
},
[23552] = {
[itemKeys.objectDrops] = {184079},
},
[23614] = {
[itemKeys.objectDrops] = {181616},
},
[23670] = {
[itemKeys.objectDrops] = {181632},
},
[23750] = {
[itemKeys.objectDrops] = {107047},
},
[23789] = {
[itemKeys.npcDrops] = {17186,17187,17188},
},
[23792] = {
[itemKeys.class] = 12,
},
[23801] = {
[itemKeys.class] = 12,
},
[23818] = {
[itemKeys.class] = 12,
},
[23848] = {
[itemKeys.npcDrops] = {3546},
},
[23849] = {
[itemKeys.npcDrops] = {17190,17191,17192},
},
[23878] = {
[itemKeys.objectDrops] = {181779},
},
[23879] = {
[itemKeys.objectDrops] = {181780},
},
[23880] = {
[itemKeys.objectDrops] = {181781},
},
[23894] = {
[itemKeys.npcDrops] = {17370,17371,17377,17381,17395,17397,17398,17414,17429,17491,17624,17626,},
},
[23984] = {
[itemKeys.npcDrops] = {17324,17327,17339,17342,17343,17344,17346,17347,17348,17350,17352,17353,17522,17523,17527,17588,17589,17661,17683,17322,17323,17325,17326,17328,17329,17330,17334,17336,17337,17338,17340,17341,17358,17494,17550,17604,17606,17607,17608,17609,17610,17713,17714,17715},
},
[24084] = {
[itemKeys.class] = 12,
},
[24099] = {
[itemKeys.class] = 12,
},
[24156] = {
[itemKeys.npcDrops] = {17544},
},
[24278] = {
[itemKeys.class] = 12,
},
[24285] = {
[itemKeys.npcDrops] = {16683},
},
[24286] = {
[itemKeys.npcDrops] = {16611},
},
[24287] = {
[itemKeys.class] = 12,
},
[24289] = {
[itemKeys.class] = 12,
},
[24317] = {
[itemKeys.objectDrops] = {182074},
},
[24335] = {
[itemKeys.class] = 12,
},
[24474] = {
[itemKeys.class] = 12,
},
[24502] = {
[itemKeys.npcDrops] = {17138,18037,18064,18065},
[itemKeys.class] = 12,
},
[24573] = {
[itemKeys.npcDrops] = {18197},
},
[24226] = {
[itemKeys.npcDrops] = {17832},
},
[24355] = {
[itemKeys.class] = 12,
},
[24467] = {
[itemKeys.class] = 12,
},
[24501] = {
[itemKeys.class] = 12,
},
[25460] = {
[itemKeys.npcDrops] = {},
},
[25461] = {
[itemKeys.npcDrops] = {18472},
},
[25462] = {
[itemKeys.npcDrops] = {16807},
},
[25465] = {
[itemKeys.class] = 12,
},
[25539] = {
[itemKeys.class] = 12,
},
[25552] = {
[itemKeys.class] = 12,
},
[25554] = {
[itemKeys.npcDrops] = {},
},
[25555] = {
[itemKeys.class] = 12,
},
[25642] = {
[itemKeys.objectDrops] = {185201},
},
[25807] = {
[itemKeys.npcDrops] = {18476,18477},
},
[25658] = {
[itemKeys.class] = 12,
},
[28038] = {
[itemKeys.class] = 12,
},
[28106] = {
[itemKeys.class] = 12,
},
[28132] = {
[itemKeys.class] = 12,
},
[28478] = {
[itemKeys.class] = 12,
},
[29112] = {
[itemKeys.npcDrops] = {18907},
},
[29162] = {
[itemKeys.objectDrops] = {184162},
},
[29324] = {
[itemKeys.class] = 12,
},
[29460] = {
[itemKeys.class] = 12,
},
[29473] = {
[itemKeys.class] = 12,
},
[29482] = {
[itemKeys.class] = 12,
},
[29742] = {
[itemKeys.class] = 12,
},
[29778] = {
[itemKeys.class] = 12,
},
[29795] = {
[itemKeys.class] = 12,
},
[29796] = {
[itemKeys.class] = 12,
},
[30259] = {
[itemKeys.class] = 12,
},
[30426] = {
[itemKeys.npcDrops] = {19762,19768,19789},
[itemKeys.class] = 12,
},
[30430] = {
[itemKeys.objectDrops] = {184715},
},
[30435] = {
[itemKeys.objectDrops] = {184729},
},
[30451] = {
[itemKeys.npcDrops] = {19799,19800,19802,21337,21656},
},
[30540] = {
[itemKeys.class] = 12,
},
[30639] = {
[itemKeys.class] = 12,
},
[30658] = {
[itemKeys.npcDrops] = {21727},
},
[30659] = {
[itemKeys.npcDrops] = {21725},
},
[30672] = {
[itemKeys.class] = 12,
},
[30712] = {
[itemKeys.class] = 12,
},
[30719] = {
[itemKeys.class] = 12,
},
[30721] = {
[itemKeys.class] = 12,
},
[30743] = {
[itemKeys.npcDrops] = {21821,20021},
},
[30782] = {
[itemKeys.npcDrops] = {21817,20021},
},
[30783] = {
[itemKeys.npcDrops] = {21820,20021},
},
[30808] = {
[itemKeys.npcDrops] = {18667},
},
[30823] = {
[itemKeys.npcDrops] = {19678},
},
[31121] = {
[itemKeys.class] = 12,
},
[31122] = {
[itemKeys.class] = 12,
},
[31130] = {
[itemKeys.npcDrops] = {21387},
},
[31252] = {
[itemKeys.npcDrops] = {18733},
},
[31279] = {
[itemKeys.class] = 12,
},
[31316] = {
[itemKeys.class] = 12,
},
[31530] = {
[itemKeys.objectDrops] = {177281},
},
[31495] = {
[itemKeys.class] = 12,
},
[31517] = {
[itemKeys.class] = 12,
},
[31518] = {
[itemKeys.class] = 12,
},
[31607] = {
[itemKeys.npcDrops] = {22258},
},
[31655] = {
[itemKeys.class] = 12,
},
[31664] = {
[itemKeys.class] = 12,
},
[31702] = {
[itemKeys.class] = 12,
},
[31708] = {
[itemKeys.objectDrops] = {185224},
},
[31709] = {
[itemKeys.objectDrops] = {185226},
},
[31710] = {
[itemKeys.objectDrops] = {185225},
},
[31716] = {
[itemKeys.npcDrops] = {17301},
},
[31721] = {
[itemKeys.npcDrops] = {17798},
},
[31722] = {
[itemKeys.npcDrops] = {18708},
},
[31951] = {
[itemKeys.vendors] = {21643},
},
[31957] = {
[itemKeys.npcDrops] = {20520},
},
[32364] = {
[itemKeys.objectDrops] = {185566},
[itemKeys.npcDrops] = {23002},
},
[32385] = {
[itemKeys.npcDrops] = {21174},
},
[32386] = {
[itemKeys.npcDrops] = {21174},
},
[32406] = {
[itemKeys.class] = 12,
},
[32723] = {
[itemKeys.npcDrops] = {},
},
[32971] = {
[itemKeys.class] = 12,
},
[33071] = {
[itemKeys.npcDrops] = {},
},
[33039] = {
[itemKeys.npcDrops] = {},
},
[31813] = {
[itemKeys.npcDrops] = {18884},
},
[34246] = {
[itemKeys.npcDrops] = {},
},
[32742] = {
[itemKeys.npcDrops] = {23363},
},
[33041] = {
[itemKeys.objectDrops] = {186283},
},
[33061] = {
[itemKeys.class] = 12,
},
[33086] = {
[itemKeys.npcDrops] = {},
},
[33087] = {
[itemKeys.npcDrops] = {4328,4329,4331},
},
[33112] = {
[itemKeys.npcDrops] = {},
},
[33175] = {
[itemKeys.npcDrops] = {},
},
[33814] = {
[itemKeys.npcDrops] = {17377},
},
[33815] = {
[itemKeys.npcDrops] = {16808},
},
[33821] = {
[itemKeys.npcDrops] = {17942},
},
[33826] = {
[itemKeys.npcDrops] = {17882},
},
[33827] = {
[itemKeys.npcDrops] = {17798},
},
[33833] = {
[itemKeys.npcDrops] = {17536},
},
[33834] = {
[itemKeys.npcDrops] = {18473},
},
[33835] = {
[itemKeys.npcDrops] = {18344},
},
[33836] = {
[itemKeys.npcDrops] = {18373},
},
[33837] = {
[itemKeys.npcDrops] = {18096},
},
[33840] = {
[itemKeys.npcDrops] = {18708},
},
[33858] = {
[itemKeys.npcDrops] = {17881},
},
[33859] = {
[itemKeys.npcDrops] = {17977},
},
[33860] = {
[itemKeys.npcDrops] = {19220},
},
[33861] = {
[itemKeys.npcDrops] = {20912},
},
[34160] = {
[itemKeys.npcDrops] = {24664},
},
[34338] = {
[itemKeys.npcDrops] = {24960,24966},
},
[34475] = {
[itemKeys.class] = 12,
},
[34477] = {
[itemKeys.class] = 12,
},
[34864] = {
[itemKeys.objectDrops] = {500004,500005,500006},
},
[35229] = {
[itemKeys.objectDrops] = {400013},
},
[35277] = {
[itemKeys.npcDrops] = {25866,25863,25924},
},
[37736] = { -- 2021 Brewfest item (Alliance)
[itemKeys.name] = '"Brew of the Month" Club Membership Form',
[itemKeys.startQuest] = 12420,
[itemKeys.itemLevel] = 1,
[itemKeys.requiredLevel] = 1,
[itemKeys.ammoType] = 0,
[itemKeys.class] = 12,
[itemKeys.subClass] = 0,
[itemKeys.vendors] = {23710,27478},
},
[37737] = { -- 2021 Brewfest item (Horde)
[itemKeys.name] = '"Brew of the Month" Club Membership Form',
[itemKeys.startQuest] = 12421,
[itemKeys.itemLevel] = 1,
[itemKeys.requiredLevel] = 1,
[itemKeys.ammoType] = 0,
[itemKeys.class] = 12,
[itemKeys.subClass] = 0,
[itemKeys.vendors] = {24495,27489},
},
}
end
-- This should allow manual fix for item availability
function QuestieTBCItemFixes:LoadFactionFixes()
local itemKeys = QuestieDB.itemKeys
local itemFixesHorde = {
[30712] = {
[itemKeys.npcDrops] = {21779},
},
[30713] = {
[itemKeys.objectDrops] = {185233},
},
}
local itemFixesAlliance = {
[30712] = {
[itemKeys.npcDrops] = {21778},
},
[30713] = {
[itemKeys.objectDrops] = {184947},
},
}
if UnitFactionGroup("Player") == "Horde" then
return itemFixesHorde
else
return itemFixesAlliance
end
end
File diff suppressed because it is too large Load Diff
+728
View File
@@ -0,0 +1,728 @@
---@class QuestieTBCObjectFixes
local QuestieTBCObjectFixes = QuestieLoader:CreateModule("QuestieTBCObjectFixes")
---@type QuestieDB
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
---@type ZoneDB
local ZoneDB = QuestieLoader:ImportModule("ZoneDB")
function QuestieTBCObjectFixes:Load()
local objectKeys = QuestieDB.objectKeys
local zoneIDs = ZoneDB.zoneIDs
return {
[142122] = {
[objectKeys.questStarts] = {2781,2875},
},
[177281] = {
[objectKeys.spawns] = {[zoneIDs.ZANGARMARSH]={{80.32,65.06}}},
},
[177790] = {
[objectKeys.spawns] = {[zoneIDs.SILVERPINE_FOREST]={{29.56,29.2}}},
},
[180570] = {
[objectKeys.spawns] = {[zoneIDs.HILLSBRAD_FOOTHILLS]={{51.37,58.98}}},
},
[181138] = {
[objectKeys.spawns] = {[zoneIDs.GHOSTLANDS]={{12.53,26.51},{14.7,26.4},{13.69,26.84}}},
},
[181679] = {
[objectKeys.spawns] = {[zoneIDs.THE_SHATTERED_HALLS]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.THE_SHATTERED_HALLS,
},
[181697] = {
[objectKeys.spawns] = {[zoneIDs.AZUREMYST_ISLE]={{33.7,74.4},{37,69.4},{37,69.5},{38,72},{38.2,69.4},{38.2,69.6},{38.8,74.4},{38.8,74.6},{39.9,69.5},{39.9,71.2},{39.9,71.5},{40,69.2},{41.3,67.1},{42.4,66.1},{42.4,68.8},{42.6,66},{42.6,68.9},{43.9,65.8},{44.4,69},{44.6,68.8},{44.8,70.4},{44.8,70.5},{46.3,66.3},{46.5,66.2},{48.3,64.9},{48.5,64.7},{49.3,61.9},{50.1,57.4},{50.1,57.5},{50.2,60.1},{50.3,63.3},{50.3,66.9},{50.4,63.5},{50.5,63.1},{51.1,64.7},{51.4,65.9},{51.5,66},{52.8,67},{54.4,64.4},{54.4,64.5},{54.5,64.4},{54.5,64.5},{55.4,62},{55.5,62.1},{55.7,63.9},{57,63.6}}},
},
[181746] = {
[objectKeys.spawns] = {[zoneIDs.BLOODMYST_ISLE]={{38.5,22.5},{40.6,20.1},{44,22.5},{46.4,20.5}}},
[objectKeys.zoneID] = zoneIDs.BLOODMYST_ISLE,
},
[181757] = {
[objectKeys.spawns] = {[zoneIDs.AZUREMYST_ISLE]={{33.3,26.1},{33.4,26.7},{33.5,26.5},{33.6,26.4},{33.7,18.7},{33.9,15.5},{34.1,14.7},{34.8,22.1},{34.9,12}}},
[objectKeys.zoneID] = zoneIDs.AZUREMYST_ISLE,
},
[181781] = {
[objectKeys.spawns] = {[zoneIDs.BLOODMYST_ISLE]={{41,30}}},
[objectKeys.zoneID] = zoneIDs.BLOODMYST_ISLE,
},
[181897] = {
[objectKeys.spawns] = {[zoneIDs.BLOODMYST_ISLE]={{68.3,21.7},{69.98,26.3},{70.6,16.5},{71.4,11.7},{71.4,28.2},{72.7,21.4},{74.7,16.3},{75,8.7},{75.4,19.1},{75.7,28.4},{75.54,13.85},{76,24.8},{76.8,21.4}}},
},
[182116] = {
[objectKeys.spawns] = {[zoneIDs.ZANGARMARSH]={{61.5,56.1},{62.4,53.0},{62.4,59.2},{62.5,53.0},{62.5,59.2},{62.9,45.5},{63.0,45.4},{64.1,51.2},{64.8,49.3},{64.8,49.5},{65.0,53.8},{65.4,50.6},{65.6,50.7},{65.8,47.5},{65.9,47.4},{66.0,62.2},{66.1,46.4},{66.4,52.1},{66.5,52.1},{66.6,47.9},{67.3,50.1},{67.3,54.7},{67.7,53.4},{68.0,48.3},{68.3,44.7},{68.3,53.7},{68.6,54.4},{68.6,54.5},{68.8,47.8},{70.2,47.9},{70.7,50.2},{71.0,53.9},{71.1,51.7},{71.2,47.2},{71.6,45.4},{71.6,45.5},{73.1,46.8}}},
},
[182950] = {
[objectKeys.factionID] = 80,
},
[183050] = {
[objectKeys.spawns] = {[zoneIDs.SETHEKK_HALLS]={{-1,-1}}},
},
[183933] = {
[objectKeys.spawns] = {[zoneIDs.NETHERSTORM]={{18.54,73.68},{35.53,57.98},{34.93,58.48},{36.56,59.4},{37.25,57.88},{19.82,75.69},{20.31,77.36},{19.39,78.38},{22.24,78.14},{24.42,78.22},{23.75,79.38},{31.73,71.52},{32.94,79.62},{32.9,78.28},{33.92,79.24},{34.81,78.16},{33.83,77.23},{34.73,77.5},{35.4,76.08},{39.09,77.34},{39.08,78.19},{40.81,77.3},{41.87,77.04},{19.61,75.08},{19.59,78.58},{21.6,78.4},{23.42,77.77},{19.44,74.0},{32.3,79.15},{32.43,79.37},{33.91,75.74},{34.14,78.13},{41.26,77.05},{40.37,78.64},{33.97,75.64}}},
},
[184588] = {
[objectKeys.name] = "Captain Tyralius's Prison",
[objectKeys.spawns] = {[zoneIDs.NETHERSTORM] = {{53.3,41.43}}},
[objectKeys.zoneID] = zoneIDs.NETHERSTORM,
},
[184980] = {
[objectKeys.spawns] = {[zoneIDs.HELLFIRE_PENINSULA]={{45.9,28.2},{46.2,29.1},{46.4,32.5},{46.5,28.6},{46.6,29.5},{46.6,32.6},{46.7,32.4},{46.7,39.6},{46.8,28.3},{46.8,39.3},{46.8,40.7},{46.9,35.6},{46.9,37.4},{46.9,37.6},{47.3,35.2},{47.4,30.7},{47.5,29.1},{47.5,34.4},{47.5,35.3},{47.5,35.9},{47.7,30.7},{47.8,32.5},{48.1,30.1},{48.3,31.9},{48.6,29.6},{48.8,29.0},{48.9,30.9},{48.9,31.5},{49.4,28.1},{49.4,42.8},{49.6,28.4},{49.6,31.3},{49.7,29.8},{50.0,28.7},{50.0,38.4},{50.1,43.5},{50.2,35.9},{50.2,38.6},{50.2,40.5},{50.2,43.2},{50.2,44.9},{50.2,45.7},{50.3,27.4},{50.3,37.4},{50.3,40.3},{50.4,41.5},{50.5,28.7},{50.5,38.6},{50.6,42.9},{50.7,38.1},{50.7,40.0},{50.8,26.6},{50.8,29.6},{50.8,43.5},{50.8,44.7},{51.0,26.0},{51.0,27.9},{51.3,23.5},{51.3,31.2},{51.4,40.5},{51.5,40.7},{51.5,44.2},{51.5,44.7},{51.6,21.4},{51.8,22.8},{52.2,22.2},{52.8,44.3},{52.8,44.5},{53.4,45.7},{53.5,43.8},{53.8,44.8},{55.2,45.5}}},
},
[184998] = {
[objectKeys.name] = "Ethereum Prison",
[objectKeys.spawns] = {[zoneIDs.NETHERSTORM] = {{54.52,39.93},{54.53,40.28},{54.28,40.29},{54.53,40.6},{54.77,40.28},{54.76,39.91},{54.46,46.37},{54.82,46.79},{54.63,46.76},{54.45,46.73},{54.73,46.57},{54.54,46.55},{54.38,46.53},{54.64,46.39}}},
},
[185001] = {
[objectKeys.name] = "Ethereum Stasis Chamber",
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS] = {{52.5,20.43},{52.68,20.25},{52.87,20.08},{49.62,21.42},{49.39,21.3},{49.15,21.13},{49.63,15.76},{49.48,15.54}}},
[objectKeys.zoneID] = zoneIDs.BLADES_EDGE_MOUNTAINS,
},
[185002] = {
[objectKeys.name] = "Mana-Tombs Stasis Chamber",
[objectKeys.spawns] = {[zoneIDs.MANA_TOMBS] = {{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.MANA_TOMBS,
},
[185015] = {
[objectKeys.spawns] = {[zoneIDs.THE_MECHANAR]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.THE_MECHANAR,
},
[185033] = {
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS] = {{66.39,44.08}}},
},
[185144] = {
[objectKeys.name] = "Bleeding Hollow Forge",
},
[185200] = {
[objectKeys.spawns] = {[zoneIDs.TEROKKAR_FOREST] = {{50.12,19.37}}},
},
[185322] = {
[objectKeys.spawns] = {[zoneIDs.SILITHUS]={{28.7,98.7}}},
},
[185460] = {
[objectKeys.name] = "Ethereum Prison",
},
[185562] = {
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS]={{77.53,31.2}}},
},
[185567] = {
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS]={{60.92,47.61}}},
},
[185569] = {
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS]={{58.59,60.8}}},
},
[185574] = {
[objectKeys.spawns] = {[zoneIDs.TEROKKAR_FOREST]={{20.17,18.1}}},
},
[185577] = {
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS]={{60.7,25.46}}},
},
[185937] = {
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS] = {{66.71,14.3}}},
},
[185938] = {
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS] = {{62.75,7.33}}},
},
[186273] = {
[objectKeys.spawns] = {[zoneIDs.DUSTWALLOW_MARSH]={{61.7,18.2}}},
},
[186887] = {
[objectKeys.spawns] = {
[zoneIDs.DUROTAR]={{52.6,42.5}},
[zoneIDs.ELWYNN_FOREST]={{42.5,65.8}},
[zoneIDs.DUN_MOROGH]={{46.4,52.2}},
[zoneIDs.TIRISFAL_GLADES]={{60.9,52.7}},
[zoneIDs.AZUREMYST_ISLE]={{48.99,51.02}},
[zoneIDs.EVERSONG_WOODS]={{47.5,46.3}},
},
},
[187039] = {
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS]={{50.0,12.4},{50.7,13.3},{50.7,13.9},{50.47,19.23},{49.27,19.97},{49.08,19.02},{49.31,17.77},{49.48,17.03},{50.91,17.26},{50.18,16.55},{51.15,16.75},{51.98,15.68},{50.7,13.34},{51.94,13.16},{51.02,11.97},{51.6,13.9},{54.13,18.84},},},
},
[187072] = {
[objectKeys.spawns] = {[3519]={{57.58,13.98},{53.94,13.64},{59.56,12.85},{55.3,12.31},{60.97,10.78},{47.65,7.78},{45.84,6.15},{47.46,5.59}}},
},
[187078] = {
[objectKeys.spawns] = {[zoneIDs.ISLE_OF_QUEL_DANAS]={{46.5,35.5},{48.63,35.37},{48.89,39.15},{49.14,29.53},{50.32,38.27},{50.34,42.36},{53.77,36.21},}},
},
[187260] = {
[objectKeys.spawns] = {[zoneIDs.FELWOOD]={{34.82,52.95}}}, -- TBC only Mailbox
},
[187892] = {
[objectKeys.spawns] = {[zoneIDs.THE_SLAVE_PENS] = {{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.THE_SLAVE_PENS,
},
[187917] = {
[objectKeys.name] = "Alliance Bonfire",
[objectKeys.spawns] = {[zoneIDs.AZUREMYST_ISLE] = {{44.7,52.7}}},
[objectKeys.zoneID] = zoneIDs.AZUREMYST_ISLE,
},
[187919] = {
[objectKeys.name] = "Alliance Bonfire",
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS] = {{41.6,66.0}}},
[objectKeys.zoneID] = zoneIDs.BLADES_EDGE_MOUNTAINS,
},
[187921] = {
[objectKeys.name] = "Alliance Bonfire",
[objectKeys.spawns] = {[zoneIDs.BLOODMYST_ISLE] = {{55.8,68.8}}},
[objectKeys.zoneID] = zoneIDs.BLOODMYST_ISLE,
},
[187922] = {
[objectKeys.name] = "Alliance Bonfire",
[objectKeys.spawns] = {[zoneIDs.BURNING_STEPPES] = {{80.5,62.2}}},
[objectKeys.zoneID] = zoneIDs.BURNING_STEPPES,
},
[187929] = {
[objectKeys.spawns] = {[zoneIDs.FERALAS]={{28.2,44.1}}},
},
[187933] = {
[objectKeys.name] = "Alliance Bonfire",
[objectKeys.spawns] = {[zoneIDs.NAGRAND] = {{49.7,69.7}}},
[objectKeys.zoneID] = zoneIDs.NAGRAND,
},
[187935] = {
[objectKeys.name] = "Alliance Bonfire",
[objectKeys.spawns] = {[zoneIDs.SHADOWMOON_VALLEY] = {{39.6,54.4}}},
[objectKeys.zoneID] = zoneIDs.SHADOWMOON_VALLEY,
},
[187937] = {
[objectKeys.name] = "Alliance Bonfire",
[objectKeys.spawns] = {[zoneIDs.TEROKKAR_FOREST] = {{54.3,55.7}}},
[objectKeys.zoneID] = zoneIDs.TEROKKAR_FOREST,
},
[187939] = {
[objectKeys.name] = "Alliance Bonfire",
[objectKeys.spawns] = {[zoneIDs.WESTERN_PLAGUELANDS] = {{43.5,82.9}}},
[objectKeys.zoneID] = zoneIDs.WESTERN_PLAGUELANDS,
},
[187941] = {
[objectKeys.name] = "Alliance Bonfire",
[objectKeys.spawns] = {[zoneIDs.ZANGARMARSH] = {{68.8,52.0}}},
[objectKeys.zoneID] = zoneIDs.ZANGARMARSH,
},
[187942] = {
[objectKeys.name] = "Alliance Bonfire",
[objectKeys.spawns] = {[zoneIDs.NETHERSTORM] = {{31.0,62.8}}},
[objectKeys.zoneID] = zoneIDs.NETHERSTORM,
},
[187949] = {
[objectKeys.name] = "Horde Bonfire",
[objectKeys.spawns] = {[zoneIDs.NETHERSTORM] = {{32.3,68.3}}},
[objectKeys.zoneID] = zoneIDs.NETHERSTORM,
},
[187955] = {
[objectKeys.name] = "Horde Bonfire",
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS] = {{50.0,59.0}}},
[objectKeys.zoneID] = zoneIDs.BLADES_EDGE_MOUNTAINS,
},
[187958] = {
[objectKeys.name] = "Horde Bonfire",
[objectKeys.spawns] = {[zoneIDs.DUROTAR] = {{52.0,47.2}}},
[objectKeys.zoneID] = zoneIDs.DUROTAR,
},
[187960] = {
[objectKeys.name] = "Horde Bonfire",
[objectKeys.spawns] = {[zoneIDs.EVERSONG_WOODS] = {{46.4,50.4}}},
[objectKeys.zoneID] = zoneIDs.EVERSONG_WOODS,
},
[187962] = {
[objectKeys.name] = "Horde Bonfire",
[objectKeys.spawns] = {[zoneIDs.GHOSTLANDS] = {{47.1,26.1}}},
[objectKeys.zoneID] = zoneIDs.GHOSTLANDS,
},
[187965] = {
[objectKeys.spawns] = {[zoneIDs.MULGORE]={{52,60}}},
},
[187967] = {
[objectKeys.name] = "Horde Bonfire",
[objectKeys.spawns] = {[zoneIDs.SHADOWMOON_VALLEY] = {{33.5,30.3}}},
[objectKeys.zoneID] = zoneIDs.SHADOWMOON_VALLEY,
},
[187974] = {
[objectKeys.name] = "Horde Bonfire",
[objectKeys.spawns] = {[zoneIDs.TIRISFAL_GLADES] = {{57.0,51.7}}},
[objectKeys.zoneID] = zoneIDs.TIRISFAL_GLADES,
},
[188123] = {
[objectKeys.spawns] = {[zoneIDs.DARNASSUS]={{67.18,16.47}}}, -- TBC only Mailbox
},
[188128] = {
[objectKeys.name] = "Flame of the Exodar",
[objectKeys.spawns] = {[zoneIDs.THE_EXODAR] = {{41.7,25.0}}},
[objectKeys.zoneID] = zoneIDs.THE_EXODAR,
},
[188129] = {
[objectKeys.name] = "Flame of Silvermoon",
[objectKeys.spawns] = {[zoneIDs.SILVERMOON_CITY] = {{69.1,43.5}}},
[objectKeys.zoneID] = zoneIDs.SILVERMOON_CITY,
},
[189303] = {
[objectKeys.spawns] = {[zoneIDs.ELWYNN_FOREST]={{43.74,65.89}}},
[objectKeys.zoneID] = zoneIDs.ELWYNN_FOREST,
},
[189989] = {
[objectKeys.spawns] = {[zoneIDs.DUN_MOROGH]={{48.89,38.81}}},
[objectKeys.zoneID] = zoneIDs.DUN_MOROGH,
},
[189990] = {
[objectKeys.spawns] = {[zoneIDs.DUROTAR]={{44.1,17.2}}},
[objectKeys.zoneID] = zoneIDs.DUROTAR,
},
[190034] = {
[objectKeys.spawns] = {[zoneIDs.TELDRASSIL]={{55.61,59.85}}},
[objectKeys.zoneID] = zoneIDs.TELDRASSIL,
},
[190035] = {
[objectKeys.spawns] = {[zoneIDs.ASHENVALE]={{37.01,49.26}}},
[objectKeys.zoneID] = zoneIDs.ASHENVALE,
},
[190036] = {
[objectKeys.spawns] = {[zoneIDs.DUN_MOROGH]={{47.38,52.45}}},
[objectKeys.zoneID] = zoneIDs.DUN_MOROGH,
},
[190037] = {
[objectKeys.spawns] = {[zoneIDs.AZUREMYST_ISLE]={{48.49,49.04}}},
[objectKeys.zoneID] = zoneIDs.AZUREMYST_ISLE,
},
[190038] = {
[objectKeys.spawns] = {[zoneIDs.DARNASSUS]={{67.46,16.06}}},
[objectKeys.zoneID] = zoneIDs.DARNASSUS,
},
[190039] = {
[objectKeys.spawns] = {[zoneIDs.IRONFORGE]={{18.33,50.94}}},
[objectKeys.zoneID] = zoneIDs.IRONFORGE,
},
[190041] = {
[objectKeys.spawns] = {[zoneIDs.THE_EXODAR]={{59.25,18.46}}},
[objectKeys.zoneID] = zoneIDs.THE_EXODAR,
},
[190042] = {
[objectKeys.spawns] = {[zoneIDs.DARKSHORE]={{37.04,44.04}}},
[objectKeys.zoneID] = zoneIDs.DARKSHORE,
},
[190043] = {
[objectKeys.spawns] = {[zoneIDs.LOCH_MODAN]={{35.54,48.50}}},
[objectKeys.zoneID] = zoneIDs.LOCH_MODAN,
},
[190044] = {
[objectKeys.spawns] = {[zoneIDs.WETLANDS]={{10.83,60.99}}},
[objectKeys.zoneID] = zoneIDs.WETLANDS,
},
[190045] = {
[objectKeys.spawns] = {[zoneIDs.BLOODMYST_ISLE]={{55.69,59.97}}},
[objectKeys.zoneID] = zoneIDs.BLOODMYST_ISLE,
},
[190046] = {
[objectKeys.spawns] = {[zoneIDs.REDRIDGE_MOUNTAINS]={{27.09,44.91}}},
[objectKeys.zoneID] = zoneIDs.REDRIDGE_MOUNTAINS,
},
[190047] = {
[objectKeys.spawns] = {[zoneIDs.WESTFALL]={{52.91,53.74}}},
[objectKeys.zoneID] = zoneIDs.WESTFALL,
},
[190048] = {
[objectKeys.spawns] = {[zoneIDs.DUSKWOOD]={{73.79,44.25}}},
[objectKeys.zoneID] = zoneIDs.DUSKWOOD,
},
[190049] = {
[objectKeys.spawns] = {[zoneIDs.HILLSBRAD_FOOTHILLS]={{51.14,59.04}}},
[objectKeys.zoneID] = zoneIDs.HILLSBRAD_FOOTHILLS,
},
[190050] = {
[objectKeys.spawns] = {[zoneIDs.STONETALON_MOUNTAINS]={{35.52,6.40}}},
[objectKeys.zoneID] = zoneIDs.STONETALON_MOUNTAINS,
},
[190051] = {
[objectKeys.spawns] = {[zoneIDs.DESOLACE]={{66.33,6.58}}},
[objectKeys.zoneID] = zoneIDs.DESOLACE,
},
[190052] = {
[objectKeys.spawns] = {[zoneIDs.DUSTWALLOW_MARSH]={{66.60,45.28}}},
[objectKeys.zoneID] = zoneIDs.DUSTWALLOW_MARSH,
},
[190053] = {
[objectKeys.spawns] = {[zoneIDs.FERALAS]={{30.93,43.45}}},
[objectKeys.zoneID] = zoneIDs.FERALAS,
},
[190054] = {
[objectKeys.spawns] = {[zoneIDs.THE_HINTERLANDS]={{14.11,41.52}}},
[objectKeys.zoneID] = zoneIDs.THE_HINTERLANDS,
},
[190055] = {
[objectKeys.spawns] = {[zoneIDs.HELLFIRE_PENINSULA]={{54.25,63.68}}},
[objectKeys.zoneID] = zoneIDs.HELLFIRE_PENINSULA,
},
[190056] = {
[objectKeys.spawns] = {[zoneIDs.HELLFIRE_PENINSULA]={{23.42,36.37}}},
[objectKeys.zoneID] = zoneIDs.HELLFIRE_PENINSULA,
},
[190057] = {
[objectKeys.spawns] = {[zoneIDs.ZANGARMARSH]={{67.17,48.94}}},
[objectKeys.zoneID] = zoneIDs.ZANGARMARSH,
},
[190058] = {
[objectKeys.spawns] = {[zoneIDs.ZANGARMARSH]={{41.90,26.17}}},
[objectKeys.zoneID] = zoneIDs.ZANGARMARSH,
},
[190059] = {
[objectKeys.spawns] = {[zoneIDs.TEROKKAR_FOREST]={{56.60,53.22}}},
[objectKeys.zoneID] = zoneIDs.TEROKKAR_FOREST,
},
[190060] = {
[objectKeys.spawns] = {[zoneIDs.NAGRAND]={{54.19,75.88}}},
[objectKeys.zoneID] = zoneIDs.NAGRAND,
},
[190061] = {
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS]={{35.83,63.73}}},
[objectKeys.zoneID] = zoneIDs.BLADES_EDGE_MOUNTAINS,
},
[190062] = {
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS]={{61.06,68.08}}},
[objectKeys.zoneID] = zoneIDs.BLADES_EDGE_MOUNTAINS,
},
[190063] = {
[objectKeys.spawns] = {[zoneIDs.SHADOWMOON_VALLEY]={{37.01,58.29}}},
[objectKeys.zoneID] = zoneIDs.SHADOWMOON_VALLEY,
},
[190064] = {
[objectKeys.spawns] = {[zoneIDs.DUROTAR]={{51.6,41.6}}},
[objectKeys.zoneID] = zoneIDs.DUROTAR,
},
[190065] = {
[objectKeys.spawns] = {[zoneIDs.MULGORE]={{46.6,61.0}}},
[objectKeys.zoneID] = zoneIDs.MULGORE,
},
[190066] = {
[objectKeys.spawns] = {[zoneIDs.TIRISFAL_GLADES]={{61.8,52.2}}},
[objectKeys.zoneID] = zoneIDs.TIRISFAL_GLADES,
},
[190067] = {
[objectKeys.spawns] = {[zoneIDs.EVERSONG_WOODS]={{48.1,47.8}}},
[objectKeys.zoneID] = zoneIDs.EVERSONG_WOODS,
},
[190068] = {
[objectKeys.spawns] = {[zoneIDs.EVERSONG_WOODS]={{43.7,71.1}}},
[objectKeys.zoneID] = zoneIDs.EVERSONG_WOODS,
},
[190069] = {
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{54.45,68.64}}},
[objectKeys.zoneID] = zoneIDs.ORGRIMMAR,
},
[190070] = {
[objectKeys.spawns] = {[zoneIDs.THUNDER_BLUFF]={{45.6,64.4}}},
[objectKeys.zoneID] = zoneIDs.THUNDER_BLUFF,
},
[190071] = {
[objectKeys.spawns] = {[zoneIDs.UNDERCITY]={{67.76,37.40}}},
[objectKeys.zoneID] = zoneIDs.UNDERCITY,
},
[190072] = {
[objectKeys.spawns] = {[zoneIDs.SILVERMOON_CITY]={{79.42,57.65}}},
[objectKeys.zoneID] = zoneIDs.SILVERMOON_CITY,
},
[190073] = {
[objectKeys.spawns] = {[zoneIDs.SILVERMOON_CITY]={{67.58,72.88}}},
[objectKeys.zoneID] = zoneIDs.SILVERMOON_CITY,
},
[190074] = {
[objectKeys.spawns] = {[zoneIDs.SILVERPINE_FOREST]={{43.2,41.4}}},
[objectKeys.zoneID] = zoneIDs.SILVERPINE_FOREST,
},
[190075] = {
[objectKeys.spawns] = {[zoneIDs.GHOSTLANDS]={{48.7,32.0}}},
[objectKeys.zoneID] = zoneIDs.GHOSTLANDS,
},
[190076] = {
[objectKeys.spawns] = {[zoneIDs.THE_BARRENS]={{52.0,29.9}}},
[objectKeys.zoneID] = zoneIDs.THE_BARRENS,
},
[190077] = {
[objectKeys.spawns] = {[zoneIDs.THE_BARRENS]={{45.6,59.0}}},
[objectKeys.zoneID] = zoneIDs.THE_BARRENS,
},
[190078] = {
[objectKeys.spawns] = {[zoneIDs.HILLSBRAD_FOOTHILLS]={{62.8,19.0}}},
[objectKeys.zoneID] = zoneIDs.HILLSBRAD_FOOTHILLS,
},
[190079] = {
[objectKeys.spawns] = {[zoneIDs.ASHENVALE]={{73.9,60.7}}},
[objectKeys.zoneID] = zoneIDs.ASHENVALE,
},
[190080] = {
[objectKeys.spawns] = {[zoneIDs.STONETALON_MOUNTAINS]={{47.5,62.1}}},
[objectKeys.zoneID] = zoneIDs.STONETALON_MOUNTAINS,
},
[190081] = {
[objectKeys.spawns] = {[zoneIDs.THOUSAND_NEEDLES]={{46.1,51.4}}},
[objectKeys.zoneID] = zoneIDs.THOUSAND_NEEDLES,
},
[190082] = {
[objectKeys.spawns] = {[zoneIDs.ARATHI_HIGHLANDS]={{73.9,32.6}}},
[objectKeys.zoneID] = zoneIDs.ARATHI_HIGHLANDS,
},
[190083] = {
[objectKeys.spawns] = {[zoneIDs.DESOLACE]={{24.1,68.3}}},
[objectKeys.zoneID] = zoneIDs.DESOLACE,
},
[190084] = {
[objectKeys.spawns] = {[zoneIDs.STRANGLETHORN_VALE]={{31.5,29.7}}},
[objectKeys.zoneID] = zoneIDs.STRANGLETHORN_VALE,
},
[190085] = {
[objectKeys.spawns] = {[zoneIDs.DUSTWALLOW_MARSH]={{36.8,32.4}}},
[objectKeys.zoneID] = zoneIDs.DUSTWALLOW_MARSH,
},
[190086] = {
[objectKeys.spawns] = {[zoneIDs.SWAMP_OF_SORROWS]={{45.1,56.6}}},
[objectKeys.zoneID] = zoneIDs.SWAMP_OF_SORROWS,
},
[190087] = {
[objectKeys.spawns] = {[zoneIDs.BADLANDS]={{2.9,46.0}}},
[objectKeys.zoneID] = zoneIDs.BADLANDS,
},
[190088] = {
[objectKeys.spawns] = {[zoneIDs.FERALAS]={{74.8,45.1}}},
[objectKeys.zoneID] = zoneIDs.FERALAS,
},
[190089] = {
[objectKeys.spawns] = {[zoneIDs.THE_HINTERLANDS]={{78.2,81.4}}},
[objectKeys.zoneID] = zoneIDs.THE_HINTERLANDS,
},
[190090] = {
[objectKeys.spawns] = {[zoneIDs.HELLFIRE_PENINSULA]={{56.8,37.5}}},
[objectKeys.zoneID] = zoneIDs.HELLFIRE_PENINSULA,
},
[190091] = {
[objectKeys.spawns] = {[zoneIDs.HELLFIRE_PENINSULA]={{26.9,59.6}}},
[objectKeys.zoneID] = zoneIDs.HELLFIRE_PENINSULA,
},
[190096] = {
[objectKeys.spawns] = {[zoneIDs.ZANGARMARSH]={{30.7,50.9}}},
[objectKeys.zoneID] = zoneIDs.ZANGARMARSH,
},
[190097] = {
[objectKeys.spawns] = {[zoneIDs.TEROKKAR_FOREST]={{48.8,45.2}}},
[objectKeys.zoneID] = zoneIDs.TEROKKAR_FOREST,
},
[190098] = {
[objectKeys.spawns] = {[zoneIDs.NAGRAND]={{56.7,34.6}}},
[objectKeys.zoneID] = zoneIDs.NAGRAND,
},
[190099] = {
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS]={{53.4,55.5}}},
[objectKeys.zoneID] = zoneIDs.BLADES_EDGE_MOUNTAINS,
},
[190100] = {
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS]={{76.2,60.4}}},
[objectKeys.zoneID] = zoneIDs.BLADES_EDGE_MOUNTAINS,
},
[190101] = {
[objectKeys.spawns] = {[zoneIDs.SHADOWMOON_VALLEY]={{30.3,27.8}}},
[objectKeys.zoneID] = zoneIDs.SHADOWMOON_VALLEY,
},
[190102] = {
[objectKeys.spawns] = {[zoneIDs.THE_BARRENS]={{62.07,39.41}}},
[objectKeys.zoneID] = zoneIDs.THE_BARRENS,
},
[190103] = {
[objectKeys.spawns] = {[zoneIDs.STRANGLETHORN_VALE]={{27.06,77.28}}},
[objectKeys.zoneID] = zoneIDs.STRANGLETHORN_VALE,
},
[190104] = {
[objectKeys.spawns] = {[zoneIDs.DUSTWALLOW_MARSH]={{41.86,74.09}}},
[objectKeys.zoneID] = zoneIDs.DUSTWALLOW_MARSH,
},
[190105] = {
[objectKeys.spawns] = {[zoneIDs.TANARIS]={{52.45,27.87}}},
[objectKeys.zoneID] = zoneIDs.TANARIS,
},
[190106] = {
[objectKeys.spawns] = {[zoneIDs.WINTERSPRING]={{61.33,38.86}}},
[objectKeys.zoneID] = zoneIDs.WINTERSPRING,
},
[190107] = {
[objectKeys.spawns] = {[zoneIDs.SILITHUS]={{51.83,39.18}}},
[objectKeys.zoneID] = zoneIDs.SILITHUS,
},
[190109] = {
[objectKeys.spawns] = {[zoneIDs.ZANGARMARSH]={{78.45,62.89}}},
[objectKeys.zoneID] = zoneIDs.ZANGARMARSH,
},
[190110] = {
[objectKeys.spawns] = {[zoneIDs.SHATTRATH_CITY]={{28.24,49.10}}},
[objectKeys.zoneID] = zoneIDs.SHATTRATH_CITY,
},
[190111] = {
[objectKeys.spawns] = {[zoneIDs.SHATTRATH_CITY]={{56.31,81.96}}},
[objectKeys.zoneID] = zoneIDs.SHATTRATH_CITY,
},
[190112] = {
[objectKeys.spawns] = {[zoneIDs.BLADES_EDGE_MOUNTAINS]={{62.91,38.33}}},
[objectKeys.zoneID] = zoneIDs.BLADES_EDGE_MOUNTAINS,
},
[190113] = {
[objectKeys.spawns] = {[zoneIDs.NETHERSTORM]={{32.02,64.45}}},
[objectKeys.zoneID] = zoneIDs.NETHERSTORM,
},
[190114] = {
[objectKeys.spawns] = {[zoneIDs.NETHERSTORM]={{43.31,36.10}}},
[objectKeys.zoneID] = zoneIDs.NETHERSTORM,
},
[190115] = {
[objectKeys.spawns] = {[zoneIDs.SHADOWMOON_VALLEY]={{60.99,28.17}}},
[objectKeys.zoneID] = zoneIDs.SHADOWMOON_VALLEY,
},
[190116] = {
[objectKeys.spawns] = {[zoneIDs.SHADOWMOON_VALLEY]={{56.37,59.82}}},
[objectKeys.zoneID] = zoneIDs.SHADOWMOON_VALLEY,
},
[190483] = {
[objectKeys.name] = "Document Chest",
[objectKeys.spawns] = {[zoneIDs.THOUSAND_NEEDLES]={{33.76,39.99}}},
[objectKeys.zoneID] = zoneIDs.THOUSAND_NEEDLES,
},
[190484] = {
[objectKeys.name] = "Document Chest",
[objectKeys.spawns] = {[zoneIDs.THOUSAND_NEEDLES]={{39.34,41.53}}},
[objectKeys.zoneID] = zoneIDs.THOUSAND_NEEDLES,
},
-- Below are fake objects
[400000] = {
[objectKeys.name] = "Mailbox",
[objectKeys.questStarts] = {9672},
[objectKeys.spawns] = {[zoneIDs.BLOODMYST_ISLE]={{55.2,59.2}}},
[objectKeys.zoneID] = zoneIDs.BLOODMYST_ISLE,
},
[400001] = {
[objectKeys.name] = "Open the Survival Kit",
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{40.5,19}}},
[objectKeys.zoneID] = zoneIDs.ORGRIMMAR,
},
[400002] = {
[objectKeys.name] = "Equip a Weapon",
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{39.5,19}}},
[objectKeys.zoneID] = zoneIDs.ORGRIMMAR,
},
[400003] = {
[objectKeys.name] = "Open the Survival Kit",
[objectKeys.spawns] = {[zoneIDs.THUNDER_BLUFF]={{76.8,29.7}}},
[objectKeys.zoneID] = zoneIDs.THUNDER_BLUFF,
},
[400004] = {
[objectKeys.name] = "Equip a Weapon",
[objectKeys.spawns] = {[zoneIDs.THUNDER_BLUFF]={{76.8,29.7}}},
[objectKeys.zoneID] = zoneIDs.THUNDER_BLUFF,
},
[400005] = {
[objectKeys.name] = "Train a Spell at your class trainer",
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{40,19}}},
[objectKeys.zoneID] = zoneIDs.ORGRIMMAR,
},
[400006] = {
[objectKeys.name] = "Train a Spell at your class trainer",
[objectKeys.spawns] = {[zoneIDs.THUNDER_BLUFF]={{77.15,29.82}}},
[objectKeys.zoneID] = zoneIDs.THUNDER_BLUFF,
},
[400007] = {
[objectKeys.name] = "Spend a Talent Point",
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{40,19}}},
[objectKeys.zoneID] = zoneIDs.ORGRIMMAR,
},
[400008] = {
[objectKeys.name] = "Spend a Talent Point",
[objectKeys.spawns] = {[zoneIDs.THUNDER_BLUFF]={{77.15,29.82}}},
[objectKeys.zoneID] = zoneIDs.THUNDER_BLUFF,
},
[400009] = {
[objectKeys.name] = "Open the Survival Kit",
[objectKeys.spawns] = {[zoneIDs.STORMWIND_CITY]={{83.5,37}}},
[objectKeys.zoneID] = zoneIDs.STORMWIND_CITY,
},
[400010] = {
[objectKeys.name] = "Equip a Weapon",
[objectKeys.spawns] = {[zoneIDs.STORMWIND_CITY]={{84.5,37}}},
[objectKeys.zoneID] = zoneIDs.STORMWIND_CITY,
},
[400011] = {
[objectKeys.name] = "Train a Spell at your class trainer",
[objectKeys.spawns] = {[zoneIDs.STORMWIND_CITY]={{84,37}}},
[objectKeys.zoneID] = zoneIDs.STORMWIND_CITY,
},
[400012] = {
[objectKeys.name] = "Spend a Talent Point",
[objectKeys.spawns] = {[zoneIDs.STORMWIND_CITY]={{84,37}}},
[objectKeys.zoneID] = zoneIDs.STORMWIND_CITY,
},
[400013] = {
[objectKeys.name] = "Gather Nether Residue from any Herb or Ore Deposit in Outland",
[objectKeys.spawns] = {[zoneIDs.SHATTRATH_CITY]={{53.9,44.8}}},
[objectKeys.zoneID] = zoneIDs.SHATTRATH_CITY,
},
[400014] = {
[objectKeys.name] = "Scrying Orb",
[objectKeys.spawns] = {[zoneIDs.MAGISTERS_TERRACE]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.MAGISTERS_TERRACE,
},
[400058] = {
[objectKeys.name] = "Portal to Socrethar's Seat",
[objectKeys.spawns] = {[zoneIDs.NETHERSTORM]={{36.44,18.35}}},
[objectKeys.zoneID] = zoneIDs.NETHERSTORM,
},
[400059] = {
[objectKeys.name] = "Portal to Netherstorm",
[objectKeys.spawns] = {[zoneIDs.NETHERSTORM]={{30.56,17.69}}},
[objectKeys.zoneID] = zoneIDs.NETHERSTORM,
},
[400060] = {
[objectKeys.name] = "Ethereum Transponder Zeta",
[objectKeys.spawns] = {[zoneIDs.NETHERSTORM]={{56.81,38.7}}},
[objectKeys.zoneID] = zoneIDs.NETHERSTORM,
},
[500007] = {
[objectKeys.name] = "Alcaz Survey Credit", -- 4391
[objectKeys.zoneID] = zoneIDs.DUSTWALLOW_MARSH,
},
}
end
-- This should allow manual fix for object availability
function QuestieTBCObjectFixes:LoadFactionFixes()
local objectKeys = QuestieDB.objectKeys
local zoneIDs = ZoneDB.zoneIDs
local objectFixesHorde = {
[186887] = {
[objectKeys.spawns] = {
[zoneIDs.DUROTAR]={{52.6,42.5}},
[zoneIDs.TIRISFAL_GLADES]={{60.9,52.7}},
[zoneIDs.EVERSONG_WOODS]={{47.58,46.24}},
},
},
[187236] = {
[objectKeys.spawns] = {
[zoneIDs.ORGRIMMAR]={{52.43,69.27}},
},
},
}
local objectFixesAlliance = {
[186887] = {
[objectKeys.spawns] = {
[zoneIDs.ELWYNN_FOREST]={{42.5,65.8}},
[zoneIDs.DUN_MOROGH]={{46.4,52.2}},
[zoneIDs.AZUREMYST_ISLE]={{48.99,51.02}},
},
},
[187236] = {
[objectKeys.spawns] = {
[zoneIDs.IRONFORGE]={{33.71,65.85}},
},
},
}
if UnitFactionGroup("Player") == "Horde" then
return objectFixesHorde
else
return objectFixesAlliance
end
end
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 it is too large Load Diff
+849
View File
@@ -0,0 +1,849 @@
---@class QuestieWotlkObjectFixes
local QuestieWotlkObjectFixes = QuestieLoader:CreateModule("QuestieWotlkObjectFixes")
---@type QuestieDB
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
---@type ZoneDB
local ZoneDB = QuestieLoader:ImportModule("ZoneDB")
function QuestieWotlkObjectFixes:Load()
local objectKeys = QuestieDB.objectKeys
local zoneIDs = ZoneDB.zoneIDs
return {
[176213] = {
[objectKeys.spawns] = {
[zoneIDs.WESTERN_PLAGUELANDS]={{35.9,57.4},{35.9,57.5},{36.4,53.7},{36.5,53.6},{38.2,56.3},{39.7,69.4},{39.7,69.6},{40.6,73.1},{40.7,57.4},{40.8,57.5},{41.4,62.1},{41.5,62.1},{41.9,70.5},{42.2,54.9},{42.8,64.2},{43.3,68.3},{43.6,70.4},{43.7,70.5},{44.2,65},{44.4,71.6},{44.5,53.3},{44.5,71.7},{44.6,53.5},{45.8,71.5},{45.9,51.1},{45.9,71.4},{46.7,34.4},{46.8,34.5},{47,59.9},{47,67.1},{47.6,70},{47.9,53.1},{49.4,68.1},{49.8,33.3},{52.2,66.5},{52.3,55},{52.3,66.3},{53,64.2},{53.2,66.5},{53.3,65.1},{53.3,66.2},{53.4,63.4},{53.5,63.3},{53.5,63.5},{54.9,27.1},{55.2,69.4},{55.3,69.6},{56.7,34.7},{57.8,66.4},{57.8,66.5},{62,58.3},{62,58.5},{62.9,57.2},{62.9,57.9},{63.2,59.2},{63.6,75.4},{63.6,75.5},{64,48.7},{64.1,57.9},{64.9,74.4},{64.9,74.5},{65.8,76.8},{66.4,42.1},{66.5,42.2},{67,53.9},{67.8,84.6},{68,44.7},{68.3,81.4},{68.3,81.6},{68.4,77.1},{68.5,77.1},{68.7,49.2},{68.7,79.2},{68.9,73.8},{69.5,78.6},},
[zoneIDs.EASTERN_PLAGUELANDS]={{4.3,45.2},{5.3,48.8},{11.1,58.7},{16.7,55},{17.1,60.7},{18.2,67.3},{18.7,78.3},{20.8,81.2},{22.5,68.2},{22.8,64.1},{23.2,63.2},{23.6,68.9},{23.7,58.2},{25,79},{25.5,72.1},{27,59.4},{27,59.5},{28.3,64.6},{29.7,27.7},{30.2,61.5},{30.2,73.6},{30.3,73.4},{30.7,70.2},{30.8,21.2},{31.8,66.7},{31.8,69.2},{32.7,32.9},{32.8,64.2},{33.1,59.5},{33.5,62},{34.5,26.6},{34.5,48.3},{34.6,22},{34.8,31.2},{35.9,44.4},{37.2,59.4},{37.2,59.7},{37.2,73},{38.3,69.1},{40.5,28.2},{42,58},{42,68.2},{43,35.4},{43.1,35.7},{43.5,73.3},{44.5,30.5},{45.7,40.2},{45.8,70.7},{47.2,63.8},{48.8,45},{51.4,57.6},{51.9,69.6},{52.3,75.2},{52.6,65.3},{52.7,65.6},{52.9,69.8},{53.2,72.9},{53.6,72.8},{53.7,58.7},{54.4,56},{54.4,69.6},{54.5,56.2},{54.5,69.4},{55,61.3},{56.8,63.7},{58.5,61.3},{59.5,59},{59.6,74.2},{60.8,47.3},{62.3,60.6},{62.9,64},{63,68},{63.3,71.7},{63.5,74.1},{63.7,65.1},{63.7,76.6},{65.2,74.2},{65.4,63.2},{65.8,68.4},{65.9,68.7},{66.8,71.7},{67.8,63.6},{67.8,75.4},{68.1,70.1},{68.3,45.5},{68.5,76.7},{69.1,52.8},{70,49.5},{70.2,76.4},{70.2,76.6},{70.5,45},{70.6,71.7},{71,66.3},{72.9,51.7},{73.1,60.9},{73.3,57.5},{74.6,53.9},},
[zoneIDs.TIRISFAL_GLADES]={{82.8,72.7},{83,71.4},{83,71.5}},
},
},
[179832] = {
[objectKeys.spawns] = {[zoneIDs.SEARING_GORGE] = {{45.86,29.68}}},
},
[180669] = {
[objectKeys.spawns] = {[zoneIDs.AZSHARA] = {{65.82,54.77}}},
},
[180715] = {
[objectKeys.spawns] = {
[zoneIDs.THE_EXODAR]={{55.84,48.41}},
[zoneIDs.STORMWIND_CITY]={{62.13,69.51}},
[zoneIDs.IRONFORGE]={{37.41,70.19}},
[zoneIDs.SHATTRATH_CITY]={{50.42,46.09}},
[zoneIDs.ORGRIMMAR]={{53.57,67.17}},
[zoneIDs.THUNDER_BLUFF]={{42.78,54.3}},
[zoneIDs.UNDERCITY]={{67.33,38.0}},
[zoneIDs.SILVERMOON_CITY]={{62.53,80.89}},
},
},
[180771] = {
[objectKeys.spawns] = {
[zoneIDs.MOONGLADE]={{35.95,58.69},{37.38,59.26},{36.92,56.77},{37.39,59.64},{36.45,57.12},{37.15,57.88},{45.25,38.5},{35.98,59.94},{36.52,60.23},{36.61,59.4},{36.5,56.81},{37.2,58.45},{53.92,36.84},{37.9,58.39},{47.91,33.35},{54.16,36.9},{37.59,58.72},{35.68,58.43},{36.15,57.41},{47.66,34.75},{37.05,59.11},{35.69,57.86},{35.48,58.67},{44.97,42.58},{53.38,36.7},{36.3,57.86},{42.64,35.39},{53.63,36.77},{48.78,34.52},{53.07,36.61},{50.92,37.23}},
[zoneIDs.UNDERCITY]={{57.82,63.6},{58.43,64.13},{76.71,27.62},{56.96,25.43},{52.76,55.96},{73.87,63.84},{56.39,26.07},{50.61,56.53},{55.13,23.62},{78.68,26.13},{50.97,57.45},{66.37,37.57},{66,37.76},{65.65,37.56},{65.45,36.74},{66.59,36.75}},
[zoneIDs.STORMWIND_CITY]={{37.14,64.42},{36.83,65.25},{37.26,65.59},{37.44,64.6},{37.14,65.93},{37.48,65.34},{37.05,65.03},{36.72,64.21},{36.81,64.95},{54.76,69.07},{43.96,73.78},{69.05,64.97},{54.75,68.92},{43.74,74.1},{69.13,65.06},{43.89,73.88},{54.77,69.21},{54.75,68.77},{62.64,50.49}},
[zoneIDs.IRONFORGE]={{29.85,18.67},{29.1,19.58},{30.72,19.34},{31.43,19.12},{31.42,16.83},{31.76,18.09},{30.45,20.68},{32.61,18.02},{32.16,15.77},{65.43,26.28},{65.06,25.57}},
[zoneIDs.ORGRIMMAR]={{41.97,32.52},{41.51,30.6},{40.45,30.64},{40.98,30.18},{40.61,30.1},{41.53,32.96},{40.49,31.65},{69.75,30.22},{48.86,77.18},{49.25,77.38},{69.88,30.02},{69.61,30.4},{49.44,77.48}},
[zoneIDs.THUNDER_BLUFF]={{72.0,26.37},{71.24,27.05},{71.12,25.74},{71.58,27.15},{71.02,26.7},{54.96,50.34},{54.95,52.01},{54.96,51.85},{54.95,50.95}},
[zoneIDs.DARNASSUS]={{31.88,13.19},{31.22,12.15},{32.14,11.9},{32.26,12.73},{31.31,13.0},{31.63,11.64},{69.77,43.22},{69.3,38.49},{68.94,43.19},{67.66,43.25},{69.36,43.22},{68.53,43.2}},
[zoneIDs.SILVERMOON_CITY]={{73.64,82.59},{74.17,84.25},{74.2,83.7},{73.81,82.88},{73.79,84.14},{73.4,83.34},{73.25,83.03}},
[zoneIDs.THE_EXODAR]={{73.75,57.47},{73.47,57.45},{72.77,57.41},{72.5,57.87},{72.74,58.41},{73.42,58.3},{73.73,58.28}},
[zoneIDs.SHATTRATH_CITY]={{48.46,37.28},{48.65,37.64},{49.1,38.49},{49.51,38.54},{53.35,33.66},{53.44,34.12},{53.59,35.17},{53.35,35.61},{53.05,35.32},{52.88,34.29},{52.8,33.84},{48.95,36.77},{49.12,37.08},{49.61,37.91}},
[zoneIDs.DALARAN]={{48.48,44.82},{50.41,44.76},{50.52,44.51},{49.96,45.29},{48.76,45.12},{49.13,45.4},{48.3,44.58}},
},
},
[180772] = {
[objectKeys.spawns] = {
[zoneIDs.MOONGLADE]={{36.43,57.61},{36.77,59.74},{35.88,58.39},{53.23,36.66},{53.5,36.74},{37.15,57.61},{35.87,57.31},{35.48,59.15},{44.59,38.64},{37.32,58.85},{36.05,59.5},{37.16,59.96},{54.05,36.87},{42.53,34.3},{53.79,36.8},{37.92,58.14},{36.44,59.26},{36.74,56.71},{54.29,36.93}},
[zoneIDs.UNDERCITY]={{65.48,37.17},{66.54,37.17},{55.7,22.96},{52.43,55.02},{74.88,66.58},{73.24,64.33},{74.28,67.11},{77.21,28.36},{78.99,56.28},{79.36,55.39},{78.21,25.35}},
[zoneIDs.STORMWIND_CITY]={{36.96,65.37},{36.92,64.78},{43.82,74.0},{68.96,64.89},{68.88,64.81},{62.71,50.77},{62.68,50.63},{62.73,50.93}},
[zoneIDs.IRONFORGE]={{28.84,17.94},{31.36,17.51},{31.75,19.74},{31.14,15.12},{30.36,18.71},{63.49,22.7},{64.26,24.08},{63.88,23.38},{64.67,24.8}},
[zoneIDs.ORGRIMMAR]={{41.18,30.57},{40.62,31.12},{49.05,77.27},{49.6,77.54}},
[zoneIDs.THUNDER_BLUFF]={{71.4,25.41},{72.05,25.95},{54.96,50.53},{54.94,52.23},{54.94,52.44},{54.97,50.73}},
[zoneIDs.DARNASSUS]={{31.96,12.87},{31.87,11.98},{68.89,38.51},{69.76,38.49},{68.09,43.22},{68.52,38.51},{67.96,38.5},{67.4,38.5}},
[zoneIDs.SILVERMOON_CITY]={{73.33,83.88},{74.2,83.21}},
[zoneIDs.THE_EXODAR]={{73.02,56.92},{73,58.67}},
[zoneIDs.SHATTRATH_CITY]={{49.57,37.38},{48.74,38.4},{53.77,34.63},{52.78,34.99}},
[zoneIDs.DALARAN]={{48.93,45.25},{50.15,45.12}},
},
},
[186325] = {
[objectKeys.spawns] = {[zoneIDs.HOWLING_FJORD]={{28.03,10.61},{28.88,12.86},{27.54,14.08},{31.44,14.83},{34.28,18.91},{29.98,15.54},{27.13,14.59},{27.98,15.12},{28.94,14.64},{28.6,16.93},{28.99,16.32},{31.18,15.05},{31.53,15.33},{29.77,20.04},{30.33,20.77},{30.16,20.15},{29.73,20.71},{29.4,19.81},{28.53,16.24},{28.86,15.48},{29.82,16.2},{29.84,17.67},{30.0,18.22},{28.49,15.65},{28.2,14.23},{29.55,17.85},{29.75,18.25},{29.04,16.97},{29.52,16.11},{29.75,15.39},{29.51,15.83},{32.68,21.82},{32.62,22.15},{32.42,22.5},{30.74,20.87},{30.56,20.37},{31.09,20.93},{30.96,20.58},{31.94,20.72},{31.3,18.91},{31.57,19.19},{31.46,19.58},{30.17,17.75},{31.56,18.95},{31.22,17.9},{31.07,18.14},{30.94,18.08},{31.08,17.77},{31.89,18.58},{32.05,17.1},{28.02,12.58},{27.5,12.63},{28.78,12.27},{26.95,11.59},{27.58,11.0},{33.76,20.46},{33.98,20.05}}},
[objectKeys.zoneID] = zoneIDs.HOWLING_FJORD,
},
[186419] = {
[objectKeys.questStarts] = {4127},
},
[186640] = {
[objectKeys.spawns] = {[zoneIDs.HOWLING_FJORD]={{54.93,57.47}}},
[objectKeys.zoneID] = zoneIDs.HOWLING_FJORD,
},
[187674] = {
[objectKeys.spawns] = {[zoneIDs.BOREAN_TUNDRA] = {{43,56.3}}},
[objectKeys.zoneID] = zoneIDs.BOREAN_TUNDRA,
},
[187981] = {
[objectKeys.spawns] = {[zoneIDs.BOREAN_TUNDRA] = {{59.87,23.97},{59.92,28.31},{57.2,26.9},{60.64,33.67},{60.91,33.12},{61.08,28.28},{62.97,36.9},{60.41,34.93},{60.57,29.82},{61.07,29.32},{61.17,30.69},{62.3,28.49},{59.84,37.61},{60.07,25.64},{60.46,27.08},{63.7,34.67},{63.4,37.6},{59.36,40.29},{59.78,39.61},{59.03,39.42},{59.53,38.78},{63.94,36.74},{61.57,29.67},{63.34,36.14},{62.18,27.35},{61.19,35.93},{60.94,34.22},{61.72,36.84},{61.7,35.23},{62.45,35.46},{61.21,39.43},{61.13,37.99},{61.13,41.04},{61.44,40.16},{60.49,40.25},{65.73,35.87},{64.4,34.31}}},
[objectKeys.zoneID] = zoneIDs.BOREAN_TUNDRA,
},
[188019] = {
[objectKeys.spawns] = {[zoneIDs.BOREAN_TUNDRA] = {{61.08,40.07},{59.59,39.21},{60.85,33.6},{61.12,30.14},{61.66,35.96},{63.38,37.0}}},
[objectKeys.zoneID] = zoneIDs.BOREAN_TUNDRA,
},
[188066] = {
[objectKeys.spawns] = {[zoneIDs.BOREAN_TUNDRA] = {{53.64,24.53}}},
[objectKeys.zoneID] = zoneIDs.BOREAN_TUNDRA,
},
[188287] = {
[objectKeys.spawns] = {[zoneIDs.GRIZZLY_HILLS] = {{13.24,60.87}}},
[objectKeys.zoneID] = zoneIDs.GRIZZLY_HILLS,
},
[188358] = {
[objectKeys.spawns] = {[zoneIDs.GRIZZLY_HILLS] = {{45,28.36}}},
[objectKeys.zoneID] = zoneIDs.GRIZZLY_HILLS,
},
[188434] = {
[objectKeys.spawns] = {[65]={{61.82,22.78},{60.27,19.98},{60.63,21.82},{59.36,21.21},{58.64,23.76},{58.14,24.32},{60.43,13.04},{61.57,15.52},{59.85,26.94},{59.33,23.94}}},
[objectKeys.zoneID] = zoneIDs.DRAGONBLIGHT,
},
[188474] = {
[objectKeys.spawns] = {[zoneIDs.DRAGONBLIGHT] = {{32.29,71.72}}},
},
[188525] = {
[objectKeys.spawns] = {[zoneIDs.GRIZZLY_HILLS] = {{70.92,19.26},{70.37,19.47},{71.04,19.41},{70.48,19.29},{71.5,20.03},{71.38,19.87},{71.73,20.33},{71.62,20.18},{70.27,19.64},{69.9,20.24},{70.58,19.12},{70.81,19.1},{69.92,20.58},{70.15,20.89},{71.63,20.84},{71.74,20.67},{71.43,21.18},{70.62,21.5},{71.53,21.01},{70.74,21.66},{70.86,21.81},{71.09,21.77}}},
[objectKeys.zoneID] = zoneIDs.GRIZZLY_HILLS,
},
[189973] = {
[objectKeys.spawns] = {[4494]={{-1,-1}},[4277]={{-1,-1}},[3711]={{43.89,40.53},{58.8,25.89},{29.27,79.62},{53.89,33.25},{48.43,28.55},{47.2,43.63},{24.66,49.38},{32.7,40.28},{53.74,26.86},{31.93,49.22},{28.97,61.38},{56.23,33.75},{39.99,27.31},{59.24,34.41},{49.44,44.71},{57.63,80.38},{70.42,71.71},{59.85,81.17},{30.68,50.31},{27.06,74.68},{32.06,79.65},{67.28,70.74},{51.55,42.5},{44.53,42.11},{44.35,38.96},{32.78,83.46},{71.26,69.28},{56.99,76.0},{50.26,42.84},{24.17,47.7},{31.24,49.45},{32.45,57.42},{23.32,53.98},{28.93,42.05},{33.43,46.14},{25.03,52.17},{47.01,33.2},{59.27,36.36},{25.42,78.25},{57.13,36.31},{58.0,78.15},{35.76,86.23},{28.54,44.65},{32.99,60.61},{42.26,35.79},{33.49,34.92},{58.78,31.46},{52.21,25.27},{35.65,32.51},{26.68,46.52},{31.61,59.56},{23.54,51.34},{27.15,81.24},{51.62,28.73},{34.04,42.83},{33.09,80.49},{55.43,35.76}},[3537]={{69.67,43.78},{79.23,41.04},{39.73,67.89},{34.66,51.6},{50.02,75.98},{43.03,75.64},{48.2,7.52},{47.7,21.75},{59.97,51.8},{41.03,44.99},{51.65,64.32},{49.72,25.53},{62.55,13.47},{57.75,52.14},{47.19,44.79},{62.44,41.4},{43.54,42.73},{57.05,34.01},{65.99,39.49},{48.44,48.38},{53.22,22.43},{53.47,19.23},{61.79,46.85},{54.96,54.35},{76.51,43.61},{76.76,31.97},{60.83,57.35},{41.92,36.9},{79.89,32.6},{75.59,28.94},{58.88,30.58},{54.74,43.75},{64.7,11.54},{53.34,47.31},{50.25,21.3},{65.48,14.23},{55.77,30.35},{72.42,20.53},{57.79,47.2},{59.12,54.29},{53.31,39.7},{74.83,25.53},{56.23,50.18},{51.08,69.59},{44.84,5.81},{55.23,53.76},{45.34,42.65},{54.27,61.36},{46.91,70.16},{47.97,74.52},{53.04,28.18},{50.5,50.39},{42.56,40.09},{40.39,48.93},{40.73,73.33},{46.15,73.39},{43.86,71.81},{78.9,36.49},{69.96,17.32},{61.74,60.41},{34.01,61.05}},[495]={{34.38,76.15},{58.36,40.1},{30.84,63.42},{46.79,71.61},{48.71,62.73},{52.47,60.53},{50.97,34.16},{67.14,74.89},{73.61,49.43},{74.1,44.8},{45.9,50.1},{65.76,72.47},{34.9,46.17},{78.29,44.51},{76.36,67.86},{60.44,81.25},{66.54,33.4},{67.17,24.39},{72.36,18.52},{69.92,51.09},{41.72,34.22},{46.26,31.4},{48.73,21.2},{29.43,31.82},{25.24,11.83},{28.59,18.06},{27.06,29.59},{33.43,76.37},{35.59,77.8},{69.39,24.62},{56.75,18.68},{45.04,59.5},{54.68,64.97},{52.33,17.85},{71.22,24.99},{26.41,7.93},{52.78,71.41},{54.88,19.69},{29.01,22.29},{48.58,30.02},{34.59,50.45},{47.12,28.95},{31.29,33.24},{33.92,79.19},{23.77,14.03},{46.39,54.32},{37.03,44.93},{29.96,69.22},{47.96,59.18},{26.75,60.88},{50.18,16.63},{68.21,21.95},{73.27,66.74},{56.53,21.25},{58.46,22.76},{69.98,22.13},{69.78,19.15},{38.96,54.25},{32.65,32.59},{28.26,25.71},{27.14,20.74},{49.03,42.36},{51.06,41.85},{42.06,27.71},{44.63,29.75},{59.16,50.31},{28.08,9.14},{29.17,12.03},{70.45,32.36},{58.96,55.52},{75.49,60.7},{79.15,49.69},{57.2,55.85},{56.95,67.15},{65.79,26.83},{76.27,42.81},{75.42,50.8},{33.21,63.56},{59.52,51.54},{26.87,14.58},{70.61,66.0},{69.73,69.61},{34.85,34.07},{70.08,71.98},{67.85,59.59},{63.71,28.01},{70.05,47.3},{48.21,18.06},{80.43,46.21},{49.24,72.09},{71.53,54.86},{73.57,26.69},{62.6,80.4},{60.96,26.08},{40.88,40.17},{51.86,59.16},{66.6,64.92},{76.85,49.84},{73.18,58.5},{76.68,63.9},{48.65,48.05},{50.44,63.88},{59.93,76.85},{39.23,33.09},{27.05,12.15},{52.45,32.16},{35.73,53.67},{43.36,44.08},{68.15,32.91},{64.87,67.63},{51.05,48.28},{36.99,39.9}},[394]={{82.23,56.11},{55.85,36.08},{10.68,34.62},{72.74,34.88},{25.24,31.3},{59.75,30.76},{11.3,69.48},{75.91,45.72},{45.75,31.14},{32.2,37.31},{27.12,38.42},{14.21,53.25},{15.02,50.41},{47.22,27.35},{49.2,27.28},{24.89,37.32},{64.67,26.49},{12.87,59.24},{68.54,21.52},{73.83,23.36},{62.72,27.49},{70.65,31.26},{75.87,38.32},{9.08,39.65},{24.35,33.15},{12.89,45.59},{12.29,55.76},{80.03,45.24},{78.15,42.57},{12.15,36.31},{14.74,61.38},{24.16,28.11},{21.94,25.63},{30.29,34.68},{73.84,28.26},{56.11,33.12},{76.78,50.7},{70.6,22.1},{54.6,31.33},{80.03,53.97},{52.0,28.6},{72.01,49.89},{12.69,41.68},{42.79,28.88},{63.64,24.02}},[65]={{65.62,74.62},{45.93,46.92},{64.79,77.14},{65.06,71.76},{63.56,70.58},{47.51,52.14},{49.24,50.53},{48.6,45.91}}},
},
[190094] = {
[objectKeys.spawns] = {[zoneIDs.THE_CULLING_OF_STRATHOLME_VILLAGE]={{73.42,54.98},{83.87,59.05},{81.21,59.75},{77.85,54.92},{70.12,51.25}},[4100]={{-1,-1}}},
},
[190095] = {
[objectKeys.spawns] = {[zoneIDs.THE_CULLING_OF_STRATHOLME_VILLAGE]={{73.42,54.98},{83.87,59.05},{81.21,59.75},{77.85,54.92},{70.12,51.25}},[4100]={{-1,-1}}},
},
[190127] = {
[objectKeys.spawns] = {[zoneIDs.DRAGONBLIGHT]={{63.84,27.58}}},
[objectKeys.zoneID] = zoneIDs.DRAGONBLIGHT,
},
[190169] = {
[objectKeys.spawns] = {[4494]={{-1,-1}},[4277]={{-1,-1}},[3537]={{53.21,48.35},{52.68,41.46},{49.37,43.1},{52.65,47.97},{49.66,45.51},{53.29,44.11},{52.18,46.23},{52.35,46.02},{52.83,41.43},{49.6,45.38},{53.89,42.45},{52.26,45.85},{52.11,46.22},{54.12,46.55},{53.52,44.86},{54.0,42.61},{49.27,43.22},{54.15,46.28},{53.16,44.66},{53.56,45.59},{52.6,48.09}},[3711]={{64.16,46.35},{69.47,66.68},{60.11,85.28},{54.55,85.58},{56.37,86.67},{22.67,61.31},{32.81,61.48},{63.85,48.85},{25.25,59.03},{47.13,61.12},{46.72,64.88},{47.92,60.03},{50.22,55.92},{53.15,85.23},{49.53,69.37},{57.47,83.22},{53.52,86.75},{43.57,75.3},{46.21,72.78},{48.51,51.64},{50.17,65.06},{49.56,65.75},{68.64,66.59},{46.93,65.54},{49.46,60.74},{50.47,62.58},{47.12,74.54},{48.41,68.8},{48.07,70.47},{48.71,60.34},{46.22,63.07},{50.23,64.27},{49.43,71.11},{48.43,59.75},{59.7,86.36},{69.29,68.4},{46.44,63.84},{48.58,53.35},{47.58,49.58},{43.63,74.1},{32.7,64.51},{30.72,64.84},{56.29,84.83},{32.31,60.43},{27.16,61.08},{49.93,63.64},{59.22,86.3},{23.88,61.03},{49.46,52.33},{62.97,47.98},{45.96,49.71},{49.02,50.08},{44.67,49.08},{63.73,47.29},{22.34,60.32},{51.59,86.36},{58.28,86.63},{31.34,60.68},{68.45,67.95},{30.58,60.01},{47.96,73.95},{29.13,61.8},{29.1,63.7},{45.92,51.13},{23.89,59.83}},[495]={{55.07,47.6},{60.17,37.71},{59.99,32.38},{54.56,57.78},{39.23,19.92},{59.6,54.17},{30.27,25.6},{43.79,23.64},{22.18,25.96},{66.79,19.17},{67.93,18.93},{56.85,57.08},{22.7,26.32},{67.14,22.33},{68.42,20.74},{53.38,55.67},{59.69,55.83},{52.74,53.39},{60.25,52.35},{32.61,25.82},{47.21,41.4},{52.83,44.98},{42.4,39.81},{31.69,25.71},{52.47,50.02},{55.47,47.34},{35.09,23.86},{49.31,40.25},{40.29,21.76},{41.97,24.3},{26.44,27.38},{64.09,25.81},{53.38,57.71},{36.82,22.68},{62.81,28.91},{58.91,35.07},{53.43,52.1},{29.02,26.35},{46.26,18.85}},[394]={{22.07,41.69},{38.05,35.08},{62.76,50.06},{41.96,35.26},{29.18,55.86},{28.03,41.23},{25.77,40.56},{27.53,61.81},{56.12,51.0},{39.97,32.83},{29.31,52.46},{20.11,40.65},{32.27,43.86},{36.08,31.71},{9.7,41.06},{8.51,37.15},{15.46,38.36},{31.13,46.07},{54.22,44.3},{61.34,49.21},{53.23,48.28},{60.93,53.04},{10.33,38.88},{25.1,71.67},{13.97,41.1},{8.72,34.96},{27.38,65.75},{62.7,49.51},{29.06,58.87},{29.2,62.45},{34.47,42.43},{62.93,52.6},{11.8,39.29},{64.88,52.82},{37.15,41.59},{30.21,39.64},{16.82,40.6},{27.6,69.79},{66.61,54.91},{11.75,29.25},{30.12,43.2}}},
},
[190354] = {
[objectKeys.spawns] = {[zoneIDs.DRAGONBLIGHT] = {{54.45,31.44}}},
},
[190510] = {
[objectKeys.spawns] = {[65]={{55.39,10.45},{55.01,10.65},{51.22,20.0},{51.56,19.98},{50.01,16.49},{50.0,17.04},{53.1,17.57},{52.68,17.74},{50.9,15.47},{50.66,15.91},{51.34,15.14},{51.61,15.13},{54.63,12.28},{54.43,12.06},{53.61,10.84}}},
[objectKeys.zoneID] = zoneIDs.DRAGONBLIGHT,
},
[190550] = {
[objectKeys.spawns] = {[zoneIDs.ZUL_DRAK] = {{47.16,82.32},{46.73,84.73},{44.59,83.48},{46.28,82.08},{47.4,81.02},{48.55,85.13},{48.71,84.16},{46.75,80.34},{45.71,81.37},{47.84,82.14},{48.47,83.12},{49.17,85.13},{49.8,85.17},{50.51,85.83},{51.0,86.93},{47.31,85.01},{47.05,83.63},{46.82,83.03},{45.65,84.19},{45.46,83.16},{44.96,81.71},{47.69,83.91},{47.84,83.05}}},
},
[190558] = {
[objectKeys.spawns] = {[zoneIDs.SHOLAZAR_BASIN] = {{48.3,49.1},{49.4,53.1},{49.6,50.9},{49.7,54.4},{49.7,54.5},{49.8,49.1},{50,51.7},{50,59.8},{50.2,47.5},{50.3,53.3},{50.3,58.5},{50.4,47.2},{50.4,50.4},{50.4,56.8},{50.4,58.3},{50.5,50.4},{50.5,50.5},{50.6,55.5},{50.6,56.9},{50.9,52},{50.9,54.6},{51.1,58.8},{51.4,52.6},{51.4,53.6},{51.4,57.8},{51.5,52.4},{51.5,53.5},{51.5,57.8},{51.6,49.8},{51.7,49.4},{51.7,62.6},{51.8,54.7},{51.9,58.6},{52,61.3},{52.3,61.7},{52.4,53.1},{52.4,56.2},{52.5,51.6},{52.5,53.1},{52.5,56.2},{52.6,60.5},{52.7,60.3},{52.7,62.1},{52.8,54.9},{53.1,50.5},{53.2,47.4},{53.2,47.6},{53.2,50.3},{53.3,59.3},{53.4,49.4},{53.4,53.5},{53.5,49.5},{53.5,53.4},{53.5,53.5},{53.5,61.7},{53.7,60.8},{54.2,51.4},{54.2,51.5},{54.3,48.9},{54.3,59.9},{54.5,49.1},{54.7,57.9},{54.7,60.8},{54.9,51.5},{55,53.7},{55.1,51.2},{55.3,60.2},{55.5,60.2},{55.6,57.4},{55.6,57.6},{55.7,58.6},{55.8,48.9},{55.8,52.8},{55.9,56.3},{56.2,50.9},{56.2,55.2},{56.7,53.4},{56.7,53.5},{56.9,56.3},{56.9,56.5},{57.1,52.2},{57.1,58.8},{57.2,60.6},{57.3,54.5},{57.3,60.1},{57.5,54.4},{58,60.4},{58,60.5},{58.4,58.9},{58.7,53.8},{58.7,55.9},{58.8,62.3},{59.1,57.9},{59.1,60.2},{59.8,55},{59.8,60.4},{59.8,60.5},{59.9,57.3},{60.1,63.9},{60.3,61.9},},},
},
[190629] = {
[objectKeys.spawns] = {[zoneIDs.DRAKTHARON_KEEP_UPPER_LEVEL]={{37.5,13}},[4196]={{-1,-1}}},
},
[190663] = {
[objectKeys.spawns] = {[zoneIDs.THE_CULLING_OF_STRATHOLME_CITY]={{30.6,46.7}},[4100]={{-1,-1}}},
},
[190717] = {
[objectKeys.spawns] = {[zoneIDs.ZUL_DRAK] = {{71.2,62.2},{68.66,56.48},{73.33,62.91},{74.58,58.37},{74.99,62.63},{74.61,59.84},{73.84,61.03},{76.02,56.13},{71.41,56.52},{71.76,58.37},{75.72,59.72},{78.31,62.39},{69.33,58.32},{69.33,58.91}}},
},
[190777] = {
[objectKeys.spawns] = {[zoneIDs.SHOLAZAR_BASIN] = {{72.1,57.44}}},
[objectKeys.zoneID] = zoneIDs.SHOLAZAR_BASIN,
},
[190781] = {
[objectKeys.spawns] = {[zoneIDs.SHOLAZAR_BASIN] = {{33.56,74.96}}},
},
[190782] = {
[objectKeys.name] = "Altar of Kartak",
},
[191092] = {
[objectKeys.spawns] = {[zoneIDs.PLAGUELANDS_THE_SCARLET_ENCLAVE] = {{63.12,68.33}}},
},
[191179] = {
[objectKeys.spawns] = {[zoneIDs.SHOLAZAR_BASIN] = {{17.58,51.25},{23.34,37.24},{26.7,33.46},{26.23,35.68}}},
[objectKeys.zoneID] = zoneIDs.SHOLAZAR_BASIN,
},
[191349] = {
[objectKeys.spawns] = {[zoneIDs.BAND_OF_ALIGNMENT]={{47.6,85.9}},[4228]={{-1,-1}}},
},
[191761] = {
[objectKeys.spawns] = {[zoneIDs.STORM_PEAKS]={{37.54,46.9}}},
},
[192124] = {
[objectKeys.spawns] = {},
},
[192127] = {
[objectKeys.spawns] = {[zoneIDs.STORM_PEAKS] = {{73.4,62.9},{73.5,63.4},{75,63.5},{75.4,62.9},{75.6,63.6},{75.7,63},{75.9,64.5},{76.9,62.2},{76.9,63.1},{77,63.9},{77.6,62.4},{77.6,62.5},}},
[objectKeys.zoneID] = zoneIDs.STORM_PEAKS,
},
[192536] = {
[objectKeys.spawns] = {[zoneIDs.STORM_PEAKS] = {{52.36,73.26},{43.61,67.3},{43.76,67.21},{45.46,66.73},{43.87,67.74},{45.52,67.16},{45.19,66.82},{52.66,75.17},{52.36,75.08},{52.36,75.43},{53.28,75.10},{53.57,74.88},{53.53,74.64}}},
},
[192788] = {
[objectKeys.spawns] = {[zoneIDs.THE_NEXUS_MAP] = {{18.9,51.7}},[zoneIDs.THE_NEXUS] = {{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.THE_NEXUS,
},
[192818] = {
[objectKeys.spawns] = {[zoneIDs.THE_UNDERBELLY] = {{30.4,51.5},{30.5,51.3},{34.8,52.2},{35,42.4},{35.1,35.5},{35.3,42.9},{35.3,53},{35.4,35.1},{35.5,35.2},{35.5,35.5},{35.5,43},{35.7,52.4},{39.3,28.4},{39.3,28.6},{39.3,39.9},{39.4,40.6},{39.5,28.6},{39.5,40.4},{39.7,47},{39.8,28.3},{40,47.7},{43.3,32.6},{43.4,32.3},{43.5,32.2},{43.6,32.6},{44.4,65.1},{44.4,65.6},{44.5,65.1},{45.3,58.2},{45.6,58.1},{45.8,58.8},{47.3,56},{47.4,28.4},{47.4,56.9},{48,29.5},{48,55.5},{48.2,55.4},{48.3,29.4},{48.4,40.4},{48.4,40.7},{48.5,29.4},{48.5,29.8},{48.5,41.1},{50.4,25.6},{50.4,26.6},{50.4,52.8},{50.6,25.9},{50.6,26.6},{51.2,53},{51.2,53.6},{51.4,42.1},{51.4,42.5},{51.5,42.2},{51.5,42.6},{51.6,53.4},{51.8,53.8},{54.3,66.2},{54.7,66.8},{55,66.2},{55.3,56.3},{55.4,56.9},{55.5,57.6},{55.6,56.3},{55.7,56.7},{55.8,58.6},{56.7,40.1},{56.8,40.7},{57.4,41.5},{57.4,47.4},{57.5,40.9},{57.6,41.5},{57.6,47.4},{58,47.6},{59,12.5},{59.4,35},{59.4,35.6},{59.5,35.3},{59.7,11.7},{60.6,14.3},{61.8,9.2},{62.3,10.5},{62.4,10},{62.6,10},{64.2,15.1},{64.2,15.6},},},
[objectKeys.zoneID] = zoneIDs.THE_UNDERBELLY,
},
[192826] = {
[objectKeys.spawns] = {[zoneIDs.GUNDRAK_UPPER_LEVEL] = {{-1,-1}},[zoneIDs.GUNDRAK_LOWER_LEVEL] = {{-1,-1}},[4416] = {{-1,-1}}},
},
[192941] = {
[objectKeys.spawns] = {[zoneIDs.UTGARDE_PINNACLE_UPPER_LEVEL] = {{-1,-1}},[zoneIDs.UTGARDE_PINNACLE_LOWER_LEVEL] = {{-1,-1}},[1196] = {{-1,-1}}},
},
[192942] = {
[objectKeys.spawns] = {[zoneIDs.UTGARDE_PINNACLE_UPPER_LEVEL] = {{-1,-1}},[zoneIDs.UTGARDE_PINNACLE_LOWER_LEVEL] = {{-1,-1}},[1196] = {{-1,-1}}},
},
[192943] = {
[objectKeys.spawns] = {[zoneIDs.UTGARDE_PINNACLE_UPPER_LEVEL] = {{-1,-1}},[zoneIDs.UTGARDE_PINNACLE_LOWER_LEVEL] = {{-1,-1}},[1196] = {{-1,-1}}},
},
[192944] = {
[objectKeys.spawns] = {[zoneIDs.UTGARDE_PINNACLE_UPPER_LEVEL] = {{-1,-1}},[zoneIDs.UTGARDE_PINNACLE_LOWER_LEVEL] = {{-1,-1}},[1196] = {{-1,-1}}},
},
[192945] = {
[objectKeys.spawns] = {[zoneIDs.UTGARDE_PINNACLE_UPPER_LEVEL] = {{-1,-1}},[zoneIDs.UTGARDE_PINNACLE_LOWER_LEVEL] = {{-1,-1}},[1196] = {{-1,-1}}},
},
[193004] = {
[objectKeys.spawns] = {[zoneIDs.ICECROWN] = {{57.85,74.37},{59.35,71.77},{58.08,70.64}}},
},
[193051] = {
[objectKeys.spawns] = {[zoneIDs.THE_GILDED_GATE] = {{-1,-1}},[zoneIDs.HADRONOXS_LAIR] = {{-1,-1}},[4277] = {{-1,-1}}},
},
[193057] = {
[objectKeys.spawns] = {[zoneIDs.AHNKAHET_MAP] = {{12.29,50.82}},[4494] = {{-1,-1}}},
},
[193059] = {
[objectKeys.spawns] = {[zoneIDs.UTGARDE_KEEP_UPPER_LEVEL] = {{-1,-1}},[zoneIDs.UTGARDE_KEEP_LOWER_LEVEL] = {{-1,-1}},[zoneIDs.UTGARDE_KEEP_MIDDLE_LEVEL] = {{-1,-1}},[zoneIDs.UTGARDE_KEEP] = {{-1,-1}}},
},
[193091] = {
[objectKeys.spawns] = {[zoneIDs.ICECROWN] = {{34.7,66.0}}},
},
[193092] = {
[objectKeys.spawns] = {[zoneIDs.ICECROWN] = {{36.6,67.6}}},
},
[193580] = {
[objectKeys.spawns] = {[zoneIDs.ICECROWN] = {{60.84,63.38},{61.55,63.96},{62.26,63.38}}},
},
[193597] = {
[objectKeys.spawns] = {[zoneIDs.THE_CULLING_OF_STRATHOLME_CITY]={{30.6,46.7}},[4100]={{-1,-1}}},
},
[193603] = {
[objectKeys.spawns] = {[zoneIDs.BAND_OF_ALIGNMENT]={{47.6,85.9}},[4228]={{-1,-1}}},
},
[193980] = {
[objectKeys.name] = "Bloodstained Stone",
[objectKeys.spawns] = {[zoneIDs.ICECROWN] = {{49.7,73.4}}},
[objectKeys.zoneID] = zoneIDs.ICECROWN,
},
[193997] = {
[objectKeys.spawns] = {[zoneIDs.STORM_PEAKS] = {{55.4,68},{57,65},{58.6,60.3},{60.7,57.5},{62.8,60.1},{63.5,57.9},{65.4,60.8},{68.4,55.7},{68.9,54.8},{69.7,63.1},{71.1,62.4},{72.6,61.9},{75.3,48.5},},},
},
[194023] = {
[objectKeys.name] = "Bloodstained Stone",
[objectKeys.spawns] = {[zoneIDs.ICECROWN] = {{49.2,73.9}}},
[objectKeys.zoneID] = zoneIDs.ICECROWN,
},
[194024] = {
[objectKeys.name] = "Bloodstained Stone",
[objectKeys.spawns] = {[zoneIDs.ICECROWN] = {{48.3,72.8}}},
[objectKeys.zoneID] = zoneIDs.ICECROWN,
},
[194032] = {
[objectKeys.questStarts] = {13440},
[objectKeys.questEnds] = {13440},
},
[194033] = {
[objectKeys.questStarts] = {13441},
[objectKeys.questEnds] = {13441},
},
[194034] = {
[objectKeys.questStarts] = {13450},
[objectKeys.questEnds] = {13450},
},
[194035] = {
[objectKeys.questStarts] = {13442},
[objectKeys.questEnds] = {13442},
},
[194036] = {
[objectKeys.questStarts] = {13443},
[objectKeys.questEnds] = {13443},
},
[194037] = {
[objectKeys.questStarts] = {13451},
[objectKeys.questEnds] = {13451},
},
[194038] = {
[objectKeys.questStarts] = {13444},
[objectKeys.questEnds] = {13444},
},
[194039] = {
[objectKeys.questStarts] = {13453},
[objectKeys.questEnds] = {13453},
},
[194040] = {
[objectKeys.questStarts] = {13445},
[objectKeys.questEnds] = {13445},
},
[194042] = {
[objectKeys.questStarts] = {13454},
[objectKeys.questEnds] = {13454},
},
[194043] = {
[objectKeys.questStarts] = {13455},
[objectKeys.questEnds] = {13455},
},
[194044] = {
[objectKeys.questStarts] = {13446},
[objectKeys.questEnds] = {13446},
},
[194045] = {
[objectKeys.questStarts] = {13447},
[objectKeys.questEnds] = {13447},
},
[194046] = {
[objectKeys.questStarts] = {13457},
[objectKeys.questEnds] = {13457},
},
[194048] = {
[objectKeys.questStarts] = {13458},
[objectKeys.questEnds] = {13458},
},
[194049] = {
[objectKeys.questStarts] = {13449},
[objectKeys.questEnds] = {13449},
},
[194123] = {
[objectKeys.spawns] = {[zoneIDs.STORM_PEAKS] = {{64.5,46.9}},},
[objectKeys.zoneID] = zoneIDs.STORM_PEAKS,
},
[194200] = {
[objectKeys.spawns] = {[zoneIDs.THE_INNER_SANCTUM_OF_ULDUAR]={{64.1,60.2}},[zoneIDs.ULDUAR]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.THE_INNER_SANCTUM_OF_ULDUAR,
},
[194201] = {
[objectKeys.spawns] = {[zoneIDs.THE_INNER_SANCTUM_OF_ULDUAR]={{64.1,60.2}},[zoneIDs.ULDUAR]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.THE_INNER_SANCTUM_OF_ULDUAR,
},
[194313] = {
[objectKeys.spawns] = {[zoneIDs.THE_INNER_SANCTUM_OF_ULDUAR]={{70.7,48.5}},[zoneIDs.ULDUAR]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.THE_INNER_SANCTUM_OF_ULDUAR,
},
[194314] = {
[objectKeys.spawns] = {[zoneIDs.THE_INNER_SANCTUM_OF_ULDUAR]={{70.7,48.5}},[zoneIDs.ULDUAR]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.THE_INNER_SANCTUM_OF_ULDUAR,
},
[194327] = {
[objectKeys.spawns] = {[zoneIDs.THE_INNER_SANCTUM_OF_ULDUAR]={{53,25.4}},[zoneIDs.ULDUAR]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.THE_INNER_SANCTUM_OF_ULDUAR,
},
[194331] = {
[objectKeys.spawns] = {[zoneIDs.THE_INNER_SANCTUM_OF_ULDUAR]={{53,25.4}},[zoneIDs.ULDUAR]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.THE_INNER_SANCTUM_OF_ULDUAR,
},
[194463] = {
[objectKeys.spawns] = {[zoneIDs.STORM_PEAKS] = {{40.1,60.5},{43.5,54.9},{45,57},{41,54},{39,60},{46.1,61},{46.2,59.2}}},
[objectKeys.zoneID] = zoneIDs.STORM_PEAKS,
},
[194481] = {
[objectKeys.spawns] = {[zoneIDs.SUNWELL_PLATEAU]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.SUNWELL_PLATEAU,
},
[194555] = {
[objectKeys.spawns] = {[zoneIDs.THE_ARCHIVUM]={{15.6,90.3}},[zoneIDs.ULDUAR]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.THE_ARCHIVUM,
},
[194821] = {
[objectKeys.spawns] = {[zoneIDs.ULDUAR]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.ULDUAR,
},
[194822] = {
[objectKeys.spawns] = {[zoneIDs.ULDUAR]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.ULDUAR,
},
[194957] = {
[objectKeys.spawns] = {[zoneIDs.THE_SPARK_OF_IMAGINATION]={{43.7,40.9}},[zoneIDs.ULDUAR]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.THE_SPARK_OF_IMAGINATION,
},
[194958] = {
[objectKeys.spawns] = {[zoneIDs.THE_SPARK_OF_IMAGINATION]={{43.7,40.9}},[zoneIDs.ULDUAR]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.THE_SPARK_OF_IMAGINATION,
},
[195036] = {
[objectKeys.spawns] = {[zoneIDs.THE_DESCENT_OF_MADNESS]={{57.7,72.6},{59.2,68},{59.2,54.9},{57.2,52.7}},[zoneIDs.ULDUAR]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.THE_DESCENT_OF_MADNESS,
},
[195309] = {
[objectKeys.spawns] = {[zoneIDs.STORM_PEAKS] = {{42.65,58.43},{42.25,60.1},{43.36,60.69},{43.4,57.84},{42.94,56.95},{43.22,55.94},{42.52,55.01},{43.09,54.6},{41.51,53.56},{41.19,52.62},{40.67,53.31},{40.06,52.53},{39.38,53.79},{38.55,53.96},{38.46,55.05},{37.61,56.07},{38.38,58.33},{37.73,59.86},{38.57,61.28},{38.87,60.57},{39.23,61.41},{40.61,60.33},{41.53,60.01},{42.24,60.09},{43.36,60.69},{44.68,59.4},{45.55,59.06},{45.47,60.13},{45.06,60.94},{45.15,61.93},{44.54,61.9},{46,61.18},{46.5,62.41},{46.08,63.36},{46.7,64.01},{47.35,62.49},{47.72,61.55},{46.88,59.91},{46.29,58.52},{45.85,57.6},{45.92,57.02},{45.77,55.82},{42.4,53.88},{43.38,59.28},{43.82,61.93},{46.69,60.7},{45.03,56.98},{45.15,55.61},{45.03,56.96},{43.9,56.55},{43.38,59.28},{44.27,61.01},{46.82,63.05},{44.34,58.48},{46.56,62.92},{38.21,62.04},{38.03,58.85},{37.67,57.9},{38.13,57.05},{39.95,61.25},{38.84,59.57},{40.56,62.92},{39.99,61.76},{39.96,60.23}}},
[objectKeys.zoneID] = zoneIDs.STORM_PEAKS,
},
[201590] = {
[objectKeys.spawns] = {[4813]={{66.2,59},{70.2,55.2},{68.3,52.1},{-1,-1}}},
},
[201592] = {
[objectKeys.spawns] = {[4813]={{45.76,43.09},{49.18,40.72},{63.89,51.99},{47.4,36.08},{48.26,38.37},{43.1,67.65},{45.82,76.61},{45.12,49.64},{45.51,40.91},{48.7,40.28},{62.34,57.16},{46.55,52.52},{37.62,79.09},{63.72,58.71},{62.55,48.93},{42.18,67.15},{56.28,39.67},{45.72,38.59},{43.46,77.04},{46.95,35.44},{41.91,65.83},{-1,-1}}},
},
[201742] = {
[objectKeys.spawns] = {[zoneIDs.ICECROWN_CITADEL]={{43,21.9},{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.ICECROWN_CITADEL,
},
[201794] = {
[objectKeys.spawns] = {[zoneIDs.SUNWELL_PLATEAU]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.SUNWELL_PLATEAU,
},
[201873] = {
[objectKeys.spawns] = {[zoneIDs.ICECROWN_CITADEL]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.ICECROWN_CITADEL,
},
[201937] = {
[objectKeys.spawns] = {[zoneIDs.DRAGONBLIGHT]={{75.1,20.5}}},
[objectKeys.zoneID] = zoneIDs.DRAGONBLIGHT,
},
[201959] = {
[objectKeys.spawns] = {[zoneIDs.ICECROWN_CITADEL_UPPER_SPIRE]={{76.7,73.7}},[zoneIDs.ICECROWN_CITADEL]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.ICECROWN_CITADEL_UPPER_SPIRE,
},
[202080] = {
[objectKeys.name] = "Dart's Nest",
[objectKeys.spawns] = {[zoneIDs.DUSTWALLOW_MARSH]={{46.4,17.2},{46.6,17.2},{47.9,19},{48,14.5},{48.1,14.2},{49.1,17.3},{49.2,17.5}}},
},
[202081] = {
[objectKeys.spawns] = {[zoneIDs.THE_BARRENS]={{58.5,8.3},{59.5,8.6},{60.3,10.1},{60.7,13.4}}},
},
[202082] = {
[objectKeys.spawns] = {[zoneIDs.UN_GORO_CRATER]={{62,65.2},{62,73.2},{62,73.5},{63,63.2},{68.9,66.6},{69,61.3}}},
},
[202083] = {
[objectKeys.name] = "Razormaw Matriarch's Nest",
[objectKeys.spawns] = {[zoneIDs.WETLANDS]={{67.6,30.7},{69.1,31.6},{70,29.1},{71.1,30.9}}},
},
[202168] = {
[objectKeys.spawns] = {[zoneIDs.PIT_OF_SARON]={{59.37,60.48},{45.33,58.72},{43.77,66.77},{55.92,65.86},{55.84,39.13},{56.22,64.93},{58.71,60.9},{55.55,43.2},{53.46,65.12},{47.55,61.06},{41.77,65.25},{52.89,64.84},{49.63,69.36},{61.14,59.63},{60.06,49.25},{55.16,65.87},{55.64,63.33},{62.08,59.4},{54.38,36.42},{60.94,49.22},{55.5,38.28},{55.82,41.31},{60.23,60.09},{54.38,65.36},{50.54,68.04},{58.8,48.69},{48.83,69.23},{61.78,49.56},{38.6,66.65},{37.5,69},{34,70.5},{33.8,68.9},{34.3,65.9},{33.5,63.7},{34.8,61.5},{36.7,61.1},{40.3,55.9},{41,58.1},{42.2,59.5},{42.8,60.5},{45.3,55.8},{43.8,56.7},{42.3,54.5}}},
},
[202239] = {
[objectKeys.spawns] = {[zoneIDs.ICECROWN_CITADEL_DEATHBRINGERS_RISE]={{71.3,30.7}},[zoneIDs.ICECROWN_CITADEL]={{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.ICECROWN_CITADEL_DEATHBRINGERS_RISE,
},
[202240] = {
[objectKeys.spawns] = {},
},
[202336] = {
[objectKeys.spawns] = {[zoneIDs.HALLS_OF_REFLECTION]={{84,88.1},{-1,-1}}},
[objectKeys.zoneID] = zoneIDs.HALLS_OF_REFLECTION,
},
[300213] = {
[objectKeys.name] = "Mistwhisper Weather Shrine",
[objectKeys.spawns] = {[zoneIDs.SHOLAZAR_BASIN]={{45.4,37.23}}},
[objectKeys.zoneID] = zoneIDs.SHOLAZAR_BASIN,
},
[300224] = {
[objectKeys.name] = "Exposed Lifeblood Pillar Crystal",
[objectKeys.spawns] = {[zoneIDs.SHOLAZAR_BASIN]={{65.52,59.74}}},
[objectKeys.zoneID] = zoneIDs.SHOLAZAR_BASIN,
},
-- Below are fake objects
[400001] = {
[objectKeys.name] = "Open the Survival Kit",
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{47.98,45.93},{43.9,54.63},{38.8,36.37},{79.79,31.42},{67.24,20.2},{38.45,86.13},{35.72,86.9},{32.28,35.73}}},
[objectKeys.zoneID] = zoneIDs.ORGRIMMAR,
},
[400002] = {
[objectKeys.name] = "Equip a Weapon",
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{47.98,45.93},{43.9,54.63},{38.8,36.37},{79.79,31.42},{67.24,20.2},{38.45,86.13},{35.72,86.9},{32.28,35.73}}},
[objectKeys.zoneID] = zoneIDs.ORGRIMMAR,
},
[400003] = {
[objectKeys.name] = "Open the Survival Kit",
[objectKeys.spawns] = {[zoneIDs.THUNDER_BLUFF]={{77.15,29.82}}},
[objectKeys.zoneID] = zoneIDs.THUNDER_BLUFF,
},
[400004] = {
[objectKeys.name] = "Equip a Weapon",
[objectKeys.spawns] = {[zoneIDs.THUNDER_BLUFF]={{77.15,29.82}}},
[objectKeys.zoneID] = zoneIDs.THUNDER_BLUFF,
},
[400005] = {
[objectKeys.name] = "Train a Spell at your class trainer",
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{47.98,45.93},{43.9,54.63},{38.8,36.37},{79.79,31.42},{67.24,20.2},{38.45,86.13},{35.72,86.9},{32.28,35.73}}},
[objectKeys.zoneID] = zoneIDs.ORGRIMMAR,
},
[400006] = {
[objectKeys.name] = "Train a Spell at your class trainer",
[objectKeys.spawns] = {[zoneIDs.THUNDER_BLUFF]={{77.15,29.82}}},
[objectKeys.zoneID] = zoneIDs.THUNDER_BLUFF,
},
[400007] = {
[objectKeys.name] = "Spend 5 Talent Points",
[objectKeys.spawns] = {[zoneIDs.ORGRIMMAR]={{47.98,45.93},{43.9,54.63},{38.8,36.37},{79.79,31.42},{67.24,20.2},{38.45,86.13},{35.72,86.9},{32.28,35.73}}},
[objectKeys.zoneID] = zoneIDs.ORGRIMMAR,
},
[400008] = {
[objectKeys.name] = "Spend 5 Talent Points",
[objectKeys.spawns] = {[zoneIDs.THUNDER_BLUFF]={{77.15,29.82}}},
[objectKeys.zoneID] = zoneIDs.THUNDER_BLUFF,
},
[400009] = {
[objectKeys.name] = "Open the Survival Kit",
[objectKeys.spawns] = {[zoneIDs.STORMWIND_CITY]={{49.53,44.6},{80.19,61.26},{48.43,50.22},{39.89,84.19},{49.56,85.8},{36.12,64.42},{67.35,36.25},{80.28,68.58},{67.52,89.42}}},
[objectKeys.zoneID] = zoneIDs.STORMWIND_CITY,
},
[400010] = {
[objectKeys.name] = "Equip a Weapon",
[objectKeys.spawns] = {[zoneIDs.STORMWIND_CITY]={{49.53,44.6},{80.19,61.26},{48.43,50.22},{39.89,84.19},{49.56,85.8},{36.12,64.42},{67.35,36.25},{80.28,68.58},{67.52,89.42}}},
[objectKeys.zoneID] = zoneIDs.STORMWIND_CITY,
},
[400011] = {
[objectKeys.name] = "Train a Spell at your class trainer",
[objectKeys.spawns] = {[zoneIDs.STORMWIND_CITY]={{49.53,44.6},{80.19,61.26},{48.43,50.22},{39.89,84.19},{49.56,85.8},{36.12,64.42},{67.35,36.25},{80.28,68.58},{67.52,89.42}}},
[objectKeys.zoneID] = zoneIDs.STORMWIND_CITY,
},
[400012] = {
[objectKeys.name] = "Spend 5 Talent Points",
[objectKeys.spawns] = {[zoneIDs.STORMWIND_CITY]={{49.53,44.6},{80.19,61.26},{48.43,50.22},{39.89,84.19},{49.56,85.8},{36.12,64.42},{67.35,36.25},{80.28,68.58},{67.52,89.42}}},
[objectKeys.zoneID] = zoneIDs.STORMWIND_CITY,
},
[400015] = {
[objectKeys.name] = "Summoning Stone",
[objectKeys.spawns] = {[zoneIDs.ICECROWN]={{53.77,33.60}}},
[objectKeys.zoneID] = zoneIDs.ICECROWN,
},
[400016] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {12941},
[objectKeys.questEnds] = {12941},
[objectKeys.spawns] = {[zoneIDs.ZUL_DRAK]={{40.86,66.04}}}, -- Argent Stand
[objectKeys.zoneID] = zoneIDs.ZUL_DRAK,
},
[400017] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {12940},
[objectKeys.questEnds] = {12940},
[objectKeys.spawns] = {[zoneIDs.ZUL_DRAK]={{59.33,57.20}}}, -- Zim'Torga
[objectKeys.zoneID] = zoneIDs.ZUL_DRAK,
},
[400018] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {12947},
[objectKeys.questEnds] = {12947},
[objectKeys.spawns] = {[zoneIDs.GRIZZLY_HILLS]={{65.35,47.00}}}, -- Camp Oneqwah
[objectKeys.zoneID] = zoneIDs.GRIZZLY_HILLS,
},
[400019] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {12946},
[objectKeys.questEnds] = {12946},
[objectKeys.spawns] = {[zoneIDs.GRIZZLY_HILLS]={{20.89,64.77}}}, -- Conquest Hold
[objectKeys.zoneID] = zoneIDs.GRIZZLY_HILLS,
},
[400020] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13464},
[objectKeys.questEnds] = {13464},
[objectKeys.spawns] = {[zoneIDs.HOWLING_FJORD]={{49.44,10.75}}}, -- Camp Winterhoof
[objectKeys.zoneID] = zoneIDs.HOWLING_FJORD,
},
[400021] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13466},
[objectKeys.questEnds] = {13466},
[objectKeys.spawns] = {[zoneIDs.HOWLING_FJORD]={{79.27,30.62}}}, -- Vengeance Landing
[objectKeys.zoneID] = zoneIDs.HOWLING_FJORD,
},
[400022] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13465},
[objectKeys.questEnds] = {13465},
[objectKeys.spawns] = {[zoneIDs.HOWLING_FJORD]={{52.10,66.14}}}, -- New Agamand
[objectKeys.zoneID] = zoneIDs.HOWLING_FJORD,
},
[400023] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13452},
[objectKeys.questEnds] = {13452},
[objectKeys.spawns] = {[zoneIDs.HOWLING_FJORD]={{25.44,59.82}}}, -- Kamagua
[objectKeys.zoneID] = zoneIDs.HOWLING_FJORD,
},
[400024] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13470},
[objectKeys.questEnds] = {13470},
[objectKeys.spawns] = {[zoneIDs.DRAGONBLIGHT]={{76.82,63.29}}}, -- Venomspite
[objectKeys.zoneID] = zoneIDs.DRAGONBLIGHT,
},
[400025] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13456},
[objectKeys.questEnds] = {13456},
[objectKeys.spawns] = {[zoneIDs.DRAGONBLIGHT]={{60.15,53.45}}}, -- Wyrmrest Temple
[objectKeys.zoneID] = zoneIDs.DRAGONBLIGHT,
},
[400026] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13459},
[objectKeys.questEnds] = {13459},
[objectKeys.spawns] = {[zoneIDs.DRAGONBLIGHT]={{48.11,74.66}}}, -- Moa'ki Harbor
[objectKeys.zoneID] = zoneIDs.DRAGONBLIGHT,
},
[400027] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13469},
[objectKeys.questEnds] = {13469},
[objectKeys.spawns] = {[zoneIDs.DRAGONBLIGHT]={{37.83,46.48}}}, -- Agmar's Hammer
[objectKeys.zoneID] = zoneIDs.DRAGONBLIGHT,
},
[400028] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13460},
[objectKeys.questEnds] = {13460},
[objectKeys.spawns] = {[zoneIDs.BOREAN_TUNDRA]={{78.45,49.16}}}, -- Unu'pe
[objectKeys.zoneID] = zoneIDs.BOREAN_TUNDRA,
},
[400029] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13467},
[objectKeys.questEnds] = {13467},
[objectKeys.spawns] = {[zoneIDs.BOREAN_TUNDRA]={{76.66,37.47}}}, -- Taunka'le Village
[objectKeys.zoneID] = zoneIDs.BOREAN_TUNDRA,
},
[400030] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13468},
[objectKeys.questEnds] = {13468},
[objectKeys.spawns] = {[zoneIDs.BOREAN_TUNDRA]={{41.71,54.40}}}, -- Warsong Hold
[objectKeys.zoneID] = zoneIDs.BOREAN_TUNDRA,
},
[400031] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13501},
[objectKeys.questEnds] = {13501},
[objectKeys.spawns] = {[zoneIDs.BOREAN_TUNDRA]={{49.75,9.98}}}, -- Bor'gorok Outpost
[objectKeys.zoneID] = zoneIDs.BOREAN_TUNDRA,
},
[400032] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {12950},
[objectKeys.questEnds] = {12950},
[objectKeys.spawns] = {[zoneIDs.SHOLAZAR_BASIN]={{26.61,59.20}}}, -- Nesingwary Base Camp
[objectKeys.zoneID] = zoneIDs.SHOLAZAR_BASIN,
},
[400033] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13461},
[objectKeys.questEnds] = {13461},
[objectKeys.spawns] = {[zoneIDs.STORM_PEAKS]={{41.07,85.85}}}, -- K3
[objectKeys.zoneID] = zoneIDs.STORM_PEAKS,
},
[400034] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13462},
[objectKeys.questEnds] = {13462},
[objectKeys.spawns] = {[zoneIDs.STORM_PEAKS]={{30.92,37.16}}}, -- Bouldercrag's Refuge
[objectKeys.zoneID] = zoneIDs.STORM_PEAKS,
},
[400035] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13471},
[objectKeys.questEnds] = {13471},
[objectKeys.spawns] = {[zoneIDs.STORM_PEAKS]={{67.65,50.69}}}, -- Camp Tunka'lo
[objectKeys.zoneID] = zoneIDs.STORM_PEAKS,
},
[400036] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13548},
[objectKeys.questEnds] = {13548},
[objectKeys.spawns] = {[zoneIDs.STORM_PEAKS]={{37.09,49.50}}}, -- Grom'arsh Crash Site
[objectKeys.zoneID] = zoneIDs.STORM_PEAKS,
},
[400037] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13448},
[objectKeys.questEnds] = {13448},
[objectKeys.spawns] = {[zoneIDs.STORM_PEAKS]={{28.72,74.28}}}, -- Frosthold
[objectKeys.zoneID] = zoneIDs.STORM_PEAKS,
},
[400038] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {12944},
[objectKeys.questEnds] = {12944},
[objectKeys.spawns] = {[zoneIDs.GRIZZLY_HILLS]={{31.94,60.21}}}, -- Amberpine Lodge
[objectKeys.zoneID] = zoneIDs.GRIZZLY_HILLS,
},
[400039] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {12945},
[objectKeys.questEnds] = {12945},
[objectKeys.spawns] = {[zoneIDs.GRIZZLY_HILLS]={{59.63,26.36}}}, -- Westfall Brigade Encampment
[objectKeys.zoneID] = zoneIDs.GRIZZLY_HILLS,
},
[400040] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13435},
[objectKeys.questEnds] = {13435},
[objectKeys.spawns] = {[zoneIDs.HOWLING_FJORD]={{60.47,15.91}}}, -- Fort Wildervar
[objectKeys.zoneID] = zoneIDs.HOWLING_FJORD,
},
[400041] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13433},
[objectKeys.questEnds] = {13433},
[objectKeys.spawns] = {[zoneIDs.HOWLING_FJORD]={{58.32,62.82}}}, -- Valgarde
[objectKeys.zoneID] = zoneIDs.HOWLING_FJORD,
},
[400042] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13434},
[objectKeys.questEnds] = {13434},
[objectKeys.spawns] = {[zoneIDs.HOWLING_FJORD]={{30.83,41.42}}}, -- Westguard Keep
[objectKeys.zoneID] = zoneIDs.HOWLING_FJORD,
},
[400043] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13438},
[objectKeys.questEnds] = {13438},
[objectKeys.spawns] = {[zoneIDs.DRAGONBLIGHT]={{28.95,56.22}}}, -- Stars' Rest
[objectKeys.zoneID] = zoneIDs.DRAGONBLIGHT,
},
[400044] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13439},
[objectKeys.questEnds] = {13439},
[objectKeys.spawns] = {[zoneIDs.DRAGONBLIGHT]={{77.50,51.28}}}, -- Wintergarde Keep
[objectKeys.zoneID] = zoneIDs.DRAGONBLIGHT,
},
[400045] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13437},
[objectKeys.questEnds] = {13437},
[objectKeys.spawns] = {[zoneIDs.BOREAN_TUNDRA]={{57.12,18.81}}}, -- Fizzcrank Airstrip
[objectKeys.zoneID] = zoneIDs.BOREAN_TUNDRA,
},
[400046] = {
[objectKeys.name] = "Candy Bucket",
[objectKeys.questStarts] = {13436},
[objectKeys.questEnds] = {13436},
[objectKeys.spawns] = {[zoneIDs.BOREAN_TUNDRA]={{58.52,67.87}}}, -- Valiance Keep
[objectKeys.zoneID] = zoneIDs.BOREAN_TUNDRA,
},
[400047] = {
[objectKeys.name] = "Drakuru's Brazier",
[objectKeys.spawns] = {[zoneIDs.GRIZZLY_HILLS]={{17.42,36.36}}}, -- Zeb'Halak
[objectKeys.zoneID] = zoneIDs.GRIZZLY_HILLS,
},
[400048] = {
[objectKeys.name] = "Chemical Wagon", -- Orgrimmar
[objectKeys.spawns] = {[zoneIDs.DUROTAR]={{40.13,15.71}}},
[objectKeys.zoneID] = zoneIDs.DUROTAR,
},
[400049] = {
[objectKeys.name] = "Chemical Wagon", -- Ambermill
[objectKeys.spawns] = {[zoneIDs.SILVERPINE_FOREST]={{54.75,61.33}}},
[objectKeys.zoneID] = zoneIDs.SILVERPINE_FOREST,
},
[400050] = {
[objectKeys.name] = "Chemical Wagon", -- Elwynn
[objectKeys.spawns] = {[zoneIDs.ELWYNN_FOREST]={{29.19,65.44}}},
[objectKeys.zoneID] = zoneIDs.ELWYNN_FOREST,
},
[400051] = {
[objectKeys.name] = "Chemical Wagon", -- Darkshore
[objectKeys.spawns] = {[zoneIDs.DARKSHORE]={{42.47,79.46}}},
[objectKeys.zoneID] = zoneIDs.DARKSHORE,
},
[400052] = {
[objectKeys.name] = "Chemical Wagon", -- Hillsbrad
[objectKeys.spawns] = {[zoneIDs.HILLSBRAD_FOOTHILLS]={{28.22,37.63}}},
[objectKeys.zoneID] = zoneIDs.HILLSBRAD_FOOTHILLS,
},
[400053] = {
[objectKeys.name] = "Chemical Wagon", -- Theramore
[objectKeys.spawns] = {[zoneIDs.DUSTWALLOW_MARSH]={{60.83,38.49}}},
[objectKeys.zoneID] = zoneIDs.DUSTWALLOW_MARSH,
},
[400054] = {
[objectKeys.name] = "Chemical Wagon", -- Aerie Peak
[objectKeys.spawns] = {[zoneIDs.THE_HINTERLANDS]={{23.44,53.68}}},
[objectKeys.zoneID] = zoneIDs.THE_HINTERLANDS,
},
[400055] = {
[objectKeys.name] = "Chemical Wagon", -- Everlook
[objectKeys.spawns] = {[zoneIDs.WINTERSPRING]={{64.67,37.36}}},
[objectKeys.zoneID] = zoneIDs.WINTERSPRING,
},
[400056] = {
[objectKeys.name] = "Chemical Wagon", -- Shattrath
[objectKeys.spawns] = {[zoneIDs.TEROKKAR_FOREST]={{41.46,22.52}}},
[objectKeys.zoneID] = zoneIDs.TEROKKAR_FOREST,
},
[400057] = {
[objectKeys.name] = "Chemical Wagon", -- Crystalsong
[objectKeys.spawns] = {[zoneIDs.CRYSTALSONG_FOREST]={{50.5,50.11},{46.44,50.86},{48.46,51.01},{49.09,47.62}}},
[objectKeys.zoneID] = zoneIDs.CRYSTALSONG_FOREST,
},
[400061] = {
[objectKeys.name] = "Spend 5 Talent Points",
[objectKeys.spawns] = {[zoneIDs.ACHERUS_THE_EBON_HOLD]={{80.29,48.02},{80.91,43.78},{83.74,44.58}}},
[objectKeys.zoneID] = zoneIDs.ACHERUS_THE_EBON_HOLD,
},
[400062] = {
[objectKeys.name] = "Open the Survival Kit",
[objectKeys.spawns] = {[zoneIDs.ACHERUS_THE_EBON_HOLD]={{80.29,48.02},{80.91,43.78},{83.74,44.58}}},
[objectKeys.zoneID] = zoneIDs.ACHERUS_THE_EBON_HOLD,
},
[400063] = {
[objectKeys.name] = "Equip a Weapon",
[objectKeys.spawns] = {[zoneIDs.ACHERUS_THE_EBON_HOLD]={{80.29,48.02},{80.91,43.78},{83.74,44.58}}},
[objectKeys.zoneID] = zoneIDs.ACHERUS_THE_EBON_HOLD,
},
[400064] = {
[objectKeys.name] = "Train a Spell at your class trainer",
[objectKeys.spawns] = {[zoneIDs.ACHERUS_THE_EBON_HOLD]={{80.29,48.02},{80.91,43.78},{83.74,44.58}}},
[objectKeys.zoneID] = zoneIDs.ACHERUS_THE_EBON_HOLD,
},
[400065] = {
[objectKeys.name] = "Scourge Enclosure",
[objectKeys.spawns] = {[zoneIDs.ZUL_DRAK]={{19.94,56.12}}},
[objectKeys.zoneID] = zoneIDs.ZUL_DRAK,
},
[400066] = {
[objectKeys.name] = "Drakuru's Brazier",
[objectKeys.spawns] = {[zoneIDs.GRIZZLY_HILLS]={{71.74,26.2}}},
[objectKeys.zoneID] = zoneIDs.GRIZZLY_HILLS,
},
}
end
-- This should allow manual fix for object availability
function QuestieWotlkObjectFixes:LoadFactionFixes()
local objectKeys = QuestieDB.objectKeys
local zoneIDs = ZoneDB.zoneIDs
local objectFixesHorde = {
[201873] = {
[objectKeys.spawns] = {
[zoneIDs.ICECROWN_CITADEL_RAMPART_OF_SKULLS]={{47.9,77.3}},
[zoneIDs.ICECROWN_CITADEL]={{-1,-1}},
},
},
}
local objectFixesAlliance = {
[201873] = {
[objectKeys.spawns] = {
[zoneIDs.ICECROWN_CITADEL_RAMPART_OF_SKULLS]={{42.55,76.8}},
[zoneIDs.ICECROWN_CITADEL]={{-1,-1}},
},
},
}
if UnitFactionGroup("Player") == "Horde" then
return objectFixesHorde
else
return objectFixesAlliance
end
end
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,10 @@
---@type table
local EbonholdDB = QuestieLoader:CreateModule("EbonholdDB")
EbonholdDB.itemData = EbonholdDB.itemData or {
-- Ebonhold Custom Items would go here
-- [ItemID] = {Name, ...}
}
EbonholdItemDB = EbonholdItemDB or {}
EbonholdItemDB.itemData = EbonholdDB.itemData
@@ -0,0 +1,26 @@
---@type table
local EbonholdDB = QuestieLoader:CreateModule("EbonholdDB")
EbonholdDB.npcData = EbonholdDB.npcData or {
-- Quest 50030 Corrections: Full Spawn Data for Borean Tundra Elementals
-- Overrides existing sparse data in WotLK DB
[24601] = {'Steam Rager',9291,9291,70,71,0,{[3537] = {{67,25.4},{67.4,22},{67.4,26.4},{67.4,26.8},{68,26},{68,27},{68.2,23},{68.2,23.6},{68.4,22.4},{68.4,25},{68.4,28.2},{68.8,24.8},{68.8,31.2},{69.2,23.8},{69.2,26.8},{69.2,27.8},{69.4,22.2},{69.4,22.8},{69.4,26.4},{69.4,29},{69.4,30},{69.6,22.4},{69.6,24.4},{69.6,28.2},{69.8,22.8},{69.8,32},{70,29.4},{70.2,36.6},{70.4,25.4},{70.4,25.6},{70.4,26.6},{70.4,29.8},{70.4,30.8},{70.4,36},{70.6,29.4},{70.8,36.4},{71,22.2},{71,22.6},{71,24.4},{71,25.8},{71,28.2},{71,36.6},{71.2,38.4},{71.4,25.4},{71.4,27.2},{71.4,30.4},{71.4,31.2},{71.4,32.4},{71.4,33.2},{71.4,34},{71.4,35},{71.4,39.4},{71.4,39.6},{71.6,22},{71.6,29.6},{71.6,31},{71.6,39.4},{71.8,25.8},{71.8,27.2},{71.8,33.6},{71.8,42.2},{72,24.6},{72,28.6},{72,32.6},{72,37.6},{72.2,24.2},{72.2,28.4},{72.2,32.4},{72.2,35.2},{72.2,35.8},{72.2,36.6},{72.4,21},{72.4,23.4},{72.4,40.4},{72.4,41.2},{72.6,24.4},{72.6,27.2},{72.6,30.2},{72.6,31.4},{72.6,32.4},{72.6,33.4},{72.6,33.6},{72.6,35.4},{72.6,36.4},{72.6,36.6},{72.8,25.4},{72.8,41.6},{73,23.4},{73,26.2},{73,28.2},{73.2,38.2},{73.2,39.4},{73.2,40.2},{73.2,40.6},{73.4,28.6},{73.6,24.4},{73.6,26},{73.6,27.2},{73.6,40.4},{73.6,40.6},{73.8,25.2},{73.8,28},{73.8,29.2},{73.8,38.6},{74.2,30.2},{74.2,30.6},{74.2,37.4},{74.2,37.8},{74.4,31.6},{74.4,33.4},{74.4,34.2},{74.4,35},{74.4,35.8},{74.6,29.4},{74.6,30},{74.6,31.8},{74.6,36.8},{74.6,38.4},{74.6,39.4},{74.6,39.8},{74.8,30.8},{74.8,33.6},{74.8,34.6},{74.8,35.6},{75.4,33.4},{75.6,29},{75.6,33.4},{75.6,33.8},{75.6,34.6},{75.6,35.8},{75.8,38.2},{76.4,32.4},{76.4,37.4},{76.6,32},{76.8,36},{77,37.8},{77.4,37},{77.6,37}}},nil,3537,nil,nil,91,nil,"",0},
[25226] = {'Scalder',9291,9291,71,71,0,{[3537] = {{42.4,15.4},{42.4,15.6},{42.6,15.4},{42.6,16.4},{42.6,16.6},{42.8,17.6}}},nil,3537,nil,nil,14,nil,"",0},
[25376] = {'Imperean',9291,9291,72,72,0,{[3537] = {{46.4,9.4},{46.6,9.4}}},nil,3537,nil,nil,190,nil,"",0},
[25415] = {'Enraged Tempest',9291,9291,70,71,0,{[3537] = {{42,8},{42.2,9.4},{42.2,13.4},{42.4,10.2},{42.4,10.6},{42.6,10.4},{42.8,9},{42.8,10.6},{43,7.4},{43.2,8},{43.4,13.8},{43.6,7.8},{43.6,9},{43.6,13.4},{43.8,7.4},{43.8,10.6},{44,13.6},{44.2,11.6},{44.4,10},{44.6,7.4},{44.6,7.6},{44.6,11.6},{44.8,10.8},{45,9.2},{45.4,6.4},{45.4,9.8},{45.6,6.4},{45.6,9.8},{45.8,9.4},{45.8,12.4},{46,7.4},{46,7.6},{46,10.6},{46,13.2},{46.6,7.8},{46.6,9.2},{46.6,10.4},{46.6,11.2},{47.2,11.6},{48.2,7.4}}},nil,3537,nil,nil,834,nil,"",0},
[25416] = {'Simmer',9291,9291,72,72,0,{[3537] = {{50.4,15.2},{50.8,15.2}}},nil,3537,nil,nil,1983,nil,"",0},
[25417] = {'Raging Boiler',9291,9291,69,70,0,{[3537] = {{46,14.6},{46.2,13.2},{46.2,13.8},{46.8,14.4},{47,9.8},{47,12.4},{47,12.8},{47.2,14.6},{47.2,16.8},{47.4,11.2},{47.4,15.6},{47.8,12.4},{47.8,15.4},{48,11.4},{48,15.8},{48,21.2},{48.2,12.8},{48.2,16.6},{48.2,19.8},{48.4,14.2},{48.4,18.2},{48.4,19.4},{48.6,12.4},{48.6,16.2},{48.6,19.4},{48.8,13.4},{48.8,13.6},{49,16.8},{49.2,17.6},{49.4,10.2},{49.4,10.6},{49.4,15},{49.6,10.8},{49.6,13.4},{49.6,14.4},{49.6,17},{50.2,15},{50.4,15.6},{50.4,17.8},{50.6,15.6},{50.8,15.2}}},nil,3537,nil,nil,1983,nil,"",0},
[25418] = {'Churn',9291,9291,71,71,0,{[3537] = {{45.4,12.4},{45.8,12.2},{45.8,12.8},{45.8,13.6}}},nil,3537,nil,nil,1984,nil,"",0},
[25419] = {'Boiling Spirit',9291,9291,69,70,0,{[3537] = {{43.4,13.8},{44.4,9},{44.6,9.8},{44.6,15.6},{45.2,12.4},{45.2,12.6},{45.2,16.8},{45.4,11.4},{45.4,15.4},{45.8,9.8},{45.8,12.2},{45.8,13},{45.8,13.6},{46,14.8},{46,16.8},{46,19},{46.2,11.4},{46.2,15.6},{46.4,9.4},{46.6,9.6},{46.8,9.2},{46.8,15},{46.8,16.8},{47,11.2},{47,12.6},{47.2,12.4},{47.2,16},{47.2,18.4},{47.4,14.2},{47.6,11.4},{47.6,12.4},{47.6,15.4},{47.8,16.8},{47.8,17.8},{48,15.8},{48.2,13.4},{48.2,14},{48.6,16},{48.8,12.2},{48.8,13.4},{49,16.8},{49.2,14.8},{49.4,10.6},{49.4,13.8},{50,10.8},{50.2,15.2},{51,15.2}}},nil,3537,nil,nil,1984,nil,"",0},
[25514] = {'Rocknar',9291,9291,71,71,0,{[3537] = {{81.4,42.4},{81.4,42.6},{81.6,42.6}}},nil,3537,nil,nil,14,nil,"",0},
[25707] = {'Magic-bound Ancient',9291,9291,71,72,0,{[3537] = {{22.4,23.4},{22.4,24},{22.8,24},{23,25.4},{23.4,30.2},{23.4,33.6},{23.6,27.8},{23.8,25.8},{23.8,34.2},{24,29.4},{24,29.8},{24.2,21.4},{24.4,22.4},{24.4,22.6},{24.4,23.6},{24.4,30.8},{24.4,31.6},{24.4,35},{24.6,22.4},{24.6,23},{24.6,23.6},{24.6,28.8},{24.6,30.4},{25,31.4},{25.2,20.4},{25.2,25},{25.2,31.6},{25.4,28.4},{25.4,34.4},{25.4,34.8},{25.4,35.6},{25.4,36.6},{25.6,34.6},{25.6,37},{25.8,21.4},{25.8,34.2},{25.8,35.6},{26,21.8},{26,23.4},{26,29.4},{26,31.4},{26,31.8},{26.4,32.6},{26.6,35},{27,20.4},{27,32.6},{27,33.8},{27.2,31},{27.4,20.6},{27.4,21.8},{27.4,30.4},{27.4,32},{27.6,33.6},{27.8,32.2},{27.8,32.6},{28.2,28.8},{28.2,29.8},{28.2,31.4},{28.2,35.8},{28.4,20.4},{28.4,21.4},{28.4,21.8},{28.4,28},{28.6,32.6},{28.6,34.2},{28.8,21.4},{28.8,21.6},{28.8,28.4},{28.8,32.4},{29,20.4},{29.2,27.4},{29.4,29},{29.4,30},{29.4,30.6},{29.6,20.2},{29.6,20.6},{29.6,22.8},{29.6,30.4},{29.8,22},{29.8,24.4},{29.8,25.8},{29.8,30.8},{29.8,31.8},{30,29.4},{30,33.2},{30.4,24.6},{30.6,29.2},{30.6,29.8},{30.8,31.2},{31,22.4},{31,26.6},{31.2,23.4},{31.2,25.6},{31.4,20.2},{31.4,21.2},{31.4,24.4},{31.4,24.8},{31.4,27.8},{31.6,20.4},{31.6,22.4},{31.6,24.2},{31.6,24.8},{31.6,25.6},{31.6,26.6},{31.6,30.8},{31.8,20.6},{31.8,23.4},{32,30},{32.4,27.6},{32.4,28.6},{32.4,33.8},{32.6,27.8},{32.6,30.6},{32.8,23.4},{33.2,24.6},{33.2,34.4},{33.4,24.2},{33.4,25.6},{33.4,29.4},{33.6,23.4},{33.6,24.4},{33.6,24.6},{33.8,25.6},{33.8,26.8},{34.4,28.4},{34.4,29.2},{34.4,29.8},{34.6,25.6},{34.8,29},{35,27},{35,29.6},{35.2,28.4},{35.4,30.6},{35.6,28},{35.6,29},{35.6,29.6},{35.6,30.6}}},nil,3537,nil,nil,16,nil,"",0},
[25709] = {'Glacial Ancient',9291,9291,71,72,0,{[3537] = {{20.4,27},{20.4,28.2},{20.8,28.2},{21,25.8},{21,29.2},{21.2,29.6},{21.4,27},{21.4,31.4},{21.4,31.6},{21.4,32.6},{21.6,29.2},{21.6,30.4},{21.6,31},{21.6,32},{21.8,27.6},{22.2,33.2},{22.4,26.4},{22.4,27.2},{22.4,33.6},{22.4,34.6},{22.6,33.4},{22.8,27.2},{22.8,28.8},{23,32.4},{23,33.6},{23.2,27.8},{23.2,34.6},{23.4,25.2},{23.4,26},{23.4,35.6},{23.4,36.6},{23.6,25},{23.6,28.6},{23.6,33.4},{23.6,34.8},{23.6,35.8},{23.8,26.4},{23.8,27.8},{23.8,32.4},{23.8,36.6},{24,26.6},{24.2,34.2},{24.6,26},{24.6,27.8},{24.6,36.8},{24.8,27.2},{25,34.2},{25.2,19.4},{25.4,33.4},{25.4,34.6},{25.4,35.6},{25.6,33.4},{25.6,35},{25.6,35.6},{25.6,36.6},{25.8,34.2},{26.4,17.4},{26.4,18.2},{26.4,19.2},{26.4,20},{26.4,20.6},{26.6,18.4},{26.6,18.6},{26.6,19.6},{26.6,20.6},{27.2,33.8},{27.8,18},{29.4,30.2},{29.4,32.2},{29.4,32.8},{30.4,23.4},{30.4,23.8},{30.4,24.8},{30.4,29},{30.4,30.4},{30.4,31.4},{30.4,32.4},{30.4,32.6},{30.6,29.2},{30.6,30.4},{30.6,30.6},{30.6,32.2},{30.6,32.6},{31,28.4},{31.2,25.6},{31.4,22},{31.4,22.8},{31.4,23.6},{31.4,24.8},{31.6,22.4},{31.6,23.6},{31.6,24.6},{31.6,25.8},{31.6,31},{31.8,23.2},{32.6,23},{32.6,23.8},{32.6,26.4},{34.4,25.4},{34.4,26.4},{34.4,26.8},{34.4,28.2},{34.4,28.6},{34.8,26.4},{34.8,26.6},{35,28.6},{35.2,27.8},{35.4,25.4},{35.6,26.4},{35.6,27.2},{35.6,27.6},{35.6,28.6}}},nil,3537,nil,nil,7,nil,"",0},
[25715] = {'Frozen Elemental',9291,9291,70,71,0,{[65]={{11.28,62.69},{11.05,61.25},{9.43,61.9},{10.2,60.22},{10.21,62.04},{9.29,60.28},{8.68,62.04},{9.07,59.02},{7.78,62.99},{8.79,54.22},{9.63,56.48},{11.56,54.92},{11.53,57.32},{11.05,56.14},{8.94,55.86},{10.33,55.94},{10.23,57.3},{7.8,61.25},{13.09,60.42},{8.24,60.06},{12.21,58.61},{11.52,59.08},{11.71,53.34},{7.88,58.82},{8.55,58.35},{6.81,62.17},{11.85,60.86}},[3537] = {{82.8,48.8},{83.2,45.6},{83.4,44.4},{83.4,45},{83.4,47.2},{83.4,47.6},{83.6,44.4},{83.6,47.2},{83.8,44.8},{84.2,46.4},{84.2,47.6},{84.6,47.2},{85,46.4},{85,48.8},{85.2,48},{85.4,43.8},{85.4,44.8},{85.6,43.4},{85.8,44.2},{85.8,47.4},{85.8,47.6},{86,45.8},{86.2,45.4},{86.8,47.6},{87.2,43.4},{87.2,43.6},{87.2,45},{87.4,42.4},{87.4,46.4},{87.4,46.6},{87.6,45.4},{87.6,45.8},{87.8,42.8},{88.4,42.4},{88.4,44.2},{88.4,46.8},{88.6,44.2},{88.6,45.8},{88.6,46.8},{88.8,41.4},{88.8,42.2},{88.8,45.4},{89,42.6},{89.8,42.6},{90.2,40.8},{90.2,41.8},{91,43},{91.2,40.4},{91.2,41.6},{91.4,41.4},{91.6,41.2},{91.6,41.6},{92,42.6},{92.4,37.8},{92.4,39.4},{92.4,39.6},{92.6,39.2},{92.6,39.6},{92.8,43.6},{93,36.4},{93,37.4},{93,38},{93.4,35.4}}},nil,3537,nil,nil,14,nil,"",0},
[25742] = {'Alluvius',9291,9291,71,71,0,{[3537] = {{70.2,36.2},{75.4,35.6},{75.6,35.4},{75.6,35.8}}},nil,3537,nil,nil,35,nil,"",0},
[26045] = {'Storm Tempest',9291,9291,71,71,0,{[3537] = {{77,38.6}}},nil,3537,nil,nil,834,nil,"",0},
[32357] = {'Old Crystalbark',9291,9291,71,72,0,{[3537] = {{20.6,27.8},{20.8,27},{21.2,28.6},{21.2,29.8},{21.6,30.8},{21.8,27},{21.8,34.6},{22,33.8},{22.2,35.8},{22.4,33.4},{22.6,33},{23,33.8},{23.6,35.8},{24.4,34.4},{24.4,34.6},{25,34.2},{25,34.8},{25.6,34.6},{27,35.6},{29.6,33.2},{30,32},{30.8,30.6},{31.2,30.2},{31.6,30.2},{32,31.4},{33,31.8},{33.2,24.4},{33.2,34},{33.4,31},{33.6,31.2},{34.2,23.6},{34.4,25.4},{34.6,27.4},{35.2,28.4},{35.4,30},{35.6,30.8},{35.6,31.6},{36,28.2},{36.2,29.2},{36.2,30.2},{37.2,29}}},nil,3537,nil,nil,14,nil,"",0},
}
-- Backward compatibility
EbonholdNpcDB = EbonholdNpcDB or {}
EbonholdNpcDB.npcData = EbonholdDB.npcData
@@ -0,0 +1,17 @@
---@type table
local EbonholdDB = QuestieLoader:CreateModule("EbonholdDB")
EbonholdDB.objectData = EbonholdDB.objectData or {
-- Object 600600: Elemental Shrine (starts quest 50026)
[600600] = {
[1] = "Elemental Shrine", -- Name
[2] = nil, -- Type
[3] = nil, -- Zones
[4] = { [3703] = { { 54.29, 45.69 } } }, -- Spawns: Shattrath City
[5] = 12, -- Faction
[6] = nil, -- Unknown
},
}
EbonholdObjectDB = EbonholdObjectDB or {}
EbonholdObjectDB.objectData = EbonholdDB.objectData
@@ -0,0 +1,335 @@
---@type table
local EbonholdDB = QuestieLoader:CreateModule("EbonholdDB")
EbonholdDB.questData = EbonholdDB.questData or {
-- Quest 50026: Elemental Balance
-- Started by object 600600, kills of NPCs 17156 or 17157 count (both are elementals)
[50026] = {
[1] = "Elemental Balance", -- Quest name
[2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}}
[4] = 67, -- Quest level
[5] = 64, -- Min level
[6] = 3518, -- Zone (Nagrand)
[8] = {
"This is a custom objective. Upon completion, you will automatically receive the assigned reward. If you die, the quest will be removed from your quest log. This quest is automatically rewarded upon completion.",
"Kill 30 Elementals in Nagrand"
},
[10] = {
nil, -- [1] creatureObjective (not used)
nil, -- [2] objectObjective (not used)
nil, -- [3] itemObjective (not used)
nil, -- [4] reputationObjective (not used)
{ -- [5] killCreditObjective
{
{ 17153, 17154, 17155, 17156, 17157, 17159, 17160, 18062, 22309, 22310, 22311, 22313 }, -- IdList: all elemental types
17157, -- RootId: representative NPC
"Shattered Rumbler slain" -- Text
}
}
},
[17] = nil, -- XP reward
[30] = 60, -- Group size
},
-- Quest 50085: Savage Heights
-- Kill 75 beasts in Blade's Edge Mountains
[50085] = {
[1] = "Savage Heights", -- Quest name
[2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}}
[4] = 70, -- Quest level
[5] = 67, -- Min level
[6] = 3522, -- Zone (Blade's Edge Mountains)
[8] = {
"This is a custom objective. Upon completion, you will automatically receive the assigned reward. If you die, the quest will be removed from your quest log. This quest is automatically rewarded upon completion.",
"Kill 75 Beasts in Blade's Edge Mountains"
},
[10] = {
nil, -- [1] creatureObjective (not used)
nil, -- [2] objectObjective (not used)
nil, -- [3] itemObjective (not used)
nil, -- [4] reputationObjective (not used)
{ -- [5] killCreditObjective
{
-- All 47 beast-type NPCs in Blade's Edge Mountains
{ 10204, 20058, 20109, 20327, 20330, 20714, 20728, 20729, 20747, 20748, 20749, 20751, 20924, 20925, 20987, 20998, 21022, 21033, 21042, 21123, 21124, 21373, 21423, 21470, 21796, 21839, 21952, 21956, 22044, 22052, 22110, 22114, 22123, 22132, 22135, 22136, 22141, 22142, 22181, 22268, 22490, 22492, 22498, 22987, 23036, 23343, 23380 },
20728, -- RootId: Bladespire Raptor (representative beast)
"Beast slain"
}
}
},
[17] = nil, -- XP reward
[30] = 75, -- Kill count
},
-- Quest 50086: Unstable Fauna
-- Kill 75 beasts in Netherstorm
[50086] = {
[1] = "Unstable Fauna", -- Quest name
[2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}}
[4] = 70, -- Quest level
[5] = 67, -- Min level
[6] = 3523, -- Zone (Netherstorm)
[8] = {
"This is a custom objective. Upon completion, you will automatically receive the assigned reward. If you die, the quest will be removed from your quest log. This quest is automatically rewarded upon completion.",
"Kill 75 Beasts in Netherstorm"
},
[10] = {
nil, -- [1] creatureObjective (not used)
nil, -- [2] objectObjective (not used)
nil, -- [3] itemObjective (not used)
nil, -- [4] reputationObjective (not used)
{ -- [5] killCreditObjective
{
-- All 18 beast-type NPCs in Netherstorm
{ 18879, 18880, 18883, 18884, 20415, 20607, 20610, 20611, 20618, 20634, 20671, 20673, 20773, 20775, 20777, 20931, 20932, 21005 },
18879, -- RootId: Phase Hunter (representative beast)
"Beast slain"
}
}
},
[17] = nil, -- XP reward
[30] = 75, -- Kill count
},
-- Quest 50201: Dragonblight Trophy
-- Kill 1 rare in Dragonblight
[50201] = {
[1] = "Dragonblight Trophy", -- Quest name
[2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}}
[4] = 75, -- Quest level
[5] = 71, -- Min level
[6] = 65, -- Zone (Dragonblight)
[8] = {
"This is a custom objective. Upon completion, you will automatically receive the assigned reward. If you die, the quest will be removed from your quest log. This quest is automatically rewarded upon completion.",
"Kill 1 Rare in Dragonblight"
},
[10] = {
nil, -- [1] creatureObjective (not used)
nil, -- [2] objectObjective (not used)
nil, -- [3] itemObjective (not used)
nil, -- [4] reputationObjective (not used)
{ -- [5] killCreditObjective
{
-- 3 rare NPCs in Dragonblight (already in WotLK DB with spawns)
{ 32417, 32409, 32400 }, -- Scarlet Highlord Daion, Crazed Indu'le Survivor, Tukemuth
32417, -- RootId: Scarlet Highlord Daion (representative rare)
"Rare slain"
}
}
},
[17] = nil, -- XP reward
[30] = 1, -- Kill count (only 1 rare needed)
},
-- Quest 50160: Redridge Trophy
-- Kill 1 rare in Redridge Mountains
[50160] = {
[1] = "Redridge Trophy", -- Quest name
[2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}}
[4] = 17, -- Required level (Min level)
[5] = 25, -- Quest level
[17] = 44, -- Zone (Redridge Mountains)
[8] = {
"This is a custom objective. Upon completion, you will automatically receive the assigned reward. If you die, the quest will be removed from your quest log. This quest is automatically rewarded upon completion.",
"Kill 1 Rare in Redridge Mountains"
},
[10] = {
nil, -- [1] creatureObjective (not used)
nil, -- [2] objectObjective (not used)
nil, -- [3] itemObjective (not used)
nil, -- [4] reputationObjective (not used)
{ -- [5] killCreditObjective
{
-- Redridge Rares
{ 14271, 616, 14270, 584, 14272, 14273, 947, 14269 },
14271, -- RootId: Ribchaser (representative rare)
"Rare slain"
}
}
},
[30] = 1, -- Kill count
},
-- Quest 50192: Zangarmarsh Trophy
-- Kill 1 rare in Zangarmarsh
[50192] = {
[1] = "Zangarmarsh Trophy", -- Quest name
[2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}}
[4] = 60, -- Required level (Min level)
[5] = 63, -- Quest level
[17] = 3521, -- Zone (Zangarmarsh)
[8] = {
"This is a custom objective. Upon completion, you will automatically receive the assigned reward. If you die, the quest will be removed from your quest log. This quest is automatically rewarded upon completion.",
"Kill 1 Rare in Zangarmarsh"
},
[10] = {
nil, -- [1] creatureObjective (not used)
nil, -- [2] objectObjective (not used)
nil, -- [3] itemObjective (not used)
nil, -- [4] reputationObjective (not used)
{ -- [5] killCreditObjective
{
-- Zangarmarsh Rares
{ 18682, 18680, 18681 }, -- Bog Lurker, Marticar, Coilfang Emissary
18682, -- RootId: Bog Lurker (representative rare)
"Rare slain"
}
}
},
[30] = 1, -- Kill count
},
-- Quest 50083: Forest Stalkers
-- Kill 75 beasts in Terokkar Forest
[50083] = {
[1] = "Forest Stalkers", -- Quest name
[2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}}
[4] = 65, -- Quest level
[5] = 62, -- Min level
[6] = 3519, -- Zone (Terokkar Forest)
[8] = {
"This is a custom objective. Upon completion, you will automatically receive the assigned reward. If you die, the quest will be removed from your quest log. This quest is automatically rewarded upon completion.",
"Kill 75 Beasts in Terokkar Forest"
},
[10] = {
nil, -- [1] creatureObjective (not used)
nil, -- [2] objectObjective (not used)
nil, -- [3] itemObjective (not used)
nil, -- [4] reputationObjective (not used)
{ -- [5] killCreditObjective
{
-- All 53 beast-type NPCs in Terokkar Forest
{ 16932, 16933, 18467, 18464, 18466, 18670, 18465, 21723, 18461, 18648, 18750, 23219, 23051, 18463, 22424, 20682, 21515, 21854, 23163, 21816, 18476, 18477, 32956, 18437, 21634, 22337, 24922, 21804, 18470, 18438, 18647, 19607, 18468, 23338, 14866, 14868, 22100, 23206, 22972, 22105, 19659, 22326, 18707, 22807, 18469, 23167, 21635, 18492, 19616, 23162, 14869, 22339, 22987 },
16932, -- RootId: Razorfang Hatchling (representative beast)
"Beast slain"
}
}
},
[17] = nil, -- XP reward
[30] = 75, -- Kill count
},
-- Quest 50060: Skies of Blade's Edge
-- Kill Dragonkin in Blade's Edge Mountains
[50060] = {
[1] = "Skies of Blade's Edge", -- Quest name
[2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}}
[4] = 67, -- Required level (Min level)
[5] = 70, -- Quest level
[17] = 3522, -- Zone (Blade's Edge Mountains)
[8] = {
"This is a custom objective. Upon completion, you will automatically receive the assigned reward. If you die, the quest will be removed from your quest log. This quest is automatically rewarded upon completion.",
"Slay Dragonkin in Blade's Edge Mountains"
},
[10] = {
nil, -- [1] creatureObjective (not used)
nil, -- [2] objectObjective (not used)
nil, -- [3] itemObjective (not used)
nil, -- [4] reputationObjective (not used)
{ -- [5] killCreditObjective
{
-- All 17 dragonkin-type NPCs in Blade's Edge Mountains
{ 18692, 21032, 20021, 20713, 21004, 23281, 23261, 21387, 22108, 21492, 23061, 21811, 21497, 23282, 21389, 22130, 23364 },
18692, -- RootId: Hemathion (representative dragonkin)
"Dragonkin slain"
}
}
},
},
-- Quest 50030: Tundra Turbulence
-- Kill Elementals in Borean Tundra
[50030] = {
[1] = "Tundra Turbulence", -- Quest name
[2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}}
[4] = 68, -- Required level (Min level)
[5] = 71, -- Quest level
[6] = 3537, -- Zone (Borean Tundra)
[8] = {
"This is a custom objective. Upon completion, you will automatically receive the assigned reward. If you die, the quest will be removed from your quest log. This quest is automatically rewarded upon completion.",
"Kill Elementals in Borean Tundra"
},
[10] = {
nil, -- [1] creatureObjective (not used)
nil, -- [2] objectObjective (not used)
nil, -- [3] itemObjective (not used)
nil, -- [4] reputationObjective (not used)
{ -- [5] killCreditObjective
{
-- All 15 elemental-type NPCs in Borean Tundra
{ 25417, 32357, 25715, 25514, 25419, 24601, 25415, 25226, 25742, 25707, 25709, 26045, 25376, 25418, 25416 },
25417, -- RootId: Raging Boiler (representative elemental)
"Elementals slain"
}
}
},
[17] = nil, -- XP reward
[30] = 75, -- Kill count (Assumed generic high count for zone farming quests, user said "amount varies", so we don't hardcode it in logic but usually DB needs a number. 75 puts it in line with others.)
},
-- Quest 50087: Shadowed Beasts
-- Kill 75 beasts in Shadowmoon Valley
[50087] = {
[1] = "Shadowed Beasts", -- Quest name
[2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}}
[4] = 67, -- Quest level
[5] = 65, -- Min level
[6] = 3520, -- Zone (Shadowmoon Valley)
[8] = {
"This is a custom objective. Upon completion, you will automatically receive the assigned reward. If you die, the quest will be removed from your quest log. This quest is automatically rewarded upon completion.",
"Kill 75 Beasts in Shadowmoon Valley"
},
[10] = {
nil, -- [1] creatureObjective (not used)
nil, -- [2] objectObjective (not used)
nil, -- [3] itemObjective (not used)
nil, -- [4] reputationObjective (not used)
{ -- [5] killCreditObjective
{
-- All 25 beast-type NPCs in Shadowmoon Valley (excluding mounts)
{ 19379, 19784, 20502, 20503, 21102, 21108, 21307, 21340, 21408, 21462, 21627, 21723, 21802, 21864, 21879, 21897, 21901, 22265, 23020, 23169, 23264, 23267, 23269, 23326, 23501 },
21723, -- RootId: Blackwind Sabercat (representative beast)
"Beast slain"
}
}
},
[17] = nil, -- XP reward
[30] = 75, -- Kill count
},
-- Quest 50064: Heart of the Dragonflights
-- Kill 30 dragonkin in Dragonblight
[50064] = {
[1] = "Heart of the Dragonflights", -- Quest name
[2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}}
[4] = 73, -- Quest level
[5] = 71, -- Min level
[6] = 65, -- Zone (Dragonblight)
[8] = {
"This is a custom objective. Upon completion, you will automatically receive the assigned reward. If you die, the quest will be removed from your quest log. This quest is automatically rewarded upon completion.",
"Kill 30 Dragonkin in Dragonblight"
},
[10] = {
nil, -- [1] creatureObjective (not used)
nil, -- [2] objectObjective (not used)
nil, -- [3] itemObjective (not used)
nil, -- [4] reputationObjective (not used)
{ -- [5] killCreditObjective
{
-- All 49 dragonkin NPCs in Dragonblight (excluding 32572 which is an object)
{ 26276, 26277, 26322, 26349, 26443, 26593, 26917, 26925, 26933, 26949, 26983, 27255, 27506, 27530, 27542, 27575, 27608, 27629, 27682, 27725, 27763, 27765, 27785, 27789, 27856, 27896, 27897, 27898, 27900, 27925, 27935, 27938, 27940, 27943, 27948, 27950, 27953, 27990, 27996, 30058, 31333, 31334, 31393, 32180, 32185, 32186, 32352, 32533, 38017 },
26322, -- RootId: Arcane Wyrm (representative dragonkin)
"Dragonkin slain"
}
}
},
[17] = nil, -- XP reward
[30] = 30, -- Kill count
},
}
-- Backward compatibility
EbonholdQuestDB = EbonholdQuestDB or {}
EbonholdQuestDB.questData = EbonholdDB.questData
+323
View File
@@ -0,0 +1,323 @@
---@class EbonholdLoader
---@type table
local EbonholdLoader = QuestieLoader:CreateModule("EbonholdLoader")
---@type QuestieDB
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
---@type table
local EbonholdDB = QuestieLoader:ImportModule("EbonholdDB")
_G.EbonholdDB = _G.EbonholdDB or EbonholdDB
local _overridesInjected = false
local _zonesApplied = false
local function _LoadIfString(data, label)
if not data then return nil end
if type(data) == "string" then
local fn, err = loadstring(data)
if not fn then
if Questie and Questie.Debug then
Questie:Debug(Questie.DEBUG_CRITICAL,
"[EbonholdLoader] loadstring failed for " .. tostring(label) .. ": " .. tostring(err))
end
return nil
end
local ok, tbl = pcall(fn)
if not ok then
if Questie and Questie.Debug then
Questie:Debug(Questie.DEBUG_CRITICAL,
"[EbonholdLoader] executing chunk failed for " .. tostring(label) .. ": " .. tostring(tbl))
end
return nil
end
return tbl
end
return data
end
local function _MergeInto(dst, src)
if type(dst) ~= "table" or type(src) ~= "table" then return end
for id, entry in pairs(src) do
dst[id] = entry
end
end
-- Apply Ebonhold custom uiMapId->areaId mappings into ZoneDB (used by map/Journey)
function EbonholdLoader:ApplyZoneTables()
if _zonesApplied then return end
if not EbonholdZoneTables or not EbonholdZoneTables.uiMapIdToAreaId then return end
local ZoneDB = QuestieLoader:ImportModule("ZoneDB")
if not ZoneDB then return end
ZoneDB.private = ZoneDB.private or {}
ZoneDB.private.uiMapIdToAreaId = ZoneDB.private.uiMapIdToAreaId or {}
ZoneDB.private.areaIdToUiMapId = ZoneDB.private.areaIdToUiMapId or {}
ZoneDB.private.subZoneToParentZone = ZoneDB.private.subZoneToParentZone or {}
ZoneDB.private.dungeons = ZoneDB.private.dungeons or {}
ZoneDB.private.dungeonLocations = ZoneDB.private.dungeonLocations or {}
ZoneDB.private.dungeonParentZones = ZoneDB.private.dungeonParentZones or {}
for uiMapId, areaId in pairs(EbonholdZoneTables.uiMapIdToAreaId) do
if uiMapId and areaId then
-- Always set these mappings (remove the nil check to ensure they're set)
ZoneDB.private.uiMapIdToAreaId[uiMapId] = areaId
-- Ebonhold uses custom map ids for spawns/waypoints (e.g. 1238 for Northshire Valley).
-- QuestieMap draws by converting AreaId->UiMapId, so register these ids as self-mapping.
ZoneDB.private.areaIdToUiMapId[uiMapId] = uiMapId
-- If this uiMapId represents a *dungeon* map, prefer it for that dungeon's AreaId.
-- This keeps normal zones intact (e.g. Elwynn stays 1429), while letting Ebonhold
-- provide real instance maps (e.g. mapID 691 for The Stockade).
if type(ZoneDB.private.dungeons) == "table" and ZoneDB.private.dungeons[areaId] then
ZoneDB.private.areaIdToUiMapId[areaId] = uiMapId
end
-- Register subzone to parent zone mapping so GetParentZoneId works with Ebonhold zones
if uiMapId ~= areaId then
ZoneDB.private.subZoneToParentZone[uiMapId] = areaId
end
end
end
-- Optional: allow Ebonhold to define custom dungeon zones/entrances without touching core tables.
if type(EbonholdZoneTables.dungeons) == "table" then
for areaId, data in pairs(EbonholdZoneTables.dungeons) do
if areaId and data then
ZoneDB.private.dungeons[areaId] = data
end
end
end
if type(EbonholdZoneTables.dungeonLocations) == "table" then
for areaId, data in pairs(EbonholdZoneTables.dungeonLocations) do
if areaId and data then
ZoneDB.private.dungeonLocations[areaId] = data
end
end
end
if type(EbonholdZoneTables.dungeonParentZones) == "table" then
for subZoneId, parentZoneId in pairs(EbonholdZoneTables.dungeonParentZones) do
if subZoneId and parentZoneId then
ZoneDB.private.dungeonParentZones[subZoneId] = parentZoneId
end
end
end
-- Also map parentMapIDs (e.g. 10138) to a usable uiMapId to avoid fallback errors.
if EbonholdUiMapData and EbonholdUiMapData.uiMapData then
for uiMapId, data in pairs(EbonholdUiMapData.uiMapData) do
if uiMapId and ZoneDB.private.areaIdToUiMapId[uiMapId] == nil then
ZoneDB.private.areaIdToUiMapId[uiMapId] = uiMapId
end
if data and type(data.parentMapID) == "number" and ZoneDB.private.areaIdToUiMapId[data.parentMapID] == nil then
ZoneDB.private.areaIdToUiMapId[data.parentMapID] = uiMapId
end
end
end
-- Register zone sort names for custom zones
if EbonholdZoneTables.zoneSort then
ZoneDB.private.zoneSort = ZoneDB.private.zoneSort or {}
for zoneId, zoneName in pairs(EbonholdZoneTables.zoneSort) do
ZoneDB.private.zoneSort[zoneId] = zoneName
end
end
-- Clear cached zone lookups after adding custom zones
if QuestieDB and QuestieDB.private and QuestieDB.private.zoneCache then
QuestieDB.private.zoneCache = {}
end
-- Clear auto-blacklist since zone validation might have changed
if QuestieDB and QuestieDB.autoBlacklist then
QuestieDB.autoBlacklist = {}
end
_zonesApplied = true
end
-- Inject Ebonhold tables into QuestieDB *Overrides* so QueryQuestSingle/QueryNPCSingle can see them
function EbonholdLoader:InjectOverrides()
if _overridesInjected then return end
_overridesInjected = true
-- Apply zone tables FIRST, before any ZoneDB functions use the local variables
EbonholdLoader:ApplyZoneTables()
QuestieDB.npcDataOverrides = QuestieDB.npcDataOverrides or {}
QuestieDB.objectDataOverrides = QuestieDB.objectDataOverrides or {}
QuestieDB.itemDataOverrides = QuestieDB.itemDataOverrides or {}
QuestieDB.questDataOverrides = QuestieDB.questDataOverrides or {}
local npcData = _LoadIfString(EbonholdDB and EbonholdDB.npcData, "EbonholdDB.npcData")
local objectData = _LoadIfString(EbonholdDB and EbonholdDB.objectData, "EbonholdDB.objectData")
local itemData = _LoadIfString(EbonholdDB and EbonholdDB.itemData, "EbonholdDB.itemData")
local questData = _LoadIfString(EbonholdDB and EbonholdDB.questData, "EbonholdDB.questData")
_MergeInto(QuestieDB.npcDataOverrides, npcData)
_MergeInto(QuestieDB.objectDataOverrides, objectData)
_MergeInto(QuestieDB.itemDataOverrides, itemData)
_MergeInto(QuestieDB.questDataOverrides, questData)
-- Keep a lightweight list of custom quest ids for search/UI (DO NOT touch QuestPointers; those are numeric stream pointers)
if type(questData) == "table" then
QuestieDB.ebonholdQuestIds = QuestieDB.ebonholdQuestIds or {}
for questId, _ in pairs(questData) do
if type(questId) == "number" then
QuestieDB.ebonholdQuestIds[questId] = true
end
end
end
-- Keep a lightweight list of custom NPC ids for search/UI
if type(npcData) == "table" then
QuestieDB.ebonholdNpcIds = QuestieDB.ebonholdNpcIds or {}
for npcId, _ in pairs(npcData) do
if type(npcId) == "number" then
QuestieDB.ebonholdNpcIds[npcId] = true
end
end
end
-- Keep a lightweight list of custom object ids for search/UI
if type(objectData) == "table" then
QuestieDB.ebonholdObjectIds = QuestieDB.ebonholdObjectIds or {}
for objectId, _ in pairs(objectData) do
if type(objectId) == "number" then
QuestieDB.ebonholdObjectIds[objectId] = true
end
end
end
-- Keep a lightweight list of custom item ids for search/UI
if type(itemData) == "table" then
QuestieDB.ebonholdItemIds = QuestieDB.ebonholdItemIds or {}
for itemId, _ in pairs(itemData) do
if type(itemId) == "number" then
QuestieDB.ebonholdItemIds[itemId] = true
end
end
end
end
-- Hook ZoneDB.Initialize to inject custom zones BEFORE standard zones are processed
do
local ZoneDB = QuestieLoader:ImportModule("ZoneDB")
if ZoneDB then
local originalZoneInitialize = ZoneDB.Initialize
if type(originalZoneInitialize) == "function" then
function ZoneDB:Initialize(...)
-- Apply custom zones FIRST, before standard zone processing
EbonholdLoader:ApplyZoneTables()
-- Then initialize standard zones
return originalZoneInitialize(self, ...)
end
end
end
end
-- Hook QuestieDB.Initialize to guarantee timing for overrides
do
local originalInitialize = QuestieDB and QuestieDB.Initialize
if type(originalInitialize) == "function" then
function QuestieDB:Initialize(...)
-- 1) Inject overrides before the DB handles are created
EbonholdLoader:InjectOverrides()
local ret = originalInitialize(self, ...)
-- 2) Refresh Journey caches (zoneMap/zones) so "Quests by Zone" sees the new data
local ZoneDB = QuestieLoader:ImportModule("ZoneDB")
local QuestieJourney = QuestieLoader:ImportModule("QuestieJourney")
if ZoneDB and QuestieJourney then
QuestieJourney.zoneMap = ZoneDB:GetZonesWithQuests(true)
QuestieJourney.zones = ZoneDB:GetRelevantZones()
-- Clear the UI cache so the tree gets rebuilt
if QuestieJourney.private then
QuestieJourney.private.treeCache = nil
QuestieJourney.private.lastZoneSelection = {}
end
-- If the Journey window is open, rebuild the current tab
if QuestieJourneyFrame and QuestieJourneyFrame:IsShown() and QuestieJourney.tabGroup then
local p = QuestieJourney.private
if p and p.containerCache and p.lastOpenWindow then
p:HandleTabChange(p.containerCache, p.lastOpenWindow)
end
end
end
return ret
end
end
end
-- >>> NEW: Make QuestieDB.GetQuest work for Ebonhold override quests (Journey needs this)
do
local originalGetQuest = QuestieDB.GetQuest
if type(originalGetQuest) == "function" then
function QuestieDB.GetQuest(questId)
local q = originalGetQuest(questId)
if q then return q end
-- Fallback: build a minimal quest object from QueryQuestSingle (works with overrides)
local name = QuestieDB.QueryQuestSingle(questId, "name")
if not name then return nil end
local level = QuestieDB.QueryQuestSingle(questId, "level") or
QuestieDB.QueryQuestSingle(questId, "questLevel")
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")
-- Build the Starts field from startedBy (CRITICAL for available quests to show icons!)
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 {},
}
-- Also get other fields needed for quest display
local finishedBy = QuestieDB.QueryQuestSingle(questId, "finishedBy")
local specialFlags = QuestieDB.QueryQuestSingle(questId, "specialFlags")
local isRepeatable = specialFlags and (bit.band(specialFlags, 1) ~= 0) or false
-- Questie modules expect these common fields
return {
Id = questId,
id = questId,
name = name,
level = level or reqLevel or 0,
requiredLevel = reqLevel or 0,
Description = desc, -- Journey tooltip reads quest.Description
Starts = starts, -- CRITICAL: AvailableQuests needs this!
finishedBy = finishedBy,
IsRepeatable = isRepeatable,
}
end
end
end
-- Ensure zones also get applied when Questie finishes loading (covers edge cases)
do
local f = CreateFrame("Frame")
f:RegisterEvent("ADDON_LOADED")
f:SetScript("OnEvent", function(_, _, name)
if name ~= "Questie-335" then return end
if C_Timer and C_Timer.After then
C_Timer.After(0, function() EbonholdLoader:ApplyZoneTables() end)
else
EbonholdLoader:ApplyZoneTables()
end
end)
end
return EbonholdLoader
@@ -0,0 +1,36 @@
---@class EbonholdUiMapData
EbonholdUiMapData = EbonholdUiMapData or {}
EbonholdUiMapData.uiMapData = {
-- Ebonhold custom dungeon maps
-- Example from Ascension (Reference only for structure):
-- [691] = {
-- [1] = 375.0,
-- [2] = 251.0,
-- [3] = 189.0,
-- [4] = 220.0,
-- instance = 34,
-- mapID = 691.1,
-- name = "The Stockade",
-- mapType = 3,
-- parentMapID = 717,
-- },
}
local function ApplyUiMapData()
if not QuestieCompat then return end
if not EbonholdUiMapData or not EbonholdUiMapData.uiMapData then return end
QuestieCompat.UiMapData = QuestieCompat.UiMapData or {}
for uiMapId, data in pairs(EbonholdUiMapData.uiMapData) do
if QuestieCompat.UiMapData[uiMapId] == nil then
QuestieCompat.UiMapData[uiMapId] = data
end
end
end
if QuestieCompat and QuestieCompat.LoadUiMapData then
hooksecurefunc(QuestieCompat, "LoadUiMapData", ApplyUiMapData)
end
ApplyUiMapData()
@@ -0,0 +1,17 @@
---@class EbonholdZoneTables
EbonholdZoneTables = EbonholdZoneTables or {}
EbonholdZoneTables.uiMapIdToAreaId = EbonholdZoneTables.uiMapIdToAreaId or {
-- Example mappings:
-- [1238] = 12, -- Custom Northshire Valley Map -> Elwynn Forest AreaID
}
-- Register zone sort names for custom zones so they can be used in quest zoneOrSort field
EbonholdZoneTables.zoneSort = EbonholdZoneTables.zoneSort or {
-- [1238] = "Northshire Valley",
}
-- Optional: custom dungeon registration (merged into ZoneDB by EbonholdLoader).
EbonholdZoneTables.dungeons = EbonholdZoneTables.dungeons or {}
EbonholdZoneTables.dungeonLocations = EbonholdZoneTables.dungeonLocations or {}
EbonholdZoneTables.dungeonParentZones = EbonholdZoneTables.dungeonParentZones or {}
+206
View File
@@ -0,0 +1,206 @@
---@class MeetingStones
local MeetingStones = QuestieLoader:CreateModule("MeetingStones")
local _MeetingStones = {}
---@type l10n
local l10n = QuestieLoader:ImportModule("l10n")
---@param objectId number
---@return string?, string?
function MeetingStones:GetLocalizedDungeonNameAndLevelRangeByObjectId(objectId)
local tableEntry = _MeetingStones.levelRanges[objectId]
if (not tableEntry) then
return nil, nil
end
return l10n(tableEntry.name), tableEntry.range
end
_MeetingStones.levelRanges = {
[178824] = {
name = "Razorfen Downs",
range = "(33-41)"
},
[178825] = {
name = "Razorfen Kraul",
range = "(23-31)"
},
[178826] = {
name = "Dire Maul",
range = "(54-61)"
},
[178827] = {
name = "Maraudon",
range = "(40-52)"
},
[178828] = {
name = "Blackfathom Deeps",
range = "(20-28)"
},
[178829] = {
name = "Zul'Farrak",
range = "(42-50)"
},
[178831] = {
name = "Stratholme",
range = "(56-61)"
},
[178832] = {
name = "Scholomance",
range = "(56-61)"
},
[178833] = {
name = "Uldaman",
range = "(36-44)"
},
[178834] = {
name = "The Deadmines",
range = "(16-24)"
},
[178844] = {
name = "Scarlet Monastery",
range = "(28-44)"
},
[178845] = {
name = "Shadowfang Keep",
range = "(17-25)"
},
[178884] = {
name = "Wailing Caverns",
range = "(16-24)"
},
[179554] = {
name = "The Temple of Atal'Hakkar",
range = "(45-54)"
},
[179555] = {
name = "Gnomeregan",
range = "(24-32)"
},
[179585] = {
name = "Blackrock Mountain",
range = "(48-61)"
},
[179595] = {
name = "The Stockade",
range = "(21-29)"
},
[179596] = {
name = "Ragefire Chasm",
range = "(14-20)"
},
[182558] = {
name = "Coilfang Reservoir",
range = "(61-70)"
},
[182559] = {
name = "Tempest Keep",
range = "(69-70)"
},
[182560] = {
name = "Caverns of Time",
range = "(66-70)"
},
[184455] = {
name = "Hellfire Citadel",
range = "(58-70)"
},
[184456] = {
name = "Magtheridon's Lair",
range = "(70)"
},
[184458] = {
name = "Auchindoun",
range = "(63-70)"
},
[184462] = {
name = "Gruul's Lair",
range = "(70)"
},
[184463] = {
name = "Karazhan",
range = "(70)"
},
[185321] = {
name = "Onyxia's Lair",
range = "(60-70)"
},
[185322] = {
name = "Ahn'Qiraj",
range = "(60-70)"
},
[185433] = {
name = "Zul'Gurub",
range = "(60-70)"
},
[185550] = {
name = "The Black Temple",
range = "(70)"
},
[186251] = {
name = "Zul'Aman",
range = "(70)"
},
[188171] = {
name = "Magisters' Terrace",
range = "(70)"
},
[188172] = {
name = "Sunwell Plateau",
range = "(70)"
},
[188488] = {
name = "Utgarde Keep",
range = "(68-80)"
},
[191227] = {
name = "Azjol-Nerub",
range = "(70-80)"
},
[191529] = {
name = "Drak'Tharon Keep",
range = "(72-80)"
},
[192017] = {
name = "Ulduar",
range = "(75-80)"
},
[192399] = {
name = "Utgarde Pinnacle",
range = "(78-80)"
},
[192557] = {
name = "Gundrak",
range = "(74-80)"
},
[192622] = {
name = "Wyrmrest Temple",
range = "(80)"
},
[193166] = {
name = "Naxxramas",
range = "(77-80)"
},
[193602] = {
name = "The Nexus",
range = "(70-80)"
},
[195013] = {
name = "Vault of Archavon",
range = "(80)"
},
[195498] = {
name = "Argent Tournament",
range = "(80)"
},
[195695] = {
name = "Icecrown Citadel",
range = "(80)"
},
[202184] = {
name = "The Frozen Halls",
range = "(80)"
},
}
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
+110
View File
@@ -0,0 +1,110 @@
--Contains functions to fetch the Quest Experiance for quests.
---@class QuestXP
local QuestXP = QuestieLoader:CreateModule("QuestXP")
---@type table<QuestId,table<Level,XP>> -- { questId={level, xp}, ..... }
QuestXP.db = {}
--- COMPATIBILITY ---
local UnitBuff = QuestieCompat.UnitBuff
local GetMaxPlayerLevel = QuestieCompat.GetMaxPlayerLevel
local GetQuestLogRewardMoney = QuestieCompat.GetQuestLogRewardMoney
local floor = floor
local UnitLevel = UnitLevel
local globalXPMultiplier = 1
local isDiscovererDelightActive = false
function QuestXP.Init()
if (Questie.IsWotlk or Questie.IsSoD) and globalXPMultiplier == 1 then
for i = 1, 40 do
local _, _, _, _, _, _, _, _, _, buffSpellId = UnitBuff("player", i)
if buffSpellId == 377749 then
-- Joyous Journeys is active - 50% bonus XP
globalXPMultiplier = 1.5
break
end
if buffSpellId == 436412 then
-- Discoverer's Delight is active - 100% bonus XP
globalXPMultiplier = 2
isDiscovererDelightActive = true
break
end
end
end
end
---@param xp XP
---@param qLevel Level
---@param ignorePlayerLevel boolean
---@return XP experience
local function getAdjustedXP(xp, qLevel, ignorePlayerLevel)
local charLevel = UnitLevel("player")
if charLevel == GetMaxPlayerLevel() and (not ignorePlayerLevel) then
return 0
end
--? These calculations are fetched from cmangos
local xpMultiplier = 2 * (qLevel - charLevel) + 20
if (xpMultiplier < 1) then
xpMultiplier = 1
elseif (xpMultiplier > 10) then
xpMultiplier = 10
end
xp = xp * xpMultiplier / 10
--? I am unsure if the first xp <= 100 is actually correct... because some 85 xp quests should actually give 90
if (xp <= 100) then
xp = 5 * floor((xp + 2) / 5)
elseif (xp <= 500) then
xp = 10 * floor((xp + 5) / 10)
elseif (xp <= 1000) then
xp = 25 * floor((xp + 12) / 25)
else
xp = 50 * floor((xp + 25) / 50)
end
return floor(xp * globalXPMultiplier)
end
---Get the adjusted XP for a quest.
---@param questId QuestId
---@param ignorePlayerLevel boolean
---@return XP experience
function QuestXP:GetQuestLogRewardXP(questId, ignorePlayerLevel)
if QuestXP.db[questId] then
local level = QuestXP.db[questId][1]
local xp = QuestXP.db[questId][2]
--? We have -1 as a level for quests that are event quests and so on for TBC and WOTLK.
if level > 0 and xp > 0 then
return getAdjustedXP(xp, level, ignorePlayerLevel)
end
end
-- Return 0 if questId or xp data is not found for some reason
return 0
end
local exclusions = {
[78612] = true,
[78872] = true,
[79101] = true,
[79102] = true,
[79103] = true,
[80307] = true,
[80308] = true,
[80309] = true,
}
function QuestXP.GetQuestRewardMoney(questId)
local modifier = 1
if isDiscovererDelightActive and (not exclusions[questId]) then
modifier = 3
end
return floor(GetQuestLogRewardMoney(questId) * modifier)
end
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
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
+384
View File
@@ -0,0 +1,384 @@
---@class ZoneDB
local ZoneDB = QuestieLoader:CreateModule("ZoneDB")
---@type ZoneDBPrivate
ZoneDB.private = ZoneDB.private or {}
local _ZoneDB = ZoneDB.private
-------------------------
--Import modules.
-------------------------
---@type QuestiePlayer
local QuestiePlayer = QuestieLoader:ImportModule("QuestiePlayer")
---@type QuestieDB
local QuestieDB = QuestieLoader:ImportModule("QuestieDB")
---@type QuestieCorrections
local QuestieCorrections = QuestieLoader:ImportModule("QuestieCorrections")
---@type QuestieEvent
local QuestieEvent = QuestieLoader:ImportModule("QuestieEvent")
---@type QuestieProfessions
local QuestieProfessions = QuestieLoader:ImportModule("QuestieProfessions")
---@type l10n
local l10n = QuestieLoader:ImportModule("l10n")
--- COMPATIBILITY ---
local C_Map = QuestieCompat.C_Map
ZoneDB.private.areaIdToUiMapId = ZoneDB.private.areaIdToUiMapId or {}
ZoneDB.private.uiMapIdToAreaId = ZoneDB.private.uiMapIdToAreaId or {}
ZoneDB.private.dungeons = ZoneDB.private.dungeons or {}
ZoneDB.private.dungeonLocations = ZoneDB.private.dungeonLocations or {}
ZoneDB.private.dungeonParentZones = ZoneDB.private.dungeonParentZones or {}
ZoneDB.private.subZoneToParentZone = ZoneDB.private.subZoneToParentZone or {}
local areaIdToUiMapId = ZoneDB.private.areaIdToUiMapId
local uiMapIdToAreaId = ZoneDB.private.uiMapIdToAreaId
local dungeons = ZoneDB.private.dungeons
local dungeonLocations = ZoneDB.private.dungeonLocations
local dungeonParentZones = ZoneDB.private.dungeonParentZones
local subZoneToParentZone = ZoneDB.private.subZoneToParentZone
---Zone ids enum
ZoneDB.zoneIDs = ZoneDB.private.zoneIDs or {}
-- Overrides for UiMapId to AreaId
local UiMapIdOverrides = {
[246] = 3713
}
local parentZoneToSubZone = {} -- Generated
local zoneMap = {} -- Generated
function ZoneDB:Initialize()
_ZoneDB:GenerateParentZoneToStartingZoneTable()
-- Run tests if debug enabled
if Questie.db.profile.debugEnabled then
_ZoneDB:RunTests()
end
end
function _ZoneDB:GenerateParentZoneToStartingZoneTable()
for startingZone, parentZone in pairs(subZoneToParentZone) do
parentZoneToSubZone[parentZone] = startingZone
end
end
function ZoneDB:GetDungeons()
return dungeons
end
---@param areaId AreaId
---@return UiMapId
function ZoneDB:GetUiMapIdByAreaId(areaId)
return areaIdToUiMapId[areaId]
end
--- Use with care, kind of slow.
---@param uiMapId UiMapId
---@return AreaId
function ZoneDB:GetAreaIdByUiMapId(uiMapId)
--? Some areas have multiple areaIds, so we return the correct AreaId
if UiMapIdOverrides[uiMapId] then
return UiMapIdOverrides[uiMapId]
end
local foundId
-- First we look for a direct match
for AreaUiMapId, lAreaId in pairs(uiMapIdToAreaId) do
local areaId = lAreaId
if (AreaUiMapId == uiMapId and not foundId) then
--Questie:Debug(Questie.DEBUG_DEVELOP, "[ZoneDB:GetAreaIdByUiMapId] : ", " AreaUiMapId: ", AreaUiMapId, " == uiMapId: ", uiMapId, " and areaId = ", areaId, " foundID is nil")
foundId = areaId
elseif AreaUiMapId == uiMapId and foundId ~= AreaUiMapId then
-- If we find a second match that does not match the first
-- Print an error, but we still return the first one we found.
-- Only print if debug is enabled.
if Questie.db.profile.debugEnabled then
Questie:Error("[ZoneDB:GetAreaIdByUiMapId] : ", "UiMapId", uiMapId, "has multiple AreaIds:", foundId, areaId)
end
end
end
if foundId then -- debug --TechnoHunter adding debug print to report found AreaId
--if Questie.db.profile.debugEnabled then
--local uiMapInfo = C_Map.GetMapInfo(uiMapId)
--local foundName = C_Map.GetAreaInfo(foundId)
--Questie:Debug(Questie.DEBUG_DEVELOP, "[ZoneDB:GetAreaIdByUiMapId] : ", "Found AreaId", foundName, ":", foundId, " for UiMapId", uiMapInfo.name, ":", uiMapId, "direct match")
--end
return foundId
else
-- As a last resort we try to match AreaId and UiMapId by name
-- uses the original table in zoneTables as the area id's are
-- all in that and we dont care if the uiMapId is there or not
for areaId in pairs(areaIdToUiMapId) do
local mapInfo = C_Map.GetMapInfo(uiMapId)
local areaName = C_Map.GetAreaInfo(areaId)
if mapInfo and mapInfo.name == areaName then
Questie:Debug(Questie.DEBUG_DEVELOP, "[ZoneDB:GetAreaIdByUiMapId] : ", "Found AreaId", areaName, ":", areaId, "for UiMapId", mapInfo.name, ":", uiMapId, "by name")
return areaId
end
end
error("No AreaId found for UiMapId: " .. uiMapId .. ":" .. C_Map.GetMapInfo(uiMapId).name)
end
end
---@param areaId AreaId
function ZoneDB:GetDungeonLocation(areaId)
return dungeonLocations[areaId]
end
---@param areaId AreaId
function ZoneDB.IsDungeonZone(areaId)
return dungeonLocations[areaId] ~= nil
end
---@param areaId AreaId
function ZoneDB:GetAlternativeZoneId(areaId)
local entry = dungeons[areaId]
if entry then
return entry[2]
end
entry = parentZoneToSubZone[areaId]
if entry then
return entry
end
return nil
end
---@param areaId AreaId
function ZoneDB:GetParentZoneId(areaId)
return dungeonParentZones[areaId] or subZoneToParentZone[areaId]
end
-- We keep localized variables outside of the function only used by GetZonesWithQuests
do
-- This is for yielding
local yieldAmount = 200
local extraYield = yieldAmount / 4
--Keep yield here as there is potentially a case where this wants to be run outside of a coroutine
---@param yield boolean?
---@return table
function ZoneDB:GetZonesWithQuests(yield)
local count = 0
local function ProcessQuestId(questId)
if (not QuestieCorrections.hiddenQuests[questId]) then
if QuestiePlayer.HasRequiredRace(QuestieDB.QueryQuestSingle(questId, "requiredRaces"))
and QuestiePlayer.HasRequiredClass(QuestieDB.QueryQuestSingle(questId, "requiredClasses")) then
local zoneOrSort = QuestieDB.QueryQuestSingle(questId, "zoneOrSort")
local requiredSkill = QuestieDB.QueryQuestSingle(questId, "requiredSkill")
if type(requiredSkill) == "table"
and requiredSkill[1]
and requiredSkill[1] ~= QuestieProfessions.professionKeys.RIDING then
local sortId = QuestieProfessions:GetSortIdByProfessionId(requiredSkill[1])
zoneOrSort = sortId or QuestieDB.sortKeys.SPECIAL
if (not zoneMap[zoneOrSort]) then zoneMap[zoneOrSort] = {} end
zoneMap[zoneOrSort][questId] = true
elseif type(zoneOrSort) == "number" and zoneOrSort > 0 then
local parentZoneId = ZoneDB:GetParentZoneId(zoneOrSort)
if parentZoneId then
if (not zoneMap[parentZoneId]) then zoneMap[parentZoneId] = {} end
zoneMap[parentZoneId][questId] = true
else
if (not zoneMap[zoneOrSort]) then zoneMap[zoneOrSort] = {} end
zoneMap[zoneOrSort][questId] = true
end
elseif type(zoneOrSort) == "number" and _ZoneDB:IsSpecialQuest(zoneOrSort) then
if (not zoneMap[zoneOrSort]) then zoneMap[zoneOrSort] = {} end
zoneMap[zoneOrSort][questId] = true
else
local startedBy = QuestieDB.QueryQuestSingle(questId, "startedBy")
if startedBy then
zoneMap = _ZoneDB:GetZonesWithQuestsFromNPCs(zoneMap, startedBy[1], questId)
zoneMap = _ZoneDB:GetZonesWithQuestsFromObjects(zoneMap, startedBy[2], questId)
end
local finishedBy = QuestieDB.QueryQuestSingle(questId, "finishedBy")
if finishedBy then
zoneMap = _ZoneDB:GetZonesWithQuestsFromNPCs(zoneMap, finishedBy[1], questId)
zoneMap = _ZoneDB:GetZonesWithQuestsFromObjects(zoneMap, finishedBy[2], questId)
end
end
end
end
if yield then
count = count + 1
if count >= yieldAmount then
count = 0
coroutine.yield()
end
end
end
-- 1) Base Questie quests (QuestPointers values must be numbers; ignore anything weird)
for questId, ptr in pairs(QuestieDB.QuestPointers) do
if type(ptr) == "number" then
ProcessQuestId(questId)
end
end
-- 2) Ascension custom quests (from overrides list)
if type(QuestieDB.ascensionQuestIds) == "table" then
for questId in pairs(QuestieDB.ascensionQuestIds) do
ProcessQuestId(questId)
end
end
if yield then coroutine.yield() end
zoneMap = _ZoneDB:SplitSeasonalQuests()
return zoneMap
end
end
---@param zoneOrSort ZoneOrSort
function _ZoneDB:IsSpecialQuest(zoneOrSort)
for _, v in pairs(QuestieDB.sortKeys) do
if zoneOrSort == v then
return true
end
end
return false
end
---@param zones table
---@param npcIds table|nil
---@param questId number
---@return table
function _ZoneDB:GetZonesWithQuestsFromNPCs(zones, npcIds, questId)
if (not npcIds) then
return zones
end
for npcId in pairs(npcIds) do
local spawns = QuestieDB.QueryNPCSingle(npcId, "spawns")
if spawns then
for zone in pairs(spawns) do
if not zones[zone] then zones[zone] = {} end
zones[zone][questId] = true
end
end
end
return zones
end
---@param zones table
---@param objectIds table|nil
---@param questId number
---@return table
function _ZoneDB:GetZonesWithQuestsFromObjects(zones, objectIds, questId)
if (not objectIds) then
return zones
end
for objectId in pairs(objectIds) do
local spawns = QuestieDB.QueryObjectSingle(objectId, "spawns")
if spawns then
for zone in pairs(spawns) do
if not zones[zone] then zones[zone] = {} end
zones[zone][questId] = true
end
end
end
return zones
end
---@return table
function _ZoneDB:SplitSeasonalQuests()
if (not zoneMap[QuestieDB.sortKeys.SPECIAL]) or (not zoneMap[QuestieDB.sortKeys.SEASONAL]) then
return zoneMap
end
local questsToSplit = zoneMap[QuestieDB.sortKeys.SEASONAL]
-- Merging SEASONAL and SPECIAL quests to be split into real groups
for k, v in pairs(zoneMap[QuestieDB.sortKeys.SPECIAL]) do questsToSplit[k] = v end
local updatedZoneMap = zoneMap
updatedZoneMap[-400] = {}
updatedZoneMap[-401] = {}
updatedZoneMap[-402] = {}
updatedZoneMap[-403] = {}
updatedZoneMap[-404] = {}
for questId, _ in pairs(questsToSplit) do
local eventName = QuestieEvent:GetEventNameFor(questId)
if eventName == "Love is in the Air" then
updatedZoneMap[-400][questId] = true
elseif eventName == "Children's Week" then
updatedZoneMap[-401][questId] = true
elseif eventName == "Harvest Festival" then
updatedZoneMap[-402][questId] = true
elseif eventName == "Hallow's End" then
updatedZoneMap[-403][questId] = true
elseif eventName == "Winter Veil" then
updatedZoneMap[-404][questId] = true
end
end
updatedZoneMap[QuestieDB.sortKeys.SEASONAL] = nil
updatedZoneMap[QuestieDB.sortKeys.SPECIAL] = nil
return updatedZoneMap
end
function ZoneDB:GetRelevantZones()
local zones = {}
for category, data in pairs(l10n.zoneCategoryLookup) do
zones[category] = {}
for id, zoneName in pairs(data) do
local zoneQuests = zoneMap[id]
if (not zoneQuests) then
zones[category][id] = nil
else
zones[category][id] = l10n(zoneName)
end
end
end
return zones
end
----- Tests -----
function _ZoneDB:RunTests()
-- Fetch all UiMapIds (WOTLK/TBC, ERA)
local maps = C_Map.GetMapChildrenInfo(946, nil, true) or C_Map.GetMapChildrenInfo(947, nil, true)
Questie:Debug(Questie.DEBUG_CRITICAL, "[" .. Questie:Colorize("ZoneDBTests", "yellow") .. "] Testing ZoneDB")
local buggedMaps = {
[306] = true, -- ScholomanceOLD
[307] = true, -- ScholomanceOLD
[308] = true, -- ScholomanceOLD
[309] = true, -- ScholomanceOLD
}
for _, map in pairs(maps) do
--- We don't care about World, Continent or Cosmic
if map.mapType ~= Enum.UIMapType.World and map.mapType ~= Enum.UIMapType.Continent and map.mapType ~= Enum.UIMapType.Cosmic then
local success, result = pcall(ZoneDB.GetAreaIdByUiMapId, ZoneDB, map.mapID)
if not success and not buggedMaps[map.mapID] then
Questie:Error("[ZoneDBTests] ZoneDB.GetAreaIdByUiMapId fails for " .. map.name .. " (" .. map.mapID .. "). Result: " .. result)
end
end
end
Questie:Debug(Questie.DEBUG_CRITICAL, "[" .. Questie:Colorize("ZoneDBTests", "yellow") .. "] Testing ZoneDB done")
end
return ZoneDB
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+124
View File
@@ -0,0 +1,124 @@
---@type QuestieDB
local QuestieDB = QuestieLoader:ImportModule("QuestieDB");
QuestieDB.itemKeys = {
['name'] = 1, -- string
['npcDrops'] = 2, -- table or nil, NPC IDs
['objectDrops'] = 3, -- table or nil, object IDs
['itemDrops'] = 4, -- table or nil, item IDs
['startQuest'] = 5, -- int or nil, ID of the quest started by this item
['questRewards'] = 6, -- table or nil, quest IDs
['flags'] = 7, -- int or nil, see: https://github.com/cmangos/issues/wiki/Item_template#flags
['foodType'] = 8, -- int or nil, see https://github.com/cmangos/issues/wiki/Item_template#foodtype
['itemLevel'] = 9, -- int, the level of this item
['requiredLevel'] = 10, -- int, the level required to equip/use this item
['ammoType'] = 11, -- int,
['class'] = 12, -- int,
['subClass'] = 13, -- int,
['vendors'] = 14, -- table or nil, NPC IDs
['relatedQuests'] = 15, -- table or nil, IDs of quests that are related to this item
['teachesSpell'] = 16, -- int, spellID taught by this item upon use
}
QuestieDB.itemKeysReversed = {}
for key, id in pairs(QuestieDB.itemKeys) do
QuestieDB.itemKeysReversed[id] = key
end
-- item class/subClass combinations
--class subClass
-- 0 0 Consumable
-- 1 0 Container, Bag
-- 1 1 Container, Soul bag
-- 1 2 Container, Herb bag
-- 1 3 Container, Enchanting bag
-- 1 4 Container, Engineering bag
-- 2 0 Weapon, Axe 1H
-- 2 1 Weapon, Axe 2H
-- 2 2 Weapon, Bow
-- 2 3 Weapon, Gun
-- 2 4 Weapon, Mace 1H
-- 2 5 Weapon, Mace 2H
-- 2 6 Weapon, Polearm
-- 2 7 Weapon, Sword 1H
-- 2 8 Weapon, Sword 2H
-- 2 10 Weapon, Staff
-- 2 13 Weapon, Fist weapon
-- 2 14 Weapon, Miscellaneous
-- 2 15 Weapon, Dagger
-- 2 16 Weapon, Thrown
-- 2 17 Weapon, Spear
-- 2 18 Weapon, Crossbow
-- 2 19 Weapon, Wand
-- 2 20 Weapon, Fishing pole
-- 4 0 Armor, Miscellaneous
-- 4 1 Armor, Cloth
-- 4 2 Armor, Leather
-- 4 3 Armor, Mail
-- 4 4 Armor, Plate
-- 4 6 Armor, Shield
-- 4 7 Armor, Libram
-- 4 8 Armor, Idol
-- 4 9 Armor, Totem
-- 5 0 Reagent
-- 6 2 Projectile, Arrow
-- 6 3 Projectile, Bullet
-- 7 0 Trade goods, Trade goods
-- 7 1 Trade goods, Parts
-- 7 2 Trade goods, Explosives
-- 7 3 Trade goods, Devices
-- 9 0 Recipe, Book
-- 9 1 Recipe, Leatherworking
-- 9 2 Recipe, Tailoring
-- 9 3 Recipe, Engineering
-- 9 4 Recipe, Blacksmithing
-- 9 5 Recipe, Cooking
-- 9 6 Recipe, Alchemy
-- 9 7 Recipe, First aid
-- 9 8 Recipe, Enchanting
-- 9 9 Recipe, Fishing
-- 11 2 Quiver
-- 11 3 Ammo pouch
-- 12 0 Quest
-- 13 0 Key
-- 13 1 Lockpick
-- 15 0 Miscellaneous, Junk
QuestieDB.itemClasses = {
QUEST = 12,
}
QuestieDB.itemCompilerTypes = {
["foodType"] = "u8",
["itemLevel"] = "u16",
["flags"] = "u32",
["startQuest"] = "u24",
["requiredLevel"] = "u8",
["ammoType"] = "u8",
["class"] = "u8",
["subClass"] = "u8",
["npcDrops"] = "u16u24array",
["objectDrops"] = "u8u24array",
["itemDrops"] = "u8u24array",
["vendors"] = "u8u24array",
["relatedQuests"] = "u8u24array",
["questRewards"] = "u8u24array",
["name"] = "u8string",
["teachesSpell"] = "u24",
}
QuestieDB.itemCompilerOrder = { -- order easily skipable data first for efficiency
--static size
"flags", "startQuest", "itemLevel", "requiredLevel", "foodType", "ammoType", "class", "subClass", "teachesSpell",
-- variable size
"name", "relatedQuests", "questRewards", "npcDrops", "objectDrops", "vendors", "itemDrops"
}
-- temporary, until we remove the old db funcitons
QuestieDB._itemAdapterQueryOrder = {}
for key, id in pairs(QuestieDB.itemKeys) do
QuestieDB._itemAdapterQueryOrder[id] = key
end
+97
View File
@@ -0,0 +1,97 @@
---@class QuestieDB
local QuestieDB = QuestieLoader:ImportModule("QuestieDB");
QuestieDB.npcKeys = {
['name'] = 1, -- string
['minLevelHealth'] = 2, -- int
['maxLevelHealth'] = 3, -- int
['minLevel'] = 4, -- int
['maxLevel'] = 5, -- int
['rank'] = 6, -- int, see https://github.com/cmangos/issues/wiki/creature_template#rank
['spawns'] = 7, -- table {[zoneID(int)] = {coordPair(floatVector2D),...},...}
['waypoints'] = 8, -- table {[zoneID(int)] = {coordPair(floatVector2D),...},...}
['zoneID'] = 9, -- guess as to where this NPC is most common
['questStarts'] = 10, -- table {questID(int),...}
['questEnds'] = 11, -- table {questID(int),...}
['factionID'] = 12, -- int, see https://github.com/cmangos/issues/wiki/FactionTemplate.dbc
['friendlyToFaction'] = 13, -- string, Contains "A" and/or "H" depending on NPC being friendly towards those factions. nil if hostile to both.
['subName'] = 14, -- string, The title or function of the NPC, e.g. "Weapon Vendor"
['npcFlags'] = 15, -- int, Bitmask containing various flags about the NPCs function (Vendor, Trainer, Flight Master, etc.).
-- For flag values see https://github.com/cmangos/mangos-classic/blob/172c005b0a69e342e908f4589b24a6f18246c95e/src/game/Entities/Unit.h#L536
}
QuestieDB.npcKeysReversed = {}
for key, id in pairs(QuestieDB.npcKeys) do
QuestieDB.npcKeysReversed[id] = key
end
QuestieDB.npcCompilerTypes = {
['name'] = "u8string",
['minLevelHealth'] = "u32",
['maxLevelHealth'] = "u32",
['minLevel'] = "u8",
['maxLevel'] = "u8",
['rank'] = "u8",
['spawns'] = "spawnlist",
['waypoints'] = "waypointlist",
['zoneID'] = "u16",
['questStarts'] = "u8u24array",
['questEnds'] = "u8u24array",
['factionID'] = "u16",
['friendlyToFaction'] = "faction",
['subName'] = "u8string",
['npcFlags'] = "u32",
}
QuestieDB.npcCompilerOrder = { -- order easily skipable data first for efficiency
--static size
'minLevelHealth', 'maxLevelHealth', 'minLevel', 'maxLevel', 'rank', 'zoneID', 'factionID', 'friendlyToFaction', 'npcFlags',
-- variable size
'name', 'spawns', 'waypoints', 'questStarts', 'questEnds', 'subName'
}
---@enum NpcFlags
QuestieDB.npcFlags = (Questie.IsTBC or Questie.IsWotlk) and {
NONE = 0,
GOSSIP = 1,
QUEST_GIVER = 2,
TRAINER = 16,
VENDOR = 128,
REPAIR = 4096,
FLIGHT_MASTER = 8192,
SPIRIT_HEALER = 16384,
SPIRIT_GUIDE = 32768,
INNKEEPER = 65536,
BANKER = 131072,
PETITIONER = 262144,
TABARD_DESIGNER = 524288,
BATTLEMASTER = 1048576,
AUCTIONEER = 2097152,
STABLEMASTER = 4194304,
} or {
NONE = 0,
GOSSIP = 1,
QUEST_GIVER = 2,
VENDOR = 4,
FLIGHT_MASTER = 8,
TRAINER = 16,
SPIRIT_HEALER = 32,
SPIRIT_GUIDE = 64,
INNKEEPER = 128,
BANKER = 256,
PETITIONER = 512,
TABARD_DESIGNER = 1024,
BATTLEMASTER = 2048,
AUCTIONEER = 4096,
STABLEMASTER = 8192,
REPAIR = 16384
}
-- temporary, until we remove the old db funcitons
QuestieDB._npcAdapterQueryOrder = {}
for key, id in pairs(QuestieDB.npcKeys) do
QuestieDB._npcAdapterQueryOrder[id] = key
end
+40
View File
@@ -0,0 +1,40 @@
---@type QuestieDB
local QuestieDB = QuestieLoader:ImportModule("QuestieDB");
QuestieDB.objectKeys = {
['name'] = 1, -- string
['questStarts'] = 2, -- table {questID(int),...}
['questEnds'] = 3, -- table {questID(int),...}
['spawns'] = 4, -- table {[zoneID(int)] = {coordPair(floatVector2D),...},...}
['zoneID'] = 5, -- guess as to where this object is most common
['factionID'] = 6, -- faction restriction mask (same as spawndb factionid)
}
QuestieDB.objectKeysReversed = {}
for key, id in pairs(QuestieDB.objectKeys) do
QuestieDB.objectKeysReversed[id] = key
end
QuestieDB.objectCompilerTypes = {
['name'] = "u8string",
['spawns'] = "spawnlist",
['zoneID'] = "u16",
['questStarts'] = "u8u24array",
['questEnds'] = "u8u24array",
['factionID'] = "u16"
}
QuestieDB.objectCompilerOrder = { -- order easily skipable data first for efficiency
--static size
'zoneID', 'factionID',
-- variable size
'name', 'spawns', 'questStarts', 'questEnds'
}
-- temporary, until we remove the old db funcitons
QuestieDB._objectAdapterQueryOrder = {}
for key, id in pairs(QuestieDB.objectKeys) do
QuestieDB._objectAdapterQueryOrder[id] = key
end
+128
View File
@@ -0,0 +1,128 @@
---@class QuestieDB
local QuestieDB = QuestieLoader:ImportModule("QuestieDB");
QuestieDB.questKeys = {
['name'] = 1, -- string
['startedBy'] = 2, -- table
--['creatureStart'] = 1, -- table {creature(int),...}
--['objectStart'] = 2, -- table {object(int),...}
--['itemStart'] = 3, -- table {item(int),...}
['finishedBy'] = 3, -- table
--['creatureEnd'] = 1, -- table {creature(int),...}
--['objectEnd'] = 2, -- table {object(int),...}
['requiredLevel'] = 4, -- int
['questLevel'] = 5, -- int
['requiredRaces'] = 6, -- bitmask
['requiredClasses'] = 7, -- bitmask
['objectivesText'] = 8, -- table: {string,...}, Description of the quest. Auto-complete if nil.
['triggerEnd'] = 9, -- table: {text, {[zoneID] = {coordPair,...},...}}
['objectives'] = 10, -- table
--['creatureObjective'] = 1, -- table {{creature(int), text(string)},...}, If text is nil the default "<Name> slain x/y" is used
--['objectObjective'] = 2, -- table {{object(int), text(string)},...}
--['itemObjective'] = 3, -- table {{item(int), text(string)},...}
--['reputationObjective'] = 4, -- table: {faction(int), value(int)}
--['killCreditObjective'] = 5, -- table: {{creature(int), ...}, baseCreatureID, baseCreatureText}
--['spellObjective'] = 6, -- table: {{spell(int), text(string)},...}
['sourceItemId'] = 11, -- int, item provided by quest starter
['preQuestGroup'] = 12, -- table: {quest(int)}
['preQuestSingle'] = 13, -- table: {quest(int)}
['childQuests'] = 14, -- table: {quest(int)}
['inGroupWith'] = 15, -- table: {quest(int)}
['exclusiveTo'] = 16, -- table: {quest(int)}
['zoneOrSort'] = 17, -- int, >0: AreaTable.dbc ID; <0: QuestSort.dbc ID
['requiredSkill'] = 18, -- table: {skill(int), value(int)}
['requiredMinRep'] = 19, -- table: {faction(int), value(int)}
['requiredMaxRep'] = 20, -- table: {faction(int), value(int)}
['requiredSourceItems'] = 21, -- table: {item(int), ...} Items that are not an objective but still needed for the quest.
['nextQuestInChain'] = 22, -- int: if this quest is active/finished, the current quest is not available anymore
['questFlags'] = 23, -- bitmask: see https://github.com/cmangos/issues/wiki/Quest_template#questflags
['specialFlags'] = 24, -- bitmask: 1 = Repeatable, 2 = Needs event, 4 = Monthly reset (req. 1). See https://github.com/cmangos/issues/wiki/Quest_template#specialflags
['parentQuest'] = 25, -- int, the ID of the parent quest that needs to be active for the current one to be available. See also 'childQuests' (field 14)
['reputationReward'] = 26, -- table: {{FACTION,VALUE}, ...}, A list of reputation reward for factions
['extraObjectives'] = 27, -- table: {{spawnlist, iconFile, text, objectiveIndex (optional), {{dbReferenceType, id}, ...} (optional)},...}, a list of hidden special objectives for a quest. Similar to requiredSourceItems
['requiredSpell'] = 28, -- int: quest is only available if character has this spellID
['requiredSpecialization'] = 29, -- int: quest is only available if character meets the spec requirements. Use QuestieProfessions.specializationKeys for having a spec, or QuestieProfessions.professionKeys to indicate having the profession with no spec. See QuestieProfessions.lua for more info.
['requiredMaxLevel'] = 30, -- int: quest is only available up to a certain level
}
QuestieDB.questKeysReversed = {}
for key, id in pairs(QuestieDB.questKeys) do
QuestieDB.questKeysReversed[id] = key
end
QuestieDB.questCompilerTypes = {
['name'] = "u8string", -- string
['startedBy'] = "questgivers", -- table
['finishedBy'] = "questgivers", -- table
['requiredLevel'] = "u8", -- int
['questLevel'] = "s16", -- int
['requiredRaces'] = "u16", -- bitmask
['requiredClasses'] = "u16", -- bitmask
['objectivesText'] = "u8u16stringarray", -- table: {string,...}, Description of the quest. Auto-complete if nil.
['triggerEnd'] = "trigger", -- table: {text, {[zoneID] = {coordPair,...},...}}
['objectives'] = "objectives", -- table
['sourceItemId'] = "u24", -- int, item provided by quest starter
['preQuestGroup'] = "u8u24array", -- table: {quest(int)}
['preQuestSingle'] = "u8u24array", -- table: {quest(int)}
['childQuests'] = "u8u24array", -- table: {quest(int)}
['inGroupWith'] = "u8u24array", -- table: {quest(int)}
['exclusiveTo'] = "u8u24array", -- table: {quest(int)}
['zoneOrSort'] = "s16", -- int, >0: AreaTable.dbc ID; <0: QuestSort.dbc ID
['requiredSkill'] = "u12pair", -- table: {skill(int), value(int)}
['requiredMinRep'] = "s24pair", -- table: {faction(int), value(int)}
['requiredMaxRep'] = "s24pair", -- table: {faction(int), value(int)}
['requiredSourceItems'] = "u8u24array", -- table: {item(int), ...} Items that are not an objective but still needed for the quest.
['nextQuestInChain'] = "u24", -- int: if this quest is active/finished, the current quest is not available anymore
['questFlags'] = "u24", -- bitmask: see https://github.com/cmangos/issues/wiki/Quest_template#questflags
['specialFlags'] = "u16", -- bitmask: 1 = Repeatable, 2 = Needs event, 4 = Monthly reset (req. 1). See https://github.com/cmangos/issues/wiki/Quest_template#specialflags
['parentQuest'] = "u24", -- int, the ID of the parent quest that needs to be active for the current one to be available. See also 'childQuests' (field 14)
['reputationReward'] = "u8s24pairs",
['extraObjectives'] = "extraobjectives",
['requiredSpell'] = "s24",
['requiredSpecialization'] = "u24",
['requiredMaxLevel'] = "u8",
}
QuestieDB.questCompilerOrder = { -- order easily skipable data first for efficiency
--static size
'requiredLevel', 'questLevel', 'requiredRaces', 'requiredClasses', 'sourceItemId', 'zoneOrSort', 'requiredSkill',
'requiredMinRep', 'requiredMaxRep', 'nextQuestInChain', 'questFlags', 'specialFlags', 'parentQuest', 'requiredSpell',
'requiredSpecialization', 'requiredMaxLevel',
-- variable size
'name', 'preQuestGroup', 'preQuestSingle', 'childQuests', 'inGroupWith', 'exclusiveTo', 'requiredSourceItems',
'objectivesText', 'triggerEnd', 'startedBy', 'finishedBy', 'objectives', 'reputationReward', 'extraObjectives'
}
QuestieDB.questFlags = {
NONE = 0,
STAY_ALIVE = 1,
PARTY_ACCEPT = 2,
EXPLORATION = 4,
SHARABLE = 8,
UNUSED1 = 16,
EPIC = 32,
RAID = 64,
UNUSED2 = 128,
UNKNOWN = 256,
HIDDEN_REWARDS = 512,
AUTO_REWARDED = 1024,
DAILY = 4096,
WEEKLY = 32768,
}
QuestieDB.factionIDs = {
UNDERCITY = 68,
DARNASSUS = 69,
DARKMOON_FAIRE = 909,
EXODAR = 930,
THE_KALUAK = 1073,
KIRIN_TOR = 1090,
}
-- temporary, until we remove the old db funcitons
QuestieDB._questAdapterQueryOrder = {}
for key, id in pairs(QuestieDB.questKeys) do
QuestieDB._questAdapterQueryOrder[id] = key
end