From 7e3ad9885306c5e0445ecb06c5815023e249971f Mon Sep 17 00:00:00 2001 From: Moust4ki Date: Thu, 15 Oct 2026 15:11:28 +0200 Subject: [PATCH 1/5] Leveling guides: the floor key, read from the route's notes Co-Authored-By: Claude Opus 5.5 --- Ding/Guides/Leveling/Alliance/01.lua | 70 ++++++++++++------------ Ding/Guides/Leveling/Alliance/02.lua | 58 ++++++++++---------- Ding/Guides/Leveling/Alliance/03.lua | 48 ++++++++--------- Ding/Guides/Leveling/Alliance/05.lua | 12 ++--- Ding/Guides/Leveling/Alliance/06.lua | 8 +-- Ding/Guides/Leveling/Alliance/07.lua | 26 ++++----- Ding/Guides/Leveling/Alliance/08.lua | 2 +- Ding/Guides/Leveling/Alliance/09.lua | 10 ++-- Ding/Guides/Leveling/Alliance/10.lua | 18 +++---- Ding/Guides/Leveling/Alliance/11.lua | 22 ++++---- Ding/Guides/Leveling/Alliance/12.lua | 10 ++-- Ding/Guides/Leveling/Alliance/13.lua | 4 +- Ding/Guides/Leveling/Alliance/14.lua | 20 +++---- Ding/Guides/Leveling/Alliance/16.lua | 16 +++--- Ding/Guides/Leveling/Alliance/17.lua | 22 ++++---- Ding/Guides/Leveling/Alliance/18.lua | 2 +- Ding/Guides/Leveling/Alliance/19.lua | 26 ++++----- Ding/Guides/Leveling/Alliance/20.lua | 14 ++--- Ding/Guides/Leveling/Alliance/21.lua | 2 +- Ding/Guides/Leveling/Alliance/22.lua | 6 +-- Ding/Guides/Leveling/Alliance/23.lua | 4 +- Ding/Guides/Leveling/Alliance/24.lua | 2 +- Ding/Guides/Leveling/Alliance/25.lua | 22 ++++---- Ding/Guides/Leveling/Alliance/26.lua | 4 +- Ding/Guides/Leveling/Alliance/28.lua | 26 ++++----- Ding/Guides/Leveling/Alliance/30.lua | 2 +- Ding/Guides/Leveling/Alliance/32.lua | 4 +- Ding/Guides/Leveling/Alliance/33.lua | 16 +++--- Ding/Guides/Leveling/Alliance/34.lua | 2 +- Ding/Guides/Leveling/Alliance/35.lua | 2 +- Ding/Guides/Leveling/Alliance/36.lua | 2 +- Ding/Guides/Leveling/Alliance/38.lua | 8 +-- Ding/Guides/Leveling/Alliance/39.lua | 12 ++--- Ding/Guides/Leveling/Alliance/40.lua | 6 +-- Ding/Guides/Leveling/Alliance/41.lua | 16 +++--- Ding/Guides/Leveling/Alliance/43.lua | 6 +-- Ding/Guides/Leveling/Horde/01.lua | 58 ++++++++++---------- Ding/Guides/Leveling/Horde/02.lua | 16 +++--- Ding/Guides/Leveling/Horde/03.lua | 30 +++++------ Ding/Guides/Leveling/Horde/04.lua | 16 +++--- Ding/Guides/Leveling/Horde/05.lua | 26 ++++----- Ding/Guides/Leveling/Horde/06.lua | 4 +- Ding/Guides/Leveling/Horde/07.lua | 2 +- Ding/Guides/Leveling/Horde/08.lua | 2 +- Ding/Guides/Leveling/Horde/10.lua | 2 +- Ding/Guides/Leveling/Horde/13.lua | 2 +- Ding/Guides/Leveling/Horde/14.lua | 8 +-- Ding/Guides/Leveling/Horde/15.lua | 2 +- Ding/Guides/Leveling/Horde/16.lua | 10 ++-- Ding/Guides/Leveling/Horde/18.lua | 12 ++--- Ding/Guides/Leveling/Horde/19.lua | 10 ++-- Ding/Guides/Leveling/Horde/20.lua | 20 +++---- Ding/Guides/Leveling/Horde/25.lua | 4 +- Ding/Guides/Leveling/Horde/26.lua | 8 +-- Ding/Guides/Leveling/Horde/27.lua | 4 +- Ding/Guides/Leveling/Horde/28.lua | 4 +- Ding/Guides/Leveling/Horde/30.lua | 2 +- Ding/Guides/Leveling/Horde/31.lua | 8 +-- Ding/Guides/Leveling/Horde/33.lua | 8 +-- Ding/Guides/Leveling/Horde/35.lua | 2 +- Ding/Guides/Leveling/Horde/36.lua | 2 +- Ding/Guides/Leveling/Horde/38.lua | 8 +-- Ding/Guides/Leveling/Horde/39.lua | 18 +++---- Ding/Guides/Leveling/Horde/41.lua | 6 +-- tools/README.md | 1 + tools/guide_floor.lua | 80 ++++++++++++++++++++++++++++ tools/write_leveling.lua | 7 +++ 67 files changed, 500 insertions(+), 412 deletions(-) create mode 100644 tools/guide_floor.lua diff --git a/Ding/Guides/Leveling/Alliance/01.lua b/Ding/Guides/Leveling/Alliance/01.lua index 9fddf9e..8e921b7 100644 --- a/Ding/Guides/Leveling/Alliance/01.lua +++ b/Ding/Guides/Leveling/Alliance/01.lua @@ -164,7 +164,7 @@ Ding.RegisterGuide({ { accept = 96627, races = { "Human" } }, -- level 5 { accept = 5623, classes = { "PRIEST" }, -- level 5 note = "The NPC is indoors at street level." }, - { turnin = 3905, when = { log = 3905 }, -- level 5 + { turnin = 3905, floor = "top", when = { log = 3905 }, -- level 5 note = "Climb to the highest floor of the building." }, { accept = 2158 }, -- level 5 { turnin = 96627, races = { "Human" } }, -- level 5 @@ -174,24 +174,24 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { turnin = 2158, -- level 6 note = "The NPC is indoors." }, - { train = true, talk = 906, classes = { "WARLOCK" }, -- level 6 + { train = true, floor = "down", talk = 906, classes = { "WARLOCK" }, -- level 6 note = "The NPC waits on the lower level, indoors." }, - { vendor = true, talk = 6374, classes = { "WARLOCK" }, -- level 6 + { floor = "down", vendor = true, talk = 6374, classes = { "WARLOCK" }, -- level 6 note = "The NPC waits on the lower level, indoors." }, - { train = true, talk = 328, classes = { "MAGE" }, -- level 6 + { train = true, floor = "up", talk = 328, classes = { "MAGE" }, -- level 6 note = "The NPC is indoors, one floor up." }, - { turnin = 5623, accept = 5624, classes = { "PRIEST" }, -- level 6 + { turnin = 5623, accept = 5624, floor = "up", classes = { "PRIEST" }, -- level 6 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 377, classes = { "PRIEST" }, -- level 6 + { train = true, floor = "up", talk = 377, classes = { "PRIEST" }, -- level 6 note = "The NPC is indoors, one floor up." }, { complete = 5624, classes = { "PRIEST" }, -- level 6 note = "Heal Guard Roberts using Lesser Heal (Rank 2). Buff Guard Roberts with Power Word: Fortitude." }, - { turnin = 5624, when = { ready = 5624 }, classes = { "PRIEST" }, -- level 6 + { turnin = 5624, floor = "up", when = { ready = 5624 }, classes = { "PRIEST" }, -- level 6 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 917, classes = { "ROGUE" }, -- level 6 + { train = true, floor = "up", talk = 917, classes = { "ROGUE" }, -- level 6 note = "The NPC is indoors, one floor up." }, { go = { 1429, 43.36, 65.49 }, classes = { "WARRIOR", "ROGUE" }, text = "Learn First Aid from the trainer" }, -- level 6 - { talk = 2329, classes = { "WARRIOR", "ROGUE" }, -- level 6 + { floor = "up", talk = 2329, classes = { "WARRIOR", "ROGUE" }, -- level 6 note = "The NPC is indoors, one floor up. Do it only if you can." }, { train = true, talk = 927, classes = { "PALADIN" } }, -- level 6 { train = true, talk = 913, classes = { "WARRIOR" } }, -- level 6 @@ -239,15 +239,15 @@ Ding.RegisterGuide({ { complete = 99128, races = { "Human" } }, -- level 8 { turnin = 99128, races = { "Human" } }, -- level 8 { accept = 99129, races = { "Human" } }, -- level 8 - { train = true, talk = 906, classes = { "WARLOCK" }, -- level 8 + { train = true, floor = "down", talk = 906, classes = { "WARLOCK" }, -- level 8 note = "The NPC waits on the lower level, indoors." }, - { vendor = true, talk = 6374, classes = { "WARLOCK" }, -- level 8 + { floor = "down", vendor = true, talk = 6374, classes = { "WARLOCK" }, -- level 8 note = "The NPC waits on the lower level, indoors." }, - { train = true, talk = 328, classes = { "MAGE" }, -- level 8 + { train = true, floor = "up", talk = 328, classes = { "MAGE" }, -- level 8 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 377, classes = { "PRIEST" }, -- level 8 + { train = true, floor = "up", talk = 377, classes = { "PRIEST" }, -- level 8 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 917, classes = { "ROGUE" }, -- level 8 + { train = true, floor = "up", talk = 917, classes = { "ROGUE" }, -- level 8 note = "The NPC is indoors, one floor up." }, { train = true, talk = 927, classes = { "PALADIN" } }, -- level 8 { train = true, talk = 913, classes = { "WARRIOR" } }, -- level 8 @@ -292,21 +292,21 @@ Ding.RegisterGuide({ { turnin = { 39, 76 }, accept = 239 }, -- level 9 { accept = 1097, -- level 10 note = "The NPC is indoors." }, - { train = true, talk = 906, classes = { "WARLOCK" }, -- level 10 + { train = true, floor = "down", talk = 906, classes = { "WARLOCK" }, -- level 10 note = "The NPC waits on the lower level, indoors." }, - { accept = 1685, classes = { "WARLOCK" }, -- level 10 + { accept = 1685, floor = "down", classes = { "WARLOCK" }, -- level 10 note = "The NPC waits on the lower level, indoors." }, - { vendor = true, talk = 6374, classes = { "WARLOCK" }, -- level 10 + { floor = "down", vendor = true, talk = 6374, classes = { "WARLOCK" }, -- level 10 note = "The NPC waits on the lower level, indoors." }, - { train = true, talk = 328, classes = { "MAGE" }, -- level 10 + { train = true, floor = "up", talk = 328, classes = { "MAGE" }, -- level 10 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 377, classes = { "PRIEST" }, -- level 10 + { train = true, floor = "up", talk = 377, classes = { "PRIEST" }, -- level 10 note = "The NPC is indoors, one floor up." }, - { accept = 5635, classes = { "PRIEST" }, -- level 10 + { accept = 5635, floor = "up", classes = { "PRIEST" }, -- level 10 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 917, classes = { "ROGUE" }, -- level 10 + { train = true, floor = "up", talk = 917, classes = { "ROGUE" }, -- level 10 note = "The NPC is indoors, one floor up." }, - { accept = 2205, classes = { "ROGUE" }, -- level 10 + { accept = 2205, floor = "up", classes = { "ROGUE" }, -- level 10 note = "The NPC is indoors, one floor up." }, { train = true, talk = 927, classes = { "PALADIN" } }, -- level 10 { train = true, talk = 913, classes = { "WARRIOR" } }, -- level 10 @@ -344,22 +344,22 @@ Ding.RegisterGuide({ { talk = 11867, classes = { "WARRIOR", "PALADIN", "ROGUE", "PRIEST", "MAGE", "WARLOCK" }, -- level 10 note = "The NPC is indoors." }, { go = { 1453, 42.28, 81.85 }, classes = { "WARLOCK" }, text = "Head indoors" }, -- level 10 - { turnin = 1685, accept = 1688, classes = { "WARLOCK" }, -- level 10 + { turnin = 1685, accept = 1688, floor = "down", classes = { "WARLOCK" }, -- level 10 note = "The NPC waits on the lower level, indoors." }, { level = 11, patrol = { { 1429, 70.25, 76.35 }, { 1429, 68.37, 75.46 }, { 1429, 68.23, 77.76 }, { 1429, 66.94, 80.17 }, { 1429, 68.44, 82.64 }, { 1429, 70.55, 80.55 }, { 1429, 72.06, 77.45 } }, why = { kind = "level", levels = { 10, 15 } } }, -- level 10 { complete = 1688, classes = { "WARLOCK" }, -- level 10 note = "The target is indoors." }, { go = { 1453, 42.28, 81.85 }, classes = { "WARLOCK" }, text = "Head indoors" }, -- level 10 - { turnin = 1688, when = { ready = 1688 }, classes = { "WARLOCK" }, -- level 10 + { turnin = 1688, floor = "down", when = { ready = 1688 }, classes = { "WARLOCK" }, -- level 10 note = "The NPC waits on the lower level, indoors." }, { accept = 1689, when = { done = 1688 }, classes = { "WARLOCK" } }, -- level 10 - { complete = 1689, useitem = 6928, when = { log = 1689 }, classes = { "WARLOCK" }, -- level 10 + { complete = 1689, floor = "down", useitem = 6928, when = { log = 1689 }, classes = { "WARLOCK" }, -- level 10 note = "Step onto the pink rune. Look within the tomb. The target is on the lower level, indoors." }, { turnin = 1689, when = { ready = 1689 }, classes = { "WARLOCK" }, -- level 10 note = "The NPC stands one level over the crypt. The NPC waits on the lower level, indoors." }, { sethearth = "Stormwind City", talk = 6740, -- level 11 note = "The NPC is indoors." }, - { turnin = 2205, classes = { "ROGUE" }, -- level 11 + { turnin = 2205, floor = "up", classes = { "ROGUE" }, -- level 11 note = "The NPC is indoors, one floor up." }, { turnin = 6281, accept = 6261, -- level 11 note = "The NPC is indoors." }, @@ -382,7 +382,7 @@ Ding.RegisterGuide({ { talk = 5514, buy = { { 2901, 1, 5514 } }, classes = { "WARRIOR", "PALADIN", "ROGUE" }, -- level 11 note = "The NPC is indoors." }, { go = { 1453, 59.3, 37.8 }, classes = { "WARRIOR", "PALADIN", "ROGUE" }, text = "Learn Mining from the trainer" }, -- level 11 - { talk = 5513, classes = { "WARRIOR", "PALADIN", "ROGUE" }, -- level 11 + { floor = "up", talk = 5513, classes = { "WARRIOR", "PALADIN", "ROGUE" }, -- level 11 note = "The NPC waits indoors, a floor above the entrance." }, { turnin = 1097, accept = 353, why = { kind = "carry", quest = 353, seconds = 6360, xp = 1100 }, -- level 11 note = "The NPC is indoors." }, @@ -424,7 +424,7 @@ Ding.RegisterGuide({ { turnin = 312, elite = true, sticky = 287, -- level 11 note = "Steer clear of the elite yeti patrolling close by. The NPC is up on the summit." }, { go = { 1426, 24.9, 50.94 }, text = "Go into the cavern" }, -- level 11 - { complete = 287, -- level 11 + { complete = 287, floor = "down", -- level 11 note = "Head to the lower level of the cavern." }, { complete = 287, -- level 11 note = "Targets are in the cavern and around its entrance too." }, @@ -479,7 +479,7 @@ Ding.RegisterGuide({ { complete = 417, -- level 12 note = "The target is a pale bear. This one roams, so scan the surrounding area." }, { turnin = 417 }, -- level 12 - { turnin = 353, -- level 12 + { turnin = 353, floor = "up", -- level 12 note = "Cross the tunnel to reach the NPC. The NPC is indoors, one floor up." }, { go = { 1432, 33.9, 50.98 }, fly = true, talk = 1572, text = "Fly to Thelsamar" }, -- level 12 { accept = 418, -- level 12 @@ -488,7 +488,7 @@ Ding.RegisterGuide({ note = "The NPC patrols a long route; look along it." }, { complete = 416, -- level 12 note = "The targets are rat-like humanoids." }, - { turnin = 1339, accept = 1338, -- level 12 + { turnin = 1339, accept = 1338, floor = "up", -- level 12 note = "The NPC is indoors, one floor up." }, { collect = { { 3172, 3 } }, keep = 3172 }, -- level 12 { collect = { { 3174, 3 } }, keep = 3174, -- level 12 @@ -499,7 +499,7 @@ Ding.RegisterGuide({ { turnin = 418, when = { ready = 418 }, -- level 12 note = "The NPC is indoors." }, { accept = 224 }, -- level 12 - { accept = 267, sticky = 224, -- level 12 + { accept = 267, floor = "up", sticky = 224, -- level 12 note = "The NPC is indoors, one floor up." }, { go = { 1432, 29.26, 66.68 }, text = "Take the road to where the trail starts" }, -- level 12 { complete = 267 }, -- level 12 @@ -508,14 +508,14 @@ Ding.RegisterGuide({ note = "A class quest coming up requires this." }, { go = { 1432, 30.62, 69.75 }, text = "Exit Stonesplinter Valley, then stay on the road" }, -- level 13 { turnin = 224 }, -- level 13 - { turnin = 267, -- level 13 + { turnin = 267, floor = "up", -- level 13 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 5498, classes = { "MAGE" }, -- level 13 + { train = true, floor = "top", talk = 5498, classes = { "MAGE" }, -- level 13 note = "The NPC waits on the tower's highest floor." }, { go = { 1453, 42.29, 81.76 }, classes = { "WARLOCK" }, text = "Head indoors", -- level 13 note = "The NPC waits on the lower level, indoors." }, { train = true, talk = 461, classes = { "WARLOCK" } }, -- level 13 - { vendor = true, talk = 5520, classes = { "WARLOCK" }, -- level 13 + { floor = "down", vendor = true, talk = 5520, classes = { "WARLOCK" }, -- level 13 note = "The NPC waits on the lower level, indoors." }, { go = { 1453, 52.93, 51.05 }, classes = { "PRIEST" }, text = "Head indoors", -- level 13 note = "This one roams, so scan the surrounding area. The NPC is indoors." }, @@ -532,7 +532,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { turnin = 1338 }, -- level 13 { accept = 94773, races = { "Human" }, classes = { "PRIEST" } }, -- level 13 - { train = true, talk = 5479, classes = { "WARRIOR" }, -- level 13 + { train = true, floor = "up", talk = 5479, classes = { "WARRIOR" }, -- level 13 note = "The NPC is indoors, one floor up." }, { train = true, talk = 918, classes = { "ROGUE" } }, -- level 13 { turnin = 1643, accept = 1644, classes = { "PALADIN" } }, -- level 13 diff --git a/Ding/Guides/Leveling/Alliance/02.lua b/Ding/Guides/Leveling/Alliance/02.lua index edce8c7..5e14408 100644 --- a/Ding/Guides/Leveling/Alliance/02.lua +++ b/Ding/Guides/Leveling/Alliance/02.lua @@ -108,9 +108,9 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { train = true, talk = 944, races = { "Gnome" }, classes = { "MAGE" }, -- level 4 note = "The NPC is indoors." }, - { turnin = 3115, accept = 1599, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 4 + { turnin = 3115, accept = 1599, floor = "up", races = { "Gnome" }, classes = { "WARLOCK" }, -- level 4 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 460, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 4 + { train = true, floor = "up", talk = 460, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 4 note = "The NPC is indoors, one floor up." }, { go = { 1426, 28.82, 69.03 }, text = "Step back outside" }, -- level 4 { turnin = 170 }, -- level 4 @@ -124,7 +124,7 @@ Ding.RegisterGuide({ { talk = 6491, races = { "Gnome" }, classes = { "WARLOCK" } }, -- level 4 { go = { 1426, 26.84, 79.8 }, races = { "Gnome" }, classes = { "WARLOCK" }, text = "Head out of the cave" }, -- level 4 { go = { 1426, 28.84, 69.11 }, races = { "Gnome" }, classes = { "WARLOCK" }, text = "Head indoors" }, -- level 4 - { turnin = 1599, when = { ready = 1599 }, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 4 + { turnin = 1599, floor = "up", when = { ready = 1599 }, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 4 note = "The NPC is indoors, one floor up." }, { vendor = true, talk = 6376, races = { "Gnome" }, classes = { "WARLOCK" } }, -- level 4 { go = { 1426, 28.82, 69.03 }, text = "Step back outside" }, -- level 4 @@ -164,7 +164,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { train = true, talk = 944, races = { "Gnome" }, classes = { "MAGE" }, -- level 6 note = "The NPC is indoors." }, - { train = true, talk = 460, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 6 + { train = true, floor = "up", talk = 460, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 6 note = "The NPC is indoors, one floor up." }, { go = { 1426, 28.84, 69.11 }, text = "Step back outside" }, -- level 6 { turnin = 282, accept = 420 }, -- level 6 @@ -196,7 +196,7 @@ Ding.RegisterGuide({ { accept = 5541 }, -- level 6 { go = { 1426, 49.97, 50.25 }, classes = { "WARRIOR", "PALADIN", "ROGUE" }, text = "Learn Mining from the trainer" }, -- level 6 { turnin = 96628, races = { "Dwarf", "Gnome" } }, -- level 6 - { talk = 5392, sticky = 317, classes = { "WARRIOR", "PALADIN", "ROGUE" }, -- level 6 + { floor = "down", talk = 5392, sticky = 317, classes = { "WARRIOR", "PALADIN", "ROGUE" }, -- level 6 note = "The NPC waits on the lower level, indoors." }, { complete = 5541 }, -- level 6 { complete = 313, -- level 6 @@ -218,9 +218,9 @@ Ding.RegisterGuide({ { train = true, talk = 1231, races = { "Dwarf" }, classes = { "HUNTER" } }, -- level 7 { train = true, talk = 5612, races = { "Gnome" }, classes = { "WARLOCK" } }, -- level 7 { vendor = true, talk = 6328, races = { "Gnome" }, classes = { "WARLOCK" } }, -- level 7 - { train = true, talk = 1228, races = { "Gnome" }, classes = { "MAGE" }, -- level 7 + { train = true, floor = "up", talk = 1228, races = { "Gnome" }, classes = { "MAGE" }, -- level 7 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 1232, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 7 + { train = true, floor = "up", talk = 1232, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 7 note = "The NPC is indoors, one floor up." }, { train = true, talk = 1226, races = { "Dwarf" }, classes = { "PRIEST" }, -- level 7 note = "The NPC is indoors." }, @@ -258,14 +258,14 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { talk = 1247, buy = { { 2686, 1, 1247 } }, -- level 8 note = "The NPC is indoors." }, - { turnin = 310, accept = 311, -- level 8 + { turnin = 310, accept = 311, floor = "down", -- level 8 note = "Give it a few seconds. The object is on the lower level, indoors." }, { go = { 1426, 41.95, 47.28 }, text = "Stay on the trail" }, -- level 8 { turnin = 311 }, -- level 8 { turnin = { 319, 315 }, accept = { 320, 413 } }, -- level 8 { level = 9, sticky = 287, patrol = { { 1426, 30.44, 42.25 }, { 1426, 28.05, 42.14 }, { 1426, 25.75, 46.37 }, { 1426, 28.65, 47.45 }, { 1426, 32.57, 47.84 }, { 1426, 35.43, 46.46 }, { 1426, 37.84, 42.37 }, { 1426, 31.56, 38.05 }, { 1426, 30.86, 35.37 }, { 1426, 34.54, 35.37 }, { 1426, 37.77, 34.44 }, { 1426, 34.54, 31.54 }, { 1426, 28.44, 52.65 }, { 1426, 26.35, 55.36 } } }, -- level 9 { go = { 1426, 24.9, 50.94 }, text = "Go into the cavern" }, -- level 9 - { complete = 287, -- level 9 + { complete = 287, floor = "down", -- level 9 note = "Head to the lower level of the cavern." }, { complete = 287, -- level 9 note = "Targets are in the cavern and around its entrance too." }, @@ -303,9 +303,9 @@ Ding.RegisterGuide({ { turnin = 99162, races = { "Dwarf", "Gnome" } }, -- level 10 { train = true, talk = 5612, races = { "Gnome" }, classes = { "WARLOCK" } }, -- level 10 { vendor = true, talk = 6328, races = { "Gnome" }, classes = { "WARLOCK" } }, -- level 10 - { train = true, talk = 1228, races = { "Gnome" }, classes = { "MAGE" }, -- level 10 + { train = true, floor = "up", talk = 1228, races = { "Gnome" }, classes = { "MAGE" }, -- level 10 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 1232, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 10 + { train = true, floor = "up", talk = 1232, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 10 note = "The NPC is indoors, one floor up." }, { train = true, talk = 1226, races = { "Dwarf" }, classes = { "PRIEST" }, -- level 10 note = "The NPC is indoors." }, @@ -361,12 +361,12 @@ Ding.RegisterGuide({ { turnin = 413, accept = 414, -- level 10 note = "Keep to the road as it crosses the underground passages." }, { accept = 224 }, -- level 10 - { accept = 267, -- level 10 + { accept = 267, floor = "up", -- level 10 note = "The NPC is indoors, one floor up." }, { go = { 1432, 33.9, 50.98 }, fly = true, talk = 1572, text = "Fly to Thelsamar" }, -- level 10 { turnin = 414, accept = 1339, patrol = { { 1432, 32.7, 49.76 }, { 1432, 33.3, 49.22 }, { 1432, 33.91, 48.42 }, { 1432, 34.36, 47.6 }, { 1432, 34.87, 47 }, { 1432, 35.6, 46.71 }, { 1432, 36.12, 46.32 }, { 1432, 37.14, 45.96 }, { 1432, 37.26, 45.56 }, { 1432, 37.33, 44.48 }, { 1432, 37.23, 43.29 }, { 1432, 36.68, 42.04 } }, -- level 10 note = "The NPC patrols a long route; look along it." }, - { turnin = 1339, accept = 1338, -- level 10 + { turnin = 1339, accept = 1338, floor = "up", -- level 10 note = "The NPC is indoors, one floor up." }, { go = { 1432, 29.79, 16.03 }, deathskip = true, text = "Die on purpose at this spot", -- level 10 note = "Die to the monsters here on purpose. This is the quickest way over." }, @@ -387,7 +387,7 @@ Ding.RegisterGuide({ { go = { 1455, 44.51, 49.54 }, text = "Stay on the trail" }, -- level 11 { turnin = 291 }, -- level 11 { accept = 94817, races = { "Gnome" }, classes = { "PRIEST" } }, -- level 11 - { turnin = 6391, accept = 6388, -- level 11 + { turnin = 6391, accept = 6388, floor = "down", -- level 11 note = "The NPC waits on the lower level, indoors." }, { accept = 1715, races = { "Gnome" }, classes = { "WARLOCK" } }, -- level 11 { turnin = 6388, accept = 6392, why = { kind = "carry", quest = 6392, seconds = 6600, xp = 1100 } }, -- level 11 @@ -404,7 +404,7 @@ Ding.RegisterGuide({ { accept = 353, why = { kind = "carry", quest = 353, seconds = 7320, xp = 1100 }, -- level 11 note = "The NPC is indoors." }, { turnin = 1338 }, -- level 11 - { accept = 1638, classes = { "WARRIOR" }, -- level 11 + { accept = 1638, floor = "up", classes = { "WARRIOR" }, -- level 11 note = "The NPC is indoors, one floor up." }, { turnin = 1638, accept = 1639, classes = { "WARRIOR" }, -- level 11 note = "The NPC is indoors." }, @@ -421,7 +421,7 @@ Ding.RegisterGuide({ { turnin = 5637, races = { "Dwarf" }, classes = { "PRIEST" }, -- level 11 note = "The NPC is indoors." }, { go = { 1453, 42.28, 81.85 }, races = { "Gnome" }, classes = { "WARLOCK" }, text = "Head indoors" }, -- level 11 - { turnin = 1715, accept = 1688, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 11 + { turnin = 1715, accept = 1688, floor = "down", races = { "Gnome" }, classes = { "WARLOCK" }, -- level 11 note = "The NPC waits on the lower level, indoors." }, { go = { 1453, 63.92, 69.12 }, classes = { "WARRIOR" }, text = "Learn Two-Handed Swords and Staves at the weapon master" }, -- level 11 { go = { 1453, 63.92, 69.12 }, classes = { "PALADIN" }, text = "Learn Two-Handed Swords at the weapon master" }, -- level 11 @@ -489,16 +489,16 @@ Ding.RegisterGuide({ { go = { 1453, 42.28, 81.85 }, races = { "Gnome" }, classes = { "WARLOCK" }, text = "Head indoors", -- level 12 note = "The NPC waits on the lower level, indoors." }, { train = true, talk = 461, races = { "Gnome" }, classes = { "WARLOCK" } }, -- level 12 - { turnin = 1688, when = { ready = 1688 }, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 12 + { turnin = 1688, floor = "down", when = { ready = 1688 }, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 12 note = "The NPC waits on the lower level, indoors." }, { accept = 1689, when = { done = 1688 }, races = { "Gnome" }, classes = { "WARLOCK" } }, -- level 12 - { complete = 1689, useitem = 6928, when = { log = 1689 }, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 12 + { complete = 1689, floor = "down", useitem = 6928, when = { log = 1689 }, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 12 note = "Step onto the pink rune. Look within the tomb. The target is on the lower level, indoors." }, { turnin = 1689, when = { ready = 1689 }, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 12 note = "The NPC stands one level over the crypt. The NPC waits on the lower level, indoors." }, - { vendor = true, talk = 5520, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 12 + { floor = "down", vendor = true, talk = 5520, races = { "Gnome" }, classes = { "WARLOCK" }, -- level 12 note = "The NPC waits on the lower level, indoors." }, - { train = true, talk = 5498, races = { "Gnome" }, classes = { "MAGE" }, -- level 12 + { train = true, floor = "top", talk = 5498, races = { "Gnome" }, classes = { "MAGE" }, -- level 12 note = "The NPC waits on the tower's highest floor." }, { train = true, talk = 5515, races = { "Dwarf" }, classes = { "HUNTER" }, -- level 12 note = "The NPC is indoors." }, @@ -510,26 +510,26 @@ Ding.RegisterGuide({ { go = { 1453, 52.93, 51.05 }, races = { "Dwarf" }, classes = { "PRIEST" }, text = "Head indoors", -- level 12 note = "This one roams, so scan the surrounding area. The NPC is indoors." }, { train = true, talk = 5484, races = { "Dwarf" }, classes = { "PRIEST" } }, -- level 12 - { train = true, talk = 5479, classes = { "WARRIOR" }, -- level 12 + { train = true, floor = "up", talk = 5479, classes = { "WARRIOR" }, -- level 12 note = "The NPC is indoors, one floor up." }, { train = true, talk = 918, classes = { "ROGUE" } }, -- level 12 { accept = 2999, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 12 note = "The NPC is indoors." }, - { turnin = 2999, accept = 1645, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 12 + { turnin = 2999, accept = 1645, floor = "up", races = { "Dwarf" }, classes = { "PALADIN" }, -- level 12 note = "The NPC is indoors, one floor up." }, { turnin = 1645, races = { "Dwarf" }, classes = { "PALADIN" } }, -- level 12 { accept = 1646, useitem = 6916, races = { "Dwarf" }, classes = { "PALADIN" } }, -- level 12 - { turnin = 1646, accept = 1647, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 12 + { turnin = 1646, accept = 1647, floor = "up", races = { "Dwarf" }, classes = { "PALADIN" }, -- level 12 note = "The NPC is indoors, one floor up." }, { turnin = 1647, accept = 1648, patrol = { { 1455, 21.81, 51.72 }, { 1455, 21.94, 54.69 }, { 1455, 22.76, 58.43 }, { 1455, 23.36, 61.85 }, { 1455, 23.69, 63.83 }, { 1455, 25.75, 67.94 }, { 1455, 27.51, 71.36 }, { 1455, 31.78, 78.22 }, { 1455, 36.28, 81.27 }, { 1455, 39.78, 83.19 }, { 1455, 42.89, 84.04 } }, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 12 note = "The NPC roams a wide loop; look along it." }, { turnin = 1648, patrol = { { 1455, 21.81, 51.72 }, { 1455, 21.94, 54.69 }, { 1455, 22.76, 58.43 }, { 1455, 23.36, 61.85 }, { 1455, 23.69, 63.83 }, { 1455, 25.75, 67.94 }, { 1455, 27.51, 71.36 }, { 1455, 31.78, 78.22 }, { 1455, 36.28, 81.27 }, { 1455, 39.78, 83.19 }, { 1455, 42.89, 84.04 } }, when = { ready = 1648 }, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 12 note = "The NPC roams a wide loop; look along it. You likely gathered 10 Linen Cloth already." }, { accept = 1778, when = { done = 1648 }, races = { "Dwarf" }, classes = { "PALADIN" } }, -- level 12 - { turnin = 1778, when = { log = 1778 }, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 12 + { turnin = 1778, floor = "up", when = { log = 1778 }, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 12 note = "The NPC is indoors, one floor up." }, { accept = 1779, when = { done = 1778 }, races = { "Dwarf" }, classes = { "PALADIN" } }, -- level 12 - { turnin = 1779, when = { log = 1779 }, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 12 + { turnin = 1779, floor = "up", when = { log = 1779 }, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 12 note = "The NPC is indoors, one floor up." }, { accept = 1783, when = { done = 1779 }, races = { "Dwarf" }, classes = { "PALADIN" } }, -- level 12 { accept = 418, -- level 12 @@ -540,7 +540,7 @@ Ding.RegisterGuide({ note = "The NPC can be indoors or out." }, { complete = 416, -- level 12 note = "The targets are rat-like humanoids." }, - { turnin = 353, -- level 12 + { turnin = 353, floor = "up", -- level 12 note = "The NPC is indoors, one floor up." }, { collect = { { 3172, 3 } }, keep = 3172 }, -- level 12 { collect = { { 3174, 3 } }, keep = 3174, -- level 12 @@ -555,16 +555,16 @@ Ding.RegisterGuide({ { complete = 224 }, -- level 13 { go = { 1432, 30.62, 69.75 }, text = "Exit Stonesplinter Valley, then stay on the road" }, -- level 13 { turnin = 224 }, -- level 13 - { turnin = 267, -- level 13 + { turnin = 267, floor = "up", -- level 13 note = "The NPC is indoors, one floor up." }, { turnin = 1783, useitem = 6866, when = { ready = 1783 }, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 13 note = "Narm Faulk lies dead; use the item on his body. Wait for the talking to finish" }, { accept = 1784, when = { done = 1783 }, races = { "Dwarf" }, classes = { "PALADIN" } }, -- level 13 { complete = 1784, when = { log = 1784 }, races = { "Dwarf" }, classes = { "PALADIN" } }, -- level 13 - { turnin = 1784, when = { ready = 1784 }, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 13 + { turnin = 1784, floor = "up", when = { ready = 1784 }, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 13 note = "The NPC is indoors, one floor up." }, { accept = 1785, when = { done = 1784 }, races = { "Dwarf" }, classes = { "PALADIN" } }, -- level 13 - { turnin = 1785, when = { log = 1785 }, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 13 + { turnin = 1785, floor = "up", when = { log = 1785 }, races = { "Dwarf" }, classes = { "PALADIN" }, -- level 13 note = "The NPC is indoors, one floor up." }, { turnin = 39, why = { kind = "detour", quest = 39, quests = 2, seconds = 120, total = 1300, xp = 1100 } }, -- level 13 { turnin = 94792, races = { "Dwarf", "Gnome" }, classes = { "HUNTER" } }, -- level 13 diff --git a/Ding/Guides/Leveling/Alliance/03.lua b/Ding/Guides/Leveling/Alliance/03.lua index b678732..aef4e71 100644 --- a/Ding/Guides/Leveling/Alliance/03.lua +++ b/Ding/Guides/Leveling/Alliance/03.lua @@ -57,9 +57,9 @@ Ding.RegisterGuide({ note = "The NPC is indoors at street level." }, { train = true, talk = 3594, classes = { "ROGUE" }, -- level 2 note = "The NPC is indoors at street level." }, - { turnin = 3119, classes = { "PRIEST" }, -- level 2 + { turnin = 3119, floor = "up", classes = { "PRIEST" }, -- level 2 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 3595, classes = { "PRIEST" }, -- level 2 + { train = true, floor = "up", talk = 3595, classes = { "PRIEST" }, -- level 2 note = "The NPC is indoors, one floor up." }, { go = { 1438, 57.58, 41.68 }, classes = { "HUNTER" }, text = "Climb the big ramp" }, -- level 2 { turnin = 3117, classes = { "HUNTER" }, -- level 2 @@ -96,7 +96,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors at street level." }, { train = true, talk = 3594, classes = { "ROGUE" }, -- level 5 note = "The NPC is indoors at street level." }, - { train = true, talk = 3595, classes = { "PRIEST" }, -- level 5 + { train = true, floor = "up", talk = 3595, classes = { "PRIEST" }, -- level 5 note = "The NPC is indoors, one floor up." }, { go = { 1438, 57.58, 41.68 }, classes = { "HUNTER" }, text = "Climb the big ramp", -- level 5 note = "The NPC stands high in the great tree. The NPC stands in an adjoining chamber." }, @@ -112,7 +112,7 @@ Ding.RegisterGuide({ { go = { 1438, 56.75, 31.36 }, text = "Go into the cavern" }, -- level 5 { go = { 1438, 56.8, 28.9 }, text = "Take the trail downhill" }, -- level 5 { go = { 1438, 55.71, 25.55 }, text = "Climb the trail" }, -- level 5 - { complete = 917, -- level 5 + { complete = 917, floor = "up", -- level 5 note = "Climb to the cave's upper level." }, { complete = 3521, -- level 5 note = "Targets are in the cavern and around its entrance too." }, @@ -135,7 +135,7 @@ Ding.RegisterGuide({ { deathskip = true, revive = { 1438, 58.72, 42.48 }, text = "Get yourself killed, then resurrect with the spirit healer" }, -- level 6 { talk = 6491 }, -- level 6 { go = { 1438, 56.72, 31.49 }, classes = { "PRIEST" }, text = "Head out of the cave" }, -- level 6 - { accept = 5622, classes = { "PRIEST" }, -- level 6 + { accept = 5622, floor = "up", classes = { "PRIEST" }, -- level 6 note = "The NPC is indoors, one floor up." }, { go = { 1438, 56.72, 31.49 }, text = "Head out of the cave" }, -- level 6 { go = { 1438, 57.48, 41.68 }, text = "Climb the big ramp" }, -- level 6 @@ -154,12 +154,12 @@ Ding.RegisterGuide({ { go = { 1438, 55.25, 56.78 }, classes = { "WARRIOR", "ROGUE" }, text = "Learn First Aid from the trainer" }, -- level 6 { talk = 6094, classes = { "WARRIOR", "ROGUE" }, -- level 6 note = "The NPC is indoors at street level. Do it only if you can." }, - { accept = { 932, 2438 }, -- level 6 + { accept = { 932, 2438 }, floor = "top", -- level 6 note = "The NPC waits on the tower's highest floor." }, { accept = 87288, races = { "NightElf" } }, -- level 6 { train = true, talk = 3598, classes = { "WARRIOR" }, -- level 6 note = "The NPC is indoors." }, - { turnin = 2159, -- level 6 + { turnin = 2159, floor = "up", -- level 6 note = "The NPC is indoors, one floor up." }, { train = true, talk = 3599, classes = { "ROGUE" }, -- level 6 note = "The NPC is indoors." }, @@ -179,7 +179,7 @@ Ding.RegisterGuide({ { complete = 918 }, -- level 6 { turnin = { 918, 919 }, accept = 922, sticky = 488, why = { kind = "carry", quest = 922, seconds = 6840, xp = 300 } }, -- level 6 { complete = 929, useitem = 5619 }, -- level 7 - { turnin = 475, accept = 476, -- level 7 + { turnin = 475, accept = 476, floor = "up", -- level 7 note = "The NPC is indoors, one floor up." }, { complete = 2438, -- level 7 note = "The object is indoors." }, @@ -200,7 +200,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors at street level." }, { train = true, talk = 3600, classes = { "PRIEST" }, -- level 8 note = "The NPC is indoors at street level." }, - { turnin = 2438, accept = 2459, -- level 8 + { turnin = 2438, accept = 2459, floor = "top", -- level 8 note = "The NPC waits on the tower's highest floor." }, { accept = 99046, races = { "NightElf" } }, -- level 8 { train = true, talk = 3598, classes = { "WARRIOR" }, -- level 8 @@ -228,7 +228,7 @@ Ding.RegisterGuide({ note = "With the coming hand-ins, this gets you to level 9. Your targets are within the cavern." }, { go = { 1438, 54.61, 52.48 }, text = "Head out of the cave" }, -- level 8 { accept = 98391, races = { "NightElf" }, classes = { "PRIEST" } }, -- level 8 - { turnin = { 932, 2459 }, -- level 8 + { turnin = { 932, 2459 }, floor = "top", -- level 8 note = "The NPC waits on the tower's highest floor." }, { turnin = 87288, races = { "NightElf" } }, -- level 9 { accept = 930 }, -- level 9 @@ -239,7 +239,7 @@ Ding.RegisterGuide({ { deathskip = true, revive = { 1438, 56.26, 63.3 }, text = "Get yourself killed, then resurrect with the spirit healer" }, -- level 9 { talk = 6491 }, -- level 9 { turnin = 933, accept = 7383 }, -- level 9 - { sethearth = "Dolanaar", talk = 6736, -- level 9 + { sethearth = "Dolanaar", floor = "up", talk = 6736, -- level 9 note = "The NPC is indoors, one floor up." }, { accept = 487, patrol = { { 1438, 55.86, 58.25 }, { 1438, 55.53, 58.39 }, { 1438, 54.58, 58.54 }, { 1438, 53.92, 58.25 }, { 1438, 53.63, 57.55 }, { 1438, 52.97, 57.39 }, { 1438, 52.63, 56.69 }, { 1438, 52.3, 56.39 }, { 1438, 51.94, 56.35 }, { 1438, 51.66, 56.52 }, { 1438, 51.34, 56.61 }, { 1438, 50.97, 56.55 }, { 1438, 50.59, 56.14 }, { 1438, 50.37, 55.61 }, { 1438, 50.56, 54.48 }, { 1438, 50.4, 54.25 }, { 1438, 50.24, 53.83 } }, -- level 9 note = "The NPC patrols the road; look along it." }, @@ -276,24 +276,24 @@ Ding.RegisterGuide({ { go = { 1457, 32.08, 16.4 }, classes = { "ROGUE" }, text = "Step into the cavern within the trunk", -- level 10 note = "The spot is on the lower floor of the hollow tree. Don't forget to train Pick Pocket. Keep it; an upcoming task asks for it." }, { train = true, talk = 4163, classes = { "ROGUE" } }, -- level 10 - { accept = 6071, classes = { "HUNTER" }, -- level 10 + { accept = 6071, floor = "up", classes = { "HUNTER" }, -- level 10 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 4146, classes = { "HUNTER" }, -- level 10 + { train = true, floor = "up", talk = 4146, classes = { "HUNTER" }, -- level 10 note = "The NPC is indoors, one floor up." }, { train = true, talk = 4218, classes = { "DRUID" }, -- level 10 note = "The NPC is indoors at street level." }, { accept = 5921, classes = { "DRUID" }, -- level 10 note = "The NPC is indoors, on the central storey." }, - { turnin = 940, accept = 952, why = { kind = "carry", quest = 952, seconds = 63660, xp = 900 }, -- level 10 + { turnin = 940, accept = 952, floor = "top", why = { kind = "carry", quest = 952, seconds = 63660, xp = 900 }, -- level 10 note = "The NPC waits on the tower's highest floor." }, { train = true, talk = 4091, classes = { "PRIEST" }, -- level 10 note = "The NPC is indoors." }, - { accept = 2518, -- level 10 + { accept = 2518, floor = "up", -- level 10 note = "The NPC is indoors, one floor up." }, - { turnin = 5921, accept = 5929, classes = { "DRUID" }, -- level 10 + { turnin = 5921, accept = 5929, floor = "up", classes = { "DRUID" }, -- level 10 note = "The NPC is indoors, one floor up." }, { complete = 5929, talk = 11956, classes = { "DRUID" } }, -- level 10 - { turnin = 5929, when = { ready = 5929 }, classes = { "DRUID" }, -- level 10 + { turnin = 5929, floor = "up", when = { ready = 5929 }, classes = { "DRUID" }, -- level 10 note = "The NPC is indoors, one floor up." }, { accept = 5931, when = { done = 5929 }, classes = { "DRUID" } }, -- level 10 { go = { 1450, 48.06, 67.4 }, fly = true, talk = 10897, classes = { "DRUID" }, text = "Fly to Moonglade" }, -- level 10 @@ -381,17 +381,17 @@ Ding.RegisterGuide({ { turnin = 5931, when = { log = 5931 }, classes = { "DRUID" }, -- level 11 note = "The NPC is indoors, on the central storey." }, { accept = 6001, when = { done = 5931 }, classes = { "DRUID" } }, -- level 11 - { turnin = 935, -- level 11 + { turnin = 935, floor = "top", -- level 11 note = "The NPC waits on the tower's highest floor." }, { turnin = 98391, races = { "NightElf" }, classes = { "PRIEST" } }, -- level 11 { accept = 98046, races = { "NightElf" }, classes = { "PRIEST" } }, -- level 11 - { turnin = 2518, accept = 2520, -- level 11 + { turnin = 2518, accept = 2520, floor = "up", -- level 11 note = "The NPC is indoors, one floor up." }, - { turnin = 5629, classes = { "PRIEST" }, -- level 11 + { turnin = 5629, floor = "up", classes = { "PRIEST" }, -- level 11 note = "The NPC is indoors, one floor up." }, { complete = 2520, useitem = 8155, -- level 11 note = "The object is indoors." }, - { turnin = 2520, -- level 11 + { turnin = 2520, floor = "up", -- level 11 note = "The NPC is indoors, one floor up." }, { turnin = 98046, races = { "NightElf" }, classes = { "PRIEST" } }, -- level 11 { turnin = 6344, accept = 6341 }, -- level 11 @@ -403,7 +403,7 @@ Ding.RegisterGuide({ { talk = 4200, buy = { { 4592, 1, 4200 } }, classes = { "HUNTER" }, -- level 11 note = "Your pet will need this food shortly." }, { vendor = true, talk = 4200, classes = { "HUNTER" } }, -- level 11 - { accept = 983, -- level 11 + { accept = 983, floor = "up", -- level 11 note = "The NPC is indoors, one floor up." }, { go = { 1439, 38.13, 40.98 }, classes = { "WARRIOR", "ROGUE" }, text = "Learn Blacksmithing from the trainer" }, -- level 11 { talk = 6299, classes = { "WARRIOR", "ROGUE" } }, -- level 11 @@ -441,7 +441,7 @@ Ding.RegisterGuide({ { go = { 1457, 32.08, 16.4 }, classes = { "ROGUE" }, text = "Step into the cavern within the trunk", -- level 12 note = "The spot is on the lower floor of the hollow tree." }, { train = true, talk = 4163, classes = { "ROGUE" } }, -- level 12 - { train = true, talk = 4146, classes = { "HUNTER" }, -- level 12 + { train = true, floor = "up", talk = 4146, classes = { "HUNTER" }, -- level 12 note = "The NPC is indoors, one floor up." }, { train = true, talk = 10089, classes = { "HUNTER" }, -- level 12 note = "The NPC stands on the highest level of this structure." }, @@ -520,7 +520,7 @@ Ding.RegisterGuide({ { go = { 1432, 33.9, 50.98 }, fly = true, talk = 1572, text = "Fly to Thelsamar" }, -- level 13 { accept = 1339, patrol = { { 1432, 32.7, 49.76 }, { 1432, 33.3, 49.22 }, { 1432, 33.91, 48.42 }, { 1432, 34.36, 47.6 }, { 1432, 34.87, 47 }, { 1432, 35.6, 46.71 }, { 1432, 36.12, 46.32 }, { 1432, 37.14, 45.96 }, { 1432, 37.26, 45.56 }, { 1432, 37.33, 44.48 }, { 1432, 37.23, 43.29 }, { 1432, 36.68, 42.04 } }, -- level 13 note = "The NPC patrols a long route; look along it." }, - { turnin = 1339, accept = 1338, -- level 13 + { turnin = 1339, accept = 1338, floor = "up", -- level 13 note = "The NPC is indoors, one floor up." }, { go = { 1455, 61.12, 89.58 }, classes = { "WARRIOR" }, text = "Learn Two-Handed Axes and Two-Handed Maces at the weapon master" }, -- level 13 { talk = 11865, classes = { "WARRIOR" }, -- level 13 diff --git a/Ding/Guides/Leveling/Alliance/05.lua b/Ding/Guides/Leveling/Alliance/05.lua index 24a1f51..38f0be0 100644 --- a/Ding/Guides/Leveling/Alliance/05.lua +++ b/Ding/Guides/Leveling/Alliance/05.lua @@ -12,7 +12,7 @@ Ding.RegisterGuide({ steps = { { go = { 1439, 36.1, 44.93 }, text = "Travel to Auberdine", -- level 15 note = "Darkshore: Auberdine, the port on the west coast." }, - { accept = 983, races = { "Human", "Dwarf", "Gnome", "Skyborne" }, -- level 15 + { accept = 983, floor = "up", races = { "Human", "Dwarf", "Gnome", "Skyborne" }, -- level 15 note = "The NPC is indoors, one floor up." }, { accept = 2118, races = { "Human", "Dwarf", "Gnome", "Skyborne" } }, -- level 15 { accept = 984, races = { "Human", "Dwarf", "Gnome", "Skyborne" }, -- level 15 @@ -90,7 +90,7 @@ Ding.RegisterGuide({ { accept = 6121, races = { "NightElf", "Skyborne" }, classes = { "DRUID" }, -- level 16 note = "The NPC is indoors, on the central storey." }, { accept = 26, races = { "NightElf" }, classes = { "DRUID" } }, -- level 16 - { turnin = 6121, accept = 6122, races = { "NightElf", "Skyborne" }, classes = { "DRUID" }, -- level 16 + { turnin = 6121, accept = 6122, floor = "up", races = { "NightElf", "Skyborne" }, classes = { "DRUID" }, -- level 16 note = "The NPC is indoors, one floor up." }, { turnin = 26, accept = 29, races = { "NightElf" }, classes = { "DRUID" } }, -- level 16 { collect = { { 15877, 1 } }, spots = { { 1450, 54.73, 46.56 }, { 1450, 47.97, 47.15 }, { 1450, 50.05, 50.57 }, { 1450, 52.13, 53.34 }, { 1450, 52.86, 48.45 }, { 1450, 54.06, 49.97 }, { 1450, 54.14, 55.55 }, { 1450, 56.15, 53.57 }, { 1450, 58.35, 50.87 }, { 1450, 60.54, 58.33 } }, races = { "NightElf" }, classes = { "DRUID" }, -- level 16 @@ -105,7 +105,7 @@ Ding.RegisterGuide({ { go = { 1457, 32.08, 16.4 }, classes = { "ROGUE" }, text = "Step into the cavern within the trunk", -- level 16 note = "The spot is on the lower floor of the hollow tree." }, { train = true, talk = 4163, classes = { "ROGUE" } }, -- level 16 - { train = true, talk = 4146, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 16 + { train = true, floor = "up", talk = 4146, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 16 note = "The NPC is indoors, one floor up." }, { train = true, talk = 4091, races = { "Human", "Dwarf", "NightElf" }, classes = { "PRIEST" }, -- level 16 note = "The NPC is indoors." }, @@ -135,16 +135,16 @@ Ding.RegisterGuide({ { turnin = 4813 }, -- level 17 { turnin = 985, -- level 17 note = "The NPC is indoors." }, - { accept = 965, -- level 17 + { accept = 965, floor = "up", -- level 17 note = "The NPC is indoors, one floor up." }, { accept = 982 }, -- level 17 { turnin = 958, -- level 17 note = "The NPC is indoors." }, { accept = 97914, races = { "Human", "Dwarf", "Gnome", "Skyborne" }, why = { continent = true, kind = "carry", quest = 97914, seconds = 10260, xp = 800 } }, -- level 17 { turnin = 957, when = { log = 957 } }, -- level 17 - { complete = 982, -- level 17 + { complete = 982, floor = "down", -- level 17 note = "Go to the lowest deck of the wreck. Swim in by way of a porthole." }, - { complete = 982, sticky = 1138, -- level 17 + { complete = 982, floor = "down", sticky = 1138, -- level 17 note = "Go to the lowest deck of the wreck. Swim in by way of a porthole." }, { collect = { { 15883, 1 } }, spots = { { 1439, 48.83, 11.35 } }, races = { "NightElf" }, classes = { "DRUID" }, -- level 17 note = "Your targets sit below the water's surface." }, diff --git a/Ding/Guides/Leveling/Alliance/06.lua b/Ding/Guides/Leveling/Alliance/06.lua index 5f94591..20dfe6d 100644 --- a/Ding/Guides/Leveling/Alliance/06.lua +++ b/Ding/Guides/Leveling/Alliance/06.lua @@ -17,15 +17,15 @@ Ding.RegisterGuide({ steps = { { go = { 1432, 37.24, 47.38 }, text = "Travel to Thelsamar", -- level 18 note = "Loch Modan: Thelsamar, on the road in the west of the zone." }, - { accept = 436, -- level 18 + { accept = 436, floor = "down", -- level 18 note = "The NPC waits on the lower level, indoors." }, { turnin = 353, races = { "NightElf" } }, -- level 18 - { accept = 307, -- level 18 + { accept = 307, floor = "up", -- level 18 note = "The NPC is indoors, one floor up." }, { complete = 307, -- level 18 note = "Search stacks of brown crates. The objective is underground, in the mine shaft." }, { go = { 1432, 35.53, 18.8 }, text = "Exit the mine shaft" }, -- level 18 - { turnin = 307, -- level 18 + { turnin = 307, floor = "up", -- level 18 note = "The NPC is indoors, one floor up." }, { go = { 1432, 40.58, 13.67 }, text = "Head up the incline" }, -- level 18 { accept = 250, -- level 18 @@ -52,7 +52,7 @@ Ding.RegisterGuide({ { turnin = 297 }, -- level 19 { accept = 86614 }, -- level 19 { turnin = 86614 }, -- level 19 - { turnin = 298, accept = 301, -- level 19 + { turnin = 298, accept = 301, floor = "down", -- level 19 note = "The NPC waits on the lower level, indoors." }, { turnin = 301, why = { kind = "detour", quest = 301, seconds = 240, short = true, xp = 500 } }, -- level 19 }, diff --git a/Ding/Guides/Leveling/Alliance/07.lua b/Ding/Guides/Leveling/Alliance/07.lua index b8540e4..e449cc6 100644 --- a/Ding/Guides/Leveling/Alliance/07.lua +++ b/Ding/Guides/Leveling/Alliance/07.lua @@ -30,7 +30,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { accept = 129, -- level 19 note = "The NPC is indoors." }, - { turnin = 65, accept = 132, -- level 19 + { turnin = 65, accept = 132, floor = "up", -- level 19 note = "The NPC is indoors, one floor up." }, { accept = 92, -- level 19 note = "The NPC is indoors." }, @@ -40,7 +40,7 @@ Ding.RegisterGuide({ { turnin = 3741 }, -- level 19 { turnin = 132, accept = 135, why = { chain = 4, kind = "detour", quest = 132, seconds = 180, xp = 4800 } }, -- level 19 { turnin = 120, accept = 121, why = { back = true, chain = 3, kind = "detour", quest = 135, quests = 9, seconds = 600, short = true, total = 7200, xp = 4100 } }, -- level 19 - { turnin = 135, accept = 141, -- level 19 + { turnin = 135, accept = 141, floor = "up", -- level 19 note = "The NPC is indoors, one floor up." }, { accept = 97894, why = { continent = true, kind = "carry", quest = 97894, seconds = 9180, xp = 800 } }, -- level 19 { accept = 97926, why = { continent = true, kind = "carry", quest = 97926, seconds = 19320, xp = 800 } }, -- level 19 @@ -87,11 +87,11 @@ Ding.RegisterGuide({ { train = true, talk = 2879, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 20 note = "The NPC is indoors." }, { train = true, talk = 918, classes = { "ROGUE" } }, -- level 20 - { accept = 2360, classes = { "ROGUE" }, -- level 20 + { accept = 2360, floor = "up", classes = { "ROGUE" }, -- level 20 note = "The NPC is indoors, one floor up." }, - { accept = 2281, classes = { "ROGUE" }, -- level 20 + { accept = 2281, floor = "up", classes = { "ROGUE" }, -- level 20 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 5479, classes = { "WARRIOR" }, -- level 20 + { train = true, floor = "up", talk = 5479, classes = { "WARRIOR" }, -- level 20 note = "The NPC is indoors, one floor up." }, { accept = { 167, 168 }, dungeon = "The Deadmines", -- level 20 note = "The NPC is indoors." }, @@ -110,15 +110,15 @@ Ding.RegisterGuide({ note = "This one roams, so scan the surrounding area. The NPC is indoors." }, { train = true, talk = 5484, races = { "Human", "Dwarf", "NightElf" }, classes = { "PRIEST" } }, -- level 20 { go = { 1453, 42.28, 81.85 }, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, text = "Head indoors" }, -- level 20 - { accept = 1716, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARLOCK" }, -- level 20 + { accept = 1716, floor = "down", races = { "Human", "Gnome", "Skyborne" }, classes = { "WARLOCK" }, -- level 20 note = "The NPC waits on the lower level, indoors." }, - { train = true, talk = 461, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 20 + { train = true, floor = "down", talk = 461, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 20 note = "The NPC waits on the lower level, indoors." }, - { vendor = true, talk = 5520, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 20 + { floor = "down", vendor = true, talk = 5520, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 20 note = "The NPC waits on the lower level, indoors." }, - { train = true, talk = 5498, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 20 + { train = true, floor = "top", talk = 5498, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 20 note = "The NPC waits on the tower's highest floor." }, - { talk = 2485, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 20 + { floor = "up", talk = 2485, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 20 note = "The NPC is on an upper floor of the tower." }, { train = true, talk = 5504, races = { "NightElf" }, classes = { "DRUID" } }, -- level 20 { accept = 3765, why = { action = "accept", kind = "detour", quest = 3765, seconds = 180, xp = 1500 } }, -- level 20 @@ -127,7 +127,7 @@ Ding.RegisterGuide({ { turnin = 91723, races = { "Human" } }, -- level 20 { complete = 91732, races = { "Human" } }, -- level 20 { complete = 91732, races = { "Dwarf", "Gnome" } }, -- level 20 - { accept = 94, why = { kind = "carry", quest = 94, seconds = 63000, xp = 800 }, -- level 20 + { accept = 94, floor = "top", why = { kind = "carry", quest = 94, seconds = 63000, xp = 800 }, -- level 20 note = "The NPC waits on the tower's highest floor." }, { complete = 91725, races = { "Human" } }, -- level 20 { turnin = 91725, races = { "Human" } }, -- level 20 @@ -168,7 +168,7 @@ Ding.RegisterGuide({ { turnin = 2282, when = { ready = 2282 }, classes = { "ROGUE" } }, -- level 20 { destroy = 7907, classes = { "ROGUE" } }, -- level 20 { accept = 166, dungeon = "The Deadmines" }, -- level 20 - { accept = 214, dungeon = "The Deadmines", -- level 20 + { accept = 214, dungeon = "The Deadmines", floor = "top", -- level 20 note = "The NPC waits on the tower's highest floor." }, { go = { 1436, 42.62, 71.67 }, dungeon = "The Deadmines", text = "Go inside and stay on the trail" }, -- level 20 { complete = 167, dungeon = "The Deadmines", -- level 20 @@ -182,7 +182,7 @@ Ding.RegisterGuide({ { complete = 214, dungeon = "The Deadmines", -- level 20 note = "You'll find them all over the instance." }, { turnin = 166, dungeon = "The Deadmines" }, -- level 20 - { turnin = 214, dungeon = "The Deadmines", -- level 20 + { turnin = 214, dungeon = "The Deadmines", floor = "top", -- level 20 note = "The NPC waits on the tower's highest floor." }, { accept = 373, dungeon = "The Deadmines", useitem = 2874 }, -- level 20 { turnin = 373, dungeon = "The Deadmines", -- level 20 diff --git a/Ding/Guides/Leveling/Alliance/08.lua b/Ding/Guides/Leveling/Alliance/08.lua index 0bf0117..ebd8275 100644 --- a/Ding/Guides/Leveling/Alliance/08.lua +++ b/Ding/Guides/Leveling/Alliance/08.lua @@ -42,7 +42,7 @@ Ding.RegisterGuide({ { complete = 6122, useitem = 15844, races = { "NightElf", "Skyborne" }, classes = { "DRUID" }, -- level 21 note = "The spot is at the cave's mouth." }, { go = { 1439, 55.01, 33.34 }, text = "Go into the cavern" }, -- level 21 - { complete = 947, -- level 21 + { complete = 947, floor = "up", -- level 21 note = "Look for the brown fungi. Climb to the cave's upper level. Extra ones are below, in the side chambers." }, { complete = 947, -- level 21 note = "Gather the blue-capped fungi. Your targets are within the cavern." }, diff --git a/Ding/Guides/Leveling/Alliance/09.lua b/Ding/Guides/Leveling/Alliance/09.lua index f3437bf..19b4a06 100644 --- a/Ding/Guides/Leveling/Alliance/09.lua +++ b/Ding/Guides/Leveling/Alliance/09.lua @@ -147,13 +147,13 @@ Ding.RegisterGuide({ { go = { 1457, 32.08, 16.4 }, classes = { "ROGUE" }, text = "Step into the cavern within the trunk", -- level 23 note = "The spot is on the lower floor of the hollow tree." }, { train = true, talk = 4163, classes = { "ROGUE" } }, -- level 23 - { train = true, talk = 4146, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 23 + { train = true, floor = "up", talk = 4146, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 23 note = "The NPC is indoors, one floor up." }, { train = true, talk = 4091, races = { "Human", "Dwarf", "NightElf" }, classes = { "PRIEST" }, -- level 23 note = "The NPC is indoors." }, - { accept = 1199, dungeon = "Blackfathom Deeps", -- level 23 + { accept = 1199, dungeon = "Blackfathom Deeps", floor = "up", -- level 23 note = "The NPC is indoors, one floor up." }, - { accept = 1198, dungeon = "Blackfathom Deeps", -- level 23 + { accept = 1198, dungeon = "Blackfathom Deeps", floor = "up", -- level 23 note = "The NPC is indoors, one floor up." }, { accept = 1275, dungeon = "Blackfathom Deeps" }, -- level 23 { train = true, talk = 7312, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 23 @@ -214,9 +214,9 @@ Ding.RegisterGuide({ { complete = 1275, dungeon = "Blackfathom Deeps", -- level 24 note = "Kill Fallenroot and Blackfathom foes. You'll find them all over the instance." }, { turnin = 1275, dungeon = "Blackfathom Deeps" }, -- level 24 - { turnin = 1199, dungeon = "Blackfathom Deeps", -- level 24 + { turnin = 1199, dungeon = "Blackfathom Deeps", floor = "up", -- level 24 note = "The NPC is indoors, one floor up." }, - { turnin = 1200, dungeon = "Blackfathom Deeps", -- level 24 + { turnin = 1200, dungeon = "Blackfathom Deeps", floor = "up", -- level 24 note = "The NPC is indoors, one floor up." }, { go = { 1447, 11.95, 77.54 }, fly = true, talk = 12577, text = "Fly to Talrendis Point", -- level 24 note = "This trip is dangerous; move with great caution. Stay on the road and keep away from Horde NPCs. The Warsong Outriders riding along the road stay peaceful." }, diff --git a/Ding/Guides/Leveling/Alliance/10.lua b/Ding/Guides/Leveling/Alliance/10.lua index 5c42f23..55cef03 100644 --- a/Ding/Guides/Leveling/Alliance/10.lua +++ b/Ding/Guides/Leveling/Alliance/10.lua @@ -33,9 +33,9 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { vendor = true, talk = 6382, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 24 note = "The NPC is indoors." }, - { turnin = 968, when = { log = 968 }, why = { back = true, kind = "detour", quest = 968, seconds = 240, short = true, xp = 2000 }, -- level 24 + { turnin = 968, floor = "down", when = { log = 968 }, why = { back = true, kind = "detour", quest = 968, seconds = 240, short = true, xp = 2000 }, -- level 24 note = "The NPC waits on the lower level, indoors." }, - { turnin = 971, dungeon = "Blackfathom Deeps", -- level 24 + { turnin = 971, dungeon = "Blackfathom Deeps", floor = "down", -- level 24 note = "The NPC waits on the lower level, indoors." }, { accept = 463 }, -- level 24 { accept = 288, when = { item = 2594 } }, -- level 24 @@ -43,9 +43,9 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { talk = 1464, buy = { { 2594, 1, 1464 } }, -- level 24 note = "The NPC is indoors." }, - { turnin = 942, accept = 943, when = { log = 942 }, -- level 24 + { turnin = 942, accept = 943, floor = "up", when = { log = 942 }, -- level 24 note = "The NPC is indoors, one floor up." }, - { turnin = 942, accept = 943, when = { done = 942 }, -- level 24 + { turnin = 942, accept = 943, floor = "up", when = { done = 942 }, -- level 24 note = "The NPC is indoors, one floor up." }, { turnin = 288, when = { item = 2594 } }, -- level 24 { accept = 98282 }, -- level 24 @@ -84,7 +84,7 @@ Ding.RegisterGuide({ { turnin = 276, accept = 277 }, -- level 25 { complete = 470, -- level 25 note = "Targets are both in the tomb and around it." }, - { turnin = 943, when = { log = 943 }, -- level 25 + { turnin = 943, floor = "up", when = { log = 943 }, -- level 25 note = "The NPC is indoors, one floor up." }, { turnin = 98282 }, -- level 25 { turnin = 470 }, -- level 25 @@ -115,17 +115,17 @@ Ding.RegisterGuide({ note = "The NPC is indoors. Buy it now; a task in Duskwood needs it before long." }, { turnin = 1075, why = { kind = "detour", quest = 1075, seconds = 120, xp = 800 } }, -- level 25 { accept = 78148, races = { "Human" } }, -- level 25 - { talk = 2485, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 25 + { floor = "up", talk = 2485, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 25 note = "The NPC is on an upper floor of the tower." }, { go = { 1453, 42.28, 81.85 }, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, text = "Head indoors" }, -- level 25 - { turnin = 1738, when = { ready = 1738 }, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARLOCK" }, -- level 25 + { turnin = 1738, floor = "down", when = { ready = 1738 }, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARLOCK" }, -- level 25 note = "The NPC waits on the lower level, indoors." }, { accept = 1739, when = { done = 1738 }, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARLOCK" } }, -- level 25 - { complete = 1739, useitem = 6913, when = { log = 1739 }, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARLOCK" }, -- level 25 + { complete = 1739, floor = "down", useitem = 6913, when = { log = 1739 }, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARLOCK" }, -- level 25 note = "Step onto the pink rune. The spot is in the crypt under the building." }, { turnin = 1739, when = { ready = 1739 }, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARLOCK" }, -- level 25 note = "The NPC waits on the lower level, indoors. The NPC stands one level over the crypt." }, - { vendor = true, talk = 5520, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 25 + { floor = "down", vendor = true, talk = 5520, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 25 note = "The NPC waits on the lower level, indoors." }, }, }) diff --git a/Ding/Guides/Leveling/Alliance/11.lua b/Ding/Guides/Leveling/Alliance/11.lua index e8b10bf..1bc678a 100644 --- a/Ding/Guides/Leveling/Alliance/11.lua +++ b/Ding/Guides/Leveling/Alliance/11.lua @@ -69,7 +69,7 @@ Ding.RegisterGuide({ { turnin = 2360, accept = 2359, classes = { "ROGUE" } }, -- level 26 { complete = 2359, classes = { "ROGUE" }, -- level 26 note = "Rob one Malformed Defias Drone with Pickpocket. This one roams, so scan the surrounding area." }, - { complete = 2359, classes = { "ROGUE" }, -- level 26 + { complete = 2359, floor = "top", classes = { "ROGUE" }, -- level 26 note = "Use Sap on Klaven Mortwake, then open the chest. Opening it puts a harmful effect on you. Climb to the highest floor of the building." }, { turnin = 67, accept = 68, why = { back = true, chain = 11, kind = "detour", quest = 67, seconds = 300, short = true, xp = 13000 }, -- level 26 note = "Be ready for a fight right away. The object is indoors." }, @@ -84,11 +84,11 @@ Ding.RegisterGuide({ { collect = { { 15882, 1 } }, spots = { { 1436, 17.91, 33.06 } }, races = { "NightElf" }, classes = { "DRUID" }, -- level 26 note = "Your targets sit below the water's surface." }, { complete = 272, useitem = 15883, when = { log = 272 }, races = { "NightElf", "Skyborne" }, classes = { "DRUID" } }, -- level 26 - { turnin = 272, when = { ready = 272 }, races = { "NightElf", "Skyborne" }, classes = { "DRUID" }, -- level 26 + { turnin = 272, floor = "up", when = { ready = 272 }, races = { "NightElf", "Skyborne" }, classes = { "DRUID" }, -- level 26 note = "The NPC is indoors, one floor up." }, { accept = 5061, when = { done = 272 }, races = { "NightElf" }, classes = { "DRUID" } }, -- level 26 { train = true, talk = 12042, races = { "NightElf" }, classes = { "DRUID" } }, -- level 26 - { turnin = 5061, when = { log = 5061 }, races = { "NightElf" }, classes = { "DRUID" }, -- level 26 + { turnin = 5061, floor = "top", when = { log = 5061 }, races = { "NightElf" }, classes = { "DRUID" }, -- level 26 note = "Climb to the highest floor of the building." }, { turnin = 5, accept = 93, -- level 26 note = "The NPC is indoors." }, @@ -114,7 +114,7 @@ Ding.RegisterGuide({ { turnin = 230, accept = 262 }, -- level 27 { turnin = 69, accept = 70, -- level 27 note = "The NPC is indoors." }, - { complete = 70, -- level 27 + { complete = 70, floor = "up", -- level 27 note = "The object is indoors, one floor up." }, { turnin = 95998, races = { "Human" } }, -- level 27 { complete = 96606, races = { "NightElf" } }, -- level 27 @@ -124,36 +124,36 @@ Ding.RegisterGuide({ { train = true, talk = 5492, races = { "Human", "Dwarf" }, classes = { "PALADIN" }, -- level 27 note = "The NPC is indoors." }, { train = true, talk = 918, classes = { "ROGUE" } }, -- level 27 - { turnin = 2359, when = { ready = 2359 }, classes = { "ROGUE" }, -- level 27 + { turnin = 2359, floor = "up", when = { ready = 2359 }, classes = { "ROGUE" }, -- level 27 note = "The NPC is indoors, one floor up." }, { accept = 2607, when = { done = 2359 }, classes = { "ROGUE" } }, -- level 27 - { turnin = 2607, when = { log = 2607 }, classes = { "ROGUE" }, -- level 27 + { turnin = 2607, floor = "down", when = { log = 2607 }, classes = { "ROGUE" }, -- level 27 note = "The NPC waits on the lower level, indoors." }, { accept = 2608, when = { done = 2607 }, classes = { "ROGUE" } }, -- level 27 { complete = 2608, when = { log = 2608 }, classes = { "ROGUE" }, -- level 27 note = "Let the conversation play out. Target Doc Mixilpixil, then take a seat." }, - { turnin = 2608, when = { ready = 2608 }, classes = { "ROGUE" }, -- level 27 + { turnin = 2608, floor = "down", when = { ready = 2608 }, classes = { "ROGUE" }, -- level 27 note = "The NPC waits on the lower level, indoors." }, { train = true, talk = 5515, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 27 note = "The NPC is indoors." }, { go = { 1453, 52.93, 51.05 }, races = { "Human", "Dwarf", "NightElf" }, classes = { "PRIEST" }, text = "Head indoors", -- level 27 note = "This one roams, so scan the surrounding area. The NPC is indoors." }, { train = true, talk = 5484, races = { "Human", "Dwarf", "NightElf" }, classes = { "PRIEST" } }, -- level 27 - { train = true, talk = 5479, classes = { "WARRIOR" }, -- level 27 + { train = true, floor = "up", talk = 5479, classes = { "WARRIOR" }, -- level 27 note = "The NPC is indoors, one floor up." }, { turnin = 70, accept = 72, why = { chain = 7, kind = "detour", quest = 72, quests = 11, seconds = 60, total = 14000, xp = 7900 } }, -- level 27 { turnin = 72, accept = 74, why = { kind = "carry", quest = 74, seconds = 41760, xp = 1200 }, -- level 27 note = "Be ready for a fight right away." }, { go = { 1453, 42.28, 81.85 }, text = "Head indoors" }, -- level 27 { accept = 335, races = { "Dwarf", "NightElf" }, classes = { "WARRIOR", "PALADIN", "HUNTER", "ROGUE", "PRIEST", "WARLOCK", "DRUID" } }, -- level 27 - { accept = 335, races = { "Human", "Gnome", "Skyborne" }, -- level 27 + { accept = 335, floor = "down", races = { "Human", "Gnome", "Skyborne" }, -- level 27 note = "The NPC waits on the lower level, indoors." }, { go = { 1453, 42.29, 81.76 }, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, text = "Head indoors", -- level 27 note = "The NPC waits on the lower level, indoors." }, { train = true, talk = 461, races = { "Human", "Gnome" }, classes = { "WARLOCK" } }, -- level 27 - { vendor = true, talk = 5520, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 27 + { floor = "down", vendor = true, talk = 5520, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 27 note = "The NPC waits on the lower level, indoors." }, - { train = true, talk = 5498, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 27 + { train = true, floor = "top", talk = 5498, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 27 note = "The NPC waits on the tower's highest floor." }, { accept = 20 }, -- level 27 { accept = { 127, 150 } }, -- level 27 diff --git a/Ding/Guides/Leveling/Alliance/12.lua b/Ding/Guides/Leveling/Alliance/12.lua index 9f13066..3505acb 100644 --- a/Ding/Guides/Leveling/Alliance/12.lua +++ b/Ding/Guides/Leveling/Alliance/12.lua @@ -21,7 +21,7 @@ Ding.RegisterGuide({ { accept = 472 }, -- level 28 { turnin = 98197 }, -- level 28 { accept = 98221 }, -- level 28 - { accept = 464, -- level 28 + { accept = 464, floor = "up", -- level 28 note = "The NPC is indoors, one floor up." }, { turnin = 281, accept = 284 }, -- level 28 { turnin = 284, accept = 285 }, -- level 28 @@ -85,14 +85,14 @@ Ding.RegisterGuide({ { turnin = 471 }, -- level 29 { accept = 98240 }, -- level 29 { turnin = 98072, races = { "Dwarf", "NightElf", "Gnome", "Skyborne" } }, -- level 29 - { turnin = 464, accept = 465, -- level 29 + { turnin = 464, accept = 465, floor = "up", -- level 29 note = "The NPC is indoors, one floor up." }, { accept = 98230 }, -- level 29 { turnin = 98189, races = { "Dwarf", "NightElf", "Gnome", "Skyborne" } }, -- level 29 { turnin = 98221 }, -- level 29 - { complete = 290, when = { log = 290 }, -- level 29 + { complete = 290, floor = "top", when = { log = 290 }, -- level 29 note = "The target is up on the boat's top deck. Climb the incline at the rear." }, - { turnin = 290, when = { log = 290 }, -- level 29 + { turnin = 290, floor = "down", when = { log = 290 }, -- level 29 note = "Go to the lowest deck of the ship. Your targets sit below the water's surface. Swim in via the gap at the base." }, { accept = 292, when = { done = 290 } }, -- level 29 { complete = 275, -- level 29 @@ -120,7 +120,7 @@ Ding.RegisterGuide({ { accept = 631 }, -- level 29 { turnin = 472 }, -- level 29 { go = { 1437, 51.31, 8.08 }, text = "Take the door on the bridge, then descend the steps" }, -- level 29 - { turnin = 631, accept = 632, -- level 29 + { turnin = 631, accept = 632, floor = "down", -- level 29 note = "Be ready for a fight right away. The object is on the lower level within the bridge." }, { turnin = 632, accept = 633 }, -- level 29 { go = { 1437, 50.6, 8.48 }, text = "Leap from the span and splash down below" }, -- level 29 diff --git a/Ding/Guides/Leveling/Alliance/13.lua b/Ding/Guides/Leveling/Alliance/13.lua index 308d846..7fb45a0 100644 --- a/Ding/Guides/Leveling/Alliance/13.lua +++ b/Ding/Guides/Leveling/Alliance/13.lua @@ -129,7 +129,7 @@ Ding.RegisterGuide({ { train = true, talk = 4089, classes = { "WARRIOR" } }, -- level 31 { go = { 1457, 56.08, 79.12 }, text = "Head up the incline" }, -- level 31 { go = { 1457, 57.66, 77.28 }, text = "Walk over the span" }, -- level 31 - { complete = 1038, -- level 31 + { complete = 1038, floor = "up", -- level 31 note = "The object is indoors, one floor up." }, { talk = 4165, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 31 note = "The NPC is indoors." }, @@ -178,7 +178,7 @@ Ding.RegisterGuide({ note = "Inside The Hall of Gears, stick to the top tiers. Take the trail southwest into The Dormitory. By the wall on The Dormitory's lower floor." }, { dungeon = "Gnomeregan", collect = { { 6893, 1 } }, -- level 31 note = "The target is the third boss you meet." }, - { dungeon = "Gnomeregan", collect = { { 9281, 1 } }, -- level 31 + { dungeon = "Gnomeregan", floor = "up", collect = { { 9281, 1 } }, -- level 31 note = "The target sits on the raised deck beside Electrocutioner 6000." }, { complete = 2930, dungeon = "Gnomeregan", races = { "Dwarf", "NightElf", "Gnome", "Skyborne" } }, -- level 31 { complete = 2930, dungeon = "Gnomeregan", races = { "Human" }, classes = { "WARRIOR", "PALADIN", "HUNTER", "ROGUE", "MAGE", "WARLOCK", "DRUID" }, -- level 31 diff --git a/Ding/Guides/Leveling/Alliance/14.lua b/Ding/Guides/Leveling/Alliance/14.lua index ae9d527..3ba254d 100644 --- a/Ding/Guides/Leveling/Alliance/14.lua +++ b/Ding/Guides/Leveling/Alliance/14.lua @@ -44,7 +44,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { turnin = 1241, accept = 1242, -- level 31 note = "The NPC stands by the water's edge." }, - { turnin = 1242, accept = 1243, -- level 31 + { turnin = 1242, accept = 1243, floor = "up", -- level 31 note = "The NPC is indoors, one floor up." }, { talk = 2455, bank = 3712, -- level 31 note = "The NPC is indoors. You need it later for \"Soothing Turtle Bisque\": keep it in the bank to free a bag slot." }, @@ -79,7 +79,7 @@ Ding.RegisterGuide({ note = "The targets are worgen." }, { complete = 221 }, -- level 31 { turnin = 74, accept = 75, why = { back = true, chain = 5, kind = "detour", quest = 75, quests = 8, seconds = 360, short = true, total = 7700, xp = 6500 } }, -- level 31 - { complete = 75, -- level 31 + { complete = 75, floor = "up", -- level 31 note = "Be ready for a fight right away. The object is indoors, one floor up." }, { turnin = 75, accept = 78, why = { kind = "carry", quest = 78, seconds = 4440, xp = 600 } }, -- level 31 { turnin = 91732, races = { "Human" } }, -- level 31 @@ -154,14 +154,14 @@ Ding.RegisterGuide({ note = "This one roams, so scan the surrounding area." }, { turnin = 223, -- level 32 note = "The NPC is indoors." }, - { train = true, talk = 5498, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 32 + { train = true, floor = "top", talk = 5498, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 32 note = "The NPC waits on the tower's highest floor." }, { accept = 690, races = { "Human", "Gnome", "Skyborne" }, classes = { "MAGE" } }, -- level 32 { go = { 1453, 50.56, 90.35 }, races = { "Human", "Gnome" }, classes = { "MAGE" }, text = "Head indoors" }, -- level 32 { accept = 1301, races = { "Human", "Gnome", "Skyborne" }, classes = { "MAGE" }, -- level 32 note = "The NPC is indoors." }, { go = { 1453, 42.29, 81.76 }, races = { "Human", "Gnome" }, classes = { "MAGE" }, text = "Head indoors" }, -- level 32 - { turnin = 335, accept = 336, races = { "Human", "Gnome", "Skyborne" }, classes = { "MAGE" }, -- level 32 + { turnin = 335, accept = 336, floor = "down", races = { "Human", "Gnome", "Skyborne" }, classes = { "MAGE" }, -- level 32 note = "The NPC waits on the lower level, indoors." }, { collect = { { 5849, 1 } }, spots = { { 1453, 64.24, 80.81 } }, when = { log = 1179 }, races = { "Human", "Gnome" }, classes = { "MAGE" } }, -- level 32 { collect = { { 5849, 1 } }, spots = { { 1453, 64.24, 80.81 } }, when = { done = 1179 }, races = { "Human", "Gnome" }, classes = { "MAGE" } }, -- level 32 @@ -171,7 +171,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { talk = 15659, buy = { { 3719, 1, 15659 }, { 2997, 1, 15659 } }, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 32 note = "Hang on to it; an upcoming quest uses it. The NPC is indoors." }, - { turnin = 1245, accept = 1246, -- level 32 + { turnin = 1245, accept = 1246, floor = "up", -- level 32 note = "The NPC is indoors, one floor up." }, { talk = 15659, buy = { { 3719, 1, 15659 }, { 2997, 1, 15659 } }, classes = { "WARRIOR", "PALADIN", "HUNTER", "ROGUE", "PRIEST", "WARLOCK", "DRUID" }, -- level 32 note = "Hang on to it; an upcoming quest uses it. The NPC is indoors." }, @@ -187,12 +187,12 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { go = { 1453, 42.29, 81.76 }, classes = { "WARRIOR", "PALADIN", "HUNTER", "ROGUE", "PRIEST", "WARLOCK", "DRUID" }, text = "Head indoors" }, -- level 32 { turnin = 78090, races = { "Human", "Dwarf" }, classes = { "PALADIN" } }, -- level 32 - { turnin = 335, accept = 336, classes = { "WARRIOR", "PALADIN", "HUNTER", "ROGUE", "PRIEST", "WARLOCK", "DRUID" }, -- level 32 + { turnin = 335, accept = 336, floor = "down", classes = { "WARRIOR", "PALADIN", "HUNTER", "ROGUE", "PRIEST", "WARLOCK", "DRUID" }, -- level 32 note = "The NPC waits on the lower level, indoors." }, { go = { 1453, 42.29, 81.76 }, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, text = "Head indoors", -- level 32 note = "The NPC waits on the lower level, indoors." }, { train = true, talk = 461, races = { "Human", "Gnome" }, classes = { "WARLOCK" } }, -- level 32 - { vendor = true, talk = 5520, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 32 + { floor = "down", vendor = true, talk = 5520, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 32 note = "The NPC waits on the lower level, indoors." }, { accept = 1798, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARLOCK" }, -- level 32 note = "The NPC is indoors." }, @@ -202,9 +202,9 @@ Ding.RegisterGuide({ { go = { 1453, 52.93, 51.05 }, races = { "Human", "Dwarf", "NightElf" }, classes = { "PRIEST" }, text = "Head indoors", -- level 32 note = "This one roams, so scan the surrounding area. The NPC is indoors." }, { train = true, talk = 5484, races = { "Human", "Dwarf", "NightElf" }, classes = { "PRIEST" } }, -- level 32 - { train = true, talk = 5479, classes = { "WARRIOR" }, -- level 32 + { train = true, floor = "up", talk = 5479, classes = { "WARRIOR" }, -- level 32 note = "The NPC is indoors, one floor up." }, - { accept = 1718, classes = { "WARRIOR" }, why = { continent = true, kind = "carry", quest = 1718, seconds = 28380, xp = 600 }, -- level 32 + { accept = 1718, floor = "up", classes = { "WARRIOR" }, why = { continent = true, kind = "carry", quest = 1718, seconds = 28380, xp = 600 }, -- level 32 note = "The NPC is indoors, one floor up." }, { train = true, talk = 918, classes = { "ROGUE" } }, -- level 32 { train = true, talk = 5515, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 32 @@ -215,7 +215,7 @@ Ding.RegisterGuide({ note = "Wait for the talking to finish" }, { turnin = 1447, accept = 1247 }, -- level 32 { turnin = 97220, races = { "NightElf" } }, -- level 32 - { turnin = 1247, accept = 1248, -- level 32 + { turnin = 1247, accept = 1248, floor = "up", -- level 32 note = "The NPC is indoors, one floor up." }, { go = { 1453, 73.19, 46.69 }, text = "Head indoors" }, -- level 32 { turnin = 336, races = { "Dwarf", "NightElf" }, classes = { "WARRIOR", "PALADIN", "HUNTER", "ROGUE", "PRIEST", "WARLOCK", "DRUID" } }, -- level 32 diff --git a/Ding/Guides/Leveling/Alliance/16.lua b/Ding/Guides/Leveling/Alliance/16.lua index 7acb885..b011a66 100644 --- a/Ding/Guides/Leveling/Alliance/16.lua +++ b/Ding/Guides/Leveling/Alliance/16.lua @@ -26,11 +26,11 @@ Ding.RegisterGuide({ { sethearth = "Theramore Isle", talk = 6272, -- level 33 note = "The NPC is indoors." }, { accept = 1282 }, -- level 33 - { turnin = 1302, -- level 33 + { turnin = 1302, floor = "up", -- level 33 note = "The NPC is indoors, one floor up." }, - { turnin = 1264, accept = 1265, -- level 34 + { turnin = 1264, accept = 1265, floor = "up", -- level 34 note = "The NPC is indoors, one floor up." }, - { turnin = 1282, -- level 34 + { turnin = 1282, floor = "up", -- level 34 note = "The NPC is indoors, one floor up." }, { complete = 1265, -- level 34 note = "The NPC is indoors." }, @@ -90,18 +90,18 @@ Ding.RegisterGuide({ { turnin = 1135, -- level 34 note = "The NPC is indoors." }, { turnin = 1219, accept = 1220 }, -- level 34 - { turnin = { 1220, 1252, 1253, 1284 }, accept = { 1259, 1319 }, -- level 34 + { turnin = { 1220, 1252, 1253, 1284 }, accept = { 1259, 1319 }, floor = "up", -- level 34 note = "The NPC is indoors, one floor up." }, - { turnin = 1259, accept = 1285, -- level 34 + { turnin = 1259, accept = 1285, floor = "up", -- level 34 note = "The NPC is indoors, one floor up." }, - { turnin = 1285, -- level 34 + { turnin = 1285, floor = "up", -- level 34 note = "The NPC is indoors, one floor up." }, { turnin = 1319, accept = 1320, -- level 34 note = "The NPC is indoors." }, - { turnin = 1320, -- level 34 + { turnin = 1320, floor = "up", -- level 34 note = "The NPC is indoors, one floor up." }, { go = { 1413, 63.03, 37.19 }, fly = true, talk = 16227, text = "Flight master in Ratchet" }, -- level 34 - { turnin = 1178, accept = 1180, -- level 34 + { turnin = 1178, accept = 1180, floor = "up", -- level 34 note = "The NPC is indoors, one floor up." }, { turnin = 1798, accept = 1758, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARLOCK" } }, -- level 34 { turnin = 1718, accept = 1719, classes = { "WARRIOR" } }, -- level 34 diff --git a/Ding/Guides/Leveling/Alliance/17.lua b/Ding/Guides/Leveling/Alliance/17.lua index 460cc16..fcbe723 100644 --- a/Ding/Guides/Leveling/Alliance/17.lua +++ b/Ding/Guides/Leveling/Alliance/17.lua @@ -18,11 +18,11 @@ Ding.RegisterGuide({ note = "The NPC is indoors at street level." }, { accept = 605, -- level 35 note = "The NPC is indoors at street level." }, - { accept = { 201, 198, 616 }, -- level 35 + { accept = { 201, 198, 616 }, floor = "top", -- level 35 note = "Climb to the highest floor of the building." }, - { accept = 213, -- level 35 + { accept = 213, floor = "top", -- level 35 note = "Climb to the highest floor of the building." }, - { turnin = { 1181, 616 }, accept = { 1182, 578 }, -- level 35 + { turnin = { 1181, 616 }, accept = { 1182, 578 }, floor = "up", -- level 35 note = "The NPC is upstairs, out on the balcony." }, { talk = 2625 }, -- level 35 { bank = 5800, when = { log = 1112 }, -- level 35 @@ -34,7 +34,7 @@ Ding.RegisterGuide({ note = "The NPC stands on the top tier of the pier. The NPC is indoors." }, { go = { 1434, 27.5, 77.84 }, fly = true, talk = 2859, text = "Fly to Booty Bay", -- level 35 note = "The NPC stands on the top tier of the pier. The NPC is upstairs, out on the balcony." }, - { train = true, talk = 5498, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 35 + { train = true, floor = "top", talk = 5498, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 35 note = "The NPC waits on the tower's highest floor." }, { turnin = 198, -- level 35 note = "If he is absent, move on without him. You may come back for it another time." }, @@ -45,7 +45,7 @@ Ding.RegisterGuide({ { accept = 186 }, -- level 35 { accept = 191, sticky = { 204, 203 } }, -- level 35 { complete = 204 }, -- level 35 - { turnin = 200, accept = 328, -- level 35 + { turnin = 200, accept = 328, floor = "up", -- level 35 note = "The object is indoors, one floor up." }, { complete = 204, keep = 2633, -- level 35 note = "These foes heal both their allies and themselves." }, @@ -54,7 +54,7 @@ Ding.RegisterGuide({ note = "When the targets run out, skip ahead. No rush; you may complete this afterwards." }, { complete = 186 }, -- level 35 { level = 35, sticky = 213, patrol = { { 1434, 46.35, 12.74 }, { 1434, 45.94, 15.25 }, { 1434, 46.43, 17.64 }, { 1434, 42.85, 14.97 }, { 1434, 44.03, 13.46 } } }, -- level 35 - { collect = { { 5851, 1 } }, spots = { { 1434, 42.62, 18.29 } }, -- level 35 + { floor = "up", collect = { { 5851, 1 } }, spots = { { 1434, 42.62, 18.29 } }, -- level 35 note = "The objective sits up on the raised deck. The target is indoors." }, { complete = 1182, -- level 35 note = "The object is indoors." }, @@ -79,11 +79,11 @@ Ding.RegisterGuide({ { turnin = 191 }, -- level 35 { turnin = 605, -- level 35 note = "The NPC is indoors at street level." }, - { turnin = { 201, 210 }, -- level 35 + { turnin = { 201, 210 }, floor = "top", -- level 35 note = "Climb to the highest floor of the building." }, - { turnin = 213, -- level 35 + { turnin = 213, floor = "top", -- level 35 note = "Climb to the highest floor of the building." }, - { turnin = { 578, 1182 }, accept = 1183, why = { continent = true, kind = "carry", quest = 1183, seconds = 17040, xp = 700 }, -- level 35 + { turnin = { 578, 1182 }, accept = 1183, floor = "up", why = { continent = true, kind = "carry", quest = 1183, seconds = 17040, xp = 700 }, -- level 35 note = "The NPC is upstairs, out on the balcony." }, { talk = 2625, bank = { 5852, 2719 }, -- level 35 note = "You need them later for \"Goblin Sponsorship\" and \"The Hidden Key\": keep them in the bank to free bag slots." }, @@ -136,7 +136,7 @@ Ding.RegisterGuide({ { go = { 1453, 42.29, 81.76 }, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, text = "Head indoors", -- level 35 note = "The NPC waits on the lower level, indoors." }, { train = true, talk = 461, races = { "Human", "Gnome" }, classes = { "WARLOCK" } }, -- level 35 - { vendor = true, talk = 5520, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 35 + { floor = "down", vendor = true, talk = 5520, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 35 note = "The NPC waits on the lower level, indoors." }, { go = { 1453, 52.93, 51.05 }, races = { "Human", "Dwarf" }, classes = { "PALADIN" }, text = "Head indoors", -- level 35 note = "The NPC is indoors." }, @@ -144,7 +144,7 @@ Ding.RegisterGuide({ { go = { 1453, 52.93, 51.05 }, races = { "Human", "Dwarf", "NightElf" }, classes = { "PRIEST" }, text = "Head indoors", -- level 35 note = "This one roams, so scan the surrounding area. The NPC is indoors." }, { train = true, talk = 5484, races = { "Human", "Dwarf", "NightElf" }, classes = { "PRIEST" } }, -- level 35 - { train = true, talk = 5479, classes = { "WARRIOR" }, -- level 35 + { train = true, floor = "up", talk = 5479, classes = { "WARRIOR" }, -- level 35 note = "The NPC is indoors, one floor up." }, { train = true, talk = 918, classes = { "ROGUE" } }, -- level 35 { train = true, talk = 5515, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 35 diff --git a/Ding/Guides/Leveling/Alliance/18.lua b/Ding/Guides/Leveling/Alliance/18.lua index add4d9a..0c13892 100644 --- a/Ding/Guides/Leveling/Alliance/18.lua +++ b/Ding/Guides/Leveling/Alliance/18.lua @@ -47,7 +47,7 @@ Ding.RegisterGuide({ note = "The targets are lobsters. Your targets sit below the water's surface." }, { turnin = 1455, accept = 1456 }, -- level 36 { turnin = 1465, accept = 1438, sticky = 1459 }, -- level 36 - { complete = 5741, -- level 36 + { complete = 5741, floor = "top", -- level 36 note = "The target is on the tower's highest floor." }, { turnin = 1438, accept = 1439, -- level 36 note = "For this quest you guard an NPC on the move. If she is absent, wait for her to reappear. The NPC is indoors." }, diff --git a/Ding/Guides/Leveling/Alliance/19.lua b/Ding/Guides/Leveling/Alliance/19.lua index dc818ef..2ca5ce1 100644 --- a/Ding/Guides/Leveling/Alliance/19.lua +++ b/Ding/Guides/Leveling/Alliance/19.lua @@ -17,20 +17,20 @@ Ding.RegisterGuide({ { talk = 2625 }, -- level 37 { sethearth = "Booty Bay", talk = 6807, -- level 37 note = "The NPC is indoors at street level." }, - { turnin = 1115, -- level 37 + { turnin = 1115, floor = "top", -- level 37 note = "Climb to the highest floor of the building." }, - { accept = 189, -- level 37 + { accept = 189, floor = "top", -- level 37 note = "Climb to the highest floor of the building." }, - { accept = 601, -- level 37 + { accept = 601, floor = "up", -- level 37 note = "The NPC is upstairs, out on the balcony." }, { accept = 577, -- level 37 note = "The NPC stands on the top tier of the pier. The NPC is indoors." }, - { train = true, talk = 5498, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 37 + { train = true, floor = "top", talk = 5498, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 37 note = "The NPC waits on the tower's highest floor." }, { go = { 1453, 42.29, 81.76 }, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, text = "Head indoors", -- level 37 note = "The NPC waits on the lower level, indoors." }, { train = true, talk = 461, races = { "Human", "Gnome" }, classes = { "WARLOCK" } }, -- level 37 - { vendor = true, talk = 5520, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 37 + { floor = "down", vendor = true, talk = 5520, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 37 note = "The NPC waits on the lower level, indoors." }, { go = { 1453, 52.93, 51.05 }, races = { "Human", "Dwarf" }, classes = { "PALADIN" }, text = "Head indoors", -- level 37 note = "The NPC is indoors." }, @@ -38,7 +38,7 @@ Ding.RegisterGuide({ { go = { 1453, 52.93, 51.05 }, races = { "Human", "Dwarf", "NightElf" }, classes = { "PRIEST" }, text = "Head indoors", -- level 37 note = "This one roams, so scan the surrounding area. The NPC is indoors." }, { train = true, talk = 5484, races = { "Human", "Dwarf", "NightElf" }, classes = { "PRIEST" } }, -- level 37 - { train = true, talk = 5479, classes = { "WARRIOR" }, -- level 37 + { train = true, floor = "up", talk = 5479, classes = { "WARRIOR" }, -- level 37 note = "The NPC is indoors, one floor up." }, { train = true, talk = 918, classes = { "ROGUE" } }, -- level 37 { train = true, talk = 5515, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 37 @@ -47,12 +47,12 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { talk = 15659, collect = { { 4278, 4 } }, -- level 37 note = "The NPC is indoors." }, - { accept = 627, when = { item = { 4278, 4 } }, -- level 37 + { accept = 627, floor = "top", when = { item = { 4278, 4 } }, -- level 37 note = "Climb to the highest floor of the building." }, - { turnin = 627, when = { log = 627, ready = 627 }, -- level 37 + { turnin = 627, floor = "top", when = { log = 627, ready = 627 }, -- level 37 note = "Climb to the highest floor of the building." }, { accept = 622, when = { done = 627, log = 627 } }, -- level 37 - { turnin = 627, when = { done = 627, ready = 627 }, -- level 37 + { turnin = 627, floor = "top", when = { done = 627, ready = 627 }, -- level 37 note = "Climb to the highest floor of the building." }, { accept = 622, when = { done = 627 } }, -- level 37 { accept = 207, elite = true }, -- level 37 @@ -64,7 +64,7 @@ Ding.RegisterGuide({ { complete = 1712, keep = 3357, classes = { "WARRIOR" }, -- level 37 note = "They compete for spawn points with the other Kurzen foes. A key class quest coming up requires this." }, { go = { 1434, 45.88, 8.15 }, text = "Go into the cavern" }, -- level 37 - { turnin = 328, accept = 329, -- level 37 + { turnin = 328, accept = 329, floor = "down", -- level 37 note = "Head to the lower level of the cavern." }, { complete = 574, -- level 37 note = "The targets are on the cave floor." }, @@ -103,11 +103,11 @@ Ding.RegisterGuide({ { turnin = 330, accept = 331 }, -- level 38 { turnin = 331 }, -- level 38 { train = true, talk = 12042, races = { "NightElf" }, classes = { "DRUID" } }, -- level 38 - { accept = 1116, -- level 38 + { accept = 1116, floor = "top", -- level 38 note = "Climb to the highest floor of the building." }, - { turnin = 189, -- level 38 + { turnin = 189, floor = "top", -- level 38 note = "Climb to the highest floor of the building." }, - { turnin = 601, accept = 602, why = { kind = "carry", quest = 602, seconds = 23940, xp = 1400 }, -- level 38 + { turnin = 601, accept = 602, floor = "up", why = { kind = "carry", quest = 602, seconds = 23940, xp = 1400 }, -- level 38 note = "The NPC is upstairs, out on the balcony." }, { talk = 2625, bank = { 3960, 4306 }, -- level 38 note = "You need them later for \"Magical Analysis\" and \"Caught!\": keep them in the bank to free bag slots." }, diff --git a/Ding/Guides/Leveling/Alliance/20.lua b/Ding/Guides/Leveling/Alliance/20.lua index 67d659f..a727c95 100644 --- a/Ding/Guides/Leveling/Alliance/20.lua +++ b/Ding/Guides/Leveling/Alliance/20.lua @@ -18,7 +18,7 @@ Ding.RegisterGuide({ [3628] = { kind = "prereq" }, }, steps = { - { train = true, talk = 5498, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 38 + { train = true, floor = "top", talk = 5498, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 38 note = "Stormwind first, then the Swamp of Sorrows. The NPC waits on the tower's highest floor." }, { go = { 1453, 50.55, 90.37 }, races = { "Human", "Gnome" }, classes = { "MAGE" }, text = "Head indoors" }, -- level 38 { accept = 1260, races = { "Human", "Gnome", "Skyborne" }, classes = { "MAGE" }, -- level 38 @@ -26,13 +26,13 @@ Ding.RegisterGuide({ { go = { 1453, 51.56, 73.67 }, races = { "Human", "Gnome" }, classes = { "MAGE" }, text = "Head indoors" }, -- level 38 { accept = 1363, races = { "Human", "Gnome", "Skyborne" }, classes = { "MAGE" }, -- level 38 note = "The NPC is indoors." }, - { turnin = 1363, accept = 1364, races = { "Human", "Gnome", "Skyborne" }, classes = { "MAGE" }, -- level 38 + { turnin = 1363, accept = 1364, floor = "up", races = { "Human", "Gnome", "Skyborne" }, classes = { "MAGE" }, -- level 38 note = "The NPC is indoors, one floor up." }, { go = { 1453, 51.56, 73.67 }, text = "Head indoors" }, -- level 38 { accept = 1363, races = { "Dwarf", "NightElf" }, -- level 38 note = "The NPC is indoors." }, { accept = 1363, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARRIOR", "PALADIN", "HUNTER", "ROGUE", "PRIEST", "WARLOCK", "DRUID" } }, -- level 38 - { turnin = 1363, races = { "Dwarf", "NightElf" }, -- level 38 + { turnin = 1363, floor = "up", races = { "Dwarf", "NightElf" }, -- level 38 note = "The NPC is indoors, one floor up." }, { turnin = 1363, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARRIOR", "PALADIN", "HUNTER", "ROGUE", "PRIEST", "WARLOCK", "DRUID" } }, -- level 38 { go = { 1453, 50.55, 90.37 }, text = "Head indoors" }, -- level 38 @@ -42,7 +42,7 @@ Ding.RegisterGuide({ { go = { 1453, 42.29, 81.76 }, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, text = "Head indoors", -- level 38 note = "The NPC waits on the lower level, indoors." }, { train = true, talk = 461, races = { "Human", "Gnome" }, classes = { "WARLOCK" } }, -- level 38 - { vendor = true, talk = 5520, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 38 + { floor = "down", vendor = true, talk = 5520, races = { "Human", "Gnome" }, classes = { "WARLOCK" }, -- level 38 note = "The NPC waits on the lower level, indoors." }, { go = { 1453, 52.93, 51.05 }, races = { "Human", "Dwarf" }, classes = { "PALADIN" }, text = "Head indoors", -- level 38 note = "The NPC is indoors." }, @@ -50,7 +50,7 @@ Ding.RegisterGuide({ { go = { 1453, 52.93, 51.05 }, races = { "Human", "Dwarf", "NightElf" }, classes = { "PRIEST" }, text = "Head indoors", -- level 38 note = "This one roams, so scan the surrounding area. The NPC is indoors." }, { train = true, talk = 5484, races = { "Human", "Dwarf", "NightElf" }, classes = { "PRIEST" } }, -- level 38 - { train = true, talk = 5479, classes = { "WARRIOR" }, -- level 38 + { train = true, floor = "up", talk = 5479, classes = { "WARRIOR" }, -- level 38 note = "The NPC is indoors, one floor up." }, { train = true, talk = 918, classes = { "ROGUE" } }, -- level 38 { accept = 1448, -- level 38 @@ -88,9 +88,9 @@ Ding.RegisterGuide({ note = "Hunt the little winged dragonkin." }, { level = 38, xp = 77300, patrol = { { 1435, 25.37, 49.15 }, { 1435, 28.64, 48.04 }, { 1435, 28.24, 52.15 }, { 1435, 30.16, 54.56 }, { 1435, 32.04, 50.84 }, { 1435, 34.64, 54.56 }, { 1435, 28.84, 60.56 }, { 1435, 27.56, 63.66 }, { 1435, 25.03, 61.65 }, { 1435, 24.35, 58.24 }, { 1435, 21.43, 59.04 }, { 1435, 21.94, 63.66 }, { 1435, 16.64, 56.85 }, { 1435, 16.23, 53.36 }, { 1435, 19.26, 53.15 }, { 1435, 25.46, 45.14 }, { 1435, 27.86, 43.43 }, { 1435, 21.44, 43.03 }, { 1435, 22.43, 37.16 }, { 1435, 32.84, 28.86 }, { 1435, 35.43, 30.55 }, { 1435, 37.55, 28.37 }, { 1435, 40.43, 29.76 }, { 1435, 43.66, 28.95 }, { 1435, 37.96, 32.77 }, { 1435, 38.85, 37.35 }, { 1435, 43.24, 43.16 }, { 1435, 38.44, 45.74 }, { 1435, 47.34, 34.83 } }, why = { kind = "level", levels = { 34, 43 } }, -- level 38 note = "Together with the next turn-ins, this brings you to level 39." }, - { turnin = 1116, -- level 38 + { turnin = 1116, floor = "top", -- level 38 note = "Climb to the highest floor of the building." }, - { accept = 1117, why = { continent = true, kind = "carry", once = true, quest = 1117, seconds = 33300, short = true, xp = 3500 }, -- level 39 + { accept = 1117, floor = "top", why = { continent = true, kind = "carry", once = true, quest = 1117, seconds = 33300, short = true, xp = 3500 }, -- level 39 note = "Let the conversation play out. Climb to the highest floor of the building." }, { collect = { { 5996, 2 } }, classes = { "WARRIOR", "PALADIN", "HUNTER", "ROGUE", "PRIEST", "MAGE" } }, -- level 39 { talk = 15659 }, -- level 39 diff --git a/Ding/Guides/Leveling/Alliance/21.lua b/Ding/Guides/Leveling/Alliance/21.lua index 0c49367..ad6ef60 100644 --- a/Ding/Guides/Leveling/Alliance/21.lua +++ b/Ding/Guides/Leveling/Alliance/21.lua @@ -30,7 +30,7 @@ Ding.RegisterGuide({ note = "The targets are kobolds. Additional ones are in the cavern up the trail. Keep away from Hammerfall." }, { go = { 1417, 80.95, 40.02 }, text = "Climb the trail to the cavern" }, -- level 39 { go = { 1417, 82.62, 36.1 }, text = "Go into the cavern" }, -- level 39 - { turnin = 642, accept = 651, -- level 39 + { turnin = 642, accept = 651, floor = "up", -- level 39 note = "Climb to the cave's upper level." }, { go = { 1417, 82.75, 36.26 }, text = "Head out of the cave" }, -- level 39 { accept = 79976 }, -- level 39 diff --git a/Ding/Guides/Leveling/Alliance/22.lua b/Ding/Guides/Leveling/Alliance/22.lua index 278662f..af61cd9 100644 --- a/Ding/Guides/Leveling/Alliance/22.lua +++ b/Ding/Guides/Leveling/Alliance/22.lua @@ -31,7 +31,7 @@ Ding.RegisterGuide({ { turnin = 4487, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARLOCK" } }, -- level 40 { accept = 4490, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARLOCK" } }, -- level 40 { turnin = 4490, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARLOCK" } }, -- level 40 - { accept = 1286, -- level 40 + { accept = 1286, floor = "up", -- level 40 note = "The NPC is indoors, one floor up." }, { turnin = 1260, accept = 1204, -- level 40 note = "The NPC is indoors." }, @@ -53,12 +53,12 @@ Ding.RegisterGuide({ { destroy = 5884 }, -- level 40 { turnin = 1177, -- level 40 note = "Steer clear of Brackenwall Village." }, - { turnin = 1286, accept = 1287, -- level 40 + { turnin = 1286, accept = 1287, floor = "up", -- level 40 note = "Speak with him once he gives up. The NPC is indoors, one floor up." }, { complete = 1187 }, -- level 40 { turnin = { 1204, 1222 }, accept = 1258, -- level 40 note = "The NPC is indoors." }, - { turnin = 1287, -- level 40 + { turnin = 1287, floor = "up", -- level 40 note = "The NPC is indoors, one floor up." }, }, }) diff --git a/Ding/Guides/Leveling/Alliance/23.lua b/Ding/Guides/Leveling/Alliance/23.lua index 9b79ea4..c58d8ed 100644 --- a/Ding/Guides/Leveling/Alliance/23.lua +++ b/Ding/Guides/Leveling/Alliance/23.lua @@ -65,7 +65,7 @@ Ding.RegisterGuide({ { accept = 1052, dungeon = "Scarlet Monastery" }, -- level 41 { turnin = 1466, accept = 1467 }, -- level 41 { turnin = 93224 }, -- level 41 - { turnin = 1052, accept = 1053, dungeon = "Scarlet Monastery", -- level 41 + { turnin = 1052, accept = 1053, dungeon = "Scarlet Monastery", floor = "up", -- level 41 note = "The NPC is indoors, one floor up." }, { complete = 1053, dungeon = "Scarlet Monastery", -- level 41 note = "Head into the Library wing. The target is the dungeon's opening boss." }, @@ -75,7 +75,7 @@ Ding.RegisterGuide({ note = "This is in the Armory wing. The target is the dungeon's last boss." }, { complete = 1053, dungeon = "Scarlet Monastery", -- level 41 note = "Found in the Cathedral wing. The target is the dungeon's last boss." }, - { turnin = 1053, dungeon = "Scarlet Monastery", -- level 41 + { turnin = 1053, dungeon = "Scarlet Monastery", floor = "up", -- level 41 note = "The NPC is indoors, one floor up." }, { turnin = 1050, dungeon = "Scarlet Monastery", -- level 41 note = "The NPC is indoors." }, diff --git a/Ding/Guides/Leveling/Alliance/24.lua b/Ding/Guides/Leveling/Alliance/24.lua index 543c6af..5bad5ef 100644 --- a/Ding/Guides/Leveling/Alliance/24.lua +++ b/Ding/Guides/Leveling/Alliance/24.lua @@ -21,7 +21,7 @@ Ding.RegisterGuide({ [732] = { kind = "far" }, }, steps = { - { vendor = true, talk = 5101, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 41 + { floor = "down", vendor = true, talk = 5101, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 41 note = "Ironforge first, then the Badlands. The NPC waits on the lower level, indoors. A lengthy stretch of quests is coming up. This vendor sells no arrows or bullets." }, { talk = 2461, bank = { 5826, 5862 }, -- level 41 note = "The NPC is indoors. You need them later for \"Back to Booty Bay\" and \"Safety First\": keep them in the bank to free bag slots." }, diff --git a/Ding/Guides/Leveling/Alliance/25.lua b/Ding/Guides/Leveling/Alliance/25.lua index aef1db7..0497d29 100644 --- a/Ding/Guides/Leveling/Alliance/25.lua +++ b/Ding/Guides/Leveling/Alliance/25.lua @@ -17,18 +17,18 @@ Ding.RegisterGuide({ note = "Stormwind first, then Stranglethorn Vale." }, { talk = 2461, collect = { { 4502, 1 }, { 5826, 1 } }, spots = { { 1455, 35.87, 60.19 } }, -- level 42 note = "The NPC is indoors." }, - { accept = 1477, why = { action = "accept", kind = "detour", quest = 1364, quests = 4, seconds = 180, total = 5800, xp = 3300 }, -- level 42 + { accept = 1477, floor = "top", why = { action = "accept", kind = "detour", quest = 1364, quests = 4, seconds = 180, total = 5800, xp = 3300 }, -- level 42 note = "The NPC waits on the tower's highest floor." }, { turnin = 78148, races = { "Human" } }, -- level 42 { accept = 79536 }, -- level 42 { turnin = 79536 }, -- level 42 { go = { 1453, 51.56, 73.67 }, text = "Head indoors" }, -- level 42 - { accept = 1364, races = { "Dwarf", "NightElf" }, why = { kind = "carry", once = true, quest = 1364, seconds = 19500, xp = 3300 }, -- level 42 + { accept = 1364, floor = "up", races = { "Dwarf", "NightElf" }, why = { kind = "carry", once = true, quest = 1364, seconds = 19500, xp = 3300 }, -- level 42 note = "The NPC is indoors, one floor up." }, { accept = 1364, races = { "Human", "Gnome", "Skyborne" }, classes = { "WARRIOR", "PALADIN", "HUNTER", "ROGUE", "PRIEST", "WARLOCK", "DRUID" }, why = { kind = "carry", once = true, quest = 1364, seconds = 19500, xp = 3300 } }, -- level 42 - { accept = 209, -- level 42 + { accept = 209, floor = "top", -- level 42 note = "Climb to the highest floor of the building." }, - { turnin = 669, -- level 42 + { turnin = 669, floor = "up", -- level 42 note = "The NPC is upstairs, out on the balcony." }, { turnin = 603, accept = 610, -- level 42 note = "The NPC is indoors, on the central storey." }, @@ -53,7 +53,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { turnin = 610, accept = 611, -- level 42 note = "The NPC is indoors, on the central storey." }, - { turnin = 599, -- level 42 + { turnin = 599, floor = "up", -- level 42 note = "The NPC is upstairs, out on the balcony." }, { accept = 617 }, -- level 42 { go = { 1434, 27.94, 73.5 }, text = "Take the passage out of Booty Bay" }, -- level 42 @@ -84,13 +84,13 @@ Ding.RegisterGuide({ { turnin = 600, -- level 42 note = "The NPC is indoors at street level." }, { turnin = 621, when = { ready = 621 } }, -- level 42 - { accept = 587, -- level 42 + { accept = 587, floor = "top", -- level 42 note = "Climb to the highest floor of the building." }, - { turnin = 209, -- level 42 + { turnin = 209, floor = "top", -- level 42 note = "Climb to the highest floor of the building." }, - { accept = 604, -- level 42 + { accept = 604, floor = "up", -- level 42 note = "The NPC is upstairs, out on the balcony." }, - { turnin = 611, -- level 42 + { turnin = 611, floor = "up", -- level 42 note = "The NPC is upstairs, out on the balcony." }, { turnin = 617, accept = 623, why = { continent = true, kind = "carry", quest = 623, seconds = 10980, xp = 2700 } }, -- level 42 { talk = 2625 }, -- level 42 @@ -140,9 +140,9 @@ Ding.RegisterGuide({ { go = { 1434, 29.51, 72.47 }, text = "Take the tunnel into Booty Bay" }, -- level 43 { turnin = 576, -- level 43 note = "The NPC stands on the top tier of the pier." }, - { turnin = 604, -- level 43 + { turnin = 604, floor = "up", -- level 43 note = "The NPC is upstairs, out on the balcony." }, - { turnin = 587, -- level 43 + { turnin = 587, floor = "top", -- level 43 note = "Climb to the highest floor of the building." }, { talk = 2625, collect = { { 2725, 1 }, { 2728, 1 }, { 2730, 1 }, { 2732, 1 }, { 2734, 1 }, { 2735, 1 }, { 2738, 1 }, { 2740, 1 }, { 2742, 1 }, { 2744, 1 }, { 2745, 1 }, { 2748, 1 }, { 2749, 1 }, { 2750, 1 }, { 2751, 1 } }, -- level 43 note = "If some pages are unavailable, go on without them." }, diff --git a/Ding/Guides/Leveling/Alliance/26.lua b/Ding/Guides/Leveling/Alliance/26.lua index 481497b..9d34767 100644 --- a/Ding/Guides/Leveling/Alliance/26.lua +++ b/Ding/Guides/Leveling/Alliance/26.lua @@ -24,7 +24,7 @@ Ding.RegisterGuide({ { complete = 1364, -- level 43 note = "Fight the elementals of the swamp. The item drops rarely." }, { turnin = 1398, accept = 1425 }, -- level 43 - { turnin = 1364, -- level 43 + { turnin = 1364, floor = "top", -- level 43 note = "The NPC waits on the tower's highest floor." }, { turnin = 1425 }, -- level 43 { go = { 1419, 65.5, 24.38 }, fly = true, talk = 8609, text = "Fly to Nethergarde Keep", -- level 43 @@ -36,7 +36,7 @@ Ding.RegisterGuide({ { accept = 580, elite = true }, -- level 43 { accept = 1119, when = { done = 621 }, -- level 43 note = "The NPC is indoors at street level." }, - { accept = 2864, -- level 43 + { accept = 2864, floor = "top", -- level 43 note = "Climb to the highest floor of the building." }, { accept = 2872, -- level 43 note = "The NPC is indoors." }, diff --git a/Ding/Guides/Leveling/Alliance/28.lua b/Ding/Guides/Leveling/Alliance/28.lua index ddb6d78..0d7acb4 100644 --- a/Ding/Guides/Leveling/Alliance/28.lua +++ b/Ding/Guides/Leveling/Alliance/28.lua @@ -29,7 +29,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { accept = 2982, -- level 44 note = "The NPC is indoors." }, - { turnin = 4124, accept = 4125, -- level 44 + { turnin = 4124, accept = 4125, floor = "up", -- level 44 note = "The NPC is indoors, one floor up." }, { turnin = 2866, accept = 2867, object = 142179, -- level 44 note = "Position yourself in its center." }, @@ -59,13 +59,13 @@ Ding.RegisterGuide({ { train = true, talk = 12042, races = { "NightElf" }, classes = { "DRUID" } }, -- level 46 { train = true, talk = 7312, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 46 note = "The NPC is indoors." }, - { turnin = 4127, accept = 4129, -- level 46 + { turnin = 4127, accept = 4129, floor = "up", -- level 46 note = "The NPC is indoors, one floor up." }, - { turnin = 4129, -- level 46 + { turnin = 4129, floor = "top", -- level 46 note = "The NPC waits on the tower's highest floor." }, - { accept = 4130, -- level 46 + { accept = 4130, floor = "top", -- level 46 note = "Let the conversation play out. The NPC waits on the tower's highest floor." }, - { turnin = 4130, accept = 4131, -- level 46 + { turnin = 4130, accept = 4131, floor = "up", -- level 46 note = "The NPC is indoors, one floor up." }, { turnin = 2870, accept = 2871, -- level 46 note = "The NPC is indoors." }, @@ -137,17 +137,17 @@ Ding.RegisterGuide({ { turnin = 2821 }, -- level 46 { turnin = 2982, accept = 3445, why = { kind = "carry", quest = 3445, seconds = 71940, xp = 3700 }, -- level 46 note = "The NPC is indoors." }, - { turnin = 4265, accept = 4266, -- level 46 + { turnin = 4265, accept = 4266, floor = "up", -- level 46 note = "The NPC is indoors, one floor up." }, { turnin = 4266, accept = 4267, -- level 46 note = "The NPC is indoors." }, { turnin = 3022, accept = 3661, -- level 46 note = "The NPC is indoors." }, - { turnin = 2939, -- level 46 + { turnin = 2939, floor = "up", -- level 46 note = "The NPC is indoors, one floor up." }, - { accept = 2940, -- level 46 + { accept = 2940, floor = "up", -- level 46 note = "The object is indoors, one floor up." }, - { turnin = 2940, accept = 2941, why = { kind = "carry", once = true, quest = 2941, seconds = 59700, xp = 1100 }, -- level 46 + { turnin = 2940, accept = 2941, floor = "up", why = { kind = "carry", once = true, quest = 2941, seconds = 59700, xp = 1100 }, -- level 46 note = "The NPC is indoors, one floor up." }, { talk = 4209, bank = { 9329, 10699, 8564, 6258, 6259 }, -- level 46 note = "You need them later for \"The Borrower\", \"Screecher Spirits\", \"The Super Egg-O-Matic\" and \"Rhapsody's Kalimdor Kocktail\": keep them in the bank to free bag slots." }, @@ -158,14 +158,14 @@ Ding.RegisterGuide({ { go = { 1457, 32.08, 16.4 }, classes = { "ROGUE" }, text = "Step into the cavern within the trunk", -- level 46 note = "The spot is on the lower floor of the hollow tree." }, { train = true, talk = 4163, classes = { "ROGUE" } }, -- level 46 - { train = true, talk = 4146, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 46 + { train = true, floor = "up", talk = 4146, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 46 note = "The NPC is indoors, one floor up." }, { train = true, talk = 4089, classes = { "WARRIOR" } }, -- level 46 { train = true, talk = 4091, races = { "Human", "Dwarf", "NightElf" }, classes = { "PRIEST" }, -- level 46 note = "The NPC is indoors." }, - { turnin = 4267, -- level 46 + { turnin = 4267, floor = "up", -- level 46 note = "The NPC is indoors, one floor up." }, - { turnin = 2972, -- level 46 + { turnin = 2972, floor = "up", -- level 46 note = "The NPC is indoors, one floor up." }, { train = true, talk = 5148, races = { "Human", "Dwarf" }, classes = { "PALADIN" }, -- level 46 note = "The NPC is indoors." }, @@ -223,7 +223,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { train = true, talk = 5148, races = { "Human", "Dwarf" }, classes = { "PALADIN" }, -- level 48 note = "The NPC is indoors." }, - { vendor = true, talk = 5101, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 48 + { floor = "down", vendor = true, talk = 5101, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 48 note = "The NPC waits on the lower level, indoors. A lengthy stretch of quests is coming up. This vendor sells no arrows or bullets." }, }, }) diff --git a/Ding/Guides/Leveling/Alliance/30.lua b/Ding/Guides/Leveling/Alliance/30.lua index 8596c54..df4bc0e 100644 --- a/Ding/Guides/Leveling/Alliance/30.lua +++ b/Ding/Guides/Leveling/Alliance/30.lua @@ -24,7 +24,7 @@ Ding.RegisterGuide({ note = "These foes hide in stealth." }, { vendor = true, talk = 8139, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" } }, -- level 49 { go = { 1446, 68.56, 41.43 }, text = "Head down the passage that opens on Lost Rigger Cove" }, -- level 49 - { complete = 2873, -- level 49 + { complete = 2873, floor = "up", -- level 49 note = "The object is indoors, one floor up." }, { complete = 2875 }, -- level 49 { accept = 2876, collect = { { 9276, 1 }, { 9250, 1 } }, useitem = { 9276, 9250 }, when = { maxlevel = 49 }, -- level 49 diff --git a/Ding/Guides/Leveling/Alliance/32.lua b/Ding/Guides/Leveling/Alliance/32.lua index ae10faf..20400ba 100644 --- a/Ding/Guides/Leveling/Alliance/32.lua +++ b/Ding/Guides/Leveling/Alliance/32.lua @@ -12,7 +12,7 @@ Ding.RegisterGuide({ steps = { { go = { 1434, 27.17, 77.01 }, text = "Travel to Booty Bay", -- level 49 note = "Stranglethorn Vale: Booty Bay, at the southern tip." }, - { accept = 608, -- level 49 + { accept = 608, floor = "up", -- level 49 note = "The NPC is upstairs, out on the balcony." }, { turnin = 2874, -- level 49 note = "The NPC is indoors." }, @@ -49,7 +49,7 @@ Ding.RegisterGuide({ { turnin = 624, accept = 625, why = { back = true, chain = 2, kind = "detour", quest = 624, seconds = 840, short = true, xp = 10000 }, -- level 50 note = "Look underneath the bridge. Your targets sit below the water's surface." }, { turnin = 93176 }, -- level 50 - { turnin = 608, -- level 50 + { turnin = 608, floor = "up", -- level 50 note = "The NPC is upstairs, out on the balcony." }, { sethearth = "Booty Bay", talk = 6807, -- level 50 note = "The NPC is indoors at street level." }, diff --git a/Ding/Guides/Leveling/Alliance/33.lua b/Ding/Guides/Leveling/Alliance/33.lua index 9452b14..a8aa9b5 100644 --- a/Ding/Guides/Leveling/Alliance/33.lua +++ b/Ding/Guides/Leveling/Alliance/33.lua @@ -60,14 +60,14 @@ Ding.RegisterGuide({ { accept = 3462, elite = true }, -- level 50 { turnin = 3462, elite = true }, -- level 50 { accept = 3463, elite = true }, -- level 50 - { complete = 3463, elite = true, equip = 10515, -- level 50 + { complete = 3463, elite = true, floor = "up", equip = 10515, -- level 50 note = "The spot is at the tower's upper level. Beware, this foe is elite." }, - { complete = 3463, elite = true, equip = 10515, -- level 50 + { complete = 3463, elite = true, floor = "up", equip = 10515, -- level 50 note = "The spot is at the tower's upper level. Beware, this foe is elite." }, - { complete = 3463, elite = true, equip = 10515, -- level 50 + { complete = 3463, elite = true, floor = "up", equip = 10515, -- level 50 note = "The spot is at the tower's upper level. Beware, this foe is elite." }, { go = { 1427, 52.52, 58.01 }, elite = true, text = "Walk over the rope bridge" }, -- level 50 - { complete = 3463, elite = true, equip = 10515, -- level 50 + { complete = 3463, elite = true, floor = "up", equip = 10515, -- level 50 note = "The spot is at the tower's upper level. Beware, this foe is elite." }, { turnin = 4451, accept = 4449, races = { "Gnome", "Skyborne" }, classes = { "WARRIOR", "PALADIN", "HUNTER", "ROGUE", "MAGE", "WARLOCK", "DRUID" } }, -- level 50 { turnin = 4451, accept = 4449, races = { "Human", "Dwarf" } }, -- level 50 @@ -111,16 +111,16 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { talk = 2455, bank = 10575, -- level 51 note = "The NPC is indoors. You need it later for \"A Taste of Flame\": keep it in the bank to free a bag slot." }, - { accept = 7791, when = { item = { 2592, 60 } }, -- level 51 + { accept = 7791, floor = "up", when = { item = { 2592, 60 } }, -- level 51 note = "The NPC is indoors, one floor up." }, { turnin = 7791, when = { item = { 2592, 60 }, ready = 7791 } }, -- level 51 - { accept = 7793, when = { item = { 4306, 60 } }, -- level 51 + { accept = 7793, floor = "up", when = { item = { 4306, 60 } }, -- level 51 note = "The NPC is indoors, one floor up." }, { turnin = 7793, when = { item = { 4306, 60 }, ready = 7793 } }, -- level 51 - { accept = 7794, when = { item = { 4338, 60 } }, -- level 51 + { accept = 7794, floor = "up", when = { item = { 4338, 60 } }, -- level 51 note = "The NPC is indoors, one floor up." }, { turnin = 7794, when = { item = { 4338, 60 }, ready = 7794 } }, -- level 51 - { accept = 7795, when = { done = { 7791, 7793, 7794 }, item = { 14047, 60 } }, -- level 51 + { accept = 7795, floor = "up", when = { done = { 7791, 7793, 7794 }, item = { 14047, 60 } }, -- level 51 note = "The NPC is indoors, one floor up." }, { turnin = 7795, when = { done = { 7791, 7793, 7794 }, item = { 14047, 60 }, ready = 7795 } }, -- level 51 }, diff --git a/Ding/Guides/Leveling/Alliance/34.lua b/Ding/Guides/Leveling/Alliance/34.lua index 6874c48..cd29842 100644 --- a/Ding/Guides/Leveling/Alliance/34.lua +++ b/Ding/Guides/Leveling/Alliance/34.lua @@ -27,7 +27,7 @@ Ding.RegisterGuide({ steps = { { go = { 1419, 67.57, 19.29 }, text = "Travel to Nethergarde Keep", -- level 51 note = "Blasted Lands: Nethergarde Keep, in the north-east, then the Burning Steppes." }, - { accept = 2783, -- level 51 + { accept = 2783, floor = "top", -- level 51 note = "The NPC waits on the tower's highest floor." }, { turnin = 2783, accept = 2801, why = { back = true, kind = "detour", quest = 2783, quests = 2, seconds = 60, total = 5100, xp = 4500 } }, -- level 51 { complete = 2801, talk = 7572 }, -- level 51 diff --git a/Ding/Guides/Leveling/Alliance/35.lua b/Ding/Guides/Leveling/Alliance/35.lua index 481fc56..ed23524 100644 --- a/Ding/Guides/Leveling/Alliance/35.lua +++ b/Ding/Guides/Leveling/Alliance/35.lua @@ -41,7 +41,7 @@ Ding.RegisterGuide({ { turnin = 5215, accept = 5216 }, -- level 52 { complete = 5216 }, -- level 52 { turnin = 5216, accept = 5217 }, -- level 52 - { accept = 5021, -- level 52 + { accept = 5021, floor = "up", -- level 52 note = "The NPC is indoors, one floor up." }, { turnin = 5021, accept = 5022, why = { kind = "carry", quest = 5022, seconds = 102900, xp = 2600 }, -- level 52 note = "The object is indoors." }, diff --git a/Ding/Guides/Leveling/Alliance/36.lua b/Ding/Guides/Leveling/Alliance/36.lua index 9afcc17..b2ef616 100644 --- a/Ding/Guides/Leveling/Alliance/36.lua +++ b/Ding/Guides/Leveling/Alliance/36.lua @@ -36,7 +36,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { talk = 4209, bank = { 12724, 10444, 8526 }, -- level 52 note = "The NPC is indoors. You need them later for \"Good Natured Emma\", \"Arcane Runes\" and \"Sprinkle's Secret Ingredient\": keep them in the bank to free bag slots." }, - { turnin = 3790, accept = 3764, why = { chain = 1, kind = "detour", quest = 3764, seconds = 480, short = true, xp = 5200 }, -- level 52 + { turnin = 3790, accept = 3764, floor = "top", why = { chain = 1, kind = "detour", quest = 3764, seconds = 480, short = true, xp = 5200 }, -- level 52 note = "Climb to the highest floor of the building." }, { turnin = 3764, when = { ready = 3764 }, -- level 52 note = "The quest giver stands outdoors, not indoors." }, diff --git a/Ding/Guides/Leveling/Alliance/38.lua b/Ding/Guides/Leveling/Alliance/38.lua index e4ee4e5..07733b1 100644 --- a/Ding/Guides/Leveling/Alliance/38.lua +++ b/Ding/Guides/Leveling/Alliance/38.lua @@ -99,7 +99,7 @@ Ding.RegisterGuide({ { accept = 4243 }, -- level 53 { go = { 1449, 63.82, 16.4 }, text = "Go into the cavern" }, -- level 53 { go = { 1449, 69.02, 17.56 }, text = "Climb the trail" }, -- level 53 - { complete = 4301, -- level 53 + { complete = 4301, floor = "up", -- level 53 note = "This one roams, so scan the surrounding area. Climb to the cave's upper level." }, { go = { 1449, 65.93, 16.72 }, text = "Take the trail through the cavern" }, -- level 53 { turnin = 4243, -- level 53 @@ -149,14 +149,14 @@ Ding.RegisterGuide({ { accept = 1047, patrol = { { 1457, 62.12, 40.42 }, { 1457, 61.83, 32.42 }, { 1457, 61.49, 26.42 }, { 1457, 60.4, 22.26 }, { 1457, 63.38, 18.74 }, { 1457, 65.27, 15.93 }, { 1457, 61.32, 10.37 }, { 1457, 57.12, 7.68 }, { 1457, 54.34, 10.01 }, { 1457, 53.69, 12.25 }, { 1457, 53.34, 15.52 }, { 1457, 51.44, 19.78 }, { 1457, 49.67, 18.8 }, { 1457, 45.03, 19.27 }, { 1457, 42.54, 18.4 }, { 1457, 38.54, 21.38 }, { 1457, 36.59, 13.47 }, { 1457, 35.25, 13.97 }, { 1457, 33.73, 16.03 }, { 1457, 35.22, 13.93 }, { 1457, 36.6, 13.48 }, { 1457, 37.52, 17.09 }, { 1457, 37.9, 20 }, { 1457, 40.84, 26.76 }, { 1457, 41.05, 31 }, { 1457, 39.54, 35.66 }, { 1457, 40.29, 38 }, { 1457, 43.27, 40.97 }, { 1457, 49.54, 41.14 }, { 1457, 56.82, 40.73 }, { 1457, 62.11, 40.72 }, { 1457, 62.11, 48.52 }, { 1457, 62.2, 54.73 }, { 1457, 63.92, 54.98 }, { 1457, 65.58, 55.54 }, { 1457, 67.49, 56.87 }, { 1457, 68, 58.87 }, { 1457, 67.59, 62.19 }, { 1457, 66.29, 65.08 }, { 1457, 65.21, 68.24 }, { 1457, 64.05, 71.27 }, { 1457, 62.6, 69.56 }, { 1457, 60.48, 66.34 }, { 1457, 59.5, 67.55 }, { 1457, 58.11, 68.45 }, { 1457, 56.85, 70.09 }, { 1457, 56.24, 72.12 }, { 1457, 53.62, 75.51 }, { 1457, 50.51, 75.84 }, { 1457, 50.09, 77.47 }, { 1457, 50.03, 80.44 }, { 1457, 49.64, 81.78 }, { 1457, 47.13, 81.95 }, { 1457, 45.86, 79.48 }, { 1457, 43.83, 76.48 }, { 1457, 41.93, 74.81 }, { 1457, 38.98, 73.92 }, { 1457, 38.93, 66.17 }, { 1457, 38.66, 57.48 }, { 1457, 38.68, 52.9 }, { 1457, 38.43, 46.94 }, { 1457, 37.21, 45.39 }, { 1457, 36.44, 43.38 }, { 1457, 35.96, 41.69 }, { 1457, 33.98, 41.55 }, { 1457, 31.27, 41.46 }, { 1457, 33.65, 41.28 }, { 1457, 36.03, 41 }, { 1457, 36.91, 39.31 }, { 1457, 39.36, 35.8 }, { 1457, 40.21, 37.86 }, { 1457, 41.49, 38.62 }, { 1457, 43.08, 40.73 }, { 1457, 46.25, 41.12 }, { 1457, 49.5, 41.07 }, { 1457, 53.93, 40.86 }, { 1457, 56.74, 40.73 }, { 1457, 62.09, 40.55 } }, -- level 53 note = "The NPC patrols a long route; look along it." }, { turnin = 98391, races = { "Dwarf", "Gnome", "Skyborne" }, classes = { "PRIEST" } }, -- level 53 - { train = true, talk = 4146, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 53 + { train = true, floor = "up", talk = 4146, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 53 note = "The NPC is indoors, one floor up." }, { train = true, talk = 10089, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 53 note = "The NPC stands on the highest level of this structure." }, { go = { 1457, 32.08, 16.4 }, classes = { "ROGUE" }, text = "Step into the cavern within the trunk", -- level 53 note = "The spot is on the lower floor of the hollow tree." }, { train = true, talk = 4163, classes = { "ROGUE" } }, -- level 53 - { turnin = 1047, accept = 6761, -- level 54 + { turnin = 1047, accept = 6761, floor = "top", -- level 54 note = "Climb to the highest floor of the building." }, { accept = 3781, when = { done = 3764 } }, -- level 54 { turnin = 6761, accept = 6762, why = { kind = "carry", quest = 6762, seconds = 128400, xp = 1400 }, -- level 54 @@ -164,7 +164,7 @@ Ding.RegisterGuide({ { turnin = 3781, when = { log = 3781 } }, -- level 54 { turnin = 978, accept = 979, -- level 54 note = "The NPC is indoors." }, - { accept = 5250, why = { kind = "carry", once = true, quest = 5250, seconds = 41040, xp = 600 }, -- level 54 + { accept = 5250, floor = "up", why = { kind = "carry", once = true, quest = 5250, seconds = 41040, xp = 600 }, -- level 54 note = "The NPC is indoors, one floor up." }, { train = true, talk = 7312, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 54 note = "The NPC is indoors." }, diff --git a/Ding/Guides/Leveling/Alliance/39.lua b/Ding/Guides/Leveling/Alliance/39.lua index db05a72..a792559 100644 --- a/Ding/Guides/Leveling/Alliance/39.lua +++ b/Ding/Guides/Leveling/Alliance/39.lua @@ -34,14 +34,14 @@ Ding.RegisterGuide({ { destroy = { 11445, 11511, 11516, 11515 } }, -- level 54 { go = { 1448, 38.43, 59.8 }, text = "Go into Jaedenar" }, -- level 54 { go = { 1448, 35.38, 58.65 }, text = "Go into the cavern" }, -- level 54 - { complete = 5165, -- level 54 + { complete = 5165, floor = "up", -- level 54 note = "Go to the upper floor of the cavern." }, - { complete = 5165, -- level 54 + { complete = 5165, floor = "up", -- level 54 note = "Go to the upper floor of the cavern." }, { go = { 1448, 38.2, 54.11 }, text = "Circle the gap in the ground, then take the trail downward" }, -- level 54 - { complete = 5165, -- level 54 + { complete = 5165, floor = "down", -- level 54 note = "The target is deep in the cave, on its lowest floor." }, - { complete = 5165, -- level 54 + { complete = 5165, floor = "down", -- level 54 note = "The target is deep in the cave, on its lowest floor." }, { accept = 5202, collect = { { 13140, 1 } }, useitem = 13140, -- level 54 note = "Search the upper and lower floors of the cavern." }, @@ -141,12 +141,12 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { talk = 4209, collect = { { 10575, 1 }, { 12724, 1 }, { 10445, 1 }, { 11947, 6 }, { 11949, 6 } }, spots = { { 1457, 39.63, 41.95 } } }, -- level 56 { train = true, talk = 4089, classes = { "WARRIOR" } }, -- level 56 - { train = true, talk = 4146, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 56 + { train = true, floor = "up", talk = 4146, races = { "Dwarf", "NightElf" }, classes = { "HUNTER" }, -- level 56 note = "The NPC is indoors, one floor up." }, { go = { 1457, 32.08, 16.4 }, classes = { "ROGUE" }, text = "Step into the cavern within the trunk", -- level 56 note = "The spot is on the lower floor of the hollow tree." }, { train = true, talk = 4163, classes = { "ROGUE" } }, -- level 56 - { turnin = 4902, -- level 56 + { turnin = 4902, floor = "top", -- level 56 note = "The NPC waits on the tower's highest floor." }, { train = true, talk = 7312, races = { "Human", "Gnome" }, classes = { "MAGE" }, -- level 56 note = "The NPC is indoors." }, diff --git a/Ding/Guides/Leveling/Alliance/40.lua b/Ding/Guides/Leveling/Alliance/40.lua index 3fbddaf..e769cfc 100644 --- a/Ding/Guides/Leveling/Alliance/40.lua +++ b/Ding/Guides/Leveling/Alliance/40.lua @@ -77,11 +77,11 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { turnin = 4185, accept = 4186, when = { done = 4182 }, -- level 56 note = "The NPC is indoors." }, - { turnin = 6182, accept = 6183, -- level 56 + { turnin = 6182, accept = 6183, floor = "up", -- level 56 note = "The NPC is indoors, one floor up." }, - { turnin = 6183, accept = 6184, why = { kind = "carry", quest = 6184, seconds = 19020, xp = 5000 }, -- level 56 + { turnin = 6183, accept = 6184, floor = "up", why = { kind = "carry", quest = 6184, seconds = 19020, xp = 5000 }, -- level 56 note = "The NPC is indoors, one floor up." }, - { turnin = 5022, accept = 5048, -- level 56 + { turnin = 5022, accept = 5048, floor = "up", -- level 56 note = "The NPC is indoors, one floor up." }, { turnin = 5048, accept = 5050, patrol = { { 1453, 60.22, 56.88 }, { 1453, 57.07, 62.4 }, { 1453, 58.52, 64.27 }, { 1453, 62.3, 61.28 }, { 1453, 64.33, 61.4 }, { 1453, 65.94, 64.29 }, { 1453, 64.26, 67.18 }, { 1453, 66.62, 71.15 }, { 1453, 63.94, 66.53 }, { 1453, 63.88, 66.47 }, { 1453, 62.71, 65.77 }, { 1453, 60.45, 67.07 }, { 1453, 59.08, 64.32 }, { 1453, 58.15, 64.39 }, { 1453, 57, 61.88 } }, why = { kind = "carry", once = true, quest = 5050, seconds = 19920, xp = 2600 }, -- level 56 note = "The NPC is an elderly human lady. The NPC patrols a long route; look along it. If absent, she can be on the house's upper floor, at 52.4, 42.1 in Stormwind City." }, diff --git a/Ding/Guides/Leveling/Alliance/41.lua b/Ding/Guides/Leveling/Alliance/41.lua index 4496737..dd5189d 100644 --- a/Ding/Guides/Leveling/Alliance/41.lua +++ b/Ding/Guides/Leveling/Alliance/41.lua @@ -66,16 +66,16 @@ Ding.RegisterGuide({ note = "Look for a white set of bones. This one roams, so scan the surrounding area. The targets appear in several places." }, { collect = { { 12739, 1 } }, -- level 57 note = "Finish Locked Away to obtain this." }, - { accept = 5060, -- level 57 + { accept = 5060, floor = "up", -- level 57 note = "The object is indoors, one floor up." }, { turnin = 5060, when = { ready = 5060 } }, -- level 57 { complete = 5219 }, -- level 57 { turnin = 5219, accept = 5220 }, -- level 57 - { turnin = 5050, accept = 5051, -- level 57 + { turnin = 5050, accept = 5051, floor = "up", -- level 57 note = "The NPC is indoors, one floor up." }, { complete = 5051, collect = { { 12722, 1 } }, useitem = 12722, -- level 57 note = "The target is a ghoul armed with a pitchfork. This one roams, so scan the surrounding area. The targets appear in several places." }, - { turnin = 5051, when = { item = 12723 }, -- level 57 + { turnin = 5051, floor = "up", when = { item = 12723 }, -- level 57 note = "The NPC is indoors, one floor up." }, { complete = 5097, elite = true, useitem = 12815, -- level 57 note = "Stand at the watchtower's doorway. An elite foe waits indoors; stay clear of it." }, @@ -131,7 +131,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { accept = 6164, -- level 58 note = "The NPC is indoors." }, - { complete = 6164, -- level 58 + { complete = 6164, floor = "up", -- level 58 note = "The object is indoors, one floor up." }, { turnin = 6164, -- level 58 note = "The NPC is indoors." }, @@ -139,7 +139,7 @@ Ding.RegisterGuide({ { complete = 5211, talk = 11064, -- level 58 note = "The targets are ghouls. Other undead compete for the same spawn points. The spirits rise where those foes die." }, { go = { 1423, 23.38, 73.25 }, text = "Go down into the tomb" }, -- level 58 - { complete = 6021, -- level 58 + { complete = 6021, floor = "down", -- level 58 note = "This is below ground, on the crypt's lower floor." }, { turnin = { 5542, 5543, 5544 }, accept = 5742 }, -- level 58 { complete = 5742, talk = 1855, -- level 58 @@ -157,7 +157,7 @@ Ding.RegisterGuide({ { accept = 5153, when = { done = 5152 } }, -- level 58 { complete = 5153, when = { log = 5153 } }, -- level 58 { complete = 5537, elite = true }, -- level 58 - { turnin = 5153, when = { log = 5153 }, -- level 58 + { turnin = 5153, floor = "up", when = { log = 5153 }, -- level 58 note = "The NPC is indoors, one floor up." }, { accept = 4971 }, -- level 58 { accept = 5154, when = { done = 5153 } }, -- level 58 @@ -165,14 +165,14 @@ Ding.RegisterGuide({ note = "Move the camera close and check which book is genuine. Some books are traps that summon foes. The genuine book can look two ways:" }, { complete = 4971, useitem = 12627, -- level 58 note = "Close to the big buildings lit in blue. A new one may appear when one is killed." }, - { turnin = 4971, accept = 4972, -- level 58 + { turnin = 4971, accept = 4972, floor = "up", -- level 58 note = "The NPC is indoors, one floor up." }, { turnin = 5154, when = { log = 5154 } }, -- level 58 { accept = 5210, when = { done = 5154 } }, -- level 58 { destroy = 15696 }, -- level 58 { complete = 4972, -- level 58 note = "Look for little gray coffers of metal. The targets are in the ruined houses." }, - { turnin = 4972, -- level 58 + { turnin = 4972, floor = "up", -- level 58 note = "The NPC is indoors, one floor up." }, { turnin = 5537, elite = true }, -- level 58 { turnin = 5211 }, -- level 58 diff --git a/Ding/Guides/Leveling/Alliance/43.lua b/Ding/Guides/Leveling/Alliance/43.lua index 484facc..37c2902 100644 --- a/Ding/Guides/Leveling/Alliance/43.lua +++ b/Ding/Guides/Leveling/Alliance/43.lua @@ -22,7 +22,7 @@ Ding.RegisterGuide({ note = "Silithus: Valor's Rest, in the north-east, then Cenarion Hold." }, { turnin = 1124, accept = 1125, -- level 59 note = "The NPC is indoors." }, - { accept = 8277, -- level 59 + { accept = 8277, floor = "up", -- level 59 note = "This one roams, so scan the surrounding area. The NPC is indoors, one floor up." }, { turnin = 8275, accept = 8280 }, -- level 59 { go = { 1451, 50.52, 34.51 }, fly = true, talk = 15177, text = "Flight master at Cenarion Hold", -- level 59 @@ -43,7 +43,7 @@ Ding.RegisterGuide({ { complete = 8277, -- level 59 note = "Hunt spiders for it." }, { complete = 8280 }, -- level 59 - { turnin = 8277, accept = 8278, -- level 59 + { turnin = 8277, accept = 8278, floor = "up", -- level 59 note = "This one roams, so scan the surrounding area. The NPC is indoors, one floor up." }, { turnin = 8280, accept = 8281 }, -- level 59 { complete = 8284, -- level 59 @@ -75,7 +75,7 @@ Ding.RegisterGuide({ { complete = 8281, -- level 59 note = "Target the burrowing worms." }, { turnin = 8281 }, -- level 59 - { turnin = 8278, -- level 59 + { turnin = 8278, floor = "up", -- level 59 note = "This one roams, so scan the surrounding area. The NPC is indoors, one floor up." }, { turnin = { 8287, 8304 }, -- level 59 note = "The NPC is on the house's raised terrace." }, diff --git a/Ding/Guides/Leveling/Horde/01.lua b/Ding/Guides/Leveling/Horde/01.lua index d9d5b25..1fd778d 100644 --- a/Ding/Guides/Leveling/Horde/01.lua +++ b/Ding/Guides/Leveling/Horde/01.lua @@ -187,11 +187,11 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { sethearth = "Gallows' End Tavern", talk = 5688, -- level 6 note = "The NPC is indoors." }, - { turnin = 5651, accept = 5650, classes = { "PRIEST" }, -- level 6 + { turnin = 5651, accept = 5650, floor = "up", classes = { "PRIEST" }, -- level 6 note = "The NPC is indoors, one floor up." }, { complete = 5650, classes = { "PRIEST" }, -- level 6 note = "Heal Deathguard Kel with Lesser Heal (Rank 2). Buff Deathguard Kel with Power Word: Fortitude." }, - { turnin = 5650, when = { ready = 5650 }, classes = { "PRIEST" }, -- level 6 + { turnin = 5650, floor = "up", when = { ready = 5650 }, classes = { "PRIEST" }, -- level 6 note = "The NPC is indoors, one floor up." }, { complete = 367, -- level 6 note = "The targets are gray, demon-like hounds." }, @@ -217,17 +217,17 @@ Ding.RegisterGuide({ note = "The NPC patrols a long route; look along it." }, { train = true, talk = 2131, classes = { "WARRIOR" }, -- level 7 note = "The NPC is indoors." }, - { turnin = 407, -- level 7 + { turnin = 407, floor = "down", -- level 7 note = "The NPC waits on the lower level, indoors." }, - { train = true, talk = 2128, classes = { "MAGE" }, -- level 7 + { train = true, floor = "up", talk = 2128, classes = { "MAGE" }, -- level 7 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 2127, classes = { "WARLOCK" }, -- level 7 + { train = true, floor = "up", talk = 2127, classes = { "WARLOCK" }, -- level 7 note = "The NPC is indoors, one floor up." }, - { vendor = true, talk = 5750, classes = { "WARLOCK" }, -- level 7 + { floor = "up", vendor = true, talk = 5750, classes = { "WARLOCK" }, -- level 7 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 2129, classes = { "PRIEST" }, -- level 7 + { train = true, floor = "up", talk = 2129, classes = { "PRIEST" }, -- level 7 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 2130, classes = { "ROGUE" }, -- level 7 + { train = true, floor = "up", talk = 2130, classes = { "ROGUE" }, -- level 7 note = "The NPC is indoors, one floor up." }, { go = { 1411, 51.87, 40.83 }, classes = { "WARRIOR", "ROGUE" }, text = "Learn Mining from the trainer" }, -- level 8 { talk = 3175, classes = { "WARRIOR", "ROGUE" } }, -- level 8 @@ -235,11 +235,11 @@ Ding.RegisterGuide({ { accept = 96822, races = { "Scourge" } }, -- level 8 { talk = 3174, classes = { "WARRIOR", "ROGUE" } }, -- level 8 { talk = 3168, buy = { { 2901, 1, 3168 } }, classes = { "WARRIOR", "ROGUE" } }, -- level 8 - { accept = 784, -- level 8 + { accept = 784, floor = "up", -- level 8 note = "The NPC is indoors, one floor up." }, { accept = 96825, races = { "Scourge" } }, -- level 8 { go = { 1411, 50.14, 42.95 }, text = "Climb the trail" }, -- level 8 - { accept = 791, -- level 8 + { accept = 791, floor = "top", -- level 8 note = "The NPC waits on the tower's highest floor." }, { complete = 96825, races = { "Scourge" } }, -- level 8 { accept = 2161 }, -- level 8 @@ -269,7 +269,7 @@ Ding.RegisterGuide({ { turnin = 786, sticky = { 791, 784 }, -- level 8 note = "This one roams, so scan the surrounding area. The targets are spread over several spots." }, { go = { 1411, 58.96, 58.33 }, text = "Head indoors" }, -- level 8 - { complete = 784, collect = { { 4882, 1 } }, -- level 8 + { complete = 784, floor = "up", collect = { { 4882, 1 } }, -- level 8 note = "The target is indoors, one floor up. Consider bringing a group for this one." }, { complete = 96822, races = { "Scourge" } }, -- level 8 { go = { 1411, 59.86, 57.81 }, text = "Stay on the trail and keep climbing the steps" }, -- level 8 @@ -279,12 +279,12 @@ Ding.RegisterGuide({ { complete = 791 }, -- level 8 { complete = 784 }, -- level 8 { turnin = 823 }, -- level 8 - { turnin = { 784, 830 }, accept = { 825, 831, 837 }, why = { kind = "carry", quest = 831, seconds = 5580, xp = 600 }, -- level 9 + { turnin = { 784, 830 }, accept = { 825, 831, 837 }, floor = "up", why = { kind = "carry", quest = 831, seconds = 5580, xp = 600 }, -- level 9 note = "The NPC is indoors, one floor up." }, { accept = 815, -- level 9 note = "This one roams, so scan the surrounding area." }, { go = { 1411, 50.14, 42.95 }, text = "Climb the trail" }, -- level 9 - { turnin = 791, -- level 9 + { turnin = 791, floor = "top", -- level 9 note = "The NPC waits on the tower's highest floor." }, { turnin = 2161, -- level 9 note = "The NPC is indoors." }, @@ -320,7 +320,7 @@ Ding.RegisterGuide({ { complete = 96821, races = { "Scourge" } }, -- level 10 { train = true, talk = 5880, classes = { "MAGE" }, -- level 10 note = "The NPC is indoors." }, - { turnin = 825, -- level 10 + { turnin = 825, floor = "up", -- level 10 note = "The NPC is indoors, one floor up." }, { accept = 96655, races = { "Scourge" } }, -- level 10 { turnin = 815, -- level 10 @@ -332,7 +332,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { accept = 5660, classes = { "PRIEST" }, -- level 10 note = "The NPC is indoors." }, - { train = true, talk = 3170, classes = { "ROGUE" }, -- level 10 + { train = true, floor = "up", talk = 3170, classes = { "ROGUE" }, -- level 10 note = "The NPC is indoors, one floor up." }, { train = true, talk = 3172, classes = { "WARLOCK" }, -- level 10 note = "The NPC is out back, at the rear of the structure." }, @@ -342,7 +342,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { complete = 837 }, -- level 10 { complete = 837 }, -- level 10 - { turnin = 837, -- level 10 + { turnin = 837, floor = "up", -- level 10 note = "The NPC is indoors, one floor up." }, { turnin = 96821, races = { "Scourge" } }, -- level 10 { sethearth = "Razor Hill", talk = 6928, -- level 10 @@ -373,13 +373,13 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { accept = { 354, 362 }, -- level 11 note = "The NPC is indoors." }, - { accept = 1881, classes = { "MAGE" }, -- level 11 + { accept = 1881, floor = "up", classes = { "MAGE" }, -- level 11 note = "The NPC is indoors, one floor up." }, - { accept = 375, -- level 11 + { accept = 375, floor = "up", -- level 11 note = "The NPC is indoors, one floor up." }, - { accept = 1478, classes = { "WARLOCK" }, -- level 11 + { accept = 1478, floor = "up", classes = { "WARLOCK" }, -- level 11 note = "The NPC is indoors, one floor up." }, - { accept = 1885, classes = { "ROGUE" }, -- level 11 + { accept = 1885, floor = "up", classes = { "ROGUE" }, -- level 11 note = "The NPC is indoors, one floor up." }, { accept = 374 }, -- level 11 { accept = 358, -- level 11 @@ -400,7 +400,7 @@ Ding.RegisterGuide({ { go = { 1458, 57.26, 32.71 }, classes = { "ROGUE" }, text = "Learn Swords at the weapon master" }, -- level 11 { talk = 11870, classes = { "ROGUE" } }, -- level 11 { turnin = 5660, classes = { "PRIEST" } }, -- level 11 - { turnin = 1881, accept = 1882, sticky = { 374, 370 }, classes = { "MAGE" }, -- level 11 + { turnin = 1881, accept = 1882, floor = "up", sticky = { 374, 370 }, classes = { "MAGE" }, -- level 11 note = "The NPC is indoors, one floor up." }, { complete = 370, -- level 11 note = "The target is indoors." }, @@ -455,21 +455,21 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { turnin = { 354, 362 }, accept = 355, -- level 12 note = "The NPC is indoors." }, - { turnin = 375, when = { item = 2320 }, -- level 12 + { turnin = 375, floor = "up", when = { item = 2320 }, -- level 12 note = "The NPC is indoors, one floor up." }, { accept = 96895, races = { "Scourge" } }, -- level 12 { accept = 99156, races = { "Scourge" } }, -- level 12 { train = true, talk = 2131, classes = { "WARRIOR" }, -- level 12 note = "The NPC is indoors." }, - { train = true, talk = 2128, classes = { "MAGE" }, -- level 12 + { train = true, floor = "up", talk = 2128, classes = { "MAGE" }, -- level 12 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 2127, classes = { "WARLOCK" }, -- level 12 + { train = true, floor = "up", talk = 2127, classes = { "WARLOCK" }, -- level 12 note = "The NPC is indoors, one floor up." }, - { vendor = true, talk = 5750, classes = { "WARLOCK" }, -- level 12 + { floor = "up", vendor = true, talk = 5750, classes = { "WARLOCK" }, -- level 12 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 2129, classes = { "PRIEST" }, -- level 12 + { train = true, floor = "up", talk = 2129, classes = { "PRIEST" }, -- level 12 note = "The NPC is indoors, one floor up." }, - { train = true, talk = 2130, classes = { "ROGUE" }, -- level 12 + { train = true, floor = "up", talk = 2130, classes = { "ROGUE" }, -- level 12 note = "The NPC is indoors, one floor up." }, { turnin = 359, accept = { 360, 356 }, sticky = 356 }, -- level 12 { complete = 99142, races = { "Scourge" } }, -- level 13 @@ -498,12 +498,12 @@ Ding.RegisterGuide({ { turnin = 99134, races = { "Scourge" } }, -- level 13 { turnin = 369, accept = { 492, 445 }, -- level 13 note = "The NPC is indoors." }, - { turnin = 492, -- level 13 + { turnin = 492, floor = "down", -- level 13 note = "The NPC waits on the lower level, indoors." }, { turnin = 96656, races = { "Scourge" } }, -- level 13 { turnin = 86784, races = { "Scourge" } }, -- level 13 { turnin = 99142, races = { "Scourge" } }, -- level 13 - { turnin = 1882, when = { ready = 1882 }, classes = { "MAGE" }, -- level 13 + { turnin = 1882, floor = "up", when = { ready = 1882 }, classes = { "MAGE" }, -- level 13 note = "The NPC is indoors, one floor up." }, { complete = 1886, talk = 6497, patrol = { { 1420, 61.52, 53.08 }, { 1420, 61.63, 53.32 }, { 1420, 61.59, 53.51 }, { 1420, 61.54, 53.89 }, { 1420, 61.77, 54.57 }, { 1420, 62, 55.21 }, { 1420, 62.19, 55.49 }, { 1420, 62.46, 55.62 }, { 1420, 62.65, 55.56 }, { 1420, 62.97, 55.59 }, { 1420, 63.14, 55.76 }, { 1420, 63.34, 56.37 }, { 1420, 63.57, 57.1 }, { 1420, 63.67, 57.71 }, { 1420, 63.78, 58.43 }, { 1420, 63.66, 58.83 }, { 1420, 63.45, 59.56 }, { 1420, 63.4, 59.95 }, { 1420, 63.14, 60.33 }, { 1420, 62.34, 60.95 }, { 1420, 61.68, 61.73 }, { 1420, 61.23, 62.11 }, { 1420, 60.72, 62.66 }, { 1420, 59.86, 63.18 }, { 1420, 59.26, 63.83 }, { 1420, 58.81, 64.14 }, { 1420, 58.43, 64.25 }, { 1420, 57.41, 64.6 }, { 1420, 56.92, 65.07 }, { 1420, 56.43, 65.46 }, { 1420, 56.09, 66.08 }, { 1420, 55.87, 66.51 }, { 1420, 55.59, 68.19 }, { 1420, 55.4, 69.31 }, { 1420, 55.24, 69.87 }, { 1420, 55.08, 70.73 }, { 1420, 54.88, 72.49 }, { 1420, 54.61, 73.96 }, { 1420, 54.31, 75.09 }, { 1421, 67.78, 4.88 }, { 1421, 67.32, 5.86 }, { 1421, 66.47, 7.02 }, { 1421, 65.74, 8 }, { 1421, 64.57, 8.86 }, { 1421, 63.36, 9.69 }, { 1421, 63.03, 10.03 }, { 1421, 61.77, 10.71 }, { 1421, 60.85, 11.24 }, { 1421, 59.05, 11.72 }, { 1421, 58.08, 12.17 }, { 1421, 57.25, 12.8 }, { 1421, 56.7, 13.49 }, { 1421, 55.46, 15.28 }, { 1421, 54.88, 16.53 }, { 1421, 53.88, 18.73 }, { 1421, 53.11, 20.58 }, { 1421, 51.98, 22.21 }, { 1421, 51.28, 23.76 }, { 1421, 50.69, 25.36 }, { 1421, 50.28, 26.24 }, { 1421, 50.04, 26.9 }, { 1421, 49.8, 28.72 }, { 1421, 49.8, 30.19 }, { 1421, 49.62, 32.34 }, { 1421, 49.79, 32.99 }, { 1421, 49.93, 33.89 }, { 1421, 50.28, 34.46 }, { 1421, 50.73, 35.02 }, { 1421, 51.03, 35.74 }, { 1421, 51.07, 36.39 }, { 1421, 50.99, 36.64 }, { 1421, 50.61, 37.14 }, { 1421, 49.79, 37.79 }, { 1421, 49.04, 38.33 }, { 1421, 48.32, 38.83 }, { 1421, 47.98, 39.17 }, { 1421, 47.46, 39.75 } }, classes = { "ROGUE" }, -- level 13 note = "Fight undead foes. The target patrols the road from Brill to The Sepulcher. The target appears close to The Sepulcher, at 47.5, 39.8 in Silverpine Forest." }, diff --git a/Ding/Guides/Leveling/Horde/02.lua b/Ding/Guides/Leveling/Horde/02.lua index 65dc5c6..252e1db 100644 --- a/Ding/Guides/Leveling/Horde/02.lua +++ b/Ding/Guides/Leveling/Horde/02.lua @@ -285,16 +285,16 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { accept = 886, classes = { "DRUID" }, -- level 11 note = "The NPC is indoors." }, - { turnin = 5922, accept = 5930, classes = { "DRUID" }, -- level 11 + { turnin = 5922, accept = 5930, floor = "up", classes = { "DRUID" }, -- level 11 note = "The NPC is indoors, one floor up." }, { complete = 5930, talk = 11956, classes = { "DRUID" } }, -- level 11 - { turnin = 5930, when = { ready = 5930 }, classes = { "DRUID" }, -- level 11 + { turnin = 5930, floor = "up", when = { ready = 5930 }, classes = { "DRUID" }, -- level 11 note = "The NPC is indoors, one floor up." }, { accept = 5932, when = { done = 5930 }, classes = { "DRUID" } }, -- level 11 { turnin = 5932, when = { log = 5932 }, classes = { "DRUID" }, -- level 11 note = "The NPC is indoors." }, { accept = 6002, when = { done = 5932 }, classes = { "DRUID" } }, -- level 11 - { turnin = 6363, accept = 6364, -- level 11 + { turnin = 6363, accept = 6364, floor = "top", -- level 11 note = "The NPC waits on the tower's highest floor." }, { turnin = 98435 }, -- level 11 { complete = 6002, talk = 12144, useitem = 15710, when = { log = 6002 }, classes = { "DRUID" }, -- level 11 @@ -311,12 +311,12 @@ Ding.RegisterGuide({ note = "The NPC waits at the mountain's summit." }, { complete = 1525, classes = { "SHAMAN" }, -- level 11 note = "Kill Water Seekers and Thornweavers." }, - { accept = 791, -- level 11 + { accept = 791, floor = "top", -- level 11 note = "The NPC waits on the tower's highest floor." }, { accept = 96825, races = { "Tauren" } }, -- level 11 { accept = 815, -- level 11 note = "This one roams, so scan the surrounding area." }, - { accept = { 784, 837 }, -- level 11 + { accept = { 784, 837 }, floor = "up", -- level 11 note = "The NPC is indoors, one floor up." }, { accept = 99048, races = { "Tauren" } }, -- level 11 { go = { 1411, 54.59, 38.82 }, classes = { "SHAMAN" }, text = "Climb the trail" }, -- level 11 @@ -334,7 +334,7 @@ Ding.RegisterGuide({ { accept = 99049, races = { "Tauren" } }, -- level 11 { complete = 99049, races = { "Tauren" } }, -- level 11 { go = { 1411, 58.96, 58.33 }, text = "Head indoors" }, -- level 11 - { complete = 784, collect = { { 4882, 1 } }, -- level 11 + { complete = 784, floor = "up", collect = { { 4882, 1 } }, -- level 11 note = "The target is indoors, one floor up. Consider bringing a group for this one." }, { go = { 1411, 59.86, 57.81 }, text = "Stay on the trail and keep climbing the steps" }, -- level 11 { collect = { { 4881, 1 } }, -- level 11 @@ -397,7 +397,7 @@ Ding.RegisterGuide({ { turnin = 816, -- level 12 note = "The NPC is indoors." }, { level = 12, patrol = { { 1411, 42.46, 40.56 }, { 1411, 41.16, 37.84 }, { 1411, 44.46, 35.95 } } }, -- level 12 - { turnin = 791, -- level 12 + { turnin = 791, floor = "top", -- level 12 note = "The NPC waits on the tower's highest floor." }, { turnin = 815, -- level 12 note = "This one roams, so scan the surrounding area." }, @@ -413,7 +413,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { train = true, talk = 3620, classes = { "HUNTER" }, -- level 13 note = "The NPC is indoors." }, - { turnin = { 784, 837, 830 }, accept = 831, -- level 13 + { turnin = { 784, 837, 830 }, accept = 831, floor = "up", -- level 13 note = "The NPC is indoors, one floor up." }, { turnin = 96821, races = { "Tauren" } }, -- level 13 { turnin = 823 }, -- level 13 diff --git a/Ding/Guides/Leveling/Horde/03.lua b/Ding/Guides/Leveling/Horde/03.lua index 15262f5..f8f76ab 100644 --- a/Ding/Guides/Leveling/Horde/03.lua +++ b/Ding/Guides/Leveling/Horde/03.lua @@ -184,13 +184,13 @@ Ding.RegisterGuide({ note = "This one roams, so scan the surrounding area. The targets are spread over several spots." }, { complete = 96821, races = { "Orc", "Troll" } }, -- level 7 { turnin = 823 }, -- level 7 - { accept = { 784, 837 }, -- level 7 + { accept = { 784, 837 }, floor = "up", -- level 7 note = "The NPC is indoors, one floor up." }, { accept = 96825, races = { "Orc", "Troll" } }, -- level 7 { accept = 815, -- level 7 note = "This one roams, so scan the surrounding area." }, { go = { 1411, 50.14, 42.95 }, text = "Climb the trail" }, -- level 7 - { accept = 791, -- level 7 + { accept = 791, floor = "top", -- level 7 note = "The NPC waits on the tower's highest floor." }, { turnin = 2161, -- level 7 note = "The NPC is indoors." }, @@ -207,7 +207,7 @@ Ding.RegisterGuide({ { turnin = 5648, sticky = { 791, 784 }, when = { ready = 5648 }, races = { "Troll" }, classes = { "PRIEST" }, -- level 7 note = "The NPC is indoors." }, { go = { 1411, 58.96, 58.33 }, text = "Head indoors" }, -- level 7 - { complete = 784, collect = { { 4882, 1 } }, -- level 7 + { complete = 784, floor = "up", collect = { { 4882, 1 } }, -- level 7 note = "The target is indoors, one floor up. Consider bringing a group for this one." }, { complete = 96822, races = { "Orc", "Troll" } }, -- level 7 { go = { 1411, 59.86, 57.81 }, text = "Stay on the trail and keep climbing the steps" }, -- level 7 @@ -223,12 +223,12 @@ Ding.RegisterGuide({ { talk = 6491 }, -- level 8 { train = true, talk = 3171, classes = { "HUNTER" }, -- level 8 note = "The NPC is indoors." }, - { train = true, talk = 3170, classes = { "ROGUE" }, -- level 8 + { train = true, floor = "up", talk = 3170, classes = { "ROGUE" }, -- level 8 note = "The NPC is indoors, one floor up." }, - { turnin = { 784, 830 }, accept = { 825, 831 }, why = { kind = "carry", quest = 831, seconds = 9720, xp = 600 }, -- level 8 + { turnin = { 784, 830 }, accept = { 825, 831 }, floor = "up", why = { kind = "carry", quest = 831, seconds = 9720, xp = 600 }, -- level 8 note = "The NPC is indoors, one floor up." }, { go = { 1411, 50.14, 42.95 }, text = "Climb the trail" }, -- level 8 - { turnin = 791, -- level 8 + { turnin = 791, floor = "top", -- level 8 note = "The NPC waits on the tower's highest floor." }, { sethearth = "Razor Hill", talk = 6928, -- level 8 note = "The NPC is indoors." }, @@ -279,7 +279,7 @@ Ding.RegisterGuide({ { turnin = 99048, races = { "Orc", "Troll" } }, -- level 9 { accept = 99049, races = { "Orc", "Troll" } }, -- level 9 { complete = 99049, races = { "Orc", "Troll" } }, -- level 9 - { turnin = 825, -- level 9 + { turnin = 825, floor = "up", -- level 9 note = "The NPC is indoors, one floor up." }, { accept = 96655, races = { "Orc", "Troll" } }, -- level 9 { turnin = 815, -- level 9 @@ -296,7 +296,7 @@ Ding.RegisterGuide({ note = "Die to the monsters here on purpose. Dying costs you nothing this early. This is the quickest way over." }, { deathskip = true, revive = { 1411, 53.55, 44.48 }, text = "Get yourself killed, then resurrect with the spirit healer" }, -- level 9 { talk = 6491 }, -- level 9 - { turnin = 837, -- level 9 + { turnin = 837, floor = "up", -- level 9 note = "The NPC is indoors, one floor up." }, { turnin = 96821, races = { "Orc", "Troll" } }, -- level 10 { turnin = 99049, races = { "Orc", "Troll" } }, -- level 10 @@ -304,7 +304,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { accept = 5654, races = { "Troll" }, classes = { "PRIEST" }, -- level 10 note = "The NPC is indoors." }, - { train = true, talk = 3170, classes = { "ROGUE" }, -- level 10 + { train = true, floor = "up", talk = 3170, classes = { "ROGUE" }, -- level 10 note = "The NPC is indoors, one floor up." }, { train = true, talk = 3172, races = { "Orc" }, classes = { "WARLOCK" }, -- level 10 note = "The NPC is out back, at the rear of the structure." }, @@ -446,11 +446,11 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { accept = { 354, 362 }, -- level 12 note = "The NPC is indoors." }, - { accept = 1881, races = { "Troll" }, classes = { "MAGE" }, -- level 12 + { accept = 1881, floor = "up", races = { "Troll" }, classes = { "MAGE" }, -- level 12 note = "The NPC is indoors, one floor up." }, - { accept = 375, -- level 12 + { accept = 375, floor = "up", -- level 12 note = "The NPC is indoors, one floor up." }, - { accept = 1478, races = { "Orc" }, classes = { "WARLOCK" }, -- level 12 + { accept = 1478, floor = "up", races = { "Orc" }, classes = { "WARLOCK" }, -- level 12 note = "The NPC is indoors, one floor up." }, { accept = 358, -- level 12 note = "The NPC is indoors." }, @@ -473,7 +473,7 @@ Ding.RegisterGuide({ { turnin = 1478, races = { "Orc" }, classes = { "WARLOCK" } }, -- level 12 { useitem = 6284, when = { log = 1471 }, races = { "Orc" }, classes = { "WARLOCK" }, -- level 12 note = "Use the item at the pink marking." }, - { turnin = 1881, accept = 1882, sticky = 367, races = { "Troll" }, classes = { "MAGE" }, -- level 12 + { turnin = 1881, accept = 1882, floor = "up", sticky = 367, races = { "Troll" }, classes = { "MAGE" }, -- level 12 note = "The NPC is indoors, one floor up." }, { complete = 375 }, -- level 12 { complete = 97558, races = { "Orc", "Troll" } }, -- level 12 @@ -483,7 +483,7 @@ Ding.RegisterGuide({ { turnin = 367, accept = 368, -- level 12 note = "The NPC is indoors." }, { talk = 2118, buy = { { 2320, 1, 2118 } } }, -- level 12 - { turnin = 375, when = { item = 2320 }, -- level 12 + { turnin = 375, floor = "up", when = { item = 2320 }, -- level 12 note = "The NPC is indoors, one floor up." }, { complete = 86784, races = { "Orc", "Troll" } }, -- level 12 { turnin = 86784, races = { "Orc", "Troll" } }, -- level 12 @@ -532,7 +532,7 @@ Ding.RegisterGuide({ note = "Together with the next turn-ins, this brings you to level 13." }, { turnin = 356 }, -- level 13 { turnin = 99142, races = { "Orc", "Troll" } }, -- level 13 - { turnin = 1882, when = { ready = 1882 }, races = { "Troll" }, classes = { "MAGE" }, -- level 13 + { turnin = 1882, floor = "up", when = { ready = 1882 }, races = { "Troll" }, classes = { "MAGE" }, -- level 13 note = "The NPC is indoors, one floor up." }, }, }) diff --git a/Ding/Guides/Leveling/Horde/04.lua b/Ding/Guides/Leveling/Horde/04.lua index 92e9884..718e165 100644 --- a/Ding/Guides/Leveling/Horde/04.lua +++ b/Ding/Guides/Leveling/Horde/04.lua @@ -43,7 +43,7 @@ Ding.RegisterGuide({ { accept = 477 }, -- level 13 { accept = 6321, races = { "Scourge" } }, -- level 14 { go = { 1421, 43.04, 41.43 }, text = "Go down into the tomb" }, -- level 13 - { turnin = 449, accept = { 3221, 437 }, -- level 13 + { turnin = 449, accept = { 3221, 437 }, floor = "down", -- level 13 note = "This is below ground, on the crypt's lower floor." }, { accept = 91921 }, -- level 13 { turnin = 3221, accept = { 1359, 447 }, why = { kind = "carry", quest = 447, seconds = 4980, xp = 900 }, -- level 13 @@ -57,9 +57,9 @@ Ding.RegisterGuide({ note = "The targets are worgen." }, { turnin = 421, accept = 422 }, -- level 13 { go = { 1421, 49.8, 30.02 }, text = "Walk over the span" }, -- level 13 - { complete = 422, -- level 13 + { complete = 422, floor = "up", -- level 13 note = "Be ready for a fight right away. The object is indoors, one floor up." }, - { turnin = 430, when = { log = 430 }, -- level 13 + { turnin = 430, floor = "up", when = { log = 430 }, -- level 13 note = "The NPC is indoors, one floor up." }, { turnin = 91921 }, -- level 13 { accept = 425, when = { done = 430 }, -- level 13 @@ -79,7 +79,7 @@ Ding.RegisterGuide({ { talk = 6491 }, -- level 13 { turnin = 422, accept = 423 }, -- level 13 { go = { 1421, 43.04, 41.43 }, text = "Go down into the tomb" }, -- level 13 - { turnin = 437, accept = 438, -- level 13 + { turnin = 437, accept = 438, floor = "down", -- level 13 note = "This is below ground, on the crypt's lower floor." }, { turnin = 438, accept = 439, object = 1593, sticky = 423 }, -- level 13 { complete = 423, -- level 14 @@ -95,11 +95,11 @@ Ding.RegisterGuide({ { turnin = { 423, 481 }, accept = 482 }, -- level 14 { turnin = 482 }, -- level 14 { go = { 1421, 43.04, 41.43 }, text = "Go down into the tomb" }, -- level 14 - { turnin = 439, -- level 14 + { turnin = 439, floor = "down", -- level 14 note = "This is below ground, on the crypt's lower floor." }, - { turnin = 6323, accept = 6322, races = { "Scourge" }, why = { back = true, chain = 1, kind = "detour", quest = 6322, quests = 4, seconds = 300, short = true, total = 1800, xp = 1300 }, -- level 15 + { turnin = 6323, accept = 6322, floor = "up", races = { "Scourge" }, why = { back = true, chain = 1, kind = "detour", quest = 6322, quests = 4, seconds = 300, short = true, total = 1800, xp = 1300 }, -- level 15 note = "The NPC is on Undercity's upper level." }, - { turnin = 6322, accept = 6324, races = { "Scourge" }, -- level 15 + { turnin = 6322, accept = 6324, floor = "up", races = { "Scourge" }, -- level 15 note = "The NPC is on Undercity's upper level." }, { accept = 97891, races = { "Scourge" } }, -- level 15 { turnin = 6324, races = { "Scourge" }, why = { back = true, kind = "detour", quest = 6324, seconds = 300, short = true, xp = 1100 } }, -- level 15 @@ -109,7 +109,7 @@ Ding.RegisterGuide({ { accept = 97891, races = { "Orc", "Tauren", "Troll", "Skyborne" } }, -- level 15 { train = true, talk = 4608, races = { "Scourge", "Troll" }, classes = { "PRIEST" } }, -- level 15 { train = true, talk = 4582, races = { "Orc", "Scourge", "Troll" }, classes = { "ROGUE" } }, -- level 15 - { train = true, talk = 4568, races = { "Scourge", "Troll" }, classes = { "MAGE" }, -- level 15 + { train = true, floor = "up", talk = 4568, races = { "Scourge", "Troll" }, classes = { "MAGE" }, -- level 15 note = "The NPC is indoors, one floor up." }, { train = true, talk = 4563, races = { "Orc", "Scourge" }, classes = { "WARLOCK" }, -- level 15 note = "The NPC is indoors." }, diff --git a/Ding/Guides/Leveling/Horde/05.lua b/Ding/Guides/Leveling/Horde/05.lua index 558e77f..2fcac40 100644 --- a/Ding/Guides/Leveling/Horde/05.lua +++ b/Ding/Guides/Leveling/Horde/05.lua @@ -38,7 +38,7 @@ Ding.RegisterGuide({ steps = { { go = { 1411, 50.84, 43.59 }, text = "Travel to Razor Hill", -- level 15 note = "Durotar: Razor Hill first, then the Barrens: the Crossroads, and Stonetalon Mountains." }, - { accept = 1859, races = { "Orc" }, classes = { "ROGUE" }, -- level 15 + { accept = 1859, floor = "up", races = { "Orc" }, classes = { "ROGUE" }, -- level 15 note = "The NPC is indoors, one floor up." }, { accept = 840 }, -- level 15 { accept = 97282, races = { "Skyborne" } }, -- level 15 @@ -59,7 +59,7 @@ Ding.RegisterGuide({ { turnin = 6365, accept = 6384, races = { "Orc", "Troll" } }, -- level 15 { turnin = 6384, accept = 6385, races = { "Orc", "Troll" }, why = { back = true, chain = 1, kind = "detour", quest = 6385, quests = 3, seconds = 360, short = true, total = 1700, xp = 1300 }, -- level 15 note = "The NPC is indoors." }, - { turnin = 6385, accept = 6386, races = { "Orc", "Troll" }, -- level 15 + { turnin = 6385, accept = 6386, floor = "top", races = { "Orc", "Troll" }, -- level 15 note = "The NPC waits on the tower's highest floor." }, { turnin = 1859, races = { "Orc" }, classes = { "ROGUE" } }, -- level 15 { accept = 1963, races = { "Orc", "Troll" }, classes = { "ROGUE" }, -- level 15 @@ -75,7 +75,7 @@ Ding.RegisterGuide({ { useitem = 4926 }, -- level 15 { complete = 844 }, -- level 15 { turnin = 871, accept = { 872, 5041 } }, -- level 15 - { accept = 867, -- level 15 + { accept = 867, floor = "top", -- level 15 note = "The NPC waits on the tower's highest floor." }, { turnin = 844, accept = 845, sticky = { 5041, 872, 845, 869 } }, -- level 15 { complete = 872, -- level 15 @@ -83,7 +83,7 @@ Ding.RegisterGuide({ { complete = 5041, -- level 15 note = "Search stacks of brown crates. The targets are spread over several spots." }, { complete = 872, sticky = { 845, 869 } }, -- level 15 - { accept = 887, -- level 15 + { accept = 887, floor = "up", -- level 15 note = "The NPC is indoors, one floor up." }, { accept = 97253 }, -- level 15 { go = { 1413, 63.03, 37.19 }, fly = true, talk = 16227, text = "Flight master in Ratchet" }, -- level 15 @@ -102,17 +102,17 @@ Ding.RegisterGuide({ { sethearth = "Ratchet", talk = 6791, -- level 16 note = "The NPC is indoors." }, { talk = 3496, collect = { { 5063, 1 }, { 12708, 1 } }, spots = { { 1413, 62.58, 37.39 } } }, -- level 16 - { turnin = { 887, 895 }, accept = 890, -- level 16 + { turnin = { 887, 895 }, accept = 890, floor = "up", -- level 16 note = "The NPC is indoors, one floor up." }, { turnin = { 1492, 890 }, accept = { 892, 896 } }, -- level 16 { turnin = 97253 }, -- level 16 - { turnin = 892, accept = 888, -- level 16 + { turnin = 892, accept = 888, floor = "up", -- level 16 note = "The NPC is indoors, one floor up." }, { turnin = { 872, 5041 }, sticky = { 821, 869 } }, -- level 16 { complete = 845, -- level 16 note = "The targets are the striped zhevras." }, { turnin = 845, accept = 903 }, -- level 16 - { accept = { 855, 850 }, sticky = { 848, 855 }, -- level 16 + { accept = { 855, 850 }, floor = "up", sticky = { 848, 855 }, -- level 16 note = "The NPC is indoors, one floor up." }, { complete = 870, -- level 16 note = "Go into the water beside the rock that bubbles. Your targets sit below the water's surface." }, @@ -121,7 +121,7 @@ Ding.RegisterGuide({ { complete = 850, -- level 16 note = "This one roams, so scan the surrounding area." }, { turnin = 855, when = { ready = 855 } }, -- level 16 - { turnin = 850, accept = 851, -- level 16 + { turnin = 850, accept = 851, floor = "up", -- level 16 note = "The NPC is indoors, one floor up." }, { complete = { 821, 903 } }, -- level 16 { complete = 867, -- level 17 @@ -154,7 +154,7 @@ Ding.RegisterGuide({ note = "You need it later for \"Chen's Empty Keg\": keep it in the bank to free a bag slot." }, { turnin = 902, accept = 3921 }, -- level 18 { turnin = 848 }, -- level 18 - { turnin = 867, -- level 18 + { turnin = 867, floor = "top", -- level 18 note = "The NPC waits on the tower's highest floor." }, { accept = 875, elite = true }, -- level 18 { turnin = 870, accept = 877 }, -- level 18 @@ -256,7 +256,7 @@ Ding.RegisterGuide({ { destroy = 5068 }, -- level 19 { turnin = 905, accept = 3261 }, -- level 19 { turnin = 3281 }, -- level 19 - { turnin = 851, accept = 852, -- level 19 + { turnin = 851, accept = 852, floor = "up", -- level 19 note = "The NPC is indoors, one floor up." }, { complete = 876, elite = true }, -- level 19 { turnin = 1061, accept = 1062, -- level 19 @@ -311,7 +311,7 @@ Ding.RegisterGuide({ note = "The target is a raptor. It shows up a short way off." }, { complete = 95494, races = { "Orc", "Scourge", "Tauren", "Troll" } }, -- level 20 { turnin = 2381, when = { ready = 2381 }, races = { "Orc", "Scourge", "Troll", "Skyborne" }, classes = { "ROGUE" } }, -- level 20 - { turnin = 888, -- level 20 + { turnin = 888, floor = "up", -- level 20 note = "The NPC is indoors, one floor up." }, { turnin = 1094, accept = 1095, why = { kind = "carry", quest = 1095, seconds = 8100, xp = 1100 } }, -- level 20 { talk = 3496, collect = { { 4894, 5 }, { 4893, 5 } }, spots = { { 1413, 62.58, 37.39 } } }, -- level 20 @@ -407,7 +407,7 @@ Ding.RegisterGuide({ { accept = 914, dungeon = "Wailing Caverns" }, -- level 21 { accept = 27, races = { "Tauren" }, classes = { "DRUID" }, -- level 21 note = "The NPC is indoors." }, - { turnin = 27, accept = 28, races = { "Tauren" }, classes = { "DRUID" }, -- level 21 + { turnin = 27, accept = 28, floor = "up", races = { "Tauren" }, classes = { "DRUID" }, -- level 21 note = "The NPC is indoors, one floor up." }, { complete = 28, races = { "Tauren" }, classes = { "DRUID" }, -- level 21 note = "The object is a vase woven from wicker. Your targets sit below the water's surface. They appear in scattered spots." }, @@ -500,7 +500,7 @@ Ding.RegisterGuide({ { accept = 868, why = { chain = 7, kind = "detour", quest = 1062, quests = 13, seconds = 540, short = true, total = 18000, xp = 11000 } }, -- level 21 { complete = 852, -- level 21 note = "A centaur flanked by two bodyguards. This one roams, so scan the surrounding area." }, - { turnin = 852, -- level 21 + { turnin = 852, floor = "up", -- level 21 note = "The NPC is indoors, one floor up." }, { turnin = 1062 }, -- level 21 { accept = { 1063, 1068 }, why = { kind = "carry", quest = 1063, seconds = 3900, xp = 700 }, -- level 21 diff --git a/Ding/Guides/Leveling/Horde/06.lua b/Ding/Guides/Leveling/Horde/06.lua index ca9fb5e..a9411a2 100644 --- a/Ding/Guides/Leveling/Horde/06.lua +++ b/Ding/Guides/Leveling/Horde/06.lua @@ -102,9 +102,9 @@ Ding.RegisterGuide({ note = "Lean on Rupture for bonus damage. The target is indoors, on the central storey." }, { complete = 2478, when = { log = 2478 }, races = { "Orc", "Scourge", "Troll", "Skyborne" }, classes = { "ROGUE" }, -- level 22 note = "Eviscerate adds a burst of damage here. The objective is on the terrace above. The target is indoors, on the central storey." }, - { complete = 2478, when = { log = 2478 }, races = { "Orc", "Scourge", "Troll", "Skyborne" }, classes = { "ROGUE" }, -- level 22 + { complete = 2478, floor = "top", when = { log = 2478 }, races = { "Orc", "Scourge", "Troll", "Skyborne" }, classes = { "ROGUE" }, -- level 22 note = "Open with Ambush for a bigger hit. Climb to the highest floor of the building." }, - { complete = 2478, when = { log = 2478 }, races = { "Orc", "Scourge", "Troll", "Skyborne" }, classes = { "ROGUE" }, -- level 22 + { complete = 2478, floor = "top", when = { log = 2478 }, races = { "Orc", "Scourge", "Troll", "Skyborne" }, classes = { "ROGUE" }, -- level 22 note = "Use Pick Lock to open it. Climb to the highest floor of the building." }, { turnin = 2478, when = { ready = 2478 }, races = { "Orc", "Scourge", "Troll", "Skyborne" }, classes = { "ROGUE" }, -- level 22 note = "The quest giver waits in the tent. This NPC is found down in the Cleft of Shadow." }, diff --git a/Ding/Guides/Leveling/Horde/07.lua b/Ding/Guides/Leveling/Horde/07.lua index 936c635..1ae49eb 100644 --- a/Ding/Guides/Leveling/Horde/07.lua +++ b/Ding/Guides/Leveling/Horde/07.lua @@ -137,7 +137,7 @@ Ding.RegisterGuide({ { turnin = 1013, dungeon = "Shadowfang Keep" }, -- level 24 { useitem = 15883, when = { log = 30 }, races = { "Tauren", "Skyborne" }, classes = { "DRUID" } }, -- level 24 { complete = 30, when = { log = 30 }, races = { "Tauren" }, classes = { "DRUID" } }, -- level 24 - { turnin = 30, when = { ready = 30 }, races = { "Tauren" }, classes = { "DRUID" }, -- level 24 + { turnin = 30, floor = "up", when = { ready = 30 }, races = { "Tauren" }, classes = { "DRUID" }, -- level 24 note = "The NPC is indoors, one floor up." }, { accept = 31, when = { done = 30 }, races = { "Tauren" }, classes = { "DRUID" } }, -- level 24 { train = true, talk = 12042, races = { "Tauren" }, classes = { "DRUID" } }, -- level 24 diff --git a/Ding/Guides/Leveling/Horde/08.lua b/Ding/Guides/Leveling/Horde/08.lua index 0818e07..b9facf1 100644 --- a/Ding/Guides/Leveling/Horde/08.lua +++ b/Ding/Guides/Leveling/Horde/08.lua @@ -88,7 +88,7 @@ Ding.RegisterGuide({ note = "The target can be indoors or out." }, { turnin = 846, accept = 849, -- level 25 note = "The NPC patrols the road; look along it." }, - { complete = 849, -- level 25 + { complete = 849, floor = "up", -- level 25 note = "The objective sits up on the raised deck. Keep some range when you use the item." }, { turnin = 849, -- level 25 note = "The NPC patrols the road; look along it." }, diff --git a/Ding/Guides/Leveling/Horde/10.lua b/Ding/Guides/Leveling/Horde/10.lua index d5e68f3..eeff220 100644 --- a/Ding/Guides/Leveling/Horde/10.lua +++ b/Ding/Guides/Leveling/Horde/10.lua @@ -18,7 +18,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors. A lengthy stretch of quests is coming up." }, { accept = 6541 }, -- level 26 { turnin = 95494, races = { "Orc", "Scourge", "Tauren", "Troll" } }, -- level 26 - { turnin = 6541, -- level 26 + { turnin = 6541, floor = "up", -- level 26 note = "The NPC is on the tower's middle floor." }, { accept = 6504, when = { item = { { 16645, 1 }, { 16646, 1 }, { 16647, 1 }, { 16648, 1 }, { 16649, 1 }, { 16650, 1 }, { 16651, 1 }, { 16652, 1 }, { 16653, 1 }, { 16654, 1 }, { 16655, 1 }, { 16656, 1 } } } }, -- level 26 { complete = 6504, useitem = 16645, when = { log = 6504 } }, -- level 26 diff --git a/Ding/Guides/Leveling/Horde/13.lua b/Ding/Guides/Leveling/Horde/13.lua index 8ec6d5c..a13db2a 100644 --- a/Ding/Guides/Leveling/Horde/13.lua +++ b/Ding/Guides/Leveling/Horde/13.lua @@ -53,7 +53,7 @@ Ding.RegisterGuide({ { turnin = 677 }, -- level 32 { turnin = 509, accept = 513, why = { chain = 1, kind = "detour", quest = 509, seconds = 60, xp = 3500 }, -- level 32 note = "The NPC is indoors." }, - { train = true, talk = 4568, races = { "Scourge", "Troll" }, classes = { "MAGE" }, -- level 32 + { train = true, floor = "up", talk = 4568, races = { "Scourge", "Troll" }, classes = { "MAGE" }, -- level 32 note = "The NPC is indoors, one floor up." }, { turnin = 1164 }, -- level 33 { talk = 4549, collect = { { 5800, 1 }, { 5850, 1 } }, spots = { { 1458, 65.94, 44.78 } } }, -- level 33 diff --git a/Ding/Guides/Leveling/Horde/14.lua b/Ding/Guides/Leveling/Horde/14.lua index e51ce6f..dd4b189 100644 --- a/Ding/Guides/Leveling/Horde/14.lua +++ b/Ding/Guides/Leveling/Horde/14.lua @@ -65,7 +65,7 @@ Ding.RegisterGuide({ { turnin = 1148, accept = 1184, why = { chain = 7, kind = "detour", quest = 1178, quests = 11, seconds = 180, total = 12000, xp = 9700 } }, -- level 34 { turnin = 97003 }, -- level 34 { destroy = 5877 }, -- level 34 - { turnin = 1178, accept = 1180, -- level 34 + { turnin = 1178, accept = 1180, floor = "up", -- level 34 note = "The NPC is indoors, one floor up." }, { turnin = 96, when = { log = 96 }, races = { "Orc", "Tauren", "Troll", "Skyborne" }, classes = { "SHAMAN" } }, -- level 34 { turnin = 1180, accept = 1181 }, -- level 34 @@ -73,11 +73,11 @@ Ding.RegisterGuide({ note = "The NPC stands on the top tier of the pier. The NPC is indoors." }, { accept = 605, -- level 34 note = "The NPC is on the building's ground level." }, - { turnin = 1115, accept = 201, -- level 34 + { turnin = 1115, accept = 201, floor = "top", -- level 34 note = "Climb to the highest floor of the building." }, - { accept = { 189, 213 }, -- level 34 + { accept = { 189, 213 }, floor = "top", -- level 34 note = "Climb to the highest floor of the building." }, - { turnin = 1181, accept = 1182, -- level 34 + { turnin = 1181, accept = 1182, floor = "up", -- level 34 note = "The NPC is upstairs, out on the balcony." }, { go = { 1434, 26.84, 77.15 }, fly = true, talk = 2858, text = "Fly to Booty Bay", -- level 34 note = "The NPC is upstairs, out on the balcony." }, diff --git a/Ding/Guides/Leveling/Horde/15.lua b/Ding/Guides/Leveling/Horde/15.lua index 0cfce96..b1665fc 100644 --- a/Ding/Guides/Leveling/Horde/15.lua +++ b/Ding/Guides/Leveling/Horde/15.lua @@ -71,7 +71,7 @@ Ding.RegisterGuide({ { talk = 11105, races = { "Orc", "Tauren", "Troll" }, classes = { "HUNTER" }, -- level 35 note = "Release the short-term pet you tamed." }, { turnin = 5501, sticky = 1435 }, -- level 35 - { complete = 5741, -- level 35 + { complete = 5741, floor = "top", -- level 35 note = "The target is on the tower's highest floor." }, { complete = 5381, object = 176581, -- level 35 note = "Defeat every foe in this chamber before starting. The target is indoors." }, diff --git a/Ding/Guides/Leveling/Horde/16.lua b/Ding/Guides/Leveling/Horde/16.lua index b9a4288..8f2a9af 100644 --- a/Ding/Guides/Leveling/Horde/16.lua +++ b/Ding/Guides/Leveling/Horde/16.lua @@ -76,7 +76,7 @@ Ding.RegisterGuide({ note = "These foes hide in stealth. Tigers compete for the same spawn points." }, { complete = 192, sticky = 213, -- level 37 note = "These foes hide in stealth." }, - { collect = { { 5851, 1 } }, spots = { { 1434, 42.62, 18.29 } }, -- level 37 + { floor = "up", collect = { { 5851, 1 } }, spots = { { 1434, 42.62, 18.29 } }, -- level 37 note = "The objective sits up on the raised deck. The target is indoors." }, { complete = 1182, -- level 37 note = "The object is indoors." }, @@ -88,13 +88,13 @@ Ding.RegisterGuide({ { accept = 638, why = { kind = "carry", quest = 638, seconds = 16080, xp = 700 } }, -- level 37 { turnin = 569 }, -- level 37 { turnin = 570 }, -- level 37 - { turnin = 1182, -- level 37 + { turnin = 1182, floor = "up", -- level 37 note = "The NPC is upstairs, out on the balcony." }, - { turnin = { 189, 213 }, -- level 37 + { turnin = { 189, 213 }, floor = "top", -- level 37 note = "Climb to the highest floor of the building." }, - { turnin = 201, -- level 37 + { turnin = 201, floor = "top", -- level 37 note = "Climb to the highest floor of the building." }, - { turnin = 605, -- level 37 + { turnin = 605, floor = "down", -- level 37 note = "The NPC is on the building's lowest floor" }, { turnin = 575, -- level 38 note = "The NPC stands on the top tier of the pier. The NPC is indoors." }, diff --git a/Ding/Guides/Leveling/Horde/18.lua b/Ding/Guides/Leveling/Horde/18.lua index 9e7f18f..b6eafb6 100644 --- a/Ding/Guides/Leveling/Horde/18.lua +++ b/Ding/Guides/Leveling/Horde/18.lua @@ -47,11 +47,11 @@ Ding.RegisterGuide({ note = "Your objective lies in a little cavern. It wanders to the mouth of the cave." }, { complete = 503, -- level 38 note = "The targets are spread over several spots. The NPC is indoors. Look on the upper floor as well." }, - { complete = 503, -- level 38 + { complete = 503, floor = "up", -- level 38 note = "The NPC is indoors, one floor up." }, - { turnin = 503, accept = 506, -- level 38 + { turnin = 503, accept = 506, floor = "up", -- level 38 note = "The NPC is indoors, one floor up." }, - { complete = 566, -- level 38 + { complete = 566, floor = "down", -- level 38 note = "The target is on the lower level, indoors. If it is not around, move on without it. No rush; you may complete this afterwards." }, { turnin = 506, accept = 507, why = { back = true, chain = 2, kind = "detour", quest = 506, quests = 4, seconds = 300, short = true, total = 13000, xp = 10000 }, -- level 38 note = "The NPC is indoors." }, @@ -59,9 +59,9 @@ Ding.RegisterGuide({ { go = { 1416, 38.86, 39.49 }, text = "Climb the slope, then leap the wall" }, -- level 38 { complete = 557 }, -- level 38 { complete = 545 }, -- level 38 - { complete = 507, -- level 39 + { complete = 507, floor = "up", -- level 39 note = "The target is indoors, one floor up. Beware of foes lurking in stealth." }, - { turnin = 507, accept = 508, -- level 39 + { turnin = 507, accept = 508, floor = "up", -- level 39 note = "The NPC is indoors, one floor up." }, { turnin = 545, why = { kind = "detour", quest = 508, quests = 3, seconds = 60, total = 8700, xp = 3900 }, -- level 39 note = "The NPC is indoors." }, @@ -76,7 +76,7 @@ Ding.RegisterGuide({ note = "The targets are kobolds. Additional ones are in the cavern up the trail. The following step takes place in the cave." }, { go = { 1417, 80.95, 40.02 }, text = "Climb the trail to the cavern" }, -- level 39 { go = { 1417, 82.62, 36.1 }, text = "Go into the cavern" }, -- level 39 - { turnin = 642, accept = 651, -- level 39 + { turnin = 642, accept = 651, floor = "up", -- level 39 note = "Climb to the cave's upper level." }, { go = { 1417, 82.75, 36.26 }, text = "Head out of the cave" }, -- level 39 { accept = 79976 }, -- level 39 diff --git a/Ding/Guides/Leveling/Horde/19.lua b/Ding/Guides/Leveling/Horde/19.lua index 569e182..8a7c64c 100644 --- a/Ding/Guides/Leveling/Horde/19.lua +++ b/Ding/Guides/Leveling/Horde/19.lua @@ -52,10 +52,10 @@ Ding.RegisterGuide({ { turnin = 714, when = { item = 4389, log = 714 } }, -- level 39 { accept = 715, when = { item = { { 929, 1 }, { 3823, 1 } } } }, -- level 39 { turnin = 715, sticky = 710, when = { item = 929, log = 715 } }, -- level 39 - { accept = 1419, -- level 39 + { accept = 1419, floor = "top", -- level 39 note = "The NPC waits on the tower's highest floor." }, { go = { 1418, 4.05, 44.73 }, fly = true, talk = 2861, text = "Fly to Kargath" }, -- level 39 - { accept = 2258, sticky = { 2258, 1419 }, -- level 39 + { accept = 2258, floor = "up", sticky = { 2258, 1419 }, -- level 39 note = "The NPC is indoors, one floor up." }, { complete = 703, keep = 3404, sticky = 2258, -- level 39 note = "A cluster of them gathers here. More of them dot the surroundings." }, @@ -75,13 +75,13 @@ Ding.RegisterGuide({ { turnin = 1108 }, -- level 40 { accept = 1137, why = { continent = true, kind = "carry", quest = 1137, seconds = 21240, xp = 1500 }, -- level 40 note = "Wait for the talking to finish" }, - { turnin = 1419, accept = 1420, why = { kind = "carry", quest = 1420, seconds = 11460, xp = 2400 }, -- level 40 + { turnin = 1419, accept = 1420, floor = "top", why = { kind = "carry", quest = 1420, seconds = 11460, xp = 2400 }, -- level 40 note = "The NPC waits on the tower's highest floor." }, - { turnin = 2258, -- level 40 + { turnin = 2258, floor = "up", -- level 40 note = "The NPC is indoors, one floor up." }, { destroy = 7846 }, -- level 40 { train = true, talk = 12042, races = { "Tauren" }, classes = { "DRUID" } }, -- level 40 - { talk = 5958, races = { "Scourge", "Troll" }, classes = { "MAGE" }, -- level 40 + { floor = "up", talk = 5958, races = { "Scourge", "Troll" }, classes = { "MAGE" }, -- level 40 note = "The NPC is indoors, one floor up." }, { train = true, talk = 5883, races = { "Scourge", "Troll" }, classes = { "MAGE" }, -- level 40 note = "The NPC is indoors." }, diff --git a/Ding/Guides/Leveling/Horde/20.lua b/Ding/Guides/Leveling/Horde/20.lua index 89f3d77..847dbac 100644 --- a/Ding/Guides/Leveling/Horde/20.lua +++ b/Ding/Guides/Leveling/Horde/20.lua @@ -30,9 +30,9 @@ Ding.RegisterGuide({ note = "The NPC stands on the top tier of the pier. The NPC is indoors." }, { accept = 600, -- level 40 note = "The NPC is indoors at street level." }, - { accept = 209, -- level 40 + { accept = 209, floor = "top", -- level 40 note = "Climb to the highest floor of the building." }, - { turnin = 669, -- level 40 + { turnin = 669, floor = "up", -- level 40 note = "The NPC is upstairs, out on the balcony." }, { accept = 572 }, -- level 40 { accept = 584 }, -- level 40 @@ -95,9 +95,9 @@ Ding.RegisterGuide({ note = "The NPC is indoors at street level." }, { sethearth = "Booty Bay", talk = 6807, -- level 41 note = "The NPC is indoors at street level." }, - { accept = 1116, -- level 41 + { accept = 1116, floor = "top", -- level 41 note = "Climb to the highest floor of the building." }, - { turnin = 209, -- level 41 + { turnin = 209, floor = "top", -- level 41 note = "Climb to the highest floor of the building." }, { turnin = 598, elite = true }, -- level 41 { turnin = 585, accept = 1261, why = { continent = true, kind = "carry", quest = 1261, seconds = 16080, xp = 3200 } }, -- level 41 @@ -112,9 +112,9 @@ Ding.RegisterGuide({ { accept = 698, -- level 41 note = "The NPC is indoors." }, { go = { 1435, 46.02, 54.87 }, fly = true, talk = 6026, text = "Flight master at Stonard" }, -- level 41 - { turnin = 1420, -- level 41 + { turnin = 1420, floor = "up", -- level 41 note = "The NPC is indoors, one floor up." }, - { accept = 1424, sticky = 698, -- level 41 + { accept = 1424, floor = "up", sticky = 698, -- level 41 note = "The NPC is indoors, one floor up." }, { accept = 1392, collect = { { 6196, 1 } }, useitem = 6196, patrol = { { 1435, 32.23, 36.35 }, { 1435, 33.3, 40.48 }, { 1435, 33.55, 43.94 }, { 1435, 36.72, 46.24 }, { 1435, 37.96, 43.15 }, { 1435, 38.93, 35.49 }, { 1435, 40.17, 34.59 }, { 1435, 40.92, 32.28 }, { 1435, 42.33, 32.31 }, { 1435, 45.65, 36.53 }, { 1435, 46.33, 38.63 }, { 1435, 47.61, 38.16 }, { 1435, 53.06, 39.13 }, { 1435, 55.45, 37.4 }, { 1435, 55.84, 35.66 }, { 1435, 55.57, 34.03 } }, -- level 41 note = "The target is a humanoid escorted by 2 guards. The target patrols a long route; look along it." }, @@ -133,16 +133,16 @@ Ding.RegisterGuide({ { complete = 1424, -- level 41 note = "Look for assorted little brown items. Your targets sit below the water's surface. Drop the Ground Clutter option down to 1." }, { turnin = 698 }, -- level 41 - { turnin = 1424, -- level 41 + { turnin = 1424, floor = "up", -- level 41 note = "The NPC is indoors, one floor up." }, { turnin = 1389 }, -- level 41 { complete = 1116, -- level 41 note = "Hunt the little winged dragonkin." }, - { turnin = 1116, -- level 41 + { turnin = 1116, floor = "top", -- level 41 note = "Climb to the highest floor of the building." }, - { accept = { 1117, 2864 }, why = { continent = true, kind = "carry", quest = 1117, seconds = 6420, xp = 2800 }, -- level 41 + { accept = { 1117, 2864 }, floor = "top", why = { continent = true, kind = "carry", quest = 1117, seconds = 6420, xp = 2800 }, -- level 41 note = "Let the conversation play out. Climb to the highest floor of the building." }, - { accept = 1183, why = { continent = true, kind = "carry", quest = 1183, seconds = 6540, xp = 700 }, -- level 41 + { accept = 1183, floor = "up", why = { continent = true, kind = "carry", quest = 1183, seconds = 6540, xp = 700 }, -- level 41 note = "The NPC is upstairs, out on the balcony." }, { accept = 2872, why = { continent = true, kind = "carry", once = true, quest = 2872, seconds = 5160, short = true, xp = 400 }, -- level 41 note = "The NPC is indoors." }, diff --git a/Ding/Guides/Leveling/Horde/25.lua b/Ding/Guides/Leveling/Horde/25.lua index 1abc182..bfa11f0 100644 --- a/Ding/Guides/Leveling/Horde/25.lua +++ b/Ding/Guides/Leveling/Horde/25.lua @@ -44,7 +44,7 @@ Ding.RegisterGuide({ { turnin = 2974, accept = 2976, why = { kind = "carry", quest = 2976, seconds = 23100, xp = 4900 } }, -- level 43 { destroy = 9460 }, -- level 43 { sethearth = "Camp Mojache", talk = 7737 }, -- level 43 - { vendor = true, talk = 9548, races = { "Orc", "Tauren", "Troll" }, classes = { "HUNTER" }, -- level 43 + { floor = "up", vendor = true, talk = 9548, races = { "Orc", "Tauren", "Troll" }, classes = { "HUNTER" }, -- level 43 note = "A lengthy grinding stretch is coming up. The NPC is upstairs, out on the balcony." }, { complete = 7731, -- level 43 note = "The target is a winged green bug, level 47. You can likely beat it at your current level. The target circles in the air, so search around." }, @@ -105,7 +105,7 @@ Ding.RegisterGuide({ { train = true, talk = 3352, races = { "Orc", "Tauren", "Troll" }, classes = { "HUNTER" }, -- level 44 note = "The NPC stands on the highest level of this structure." }, { go = { 1454, 56.3, 56.99 }, text = "Climb the steps" }, -- level 44 - { turnin = 7732, -- level 44 + { turnin = 7732, floor = "up", -- level 44 note = "The NPC is indoors, one floor up." }, { talk = 3309, collect = { { 2725, 1 }, { 2728, 1 }, { 2730, 1 }, { 2732, 1 }, { 2734, 1 }, { 2735, 1 }, { 2738, 1 }, { 2740, 1 }, { 2742, 1 }, { 2744, 1 }, { 2745, 1 }, { 2748, 1 }, { 2749, 1 }, { 2750, 1 }, { 2751, 1 } }, -- level 44 note = "If some pages are unavailable, go on without them. The NPC is indoors." }, diff --git a/Ding/Guides/Leveling/Horde/26.lua b/Ding/Guides/Leveling/Horde/26.lua index 747684c..f029e66 100644 --- a/Ding/Guides/Leveling/Horde/26.lua +++ b/Ding/Guides/Leveling/Horde/26.lua @@ -55,9 +55,9 @@ Ding.RegisterGuide({ { turnin = 597, accept = 599 }, -- level 45 { turnin = 607, accept = 609, -- level 45 note = "The NPC is indoors." }, - { accept = 587, -- level 45 + { accept = 587, floor = "top", -- level 45 note = "Climb to the highest floor of the building." }, - { turnin = 599, accept = 604, -- level 45 + { turnin = 599, accept = 604, floor = "up", -- level 45 note = "The NPC waits on the house's upper-floor terrace." }, { accept = 576, sticky = { 604, 576, 587 }, -- level 45 note = "The NPC stands on the top tier of the pier." }, @@ -73,9 +73,9 @@ Ding.RegisterGuide({ { turnin = 576, -- level 45 note = "The NPC stands on the top tier of the pier." }, { accept = 617 }, -- level 45 - { turnin = 587, -- level 45 + { turnin = 587, floor = "top", -- level 45 note = "Climb to the highest floor of the building." }, - { turnin = 604, -- level 45 + { turnin = 604, floor = "up", -- level 45 note = "The NPC is upstairs, out on the balcony." }, { turnin = 571, accept = 573 }, -- level 45 { go = { 1434, 39.08, 47.06 }, text = "Take the road until the trail starts" }, -- level 45 diff --git a/Ding/Guides/Leveling/Horde/27.lua b/Ding/Guides/Leveling/Horde/27.lua index d352bdd..2d5576c 100644 --- a/Ding/Guides/Leveling/Horde/27.lua +++ b/Ding/Guides/Leveling/Horde/27.lua @@ -15,9 +15,9 @@ Ding.RegisterGuide({ { accept = 2784 }, -- level 45 { complete = 2784, talk = 7572 }, -- level 45 { turnin = 2784, accept = 2621 }, -- level 45 - { turnin = 2621, accept = 2622, -- level 45 + { turnin = 2621, accept = 2622, floor = "up", -- level 45 note = "The NPC is indoors, one floor up." }, - { accept = 1429, why = { kind = "carry", quest = 1429, seconds = 62880, xp = 3800 }, -- level 45 + { accept = 1429, floor = "up", why = { kind = "carry", quest = 1429, seconds = 62880, xp = 3800 }, -- level 45 note = "The NPC is indoors, one floor up." }, { turnin = 2622, -- level 45 note = "The NPC is indoors." }, diff --git a/Ding/Guides/Leveling/Horde/28.lua b/Ding/Guides/Leveling/Horde/28.lua index eccdf51..e2bd99c 100644 --- a/Ding/Guides/Leveling/Horde/28.lua +++ b/Ding/Guides/Leveling/Horde/28.lua @@ -56,7 +56,7 @@ Ding.RegisterGuide({ { complete = 1691, sticky = { 8365, 8366 }, -- level 46 note = "These foes hide in stealth." }, { go = { 1446, 68.56, 41.43 }, text = "Head down the passage that opens on Lost Rigger Cove" }, -- level 46 - { complete = 2873, -- level 46 + { complete = 2873, floor = "up", -- level 46 note = "The object is indoors, one floor up." }, { complete = 2875 }, -- level 46 { accept = 2876, collect = { { 9276, 1 }, { 9250, 1 } }, useitem = { 9276, 9250 }, when = { maxlevel = 46 }, -- level 46 @@ -163,7 +163,7 @@ Ding.RegisterGuide({ note = "The NPC is indoors." }, { turnin = 649, accept = 650, -- level 48 note = "The NPC is indoors." }, - { accept = 4300, -- level 48 + { accept = 4300, floor = "up", -- level 48 note = "The NPC is upstairs, out on the balcony." }, { train = true, talk = 3353, classes = { "WARRIOR" }, -- level 48 note = "The NPC is indoors." }, diff --git a/Ding/Guides/Leveling/Horde/30.lua b/Ding/Guides/Leveling/Horde/30.lua index 47e51cd..a10fd95 100644 --- a/Ding/Guides/Leveling/Horde/30.lua +++ b/Ding/Guides/Leveling/Horde/30.lua @@ -146,7 +146,7 @@ Ding.RegisterGuide({ { turnin = 81, -- level 50 note = "The NPC is indoors." }, { turnin = 97242, races = { "Skyborne" } }, -- level 50 - { turnin = 4300, -- level 50 + { turnin = 4300, floor = "up", -- level 50 note = "The NPC is upstairs, out on the balcony." }, { train = true, talk = 3353, classes = { "WARRIOR" }, -- level 50 note = "The NPC is indoors." }, diff --git a/Ding/Guides/Leveling/Horde/31.lua b/Ding/Guides/Leveling/Horde/31.lua index 0175ec2..643bf03 100644 --- a/Ding/Guides/Leveling/Horde/31.lua +++ b/Ding/Guides/Leveling/Horde/31.lua @@ -25,7 +25,7 @@ Ding.RegisterGuide({ { complete = 208, elite = true, -- level 50 note = "The quarry is a pale tiger, an elite at 43. It calls 2 small adds of a lesser level; neither one is elite. When it drops to about 50% health." }, { turnin = 208, elite = true }, -- level 50 - { accept = 608, -- level 50 + { accept = 608, floor = "up", -- level 50 note = "The NPC is upstairs, out on the balcony." }, { go = { 1434, 27.94, 73.5 }, text = "Take the passage out of Booty Bay" }, -- level 50 { accept = 594, collect = { { 4098, 1 } }, useitem = 4098, -- level 50 @@ -48,15 +48,15 @@ Ding.RegisterGuide({ { turnin = 594, -- level 50 note = "If she is absent, wait for her to come back. Beware of foes lurking in stealth." }, { go = { 1434, 29.51, 72.47 }, text = "Take the tunnel into Booty Bay" }, -- level 50 - { turnin = 608, -- level 50 + { turnin = 608, floor = "up", -- level 50 note = "The NPC is upstairs, out on the balcony." }, { accept = 2623, -- level 50 note = "The NPC is indoors." }, - { turnin = 1444, -- level 50 + { turnin = 1444, floor = "up", -- level 50 note = "The NPC is indoors, one floor up." }, { go = { 1435, 66.33, 76.49 }, text = "Go into the cavern" }, -- level 50 { go = { 1435, 64.03, 87.88 }, text = "Climb the trail" }, -- level 50 - { complete = 2623, -- level 50 + { complete = 2623, floor = "up", -- level 50 note = "The target is a gray murloc. This one roams, so scan the surrounding area. Climb to the cave's upper level." }, { go = { 1435, 66.33, 76.49 }, text = "Head out of the cave" }, -- level 50 { turnin = 93176 }, -- level 50 diff --git a/Ding/Guides/Leveling/Horde/33.lua b/Ding/Guides/Leveling/Horde/33.lua index c6c52ce..d168b21 100644 --- a/Ding/Guides/Leveling/Horde/33.lua +++ b/Ding/Guides/Leveling/Horde/33.lua @@ -68,14 +68,14 @@ Ding.RegisterGuide({ { accept = 3462, elite = true }, -- level 50 { turnin = 3462, elite = true }, -- level 50 { accept = 3463, elite = true }, -- level 50 - { complete = 3463, elite = true, equip = 10515, -- level 50 + { complete = 3463, elite = true, floor = "up", equip = 10515, -- level 50 note = "The spot is at the tower's upper level. Beware, this foe is elite." }, - { complete = 3463, elite = true, equip = 10515, -- level 50 + { complete = 3463, elite = true, floor = "up", equip = 10515, -- level 50 note = "The spot is at the tower's upper level. Beware, this foe is elite." }, - { complete = 3463, elite = true, equip = 10515, -- level 50 + { complete = 3463, elite = true, floor = "up", equip = 10515, -- level 50 note = "The spot is at the tower's upper level. Beware, this foe is elite." }, { go = { 1427, 52.52, 58.01 }, elite = true, text = "Walk over the rope bridge" }, -- level 50 - { complete = 3463, elite = true, equip = 10515, -- level 50 + { complete = 3463, elite = true, floor = "up", equip = 10515, -- level 50 note = "The spot is at the tower's upper level. Beware, this foe is elite." }, { turnin = 4451, sticky = 7724 }, -- level 50 { go = { 1427, 66.74, 34.52 }, text = "Stay on the trail" }, -- level 51 diff --git a/Ding/Guides/Leveling/Horde/35.lua b/Ding/Guides/Leveling/Horde/35.lua index 38328e5..b6ca7e3 100644 --- a/Ding/Guides/Leveling/Horde/35.lua +++ b/Ding/Guides/Leveling/Horde/35.lua @@ -86,7 +86,7 @@ Ding.RegisterGuide({ { turnin = 5157, accept = 5158, why = { kind = "carry", quest = 5158, seconds = 12300, xp = 2600 } }, -- level 53 { turnin = 5156, -- level 53 note = "The NPC is indoors." }, - { turnin = 3541, accept = 3563, why = { kind = "carry", once = true, quest = 3563, seconds = 12600, xp = 3800 }, -- level 53 + { turnin = 3541, accept = 3563, floor = "up", why = { kind = "carry", once = true, quest = 3563, seconds = 12600, xp = 3800 }, -- level 53 note = "The NPC is upstairs, out on the balcony." }, { talk = 8673, collect = { { 10561, 1 } }, -- level 53 note = "The NPC is indoors. Hold on to it for a task in Un'Goro Crater later." }, diff --git a/Ding/Guides/Leveling/Horde/36.lua b/Ding/Guides/Leveling/Horde/36.lua index 5f160b7..3fa74bf 100644 --- a/Ding/Guides/Leveling/Horde/36.lua +++ b/Ding/Guides/Leveling/Horde/36.lua @@ -89,7 +89,7 @@ Ding.RegisterGuide({ note = "Look for it high on the clifftop." }, { go = { 1449, 63.82, 16.4 }, text = "Go into the cavern" }, -- level 53 { go = { 1449, 69.02, 17.56 }, text = "Climb the trail" }, -- level 53 - { complete = 4301, -- level 53 + { complete = 4301, floor = "up", -- level 53 note = "This one roams, so scan the surrounding area. Climb to the cave's upper level." }, { go = { 1449, 65.93, 16.72 }, text = "Take the trail through the cavern" }, -- level 53 { turnin = 4243, -- level 53 diff --git a/Ding/Guides/Leveling/Horde/38.lua b/Ding/Guides/Leveling/Horde/38.lua index ed023e2..21b6ed0 100644 --- a/Ding/Guides/Leveling/Horde/38.lua +++ b/Ding/Guides/Leveling/Horde/38.lua @@ -21,14 +21,14 @@ Ding.RegisterGuide({ { destroy = { 11516, 11511, 11515 } }, -- level 54 { go = { 1448, 38.43, 59.8 }, text = "Go into Jaedenar" }, -- level 54 { go = { 1448, 35.38, 58.65 }, text = "Go into the cavern" }, -- level 54 - { complete = 5165, -- level 54 + { complete = 5165, floor = "up", -- level 54 note = "Go to the upper floor of the cavern." }, - { complete = 5165, -- level 54 + { complete = 5165, floor = "up", -- level 54 note = "Go to the upper floor of the cavern." }, { go = { 1448, 38.2, 54.11 }, text = "Circle the gap in the ground, then take the trail downward" }, -- level 54 - { complete = 5165, -- level 54 + { complete = 5165, floor = "down", -- level 54 note = "The target is deep in the cave, on its lowest floor." }, - { complete = 5165, -- level 54 + { complete = 5165, floor = "down", -- level 54 note = "The target is deep in the cave, on its lowest floor." }, { accept = 5202, collect = { { 13140, 1 } }, useitem = 13140, -- level 54 note = "Search the upper and lower floors of the cavern." }, diff --git a/Ding/Guides/Leveling/Horde/39.lua b/Ding/Guides/Leveling/Horde/39.lua index 8fba57f..541179f 100644 --- a/Ding/Guides/Leveling/Horde/39.lua +++ b/Ding/Guides/Leveling/Horde/39.lua @@ -41,7 +41,7 @@ Ding.RegisterGuide({ { turnin = 5228, accept = 5229 }, -- level 56 { complete = 5229, why = { back = true, chain = 8, kind = "detour", quest = 5229, quests = 14, seconds = 120, total = 62000, xp = 43000 } }, -- level 56 { turnin = 5229, accept = 5230 }, -- level 56 - { accept = 5021, -- level 56 + { accept = 5021, floor = "up", -- level 56 note = "The NPC is indoors, one floor up." }, { turnin = 5021, accept = 5023, why = { kind = "carry", quest = 5023, seconds = 26880, xp = 2600 }, -- level 56 note = "The object is indoors." }, @@ -55,10 +55,10 @@ Ding.RegisterGuide({ note = "Look for a white set of bones. This one roams, so scan the surrounding area. The targets appear in several places." }, { collect = { { 12739, 1 } }, -- level 56 note = "Finish Locked Away to obtain this." }, - { accept = 5060, -- level 56 + { accept = 5060, floor = "up", -- level 56 note = "The object is indoors, one floor up." }, { turnin = 5060, when = { ready = 5060 } }, -- level 56 - { accept = 4971, -- level 56 + { accept = 4971, floor = "up", -- level 56 note = "The NPC is indoors, one floor up." }, { complete = 5098, elite = true, useitem = 12815, -- level 56 note = "Stand at the watchtower's doorway. An elite foe waits indoors; stay clear of it." }, @@ -70,7 +70,7 @@ Ding.RegisterGuide({ note = "Stand at the watchtower's doorway. An elite foe waits indoors; stay clear of it." }, { complete = 5098, elite = true, useitem = 12815, -- level 56 note = "Stand at the watchtower's doorway. An elite foe waits indoors; stay clear of it." }, - { turnin = 4971, accept = 4972, -- level 56 + { turnin = 4971, accept = 4972, floor = "up", -- level 56 note = "The NPC is indoors, one floor up." }, { complete = 4972, -- level 56 note = "Look for little gray coffers of metal. The targets are in the ruined houses." }, @@ -136,7 +136,7 @@ Ding.RegisterGuide({ { complete = 5211, talk = 11064, -- level 57 note = "The targets are ghouls. Other undead compete for the same spawn points. The spirits rise where those foes die." }, { go = { 1423, 23.38, 73.25 }, text = "Go down into the tomb" }, -- level 57 - { complete = 6021, races = { "Skyborne" }, -- level 57 + { complete = 6021, floor = "down", races = { "Skyborne" }, -- level 57 note = "This is below ground, on the crypt's lower floor." }, { turnin = 6022, elite = true, when = { item = 15448 } }, -- level 57 { turnin = 6042 }, -- level 57 @@ -152,13 +152,13 @@ Ding.RegisterGuide({ note = "Check each of the two floors indoors." }, { accept = 5153, when = { done = 5152 } }, -- level 57 { complete = 5153, when = { log = 5153 } }, -- level 57 - { turnin = 4972, -- level 57 + { turnin = 4972, floor = "up", -- level 57 note = "The NPC is indoors, one floor up." }, { turnin = 5153, when = { log = 5153 } }, -- level 57 { accept = 5154, when = { done = 5153 } }, -- level 57 { complete = 5154, when = { log = 5154 }, -- level 57 note = "Move the camera close and check which book is genuine. Some books are traps that summon foes. The genuine book can look two ways:" }, - { turnin = 5154, when = { log = 5154 }, -- level 57 + { turnin = 5154, floor = "up", when = { log = 5154 }, -- level 57 note = "The NPC is indoors, one floor up." }, { accept = 5210, when = { done = 5154 } }, -- level 57 { destroy = 15696 }, -- level 57 @@ -197,12 +197,12 @@ Ding.RegisterGuide({ { accept = 5236, when = { done = 5235 }, why = { kind = "carry", quest = 5236, seconds = 18540, xp = 3100 } }, -- level 57 { turnin = 5902, accept = 6390, why = { kind = "carry", quest = 6390, seconds = 18480, xp = 5700 }, -- level 57 note = "The object is indoors. It shows up on top of the box." }, - { turnin = 5050, accept = 5051, -- level 57 + { turnin = 5050, accept = 5051, floor = "up", -- level 57 note = "The NPC is indoors, one floor up." }, { collect = { { 12722, 1 } }, spots = { { 1422, 38.03, 56.41 }, { 1422, 36.17, 57.43 }, { 1422, 36.15, 59.35 }, { 1422, 37.26, 55.35 } }, -- level 57 note = "The target is a ghoul armed with a hayfork. This one roams, so scan the surrounding area. It can appear at this spot." }, { complete = 5051, useitem = 12722 }, -- level 57 - { turnin = 5051, when = { item = 12723 }, -- level 57 + { turnin = 5051, floor = "up", when = { item = 12723 }, -- level 57 note = "The NPC is indoors, one floor up." }, { level = 58, patrol = { { 1422, 41.76, 62.04 }, { 1422, 44.76, 62.24 }, { 1422, 47.94, 63.04 }, { 1422, 45.66, 65.43 }, { 1422, 42.57, 66.96 }, { 1422, 39.35, 66.86 }, { 1422, 37.83, 70.45 }, { 1422, 40.97, 70.37 }, { 1422, 44.44, 69.83 }, { 1422, 46.94, 71.55 }, { 1422, 48.03, 68.17 }, { 1422, 44.24, 74.76 }, { 1422, 40.23, 73.75 } }, why = { kind = "level", levels = { 55, 60 } } }, -- level 57 { turnin = 5236, when = { log = 5236 }, why = { kind = "detour", quest = 5238, quests = 3, seconds = 60, total = 18000, xp = 9300 } }, -- level 58 diff --git a/Ding/Guides/Leveling/Horde/41.lua b/Ding/Guides/Leveling/Horde/41.lua index 1ad8e8d..2124cad 100644 --- a/Ding/Guides/Leveling/Horde/41.lua +++ b/Ding/Guides/Leveling/Horde/41.lua @@ -31,7 +31,7 @@ Ding.RegisterGuide({ note = "Silithus: Valor's Rest, in the north-east, then Cenarion Hold." }, { turnin = 1124, accept = 1125, -- level 59 note = "The NPC is indoors." }, - { accept = 8277, -- level 59 + { accept = 8277, floor = "up", -- level 59 note = "This one roams, so scan the surrounding area. The NPC is indoors, one floor up." }, { turnin = 8276, accept = 8280 }, -- level 59 { accept = 8284 }, -- level 59 @@ -51,7 +51,7 @@ Ding.RegisterGuide({ { complete = 8277, -- level 59 note = "Hunt spiders for it." }, { complete = 8280 }, -- level 59 - { turnin = 8277, accept = 8278, -- level 59 + { turnin = 8277, accept = 8278, floor = "up", -- level 59 note = "This one roams, so scan the surrounding area. The NPC is indoors, one floor up." }, { turnin = 8280, accept = 8281 }, -- level 59 { complete = 8284, -- level 59 @@ -83,7 +83,7 @@ Ding.RegisterGuide({ { complete = 8281, -- level 59 note = "Target the burrowing worms." }, { turnin = 8281 }, -- level 59 - { turnin = 8278, -- level 59 + { turnin = 8278, floor = "up", -- level 59 note = "This one roams, so scan the surrounding area. The NPC is indoors, one floor up." }, { turnin = { 8287, 8304 }, -- level 59 note = "The NPC is on the house's raised terrace." }, diff --git a/tools/README.md b/tools/README.md index de5b954..f4ef0cb 100644 --- a/tools/README.md +++ b/tools/README.md @@ -33,6 +33,7 @@ the guides; nothing here is loaded by the game. | `media/textures.py` | Python 3, no dependencies: draws the kit texture missing from the handoff and puts the origin of the TGAs at the bottom (`python3 tools/media/textures.py Ding/Media/Textures`) | | `translate_guides.lua` | Writes the translations of each guide in the TOC, one per language (`Ding/Locales/Guides//`), from the `routes/locales/.lua` dictionaries, and their lines in `Ding.toc` (`lua5.1 tools/translate_guides.lua [locale...]`); exit code 1 if a translation is missing | | `guide_texts.lua` | Shared module: language dictionaries, translation of a note sentence by sentence, writing of the translation files | +| `guide_floor.lua` | Shared module: the floor a guide note names (`floor` key: "up", "top", "down"), from an explicit table of English phrases; used by `write_leveling.lua` and `check_guides.lua` | | `check_package.py` | Python 3, no dependencies: checks the zip built by the BigWigs packager before publishing (`python3 tools/check_package.py .release/Ding-*.zip`, from the repository root) | | `docs/icon/*.svg` | The icon's vector sources (logo, minimap button, gold arrow, CurseForge avatar): `logo64` / `logo32`, `minimap_icon64` / `minimap_icon32` and `arrow_gold` in `Ding/Media/Textures` are exports of them, in their own colors | diff --git a/tools/guide_floor.lua b/tools/guide_floor.lua new file mode 100644 index 0000000..4478d99 --- /dev/null +++ b/tools/guide_floor.lua @@ -0,0 +1,80 @@ +-- The floor a guide note names (step key `floor`, docs/guide-packs.md): "up" (one floor up, +-- upstairs, a balcony, an upper level), "top" (the highest floor of a tower or a building, a +-- top deck), "down" (a lower floor or level, a cellar, a crypt below ground). Positions are flat in the game: the note is the only place +-- that says it. tools/write_leveling.lua writes the key from the route's notes, and +-- tools/check_guides.lua warns when a note says a floor that its step's key does not. +-- An explicit table of English phrases, nothing guessed: a note that names two floors, or +-- several ("Check each of the two floors"), gets none. +local M = {} + +M.VALUES = { up = true, top = true, down = true } + +-- Phrases, lowercase, found as they are in the note. +M.PHRASES = { + up = { + "one floor up", + "upstairs, out on the balcony", + "upstairs in the", + "trainer of darnassus, upstairs", + "upper floor of the cavern", + "on an upper floor of", + "waits on the upper floor of", + "upper-floor terrace", + "a floor above the entrance", + "on the tower's middle floor", + "at the tower's upper level", + "climb to the cave's upper level", + "on undercity's upper level", + "on the raised deck", + }, + top = { + "highest floor", + "on the top floor of", + "at the top of the wizard's sanctum", + "at the top of his tower", + "up on the boat's top deck", + }, + down = { + "lower floor of the hollow tree", + "on the crypt's lower floor", + "deep in the cave, on its lowest floor", + "on the building's lowest floor", + "in the cellar of the", + "in the cellar of si:7", + "on the lower level, indoors", + "head to the lower level of the cavern", + "on the lower level within the bridge", + "go to the lowest deck of the", + "in the crypt under the building", + "down the stairs of the slaughtered lamb's crypt", + "in the slaughtered lamb's crypt", + }, +} + +-- A note with one of these names more than one floor, or a floor that may not be the one: +-- no key. +M.AMBIGUOUS = { + "two floors", "upper and lower", "as well", "several floors", "floor by floor", "if absent", + "one of them", "one level over", "mostly", +} + +-- The floor `note` names ("up", "top", "down"), or nil (none, several, or not for sure). +function M.of(note) + if type(note) ~= "string" then return nil end + local text = note:lower() + for _, phrase in ipairs(M.AMBIGUOUS) do + if text:find(phrase, 1, true) then return nil end + end + local found + for _, value in ipairs({ "up", "top", "down" }) do + for _, phrase in ipairs(M.PHRASES[value]) do + if text:find(phrase, 1, true) then + if found and found ~= value then return nil end + found = value + end + end + end + return found +end + +return M diff --git a/tools/write_leveling.lua b/tools/write_leveling.lua index bcd4b90..0246d36 100644 --- a/tools/write_leveling.lua +++ b/tools/write_leveling.lua @@ -26,6 +26,8 @@ -- 7. Reasons (tools/route_why.lua): a step whose choice surprises (a detour, a quest taken now -- or never) gets its `why`, measured on the simulation; the audit's verdicts on the quests -- the route leaves out become each section's `leftOut`. --why lists them. +-- 8. Floors (tools/guide_floor.lua): a step whose note says the target is upstairs, at the top +-- or downstairs gets `floor`, which the arrow says on arrival. -- Writes Ding/Guides/ and its translations (tools/routes/locales). local here = arg[0]:match("^(.*)[/\\]") or "." local root = here:match("^(.*)[/\\]tools$") or (here == "." and "..") or (here .. "/..") @@ -38,6 +40,7 @@ local Texts = dofile(here .. "/guide_texts.lua") local Solver = dofile(here .. "/route_solver.lua") local Free = dofile(here .. "/route_free.lua") local Why = dofile(here .. "/route_why.lua") +local Floor = dofile(here .. "/guide_floor.lua") local QK = X.QUEST local P = Model.PARAMS @@ -2074,6 +2077,10 @@ for _, section in ipairs(sections) do if step.dungeon then parts[#parts + 1] = "dungeon = " .. quote(step.dungeon) end if step.elite then parts[#parts + 1] = "elite = true" end if step.optional then parts[#parts + 1] = "optional = true" end + -- The floor the route's note names (tools/guide_floor.lua): the arrow says it on + -- arrival. Not on a trip: its point is the way in, the note is for the next step. + local floor = not step.go and Floor.of(step.note) + if floor then parts[#parts + 1] = "floor = " .. quote(floor) end for _, k in ipairs(GOAL_KEYS) do if step[k] ~= nil then parts[#parts + 1] = k .. " = " .. luaValue(step[k]) end end From be9a44a464253691d8558a69e6808176f2bfa1e8 Mon Sep 17 00:00:00 2001 From: Moust4ki Date: Thu, 15 Oct 2026 15:11:28 +0200 Subject: [PATCH 2/5] Class quests and example pack: floor where the note names one Co-Authored-By: Claude Opus 5.5 --- Ding/Guides/Class/Alliance/Druid.lua | 8 ++++---- Ding/Guides/Class/Alliance/Hunter.lua | 2 +- Ding/Guides/Class/Alliance/Mage.lua | 8 ++++---- Ding/Guides/Class/Alliance/Rogue.lua | 6 +++--- Ding/Guides/Class/Alliance/Warlock.lua | 10 +++++----- Ding/Guides/Class/Alliance/Warrior.lua | 2 +- Ding/Guides/Class/Horde/Druid.lua | 4 ++-- Ding/Guides/Class/Horde/Rogue.lua | 2 +- examples/DingExamplePack/Guides/01_Aldrassil.lua | 2 +- 9 files changed, 22 insertions(+), 22 deletions(-) diff --git a/Ding/Guides/Class/Alliance/Druid.lua b/Ding/Guides/Class/Alliance/Druid.lua index af835b7..96d6382 100644 --- a/Ding/Guides/Class/Alliance/Druid.lua +++ b/Ding/Guides/Class/Alliance/Druid.lua @@ -19,9 +19,9 @@ Ding.RegisterGuide({ { turnin = 5923, races = { "NightElf" }, optional = true }, { accept = 5921, races = { "NightElf" }, why = { text = "From level 10: the chain that teaches Bear Form.", short = true }, - note = "Mathrengyl Bearwalker, upstairs in the Cenarion Enclave." }, + floor = "up", note = "Mathrengyl Bearwalker, upstairs in the Cenarion Enclave." }, { turnin = 5921, accept = 5929, races = { "NightElf" }, - note = "Dendrite Starblaze waits on the upper floor of the great house of Nighthaven." }, + floor = "up", note = "Dendrite Starblaze waits on the upper floor of the great house of Nighthaven." }, { complete = 5929, talk = 11956, races = { "NightElf" }, note = "The Great Bear Spirit waits northwest of the village, up the hill path: listen to all it has to say." }, { turnin = 5929, accept = 5931, races = { "NightElf" } }, @@ -47,7 +47,7 @@ Ding.RegisterGuide({ { turnin = 94912, accept = 94914, races = { "Skyborne" }, note = "Sheldras Moontree, the druid trainer of Stormwind, in the park." }, { turnin = 94914, races = { "Skyborne" }, - note = "Dendrite Starblaze waits on the upper floor of the great house of Nighthaven." }, + floor = "up", note = "Dendrite Starblaze waits on the upper floor of the great house of Nighthaven." }, -- Level 14: Cure Poison (Night Elves). { accept = 6121, races = { "NightElf" }, @@ -105,7 +105,7 @@ Ding.RegisterGuide({ { turnin = 98731, accept = 98397, races = { "NightElf" } }, { turnin = 98738, accept = 98397, races = { "Skyborne" } }, { turnin = 98397, races = { "NightElf", "Skyborne" }, - note = "Mathrengyl Bearwalker, upstairs in the Cenarion Enclave of Darnassus." }, + floor = "up", note = "Mathrengyl Bearwalker, upstairs in the Cenarion Enclave of Darnassus." }, -- Level 50: Torwa Pathfinder, in Un'Goro Crater. { accept = 9063, diff --git a/Ding/Guides/Class/Alliance/Hunter.lua b/Ding/Guides/Class/Alliance/Hunter.lua index 0148921..3a14d2e 100644 --- a/Ding/Guides/Class/Alliance/Hunter.lua +++ b/Ding/Guides/Class/Alliance/Hunter.lua @@ -27,7 +27,7 @@ Ding.RegisterGuide({ why = { text = "Turning this in teaches Tame Beast: you can now keep a pet.", short = true } }, { turnin = 6103, races = { "NightElf" }, why = { text = "Your pet can now learn new skills.", short = true }, - note = "Jocaste, the hunter trainer of Darnassus, upstairs." }, + floor = "up", note = "Jocaste, the hunter trainer of Darnassus, upstairs." }, -- Level 10, Dwarves: Grif Wildheart, in Kharanos. { accept = 6064, races = { "Dwarf" }, diff --git a/Ding/Guides/Class/Alliance/Mage.lua b/Ding/Guides/Class/Alliance/Mage.lua index 4eb7c7a..10c95fa 100644 --- a/Ding/Guides/Class/Alliance/Mage.lua +++ b/Ding/Guides/Class/Alliance/Mage.lua @@ -15,9 +15,9 @@ Ding.RegisterGuide({ -- Level 10, Humans: Mirror Lake. { accept = 1860, races = { "Human" }, why = { text = "From level 10: your trainer's first errand, a few minutes from Goldshire.", short = true }, - note = "Zaldimar Wefhellt, the mage trainer of Goldshire, upstairs in the inn." }, + floor = "up", note = "Zaldimar Wefhellt, the mage trainer of Goldshire, upstairs in the inn." }, { turnin = 1860, races = { "Human" }, - note = "Jennea Cannon, upstairs in the Wizard's Sanctum of the Mage Quarter, in Stormwind." }, + floor = "up", note = "Jennea Cannon, upstairs in the Wizard's Sanctum of the Mage Quarter, in Stormwind." }, { accept = 1861, races = { "Human", "Skyborne" } }, { complete = 1861, useitem = 7207, races = { "Human", "Skyborne" }, note = "Stand in the water of Mirror Lake, in the west of Elwynn Forest, and use the flask there." }, @@ -46,7 +46,7 @@ Ding.RegisterGuide({ why = { text = "From level 15: a chain in Stormwind that ends with a robe for you.", short = true }, note = "Your mage trainer gives it." }, { turnin = 1919, accept = 1920, races = { "Human", "Gnome" }, - note = "Jennea Cannon, upstairs in the Wizard's Sanctum of the Mage Quarter, in Stormwind." }, + floor = "up", note = "Jennea Cannon, upstairs in the Wizard's Sanctum of the Mage Quarter, in Stormwind." }, { collect = { { 7247, 1 }, { 7308, 1 } }, races = { "Human", "Gnome" }, note = "The chest of coffers and the cantation lie in Jennea's tower." }, { go = { 1453, 50.61, 90.55 }, text = "The Blue Recluse, the inn of the Mage Quarter", races = { "Human", "Gnome" } }, @@ -64,7 +64,7 @@ Ding.RegisterGuide({ { accept = 1939, races = { "Human", "Gnome" }, why = { text = "From level 26: a chain that ends with a second robe.", short = true } }, { turnin = 1939, accept = 1938, races = { "Human", "Gnome" }, - note = "High Sorcerer Andromath, at the top of the Wizard's Sanctum." }, + floor = "top", note = "High Sorcerer Andromath, at the top of the Wizard's Sanctum." }, { complete = 1938, races = { "Human", "Gnome" }, note = "The book lies in the Tower of Ilgalar, in the east of Redridge Mountains." }, { turnin = 1938, accept = 1940, races = { "Human", "Gnome" } }, diff --git a/Ding/Guides/Class/Alliance/Rogue.lua b/Ding/Guides/Class/Alliance/Rogue.lua index e5f0931..edb3a8e 100644 --- a/Ding/Guides/Class/Alliance/Rogue.lua +++ b/Ding/Guides/Class/Alliance/Rogue.lua @@ -32,7 +32,7 @@ Ding.RegisterGuide({ -- Level 20: Klaven's Tower, then your poisons. { accept = 2360, why = { text = "From level 20: the chain that teaches your poisons.", short = true }, - note = "Master Mathias Shaw, on the top floor of SI:7's headquarters, in Old Town." }, + floor = "top", note = "Master Mathias Shaw, on the top floor of SI:7's headquarters, in Old Town." }, { turnin = 2360, accept = 2359, note = "Agent Kearnen watches from a hill in the southeast of Westfall." }, { complete = 2359, @@ -40,7 +40,7 @@ Ding.RegisterGuide({ { turnin = 2359, accept = 2607, note = "The chest leaves a sickness on you: that is the next quest." }, { turnin = 2607, accept = 2608, - note = "Doc Mixilpixil works in the cellar of SI:7's headquarters." }, + floor = "down", note = "Doc Mixilpixil works in the cellar of SI:7's headquarters." }, { complete = 2608, note = "Lie down in front of him (the emote) so he can examine you." }, { turnin = 2608, @@ -65,7 +65,7 @@ Ding.RegisterGuide({ { complete = 8234, note = "The Timbermaw shamans of northern Azshara carry the bag." }, { turnin = 8234, accept = 8235, - note = "Archmage Xylem, at the top of his tower in Azshara: Sanath Lim-yo, at its foot, sends you up." }, + floor = "top", note = "Archmage Xylem, at the top of his tower in Azshara: Sanath Lim-yo, at its foot, sends you up." }, { complete = 8235, note = "The Forest Oozes of northeastern Azshara carry the fragments." }, { turnin = 8235 }, diff --git a/Ding/Guides/Class/Alliance/Warlock.lua b/Ding/Guides/Class/Alliance/Warlock.lua index b08db26..f33871a 100644 --- a/Ding/Guides/Class/Alliance/Warlock.lua +++ b/Ding/Guides/Class/Alliance/Warlock.lua @@ -34,12 +34,12 @@ Ding.RegisterGuide({ { turnin = 1715, races = { "Gnome" }, optional = true }, { accept = 1688, why = { text = "From level 10: the chain that teaches Summon Voidwalker.", short = true }, - note = "Gakin the Darkbinder, in the cellar of the Slaughtered Lamb, in the Mage Quarter of Stormwind." }, + floor = "down", note = "Gakin the Darkbinder, in the cellar of the Slaughtered Lamb, in the Mage Quarter of Stormwind." }, { complete = 1688, note = "Surena Caledon hides in a house of the Brackwell Pumpkin Patch, in the east of Elwynn Forest." }, { turnin = 1688, accept = 1689 }, { complete = 1689, useitem = 6928, - note = "Down the stairs of the Slaughtered Lamb's crypt: use the choker on the summoning circle, then defeat the voidwalker." }, + floor = "down", note = "Down the stairs of the Slaughtered Lamb's crypt: use the choker on the summoning circle, then defeat the voidwalker." }, { turnin = 1689, why = { text = "Turning this in teaches Summon Voidwalker.", short = true } }, @@ -49,21 +49,21 @@ Ding.RegisterGuide({ { turnin = 1717, races = { "Gnome" }, optional = true }, { accept = 1716, why = { text = "From level 20: the chain that teaches Summon Succubus.", short = true }, - note = "Gakin the Darkbinder, in the cellar of the Slaughtered Lamb." }, + floor = "down", note = "Gakin the Darkbinder, in the cellar of the Slaughtered Lamb." }, { turnin = 1716, accept = 1738, note = "Takar the Seer, north of Camp Taurajo in the Barrens: Horde land, stay clear of the guards." }, { complete = 1738, note = "The Heartswood grows in the north of Ashenvale, near the Horde's lumber camp." }, { turnin = 1738, accept = 1739 }, { complete = 1739, useitem = 6913, - note = "In the Slaughtered Lamb's crypt again: use the heartswood core on the summoning circle, then defeat the succubus." }, + floor = "down", note = "In the Slaughtered Lamb's crypt again: use the heartswood core on the summoning circle, then defeat the succubus." }, { turnin = 1739, why = { text = "Turning this in teaches Summon Succubus.", short = true } }, -- Level 30: the felhunter. { accept = 1798, why = { text = "From level 30: the chain that teaches Summon Felhunter.", short = true }, - note = "Gakin the Darkbinder, in the cellar of the Slaughtered Lamb." }, + floor = "down", note = "Gakin the Darkbinder, in the cellar of the Slaughtered Lamb." }, { turnin = 1798, accept = 1758, note = "Strahad Farsan, in Ratchet." }, { turnin = 1758, accept = 1802, diff --git a/Ding/Guides/Class/Alliance/Warrior.lua b/Ding/Guides/Class/Alliance/Warrior.lua index 4e4de7b..d542002 100644 --- a/Ding/Guides/Class/Alliance/Warrior.lua +++ b/Ding/Guides/Class/Alliance/Warrior.lua @@ -30,7 +30,7 @@ Ding.RegisterGuide({ why = { text = "From level 10: the chain that teaches Defensive Stance.", short = true }, note = "Granis Swiftaxe, the warrior trainer of Kharanos." }, { turnin = 1679, accept = 1678, races = { "Dwarf", "Gnome" }, - note = "Muren Stormpike, upstairs in the Hall of Arms of Ironforge." }, + floor = "up", note = "Muren Stormpike, upstairs in the Hall of Arms of Ironforge." }, { complete = 1678, races = { "Dwarf", "Gnome" }, note = "Vejrek waits in a Frostmane hut in the west of Dun Morogh." }, { turnin = 1678, races = { "Dwarf", "Gnome" }, diff --git a/Ding/Guides/Class/Horde/Druid.lua b/Ding/Guides/Class/Horde/Druid.lua index feaa8d9..7f7b594 100644 --- a/Ding/Guides/Class/Horde/Druid.lua +++ b/Ding/Guides/Class/Horde/Druid.lua @@ -21,7 +21,7 @@ Ding.RegisterGuide({ why = { text = "From level 10: the chain that teaches Bear Form.", short = true }, note = "Turak Runetotem, in the Elder Rise of Thunder Bluff." }, { turnin = 5922, accept = 5930, races = { "Tauren" }, - note = "Dendrite Starblaze waits on the upper floor of the great house of Nighthaven." }, + floor = "up", note = "Dendrite Starblaze waits on the upper floor of the great house of Nighthaven." }, { complete = 5930, talk = 11956, races = { "Tauren" }, note = "The Great Bear Spirit waits northwest of the village, up the hill path: listen to all it has to say." }, { turnin = 5930, accept = 5932, races = { "Tauren" } }, @@ -47,7 +47,7 @@ Ding.RegisterGuide({ { turnin = 94911, accept = 94913, races = { "Skyborne" }, note = "Turak Runetotem, in the Elder Rise of Thunder Bluff." }, { turnin = 94913, races = { "Skyborne" }, - note = "Dendrite Starblaze waits on the upper floor of the great house of Nighthaven." }, + floor = "up", note = "Dendrite Starblaze waits on the upper floor of the great house of Nighthaven." }, -- Level 14: Cure Poison (Tauren). { accept = 6126, races = { "Tauren" }, diff --git a/Ding/Guides/Class/Horde/Rogue.lua b/Ding/Guides/Class/Horde/Rogue.lua index 91b1fb9..80c3c32 100644 --- a/Ding/Guides/Class/Horde/Rogue.lua +++ b/Ding/Guides/Class/Horde/Rogue.lua @@ -58,7 +58,7 @@ Ding.RegisterGuide({ { complete = 8234, note = "The Timbermaw shamans of northern Azshara carry the bag." }, { turnin = 8234, accept = 8235, - note = "Archmage Xylem, at the top of his tower in Azshara: Sanath Lim-yo, at its foot, sends you up." }, + floor = "top", note = "Archmage Xylem, at the top of his tower in Azshara: Sanath Lim-yo, at its foot, sends you up." }, { complete = 8235, note = "The Forest Oozes of northeastern Azshara carry the fragments." }, { turnin = 8235 }, diff --git a/examples/DingExamplePack/Guides/01_Aldrassil.lua b/examples/DingExamplePack/Guides/01_Aldrassil.lua index 31dab84..5c84d4f 100644 --- a/examples/DingExamplePack/Guides/01_Aldrassil.lua +++ b/examples/DingExamplePack/Guides/01_Aldrassil.lua @@ -15,7 +15,7 @@ Ding.RegisterGuide({ note = "Young nightsabers and thistle boars all around the tree." }, { turnin = 456, accept = 457 }, { turnin = 458, accept = 459 }, - { train = true, + { train = true, floor = "up", note = "Your class trainer is inside Aldrassil." }, { complete = { 457, 459 }, note = "Nightsabers and boars to the north, moss on the grells to the west." }, From 105dd2efac24af863a48ebbc5cdd4e087d415f66 Mon Sep 17 00:00:00 2001 From: Moust4ki Date: Thu, 15 Oct 2026 15:11:28 +0200 Subject: [PATCH 3/5] Arrow: say the target's floor near it and on arrival, and stay Co-Authored-By: Claude Opus 5.5 --- Ding/Locales/deDE.lua | 9 +++++++++ Ding/Locales/enUS.lua | 11 +++++++++++ Ding/Locales/esES.lua | 9 +++++++++ Ding/Locales/frFR.lua | 9 +++++++++ Ding/Locales/koKR.lua | 9 +++++++++ Ding/Locales/ptBR.lua | 9 +++++++++ Ding/Locales/zhCN.lua | 9 +++++++++ Ding/Locales/zhTW.lua | 9 +++++++++ Ding/UI/Arrow.lua | 39 ++++++++++++++++++++++++++++++++++----- 9 files changed, 108 insertions(+), 5 deletions(-) diff --git a/Ding/Locales/deDE.lua b/Ding/Locales/deDE.lua index cf96477..56b4441 100644 --- a/Ding/Locales/deDE.lua +++ b/Ding/Locales/deDE.lua @@ -62,6 +62,15 @@ Ding.Locales.deDE = { IN_DUNGEON = "%s, in %s", ARRIVED = "Du bist da", IN_AREA = "Du bist im Gebiet", + FLOOR_NPC_UP = "Der NSC ist ein Stockwerk höher", + FLOOR_NPC_TOP = "Der NSC ist ganz oben", + FLOOR_NPC_DOWN = "Der NSC ist ein Stockwerk tiefer", + FLOOR_IT_UP = "Es ist ein Stockwerk höher", + FLOOR_IT_TOP = "Es ist ganz oben", + FLOOR_IT_DOWN = "Es ist ein Stockwerk tiefer", + FLOOR_NEAR_UP = "Ein Stockwerk höher", + FLOOR_NEAR_TOP = "Ganz oben", + FLOOR_NEAR_DOWN = "Ein Stockwerk tiefer", CORPSE = "Dein Leichnam", TURN_AROUND = "umdrehen", YARDS = "%s m", diff --git a/Ding/Locales/enUS.lua b/Ding/Locales/enUS.lua index 6576613..b36aede 100644 --- a/Ding/Locales/enUS.lua +++ b/Ding/Locales/enUS.lua @@ -63,6 +63,17 @@ Ding.Locales.enUS = { IN_DUNGEON = "%s, in %s", ARRIVED = "You’re here", IN_AREA = "You’re in the area", + -- The arrow, on a step whose target is on another floor (step key `floor`): arrived, then + -- near it (the detail line). + FLOOR_NPC_UP = "The NPC is one floor up", + FLOOR_NPC_TOP = "The NPC is at the top", + FLOOR_NPC_DOWN = "The NPC is one floor down", + FLOOR_IT_UP = "It's one floor up", + FLOOR_IT_TOP = "It's at the top", + FLOOR_IT_DOWN = "It's one floor down", + FLOOR_NEAR_UP = "One floor up", + FLOOR_NEAR_TOP = "At the top", + FLOOR_NEAR_DOWN = "One floor down", CORPSE = "Your corpse", TURN_AROUND = "turn around", YARDS = "%s yd", diff --git a/Ding/Locales/esES.lua b/Ding/Locales/esES.lua index 489c2e8..ee67461 100644 --- a/Ding/Locales/esES.lua +++ b/Ding/Locales/esES.lua @@ -65,6 +65,15 @@ Ding.Locales.esES = { IN_DUNGEON = "%s, en %s", ARRIVED = "Estás aquí", IN_AREA = "Estás en la zona", + FLOOR_NPC_UP = "El PNJ está un piso más arriba", + FLOOR_NPC_TOP = "El PNJ está en lo más alto", + FLOOR_NPC_DOWN = "El PNJ está un piso más abajo", + FLOOR_IT_UP = "Está un piso más arriba", + FLOOR_IT_TOP = "Está en lo más alto", + FLOOR_IT_DOWN = "Está un piso más abajo", + FLOOR_NEAR_UP = "Un piso más arriba", + FLOOR_NEAR_TOP = "En lo más alto", + FLOOR_NEAR_DOWN = "Un piso más abajo", CORPSE = "Tu cadáver", TURN_AROUND = "date la vuelta", YARDS = "%s m", diff --git a/Ding/Locales/frFR.lua b/Ding/Locales/frFR.lua index ee4ddcf..09af26c 100644 --- a/Ding/Locales/frFR.lua +++ b/Ding/Locales/frFR.lua @@ -62,6 +62,15 @@ Ding.Locales.frFR = { IN_DUNGEON = "%s, dans %s", ARRIVED = "Tu y es", IN_AREA = "Tu es dans la zone", + FLOOR_NPC_UP = "Le PNJ est à l'étage du dessus", + FLOOR_NPC_TOP = "Le PNJ est tout en haut", + FLOOR_NPC_DOWN = "Le PNJ est à l'étage du dessous", + FLOOR_IT_UP = "C'est à l'étage du dessus", + FLOOR_IT_TOP = "C'est tout en haut", + FLOOR_IT_DOWN = "C'est à l'étage du dessous", + FLOOR_NEAR_UP = "À l'étage du dessus", + FLOOR_NEAR_TOP = "Tout en haut", + FLOOR_NEAR_DOWN = "À l'étage du dessous", CORPSE = "Ton corps", TURN_AROUND = "demi-tour", YARDS = "%s m", diff --git a/Ding/Locales/koKR.lua b/Ding/Locales/koKR.lua index 30c0c58..0fa8d7f 100644 --- a/Ding/Locales/koKR.lua +++ b/Ding/Locales/koKR.lua @@ -63,6 +63,15 @@ Ding.Locales.koKR = { IN_DUNGEON = "%s (%s 안)", ARRIVED = "도착했습니다", IN_AREA = "목표 지역 안입니다", + FLOOR_NPC_UP = "NPC는 한 층 위에 있습니다", + FLOOR_NPC_TOP = "NPC는 맨 위층에 있습니다", + FLOOR_NPC_DOWN = "NPC는 한 층 아래에 있습니다", + FLOOR_IT_UP = "한 층 위에 있습니다", + FLOOR_IT_TOP = "맨 위층에 있습니다", + FLOOR_IT_DOWN = "한 층 아래에 있습니다", + FLOOR_NEAR_UP = "한 층 위", + FLOOR_NEAR_TOP = "맨 위층", + FLOOR_NEAR_DOWN = "한 층 아래", CORPSE = "내 시체", TURN_AROUND = "뒤로 도세요", YARDS = "%s미터", diff --git a/Ding/Locales/ptBR.lua b/Ding/Locales/ptBR.lua index f1b8989..b18ac23 100644 --- a/Ding/Locales/ptBR.lua +++ b/Ding/Locales/ptBR.lua @@ -63,6 +63,15 @@ Ding.Locales.ptBR = { IN_DUNGEON = "%s, em %s", ARRIVED = "Você chegou", IN_AREA = "Você está na área", + FLOOR_NPC_UP = "O PNJ está um andar acima", + FLOOR_NPC_TOP = "O PNJ está no topo", + FLOOR_NPC_DOWN = "O PNJ está um andar abaixo", + FLOOR_IT_UP = "Fica um andar acima", + FLOOR_IT_TOP = "Fica no topo", + FLOOR_IT_DOWN = "Fica um andar abaixo", + FLOOR_NEAR_UP = "Um andar acima", + FLOOR_NEAR_TOP = "No topo", + FLOOR_NEAR_DOWN = "Um andar abaixo", CORPSE = "Seu corpo", TURN_AROUND = "dê meia-volta", YARDS = "%s m", diff --git a/Ding/Locales/zhCN.lua b/Ding/Locales/zhCN.lua index 6cf1953..7095bc5 100644 --- a/Ding/Locales/zhCN.lua +++ b/Ding/Locales/zhCN.lua @@ -63,6 +63,15 @@ Ding.Locales.zhCN = { IN_DUNGEON = "%s(%s内)", ARRIVED = "已到达", IN_AREA = "已在区域内", + FLOOR_NPC_UP = "NPC在上一层", + FLOOR_NPC_TOP = "NPC在最高层", + FLOOR_NPC_DOWN = "NPC在下一层", + FLOOR_IT_UP = "目标在上一层", + FLOOR_IT_TOP = "目标在最高层", + FLOOR_IT_DOWN = "目标在下一层", + FLOOR_NEAR_UP = "在上一层", + FLOOR_NEAR_TOP = "在最高层", + FLOOR_NEAR_DOWN = "在下一层", CORPSE = "尸体", TURN_AROUND = "掉头", YARDS = "%s码", diff --git a/Ding/Locales/zhTW.lua b/Ding/Locales/zhTW.lua index 55e4e83..feccc51 100644 --- a/Ding/Locales/zhTW.lua +++ b/Ding/Locales/zhTW.lua @@ -63,6 +63,15 @@ Ding.Locales.zhTW = { IN_DUNGEON = "%s(%s內)", ARRIVED = "已抵達", IN_AREA = "已在區域內", + FLOOR_NPC_UP = "NPC在上一層", + FLOOR_NPC_TOP = "NPC在最高層", + FLOOR_NPC_DOWN = "NPC在下一層", + FLOOR_IT_UP = "目標在上一層", + FLOOR_IT_TOP = "目標在最高層", + FLOOR_IT_DOWN = "目標在下一層", + FLOOR_NEAR_UP = "在上一層", + FLOOR_NEAR_TOP = "在最高層", + FLOOR_NEAR_DOWN = "在下一層", CORPSE = "屍體", TURN_AROUND = "向後轉", YARDS = "%s碼", diff --git a/Ding/UI/Arrow.lua b/Ding/UI/Arrow.lua index 1c338ab..091eb89 100644 --- a/Ding/UI/Arrow.lua +++ b/Ding/UI/Arrow.lua @@ -3,7 +3,8 @@ -- clickable. Under it, what to take or the target's name, where (a detail line), then the -- distance and the time to get there. The theme's arrow on the way, its "turn around" arrow -- and color when the target is behind, a ring in the done color with "You're here" on arrival --- (it fades after 3 s). Monsters to kill or things to gather +-- (it fades after 3 s). A step whose target is on another floor (`floor`: the game gives no +-- height) says it near the target and on arrival instead, and stays. Monsters to kill or things to gather -- make an area: the player is there as soon as they are among the spawns, and the arrow -- then leads from spawn to spawn in a loop (option, on by default). A ghost is led -- to their corpse first. With TomTom installed (and the setting on), TomTom's arrow shows @@ -31,6 +32,9 @@ local MAX_SPEED = 60 -- faster is a teleport (hearthstone...), not a local AREA_ENTER, AREA_LEAVE = 25, 40 local ARRIVE = 6 -- yards from a place, an NPC: reached (Engine's DEFAULT_RADIUS) local CORPSE_RADIUS = 30 -- close enough to the corpse to come back to life +local FLOOR_NEAR = 30 -- yards: closer, the detail line says the target's floor +-- A step's `floor` (docs/guide-packs.md): the end of its texts' keys (L.FLOOR_NPC_UP...). +local FLOORS = { up = "UP", top = "TOP", down = "DOWN" } local TARGET_NAMES = 3 -- names in the target binding's macro, nearest first -- Farming loop, in a kill or gather area: the spawns around the nearest one, in a loop. local LOOP_RADIUS = 300 -- yards around the nearest spawn that make one loop @@ -553,11 +557,25 @@ local function target(self) return point, distance, otherContinent, true end +-- The floor of what the arrow shows ("UP", "TOP", "DOWN"), or nil: only for the step's own +-- targets (not a corpse, a flight master on the way, a persistent objective, a trip's point). +function A:Floor(point, leg) + if not self.ofStep or point.corpse or point.low or point.isGo or (leg and leg.point) then return nil end + local step = Ding.Engine:CurrentStep() + return step and FLOORS[step.floor] +end + +-- Arrived on a step with a floor: "The NPC is one floor up", or "It's one floor up" for an +-- object, a place or a monster. +function A.FloorArrived(floor, point) + return L[(point.npc and not point.area and "FLOOR_NPC_" or "FLOOR_IT_") .. floor] +end + function A:Tick() local f = self.frame if not self.point then local point, _, otherContinent, ofStep = target(self) - self.point, self.otherContinent = point, otherContinent + self.point, self.otherContinent, self.ofStep = point, otherContinent, ofStep if ofStep and point then self.follow = point.label end end local point = self.point @@ -653,6 +671,12 @@ function A:Tick() else detail = zone end + -- Near the target, its floor: "One floor up". + local floor = self:Floor(point, leg) + if floor and distance and distance <= FLOOR_NEAR then + local near = L["FLOOR_NEAR_" .. floor] + detail = detail and (detail .. " · " .. near) or near + end self:SetLabel(hint or (farm and areaName) or point.label or "", detail, hint ~= nil) local key = targetName and Ding.Gamepad:BindingKey(Ding.ItemButton.TARGET_BINDING) if key then @@ -687,12 +711,17 @@ function A:Tick() if distance <= radius then self.inArea = point.area and not point.corpse or false self:SetState("arrived") - f.distance:SetText(self.inArea and L.IN_AREA or L.ARRIVED) + f.distance:SetText(floor and A.FloorArrived(floor, point) or (self.inArea and L.IN_AREA or L.ARRIVED)) f.eta:Hide() - -- The ring stays 3 s, then the arrow fades until the player moves away. - if not self.arrivedFaded and GetTime() - (self.arrivedAt or 0) >= ARRIVED_FADE then + -- The ring stays 3 s, then the arrow fades until the player moves away; on another + -- floor it stays: the player still has to find the stairs. + if not floor and not self.arrivedFaded and GetTime() - (self.arrivedAt or 0) >= ARRIVED_FADE then self.arrivedFaded = true UI.FadeOut(f, 0.3) + elseif floor and self.arrivedFaded then + -- Faded on the step before, at the same place: this one has a floor to say. + self.arrivedFaded = false + UI.FadeIn(f, 0.2) end else if not point.corpse and not farm then self.inArea = false end From 909a761cc5377c3ee1dabfe7d5fd5047e7ba8849 Mon Sep 17 00:00:00 2001 From: Moust4ki Date: Thu, 15 Oct 2026 15:11:28 +0200 Subject: [PATCH 4/5] The floor step key: import, check_guides and the guide format docs Co-Authored-By: Claude Opus 5.5 --- Ding/Core/Import.lua | 7 +++++-- docs/SPEC.md | 13 +++++++++++++ docs/create-a-guide-with-ai.md | 4 +++- docs/guide-packs.md | 1 + tools/check_guides.lua | 12 ++++++++++++ 5 files changed, 34 insertions(+), 3 deletions(-) diff --git a/Ding/Core/Import.lua b/Ding/Core/Import.lua index a66a1c9..e11dea2 100644 --- a/Ding/Core/Import.lua +++ b/Ding/Core/Import.lua @@ -44,7 +44,7 @@ local STEP_KEYS = { faction = "faction", use = "items", useitem = "items", equip = "items", destroy = "items", bank = "items", unbank = "items", keep = "items", kill = "npcPairs", collect = "itemPairs", buy = "buys", talk = "npcs", gossip = "index", object = "objects", spots = "points", - patrol = "points", revive = "revive", when = "when", why = "why", + patrol = "points", revive = "revive", when = "when", why = "why", floor = "floor", } local WHEN_KEYS = { done = "quests", notdone = "quests", log = "quests", notlog = "quests", ready = "quests", @@ -69,6 +69,7 @@ local SAMPLES = { next = '"guide-id"', when = "{ done = 456 }", held = "{ { 5469, 4 } }", steps = "{ { accept = 456 } }", category = '"leveling" / "items"', guides = "{ { steps = { ... } } }", pack = '{ title = "text" }', why = '"text" / { kind = "detour", quest = 67, xp = 9000 }', leftOut = '{ [456] = "text" }', + floor = '"up" / "top" / "down"', } -- The order of the keys in an exported guide. @@ -81,7 +82,7 @@ local STEP_ORDER = { "revive", "train", "fly", "vendor", "repair", "kill", "collect", "buy", "talk", "gossip", "useitem", "object", "equip", "destroy", "bank", "unbank", "abandon", "keep", "spots", "patrol", "use", "sticky", "noauto", "dungeon", "elite", "optional", "faction", "races", "classes", "when", "text", - "note", "why", "done", "notdone", "log", "notlog", "ready", "item", "noitem", "minlevel", "maxlevel", + "floor", "note", "why", "done", "notdone", "log", "notlog", "ready", "item", "noitem", "minlevel", "maxlevel", } --------------------------------------------------------------------------- @@ -191,6 +192,8 @@ local function checkValue(kind, key, v, at, ctx) if not known then at("warning", L.IMPORT_CATEGORY:format(v)) end elseif kind == "faction" then if not FACTION_RACES[v] then expects() end + elseif kind == "floor" then + if v ~= "up" and v ~= "top" and v ~= "down" then expects() end elseif kind == "races" or kind == "classes" then local list = names(v) if not list then return expects() end diff --git a/docs/SPEC.md b/docs/SPEC.md index f200245..5d2893b 100644 --- a/docs/SPEC.md +++ b/docs/SPEC.md @@ -198,6 +198,7 @@ Common options: | `faction` | `"Alliance"` or `"Horde"`: the step only appears for that side (`UnitFactionGroup`), in a guide for both sides | | `races`, `classes` | the step only appears for these races/classes | | `radius` | arrival radius of a `go` step, in yards (6 by default) | +| `floor` | `"up"`, `"top"` or `"down"`: the step's target is one floor up, at the top, one floor down (the arrow says it near the target and on arrival, see "Floors") | | `use` | item id or list of item ids to offer in the item button (the first one owned) | | `sticky` | quest id or list: persistent objectives, see "Along the way" | | `dungeon` | dungeon name: the step's quests are done inside it | @@ -1160,6 +1161,18 @@ textures and font flags, never a size nor a position. within 15 yards, then the one after, and around ("Young Nightsaber · farming loop: 2 of 6"). The loop stays while the nearest spawn is of the same monster near the loop and on the same step (`Arrow.farm`). A **ghost** is first led to its corpse. +- **Floors** (Yendi's feedback: "You're here" in the middle of a building whose NPC is one + floor up): the game gives no height, neither for the player nor for a target, and the + minimap's floor icon cannot be read. A step's `floor` key says it ("up", "top", "down"): on + arrival the distance line reads "The NPC is one floor up" (an NPC: `point.npc`, not an area) + or "It's one floor up" (an object, a place, a monster), "… at the top", "… one floor down", + instead of "You're here" / "You're in the area", and the arrow stays (no fade after 3 s: the + player still has to find the stairs). Within 30 yards, the detail line adds "One floor up" / + "At the top" / "One floor down". Only for the step's own targets (`Arrow:Floor`: not the + corpse, a flight master on the way, a persistent objective or a `go` point). The leveling + generator writes the key from the route's note (`tools/guide_floor.lua`, an explicit table + of English phrases; a note that names two floors gets none), and `check_guides` warns when a + note names a floor that its step's key does not say. - **Cycle** (binding "Arrow: next target of the step", `DING_CYCLE`): the arrow goes to the target of the next row of the window that has one, in the rows' order (that of focus mode, whose focus follows), then back to the nearest of all (`Panel:CycleTarget`, diff --git a/docs/create-a-guide-with-ai.md b/docs/create-a-guide-with-ai.md index 711ad64..04bf70e 100644 --- a/docs/create-a-guide-with-ai.md +++ b/docs/create-a-guide-with-ai.md @@ -82,6 +82,7 @@ keys (the full list, with every option, is in [guide-packs.md, section 6](guide- | `note` | a text | not an action: a tip shown under the step | | `faction`, `races`, `classes` | as above | not an action: the step only exists for them | | `optional` | `true` | not an action: the step never blocks | +| `floor` | `"up"`, `"top"` or `"down"` | not an action: the target is one floor up, at the top, one floor down (the arrow says it on arrival) | Ding writes the names of quests, NPCs and items itself, in the player's language: **a guide never writes names**, only ids. Your `title`, `text` and `note` are shown as you wrote them. @@ -198,7 +199,8 @@ The format, a single guide: Step keys: accept / complete / turnin = quest id or { ids }; go = { uiMapId, x, y }; level = number; kill = { { npcId, count } }; collect = { { itemId, count } }; talk = npcId; object = objectId; useitem = itemId; text = "..."; note = "..."; -faction = "Alliance" / "Horde" (a step for one side only); optional = true. +faction = "Alliance" / "Horde" (a step for one side only); optional = true; +floor = "up" / "top" / "down" (the target is upstairs, at the top, downstairs). A step is done when all its actions are done. Never write names of quests, NPCs or items: Ding shows them from their ids. Allowed in the table: tables, texts in double quotes, numbers, true, false, -- comments. diff --git a/docs/guide-packs.md b/docs/guide-packs.md index d16fbac..e64ee0f 100644 --- a/docs/guide-packs.md +++ b/docs/guide-packs.md @@ -218,6 +218,7 @@ Options of a step: | `faction` | `"Alliance"` or `"Horde"`: in a section for both sides, the step only exists for that side (a race that picks its side on the way gets it once it has one). For a route that starts differently on each side and then goes on together. | | `races`, `classes` | The step only exists for these races or classes (same names as above). | | `radius` | Arrival distance of a `go` step, in yards. | +| `floor` | `"up"` (one floor up, upstairs, a balcony), `"top"` (the highest floor of a tower or a building) or `"down"` (a lower floor, a cellar, below ground): where the step's target is. The game gives no height, so on arrival the arrow would say "You're here" one floor too low; with `floor` it says "The NPC is one floor up" (or "It's one floor up" for an object or a place) and stays, and within 30 yards it adds "One floor up". Leave it out when the target may be on several floors. Not for a `go` step. | | `use` | Item id or list of ids: the quest item button offers the first one in the bags. | | `sticky` | Quest id or list of ids: from this step on, the unfinished objectives of these quests stay listed under every following step ("Still to do"), and their monsters are low-priority arrow targets, while the quest is in the log and not ready. For a quest done a little at a time along the route: `{ accept = 456, sticky = 456 }`. | | `dungeon` | Name of the dungeon, as text: the step's quests are done inside it, with a group. The player chooses dungeon by dungeon in the settings (by default, the option "Dungeon quests", off): write **one exact name per dungeon, the same in every step of it** (in English: "The Deadmines"), since it is the name of that choice. | diff --git a/tools/check_guides.lua b/tools/check_guides.lua index c64545f..21549d6 100644 --- a/tools/check_guides.lua +++ b/tools/check_guides.lua @@ -18,6 +18,7 @@ local here = arg[0]:match("^(.*)[/\\]") or "." local root = here:match("^(.*)[/\\]tools$") or (here == "." and "..") or (here .. "/..") local X = dofile(here .. "/questiedb_export.lua") +local Floor = dofile(here .. "/guide_floor.lua") local QK = X.QUEST local MAX_LOG = 20 @@ -37,6 +38,8 @@ local STEP_KEYS = { when = true, noauto = true, revive = true, patrol = true, xp = true, -- Why the guide plans the step (Ding/Core/Why.lua). why = true, + -- The target's floor, which the arrow says ("up", "top", "down"). + floor = true, } local WHEN_KEYS = { done = true, notdone = true, log = true, notlog = true, ready = true, item = true, noitem = true, @@ -419,6 +422,15 @@ function Ding.RegisterGuide(def) report("error", at, "dungeon expects the dungeon's name") end if step.dungeon and step.elite then report("warning", at, "dungeon and elite on the same step") end + if step.floor ~= nil and not Floor.VALUES[step.floor] then + report("error", at, 'floor expects "up", "top" or "down"') + end + -- A note that names the target's floor (tools/guide_floor.lua), and a key that does + -- not say it: the arrow would say "You're here" downstairs. + local named = not step.go and Floor.of(step.note) + if named and step.floor ~= named then + report("warning", at, ('the note names a floor: floor = "%s"'):format(named)) + end checkGoals(step, at) if step.why ~= nil then checkReason(step.why, WHY_KEYS, WHY_KINDS, at, "why") From 7060627a1fa5a05f26601c552ff9f173b63d2f99 Mon Sep 17 00:00:00 2001 From: Moust4ki Date: Thu, 15 Oct 2026 15:11:29 +0200 Subject: [PATCH 5/5] Floor tests, smoke scenario and changelog Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 3 + tools/smoke_test.lua | 30 ++++++ tools/tests/floor_test.lua | 205 +++++++++++++++++++++++++++++++++++++ 3 files changed, 238 insertions(+) create mode 100644 tools/tests/floor_test.lua diff --git a/CHANGELOG.md b/CHANGELOG.md index 237b21c..9d08577 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,9 @@ Nothing else to install: QuestieDB is no longer needed, and TomTom stays optiona - The aids are on for a new install: the quest marks and counters above the monsters, the line in their tooltip, and enemy nameplates shown farther. The game hides the enemy nameplates until you press V: Ding shows them once so that its counters appear, and says so in the chat. +- Upstairs and downstairs: when the NPC or the object waits on another floor, the arrow no + longer says "You're here" in the middle of the building. It says "The NPC is one floor up", + "at the top" or "one floor down", and stays on screen until you find the stairs. ## v1.6.0 diff --git a/tools/smoke_test.lua b/tools/smoke_test.lua index b3a929f..bb91717 100644 --- a/tools/smoke_test.lua +++ b/tools/smoke_test.lua @@ -1472,6 +1472,36 @@ ok, err = pcall(function() end) if not ok then problem("passage: " .. tostring(err)) end +-- Floors: the mage trainer of Goldshire, upstairs in the inn. Near him the detail line says +-- the floor; at his spot, "The NPC is one floor up" instead of "You're here", and it stays. +ok, err = pcall(function() + Ding.RegisterGuide({ id = "smoke-floor", title = "Floor", races = { "Human" }, steps = { + { accept = 1860, floor = "up", note = "Zaldimar Wefhellt, the mage trainer of Goldshire, upstairs in the inn." }, + { text = "End" }, + } }) + scenarioCharacter() + H.resetQuests() + E.turnedIn, Ding.char.manual = {}, {} + player.race, player.faction, player.class, player.level = "Human", "Alliance", "MAGE", 10 + local giver = Ding.Data:StartPoints(1860)[1] + expect(giver, "floor: no giver for 1860") + player.map, player.x, player.y = giver.map, giver.x + 0.3, giver.y + Ding.Travel:Reset() + E:SetGuide("smoke-floor", 1, true) + tick(1) + local A, f = Ding.Arrow, Ding.Arrow.frame + expect(f.detail:IsShown() and tostring(f.detail:GetText()):find(L.FLOOR_NEAR_UP, 1, true), + "floor: the detail line does not say the floor near the NPC (" .. tostring(f.detail:GetText()) .. ")") + player.x = giver.x + tick(1) + expect(A.state == "arrived", "floor: not arrived at the NPC's spot") + expect(f.distance:GetText() == L.FLOOR_NPC_UP, "floor: " .. tostring(f.distance:GetText())) + tick(4) + expect(f:IsShown(), "floor: the arrow faded although the NPC is upstairs") + checkPanel("floor: arrived one floor down") +end) +if not ok then problem("floor: " .. tostring(err)) end + -- Talents: with a free point, the build's next talent under the step, learned with A twice -- in focus mode. ok, err = pcall(function() diff --git a/tools/tests/floor_test.lua b/tools/tests/floor_test.lua new file mode 100644 index 0000000..e36480b --- /dev/null +++ b/tools/tests/floor_test.lua @@ -0,0 +1,205 @@ +-- Floors (step key `floor`, docs/guide-packs.md): the game gives no height, so a target one +-- floor up used to read "You're here" downstairs. With `floor`, the arrow says the floor on +-- arrival and stays, and adds it to the detail line near the target; the import takes the +-- key, check_guides rejects a bad value, and tools/guide_floor.lua reads it from a note. +local tools = (arg[0]:match("^(.*)[/\\]") or ".") .. "/.." +local T = dofile(tools .. "/testlib.lua")(arg[1]) +local Ding, H = T.Ding, T.H +local E, A, L = Ding.Engine, Ding.Arrow, Ding.L +local Text, I = Ding.GuideText, Ding.Import +local Floor = dofile(tools .. "/guide_floor.lua") +local f = A.frame + +Ding.RegisterGuide({ id = "t-floor", title = "Floors", races = { "NightElf" }, steps = { + { accept = 456, floor = "up" }, + { level = 60 }, +} }) +Ding.RegisterGuide({ id = "t-floor-none", title = "No floor", races = { "NightElf" }, steps = { + { accept = 456 }, + { level = 60 }, +} }) +Ding.RegisterGuide({ id = "t-floor-down", title = "Down", races = { "NightElf" }, steps = { + { accept = 456, floor = "down" }, + { level = 60 }, +} }) + +-- The player at `dx` map units east of the quest giver of 456 (1 % of map x: 51 yards). +local function at(guide, dx) + A.forced = nil + T.reset({ level = 1 }) + Ding.db.arrow.shown = true + local npc = Ding.Data:StartPoints(456)[1] + T.ok(npc, "no quest giver for 456") + H.player.map, H.player.x, H.player.y = npc.map, npc.x + (dx or 0), npc.y + E:SetGuide(guide, 1, true) + H.tick(0.5) + return npc +end + +T.test("arrived on a step with floor = \"up\": the floor instead of \"You're here\", and the arrow stays", function() + at("t-floor") + T.eq(A.state, "arrived") + T.eq(f.distance:GetText(), L.FLOOR_NPC_UP) + T.ok(f:IsShown(), "arrow hidden right away") + H.tick(3.5) + T.ok(f:IsShown(), "the arrow faded after 3 s: the player still has to find the stairs") + T.eq(f.distance:GetText(), L.FLOOR_NPC_UP) +end) + +T.test("without floor: \"You're here\" as before, and the arrow fades after 3 s", function() + at("t-floor-none") + T.eq(A.state, "arrived") + T.eq(f.distance:GetText(), L.ARRIVED) + H.tick(3.5) + T.ok(not f:IsShown(), "no fade after 3 s") +end) + +T.test("near the target (under 30 yards) the detail line says the floor; farther, it does not", function() + at("t-floor", 0.4) -- about 20 yards + T.ok(A.state ~= "arrived", "arrived at 20 yards") + T.ok(f.detail:IsShown(), "no detail line near the target") + T.ok(tostring(f.detail:GetText()):find(L.FLOOR_NEAR_UP, 1, true), "detail: " .. tostring(f.detail:GetText())) + at("t-floor", 1.0) -- about 51 yards + T.ok(not (f.detail:IsShown() and tostring(f.detail:GetText()):find(L.FLOOR_NEAR_UP, 1, true)), + "the floor shown 51 yards away") + at("t-floor-none", 0.4) + T.ok(not (f.detail:IsShown() and tostring(f.detail:GetText()):find(L.FLOOR_NEAR_UP, 1, true)), + "a floor without the key") +end) + +T.test("an object or a place: \"It's one floor down\"", function() + local npc = at("t-floor-down") + T.eq(f.distance:GetText(), L.FLOOR_NPC_DOWN) + A:Focus({ { map = npc.map, x = npc.x, y = npc.y, label = "Chest" } }) + H.tick(0.2) + T.eq(A.state, "arrived") + T.eq(f.distance:GetText(), L.FLOOR_IT_DOWN) + A:Unfocus() +end) + +T.test("the arrow faded on the step before at the same place: a floor brings it back", function() + at("t-floor-none") + H.tick(3.5) + T.ok(not f:IsShown(), "no fade after 3 s") + E:SetGuide("t-floor", 1, true) + H.tick(0.5) + T.ok(f:IsShown(), "the floor is not shown") + T.eq(f.distance:GetText(), L.FLOOR_NPC_UP) +end) + +T.test("the texts exist in every language, plain words", function() + for _, k in ipairs({ "FLOOR_NPC_UP", "FLOOR_NPC_TOP", "FLOOR_NPC_DOWN", "FLOOR_IT_UP", "FLOOR_IT_TOP", + "FLOOR_IT_DOWN", "FLOOR_NEAR_UP", "FLOOR_NEAR_TOP", "FLOOR_NEAR_DOWN" }) do + T.ok(type(L[k]) == "string" and L[k] ~= "" and L[k] ~= k, k) + end +end) + +--------------------------------------------------------------------------- +-- The key in guides +--------------------------------------------------------------------------- +local function check(text) + return I:Check(assert(Text.Parse(text))) +end + +T.test("the import takes floor = \"up\" and refuses another value", function() + local plan, report = check('{ title = "Floors", steps = { { accept = 456, floor = "up" } } }') + T.ok(plan, table.concat(report.errors, "\n")) + T.eq(#report.errors, 0) + plan, report = check('{ title = "Floors", steps = { { accept = 456, floor = "left" } } }') + T.eq(plan, nil, "a floor \"left\" imported") + local wanted = L.IMPORT_STEP:format(1, L.IMPORT_EXPECTS:format("floor", '"up" / "top" / "down"')) + local found = false + for _, e in ipairs(report.errors) do found = found or e == wanted end + T.ok(found, "missing: " .. wanted .. "\n" .. table.concat(report.errors, "\n")) + T.ok(I.STEP_KEYS.floor, "floor missing from Import.STEP_KEYS") +end) + +T.test("check_guides: a bad value is an error, a note that names a floor without the key a warning", function() + local windows = package.config:sub(1, 1) == "\\" + local function quote(s) + if windows then return '"' .. s .. '"' end + return "'" .. s:gsub("'", "'\\''") .. "'" + end + local lua = "lua5.1" + local i = -1 + while arg[i] do lua = arg[i]; i = i - 1 end + local temp = (os.getenv("TMPDIR") or os.getenv("TEMP") or os.getenv("TMP") or "/tmp"):gsub("\\", "/") + local file = ("%s/ding_floor_test_%d.lua"):format(temp, os.time()) + local out = assert(io.open(file, "w")) + out:write(table.concat({ + 'Ding.RegisterGuide({ id = "t-floors", title = "Floors", faction = "Alliance", races = { "NightElf" },', + ' minLevel = 1, maxLevel = 6, steps = {', + ' { accept = 456, floor = "left" },', + ' { accept = 458, note = "The NPC is indoors, one floor up." },', + ' { turnin = 456, floor = "up", note = "The NPC is indoors, one floor up." },', + ' { turnin = 458, note = "Check each of the two floors indoors." },', + '} })', + }, "\n")) + out:close() + local command = table.concat({ quote(lua), quote(tools .. "/check_guides.lua"), quote(T.combined), quote(file) }, " ") + local pipe = io.popen((windows and ('"' .. command .. '"') or command) .. " 2>&1") + local report = pipe:read("*a") + pipe:close() + os.remove(file) + T.ok(report:find('[ERROR] t-floors, step 1: floor expects "up", "top" or "down"', 1, true), report) + T.ok(report:find('[WARNING] t-floors, step 2: the note names a floor: floor = "up"', 1, true), report) + for _, step in ipairs({ 3, 4 }) do -- the key the note names; a note with two floors + for _, what in ipairs({ "floor expects", "the note names a floor" }) do + T.ok(not report:find(("t-floors, step %d: %s"):format(step, what), 1, true), report) + end + end + T.ok(not report:find("unknown step key", 1, true), report) +end) + +T.test("guide_floor: the note's floor, none when it names two", function() + T.eq(Floor.of("The NPC is indoors, one floor up."), "up") + T.eq(Floor.of("The NPC is upstairs, out on the balcony."), "up") + T.eq(Floor.of("Zaldimar Wefhellt, the mage trainer of Goldshire, upstairs in the inn."), "up") + T.eq(Floor.of("The NPC waits on the tower's highest floor."), "top") + T.eq(Floor.of("Climb to the highest floor of the building."), "top") + T.eq(Floor.of("Gakin the Darkbinder, in the cellar of the Slaughtered Lamb."), "down") + T.eq(Floor.of("This is below ground, on the crypt's lower floor."), "down") + T.eq(Floor.of("The target is deep in the cave, on its lowest floor."), "down") + T.eq(Floor.of("The NPC waits on the lower level, indoors."), "down") + T.eq(Floor.of("Check each of the two floors indoors."), nil) + T.eq(Floor.of("Search the upper and lower floors of the cavern."), nil) + T.eq(Floor.of("The NPC stands one level over the crypt. The NPC waits on the lower level, indoors."), nil) + T.eq(Floor.of("In the Engineering Labs, on the lowest floor. Keep to Launch Bay's top floor."), nil) + T.eq(Floor.of("The targets are on the cave floor."), nil) + T.eq(Floor.of(nil), nil) +end) + +-- The guide files of Ding - Leveling (written by tools/write_leveling.lua) and of the class +-- quests (by hand), read without the addon. +local function guideFiles() + local files = {} + for line in io.lines(tools .. "/../Ding/Ding.toc") do + local path = line:match("^(Guides\\[^\r]+%.lua)") + if path and (path:find("^Guides\\Leveling\\") or path:find("^Guides\\Class\\")) then + files[#files + 1] = (path:gsub("\\", "/")) + end + end + return files +end + +T.test("Leveling and class quests: a step whose note names a floor carries it, never a go step", function() + local counts = {} + local files = guideFiles() + T.ok(#files > 80, "guide files: " .. #files) + for _, file in ipairs(files) do + local def + local saved = _G.Ding + _G.Ding = { RegisterGuide = function(d) def = d end } + dofile(tools .. "/../Ding/" .. file) + _G.Ding = saved + for i, step in ipairs(def.steps) do + local named = not step.go and Floor.of(step.note) + T.eq(step.floor, named or nil, ("%s, step %d"):format(def.id, i)) + if step.floor then counts[step.floor] = (counts[step.floor] or 0) + 1 end + end + end + T.ok((counts.up or 0) > 200 and (counts.top or 0) > 50 and (counts.down or 0) > 50, + ("floors: up %d, top %d, down %d"):format(counts.up or 0, counts.top or 0, counts.down or 0)) +end) + +T.run()