Files
coa-mapster/Mapster/InstanceMaps.lua
T
florian.berthold 8d89a6d180
release / release (push) Successful in 4s
Import Mapster from upstream@1c451d2 (tag 1.3.9)
upstream: https://github.com/Nevcairiel/Mapster
tag:      1.3.9
commit:   1c451d24d299d44002b1e182f848aa3a3e7faa6b
interface: 30300 (WotLK 3.3.5 — last Mapster version targeting our client)
2026-05-25 13:02:23 +02:00

226 lines
5.3 KiB
Lua

--[[
Copyright (c) 2009, Hendrik "Nevcairiel" Leppkes < h.leppkes@gmail.com >
All rights reserved.
]]
local Mapster = LibStub("AceAddon-3.0"):GetAddon("Mapster")
local L = LibStub("AceLocale-3.0"):GetLocale("Mapster")
local MODNAME = "InstanceMaps"
local Maps = Mapster:NewModule(MODNAME, "AceHook-3.0")
local LBZ = LibStub("LibBabble-Zone-3.0", true)
local BZ = LBZ and LBZ:GetLookupTable() or setmetatable({}, {__index = function(t,k) return k end})
-- Data mostly from http://www.wowwiki.com/API_SetMapByID
local data = {
-- Northrend Instances
instances = {
["The Nexus"] = 520,
["The Culling of Stratholme"] = 521,
["Ahn'kahet: The Old Kingdom"] = 522,
["Utgarde Keep"] = 523,
["Utgarde Pinnacle"] = 524,
["Halls of Lightning"] = 525,
["Halls of Stone"] = 526,
["The Oculus"] = 528,
["Gundrak"] = 530,
["Azjol-Nerub"] = 533,
["Drak'Tharon Keep"] = 534,
["The Violet Hold"] = 536,
-- 3.2
["Trial of the Champion"] = 542,
-- 3.3
["The Forge of Souls"] = 601,
["Pit of Saron"] = 602,
["Halls of Reflection"] = 603,
},
-- Northrend Raids
raids = {
["The Eye of Eternity"] = 527,
["Ulduar"] = 529,
["The Obsidian Sanctum"] = 531,
["Vault of Archavon"] = 532,
["Naxxramas"] = 535,
-- 3.2
["Trial of the Crusader"] = 543,
-- 3.3
["Icecrown Citadel"] = 604,
-- 3.3.5
["The Ruby Sanctum"] = 609,
},
bgs = {
["Alterac Valley"] = 401,
["Warsong Gulch"] = 443,
["Arathi Basin"] = 461,
["Eye of the Storm"] = 482,
["Strand of the Ancients"] = 512,
["Isle of Conquest"] = 540,
},
}
--[[
local db
local defaults = {
profile = {
}
}
]]
local options
local function getOptions()
if not options then
options = {
type = "group",
name = L["Instance Maps"],
arg = MODNAME,
get = optGetter,
set = optSetter,
args = {
intro = {
order = 1,
type = "description",
name = L["The Instance Maps module allows you to view the Instance and Battleground Maps provided by the game without being in the instance yourself."],
},
enabled = {
order = 2,
type = "toggle",
name = L["Enable Instance Maps"],
get = function() return Mapster:GetModuleEnabled(MODNAME) end,
set = function(info, value) Mapster:SetModuleEnabled(MODNAME, value) end,
},
},
}
end
return options
end
local zoomOverride
function Maps:OnInitialize()
--[[
self.db = Mapster.db:RegisterNamespace(MODNAME, defaults)
db = self.db.profile
]]
self:SetEnabledState(Mapster:GetModuleEnabled(MODNAME))
Mapster:RegisterModuleOptions(MODNAME, getOptions, L["Instance Maps"])
self.zone_names = {}
self.zone_data = {}
for key, idata in pairs(data) do
local names = {}
local name_data = {}
for name, zdata in pairs(idata) do
tinsert(names, BZ[name])
name_data[BZ[name]] = zdata
end
table.sort(names)
self.zone_names[key] = names
local zone_data = {}
for k,v in pairs(names) do
zone_data[k] = name_data[v]
end
self.zone_data[key] = zone_data
end
data = nil
end
function Maps:OnEnable()
self:SecureHook("WorldMapContinentsDropDown_Update")
self:SecureHook("WorldMapFrame_LoadContinents")
self:SecureHook("WorldMapZoneDropDown_Update")
self:RawHook("WorldMapZoneDropDown_Initialize", true)
self:SecureHook("SetMapZoom")
self:SecureHook("SetMapToCurrentZone", "SetMapZoom")
end
function Maps:OnDisable()
self:UnhookAll()
self.mapCont, self.mapContId, self.mapZone = nil, nil, nil
WorldMapContinentsDropDown_Update()
WorldMapZoneDropDown_Update()
end
function Maps:GetZoneData()
return self.zone_data[self.mapCont][self.mapZone]
end
function Maps:WorldMapContinentsDropDown_Update()
if self.mapCont then
UIDropDownMenu_SetSelectedID(WorldMapContinentDropDown, self.mapContId)
end
end
local function MapsterContinentButton_OnClick(frame)
UIDropDownMenu_SetSelectedID(WorldMapContinentDropDown, frame:GetID())
Maps.mapCont = frame.arg1
Maps.mapContId = frame:GetID()
zoomOverride = true
SetMapZoom(-1)
zoomOverride = nil
end
function Maps:WorldMapFrame_LoadContinents()
local info = UIDropDownMenu_CreateInfo()
info.text = L["Northrend Instances"]
info.func = MapsterContinentButton_OnClick
info.checked = nil
info.arg1 = "instances"
UIDropDownMenu_AddButton(info)
info.text = L["Northrend Raids"]
info.func = MapsterContinentButton_OnClick
info.checked = nil
info.arg1 = "raids"
UIDropDownMenu_AddButton(info)
info.text = L["Battlegrounds"]
info.func = MapsterContinentButton_OnClick
info.checked = nil
info.arg1 = "bgs"
UIDropDownMenu_AddButton(info)
end
function Maps:WorldMapZoneDropDown_Update()
if self.mapZone then
UIDropDownMenu_SetSelectedID(WorldMapZoneDropDown, self.mapZone)
end
end
local function MapsterZoneButton_OnClick(frame)
UIDropDownMenu_SetSelectedID(WorldMapZoneDropDown, frame:GetID())
Maps.mapZone = frame:GetID()
SetMapByID(Maps:GetZoneData())
end
local function Mapster_LoadZones(...)
local info = UIDropDownMenu_CreateInfo()
for i=1, select("#", ...), 1 do
info.text = select(i, ...)
info.func = MapsterZoneButton_OnClick
info.checked = nil
UIDropDownMenu_AddButton(info)
end
end
function Maps:WorldMapZoneDropDown_Initialize()
if self.mapCont then
Mapster_LoadZones(unpack(self.zone_names[self.mapCont]))
else
self.hooks.WorldMapZoneDropDown_Initialize()
end
end
function Maps:SetMapZoom()
if not zoomOverride then
self.mapCont, self.mapContId, self.mapZone = nil, nil, nil
end
end