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@0: local validIDs = { [1014] = true, [1015] = true, [1017] = true, [1018] = 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@0: --[[local Rotate = WhistleLoc:CreateTexture() mischivin@0: Rotate:SetTexture("Interface\minimap\UI-Minimap-Ping-Rotate") mischivin@0: Rotate:SetPoint("CENTER") mischivin@0: Rotate:SetSize(48, 48) mischivin@0: Rotate:SetVertexColor(0.9, 0.1, 0.1) mischivin@0: mischivin@0: local Ring = WhistleLoc:CreateTexture() mischivin@0: Ring:SetTexture("Interface\minimap\UI-Minimap-Ping-Center") mischivin@0: Ring:SetPoint("CENTER") mischivin@0: Ring:SetSize(32, 32) mischivin@0: Ring:SetVertexColor(0.9, 0.1, 0.1)]] mischivin@0: mischivin@0: mischivin@0: mischivin@0: mischivin@0: local function GetDistance(nX, nY) mischivin@0: local pX, pY = GetPlayerMapPosition("player") mischivin@0: mischivin@0: local dX = pX - nX mischivin@0: local dY = pY - nY 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: print("The closest node is... " .. node.name) mischivin@0: return node mischivin@0: end mischivin@0: mischivin@0: local function UpdateWhistleMaster() mischivin@0: if GetCurrentMapContinent() == 8 and validIDs[ select(1, GetCurrentMapAreaID() ) ] then mischivin@0: local closest = GetNode() mischivin@0: WhistleLoc:SetPoint("CENTER", "WorldMapFramePOI" .. closest.index, 0, 0) mischivin@0: WhistleLoc:Show() mischivin@0: WhistlePing.Ping:Play() mischivin@0: else mischivin@0: WhistleLoc:Hide() mischivin@0: WhistlePing.Ping:Stop() mischivin@0: print("wrong continent for whistle master") 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@0: end mischivin@0: mischivin@0: mischivin@0: mischivin@0: local WhistleMaster = CreateFrame("FRAME", "WhistleMaster", WorldMapPOIFrame) mischivin@0: WhistleMaster:RegisterEvent("WORLD_MAP_UPDATE") mischivin@0: WhistleMaster:SetScript("OnEvent", EventHandler) mischivin@0: