Well actually, that code i posted about the dashboard in my own addon seems to be causing it. It does not really "lock up" it just disconnects me. If i disable GrimUI it stops...
edit - this is the code...
Code:
local addonName, addon = ...
_G[addonName] = addon
local SIZE = 15
local DURABILITY_MID_RANGE = 50
local FPS_MID_RANGE = 20
local LATENCY_MID_RANGE = 300
local PERFORMANCEBAR_UPDATE_INTERVAL = PERFORMANCEBAR_UPDATE_INTERVAL or 10
local date, floor, max, min, tonumber = date, floor, max, min, tonumber
local GetFramerate, GetGameTime, GetNetStats = GetFramerate, GetGameTime, GetNetStats
local colors, CLASS = CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS, addon.CLASS
-- Main Frame Creation
local DashBoardFrame = CreateFrame('frame', nil, UIParent)
DashBoardFrame:SetFrameStrata("HIGH")
local DBFbg = DashBoardFrame:CreateTexture(nil, "BACKGROUND")
DBFbg:SetAllPoints(DashBoardFrame)
--[[-----------------------------------------------------------------------------
Individual Frames Creation
-------------------------------------------------------------------------------]]
local function DashFrameCreate(frametype, framename, template, justify, texture)
local frame = CreateFrame(frametype, framename, DashBoardFrame, template)
frame:EnableMouse(true)
frame:SetHeight(SIZE)
frame:SetScript('OnLeave', addon.HideTooltip)
frame:SetFrameStrata("HIGH")
frame.text = frame:CreateFontString(nil, 'OVERLAY', 'GameFontNormalSmall')
frame.text:SetFont([[Fonts\FRIZQT__.TTF]], 12, 'NORMAL')
if justify ~= nil then
frame.text:SetJustifyH(justify)
end
if texture == true then
frame.texture = frame:CreateTexture()
end
if frametype == 'Button' then
frame:RegisterForClicks("AnyUp")
end
frame.text:SetPoint('RIGHT')
frame.text:SetShadowOffset(1, -1)
return frame
end
DashFrameCreate('Frame',"GUI_DashMail", nil, 'RIGHT', true)
DashFrameCreate('Button',"GUI_DashQuest", nil, 'RIGHT', true, true)
DashFrameCreate('Button',"GUI_DashDurability", nil, 'RIGHT', true)
DashFrameCreate('Button',"GUI_DashInventory", 'SecureHandlerClickTemplate', 'RIGHT', true)
DashFrameCreate('Button',"GUI_DashMoney", nil, nil, nil)
DashFrameCreate('Button',"clock", nil, 'RIGHT', true)
DashFrameCreate('Frame',"GUI_DashLatency", nil, 'RIGHT', nil)
DashFrameCreate('Frame',"GUI_DashFPS", nil, 'RIGHT', nil)
DashFrameCreate('Button',"GUI_DashSocial", 'SecureHandlerClickTemplate', 'RIGHT', true)
DashFrameCreate('Button', "GUI_DashGuild", 'SecureHandlerClickTemplate', 'RIGHT', nil)
DashFrameCreate('Button',"GUI_DashSpeed", nil, 'RIGHT', true)
-- Mail frame --
GUI_DashMail.texture:SetTexture([[Interface\AddOns\]] .. addonName .. [[\Media\MailIcon]])
GUI_DashMail.texture:SetPoint('RIGHT', GUI_DashMail.text, 'LEFT')
GUI_DashMail.texture:SetHeight(12)
GUI_DashMail.texture:SetWidth(12)
GUI_DashMail.text:SetText(" 188")
GUI_DashMail:SetWidth(GUI_DashMail.text:GetStringWidth() + GUI_DashMail.texture:GetWidth() - 8)
-- Quests --
GUI_DashQuest.texture:SetTexture([[Interface\AddOns\]] .. addonName .. [[\Media\QuestIcon]])
GUI_DashQuest.texture:SetPoint('RIGHT', GUI_DashQuest.text, 'LEFT')
GUI_DashQuest.texture:SetTexCoord(0.25, 0.75, 0.25, 0.75)
GUI_DashQuest.texture:SetHeight(12)
GUI_DashQuest.texture:SetWidth(12)
GUI_DashQuest.text:SetText(" 25/25")
GUI_DashQuest:SetWidth(GUI_DashQuest.text:GetStringWidth() + GUI_DashQuest.texture:GetWidth())
-- Armor durability --
GUI_DashDurability.texture:SetTexture([[Interface\Icons\Trade_BlackSmithing]])
GUI_DashDurability.texture:SetPoint('RIGHT', GUI_DashDurability.text, 'LEFT')
GUI_DashDurability.texture:SetTexCoord(0.07, 0.93, 0.07, 0.93)
GUI_DashDurability.texture:SetHeight(12)
GUI_DashDurability.texture:SetWidth(12)
GUI_DashDurability.text:SetText(" 100%")
GUI_DashDurability:SetWidth(GUI_DashDurability.text:GetStringWidth() + GUI_DashDurability.texture:GetWidth())
-- Inventory --
addon.GUI_DashInventory = GUI_DashInventory
GUI_DashInventory.texture:SetTexture([[Interface\AddOns\]] .. addonName .. [[\Media\BagIcon]])
GUI_DashInventory.texture:SetPoint('RIGHT', GUI_DashInventory.text, 'LEFT')
GUI_DashInventory.texture:SetHeight(SIZE)
GUI_DashInventory.texture:SetWidth(SIZE)
GUI_DashInventory.text:SetText(" 888/888")
GUI_DashInventory:SetWidth(GUI_DashInventory.text:GetStringWidth() + GUI_DashInventory.texture:GetWidth())
-- Money --
GUI_DashMoney:SetWidth(1)
GUI_DashMoney.text:SetTextColor(1, 1, 1)
GUI_DashMoney.text:SetAllPoints()
-- Clock --
clock.text:SetTextColor(1, 1, 1, 1)
clock.text:SetText(" 18:88pm")
clock:SetWidth(clock.text:GetStringWidth())
clock.texture:SetHeight(SIZE)
clock.texture:SetWidth((clock.text:GetStringWidth() - 6))
clock.texture:SetPoint("CENTER", clock, "CENTER", 5, 0)
clock.texture:SetTexture("Interface/PlayerFrame/UI-PlayerFrame-Deathknight-Glow.blp")
clock.texture:Hide()
-- Latency --
GUI_DashLatency.text:SetText(" 888ms")
GUI_DashLatency:SetWidth(GUI_DashLatency.text:GetStringWidth())
-- FPS --
GUI_DashFPS.text:SetText(" 188fps")
GUI_DashFPS:SetWidth(GUI_DashFPS.text:GetStringWidth())
-- Social/Friends --
GUI_DashSocial.texture:SetTexture("Interface/FriendsFrame/UI-Toast-FriendOnlineIcon.blp")
GUI_DashSocial.texture:SetPoint('RIGHT', GUI_DashSocial.text, 'LEFT')
GUI_DashSocial.texture:SetHeight(20)
GUI_DashSocial.texture:SetWidth(20)
GUI_DashSocial.text:SetText("188")
GUI_DashSocial:SetWidth(GUI_DashSocial.text:GetStringWidth() + GUI_DashSocial.texture:GetWidth() - 10)
-- Guild Frame --
GuildMicroButtonTabard:SetParent(GUI_DashGuild)
GuildMicroButtonTabard:SetPoint('RIGHT', GUI_DashGuild.text, 'LEFT')
GuildMicroButtonTabard:SetHeight(5)
GuildMicroButtonTabard:SetWidth(5)
GuildMicroButtonTabard.emblem:SetHeight(9)
GuildMicroButtonTabard.emblem:SetWidth(9)
GuildMicroButtonTabard.background:SetHeight(26)
GuildMicroButtonTabard.background:SetWidth(21)
GuildMicroButtonTabard.emblem:SetPoint("CENTER", GuildMicroButtonTabard.background, "CENTER", 0, -4)
GUI_DashGuild.texture1 = GUI_DashGuild:CreateTexture()
GUI_DashGuild.texture1:SetTexture("Interface/Buttons/UI-MicroButton-Guild-Banner.blp")
GUI_DashGuild.texture1:SetPoint('RIGHT', GUI_DashGuild.text, 'LEFT', 0, 4)
GUI_DashGuild.texture1:SetHeight(26)
GUI_DashGuild.texture1:SetWidth(21)
GUI_DashGuild.texture2 = GUI_DashGuild:CreateTexture()
GUI_DashGuild.texture2:SetTexture("Interface/GUI_DashGuild/GuildEmblems_01.blp")
GUI_DashGuild.texture2:SetPoint('CENTER', GUI_DashGuild.texture1, 'CENTER', 0, -4)
GUI_DashGuild.texture2:SetHeight(9)
GUI_DashGuild.texture2:SetWidth(9)
GUI_DashGuild.text:SetText("188")
GUI_DashGuild:SetWidth(GUI_DashGuild.text:GetStringWidth() + GUI_DashGuild.texture1:GetWidth() - 10)
-- Speed --
GUI_DashSpeed.texture:SetTexture("Interface/TAXIFRAME/UI-Taxi-Icon-Green.blp")
GUI_DashSpeed.texture:SetPoint('LEFT', GUI_DashSpeed, 'LEFT')
GUI_DashSpeed.texture:SetTexCoord(0.25, 0.75, 0.25, 0.75)
GUI_DashSpeed.texture:SetHeight(10)
GUI_DashSpeed.texture:SetWidth(10)
GUI_DashSpeed:SetWidth(46)
--[[-----------------------------------------------------------------------------
OnEnter Functions
-------------------------------------------------------------------------------]]
-- Universal OnEnter Setup Func --
local function GUI_ToolTipSetup(self)
--if self.tooltip then
GameTooltip:ClearLines()
--else
if not addon.settings.dashOnTop or addon.settings.dashOnTop == false then
GameTooltip:SetOwner(self, 'ANCHOR_TOP', 0, 1)
else
GameTooltip:SetOwner(self, 'ANCHOR_BOTTOM', 0, -5)
end
--end
end
-- Clock --
local server_hour, server_minute = 0, 0
local function GUI_DashClock_OnEnter(self)
GUI_ToolTipSetup(self)
GameTooltip:AddDoubleLine("Today's Date", date("%A, %B %d, %Y"))
GameTooltip:AddLine(" ")
GameTooltip:AddDoubleLine("Local Time", clock.text:GetText())
GameTooltip:AddDoubleLine("Server Time", ("%d:%.02d %sm"):format(server_hour ~= 0 and server_hour or 12, server_minute, server_hour >= 12 and "p" or "a"))
GameTooltip:AddLine(" ")
GameTooltip:AddLine("|cffeda55fLeft Click|r toggles the Time Manager", 0.2, 1, 0.2)
GameTooltip:AddLine("|cffeda55fRight Click|r toggles the Calendar", 0.2, 1, 0.2)
if not self.tooltip then
GameTooltip:Show()
self.tooltip = true
end
end
clock:SetScript('OnEnter', GUI_DashClock_OnEnter)
clock:SetScript('OnLeave', addon.HideTooltip)
-- Mail frame --
local function GUI_DashMail_OnEnter(self)
if not HasNewMail() then return end
GUI_ToolTipSetup(self)
MinimapMailFrameUpdate()
if not self.tooltip then
GameTooltip:Show()
self.tooltip = true
end
end
GUI_DashMail:SetScript('OnEnter', GUI_DashMail_OnEnter)
GUI_DashMail:SetScript('OnLeave', addon.HideTooltip)
-- Durability Frame --
local equipCost = 0;
local bagCost = 0;
local totalCost = 0;
local pEquipDura = { min=0, max=0};
local pBagDura = { min=0, max=0};
local slots = { "HeadSlot", "ShoulderSlot", "ChestSlot", "WaistSlot", "WristSlot", "HandsSlot", "LegsSlot", "FeetSlot", "MainHandSlot", "SecondaryHandSlot", "RangedSlot" }
slots[0] = 'AmmoSlot'
--local myTip = nil
function GUI_DashDurability:GetDurabilityInfo()
pEquipDura = { min=0, max=0};
pBagDura = { min=0, max=0};
if not tmpTip then tmpTip = CreateFrame("GameTooltip", "GUITT") end
equipCost = 0
for _, slotName in ipairs(slots) do
local item = _G["Character" .. slotName]
local hasItem, _, repairCost = tmpTip:SetInventoryItem("player", item:GetID())
local Minimum, Maximum = GetInventoryItemDurability(item:GetID())
if hasItem and repairCost and repairCost > 0 then
equipCost = equipCost + repairCost
end
if Minimum and Maximum then
pEquipDura.min = pEquipDura.min + Minimum
pEquipDura.max = pEquipDura.max + Maximum
end
end
bagCost = 0
for bag = 0, 4 do
for slot = 1, GetContainerNumSlots(bag) do
local hasCooldown, repairCost = tmpTip:SetBagItem(bag, slot)
local Minimum, Maximum = GetContainerItemDurability(bag, slot)
if repairCost and repairCost > 0 then
bagCost = bagCost + repairCost
end
if Minimum and Maximum then
pBagDura.min = pBagDura.min + Minimum
pBagDura.max = pBagDura.max + Maximum
end
end
end
if bagCost < 0 then bagCost = 0 end
totalCost = equipCost + bagCost
end
local function GUI_DashDurability_OnEnter(self)
--if not myTip then
--myTip = CreateFrame('GameTooltip')
--myTip:Hide()
--end
local cP = (pEquipDura.max > 0 and floor(pEquipDura.min / pEquipDura.max * 100)) or 100
local bP = (pBagDura.max > 0 and floor(pBagDura.min / pBagDura.max * 100)) or 100
local tP = ((pEquipDura.max + pBagDura.max) > 0 and floor( (pEquipDura.min + pBagDura.min) / (pEquipDura.max + pBagDura.max) * 100)) or 100
if cP > 100 then cP = 100 end
if bP > 100 then bP = 100 end
if tP > 100 then tP = 100 end
GUI_ToolTipSetup(self)
GameTooltip:AddLine(_G['REPAIR_COST'])
GameTooltip:AddLine(" ")
GameTooltip:AddDoubleLine(_G['CURRENTLY_EQUIPPED'].." ("..addon:DurColor(cP)..cP.."%|r".."):", addon:MoneyToString(equipCost, true))
GameTooltip:AddDoubleLine("Inventory".." ("..addon:DurColor(bP)..bP.."%|r".."):", addon:MoneyToString(bagCost, true))
GameTooltip:AddLine(" ")
GameTooltip:AddDoubleLine(_G['REPAIR_ALL_ITEMS'].." ("..addon:DurColor(tP)..tP.."%|r".."):", addon:MoneyToString(totalCost, true))
GameTooltip:AddDoubleLine("Friendly Discount", addon:MoneyToString(addon:truncate((totalCost * 0.95), 0), true))
GameTooltip:AddDoubleLine("Honored Discount", addon:MoneyToString(addon:truncate((totalCost * 0.9), 0), true))
GameTooltip:AddDoubleLine("Revered Discount", addon:MoneyToString(addon:truncate((totalCost * 0.85), 0), true))
GameTooltip:AddDoubleLine("Exaulted Discount", addon:MoneyToString(addon:truncate((totalCost * 0.8), 0), true))
GameTooltip:AddLine(" ")
GameTooltip:AddLine("|cffeda55fLeft Click|r toggle Auto-Repair " .. (addon.settings.autoRepair and "|cff88ff88on|r" or "|cffff8888off|r"), 0.2, 1, 0.2)
GameTooltip:AddLine("|cffeda55fRight Click|r toggle Guild Funds " .. (addon.settings.GuildRepair and "|cff88ff88on|r" or "|cffff8888off|r"), 0.2, 1, 0.2)
if not self.tooltip then
GameTooltip:Show()
self.tooltip = true
end
end
GUI_DashDurability:SetScript('OnEnter', GUI_DashDurability_OnEnter)
GUI_DashDurability:SetScript('OnLeave', addon.HideTooltip)
-- Inventory --
local function GUI_DashInventory_OnEnter(self)
GUI_ToolTipSetup(self)
local keyBinding = GetBindingKey("TOGGLEBACKPACK");
GameTooltip:AddLine(""..NORMAL_FONT_COLOR_CODE.."Backpack ("..keyBinding..")"..FONT_COLOR_CODE_CLOSE);
GameTooltip:AddLine(" ")
GameTooltip:AddLine(string.format(NUM_FREE_SLOTS, (MainMenuBarBackpackButton.freeSlots or 0)));
GameTooltip:AddLine(" ")
GameTooltip:AddLine("|cffeda55fLeft Click|r toggle Inventory", 0.2, 1, 0.2)
GameTooltip:AddLine("|cffeda55fRight Click|r toggle Bag Bar", 0.2, 1, 0.2)
if not self.tooltip then
GameTooltip:Show()
self.tooltip = true
end
end
GUI_DashInventory:SetScript('OnEnter', GUI_DashInventory_OnEnter)
GUI_DashInventory:SetScript('OnLeave', addon.HideTooltip)
-- Quest --
local function GUI_DashQuest_OnEnter(self)
if not addon.settings.dashOnTop or addon.settings.dashOnTop == false then
GameTooltip:SetOwner(self, 'ANCHOR_TOP', 0, 1)
else
GameTooltip:SetOwner(self, 'ANCHOR_BOTTOM', 0, -5)
end
GameTooltip:AddLine(MicroButtonTooltipText(QUESTLOG_BUTTON, "TOGGLEQUESTLOG"));
if not self.tooltip then
GameTooltip:Show()
self.tooltip = true
end
end
GUI_DashQuest:SetScript('OnEnter', GUI_DashQuest_OnEnter)
GUI_DashQuest:SetScript('OnLeave', addon.HideTooltip)
-- Social --
local function GUI_DashSocial_OnEnter(self)
GUI_ToolTipSetup(self)
local numBNetFriends, numBNetOnline = BNGetNumFriends();
local numWoWFriends, numWoWOnline = GetNumFriends();
local sPlural = "s";
if (numBNetOnline + numWoWOnline) == 1 then
sPlural = "";
end
GameTooltip:AddLine(MicroButtonTooltipText(SOCIALS ,"TOGGLESOCIAL"));
GameTooltip:AddLine(" ")
GameTooltip:AddLine((numBNetOnline + numWoWOnline) .. " Friend" .. sPlural .. " Online", 0, 1, 0);
-- Battle.net Friends
for i = 1, numBNetFriends, 1 do
local sPresenceID, sNameFirst, sNameLast, sCharName, sCharID, sClient, bIsOnline = BNGetFriendInfo(i);
if bIsOnline then
local sArea = sClient;
if sClient == "WoW" then
local _, _, _, sServer = BNGetToonInfo(sPresenceID);
sArea = sServer;
end
GameTooltip:AddLine(sCharName .. " (" .. sArea .. ") [" .. sNameFirst .. " " .. sNameLast .. "]", 0, 1, 1 );
end
end
-- Regular Friends
for i = 1, numWoWFriends, 1 do
local sName, iLevel, sClass, sArea, bConnected, sNote, fStatus = GetFriendInfo(i);
local color = colors[CLASS[sClass]]
if bConnected then
GameTooltip:AddLine(sName, color.r, color.g, color.b);
end
end
if not self.tooltip then
GameTooltip:Show()
self.tooltip = true
end
end
GUI_DashSocial:SetScript('OnEnter', GUI_DashSocial_OnEnter)
GUI_DashSocial:SetScript('OnLeave', addon.HideTooltip)
-- Guild --
local function GUI_DashGuild_OnEnter(self)
GUI_ToolTipSetup(self)
GameTooltip:AddLine(MicroButtonTooltipText(GUILD, "TOGGLEGUILDTAB"));
GameTooltip:AddLine(" ")
if IsInGuild() == nil then
GameTooltip:AddLine("Not in a Guild")
else
local total = GetNumGuildMembers(true)
local onlineTotal = 0
local offlineTotal = 0
for i = 1, total
do
local name, rank, rankIndex, level, class, zone, note, officernote, online, status, classFileName = GetGuildRosterInfo(i)
if online and name ~= GetUnitName("player")
then
onlineTotal = onlineTotal + 1
else
offlineTotal = offlineTotal + 1
end
end
local sPlural = "s";
if onlineTotal == 1 then
sPlural = "";
end
GameTooltip:AddLine((onlineTotal) .. " Guildie" .. sPlural .. " Online", 0, 1, 0);
for index = 1, total, 1 do
local gName, gRank,_, gLevel, gClass,_,_,_, gConnected, gStatus, gFileName = GetGuildRosterInfo(index);
local color = colors[CLASS[gClass]]
if gConnected and gName ~= GetUnitName("player") then
GameTooltip:AddLine(gName, color.r, color.g, color.b);
end
end
end
if not self.tooltip then
GameTooltip:Show()
self.tooltip = true
end
end
GUI_DashGuild:SetScript('OnEnter', GUI_DashGuild_OnEnter)
GUI_DashGuild:SetScript('OnLeave', addon.HideTooltip)
-- Money --
local moneyGained, moneySpent = 0, 0
local function GUI_DashMoney_OnEnter(self)
local tooltip = GameTooltip
GUI_ToolTipSetup(self)
tooltip:AddLine("Cash flow:")
if moneyGained > 0 or moneySpent > 0 then
tooltip:AddLine(" ")
tooltip:AddLine("This session")
tooltip:AddDoubleLine("Gained", addon:MoneyToString(moneyGained, true), 1, 1, 1, 1, 1, 1)
tooltip:AddDoubleLine("Spent", addon:MoneyToString(moneySpent, true), 1, 1, 1, 1, 1, 1)
if moneyGained - moneySpent > 0 then
tooltip:AddDoubleLine(" ", "|cff00ff00(+)|r " .. addon:MoneyToString(moneyGained - moneySpent, true), 1, 1, 1, 1, 1, 1)
else
tooltip:AddDoubleLine(" ", "|cffff0000(-)|r " .. addon:MoneyToString(moneySpent - moneyGained, true), 1, 1, 1, 1, 1, 1)
end
end
tooltip:AddLine(" ")
local total, colors, color = 0, CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS
for name, settings in pairs(_G[addonName .. "Settings"][GetRealmName()]) do
color = colors[settings.class]
tooltip:AddDoubleLine(name, addon:MoneyToString(settings.money, true), color.r, color.g, color.b, 1, 1, 1)
if type(settings.money) ~= 'number' then
settings.money = 0
end
total = total + settings.money
end
tooltip:AddLine(" ")
tooltip:AddDoubleLine("Total", addon:MoneyToString(total, true), NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1, 1, 1)
if not self.tooltip then
GameTooltip:Show()
self.tooltip = true
end
end
GUI_DashMoney:SetScript("OnEnter", GUI_DashMoney_OnEnter)
GUI_DashMoney:SetScript('OnLeave', addon.HideTooltip)
--[[-----------------------------------------------------------------------------
OnUpdate Functions
-------------------------------------------------------------------------------]]
-- Speed --
GUI_DashSpeed:SetScript('OnUpdate', function(self)
local s = string.format("%d%%", (GetUnitSpeed("Player") / 7) * 100);
GUI_DashSpeed.text:SetText(s)
end)
-- Clock --
function addon:SetClockHrFormat()
if addon.settings.clock24hr == false then
clock.text:SetText(("%d:%s"):format(tonumber(date("%I")), date("%M%p"):lower()))
else
clock.text:SetText(server_hour .. ":" .. server_minute)
end
end
local previousMinute, timer = -1, 5
clock:SetScript('OnUpdate', function(self, elapsed)
timer = timer + elapsed
if timer < 5 then return end
timer = 0
server_hour, server_minute = GetGameTime()
if server_minute == previousMinute then return end
previousMinute = server_minute
addon:SetClockHrFormat()
if self.tooltip then
self.tooltip = nil
GUI_DashClock_OnEnter()
end
end)
-- Latency --
local timer = 10
GUI_DashLatency:SetScript('OnUpdate', function(self, elapsed)
timer = timer + elapsed
if timer < PERFORMANCEBAR_UPDATE_INTERVAL then return end
timer = 0
local _, _, latency = GetNetStats()
GUI_DashLatency.text:SetTextColor(min(latency / LATENCY_MID_RANGE, 1), 1 - min(max(latency - LATENCY_MID_RANGE, 0) / LATENCY_MID_RANGE, 1), 0)
GUI_DashLatency.text:SetFormattedText("%sms", latency)
end)
-- FPS --
local timer = 1
GUI_DashFPS:SetScript('OnUpdate', function(self, elapsed)
timer = timer + elapsed
if timer < 1 then return end
timer = 0
local fps = floor(GetFramerate() + 0.5)
GUI_DashFPS.text:SetTextColor(1 - min(max(fps - FPS_MID_RANGE, 0) / FPS_MID_RANGE, 1), min(fps / FPS_MID_RANGE, 1), 0)
GUI_DashFPS.text:SetFormattedText("%sfps", fps)
end)
--[[-----------------------------------------------------------------------------
OnClick Functions
-------------------------------------------------------------------------------]]
-- Clock --
clock:SetScript('OnClick', function(self, button)
if button == 'LeftButton' then
ToggleTimeManager()
else
ToggleCalendar()
end
end)
-- Durability --
GUI_DashDurability:SetScript('OnClick', function(self, button)
if button == 'LeftButton' then
if addon.settings.autoRepair == true then
addon.settings.autoRepair = false
UIErrorsFrame:AddMessage("Auto-Repair: Off", 1, 0, 0, 53, 3);
elseif addon.settings.autoRepair == false then
addon.settings.autoRepair = true
UIErrorsFrame:AddMessage("Auto-Repair: On", 0, 1, 0, 53, 3);
end
self.tooltip = nil
GUI_DashDurability_OnEnter(self)
end
if button == 'RightButton' then
if addon.settings.GuildRepair == true then
addon.settings.GuildRepair = false
UIErrorsFrame:AddMessage("Guild-Repair: Off", 1, 0, 0, 53, 3);
elseif addon.settings.GuildRepair == false then
addon.settings.GuildRepair = true
UIErrorsFrame:AddMessage("Guild-Repair: On", 0, 1, 0, 53, 3);
end
self.tooltip = nil
GUI_DashDurability_OnEnter(self)
end
end)
-- Inventory --
GUI_DashInventory:SetAttribute('_onclick', [[
if button == 'LeftButton' then
control:CallMethod("ToggleBags")
else
local bagBar = self:GetFrameRef("bagBar")
if bagBar:IsVisible() then
bagBar:Hide()
else
bagBar:Show()
end
end
]])
function GUI_DashInventory:ToggleBags()
if Baggins then
Baggins:ToggleBackpack()
else
if ContainerFrame1:IsShown() then
CloseAllBags()
else
OpenAllBags()
end
end
end
-- Social --
GUI_DashSocial:SetScript('OnClick', function(self)
ToggleFriendsFrame()
end)
-- Guild --
GUI_DashGuild:SetScript('OnClick', function(self, button)
ToggleGuildFrame()
end)
-- Quest --
GUI_DashQuest:SetScript('OnClick', function(self)
ToggleFrame(QuestLogFrame)
end)
--[[-----------------------------------------------------------------------------
OnEvent Functions
-------------------------------------------------------------------------------]]
-- Mail --
local function GUI_DashMail_Init(self, event)
GUI_DashMail.text:SetText(addon.settings.CurrentMail)
end
local function GUI_DashMail_OnEvent(self, event)
if HasNewMail() then
GUI_DashMail.text:SetTextColor(0, 1, 0)
GUI_DashMail.texture:SetVertexColor(0, 1, 0)
else
GUI_DashMail.text:SetTextColor(1, 1, 1)
GUI_DashMail.texture:SetVertexColor(1, 1, 1)
end
if event == "MAIL_INBOX_UPDATE" then
GUI_DashMail.text:SetText(GetInboxNumItems())
addon.settings.CurrentMail = GetInboxNumItems()
end
if GUI_DashMail.tooltip then
MinimapMailFrameUpdate()
end
end
-- Quests --
local function GUI_DashQuest_OnEvent(self, event)
local numEntries, numQuests = GetNumQuestLogEntries()
GUI_DashQuest.text:SetFormattedText("%s/25", numQuests)
end
-- Durability --
function GUI_DashDurability:UpdatePercent()
local tPer = floor(pEquipDura.min / pEquipDura.max * 100)
GUI_DashDurability.text:SetText(addon:DurColor(tPer)..tPer.."%|r");
end
local function GUI_DashDurability_OnEvent(self, event)
GUI_DashDurability:GetDurabilityInfo()
GUI_DashDurability:UpdatePercent()
end
addon.RegisterEvent("DashBoard-AutoRepair", 'MERCHANT_SHOW', function()
if addon.settings.autoRepair and CanMerchantRepair() then
if addon.settings.GuildRepair == true then
local cost = GetRepairAllCost()
if cost > 0 and cost <= GetMoney() then
RepairAllItems(1)
print("|cff33ff99" .. addonName .. "|r: Repaired all equipment for " .. addon:MoneyToString(cost) .."(Guild Funds)")
end
else
local cost = GetRepairAllCost()
if cost > 0 and cost <= GetMoney() then
RepairAllItems()
print("|cff33ff99" .. addonName .. "|r: Repaired all equipment for " .. addon:MoneyToString(cost) .. "(Your Funds)")
end
end
end
end)
-- Inventory --
local function GUI_DashInventory_OnEvent(self, event)
local free, total = 0, 0
for bag = 0, NUM_BAG_FRAMES do
free = free + GetContainerNumFreeSlots(bag)
total = total + GetContainerNumSlots(bag)
end
local freePercent = floor(free / total * 100 + 0.5)
local BAG_SPACE_MID_RANGE = (total / 2)
GUI_DashInventory.text:SetTextColor(1 - min(max(freePercent - BAG_SPACE_MID_RANGE, 0) / BAG_SPACE_MID_RANGE, 1), min(freePercent / BAG_SPACE_MID_RANGE, 1), 0)
GUI_DashInventory.text:SetFormattedText("%s/%s", free, total)
end
GUI_DashInventory:SetScript('OnEvent', function(self)
GUI_DashInventory_OnEvent()
end)
-- Money --
local LDBObj
local function GUI_DashMoney_OnEvent(self, event)
GUI_DashMoney:SetWidth(0)
GUI_DashMoney.text:SetText(addon:MoneyToString(GetMoney(), true))
GUI_DashMoney:SetWidth(GUI_DashMoney.text:GetStringWidth())
end
local function GUI_DashMoney_Init(self, event)
if type(addon.settings.money) ~= 'number' then
addon.settings.money = GetMoney() or 0
end
addon:RegisterDefaultSetting("money", 0)
if LDBObj then
LDBObj.text = addon:MoneyToString(addon.settings.money, true)
end
end
-- Clock --
local function GetInvites()
if CalendarGetNumPendingInvites() ~= 0 then
clock.texture:Show()
else
clock.texture:Hide()
end
if CalendarFrame and CalendarFrame:IsShown() then
clock.texture:Hide()
end
end
local function GetGuildEvents()
local numguildEvents = CalendarGetNumGuildEvents()
local currentweekday, currentmonth, currentday, currentyear = CalendarGetDate()
for eventIndex = 1, numguildEvents do
local month, day, weekday, hour, minute, eventType, title, calendarType, textureName = CalendarGetGuildEventInfo(eventIndex)
local monthOffset = month - currentmonth
local numEvents = CalendarGetNumDayEvents(monthOffset, day)
if numEvents ~= 0 then
clock.texture:Show()
else
clock.texture:Hide()
end
end
if CalendarFrame and CalendarFrame:IsShown() then
clock.texture:Hide()
end
end
local function GUI_DashClock_Init(self, event)
local _, todaysmonth, _, todaysyear = CalendarGetDate()
CalendarSetAbsMonth(todaysmonth, todaysyear)
OpenCalendar()
GetInvites()
GetGuildEvents()
end
local function GUI_DashClock_OnEvent(self, event)
GetInvites()
GetGuildEvents()
end
-- Social/Friends --
local function GUI_DashSocial_OnEvent(self, event)
local numberOfFriends, onlineFriends = GetNumFriends()
local BNnumberOfFriends, BNonlineFriends = BNGetNumFriends()
if onlineFriends > 0 then
GUI_DashSocial.text:SetTextColor(0, 1, 0)
elseif BNonlineFriends > 0 then
GUI_DashSocial.text:SetTextColor(0, 1, 0)
else
GUI_DashSocial.text:SetTextColor(1, 1, 1)
end
GUI_DashSocial.text:SetText(onlineFriends + BNonlineFriends)
if GUI_DashSocial.tooltip then
FriendsList_Update()
end
end
-- Guild Frame --
local function GUI_DashGuild_OnEvent(self, event)
GuildRoster()
local total = GetNumGuildMembers(true)
local onlineTotal = 0
local offlineTotal = 0
for i = 1, total do
local name, rank, rankIndex, level, class, zone, note, officernote, online, status, classFileName = GetGuildRosterInfo(i)
if online and name ~= GetUnitName("player") then
onlineTotal = onlineTotal + 1
else
offlineTotal = offlineTotal + 1
end
end
if onlineTotal > 0 then
GUI_DashGuild.text:SetTextColor(0, 1, 0)
else
GUI_DashGuild.text:SetTextColor(1, 1, 1)
end
GUI_DashGuild.text:SetText(onlineTotal)
if IsInGuild() == nil then
GUI_DashGuild.texture1:Show()
GUI_DashGuild.texture2:Show()
else
GUI_DashGuild.texture1:Hide()
GUI_DashGuild.texture2:Hide()
end
end
--[[-----------------------------------------------------------------------------
DashBoard Layout
-------------------------------------------------------------------------------]]
function addon:DashLayout()
if not addon.settings.dashOnTop or addon.settings.dashOnTop == false then
DashBoardFrame:ClearAllPoints()
DashBoardFrame:SetPoint('TOPRIGHT', addon.skin, 'TOPRIGHT', -20, -11)
DashBoardFrame:SetHeight(200)
DashBoardFrame:SetWidth(500)
DBFbg:SetTexture(0, 0, 0, 0)
clock:SetPoint('TOPRIGHT', DashBoardFrame, 'TOPRIGHT', 0, 0)
GUI_DashSocial:SetPoint('RIGHT', clock, 'LEFT', 0, 0)
GUI_DashGuild:SetPoint('RIGHT', GUI_DashSocial, 'LEFT', 0, 0)
GUI_DashQuest:SetPoint('RIGHT', GUI_DashGuild, 'LEFT', -5, 0)
GUI_DashInventory:SetPoint('RIGHT', GUI_DashQuest, 'LEFT')
GUI_DashMail:ClearAllPoints()
GUI_DashMail:SetPoint('TOPRIGHT', clock, 'BOTTOMRIGHT', 0, -2)
if addon.settings.speedShow == true then
GUI_DashSpeed:Show()
GUI_DashSpeed:SetPoint('RIGHT', GUI_DashMail, 'LEFT', 0, 0)
GUI_DashDurability:SetPoint('RIGHT', GUI_DashSpeed, 'LEFT', -5, 0)
GUI_DashMoney:SetPoint('RIGHT', GUI_DashDurability, 'LEFT')
elseif addon.settings.speedShow == false then
GUI_DashSpeed:Hide()
GUI_DashDurability:SetPoint('RIGHT', GUI_DashMail, 'LEFT', -5, 0)
GUI_DashMoney:SetPoint('RIGHT', GUI_DashDurability, 'LEFT')
end
if addon.settings.latencyShow == true then
GUI_DashLatency:Show()
GUI_DashFPS:Show()
GUI_DashLatency:ClearAllPoints()
GUI_DashLatency:SetPoint('TOPRIGHT', GUI_DashMail, 'BOTTOMRIGHT', 0, 0)
GUI_DashFPS:SetPoint('RIGHT', GUI_DashLatency, 'LEFT')
elseif addon.settings.latencyShow == false then
GUI_DashLatency:Hide()
GUI_DashFPS:Hide()
end
else
DashBoardFrame:ClearAllPoints()
DashBoardFrame:SetPoint('TOP', UIParent, 'TOP', 0, 0)
DashBoardFrame:SetHeight(20)
DBFbg:SetTexture(0, 0, 0, .7)
clock:SetPoint('TOPRIGHT', DashBoardFrame, 'TOPRIGHT', 0, 0)
GUI_DashGuild:SetPoint('RIGHT', GUI_DashSocial, 'LEFT', 0, 0)
GUI_DashQuest:SetPoint('RIGHT', GUI_DashGuild, 'LEFT', -5, 0)
GUI_DashDurability:SetPoint('RIGHT', GUI_DashQuest, 'LEFT', -5, 0)
GUI_DashInventory:SetPoint('RIGHT', GUI_DashDurability, 'LEFT')
GUI_DashMoney:SetPoint('RIGHT', GUI_DashInventory, 'LEFT')
if addon.settings.latencyShow == true and addon.settings.speedShow == false then
DashBoardFrame:SetWidth(570)
elseif addon.settings.latencyShow == false and addon.settings.speedShow == true then
DashBoardFrame:SetWidth(520)
elseif addon.settings.latencyShow == false and addon.settings.speedShow == false then
DashBoardFrame:SetWidth(475)
else
DashBoardFrame:SetWidth(620)
end
if addon.settings.speedShow == true then
GUI_DashSpeed:Show()
GUI_DashSpeed:SetPoint('RIGHT', GUI_DashMail, 'LEFT', 0, 0)
GUI_DashSocial:SetPoint('RIGHT', GUI_DashSpeed, 'LEFT', 0, 0)
elseif addon.settings.speedShow == false then
GUI_DashSpeed:Hide()
GUI_DashSocial:SetPoint('RIGHT', GUI_DashMail, 'LEFT', -5, 0)
end
if addon.settings.latencyShow == true then
GUI_DashLatency:Show()
GUI_DashFPS:Show()
GUI_DashLatency:ClearAllPoints()
GUI_DashLatency:SetPoint('RIGHT', clock, 'LEFT', 0, 0)
GUI_DashFPS:SetPoint('RIGHT', GUI_DashLatency, 'LEFT')
GUI_DashMail:ClearAllPoints()
GUI_DashMail:SetPoint('RIGHT', GUI_DashFPS, 'LEFT', 0, -2)
elseif addon.settings.latencyShow == false then
GUI_DashMail:ClearAllPoints()
GUI_DashMail:SetPoint('RIGHT', clock, 'LEFT', 0, -2)
GUI_DashLatency:Hide()
GUI_DashFPS:Hide()
end
end
-- set scale
DashBoardFrame:SetScale(addon.settings.dashboardScale)
end
addon.RegisterEvent("DashBoard-Initialize", 'PLAYER_ENTERING_WORLD', function(self, event)
addon.UnregisterEvent(self, event)
addon:DashLayout()
GUI_DashMoney_Init(event)
GUI_DashMoney_OnEvent()
GUI_DashClock_Init(event)
GUI_DashGuild_OnEvent()
GUI_DashSocial_OnEvent()
GUI_DashInventory_OnEvent()
GUI_DashMail_Init()
GUI_DashMail_OnEvent(event)
GUI_DashQuest_OnEvent()
GUI_DashDurability_OnEvent()
end)
addon.RegisterEvents("DashBoardFrame", GUI_DashMail_OnEvent, 'MAIL_INBOX_UPDATE', 'UPDATE_PENDING_MAIL')
addon.RegisterEvents("DashBoardFrame", GUI_DashQuest_OnEvent, 'QUEST_LOG_UPDATE')
addon.RegisterEvents("DashBoardFrame", GUI_DashDurability_OnEvent, 'UPDATE_INVENTORY_ALERTS', 'UPDATE_INVENTORY_DURABILITY', 'UNIT_INVENTORY_CHANGED', 'MERCHANT_CLOSED', 'PLAYER_DEAD', 'PLAYER_REGEN_ENABLED')
addon.RegisterEvents("DashBoardFrame", GUI_DashInventory_OnEvent, 'UNIT_INVENTORY_CHANGED', 'BAG_UPDATE')
addon.RegisterEvents("DashBoardFrame", GUI_DashMoney_OnEvent, 'PLAYER_MONEY')
addon.RegisterEvents("DashBoardFrame", GUI_DashClock_OnEvent, 'CALENDAR_UPDATE_PENDING_INVITES', 'CALENDAR_UPDATE_EVENT_LIST')
addon.RegisterEvents("DashBoardFrame", GUI_DashSocial_OnEvent, 'FRIENDLIST_UPDATE', 'BN_FRIEND_ACCOUNT_ONLINE', 'BN_FRIEND_ACCOUNT_OFFLINE')
addon.RegisterEvents("DashBoardFrame", GUI_DashGuild_OnEvent, 'GUILD_ROSTER_UPDATE', 'PLAYER_GUILD_UPDATE')
--[[-----------------------------------------------------------------------------
Money tooltip overrides
-------------------------------------------------------------------------------]]
addon.RegisterEvent("DashBoard-MoneyTooltip-Update", 'PLAYER_MONEY', function()
local money = GetMoney()
local diff = money - addon.settings.money
if diff > 0 then
moneyGained = moneyGained + diff
else
moneySpent = moneySpent - diff
end
addon.settings.money = money
if LDBObj then
LDBObj.text = addon:MoneyToString(money, true)
end
end)
-- Simple bag frame support:
-- true means multiple frames and reanchoring
-- false means a single frame
local bagNames = {
['ContainerFrame1MoneyFrame'] = true, -- Blizzard Backpack
['MerchantMoneyFrame'] = true, -- Blizzard Merchant Frame
['OneBagFrameMoneyFrame'] = true, -- OneBag
['BagginsMoneyFrame'] = false, -- Baggins
['CombuctorFrame1MoneyFrameClick'] = false, -- Combuctor Bag
['CombuctorFrame2MoneyFrameClick'] = false, -- Combuctor Bank
['ARKINV_Frame1StatusGold'] = true, -- ArkInventory Bag
['ARKINV_Frame3StatusGold'] = true, -- ArkInventory Bank
['BBCont1_1MoneyFrame'] = true, -- BaudBag bag
['BBCont2_1MoneyFrame'] = true, -- BaudBag bank
['FBoH_BagViewFrame_1_GoldFrame'] = true, -- FBoH
['FBoH_BagViewFrame_2_GoldFrame'] = true, -- FBoH
['BagnonMoney0'] = true, -- Bagnon
['BagnonMoney1'] = true, -- Bagnon
['TokenFrameMoneyFrame'] = true, -- GUI
}
local cargBagsHooked, frames = false, {}
addon.RegisterEvent("DashBoard-MoneyTooltipHooks", 'ADDON_LOADED', function(self, event)
if cargBags and not cargBagsHooked then
cargBagsHooked = true
for _, object in pairs(cargBags.Objects) do
if object.Money then
bagNames[object.Money:GetName()] = true
end
end
end
for name, hasCoins in pairs(bagNames) do
if _G[name] then
frames[#frames + 1] = _G[name]
if hasCoins then
frames[#frames + 1] = _G[name .. 'CopperButton']
frames[#frames + 1] = _G[name .. 'SilverButton']
frames[#frames + 1] = _G[name .. 'GoldButton']
_G[name .. 'CopperButton'].tooltipAnchor = _G[name]
_G[name .. 'SilverButton'].tooltipAnchor = _G[name]
_G[name .. 'GoldButton'].tooltipAnchor = _G[name]
end
bagNames[name] = nil
end
end
for index = #frames, 1, -1 do
local frame = frames[index]
frame:EnableMouse(true)
frame:HookScript('OnEnter', GUI_DashMoney_OnEnter)
frame:HookScript('OnLeave', addon.HideTooltip)
frames[index] = nil
end
if not LDBObj and LibStub and LibStub('LibDataBroker-1.1', true) then
LDBObj = LibStub('LibDataBroker-1.1'):NewDataObject(addonName .. "Money", {
type = 'data source',
label = addonName .. "Money",
OnEnter = OnEnter,
OnLeave = addon.HideTooltip
})
end
if next(bagNames) then return end
addon.UnregisterEvent(self, event)
end)