mischivin@0: mischivin@0: function WM_Debug() mischivin@0: print("debug text") mischivin@0: end mischivin@0: mischivin@0: --indexes corrispond to map IDs that contain valid flight points for the Flight Masters Whistle mischivin@3: --Doesn't work in 1021 (Broken Shore) mischivin@28: WM_validIDs = { [1014] = true, [1015] = true, [1017] = true, [1018] = true, [1021] = true, [1024] = true, [1033] = true, [1096] = true } mischivin@0: mischivin@0: local WhistleLoc = CreateFrame("FRAME", "WhistleLOC", WorldMapPOIFrame) mischivin@0: WhistleLoc:SetSize(64, 64) mischivin@0: WhistleLoc:SetPoint("CENTER", 0, 0) mischivin@0: WhistleLoc:Show() mischivin@0: mischivin@3: WM_ClosestNode = nil mischivin@3: mischivin@0: local function GetDistance(nX, nY) mischivin@0: local pX, pY = GetPlayerMapPosition("player") mischivin@21: local dX, dY mischivin@21: if pX and pY then mischivin@21: dX = pX - nX mischivin@21: dY = pY - nY mischivin@21: else mischivin@21: return nil mischivin@21: end mischivin@0: mischivin@0: return math.sqrt( ( dX^2 ) + ( dY^2 ) ) mischivin@0: end mischivin@0: mischivin@0: local function GetNode() mischivin@0: local node mischivin@0: local distance mischivin@0: local index mischivin@0: for k = 1, GetNumMapLandmarks() do mischivin@0: local n = {} mischivin@0: n.type, n.name, n.description, n.textureIndex, n.x, n.y = GetMapLandmarkInfo(k) mischivin@0: if n.type == LE_MAP_LANDMARK_TYPE_TAXINODE then --LE_MAP_LANDMARK_TYPE_TAXINODE is a constant defined by Blizzard mischivin@0: local d = GetDistance(n.x, n.y) mischivin@0: if distance == nil or d < distance then mischivin@0: n.index = k mischivin@0: distance = d mischivin@0: node = n mischivin@0: end mischivin@0: end mischivin@0: end mischivin@0: return node mischivin@0: end mischivin@0: mischivin@9: function UpdateWhistleMaster() mischivin@9: if GetCurrentMapContinent() == 8 and WM_validIDs[ select(1, GetCurrentMapAreaID() ) ] and GetMapNameByID(GetCurrentMapAreaID()) == GetZoneText() and not GetNumDungeonMapLevels() then mischivin@3: WM_ClosestNode = GetNode() mischivin@21: if _G[("WorldMapFramePOI" .. WM_ClosestNode.index)] then mischivin@21: WhistleLoc:SetPoint("CENTER", "WorldMapFramePOI" .. WM_ClosestNode.index, 0, 0) mischivin@21: WhistleLoc:Show() mischivin@21: WhistlePing.Ping:Play() mischivin@21: return true mischivin@21: else mischivin@21: return false mischivin@21: end mischivin@0: else mischivin@0: WhistleLoc:Hide() mischivin@0: WhistlePing.Ping:Stop() mischivin@3: return false mischivin@0: end mischivin@0: end mischivin@0: mischivin@0: local mapVisible = false mischivin@0: mischivin@0: local function EventHandler(self, event, ...) mischivin@0: if ( (event == "WORLD_MAP_UPDATE") and WorldMapFrame:IsVisible() ) then mischivin@0: mapVisible = true mischivin@0: UpdateWhistleMaster() mischivin@0: end mischivin@0: if ( (mapVisible) and not WorldMapFrame:IsVisible() ) then mischivin@0: mapVisible = false mischivin@0: end mischivin@12: if (event == "PLAYER_ENTERING_WORLD") then mischivin@5: WorldMapFrame:Show() mischivin@5: WorldMapFrame:Hide() mischivin@3: UpdateWhistleMaster() mischivin@3: end mischivin@0: end mischivin@0: mischivin@0: local WhistleMaster = CreateFrame("FRAME", "WhistleMaster", WorldMapPOIFrame) mischivin@0: WhistleMaster:RegisterEvent("WORLD_MAP_UPDATE") mischivin@3: WhistleMaster:RegisterEvent("VARIABLES_LOADED") mischivin@12: WhistleMaster:RegisterEvent("PLAYER_ENTERING_WORLD") mischivin@0: WhistleMaster:SetScript("OnEvent", EventHandler) mischivin@0: mischivin@3: local cleared = true mischivin@3: local function OnTooltipCleared(self) mischivin@3: cleared = true mischivin@3: end mischivin@3: mischivin@3: local function OnTooltipSetItem(self) mischivin@3: if cleared then mischivin@3: local name, tooltipLink = self:GetItem() mischivin@3: if tooltipLink then mischivin@3: local item = tooltipLink:match("Hitem:(%d+)") mischivin@3: if item == "141605" then mischivin@3: if UpdateWhistleMaster() then mischivin@3: self:AddLine("\nWhistle Destination:|cFFFFFFFF " .. WM_ClosestNode.name ,0.5,1,0.5, true) mischivin@3: else mischivin@3: self:AddLine("\nWhistle Destination:|cFFFFFFFF N/A",0.5,1,0.5, true) mischivin@3: end mischivin@3: end mischivin@3: cleared = true mischivin@3: end mischivin@3: end mischivin@3: end mischivin@3: mischivin@3: GameTooltip:HookScript("OnTooltipCleared", OnTooltipCleared) mischivin@3: GameTooltip:HookScript("OnTooltipSetItem", OnTooltipSetItem) mischivin@12: ItemRefTooltip:HookScript("OnTooltipCleared", OnTooltipCleared) mischivin@12: ItemRefTooltip:HookScript("OnTooltipSetItem", OnTooltipSetItem) mischivin@3: