diff --git a/CHANGELOG.md b/CHANGELOG.md index fffa59c..68c32c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,43 @@ # Changelog +## v9.9.2 — Final Pre-Refactor Release + +> ⚠️ **This is the final stable release before a major architectural refactoring.** All active features and quest data from previous releases are preserved. Future versions will introduce breaking changes to improve multi-server support, the database plugin system, and the zone registration API. + +### New Ebonhold Quests + +#### 🗺️ Azeroth + +| ID | Quest | Zone | Type | +|----|-------|------|------| +| 50187 | Western Plaguelands Trophy | Western Plaguelands | Kill 1 Rare (tracked rares) | + +### NPC Data + +- **classicNpcDB.lua** / **EbonholdNpcDB.lua**: Injected spawn coordinates for Western Plaguelands rare NPCs to support quest 50187. + +### Documentation + +- Completed a full deep-dive code audit of the entire addon codebase. +- Identified areas for improvement including server-agnostic design, version detection improvements, a plugin architecture for custom server databases, configurable level caps, and several code quality issues. +- Audit findings exported to the project research folder. + +--- + +## v9.9.1 + +### New Ebonhold Quests + +#### 🗺️ Azeroth + +| ID | Quest | Zone | Type | +|----|-------|------|------| +| 50057 | Brood of the Black Flight | Burning Steppes | Kill 30 Dragonkin (10 NPCs tracked) | + +### NPC Data + +- **EbonholdNpcDB.lua**: Injected spawn coordinates for 10 Dragonkin NPCs in Burning Steppes (IDs 7040-7049) to support quest 50057. + ## v9.9.0 ### New Ebonhold Quests diff --git a/Database/Ebonhold/Ebonhold/EbonholdNpcDB.lua b/Database/Ebonhold/Ebonhold/EbonholdNpcDB.lua index 5785b74..cee4572 100644 --- a/Database/Ebonhold/Ebonhold/EbonholdNpcDB.lua +++ b/Database/Ebonhold/Ebonhold/EbonholdNpcDB.lua @@ -4,6 +4,16 @@ EbonholdDB.npcData = EbonholdDB.npcData or { [32398] = { "King Ping", nil, nil, 71, 71, 2, { [495] = { { 25.6, 69.2 }, { 26.0, 63.8 }, { 26.6, 63.2 }, { 30.4, 71.4 }, { 30.8, 56.4 }, { 30.8, 70.8 }, { 31.0, 71.6 }, { 31.2, 56.6 }, { 31.2, 57.6 }, { 31.6, 77.4 }, { 31.8, 75.4 }, { 32.2, 75.8 }, { 32.6, 78.8 }, { 33.0, 80.2 }, { 33.4, 80.6 }, { 33.6, 80.2 }, { 33.6, 81.0 } } }, nil, 495, nil, nil, 12 }, [32377] = { "Perobas the Bloodthirster", nil, nil, 71, 71, 2, { [495] = { { 47.8, 5.8 }, { 50.0, 4.6 }, { 50.4, 4.4 }, { 50.6, 4.2 }, { 52.4, 10.8 }, { 53.0, 11.8 }, { 53.2, 12.6 }, { 53.8, 11.8 }, { 60.0, 19.8 }, { 60.6, 21.0 }, { 60.8, 22.0 }, { 61.0, 19.8 }, { 68.2, 17.8 }, { 68.4, 17.2 }, { 68.6, 16.8 }, { 69.4, 14.2 }, { 71.2, 13.2 }, { 71.2, 14.6 }, { 71.4, 14.0 }, { 71.6, 14.4 }, { 72.2, 13.4 } } }, nil, 495, nil, nil, 12 }, [32386] = { "Vigdis the War Maiden", nil, nil, 71, 71, 2, { [495] = { { 68.4, 46.0 }, { 68.4, 58.4 }, { 68.6, 48.6 }, { 68.8, 47.8 }, { 68.8, 59.0 }, { 70.0, 50.4 }, { 70.0, 56.8 }, { 70.0, 57.6 }, { 70.4, 49.2 }, { 70.6, 50.2 }, { 71.0, 52.2 }, { 71.0, 56.8 }, { 71.2, 55.4 }, { 71.2, 55.6 }, { 71.6, 44.4 }, { 71.6, 45.6 }, { 71.8, 47.0 }, { 72.2, 42.8 }, { 72.2, 48.6 }, { 72.2, 52.6 }, { 72.4, 44.8 }, { 72.4, 50.6 }, { 72.6, 46.0 }, { 72.6, 52.4 }, { 72.6, 61.2 }, { 72.8, 39.2 }, { 72.8, 41.0 }, { 72.8, 44.4 }, { 72.8, 49.0 }, { 72.8, 51.4 }, { 72.8, 61.8 }, { 73.0, 40.2 }, { 73.0, 48.0 }, { 73.2, 44.6 }, { 73.2, 53.2 }, { 73.6, 45.4 }, { 73.8, 49.6 }, { 73.8, 61.4 }, { 74.0, 52.6 }, { 74.2, 45.8 }, { 74.2, 47.8 }, { 74.2, 59.2 }, { 74.4, 54.6 }, { 74.4, 60.2 }, { 74.6, 50.0 }, { 74.6, 51.4 }, { 74.6, 54.8 }, { 74.8, 45.2 }, { 74.8, 56.6 }, { 74.8, 58.4 }, { 75.0, 48.2 }, { 75.0, 52.6 }, { 75.6, 45.2 }, { 76.2, 42.8 } } }, nil, 495, nil, nil, 12 }, + [7040] = { "Black Dragonspawn", nil, nil, 52, 53, 1, { [46] = { { 85.41, 27.2 }, { 83.57, 28.6 }, { 56.96, 61.45 }, { 87.21, 39.79 }, { 90.47, 37.34 }, { 82.35, 26.62 }, { 58.26, 64.5 }, { 87.2, 35.15 }, { 90.44, 38.44 }, { 75.54, 62.52 }, { 86.97, 28.34 }, { 88.48, 36.45 }, { 56.1, 64.35 }, { 92.19, 54.61 }, { 93.86, 55.37 }, { 92.78, 57.53 }, { 90.5, 54.29 }, { 56.33, 60.61 }, { 90.47, 52.28 }, { 86.82, 26.3 } } }, nil, 46, nil, nil, 103 }, + [7041] = { "Black Wyrmkin", nil, nil, 53, 54, 1, { [46] = { { 88.37, 39.97 }, { 77.87, 62.23 }, { 58.44, 60.82 }, { 88.93, 37.64 }, { 77.32, 61.9 }, { 76.7, 62.5 }, { 89.19, 35.49 }, { 57.51, 62.19 }, { 84.67, 28.67 }, { 84.71, 26.89 }, { 83.99, 26.9 }, { 91.38, 55.93 }, { 91.8, 53.16 }, { 92.77, 53.76 }, { 91.6, 50.35 }, { 88.29, 37.47 }, { 57.59, 60.56 }, { 77.14, 61.57 } } }, nil, 46, nil, nil, 103 }, + [7042] = { "Flamescale Dragonspawn", nil, nil, 56, 57, 1, { [46] = { { 20.84, 45.04 }, { 30.68, 61.44 }, { 22.3, 45.17 }, { 20.17, 48.79 }, { 33.8, 71.2 }, { 32.92, 66.48 }, { 34.68, 48.65 }, { 31.69, 66.49 }, { 32.59, 71.06 }, { 23.41, 47.57 }, { 31.19, 59.11 }, { 34.47, 68.92 } } }, nil, 46, nil, nil, 103 }, + [7043] = { "Flamescale Wyrmkin", nil, nil, 57, 58, 1, { [46] = { { 29.98, 60.53 }, { 37.2, 49.1 }, { 32.54, 62.37 }, { 32.36, 60.6 }, { 30.03, 62.81 }, { 21.44, 46.43 }, { 19.91, 45.36 }, { 33.7, 69.84 }, { 32.3, 69.47 }, { 30.91, 62.33 }, { 31.44, 61.33 }, { 36.9, 47.25 }, { 21.65, 47.41 }, { 35.75, 49.08 }, { 36.09, 48.57 } } }, nil, 46, nil, nil, 103 }, + [7044] = { "Black Drake", nil, nil, 50, 52, 1, { [46] = { { 89.94, 43.86 }, { 84.9, 28.47 }, { 89.5, 56.96 } } }, { [46] = { { { 89.96, 43.86 }, { 89.99, 44.74 }, { 90.07, 46.4 }, { 89.95, 48.47 }, { 90.54, 49.75 }, { 90.66, 50.69 }, { 90.68, 51.68 }, { 90.65, 52.73 }, { 90.02, 53.21 }, { 88.83, 53.58 }, { 89.03, 50.61 }, { 89.19, 49.39 }, { 89.45, 47.86 }, { 89.26, 46.76 }, { 89.02, 45.61 }, { 89.53, 44.81 }, { 89.83, 44.1 } }, { { 84.91, 28.51 }, { 85.56, 29.06 }, { 86.35, 29.73 }, { 87.56, 30.77 }, { 88.9, 31.47 }, { 89.65, 32.07 }, { 90.27, 33.21 }, { 90.62, 34.25 }, { 90.31, 35.58 }, { 89.95, 35.87 }, { 89.56, 35.54 }, { 88.91, 34.27 }, { 87.76, 32.12 }, { 86.74, 30.92 }, { 86.02, 30.68 }, { 85.66, 29.86 }, { 85.12, 28.91 } }, { { 89.02, 57.48 }, { 87.82, 58.51 }, { 87.0, 58.89 }, { 85.76, 59.23 }, { 85.0, 59.12 }, { 84.04, 58.85 }, { 83.4, 58.53 }, { 82.87, 58.41 }, { 82.43, 58.81 }, { 81.98, 59.75 }, { 81.96, 60.38 }, { 82.31, 61.04 }, { 82.66, 61.33 }, { 83.13, 61.42 }, { 83.8, 61.26 }, { 84.5, 61.08 }, { 85.1, 60.93 }, { 85.52, 60.7 }, { 86.17, 60.03 }, { 87.45, 59.17 }, { 89.49, 58.05 }, { 90.89, 58.15 }, { 91.89, 58.36 }, { 93.16, 57.98 }, { 93.75, 57.24 }, { 93.85, 56.88 }, { 93.89, 56.36 }, { 93.71, 55.73 }, { 93.32, 55.0 }, { 93.0, 54.44 }, { 92.27, 53.6 }, { 91.95, 53.03 }, { 91.74, 52.69 }, { 91.23, 52.48 }, { 90.74, 52.76 }, { 89.89, 54.41 }, { 89.78, 55.27 }, { 89.49, 56.53 } } } }, 46, nil, nil, 103 }, + [7045] = { "Scalding Drake", nil, nil, 53, 55, 1, { [46] = { { 60.28, 59.02 }, { 63.73, 58.42 } } }, { [46] = { { { 60.18, 59.02 }, { 60.13, 59.32 }, { 60.02, 59.68 }, { 59.67, 60.38 }, { 58.9, 61.33 }, { 57.97, 62.36 }, { 57.46, 63.02 }, { 56.95, 64.35 }, { 55.79, 63.79 }, { 55.23, 63.83 }, { 54.46, 63.8 }, { 53.51, 63.66 }, { 51.91, 63.62 }, { 51.46, 63.79 }, { 50.95, 63.56 }, { 50.49, 62.87 }, { 50.29, 62.6 }, { 50.09, 62.27 }, { 49.99, 62.04 }, { 49.74, 61.59 }, { 48.89, 60.43 }, { 49.46, 59.95 }, { 49.9, 59.25 }, { 50.05, 58.81 }, { 50.42, 58.39 }, { 50.87, 58.31 }, { 51.05, 58.04 }, { 51.72, 57.47 }, { 52.35, 57.39 }, { 52.58, 57.43 }, { 53.53, 57.55 }, { 54.36, 58.41 }, { 54.63, 58.96 }, { 55.16, 59.32 }, { 55.74, 59.18 }, { 56.21, 58.98 }, { 56.72, 58.49 }, { 57.95, 58.86 }, { 58.45, 59.35 }, { 59.09, 59.64 }, { 59.95, 59.65 } }, { { 63.77, 58.53 }, { 64.46, 59.11 }, { 65.35, 59.82 }, { 65.8, 60.29 }, { 66.53, 60.57 }, { 66.87, 60.26 }, { 67.46, 59.59 }, { 68.03, 59.47 }, { 68.4, 59.38 }, { 68.77, 59.3 }, { 69.26, 59.24 }, { 69.86, 58.96 }, { 71.01, 58.59 }, { 71.65, 58.59 }, { 72.37, 59.25 }, { 72.45, 58.33 }, { 71.98, 57.62 }, { 71.52, 57.81 }, { 70.81, 58.33 }, { 69.99, 58.71 }, { 68.45, 59.34 }, { 68.08, 59.45 }, { 67.54, 59.46 }, { 66.7, 59.47 }, { 65.85, 59.48 }, { 65.27, 59.42 }, { 64.78, 59.23 }, { 64.3, 58.88 } } } }, 46, nil, nil, 103 }, + [7046] = { "Searscale Drake", nil, nil, 56, 58, 1, { [46] = { { 17.44, 52.46 }, { 32.02, 61.97 }, { 24.54, 67.17 } } }, { [46] = { { { 17.32, 52.66 }, { 17.01, 53.57 }, { 17.04, 55.22 }, { 17.38, 56.98 }, { 17.5, 57.64 }, { 18.0, 58.4 }, { 18.72, 58.97 }, { 19.33, 59.4 }, { 19.75, 59.56 }, { 19.06, 59.25 }, { 17.83, 58.1 }, { 17.43, 57.24 }, { 17.38, 56.3 }, { 17.32, 54.62 }, { 17.72, 53.02 }, { 18.02, 51.2 }, { 17.46, 49.27 }, { 17.71, 48.01 }, { 18.11, 47.13 }, { 18.58, 46.92 }, { 18.74, 47.4 }, { 18.85, 48.27 }, { 18.87, 48.73 }, { 18.89, 49.72 }, { 18.44, 50.69 }, { 17.62, 52.07 } } } }, 46, nil, nil, 103 }, + [7047] = { "Black Broodling", nil, nil, 51, 52, 0, { [46] = { { 86.92, 30.55 }, { 84.87, 31.86 }, { 91.86, 38.48 }, { 81.01, 28.2 }, { 91.67, 35.54 }, { 81.37, 26.48 }, { 88.32, 29.78 }, { 87.8, 33.45 }, { 91.59, 33.36 }, { 89.47, 43.89 }, { 90.53, 45.22 }, { 90.48, 50.92 }, { 90.57, 47.39 }, { 84.59, 62.1 } } }, nil, 46, nil, nil, 103 }, + [7048] = { "Scalding Broodling", nil, nil, 53, 54, 0, { [46] = { { 57.59, 31.63 }, { 38.74, 46.15 }, { 61.13, 31.24 }, { 55.73, 64.44 }, { 63.78, 57.27 }, { 73.18, 27.12 }, { 70.94, 62.13 }, { 59.86, 63.91 }, { 37.81, 62.51 }, { 72.4, 28.17 }, { 34.62, 55.43 }, { 78.39, 27.5 }, { 40.92, 48.81 }, { 52.67, 26.04 }, { 59.19, 32.29 }, { 64.36, 60.61 } } }, nil, 46, nil, nil, 103 }, + [7049] = { "Flamescale Broodling", nil, nil, 55, 56, 0, { [46] = { { 24.82, 47.18 }, { 24.33, 67.37 }, { 28.66, 57.82 }, { 22.48, 68.9 }, { 23.35, 70.57 }, { 22.32, 58.87 }, { 25.37, 45.74 }, { 16.96, 55.36 } } }, nil, 46, nil, nil, 103 }, } -- Backward compatibility diff --git a/Database/Ebonhold/Ebonhold/EbonholdQuestDB.lua b/Database/Ebonhold/Ebonhold/EbonholdQuestDB.lua index a593bc9..19fe253 100644 --- a/Database/Ebonhold/Ebonhold/EbonholdQuestDB.lua +++ b/Database/Ebonhold/Ebonhold/EbonholdQuestDB.lua @@ -2,6 +2,63 @@ local EbonholdDB = QuestieLoader:CreateModule("EbonholdDB") EbonholdDB.questData = EbonholdDB.questData or { + -- Quest 50023: Elemental Frostfall + -- Kill 30 elementals in Winterspring + [50023] = { + [1] = "Elemental Frostfall", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 55, -- Min level + [5] = 60, -- Quest level + [17] = 618, -- Zone (Winterspring) + [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 Winterspring" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + { -- [5] killCreditObjective + { + -- 2 elemental NPCs in Winterspring + { 14457, 14458 }, + 14457, -- RootId: Princess Tempestria + "Elemental slain" + } + } + }, + + [30] = 30, -- Kill count + }, + -- Quest 50057: Brood of the Black Flight + -- Started by object 600600 + [50057] = { + [1] = "Brood of the Black Flight", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 55, -- Quest level + [5] = 48, -- Min level + [17] = 46, -- Zone (Burning Steppes) + [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 Dragonkin in the Burning Steppes." + }, + [10] = { + nil, -- [1] creatureObjective + nil, -- [2] objectObjective + nil, -- [3] itemObjective + nil, -- [4] reputationObjective + { -- [5] killCreditObjective + { + { 7040, 7041, 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049 }, -- IdList + 7040, -- RootId (Black Dragonspawn) + "Dragonkin slain" -- Text + } + } + }, + [30] = 30, -- Kill count + }, + -- Quest 50026: Elemental Balance -- Started by object 600600, kills of NPCs 17156 or 17157 count (both are elementals) [50026] = { @@ -121,6 +178,36 @@ EbonholdDB.questData = EbonholdDB.questData or { [30] = 1, -- Kill count (only 1 rare needed) }, + -- Quest 50187: Western Plaguelands Trophy + -- Kill 1 rare in Western Plaguelands + [50187] = { + [1] = "Western Plaguelands Trophy", -- Quest name + [2] = { nil, { 600600 } }, -- startedBy: {{npcIds}, {objectIds}, {itemIds}} + [4] = 50, -- Min level + [5] = 55, -- Quest level + [17] = 28, -- Zone (Western Plaguelands) + [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 Western Plaguelands" + }, + [10] = { + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + { -- [5] killCreditObjective + { + -- 11 rare NPCs in Western Plaguelands + { 1837, 1838, 1839, 1841, 1843, 1844, 1847, 1848, 1850, 1851, 1885 }, + 1848, -- RootId: Lord Maldazzar (representative rare) + "Rare slain" + } + } + }, + + [30] = 1, -- Kill count (only 1 rare needed) + }, + -- Quest 50160: Redridge Trophy -- Kill 1 rare in Redridge Mountains [50160] = { @@ -1616,19 +1703,20 @@ EbonholdDB.questData = EbonholdDB.questData or { "Kill Sandstone Giants" }, [10] = { - nil, -- [1] creatureObjective (not used) - nil, -- [2] objectObjective (not used) - nil, -- [3] itemObjective (not used) - nil, -- [4] reputationObjective (not used) - { -- [5] killCreditObjective + nil, -- [1] creatureObjective (not used) + nil, -- [2] objectObjective (not used) + nil, -- [3] itemObjective (not used) + nil, -- [4] reputationObjective (not used) + { -- [5] killCreditObjective { - { 5469 }, -- All NPC IDs - 5469, -- Root ID (Icon/Text) + { 5466, 5467, 5469, 5470 }, -- All giant NPC IDs: Coast Strider, Deep Dweller, Dune Smasher, Raging Dune Smasher + 5469, -- Root ID (Icon/Text) "Sandstone Giants slain" } } }, [30] = 30, -- Objective Count + }, } diff --git a/Questie-335.toc b/Questie-335.toc index 6621d61..25c0604 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.9.0 +## Version: 9.9.2 ## 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 77cb2f6..ddcea49 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # Questie (3.3.5a) -![Version](https://img.shields.io/badge/version-v9.9.0-blue.svg?style=for-the-badge) +![Version](https://img.shields.io/badge/version-v9.9.2-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)