diff --git a/CHANGELOG.md b/CHANGELOG.md index aff97b3..7fa065b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,22 @@ - **[Database]** Fixed "Unknown Zone" issue for custom quests by correcting Zone ID index usage (swapped `[6]` RequiredRaces for `[17]` ZoneID). - **[Database]** Corrected Dragonblight Zone ID in custom quest definitions. +### New Quests +- **[Database]** Added **Morogh Missions** (ID 50098) - *Dun Morogh* + - Objective: Complete any 6 quests in Dun Morogh. Auto-completes upon reaching the objective. +- **[Database]** Added **Azuremyst Aid** (ID 50100) - *Azuremyst Isle* + - Objective: Complete any 6 quests in Azuremyst Isle. Auto-completes upon reaching the objective. +- **[Database]** Added **Stormforged Scales** (ID 50066) - *The Storm Peaks* + - Objective: Kill 30 Dragonkin. Includes 8 Dragonkin NPC types with full spawn coordinates. +- **[Database]** Added **Peak Predators** (ID 50095) - *The Storm Peaks* + - Objective: Kill 75 Beasts. Includes 24 Beast NPC types with full spawn coordinates. +- **[Database]** Added **Peak Predators** (ID 50096) - *Icecrown* + - Objective: Kill 75 Beasts. Includes 12 Beast NPC types with full spawn coordinates. +- **[Database]** Added **Icecrown Advance** (ID 50151) - *Icecrown* + - Objective: Complete any 6 quests in Icecrown. Auto-completes upon reaching the objective. +- **[Database]** Added **Storm Peaks Trophy** (ID 50205) - *The Storm Peaks* + - Objective: Kill 1 Rare in The Storm Peaks. Includes 4 Rare NPC types (Skoll, Time-Lost Proto-Drake, Vyragosa, Dirkee) with full spawn coordinates. + ## v9.7.3 ### New Features diff --git a/Database/Corrections/tbcNPCFixes.lua b/Database/Corrections/tbcNPCFixes.lua index 1b770d8..c2ea6eb 100644 --- a/Database/Corrections/tbcNPCFixes.lua +++ b/Database/Corrections/tbcNPCFixes.lua @@ -417,6 +417,9 @@ function QuestieTBCNpcFixes:Load() [18120] = { [npcKeys.waypoints] = {}, }, + [18201] = { + [npcKeys.spawns] = { [zoneIDs.ZANGARMARSH] = { { 42.4, 62.4 }, { 42.4, 62.6 }, { 42.4, 63.8 }, { 42.6, 63.8 }, { 43.0, 61.4 }, { 43.0, 62.4 }, { 43.0, 62.6 }, { 43.6, 63.0 }, { 43.8, 61.6 }, { 44.0, 63.6 }, { 44.2, 61.0 }, { 44.6, 61.2 }, { 46.2, 60.4 }, { 46.2, 60.6 }, { 46.2, 61.6 }, { 46.8, 59.4 }, { 46.8, 60.2 }, { 46.8, 61.0 }, { 47.0, 61.6 }, { 48.2, 63.4 }, { 48.2, 63.6 }, { 48.4, 60.6 }, { 48.4, 61.8 }, { 48.4, 64.6 }, { 48.6, 63.2 }, { 48.6, 64.2 }, { 48.6, 64.8 }, { 49.0, 62.2 }, { 49.2, 60.4 }, { 49.4, 61.0 }, { 49.6, 60.4 }, { 49.6, 61.0 }, { 49.6, 62.0 } } }, + }, [18121] = { [npcKeys.waypoints] = {}, }, @@ -492,6 +495,9 @@ function QuestieTBCNpcFixes:Load() [19305] = { [npcKeys.spawns] = { [zoneIDs.HELLFIRE_PENINSULA] = { { 13.64, 39.12 } } }, }, + [19349] = { + [npcKeys.spawns] = { [zoneIDs.ZANGARMARSH] = { { 81.4, 64.2 }, { 81.6, 64.2 }, { 82.4, 64.8 }, { 82.8, 65.2 }, { 83.0, 65.6 } } }, + }, [19412] = { [npcKeys.spawns] = { [zoneIDs.AUCHENAI_CRYPTS] = { { -1, -1 } } }, [npcKeys.zoneID] = zoneIDs.AUCHENAI_CRYPTS, diff --git a/Database/Ebonhold/Ebonhold/EbonholdNpcDB.lua b/Database/Ebonhold/Ebonhold/EbonholdNpcDB.lua index f211483..4162144 100644 --- a/Database/Ebonhold/Ebonhold/EbonholdNpcDB.lua +++ b/Database/Ebonhold/Ebonhold/EbonholdNpcDB.lua @@ -16,15 +16,75 @@ EbonholdDB.npcData = EbonholdDB.npcData or { [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}, - -- Quest 50031 Stormbound: Missing spawn data for Storm Peaks (zone 67) elementals + -- Quest 50031 Stormbound: Storm Peaks (zone 67) elementals + -- All 11 elementals scraped from Storm Peaks filter page [30120] = {'Seething Revenant',12600,12600,80,80,0,{[67] = {{76.4,63},{76.8,63},{77,62.2},{77.6,62.4},{77.6,62.6}}},nil,67,nil,nil,834,nil,"",0}, - [30053] = {'Icebound Revenant',12600,12600,78,80,0,{[67] = {{41.8,65.8},{42,63.4},{42,65},{42.4,63.8},{42.4,66.8},{42.6,63.8},{42.6,66.4},{42.8,65},{43,67.4},{43.2,67.6},{43.6,67.6},{43.8,67},{44,66.4}}},nil,67,nil,nil,16,nil,"",0}, - [30550] = {'Image of the North Wind',12600,12600,80,80,0,{[67] = {{65.6,51.4}}},nil,67,nil,nil,35,nil,"",0}, - [30474] = {'The North Wind',12600,12600,80,80,1,{[67] = {{64.2,47.6},{64.4,47.2},{64.6,47.2},{64.6,47.6}}},nil,67,nil,nil,35,nil,"",0}, -} + [30053] = {'Icebound Revenant',12600,12600,78,80,0,{[67] = {{41.8,65.8},{42,63.4},{42,65},{42.4,63.8},{42.4,66.8},{42.6,63.8},{42.6,66.4},{42.8,65},{43,67.4},{43.2,67.6},{43.6,67.6},{43.8,67},{44,66.4}}},nil,67,nil,nil,16,nil,"",0}, + -- Additional Storm Peaks elementals for Quest 50031 (scraped from filter page) + [29504] = {'Seething Revenant',12600,12600,80,80,0,{[67] = {{68,63.6},{68.2,63.2},{69,57.4},{69,57.6},{69.2,62.4},{69.4,59.4},{69.4,60.4},{69.4,60.6},{69.4,62.6},{69.6,60.6},{69.6,62.6},{69.8,59.4},{70,57},{70,59.6},{70.2,56.4},{70.4,57.6},{70.4,61.8},{70.6,57.8},{70.6,60.4},{70.6,61.8},{70.6,62.6},{71,56},{71,56.6},{71.4,59},{71.4,60.6},{71.6,59},{71.6,60.4},{71.6,60.8},{72.4,62},{72.6,62.2},{73.4,63},{73.8,63},{74.2,62.4},{75,63.2},{76.4,63},{76.4,63.8},{76.6,62.8},{76.6,63.6},{77,61.4},{77,62},{77.6,62.4},{77.6,62.8}}},nil,67,nil,nil,834,nil,"",0}, + [30450] = {'Wailing Winds',12600,12600,79,80,0,{[67] = {{61.4,38.4},{61.4,39},{61.4,39.6},{61.6,38.2},{61.6,39.2},{61.8,40},{62.2,40.8},{62.4,41.6},{62.6,40.4}}},nil,67,nil,nil,16,nil,"",0}, + [30184] = {'Scion of Storm',12600,12600,80,80,0,{[67] = {{64,42.8},{64.2,39.4},{64.2,42.2},{64.4,40.4},{64.4,41.2},{64.4,44.4},{64.4,44.6},{64.6,40.6},{64.6,44.2},{64.8,39},{65,44.6},{65.2,42.4},{65.2,42.6},{65.4,39.6},{65.6,38.4},{65.6,40.4},{65.6,42.8},{65.6,43.8},{65.8,39.4},{65.8,41.2},{66.2,41.8},{66.4,44.8},{66.6,39.4},{66.6,40.6},{66.6,42.2},{66.6,42.6},{67,44.6},{67,45.6},{67.2,40},{67.4,43.8},{67.6,43.8},{67.6,44.6},{67.8,39.6},{67.8,41},{68.2,43.4},{68.4,39.4},{68.4,42.4},{68.6,40.2},{68.6,40.8},{68.6,43.8},{69,42.6},{69.4,41.6},{69.6,40.4},{69.6,41},{69.6,41.6}}},nil,67,nil,nil,16,nil,"",0}, + [29844] = {'Icebound Revenant',12600,12600,78,80,0,{[67] = {{40.4,62.4},{40.4,63},{40.8,62.8},{40.8,63.6},{41.2,62.4},{41.4,61},{41.4,65},{41.4,66.2},{41.6,62.4},{41.8,60.4},{41.8,62.8},{41.8,65.8},{42,61.4},{42,65.2},{42.4,63.8},{42.6,66.2},{42.8,67},{43,64.4},{43,64.8},{43.2,67.6},{43.6,67.6},{43.8,67},{44,66},{44.4,64.4},{44.4,64.6},{44.6,64.4},{44.6,65.4},{44.6,65.6}}},nil,67,nil,nil,16,nil,"",0}, + [30387] = {'Seething Revenant',12600,12600,80,80,0,{[67] = {{73.4,62.8},{73.8,62.4},{74,62.8},{74.6,62.4},{75,62.6},{75.2,63.6},{75.6,63},{75.8,63.6},{75.8,64.6},{76.6,64},{76.8,63},{77.2,62.2},{77.6,62.4},{77.6,62.6}}},nil,67,nil,nil,834,nil,"",0}, + [30160] = {'Brittle Revenant',12600,12600,80,80,0,{[67] = {{69,59.4},{69.2,57.4},{69.2,59.6},{69.4,58.2},{69.4,61},{69.4,61.8},{69.6,59.8},{70,57},{70,58.2},{70,59.4},{70.2,61},{70.2,62},{70.2,62.6},{70.6,56.8},{70.6,60.4},{70.6,61.4},{70.8,57.8},{70.8,58.8},{70.8,61.6},{71.2,56},{71.4,62.6},{71.6,62.4},{71.8,62.6}}},nil,67,nil,nil,834,nil,"",0}, + [29624] = {'Stormrider',12600,12600,80,80,0,{[67] = {{23.2,36.2},{23.4,37.4},{23.4,37.6},{23.8,37.4},{23.8,37.6},{24.4,39.4},{24.4,40.2},{24.4,40.6},{24.6,39.8},{25,43},{25.2,38.6},{25.4,37.4},{25.4,37.8},{25.4,40.8},{25.6,37.4},{25.6,37.8},{26,39.2},{26.2,39.6},{26.2,40.8},{26.2,44},{26.4,41.8},{26.4,42.8},{26.4,44.6},{26.4,50.6},{26.6,41.8},{27,43.6},{27.2,38.4},{27.2,40.4},{27.2,40.6},{27.2,48.8},{27.4,39.2},{27.4,42.8},{27.4,45.4},{27.4,45.8},{27.4,47},{27.4,48.4},{27.4,49.6},{27.6,39.2},{27.6,39.8},{27.6,41.4},{27.6,42},{27.6,44.4},{27.6,44.6},{27.6,45.8},{27.6,47.6},{27.8,47.4},{28,42.8},{28.2,37.4},{28.4,49.4},{28.4,49.8},{28.4,51.2},{28.4,51.6},{28.6,43},{28.6,51},{28.6,51.6},{28.8,47.4},{28.8,48.4},{29,46.2},{29,49.6},{29.2,49.4},{29.6,47.4},{29.6,50.6},{30,49.4},{30,49.6},{30.2,48.4},{30.6,48.2},{31.2,49.2},{31.2,49.6},{31.6,49.6},{32,47.2},{32.4,48.2},{32.4,48.6},{32.6,48.6},{32.8,47.8},{33.4,47.2},{33.6,47.2},{33.6,47.6}}},nil,67,nil,nil,16,nil,"",0}, + [30001] = {'Blackmaw',12600,12600,78,80,0,{[67] = {{30.4,36.8},{30.6,37}}},nil,67,nil,nil,16,nil,"",0}, + [30474] = {'The North Wind',12600,12600,80,80,0,{[67] = {{64.2,47.6},{64.4,47.2},{64.6,47.2},{64.6,47.6}}},nil,67,nil,nil,16,nil,"",0}, + -- Quest 50095 Peak Predators: Storm Peaks (zone 67) beasts + -- All hostile beasts scraped from Storm Peaks filter page + [29411] = {'Crystalweb Weaver',12600,12600,77,78,0,{[67] = {{40.2,74.4},{40.2,74.6},{40.2,76.4},{40.2,76.6},{41.2,76},{41.4,74},{41.4,74.8},{41.6,75},{41.6,75.6},{42,74.4},{42.6,74.4},{42.6,74.6},{43.4,76.2},{43.6,74.2},{43.8,75.4},{44,76},{44.6,73.4},{45,73.8},{45.6,73.8},{47.2,72.4},{47.2,72.6}}},nil,67,nil,nil,16,nil,"",0}, + [29590] = {'Blighted Proto-Drake',12600,12600,80,80,0,{[67] = {{21.4,57.4},{21.4,58},{21.4,58.6},{21.6,57.2},{22,59.8},{22.2,58.6},{22.4,58.4},{22.6,58.6},{23,57.4},{23,59.6},{23.2,58.2},{24,57.8},{24,58.6},{24.4,57.4},{24.6,57.2},{24.6,57.6}}},nil,67,nil,nil,16,nil,"",0}, + [30148] = {'Infesting Jormungar',12600,12600,80,80,0,{[67] = {{46.4,55.4},{46.4,55.6},{46.6,57.4},{46.8,55.6},{47.2,54.4},{47.2,54.6},{47.4,48.4},{47.4,48.6},{47.4,49.6},{47.4,50.6},{47.6,48.4},{47.6,48.6},{47.6,50},{47.8,46.6},{47.8,50.8},{47.8,54.6},{48.4,46.4},{48.4,51.6},{48.4,53},{48.4,54.2},{48.6,46.4},{48.6,47.4},{48.6,48.6},{48.6,51.8},{48.6,54.2},{48.8,47.8},{49,52.8}}},nil,67,nil,nil,16,nil,"",0}, + [32475] = {'Terror Spinner',12600,12600,76,76,0,{[67] = {{72,75}}},nil,67,nil,nil,16,nil,"",0}, + [29958] = {'Tundra Ram',12600,12600,79,80,0,{[67] = {{67.2,64.2},{67.6,64.6},{68.2,63.2},{68.4,63.6},{68.6,63.4},{68.6,63.6},{69.2,62},{69.4,55.2},{69.4,55.8},{69.6,55.2},{69.6,55.6},{70.2,54},{70.2,58.8},{70.2,59.8},{70.4,56.8},{70.6,54.4},{71.2,55.2},{71.2,55.6},{71.4,56.8},{71.4,58.2},{71.4,59.2},{71.4,60.4},{71.4,60.6},{71.6,56.4},{71.6,56.6},{71.6,57.8},{71.6,60.6},{71.8,59},{71.8,60.4},{72,61.6}}},nil,67,nil,nil,16,nil,"",0}, + [29358] = {'Frostworg',12600,12600,79,80,0,{[67] = {{59.4,40.6},{59.6,41.4},{59.6,42.6},{60,40.8},{60.2,41},{60.4,40.4},{60.4,40.6},{60.6,42.2},{61,41},{61.2,40.2},{61.4,42.6},{61.6,41.2},{62,41.8},{62.2,41.2},{62.4,41},{62.4,42.6},{62.6,41.4},{62.6,42.6},{62.8,41.6},{63,41},{63.2,42.4},{63.4,41},{63.6,42.2},{64,42.6},{64.2,41.6},{64.4,42.2},{64.6,42.6}}},nil,67,nil,nil,16,nil,"",0}, + [29469] = {'Ice Steppe Rhino',12600,12600,78,79,0,{[67] = {{59.2,52.6},{59.4,51.8},{59.6,52.6},{60,53},{60.2,52},{60.2,53.4},{60.4,53},{60.6,51.4},{60.6,52},{60.8,53.6},{61,52},{61.2,52.6},{61.4,53.4},{61.6,52.8},{61.8,53},{62,52.8},{62.2,52.2},{62.4,51.8},{62.4,53.6},{62.6,52.2},{62.8,52.6},{63,52},{63.2,53},{63.4,52},{63.6,53.2},{63.8,52.6},{64,52.8}}},nil,67,nil,nil,16,nil,"",0}, + [30422] = {'Roaming Jormungar',12600,12600,79,80,0,{[67] = {{57.2,57.6},{57.4,58},{57.6,57.6},{57.6,58.4},{57.8,57},{58,57.4},{58,58.2},{58.2,58},{58.4,57.4},{58.4,58.2},{58.6,57.8},{58.8,57.4},{58.8,58.2},{59,57.6},{59,58.4},{59.2,58},{59.4,57.4},{59.4,58.6},{59.6,58.4},{59.8,57.8},{60,58.2},{60.2,58.6},{60.4,58},{60.6,57.4}}},nil,67,nil,nil,16,nil,"",0}, + [30445] = {'Ice Steppe Bull',12600,12600,78,79,0,{[67] = {{60.4,59.4},{60.6,59},{60.8,58.4},{61,58.6},{61.2,59.4},{61.4,58.8},{61.6,59.2},{61.8,58.6},{62,59},{62.2,58.4},{62.4,59},{62.6,58.6},{62.8,59.2},{63,58.8},{63.2,59.4},{63.4,58.6},{63.6,59},{63.8,58.4},{64,59.2},{64.2,58.6},{64.4,59},{64.6,58.8},{64.8,59.4},{65,58.6},{65.2,59}}},nil,67,nil,nil,16,nil,"",0}, + [30291] = {'Ravenous Jormungar',12600,12600,79,80,0,{[67] = {{53.4,62},{53.6,62.2},{54,61.4},{54.4,60.4},{54.4,63.2},{54.4,63.6},{54.6,63.2},{54.6,63.6},{55,60.4},{55.2,60.8},{55.4,62},{55.6,61.4},{55.6,61.6},{55.6,63.4},{55.8,63.8}}},nil,67,nil,nil,16,nil,"",0}, + [29412] = {'Crystalweb Spitter',12600,12600,77,78,0,{[67] = {{40.2,75.4},{40.2,76},{40.4,77.2},{40.4,77.6},{40.6,77.2},{41.2,74},{41.2,75.4},{41.4,76},{41.6,76},{42.2,74.4},{42.2,74.6},{42.6,74.4},{43.4,75},{43.6,74.8},{44,74.4},{44,75.6},{44.8,73.8},{45.8,73.8},{46.4,73.4},{46.6,73.4},{46.6,73.6},{47.2,72.4},{47.6,72.8}}},nil,67,nil,nil,16,nil,"",0}, + [30448] = {'Plains Mammoth',12600,12600,77,78,0,{[67] = {{61.2,42},{61.6,42},{62.2,43.4},{62.2,43.6},{62.4,44.8},{62.6,44.4},{62.6,44.8},{62.6,45.6},{63,47.2},{63,47.8},{63.4,42.2},{63.4,42.6},{63.4,48.6},{63.6,42.8},{63.6,48.4},{63.8,47.2},{63.8,48.6},{64,43.8},{64.4,41.4},{64.4,42},{64.4,44.8},{64.4,45.8},{64.6,41.2},{64.6,42.2},{64.8,46.2},{65,45},{65.2,43.2},{65.4,43.8},{65.4,48.6},{65.6,41.8},{65.6,43.4},{66,45.6},{66,48.2},{66,48.6},{66.2,44.4},{66.4,45.4},{66.4,47.2},{66.6,45.2},{66.6,47.6},{66.8,47.2},{67.4,46.4},{67.6,46.4},{67.6,46.6},{67.6,47.6}}},nil,67,nil,nil,16,nil,"",0}, + [29461] = {'Icetip Crawler',12600,12600,78,78,0,{[67] = {{47,72},{47.2,71.4},{47.2,72.6},{47.4,70},{47.6,70.4},{48,71.8},{48.2,71.2},{48.6,71.4},{48.6,71.6}}},nil,67,nil,nil,16,nil,"",0}, + [29605] = {'Ravenous Jormungar',12600,12600,79,80,0,{[67] = {{53.4,62},{53.6,62.2},{53.8,62.8},{54.2,61},{54.6,63.6},{55.2,60.4},{55.2,60.6},{55.4,62},{55.4,63.2},{55.6,61.4},{55.6,62},{55.6,63.4},{55.8,64.2}}},nil,67,nil,nil,16,nil,"",0}, + [30447] = {'Romping Rhino',12600,12600,78,79,0,{[67] = {{61.2,41.8},{61.6,43},{62.2,44.4},{62.4,42},{62.4,44.6},{62.6,42.8},{63,42.4},{63,45},{63.2,44.4},{63.6,43.6},{64,42.6},{64.2,42},{64.6,41.8},{64.6,43.2},{64.8,43.6},{65,44.6},{65.4,48.8},{65.6,42.4},{65.6,42.6},{65.6,43.6},{65.8,45},{66.4,46},{66.4,47.4},{66.4,47.6},{66.8,45.8},{66.8,47.6},{67.4,46.6},{67.6,47.6},{67.8,46.8}}},nil,67,nil,nil,16,nil,"",0}, + [29319] = {'Icepaw Bear',12600,12600,76,77,0,{[67] = {{68.4,73.6},{68.6,73.4},{68.8,73.8},{69.4,74.8},{69.6,72.8},{69.8,74.4},{69.8,74.6},{70.2,71.4},{70.2,71.6},{70.6,73.2},{71.4,72.4},{71.4,74.4},{71.4,74.8},{71.6,72.4},{71.6,74.4},{72.2,73.4},{72.4,75},{72.6,72.4},{72.6,73.8},{72.8,75},{73,73.4},{74.2,74.2},{74.8,74.2},{75.4,74.6},{75.6,73.6},{75.6,74.8}}},nil,67,nil,nil,16,nil,"",0}, + [29390] = {'Snowdrift Jormungar',12600,12600,79,80,0,{[67] = {{23.4,36.2},{23.4,36.8},{23.4,38.4},{23.8,37.8},{23.8,39.2},{24,36.4},{24,40},{24.4,40.8},{24.8,36.4},{24.8,36.8},{24.8,43},{25.8,44.8},{26.2,42.4},{26.2,43},{26.4,43.6},{26.4,50},{26.6,42.4},{26.8,41},{27,42.6},{27,44.8},{27.2,40.4},{27.2,46.2},{27.4,44.2},{27.4,46.6},{27.4,47.6},{27.4,49.6},{27.4,54.4},{27.4,54.8},{27.6,46},{27.6,46.6},{27.6,47.6},{27.6,49.4},{27.6,54},{27.8,40.2},{27.8,41.2},{27.8,43.2},{27.8,52.8},{28,41.6},{28,44.4},{28,44.6},{28,52.4},{28.2,50.4},{28.2,50.6},{28.8,42.2},{29,47.2},{29.4,48.2},{29.4,49.4},{29.4,50.4},{29.4,50.6},{29.6,48.2},{29.8,48.8},{29.8,50.6},{30,49.8},{30.8,50},{31.6,50},{32,47},{32.4,47.6},{32.6,47.2},{32.6,47.6},{32.6,48.6}}},nil,67,nil,nil,16,nil,"",0}, + [29562] = {'Icemaw Bear',12600,12600,79,80,0,{[67] = {{54.2,63},{54.6,63.4},{54.6,63.6},{55.6,61.4},{55.6,62},{55.6,63.4},{55.8,64}}},nil,67,nil,nil,16,nil,"",0}, + [30340] = {'Jorcuttar',12600,12600,80,80,0,{[67] = {{54.6,60.8}}},nil,67,nil,nil,16,nil,"",0}, + [30292] = {'Dead Icemaw Bear',12600,12600,79,80,0,{[67] = {{53.6,61.8},{54.2,61.4},{54.4,60.4},{54.4,63.2},{54.8,60.4},{55,61.8},{55.4,60.8},{55.4,63.2},{55.6,61.4},{55.6,62.2},{55.6,63.2},{55.8,64}}},nil,67,nil,nil,16,nil,"",0}, + [29808] = {'Stormcrest Hatchling',12600,12600,77,77,0,{[67] = {{26,72},{26,72.6},{26.6,72.4},{27.4,71.4},{27.8,71},{28.2,68},{28.2,68.8},{28.2,70},{28.6,67.4},{28.6,68},{28.6,68.6},{29,65.2},{29.4,63.8},{29.8,66.8},{30,66.4},{30.4,64.6},{30.8,65.4},{31,66},{31,66.6},{31.6,66.2},{33,66.6},{33.2,66},{34.4,65.8},{34.8,65.8},{35.8,66.4},{35.8,69.4},{35.8,75},{36.2,67.2},{36.2,69.8},{36.4,67.8},{36.4,71},{36.4,74.4},{36.6,68.2},{36.6,68.6},{36.6,69.6},{36.6,71.4},{36.6,72},{36.8,72.8},{37.2,73.6}}},nil,67,nil,nil,16,nil,"",0}, + [30174] = {'Hyldsmeet Warbear',12600,12600,80,80,0,{[67] = {{49.4,67.4},{49.4,67.8},{49.4,68.8},{49.6,68.2},{49.6,68.6}}},nil,67,nil,nil,16,nil,"",0}, + [34920] = {'Deep Jormungar',12600,12600,80,80,0,{[67] = {{37.4,56},{37.6,56},{37.6,59.8},{38,57},{38,58.8},{38.2,54.4},{38.2,62},{38.4,55},{38.4,58.4},{38.4,60.6},{38.6,58.4},{38.8,54.6},{38.8,59.4},{38.8,59.6},{39.2,61.4},{39.2,61.6},{39.4,53.8},{39.8,61.2},{40,52.4},{40,52.6},{40,60.2},{40,61.8},{40.4,62.8},{40.6,53.2},{40.6,60.6},{40.6,62.8},{40.8,52},{41.4,53.6},{41.4,60},{41.6,52.2},{42,53.2},{42.2,60},{42.4,53.8},{42.4,55},{42.6,58.4},{42.8,54},{42.8,56.8},{42.8,58.6},{43.2,54.8},{43.2,56},{43.2,59.6},{43.4,60.6},{43.6,58.6},{43.8,56.4},{43.8,56.6},{43.8,61.8},{44.2,58.4},{44.2,61},{44.6,59.4},{44.6,61.8},{45,55.6},{45,56.8},{45,60.8},{45.4,60},{45.6,55.6},{45.6,57},{45.8,57.6},{46,61.2},{46,63.4},{46.4,59.2},{46.4,62.4},{46.4,64},{46.6,60.6},{46.6,64},{46.8,63},{47,60},{47.2,62.4},{47.6,61.6}}},nil,67,nil,nil,16,nil,"",0}, + -- Quest 50096 Peak Predators: Icecrown (zone 210) beasts + -- All hostile beasts scraped from Icecrown filter page + [29392] = {'Ravenous Jaws',12600,12600,79,80,0,{[210] = {{2.4,42.2},{2.6,42.2},{2.8,42.6},{3.2,40.4},{3.2,44.2},{3.2,44.6},{3.4,37.4},{3.4,37.8},{3.4,40.6},{3.4,47.2},{3.6,38},{3.6,43.8},{4,42.4},{4,42.6},{4,44.6},{4.2,36.2},{4.2,36.6},{4.2,39.2},{4.2,46.4},{4.2,46.6},{4.4,34.4},{4.4,34.8},{4.4,40.4},{4.4,41.2},{4.6,34.4},{4.6,36.6},{4.6,39.2},{4.6,40.4},{4.6,40.8},{4.6,42.6},{4.8,38.2},{5,41.6},{5,46.2},{5.2,47.6},{5.4,35.4},{5.4,35.6},{5.4,47.4},{5.6,35.4},{5.8,46},{6.2,42.4},{6.2,42.6},{6.2,43.8},{6.4,34.2},{6.4,36.2},{6.4,36.6},{6.4,45},{6.4,46.8},{6.4,47.8},{6.6,36.4},{6.6,36.6},{6.6,42.4},{6.6,46.4},{6.6,47.6},{6.8,33.8},{6.8,44.4},{6.8,44.6},{6.8,47.4},{7.4,35.4},{7.4,43},{7.6,35.4},{7.6,35.6},{7.6,43},{8.2,34.4},{8.4,39.4},{8.4,39.6},{8.4,41.4},{8.4,41.6},{8.6,32.2},{8.6,41.4},{8.8,33},{8.8,39.4},{8.8,39.6},{8.8,42},{9.4,34.4},{9.4,34.6},{9.4,35.6},{9.6,34.4},{10.2,33.4},{10.2,35.6},{10.2,41.8},{10.4,35.2},{10.4,39.4},{10.4,40.4},{10.4,40.6},{10.6,33.4},{10.6,35.4},{10.6,40},{11.2,34.2},{11.4,36.2},{11.4,36.6},{11.4,41.4},{11.4,41.6},{11.6,34.8},{11.6,41.6},{11.8,36.6},{11.8,41.4},{12,34.4},{12,36},{12.2,42.6},{12.2,46.4},{12.4,37.8},{12.4,38.6},{12.4,47},{12.4,47.8},{12.6,35.4},{12.6,35.6},{12.6,37.8},{12.6,47.2},{12.6,47.6},{12.8,46.4},{13.2,41.4},{13.2,42},{13.2,43.4},{13.2,44.6},{13.4,36.8},{13.4,39.4},{13.4,39.8},{13.4,43.8},{13.4,48.6},{13.6,36.8},{13.6,39.4},{13.6,39.8},{13.6,42},{13.6,42.6},{13.6,43.8},{13.6,48.4},{13.6,48.6},{14.2,38.2},{14.4,40.8},{14.4,45.4},{14.4,46.2},{14.4,46.6},{14.6,38.2},{14.6,40.8},{14.6,44},{14.6,46},{14.6,46.8},{15.4,39.2},{15.4,39.6},{15.4,42.2},{15.4,42.8},{15.4,45.4},{15.6,39.2},{15.6,39.8},{15.6,42.6},{15.6,45.4},{15.6,45.6},{15.8,42.2}}},nil,210,nil,nil,16,nil,"",0}, + [30206] = {'Carrion Fleshstripper',12600,12600,76,77,0,{[210] = {{83,72.4},{83.2,72.6},{83.2,77.4},{83.2,77.6},{83.4,74.2},{83.4,75.4},{83.4,76},{84,73.6},{84,80},{84.2,76.2},{84.4,72.4},{84.4,72.8},{84.4,74.8},{84.4,77.4},{84.4,77.6},{84.4,78.6},{84.6,72.4},{84.6,72.8},{84.6,74.6},{84.6,77.4},{84.6,78.6},{84.8,73.8},{84.8,78.4},{84.8,80.4},{85,75.6},{85,80.8},{85.8,73.4},{85.8,73.6},{85.8,78.8}}},nil,210,nil,nil,16,nil,"",0}, + [30330] = {'Jotunheim Proto-Drake',12600,12600,80,80,0,{[210] = {{28,38.4},{29.2,24.8},{29.2,35.2},{29.6,32.8},{30,33.6},{30.2,25},{30.2,34.6},{31.2,25.6},{32.2,26.4},{32.8,24},{33.2,25},{33.6,27.8}}},nil,210,nil,nil,16,nil,"",0}, + [30430] = {'Sentry Worg',12600,12600,77,78,0,{[210] = {{15.2,58.2},{15.2,58.8},{19.6,56.2},{19.8,55.4},{20,57},{20.6,54.2},{20.8,53.2},{22,54},{22.4,59.2},{23,54.2},{23.4,54.6},{23.4,57.8},{23.6,54.8},{23.6,58.4},{23.6,58.6},{23.8,54.2},{23.8,56.4},{23.8,57},{27.2,40.2},{27.2,42.8},{27.4,39.4},{27.6,37.2},{28,39.4},{28,40},{28.2,40.6},{28.2,44.2},{28.2,45.4},{28.4,38.2},{28.4,41.8},{28.4,42.6},{28.4,46.4},{28.4,46.8},{28.6,38.2},{28.6,40.2},{28.8,40.6},{28.8,41.8},{28.8,46.4},{29,26.4},{29,29.2},{29,31.4},{29.2,27.2},{29.2,28.2},{29.2,35},{29.2,36.2},{29.2,37.4},{29.2,39.2},{29.4,30.2},{29.4,43.2},{29.4,44.4},{29.4,44.6},{29.4,47.4},{29.4,48.2},{29.6,27.8},{29.6,36.2},{29.8,34},{29.8,34.8},{29.8,47},{30,36.6},{30.2,26.6},{30.2,32.6},{30.2,38.4},{30.4,26.4},{30.4,31.4},{30.4,31.6},{30.4,38.6},{30.4,43.4},{30.4,43.8},{30.4,47.6},{30.6,31.6},{30.6,33.8},{30.6,34.6},{30.8,31.4},{30.8,43.6},{30.8,47.6},{31,33.2},{31,37.2},{31,38.4},{31,43.2},{31.2,26.4},{31.2,26.8},{31.2,39.4},{31.2,47.4},{31.4,39.6},{31.4,40.6},{31.6,26.4},{31.6,39.4},{31.6,40.8},{31.6,47.6},{31.8,32.2},{31.8,40.4},{32,32.6},{32,42.2},{32,47.4},{32.2,27.4},{32.2,27.8},{32.4,28.6},{32.4,31},{32.4,42.8},{32.6,31},{32.6,43},{32.8,28.2},{33.2,30},{33.4,27},{33.4,28.8},{33.6,28.8},{34.4,27.2},{34.4,27.6},{34.6,27.4},{34.6,27.6},{35.8,28.8},{36.4,24.6},{36.4,26.4},{36.4,26.6},{36.6,25.8},{36.6,26.6},{36.8,24.2},{36.8,25.4}}},nil,210,nil,nil,16,nil,"",0}, + [31265] = {'Savage Proto-Drake',12600,12600,80,80,0,{[210] = {{52.8,52},{53,52.6},{53.2,53.6},{53.8,52.6},{54,52.4},{54.8,51.4},{55,51.8},{55.4,52.8},{55.8,51},{56,57.4},{56,57.8},{56.4,52.4},{56.4,52.6},{56.6,52.2},{56.6,52.8},{56.8,55},{56.8,57.4},{57.4,55.8},{57.6,56.8},{57.8,56},{58,55},{58.2,54.4},{59,56.2},{59,56.6},{59,62.4},{59.4,62.8},{59.6,62.8},{59.8,55.2},{59.8,62.4},{60.2,64}}},nil,210,nil,nil,16,nil,"",0}, + [31747] = {'Necrotic Webspinner',12600,12600,79,80,0,{[210] = {{44.4,66.8},{45,67.2},{45.2,67.8},{46,67.4},{46,68},{48.2,65.2},{48.4,64},{48.6,66},{49,64.8},{49.2,64},{51,75.6},{51.2,75.2},{51.6,75.4},{51.6,76},{52.8,76.2},{53.2,77.4},{53.4,74},{53.4,75.4},{53.4,77.6},{53.6,75},{53.6,75.6},{53.6,77.8},{54,77},{54.4,80},{54.6,79.4},{54.6,79.8},{54.8,81.4},{55,81.6},{55.2,82.6}}},nil,210,nil,nil,16,nil,"",0}, + [32484] = {'Bone Spider',12600,12600,80,80,0,{[210] = {{30,28.4},{30.4,29.4},{30.4,29.8},{30.6,28.4},{31,30.8},{31.2,29},{31.4,29.6},{31.6,28.4},{31.6,29.4},{31.8,29.8}}},nil,210,nil,nil,16,nil,"",0}, + [35060] = {'North Sea Thresher',12600,12600,79,80,0,{[210] = {{65.8,8.6},{66.4,7.4},{66.4,8},{66.4,9.8},{66.8,7.4},{66.8,7.6},{66.8,9},{67.2,6.4},{67.6,8.4},{72,6.2},{73,9.4},{73.4,9.8},{74,7.8},{74,10.4},{74.2,9},{74.2,10.6},{74.6,8.4},{74.6,9.4},{74.6,9.6}}},nil,210,nil,nil,16,nil,"",0}, + [35061] = {'North Sea Blue Shark',12600,12600,79,80,0,{[210] = {{66,9},{66.4,7.4},{66.4,8},{66.4,10},{66.8,7.4},{66.8,7.6},{66.8,9},{67.6,8.4},{68.8,5.6},{72,6.2},{73,9.6},{73.2,10.6},{73.4,9.2},{74.2,9},{74.2,10.4},{74.2,10.6},{74.6,9.6},{74.8,9.2}}},nil,210,nil,nil,16,nil,"",0}, + [35071] = {'North Sea Mako',12600,12600,79,80,0,{[210] = {{65.8,8.6},{66.4,8},{66.8,7.4},{66.8,7.6},{66.8,9},{67,9.6},{67.6,8.4},{68.8,5.6},{72,5.6},{73.4,9.8},{73.8,7.8},{74,10.6},{74.2,9},{74.2,10.4},{74.6,9.6},{74.8,9.4}}},nil,210,nil,nil,16,nil,"",0}, + [35470] = {'Icehowl',12600,12600,80,80,0,{[210] = {{72.4,25},{72.6,25}}},nil,210,nil,nil,16,nil,"",0}, + [35482] = {'Hungry Jormungar',12600,12600,83,83,0,{[210] = {{70.4,23.8},{23.8}}},nil,210,nil,nil,16,nil,"",0}, + + -- Quest 50205 Storm Peaks Trophy: Rare NPCs in The Storm Peaks (zone 67) + [35189] = {'Skoll',12600,12600,80,80,0,{[67] = {{27.8,47.6},{27.8,50.8},{28,50.4},{30,64.6},{30.2,64.4},{46.2,64.4},{46.2,65.6},{46.4,64.8},{46.6,64.2},{48,63}}},nil,67,nil,nil,16,nil,"",0}, + [32491] = {'Time-Lost Proto-Drake',12600,12600,80,80,0,{[67] = {{31.4,69.8},{32,65.6},{35,76.6},{36,76},{36.8,74.4},{37,71.4},{38.2,60.8},{41.2,61.4},{43.8,30.6},{45,59},{49.6,30.2},{50.8,71.2},{52.2,33.4},{52.2,34.8}}},nil,67,nil,nil,16,nil,"",0}, + [32630] = {'Vyragosa',12600,12600,80,80,0,{[67] = {{26.2,42.2},{26.2,43.4},{26.2,74.2},{26.4,58.4},{26.8,44.2},{27,42},{27.2,55},{27.2,63.8},{27.2,70.6},{27.4,44.8},{27.4,67.6},{27.8,38.6},{27.8,62.2},{28,64.2},{28.4,51.2},{28.4,69},{29,50.6},{29,66},{29,67.2},{29.6,65.8},{29.8,38},{30.2,68},{31,69.4},{31.4,65.8},{31.6,64.4},{31.6,66},{31.6,69.4},{33.2,36.6},{33.4,35.4},{33.8,64.8},{33.8,66},{34.6,66.4},{35,65.2},{35.2,66.6},{35.6,74},{35.8,77.8},{36,64.2},{36,65},{36.4,62.6},{36.4,68.4},{36.4,76},{36.6,73},{36.8,62.8},{36.8,69},{36.8,74.8},{37,69.6},{37,72},{37,74.2},{38.2,61.2},{38.2,74},{38.4,75.2},{38.8,61.4},{39,59.4},{39.2,73},{40,65.2},{40.2,29.6},{40.4,63.4},{40.4,71.8},{40.8,55.2},{40.8,70.8},{40.8,84},{41.2,30.6},{41.2,60},{41.8,60.4},{42.8,30.6},{43.6,30.4},{43.8,30.6},{44.6,58.6},{45.6,82.4},{46,62},{46.2,30},{46.4,31.4},{46.6,62.6},{46.8,31.4},{47.4,63.8},{47.4,65.2},{47.6,64.6},{47.8,30.6},{48.4,67.8},{48.6,66.4},{48.8,67},{49,29.6},{49,67.6},{49,74.8},{49.2,31},{49.2,46.8},{49.6,30.4},{50,69},{50.2,69.8},{51,71},{51.8,34},{52,32.2},{52,33.2},{52.2,34.8}}},nil,67,nil,nil,16,nil,"",0}, + [32500] = {'Dirkee',12600,12600,80,80,0,{[67] = {{37.4,58.4},{37.4,58.6},{37.4,60.4},{37.6,57},{37.6,58.2},{37.6,59.2},{37.8,59.8},{40.4,39.6},{41.2,39.8},{41.2,51.4},{41.2,52},{41.4,41},{41.6,40.6},{41.8,40.2},{42.6,38.2},{67.2,47.6},{68,47.4},{68.2,47.8}}},nil,67,nil,nil,16,nil,"",0}, + + -- Quest 50066 Stormforged Scales: Dragonkin NPCs in The Storm Peaks (zone 67) + [29753] = {'Stormpeak Wyrm',12600,12600,80,80,0,{[67] = {{43.4,64.2},{43.8,64.6},{44,61.4},{44,64.4},{44.6,61},{45,58},{45.8,62.4},{45.8,62.6},{46.2,67.4},{46.2,67.6},{47,55},{47.4,57.4},{48.8,55.2},{49,60},{49.2,62.2},{50.8,71.2},{51.8,74.4},{52,74.6},{53,73.4}}},nil,67,nil,nil,16,nil,"",0}, + [29755] = {'Stormpeak Hatchling',12600,12600,80,80,0,{[67] = {{45.2,66.4},{45.2,66.8},{45.6,67.2},{52,73.6},{52.2,72.4},{52.4,73.2},{52.4,75.2},{52.6,73.4},{52.6,73.6},{52.6,75.2}}},nil,67,nil,nil,16,nil,"",0}, + [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}, + -- Backward compatibility EbonholdNpcDB = EbonholdNpcDB or {} diff --git a/Database/Ebonhold/Ebonhold/EbonholdQuestDB.lua b/Database/Ebonhold/Ebonhold/EbonholdQuestDB.lua index ec16f19..aa96f64 100644 --- a/Database/Ebonhold/Ebonhold/EbonholdQuestDB.lua +++ b/Database/Ebonhold/Ebonhold/EbonholdQuestDB.lua @@ -9,7 +9,7 @@ EbonholdDB.questData = EbonholdDB.questData or { [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} [4] = 67, -- Quest level [5] = 64, -- Min level - [6] = 3518, -- Zone (Nagrand) + [17] = 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" @@ -27,8 +27,8 @@ EbonholdDB.questData = EbonholdDB.questData or { } } }, - [17] = nil, -- XP reward - [30] = 60, -- Group size + + [30] = 60, -- Group size }, -- Quest 50085: Savage Heights @@ -38,7 +38,7 @@ EbonholdDB.questData = EbonholdDB.questData or { [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} [4] = 70, -- Quest level [5] = 67, -- Min level - [6] = 3522, -- Zone (Blade's Edge Mountains) + [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.", "Kill 75 Beasts in Blade's Edge Mountains" @@ -57,8 +57,8 @@ EbonholdDB.questData = EbonholdDB.questData or { } } }, - [17] = nil, -- XP reward - [30] = 75, -- Kill count + + [30] = 75, -- Kill count }, -- Quest 50086: Unstable Fauna @@ -68,7 +68,7 @@ EbonholdDB.questData = EbonholdDB.questData or { [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} [4] = 70, -- Quest level [5] = 67, -- Min level - [6] = 3523, -- Zone (Netherstorm) + [17] = 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" @@ -87,8 +87,8 @@ EbonholdDB.questData = EbonholdDB.questData or { } } }, - [17] = nil, -- XP reward - [30] = 75, -- Kill count + + [30] = 75, -- Kill count }, -- Quest 50201: Dragonblight Trophy @@ -98,7 +98,7 @@ EbonholdDB.questData = EbonholdDB.questData or { [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} [4] = 75, -- Quest level [5] = 71, -- Min level - [6] = 65, -- Zone (Dragonblight) + [17] = 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" @@ -117,8 +117,8 @@ EbonholdDB.questData = EbonholdDB.questData or { } } }, - [17] = nil, -- XP reward - [30] = 1, -- Kill count (only 1 rare needed) + + [30] = 1, -- Kill count (only 1 rare needed) }, -- Quest 50160: Redridge Trophy @@ -188,7 +188,7 @@ EbonholdDB.questData = EbonholdDB.questData or { [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} [4] = 65, -- Quest level [5] = 62, -- Min level - [6] = 3519, -- Zone (Terokkar Forest) + [17] = 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" @@ -207,8 +207,38 @@ EbonholdDB.questData = EbonholdDB.questData or { } } }, - [17] = nil, -- XP reward - [30] = 75, -- Kill count + + [30] = 75, -- Kill count + }, + + -- Quest 50082: Marsh Predators + -- Kill 75 beasts in Zangarmarsh + [50082] = { + [1] = "Marsh Predators", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 64, -- Quest level + [5] = 62, -- Min 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 75 Beasts 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 + { + -- All beasts in Zangarmarsh + { 19349, 19730, 18285, 18281, 18135, 18286, 18283, 18680, 18280, 18132, 20197, 18133, 18212, 18214, 19706, 20196, 18129, 18213, 18128, 20279, 20198, 18130, 20283, 18134, 19729, 20290, 20324, 20280, 18138, 17953, 18332, 18201, 18131, 20387 }, + 19349, -- RootId: Thornfang Ravager (representative beast) + "Beast slain" + } + } + }, + + [30] = 75, -- Kill count }, -- Quest 50060: Skies of Blade's Edge @@ -246,7 +276,7 @@ EbonholdDB.questData = EbonholdDB.questData or { [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} [4] = 68, -- Required level (Min level) [5] = 71, -- Quest level - [6] = 3537, -- Zone (Borean Tundra) + [17] = 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" @@ -259,14 +289,44 @@ EbonholdDB.questData = EbonholdDB.questData or { { -- [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, 32357, 25715, 25514, 25419, 24601, 25415, 25226, 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.) + + [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 50031: Stormbound + -- Kill 30 Elementals in Storm Peaks + [50031] = { + [1] = "Stormbound", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 68, -- Required level (Min level) + [5] = 73, -- Quest level + [17] = 67, -- Zone (Storm Peaks) + [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 Storm Peaks" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + { -- [5] killCreditObjective + { + -- All Storm Peaks elementals scraped from filter page + { 29504, 30450, 30184, 29844, 30387, 30160, 29624, 30001, 30474, 30120, 30053 }, + 30120, -- RootId: Seething Revenant (representative elemental) + "Elementals slain" + } + } + }, + + [30] = 30, -- Kill count (30 elementals as per quest name) }, -- Quest 50087: Shadowed Beasts @@ -276,7 +336,7 @@ EbonholdDB.questData = EbonholdDB.questData or { [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} [4] = 67, -- Quest level [5] = 65, -- Min level - [6] = 3520, -- Zone (Shadowmoon Valley) + [17] = 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" @@ -295,8 +355,8 @@ EbonholdDB.questData = EbonholdDB.questData or { } } }, - [17] = nil, -- XP reward - [30] = 75, -- Kill count + + [30] = 75, -- Kill count }, -- Quest 50064: Heart of the Dragonflights @@ -306,7 +366,7 @@ EbonholdDB.questData = EbonholdDB.questData or { [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} [4] = 73, -- Quest level [5] = 71, -- Min level - [6] = 65, -- Zone (Dragonblight) + [17] = 3524, -- 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" @@ -325,8 +385,188 @@ EbonholdDB.questData = EbonholdDB.questData or { } } }, - [17] = nil, -- XP reward - [30] = 30, -- Kill count + + [30] = 30, -- Kill count + }, + + -- Quest 50095: Peak Predators + -- Kill 75 beasts in The Storm Peaks + [50095] = { + [1] = "Peak Predators", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 68, -- Required level (Min level) + [5] = 73, -- Quest level + [17] = 67, -- Zone (The Storm Peaks) + [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 The Storm Peaks" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + { -- [5] killCreditObjective + { + -- All 24 beast NPCs in Storm Peaks (hostile to both factions) + { 29411, 29590, 30148, 32475, 29958, 30164, 29358, 29469, 30422, 30445, 30291, 29412, 30448, 29461, 29605, 30447, 29319, 29390, 29562, 30340, 30292, 29808, 30174, 34920 }, + 29319, -- RootId: Icepaw Bear (representative beast) + "Beasts slain" + } + } + }, + + [30] = 75, -- Kill count (75 beasts as per quest name) + }, + + -- Quest 50096: Peak Predators + -- Kill 75 beasts in Icecrown + [50096] = { + [1] = "Peak Predators", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 73, -- Required level (Min level) + [5] = 77, -- Quest level + [17] = 210, -- Zone (Icecrown) + [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 Icecrown" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + { -- [5] killCreditObjective + { + -- All 12 beast NPCs in Icecrown (hostile to both factions) + { 29392, 30206, 30330, 30430, 31265, 31747, 32484, 35060, 35061, 35071, 35470, 35482 }, + 29392, -- RootId: Ravenous Jaws (representative beast) + "Beasts slain" + } + } + }, + + [30] = 75, -- Kill count (75 beasts as per quest name) + }, + + -- Quest 50151: Icecrown Advance + -- Requires completing any 6 quests in Icecrown + -- Auto-complete, no turn-in location + [50151] = { + [1] = "Icecrown Advance", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 73, -- Min level + [5] = 80, -- Quest level + [17] = 210, -- Zone (Icecrown) + [8] = { + "This quest requires completing any 6 quests in Icecrown. The quest will automatically complete once the objective is met.", + "Complete 6 quests in Icecrown" + }, + }, + + -- Quest 50205: Storm Peaks Trophy + -- Kill 1 rare in The Storm Peaks + [50205] = { + [1] = "Storm Peaks Trophy", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 68, -- Min level + [5] = 80, -- Quest level + [17] = 67, -- Zone (The Storm Peaks) + [8] = { + "Kill a rare NPC in The Storm Peaks to complete this quest.", + "Kill a rare in The Storm Peaks" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + { -- [5] killCreditObjective + { + -- All 4 rare NPCs in The Storm Peaks + { 35189, 32491, 32630, 32500 }, + 35189, -- RootId: Skoll (representative rare) + "Rare slain" + } + } + }, + + [30] = 1, -- Kill count (1 rare) + }, + + -- Quest 50066: Stormforged Scales + -- Kill 30 dragonkin in The Storm Peaks + [50066] = { + [1] = "Stormforged Scales", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 68, -- Min level + [5] = 80, -- Quest level + [17] = 67, -- Zone (The Storm Peaks) + [8] = { + "The dragons of the Storm Peaks must be dealt with before we can proceed with our plans. Destroy 30 dragonkin in the Storm Peaks to show the Storm Peaks dragons that they are not welcome here.", + "Slain: 0/30" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + { -- [5] killCreditObjective + { + -- All 8 dragonkin NPCs in The Storm Peaks (zone 67) with valid spawn data + { 32491, 32630, 29753, 29755, 29460, 30275, 30461 }, + 32491, -- RootId: Time-Lost Proto-Drake (representative dragonkin) + "Dragonkin slain" + } + } + }, + + [30] = 30, -- Kill count (30 dragonkin) + }, + + -- Quest 50145: Fjord Front + -- Requires completing any 6 quests in Howling Fjord + -- Auto-complete, no turn-in location + [50145] = { + [1] = "Fjord Front", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 74, -- Quest level + [5] = 68, -- Min level + [17] = 495, -- Zone (Howling Fjord) + [8] = { + "This quest requires completing any 6 quests in Howling Fjord. The quest will automatically complete once the objective is met.", + "Complete 6 quests in Howling Fjord" + }, + }, + + -- Quest 50098: Morogh Missions + -- Requires completing any 6 quests in Dun Morogh + -- Auto-complete, no turn-in location + [50098] = { + [1] = "Morogh Missions", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 1, -- Min level + [5] = 60, -- Quest level + [17] = 1, -- Zone (Dun Morogh) + [8] = { + "This quest requires completing any 6 quests in Dun Morogh. The quest will automatically complete once the objective is met.", + "Complete 6 quests in Dun Morogh" + }, + }, + + -- Quest 50100: Azuremyst Aid + -- Requires completing any 6 quests in Azuremyst Isle + -- Auto-complete, no turn-in location + [50100] = { + [1] = "Azuremyst Aid", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 1, -- Min level + [5] = 60, -- Quest level + [17] = 3524, -- Zone (Azuremyst Isle) + [8] = { + "This quest requires completing any 6 quests in Azuremyst Isle. The quest will automatically complete once the objective is met.", + "Complete 6 quests in Azuremyst Isle" + }, }, } diff --git a/Modules/Tracker/QuestieTracker.lua b/Modules/Tracker/QuestieTracker.lua index 54d66be..62bdb78 100644 --- a/Modules/Tracker/QuestieTracker.lua +++ b/Modules/Tracker/QuestieTracker.lua @@ -813,7 +813,7 @@ function QuestieTracker:Update() -- Check and measure Zone Label text width and update tracker width QuestieTracker:UpdateWidth(line.label:GetUnboundedStringWidth() + trackerMarginLeft + - trackerMarginRight) + trackerMarginRight) -- Set Zone Label and Line widths line.label:SetWidth(trackerBaseFrame:GetWidth() - trackerMarginLeft - trackerMarginRight) @@ -885,7 +885,7 @@ function QuestieTracker:Update() -- Set minimizable quest flag local isMinimizable = (complete == 1 or (#quest.Objectives == 0 and quest.isComplete == true)) and - completionText == nil + completionText == nil -- Handles the collapseCompletedQuests option from the Questie Config --> Tracker options. if Questie.db.profile.collapseCompletedQuests and isMinimizable and not timedQuest then @@ -927,7 +927,7 @@ function QuestieTracker:Update() -- Check and measure Quest Label text width and update tracker width QuestieTracker:UpdateWidth(line.label:GetUnboundedStringWidth() + questMarginLeft + - trackerMarginRight) + trackerMarginRight) -- Set Quest Label and Line widths line.label:SetWidth(trackerBaseFrame:GetWidth() - questMarginLeft - trackerMarginRight) @@ -949,7 +949,7 @@ function QuestieTracker:Update() local requiredItems = quest.requiredSourceItems local requiredItem = requiredItems and TrackerUtils:IsQuestItemUsable(requiredItems[1]) local isComplete = (quest.isComplete ~= true and #quest.Objectives == 0) or - quest.isComplete == true + quest.isComplete == true -- Occasionally a quest will be in a complete state and still have a usable Quest Item. Sometimes these usable -- items spawn an NPC that is needed to finish the quest. Or an item that teleports you to the quest finisher. @@ -1071,13 +1071,13 @@ function QuestieTracker:Update() -- Recheck and Remeasure Quest Label text width and update tracker width QuestieTracker:UpdateWidth(altButton.line.label:GetUnboundedStringWidth() + - questMarginLeft + trackerMarginRight + questItemButtonSize) + questMarginLeft + trackerMarginRight + questItemButtonSize) -- Reset Quest Title Label and linePool widths altButton.line.label:SetWidth(trackerBaseFrame:GetWidth() - - questMarginLeft - trackerMarginRight - questItemButtonSize) + questMarginLeft - trackerMarginRight - questItemButtonSize) altButton.line:SetWidth(altButton.line.label:GetWidth() + questMarginLeft + - questItemButtonSize) + questItemButtonSize) -- Re-compare largest text Label in the tracker with Secondary Button/Quest and current Label, then save widest width trackerLineWidth = math.max(trackerLineWidth, @@ -1091,11 +1091,11 @@ function QuestieTracker:Update() -- Recheck and Remeasure Quest Label text width and update tracker width QuestieTracker:UpdateWidth(altButton.line.label:GetUnboundedStringWidth() + - questMarginLeft + trackerMarginRight) + questMarginLeft + trackerMarginRight) -- Reset Quest Title Label and linePool widths altButton.line.label:SetWidth(trackerBaseFrame:GetWidth() - - questMarginLeft - trackerMarginRight) + questMarginLeft - trackerMarginRight) altButton.line:SetWidth(altButton.line.label:GetWidth() + questMarginLeft) -- Re-compare largest text Label in the tracker with current Label, then save widest width @@ -1240,15 +1240,15 @@ function QuestieTracker:Update() if (objective.Completed ~= true or (objective.Completed == true and #quest.Objectives > 1)) then local lineEnding lineEnding = tostring(objective.Collected) .. - "/" .. tostring(objective.Needed) + "/" .. tostring(objective.Needed) -- Set Objective text line.label:SetText(QuestieLib:GetRGBForObjective(objective) .. - objDesc .. ": " .. lineEnding) + objDesc .. ": " .. lineEnding) -- Check and measure Objective text and update tracker width QuestieTracker:UpdateWidth(line.label:GetUnboundedStringWidth() + - lineLabelWidthQBC) + lineLabelWidthQBC) -- Set Objective label and Line widths line.label:SetWidth(trackerBaseFrame:GetWidth() - lineLabelBaseFrameQBC) @@ -1267,11 +1267,11 @@ function QuestieTracker:Update() if line.label:GetUnboundedStringWidth() + objectiveMarginLeft < trackerMinLineWidth then -- Check and measure Blizzard Completion text and update tracker width QuestieTracker:UpdateWidth(line.label:GetUnboundedStringWidth() + - objectiveMarginLeft + trackerMarginRight) + objectiveMarginLeft + trackerMarginRight) -- Set Blizzard Completion label and Line widths line.label:SetWidth(trackerBaseFrame:GetWidth() - objectiveMarginLeft - - trackerMarginRight) + trackerMarginRight) line:SetWidth(line.label:GetWidth() + objectiveMarginLeft) -- Compare current text label and the largest text label in the Tracker, then save the widest width @@ -1280,12 +1280,12 @@ function QuestieTracker:Update() else -- Set Blizzard Completion Label and Line widths line.label:SetWidth(trackerBaseFrame:GetWidth() - objectiveMarginLeft - - trackerMarginRight) + trackerMarginRight) line:SetWidth(line.label:GetWrappedWidth() + objectiveMarginLeft) -- Blizzard Completion Text tends to be rather verbose. Allow text wrapping. line.label:SetHeight(line.label:GetStringHeight() * - line.label:GetNumLines()) + line.label:GetNumLines()) line:SetHeight(line.label:GetHeight()) -- Compare trackerLineWidth, trackerMinLineWidth and the current label, then save the widest width @@ -1343,11 +1343,11 @@ function QuestieTracker:Update() if line.label:GetUnboundedStringWidth() + objectiveMarginLeft < trackerMinLineWidth then -- Check and measure Blizzard Completion text and update tracker width QuestieTracker:UpdateWidth(line.label:GetUnboundedStringWidth() + - objectiveMarginLeft + trackerMarginRight) + objectiveMarginLeft + trackerMarginRight) -- Set Blizzard Completion label and Line widths line.label:SetWidth(trackerBaseFrame:GetWidth() - objectiveMarginLeft - - trackerMarginRight) + trackerMarginRight) line:SetWidth(line.label:GetWidth() + objectiveMarginLeft) -- Compare current text label and the largest text label in the Tracker, then save the widest width @@ -1356,7 +1356,7 @@ function QuestieTracker:Update() else -- Set Blizzard Completion Label and Line widths line.label:SetWidth(trackerBaseFrame:GetWidth() - objectiveMarginLeft - - trackerMarginRight) + trackerMarginRight) line:SetWidth(line.label:GetWrappedWidth() + objectiveMarginLeft) -- Blizzard Completion Text tends to be rather verbose. Allow text wrapping. @@ -1434,7 +1434,7 @@ function QuestieTracker:Update() for trackedId, _ in pairs(trackedAchievementIds) do achieveId, achieveName, _, _, _, _, _, achieveDescription, _, _, _, _, achieveComplete, _, _ = - GetAchievementInfo(trackedId) + GetAchievementInfo(trackedId) numCriteria = GetAchievementNumCriteria(trackedId) zoneName = "Achievements" @@ -1495,7 +1495,7 @@ function QuestieTracker:Update() -- Check and measure Zone Label text width and update tracker width QuestieTracker:UpdateWidth(line.label:GetUnboundedStringWidth() + trackerMarginLeft + - trackerMarginRight) + trackerMarginRight) -- Set Zone Label and Line widths line.label:SetWidth(trackerBaseFrame:GetWidth() - trackerMarginLeft - trackerMarginRight) @@ -1572,7 +1572,7 @@ function QuestieTracker:Update() -- Check and measure Achievement Label text width and update tracker width QuestieTracker:UpdateWidth(line.label:GetUnboundedStringWidth() + questMarginLeft + - trackerMarginRight) + trackerMarginRight) -- Set Achievement Label and Line widths line.label:SetWidth(trackerBaseFrame:GetWidth() - questMarginLeft - trackerMarginRight) @@ -1616,17 +1616,17 @@ function QuestieTracker:Update() -- Set Objective text local objDesc = achieve.Description:gsub("%.", "") line.label:SetText(QuestieLib:GetRGBForObjective({ Collected = 0, Needed = 1 }) .. - objDesc) + objDesc) -- If the line width is less than the minimum Tracker width then don't wrap text if line.label:GetUnboundedStringWidth() + objectiveMarginLeft < trackerMinLineWidth then -- Check and measure Objective text width and update tracker width QuestieTracker:UpdateWidth(line.label:GetUnboundedStringWidth() + objectiveMarginLeft + - trackerMarginRight) + trackerMarginRight) -- Set Objective Label and Line widths line.label:SetWidth(trackerBaseFrame:GetWidth() - objectiveMarginLeft - - trackerMarginRight) + trackerMarginRight) line:SetWidth(line.label:GetWidth() + objectiveMarginLeft) -- Compare largest text Label in the tracker with current Label, then save widest width @@ -1635,7 +1635,7 @@ function QuestieTracker:Update() else -- Set Label and Line widths line.label:SetWidth(trackerBaseFrame:GetWidth() - objectiveMarginLeft - - trackerMarginRight) + trackerMarginRight) line:SetWidth(line.label:GetWrappedWidth() + objectiveMarginLeft) -- TextWrap Objective and set height @@ -1655,7 +1655,7 @@ function QuestieTracker:Update() -- Achievements with number criteria for objCriteria = 1, numCriteria do local criteriaString, _, completed, quantityProgress, quantityNeeded, _, _, refId, quantityString = - GetAchievementCriteriaInfo(achieve.Id, objCriteria) + GetAchievementCriteriaInfo(achieve.Id, objCriteria) if ((Questie.db.profile.hideCompletedAchieveObjectives) and (not completed)) or (not Questie.db.profile.hideCompletedAchieveObjectives) then -- Get next line in linePool line = TrackerLinePool.GetNextLine() @@ -1705,30 +1705,36 @@ function QuestieTracker:Update() local lineEnding = tostring(quantityString) -- Set Objective text - line.label:SetText(QuestieLib:GetRGBForObjective({ Collected = quantityProgress, Needed = - quantityNeeded }) .. objDesc .. ": " .. lineEnding) + line.label:SetText(QuestieLib:GetRGBForObjective({ + Collected = quantityProgress, + Needed = + quantityNeeded + }) .. objDesc .. ": " .. lineEnding) -- Check and measure Objective text width and update tracker width QuestieTracker:UpdateWidth(line.label:GetUnboundedStringWidth() + - objectiveMarginLeft + trackerMarginRight) + objectiveMarginLeft + trackerMarginRight) -- Set Label width line.label:SetWidth(trackerBaseFrame:GetWidth() - objectiveMarginLeft - - trackerMarginRight) + trackerMarginRight) -- Split Objective description and Progress/Needed into seperate lines if (trackerLineWidth < line.label:GetUnboundedStringWidth() + objectiveMarginLeft) and (line.label:GetWidth() < line.label:GetUnboundedStringWidth() + 5) then -- Set Objective text - line.label:SetText(QuestieLib:GetRGBForObjective({ Collected = - quantityProgress, Needed = quantityNeeded }) .. objDesc .. ": ") + line.label:SetText(QuestieLib:GetRGBForObjective({ + Collected = + quantityProgress, + Needed = quantityNeeded + }) .. objDesc .. ": ") -- Check and measure Objective text width and update tracker width QuestieTracker:UpdateWidth(line.label:GetUnboundedStringWidth() + - objectiveMarginLeft + trackerMarginRight) + objectiveMarginLeft + trackerMarginRight) -- Set Label and Line widths line.label:SetWidth(trackerBaseFrame:GetWidth() - objectiveMarginLeft - - trackerMarginRight) + trackerMarginRight) line:SetWidth(line.label:GetWidth() + objectiveMarginLeft) -- Compare largest text Label in the tracker with current Label, then save widest width @@ -1763,16 +1769,19 @@ function QuestieTracker:Update() line.label:SetPoint("TOPLEFT", line, "TOPLEFT", objectiveMarginLeft, 0) -- Set Objective text - line.label:SetText(QuestieLib:GetRGBForObjective({ Collected = - quantityProgress, Needed = quantityNeeded }) .. " > " .. lineEnding) + line.label:SetText(QuestieLib:GetRGBForObjective({ + Collected = + quantityProgress, + Needed = quantityNeeded + }) .. " > " .. lineEnding) -- Check and measure Objective text width and update tracker width QuestieTracker:UpdateWidth(line.label:GetUnboundedStringWidth() + - objectiveMarginLeft + trackerMarginRight) + objectiveMarginLeft + trackerMarginRight) -- Set Label and Line widths line.label:SetWidth(trackerBaseFrame:GetWidth() - objectiveMarginLeft - - trackerMarginRight) + trackerMarginRight) line:SetWidth(line.label:GetWidth() + objectiveMarginLeft) else -- Set Line widths @@ -1788,10 +1797,10 @@ function QuestieTracker:Update() -- Set Objective text if completed then line.label:SetText(QuestieLib:GetRGBForObjective({ Collected = 1, Needed = 1 }) .. - objDesc) + objDesc) else line.label:SetText(QuestieLib:GetRGBForObjective({ Collected = 0, Needed = 1 }) .. - objDesc) + objDesc) end -- Set Objective criteria mark @@ -1805,11 +1814,11 @@ function QuestieTracker:Update() -- Check and measure Objective text width and update tracker width QuestieTracker:UpdateWidth(line.label:GetUnboundedStringWidth() + - objectiveMarginLeft + trackerMarginRight) + objectiveMarginLeft + trackerMarginRight) -- Set Objective Label and Line widths line.label:SetWidth(trackerBaseFrame:GetWidth() - objectiveMarginLeft - - trackerMarginRight) + trackerMarginRight) line:SetWidth(line.label:GetWidth() + objectiveMarginLeft) -- Compare largest text Label in the tracker with current Label, then save widest width @@ -2163,7 +2172,7 @@ function QuestieTracker:HookBaseTracker() return Questie.db.char.TrackedQuests[questId or -1] else return questId and QuestiePlayer.currentQuestlog[questId] and - (not Questie.db.char.AutoUntrackedQuests[questId]) + (not Questie.db.char.AutoUntrackedQuests[questId]) end end @@ -2266,8 +2275,23 @@ 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") + Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieTracker.RemoveQuestWatch] - by Blizzard", questId) end end else @@ -2368,7 +2392,7 @@ function QuestieTracker:AQW_Insert(index, expire) QuestieDebugOffer.QuestTracking(questId) else Questie:Error("Missing quest " .. - tostring(questId) .. "," .. tostring(expire) .. " during tracker update") + tostring(questId) .. "," .. tostring(expire) .. " during tracker update") end end end diff --git a/Questie-335.toc b/Questie-335.toc index c5a3c95..706d285 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.3 +## Version: 9.7.4 ## RequiredDeps: ## OptionalDeps: Ace3, CallbackHandler-1.0, HereBeDragons, LibDataBroker-1.1, LibDBIcon-1.0, LibSharedMedia-3.0, LibStub, LibUIDropDownMenu ## SavedVariables: QuestieConfig diff --git a/remote_url.txt b/remote_url.txt new file mode 100644 index 0000000..935c1a5 --- /dev/null +++ b/remote_url.txt @@ -0,0 +1 @@ +https://github.com/Xurkon/PE-Questie.git diff --git a/status.txt b/status.txt new file mode 100644 index 0000000..1ac8450 --- /dev/null +++ b/status.txt @@ -0,0 +1,5 @@ + M CHANGELOG.md + M Database/Zones/zoneDB.lua + M Modules/Arrow/QuestieArrow.lua +?? remote_url.txt +?? status.txt