generated from Exiles/coa-template
upstream: https://github.com/Nevcairiel/Mapster tag: 1.3.9 commit: 1c451d24d299d44002b1e182f848aa3a3e7faa6b interface: 30300 (WotLK 3.3.5 — last Mapster version targeting our client)
This commit is contained in:
@@ -0,0 +1,225 @@
|
||||
--[[
|
||||
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
|
||||
Reference in New Issue
Block a user