Adds DPSMate_CLEUAdapter.lua -- replaces DPSMate's string-parsing CHAT_MSG_* system with structured COMBAT_LOG_EVENT data from our DLL. Adapter maps CLEU subevents directly to DPSMate.DB API calls: DamageDone, DamageTaken, EnemyDamage, Healing, HealingTaken, DeathHistory, Kick, Dispels, BuildBuffs, CCBreaker, etc. Eliminates all strfind pattern matching from the combat log path. Toggle: /dpscleu (on/off/status) Benchmark: /dpsbench -- always-on per-combat A/B profiling. Resets at combat start, reports at combat end, flips mode for next combat. Reports events, total ms, us/event, GC delta, and percentage comparison between CLEU and original modes. Starts in CLEU mode by default.
2212 lines
84 KiB
Lua
2212 lines
84 KiB
Lua
-- Events
|
|
DPSMate.Options:RegisterEvent("PARTY_MEMBERS_CHANGED")
|
|
DPSMate.Options:RegisterEvent("RAID_ROSTER_UPDATE")
|
|
DPSMate.Options:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
|
|
-- Global Variables
|
|
DPSMate.Options.fonts = {
|
|
["FRIZQT"] = UNIT_NAME_FONT,
|
|
["ARIALN"] = "Fonts\\ARIALN.TTF",
|
|
["MORPHEUS"] = "Fonts\\MORPHEUS.TTF",
|
|
["visitor2"] = "Interface\\AddOns\\DPSMate\\fonts\\visitor2.TTF",
|
|
["Accidental Presidency"] = "Interface\\AddOns\\DPSMate\\fonts\\Accidental Presidency.TTF",
|
|
["Enigma__2"] = "Interface\\AddOns\\DPSMate\\fonts\\Enigma__2.TTF",
|
|
["VeraSe"] = "Interface\\AddOns\\DPSMate\\fonts\\VeraSe.TTF",
|
|
["AlteHaas"] = "Interface\\AddOns\\DPSMate\\fonts\\AlteHaas.TTF",
|
|
["CaviarDreams"] = "Interface\\AddOns\\DPSMate\\fonts\\CaviarDreams.TTF",
|
|
["Expressway"] = "Interface\\AddOns\\DPSMate\\fonts\\Expressway.TTF",
|
|
["ExpresswayBold"] = "Interface\\AddOns\\DPSMate\\fonts\\ExpresswayBold.TTF",
|
|
["Roboto"] = "Interface\\AddOns\\DPSMate\\fonts\\Roboto.TTF",
|
|
["The Bad Times"] = "Interface\\AddOns\\DPSMate\\fonts\\The Bad Times.TTF",
|
|
["Vegur"] = "Interface\\AddOns\\DPSMate\\fonts\\Vegur.TTF",
|
|
["Mandarin1"] = "Interface\\AddOns\\DPSMate\\fonts\\Mandarin1.TTF",
|
|
["Mandarin2"] = "Interface\\AddOns\\DPSMate\\fonts\\Mandarin2.TTF",
|
|
}
|
|
DPSMate.Options.fontflags = {
|
|
["None"] = "NONE",
|
|
["Outline"] = "OUTLINE",
|
|
["Monochrome"] = "MONOCHROME",
|
|
["Outlined monochrome"] = "OUTLINE, MONOCHROME",
|
|
["Tick outlined"] = "THICKOUTLINE",
|
|
}
|
|
DPSMate.Options.statusbars = {
|
|
["Aluminium"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\Aluminium",
|
|
["Armory"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\Armory",
|
|
["BantoBar"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\BantoBar",
|
|
["Glaze2"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\Glaze2",
|
|
["Gloss"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\Gloss",
|
|
["Graphite"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\Graphite",
|
|
["Grid"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\Grid",
|
|
["Healbot"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\Healbot",
|
|
["LiteStep"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\LiteStep",
|
|
["Minimalist"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\Minimalist",
|
|
["normTex"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\normTex",
|
|
["Otravi"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\Otravi",
|
|
["Outline"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\Outline",
|
|
["Perl"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\Perl",
|
|
["Round"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\Round",
|
|
["Smooth"] = "Interface\\AddOns\\DPSMate\\images\\statusbar\\Smooth",
|
|
}
|
|
DPSMate.Options.bgtexture = {
|
|
["Solid Background"] = "Interface\\CHATFRAME\\CHATFRAMEBACKGROUND",
|
|
["UI-Tooltip-Background"] = "Interface\\Tooltips\\UI-Tooltip-Background",
|
|
}
|
|
DPSMate.Options.stratas = {
|
|
[1] = "BACKGROUND",
|
|
[2] = "LOW",
|
|
[3] = "HIGH",
|
|
}
|
|
DPSMate.Options.bordertextures = {
|
|
["UI-Tooltip-Border"] = "Interface\\Tooltips\\UI-Tooltip-Border",
|
|
}
|
|
DPSMate.Options.Dewdrop = AceLibrary("DPSDewdrop-2.0")
|
|
DPSMate.Options.graph = AceLibrary("DPSGraph-1.0")
|
|
DPSMate.Options.Options = {
|
|
[1] = {
|
|
type = 'group',
|
|
args = {
|
|
},
|
|
handler = DPSMate.Options,
|
|
},
|
|
[2] = {
|
|
type = 'group',
|
|
args = {
|
|
total = {
|
|
order = 10,
|
|
type = 'toggle',
|
|
name = DPSMate.L["total"],
|
|
desc = DPSMate.L["totalmode"],
|
|
get = function() return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["options"][2]["total"] end,
|
|
set = function() DPSMate.Options:ToggleDrewDrop(2, "total", DPSMate.Options.Dewdrop:GetOpenedParent()) end,
|
|
},
|
|
currentFight = {
|
|
order = 20,
|
|
type = 'toggle',
|
|
name = DPSMate.L["mcurrent"],
|
|
desc = DPSMate.L["currentmode"],
|
|
get = function() return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["options"][2]["currentfight"] end,
|
|
set = function() DPSMate.Options:ToggleDrewDrop(2, "currentfight", DPSMate.Options.Dewdrop:GetOpenedParent()) end,
|
|
},
|
|
},
|
|
handler = DPSMate.Options,
|
|
},
|
|
[3] = {
|
|
type = 'group',
|
|
args = {
|
|
test = {
|
|
order = 5,
|
|
type = 'toggle',
|
|
name = DPSMate.L["testmode"],
|
|
desc = DPSMate.L["testmodedesc"],
|
|
get = function() return DPSMate.Options.TestMode end,
|
|
set = function() DPSMate.Options:ActivateTestMode(); DPSMate.Options.Dewdrop:Close() end,
|
|
},
|
|
report = {
|
|
order = 10,
|
|
type = 'execute',
|
|
name = DPSMate.L["report"],
|
|
desc = DPSMate.L["reportsegment"],
|
|
func = function() DPSMate_Report:Show(); DPSMate.Options.Dewdrop:Close() end,
|
|
},
|
|
reset = {
|
|
order = 11,
|
|
type = 'execute',
|
|
name = DPSMate.L["reset"],
|
|
desc = DPSMate.L["resetdesc"],
|
|
func = function() DPSMate_PopUp:Show(); DPSMate.Options.Dewdrop:Close() end,
|
|
},
|
|
realtime = {
|
|
order = 12,
|
|
type = 'group',
|
|
name = DPSMate.L["mrealtime"],
|
|
desc = DPSMate.L["mrealtimedesc"],
|
|
args = {
|
|
damage = {
|
|
order = 1,
|
|
type = 'execute',
|
|
name = DPSMate.L["damagedone"],
|
|
desc = DPSMate.L["realtimedmgdone"],
|
|
func = function() DPSMate.Options:SelectRealtime(DPSMate.Options.Dewdrop:GetOpenedParent(), "damage") end
|
|
},
|
|
dmgt = {
|
|
order = 2,
|
|
type = 'execute',
|
|
name = DPSMate.L["damagetaken"],
|
|
desc = DPSMate.L["realtimedmgtaken"],
|
|
func = function() DPSMate.Options:SelectRealtime(DPSMate.Options.Dewdrop:GetOpenedParent(), "dmgt") end
|
|
},
|
|
heal = {
|
|
order = 3,
|
|
type = 'execute',
|
|
name = DPSMate.L["healing"],
|
|
desc = DPSMate.L["realtimehealing"],
|
|
func = function() DPSMate.Options:SelectRealtime(DPSMate.Options.Dewdrop:GetOpenedParent(), "heal") end
|
|
},
|
|
eheal = {
|
|
order = 4,
|
|
type = 'execute',
|
|
name = DPSMate.L["effectivehealing"],
|
|
desc = DPSMate.L["realtimeehealing"],
|
|
func = function() DPSMate.Options:SelectRealtime(DPSMate.Options.Dewdrop:GetOpenedParent(), "eheal") end
|
|
}
|
|
}
|
|
},
|
|
blank1 = {
|
|
order = 20,
|
|
type = 'header',
|
|
},
|
|
startnewsegment = {
|
|
order = 25,
|
|
type = 'execute',
|
|
name = DPSMate.L["newsegment"],
|
|
desc = DPSMate.L["newsegmentdesc"],
|
|
func = function() DPSMate.Options:NewSegment("New segment"); DPSMate.Options.Dewdrop:Close() end,
|
|
},
|
|
deletesegment = {
|
|
order = 30,
|
|
type = 'group',
|
|
name = DPSMate.L["removesegment"],
|
|
desc = DPSMate.L["removesegmentdesc"],
|
|
args = {},
|
|
},
|
|
purgeoldsegments = {
|
|
order = 31,
|
|
type = 'execute',
|
|
name = DPSMate.L["purgeoldsegments"],
|
|
desc = DPSMate.L["purgeoldsegmentsdesc"],
|
|
func = function() DPSMate.Options:PurgeOldSegments() end,
|
|
},
|
|
blank2 = {
|
|
order = 32,
|
|
type = 'header',
|
|
},
|
|
showAll = {
|
|
order = 32,
|
|
type = 'execute',
|
|
name = DPSMate.L["showAll"],
|
|
desc = DPSMate.L["showAllDesc"],
|
|
func = function() for _, val in DPSMateSettings["windows"] do DPSMate.Options:Show(getglobal("DPSMate_"..val["name"])) end; DPSMate.Options.Dewdrop:Close() end,
|
|
},
|
|
hideAll = {
|
|
order = 33,
|
|
type = 'execute',
|
|
name = DPSMate.L["hideAll"],
|
|
desc = DPSMate.L["hideAllDesc"],
|
|
func = function() for _, val in DPSMateSettings["windows"] do DPSMate.Options:Hide(getglobal("DPSMate_"..val["name"])) end; DPSMate.Options.Dewdrop:Close() end,
|
|
},
|
|
showwindow = {
|
|
order = 36,
|
|
type = 'group',
|
|
name = DPSMate.L["showwindow"],
|
|
desc = DPSMate.L["showwindowdesc"],
|
|
args = {},
|
|
},
|
|
hidewindow = {
|
|
order = 37,
|
|
type = 'group',
|
|
name = DPSMate.L["hidewindow"],
|
|
desc = DPSMate.L["hidewindowdesc"],
|
|
args = {},
|
|
},
|
|
blank3 = {
|
|
order = 38,
|
|
type = 'header',
|
|
},
|
|
lock = {
|
|
order = 40,
|
|
type = 'toggle',
|
|
name = DPSMate.L["lock"],
|
|
desc = DPSMate.L["lockdesc"],
|
|
get = function() return DPSMateSettings["lock"] end,
|
|
set = function() DPSMate.Options:Lock(); DPSMate.Options.Dewdrop:Close() end,
|
|
},
|
|
unlock = {
|
|
order = 50,
|
|
type = 'toggle',
|
|
name = DPSMate.L["unlock"],
|
|
desc = DPSMate.L["unlock"],
|
|
get = function() return not DPSMateSettings["lock"] end,
|
|
set = function() DPSMate.Options:Unlock(); DPSMate.Options.Dewdrop:Close() end,
|
|
},
|
|
configure = {
|
|
order = 80,
|
|
type = 'execute',
|
|
name = DPSMate.L["config"],
|
|
desc = DPSMate.L["config"],
|
|
func = function() DPSMate_ConfigMenu:Show(); DPSMate.Options.Dewdrop:Close() end,
|
|
},
|
|
close = {
|
|
order = 90,
|
|
type = 'execute',
|
|
name = DPSMate.L["close"],
|
|
desc = DPSMate.L["close"],
|
|
func = function() DPSMate.Options.Dewdrop:Close() end,
|
|
},
|
|
},
|
|
handler = DPSMate.Options,
|
|
},
|
|
[4] = {
|
|
type = 'group',
|
|
args = {
|
|
report = {
|
|
order = 10,
|
|
type = 'group',
|
|
name = DPSMate.L["report"],
|
|
desc = DPSMate.L["reportdesc"],
|
|
args = {
|
|
whisper = {
|
|
order = 10,
|
|
type = "text",
|
|
name = DPSMate.L["whisper"],
|
|
desc = DPSMate.L["whisperdesc"],
|
|
get = function() return "" end,
|
|
set = function(name) DPSMate.Options:ReportUserDetails(DPSMate.Options.Dewdrop:GetOpenedParent(), DPSMate.L["whisper"], name); DPSMate.Options.Dewdrop:Close() end,
|
|
usage = "<name>",
|
|
},
|
|
},
|
|
},
|
|
compare = {
|
|
order = 20,
|
|
type = 'group',
|
|
name = DPSMate.L["comparewith"],
|
|
desc = DPSMate.L["comparewithdesc"],
|
|
args = {
|
|
|
|
},
|
|
}
|
|
},
|
|
handler = DPSMate.Options,
|
|
},
|
|
[5] = {
|
|
type = 'group',
|
|
args = {
|
|
classes = {
|
|
order = 10,
|
|
type = 'group',
|
|
name = DPSMate.L["classes"],
|
|
desc = DPSMate.L["classesdesc"],
|
|
args = {
|
|
warrior = {
|
|
order = 10,
|
|
type = 'toggle',
|
|
name = DPSMate.L["warrior"],
|
|
desc = DPSMate.L["warriordesc"],
|
|
get = function() return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["filterclasses"]["warrior"] end,
|
|
set = function() DPSMate.Options:ToggleFilterClass(DPSMate.Options.Dewdrop:GetOpenedParent().Key, "warrior") end,
|
|
},
|
|
rogue = {
|
|
order = 20,
|
|
type = 'toggle',
|
|
name = DPSMate.L["rogue"],
|
|
desc = DPSMate.L["roguedesc"],
|
|
get = function() return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["filterclasses"]["rogue"] end,
|
|
set = function() DPSMate.Options:ToggleFilterClass(DPSMate.Options.Dewdrop:GetOpenedParent().Key, "rogue") end,
|
|
},
|
|
priest = {
|
|
order = 30,
|
|
type = 'toggle',
|
|
name = DPSMate.L["priest"],
|
|
desc = DPSMate.L["priestdesc"],
|
|
get = function() return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["filterclasses"]["priest"] end,
|
|
set = function() DPSMate.Options:ToggleFilterClass(DPSMate.Options.Dewdrop:GetOpenedParent().Key, "priest") end,
|
|
},
|
|
hunter = {
|
|
order = 40,
|
|
type = 'toggle',
|
|
name = DPSMate.L["hunter"],
|
|
desc = DPSMate.L["hunterdesc"],
|
|
get = function() return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["filterclasses"]["hunter"] end,
|
|
set = function() DPSMate.Options:ToggleFilterClass(DPSMate.Options.Dewdrop:GetOpenedParent().Key, "hunter") end,
|
|
},
|
|
druid = {
|
|
order = 50,
|
|
type = 'toggle',
|
|
name = DPSMate.L["druid"],
|
|
desc = DPSMate.L["druiddesc"],
|
|
get = function() return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["filterclasses"]["druid"] end,
|
|
set = function() DPSMate.Options:ToggleFilterClass(DPSMate.Options.Dewdrop:GetOpenedParent().Key, "druid") end,
|
|
},
|
|
mage = {
|
|
order = 60,
|
|
type = 'toggle',
|
|
name = DPSMate.L["mage"],
|
|
desc = DPSMate.L["magedesc"],
|
|
get = function() return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["filterclasses"]["mage"] end,
|
|
set = function() DPSMate.Options:ToggleFilterClass(DPSMate.Options.Dewdrop:GetOpenedParent().Key, "mage") end,
|
|
},
|
|
warlock = {
|
|
order = 70,
|
|
type = 'toggle',
|
|
name = DPSMate.L["warlock"],
|
|
desc = DPSMate.L["warlockdesc"],
|
|
get = function() return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["filterclasses"]["warlock"] end,
|
|
set = function() DPSMate.Options:ToggleFilterClass(DPSMate.Options.Dewdrop:GetOpenedParent().Key, "warlock") end,
|
|
},
|
|
paladin = {
|
|
order = 80,
|
|
type = 'toggle',
|
|
name = DPSMate.L["paladin"],
|
|
desc = DPSMate.L["paladindesc"],
|
|
get = function() return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["filterclasses"]["paladin"] end,
|
|
set = function() DPSMate.Options:ToggleFilterClass(DPSMate.Options.Dewdrop:GetOpenedParent().Key, "paladin") end,
|
|
},
|
|
shamen = {
|
|
order = 90,
|
|
type = 'toggle',
|
|
name = DPSMate.L["shaman"],
|
|
desc = DPSMate.L["shamandesc"],
|
|
get = function() return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["filterclasses"]["shaman"] end,
|
|
set = function() DPSMate.Options:ToggleFilterClass(DPSMate.Options.Dewdrop:GetOpenedParent().Key, "shaman") end,
|
|
},
|
|
},
|
|
},
|
|
people = {
|
|
order = 20,
|
|
type = 'text',
|
|
name = DPSMate.L["certainnames"],
|
|
desc = DPSMate.L["certainnamesdesc"],
|
|
get = function() if DPSMate.Options.Dewdrop:GetOpenedParent() then return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["filterpeople"] else return "" end end,
|
|
set = function(names) DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["filterpeople"] = names;DPSMate:SetStatusBarValue();DPSMate.Options.Dewdrop:Close() end,
|
|
usage = "<names>",
|
|
},
|
|
group = {
|
|
order = 30,
|
|
type = "toggle",
|
|
name = DPSMate.L["grouponly"],
|
|
desc = DPSMate.L["grouponlydesc"],
|
|
get = function() return DPSMateSettings["windows"][(DPSMate.Options.Dewdrop:GetOpenedParent() or DPSMate).Key or 1]["grouponly"] end,
|
|
set = function() DPSMate.DB:OnGroupUpdate();DPSMate.Options:SimpleToggle(DPSMate.Options.Dewdrop:GetOpenedParent().Key, "grouponly");DPSMate.Options.Dewdrop:Close() end,
|
|
}
|
|
},
|
|
handler = DPSMate.Options,
|
|
},
|
|
}
|
|
DPSMate.Options.TestMode = false
|
|
|
|
-- Local Variables
|
|
local LastPopUp = 0
|
|
local TimeToNextPopUp = 1
|
|
local PartyNum, LastPartyNum = 0, 0
|
|
local SelectedChannel = DPSMate.L["raid"]
|
|
|
|
local _G = getglobal
|
|
local tinsert = table.insert
|
|
local tremove = tremove
|
|
local strformat = string.format
|
|
local strgfind = string.gfind
|
|
local SendChatMessage = function(prio, prefix, text, chattype, language, destination)
|
|
ChatThrottleLib:SendChatMessage(prio, prefix, text, chattype, language, destination)
|
|
end
|
|
|
|
-- Begin Functions
|
|
|
|
function DPSMate.Options:SelectRealtime(obj, kind)
|
|
if kind then
|
|
local key = obj.Key or 1
|
|
DPSMateSettings["windows"][key]["realtime"] = kind
|
|
if not _G(obj:GetName().."_RealTime") then
|
|
local f = CreateFrame("Frame", obj:GetName().."_RealTime", obj, "DPSMate_RealTime")
|
|
local g = DPSMate.Options.graph:CreateGraphRealtime(f:GetName().."_Graph",f,"BOTTOMRIGHT","BOTTOMRIGHT",-5,5,190,150)
|
|
g:SetAutoScale(true)
|
|
g:SetGridSpacing(1.0,10.0)
|
|
g:SetYMax(120)
|
|
g:SetXAxis(-11,-1)
|
|
g:SetFilterRadius(1)
|
|
g:SetBarColors({0.2,0.0,0.0,0.4},{1.0,0.0,0.0,1.0})
|
|
g:SetScript("OnUpdate",function()
|
|
if DPSMate.DB.loaded and DPSMateSettings["windows"][key]["realtime"] then
|
|
g:OnUpdate(g)
|
|
g:AddTimeData(DPSMate.DB:GetAlpha(key))
|
|
end
|
|
end)
|
|
f:Show()
|
|
g:Show()
|
|
DPSMate.DB:HookGraphEvents()
|
|
else
|
|
_G(obj:GetName().."_RealTime"):Show()
|
|
end
|
|
DPSMate.Options.Dewdrop:Close()
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:InitializeConfigMenu()
|
|
-- Inialize Extra Buttons
|
|
for cat, val in pairs(DPSMateSettings["windows"]) do
|
|
local f = CreateFrame("Button", "DPSMate_ConfigMenu_Menu_Button"..(9+cat), DPSMate_ConfigMenu_Menu, "DPSMate_Template_WindowButton")
|
|
f.Key = cat
|
|
_G("DPSMate_ConfigMenu_Menu_Button"..(9+cat).."Text"):SetText(val["name"])
|
|
if cat>1 then
|
|
f:SetPoint("TOP", _G("DPSMate_ConfigMenu_Menu_Button"..(8+cat)), "BOTTOM")
|
|
_G("DPSMate_ConfigMenu_Menu_Button"..(8+cat)).after = f
|
|
else
|
|
f:SetPoint("TOP", DPSMate_ConfigMenu_Menu_Button1, "BOTTOM")
|
|
end
|
|
f.after = DPSMate_ConfigMenu_Menu_Button2
|
|
DPSMate_ConfigMenu.num = 9+cat
|
|
f.func = function()
|
|
_G(this:GetParent():GetParent():GetName()..this:GetParent().selected):Hide()
|
|
_G(this:GetParent():GetParent():GetName().."_Tab_Window"):Show()
|
|
this:GetParent().selected = "_Tab_Window"
|
|
end
|
|
end
|
|
local TL = DPSMate:TableLength(DPSMateSettings["windows"])
|
|
if TL>=1 then
|
|
DPSMate_ConfigMenu_Menu_Button2:ClearAllPoints()
|
|
DPSMate_ConfigMenu_Menu_Button2:SetPoint("TOP", _G("DPSMate_ConfigMenu_Menu_Button"..(9+TL)), "BOTTOM")
|
|
end
|
|
|
|
-- Tab Window
|
|
DPSMate_ConfigMenu_Tab_Window_Lock:SetChecked(DPSMateSettings["lock"])
|
|
|
|
-- Tab Bars
|
|
if not DPSMate_ConfigMenu_Tab_Bars_BarTexture.tex then
|
|
DPSMate_ConfigMenu_Tab_Bars_BarTexture.tex = DPSMate_ConfigMenu_Tab_Bars_BarTexture:CreateTexture("BG", "ARTWORK")
|
|
DPSMate_ConfigMenu_Tab_Bars_BarTexture.tex:SetWidth(110)
|
|
DPSMate_ConfigMenu_Tab_Bars_BarTexture.tex:SetHeight(15)
|
|
DPSMate_ConfigMenu_Tab_Bars_BarTexture.tex:SetPoint("TOPLEFT", DPSMate_ConfigMenu_Tab_Bars_BarTexture, "TOPLEFT", 23, -7)
|
|
end
|
|
|
|
-- Tab Title bar
|
|
if not DPSMate_ConfigMenu_Tab_TitleBar_BarTexture.tex then
|
|
DPSMate_ConfigMenu_Tab_TitleBar_BarTexture.tex = DPSMate_ConfigMenu_Tab_TitleBar_BarTexture:CreateTexture("BG", "ARTWORK")
|
|
DPSMate_ConfigMenu_Tab_TitleBar_BarTexture.tex:SetWidth(110)
|
|
DPSMate_ConfigMenu_Tab_TitleBar_BarTexture.tex:SetHeight(15)
|
|
DPSMate_ConfigMenu_Tab_TitleBar_BarTexture.tex:SetPoint("TOPLEFT", DPSMate_ConfigMenu_Tab_TitleBar_BarTexture, "TOPLEFT", 23, -7)
|
|
end
|
|
|
|
-- Tab General Options
|
|
DPSMate_ConfigMenu_Tab_GeneralOptions_Minimap:SetChecked(DPSMateSettings["showminimapbutton"])
|
|
if not DPSMateSettings["showminimapbutton"] then
|
|
DPSMate_MiniMap:Hide()
|
|
end
|
|
DPSMate_ConfigMenu_Tab_GeneralOptions_Total:SetChecked(DPSMateSettings["showtotals"])
|
|
DPSMate_ConfigMenu_Tab_GeneralOptions_BossFights:SetChecked(DPSMateSettings["onlybossfights"])
|
|
DPSMate_ConfigMenu_Tab_GeneralOptions_Solo:SetChecked(DPSMateSettings["hidewhensolo"])
|
|
DPSMate_ConfigMenu_Tab_GeneralOptions_Combat:SetChecked(DPSMateSettings["hideincombat"])
|
|
DPSMate_ConfigMenu_Tab_GeneralOptions_Login:SetChecked(DPSMateSettings["hideonlogin"])
|
|
DPSMate_ConfigMenu_Tab_GeneralOptions_PVP:SetChecked(DPSMateSettings["hideinpvp"])
|
|
DPSMate_ConfigMenu_Tab_GeneralOptions_Disable:SetChecked(DPSMateSettings["disablewhilehidden"])
|
|
DPSMate_ConfigMenu_Tab_GeneralOptions_MergePets:SetChecked(DPSMateSettings["mergepets"])
|
|
DPSMate_ConfigMenu_Tab_GeneralOptions_Segments:SetValue(DPSMateSettings["datasegments"])
|
|
DPSMate_ConfigMenu_Tab_GeneralOptions_TargetScale:SetValue(DPSMateSettings["targetscale"])
|
|
DPSMate_ConfigMenu_Tab_GeneralOptions_UpdateInterval:SetValue(DPSMateSettings["mainupdatetime"] or 1.5)
|
|
DPSMate_ConfigMenu_Tab_GeneralOptions_AutoWipe:SetValue(DPSMateSettings["autowipesessions"] or 0)
|
|
|
|
-- Tab Columns
|
|
for i=1, 4 do
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_DPS_Check"..i):SetChecked(DPSMateSettings["columnsdps"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Damage_Check"..i):SetChecked(DPSMateSettings["columnsdmg"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_DamageTaken_Check"..i):SetChecked(DPSMateSettings["columnsdmgtaken"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_DTPS_Check"..i):SetChecked(DPSMateSettings["columnsdtps"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_EDD_Check"..i):SetChecked(DPSMateSettings["columnsedd"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_EDT_Check"..i):SetChecked(DPSMateSettings["columnsedt"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Healing_Check"..i):SetChecked(DPSMateSettings["columnshealing"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_HealingTaken_Check"..i):SetChecked(DPSMateSettings["columnshealingtaken"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_HPS_Check"..i):SetChecked(DPSMateSettings["columnshps"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Overhealing_Check"..i):SetChecked(DPSMateSettings["columnsoverhealing"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_EffectiveHealing_Check"..i):SetChecked(DPSMateSettings["columnsehealing"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_EffectiveHealingTaken_Check"..i):SetChecked(DPSMateSettings["columnsehealingtaken"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_EffectiveHPS_Check"..i):SetChecked(DPSMateSettings["columnsehps"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_HAB_Check"..i):SetChecked(DPSMateSettings["columnshab"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_FriendlyFire_Check"..i):SetChecked(DPSMateSettings["columnsfriendlyfire"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Threat_Check"..i):SetChecked(DPSMateSettings["columnsthreat"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_TPS_Check"..i):SetChecked(DPSMateSettings["columnstps"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Absorbs_Check"..i):SetChecked(DPSMateSettings["columnsabsorbs"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_AbsorbsTaken_Check"..i):SetChecked(DPSMateSettings["columnsabsorbstaken"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_OHealingTaken_Check"..i):SetChecked(DPSMateSettings["columnsohealingtaken"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_OHPS_Check"..i):SetChecked(DPSMateSettings["columnsohps"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_FriendlyFireTaken_Check"..i):SetChecked(DPSMateSettings["columnsfriendlyfiretaken"][i])
|
|
end
|
|
for i=1, 2 do
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Deaths_Check"..i):SetChecked(DPSMateSettings["columnsdeaths"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Interrupts_Check"..i):SetChecked(DPSMateSettings["columnsinterrupts"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Dispels_Check"..i):SetChecked(DPSMateSettings["columnsdispels"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_DispelsReceived_Check"..i):SetChecked(DPSMateSettings["columnsdispelsreceived"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Decurses_Check"..i):SetChecked(DPSMateSettings["columnsdecurses"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_DecursesReceived_Check"..i):SetChecked(DPSMateSettings["columnsdecursesreceived"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Disease_Check"..i):SetChecked(DPSMateSettings["columnsdisease"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_DiseaseReceived_Check"..i):SetChecked(DPSMateSettings["columnsdiseasereceived"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Poison_Check"..i):SetChecked(DPSMateSettings["columnspoison"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_PoisonReceived_Check"..i):SetChecked(DPSMateSettings["columnspoisonreceived"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Magic_Check"..i):SetChecked(DPSMateSettings["columnsmagic"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_MagicReceived_Check"..i):SetChecked(DPSMateSettings["columnsmagicreceived"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_AurasGained_Check"..i):SetChecked(DPSMateSettings["columnsaurasgained"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_AurasLost_Check"..i):SetChecked(DPSMateSettings["columnsauraslost"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_AuraUptime_Check"..i):SetChecked(DPSMateSettings["columnsaurauptime"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Procs_Check"..i):SetChecked(DPSMateSettings["columnsprocs"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Casts_Check"..i):SetChecked(DPSMateSettings["columnscasts"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_Fails_Check"..i):SetChecked(DPSMateSettings["columnsfails"][i])
|
|
_G("DPSMate_ConfigMenu_Tab_Columns_Child_CCBreaker_Check"..i):SetChecked(DPSMateSettings["columnsccbreaker"][i])
|
|
end
|
|
|
|
-- Tab Tooltips
|
|
DPSMate_ConfigMenu_Tab_Tooltips_Tooltips:SetChecked(DPSMateSettings["showtooltips"])
|
|
DPSMate_ConfigMenu_Tab_Tooltips_InformativeTooltips:SetChecked(DPSMateSettings["informativetooltips"])
|
|
DPSMate_ConfigMenu_Tab_Tooltips_Rows:SetValue(DPSMateSettings["subviewrows"])
|
|
|
|
-- Tab Broadcasting
|
|
DPSMate_ConfigMenu_Tab_Broadcasting_Enable:SetChecked(DPSMateSettings["broadcasting"])
|
|
DPSMate_ConfigMenu_Tab_Broadcasting_Cooldowns:SetChecked(DPSMateSettings["bccd"])
|
|
DPSMate_ConfigMenu_Tab_Broadcasting_Ress:SetChecked(DPSMateSettings["bcress"])
|
|
DPSMate_ConfigMenu_Tab_Broadcasting_KillingBlows:SetChecked(DPSMateSettings["bckb"])
|
|
DPSMate_ConfigMenu_Tab_Broadcasting_Fails:SetChecked(DPSMateSettings["bcfail"])
|
|
DPSMate_ConfigMenu_Tab_Broadcasting_RaidWarning:SetChecked(DPSMateSettings["bcrw"])
|
|
|
|
-- Mode menu
|
|
for cat, _ in DPSMateSettings["hiddenmodes"] do
|
|
DPSMate.Options.Options[1]["args"][cat] = nil
|
|
end
|
|
|
|
end
|
|
|
|
DPSMate.Options.OldLogout = Logout
|
|
function DPSMate.Options:Logout()
|
|
if DPSMateSettings["sync"] then
|
|
if UnitInRaid("player") then
|
|
DPSMate:SendMessage(DPSMate.L["syncreseterror"])
|
|
else
|
|
DPSMate.Options:PopUpAccept(true, true)
|
|
end
|
|
else
|
|
DPSMate.Options:PopUpAccept(true, true)
|
|
end
|
|
--self:SumGraphData()
|
|
DPSMate.Options.OldLogout()
|
|
end
|
|
Logout = function()
|
|
-- Strip ["i"] event/bucket tables and collapse AurasGained timestamp arrays
|
|
-- before SavedVariables are written to disk, to keep the file size manageable.
|
|
DPSMate:StripInstantFromMode1()
|
|
DPSMate:CollapseAuraTimestamps()
|
|
if DPSMateSettings["dataresetslogout"] == 3 then
|
|
DPSMate_Logout:Show()
|
|
elseif DPSMateSettings["dataresetslogout"] == 2 then
|
|
--DPSMate.Options:SumGraphData()
|
|
DPSMate.Options.OldLogout()
|
|
else
|
|
DPSMate.Options:Logout()
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:ToggleVisibility()
|
|
for key, val in DPSMateSettings["windows"] do
|
|
if val["hidden"] then
|
|
getglobal("DPSMate_"..val["name"]):Show()
|
|
DPSMateSettings["windows"][key]["hidden"] = false
|
|
else
|
|
getglobal("DPSMate_"..val["name"]):Hide()
|
|
DPSMateSettings["windows"][key]["hidden"] = true
|
|
end
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:ActivateTestMode()
|
|
if self.TestMode then
|
|
self.TestMode = false
|
|
DPSMate:SetStatusBarValue()
|
|
else
|
|
self.TestMode = true
|
|
for k,c in DPSMateSettings.windows do
|
|
if DPSMateSettings["showtotals"] then
|
|
_G("DPSMate_"..c["name"].."_ScrollFrame_Child_Total_Name"):SetText("Total")
|
|
_G("DPSMate_"..c["name"].."_ScrollFrame_Child_Total_Value"):SetText("3000000")
|
|
end
|
|
for i=1, 40 do
|
|
local statusbar, name, value, texture, p = _G("DPSMate_"..c["name"].."_ScrollFrame_Child_StatusBar"..i), _G("DPSMate_"..c["name"].."_ScrollFrame_Child_StatusBar"..i.."_Name"), _G("DPSMate_"..c["name"].."_ScrollFrame_Child_StatusBar"..i.."_Value"), _G("DPSMate_"..c["name"].."_ScrollFrame_Child_StatusBar"..i.."_Icon"), ""
|
|
_G("DPSMate_"..c["name"].."_ScrollFrame_Child"):SetHeight((i+1)*(c["barheight"]+c["barspacing"]))
|
|
|
|
statusbar:SetStatusBarColor(0.78,0.61,0.43, 1)
|
|
|
|
if c["ranks"] then p=i..". " else p="" end
|
|
name:SetText(p.."Test "..i)
|
|
value:SetText("100000")
|
|
texture:SetTexture("Interface\\AddOns\\DPSMate\\images\\class\\warrior")
|
|
statusbar:SetValue(100)
|
|
|
|
statusbar.user = nil
|
|
statusbar:Show()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:ToggleFilterClass(key, class)
|
|
if DPSMateSettings["windows"][key]["filterclasses"][class] then
|
|
DPSMateSettings["windows"][key]["filterclasses"][class] = false
|
|
else
|
|
DPSMateSettings["windows"][key]["filterclasses"][class] = true
|
|
end
|
|
DPSMate:SetStatusBarValue()
|
|
end
|
|
|
|
function DPSMate.Options:SimpleToggle(key, opt)
|
|
if DPSMateSettings["windows"][key][opt] then
|
|
DPSMateSettings["windows"][key][opt] = false
|
|
else
|
|
DPSMateSettings["windows"][key][opt] = true
|
|
end
|
|
DPSMate:SetStatusBarValue()
|
|
end
|
|
|
|
function DPSMate.Options:RosterUpdate()
|
|
this:HideWhenSolo()
|
|
if this:IsInParty() then
|
|
if LastPartyNum == 0 then
|
|
if DPSMateSettings["dataresetsjoinparty"] == 3 then
|
|
if (GetTime()-LastPopUp) > TimeToNextPopUp then
|
|
this:ShowResetPopUp()
|
|
LastPopUp = GetTime()
|
|
end
|
|
elseif DPSMateSettings["dataresetsjoinparty"] == 1 then
|
|
this:PopUpAccept(true, true)
|
|
end
|
|
elseif LastPartyNum ~= PartyNum then
|
|
if DPSMateSettings["dataresetspartyamount"] == 3 then
|
|
if (GetTime()-LastPopUp) > TimeToNextPopUp then
|
|
this:ShowResetPopUp()
|
|
LastPopUp = GetTime()
|
|
end
|
|
elseif DPSMateSettings["dataresetspartyamount"] == 1 then
|
|
this:PopUpAccept(true)
|
|
end
|
|
end
|
|
else
|
|
if LastPartyNum > PartyNum then
|
|
if DPSMateSettings["dataresetsleaveparty"] == 3 then
|
|
if (GetTime()-LastPopUp) > TimeToNextPopUp then
|
|
this:ShowResetPopUp()
|
|
LastPopUp = GetTime()
|
|
end
|
|
elseif DPSMateSettings["dataresetsleaveparty"] == 1 then
|
|
this:PopUpAccept(true)
|
|
end
|
|
end
|
|
end
|
|
DPSMate.DB:OnGroupUpdate()
|
|
end
|
|
|
|
DPSMate.Options.PARTY_MEMBERS_CHANGED = function()
|
|
this:RosterUpdate()
|
|
end
|
|
|
|
DPSMate.Options.RAID_ROSTER_UPDATE = function()
|
|
this:RosterUpdate()
|
|
end
|
|
|
|
DPSMate.Options.PLAYER_ENTERING_WORLD = function()
|
|
if DPSMate.DB.loaded then
|
|
if DPSMateSettings["dataresetsworld"] == 3 then
|
|
if (GetTime()-LastPopUp) > TimeToNextPopUp then
|
|
DPSMate.Options:ShowResetPopUp()
|
|
LastPopUp = GetTime()
|
|
end
|
|
elseif DPSMateSettings["dataresetsworld"] == 1 and not DPSMate.Options:IsInParty() then
|
|
DPSMate.Options:PopUpAccept(true)
|
|
end
|
|
DPSMate.Options:HideInPvP()
|
|
if DPSMateSettings["hideonlogin"] then
|
|
for _, val in pairs(DPSMateSettings["windows"]) do
|
|
DPSMate.Options:Hide(_G("DPSMate_"..val["name"]))
|
|
end
|
|
end
|
|
DPSMate.DB:OnGroupUpdate()
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:ShowResetPopUp()
|
|
if DPSMateSettings["sync"] then
|
|
if IsPartyLeader() or IsRaidOfficer() or IsRaidLeader() then
|
|
DPSMate_PopUp:Show()
|
|
end
|
|
else
|
|
DPSMate_PopUp:Show()
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:IsInBattleground()
|
|
for i=1, 4 do
|
|
local status, mapName, instanceID, lowestlevel, highestlevel, teamSize, registeredMatch = GetBattlefieldStatus(i)
|
|
if status == "active" and DPSMateSettings["hideinpvp"] then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function DPSMate.Options:HideInPvP()
|
|
for _, val in pairs(DPSMateSettings["windows"]) do
|
|
local frame = _G("DPSMate_"..val["name"])
|
|
if DPSMate.Options:IsInBattleground() then
|
|
frame:Hide()
|
|
if DPSMateSettings["disablewhilehidden"] then
|
|
DPSMate:Disable()
|
|
end
|
|
end
|
|
end
|
|
DPSMate.Options:HideWhenSolo()
|
|
end
|
|
|
|
function DPSMate.Options:HideWhenSolo()
|
|
for _, val in pairs(DPSMateSettings["windows"]) do
|
|
local frame = _G("DPSMate_"..val["name"])
|
|
if DPSMateSettings["hidewhensolo"] and not DPSMate.Options:IsInBattleground() then
|
|
if GetNumPartyMembers() == 0 and GetNumRaidMembers() == 0 then
|
|
frame:Hide()
|
|
if DPSMateSettings["disablewhilehidden"] then
|
|
DPSMate:Disable()
|
|
end
|
|
else
|
|
if not val["hidden"] then
|
|
frame:Show()
|
|
end
|
|
DPSMate:Enable()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:IsInParty()
|
|
LastPartyNum = PartyNum
|
|
if UnitInRaid("player") then
|
|
PartyNum = GetNumRaidMembers()
|
|
return true
|
|
elseif GetNumPartyMembers() > 0 then
|
|
PartyNum = GetNumPartyMembers()
|
|
return true
|
|
else
|
|
PartyNum = 0
|
|
return false
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:PopUpAccept(bool, bypass)
|
|
DPSMate_PopUp:Hide()
|
|
if (GetNumPartyMembers()>0 or UnitInRaid("player")) and not bypass and DPSMateSettings["sync"] and bool then
|
|
if IsPartyLeader() or IsRaidOfficer() or IsRaidLeader() then
|
|
DPSMate.Sync:StartVote()
|
|
else
|
|
DPSMate:SendMessage(DPSMate.L["resetnotofficererror"])
|
|
return
|
|
end
|
|
else
|
|
if bool then
|
|
DPSMateDamageDone = {[1]={},[2]={}}
|
|
DPSMateDamageTaken = {[1]={},[2]={}}
|
|
DPSMateEDD = {[1]={},[2]={}}
|
|
DPSMateEDT = {[1]={},[2]={}}
|
|
DPSMateTHealing = {[1]={},[2]={}}
|
|
DPSMateEHealing = {[1]={},[2]={}}
|
|
DPSMateOverhealing = {[1]={},[2]={}}
|
|
DPSMateHealingTaken = {[1]={},[2]={}}
|
|
DPSMateEHealingTaken = {[1]={},[2]={}}
|
|
DPSMateOverhealingTaken = {[1]={},[2]={}}
|
|
DPSMateAbsorbs = {[1]={},[2]={}}
|
|
DPSMateDispels = {[1]={},[2]={}}
|
|
DPSMateDeaths = {[1]={},[2]={}}
|
|
DPSMateInterrupts = {[1]={},[2]={}}
|
|
DPSMateAurasGained = {[1]={},[2]={}}
|
|
DPSMateThreat = {[1]={},[2]={}}
|
|
DPSMateFails = {[1]={},[2]={}}
|
|
DPSMateCCBreaker = {[1]={},[2]={}}
|
|
DPSMateHistory = {
|
|
names = {},
|
|
timestamps = {},
|
|
DMGDone = {},
|
|
DMGTaken = {},
|
|
EDDone = {},
|
|
EDTaken = {},
|
|
THealing = {},
|
|
EHealing = {},
|
|
OHealing = {},
|
|
EHealingTaken = {},
|
|
THealingTaken = {},
|
|
OHealingTaken = {},
|
|
Absorbs = {},
|
|
Deaths = {},
|
|
Interrupts = {},
|
|
Dispels = {},
|
|
Auras = {},
|
|
Threat = {},
|
|
Fail = {},
|
|
CCBreaker = {}
|
|
}
|
|
DPSMateCombatTime = {
|
|
total = 0.0001,
|
|
current = 0.0001,
|
|
segments = {},
|
|
effective = {
|
|
[1] = {},
|
|
[2] = {}
|
|
},
|
|
}
|
|
DPSMate:UpdatePointer()
|
|
DPSMate.DB:UpdatePointer()
|
|
|
|
-- Get buffs of people after reset
|
|
local type = "party"
|
|
local num = GetNumPartyMembers()
|
|
if num<=0 then
|
|
type = "raid"
|
|
num = GetNumRaidMembers()
|
|
end
|
|
for p=1, num do
|
|
for i=1, 32 do
|
|
GameTooltip:SetOwner(UIParent)
|
|
GameTooltip:SetUnitBuff(type..p, i)
|
|
local buff = GameTooltipTextLeft1:GetText()
|
|
GameTooltip:Hide()
|
|
if buff then
|
|
DPSMate.DB:BuildBuffs(DPSMate.L["unknown"], UnitName(type..p), buff, false)
|
|
end
|
|
end
|
|
end
|
|
if type == "party" or num <= 0 then
|
|
for i=0,31 do
|
|
GameTooltip:SetOwner(UIParent)
|
|
GameTooltip:SetPlayerBuff(i)
|
|
local buff = GameTooltipTextLeft1:GetText()
|
|
GameTooltip:Hide()
|
|
if buff then
|
|
DPSMate.DB:BuildBuffs(DPSMate.L["unknown"], UnitName("player"), buff, false)
|
|
end
|
|
end
|
|
end
|
|
else
|
|
DPSMateDamageDone[2] = {}
|
|
DPSMateDamageTaken[2] = {}
|
|
DPSMateEDD[2] = {}
|
|
DPSMateEDT[2] = {}
|
|
DPSMateTHealing[2] = {}
|
|
DPSMateEHealing[2] = {}
|
|
DPSMateOverhealing[2] = {}
|
|
DPSMateHealingTaken[2] = {}
|
|
DPSMateEHealingTaken[2] = {}
|
|
DPSMateOverhealingTaken[2] = {}
|
|
DPSMateAbsorbs[2] = {}
|
|
DPSMateDispels[2] = {}
|
|
DPSMateDeaths[2] = {}
|
|
DPSMateInterrupts[2] = {}
|
|
DPSMateAurasGained[2] = {}
|
|
DPSMateThreat[2] = {}
|
|
DPSMateFails[2] = {}
|
|
DPSMateCCBreaker[2] = {}
|
|
DPSMateCombatTime["current"] = 0.0001
|
|
|
|
DPSMate:UpdatePointer()
|
|
DPSMate.DB:UpdatePointer()
|
|
end
|
|
|
|
if DPSMate.Modules.DPS then DPSMate.Modules.DPS.DB = DPSMateDamageDone end
|
|
if DPSMate.Modules.Damage then DPSMate.Modules.Damage.DB = DPSMateDamageDone end
|
|
if DPSMate.Modules.DamageTaken then DPSMate.Modules.DamageTaken.DB = DPSMateDamageTaken end
|
|
if DPSMate.Modules.DTPS then DPSMate.Modules.DTPS.DB = DPSMateDamageTaken end
|
|
if DPSMate.Modules.EDD then DPSMate.Modules.EDD.DB = DPSMateEDD end
|
|
if DPSMate.Modules.EDT then DPSMate.Modules.EDT.DB = DPSMateEDT end
|
|
if DPSMate.Modules.FriendlyFire then DPSMate.Modules.FriendlyFire.DB = DPSMateEDT end
|
|
if DPSMate.Modules.FriendlyFireTaken then DPSMate.Modules.FriendlyFireTaken.DB = DPSMateEDT end
|
|
if DPSMate.Modules.Healing then DPSMate.Modules.Healing.DB = DPSMateTHealing end
|
|
if DPSMate.Modules.HPS then DPSMate.Modules.HPS.DB = DPSMateTHealing end
|
|
if DPSMate.Modules.Overhealing then DPSMate.Modules.Overhealing.DB = DPSMateOverhealing end
|
|
if DPSMate.Modules.EffectiveHealing then DPSMate.Modules.EffectiveHealing.DB = DPSMateEHealing end
|
|
if DPSMate.Modules.EffectiveHPS then DPSMate.Modules.EffectiveHPS.DB = DPSMateEHealing end
|
|
if DPSMate.Modules.HealingTaken then DPSMate.Modules.HealingTaken.DB = DPSMateHealingTaken end
|
|
if DPSMate.Modules.EffectiveHealingTaken then DPSMate.Modules.EffectiveHealingTaken.DB = DPSMateEHealingTaken end
|
|
if DPSMate.Modules.Absorbs then DPSMate.Modules.Absorbs.DB = DPSMateAbsorbs end
|
|
if DPSMate.Modules.AbsorbsTaken then DPSMate.Modules.AbsorbsTaken.DB = DPSMateAbsorbs end
|
|
if DPSMate.Modules.HealingAndAbsorbs then DPSMate.Modules.HealingAndAbsorbs.DB = DPSMateAbsorbs end
|
|
if DPSMate.Modules.Deaths then DPSMate.Modules.Deaths.DB = DPSMateDeaths end
|
|
if DPSMate.Modules.Dispels then DPSMate.Modules.Dispels.DB = DPSMateDispels end
|
|
if DPSMate.Modules.DispelsReceived then DPSMate.Modules.DispelsReceived.DB = DPSMateDispels end
|
|
if DPSMate.Modules.Decurses then DPSMate.Modules.Decurses.DB = DPSMateDispels end
|
|
if DPSMate.Modules.DecursesReceived then DPSMate.Modules.DecursesReceived.DB = DPSMateDispels end
|
|
if DPSMate.Modules.CureDisease then DPSMate.Modules.CureDisease.DB = DPSMateDispels end
|
|
if DPSMate.Modules.CureDiseaseReceived then DPSMate.Modules.CureDiseaseReceived.DB = DPSMateDispels end
|
|
if DPSMate.Modules.CurePoison then DPSMate.Modules.CurePoison.DB = DPSMateDispels end
|
|
if DPSMate.Modules.CurePoisonReceived then DPSMate.Modules.CurePoisonReceived.DB = DPSMateDispels end
|
|
if DPSMate.Modules.LiftMagic then DPSMate.Modules.LiftMagic.DB = DPSMateDispels end
|
|
if DPSMate.Modules.LiftMagicReceived then DPSMate.Modules.LiftMagicReceived.DB = DPSMateDispels end
|
|
if DPSMate.Modules.Interrupts then DPSMate.Modules.Interrupts.DB = DPSMateInterrupts end
|
|
if DPSMate.Modules.AurasGained then DPSMate.Modules.AurasGained.DB = DPSMateAurasGained end
|
|
if DPSMate.Modules.AurasLost then DPSMate.Modules.AurasLost.DB = DPSMateAurasGained end
|
|
if DPSMate.Modules.AurasUptimers then DPSMate.Modules.AurasUptimers.DB = DPSMateAurasGained end
|
|
if DPSMate.Modules.Procs then DPSMate.Modules.Procs.DB = DPSMateAurasGained end
|
|
if DPSMate.Modules.Casts then DPSMate.Modules.Casts.DB = DPSMateEDT end
|
|
if DPSMate.Modules.Threat then DPSMate.Modules.Threat.DB = DPSMateThreat end
|
|
if DPSMate.Modules.TPS then DPSMate.Modules.TPS.DB = DPSMateThreat end
|
|
if DPSMate.Modules.Fails then DPSMate.Modules.Fails.DB = DPSMateFails end
|
|
if DPSMate.Modules.CCBreaker then DPSMate.Modules.CCBreaker.DB = DPSMateCCBreaker end
|
|
if DPSMate.Modules.OHPS then DPSMate.Modules.OHPS.DB = DPSMateOverhealing end
|
|
if DPSMate.Modules.OHealingTaken then DPSMate.Modules.OHealingTaken.DB = DPSMateOverhealingTaken end
|
|
if DPSMate.Modules.Activity then DPSMate.Modules.Activity.DB = DPSMateCombatTime end
|
|
|
|
for _, val in pairs(DPSMateSettings["windows"]) do
|
|
if not val["options"][2]["total"] and not val["options"][2]["currentfight"] then
|
|
-- No valid mode selected; clear all entries and default to total
|
|
for cat, _ in pairs(val["options"][2]) do
|
|
val["options"][2][cat] = false
|
|
end
|
|
val["options"][2]["total"] = true
|
|
end
|
|
end
|
|
|
|
DPSMate:UpdatePointer()
|
|
DPSMate.DB:UpdatePointer()
|
|
|
|
DPSMate.DB:DamageDone(UnitName("player"), "Init", 0, 0, 0, 0, 0, 0, 0, 0, 0) -- Hackfix to fix the hunter issue where the player is not shown if pet damage is merged
|
|
DPSMate.Options:InitializeSegments()
|
|
DPSMate:SetStatusBarValue()
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:OpenMenu(b, obj)
|
|
for _, val in pairs(DPSMateSettings.windows) do
|
|
if DPSMate.Options.Dewdrop:IsOpen(_G("DPSMate_"..val["name"])) then
|
|
DPSMate.Options.Dewdrop:Close()
|
|
return
|
|
end
|
|
if DPSMate.Options.Dewdrop:IsRegistered(_G("DPSMate_"..val["name"])) then DPSMate.Options.Dewdrop:Unregister(_G("DPSMate_"..val["name"])) end
|
|
end
|
|
DPSMate.Options.Dewdrop:Register(obj,
|
|
'children', function()
|
|
DPSMate.Options.Dewdrop:FeedAceOptionsTable(DPSMate.Options.Options[b])
|
|
end,
|
|
'cursorX', true,
|
|
'cursorY', true,
|
|
'dontHook', true
|
|
)
|
|
DPSMate.Options.Dewdrop:Open(obj)
|
|
end
|
|
|
|
function DPSMate.Options:ToggleDrewDrop(i, obj, pa)
|
|
if not DPSMateSettings["windows"][1] then return end
|
|
for cat, _ in pairs(DPSMateSettings["windows"][pa.Key]["options"][i]) do
|
|
DPSMateSettings["windows"][pa.Key]["options"][i][cat] = false
|
|
end
|
|
DPSMateSettings["windows"][pa.Key]["options"][i][obj] = true
|
|
if i == 1 then
|
|
if not DPSMate.Options.Options[1]["args"][obj] then
|
|
obj = "damage"
|
|
end
|
|
_G(pa:GetName().."_Head_Font"):SetText(DPSMate.Options.Options[i]["args"][obj].name)
|
|
DPSMateSettings["windows"][pa.Key]["CurMode"] = obj
|
|
end
|
|
DPSMate.Options.Dewdrop:Close()
|
|
if DPSMate.DB.loaded then DPSMate:SetStatusBarValue() end
|
|
return true
|
|
end
|
|
|
|
function DPSMate.Options:UpdateDetails(obj, bool, objname)
|
|
if objname then
|
|
obj = _G(objname)
|
|
end
|
|
local key = obj:GetParent():GetParent():GetParent().Key
|
|
if obj.user then
|
|
if not DPSMateUser[obj.user] then
|
|
DPSMate:SendMessage("Player data not found: "..obj.user)
|
|
return
|
|
end
|
|
DPSMate.RegistredModules[DPSMateSettings["windows"][key]["CurMode"]]:OpenDetails(obj, key, bool)
|
|
else
|
|
DPSMate:SendMessage(DPSMate.L["findusererror"])
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:UpdateTotalDetails(obj)
|
|
local key = obj:GetParent():GetParent():GetParent().Key
|
|
DPSMate.RegistredModules[DPSMateSettings["windows"][key]["CurMode"]]:OpenTotalDetails(obj, key)
|
|
end
|
|
|
|
function DPSMate.Options:DropDownStyleReset()
|
|
for i=1, 20 do
|
|
local button = _G("DropDownList1Button"..i)
|
|
_G("DropDownList1Button"..i.."NormalText"):SetFont(STANDARD_TEXT_FONT, UIDROPDOWNMENU_DEFAULT_TEXT_HEIGHT)
|
|
button:SetScript("OnEnter", function()
|
|
if ( this.hasArrow ) then
|
|
ToggleDropDownMenu(this:GetParent():GetID() + 1, this.value);
|
|
else
|
|
CloseDropDownMenus(this:GetParent():GetID() + 1);
|
|
end
|
|
getglobal(this:GetName().."Highlight"):Show();
|
|
UIDropDownMenu_StopCounting(this:GetParent());
|
|
if ( this.tooltipTitle ) then
|
|
GameTooltip_AddNewbieTip(this.tooltipTitle, 1.0, 1.0, 1.0, this.tooltipText, 1);
|
|
end
|
|
end)
|
|
_G("DropDownList1Backdrop"):SetBackdrop({
|
|
bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background",
|
|
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = true, tileSize = 32, edgeSize = 32,
|
|
insets = { left = 11, right = 12, top = 12, bottom = 11 }
|
|
})
|
|
if button.tex then
|
|
button.tex:Hide()
|
|
end
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:UpdateConfigModes(obj, o, p)
|
|
local line, lineplusoffset
|
|
local TL = DPSMate:TableLength(DPSMate.ModuleNames)
|
|
local path, t = obj:GetName().."_Button", {}
|
|
if p then
|
|
for cat, val in DPSMate.ModuleNames do
|
|
if not DPSMate:TContains(DPSMateSettings["hiddenmodes"], val) then
|
|
tinsert(t, 1, cat)
|
|
end
|
|
end
|
|
else
|
|
for cat, val in DPSMate.ModuleNames do
|
|
if DPSMate:TContains(DPSMateSettings["hiddenmodes"], val) then
|
|
tinsert(t, 1, cat)
|
|
end
|
|
end
|
|
end
|
|
local TL = DPSMate:TableLength(t)
|
|
obj.offset = (obj.offset or 0) - o
|
|
if obj.offset > (TL-15) then obj.offset = (TL-15) end
|
|
if obj.offset < 0 then obj.offset = 0 end
|
|
for line=1, 15 do
|
|
lineplusoffset = line + obj.offset
|
|
if t[lineplusoffset] then
|
|
_G(path..line.."Text"):SetText(t[lineplusoffset])
|
|
_G(path..line):Show()
|
|
else
|
|
_G(path..line):Hide()
|
|
end
|
|
_G(path..line.."Texture"):Hide()
|
|
_G(path..line.."Text"):SetTextColor(1,1,1,1)
|
|
_G(path..line).selected = false
|
|
end
|
|
end
|
|
|
|
DPSMate.Options.ShowMenu = UnitPopup_ShowMenu
|
|
function UnitPopup_ShowMenu(dropdownMenu, which, unit, name, userData)
|
|
DPSMate.Options:DropDownStyleReset()
|
|
DPSMate.Options.ShowMenu(dropdownMenu, which, unit, name, userData)
|
|
end
|
|
|
|
DPSMate.Options.UIDDI = UIDropDownMenu_Initialize
|
|
function UIDropDownMenu_Initialize(frame, initFunction, displayMode, level)
|
|
DPSMate.Options:DropDownStyleReset()
|
|
DPSMate.Options.UIDDI(frame, initFunction, displayMode, level)
|
|
end
|
|
|
|
function DPSMate.Options:ChannelDropDown()
|
|
local channel, i = DPSMate.L["reportchannel"], 1
|
|
|
|
local function on_click()
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_Report_Channel, this.value)
|
|
end
|
|
|
|
-- Adding dynamic channel
|
|
for i=0,25 do
|
|
local id, name = GetChannelName(i);
|
|
if name then
|
|
if not DPSMate:TContains(channel, name) then
|
|
tinsert(channel, name)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Initializing channel
|
|
for cat, val in pairs(channel) do
|
|
UIDropDownMenu_AddButton{
|
|
text = val,
|
|
value = val,
|
|
func = on_click,
|
|
}
|
|
end
|
|
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_Report_Channel, SelectedChannel)
|
|
end
|
|
|
|
function DPSMate.Options:WindowDropDown()
|
|
DPSMate_ConfigMenu.Selected = "None"
|
|
|
|
local function on_click()
|
|
UIDropDownMenu_SetSelectedValue(_G(UIDROPDOWNMENU_OPEN_MENU), this.value)
|
|
if UIDROPDOWNMENU_OPEN_MENU == "DPSMate_ConfigMenu_Tab_Window_Remove" then
|
|
DPSMate_ConfigMenu.Selected = this.value
|
|
end
|
|
end
|
|
|
|
UIDropDownMenu_AddButton{
|
|
text = "None",
|
|
value = "None",
|
|
func = on_click,
|
|
}
|
|
|
|
for _, val in pairs(DPSMateSettings["windows"]) do
|
|
UIDropDownMenu_AddButton{
|
|
text = val["name"],
|
|
value = val["name"],
|
|
func = on_click,
|
|
}
|
|
end
|
|
|
|
if not DPSMate_ConfigMenu.vis then
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_Window_Remove, "None")
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_Window_ConfigFrom, "None")
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_Window_ConfigTo, "None")
|
|
end
|
|
DPSMate_ConfigMenu.vis = true
|
|
end
|
|
|
|
function DPSMate.Options:BarFontDropDown()
|
|
local i = 1
|
|
|
|
local function on_click()
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_Bars_BarFont, this.value)
|
|
DPSMate_ConfigMenu_Tab_Bars_BarFontText:SetFont(DPSMate.Options.fonts[this.value], 12)
|
|
DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfont"] = this.value
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_ScrollFrame_Child_Total_Name"):SetFont(DPSMate.Options.fonts[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfont"]], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontsize"], DPSMate.Options.fontflags[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontflag"]])
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_ScrollFrame_Child_Total_Value"):SetFont(DPSMate.Options.fonts[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfont"]], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontsize"], DPSMate.Options.fontflags[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontflag"]])
|
|
for i=1, 40 do
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_ScrollFrame_Child_StatusBar"..i.."_Name"):SetFont(DPSMate.Options.fonts[this.value], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontsize"], DPSMate.Options.fontflags[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontflag"]])
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_ScrollFrame_Child_StatusBar"..i.."_Value"):SetFont(DPSMate.Options.fonts[this.value], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontsize"], DPSMate.Options.fontflags[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontflag"]])
|
|
end
|
|
end
|
|
|
|
for name, path in pairs(DPSMate.Options.fonts) do
|
|
UIDropDownMenu_AddButton{
|
|
text = name,
|
|
value = name,
|
|
func = on_click,
|
|
}
|
|
_G("DropDownList1Button"..i.."NormalText"):SetFont(path, 16)
|
|
i=i+1
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:BarFontFlagsDropDown()
|
|
local i = 1
|
|
|
|
local function on_click()
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_Bars_BarFontFlag, this.value)
|
|
DPSMate_ConfigMenu_Tab_Bars_BarFontFlagText:SetFont(DPSMate.Options.fonts["FRIZQT"], 12, DPSMate.Options.fontflags[this.value])
|
|
DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontflag"] = this.value
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_ScrollFrame_Child_Total_Name"):SetFont(DPSMate.Options.fonts[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfont"]], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontsize"], DPSMate.Options.fontflags[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontflag"]])
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_ScrollFrame_Child_Total_Value"):SetFont(DPSMate.Options.fonts[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfont"]], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontsize"], DPSMate.Options.fontflags[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontflag"]])
|
|
for i=1, 40 do
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_ScrollFrame_Child_StatusBar"..i.."_Name"):SetFont(DPSMate.Options.fonts[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfont"]], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontsize"], DPSMate.Options.fontflags[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontflag"]])
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_ScrollFrame_Child_StatusBar"..i.."_Value"):SetFont(DPSMate.Options.fonts[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfont"]], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontsize"], DPSMate.Options.fontflags[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["barfontflag"]])
|
|
end
|
|
end
|
|
|
|
for name, flag in pairs(DPSMate.Options.fontflags) do
|
|
UIDropDownMenu_AddButton{
|
|
text = name,
|
|
value = name,
|
|
func = on_click,
|
|
}
|
|
_G("DropDownList1Button"..i.."NormalText"):SetFont(DPSMate.Options.fonts["FRIZQT"], 12, flag)
|
|
i=i+1
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:BarTextureDropDown()
|
|
local i = 1
|
|
|
|
local function on_click()
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_Bars_BarTexture, this.value)
|
|
DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["bartexture"] = this.value
|
|
DPSMate_ConfigMenu_Tab_Bars_BarTexture.tex:SetTexture(DPSMate.Options.statusbars[this.value])
|
|
DPSMate_ConfigMenu_Tab_Bars_BarTexture.tex:Show()
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_ScrollFrame_Child_Total"):SetStatusBarTexture(DPSMate.Options.statusbars[this.value])
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_ScrollFrame_Child_Total_BG"):SetTexture(DPSMate.Options.statusbars[this.value])
|
|
for i=1, 40 do
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_ScrollFrame_Child_StatusBar"..i):SetStatusBarTexture(DPSMate.Options.statusbars[this.value])
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_ScrollFrame_Child_StatusBar"..i.."_BG"):SetTexture(DPSMate.Options.statusbars[this.value])
|
|
end
|
|
end
|
|
|
|
for name, path in pairs(DPSMate.Options.statusbars) do
|
|
UIDropDownMenu_AddButton{
|
|
text = name,
|
|
value = name,
|
|
func = on_click,
|
|
}
|
|
local button = _G("DropDownList1Button"..i)
|
|
if not button.tex then
|
|
button.tex = button:CreateTexture("BG", "BACKGROUND")
|
|
button.tex:SetTexture(path)
|
|
button.tex:SetWidth(100)
|
|
button.tex:SetHeight(20)
|
|
button.tex:SetPoint("TOPLEFT", button, "TOPLEFT")
|
|
end
|
|
button.tex:Show()
|
|
i=i+1
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:TitleBarTextureDropDown()
|
|
local i = 1
|
|
|
|
local function on_click()
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_TitleBar_BarTexture, this.value)
|
|
DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["titlebartexture"] = this.value
|
|
DPSMate_ConfigMenu_Tab_TitleBar_BarTexture.tex:SetTexture(DPSMate.Options.statusbars[this.value])
|
|
DPSMate_ConfigMenu_Tab_TitleBar_BarTexture.tex:Show()
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_Head_Background"):SetTexture(DPSMate.Options.statusbars[this.value])
|
|
end
|
|
|
|
for name, path in pairs(DPSMate.Options.statusbars) do
|
|
UIDropDownMenu_AddButton{
|
|
text = name,
|
|
value = name,
|
|
func = on_click,
|
|
}
|
|
local button = _G("DropDownList1Button"..i)
|
|
if not button.tex then
|
|
button.tex = button:CreateTexture("BG", "BACKGROUND")
|
|
button.tex:SetTexture(path)
|
|
button.tex:SetWidth(100)
|
|
button.tex:SetHeight(20)
|
|
button.tex:SetPoint("TOPLEFT", button, "TOPLEFT")
|
|
end
|
|
button.tex:Show()
|
|
i=i+1
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:TitleBarFontDropDown()
|
|
local i = 1
|
|
|
|
local function on_click()
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_TitleBar_BarFont, this.value)
|
|
DPSMate_ConfigMenu_Tab_TitleBar_BarFontText:SetFont(DPSMate.Options.fonts[this.value], 12)
|
|
DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["titlebarfont"] = this.value
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_Head_Font"):SetFont(DPSMate.Options.fonts[this.value], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["titlebarfontsize"], DPSMate.Options.fontflags[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["titlebarfontflag"]])
|
|
end
|
|
|
|
for name, path in pairs(DPSMate.Options.fonts) do
|
|
UIDropDownMenu_AddButton{
|
|
text = name,
|
|
value = name,
|
|
func = on_click,
|
|
}
|
|
_G("DropDownList1Button"..i.."NormalText"):SetFont(path, 16)
|
|
i=i+1
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:TitleBarFontFlagsDropDown()
|
|
local i = 1
|
|
|
|
local function on_click()
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_TitleBar_BarFontFlag, this.value)
|
|
DPSMate_ConfigMenu_Tab_TitleBar_BarFontFlagText:SetFont(DPSMate.Options.fonts["FRIZQT"], 12, DPSMate.Options.fontflags[this.value])
|
|
DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["titlebarfontflag"] = this.value
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_Head_Font"):SetFont(DPSMate.Options.fonts[DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["titlebarfont"]], 12, DPSMate.Options.fontflags[this.value])
|
|
end
|
|
|
|
for name, flag in pairs(DPSMate.Options.fontflags) do
|
|
UIDropDownMenu_AddButton{
|
|
text = name,
|
|
value = name,
|
|
func = on_click,
|
|
}
|
|
_G("DropDownList1Button"..i.."NormalText"):SetFont(DPSMate.Options.fonts["FRIZQT"], 12, flag)
|
|
i=i+1
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:ContentBGTextureDropDown()
|
|
local i = 1
|
|
|
|
local function on_click()
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_Content_BGDropDown, this.value)
|
|
DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["contentbgtexture"] = this.value
|
|
_G("DPSMate_ConfigMenu_Tab_Content_BGDropDown_Texture"):SetBackdrop({
|
|
bgFile = DPSMate.Options.bgtexture[this.value],
|
|
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 12, edgeSize = 12,
|
|
insets = { left = 4, right = 4, top = 4, bottom = 4 }
|
|
})
|
|
_G("DPSMate_ConfigMenu_Tab_Content_BGDropDown_Texture"):SetBackdropColor(DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["contentbgcolor"][1], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["contentbgcolor"][2], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["contentbgcolor"][3])
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_ScrollFrame_Background"):SetTexture(DPSMate.Options.bgtexture[this.value])
|
|
end
|
|
|
|
for name, path in pairs(DPSMate.Options.bgtexture) do
|
|
UIDropDownMenu_AddButton{
|
|
text = name,
|
|
value = name,
|
|
func = on_click,
|
|
}
|
|
local button = _G("DropDownList1Button"..i)
|
|
button.path = path
|
|
button.i = i
|
|
button:SetScript("OnEnter", function()
|
|
_G(this:GetName().."Highlight"):Show()
|
|
_G("DropDownList1Backdrop"):SetBackdrop({
|
|
bgFile = this.path,
|
|
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = true, tileSize = 32, edgeSize = 32,
|
|
insets = { left = 11, right = 12, top = 12, bottom = 11 }
|
|
})
|
|
_G("DropDownList1Backdrop"):SetBackdropColor(DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["contentbgcolor"][1], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["contentbgcolor"][2], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["contentbgcolor"][3])
|
|
end)
|
|
i=i+1
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:SelectDataResets(obj, case)
|
|
local vars = {["DPSMate_ConfigMenu_Tab_DataResets_EnteringWorld"] = "dataresetsworld", ["DPSMate_ConfigMenu_Tab_DataResets_PartyMemberChanged"] = "dataresetspartyamount", ["DPSMate_ConfigMenu_Tab_DataResets_JoinParty"] = "dataresetsjoinparty", ["DPSMate_ConfigMenu_Tab_DataResets_LeaveParty"] = "dataresetsleaveparty", ["DPSMate_ConfigMenu_Tab_DataResets_Sync"] = "dataresetssync", ["DPSMate_ConfigMenu_Tab_DataResets_Logout"] = "dataresetslogout"}
|
|
DPSMateSettings[vars[obj:GetName()]] = case
|
|
UIDropDownMenu_SetSelectedValue(obj, case)
|
|
end
|
|
|
|
function DPSMate.Options:DataResetsDropDown()
|
|
local btns = {DPSMate.L["yes"], DPSMate.L["no"], DPSMate.L["ask"]}
|
|
|
|
local function on_click()
|
|
DPSMate.Options:SelectDataResets(_G(UIDROPDOWNMENU_OPEN_MENU), this.value)
|
|
end
|
|
|
|
for val, name in pairs(btns) do
|
|
UIDropDownMenu_AddButton{
|
|
text = name,
|
|
value = val,
|
|
func = on_click,
|
|
}
|
|
end
|
|
|
|
local vars = {
|
|
["DPSMate_ConfigMenu_Tab_DataResets_EnteringWorld"] = "dataresetsworld",
|
|
["DPSMate_ConfigMenu_Tab_DataResets_JoinParty"] = "dataresetsjoinparty",
|
|
["DPSMate_ConfigMenu_Tab_DataResets_PartyMemberChanged"] = "dataresetspartyamount",
|
|
["DPSMate_ConfigMenu_Tab_DataResets_LeaveParty"] = "dataresetsleaveparty",
|
|
["DPSMate_ConfigMenu_Tab_DataResets_Sync"] = "dataresetssync",
|
|
["DPSMate_ConfigMenu_Tab_DataResets_Logout"] = "dataresetslogout",
|
|
}
|
|
local menu = UIDROPDOWNMENU_INIT_MENU
|
|
if type(menu) == "string" then menu = getglobal(menu) end
|
|
if menu then
|
|
local settingsKey = vars[menu:GetName()]
|
|
if settingsKey then
|
|
UIDropDownMenu_SetSelectedValue(menu, DPSMateSettings[settingsKey])
|
|
end
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:NumberFormatDropDown()
|
|
local btns = {DPSMate.L["normal"], DPSMate.L["condensed"], DPSMate.L["commas"], DPSMate.L["semicondensed"]}
|
|
|
|
local function on_click()
|
|
DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["numberformat"] = this.value
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_Content_NumberFormat, DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["numberformat"])
|
|
DPSMate:SetStatusBarValue()
|
|
end
|
|
|
|
for val, name in pairs(btns) do
|
|
UIDropDownMenu_AddButton{
|
|
text = name,
|
|
value = val,
|
|
func = on_click,
|
|
}
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:BorderStrataDropDown()
|
|
local btns = {"Background", "Low", "High"}
|
|
|
|
local function on_click()
|
|
DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["borderstrata"] = this.value
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_Content_BorderStrata, DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["borderstrata"])
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_Border"):SetFrameStrata(DPSMate.Options.stratas[this.value])
|
|
end
|
|
|
|
for val, name in pairs(btns) do
|
|
UIDropDownMenu_AddButton{
|
|
text = name,
|
|
value = val,
|
|
func = on_click,
|
|
}
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:BorderTextureDropDown()
|
|
local function on_click()
|
|
DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["bordertexture"] = this.value
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_Content_BorderTexture, DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["bordertexture"])
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_Border"):SetBackdrop({
|
|
bgFile = "",
|
|
edgeFile = DPSMate.Options.bordertextures[this.value], tile = true, tileSize = 12, edgeSize = 10,
|
|
insets = { left = 5, right = 5, top = 3, bottom = 1 }
|
|
})
|
|
_G("DPSMate_"..DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["name"].."_Border"):SetBackdropBorderColor(DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["contentbordercolor"][1], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["contentbordercolor"][2], DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key]["contentbordercolor"][3])
|
|
end
|
|
|
|
for val, _ in pairs(DPSMate.Options.bordertextures) do
|
|
UIDropDownMenu_AddButton{
|
|
text = val,
|
|
value = val,
|
|
func = on_click,
|
|
}
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:TooltipPositionDropDown()
|
|
local btns = {DPSMate.L["default"], DPSMate.L["topright"], DPSMate.L["topleft"], DPSMate.L["left"], DPSMate.L["top"]}
|
|
|
|
local function on_click()
|
|
DPSMateSettings["tooltipanchor"] = this.value
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_Tooltips_Position, DPSMateSettings["tooltipanchor"])
|
|
end
|
|
|
|
for val, name in pairs(btns) do
|
|
UIDropDownMenu_AddButton{
|
|
text = name,
|
|
value = val,
|
|
func = on_click,
|
|
}
|
|
end
|
|
|
|
if not DPSMate_ConfigMenu.visBars10 then
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_Tooltips_Position, DPSMateSettings["tooltipanchor"])
|
|
end
|
|
DPSMate_ConfigMenu.visBars10 = true
|
|
end
|
|
|
|
function DPSMate.Options:Report()
|
|
local channel = UIDropDownMenu_GetSelectedValue(DPSMate_Report_Channel)
|
|
SelectedChannel = channel
|
|
local arr, cbt, ecbt = DPSMate:GetMode(DPSMate_Report.PaKey)
|
|
local chn, index, name, value, perc, b = nil, nil, nil, nil, nil, nil
|
|
name, value, perc, b = DPSMate:GetSettingValues(arr, cbt, DPSMate_Report.PaKey, ecbt)
|
|
if (channel == DPSMate.L["whisper"]) then
|
|
chn = "WHISPER"; index = DPSMate_Report_Editbox:GetText();
|
|
elseif DPSMate:TContains(DPSMate.L["gchannel"], channel) then
|
|
chn = strupper(channel)
|
|
else
|
|
chn = "CHANNEL"; index = GetChannelName(channel)
|
|
end
|
|
SendChatMessage("BULK", "DPSMateChat", DPSMate.L["name"].." - "..DPSMate.L["reportfor"]..DPSMate:GetModeName(DPSMate_Report.PaKey or 1).." - ".._G("DPSMate_"..DPSMateSettings["windows"][DPSMate_Report.PaKey or 1]["name"].."_Head_Font"):GetText().." - "..b[1]..b[2], chn, nil, index)
|
|
for i=1, DPSMate_Report_Lines:GetValue() do
|
|
if (not value[i] or value[i] == 0) then break end
|
|
if DPSMateSettings["reportdelay"] then
|
|
tinsert(DPSMate.DelayMsg, {i..". "..name[i].." -"..value[i], chn, index})
|
|
else
|
|
SendChatMessage("BULK", "DPSMateChat", i..". "..name[i].." -"..value[i], chn, nil, index)
|
|
end
|
|
end
|
|
DPSMate_Report:Hide()
|
|
end
|
|
|
|
local AbilityModes = {"damage", "dps", "healing", "hps", "OHPS", "overhealing", "effectivehealing", "effectivehps", "deaths", "interrupts", "dispels", "decurses", "curedisease", "curepoison", "liftmagic", "aurasgained", "auraslost", "aurasuptime", "procs", "casts", "ccbreaker", "healingandabsorbs"}
|
|
function DPSMate.Options:ReportUserDetails(obj, channel, name)
|
|
local Key, user = obj:GetParent():GetParent():GetParent().Key, obj.user
|
|
if not user or not DPSMateUser[user] then return end
|
|
local _, cbt, ecbt = DPSMate:GetMode(Key)
|
|
local a,b,c
|
|
if DPSMateSettings["windows"][Key]["CurMode"] == "deaths" then
|
|
a,b,c = DPSMate.RegistredModules[DPSMateSettings["windows"][Key]["CurMode"]]:EvalTable(DPSMateUser[user], Key)
|
|
else
|
|
a,b,c = DPSMate.RegistredModules[DPSMateSettings["windows"][Key]["CurMode"]]:EvalTable(DPSMateUser[user], Key, cbt, ecbt)
|
|
end
|
|
local chn, index
|
|
if (channel == DPSMate.L["whisper"]) then
|
|
chn = "WHISPER"; index = name;
|
|
elseif DPSMate:TContains(DPSMate.L["gchannel"], channel) then
|
|
chn = strupper(channel)
|
|
else
|
|
chn = "CHANNEL"; index = GetChannelName(channel)
|
|
end
|
|
local bb = ""
|
|
if not b and not a then
|
|
return
|
|
end
|
|
if b~=0 then
|
|
bb = " - "..strformat("%.2f", b)
|
|
end
|
|
SendChatMessage("BULK", "DPSMateChat", DPSMate.L["name"].." - "..DPSMate.L["reportof"].." "..user.."'s ".._G("DPSMate_"..DPSMateSettings["windows"][Key]["name"].."_Head_Font"):GetText().." - "..DPSMate:GetModeName(Key)..bb, chn, nil, index)
|
|
for i=1, 10 do
|
|
if (not a[i]) then break end
|
|
local p
|
|
if type(c[i])=="table" then p = strformat("%.2f", c[i][1]).." ("..strformat("%.2f", 100*c[i][1]/b).."%)" else p = strformat("%.2f", c[i]).." ("..strformat("%.2f", 100*c[i]/b).."%)" end
|
|
if DPSMateSettings["windows"][Key]["CurMode"] == "aurasuptime" then p = strformat("%.2f%%", c[i]) end
|
|
if DPSMateSettings["windows"][Key]["CurMode"] == "deaths" then
|
|
local type = " (HIT)"
|
|
if c[i][3]==1 then type=" (CRIT)" elseif c[i][3]==2 then type=" (CRUSH)" end
|
|
if c[i][2]==1 then
|
|
if DPSMateSettings["reportdelay"] then
|
|
tinsert(DPSMate.DelayMsg, {i..". |cFF8cff80"..DPSMate:GetAbilityById(a[i]).." => ".."+"..c[i][1]..type.."|r", chn, index})
|
|
else
|
|
SendChatMessage("BULK", "DPSMateChat", i..". |cFF8cff80"..DPSMate:GetAbilityById(a[i]).." => ".."+"..c[i][1]..type.."|r", chn, nil, index)
|
|
end
|
|
else
|
|
if DPSMateSettings["reportdelay"] then
|
|
tinsert(DPSMate.DelayMsg, {i..". |cFFFF8080"..DPSMate:GetAbilityById(a[i]).." => ".."-"..c[i][1]..type.."|r", chn, index})
|
|
else
|
|
SendChatMessage("BULK", "DPSMateChat", i..". |cFFFF8080"..DPSMate:GetAbilityById(a[i]).." => ".."-"..c[i][1]..type.."|r", chn, nil, index)
|
|
end
|
|
end
|
|
else
|
|
if DPSMateSettings["windows"][Key]["CurMode"] == "fails" then
|
|
if DPSMateSettings["reportdelay"] then
|
|
tinsert(DPSMate.DelayMsg, {i..". "..DPSMate.Modules.Fails:Type(a[i]).." - "..p, chn, index})
|
|
else
|
|
SendChatMessage("BULK", "DPSMateChat", i..". "..DPSMate.Modules.Fails:Type(a[i]).." - "..p, chn, nil, index)
|
|
end
|
|
else
|
|
if DPSMate:TContains(AbilityModes, DPSMateSettings["windows"][Key]["CurMode"]) then
|
|
if DPSMateSettings["reportdelay"] then
|
|
tinsert(DPSMate.DelayMsg, {i..". "..DPSMate:GetAbilityById(a[i]).." - "..p, chn, index})
|
|
else
|
|
SendChatMessage("BULK", "DPSMateChat", i..". "..DPSMate:GetAbilityById(a[i]).." - "..p, chn, nil, index)
|
|
end
|
|
else
|
|
if DPSMateSettings["reportdelay"] then
|
|
tinsert(DPSMate.DelayMsg, {i..". "..DPSMate:GetUserById(a[i]).." - "..p, chn, index})
|
|
else
|
|
SendChatMessage("BULK", "DPSMateChat", i..". "..DPSMate:GetUserById(a[i]).." - "..p, chn, nil, index)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local hexClassColor = {
|
|
warrior = "C79C6E",
|
|
rogue = "FFF569",
|
|
priest = "FFFFFF",
|
|
druid = "FF7D0A",
|
|
warlock = "9482C9",
|
|
mage = "69CCF0",
|
|
hunter = "ABD473",
|
|
paladin = "F58CBA",
|
|
shaman = "0070DE",
|
|
}
|
|
|
|
local CompareExcept = {
|
|
[DPSMate.L["enemydamagedone"]] = true,
|
|
[DPSMate.L["enemydamagetaken"]] = true
|
|
}
|
|
function DPSMate.Options:InializePlayerDewDrop(obj)
|
|
local channel, i = DPSMate.L["gchannel"], 1
|
|
local path = DPSMate.Options.Options[4]["args"]["report"]["args"]
|
|
-- Name
|
|
DPSMate.Options.Options[4]["args"]["player"] = {
|
|
order = 1,
|
|
type = "header",
|
|
name = obj.user,
|
|
}
|
|
DPSMate.Options.Options[4]["args"]["details"] = {
|
|
order = 2,
|
|
type = "execute",
|
|
name = DPSMate.L["opendetails"],
|
|
desc = DPSMate.L["opendetails"],
|
|
func = function() DPSMate.Options:UpdateDetails(obj); DPSMate.Options.Dewdrop:Close() end,
|
|
}
|
|
|
|
-- Report channel
|
|
for i=0, 25 do
|
|
local id, name = GetChannelName(i);
|
|
if name then
|
|
if not DPSMate:TContains(channel, name) then
|
|
tinsert(channel, name)
|
|
end
|
|
end
|
|
end
|
|
|
|
for cat, val in channel do
|
|
path["a"..cat] = {
|
|
order = 10*cat+10,
|
|
type = "execute",
|
|
name = val,
|
|
desc = DPSMate.L["reportdetails"],
|
|
func = (function(v) return function() DPSMate.Options:ReportUserDetails(DPSMate.Options.Dewdrop:GetOpenedParent(), v); DPSMate.Options.Dewdrop:Close() end end)(val),
|
|
}
|
|
end
|
|
|
|
-- Compare with player
|
|
DPSMate.Options.Options[4]["args"]["compare"]["args"] = {}
|
|
path = DPSMate.Options.Options[4]["args"]["compare"]["args"]
|
|
local Key = obj:GetParent():GetParent():GetParent().Key
|
|
local db,cbt = DPSMate:GetMode(Key)
|
|
local temp = {}
|
|
local a = DPSMate:GetSettingValues(db, cbt, Key, 0)
|
|
for cat, name in a do
|
|
if name and name ~= obj.user then
|
|
if DPSMateSettings["windows"][Key]["grouponly"] then
|
|
if DPSMate.Parser.TargetParty[name] then
|
|
tinsert(temp, name)
|
|
end
|
|
else
|
|
tinsert(temp, name)
|
|
end
|
|
end
|
|
end
|
|
sort(temp)
|
|
|
|
local mode = _G(obj:GetParent():GetParent():GetParent():GetName().."_Head_Font"):GetText()
|
|
for mo, ti in strgfind(mode, "(.+) %[(.+)%]") do
|
|
mode = mo
|
|
end
|
|
|
|
for cat, val in temp do
|
|
if cat>100 then break end
|
|
if not strfind(val, "%s") or CompareExcept[mode] then
|
|
path["Arg"..cat] = {
|
|
order = 1,
|
|
type = "execute",
|
|
name = "|cFF"..hexClassColor[DPSMateUser[val][2] or "warrior"]..val.."|r",
|
|
desc = DPSMate.L["opendetails"],
|
|
func = (function(v, n) return function() DPSMate.Options:UpdateDetails(nil, v, n); DPSMate.Options.Dewdrop:Close() end end)(val, obj:GetName()),
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:FormatTime(time)
|
|
if time>60 then
|
|
local rest = ceil(mod(time, 60))
|
|
if rest<10 then
|
|
rest = "0"..rest
|
|
end
|
|
return floor(time/60)..":"..rest.."m"
|
|
else
|
|
return strformat("%.2f", time).."s"
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:NewSegment(segname)
|
|
local max = 0
|
|
local a = ""
|
|
-- Get name of this session
|
|
for c, v in pairs(DPSMateEDT[2]) do
|
|
local CV = 0
|
|
for cat, val in pairs(v) do
|
|
if cat~="i" then
|
|
CV = CV+(val["i"] or 0)
|
|
end
|
|
end
|
|
if max<CV then
|
|
max = CV
|
|
a = c
|
|
end
|
|
end
|
|
local extra = ""
|
|
if a or segname~=nil then
|
|
local name = segname
|
|
if not segname then
|
|
name = DPSMate:GetUserById(a) or DPSMate.L["unknown"]
|
|
extra = " - CBT: "..self:FormatTime(DPSMateCombatTime["current"])
|
|
end
|
|
if name ~= DPSMate.L["unknown"] or (name == DPSMate.L["unknown"] and max > 100) then
|
|
if DPSMateSettings["onlybossfights"] then
|
|
if DPSMate.BabbleBoss:Contains(name) then
|
|
DPSMate.Options:CreateSegment(name..extra)
|
|
end
|
|
else
|
|
DPSMate.Options:CreateSegment(name..extra)
|
|
end
|
|
end
|
|
|
|
DPSMateDamageDone[2] = {}
|
|
DPSMateDamageTaken[2] = {}
|
|
DPSMateEDD[2] = {}
|
|
DPSMateEDT[2] = {}
|
|
DPSMateTHealing[2] = {}
|
|
DPSMateEHealing[2] = {}
|
|
DPSMateOverhealing[2] = {}
|
|
DPSMateEHealingTaken[2] = {}
|
|
DPSMateHealingTaken[2] = {}
|
|
DPSMateOverhealingTaken[2] = {}
|
|
DPSMateAbsorbs[2] = {}
|
|
DPSMateDeaths[2] = {}
|
|
DPSMateInterrupts[2] = {}
|
|
DPSMateDispels[2] = {}
|
|
DPSMateAurasGained[2] = {}
|
|
DPSMateThreat[2] = {}
|
|
DPSMateFails[2] = {}
|
|
DPSMateCCBreaker[2] = {}
|
|
DPSMateCombatTime["current"] = 0.0001
|
|
DPSMateCombatTime["effective"][2] = {}
|
|
DPSMate:PruneStaleUsers()
|
|
DPSMate:SetStatusBarValue()
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:CreateSegment(name)
|
|
local modes = {["DMGDone"] = DPSMateDamageDone[2], ["DMGTaken"] = DPSMateDamageTaken[2], ["EDDone"] = DPSMateEDD[2], ["EDTaken"] = DPSMateEDT[2], ["THealing"] = DPSMateTHealing[2], ["EHealing"] = DPSMateEHealing[2], ["OHealing"] = DPSMateOverhealing[2], ["EHealingTaken"] = DPSMateEHealingTaken[2], ["THealingTaken"] = DPSMateHealingTaken[2], ["OHealingTaken"] = DPSMateOverhealingTaken[2], ["Absorbs"] = DPSMateAbsorbs[2], ["Deaths"] = DPSMateDeaths[2], ["Interrupts"] = DPSMateInterrupts[2], ["Dispels"] = DPSMateDispels[2], ["Auras"] = DPSMateAurasGained[2], ["Threat"] = DPSMateThreat[2], ["Fail"] = DPSMateFails[2], ["CCBreaker"] = DPSMateCCBreaker[2]}
|
|
local maxSeg = DPSMateSettings["datasegments"]
|
|
|
|
tinsert(DPSMateHistory["names"], 1, name.." - "..GameTime_GT())
|
|
for i = DPSMate:TableLength(DPSMateHistory["names"]), maxSeg+1, -1 do
|
|
tremove(DPSMateHistory["names"], i)
|
|
end
|
|
tinsert(DPSMateHistory["timestamps"], 1, time and time() or nil)
|
|
for i = DPSMate:TableLength(DPSMateHistory["timestamps"]), maxSeg+1, -1 do
|
|
tremove(DPSMateHistory["timestamps"], i)
|
|
end
|
|
|
|
for cat, val in pairs(modes) do
|
|
tinsert(DPSMateHistory[cat], 1, DPSMate:CopyTableStripInstant(val))
|
|
for i = DPSMate:TableLength(DPSMateHistory[cat]), maxSeg+1, -1 do
|
|
tremove(DPSMateHistory[cat], i)
|
|
end
|
|
end
|
|
|
|
tinsert(DPSMateCombatTime["segments"], 1, {[1]=DPSMateCombatTime["current"], [2]=DPSMateCombatTime["effective"][2]})
|
|
for i = DPSMate:TableLength(DPSMateCombatTime["segments"]), maxSeg+1, -1 do
|
|
tremove(DPSMateCombatTime["segments"], i)
|
|
end
|
|
|
|
DPSMate.Options:InitializeSegments()
|
|
end
|
|
|
|
function DPSMate.Options:InitializeSegments()
|
|
local i=1
|
|
DPSMate.Options.Options[2]["args"] = {
|
|
total = {
|
|
order = 10,
|
|
type = 'toggle',
|
|
name = DPSMate.L["total"],
|
|
desc = DPSMate.L["totalmode"],
|
|
get = function() return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["options"][2]["total"] end,
|
|
set = function() DPSMate.Options:ToggleDrewDrop(2, "total", DPSMate.Options.Dewdrop:GetOpenedParent()) end,
|
|
},
|
|
currentFight = {
|
|
order = 20,
|
|
type = 'toggle',
|
|
name = DPSMate.L["mcurrent"],
|
|
desc = DPSMate.L["currentmode"],
|
|
get = function() return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["options"][2]["currentfight"] end,
|
|
set = function() DPSMate.Options:ToggleDrewDrop(2, "currentfight", DPSMate.Options.Dewdrop:GetOpenedParent()) end,
|
|
},
|
|
}
|
|
DPSMate.Options.Options[3]["args"]["deletesegment"]["args"] = {}
|
|
for cat, val in pairs(DPSMateHistory["DMGDone"]) do
|
|
if not val then break end
|
|
DPSMate.Options.Options[2]["args"]["segment"..i] = {
|
|
order = 20+i*10,
|
|
type = 'toggle',
|
|
name = i..". "..DPSMateHistory["names"][i],
|
|
desc = DPSMate.L["fdetailsfor"]..DPSMateHistory["names"][i],
|
|
get = loadstring('return DPSMateSettings["windows"][DPSMate.Options.Dewdrop:GetOpenedParent().Key]["options"][2]["segment'..i..'"];'),
|
|
set = loadstring('DPSMate.Options:ToggleDrewDrop(2, "segment'..i..'", DPSMate.Options.Dewdrop:GetOpenedParent());'),
|
|
}
|
|
DPSMate.Options.Options[3]["args"]["deletesegment"]["args"]["segment"..i] = {
|
|
order = i*10,
|
|
type = 'execute',
|
|
name = i..". "..DPSMateHistory["names"][i],
|
|
desc = DPSMate.L["removesegmentof"]..DPSMateHistory["names"][i],
|
|
func = loadstring('DPSMate.Options:RemoveSegment('..i..');'),
|
|
}
|
|
i=i+1
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:OnVerticalScroll(obj, arg1, pre, spec)
|
|
pre = pre or 20
|
|
local maxScroll = _G(obj:GetName().."_Child"):GetHeight()-100
|
|
if spec then maxScroll = maxScroll + 100 end
|
|
local Scroll = obj:GetVerticalScroll()
|
|
local toScroll = (Scroll - (pre*arg1))
|
|
if toScroll < 0 or maxScroll < 0 then
|
|
obj:SetVerticalScroll(0)
|
|
elseif toScroll > maxScroll then
|
|
obj:SetVerticalScroll(maxScroll)
|
|
else
|
|
obj:SetVerticalScroll(toScroll)
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:CreateWindow()
|
|
local na = string.gsub(DPSMate_ConfigMenu_Tab_Window_Editbox:GetText(), "%s", "")
|
|
if (na and not DPSMate:GetKeyByValInTT(DPSMateSettings["windows"], na, "name") and na~="") then
|
|
tinsert(DPSMateSettings["windows"], {
|
|
name = na,
|
|
options = {
|
|
[1] = {
|
|
damage = true
|
|
},
|
|
[2] = {
|
|
total = true
|
|
}
|
|
},
|
|
CurMode = "damage",
|
|
hidden = false,
|
|
scale = 1,
|
|
barfont = "FRIZQT",
|
|
barfontsize = 13,
|
|
barfontflag = "Outline",
|
|
bartexture = "Minimalist",
|
|
barspacing = 1,
|
|
barheight = 17,
|
|
classicons = true,
|
|
ranks = true,
|
|
titlebar = true,
|
|
titlebarfont = "FRIZQT",
|
|
titlebarfontflag = "None",
|
|
titlebarfontsize = 12,
|
|
titlebarheight = 17,
|
|
titlebarreport = true,
|
|
titlebarreset = true,
|
|
titlebarsegments = true,
|
|
titlebarconfig = true,
|
|
titlebarsync = true,
|
|
titlebarenable = true,
|
|
titlebarfilter = true,
|
|
titlebartexture = "Minimalist",
|
|
titlebarbgcolor = {0.1568627450980392,0.1725490196078431,0.1647058823529412},
|
|
titlebarfontcolor = {1.0,0.82,0.0},
|
|
barfontcolor = {1.0,1.0,1.0},
|
|
contentbgtexture = "UI-Tooltip-Background",
|
|
contentbgcolor = {0.01568627450980392,0,1},
|
|
bgbarcolor = {1,1,1},
|
|
numberformat = 1,
|
|
opacity = 1,
|
|
bgopacity = 0,
|
|
titlebaropacity = 1,
|
|
filterclasses = {
|
|
warrior = true,
|
|
rogue = true,
|
|
priest = true,
|
|
hunter = true,
|
|
mage = true,
|
|
warlock = true,
|
|
paladin = true,
|
|
shaman = true,
|
|
druid = true,
|
|
},
|
|
filterpeople = "",
|
|
grouponly = true,
|
|
realtime = false,
|
|
cbtdisplay = false,
|
|
barbg = false,
|
|
totopacity = 1.0,
|
|
borderopacity = 1.0,
|
|
contentbordercolor = {0,0,0},
|
|
borderstrata = 1,
|
|
bordertexture = "UI-Tooltip-Border",
|
|
position = {"CENTER",0,0},
|
|
savsize = {150,100},
|
|
})
|
|
local TL = DPSMate:TableLength(DPSMateSettings["windows"])
|
|
if not _G("DPSMate_"..na) then
|
|
local fr=CreateFrame("Frame", "DPSMate_"..na, UIParent, "DPSMate_Statusframe")
|
|
fr.Key=TL
|
|
end
|
|
_G("DPSMate_"..na):Show()
|
|
if not _G("DPSMate_ConfigMenu_Menu_Button"..(9+TL)) then
|
|
local f = CreateFrame("Button", "DPSMate_ConfigMenu_Menu_Button"..(9+TL), DPSMate_ConfigMenu_Menu, "DPSMate_Template_WindowButton")
|
|
f.Key = TL
|
|
end
|
|
local frame = _G("DPSMate_ConfigMenu_Menu_Button"..(9+TL))
|
|
frame:Show()
|
|
_G("DPSMate_ConfigMenu_Menu_Button"..(9+TL).."Text"):SetText(na)
|
|
if TL>1 then
|
|
frame:SetPoint("TOP", _G("DPSMate_ConfigMenu_Menu_Button"..(8+TL)), "BOTTOM")
|
|
_G("DPSMate_ConfigMenu_Menu_Button"..(8+TL)).after = frame
|
|
else
|
|
frame:SetPoint("TOP", DPSMate_ConfigMenu_Menu_Button1, "BOTTOM")
|
|
end
|
|
frame.after = DPSMate_ConfigMenu_Menu_Button2
|
|
DPSMate_ConfigMenu.num = 9+TL
|
|
frame.func = function()
|
|
_G(this:GetParent():GetParent():GetName()..this:GetParent().selected):Hide()
|
|
_G(this:GetParent():GetParent():GetName().."_Tab_Window"):Show()
|
|
this:GetParent().selected = "_Tab_Window"
|
|
end
|
|
DPSMate_ConfigMenu_Menu_Button2:ClearAllPoints()
|
|
DPSMate_ConfigMenu_Menu_Button2:SetPoint("TOP", frame, "BOTTOM")
|
|
DPSMate:InitializeFrames()
|
|
_G("DPSMate_"..na.."_Head_Font"):SetText(DPSMate.L["damage"])
|
|
_G("DPSMate_"..na.."_ScrollFrame_Child"):SetWidth(150)
|
|
_G("DPSMate_"..na.."_ScrollFrame"):SetHeight(84)
|
|
DPSMate:SetStatusBarValue()
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:RemoveWindow()
|
|
local frame = _G("DPSMate_"..DPSMate_ConfigMenu.Selected)
|
|
if frame then
|
|
frame:Hide()
|
|
_G("DPSMate_ConfigMenu_Menu_Button"..(9+frame.Key)):Hide()
|
|
tremove(DPSMateSettings["windows"], frame.Key)
|
|
DPSMate:InvalidateFrameCache()
|
|
local TL = DPSMate:TableLength(DPSMateSettings["windows"])
|
|
_G("DPSMate_ConfigMenu_Menu_Button"..(9+TL)).after = DPSMate_ConfigMenu_Menu_Button2
|
|
DPSMate_ConfigMenu_Menu_Button2:ClearAllPoints()
|
|
DPSMate_ConfigMenu_Menu_Button2:SetPoint("TOP", _G("DPSMate_ConfigMenu_Menu_Button"..(9+TL)), "BOTTOM")
|
|
UIDropDownMenu_SetSelectedValue(DPSMate_ConfigMenu_Tab_Window_Remove, "None")
|
|
DPSMate_ConfigMenu_Menu_Button1.selected = true
|
|
_G("DPSMate_ConfigMenu_Menu_Button"..(9+frame.Key)).selected = false
|
|
_G("DPSMate_ConfigMenu_Menu_Button"..(9+frame.Key).."Texture"):Hide()
|
|
_G("DPSMate_ConfigMenu_Menu_Button"..(9+frame.Key).."Text"):SetTextColor(1,0.82,0,1)
|
|
_G("DPSMate_ConfigMenu_Menu_Button"..(9+frame.Key).."_Button1"):Hide()
|
|
_G("DPSMate_ConfigMenu_Menu_Button"..(9+frame.Key).."_Button2"):Hide()
|
|
_G("DPSMate_ConfigMenu_Menu_Button"..(9+frame.Key).."_Button3"):Hide()
|
|
DPSMate_ConfigMenu_Menu_Button1Texture:Show()
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:CopyConfiguration()
|
|
local fromName = _G("DPSMate_ConfigMenu_Tab_Window_ConfigFromText"):GetText()
|
|
local toName = _G("DPSMate_ConfigMenu_Tab_Window_ConfigToText"):GetText()
|
|
if fromName~="None" and toName~="None" then
|
|
local fromKey = _G("DPSMate_"..fromName).Key
|
|
local toKey = _G("DPSMate_"..toName).Key
|
|
for cat, val in pairs(DPSMateSettings["windows"][fromKey]) do
|
|
if cat~="name" and cat~="options" then
|
|
if type(val) == "table" then
|
|
DPSMateSettings["windows"][toKey][cat] = DPSMate:CopyTable(val)
|
|
else
|
|
DPSMateSettings["windows"][toKey][cat] = val
|
|
end
|
|
end
|
|
end
|
|
DPSMate:InitializeFrames()
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:Lock()
|
|
DPSMateSettings.lock = true
|
|
for _,val in pairs(DPSMateSettings["windows"]) do
|
|
_G("DPSMate_"..val["name"].."_Resize"):Hide()
|
|
end
|
|
-- Saving positions to prevent a potential crash
|
|
local point, _, _, xOfs, yOfs;
|
|
for key, val in DPSMateSettings["windows"] do
|
|
if _G("DPSMate_"..val["name"]) then
|
|
point, _, _, xOfs, yOfs = _G("DPSMate_"..val["name"]):GetPoint()
|
|
DPSMateSettings["windows"][key]["position"] = {}
|
|
DPSMateSettings["windows"][key]["position"][1] = point
|
|
DPSMateSettings["windows"][key]["position"][2] = xOfs
|
|
DPSMateSettings["windows"][key]["position"][3] = yOfs
|
|
DPSMateSettings["windows"][key]["savsize"] = {}
|
|
DPSMateSettings["windows"][key]["savsize"][1] = _G("DPSMate_"..val["name"]):GetWidth()
|
|
DPSMateSettings["windows"][key]["savsize"][2] = _G("DPSMate_"..val["name"]):GetHeight()
|
|
end
|
|
end
|
|
DPSMate:SendMessage(DPSMate.L["lockedallw"])
|
|
end
|
|
|
|
function DPSMate.Options:Unlock()
|
|
DPSMateSettings.lock = false
|
|
for _,val in pairs(DPSMateSettings["windows"]) do
|
|
_G("DPSMate_"..val["name"].."_Resize"):Show()
|
|
end
|
|
DPSMate:SendMessage(DPSMate.L["unlockedallw"])
|
|
end
|
|
|
|
function DPSMate.Options:Hide(frame)
|
|
DPSMateSettings["windows"][frame.Key]["hidden"] = true
|
|
frame:Hide()
|
|
end
|
|
|
|
function DPSMate.Options:Show(frame)
|
|
DPSMateSettings["windows"][frame.Key]["hidden"] = false
|
|
frame:Show()
|
|
end
|
|
|
|
function DPSMate.Options:RemoveSegment(i)
|
|
for cat, val in DPSMateHistory do
|
|
tremove(DPSMateHistory[cat], i)
|
|
end
|
|
if DPSMateCombatTime["segments"][i] then
|
|
tremove(DPSMateCombatTime["segments"], i)
|
|
end
|
|
DPSMate.Options:InitializeSegments()
|
|
DPSMate.Options.Dewdrop:Close()
|
|
end
|
|
|
|
function DPSMate.Options:PurgeOldSegments()
|
|
if not time then
|
|
DPSMate:SendMessage(DPSMate.L["purgenotimestamp"])
|
|
DPSMate.Options.Dewdrop:Close()
|
|
return
|
|
end
|
|
local cutoff = time() - 86400 -- 24 hours in seconds
|
|
-- Iterate backward so tremove doesn't shift unvisited indices.
|
|
for i = DPSMate:TableLength(DPSMateHistory["timestamps"]), 1, -1 do
|
|
local ts = DPSMateHistory["timestamps"][i]
|
|
if ts and ts < cutoff then
|
|
for cat, val in DPSMateHistory do
|
|
tremove(DPSMateHistory[cat], i)
|
|
end
|
|
if DPSMateCombatTime["segments"][i] then
|
|
tremove(DPSMateCombatTime["segments"], i)
|
|
end
|
|
end
|
|
end
|
|
DPSMate.Options:InitializeSegments()
|
|
DPSMate.Options.Dewdrop:Close()
|
|
DPSMate:SendMessage(DPSMate.L["purgeoldsegmentsdone"])
|
|
end
|
|
|
|
function DPSMate.Options:ToggleTitleBarButtonState()
|
|
local buttons = {"Config", "Reset", "Segments", "Filter", "Report", "Sync", "Enable"}
|
|
for _, val in pairs(DPSMateSettings["windows"]) do
|
|
local parent, i = _G("DPSMate_"..val["name"].."_Head"), 0
|
|
for _, name in pairs(buttons) do
|
|
local button = _G("DPSMate_"..val["name"].."_Head_"..name)
|
|
if val["titlebar"..strlower(name)] then
|
|
button:ClearAllPoints()
|
|
button:SetPoint("RIGHT", parent, "RIGHT", -i*15-2, 0)
|
|
button:Show()
|
|
i=i+1
|
|
else
|
|
button:Hide()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:ToggleState()
|
|
if DPSMateSettings["enable"] then
|
|
DPSMateSettings["sync"] = false
|
|
DPSMateSettings["enable"] = false
|
|
DPSMate:Disable()
|
|
for cat, val in DPSMateSettings["windows"] do
|
|
_G("DPSMate_"..val["name"].."_Head_Sync"):GetNormalTexture():SetVertexColor(1,0,0,1)
|
|
_G("DPSMate_"..val["name"].."_Head_Enable"):SetChecked(false)
|
|
end
|
|
else
|
|
DPSMateSettings["enable"] = true
|
|
DPSMate:Enable()
|
|
for cat, val in DPSMateSettings["windows"] do
|
|
_G("DPSMate_"..val["name"].."_Head_Enable"):SetChecked(true)
|
|
end
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:SetColor()
|
|
local r,g,b = ColorPickerFrame:GetColorRGB()
|
|
local swatch,frame
|
|
swatch = _G(ColorPickerFrame.obj:GetName().."NormalTexture")
|
|
frame = _G(ColorPickerFrame.obj:GetName().."_SwatchBg")
|
|
swatch:SetVertexColor(r,g,b)
|
|
frame.r = r
|
|
frame.g = g
|
|
frame.b = b
|
|
|
|
DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key][ColorPickerFrame.var] = {r,g,b}
|
|
|
|
ColorPickerFrame.rfunc()
|
|
end
|
|
|
|
function DPSMate.Options:CancelColor()
|
|
local r = ColorPickerFrame.previousValues.r
|
|
local g = ColorPickerFrame.previousValues.g
|
|
local b = ColorPickerFrame.previousValues.b
|
|
local swatch,frame
|
|
swatch = _G(ColorPickerFrame.obj:GetName().."NormalTexture")
|
|
frame = _G(ColorPickerFrame.obj:GetName().."_SwatchBg")
|
|
swatch:SetVertexColor(r,g,b)
|
|
frame.r = r
|
|
frame.g = g
|
|
frame.b = b
|
|
|
|
DPSMateSettings["windows"][DPSMate_ConfigMenu_Menu.Key][ColorPickerFrame.var] = {r,g,b}
|
|
|
|
ColorPickerFrame.rfunc()
|
|
end
|
|
|
|
function DPSMate.Options:OpenColorPicker(obj, var, func)
|
|
CloseMenus()
|
|
|
|
local button = _G(obj:GetName().."_SwatchBg")
|
|
|
|
ColorPickerFrame.obj = obj
|
|
ColorPickerFrame.var = var
|
|
ColorPickerFrame.rfunc = func
|
|
|
|
ColorPickerFrame.func = DPSMate.Options.SetColor
|
|
ColorPickerFrame:SetColorRGB(button.r, button.g, button.b)
|
|
ColorPickerFrame.previousValues = {r = button.r, g = button.g, b = button.b, opacity = button.opacity}
|
|
ColorPickerFrame.cancelFunc = DPSMate.Options.CancelColor
|
|
|
|
ColorPickerFrame:SetPoint("TOPLEFT", obj, "TOPRIGHT", 0, 0)
|
|
|
|
ColorPickerFrame:SetFrameStrata("TOOLTIP")
|
|
|
|
ColorPickerFrame:Show()
|
|
end
|
|
|
|
function DPSMate.Options:ShowTooltip()
|
|
if not this.user then return end
|
|
if DPSMateSettings["showtooltips"] then
|
|
DPSMate_Details.PaKey = this:GetParent():GetParent():GetParent().Key
|
|
if DPSMateSettings["tooltipanchor"] == 1 then
|
|
GameTooltip:SetOwner(UIParent, "BOTTOMRIGHT")
|
|
elseif DPSMateSettings["tooltipanchor"] == 2 then
|
|
GameTooltip:SetOwner(this:GetParent():GetParent():GetParent(), "RIGHT")
|
|
elseif DPSMateSettings["tooltipanchor"] == 3 then
|
|
GameTooltip:SetOwner(this:GetParent():GetParent():GetParent(), "LEFT")
|
|
elseif DPSMateSettings["tooltipanchor"] == 4 then
|
|
GameTooltip:SetOwner(this:GetParent():GetParent():GetParent(), "TOP")
|
|
elseif DPSMateSettings["tooltipanchor"] == 5 then
|
|
GameTooltip:SetOwner(this:GetParent():GetParent():GetParent(), "TOPRIGHT")
|
|
end
|
|
local _, cbt = DPSMate:GetMode(DPSMate_Details.PaKey)
|
|
GameTooltip:AddLine(this.user.." ["..self:FormatTime(cbt).."]", 1,0.82,0,1)
|
|
DPSMate.RegistredModules[DPSMateSettings["windows"][DPSMate_Details.PaKey]["CurMode"]]:ShowTooltip(this.user, DPSMate_Details.PaKey)
|
|
GameTooltip:AddLine(" ")
|
|
GameTooltip:AddLine(DPSMate.L["leftclickopend"], 0,1,0,1)
|
|
GameTooltip:AddLine(DPSMate.L["rightclickopenm"], 0,1,0,1)
|
|
GameTooltip:Show()
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:InitializeHideShowWindow()
|
|
local i = 1
|
|
DPSMate.Options.Options[3]["args"]["hidewindow"]["args"] = {}
|
|
DPSMate.Options.Options[3]["args"]["showwindow"]["args"] = {}
|
|
for _,val in pairs(DPSMateSettings["windows"]) do
|
|
DPSMate.Options.Options[3]["args"]["hidewindow"]["args"][val["name"]] = {
|
|
order = i*10,
|
|
type = 'execute',
|
|
name = val["name"],
|
|
desc = DPSMate.L["hide"].." "..val["name"],
|
|
func = loadstring('DPSMate.Options:Hide(getglobal("DPSMate_'..val["name"]..'")); DPSMate.Options.Dewdrop:Close();'),
|
|
}
|
|
DPSMate.Options.Options[3]["args"]["showwindow"]["args"][val["name"]] = {
|
|
order = i*10,
|
|
type = 'execute',
|
|
name = val["name"],
|
|
desc = DPSMate.L["show"].." "..val["name"],
|
|
func = loadstring('DPSMate.Options:Show(getglobal("DPSMate_'..val["name"]..'")); DPSMate.Options.Dewdrop:Close();'),
|
|
}
|
|
i=i+1
|
|
end
|
|
end
|
|
|
|
function DPSMate.Options:CheckButton(name, id)
|
|
if DPSMateSettings[name][id] then
|
|
DPSMateSettings[name][id] = false
|
|
else
|
|
DPSMateSettings[name][id] = true
|
|
end
|
|
DPSMate:SetStatusBarValue()
|
|
end
|
|
|
|
function DPSMate.Options:ToggleSync()
|
|
if DPSMateSettings["sync"] then
|
|
DPSMateSettings["sync"] = false
|
|
for _, val in pairs(DPSMateSettings["windows"]) do
|
|
_G("DPSMate_"..val["name"].."_Head_Sync"):GetNormalTexture():SetVertexColor(1,0,0,1)
|
|
end
|
|
else
|
|
DPSMateSettings["sync"] = true
|
|
DPSMateSettings["enable"] = true
|
|
for _, val in pairs(DPSMateSettings["windows"]) do
|
|
_G("DPSMate_"..val["name"].."_Head_Enable"):SetChecked(true)
|
|
_G("DPSMate_"..val["name"].."_Head_Sync"):GetNormalTexture():SetVertexColor(0.67,0.83,0.45,1)
|
|
end
|
|
end
|
|
DPSMate.Sync.synckey = ""
|
|
end
|
|
|
|
local reportdelay = 0.5
|
|
local reportuptime = 0
|
|
function DPSMate.Options:OnUpdate()
|
|
if DPSMateSettings["reportdelay"] and DPSMate.DelayMsg[1] then
|
|
reportuptime = reportuptime + arg1
|
|
if reportuptime>reportdelay then
|
|
SendChatMessage("BULK", "DPSMateChat", DPSMate.DelayMsg[1][1], DPSMate.DelayMsg[1][2], nil, DPSMate.DelayMsg[1][3])
|
|
tremove(DPSMate.DelayMsg, 1)
|
|
reportuptime = 0
|
|
end
|
|
end
|
|
end |