--[[ ############################################################################## _____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_ # ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__ # __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____ # ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____ # ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____ # _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____ # __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ # _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_# ___\///////////___________\///___________\/////////_____\///////////_# ############################################################################## S U P E R - V I L L A I N - U I By: Munglunch # ############################################################################## ########################################################## LOCALIZED LUA FUNCTIONS ########################################################## ]]-- --[[ GLOBALS ]]-- local _G = _G; local unpack = _G.unpack; local select = _G.select; local pairs = _G.pairs; local tostring = _G.tostring; local tonumber = _G.tonumber; local tinsert = _G.tinsert; local string = _G.string; local math = _G.math; --[[ STRING METHODS ]]-- local lower, upper, len = string.lower, string.upper, string.len; local match, gsub, find = string.match, string.gsub, string.find; --[[ MATH METHODS ]]-- local parsefloat = math.parsefloat; -- Uncommon --[[ ########################################################## GET ADDON DATA ########################################################## ]]-- local SV, L, Registry = unpack(select(2, ...)); local CONFIGS = SV.Configs local MOD = {}; --[[ ########################################################## LOCALIZED GLOBALS ########################################################## ]]-- local SVUI_CLASS_COLORS = _G.SVUI_CLASS_COLORS local RAID_CLASS_COLORS = _G.RAID_CLASS_COLORS --[[ ########################################################## LOCAL VARS ########################################################## ]]-- local temp = SLASH_CALENDAR1:gsub("/", ""); local calendar_string = temp:gsub("^%l", upper) local cColor = RAID_CLASS_COLORS[SV.class]; local MM_COLOR = {"VERTICAL", 0.65, 0.65, 0.65, 0.95, 0.95, 0.95} local MM_BRDR = 0 local MM_SIZE = 240 local MM_OFFSET_TOP = (MM_SIZE * 0.07) local MM_OFFSET_BOTTOM = (MM_SIZE * 0.11) local MM_WIDTH = MM_SIZE + (MM_BRDR * 2) local MM_HEIGHT = (MM_SIZE - (MM_OFFSET_TOP + MM_OFFSET_BOTTOM) + (MM_BRDR * 2)) local MMBHolder, MMBBar, SetMiniMapCoords; local SVUI_MinimapFrame = CreateFrame("Frame", "SVUI_MinimapFrame", UIParent) SVUI_MinimapFrame:SetFrameStrata("BACKGROUND") SVUI_MinimapFrame.backdrop = SVUI_MinimapFrame:CreateTexture(nil, "BACKGROUND", nil, -2) local SVUI_MinimapZonetext = CreateFrame("Frame", "SVUI_MinimapZonetext", SVUI_MinimapFrame) local SVUI_MinimapNarrator = CreateFrame("Frame", "SVUI_MinimapNarrator", SVUI_MinimapFrame) local NewHook = hooksecurefunc local Initialized = false --[[ ########################################################## LOCAL FUNCTIONS ########################################################## ]]-- local MMB_OnEnter = function(self) if(not MOD.db.minimapbar.mouseover or MOD.db.minimapbar.styleType == "NOANCHOR") then return end UIFrameFadeIn(SVUI_MiniMapButtonBar, 0.2, SVUI_MiniMapButtonBar:GetAlpha(), 1) if self:GetName() ~= "SVUI_MiniMapButtonBar" then self:SetBackdropBorderColor(.7, .7, 0) end end local MMB_OnLeave = function(self) if(not MOD.db.minimapbar.mouseover or MOD.db.minimapbar.styleType == "NOANCHOR") then return end UIFrameFadeOut(SVUI_MiniMapButtonBar, 0.2, SVUI_MiniMapButtonBar:GetAlpha(), 0) if self:GetName() ~= "SVUI_MiniMapButtonBar" then self:SetBackdropBorderColor(0, 0, 0) end end local MiniMap_MouseUp = function(self, btn) local position = self:GetPoint() if btn == "RightButton" then local xoff = -1 if position:match("RIGHT") then xoff = -16 end ToggleDropDownMenu(1, nil, MiniMapTrackingDropDown, self, xoff, -3) else Minimap_OnClick(self) end end local MiniMap_MouseWheel = function(self, delta) if delta > 0 then _G.MinimapZoomIn:Click() elseif delta < 0 then _G.MinimapZoomOut:Click() end end do local buttonCache = { {"Node", "Tab", "Pin", "SVUI_ConsolidatedBuffs", "GameTimeframe", "HelpOpenTicketButton", "SVUI_MinimapFrame", "SVUI_EnhancedMinimap", "QueueStatusMinimapButton", "TimeManagerClockButton", "Archy", "GatherMatePin", "GatherNote", "GuildInstance", "HandyNotesPin", "MinimMap", "Spy_MapNoteList_mini", "ZGVMarker"}, {} } local function UpdateMinimapButtons() if(not MOD.db.minimapbar.enable) then return end MMBBar:SetPoint("CENTER", MMBHolder, "CENTER", 0, 0) MMBBar:Height(MOD.db.minimapbar.buttonSize + 4) MMBBar:Width(MOD.db.minimapbar.buttonSize + 4) local lastButton, anchor, relative, xPos, yPos; local list = buttonCache[2] local count = #list for i = 1, count do local btn = _G[list[i]] local preset = btn.preset; if(MOD.db.minimapbar.styleType == "NOANCHOR") then btn:SetParent(preset.Parent) if preset.DragStart then btn:SetScript("OnDragStart", preset.DragStart) end if preset.DragEnd then btn:SetScript("OnDragStop", preset.DragEnd) end btn:ClearAllPoints() btn:SetSize(preset.Width, preset.Height) btn:SetPoint(preset.Point, preset.relativeTo, preset.relativePoint, preset.xOfs, preset.yOfs) btn:SetFrameStrata(preset.FrameStrata) btn:SetFrameLevel(preset.FrameLevel) btn:SetScale(preset.Scale) btn:SetMovable(true) else btn:SetParent(MMBBar) btn:SetMovable(false) btn:SetScript("OnDragStart", nil) btn:SetScript("OnDragStop", nil) btn:ClearAllPoints() btn:SetFrameStrata("LOW") btn:SetFrameLevel(20) btn:Size(MOD.db.minimapbar.buttonSize) if MOD.db.minimapbar.styleType == "HORIZONTAL"then anchor = "RIGHT" relative = "LEFT" xPos = -2; yPos = 0 else anchor = "TOP" relative = "BOTTOM" xPos = 0; yPos = -2 end if not lastButton then btn:SetPoint(anchor, MMBBar, anchor, xPos, yPos) else btn:SetPoint(anchor, lastButton, relative, xPos, yPos) end end lastButton = btn end if (MOD.db.minimapbar.styleType ~= "NOANCHOR" and (count > 0)) then if MOD.db.minimapbar.styleType == "HORIZONTAL" then MMBBar:Width((MOD.db.minimapbar.buttonSize * count) + count * 2) else MMBBar:Height((MOD.db.minimapbar.buttonSize * count) + count * 2) end MMBHolder:SetSize(MMBBar:GetSize()) MMBBar:Show() else MMBBar:Hide() end end local function SetMinimapButton(btn) if btn == nil or btn:GetName() == nil or btn:GetObjectType() ~= "Button" or not btn:IsVisible() then return end local name = btn:GetName() local isLib = false; if name:sub(1,len("LibDBIcon")) == "LibDBIcon" then isLib = true end if(not isLib) then local reserved = buttonCache[1] local count = #reserved for i = 1, count do if name:sub(1,len(reserved[i])) == reserved[i] then return end if name:find(reserved[i]) ~= nil then return end end end btn:SetPushedTexture(nil) btn:SetHighlightTexture(nil) btn:SetDisabledTexture(nil) if not btn.isStyled then btn:HookScript("OnEnter", MMB_OnEnter) btn:HookScript("OnLeave", MMB_OnLeave) btn:HookScript("OnClick", UpdateMinimapButtons) btn.preset = {} btn.preset.Width, btn.preset.Height = btn:GetSize() btn.preset.Point, btn.preset.relativeTo, btn.preset.relativePoint, btn.preset.xOfs, btn.preset.yOfs = btn:GetPoint() btn.preset.Parent = btn:GetParent() btn.preset.FrameStrata = btn:GetFrameStrata() btn.preset.FrameLevel = btn:GetFrameLevel() btn.preset.Scale = btn:GetScale() if btn:HasScript("OnDragStart") then btn.preset.DragStart = btn:GetScript("OnDragStart") end if btn:HasScript("OnDragEnd") then btn.preset.DragEnd = btn:GetScript("OnDragEnd") end for i = 1, btn:GetNumRegions() do local frame = select(i, btn:GetRegions()) if frame:GetObjectType() == "Texture" then local iconFile = frame:GetTexture() if(iconFile ~= nil and (iconFile:find("Border") or iconFile:find("Background") or iconFile:find("AlphaMask"))) then frame:SetTexture(0,0,0,0) else frame:ClearAllPoints() frame:Point("TOPLEFT", btn, "TOPLEFT", 2, -2) frame:Point("BOTTOMRIGHT", btn, "BOTTOMRIGHT", -2, 2) frame:SetTexCoord(0.1, 0.9, 0.1, 0.9 ) frame:SetDrawLayer("ARTWORK") if name == "PS_MinimapButton" then frame.SetPoint = SV.fubar end end end end btn:SetSlotTemplate(true, 2, -1, -1) if(name == "DBMMinimapButton") then btn:SetNormalTexture("Interface\\Icons\\INV_Helmet_87") end if(name == "SmartBuff_MiniMapButton") then btn:SetNormalTexture(select(3, GetSpellInfo(12051))) end btn.isStyled = true local nextindex = #buttonCache[2] + 1 buttonCache[2][nextindex] = name end end local StyleMinimapButtons = function() local count = Minimap:GetNumChildren() for i=1, count do local child = select(i,Minimap:GetChildren()) SetMinimapButton(child) end UpdateMinimapButtons() if MOD.db.minimapbar.mouseover then MMBBar:SetAlpha(0) else MMBBar:SetAlpha(1) end end function MOD:UpdateMinimapButtonSettings(notimer) if(not self.db.minimapbar.enable or not MMBBar:IsShown()) then return end if(notimer) then StyleMinimapButtons() else SV.Timers:ExecuteTimer(StyleMinimapButtons, 4) end end end local function SetLargeWorldMap() if InCombatLockdown() then return end if MOD.db.tinyWorldMap == true then WorldMapFrame:SetParent(SV.UIParent) WorldMapFrame:EnableMouse(false) WorldMapFrame:EnableKeyboard(false) WorldMapFrame:SetScale(1) if WorldMapFrame:GetAttribute('UIPanelLayout-area') ~= 'center'then SetUIPanelAttribute(WorldMapFrame, "area", "center") end if WorldMapFrame:GetAttribute('UIPanelLayout-allowOtherPanels') ~= true then SetUIPanelAttribute(WorldMapFrame, "allowOtherPanels", true) end end WorldMapFrameSizeUpButton:Hide() WorldMapFrameSizeDownButton:Show() end local function SetQuestWorldMap() if InCombatLockdown() then return end if MOD.db.tinyWorldMap == true then WorldMapFrame:SetParent(SV.UIParent) WorldMapFrame:EnableMouse(false) WorldMapFrame:EnableKeyboard(false) if WorldMapFrame:GetAttribute('UIPanelLayout-area') ~= 'center'then SetUIPanelAttribute(WorldMapFrame, "area", "center") end if WorldMapFrame:GetAttribute('UIPanelLayout-allowOtherPanels') ~= true then SetUIPanelAttribute(WorldMapFrame, "allowOtherPanels", true) end end WorldMapFrameSizeUpButton:Hide() WorldMapFrameSizeDownButton:Show() end local function SetSmallWorldMap() if InCombatLockdown() then return end WorldMapLevelDropDown:ClearAllPoints() WorldMapLevelDropDown:Point("TOPLEFT", WorldMapDetailFrame, "TOPLEFT", -10, -4) WorldMapFrameSizeUpButton:Show() WorldMapFrameSizeDownButton:Hide() end local function AdjustMapLevel() if InCombatLockdown()then return end WorldMapFrame:SetFrameLevel(2) WorldMapDetailFrame:SetFrameLevel(4) WorldMapFrame:SetFrameStrata('HIGH') WorldMapArchaeologyDigSites:SetFrameLevel(6) WorldMapArchaeologyDigSites:SetFrameStrata('DIALOG') end local function AdjustMapSize() if InCombatLockdown() then return end if MOD.db.tinyWorldMap == true then if WORLDMAP_SETTINGS.size == WORLDMAP_FULLMAP_SIZE then SetLargeWorldMap() elseif WORLDMAP_SETTINGS.size == WORLDMAP_WINDOWED_SIZE then SetSmallWorldMap() elseif WORLDMAP_SETTINGS.size == WORLDMAP_QUESTLIST_SIZE then SetQuestWorldMap() end BlackoutWorld:SetTexture(0,0,0,0) else if WORLDMAP_SETTINGS.size == WORLDMAP_FULLMAP_SIZE then WorldMapFrame_SetFullMapView() elseif WORLDMAP_SETTINGS.size == WORLDMAP_WINDOWED_SIZE then WorldMap_ToggleSizeDown() elseif WORLDMAP_SETTINGS.size == WORLDMAP_QUESTLIST_SIZE then WorldMapFrame_SetQuestMapView() end BlackoutWorld:SetTexture(0, 0, 0, 1) end AdjustMapLevel() end local function CheckMovement() if(not WorldMapFrame:IsShown()) then return end if GetUnitSpeed("player") ~= 0 then WorldMapFrame:SetAlpha(MOD.db.mapAlpha) else WorldMapFrame:SetAlpha(1) end end local function UpdateMapCoords() local xF, yF = "|cffffffffx: |r%.1f", "|cffffffffy: |r%.1f" local skip = IsInInstance() local c, d = GetPlayerMapPosition("player") if(not skip and not IsIndoors() and c ~= 0 and d ~= 0) then c = parsefloat(100 * c, 2) d = parsefloat(100 * d, 2) if(MOD.db.playercoords == "SIMPLE") then xF, yF = "%.1f", "%.1f"; end if c ~= 0 and d ~= 0 then SVUI_MiniMapCoords.playerXCoords:SetFormattedText(xF, c) SVUI_MiniMapCoords.playerYCoords:SetFormattedText(yF, d) if(SVUI_WorldMapCoords and WorldMapFrame:IsShown()) then SVUI_WorldMapCoords.playerCoords:SetText(PLAYER..": "..c..", "..d) end else SVUI_MiniMapCoords.playerXCoords:SetText("") SVUI_MiniMapCoords.playerYCoords:SetText("") if(SVUI_WorldMapCoords and WorldMapFrame:IsShown()) then SVUI_WorldMapCoords.playerCoords:SetText("") end end if(not WorldMapFrame:IsShown() or not SVUI_WorldMapCoords) then return end local e = WorldMapDetailFrame:GetEffectiveScale() local f = WorldMapDetailFrame:GetWidth() local g = WorldMapDetailFrame:GetHeight() local h, i = WorldMapDetailFrame:GetCenter() local c, d = GetCursorPosition() local j = (c / e - (h - (f / 2))) / f; local k = (i + (g / 2)-d / e) / g; if j >= 0 and k >= 0 and j <= 1 and k <= 1 then j = parsefloat(100 * j, 2) k = parsefloat(100 * k, 2) SVUI_WorldMapCoords.mouseCoords:SetText(MOUSE_LABEL..": "..j..", "..k) else SVUI_WorldMapCoords.mouseCoords:SetText("") end else SVUI_MiniMapCoords.playerXCoords:SetText("") SVUI_MiniMapCoords.playerYCoords:SetText("") if(SVUI_WorldMapCoords and WorldMapFrame:IsShown()) then SVUI_WorldMapCoords.playerCoords:SetText("") end end if(MOD.db.mapAlpha < 100) then CheckMovement() end end local function UpdateWorldMapConfig() if InCombatLockdown()then return end if(not MOD.WorldMapHooked) then NewHook("WorldMap_ToggleSizeUp", AdjustMapSize) NewHook("WorldMap_ToggleSizeDown", SetSmallWorldMap) if(SV.___interface < 60000) then NewHook("WorldMapFrame_SetFullMapView", SetLargeWorldMap) NewHook("WorldMapFrame_SetQuestMapView", SetQuestWorldMap) end MOD.WorldMapHooked = true end if(not MOD.db.playercoords or MOD.db.playercoords == "HIDE") then if MOD.CoordTimer then SV.Timers:RemoveLoop(MOD.CoordTimer) MOD.CoordTimer = nil; end SVUI_MiniMapCoords.playerXCoords:SetText("") SVUI_MiniMapCoords.playerYCoords:SetText("") SVUI_MiniMapCoords:Hide() else SVUI_MiniMapCoords:Show() MOD.CoordTimer = SV.Timers:ExecuteLoop(UpdateMapCoords, 0.2) UpdateMapCoords() end AdjustMapSize() end local ResetDropDownList_Hook = function(self) DropDownList1:ClearAllPoints() DropDownList1:Point("TOPRIGHT",self,"BOTTOMRIGHT",-17,-4) end local WorldMapFrameOnShow_Hook = function() MOD:RegisterEvent("PLAYER_REGEN_DISABLED"); if InCombatLockdown()then return end if(not SV.db.SVMap.tinyWorldMap and not Initialized) then WorldMap_ToggleSizeUp() Initialized = true end AdjustMapLevel() end local WorldMapFrameOnHide_Hook = function() MOD:UnregisterEvent("PLAYER_REGEN_DISABLED") end --[[ ########################################################## CORE FUNCTIONS ########################################################## ]]-- MOD.narrative = ""; MOD.locationPrefix = ""; do local function _createCoords() local x, y = GetPlayerMapPosition("player") x = tonumber(parsefloat(100 * x, 0)) y = tonumber(parsefloat(100 * y, 0)) return x, y end local function Tour_OnEnter(self,...) if InCombatLockdown() then GameTooltip:Hide() else GameTooltip:SetOwner(self, "ANCHOR_BOTTOM", 0, -4) GameTooltip:ClearAllPoints() GameTooltip:SetPoint("BOTTOM", self, "BOTTOM", 0, 0) GameTooltip:AddLine(" ") GameTooltip:AddDoubleLine(L["Click : "], L["Toggle WorldMap"], 0.7, 0.7, 1, 0.7, 0.7, 1) GameTooltip:AddDoubleLine(L["ShiftClick : "], L["Announce your position in chat"],0.7, 0.7, 1, 0.7, 0.7, 1) GameTooltip:Show() end end local function Tour_OnLeave(self,...) GameTooltip:Hide() end local function Tour_OnClick(self, btn) local zoneText = GetRealZoneText() or UNKNOWN; if IsShiftKeyDown() then local edit_box = ChatEdit_ChooseBoxForSend() local x, y = _createCoords() local message local coords = x..", "..y if zoneText ~= GetSubZoneText() then message = format("%s: %s (%s)", zoneText, GetSubZoneText(), coords) else message = format("%s (%s)", zoneText, coords) end ChatEdit_ActivateChat(edit_box) edit_box:Insert(message) else ToggleFrame(WorldMapFrame) end GameTooltip:Hide() end local Calendar_OnClick = function(self) GameTimeFrame:Click(); end local Tracking_OnClick = function(self) local position = self:GetPoint() local xoff = -1 if position:match("RIGHT") then xoff = -16 end ToggleDropDownMenu(1, nil, MiniMapTrackingDropDown, self, xoff, -3) end local Basic_OnEnter = function(self) GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 4) GameTooltip:ClearLines() GameTooltip:AddLine(self.TText, 1, 1, 1) GameTooltip:Show() end local Basic_OnLeave = function(self) GameTooltip:Hide() end function SetMiniMapCoords() if(not SVUI_MiniMapCoords) then local CoordsHolder = CreateFrame("Frame", "SVUI_MiniMapCoords", Minimap) CoordsHolder:SetFrameLevel(Minimap:GetFrameLevel() + 1) CoordsHolder:SetFrameStrata(Minimap:GetFrameStrata()) CoordsHolder:SetPoint("TOPLEFT", SVUI_MinimapFrame, "BOTTOMLEFT", 0, -4) CoordsHolder:SetPoint("TOPRIGHT", SVUI_MinimapFrame, "BOTTOMRIGHT", 0, -4) CoordsHolder:SetHeight(22) CoordsHolder:EnableMouse(true) CoordsHolder:SetScript("OnEnter",Tour_OnEnter) CoordsHolder:SetScript("OnLeave",Tour_OnLeave) CoordsHolder:SetScript("OnMouseDown",Tour_OnClick) CoordsHolder.playerXCoords = CoordsHolder:CreateFontString(nil, "OVERLAY") CoordsHolder.playerXCoords:SetPoint("BOTTOMLEFT", CoordsHolder, "BOTTOMLEFT", 0, 0) CoordsHolder.playerXCoords:SetWidth(70) CoordsHolder.playerXCoords:SetHeight(22) CoordsHolder.playerXCoords:SetFontTemplate(SV.Media.font.numbers, 12, "OUTLINE") CoordsHolder.playerXCoords:SetTextColor(cColor.r, cColor.g, cColor.b) CoordsHolder.playerYCoords = CoordsHolder:CreateFontString(nil, "OVERLAY") CoordsHolder.playerYCoords:SetPoint("BOTTOMLEFT", CoordsHolder.playerXCoords, "BOTTOMRIGHT", 4, 0) CoordsHolder.playerXCoords:SetWidth(70) CoordsHolder.playerYCoords:SetHeight(22) CoordsHolder.playerYCoords:SetFontTemplate(SV.Media.font.numbers, 12, "OUTLINE") CoordsHolder.playerYCoords:SetTextColor(cColor.r, cColor.g, cColor.b) local calendarButton = CreateFrame("Button", "SVUI_CalendarButton", CoordsHolder) calendarButton:SetSize(22,22) calendarButton:SetPoint("RIGHT", CoordsHolder, "RIGHT", 0, 0) calendarButton:RemoveTextures() calendarButton:SetNormalTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Minimap\\MINIMAP-CALENDAR") calendarButton:SetPushedTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Minimap\\MINIMAP-CALENDAR") calendarButton:SetHighlightTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Minimap\\MINIMAP-CALENDAR") calendarButton.TText = "Calendar" calendarButton:RegisterForClicks("AnyUp") calendarButton:SetScript("OnEnter", Basic_OnEnter) calendarButton:SetScript("OnLeave", Basic_OnLeave) calendarButton:SetScript("OnClick", Calendar_OnClick) local trackingButton = CreateFrame("Button", "SVUI_TrackingButton", CoordsHolder) trackingButton:SetSize(22,22) trackingButton:SetPoint("RIGHT", calendarButton, "LEFT", -4, 0) trackingButton:RemoveTextures() trackingButton:SetNormalTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Minimap\\MINIMAP-TRACKING") trackingButton:SetPushedTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Minimap\\MINIMAP-TRACKING") trackingButton:SetHighlightTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Minimap\\MINIMAP-TRACKING") trackingButton.TText = "Tracking" trackingButton:RegisterForClicks("AnyUp") trackingButton:SetScript("OnEnter", Basic_OnEnter) trackingButton:SetScript("OnLeave", Basic_OnLeave) trackingButton:SetScript("OnClick", Tracking_OnClick) end end end local function UpdateMinimapNarration() SVUI_MinimapNarrator.Text:SetText(MOD.narrative) end local function UpdateMinimapLocation() SVUI_MinimapZonetext.Text:SetText(MOD.locationPrefix .. strsub(GetMinimapZoneText(), 1, 25)) end local function UpdateMinimapTexts() MOD.narrative = ""; MOD.locationPrefix = ""; if(not MOD.db.locationText or MOD.db.locationText == "HIDE") then SVUI_MinimapNarrator:Hide(); SVUI_MinimapZonetext:Hide(); elseif(MOD.db.locationText == "SIMPLE") then SVUI_MinimapNarrator:Hide(); SVUI_MinimapZonetext:Show(); UpdateMinimapLocation() UpdateMinimapNarration() else SVUI_MinimapNarrator:Show(); SVUI_MinimapZonetext:Show(); MOD.narrative = L['Meanwhile...']; MOD.locationPrefix = L["..at "]; UpdateMinimapLocation() UpdateMinimapNarration() end end local function UpdateSizing() MM_COLOR = SV.Media.gradient[MOD.db.bordercolor] MM_BRDR = MOD.db.bordersize or 0 MM_SIZE = MOD.db.size or 240 MM_OFFSET_TOP = (MM_SIZE * 0.07) MM_OFFSET_BOTTOM = (MM_SIZE * 0.11) MM_WIDTH = MM_SIZE + (MM_BRDR * 2) MM_HEIGHT = MOD.db.customshape and (MM_SIZE - (MM_OFFSET_TOP + MM_OFFSET_BOTTOM) + (MM_BRDR * 2)) or MM_WIDTH end function MOD:RefreshMiniMap() if(not SV.db.SVMap.enable) then return; end if(InCombatLockdown()) then self.CombatLocked = true return end UpdateSizing() if(SVUI_MinimapFrame and SVUI_MinimapFrame:IsShown()) then --local minimapRotationEnabled = GetCVar("rotateMinimap") ~= "0" SVUI_MinimapFrame:Size(MM_WIDTH, MM_HEIGHT) SVUI_MinimapFrame.backdrop:SetGradient(unpack(MM_COLOR)) Minimap:Size(MM_SIZE,MM_SIZE) if MOD.db.customshape then Minimap:SetPoint("BOTTOMLEFT", SVUI_MinimapFrame, "BOTTOMLEFT", MM_BRDR, -(MM_OFFSET_BOTTOM - MM_BRDR)) Minimap:SetPoint("TOPRIGHT", SVUI_MinimapFrame, "TOPRIGHT", -MM_BRDR, (MM_OFFSET_TOP - MM_BRDR)) Minimap:SetMaskTexture('Interface\\AddOns\\SVUI\\assets\\artwork\\Minimap\\MINIMAP_MASK_RECTANGLE') else Minimap:SetHitRectInsets(0, 0, 0, 0) Minimap:FillInner(SVUI_MinimapFrame, MM_BRDR, MM_BRDR) Minimap:SetMaskTexture('Interface\\AddOns\\SVUI\\assets\\artwork\\Minimap\\MINIMAP_MASK_SQUARE') end Minimap:SetParent(SVUI_MinimapFrame) Minimap:SetZoom(1) Minimap:SetZoom(0) end SVUI_MinimapZonetext:SetSize(MM_WIDTH,28) SVUI_MinimapZonetext.Text:SetSize(MM_WIDTH,32) UpdateMinimapTexts() if SVUI_AurasAnchor then SVUI_AurasAnchor:Height(MM_HEIGHT) if SVUI_AurasAnchor_MOVE and not SV:TestMovableMoved('SVUI_AurasAnchor_MOVE') and not SV:TestMovableMoved('SVUI_MinimapFrame_MOVE') then SVUI_AurasAnchor_MOVE:ClearAllPoints() SVUI_AurasAnchor_MOVE:Point("TOPRIGHT", SVUI_MinimapFrame_MOVE, "TOPLEFT", -8, 0) end if SVSVUI_AurasAnchor_MOVE then SVUI_AurasAnchor_MOVE:Height(MM_HEIGHT) end end if SVUI_HyperBuffs then SV.SVAura:Update_HyperBuffsSettings() end if TimeManagerClockButton then TimeManagerClockButton:Die() end SetMiniMapCoords() UpdateWorldMapConfig() end local function CreateMiniMapElements() UpdateSizing() Minimap:SetPlayerTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Minimap\\MINIMAP_ARROW") Minimap:SetCorpsePOIArrowTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Minimap\\MINIMAP_CORPSE_ARROW") Minimap:SetPOIArrowTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Minimap\\MINIMAP_GUIDE_ARROW") Minimap:SetBlipTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Minimap\\MINIMAP_ICONS") Minimap:SetClampedToScreen(false) SVUI_MinimapFrame:Point("TOPRIGHT", SV.UIParent, "TOPRIGHT", -10, -10) SVUI_MinimapFrame:Size(MM_WIDTH, MM_HEIGHT) SVUI_MinimapFrame.backdrop:ClearAllPoints() SVUI_MinimapFrame.backdrop:WrapOuter(SVUI_MinimapFrame, 2) SVUI_MinimapFrame.backdrop:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Template\DEFAULT]]) SVUI_MinimapFrame.backdrop:SetGradient(unpack(MM_COLOR)) SVUI_MinimapFrame:SetPanelTemplate("Blackout") local border = CreateFrame("Frame", nil, SVUI_MinimapFrame) border:WrapOuter(SVUI_MinimapFrame.backdrop) border.left = border:CreateTexture(nil, "BACKGROUND", nil, -1) border.left:SetTexture(0, 0, 0) border.left:SetPoint("TOPLEFT") border.left:SetPoint("BOTTOMLEFT") border.left:SetWidth(1) border.right = border:CreateTexture(nil, "BACKGROUND", nil, -1) border.right:SetTexture(0, 0, 0) border.right:SetPoint("TOPRIGHT") border.right:SetPoint("BOTTOMRIGHT") border.right:SetWidth(1) border.top = border:CreateTexture(nil, "BACKGROUND", nil, -1) border.top:SetTexture(0, 0, 0) border.top:SetPoint("TOPLEFT") border.top:SetPoint("TOPRIGHT") border.top:SetHeight(1) border.bottom = border:CreateTexture(nil, "BACKGROUND", nil, -1) border.bottom:SetTexture(0, 0, 0) border.bottom:SetPoint("BOTTOMLEFT") border.bottom:SetPoint("BOTTOMRIGHT") border.bottom:SetHeight(1) -- MOD:RefreshMiniMap() if TimeManagerClockButton then TimeManagerClockButton:Die() end Minimap:SetQuestBlobRingAlpha(0) Minimap:SetArchBlobRingAlpha(0) Minimap:SetParent(SVUI_MinimapFrame) Minimap:SetFrameStrata("LOW") Minimap:SetFrameLevel(Minimap:GetFrameLevel() + 2) ShowUIPanel(SpellBookFrame) HideUIPanel(SpellBookFrame) MinimapBorder:Hide() MinimapBorderTop:Hide() MinimapZoomIn:Hide() MinimapZoomOut:Hide() MiniMapVoiceChatFrame:Hide() MinimapNorthTag:Die() GameTimeFrame:Hide() MinimapZoneTextButton:Hide() MiniMapTracking:Hide() MiniMapMailFrame:ClearAllPoints() MiniMapMailFrame:Point("TOPRIGHT", SVUI_MinimapFrame, 3, 4) MiniMapMailBorder:Hide() MiniMapMailIcon:SetTexture("Interface\\AddOns\\SVUI\\assets\\artwork\\Minimap\\MINIMAP-MAIL") MiniMapWorldMapButton:Hide() MiniMapInstanceDifficulty:ClearAllPoints() MiniMapInstanceDifficulty:SetParent(Minimap) MiniMapInstanceDifficulty:Point("BOTTOMLEFT", SVUI_MinimapFrame, "BOTTOMLEFT", 0, 0) GuildInstanceDifficulty:ClearAllPoints() GuildInstanceDifficulty:SetParent(Minimap) GuildInstanceDifficulty:Point("BOTTOMLEFT", SVUI_MinimapFrame, "BOTTOMLEFT", 0, 0) MiniMapChallengeMode:ClearAllPoints() MiniMapChallengeMode:SetParent(Minimap) MiniMapChallengeMode:Point("BOTTOMLEFT", SVUI_MinimapFrame, "BOTTOMLEFT", 8, -8) QueueStatusMinimapButton:ClearAllPoints() QueueStatusMinimapButton:Point("BOTTOMLEFT", SVUI_MinimapFrame, "BOTTOMLEFT", 6, 5) QueueStatusMinimapButton:SetPanelTemplate("Button", false, 1, -2, -2) QueueStatusFrame:SetClampedToScreen(true) QueueStatusMinimapButtonBorder:Hide() QueueStatusMinimapButton:SetScript("OnShow", function() MiniMapInstanceDifficulty:Point("BOTTOMLEFT", QueueStatusMinimapButton, "TOPLEFT", 0, 0) GuildInstanceDifficulty:Point("BOTTOMLEFT", QueueStatusMinimapButton, "BOTTOMLEFT", 0, 0) MiniMapChallengeMode:Point("BOTTOMLEFT", QueueStatusMinimapButton, "BOTTOMLEFT", 0, 0) end) QueueStatusMinimapButton:SetScript("OnHide", function() MiniMapInstanceDifficulty:Point("BOTTOMLEFT", SVUI_MinimapFrame, "BOTTOMLEFT", 0, 0) GuildInstanceDifficulty:Point("BOTTOMLEFT", SVUI_MinimapFrame, "BOTTOMLEFT", 0, 0) MiniMapChallengeMode:Point("BOTTOMLEFT", SVUI_MinimapFrame, "BOTTOMLEFT", 8, -8) end) if FeedbackUIButton then FeedbackUIButton:Die() end local mwfont = SV.Media.font.dialog SVUI_MinimapNarrator:Point("TOPLEFT", SVUI_MinimapFrame, "TOPLEFT", 2, -2) SVUI_MinimapNarrator:SetSize(100, 22) SVUI_MinimapNarrator:SetFixedPanelTemplate("Component", true) SVUI_MinimapNarrator:SetPanelColor("yellow") SVUI_MinimapNarrator:SetBackdropColor(1, 1, 0, 1) SVUI_MinimapNarrator:SetFrameLevel(Minimap:GetFrameLevel() + 2) SVUI_MinimapNarrator:SetParent(Minimap) SVUI_MinimapNarrator.Text = SVUI_MinimapNarrator:CreateFontString(nil, "ARTWORK", nil, 7) SVUI_MinimapNarrator.Text:SetFontTemplate(mwfont, 12, "OUTLINE", "CENTER", "MIDDLE") SVUI_MinimapNarrator.Text:SetAllPoints(SVUI_MinimapNarrator) SVUI_MinimapNarrator.Text:SetTextColor(1, 1, 1) SVUI_MinimapNarrator.Text:SetShadowColor(0, 0, 0, 0.3) SVUI_MinimapNarrator.Text:SetShadowOffset(2, -2) SVUI_MinimapZonetext:Point("BOTTOMRIGHT", SVUI_MinimapFrame, "BOTTOMRIGHT", 2, -3) SVUI_MinimapZonetext:SetSize(MM_WIDTH, 28) SVUI_MinimapZonetext:SetFrameLevel(Minimap:GetFrameLevel() + 1) SVUI_MinimapZonetext:SetParent(Minimap) SVUI_MinimapZonetext.Text = SVUI_MinimapZonetext:CreateFontString(nil, "ARTWORK", nil, 7) SVUI_MinimapZonetext.Text:SetFontTemplate(mwfont, 12, "OUTLINE", "RIGHT", "MIDDLE") SVUI_MinimapZonetext.Text:Point("RIGHT", SVUI_MinimapZonetext) SVUI_MinimapZonetext.Text:SetSize(MM_WIDTH, 32) SVUI_MinimapZonetext.Text:SetTextColor(1, 1, 0) SVUI_MinimapZonetext.Text:SetShadowColor(0, 0, 0, 0.3) SVUI_MinimapZonetext.Text:SetShadowOffset(-2, 2) UpdateMinimapTexts() Minimap:EnableMouseWheel(true) Minimap:SetScript("OnMouseWheel", MiniMap_MouseWheel) Minimap:SetScript("OnMouseUp", MiniMap_MouseUp) local info = UIPanelWindows["PetJournalParent"]; for name, value in pairs(info) do PetJournalParent:SetAttribute("UIPanelLayout-"..name, value); end PetJournalParent:SetAttribute("UIPanelLayout-defined", true); SV:SetSVMovable(SVUI_MinimapFrame, L["Minimap"]) MOD:RefreshMiniMap() end local function LoadWorldMap() setfenv(WorldMapFrame_OnShow, setmetatable({ UpdateMicroButtons = SV.fubar }, { __index = _G })) if(SV.___interface < 60000) then WorldMapShowDropDown:Point('BOTTOMRIGHT',WorldMapPositioningGuide,'BOTTOMRIGHT',-2,-4) WorldMapZoomOutButton:Point("LEFT",WorldMapZoneDropDown,"RIGHT",0,4) WorldMapLevelUpButton:Point("TOPLEFT",WorldMapLevelDropDown,"TOPRIGHT",-2,8) WorldMapLevelDownButton:Point("BOTTOMLEFT",WorldMapLevelDropDown,"BOTTOMRIGHT",-2,2) WorldMapZoneDropDownButton:HookScript('OnClick', ResetDropDownList_Hook) end WorldMapFrame:SetParent(SV.UIParent) WorldMapFrame:SetFrameLevel(4) WorldMapFrame:SetFrameStrata('HIGH') WorldMapDetailFrame:SetFrameLevel(6) WorldMapFrame:HookScript('OnShow', WorldMapFrameOnShow_Hook) WorldMapFrame:HookScript('OnHide', WorldMapFrameOnHide_Hook) local CoordsHolder = CreateFrame('Frame', 'SVUI_WorldMapCoords', WorldMapFrame) CoordsHolder:SetFrameLevel(WorldMapDetailFrame:GetFrameLevel()+1) CoordsHolder:SetFrameStrata(WorldMapDetailFrame:GetFrameStrata()) CoordsHolder.playerCoords=CoordsHolder:CreateFontString(nil,'OVERLAY') CoordsHolder.mouseCoords=CoordsHolder:CreateFontString(nil,'OVERLAY') CoordsHolder.playerCoords:SetTextColor(1,1,0) CoordsHolder.mouseCoords:SetTextColor(1,1,0) CoordsHolder.playerCoords:SetFontObject(NumberFontNormal) CoordsHolder.mouseCoords:SetFontObject(NumberFontNormal) CoordsHolder.playerCoords:SetPoint("BOTTOMLEFT",WorldMapDetailFrame,"BOTTOMLEFT",5,5) CoordsHolder.playerCoords:SetText(PLAYER..": 0, 0") CoordsHolder.mouseCoords:SetPoint("BOTTOMLEFT",CoordsHolder.playerCoords,"TOPLEFT",0,5) CoordsHolder.mouseCoords:SetText(MOUSE_LABEL..": 0, 0") DropDownList1:HookScript('OnShow',function(self) if(DropDownList1:GetScale() ~= UIParent:GetScale() and SV.db.SVMap.tinyWorldMap) then DropDownList1:SetScale(UIParent:GetScale()) end end) WorldFrame:SetAllPoints() end --[[ ########################################################## HOOKED / REGISTERED FUNCTIONS ########################################################## ]]-- function MOD:ADDON_LOADED(event, addon) if TimeManagerClockButton then TimeManagerClockButton:Die() end self:UnregisterEvent("ADDON_LOADED") if addon == "Blizzard_FeedbackUI" then FeedbackUIButton:Die() end self:UpdateMinimapButtonSettings() end function MOD:PLAYER_REGEN_ENABLED() if(WorldMapFrame:IsShown()) then WorldMapFrameSizeDownButton:Enable() WorldMapFrameSizeUpButton:Enable() end if(self.CombatLocked) then self:RefreshMiniMap() self.CombatLocked = nil end end function MOD:PLAYER_REGEN_DISABLED() WorldMapFrameSizeDownButton:Disable() WorldMapFrameSizeUpButton:Disable() end function MOD:PET_BATTLE_CLOSE() self:UpdateMinimapButtonSettings() end --[[ ########################################################## BUILD FUNCTION / UPDATE ########################################################## ]]-- function MOD:ReLoad() if(not SV.db.SVMap.enable) then return; end self:RefreshMiniMap() end function MOD:Load() if(not SV.db.SVMap.enable) then Minimap:SetMaskTexture('Textures\\MinimapMask') return end CreateMiniMapElements() self:RegisterEvent("PLAYER_ENTERING_WORLD", UpdateMinimapLocation) self:RegisterEvent('PLAYER_REGEN_ENABLED') self:RegisterEvent('PLAYER_REGEN_DISABLED') self:RegisterEvent("ZONE_CHANGED_NEW_AREA", UpdateMinimapLocation) self:RegisterEvent("ZONE_CHANGED", UpdateMinimapLocation) self:RegisterEvent("ZONE_CHANGED_INDOORS", UpdateMinimapLocation) self:RegisterEvent('ADDON_LOADED') --self:RegisterEvent("PET_BATTLE_CLOSE") if(self.db.minimapbar.enable == true) then MMBHolder = CreateFrame("Frame", "SVUI_MiniMapButtonHolder", SVUI_MinimapFrame) MMBHolder:Point("TOPRIGHT", SVUI_MiniMapCoords, "BOTTOMRIGHT", 0, -4) MMBHolder:Size(SVUI_MinimapFrame:GetWidth(), 32) MMBHolder:SetFrameStrata("BACKGROUND") MMBBar = CreateFrame("Frame", "SVUI_MiniMapButtonBar", MMBHolder) MMBBar:SetFrameStrata("LOW") MMBBar:ClearAllPoints() MMBBar:SetPoint("CENTER", MMBHolder, "CENTER", 0, 0) MMBBar:SetScript("OnEnter", MMB_OnEnter) MMBBar:SetScript("OnLeave", MMB_OnLeave) SV:SetSVMovable(MMBHolder, L["Minimap Button Bar"]) self:UpdateMinimapButtonSettings() end LoadWorldMap() SV:AddToDisplayAudit(SVUI_MinimapFrame) self:ReLoad() end --[[ ########################################################## DEFINE CONFIG AND REGISTER ########################################################## ]]-- CONFIGS["SVMap"] = { ["incompatible"] = { ["SexyMap"] = true, ["SquareMap"] = true, ["PocketPlot"] = true, }, ["enable"] = true, ["mapAlpha"] = 1, ["tinyWorldMap"] = true, ["size"] = 240, ["customshape"] = true, ["locationText"] = "CUSTOM", ["playercoords"] = "CUSTOM", ["bordersize"] = 6, ["bordercolor"] = "light", ["minimapbar"] = { ["enable"] = true, ["styleType"] = "HORIZONTAL", ["layoutDirection"] = "NORMAL", ["buttonSize"] = 28, ["mouseover"] = false, }, } Registry:NewPackage(MOD, "SVMap")