--[[ รค Name: AdvCombatLog By: Crypton All files and code in this addon is strictly All Rights Reserved unless explicitly stated otherwise. ]] -- Check if d303 fix being used so we can enable timestamp opts. if (os and d303Fix) then ACL_ENTIME = true; else ACL_ENTIME = false; end function AdvCombatLog_Debug(acldbg) DEFAULT_CHAT_FRAME:AddMessage("Debug: "..acldbg); return; end function ACLFileLoader(ACL_FPATH, ACL_FNAME) local func, err = loadfile(ACL_FPATH..ACL_FNAME); if (err) then AdvCombatLog_Debug(ACL_ADDON_NAME.." ERROR: "..ACL_FNAME.." : "..err) return false; end dofile(ACL_FPATH..ACL_FNAME); return true; end function AdvCombatLog_VerCheck() local flag = false; if (not AdvCombatLog_Config) then AdvCombatLog_Config = AdvCombatLog_ConfigDefault; end if (tonumber(AdvCombatLog_Config["ver"]) < tonumber(ACL_VERSION)) then if (tonumber(AdvCombatLog_Config["ver"]) < tonumber(0.45)) then AdvCombatLog_Config = AdvCombatLog_ConfigDefault; elseif (tonumber(AdvCombatLog_Config["ver"]) < tonumber(0.46)) then AdvCombatLog_Config["order"] = AdvCombatLog_ConfigDefault["order"]; end AdvCombatLog_Config["ver"] = ACL_VERSION; flag = true; end SaveVariables("AdvCombatLog_Config"); if (flag) then DEFAULT_CHAT_FRAME:AddMessage(string.format(AdvCombatLog_Lang_UP.."|r", "|cffffffff"..ACL_ADDON_NAME.."|r|cff00ccf"), 255, 255, 255); end AdvCombatLog_Log = {}; SaveVariablesPerCharacter(AdvCombatLog_Log); return; end function AdvCombatLog_FixUI(acllang) if (acllang == "JP" or acllang == "CN" or acllang == "TW") then local win = getglobal("AdvCombatLogConfigFrameTextTimeStamp"); win:ClearAllAnchors(); win:SetAnchor("RIGHT", "TOPRIGHT", "AdvCombatLogConfigFrame", -95, 45); end return; end function AdvCombatLog_Pack(...) return { ... }; end function AdvCombatLog_MultiUnPack(...) local i; local value; local values = {}; for i = 1, select('#', ...) do for _, value in pairs(select(i, ...)) do values[#values + 1] = value; end end return unpack(values); end function AdvCombatLog_RGBToHex(a, b, c, d) local r, g, b = a, b, c; if (d) then r = r * 255; g = g * 255; b = b * 255; end return string.format("%02x%02x%02x", r, g, b); end function AdvCombatLog_H2RGB(aclhex) local r, g, b = string.sub(aclhex, 1, 2), string.sub(aclhex, 3, 4), string.sub(aclhex, 5, 6); r, g, b = tonumber(r, 16), tonumber(g, 16), tonumber(b, 16); return r, g, b; end function AdvCombatLog_ColorCallBackUP() local btnnum = ACL_CURCOL; local r = ColorPickerFrame.r; local g = ColorPickerFrame.g; local b = ColorPickerFrame.b; ACL_TEMPR = r; ACL_TEMPG = g; ACL_TEMPB = b; getglobal("AdvCombatLogConfigFrameColor"..btnnum.."Texture"):SetColor(r, g, b); getglobal("AdvCombatLogConfigFrameTextColor"..btnnum):SetColor(r, g, b); end function AdvCombatLog_ColorCallBackCA() local rgb = AdvCombatLog_Config["colors"][ACL_CURCOL]; local r, g, b = rgb["r"], rgb["g"], rgb["b"]; r, g, b = r / 255, g / 255, b / 255; getglobal("AdvCombatLogConfigFrameColor"..ACL_CURCOL.."Texture"):SetColor(r, g, b); getglobal("AdvCombatLogConfigFrameTextColor"..ACL_CURCOL):SetColor(r, g, b); end function AdvCombatLog_Colorpicker(this) local btnnum = string.gsub(this, "AdvCombatLogConfigFrameColor", ""); btnnum = tonumber(btnnum); local rgb = AdvCombatLog_Config["colors"][btnnum]; local r, g, b = rgb["r"], rgb["g"], rgb["b"]; r, g, b = r / 255, g / 255, b / 255; ACL_CURCOL = btnnum; local info = {}; info.parent = AdvCombatLogConfigFrame; info.titleText = "ACL - "..AdvCombatLog_LangStrings["colorsets"][btnnum]; info.alphaMode = 1; info.r = r; info.g = g; info.b = b; info.a = 1; info.brightnessUp = 1; info.brightnessDown = 0; info.callbackFuncOkay = nil; info.callbackFuncUpdate = AdvCombatLog_ColorCallBackUP; info.callbackFuncCancel = AdvCombatLog_ColorCallBackCA; OpenColorPickerFrameEx(info); SelectAlphaSlider:Hide(); if (not ACL_COLP) then local picker = getglobal("ColorPickerFrame"); picker:ClearAllAnchors(); picker:SetAnchor("BOTTOMLEFT", "TOP", "AdvCombatLogConfigFrame", -175, 0); ACL_COLP = true; end end function AdvCombatLogTSHelp_OnShow() local timeopts = {}; if (not ACL_TSHELP) then local win = getglobal("AdvCombatLogTSFormatFrame"); win:ClearAllAnchors(); win:SetAnchor("TOPRIGHT", "TOPLEFT", "AdvCombatLogConfigFrame", 0, 0); ACL_TSHELP = true; end if (ACL_ENTIME) then timeopts = { [1] = { [1] = "%a", [2] = os.date("%a"), }, [2] = { [1] = "%A", [2] = os.date("%A"), }, [3] = { [1] = "%b", [2] = os.date("%b"), }, [4] = { [1] = "%B", [2] = os.date("%B"), }, [5] = { [1] = "%c", [2] = os.date("%c"), }, [6] = { [1] = "%d", [2] = os.date("%d"), }, [7] = { [1] = "%H", [2] = os.date("%H"), }, [8] = { [1] = "%I", [2] = os.date("%I"), }, [9] = { [1] = "%M", [2] = os.date("%M"), }, [10] = { [1] = "%m", [2] = os.date("%m"), }, [11] = { [1] = "%p", [2] = os.date("%p"), }, [12] = { [1] = "%S", [2] = os.date("%S"), }, [13] = { [1] = "%w", [2] = os.date("%w"), }, [14] = { [1] = "%x", [2] = os.date("%x"), }, [15] = { [1] = "%X", [2] = os.date("%X"), }, [16] = { [1] = "%Y", [2] = os.date("%Y"), }, [17] = { [1] = "%y", [2] = os.date("%y"), }, }; end local i; for i = 1, 17 do local ACLString = getglobal("AdvCombatLog_Lang_T"..i); local text = string.format(ACLString, timeopts[i][1], timeopts[i][2]); local opt = getglobal("AdvCombatLogTSFormatFrameText"..i); opt:SetText(text); end end function AdvCombatLog_TSHelp() if (AdvCombatLogTSFormatFrame:IsVisible()) then AdvCombatLogTSFormatFrame:Hide(); else AdvCombatLogTSFormatFrame:Show(); end end function AdvCombatLogConfig_OnHide() if (AdvCombatLogTSFormatFrame:IsVisible()) then AdvCombatLogTSFormatFrame:Hide(); end ACL_COLP = false; ACL_TSHELP = false; end function AdvCombatLogConfig_OnShow() AdvCombatLogConfigFrameTitle:SetText(ACL_TITLE); AdvCombatLogConfigFrameTextColors:SetColor(0, 255, 52); AdvCombatLogConfigFrameTextTimeStamp:SetColor(0, 255, 52); local i; for i = 1, table.getn(AdvCombatLog_Config["colors"]) do local rgb = AdvCombatLog_Config["colors"][i]; local r, g, b = rgb["r"], rgb["g"], rgb["b"]; r, g, b = r / 255, g / 255, b / 255; getglobal("AdvCombatLogConfigFrameColor"..i.."Texture"):SetColor(r, g, b); getglobal("AdvCombatLogConfigFrameTextColor"..i):SetColor(r, g, b); end AdvCombatLogConfigFrameTSEditBox:SetText(AdvCombatLog_Config["options"][3]); AdvCombatLogConfigFrameTSLBR:SetText(AdvCombatLog_Config["options"][5][1]); AdvCombatLogConfigFrameTSRBR:SetText(AdvCombatLog_Config["options"][5][2]); AdvCombatLogConfigFrameSEP1:SetText(AdvCombatLog_Config["options"][5][3]); AdvCombatLogConfigFrameSEP2:SetText(AdvCombatLog_Config["options"][5][4]); getglobal("AdvCombatLogConfigFrameON"):SetChecked(AdvCombatLog_Config["options"][1]); getglobal("AdvCombatLogConfigFrameTE"):SetChecked(AdvCombatLog_Config["options"][2]); getglobal("AdvCombatLogConfigFrameSL"):SetChecked(AdvCombatLog_Config["options"][4]); local frame = getglobal("AdvCombatLogSOFrame"); frame:ClearAllAnchors(); frame:SetAnchor("TOPLEFT", "TOPRIGHT", "AdvCombatLogConfigFrame", 0, 0); AdvCombatLogSOFrame:Hide(); end function AdvCombatLog_SaveSettings() local i; local chkbx; for i = 1, 8 do local r, g, b = getglobal("AdvCombatLogConfigFrameColor"..i.."Texture"):GetColor(); AdvCombatLog_Config["colors"][i]["r"] = math.floor(r * 255); AdvCombatLog_Config["colors"][i]["g"] = math.floor(g * 255); AdvCombatLog_Config["colors"][i]["b"] = math.floor(b * 255); end chkbx = getglobal("AdvCombatLogConfigFrameON"); if (chkbx:IsChecked()) then AdvCombatLog_Config["options"][1] = true; else AdvCombatLog_Config["options"][1] = false; end chkbx = getglobal("AdvCombatLogConfigFrameTE"); if (chkbx:IsChecked()) then AdvCombatLog_Config["options"][2] = true; else AdvCombatLog_Config["options"][2] = false; end chkbx = getglobal("AdvCombatLogConfigFrameSL"); if (chkbx:IsChecked()) then AdvCombatLog_Config["options"][4] = true; else AdvCombatLog_Config["options"][4] = false; end AdvCombatLog_Config["options"][3] = AdvCombatLogConfigFrameTSEditBox:GetText(); AdvCombatLog_Config["options"][5][1] = AdvCombatLogConfigFrameTSLBR:GetText(); AdvCombatLog_Config["options"][5][2] = AdvCombatLogConfigFrameTSRBR:GetText(); AdvCombatLog_Config["options"][5][3] = AdvCombatLogConfigFrameSEP1:GetText(); AdvCombatLog_Config["options"][5][4] = AdvCombatLogConfigFrameSEP2:GetText(); SaveVariables("AdvCombatLog_Config"); DEFAULT_CHAT_FRAME:AddMessage("|cffffffff"..ACL_ADDON_NAME..":|r |cff00ccfc"..AdvCombatLog_Lang_SS.."|r"); AdvCombatLogConfigFrame:Hide(); end function AdvCombatLog_CommandHandler(this, cmd) if (AdvCombatLogConfigFrame:IsVisible()) then AdvCombatLogConfigFrame:Hide(); else AdvCombatLogConfigFrame:Show(); end end function AdvCombatLog_Toggle() AdvCombatLog_CommandHandler(false, false); end function AdvCombatLog_CheckExists(aclval, aclarr, aclkey) local i; local flag = false; local j = table.getn(aclarr); if (j > 0) then for i = 1, j do if (aclarr[i][aclkey] == aclval) then flag = true; end end end return flag; end function AdvCombatLog_AddMatch(aclstr, acltype) local idx = ACL_COLIDX[acltype]; local rgb = AdvCombatLog_Config["colors"][idx]; local ACL_Temp = { [1] = aclstr, [2] = rgb, [3] = acltype, }; table.insert(ACL_NLTemp, ACL_Temp); return; end function AdvCombatLog_StringCount(str) local i = 0; for _ in string.gmatch(str, "%%d%+") do i = i + 1; end for _ in string.gmatch(str, "%.%+") do i = i + 1; end return i; end function ACL_ShortOrderBTN_OnClick() if (AdvCombatLogSOFrame:IsVisible()) then AdvCombatLogSOFrame:Hide(); else AdvCombatLogSOFrame:Show(); end end function ACL_SOFrame_OnShow() local i; local btn; local ordername; local text; local i; local x = 7; local y = 10; for i = 1, 6 do btn = getglobal("AdvCombatLogSOFramewList_ScrollBarBtn_"..i); btn:Hide(); btn:UnlockHighlight(); end for i = 1, 6 do ordername = AdvCombatLog_Config["order"][i]; text = getglobal("AdvCombatLog_Lang_"..ordername); btn = getglobal("AdvCombatLogSOFramewList_ScrollBarBtn_"..i); btn:ClearAllAnchors(); btn.idx = i; btn.text = AdvCombatLog_Config["order"][i]; btn:SetAnchor("TOPLEFT", "TOPLEFT", "AdvCombatLogSOFramew", x, (21 * i) + y); btn:SetText(text); btn:Show(); end getglobal("AdvCombatLogSOFramewList_ScrollBarScrollUpButton"):Disable(); getglobal("AdvCombatLogSOFramewList_ScrollBarScrollDownButton"):Disable(); AdvCombatLogSOFrameUP:Disable(); AdvCombatLogSOFrameDOWN:Disable(); return; end function ACL_ScrollButton_OnClick(this) local i; local btn; local btnsel = string.gsub(this:GetName(), "AdvCombatLogSOFramewList_ScrollBarBtn_", ""); ACL_ORSELECTED = tonumber(btnsel); for i = 1, 6 do btn = getglobal("AdvCombatLogSOFramewList_ScrollBarBtn_"..i); btn:UnlockHighlight(); end this:LockHighlight(); if (this.idx <= 1) then AdvCombatLogSOFrameUP:Disable(); else AdvCombatLogSOFrameUP:Enable(); end if (this.idx >= 6) then AdvCombatLogSOFrameDOWN:Disable(); else AdvCombatLogSOFrameDOWN:Enable(); end end function ACL_OrderButton_OnClick(direction) local i; local temp = {[1] = "",[2] = "",[3] = "",[4] = "",[5] = "",[6] = "",}; local oldpos = ACL_ORSELECTED; local newpos; local btn; local ordername; local text; local i; if (direction == "UP") then newpos = ACL_ORSELECTED - 1; else newpos = ACL_ORSELECTED + 1; end for i = 1, 6 do if (i ~= ACL_ORSELECTED and i ~= newpos) then temp[i] = AdvCombatLog_Config["order"][i]; elseif (i == newpos) then temp[i] = AdvCombatLog_Config["order"][ACL_ORSELECTED]; else temp[i] = AdvCombatLog_Config["order"][newpos]; end end AdvCombatLog_Config["order"] = temp; SaveVariables("AdvCombatLog_Config"); for i = 1, 6 do ordername = AdvCombatLog_Config["order"][i]; text = getglobal("AdvCombatLog_Lang_"..ordername); btn = getglobal("AdvCombatLogSOFramewList_ScrollBarBtn_"..i); if (i == newpos) then btn:LockHighlight(); else btn:UnlockHighlight(); end btn.idx = i; btn.text = AdvCombatLog_Config["order"][i]; btn:SetText(text); end ACL_ORSELECTED = newpos; if (newpos <= 1) then AdvCombatLogSOFrameUP:Disable(); else AdvCombatLogSOFrameUP:Enable(); end if (newpos >= 6) then AdvCombatLogSOFrameDOWN:Disable(); else AdvCombatLogSOFrameDOWN:Enable(); end end