TITAN_XP_ID = "XP"; TITAN_XP_FREQUENCY = 1; function TitanPanelXPButton_OnLoad() this.registry = { id = TITAN_XP_ID, builtIn = 1, version = TITAN_VERSION, menuText = TITAN_XP_MENU_TEXT, buttonTextFunction = "TitanPanelXPButton_GetButtonText", tooltipTitle = TITAN_XP_TOOLTIP, tooltipTextFunction = "TitanPanelXPButton_GetTooltipText", frequency = TITAN_XP_FREQUENCY, iconWidth = 16, savedVariables = { ShowXPPerHourSession = 1, ShowIcon = 1, ShowLabelText = 1, } }; this:RegisterEvent("PLAYER_ENTERING_WORLD"); this:RegisterEvent("PLAYER_XP_UPDATE"); this:RegisterEvent("PLAYER_LEVEL_UP"); end function TitanPanelXPButton_OnShow() TitanPanelXPButton_SetIcon(); end function TitanPanelXPButton_OnEvent(arg1, arg2) if (event == "PLAYER_ENTERING_WORLD") then if (not this.initXP) then this.initXP = UnitXP("player"); this.accumXP = 0; this.sessionXP = 0; this.startSessionTime = 0; end elseif (event == "PLAYER_XP_UPDATE") then if (not this.initXP) then this.initXP = UnitXP("player"); this.accumXP = 0; this.sessionXP = 0; this.startSessionTime = 0; end this.sessionXP = UnitXP("player") - this.initXP + this.accumXP; elseif (event == "PLAYER_LEVEL_UP") then this.accumXP = this.accumXP + UnitXPMax("player") - this.initXP; this.initXP = 0; end end function TitanPanelXPButton_GetButtonText(id) local button, id = TitanUtils_GetButton(id, true); local totalXP = UnitXPMax("player"); local currentXP = UnitXP("player"); local toLevelXP = totalXP - currentXP; local sessionXP = button.sessionXP; local xpPerHour, xpPerHourText, timeToLevel, timeToLevelText; local sessionTime = TitanUtils_GetSessionTime() - button.startSessionTime; local levelTime = TitanUtils_GetLevelTime(); if (levelTime) then if (TitanGetVar(TITAN_XP_ID, "ShowXPPerHourSession")) then xpPerHour = sessionXP / sessionTime * 3600; timeToLevel = TitanUtils_Ternary((sessionXP == 0), -1, toLevelXP / sessionXP * sessionTime); xpPerHourText = format(TITAN_XP_FORMAT, xpPerHour); timeToLevelText = TitanUtils_GetEstTimeText(timeToLevel) return TITAN_XP_BUTTON_LABEL_XPHR_SESSION, TitanUtils_GetHighlightText(xpPerHourText), TITAN_XP_BUTTON_LABEL_TOLEVEL_TIME_SESSION, TitanUtils_GetHighlightText(timeToLevelText); else xpPerHour = currentXP / levelTime * 3600; timeToLevel = TitanUtils_Ternary((currentXP == 0), -1, toLevelXP / currentXP * levelTime); xpPerHourText = format(TITAN_XP_FORMAT, xpPerHour); timeToLevelText = TitanUtils_GetEstTimeText(timeToLevel); return TITAN_XP_BUTTON_LABEL_XPHR_LEVEL, TitanUtils_GetHighlightText(xpPerHourText), TITAN_XP_BUTTON_LABEL_TOLEVEL_TIME_LEVEL, TitanUtils_GetHighlightText(timeToLevelText); end end end function TitanPanelXPButton_GetTooltipText() local totalTime = TitanUtils_GetTotalTime(); local sessionTime = TitanUtils_GetSessionTime() - this.startSessionTime; local levelTime = TitanUtils_GetLevelTime(); local totalXP = UnitXPMax("player"); local currentXP = UnitXP("player"); local toLevelXP = totalXP - currentXP; local currentXPPercent = currentXP / totalXP * 100; local toLevelXPPercent = toLevelXP / totalXP * 100; local xpPerHourThisLevel = currentXP / levelTime * 3600; local xpPerHourThisSession = this.sessionXP / sessionTime * 3600; local estTimeToLevelThisLevel = TitanUtils_Ternary((currentXP == 0), -1, toLevelXP / currentXP * levelTime); local estTimeToLevelThisSession = TitanUtils_Ternary((this.sessionXP == 0), -1, toLevelXP / this.sessionXP * sessionTime); return "".. TITAN_XP_TOOLTIP_TOTAL_TIME.."\t"..TitanUtils_GetHighlightText(TitanUtils_GetAbbrTimeText(totalTime)).."\n".. TITAN_XP_TOOLTIP_LEVEL_TIME.."\t"..TitanUtils_GetHighlightText(TitanUtils_GetAbbrTimeText(levelTime)).."\n".. TITAN_XP_TOOLTIP_SESSION_TIME.."\t"..TitanUtils_GetHighlightText(TitanUtils_GetAbbrTimeText(sessionTime)).."\n".. "\n".. TITAN_XP_TOOLTIP_TOTAL_XP.."\t"..TitanUtils_GetHighlightText(totalXP).."\n".. TITAN_XP_TOOLTIP_LEVEL_XP.."\t"..TitanUtils_GetHighlightText(format(TITAN_XP_PERCENT_FORMAT, currentXP, currentXPPercent)).."\n".. TITAN_XP_TOOLTIP_TOLEVEL_XP.."\t"..TitanUtils_GetHighlightText(format(TITAN_XP_PERCENT_FORMAT, toLevelXP, toLevelXPPercent)).."\n".. TITAN_XP_TOOLTIP_SESSION_XP.."\t"..TitanUtils_GetHighlightText(this.sessionXP).."\n".. "\n".. TITAN_XP_TOOLTIP_XPHR_LEVEL.."\t"..TitanUtils_GetHighlightText(format(TITAN_XP_FORMAT, xpPerHourThisLevel)).."\n".. TITAN_XP_TOOLTIP_XPHR_SESSION.."\t"..TitanUtils_GetHighlightText(format(TITAN_XP_FORMAT, xpPerHourThisSession)).."\n".. TITAN_XP_TOOLTIP_TOLEVEL_LEVEL.."\t"..TitanUtils_GetHighlightText(TitanUtils_GetAbbrTimeText(estTimeToLevelThisLevel)).."\n".. TITAN_XP_TOOLTIP_TOLEVEL_SESSION.."\t"..TitanUtils_GetHighlightText(TitanUtils_GetAbbrTimeText(estTimeToLevelThisSession)); end function TitanPanelXPButton_SetIcon() local icon = TitanPanelXPButtonIcon; local factionGroup, factionName = UnitFactionGroup("player"); if ( factionGroup == "Alliance" ) then icon:SetTexture("Interface\\TargetingFrame\\UI-PVP-Alliance"); icon:SetTexCoord(0.046875, 0.609375, 0.03125, 0.59375); elseif ( factionGroup == "Horde" ) then icon:SetTexture("Interface\\TargetingFrame\\UI-PVP-Horde"); icon:SetTexCoord(0.046875, 0.609375, 0.015625, 0.578125); else icon:SetTexture("Interface\\TargetingFrame\\UI-PVP-FFA"); icon:SetTexCoord(0.046875, 0.609375, 0.03125, 0.59375); end end function TitanPanelRightClickMenu_PrepareXPMenu() TitanPanelRightClickMenu_AddTitle(TitanPlugins[TITAN_XP_ID].menuText); local info = {}; info.text = TITAN_XP_MENU_SHOW_XPHR_THIS_SESSION; info.func = TitanPanelXPButton_ShowXPPerHourSession; info.checked = TitanGetVar(TITAN_XP_ID, "ShowXPPerHourSession"); UIDropDownMenu_AddButton(info); info = {}; info.text = TITAN_XP_MENU_SHOW_XPHR_THIS_LEVEL; info.func = TitanPanelXPButton_ShowXPPerHourLevel info.checked = TitanUtils_Toggle(TitanGetVar(TITAN_XP_ID, "ShowXPPerHourSession")); UIDropDownMenu_AddButton(info); TitanPanelRightClickMenu_AddSpacer(); TitanPanelRightClickMenu_AddCommand(TITAN_XP_MENU_RESET_SESSION, TITAN_XP_ID, "TitanPanelXPButton_ResetSession"); TitanPanelRightClickMenu_AddSpacer(); TitanPanelRightClickMenu_AddToggleIcon(TITAN_XP_ID); TitanPanelRightClickMenu_AddToggleLabelText(TITAN_XP_ID); TitanPanelRightClickMenu_AddSpacer(); TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_XP_ID, TITAN_PANEL_MENU_FUNC_HIDE); end function TitanPanelXPButton_ShowXPPerHourSession() TitanSetVar(TITAN_XP_ID, "ShowXPPerHourSession", 1); TitanPanelButton_UpdateButton(TITAN_XP_ID); end function TitanPanelXPButton_ShowXPPerHourLevel() TitanSetVar(TITAN_XP_ID, "ShowXPPerHourSession", nil); TitanPanelButton_UpdateButton(TITAN_XP_ID); end function TitanPanelXPButton_ResetSession() TitanPanelXPButton.initXP = UnitXP("player"); TitanPanelXPButton.accumXP = 0; TitanPanelXPButton.sessionXP = 0; TitanPanelXPButton.startSessionTime = TitanUtils_GetSessionTime(); end