diff --git a/CHANGELOG.md b/CHANGELOG.md index 7fa065b..6de5f39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## v9.7.5 + +### Fixes +- **[Quest]** Fixed an issue where re-accepted quests (e.g., repeatable custom quests) would not show objective pins/icons on the map. + +### New Quests +- **[Database]** Added **Storm Peak Orders** (ID 50150) - *The Storm Peaks* + - Objective: Complete any 6 quests in The Storm Peaks. +- **[Database]** Added **Wild Basin** (ID 50094) - *Sholazar Basin* + - Objective: Kill 75 Beasts. Includes 29 Beast NPC types with full spawn coordinates. + - NPCs: King Krush, Shardhorn Rhino, Aotona, Pitch, Serfex the Reaver, Dreadsaber, Hardknuckle Matriarch, Shango, Venomtip, Bushwhacker, Hardknuckle Charger, Ravenous Mangal Crocolisk, Farunn, Zeptek the Destroyer, Goretalon Matriarch, Sapphire Hive Wasp, Emperor Cobra, Sapphire Hive Drone, Shattertusk Bull, Siltslither Eel, Spirit of Atha, Stranded Thresher, Mangal Crocolisk, Spirit of Koosu, Longneck Grazer, Goretalon Roc, Sapphire Hive Queen, Spirit of Ha-Khalan, Bittertide Hydra + ## v9.7.4 ### Fixes @@ -52,6 +64,14 @@ - Objective: Kill 30 Elementals. Includes 12 Elemental NPC types. - **[New]** Added **Redridge Trophy** (ID 50160) and **Zangarmarsh Trophy** (ID 50192). +### New Ascension Quests +- **Westfall**: Agria's Medicine, Seven Years of Bad Luck, Worm-Eaten Apple, Goldshire's Generosity, Bookworm, Knowledge Corrupts, The Ruins of Northshire, Accursed Sisterhood, Words That Shepherd Madness, Oracular Idol, A Betrayal Within, The Maid I Left Behind, The Saddest Among Us, The Threat Swept Downstream, Stay a While, Defias Disruption. +- **Dun Morogh**: A Small Mistake, We Found Her!, The Scout's Favor, Old Mirsinth, Smoke on the Wind, A Promising Path, A Fitting Disguise, His Radiant Majesty, Deciphering Radiation, Soaking the Masses, Sever the Right Hand, A Growing Business, Thunderbrew's Hop, Stay a While, Live-Fire Demo, Bots on Strike, A Brother's Betrayal, The True Story, Timber for the Coldhewn, Icehide the Unbroken. +- **Teldrassil**: The Carrion Road, The Sister Who Never Returned, Finding the Good Meat, Transsubstantiating the Flesh, Communion Banquet, A Trail of Petals, Restless entrails, A Dark Warning, The Aid of Theren-Dion, No Place for Scavengers, Termites in Teldrassil, Stay a While, Elydna's Heirloom. +- **Durotar**: To Find a Cure, A Dangerous Sample, Knowledge of the Centaurs, Those Who Fell, The Way is Shut, The Sinister Triad, So That He May Hear Again, A Sinister Ritual, Innocents for Sinners, Unease Makes Tongues Wag, A Door Left Ajar, Esgramor's Master, Shinies!, Echoes of Hirsutta, Auction the Past, Stay a While, Durotar's Dire Drought, The Queen's Decree, Avianna's Rose, The Last Piece, Reversion. +- **Tirisfal Glades**: Rude Awakening, Marla's Last Wish, Monsters With Noble Intentions, Restless Family Members, An Unspeakable Secret, A Noble Heritage, The True Heir of the Cains, The Friends We Make Along the Way, I'm Home, Apothecary Flemer, The Nature of Freedom, Spotless Standing, Stay a While, More Than the Sum of its Parts, Scarlet Correspondence, A Humble Duty, The Balnirs' Rest, Brewing Disarray, This Is Justice. +- **Mulgore**: Death and Tribute, Death and Exile, Death and Dishonor, Death and Justice, Death by Laughter, To Whom I Devote, Fighting Over Carrion, Smoke on the Horizon, Amphora of Sacred Water, Stay a While, Exile of Embers, The Smoke that Remembers, The Circle’s Rite. + ### Fixes - **[Tracker]** **Combat Update Fix**: Tracker now updates objectives immediately during combat without causing Lua errors or taint. - **[Tracker]** **Bag Update Fix**: Quest progress now updates immediately when looting items (fixes delay with loot bots). diff --git a/Database/Ascension/AscensionLoader.lua b/Database/Ascension/AscensionLoader.lua index 5d9db7a..8d32488 100644 --- a/Database/Ascension/AscensionLoader.lua +++ b/Database/Ascension/AscensionLoader.lua @@ -44,6 +44,25 @@ end -- Apply Ascension custom uiMapId->areaId mappings into ZoneDB (used by map/Journey) function AscensionLoader:ApplyZoneTables() if _zonesApplied then return end + + -- Skip if not on Ascension server (check if we should even be here) + if _G.IsAscensionServer == nil and (not Questie or not Questie.db or not Questie.db.profile or not Questie.db.profile.ascensionMode) then + -- Check if there's actual Ascension data - if quest IDs >= 100000, it's likely Ascension + local hasAscensionQuests = false + if AscensionDB and AscensionDB.questData then + for questId, _ in pairs(AscensionDB.questData or {}) do + if type(questId) == "number" and questId >= 100000 then + hasAscensionQuests = true + break + end + end + end + if not hasAscensionQuests then + _zonesApplied = true -- Mark as done to prevent rechecking + return + end + end + if not AscensionZoneTables or not AscensionZoneTables.uiMapIdToAreaId then return end local ZoneDB = QuestieLoader:ImportModule("ZoneDB") @@ -104,6 +123,51 @@ end -- Inject Ascension tables into QuestieDB *Overrides* so QueryQuestSingle/QueryNPCSingle can see them function AscensionLoader:InjectOverrides() if _overridesInjected then return end + + -- Ascension data should only load on Ascension servers + -- Check if this is an Ascension server by looking for a global or profile setting + local isAscension = false + + -- Method 1: Check for Ascension-specific global (servers may set this) + if _G.IsAscensionServer then + isAscension = true + end + + -- Method 2: Check profile setting + if Questie and Questie.db and Questie.db.profile and Questie.db.profile.ascensionMode then + isAscension = true + end + + -- Method 3: Check if there's actually Ascension quest data loaded + -- (this is a fallback - if AscensionDB has real data, use it) + if not isAscension and AscensionDB and AscensionDB.questData then + local questDataType = type(AscensionDB.questData) + -- If it's a table with entries, it's likely real Ascension data + if questDataType == "table" then + local hasData = false + for _ in pairs(AscensionDB.questData) do + hasData = true + break + end + if hasData then + -- Only use Ascension data if quest ID ranges suggest it's not standard WoW + -- Standard WoW quest IDs are typically < 100000 + for questId, _ in pairs(AscensionDB.questData) do + if type(questId) == "number" and questId >= 100000 then + isAscension = true + break + end + end + end + end + end + + if not isAscension then + -- Not an Ascension server, skip loading Ascension data + _overridesInjected = true -- Mark as done to prevent rechecking + return + end + _overridesInjected = true -- Apply zone tables FIRST, before any ZoneDB functions use the local variables diff --git a/Database/Ascension/Bronzebeard/AscensionQuestDB.lua b/Database/Ascension/Bronzebeard/AscensionQuestDB.lua index b3478e0..41da41c 100644 --- a/Database/Ascension/Bronzebeard/AscensionQuestDB.lua +++ b/Database/Ascension/Bronzebeard/AscensionQuestDB.lua @@ -39,7 +39,7 @@ AscensionDB.questData = AscensionDB.questData or { [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,"Abbess’s 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}, + [100074]={[1]="A Betrayal Within",[2]={nil,{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}, diff --git a/Database/Corrections/wotlkQuestFixes.lua b/Database/Corrections/wotlkQuestFixes.lua index 50229ae..28e2c2c 100644 --- a/Database/Corrections/wotlkQuestFixes.lua +++ b/Database/Corrections/wotlkQuestFixes.lua @@ -880,9 +880,6 @@ function QuestieWotlkQuestFixes:Load() [11418] = { [questKeys.extraObjectives] = {{nil, Questie.ICON_TYPE_EVENT, l10n("Use Feathered Charm on Steelfeather"), 0, {{"monster", 24514},}}}, }, - [11420] = { - [questKeys.extraObjectives] = {{{[zoneIDs.HOWLING_FJORD]={{56.6,49.1}}}, Questie.ICON_TYPE_EVENT, l10n("Entrance to Utgarde Catacombs"),}}, - }, [11421] = { [questKeys.extraObjectives] = {{nil, Questie.ICON_TYPE_OBJECT, l10n("Commandeer Crykul Harpoon Gun"),0,{{"object",190512}}}}, }, diff --git a/Database/Ebonhold/Ebonhold/EbonholdNpcDB.lua b/Database/Ebonhold/Ebonhold/EbonholdNpcDB.lua index 265f326..e379e64 100644 --- a/Database/Ebonhold/Ebonhold/EbonholdNpcDB.lua +++ b/Database/Ebonhold/Ebonhold/EbonholdNpcDB.lua @@ -2,6 +2,8 @@ local EbonholdDB = QuestieLoader:CreateModule("EbonholdDB") EbonholdDB.npcData = EbonholdDB.npcData or { + -- Quest 11420/11426/11427/11436: The Path to Payback - Update Guard Captain Zorek coordinates + [23728] = {'Guard Captain Zorek',29820,29820,73,73,1,{[495]={{60.1,62.4}}},nil,495,nil,nil,1892,"A","",3}, -- 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}, @@ -84,6 +86,65 @@ EbonholdDB.npcData = EbonholdDB.npcData or { [29460] = {'Frigid Proto-Drake',12600,12600,80,80,0,{[67] = {{53.6,66},{54.4,65.4},{54.8,65.2},{55.2,67},{55.2,67.6},{55.6,65.8},{56,64.2},{56,64.6},{56.8,64.4},{57,64.6},{57,65.6},{57.2,63.2},{57.8,63.8},{58.2,61.6},{58.4,63},{58.6,62.6},{58.8,62.2},{59.6,57.6},{59.6,58.6},{59.8,61.6},{60.2,60.8},{60.6,60.4},{60.8,60.8},{63.4,62.4},{64,61.8},{64.6,60.6}}},nil,67,nil,nil,16,nil,"",0}, [30275] = {'Wild Wyrm',12600,12600,80,80,0,{[67] = {{51.2,64.4},{53.2,66.6},{54,64.4},{54.2,66.6},{54.6,66.6},{55,65.8},{55.4,65.2},{56,64.6},{56,66.6},{56.2,66.4},{56.4,64.2},{56.6,63},{56.6,65.2},{56.6,65.6},{56.6,66.6},{57,64.4},{57.4,59.8},{58,63},{58.2,64},{58.4,57.8},{58.4,61.6},{59,57.6},{59,59.6},{59,61.8},{59.6,61.8},{59.8,61.4},{60,58},{60,60.4},{60.4,59.4},{60.6,58.4},{61,61},{61.4,58.6}}},nil,67,nil,nil,16,nil,"",0}, [30461] = {'Veranus',12600,12600,80,80,0,{[67] = {{38.8,65.4},{38.8,65.6}}},nil,67,nil,nil,16,nil,"",0}, + -- Quest 50094 Wild Basin: Sholazar Basin (zone 3711) beasts + -- All hostile beasts scraped from Sholazar Basin filter page + [32485] = {'King Krush',12600,12600,75,75,0,{[3711] = {{26.0,73.0},{28.0,45.0},{30.0,38.0},{32.0,36.0},{37.0,28.0},{47.0,42.0},{50.0,43.0},{51.0,82.0},{52.0,85.0},{55.0,83.0},{57.0,80.0},{59.0,83.0},{64.0,79.0},{65.0,82.0},{67.0,78.0}}},nil,3711,nil,nil,39,nil,"",0}, + [28009] = {'Shardhorn Rhino',12600,12600,75,76,0,{[3711] = {{22.0,51.0},{24.0,47.0},{26.0,46.0},{28.0,41.0},{30.0,39.0},{32.0,37.0},{35.0,43.0},{37.0,43.0},{40.0,43.0},{42.0,47.0},{44.0,50.0},{47.0,54.0},{49.0,59.0},{52.0,45.0}}},nil,3711,nil,nil,43,nil,"",0}, + [32481] = {'Aotona',12600,12600,75,75,0,{[3711] = {{40.0,59.0},{42.0,67.0},{43.0,52.0},{45.0,68.0},{47.0,55.0},{51.0,72.0},{54.0,51.0},{57.0,65.0}}},nil,3711,nil,nil,2,nil,"",0}, + [28097] = {'Pitch',12600,12600,76,76,0,{[3711] = {{50.0,76.0},{50.0,77.0},{51.0,76.0},{51.0,77.0}}},nil,3711,nil,nil,1,nil,"",0}, + [28083] = {'Serfex the Reaver',12600,12600,78,78,0,{[3711] = {{50.0,85.0},{51.0,86.0},{52.0,86.0},{58.0,83.0},{59.0,85.0}}},nil,3711,nil,nil,6,nil,"",0}, + [28001] = {'Dreadsaber',12600,12600,75,76,0,{[3711] = {{22.0,50.0},{24.0,47.0},{26.0,43.0},{28.0,41.0},{30.0,37.0},{32.0,37.0},{35.0,41.0},{37.0,41.0},{40.0,42.0},{42.0,50.0},{45.0,53.0},{47.0,48.0},{50.0,50.0}}},nil,3711,nil,nil,1,nil,"",0}, + [28213] = {'Hardknuckle Matriarch',12600,12600,77,77,0,{[3711] = {{65.0,75.0},{66.0,73.0},{66.0,74.0},{67.0,72.0},{67.0,73.0},{68.0,72.0}}},nil,3711,nil,nil,2,nil,"",0}, + [28297] = {'Shango',12600,12600,76,76,0,{[3711] = {{31.0,37.0},{32.0,35.0},{33.0,32.0},{34.0,31.0},{35.0,31.0}}},nil,3711,nil,nil,1,nil,"",0}, + [28358] = {'Venomtip',12600,12600,77,77,0,{[3711] = {{53.0,50.0},{56.0,50.0},{57.0,51.0},{58.0,52.0},{59.0,53.0},{60.0,55.0}}},nil,3711,nil,nil,20,nil,"",0}, + [28317] = {'Bushwhacker',12600,12600,76,76,0,{[3711] = {{46.0,63.0},{46.0,64.0},{47.0,63.0},{47.0,64.0}}},nil,3711,nil,nil,8,nil,"",0}, + [28096] = {'Hardknuckle Charger',12600,12600,76,77,0,{[3711] = {{55.0,69.0},{57.0,66.0},{58.0,64.0},{60.0,67.0},{62.0,67.0},{64.0,70.0},{66.0,70.0},{68.0,70.0},{70.0,69.0},{72.0,70.0},{74.0,69.0}}},nil,3711,nil,nil,2,nil,"",0}, + [28325] = {'Ravenous Mangal Crocolisk',12600,12600,76,80,0,{[3711] = {{54.0,64.0},{54.0,65.0},{55.0,63.0},{56.0,65.0},{57.0,62.0}}},nil,3711,nil,nil,6,nil,"",0}, + [28288] = {'Farunn',12600,12600,76,76,0,{[3711] = {{42.0,38.0},{46.0,41.0},{47.0,41.0},{48.0,43.0},{49.0,44.0}}},nil,3711,nil,nil,6,nil,"",0}, + [28399] = {'Zeptek the Destroyer',12600,12600,77,77,0,{[3711] = {{41.0,19.0},{41.0,20.0},{42.0,20.0}}},nil,3711,nil,nil,42,nil,"",0}, + [29044] = {'Goretalon Matriarch',12600,12600,78,78,0,{[3711] = {{57.0,23.0},{59.0,23.0},{60.0,22.0},{60.0,23.0}}},nil,3711,nil,nil,2,nil,"",0}, + [28086] = {'Sapphire Hive Wasp',12600,12600,76,77,0,{[3711] = {{43.0,78.0},{50.0,80.0},{51.0,83.0},{54.0,84.0},{56.0,80.0},{58.0,79.0},{60.0,75.0},{62.0,76.0}}},nil,3711,nil,nil,44,nil,"",0}, + [28011] = {'Emperor Cobra',12600,12600,75,76,0,{[3711] = {{36.0,58.0},{40.0,52.0},{42.0,51.0},{45.0,51.0},{47.0,58.0},{50.0,48.0},{52.0,48.0},{55.0,48.0},{57.0,52.0},{59.0,56.0}}},nil,3711,nil,nil,35,nil,"",0}, + [28085] = {'Sapphire Hive Drone',12600,12600,76,77,0,{[3711] = {{43.0,77.0},{48.0,79.0},{51.0,78.0},{54.0,75.0},{57.0,74.0},{60.0,70.0},{63.0,73.0},{65.0,76.0}}},nil,3711,nil,nil,44,nil,"",0}, + [28380] = {'Shattertusk Bull',12600,12600,76,77,0,{[3711] = {{35.0,31.0},{37.0,27.0},{40.0,29.0},{43.0,29.0},{49.0,43.0},{52.0,41.0},{54.0,30.0},{57.0,35.0},{60.0,33.0},{62.0,33.0}}},nil,3711,nil,nil,21,nil,"",0}, + [28847] = {'Siltslither Eel',12600,12600,1,77,0,{[3711] = {{47.0,62.0},{48.0,62.0},{48.0,64.0},{49.0,63.0}}},nil,3711,nil,nil,35,nil,"",0}, + [29033] = {'Spirit of Atha',12600,12600,79,80,0,{[3711] = {{35.0,41.0},{37.0,35.0},{38.0,36.0},{40.0,42.0},{42.0,39.0},{44.0,42.0}}},nil,3711,nil,nil,46,nil,"",0}, + [28010] = {'Stranded Thresher',12600,12600,75,76,0,{[3711] = {{46.0,62.0},{48.0,60.0},{50.0,62.0},{72.0,65.0},{73.0,64.0}}},nil,3711,nil,nil,35,nil,"",0}, + [28002] = {'Mangal Crocolisk',12600,12600,75,76,0,{[3711] = {{20.0,59.0},{22.0,58.0},{25.0,58.0},{30.0,59.0},{35.0,58.0},{40.0,53.0},{45.0,55.0},{50.0,50.0},{53.0,68.0}}},nil,3711,nil,nil,6,nil,"",0}, + [29034] = {'Spirit of Koosu',12600,12600,78,80,0,{[3711] = {{44.0,74.0},{48.0,68.0},{50.0,69.0},{56.0,85.0},{58.0,84.0},{60.0,85.0}}},nil,3711,nil,nil,46,nil,"",0}, + [28129] = {'Longneck Grazer',12600,12600,75,76,0,{[3711] = {{21.0,61.0},{24.0,62.0},{27.0,63.0},{30.0,64.0},{33.0,64.0},{36.0,80.0},{40.0,86.0},{44.0,86.0},{48.0,86.0}}},nil,3711,nil,nil,21,nil,"",0}, + [28004] = {'Goretalon Roc',12600,12600,75,76,0,{[3711] = {{54.0,23.0},{55.0,24.0},{56.0,23.0},{57.0,25.0},{58.0,26.0},{59.0,26.0},{60.0,27.0},{61.0,29.0}}},nil,3711,nil,nil,2,nil,"",0}, + [28087] = {'Sapphire Hive Queen',12600,12600,78,78,0,{[3711] = {{57.0,79.0},{57.0,80.0},{58.0,80.0}}},nil,3711,nil,nil,44,nil,"",0}, + [29018] = {'Spirit of Ha-Khalan',12600,12600,78,80,0,{[3711] = {{46.0,61.0},{48.0,60.0},{50.0,61.0},{51.0,63.0}}},nil,3711,nil,nil,46,nil,"",0}, + [28003] = {'Bittertide Hydra',12600,12600,75,76,0,{[3711] = {{32.0,38.0},{35.0,36.0},{38.0,37.0},{41.0,37.0},{43.0,40.0},{45.0,43.0},{48.0,43.0}}},nil,3711,nil,nil,38,nil,"",0}, + -- Requested WotLK Rare Spawns + [32422] = {'Grocklar',12600,12600,73,74,4,{[394] = {{9.6,39.0},{10.4,39.8},{10.6,40.6},{11.2,42.2},{11.2,70.6},{11.4,42.6},{11.4,54.0},{11.6,42.8},{12.0,57.0},{12.0,70.8},{12.2,44.4},{12.2,54.8},{12.4,49.8},{12.4,53.0},{12.4,54.4},{12.6,53.6},{12.8,45.6},{12.8,50.0},{12.8,70.8},{13.0,54.6},{13.0,70.4},{13.2,48.4},{13.2,49.0},{13.2,51.4},{13.6,48.2},{14.0,52.4},{14.0,54.8},{14.2,53.0},{14.2,53.6},{14.2,69.4},{14.4,70.2},{14.6,50.0},{14.6,50.6},{14.6,51.6},{15.4,69.8},{15.8,69.8},{16.6,70.2},{17.4,70.6},{17.8,69.2},{18.4,72.2},{18.6,68.8},{18.6,72.4},{19.8,72.2},{20.2,56.0},{21.0,60.8},{21.2,71.8},{21.4,57.2},{21.4,71.4},{21.6,57.6},{21.6,67.8},{21.8,56.8},{21.8,71.2},{22.0,72.0},{22.8,72.4},{23.0,57.4},{23.2,58.2},{23.8,56.2},{24.2,57.2},{24.4,54.8},{24.8,58.6},{24.8,61.6},{25.0,55.0},{25.0,56.4},{25.0,59.6},{25.2,56.8},{25.8,55.2}}},nil,394,nil,nil,35,nil,"",0}, + [32429] = {'Seething Hate',12600,12600,73,73,4,{[394] = {{26.6,44.2},{28.0,45.4},{28.2,45.6},{28.8,46.4},{34.2,49.2},{34.2,49.6},{34.4,48.4},{34.6,48.8},{34.8,48.2},{38.4,49.0},{38.6,49.6},{38.8,49.2},{39.6,51.0},{40.2,49.2},{40.2,49.6}}},nil,394,nil,nil,35,nil,"",0}, + [32438] = {'Syreian the Bonecarver',12600,12600,73,73,4,{[394] = {{61.2,35.0},{61.2,35.8},{61.6,35.6},{63.0,36.8},{64.2,35.8},{64.8,29.6},{65.2,31.2},{65.4,35.8},{65.6,29.6},{65.6,33.2},{65.6,35.8},{65.6,37.8},{65.8,34.2},{66.0,29.2},{66.2,40.8},{66.4,40.0},{66.6,41.4},{66.6,42.6},{66.8,36.8},{66.8,38.4},{66.8,41.6},{67.0,28.2},{67.6,27.0},{68.6,31.6},{68.8,30.4},{68.8,31.4},{69.0,32.8},{69.2,27.2},{69.4,28.8},{70.4,33.4},{70.4,33.8},{70.6,33.6},{71.4,35.0},{71.6,34.8},{72.4,36.6},{73.0,36.0},{73.4,37.6},{74.2,43.0},{74.4,35.8},{74.4,38.2},{74.6,39.0},{75.0,38.0},{75.0,41.6},{75.6,38.2},{75.8,41.0}}},nil,394,nil,nil,35,nil,"",0}, + [38453] = {'Arcturis',12600,12600,74,74,4,{[394] = {{30.4,55.0},{31.0,55.4},{31.0,55.8},{32.8,55.2}}},nil,394,nil,nil,35,nil,"",0}, + -- Quest 50203 Zul'Drak Trophy: Rare NPCs in Zul'Drak (zone 66) + [33776] = {'Gondria',12600,12600,77,77,4,{[66] = {{61.4,61.4},{61.4,62.4},{61.4,63},{62,63.2},{63,43.2},{63,43.6},{63.2,42.4},{63.6,42.8},{63.6,43.6},{66.8,77.8},{67.2,77.2},{67.6,79.2},{67.8,78.2},{68,77.4},{69.2,48},{69.6,48},{69.8,48.8},{77,70.4},{77.2,70.6},{77.6,70},{78.2,71.2}}},nil,66,nil,nil,35,nil,"",0}, + [32471] = {'Griegen',12600,12600,75,75,4,{[66] = {{13.2,56.2},{13.4,54.8},{14.4,56},{14.4,56.8},{14.6,55.4},{14.6,56.2},{17.2,71},{17.2,71.8},{18,70.8},{20.6,71.2},{21,78.8},{21.2,79.6},{21.6,70.2},{22.4,60.8},{22.8,61.2},{22.8,62},{24.4,62},{25,75.4},{25.2,77.2},{26.2,71},{26.4,53.8},{26.4,55.2},{26.4,70.2},{26.6,55.6},{26.6,56.6},{26.6,70.2},{26.6,71.2},{26.8,54.4},{27,54.8}}},nil,66,nil,nil,16,nil,"",0}, + [32475] = {'Terror Spinner',12600,12600,76,76,4,{[66] = {{52.4,31.6},{52.6,32.6},{53,32},{53.4,31.2},{60.6,37},{61.4,35.4},{61.4,36},{61.6,33.8},{61.6,35.8},{62.2,33.2},{70.8,28.8},{71.2,23},{71.2,24.2},{71.4,27.4},{71.6,23},{71.8,24},{71.8,25},{71.8,29.8},{72.4,27.6},{73.4,68.4},{73.6,66},{74.4,67.4},{74.8,66.4},{75.2,67},{76.4,42.8},{76.4,43.8},{76.6,68.8},{77.2,42.6},{81.4,34.2},{81.4,35},{81.6,34.6}}, [67] = {{72,75}}},nil,66,nil,nil,16,nil,"",0}, + [32447] = {'Zul\'drak Sentinel',12600,12600,76,76,4,{[66]={{21.2,87.2},{22.2,82.4},{22.2,83},{22.4,83.6},{22.8,83},{23,82.2},{23.6,82.4},{24.2,87},{24.4,83},{25.2,82.8},{25.6,83.4},{26.4,82.2},{27,82.6},{28,82.6},{28.4,82.2},{28.6,73.8},{28.8,72.4},{28.8,82.8},{29,75},{29,77.6},{29,81.2},{29,81.8},{29.2,75.8},{29.4,79.2},{29.4,79.8},{29.6,82.4},{39.6,67.4},{40,51.8},{40,59.8},{40.4,53},{40.4,54.4},{40.4,55},{40.4,56.2},{40.4,56.6},{40.4,58},{40.4,59.4},{40.4,61},{40.4,61.6},{40.4,62.6},{40.8,52.6},{41.4,55.4},{41.4,69.8},{41.8,56},{42.2,70},{42.8,71},{43.2,54.6},{43.2,71.8},{43.6,72.6},{44.2,54.4},{44.2,55.2},{44.4,73.8},{44.6,67.6},{45,67},{45,74.4},{45.2,59.4},{45.2,74.8},{45.6,59.2},{45.6,59.6},{45.8,75.8},{46,60.6},{46,61.6},{46,64.4},{46,66},{46,66.6},{46.4,65.2},{46.4,77.2},{46.6,77.2},{46.8,61},{46.8,64.4},{46.8,65.8},{46.8,78},{47.2,79},{47.4,63.2},{48,79.6},{48.4,79.4},{49,81.2},{50.6,83},{50.8,84}}},nil,66,nil,nil,16,nil,"",0}, + -- Quest 50153 Morogh Trophy: Rare NPCs in Dun Morogh (zone 1) + [1132] = {'Timber',12600,12600,10,10,4,{[1] = {{30.6,44.2},{31.8,38.0},{34.6,41.2},{37.2,40.2}}},nil,1,nil,nil,1,nil,"",0}, + [1130] = {'Bjarn',12600,12600,12,12,4,{[1] = {{50.8,59.4},{55.4,55.4},{59.6,60.6},{65.0,59.6}}},nil,1,nil,nil,1,nil,"",0}, + [8503] = {'Gibblewilt',12600,12600,10,10,4,{[1] = {{24.0,43.4},{25.0,44.6},{26.4,36.6},{28.6,35.6}}},nil,1,nil,nil,1,nil,"",0}, + [1260] = {'Great Father Arctikus',12600,12600,10,10,4,{[1] = {{21.0,51.0},{23.0,52.4},{25.4,49.4},{29.6,48.4}}},nil,1,nil,nil,1,nil,"",0}, + [1137] = {'Edan the Howler',12600,12600,10,10,4,{[1] = {{38.4,48.2},{40.8,45.4},{42.2,49.4},{43.6,49.6}}},nil,1,nil,nil,1,nil,"",0}, + [1119] = {'Hammerspine',12600,12600,12,12,4,{[1] = {{71.4,51.4},{71.6,50.2},{72.2,53.6},{73.0,51.8}}},nil,1,nil,nil,1,nil,"",0}, + -- Quest 50164 Tirisfal Trophy: Rare NPCs in Tirisfal Glades (zone 85) + [10357] = {'Ressan the Needler',12600,12600,11,11,4,{[85] = {{42,68.2},{42.2,69},{42.4,67.2},{42.6,68.8},{43,66.4},{43,67.8},{43.2,64.4},{43.4,67},{43.6,66.2},{43.6,67},{44,65},{44.2,68.2},{45,66.8},{45.4,64.4},{45.4,65.6},{45.8,62.6},{45.8,65.4},{45.8,66.8},{46.2,64.4},{46.4,65.8},{46.6,65.4},{46.6,66},{46.8,64.2},{48.4,65.6},{49.2,63.2},{49.2,65.2},{49.4,62.2},{49.4,64.4},{49.4,65.8},{49.4,66.6},{49.6,63.4},{49.6,64.6},{49.8,65.6},{49.8,66.6},{50.2,64.4},{51,66.2},{51.2,63.8},{51.4,62.2},{51.4,63.4},{51.4,65.2},{51.8,62.2},{51.8,66.2},{52.2,60},{52.2,63},{52.2,65},{52.4,61.2},{52.4,63.8},{52.6,62.2},{52.6,63.2},{52.6,63.8},{52.8,64.6},{53.4,67},{54.4,75.2},{54.8,67.4},{55.2,59.4},{55.2,59.8},{55.4,61},{55.4,61.8},{55.4,62.6},{55.6,59.4},{55.6,60},{55.6,61.8},{55.8,62.6},{56,61},{56.2,63.6},{56.6,60.2},{56.6,61.6},{56.8,61},{57,56.4},{57,59},{57.4,63},{58.2,62}}},nil,85,nil,nil,16,nil,"",0}, + [10359] = {'Sr\'iskulk',12600,12600,10,10,4,{[85] = {{79.6,47},{81.8,51.6},{82.2,54.2},{83,54.4},{83,55.8},{83.4,53.2},{83.4,54.8},{83.6,54.6},{83.8,53},{83.8,54.4},{83.8,56},{84,48.2},{84.2,50},{84.4,49.2},{84.4,50.6},{84.4,52.2},{84.6,50.2},{85,55.4},{85.2,48.2},{85.2,49.4},{85.2,50.8},{85.6,50.4},{88,50},{88.2,50.6},{88.4,51.8},{88.4,52.6},{88.4,53.8},{88.6,50.4},{88.8,48.6},{88.8,51},{88.8,53.6},{89,45.4},{89,52.6},{89.2,47.6},{89.2,51.6},{89.4,40.2},{89.4,41.4},{89.4,42},{89.4,46},{89.4,47.4},{89.6,41.2},{89.6,41.6},{89.6,43.4},{89.6,46},{89.6,47},{89.8,49.6},{90,53.6},{90.2,47.6},{90.6,44}}},nil,85,nil,nil,16,nil,"",0}, + [10356] = {'Bayne',12600,12600,10,10,4,{[85] = {{38,44.6},{39.2,41.2},{39.4,42},{39.4,42.6},{39.4,44},{40,40.4},{40,41.4},{40.2,43},{40.2,49.4},{40.2,53.4},{40.2,54.8},{40.4,42.4},{40.4,43.6},{40.6,42},{40.6,43},{40.8,41.4},{41,51},{41,54.6},{41.4,43.8},{41.4,52},{41.4,52.8},{41.4,53.8},{41.6,41.2},{41.6,53.6},{41.6,55},{41.8,42.4},{42,51.4},{42,52.6},{42.2,52.4},{42.6,53.8},{42.8,51.6},{42.8,55},{43,51.4},{43,52.6},{43.8,54.6},{44.2,52.8},{44.2,54},{44.8,50},{45,54},{45.2,51},{45.4,52},{45.4,52.8},{45.8,52.8},{46,51.4},{46.2,50},{46.2,51.6},{46.6,51.4},{46.6,52.4},{46.6,55},{46.6,56.2},{46.8,53.2},{46.8,54.4},{47,50.2},{47.6,51.8},{47.6,53.2},{48.4,49.2},{48.4,51.4},{49,50.8},{49,52.4},{49.4,50.2},{49.6,47.2},{49.8,49},{50,50.2},{50,50.8},{50.2,52.8},{50.4,52.4},{50.6,51},{51.2,50.4},{51.4,48.2},{51.4,48.8},{51.4,52.2},{52.6,53.4},{55.4,40.8},{55.6,39.4},{56.2,41.6},{56.4,40.4},{56.4,40.8},{56.6,41.6},{57,38.4},{57,39.8},{57.2,39.4},{57.2,41.2},{57.2,42.8},{57.6,41.2},{57.6,42},{58,39},{58.2,39.6},{58.6,39.8},{59,38.8},{59.2,47}}},nil,85,nil,nil,16,nil,"",0}, + [1936] = {'Farmer Solliden',12600,12600,10,10,4,{[85] = {{34.2,50.2},{34.4,51.4},{34.4,52.2},{34.6,51.4},{34.6,52.2},{34.8,52.6},{35,50.4},{35.6,52},{36.4,49.4},{36.4,50},{36.8,49.6},{36.8,50.8},{37,53},{37.2,48.4},{37.2,52},{37.4,49},{37.6,49},{37.8,52.8},{38,51.4},{38,51.8},{38,53.6},{38.2,50},{38.6,50.8},{38.6,52},{38.8,49.4},{39,52.6},{39.8,54.4},{40,51.6}}},nil,85,nil,nil,16,nil,"",0}, + [1531] = {'Lost Soul',12600,12600,10,10,4,{[85] = {{44.4,37.4},{44.4,37.6},{44.6,37.6},{44.8,37.2},{45,40.4},{45.8,43},{46,36.8},{46.4,40.4},{47,39.4},{47,40},{47.2,40.6},{47.4,35.4},{48,35},{48.4,36},{48.6,35.4},{48.6,36.2},{49,37.6},{49.4,37.4},{52.4,49},{53,45.2},{53.2,46.2},{53.2,46.6},{53.2,48.4},{53.2,48.6},{53.2,49.6},{53.6,45.4},{53.6,46.4},{53.6,46.6},{53.6,48.2},{53.6,49.2}}},nil,85,nil,nil,16,nil,"",0}, + [1911] = {'Deeb',12600,12600,13,13,4,{[85] = {{57.2,28.2},{57.4,29.2},{57.6,28.2},{57.6,29},{58,25},{58,26.4},{58.2,26.6},{58.6,27.6},{58.6,28.6},{58.8,27.2},{59.6,27},{59.6,28.6},{60,30},{61.4,29.8},{62,28.4},{62.2,29.6},{62.4,26.6},{62.4,29},{62.6,28.6},{62.8,29.6},{63.2,27.4},{63.2,27.6},{63.2,31},{63.6,28},{63.8,26.8},{63.8,29.4}}},nil,85,nil,nil,16,nil,"",0}, + [1910] = {'Muad',12600,12600,12,12,4,{[85] = {{33.4,42.8},{33.4,43.8},{33.6,43},{34,43.8},{34.2,41.6},{34.2,44.6},{34.4,41.2},{34.6,41},{34.6,42},{34.8,44.2},{34.8,44.8},{34.8,45.8},{35,39.8},{35.2,43.4},{35.8,46.4},{36.2,38},{36.2,42.4},{36.2,44.2},{36.2,44.6},{36.4,39.4},{36.4,40.2},{36.4,41.2},{36.4,42.8},{36.6,38},{36.6,42},{36.6,43.4},{36.6,43.6},{36.8,39},{36.8,40},{36.8,40.8},{36.8,44.6},{37.6,39.2},{37.6,40.4},{37.6,41.2},{37.6,41.6},{37.8,43.4}}},nil,85,nil,nil,16,nil,"",0}, + [10358] = {'Fellicent\'s Shade',12600,12600,11,11,4,{[85] = {{71.4,61.6},{73.4,60},{74.2,60.4},{74.2,63.2},{74.4,59.4},{74.4,60.8},{74.4,61.6},{74.6,63.8},{74.8,60.6},{75,59.4},{75,59.8},{75.2,58.4},{75.2,61.8},{75.4,63},{75.6,59.4},{75.8,58.4},{75.8,63.6},{76.2,59.6},{76.4,57.4},{76.4,61.4},{76.4,61.8},{76.4,62.6},{76.6,59.4},{76.6,61.8},{76.6,62.6},{76.8,60.2},{76.8,61.2},{77,64.2},{77.6,60.8},{77.6,61.6},{77.8,63.2},{78.2,65.4}}},nil,85,nil,nil,16,nil,"",0}, + [1533] = {'Tormented Spirit',12600,12600,10,10,4,{[85] = {{43,34.8},{43.4,31.2},{43.4,32.4},{43.4,32.6},{43.4,34.2},{43.8,31.4},{43.8,32},{44,32.6},{44,34.6},{44,36.2},{44.2,36.6},{44.4,28.6},{44.4,34.2},{44.6,29.6},{44.6,31.4},{44.6,31.6},{44.6,33.2},{44.8,34.4},{45,37.6},{45.2,36.6},{45.4,35.4},{45.4,36.4},{45.6,31.6},{45.6,33.8},{46,35.4},{46,36.6},{46,37.6},{46.2,29.4},{46.4,30},{46.4,30.8},{46.4,36.2},{46.6,30.4},{46.6,37},{46.8,35.4},{47,31.4},{47,32},{47,37.8},{47.4,32.8},{47.4,35.6},{47.6,31.4},{47.6,31.8},{47.6,32.6},{47.8,35.2},{47.8,36.6},{48,34.4},{48.2,35.8},{48.4,40.2},{48.6,31.8},{48.6,34.2},{48.6,34.8},{49,37},{49.6,39}}},nil,85,nil,nil,16,nil,"",0}, + } -- Backward compatibility diff --git a/Database/Ebonhold/Ebonhold/EbonholdQuestDB.lua b/Database/Ebonhold/Ebonhold/EbonholdQuestDB.lua index aa96f64..3fe6223 100644 --- a/Database/Ebonhold/Ebonhold/EbonholdQuestDB.lua +++ b/Database/Ebonhold/Ebonhold/EbonholdQuestDB.lua @@ -568,6 +568,263 @@ EbonholdDB.questData = EbonholdDB.questData or { "Complete 6 quests in Azuremyst Isle" }, }, + + -- Quest 50094: Wild Basin + -- Kill 75 beasts in Sholazar Basin + [50094] = { + [1] = "Wild Basin", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 68, -- Required level (Min level) + [5] = 73, -- Quest level + [17] = 3711, -- Zone (Sholazar Basin) + [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 Beasts in Sholazar Basin" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + { -- [5] killCreditObjective + { + -- All 29 beast NPCs in Sholazar Basin (hostile to both factions) + { 32485, 28009, 32481, 28097, 28083, 28001, 28213, 28297, 28358, 28317, 28096, 28325, 28288, 28399, 29044, 28086, 28011, 28085, 28380, 28847, 29033, 28010, 28002, 29034, 28129, 28004, 28087, 29018, 28003 }, + 28001, -- RootId: Dreadsaber (representative beast) + "Beasts slain" + } + } + }, + + [30] = 75, -- Kill count (75 beasts as per quest name) + }, + + -- Quest 50202: Grizzly Trophy + -- Kill 1 rare in Grizzly Hills + [50202] = { + [1] = "Grizzly Trophy", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 74, -- Quest level + [5] = 71, -- Min level + [17] = 394, -- Zone (Grizzly Hills) + [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 Grizzly Hills" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + { -- [5] killCreditObjective + { + -- 4 rare NPCs in Grizzly Hills + { 38453, 32429, 32422, 32438 }, -- Arcturis, Seething Hate, Grocklar, Syreian the Bonecarver + 38453, -- RootId: Arcturis (representative rare) + "Rare slain" + } + } + }, + + [30] = 1, -- Kill count (only 1 rare needed) + }, + + -- Quest 50203: Zul'Drak Trophy + -- Kill 1 rare in Zul'Drak + [50203] = { + [1] = "Zul'Drak Trophy", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 77, -- Quest level + [5] = 74, -- Min level + [17] = 66, -- Zone (Zul'Drak) + [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 Zul'Drak" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + { -- [5] killCreditObjective + { + -- 4 rare NPCs in Zul'Drak + { 33776, 32471, 32475, 32447 }, -- Gondria, Griegen, Terror Spinner, Zul'drak Sentinel + 33776, -- RootId: Gondria (representative rare) + "Rare slain" + } + } + }, + + [30] = 1, -- Kill count (only 1 rare needed) + }, + + -- Quest 50149: Basin Expeditions + -- Complete 6 quests in Sholazar Basin (Any Quest) + [50149] = { + [1] = "Basin Expeditions", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 76, -- Quest level + [5] = 74, -- Min level + [17] = 3711, -- Zone (Sholazar Basin) + [8] = { + "This quest requires completing any 6 quests in Sholazar Basin. 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.", + "Complete 6 quests in Sholazar Basin" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + nil -- [5] killCreditObjective + }, + [12] = { { 50149, "Complete 6 quests in Sholazar Basin" } }, -- Special objective + }, + + -- Quest 50099: Shadow of Teldrassil + -- Complete 6 quests in Teldrassil (Any Quest) + [50099] = { + [1] = "Shadow of Teldrassil", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 1, -- Min level + [5] = 60, -- Quest level + [17] = 141, -- Zone (Teldrassil) + [8] = { + "This quest requires completing any 6 quests in Teldrassil. The quest will automatically complete once the objective is met.", + "Complete 6 quests in Teldrassil" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + nil -- [5] killCreditObjective + }, + [12] = { { 50099, "Complete 6 quests in Teldrassil" } }, -- Special objective + }, + + -- Quest 50108: Trials of Durotar + -- Complete 6 quests in Durotar (Any Quest) + [50108] = { + [1] = "Trials of Durotar", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 1, -- Min level + [5] = 60, -- Quest level + [17] = 14, -- Zone (Durotar) + [8] = { + "This quest requires completing any 6 quests in Durotar. The quest will automatically complete once the objective is met.", + "Complete 6 quests in Durotar" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + nil -- [5] killCreditObjective + }, + [12] = { { 50108, "Complete 6 quests in Durotar" } }, -- Special objective + }, + + -- Quest 50111: Song of the Woods + -- Complete 6 quests in Eversong Woods (Any Quest) + [50111] = { + [1] = "Song of the Woods", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 1, -- Min level + [5] = 60, -- Quest level + [17] = 3430, -- Zone (Eversong Woods) + [8] = { + "This quest requires completing any 6 quests in Eversong Woods. The quest will automatically complete once the objective is met.", + "Complete 6 quests in Eversong Woods" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + nil -- [5] killCreditObjective + }, + [12] = { { 50111, "Complete 6 quests in Eversong Woods" } }, -- Special objective + }, + + -- Quest 50153: Morogh Trophy + -- Kill 1 rare in Dun Morogh + [50153] = { + [1] = "Morogh Trophy", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 10, -- Quest level + [5] = 1, -- Min level + [17] = 1, -- Zone (Dun Morogh) + [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 Dun Morogh" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + { -- [5] killCreditObjective + { + -- 6 rare NPCs in Dun Morogh + { 1132, 1130, 8503, 1260, 1137, 1119 }, -- Timber, Bjarn, Gibblewilt, Great Father Arctikus, Edan the Howler, Hammerspine + 1132, -- RootId: Timber (representative rare) + "Rare slain" + } + } + }, + + [30] = 1, -- Kill count (only 1 rare needed) + }, + + -- Quest 50164: Tirisfal Trophy + -- Kill 1 rare in Tirisfal Glades + [50164] = { + [1] = "Tirisfal Trophy", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 10, -- Quest level + [5] = 1, -- Min level + [17] = 85, -- Zone (Tirisfal Glades) + [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 Tirisfal Glades" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + { -- [5] killCreditObjective + { + -- 9 rare NPCs in Tirisfal Glades + { 10357, 10359, 10356, 1936, 1531, 1911, 1910, 10358, 1533 }, -- Ressan the Needler, Sri'skulk, Bayne, Farmer Solliden, Lost Soul, Deeb, Muad, Fellicent's Shade, Tormented Spirit + 10357, -- RootId: Ressan the Needler (representative rare) + "Rare slain" + } + } + }, + + [30] = 1, -- Kill count (only 1 rare needed) + }, + [50150] = { + [1] = "Storm Peak Orders", + [2] = { nil, { 600600 } }, + [4] = 80, + [5] = 77, + [17] = 67, + [8] = { + "Complete any 6 quests in The Storm Peaks.", + "Complete 6 Quests" + }, + [10] = { + nil, nil, nil, nil, nil + }, + }, + + + + + } -- Backward compatibility diff --git a/Database/Wotlk/wotlkNpcDB.lua b/Database/Wotlk/wotlkNpcDB.lua index dc114d0..e2fe9d8 100644 --- a/Database/Wotlk/wotlkNpcDB.lua +++ b/Database/Wotlk/wotlkNpcDB.lua @@ -17400,7 +17400,7 @@ QuestieDB.npcData = [[return { [23725] = {'Stone Giant',26946,26946,70,70,1,{[495]={{69.77,29.82},{68.18,30.54},{65.88,29.01},{70.41,23.92},{71.95,23.22}}},nil,495,nil,nil,634,nil,"",0}, [23726] = {'Stone Lord',1,1,1,1,1,nil,nil,0,nil,nil,35,"AH","",0}, [23727] = {'Invis Raptor Credit',40,40,1,1,0,{[15]={{41.5,11.78}}},nil,15,nil,nil,35,"AH","",0}, -[23728] = {'Guard Captain Zorek',29820,29820,73,73,1,{[495]={{60.12,62.43}}},{[495]={{{60.12,62.43},{60.12,62.43},{60.12,62.43}}}},495,{11420,11426,11427},{11420,11426,11436},1892,"A","",3}, +[23728] = {'Guard Captain Zorek',29820,29820,73,73,1,{[495]={{60.1,62.4}}},{[495]={{{60.1,62.4},{60.1,62.4},{60.1,62.4}}}},495,{11420,11426,11427},{11420,11426,11436},1892,"A","",3}, [23729] = {'Baron Ulrik von Stromhearth',25524,25524,75,75,1,{[495]={{58.77,62.76}}},nil,495,{12794},nil,2007,"AH","",3}, [23730] = {'Harold Lagras',9291,9291,71,71,0,{[495]={{62.8,58.54}}},{[495]={{{62.87,58.78},{62.91,58.89},{62.99,59.1},{63.03,59.41},{63.04,59.72},{63.05,60.03},{63.04,59.65},{63.02,59.38},{63.0,59.17},{62.98,59.07},{62.93,58.94},{62.87,58.77},{62.77,58.46}}}},495,{11443},{11443},1892,"A","",2}, [23731] = {'Innkeeper Hazel Lagras',5060,5060,67,67,0,{[495]={{58.39,62.45}}},nil,495,nil,nil,1892,"A","Innkeeper",66179}, diff --git a/Modules/Arrow/QuestieArrow.lua b/Modules/Arrow/QuestieArrow.lua index d3f6463..004dace 100644 --- a/Modules/Arrow/QuestieArrow.lua +++ b/Modules/Arrow/QuestieArrow.lua @@ -398,14 +398,6 @@ function QuestieArrow:UpdateNearestTargets() local usingAutoLogic = Questie.db.profile.autoTrackQuests or not hasTracked local playerZoneId = QuestiePlayer:GetCurrentZoneId() - -- Auto mode logic: If autoTrack is on OR NOTHING is tracked - local usingAutoLogic = Questie.db.profile.autoTrackQuests or not hasTracked - local playerZoneId = QuestiePlayer:GetCurrentZoneId() - - -- Auto mode logic: If autoTrack is on OR NOTHING is tracked - local usingAutoLogic = Questie.db.profile.autoTrackQuests or not hasTracked - local playerZoneId = QuestiePlayer:GetCurrentZoneId() - local function _CollectQuestTargets(quest) if not quest then return @@ -772,3 +764,31 @@ function QuestieArrow:Initialize() QuestieArrow:Refresh() end + +-- Debug function to show current arrow target coordinates +function QuestieArrow:PrintTargetCoords() + if not sortedTargets or not sortedTargets[1] then + print("Questie Arrow: No target currently set!") + return + end + local target = sortedTargets[1] + print("Questie Arrow Target:") + print(" Quest: " .. tostring(target.title)) + print(" Level: " .. tostring(target.questLevel)) + print(" Zone Coords: " .. string.format("%.1f, %.1f", target.x, target.y)) + print(" UI Map ID: " .. tostring(target.uiMapId)) + print(" Distance: " .. string.format("%.0f", target.distance)) +end + +-- Also expose sortedTargets for external access +function QuestieArrow:GetTargets() + return sortedTargets +end + +-- Hook into Refresh to show debug info when arrow updates +local _OriginalRefresh = QuestieArrow.Refresh +QuestieArrow.Refresh = function(self, ...) + _OriginalRefresh(self, ...) + -- You can uncomment the line below to see debug output every refresh: + -- QuestieArrow:PrintTargetCoords() +end diff --git a/Modules/Quest/QuestEventHandler.lua b/Modules/Quest/QuestEventHandler.lua index 0c0569e..40e9f1e 100644 --- a/Modules/Quest/QuestEventHandler.lua +++ b/Modules/Quest/QuestEventHandler.lua @@ -382,16 +382,50 @@ function _QuestEventHandler:MarkQuestAsAbandoned(questId) end if questEntry.state == QUEST_LOG_STATES.QUEST_REMOVED then - Questie:Debug(Questie.DEBUG_INFO, "Quest:", questId, "was abandoned") - questEntry.state = QUEST_LOG_STATES.QUEST_ABANDONED + -- Check if objectives were completed before the quest was removed. + -- This handles auto-complete quests that disappear from the log without firing QUEST_TURNED_IN properly. + -- If objectives were complete, treat it as a completion (not abandonment) so objective pins get hidden. + local objectivesWereComplete = false + local quest = QuestieDB.GetQuest(questId) + if quest then + local isComplete = QuestieDB.IsComplete(questId) + objectivesWereComplete = (isComplete == 1) - QuestLogCache.RemoveQuest(questId) - QuestieQuest:SetObjectivesDirty(questId) -- is this necessary? should whole quest.Objectives be cleared at some point of quest removal? + -- Check for Ebonhold auto-complete quests which might be removed before IsComplete returns 1 + local desc = quest.Description + if type(desc) == "table" then desc = desc[1] end - QuestieQuest:AbandonedQuest(questId) - QuestieJourney:AbandonQuest(questId) - QuestieAnnounce:AbandonedQuest(questId) - questLog[questId] = nil + if (not objectivesWereComplete) and desc and type(desc) == "string" then + if string.find(desc, "automatically rewarded") then + Questie:Debug(Questie.DEBUG_INFO, "Quest:", questId, "detected as auto-complete by description") + objectivesWereComplete = true + end + end + end + + if objectivesWereComplete then + -- Objectives were complete, so this was likely an auto-complete quest. + -- Mark as complete instead of abandoned so objective pins get hidden. + Questie:Debug(Questie.DEBUG_INFO, "Quest:", questId, "objectives were complete - treating as completed (auto-complete quest)") + questEntry.state = QUEST_LOG_STATES.QUEST_TURNED_IN + + QuestLogCache.RemoveQuest(questId) + QuestieQuest:CompleteQuest(questId) + QuestieJourney:CompleteQuest(questId) + QuestieAnnounce:CompletedQuest(questId) + questLog[questId] = nil + else + Questie:Debug(Questie.DEBUG_INFO, "Quest:", questId, "was abandoned") + questEntry.state = QUEST_LOG_STATES.QUEST_ABANDONED + + QuestLogCache.RemoveQuest(questId) + QuestieQuest:SetObjectivesDirty(questId) -- is this necessary? should whole quest.Objectives be cleared at some point of quest removal? + + QuestieQuest:AbandonedQuest(questId) + QuestieJourney:AbandonQuest(questId) + QuestieAnnounce:AbandonedQuest(questId) + questLog[questId] = nil + end end end diff --git a/Modules/Quest/QuestieQuest.lua b/Modules/Quest/QuestieQuest.lua index 9c22b3f..0fb7cf9 100644 --- a/Modules/Quest/QuestieQuest.lua +++ b/Modules/Quest/QuestieQuest.lua @@ -595,6 +595,17 @@ function QuestieQuest:AbandonedQuest(questId) AvailableQuests.CalculateAndDrawAll() + -- Delayed verification to ensure all objective icons are removed + -- This handles race conditions where QuestieQuest:UpdateQuest might redraw icons + -- just as we are abandoning the quest + C_Timer.After(0.5, function() + if QuestieMap.questIdFrames[questId] then + Questie:Debug(Questie.DEBUG_INFO, "[QuestieQuest:AbandonedQuest] Lingering frames detected for quest:", + questId, "- forcing cleanup") + QuestieMap:UnloadQuestFrames(questId) + end + end) + Questie:Debug(Questie.DEBUG_INFO, "[QuestieQuest] Abandoned Quest:", questId) end @@ -607,7 +618,7 @@ function QuestieQuest:UpdateQuest(questId) local sourceItemId = (quest and tonumber(quest.sourceItemId)) or 0 - if quest and (not Questie.db.char.complete[questId]) then + if quest and (not Questie.db.char.complete[questId] or QuestiePlayer.currentQuestlog[questId]) then QuestieQuest:PopulateQuestLogInfo(quest) if QuestieQuest:ShouldShowQuestNotes(questId) then diff --git a/Modules/Tracker/QuestieTracker.lua b/Modules/Tracker/QuestieTracker.lua index 62bdb78..b2e6a2d 100644 --- a/Modules/Tracker/QuestieTracker.lua +++ b/Modules/Tracker/QuestieTracker.lua @@ -2275,24 +2275,10 @@ function QuestieTracker.RemoveQuestWatch(index, isQuestie) end if questId then - -- Check if quest is complete - if so, don't untrack it so the finisher can still be shown - local quest = QuestieDB.GetQuest(questId) - local isComplete = quest and QuestieDB.IsComplete(questId) - - -- If quest is complete but has a finisher, keep it tracked so arrow can show turn-in location - if isComplete == 1 and quest and quest.Finisher then - Questie:Debug(Questie.DEBUG_DEVELOP, - "[QuestieTracker.RemoveQuestWatch] - Quest complete with finisher, keeping tracked:", questId) - -- Still update tracker but don't untrack - QuestieCombatQueue:Queue(function() - QuestieTracker:Update() - end) - return - end - QuestieTracker:UntrackQuestId(questId) Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieTracker.RemoveQuestWatch] - by Blizzard", questId) end + end else Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieTracker.RemoveQuestWatch] - by Questie") @@ -2301,11 +2287,10 @@ end function QuestieTracker:UntrackQuestId(questId) Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieTracker:UntrackQuestId] - ", questId) - if not Questie.db.profile.autoTrackQuests then - Questie.db.char.TrackedQuests[questId] = nil - else - Questie.db.char.AutoUntrackedQuests[questId] = true - end + -- Always remove from tracked quests when manually untracking + Questie.db.char.TrackedQuests[questId] = nil + -- Also remove from auto-untracked so it doesn't get re-tracked + Questie.db.char.AutoUntrackedQuests[questId] = nil if Questie.db.profile.hideUntrackedQuestsMapIcons then -- Hides objective icons for untracked quests. diff --git a/Questie-335.toc b/Questie-335.toc index 706d285..4a9ac7c 100644 --- a/Questie-335.toc +++ b/Questie-335.toc @@ -6,7 +6,7 @@ ## Notes-esES: Ayundante de misión ## Notes-ptBR: Ajudante de missão ## Notes-frFR: Assistant de quête -## Version: 9.7.4 +## Version: 9.7.5 ## RequiredDeps: ## OptionalDeps: Ace3, CallbackHandler-1.0, HereBeDragons, LibDataBroker-1.1, LibDBIcon-1.0, LibSharedMedia-3.0, LibStub, LibUIDropDownMenu ## SavedVariables: QuestieConfig diff --git a/README.md b/README.md index 485714e..b8a4174 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # Questie (3.3.5a) -![Version](https://img.shields.io/badge/version-v9.7.2-blue.svg?style=for-the-badge) +![Version](https://img.shields.io/badge/version-v9.7.5-blue.svg?style=for-the-badge) ![Downloads](https://img.shields.io/github/downloads/Xurkon/PE-Questie/total?style=for-the-badge&color=e67e22) [![Documentation](https://img.shields.io/badge/Documentation-View%20Docs-58a6ff?style=for-the-badge)](https://xurkon.github.io/PE-Questie/) [![Patreon](https://img.shields.io/badge/Patreon-F96854?style=for-the-badge&logo=patreon&logoColor=white)](https://www.patreon.com/Xurkon) diff --git a/docs/index.html b/docs/index.html index 36a67a2..93a0cd9 100644 --- a/docs/index.html +++ b/docs/index.html @@ -164,7 +164,7 @@

Questie (3.3.5a)

Developer documentation for Project Ascension & Project Ebonhold compatibility layers and core engine refinements.

- Version: v9.7.2 + Version: v9.7.5 Branch: feature/ebonhold-compat