quest teleport_ring begin
state start begin
when 40003.use begin
if pc.count_item(40003) <= 0 then
return
end
-------------------------------------------------
-- LEVEL RANGES (EDIT HERE)
-------------------------------------------------
local LVL = {
-- KINGDOMS
red_map1 = { 1, 30 },
red_map2 = { 15, 45 },
yellow_map1 = { 1, 30 },
yellow_map2 = { 15, 45 },
blue_map1 = { 1, 30 },
blue_map2 = { 15, 45 },
-- OFFICIAL MAPS
orc_start = { 30, 55 },
orc_center = { 35, 60 },
orc_arahan = { 40, 65 },
desert_start = { 45, 75 },
desert_oasis = { 50, 80 },
fire_start = { 60, 90 },
fire_farm = { 65, 95 },
demon_tower = { 35, 75 },
spider_v1 = { 50, 80 },
spider_v2 = { 60, 90 },
ghost_forest = { 70, 100 },
red_forest_start = { 60, 90 },
red_forest_end = { 70, 100 },
giants = { 75, 105 },
exile_v3 = { 75, 105 },
exile_v4 = { 90, 120 },
-- FARM ZONE (SET YOUR REAL RANGES)
farm1 = { 1, 120 },
farm2 = { 1, 120 },
-- MAP EVENTS (SET YOUR REAL RANGES)
event1 = { 1, 120 },
event2 = { 1, 120 },
event3 = { 1, 120 },
}
-------------------------------------------------
-- HELPERS (EN) + LOCKED
-------------------------------------------------
local function level_ok(min_lvl, max_lvl)
local lvl = pc.get_level()
return (lvl >= min_lvl and lvl <= max_lvl)
end
local function option_label(name, min_lvl, max_lvl)
if level_ok(min_lvl, max_lvl) then
return string.format("%s (%d-%d)", name, min_lvl, max_lvl)
end
return string.format("%s (%d-%d) [LOCKED]", name, min_lvl, max_lvl)
end
local function show_level_error(min_lvl, max_lvl)
say_title("Teleport Ring")
say("")
say("This location is locked for your level.")
say(string.format("Required level: %d - %d", min_lvl, max_lvl))
end
local function warp_if_ok(min_lvl, max_lvl, x, y, success_msg)
if not level_ok(min_lvl, max_lvl) then
show_level_error(min_lvl, max_lvl)
return false
end
pc.warp(x, y)
say_title("Teleport")
say(success_msg)
return true
end
-------------------------------------------------
-- MAIN MENU
-------------------------------------------------
while true do
say_title("Teleport Ring")
say("")
say("Where do you want to teleport?")
say("")
local main_menu = select(
"Kingdoms",
"Official Maps",
"Farm Zone",
"Map Events",
"Cancel"
)
-- CANCEL (5)
if main_menu == 5 then
say_title("Cancelled")
say("Teleportation has been cancelled.")
return
end
-------------------------------------------------
-- KINGDOMS
-------------------------------------------------
if main_menu == 1 then
while true do
say_title("Kingdoms")
say("")
say("Choose a kingdom:")
say("")
local kingdom_menu = select(
"Red Kingdom",
"Yellow Kingdom",
"Blue Kingdom",
"Back"
)
if kingdom_menu == 4 then break end
-- RED KINGDOM
if kingdom_menu == 1 then
while true do
local mn1, mx1 = LVL.red_map1[1], LVL.red_map1[2]
local mn2, mx2 = LVL.red_map2[1], LVL.red_map2[2]
say_title("Red Kingdom")
say("")
say("Choose a location:")
say("")
local red_menu = select(
option_label("Map 1", mn1, mx1),
option_label("Map 2", mn2, mx2),
"Back"
)
if red_menu == 3 then break end
if red_menu == 1 then
if warp_if_ok(mn1, mx1, 473900, 954600, "Teleported to Red Kingdom - Map 1!") then return end
elseif red_menu == 2 then
if warp_if_ok(mn2, mx2, 352300, 882700, "Teleported to Red Kingdom - Map 2!") then return end
end
end
end
-- YELLOW KINGDOM
if kingdom_menu == 2 then
while true do
local mn1, mx1 = LVL.yellow_map1[1], LVL.yellow_map1[2]
local mn2, mx2 = LVL.yellow_map2[1], LVL.yellow_map2[2]
say_title("Yellow Kingdom")
say("")
say("Choose a location:")
say("")
local yellow_menu = select(
option_label("Map 1", mn1, mx1),
option_label("Map 2", mn2, mx2),
"Back"
)
if yellow_menu == 3 then break end
if yellow_menu == 1 then
if warp_if_ok(mn1, mx1, 63200, 166700, "Teleported to Yellow Kingdom - Map 1!") then return end
elseif yellow_menu == 2 then
if warp_if_ok(mn2, mx2, 145700, 239800, "Teleported to Yellow Kingdom - Map 2!") then return end
end
end
end
-- BLUE KINGDOM
if kingdom_menu == 3 then
while true do
local mn1, mx1 = LVL.blue_map1[1], LVL.blue_map1[2]
local mn2, mx2 = LVL.blue_map2[1], LVL.blue_map2[2]
say_title("Blue Kingdom")
say("")
say("Choose a location:")
say("")
local blue_menu = select(
option_label("Map 1", mn1, mx1),
option_label("Map 2", mn2, mx2),
"Back"
)
if blue_menu == 3 then break end
if blue_menu == 1 then
if warp_if_ok(mn1, mx1, 959600, 269700, "Teleported to Blue Kingdom - Map 1!") then return end
elseif blue_menu == 2 then
if warp_if_ok(mn2, mx2, 863800, 246000, "Teleported to Blue Kingdom - Map 2!") then return end
end
end
end
end
end
-------------------------------------------------
-- OFFICIAL MAPS
-------------------------------------------------
if main_menu == 2 then
while true do
local dt_min, dt_max = LVL.demon_tower[1], LVL.demon_tower[2]
say_title("Official Maps")
say("")
say("Choose a location:")
say("")
local map_menu = select(
"Orc Valley",
"Desert",
"Fire Land",
option_label("Demon Tower", dt_min, dt_max),
"Page 2",
"Back"
)
if map_menu == 6 then break end
-- ORC VALLEY
if map_menu == 1 then
while true do
local mn1, mx1 = LVL.orc_start[1], LVL.orc_start[2]
local mn2, mx2 = LVL.orc_center[1], LVL.orc_center[2]
local mn3, mx3 = LVL.orc_arahan[1], LVL.orc_arahan[2]
say_title("Orc Valley")
say("")
say("Choose a location:")
say("")
local orc_menu = select(
option_label("Entrance", mn1, mx1),
option_label("Center / Farm Zone", mn2, mx2),
option_label("Arahani", mn3, mx3),
"Back"
)
if orc_menu == 4 then break end
local empire = pc.get_empire()
if orc_menu == 1 then
local x, y = 0, 0
if empire == 1 then x, y = 402100, 673900
elseif empire == 2 then x, y = 270400, 739900
elseif empire == 3 then x, y = 321300, 808000
end
if warp_if_ok(mn1, mx1, x, y, "Teleported to Orc Valley - Entrance!") then return end
elseif orc_menu == 2 then
if warp_if_ok(mn2, mx2, 332700, 745600, "Teleported to Orc Valley - Center / Farm Zone!") then return end
elseif orc_menu == 3 then
if warp_if_ok(mn3, mx3, 282800, 792800, "Teleported to Orc Valley - Arahani!") then return end
end
end
end
-- DESERT
if map_menu == 2 then
while true do
local mn1, mx1 = LVL.desert_start[1], LVL.desert_start[2]
local mn2, mx2 = LVL.desert_oasis[1], LVL.desert_oasis[2]
say_title("Desert")
say("")
say("Choose a location:")
say("")
local desert_menu = select(
option_label("Entrance", mn1, mx1),
option_label("Oasis", mn2, mx2),
"Back"
)
if desert_menu == 3 then break end
local empire = pc.get_empire()
if desert_menu == 1 then
local x, y = 0, 0
if empire == 1 then x, y = 217800, 627200
elseif empire == 2 then x, y = 221900, 502700
elseif empire == 3 then x, y = 344000, 502500
end
if warp_if_ok(mn1, mx1, x, y, "Teleported to Desert - Entrance!") then return end
elseif desert_menu == 2 then
if warp_if_ok(mn2, mx2, 296300, 547500, "Teleported to Desert - Oasis!") then return end
end
end
end
-- FIRE LAND
if map_menu == 3 then
while true do
local mn1, mx1 = LVL.fire_start[1], LVL.fire_start[2]
local mn2, mx2 = LVL.fire_farm[1], LVL.fire_farm[2]
say_title("Fire Land")
say("")
say("Choose a location:")
say("")
local fire_menu = select(
option_label("Entrance", mn1, mx1),
option_label("Farm Zone", mn2, mx2),
"Back"
)
if fire_menu == 3 then break end
local empire = pc.get_empire()
if fire_menu == 1 then
local x, y = 0, 0
if empire == 1 then x, y = 599400, 756300
elseif empire == 2 then x, y = 597800, 622200
elseif empire == 3 then x, y = 730700, 689800
end
if warp_if_ok(mn1, mx1, x, y, "Teleported to Fire Land - Entrance!") then return end
elseif fire_menu == 2 then
if warp_if_ok(mn2, mx2, 605100, 685900, "Teleported to Fire Land - Farm Zone!") then return end
end
end
end
-- DEMON TOWER
if map_menu == 4 then
if warp_if_ok(dt_min, dt_max, 590400, 110500, "Teleported to Demon Tower!") then
return
end
end
-- PAGE 2
if map_menu == 5 then
while true do
local mn_sp1, mx_sp1 = LVL.spider_v1[1], LVL.spider_v1[2]
local mn_sp2, mx_sp2 = LVL.spider_v2[1], LVL.spider_v2[2]
local mn_gf, mx_gf = LVL.ghost_forest[1], LVL.ghost_forest[2]
local mn_rf1, mx_rf1 = LVL.red_forest_start[1], LVL.red_forest_start[2]
local mn_rf2, mx_rf2 = LVL.red_forest_end[1], LVL.red_forest_end[2]
local mn_gi, mx_gi = LVL.giants[1], LVL.giants[2]
local mn_ex3, mx_ex3 = LVL.exile_v3[1], LVL.exile_v3[2]
local mn_ex4, mx_ex4 = LVL.exile_v4[1], LVL.exile_v4[2]
say_title("Official Maps - Page 2")
say("")
say("Choose a location:")
say("")
local map_menu2 = select(
"Spider Dungeon",
option_label("Ghost Forest", mn_gf, mx_gf),
"Red Forest",
option_label("Land of Giants", mn_gi, mx_gi),
"Exile Valley",
"Back"
)
if map_menu2 == 6 then break end
-- SPIDER DUNGEON
if map_menu2 == 1 then
while true do
say_title("Spider Dungeon")
say("")
say("Choose a floor:")
say("")
local spider_menu = select(
option_label("V1", mn_sp1, mx_sp1),
option_label("V2", mn_sp2, mx_sp2),
"Back"
)
if spider_menu == 3 then break end
if spider_menu == 1 then
if warp_if_ok(mn_sp1, mx_sp1, 60000, 496400, "Teleported to Spider Dungeon - V1!") then return end
elseif spider_menu == 2 then
if warp_if_ok(mn_sp2, mx_sp2, 704100, 464100, "Teleported to Spider Dungeon - V2!") then return end
end
end
end
-- GHOST FOREST
if map_menu2 == 2 then
if warp_if_ok(mn_gf, mx_gf, 289000, 5800, "Teleported to Ghost Forest!") then
return
end
end
-- RED FOREST
if map_menu2 == 3 then
while true do
say_title("Red Forest")
say("")
say("Choose a location:")
say("")
local red_forest_menu = select(
option_label("Entrance", mn_rf1, mx_rf1),
option_label("End", mn_rf2, mx_rf2),
"Back"
)
if red_forest_menu == 3 then break end
if red_forest_menu == 1 then
if warp_if_ok(mn_rf1, mx_rf1, 1119900, 70800, "Teleported to Red Forest - Entrance!") then return end
elseif red_forest_menu == 2 then
if warp_if_ok(mn_rf2, mx_rf2, 1119200, 7000, "Teleported to Red Forest - End!") then return end
end
end
end
-- LAND OF GIANTS
if map_menu2 == 4 then
if warp_if_ok(mn_gi, mx_gi, 828100, 763400, "Teleported to Land of Giants!") then
return
end
end
-- EXILE VALLEY
if map_menu2 == 5 then
while true do
say_title("Exile Valley")
say("")
say("Choose a floor:")
say("")
local exile_menu = select(
option_label("V3", mn_ex3, mx_ex3),
option_label("V4", mn_ex4, mx_ex4),
"Back"
)
if exile_menu == 3 then break end
if exile_menu == 1 then
if warp_if_ok(mn_ex3, mx_ex3, 10000, 1214200, "Teleported to Exile Valley - V3!") then return end
elseif exile_menu == 2 then
if warp_if_ok(mn_ex4, mx_ex4, 241700, 1274900, "Teleported to Exile Valley - V4!") then return end
end
end
end
end
end
end
end
-------------------------------------------------
-- FARM ZONE
-------------------------------------------------
if main_menu == 3 then
while true do
local mn1, mx1 = LVL.farm1[1], LVL.farm1[2]
local mn2, mx2 = LVL.farm2[1], LVL.farm2[2]
say_title("Farm Zone")
say("")
say("Choose a zone:")
say("")
local farm_menu = select(
option_label("Farm 1", mn1, mx1),
option_label("Farm 2", mn2, mx2),
"Back"
)
if farm_menu == 3 then break end
if farm_menu == 1 then
-- TODO: set real coordinates
if warp_if_ok(mn1, mx1, 0, 0, "Teleported to Farm Zone 1!") then return end
elseif farm_menu == 2 then
-- TODO: set real coordinates
if warp_if_ok(mn2, mx2, 0, 0, "Teleported to Farm Zone 2!") then return end
end
end
end
-------------------------------------------------
-- MAP EVENTS
-------------------------------------------------
if main_menu == 4 then
while true do
local mn1, mx1 = LVL.event1[1], LVL.event1[2]
local mn2, mx2 = LVL.event2[1], LVL.event2[2]
local mn3, mx3 = LVL.event3[1], LVL.event3[2]
say_title("Map Events")
say("")
say("Choose an event map:")
say("")
local ev_menu = select(
option_label("Event 1", mn1, mx1),
option_label("Event 2", mn2, mx2),
option_label("Event 3", mn3, mx3),
"Back"
)
if ev_menu == 4 then break end
if ev_menu == 1 then
-- TODO: set real coordinates
if warp_if_ok(mn1, mx1, 0, 0, "Teleported to Event Map 1!") then return end
elseif ev_menu == 2 then
-- TODO: set real coordinates
if warp_if_ok(mn2, mx2, 0, 0, "Teleported to Event Map 2!") then return end
elseif ev_menu == 3 then
-- TODO: set real coordinates
if warp_if_ok(mn3, mx3, 0, 0, "Teleported to Event Map 3!") then return end
end
end
end
end
end
end
end