tinsert(UISpecialFrames, "CT_RAMenuFrame"); CT_RA_Ressers = { }; CT_RA_PartyFrame_IsShown = nil; CT_RAMenu_Locked = 1; CT_RA_PartyMembers = { }; CT_RA_CurrCast = nil; CT_RA_InCombat = nil; function CT_RAMenu_OnLoad() CT_RAMenuFrameHomeButton1Text:SetText("General Options"); CT_RAMenuFrameHomeButton2Text:SetText("Buff Options"); CT_RAMenuFrameHomeButton3Text:SetText("Misc Options"); CT_RAMenuFrameHomeButton4Text:SetText("Additional Options"); CT_RAMenuFrameHomeButton5Text:SetText("Installation Guide"); CT_RAMenuFrameHomeButton6Text:SetText("Boss Mods"); CT_RAMenuFrameHomeButton7Text:SetText("Debuff Curing"); CT_RAMenuFrameHomeButton8Text:SetText("Option Sets"); CT_RAMenuFrameHomeButton1Description:SetText("Change general stuff, such as whether to show mana bars, etc etc."); CT_RAMenuFrameHomeButton2Description:SetText("Change the way Buffs and Debuffs are displayed."); CT_RAMenuFrameHomeButton3Description:SetText("Things that do not fit in other categories go here."); CT_RAMenuFrameHomeButton4Description:SetText("Regulating message spam, scaling of windows, etc."); CT_RAMenuFrameHomeButton5Description:SetText("Just started using the mod? Look here for instructions on how to set it up."); CT_RAMenuFrameHomeButton6Description:SetText("Several features to aid you in killing raid bosses."); CT_RAMenuFrameHomeButton7Description:SetText("Configure the debuff curing feature."); CT_RAMenuFrameHomeButton8Description:SetText("Save and load sets of options for easier setup."); end function CT_RAMenu_OnShow() CT_RAMenu_ShowHome(); if ( this:GetScale() <= 0.8 ) then this:SetScale(0.8); end CT_RAMenuFrameHomeButton1:SetScale(this:GetScale()/1.09758); CT_RAMenuFrameHomeButton2:SetScale(this:GetScale()/1.09758); CT_RAMenuFrameHomeButton3:SetScale(this:GetScale()/1.09758); CT_RAMenuFrameHomeButton4:SetScale(this:GetScale()/1.09758); CT_RAMenuFrameHomeButton5:SetScale(this:GetScale()/1.09758); CT_RAMenuFrameHomeButton6:SetScale(this:GetScale()/1.09758); CT_RAMenuFrameHomeButton7:SetScale(this:GetScale()/1.09758); CT_RAMenuFrameHomeButton8:SetScale(this:GetScale()/1.09758); end function CT_RAMenuButton_OnClick(id) if ( not id ) then id = this:GetID(); end CT_RAMenuFrameHome:Hide(); if ( id == 1 ) then CT_RAMenuFrameGeneral:Show(); elseif ( id == 2 ) then CT_RAMenuFrameBuffs:Show(); elseif ( id == 3 ) then CT_RAMenuFrameMisc:Show(); elseif ( id == 4 ) then CT_RAMenuFrameAdditional:Show(); elseif ( id == 5 ) then CT_RAMenuFrameSort:Show(); elseif ( id == 6 ) then CT_RAMenuFrameBoss:Show(); elseif ( id == 7 ) then CT_RAMenuFrameDebuff:Show(); elseif ( id == 8 ) then CT_RAMenuFrameOptionSets:Show(); end end function CT_RAMenu_ShowHome() CT_RAMenuFrameHome:Show(); CT_RAMenuFrameGeneral:Hide(); CT_RAMenuFrameBuffs:Hide(); CT_RAMenuFrameSort:Hide(); CT_RAMenuFrameMisc:Hide(); CT_RAMenuFrameAdditional:Hide(); CT_RAMenuFrameBoss:Hide(); CT_RAMenuFrameDebuff:Hide(); CT_RAMenuFrameOptionSets:Hide(); end function CT_RAMenu_UpdateMenu() local admiralsHat, foundDampen; for k, v in CT_RAMenu_Options["temp"]["BuffArray"] do if ( v["name"] == CT_RA_DAMPENMAGIC ) then foundDampen = k; elseif ( v["name"] == CT_RA_ADMIRALSHAT ) then admiralsHat = k; end end if ( admiralsHat ) then tremove(CT_RAMenu_Options["temp"]["BuffArray"], admiralsHat); end if ( not foundDampen ) then tinsert(CT_RAMenu_Options["temp"]["BuffArray"], { ["show"] = -1, ["name"] = CT_RA_AMPLIFYMAGIC, ["index"] = 20 }); tinsert(CT_RAMenu_Options["temp"]["BuffArray"], { ["show"] = -1, ["name"] = CT_RA_DAMPENMAGIC, ["index"] = 21 }); end for i = 1, 6, 1 do if ( type(CT_RAMenu_Options["temp"]["DebuffColors"][i]["type"]) == "table" ) then getglobal("CT_RAMenuFrameBuffsDebuff" .. i .. "Text"):SetText(string.gsub(CT_RAMenu_Options["temp"]["DebuffColors"][i]["type"][CT_RA_GetLocale()], "_", " ")); else getglobal("CT_RAMenuFrameBuffsDebuff" .. i .. "Text"):SetText(string.gsub(CT_RAMenu_Options["temp"]["DebuffColors"][i]["type"], "_", " ")); end local val = CT_RAMenu_Options["temp"]["DebuffColors"][i]; getglobal("CT_RAMenuFrameBuffsDebuff" .. i .. "SwatchNormalTexture"):SetVertexColor(val.r, val.g, val.b); if ( val["id"] ~= -1 ) then getglobal("CT_RAMenuFrameBuffsDebuff" .. i .. "CheckButton"):SetChecked(1); getglobal("CT_RAMenuFrameBuffsDebuff" .. i .. "Text"):SetTextColor(1, 1, 1); else getglobal("CT_RAMenuFrameBuffsDebuff" .. i .. "CheckButton"):SetChecked(nil); getglobal("CT_RAMenuFrameBuffsDebuff" .. i .. "Text"):SetTextColor(0.3, 0.3, 0.3); end end for key, val in CT_RAMenu_Options["temp"]["BuffArray"] do if ( val["show"] ~= -1 ) then getglobal("CT_RAMenuFrameBuffsBuff" .. key .. "CheckButton"):SetChecked(1); getglobal("CT_RAMenuFrameBuffsBuff" .. key .. "Text"):SetTextColor(1, 1, 1); else getglobal("CT_RAMenuFrameBuffsBuff" .. key .. "CheckButton"):SetChecked(nil); getglobal("CT_RAMenuFrameBuffsBuff" .. key .. "Text"):SetTextColor(0.3, 0.3, 0.3); end local spell = val["name"]; if ( type(spell) == "table" ) then getglobal("CT_RAMenuFrameBuffsBuff" .. key .. "Text"):SetText(spell[1]); getglobal("CT_RAMenuFrameBuffsBuff" .. key).tooltip = spell[1] .. " & " .. spell[2]; else getglobal("CT_RAMenuFrameBuffsBuff" .. key .. "Text"):SetText(spell); getglobal("CT_RAMenuFrameBuffsBuff" .. key).tooltip = nil; end end CT_RAMenuFrameBuffsNotifyDebuffs:SetChecked(CT_RAMenu_Options["temp"]["NotifyDebuffs"]); for i = 1, 8, 1 do getglobal("CT_RAMenuFrameBuffsNotifyDebuffsGroup" .. i .. "Text"):SetText("Group " .. i); if ( not CT_RAMenu_Options["temp"]["NotifyDebuffs"] or ( not CT_RAMenu_Options["temp"]["NotifyDebuffs"]["main"] and CT_RAMenu_Options["temp"]["NotifyDebuffs"]["hidebuffs"] ) ) then getglobal("CT_RAMenuFrameBuffsNotifyDebuffsGroup" .. i .. "Text"):SetTextColor(0.3, 0.3, 0.3); getglobal("CT_RAMenuFrameBuffsNotifyDebuffsGroup" .. i .. "CheckButton"):Disable(); getglobal("CT_RAMenuFrameBuffsNotifyDebuffsClass" .. i .. "Text"):SetTextColor(0.3, 0.3, 0.3); getglobal("CT_RAMenuFrameBuffsNotifyDebuffsClass" .. i .. "CheckButton"):Disable(); end getglobal("CT_RAMenuFrameBuffsNotifyDebuffs"):SetChecked(CT_RAMenu_Options["temp"]["NotifyDebuffs"]["main"]); getglobal("CT_RAMenuFrameBuffsNotifyBuffs"):SetChecked(not CT_RAMenu_Options["temp"]["NotifyDebuffs"]["hidebuffs"]); getglobal("CT_RAMenuFrameBuffsNotifyDebuffsGroup" .. i .. "CheckButton"):SetChecked(CT_RAMenu_Options["temp"]["NotifyDebuffs"][i]); getglobal("CT_RAMenuFrameBuffsNotifyDebuffsClass" .. i .. "CheckButton"):SetChecked(CT_RAMenu_Options["temp"]["NotifyDebuffsClass"][i]); end for k, v in CT_RA_ClassPositions do if ( k ~= CT_RA_SHAMAN or ( UnitFactionGroup("player") and UnitFactionGroup("player") == "Horde" ) ) then getglobal("CT_RAMenuFrameBuffsNotifyDebuffsClass" .. v .. "Text"):SetText(k); end end CT_RAMenuFrameGeneralDisplayShowMPCB:SetChecked(CT_RAMenu_Options["temp"]["HideMP"]); CT_RAMenuFrameGeneralDisplayShowRPCB:SetChecked(CT_RAMenu_Options["temp"]["HideRP"]); if ( CT_RAMenu_Options["temp"]["MemberHeight"] == 32 ) then CT_RAMenuFrameGeneralDisplayShowHealthCB:SetChecked(1); else CT_RAMenuFrameGeneralDisplayShowHealthCB:SetChecked(nil); end CT_RAMenuFrameGeneralDisplayShowGroupsCB:SetChecked(not CT_RAMenu_Options["temp"]["HideNames"]); CT_RAMenuFrameGeneralDisplayLockGroupsCB:SetChecked(CT_RAMenu_Options["temp"]["LockGroups"]); CT_RAMenuFrameGeneralDisplayWindowColorSwatchNormalTexture:SetVertexColor(CT_RAMenu_Options["temp"]["DefaultColor"].r, CT_RAMenu_Options["temp"]["DefaultColor"].g, CT_RAMenu_Options["temp"]["DefaultColor"].b); CT_RAMenuFrameGeneralDisplayShowHPSwatchNormalTexture:SetVertexColor(CT_RAMenu_Options["temp"]["PercentColor"].r, CT_RAMenu_Options["temp"]["PercentColor"].g, CT_RAMenu_Options["temp"]["PercentColor"].b); CT_RAMenuFrameGeneralDisplayAlertColorSwatchNormalTexture:SetVertexColor(CT_RAMenu_Options["temp"]["DefaultAlertColor"].r, CT_RAMenu_Options["temp"]["DefaultAlertColor"].g, CT_RAMenu_Options["temp"]["DefaultAlertColor"].b); CT_RA_UpdateRaidGroupColors(); CT_RA_UpdateRaidMovability(); CT_RAMenu_CheckParty(); if ( CT_RAMenu_Options["temp"]["ShowHP"] ) then UIDropDownMenu_SetSelectedID(CT_RAMenuFrameGeneralDisplayHealthDropDown, CT_RAMenu_Options["temp"]["ShowHP"]); else UIDropDownMenu_SetSelectedID(CT_RAMenuFrameGeneralDisplayHealthDropDown, 5); end if ( CT_RAMenu_Options["temp"]["ShowDebuffs"] ) then UIDropDownMenu_SetSelectedID(CT_RAMenuFrameBuffsBuffsDropDown, 2); CT_RAMenuFrameBuffsBuffsDropDownText:SetText("Show debuffs"); elseif ( CT_RAMenu_Options["temp"]["ShowBuffsDebuffed"] ) then UIDropDownMenu_SetSelectedID(CT_RAMenuFrameBuffsBuffsDropDown, 3); CT_RAMenuFrameBuffsBuffsDropDownText:SetText("Show buffs until debuffed"); else UIDropDownMenu_SetSelectedID(CT_RAMenuFrameBuffsBuffsDropDown, 1); CT_RAMenuFrameBuffsBuffsDropDownText:SetText("Show buffs"); end local num = 0; if ( CT_RAMenu_Options["temp"]["ShowGroups"] ) then for k, v in CT_RAMenu_Options["temp"]["ShowGroups"] do num = num + 1; getglobal("CT_RAOptionsGroupCB" .. k):SetChecked(1); end if ( num > 0 ) then CT_RACheckAllGroups:SetChecked(1); else CT_RACheckAllGroups:SetChecked(nil); end else for i = 1, 8, 1 do getglobal("CT_RAOptionsGroupCB" .. i):SetChecked(nil); end end CT_RAMenuFrameGeneralMiscHideOfflineCB:SetChecked(CT_RAMenu_Options["temp"]["HideOffline"]); CT_RAMenuFrameGeneralMiscSortAlphaCB:SetChecked(CT_RAMenu_Options["temp"]["SubSortByName"]); CT_RAMenuFrameGeneralMiscBorderCB:SetChecked(CT_RAMenu_Options["temp"]["HideBorder"]); CT_RAMenuFrameGeneralMiscShowMTsCB:SetChecked(not CT_RAMenu_Options["temp"]["HideMTs"]); CT_RAMenuFrameGeneralMiscShowMetersCB:SetChecked( (CT_RAMenu_Options["temp"]["StatusMeters"] and CT_RAMenu_Options["temp"]["StatusMeters"]["Show"] ) ); CT_RAMenuFrameGeneralMiscHidePartyCB:SetChecked(CT_RAMenu_Options["temp"]["HideParty"]); CT_RAMenuFrameGeneralMiscHidePartyRaidCB:SetChecked(CT_RAMenu_Options["temp"]["HidePartyRaid"]); CT_RAMenuFrameMiscPlayRSSoundCB:SetChecked(CT_RAMenu_Options["temp"]["PlayRSSound"]); CT_RAMenuFrameMiscSendRARSCB:SetChecked(CT_RAMenu_Options["temp"]["SendRARS"]); CT_RAMenuFrameMiscShowAFKCB:SetChecked(CT_RAMenu_Options["temp"]["ShowAFK"]); CT_RAMenuFrameMiscShowTooltipCB:SetChecked(not CT_RAMenu_Options["temp"]["HideTooltip"]); CT_RAMenuFrameMiscDisableQueryCB:SetChecked(CT_RAMenu_Options["temp"]["DisableQuery"]); CT_RAMenuFrameMiscNotifyGroupChangeCB:SetChecked(CT_RAMenu_Options["temp"]["NotifyGroupChange"]); CT_RAMenuFrameMiscNotifyGroupChangeCBSound:SetChecked(CT_RAMenu_Options["temp"]["NotifyGroupChangeSound"]); CT_RAMenuFrameMiscNoColorChangeCB:SetChecked(CT_RAMenu_Options["temp"]["HideColorChange"]); CT_RAMenuFrameMiscShowResMonitorCB:SetChecked(CT_RAMenu_Options["temp"]["ShowMonitor"]); CT_RAMenuFrameMiscHideButtonCB:SetChecked(CT_RAMenu_Options["temp"]["HideButton"]); CT_RAMenuFrameMiscShowMTTTCB:SetChecked(CT_RAMenu_Options["temp"]["ShowMTTT"]); CT_RAMenuFrameAdditionalEMShowCB:SetChecked(CT_RAMenu_Options["temp"]["ShowEmergency"]); CT_RAMenuFrameMiscMCPercentCheck:SetChecked(CT_RAMenu_Options["temp"]["UsePercentValues"]); CT_RAMenuFrameMiscAggroNotifierCB:SetChecked(CT_RAMenu_Options["temp"]["AggroNotifier"]); CT_RAMenuFrameMiscAggroNotifierSoundCB:SetChecked(CT_RAMenu_Options["temp"]["AggroNotifierSound"]); if ( not CT_RAMenu_Options["temp"]["AggroNotifier"] ) then CT_RAMenuFrameMiscAggroNotifierSoundCB:Disable(); CT_RAMenuFrameMiscAggroNotifierSound:SetTextColor(0.3, 0.3, 0.3); end if ( not CT_RAMenu_Options["temp"]["ShowEmergency"] ) then CT_RAMenuFrameAdditionalEMPartyCB:Disable(); CT_RAMenuFrameAdditionalEMPartyText:SetTextColor(0.3, 0.3, 0.3); CT_RAMenuFrameAdditionalEMOutsideRaidCB:Disable(); CT_RAMenuFrameAdditionalEMOutsideRaidText:SetTextColor(0.3, 0.3, 0.3); end CT_RAMenuFrameAdditionalEMPartyCB:SetChecked(CT_RAMenu_Options["temp"]["ShowEmergencyParty"]); CT_RAMenuFrameAdditionalEMOutsideRaidCB:SetChecked(CT_RAMenu_Options["temp"]["ShowEmergencyOutsideRaid"]); if ( CT_RAMenu_Options["temp"]["HideButton"] ) then CT_RASets_Button:Hide(); else CT_RASets_Button:Show(); end if ( not CT_RAMenu_Options["temp"]["NotifyGroupChange"] ) then CT_RAMenuFrameMiscNotifyGroupChangeCBSound:Disable(); CT_RAMenuFrameMiscNotifyGroupChangeSound:SetTextColor(0.3, 0.3, 0.3); else CT_RAMenuFrameMiscNotifyGroupChangeCBSound:Enable(); CT_RAMenuFrameMiscNotifyGroupChangeSound:SetTextColor(1, 1, 1); end if ( not CT_RAMenu_Options["temp"]["ShowMTTT"] ) then CT_RAMenuFrameMiscNoColorChangeCB:Disable(); CT_RAMenuFrameMiscNoColorChange:SetTextColor(0.3, 0.3, 0.3); else CT_RAMenuFrameMiscNoColorChangeCB:Enable(); CT_RAMenuFrameMiscNoColorChange:SetTextColor(1, 1, 1); end if ( CT_RAMenu_Options["temp"]["WindowScaling"] ) then CT_RAMenuGlobalFrame.scaleupdate = 0.1; end if ( CT_RAMenu_Options["temp"]["SORTTYPE"] == "class" ) then CT_RA_SetSortType("class"); elseif ( CT_RAMenu_Options["temp"]["SORTTYPE"] == "custom" ) then CT_RA_SetSortType("custom"); else CT_RA_SetSortType("group"); end if ( CT_RAMenu_Options["temp"]["StatusMeters"] ) then CT_RAMetersFrame:SetBackdropColor(CT_RAMenu_Options["temp"]["StatusMeters"]["Background"].r, CT_RAMenu_Options["temp"]["StatusMeters"]["Background"].g, CT_RAMenu_Options["temp"]["StatusMeters"]["Background"].b, CT_RAMenu_Options["temp"]["StatusMeters"]["Background"].a); CT_RAMetersFrame:SetBackdropBorderColor(1, 1, 1, CT_RAMenu_Options["temp"]["StatusMeters"]["Background"].a); if ( CT_RAMenu_Options["temp"]["StatusMeters"]["Show"] and GetNumRaidMembers() > 0 ) then CT_RAMetersFrame:Show(); else CT_RAMetersFrame:Hide(); end end if ( CT_RAMenu_Options["temp"]["EMBG"] ) then CT_RA_EmergencyFrame:SetBackdropColor(CT_RAMenu_Options["temp"]["EMBG"].r, CT_RAMenu_Options["temp"]["EMBG"].g, CT_RAMenu_Options["temp"]["EMBG"].b, CT_RAMenu_Options["temp"]["EMBG"].a); CT_RA_EmergencyFrame:SetBackdropBorderColor(1, 1, 1, CT_RAMenu_Options["temp"]["EMBG"].a); end if ( CT_RAMenu_Options["temp"]["RMBG"] ) then CT_RA_ResFrame:SetBackdropColor(CT_RAMenu_Options["temp"]["RMBG"].r, CT_RAMenu_Options["temp"]["RMBG"].g, CT_RAMenu_Options["temp"]["RMBG"].b, CT_RAMenu_Options["temp"]["RMBG"].a); CT_RA_ResFrame:SetBackdropBorderColor(1, 1, 1, CT_RAMenu_Options["temp"]["RMBG"].a); end if ( CT_RAMenu_Options["temp"]["ShowHP"] ) then local table = { "Show Values", "Show Percentages", "Show Deficit", "Show only MTT HP %" }; UIDropDownMenu_SetSelectedID(CT_RAMenuFrameGeneralDisplayHealthDropDown, CT_RAMenu_Options["temp"]["ShowHP"]); CT_RAMenuFrameGeneralDisplayHealthDropDownText:SetText(table[CT_RAMenu_Options["temp"]["ShowHP"]]); else UIDropDownMenu_SetSelectedID(CT_RAMenuFrameGeneralDisplayHealthDropDown, 5); CT_RAMenuFrameGeneralDisplayHealthDropDownText:SetText("Show None"); end CT_RAMenuMisc_Slider_Update("CT_RAMenuFrameMiscMCSlider1"); CT_RAMenuMisc_Slider_Update("CT_RAMenuFrameMiscMCSlider2"); CT_RAMenuMisc_Slider_InitLagSlider("CT_RAMenuFrameMiscMCSlider3"); CT_RAMenuAdditional_Scaling_OnShow(CT_RAMenuFrameAdditionalScalingSlider1); CT_RAMenuAdditional_ScalingMT_OnShow(CT_RAMenuFrameAdditionalScalingSlider2); CT_RAMenuAdditional_EM_OnShow(CT_RAMenuFrameAdditionalEMSlider); CT_RAMenuAdditional_EM_OnShow(CT_RAMenuFrameAdditionalEMSlider2); CT_RAMenuAdditional_BG_OnShow(CT_RAMenuFrameAdditionalBGSlider); if ( CT_RA_Channel ) then CT_RAMenuFrameGeneralChannelChannelEB:SetText(CT_RA_Channel); else CT_RAMenuFrameGeneralChannelChannelEB:SetText(""); end CT_RA_Emergency_UpdateHealth(); CT_RAMenu_UpdateWindowPositions(); end function CT_RAMenuBuffs_OnEvent() if ( event == "VARIABLES_LOADED" ) then local changed; for k, v in CT_RAMenu_Options do if ( v["WindowPositions"] and v["WindowPositions"]["CT_RA_EmergencyFrame"] ) then CT_RAMenu_Options[k]["WindowPositions"]["CT_RA_EmergencyFrame"] = nil; changed = 1; end end if ( changed ) then CT_RAMenu_SaveWindowPositions(); CT_RAMenu_UpdateWindowPositions(); end if ( not CT_RA_ModVersion or CT_RA_ModVersion ~= CT_RA_VersionNumber ) then if ( not CT_RA_ModVersion or CT_RA_ModVersion < 1.4 ) then CT_RA_UpdateFrame.showDialog = 5; end if ( not CT_RA_ModVersion or CT_RA_ModVersion < 1.165 ) then DEFAULT_CHAT_FRAME:AddMessage(" All options reset due to new options format. We apoligize for this.", 1, 1, 0); CT_RA_ResetOptions(); end CT_RA_ModVersion = CT_RA_VersionNumber; end if ( not CT_RAMenu_Options["temp"] or CT_RAMenu_Options["temp"]["unchanged"] ) then CT_RAMenu_Options["temp"] = { }; for k, v in CT_RAMenu_Options[CT_RAMenu_CurrSet] do CT_RAMenu_Options["temp"][k] = v; end CT_RAMenu_Options["temp"]["unchanged"] = nil; end CT_RAMenu_UpdateMenu(); CT_RASets_Button:SetPoint("TOPLEFT", "Minimap", "TOPLEFT", 52 - (80 * cos(CT_RASets_ButtonPosition)), (80 * sin(CT_RASets_ButtonPosition)) - 52); if ( CT_RAMenu_Locked == 0 ) then CT_RAMenuFrameHomeLock:SetText("Lock"); end if ( CT_RAMenu_Options["temp"]["ShowMonitor"] and GetNumRaidMembers() > 0 ) then CT_RA_ResFrame:Show(); end CT_RA_UpdateRaidGroup(); elseif ( event == "PARTY_MEMBERS_CHANGED" or event == "RAID_ROSTER_UPDATE" ) then CT_RAMenu_CheckParty(); end end function CT_RA_Join(channel) if ( channel and GetChannelName(channel) == 0 ) then local name = channel; local zoneChannel, channelName = JoinChannelByName(name, nil, DEFAULT_CHAT_FRAME:GetID()); CT_RA_UpdateFrame.SS = 3; if ( channelName ) then name = channelName; end if ( not zoneChannel ) then return; end local i = 1; while ( DEFAULT_CHAT_FRAME.channelList[i] ) do i = i + 1; end DEFAULT_CHAT_FRAME.channelList[i] = name; DEFAULT_CHAT_FRAME.zoneChannelList[i] = zoneChannel; end end function CT_RAMenu_CheckParty() if ( ( CT_RAMenu_Options["temp"]["HideParty"] and GetNumRaidMembers() > 0 ) or ( CT_RAMenu_Options["temp"]["HidePartyRaid"] and GetNumRaidMembers() == 0 ) ) then HidePartyFrame(); else ShowPartyFrame(); end if ( CT_CheckLSidebar ) then CT_CheckLSidebar(); end end CT_oldShowPartyFrame = ShowPartyFrame; function CT_newShowPartyFrame() CT_oldShowPartyFrame(); if ( CT_RA_PartyFrame_IsShown ) then CT_RAMenu_CheckParty(); end end ShowPartyFrame = CT_newShowPartyFrame; function CT_RAMenuNotify_SetChecked() if ( this == CT_RAMenuFrameBuffsNotifyDebuffs ) then CT_RAMenu_Options["temp"]["NotifyDebuffs"]["main"] = this:GetChecked(); else CT_RAMenu_Options["temp"]["NotifyDebuffs"]["hidebuffs"] = not this:GetChecked(); end for i = 1, 8, 1 do if ( not CT_RAMenu_Options["temp"]["NotifyDebuffs"]["main"] and CT_RAMenu_Options["temp"]["NotifyDebuffs"]["hidebuffs"] ) then getglobal("CT_RAMenuFrameBuffsNotifyDebuffsGroup" .. i .. "Text"):SetTextColor(0.3, 0.3, 0.3); getglobal("CT_RAMenuFrameBuffsNotifyDebuffsGroup" .. i .. "CheckButton"):Disable(); getglobal("CT_RAMenuFrameBuffsNotifyDebuffsClass" .. i .. "Text"):SetTextColor(0.3, 0.3, 0.3); getglobal("CT_RAMenuFrameBuffsNotifyDebuffsClass" .. i .. "CheckButton"):Disable(); else getglobal("CT_RAMenuFrameBuffsNotifyDebuffsGroup" .. i .. "Text"):SetTextColor(1, 1, 1); getglobal("CT_RAMenuFrameBuffsNotifyDebuffsGroup" .. i .. "CheckButton"):Enable(); getglobal("CT_RAMenuFrameBuffsNotifyDebuffsClass" .. i .. "Text"):SetTextColor(1, 1, 1); getglobal("CT_RAMenuFrameBuffsNotifyDebuffsClass" .. i .. "CheckButton"):Enable(); end end end function CT_RAMenuNotifyGroup_SetChecked() CT_RAMenu_Options["temp"]["NotifyDebuffs"][this:GetParent():GetID()] = this:GetChecked(); end function CT_RAMenuNotifyClass_SetChecked() CT_RAMenu_Options["temp"]["NotifyDebuffsClass"][this:GetParent():GetID()] = this:GetChecked(); end function CT_RAMenuDebuff_OnClick() local frame = this:GetParent(); local type = getglobal(this:GetParent():GetName() .. "Text"):GetText(); type = gsub(type, " ", ""); frame.r = CT_RAMenu_Options["temp"]["DebuffColors"][frame:GetID()]["r"]; frame.g = CT_RAMenu_Options["temp"]["DebuffColors"][frame:GetID()]["g"]; frame.b = CT_RAMenu_Options["temp"]["DebuffColors"][frame:GetID()]["b"]; frame.opacity = CT_RAMenu_Options["temp"]["DebuffColors"][frame:GetID()]["a"]; frame.opacityFunc = CT_RAMenuDebuff_SetColor; frame.swatchFunc = CT_RAMenuDebuff_SetOpacity; frame.hasOpacity = 1; ColorPickerFrame.frame = frame; CloseMenus(); UIDropDownMenuButton_OpenColorPicker(frame); end function CT_RAMenuDebuff_SetColor() local type = getglobal(ColorPickerFrame.frame:GetName() .. "Text"):GetText(); local r, g, b = ColorPickerFrame:GetColorRGB(); CT_RAMenu_Options["temp"]["DebuffColors"][ColorPickerFrame.frame:GetID()]["r"] = r; CT_RAMenu_Options["temp"]["DebuffColors"][ColorPickerFrame.frame:GetID()]["g"] = g; CT_RAMenu_Options["temp"]["DebuffColors"][ColorPickerFrame.frame:GetID()]["b"] = b; getglobal(ColorPickerFrame.frame:GetName() .. "SwatchNormalTexture"):SetVertexColor(r, g, b); end function CT_RAMenuDebuff_SetOpacity() local type = getglobal(ColorPickerFrame.frame:GetName() .. "Text"):GetText(); local a = OpacitySliderFrame:GetValue(); CT_RAMenu_Options["temp"]["DebuffColors"][ColorPickerFrame.frame:GetID()]["a"] = a; end function CT_RAMenuBuff_Move(move) if ( string.find(this:GetParent():GetName(), "Debuff") ) then -- Debuff if ( not getglobal("CT_RAMenuFrameBuffsDebuff" .. (this:GetParent():GetID()+move) .. "Text") ) then return; end local temp = getglobal("CT_RAMenuFrameBuffsDebuff" .. (this:GetParent():GetID()+move) .. "Text"):GetText(); local temp2 = getglobal(this:GetParent():GetName() .. "Text"):GetText(); getglobal("CT_RAMenuFrameBuffsDebuff" .. (this:GetParent():GetID()+move) .. "Text"):SetText(temp2); getglobal(this:GetParent():GetName() .. "Text"):SetText(temp); local temparr = CT_RAMenu_Options["temp"]["DebuffColors"][this:GetParent():GetID()]; local temparr2 = CT_RAMenu_Options["temp"]["DebuffColors"][this:GetParent():GetID()+move]; CT_RAMenu_Options["temp"]["DebuffColors"][this:GetParent():GetID()] = temparr2; CT_RAMenu_Options["temp"]["DebuffColors"][this:GetParent():GetID()+move] = temparr; getglobal("CT_RAMenuFrameBuffsDebuff" .. this:GetParent():GetID()+move .. "SwatchNormalTexture"):SetVertexColor(temparr.r, temparr.g, temparr.b); getglobal("CT_RAMenuFrameBuffsDebuff" .. this:GetParent():GetID() .. "SwatchNormalTexture"):SetVertexColor(temparr2.r, temparr2.g, temparr2.b); if ( temparr2["id"] ~= -1 ) then getglobal(this:GetParent():GetName() .. "CheckButton"):SetChecked(1); getglobal(this:GetParent():GetName() .. "Text"):SetTextColor(1, 1, 1); else getglobal(this:GetParent():GetName() .. "Text"):SetTextColor(0.3, 0.3, 0.3); getglobal(this:GetParent():GetName() .. "CheckButton"):SetChecked(nil); end if ( temparr["id"] ~= -1 ) then getglobal("CT_RAMenuFrameBuffsDebuff" .. (this:GetParent():GetID()+move) .. "CheckButton"):SetChecked(1); getglobal("CT_RAMenuFrameBuffsDebuff" .. (this:GetParent():GetID()+move) .. "Text"):SetTextColor(1, 1, 1); else getglobal("CT_RAMenuFrameBuffsDebuff" .. (this:GetParent():GetID()+move) .. "Text"):SetTextColor(0.3, 0.3, 0.3); getglobal("CT_RAMenuFrameBuffsDebuff" .. (this:GetParent():GetID()+move) .. "CheckButton"):SetChecked(nil); end else -- Buff if ( not getglobal("CT_RAMenuFrameBuffsBuff" .. (this:GetParent():GetID()+move) .. "Text") ) then return; end local temp = getglobal("CT_RAMenuFrameBuffsBuff" .. (this:GetParent():GetID()+move) .. "Text"):GetText(); local temp2 = getglobal(this:GetParent():GetName() .. "Text"):GetText(); getglobal("CT_RAMenuFrameBuffsBuff" .. (this:GetParent():GetID()+move) .. "Text"):SetText(temp2); getglobal(this:GetParent():GetName() .. "Text"):SetText(temp); local temparr = CT_RAMenu_Options["temp"]["BuffArray"][this:GetParent():GetID()]; local temparr2 = CT_RAMenu_Options["temp"]["BuffArray"][this:GetParent():GetID()+move]; CT_RAMenu_Options["temp"]["BuffArray"][this:GetParent():GetID()] = temparr2; CT_RAMenu_Options["temp"]["BuffArray"][this:GetParent():GetID()+move] = temparr; if ( temparr2["show"] ~= -1 ) then getglobal(this:GetParent():GetName() .. "CheckButton"):SetChecked(1); getglobal(this:GetParent():GetName() .. "Text"):SetTextColor(1, 1, 1); else getglobal(this:GetParent():GetName() .. "Text"):SetTextColor(0.3, 0.3, 0.3); getglobal(this:GetParent():GetName() .. "CheckButton"):SetChecked(nil); end if ( temparr["show"] ~= -1 ) then getglobal("CT_RAMenuFrameBuffsBuff" .. (this:GetParent():GetID()+move) .. "CheckButton"):SetChecked(1); getglobal("CT_RAMenuFrameBuffsBuff" .. (this:GetParent():GetID()+move) .. "Text"):SetTextColor(1, 1, 1); else getglobal("CT_RAMenuFrameBuffsBuff" .. (this:GetParent():GetID()+move) .. "Text"):SetTextColor(0.3, 0.3, 0.3); getglobal("CT_RAMenuFrameBuffsBuff" .. (this:GetParent():GetID()+move) .. "CheckButton"):SetChecked(nil); end end CT_RA_UpdateRaidGroup(); end function CT_RAMenuBuff_ShowToggle() local newid; if ( this:GetChecked() ) then newid = this:GetParent():GetID(); getglobal(this:GetParent():GetName() .. "Text"):SetTextColor(1, 1, 1); else getglobal(this:GetParent():GetName() .. "Text"):SetTextColor(0.3, 0.3, 0.3); newid = -1; end local type = getglobal(this:GetParent():GetName() .. "Text"):GetText(); if ( string.find(this:GetParent():GetName(), "Debuff") ) then -- Debuff CT_RAMenu_Options["temp"]["DebuffColors"][this:GetParent():GetID()].id = newid; else -- Buff if ( this:GetChecked() ) then CT_RAMenu_Options["temp"]["BuffArray"][this:GetParent():GetID()]["show"] = 1; else CT_RAMenu_Options["temp"]["BuffArray"][this:GetParent():GetID()]["show"] = -1; end end CT_RA_UpdateRaidGroup(); end function CT_RAMenu_General_JoinChannel() if ( CT_RA_Channel and GetChannelName(CT_RA_Channel) == 0 ) then local name = CT_RA_Channel; local zoneChannel, channelName = JoinChannelByName(name, nil, DEFAULT_CHAT_FRAME:GetID()); if ( channelName ) then name = channelName; end if ( not zoneChannel ) then return; end local i = 1; while ( DEFAULT_CHAT_FRAME.channelList[i] ) do i = i + 1; end DEFAULT_CHAT_FRAME.channelList[i] = name; DEFAULT_CHAT_FRAME.zoneChannelList[i] = zoneChannel; end end function CT_RAMenu_General_EditChannel() if ( not this.editing ) then this.editing = 1; this:SetText("Set and Join Channel"); getglobal(this:GetParent():GetName() .. "ChannelEB"):Show(); if ( CT_RA_Channel ) then getglobal(this:GetParent():GetName() .. "ChannelEB"):SetText(CT_RA_Channel); getglobal(this:GetParent():GetName() .. "ChannelEB"):HighlightText(); else getglobal(this:GetParent():GetName() .. "ChannelEB"):SetText(""); end getglobal(this:GetParent():GetName() .. "ChannelNameText"):Hide(); getglobal(this:GetParent():GetName() .. "BroadcastChannel"):Disable(); else this:SetText("Edit Channel"); getglobal(this:GetParent():GetName() .. "BroadcastChannel"):Enable(); this.editing = nil; local name = getglobal(this:GetParent():GetName() .. "ChannelEB"):GetText(); if ( strsub(name, strlen(name)) == " " ) then name = strsub(name, 1, strlen(name)-1); end getglobal(this:GetParent():GetName() .. "ChannelEB"):Hide(); local new; if ( strlen(name) > 0 ) then new = name; getglobal(this:GetParent():GetName() .. "ChannelNameText"):SetText(name); else new = nil; getglobal(this:GetParent():GetName() .. "ChannelNameText"):SetText(""); end if ( CT_RA_Channel ~= new or ( CT_RA_Channel and GetChannelName(CT_RA_Channel) == 0 ) ) then if ( CT_RA_Channel ) then LeaveChannelByName(CT_RA_Channel); end CT_RA_Channel = new; CT_RA_Join(new); end getglobal(this:GetParent():GetName() .. "ChannelNameText"):Show(); end end function CT_RAMenu_General_ChannelOnShow() if ( CT_RA_Channel ) then getglobal(this:GetName() .. "ChannelNameText"):SetText(CT_RA_Channel); else getglobal(this:GetName() .. "ChannelNameText"):SetText(""); end local edit = getglobal(this:GetName() .. "EditChannel"); getglobal(this:GetName() .. "BroadcastChannel"):Enable(); edit:SetText("Edit Channel"); edit.editing = nil; getglobal(this:GetName() .. "ChannelEB"):Hide(); getglobal(this:GetName() .. "ChannelNameText"):Show(); for k, v in CT_RA_ClassPositions do if ( k ~= CT_RA_SHAMAN or ( UnitFactionGroup("player") and UnitFactionGroup("player") == "Horde" ) ) then getglobal("CT_RAMenuFrameBuffsNotifyDebuffsClass" .. v .. "Text"):SetText(k); end end if ( CT_RAMenu_Options["temp"]["SORTTYPE"] == "class" ) then CT_RA_SetSortType("class"); elseif ( CT_RAMenu_Options["temp"]["SORTTYPE"] == "custom" ) then CT_RA_SetSortType("custom"); else CT_RA_SetSortType("group"); end if ( CT_RAMenu_Options["temp"]["ShowHP"] ) then local table = { "Show Values", "Show Percentages", "Show Deficit", "Show only MTT HP %" }; UIDropDownMenu_SetSelectedID(CT_RAMenuFrameGeneralDisplayHealthDropDown, CT_RAMenu_Options["temp"]["ShowHP"]); CT_RAMenuFrameGeneralDisplayHealthDropDownText:SetText(table[CT_RAMenu_Options["temp"]["ShowHP"]]); else UIDropDownMenu_SetSelectedID(CT_RAMenuFrameGeneralDisplayHealthDropDown, 5); CT_RAMenuFrameGeneralDisplayHealthDropDownText:SetText("Show None"); end end function CT_RAMenu_General_BroadcastChannel() SlashCmdList["RABROADCAST"](); end function CT_RAMenuDisplay_ShowMP() CT_RAMenu_Options["temp"]["HideMP"] = this:GetChecked(); CT_RA_UpdateRaidGroup(); CT_RA_UpdateMTs(); end function CT_RAMenuDisplay_ShowRP() CT_RAMenu_Options["temp"]["HideRP"] = this:GetChecked(); CT_RA_UpdateRaidGroup(); CT_RA_UpdateMTs(); end function CT_RAMenuDisplay_ShowHealth() if ( not this:GetChecked() ) then CT_RAMenu_Options["temp"]["MemberHeight"] = CT_RAMenu_Options["temp"]["MemberHeight"]+8; else CT_RAMenu_Options["temp"]["MemberHeight"] = CT_RAMenu_Options["temp"]["MemberHeight"]-8; end CT_RA_UpdateRaidGroup(); CT_RA_UpdateMTs(); end function CT_RAMenuDisplay_ShowHP() if ( this:GetChecked() ) then if ( CT_RAMenuFrameGeneralDisplayShowHPPercentCB:GetChecked() ) then CT_RAMenu_Options["temp"]["ShowHP"] = 2; else CT_RAMenu_Options["temp"]["ShowHP"] = 1; end else CT_RAMenu_Options["temp"]["ShowHP"] = nil; end if ( this:GetChecked() ) then CT_RAMenuFrameGeneralDisplayHealthPercentsText:SetTextColor(1, 1, 1); CT_RAMenuFrameGeneralDisplayShowHPPercentCB:Enable(); CT_RAMenuFrameGeneralDisplayShowHPSwatchNormalTexture:SetVertexColor(CT_RAMenu_Options["temp"]["PercentColor"].r, CT_RAMenu_Options["temp"]["PercentColor"].g, CT_RAMenu_Options["temp"]["PercentColor"].b); CT_RAMenuFrameGeneralDisplayShowHPSwatchBG:SetVertexColor(1, 1, 1); else CT_RAMenuFrameGeneralDisplayHealthPercentsText:SetTextColor(0.3, 0.3, 0.3); CT_RAMenuFrameGeneralDisplayShowHPPercentCB:Disable(); CT_RAMenuFrameGeneralDisplayShowHPSwatchNormalTexture:SetVertexColor(0.3, 0.3, 0.3); CT_RAMenuFrameGeneralDisplayShowHPSwatchBG:SetVertexColor(0.3, 0.3, 0.3); end for i = 1, GetNumRaidMembers(), 1 do if ( CT_RA_Stats[UnitName("raid" .. i)] ) then CT_RA_UpdateUnitHealth(getglobal("CT_RAMember" .. i), CT_RA_Stats[UnitName("raid" .. i)]["Health"], CT_RA_Stats[UnitName("raid" .. i)]["Healthmax"]); end end CT_RA_UpdateMTs(); end function CT_RAMenuDisplay_ShowHPPercents() if ( this:GetChecked() ) then CT_RAMenu_Options["temp"]["ShowHP"] = 2; else CT_RAMenu_Options["temp"]["ShowHP"] = 1; end for i = 1, GetNumRaidMembers(), 1 do if ( CT_RA_Stats[UnitName("raid" .. i)] ) then CT_RA_UpdateUnitHealth(getglobal("CT_RAMember" .. i), CT_RA_Stats[UnitName("raid" .. i)]["Health"], CT_RA_Stats[UnitName("raid" .. i)]["Healthmax"]); end end end function CT_RAMenuDisplay_ShowGroupNames() CT_RAMenu_Options["temp"]["HideNames"] = not this:GetChecked(); CT_RA_UpdateVisibility(); end function CT_RAMenuDisplay_ChangeWC() local frame = this:GetParent(); frame.r = CT_RAMenu_Options["temp"]["DefaultColor"]["r"]; frame.g = CT_RAMenu_Options["temp"]["DefaultColor"]["g"]; frame.b = CT_RAMenu_Options["temp"]["DefaultColor"]["b"]; frame.opacity = CT_RAMenu_Options["temp"]["DefaultColor"]["a"]; frame.opacityFunc = CT_RAMenuDisplay_SetOpacity; frame.swatchFunc = CT_RAMenuDisplay_SetColor; frame.cancelFunc = CT_RAMenuDisplay_CancelColor; frame.hasOpacity = 1; CloseMenus(); UIDropDownMenuButton_OpenColorPicker(frame); end function CT_RAMenuDisplay_SetColor() local r, g, b = ColorPickerFrame:GetColorRGB(); CT_RAMenu_Options["temp"]["DefaultColor"]["r"] = r; CT_RAMenu_Options["temp"]["DefaultColor"]["g"] = g; CT_RAMenu_Options["temp"]["DefaultColor"]["b"] = b; CT_RAMenuFrameGeneralDisplayWindowColorSwatchNormalTexture:SetVertexColor(r, g, b); CT_RA_UpdateRaidGroupColors(); end function CT_RAMenuDisplay_SetOpacity() CT_RAMenu_Options["temp"]["DefaultColor"]["a"] = OpacitySliderFrame:GetValue(); CT_RA_UpdateRaidGroupColors(); end function CT_RAMenuDisplay_CancelColor(val) CT_RAMenu_Options["temp"]["DefaultColor"]["r"] = val.r; CT_RAMenu_Options["temp"]["DefaultColor"]["g"] = val.g; CT_RAMenu_Options["temp"]["DefaultColor"]["b"] = val.b; CT_RAMenu_Options["temp"]["DefaultColor"]["a"] = val.opacity; CT_RAMenuFrameGeneralDisplayWindowColorSwatchNormalTexture:SetVertexColor(val.r, val.g, val.b); CT_RA_UpdateRaidGroupColors(); end function CT_RAMenuDisplay_LockGroups() CT_RAMenu_Options["temp"]["LockGroups"] = this:GetChecked(); CT_RA_UpdateVisibility(); end function CT_RAMenuFrameGeneralMiscDropDown_OnLoad() UIDropDownMenu_Initialize(this, CT_RAMenuFrameGeneralMiscDropDown_Initialize); UIDropDownMenu_SetWidth(130); UIDropDownMenu_SetSelectedID(CT_RAMenuFrameGeneralMiscDropDown, 1); end function CT_RAMenuFrameGeneralMiscDropDown_Initialize() local info = {}; info.text = "Group"; info.func = CT_RAMenuFrameGeneralMiscDropDown_OnClick; UIDropDownMenu_AddButton(info); info = {}; info.text = "Class"; info.func = CT_RAMenuFrameGeneralMiscDropDown_OnClick; UIDropDownMenu_AddButton(info); info = {}; info.text = "Custom"; info.func = CT_RAMenuFrameGeneralMiscDropDown_OnClick; UIDropDownMenu_AddButton(info); end function CT_RAMenuFrameGeneralMiscDropDown_OnClick() UIDropDownMenu_SetSelectedID(CT_RAMenuFrameGeneralMiscDropDown, this:GetID()); if ( this:GetID() == 1 ) then CT_RA_SetSortType("group"); elseif ( this:GetID() == 2 ) then CT_RA_SetSortType("class"); else CT_RA_SetSortType("custom"); end CT_RA_UpdateRaidGroup(); CT_RA_UpdateMTs(); CT_RAOptions_Update(); end function CT_RAMenuFrameBuffsBuffsDropDown_OnLoad() UIDropDownMenu_Initialize(this, CT_RAMenuFrameBuffsBuffsDropDown_Initialize); UIDropDownMenu_SetWidth(180); UIDropDownMenu_SetSelectedID(CT_RAMenuFrameBuffsBuffsDropDown, 1); end function CT_RAMenuFrameBuffsBuffsDropDown_Initialize() local info = {}; info.text = "Show buffs"; info.func = CT_RAMenuFrameBuffsBuffsDropDown_OnClick; UIDropDownMenu_AddButton(info); info = {}; info.text = "Show debuffs"; info.func = CT_RAMenuFrameBuffsBuffsDropDown_OnClick; UIDropDownMenu_AddButton(info); info = {}; info.text = "Show buffs until debuffed"; info.func = CT_RAMenuFrameBuffsBuffsDropDown_OnClick; UIDropDownMenu_AddButton(info); end function CT_RAMenuFrameBuffsBuffsDropDown_OnClick() UIDropDownMenu_SetSelectedID(CT_RAMenuFrameBuffsBuffsDropDown, this:GetID()); if ( this:GetID() == 1 ) then CT_RAMenu_Options["temp"]["ShowDebuffs"] = nil; CT_RAMenu_Options["temp"]["ShowBuffsDebuffed"] = nil; elseif ( this:GetID() == 2 ) then CT_RAMenu_Options["temp"]["ShowDebuffs"] = 1; CT_RAMenu_Options["temp"]["ShowBuffsDebuffed"] = nil; else CT_RAMenu_Options["temp"]["ShowDebuffs"] = nil; CT_RAMenu_Options["temp"]["ShowBuffsDebuffed"] = 1; end CT_RA_UpdateRaidGroup(); CT_RA_UpdateMTs(); CT_RAOptions_Update(); end function CT_RAMenuFrameGeneralDisplayHealthDropDown_OnLoad() UIDropDownMenu_Initialize(this, CT_RAMenuFrameGeneralDisplayHealthDropDown_Initialize); UIDropDownMenu_SetWidth(130); UIDropDownMenu_SetSelectedID(CT_RAMenuFrameGeneralDisplayHealthDropDown, 1); end function CT_RAMenuFrameGeneralDisplayHealthDropDown_Initialize() local info = {}; info.text = "Show Values"; info.func = CT_RAMenuFrameGeneralDisplayHealthDropDown_OnClick; UIDropDownMenu_AddButton(info); info = {}; info.text = "Show Percentages"; info.func = CT_RAMenuFrameGeneralDisplayHealthDropDown_OnClick; UIDropDownMenu_AddButton(info); info = {}; info.text = "Show Deficit"; info.func = CT_RAMenuFrameGeneralDisplayHealthDropDown_OnClick; UIDropDownMenu_AddButton(info); info = {}; info.text = "Show only MTT HP %"; info.func = CT_RAMenuFrameGeneralDisplayHealthDropDown_OnClick; UIDropDownMenu_AddButton(info); info = {}; info.text = "Show None"; info.func = CT_RAMenuFrameGeneralDisplayHealthDropDown_OnClick; UIDropDownMenu_AddButton(info); end function CT_RAMenuFrameGeneralDisplayHealthDropDown_OnClick() UIDropDownMenu_SetSelectedID(CT_RAMenuFrameGeneralDisplayHealthDropDown, this:GetID()); if ( this:GetID() < 5 ) then CT_RAMenu_Options["temp"]["ShowHP"] = this:GetID(); else CT_RAMenu_Options["temp"]["ShowHP"] = nil; end CT_RA_UpdateRaidGroup(); CT_RAOptions_Update(); end function CT_RAMenu_General_ResetWindows() CT_RAGroupDrag1:ClearAllPoints(); CT_RAGroupDrag2:ClearAllPoints(); CT_RAGroupDrag3:ClearAllPoints(); CT_RAGroupDrag4:ClearAllPoints(); CT_RAGroupDrag5:ClearAllPoints(); CT_RAGroupDrag6:ClearAllPoints(); CT_RAGroupDrag7:ClearAllPoints(); CT_RAGroupDrag8:ClearAllPoints(); CT_RAMTGroupDrag:ClearAllPoints(); CT_RA_EmergencyFrameDrag:ClearAllPoints(); CT_RAGroupDrag1:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 950, -35); CT_RAGroupDrag2:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 950, -275); CT_RAGroupDrag3:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 855, -35); CT_RAGroupDrag4:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 855, -275); CT_RAGroupDrag5:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 760, -35); CT_RAGroupDrag6:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 760, -275); CT_RAGroupDrag7:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 665, -35); CT_RAGroupDrag8:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 665, -275); CT_RAMTGroupDrag:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 570, -35); CT_RA_EmergencyFrameDrag:SetPoint("CENTER", "UIParent", "CENTER"); CT_RA_LinkDrag(CT_RA_EmergencyFrame, CT_RA_EmergencyFrameDrag, "TOP", "TOP", 0, -12); CT_RAMenu_SaveWindowPositions(); end function CT_RAMenuGeneral_HideParty() CT_RAMenu_Options["temp"]["HideParty"] = this:GetChecked(); CT_RAMenu_CheckParty(); end function CT_RAMenuGeneral_HidePartyOutOfRaid() CT_RAMenu_Options["temp"]["HidePartyRaid"] = this:GetChecked(); CT_RAMenu_CheckParty(); end function CT_RAMenuDisplay_ChangeAC() local frame = this:GetParent(); frame.r = CT_RAMenu_Options["temp"]["DefaultAlertColor"]["r"]; frame.g = CT_RAMenu_Options["temp"]["DefaultAlertColor"]["g"]; frame.b = CT_RAMenu_Options["temp"]["DefaultAlertColor"]["b"]; frame.swatchFunc = CT_RAMenuDisplay_SetAlertColor; frame.cancelFunc = CT_RAMenuDisplay_CancelAlertColor; CloseMenus(); UIDropDownMenuButton_OpenColorPicker(frame); end function CT_RAMenuDisplay_SetAlertColor() local r, g, b = ColorPickerFrame:GetColorRGB(); CT_RAMenu_Options["temp"]["DefaultAlertColor"]["r"] = r; CT_RAMenu_Options["temp"]["DefaultAlertColor"]["g"] = g; CT_RAMenu_Options["temp"]["DefaultAlertColor"]["b"] = b; CT_RAMenuFrameGeneralDisplayAlertColorSwatchNormalTexture:SetVertexColor(r, g, b); end function CT_RAMenuDisplay_CancelAlertColor(val) CT_RAMenu_Options["temp"]["DefaultAlertColor"]["r"] = val.r; CT_RAMenu_Options["temp"]["DefaultAlertColor"]["g"] = val.g; CT_RAMenu_Options["temp"]["DefaultAlertColor"]["b"] = val.b; CT_RAMenuFrameGeneralDisplayAlertColorSwatchNormalTexture:SetVertexColor(val.r, val.g, val.b); end function CT_RAMenuDisplay_ChangeWC() local frame = this:GetParent(); frame.r = CT_RAMenu_Options["temp"]["DefaultColor"]["r"]; frame.g = CT_RAMenu_Options["temp"]["DefaultColor"]["g"]; frame.b = CT_RAMenu_Options["temp"]["DefaultColor"]["b"]; frame.opacity = CT_RAMenu_Options["temp"]["DefaultColor"]["a"]; frame.opacityFunc = CT_RAMenuDisplay_SetOpacity; frame.swatchFunc = CT_RAMenuDisplay_SetColor; frame.cancelFunc = CT_RAMenuDisplay_CancelColor; frame.hasOpacity = 1; CloseMenus(); UIDropDownMenuButton_OpenColorPicker(frame); end function CT_RAMenuDisplay_ChangeTC() local frame = this:GetParent(); frame.r = CT_RAMenu_Options["temp"]["PercentColor"]["r"]; frame.g = CT_RAMenu_Options["temp"]["PercentColor"]["g"]; frame.b = CT_RAMenu_Options["temp"]["PercentColor"]["b"]; frame.swatchFunc = CT_RAMenuDisplayPercent_SetColor; frame.cancelFunc = CT_RAMenuDisplayPercent_CancelColor; CloseMenus(); UIDropDownMenuButton_OpenColorPicker(frame); end function CT_RAMenuDisplayPercent_SetColor() local r, g, b = ColorPickerFrame:GetColorRGB(); CT_RAMenu_Options["temp"]["PercentColor"] = { ["r"] = r, ["g"] = g, ["b"] = b }; CT_RAMenuFrameGeneralDisplayShowHPSwatchNormalTexture:SetVertexColor(r, g, b); CT_RA_UpdateRaidGroupColors(); end function CT_RAMenuDisplayPercent_CancelColor(val) CT_RAMenu_Options["temp"]["PercentColor"] = { r = val.r, g = val.g, b = val.b }; CT_RAMenuFrameGeneralDisplayShowHPSwatchNormalTexture:SetVertexColor(val.r, val.g, val.b); CT_RA_UpdateRaidGroupColors(); end function CT_RAMenuGeneral_HideOffline() CT_RAMenu_Options["temp"]["HideOffline"] = this:GetChecked(); CT_RA_UpdateRaidGroup(); end function CT_RAMenuGeneral_HideShort() CT_RAMenu_Options["temp"]["HideShort"] = this:GetChecked(); CT_RA_UpdateRaidGroup(); end function CT_RAMenuBuff_ShowDebuffs() CT_RAMenu_Options["temp"]["ShowDebuffs"] = this:GetChecked(); CT_RA_UpdateRaidGroup(); end function CT_RAMenuGeneral_HideBorder() CT_RAMenu_Options["temp"]["HideBorder"] = this:GetChecked(); CT_RA_UpdateRaidGroup(); CT_RA_UpdateMTs(); end function CT_RAMenuGeneral_ShowMTs() CT_RAMenu_Options["temp"]["HideMTs"] = not this:GetChecked(); CT_RA_UpdateRaidGroup(); CT_RA_UpdateMTs(); end function CT_RAMenuGeneral_ShowMeters() if ( not CT_RAMenu_Options["temp"]["StatusMeters"] ) then CT_RAMenu_Options["temp"]["StatusMeters"] = { ["Health Display"] = { }, ["Mana Display"] = { }, ["Raid Health"] = { }, ["Raid Mana"] = { }, ["Background"] = { ["r"] = 0, ["g"] = 0, ["b"] = 1, ["a"] = 0.5 } }; end CT_RAMenu_Options["temp"]["StatusMeters"]["Show"] = this:GetChecked(); if ( this:GetChecked() ) then CT_RAMetersFrame:Show(); CT_RAMeters_UpdateWindow(); else CT_RAMetersFrame:Hide(); end end function CT_RAMenuMisc_Slider_OnChange() local spell = CT_RAMenu_Options["temp"]["ClassHealings"][CT_RA_GetLocale()][UnitClass("player")][this:GetID()]; local realVal = 0; if ( CT_RAMenu_Options["temp"]["UsePercentValues"] ) then realVal = this:GetValue(); CT_RAMenu_Options["temp"]["ClassHealings"][CT_RA_GetLocale()][UnitClass("player")][this:GetID()][5] = realVal; if ( type(spell[1]) == "table" ) then getglobal(this:GetName() .. "Text"):SetText(spell[1][1] .. ": " .. realVal .. "%"); else getglobal(this:GetName() .. "Text"):SetText(spell[1] .. ": " .. realVal .. "%"); end else realVal = 5000-this:GetValue(); CT_RAMenu_Options["temp"]["ClassHealings"][CT_RA_GetLocale()][UnitClass("player")][this:GetID()][3] = realVal; if ( type(spell[1]) == "table" ) then getglobal(this:GetName() .. "Text"):SetText(spell[1][1] .. ": -" .. realVal); else getglobal(this:GetName() .. "Text"):SetText(spell[1] .. ": -" .. realVal); end end end function CT_RAMenuMisc_Slider_OnShow() end function CT_RAMenuMisc_Slider_Update(slider) slider = getglobal(slider); if ( UnitClass("player") and CT_RAMenu_Options["temp"]["ClassHealings"][CT_RA_GetLocale()][UnitClass("player")] ) then -- Assumes there are two heals/healing class if ( CT_RAMenu_Options["temp"]["UsePercentValues"] ) then getglobal(slider:GetName().."High"):SetText("100%"); getglobal(slider:GetName().."Low"):SetText("10%"); local spell = CT_RAMenu_Options["temp"]["ClassHealings"][CT_RA_GetLocale()][UnitClass("player")][slider:GetID()]; local val = spell[5]; -- Gotta love pointers! slider:SetMinMaxValues(0, 100); slider:SetValueStep(1); slider:SetValue(( val or 0)); if ( type(spell[1]) == "table" ) then getglobal(slider:GetName() .. "Text"):SetText(spell[1][1] .. ": " .. slider:GetValue() .. "%"); else getglobal(slider:GetName() .. "Text"):SetText(spell[1] .. ": " .. slider:GetValue() .. "%"); end else getglobal(slider:GetName().."High"):SetText("-0"); getglobal(slider:GetName().."Low"):SetText("-5000"); local spell = CT_RAMenu_Options["temp"]["ClassHealings"][CT_RA_GetLocale()][UnitClass("player")][slider:GetID()]; local val = 5000-spell[3]; -- Gotta love pointers! slider:SetMinMaxValues(0, 5000); slider:SetValueStep(100); slider:SetValue(val); if ( type(spell[1]) == "table" ) then getglobal(slider:GetName() .. "Text"):SetText(spell[1][1] .. ": -" .. 5000-slider:GetValue()); else getglobal(slider:GetName() .. "Text"):SetText(spell[1] .. ": -" .. 5000-slider:GetValue()); end end slider.tooltipText = CT_RAMenu_Options["temp"]["ClassHealings"][CT_RA_GetLocale()][UnitClass("player")][slider:GetID()][2]; slider:Show(); getglobal(slider:GetParent():GetName() .. "NoHealer"):Hide(); getglobal(slider:GetParent():GetName() .. "Healer"):Show(); else getglobal(slider:GetParent():GetName() .. "NoHealer"):Show(); getglobal(slider:GetParent():GetName() .. "Healer"):Hide(); slider:Hide(); end end function CT_RAMenuMisc_Slider_InitLagSlider(slider) slider = getglobal(slider); if ( UnitClass("player") and CT_RAMenu_Options["temp"]["ClassHealings"][CT_RA_GetLocale()][UnitClass("player")] ) then slider:Show(); getglobal(slider:GetName().."High"):SetText("1.5 sec"); getglobal(slider:GetName().."Low"):SetText("0.5 sec"); getglobal(slider:GetName() .. "Text"):SetText("Check Time - " .. CT_RAMenu_Options["temp"]["SpellCastDelay"] .. " sec"); slider.tooltipText = "Adjust the time when the 'mana conserve' point checks your targets health. If you set 0.5 sec, the heal will cancel 0.5 seconds before it would cast. However if you lag, you may want to set it higher, so it would check earlier before the cast would occur."; slider:SetMinMaxValues(0.5, 1.5); slider:SetValueStep(0.05); slider:SetValue(CT_RAMenu_Options["temp"]["SpellCastDelay"]); slider:Show(); else slider:Hide(); end end function CT_RAMenuMisc_LagSlider_OnValueChanged() CT_RAMenu_Options["temp"]["SpellCastDelay"] = floor(this:GetValue()*100+0.5)/100; getglobal(this:GetName() .. "Text"):SetText("Check Time - " .. CT_RAMenu_Options["temp"]["SpellCastDelay"] .. " sec"); end function CT_RAMenuMisc_Schedule(time) this.update = time; end function CT_RAMenuMisc_OnUpdate(elapsed) if ( this.scaleupdate ) then this.scaleupdate = this.scaleupdate - elapsed; if ( this.scaleupdate <= 0 ) then this.scaleupdate = 10; if ( CT_RAMenu_Options["temp"]["WindowScaling"] ) then local newScaling = CT_RAMenu_Options["temp"]["WindowScaling"]*UIParent:GetScale(); for i = 1, 40, 1 do if ( i <= 8 ) then getglobal("CT_RAGroupDrag" .. i):SetWidth(CT_RAGroup1:GetWidth()*newScaling+(22*newScaling)); getglobal("CT_RAGroupDrag" .. i):SetHeight(CT_RAMember1:GetHeight()*newScaling/2); getglobal("CT_RAGroup" .. i):SetScale(newScaling); end getglobal("CT_RAMember" .. i):SetScale(newScaling); end end if ( CT_RAMenu_Options["temp"]["MTScaling"] ) then local newScaling = CT_RAMenu_Options["temp"]["MTScaling"]*UIParent:GetScale(); for i = 1, 10, 1 do getglobal("CT_RAMTGroupMember" .. i):SetScale(newScaling); end CT_RAMTGroup:SetScale(newScaling); CT_RAMTGroupDrag:SetWidth(CT_RAMTGroup:GetWidth()*newScaling+(22*newScaling)); CT_RAMTGroupDrag:SetHeight(CT_RAMTGroupMember1:GetHeight()*newScaling/2); end if ( CT_RAMenu_Options["temp"]["EMScaling"] ) then local newScaling = CT_RAMenu_Options["temp"]["EMScaling"]*UIParent:GetScale(); CT_RA_EmergencyFrame:SetScale(newScaling); CT_RA_EmergencyFrameDrag:SetWidth(CT_RA_EmergencyFrame:GetWidth()*newScaling+(27.5*newScaling)); CT_RA_EmergencyFrameDrag:SetHeight(CT_RA_EmergencyFrame:GetHeight()*newScaling/5); end end end if ( this.update ) then this.update = this.update - elapsed; if ( this.update <= 0 ) then this.update = nil; CT_RAMenuMisc_CheckTargetHealth(); CT_RA_CurrCast = nil; end end end function CT_RAMenuMisc_CheckTargetHealth() if ( not CT_RA_CurrCast or IsControlKeyDown() or not CT_RA_InCombat ) then return; end for k, v in CT_RAMenu_Options["temp"]["ClassHealings"][CT_RA_GetLocale()][UnitClass("player")] do if ( type(v[1]) == "table" ) then for key, val in v[1] do if ( val == CT_RA_CurrCast[1] ) then if ( CT_RA_CurrCast[2] == "target" ) then for i = 1, GetNumRaidMembers(), 1 do if ( UnitName("raid" .. i) == CT_RA_CurrCast[3] ) then CT_RA_CurrCast[2] = "raid" .. i; break; end end end if ( UnitExists(CT_RA_CurrCast[2]) and UnitHealthMax(CT_RA_CurrCast[2]) > 100 and CT_RA_CurrCast[3] == UnitName(CT_RA_CurrCast[2]) ) then if ( ( not CT_RAMenu_Options["temp"]["UsePercentValues"] and UnitHealth(CT_RA_CurrCast[2])-UnitHealthMax(CT_RA_CurrCast[2]) >= -v[3] and v[3] > 0 ) or ( CT_RAMenu_Options["temp"]["UsePercentValues"] and UnitHealth(CT_RA_CurrCast[2])/UnitHealthMax(CT_RA_CurrCast[2]) < (v[5]/100) and v[5] ~= 100 ) ) then CT_RA_Print(" Aborted spell '|c00FFFFFF" .. CT_RA_CurrCast[1] .. "|r'.", 1, 0.5, 0); SpellStopCasting(); return; end end end end elseif ( v[1] == CT_RA_CurrCast[1] ) then if ( CT_RA_CurrCast[2] == "target" ) then for i = 1, GetNumRaidMembers(), 1 do if ( UnitName("raid" .. i) == CT_RA_CurrCast[3] ) then CT_RA_CurrCast[2] = "raid" .. i; break; end end end if ( UnitExists(CT_RA_CurrCast[2]) and UnitHealthMax(CT_RA_CurrCast[2]) > 100 ) then if ( ( not CT_RAMenu_Options["temp"]["UsePercentValues"] and UnitHealth(CT_RA_CurrCast[2])-UnitHealthMax(CT_RA_CurrCast[2]) >= -v[3] and v[3] > 0 ) or ( CT_RAMenu_Options["temp"]["UsePercentValues"] and UnitHealth(CT_RA_CurrCast[2])/UnitHealthMax(CT_RA_CurrCast[2]) >= (v[5]/100) and v[5] ~= 100 ) ) then CT_RA_Print(" Aborted spell '|c00FFFFFF" .. CT_RA_CurrCast[1] .. "|r'.", 1, 0.5, 0); SpellStopCasting(); return; end end end end end function CT_RA_SpellStartCast(spell) if ( spell[1] == CT_RA_RESURRECTION or spell[1] == CT_RA_ANCESTRALSPIRIT or spell[1] == CT_RA_REBIRTH or spell[1] == CT_RA_REDEMPTION ) then CT_RA_AddMessage("RES " .. spell[2]); CT_RA_Ressers[UnitName("player")] = spell[2]; CT_RA_UpdateResFrame(); end end function CT_RA_SpellEndCast() if ( CT_RA_Ressers[UnitName("player")] ) then CT_RA_AddMessage("RESNO"); end end function CT_RAMenuMisc_OnEvent(event) if ( event == "SPELLCAST_START" and CT_RAMenu_Options["temp"]["ClassHealings"][CT_RA_GetLocale()][UnitClass("player")] ) then if ( not CT_RA_SpellTarget and UnitExists("target") ) then CT_RA_SpellTarget = "target"; elseif ( not CT_RA_SpellTarget and UnitExists("mouseover") ) then return; -- Can't check on mouseover :( end if ( not CT_RA_SpellTarget ) then return; end for k, v in CT_RAMenu_Options["temp"]["ClassHealings"][CT_RA_GetLocale()][UnitClass("player")] do if ( type(v[1]) == "table" ) then for key, val in v[1] do if ( val == arg1 ) then CT_RA_CurrCast = { arg1, CT_RA_SpellTarget, UnitName(CT_RA_SpellTarget) }; local time = (arg2/1000)-CT_RAMenu_Options["temp"]["SpellCastDelay"]; if ( time < 0 ) then time = 0; end CT_RAMenuMisc_Schedule(time); return; end end elseif ( v[1] == arg1 ) then CT_RA_CurrCast = { arg1, CT_RA_SpellTarget, UnitName(CT_RA_SpellTarget) }; local time = (arg2/1000)-CT_RAMenu_Options["temp"]["SpellCastDelay"]; if ( time < 0 ) then time = 0; end CT_RAMenuMisc_Schedule(time); return; end end elseif ( event == "SPELLCAST_INTERRUPTED" or event == "SPELLCAST_STOP" or event == "SPELLCAST_FAILED" ) then CT_RA_CurrCast = nil; CT_RA_SpellTarget = nil; elseif ( event == "PLAYER_REGEN_ENABLED" ) then CT_RA_InCombat = nil; elseif ( event == "PLAYER_REGEN_DISABLED" ) then CT_RA_InCombat = 1; end end function CT_RAMenuAdditional_Scaling_OnShow(slider) if ( not slider ) then slider = this; end getglobal(slider:GetName().."High"):SetText("150%"); getglobal(slider:GetName().."Low"):SetText("50%"); if ( not CT_RAMenu_Options["temp"]["WindowScaling"] ) then CT_RAMenu_Options["temp"]["WindowScaling"] = 1; end getglobal(slider:GetName() .. "Text"):SetText("Group Scaling - " .. floor(CT_RAMenu_Options["temp"]["WindowScaling"]*100+0.5) .. "%"); slider:SetMinMaxValues(0.5, 1.5); slider:SetValueStep(0.01); slider:SetValue(CT_RAMenu_Options["temp"]["WindowScaling"]); end function CT_RAMenuAdditional_Scaling_OnValueChanged() CT_RAMenu_Options["temp"]["WindowScaling"] = floor(this:GetValue()*100+0.5)/100; getglobal(this:GetName() .. "Text"):SetText("Group Scaling - " .. floor(this:GetValue()*100+0.5) .. "%"); local newScaling = CT_RAMenu_Options["temp"]["WindowScaling"]*UIParent:GetScale(); for i = 1, 40, 1 do if ( i <= 8 ) then getglobal("CT_RAGroupDrag" .. i):SetWidth(CT_RAGroup1:GetWidth()*newScaling+(22*newScaling)); getglobal("CT_RAGroupDrag" .. i):SetHeight(CT_RAMember1:GetHeight()*newScaling/2); getglobal("CT_RAGroup" .. i):SetScale(newScaling); end getglobal("CT_RAMember" .. i):SetScale(newScaling); end end function CT_RAMenuAdditional_EM_OnShow(slider) if ( not slider ) then slider = this; end local id = slider:GetID(); if ( not CT_RAMenu_Options["temp"]["EMThreshold"] ) then CT_RAMenu_Options["temp"]["EMThreshold"] = 0.9; end if ( not CT_RAMenu_Options["temp"]["EMScaling"] ) then CT_RAMenu_Options["temp"]["EMScaling"] = 1; end local tbl = { ["hl"] = { { "99%", "25%" }, { "150%", "50%" } }, ["title"] = { "Health Threshold - " .. floor(CT_RAMenu_Options["temp"]["EMThreshold"]*100+0.5) .. "%", "Scaling - " .. floor(CT_RAMenu_Options["temp"]["EMScaling"]*100+0.5) .. "%" }, ["tooltip"] = { "Regulates the health threshold of when to display the health bars.", "Rescales the window to make it larger or smaller." }, ["minmax"] = { { 0.25, 0.99 }, { 0.5, 1.5 } }, ["value"] = { CT_RAMenu_Options["temp"]["EMThreshold"], CT_RAMenu_Options["temp"]["EMScaling"] } }; getglobal(slider:GetName().."High"):SetText(tbl["hl"][id][1]); getglobal(slider:GetName().."Low"):SetText(tbl["hl"][id][2]); getglobal(slider:GetName() .. "Text"):SetText(tbl["title"][id]); slider.tooltipText = tbl["tooltip"][id]; slider:SetMinMaxValues(tbl["minmax"][id][1], tbl["minmax"][id][2]); slider:SetValueStep(0.01); slider:SetValue(tbl["value"][id]); end function CT_RAMenuAdditional_EM_OnValueChanged() if ( this:GetID() == 1 ) then CT_RAMenu_Options["temp"]["EMThreshold"] = floor(this:GetValue()*100+0.5)/100; getglobal(this:GetName() .. "Text"):SetText("Health Threshold - " .. floor(this:GetValue()*100+0.5) .. "%"); CT_RA_Emergency_UpdateHealth(); else CT_RAMenu_Options["temp"]["EMScaling"] = floor(this:GetValue()*100+0.5)/100; getglobal(this:GetName() .. "Text"):SetText("Scaling - " .. floor(this:GetValue()*100+0.5) .. "%"); local newScaling = CT_RAMenu_Options["temp"]["EMScaling"]*UIParent:GetScale(); CT_RA_EmergencyFrame:SetScale(newScaling); CT_RA_EmergencyFrameDrag:SetWidth(CT_RA_EmergencyFrame:GetWidth()*newScaling+(27.5*newScaling)); CT_RA_EmergencyFrameDrag:SetHeight(CT_RA_EmergencyFrame:GetHeight()*newScaling/5); end end function CT_RAMenuAdditional_BG_OnShow(slider) if ( not slider ) then slider = this; end if ( not CT_RAMenu_Options["temp"]["BGOpacity"] ) then CT_RAMenu_Options["temp"]["BGOpacity"] = 0.4; end getglobal(slider:GetName().."High"):SetText("75%"); getglobal(slider:GetName().."Low"):SetText("0%"); getglobal(slider:GetName() .. "Text"):SetText("Background Opacity - " .. floor(CT_RAMenu_Options["temp"]["BGOpacity"]*100+0.5) .. "%"); slider:SetMinMaxValues(0, 0.75); slider:SetValueStep(0.01); slider:SetValue(CT_RAMenu_Options["temp"]["BGOpacity"]); end function CT_RAMenuAdditional_BG_OnValueChanged() CT_RAMenu_Options["temp"]["BGOpacity"] = floor(this:GetValue()*100+0.5)/100; getglobal(this:GetName() .. "Text"):SetText("Background Opacity - " .. floor(this:GetValue()*100+0.5) .. "%"); CT_RA_UpdateRaidGroup(); end function CT_RAMenuAdditional_ScalingMT_OnShow(slider) if ( not slider ) then slider = this; end getglobal(slider:GetName().."High"):SetText("150%"); getglobal(slider:GetName().."Low"):SetText("50%"); if ( not CT_RAMenu_Options["temp"]["MTScaling"] ) then CT_RAMenu_Options["temp"]["MTScaling"] = 1; end getglobal(slider:GetName() .. "Text"):SetText("MT Scaling - " .. floor(CT_RAMenu_Options["temp"]["MTScaling"]*100+0.5) .. "%"); slider:SetMinMaxValues(0.5, 1.5); slider:SetValueStep(0.01); slider:SetValue(CT_RAMenu_Options["temp"]["MTScaling"]); end function CT_RAMenuAdditional_ScalingMT_OnValueChanged() CT_RAMenu_Options["temp"]["MTScaling"] = floor(this:GetValue()*100+0.5)/100; getglobal(this:GetName() .. "Text"):SetText("MT Scaling - " .. floor(this:GetValue()*100+0.5) .. "%"); local newScaling = CT_RAMenu_Options["temp"]["MTScaling"]*UIParent:GetScale(); for i = 1, 10, 1 do getglobal("CT_RAMTGroupMember" .. i):SetScale(newScaling); end CT_RAMTGroup:SetScale(newScaling); CT_RAMTGroupDrag:SetWidth(CT_RAMTGroup:GetWidth()*newScaling+(22*newScaling)); CT_RAMTGroupDrag:SetHeight(CT_RAMTGroupMember1:GetHeight()*newScaling/2); end function CT_RA_GetLocale() local locale = strsub(GetLocale(), 1, 2); if ( locale == "fr" or locale == "de" ) then return locale; else return "en"; end end function CT_RAMenu_Misc_PlaySound() CT_RAMenu_Options["temp"]["PlayRSSound"] = this:GetChecked(); end function CT_RAMenu_Misc_AggroNotifier() CT_RAMenu_Options["temp"]["AggroNotifier"] = this:GetChecked(); if ( not this:GetChecked() ) then CT_RAMenuFrameMiscAggroNotifierSoundCB:Disable(); CT_RAMenuFrameMiscAggroNotifierSound:SetTextColor(0.3, 0.3, 0.3); else CT_RAMenuFrameMiscAggroNotifierSoundCB:Enable(); CT_RAMenuFrameMiscAggroNotifierSound:SetTextColor(1, 1, 1); end end function CT_RAMenu_Misc_AggroNotifierSound() CT_RAMenu_Options["temp"]["AggroNotifierSound"] = this:GetChecked(); end function CT_RAMenu_Additional_ShowEmergency() CT_RAMenu_Options["temp"]["ShowEmergency"] = this:GetChecked(); if ( not this:GetChecked() ) then CT_RAMenuFrameAdditionalEMPartyCB:Disable(); CT_RAMenuFrameAdditionalEMPartyText:SetTextColor(0.3, 0.3, 0.3); CT_RAMenuFrameAdditionalEMOutsideRaidCB:Disable(); CT_RAMenuFrameAdditionalEMOutsideRaidText:SetTextColor(0.3, 0.3, 0.3); else CT_RAMenuFrameAdditionalEMPartyCB:Enable(); CT_RAMenuFrameAdditionalEMPartyText:SetTextColor(1, 1, 1); CT_RAMenuFrameAdditionalEMOutsideRaidCB:Enable(); CT_RAMenuFrameAdditionalEMOutsideRaidText:SetTextColor(1, 1, 1); end CT_RA_Emergency_UpdateHealth(); end function CT_RAMenu_Additional_ShowEmergencyParty() CT_RAMenu_Options["temp"]["ShowEmergencyParty"] = this:GetChecked(); CT_RA_Emergency_UpdateHealth(); end function CT_RAMenu_Additional_ShowEmergencyOutsideRaid() CT_RAMenu_Options["temp"]["ShowEmergencyOutsideRaid"] = this:GetChecked(); CT_RA_Emergency_UpdateHealth(); end function CT_RAMenuMisc_ManaConserve_UsePercent() CT_RAMenu_Options["temp"]["UsePercentValues"] = this:GetChecked(); CT_RAMenuMisc_Slider_Update(this:GetParent():GetName() .. "Slider1"); CT_RAMenuMisc_Slider_Update(this:GetParent():GetName() .. "Slider2"); end function CT_RAMenu_Misc_SendRARS() CT_RAMenu_Options["temp"]["SendRARS"] = this:GetChecked(); end function CT_RAMenu_Misc_ShowAFK() CT_RAMenu_Options["temp"]["ShowAFK"] = this:GetChecked(); CT_RA_UpdateRaidGroup(); end function CT_RAMenu_Misc_ShowMTTT() CT_RAMenu_Options["temp"]["ShowMTTT"] = this:GetChecked(); if ( not this:GetChecked() ) then CT_RAMenuFrameMiscNoColorChangeCB:Disable(); CT_RAMenuFrameMiscNoColorChange:SetTextColor(0.3, 0.3, 0.3); else CT_RAMenuFrameMiscNoColorChangeCB:Enable(); CT_RAMenuFrameMiscNoColorChange:SetTextColor(1, 1, 1); end CT_RA_UpdateMTs(); end function CT_RAMenu_Misc_NoColorChange() CT_RAMenu_Options["temp"]["HideColorChange"] = this:GetChecked(); end function CT_RAMenu_Misc_ShowTooltip() CT_RAMenu_Options["temp"]["HideTooltip"] = not this:GetChecked(); end function CT_RAMenu_Misc_DisableQuery() CT_RAMenu_Options["temp"]["DisableQuery"] = this:GetChecked(); end function CT_RAMenu_Misc_ShowResMonitor() CT_RAMenu_Options["temp"]["ShowMonitor"] = this:GetChecked(); if ( this:GetChecked() and GetNumRaidMembers() > 0 ) then CT_RA_ResFrame:Show(); else CT_RA_ResFrame:Hide(); end end function CT_RAMenu_Misc_HideButton() CT_RAMenu_Options["temp"]["HideButton"] = this:GetChecked(); if ( this:GetChecked() ) then CT_RASets_Button:Hide(); else CT_RASets_Button:Show(); end end function CT_RAMenuGeneral_SortAlpha() CT_RAMenu_Options["temp"]["SubSortByName"] = this:GetChecked(); CT_RA_UpdateRaidGroup(); CT_RAOptions_Update(); end function CT_RAMenu_Misc_NotifyGroupChange() CT_RAMenu_Options["temp"]["NotifyGroupChange"] = this:GetChecked(); if ( not this:GetChecked() ) then CT_RAMenuFrameMiscNotifyGroupChangeCBSound:Disable(); CT_RAMenuFrameMiscNotifyGroupChangeSound:SetTextColor(0.3, 0.3, 0.3); else CT_RAMenuFrameMiscNotifyGroupChangeCBSound:Enable(); CT_RAMenuFrameMiscNotifyGroupChangeSound:SetTextColor(1, 1, 1); end end function CT_RAMenu_Misc_NotifyGroupChangeSound() CT_RAMenu_Options["temp"]["NotifyGroupChangeSound"] = this:GetChecked(); end function CT_RA_UpdateResFrame() local text = ""; for key, val in CT_RA_Ressers do if ( strlen(text) > 0 ) then text = text .. "\n"; end text = text .. key .. ": " .. val; end if ( text == "" ) then text = "No current resurrections"; end CT_RA_ResFrameText:SetText(text); CT_RA_ResFrame:SetWidth(max(CT_RA_ResFrameText:GetWidth()+15, 175)); CT_RA_ResFrame:SetHeight(max(CT_RA_ResFrameText:GetHeight()+25, 50)); end function CT_RAMenuHelp_LoadText() local texts = { "|c00FFFFFFShow Group Names -|r Turns on/off the headers for each group\n\n|c00FFFFFFLock Group Positions -|r Locks all CTRA windows in place\n\n|c00FFFFFFHide Mana Bars -|r Hides all players mana bars\n\n|c00FFFFFFHide Health Bars -|r Hides all players health bars\n\n|c00FFFFFFHide Rage/Energy Bars -|r Hides all players rage and energy bars\n\n|c00FFFFFFHealth Type -|r Allows you to show players health as a percentage,\nactual value, missing hp, only the percentage on MainTank targets,\nor not at all. You can also customize the color the text is shown in\n\n|c00FFFFFFWindow BG Color -|r Changes the color of CTRA window\nbackgrounds, dragging the slider all the way to 100%\nmakes them transparent\n\n|c00FFFFFFAlert Message Color -|r Sets the color the /rs alert messages\nshow in the middle of your screen", "|c00FFFFFFHide party frame -|r Hides your group members when in a raid\n\n|c00FFFFFFHide party frame out of raid -|r Hides your party frame when\nout of raids, primarily used for users of UI mods that use\nalternate party frames\n\n|c00FFFFFFHide offline members -|r Allows you to hide members who\nare offline, so they don't show in CTRA groups\n\n|c00FFFFFFHide short duration debuffs -|r Allows you to hide debuffs with\na duration under 10 seconds\n\n|c00FFFFFFHide border -|r Allows you to hide the border of each CTRA window\n\n|c00FFFFFFSort Type -|r Sort by either group, class, or custom.Sorting\nby Class displays each member in a class category, sorting\nby Custom allows you to change who shows up in which groups", "|c00FFFFFFEdit Channel -|r Allows you to change the CTRaid channel. Clicking the button again will set and join the new channel, leaving any old channels\n\n|c00FFFFFFBroadcast Channel -|r Broadcasts your CTRaid channel to the CTRA users in your raid. This will automatically join the channel for these users. Requires a status of promoted or leader", "Turning on a unit's target allows you to see what that player has targeted. Raid Leaders and Promoted can set MTs (Main Tanks) via the CTRaid tab by right clicking and setting that player as a MT", "Allows you to be notified via chat when someone\nbecomes debuffed with the types listed above,\nas well as allows you to be notified when someone\nloses a buff you are able to recast\n\n|c00FFFFFFNOTE:|r To quickly debuff a cured player, or recast a\nfaded buff, map a hotkey via the game key bindings\nmenu (|c00FFFFFFEscape|r > |c00FFFFFFKey Bindings|r > |c00FFFFFFCT_RaidAssist section|r)\nto one-click recast or cure"; "Allows you to have CTRA cancel healing spells\nif the target has above a certain percentage of health.\n\n|c00FFFFFFCheck Time -|r Sets the amount of time before\n a healing spell lands to perform the health check.\n\n|c00FFFFFFNOTE:|r Only visible if you have any healing spells.", "Allows you to control how often CTRA sends messages.", "Allows you to scale the CTRA group and MT windows.", CT_RAMENU_BUFFSDESCRIPT, CT_RAMENU_BUFFSTOOLTIP, CT_RAMENU_DEBUFFSTOOLTIP, CT_RAMENU_ADDITIONALEMTOOLTIP, "Allows you to change the name and details of the selected set. In any of the three bottom fields, you can use an asterix (|c00FFFFFF*|r) as a wildcard for zero or more characters. You can also use regular expressions, if you have the knowledge to use that.", "Allows you to regulate the classes this set will attempt to cure matching debuffs on." }; this.text = texts[this:GetID()]; end function CT_RAMenuHelp_SetTooltip() local uiX, uiY = UIParent:GetCenter(); local thisX, thisY = this:GetCenter(); local anchor = ""; if ( thisY > uiY ) then anchor = "BOTTOM"; else anchor = "TOP"; end if ( thisX < uiX ) then if ( anchor == "TOP" ) then anchor = "TOPLEFT"; else anchor = "BOTTOMRIGHT"; end else if ( anchor == "TOP" ) then anchor = "TOPRIGHT"; else anchor = "BOTTOMLEFT"; end end GameTooltip:SetOwner(this, "ANCHOR_" .. anchor); end function CT_RAMenu_SaveWindowPositions() CT_RAMenu_Options["temp"]["WindowPositions"] = { }; local left, top, uitop; for i = 1, 8, 1 do local frame = getglobal("CT_RAGroupDrag" .. i); left, top, uitop = frame:GetLeft(), frame:GetTop(), UIParent:GetTop(); if ( left and top and uitop ) then CT_RAMenu_Options["temp"]["WindowPositions"][frame:GetName()] = { left, top-uitop }; end end left, top, uitop = CT_RAMTGroupDrag:GetLeft(), CT_RAMTGroupDrag:GetTop(), UIParent:GetTop(); if ( left and top and uitop ) then CT_RAMenu_Options["temp"]["WindowPositions"]["CT_RAMTGroupDrag"] = { left, top-uitop }; end left, top, uitop = CT_RA_EmergencyFrameDrag:GetLeft(), CT_RA_EmergencyFrameDrag:GetTop(), UIParent:GetTop(); if ( left and top and uitop ) then CT_RAMenu_Options["temp"]["WindowPositions"]["CT_RA_EmergencyFrameDrag"] = { left, top-uitop }; end end function CT_RAMenu_UpdateWindowPositions() if ( CT_RAMenu_Options["temp"]["WindowPositions"] ) then for k, v in CT_RAMenu_Options["temp"]["WindowPositions"] do getglobal(k):ClearAllPoints(); getglobal(k):SetPoint("TOPLEFT" , "UIParent", "TOPLEFT", v[1], v[2]); end end end function CT_RAMenu_CopyTable(source) local dest = { }; if ( type(source) == "table" ) then for k, v in source do dest[k] = CT_RAMenu_CopyTable(v); end return dest; else return source; end end function CT_RAMenu_CopySet(copyFrom, copyTo) CT_RAMenu_Options[copyTo] = nil; CT_RAMenu_Options[copyTo] = CT_RAMenu_CopyTable(CT_RAMenu_Options[copyFrom]); CT_RAMenu_UpdateOptionSets(); end function CT_RAMenu_DeleteSet(name) if ( name ~= "Default" ) then if ( CT_RAMenu_CurrSet == name ) then CT_RAMenu_CurrSet = "Default"; CT_RAMenu_Options["temp"] = CT_RAMenu_CopyTable(CT_RAMenu_Options[CT_RAMenu_CurrSet]); end CT_RAMenu_Options[name] = nil; CT_RAMenu_UpdateOptionSets(); CT_RA_UpdateRaidGroup(); CT_RA_UpdateMTs(); CT_RAMenu_UpdateMenu(); CT_RAOptions_Update(); end end function CT_RAMenu_CompareTable(t1, t2) if ( not t1 or not t2 ) then return false; else if ( t1 == false ) then t1 = nil; end if ( t2 == false ) then t2 = nil; end if ( type(t1) ~= type(t2) ) then return false; elseif ( type(t1) ~= "table" ) then return ( t1 == t2 ); end end local num1, num2 = 0, 0; for key, val in t1 do if ( key ~= "unchanged" and val ~= false ) then num1 = num1 + 1; if ( type(val) ~= "table" ) then if ( not t2[key] or ( t2[key] ~= val and t2[key] ~= false ) ) then return false; end else if ( not CT_RAMenu_CompareTable(val, t2[key]) ) then return false; end end end end for key, val in t2 do if ( key ~= "unchanged" and val ~= false ) then num2 = num2 + 1; end end if ( num1 ~= num2 ) then return false; end return true; end function CT_RAMenu_ExistsSet(set) for k, v in CT_RAMenu_Options do if ( strlower(k) == strlower(set) ) then return true; end end return nil; end function CT_RAMenu_UpdateOptionSets() local num = 0; local postfix = ""; if ( not CT_RAMenu_CompareTable(CT_RAMenu_Options["temp"], CT_RAMenu_Options[CT_RAMenu_CurrSet]) ) then postfix = "*"; CT_RAMenuFrameOptionSetsUndo:Enable(); CT_RAMenuFrameOptionSetsSave:Enable(); else CT_RAMenuFrameOptionSetsUndo:Disable(); CT_RAMenuFrameOptionSetsSave:Disable(); end CT_RAMenuFrameOptionSetsCurrentSet:SetText("Current Set: |c00FFFF00" .. CT_RAMenu_CurrSet .. "|r" .. postfix); for k, v in CT_RAMenu_Options do if ( k ~= "temp" ) then num = num + 1; local obj = getglobal("CT_RAMenuFrameOptionSetsSet" .. num); getglobal(obj:GetName() .. "Name"):SetText(k); obj.setName = k; -- Make sure last line is hidden if ( num == 8 ) then getglobal(obj:GetName() .. "Line"):Hide(); else getglobal(obj:GetName() .. "Line"):Show(); end -- Disallow loading the current set if ( k == CT_RAMenu_CurrSet ) then getglobal(obj:GetName() .. "Load"):Disable(); getglobal(obj:GetName() .. "Name"):SetTextColor(1, 1, 1); else getglobal(obj:GetName() .. "Load"):Enable(); getglobal(obj:GetName() .. "Name"):SetTextColor(0.66, 0.66, 0.66); end -- Disallow deleting the default set if ( k == "Default" ) then getglobal(obj:GetName() .. "Delete"):Disable(); else getglobal(obj:GetName() .. "Delete"):Enable(); end obj:Show(); end end for i = num+1, 8, 1 do getglobal("CT_RAMenuFrameOptionSetsSet" .. i):Hide(); end end function CT_RAMenuBoss_SortTable(t1, t2) local locs = { }; for k, v in CT_RABoss_Locations do locs[v[1]] = k; end if ( t1[2] and t2[2] ) then return locs[t1[1]] < locs[t2[1]]; else local loc1, loc2; if ( t1[2] ) then loc1 = locs[t1[1]]; else loc1 = locs[t1[4]]; end if ( t2[2] ) then loc2 = locs[t2[1]]; else loc2 = locs[t2[4]]; end if ( loc1 == loc2 ) then if ( t1[2] or t2[2] ) then return (t1[2]); else return t1[1] < t2[1]; end else return loc1 < loc2; end end end function CT_RAMenuBoss_CalculateEntries() local locIndexes = { }; local tbl = { }; local numPerLoc = { }; -- Calculate number of mods per location for k, v in CT_RABoss_Mods do local loc = v["location"]; if ( not loc ) then loc = "Other"; end if ( not numPerLoc[loc] ) then numPerLoc[loc] = 1; else numPerLoc[loc] = numPerLoc[loc] + 1; end end -- Populate the locIndexes table with the locations we have for k, v in CT_RABoss_Locations do -- Only add if there are mods for it if ( numPerLoc[v[1]] ) then locIndexes[v[1]] = v[2]; tinsert(tbl, { v[1], 1, v[2] }); end end -- Calculate which records to add for k, v in CT_RABoss_Mods do if ( not v["location"] ) then v["location"] = "Other"; end if ( locIndexes[v["location"]] and locIndexes[v["location"]] == 1 ) then tinsert(tbl, { k, nil, v, v["location"] }); end end -- Sort the table table.sort(tbl, CT_RAMenuBoss_SortTable); return tbl, numPerLoc; end function CT_RAMenuBoss_ToggleHeader(name) for k, v in CT_RABoss_Locations do if ( v[1] == name ) then if ( v[2] == 1 ) then CT_RABoss_Locations[k][2] = 0; else CT_RABoss_Locations[k][2] = 1; end break; end end CT_RAMenuBoss_Update(); end function CT_RAMenuBoss_Update() local tbl, numPerLoc = CT_RAMenuBoss_CalculateEntries(); local numEntries = getn(tbl); -- ScrollFrame update FauxScrollFrame_Update(CT_RAMenuFrameBossScrollFrame, numEntries, 10, 25 ); for i=1, 10, 1 do local obj = getglobal("CT_RAMenuFrameBossMod" .. i); local nameText = getglobal("CT_RAMenuFrameBossMod" .. i .. "Name"); local descriptText = getglobal("CT_RAMenuFrameBossMod" .. i .. "Descript"); local statusText = getglobal("CT_RAMenuFrameBossMod" .. i .. "Status"); local line = getglobal("CT_RAMenuFrameBossMod" .. i .. "Line"); local dropdown = getglobal("CT_RAMenuFrameBossMod" .. i .. "Menu"); local plusMinus = getglobal("CT_RAMenuFrameBossMod" .. i .. "ShowHide"); local prevLine = getglobal("CT_RAMenuFrameBossMod" .. i-1 .. "Line"); local index = i + FauxScrollFrame_GetOffset(CT_RAMenuFrameBossScrollFrame); if ( index <= numEntries ) then obj:Show(); line:Hide(); if ( not tbl[index][2] ) then -- Not a header obj.header = nil; nameText:SetText(tbl[index][1]); nameText:SetTextColor(0.5, 0.5, 0.5); nameText:ClearAllPoints(); nameText:SetPoint("TOPLEFT", obj:GetName(), "TOPLEFT", 45, 0); plusMinus:Hide(); if ( tbl[index][3]["status"] ) then statusText:SetText("On"); statusText:SetTextColor(0, 1, 0); else statusText:SetText("Off"); statusText:SetTextColor(1, 0, 0); end if ( tbl[index][3]["descript"] ) then descriptText:SetText(tbl[index][3]["descript"]); else descriptText:SetText(""); end obj.index = tbl[index][1]; if ( not obj.hasBeenInitialized ) then UIDropDownMenu_Initialize(dropdown, CT_RAMenuBoss_InitDropDown, "MENU"); obj.hasBeenInitialized = 1; end else if ( prevLine ) then prevLine:Show(); end -- Header obj.header = 1; obj.headername = tbl[index][1]; local num = numPerLoc[tbl[index][1]]; if ( not num ) then num = 0; end plusMinus:Show(); if ( tbl[index][3] == 1 ) then if ( obj.mouseIsOver ) then GameTooltip:SetText("Click to contract"); end plusMinus:SetText("-"); obj.expanded = 1; else if ( obj.mouseIsOver ) then GameTooltip:SetText("Click to expand"); end plusMinus:SetText("+"); obj.expanded = nil; end nameText:SetText(tbl[index][1] .. " (" .. num .. ")"); nameText:SetTextColor(1, 1, 1); nameText:ClearAllPoints(); nameText:SetPoint("LEFT", obj:GetName(), "LEFT", 12, 0); statusText:SetText(""); descriptText:SetText(""); end else obj:Hide(); end end end function CT_RAMenuBoss_InitDropDown() local modName = getglobal(UIDROPDOWNMENU_INIT_MENU):GetParent().index; local info = {}; info.text = modName; info.isTitle = 1; info.justifyH = "CENTER"; info.notCheckable = 1; UIDropDownMenu_AddButton(info); info = { }; info.text = "Enable mod"; info.tooltipTitle = "Enable mod"; info.tooltipText = "Enables the mod, turning on all enabled options."; info.checked = CT_RABoss_Mods[modName]["status"]; info.func = CT_RABoss_EnableMod; info.keepShownOnClick = 1; info.value = modName; UIDropDownMenu_AddButton(info); if ( CT_RABoss_DropDown[modName] ) then for k, v in CT_RABoss_DropDown[modName] do info = { }; info.value = { modName, v[3] }; info.keepShownOnClick = 1; if ( type(v[1]) == "string" ) then info.text = v[1]; elseif ( type(v[1]) == "table" ) then info.text = v[1][1]; info.tooltipTitle = v[1][1]; info.tooltipText = v[1][2]; end if ( type(getglobal(v[2])) == "function" ) then info.checked = getglobal(v[2])(modName, v[3]); else info.checked = getglobal(v[2]); end info.func = getglobal(v[4]); UIDropDownMenu_AddButton(info); end end end tinsert(UISpecialFrames, "CT_RA_PriorityFrame"); function CT_RAMenuFrameDebuff_Update() local numEntries = getn(CT_RA_DebuffTemplates); FauxScrollFrame_Update(CT_RAMenuFrameDebuffUseScrollFrame, numEntries, 12, 25); for i = 1, 12, 1 do local button = getglobal("CT_RAMenuFrameDebuffUseSet" .. i); local mouseOver = getglobal("CT_RAMenuFrameDebuffUseSet" .. i .. "MO"); local index = i + FauxScrollFrame_GetOffset(CT_RAMenuFrameDebuffUseScrollFrame); if ( index <= numEntries ) then if ( index == CT_RAMenuFrameDebuff.selectedIndex ) then button.isHighlighted = 1; mouseOver:SetVertexColor(1, 1, 1, 0.25); mouseOver:Show(); else if ( not button.isOver ) then mouseOver:Hide(); end button.isHighlighted = nil; mouseOver:SetVertexColor(1, 1, 1, 0.1); end button:Show(); local name = CT_RA_DebuffTemplates[index]["name"]; if ( not name or name == "" ) then name = ""; end getglobal(button:GetName() .. "Name"):SetText(name); else button:Hide(); end end end function CT_RAMenuFrameDebuff_UpdateSet() CT_RAMenuFrameDebuff_Update(); local set = CT_RAMenuFrameDebuff.selectedIndex; if ( not set ) then CT_RAMenuFrameDebuffSettingsNameEB:Hide(); CT_RAMenuFrameDebuffSettingsDebuffTitleEB:Hide(); CT_RAMenuFrameDebuffSettingsDebuffTypeEB:Hide(); CT_RAMenuFrameDebuffSettingsDebuffDescriptEB:Hide(); for i = 1, 10, 1 do getglobal("CT_RAMenuFrameDebuffClassesClass" .. i):SetTextColor(0.3, 0.3, 0.3); getglobal("CT_RAMenuFrameDebuffClassesClass" .. i .. "CB"):Disable(); getglobal("CT_RAMenuFrameDebuffClassesClass" .. i .. "CB"):SetChecked(1); end CT_RAMenuFrameDebuffDelete:Disable(); CT_RAMenuFrameDebuffEdit:Disable(); else local tbl = CT_RA_DebuffTemplates[set]; CT_RAMenuFrameDebuffSettingsNameEB:Show(); CT_RAMenuFrameDebuffSettingsDebuffTitleEB:Show(); CT_RAMenuFrameDebuffSettingsDebuffTypeEB:Show(); CT_RAMenuFrameDebuffSettingsDebuffDescriptEB:Show(); CT_RAMenuFrameDebuffSettingsNameEB:SetText(string.gsub(tbl["name"] or "", "%.%*", "*")); CT_RAMenuFrameDebuffSettingsDebuffTitleEB:SetText(string.gsub(tbl["debuffName"] or "*", "%.%*", "*")); CT_RAMenuFrameDebuffSettingsDebuffTypeEB:SetText(string.gsub(tbl["debuffType"] or "*", "%.%*", "*")); CT_RAMenuFrameDebuffSettingsDebuffDescriptEB:SetText(string.gsub(tbl["debuffDesc"] or "*", "%.%*", "*")); local classTbl = { CT_RA_WARRIOR, CT_RA_PALADIN, CT_RA_HUNTER, CT_RA_ROGUE, CT_RA_MAGE, CT_RA_WARLOCK, CT_RA_PRIEST, CT_RA_DRUID, CT_RA_SHAMAN, CT_RA_PETS }; for i = 1, 10, 1 do getglobal("CT_RAMenuFrameDebuffClassesClass" .. i):SetTextColor(1, 1, 1); getglobal("CT_RAMenuFrameDebuffClassesClass" .. i .. "CB"):Enable(); getglobal("CT_RAMenuFrameDebuffClassesClass" .. i .. "CB"):SetChecked(tbl["affectClasses"][classTbl[i]]); end CT_RAMenuFrameDebuffDelete:Enable(); CT_RAMenuFrameDebuffEdit:Enable(); end end function CT_RAMenuDebuff_MoveSetDown() local id = this:GetParent():GetID() + FauxScrollFrame_GetOffset(CT_RAMenuFrameDebuffUseScrollFrame); if ( id < getn(CT_RA_DebuffTemplates) ) then if ( ( CT_RAMenuFrameDebuff.selectedIndex or 0 ) == id ) then CT_RAMenuFrameDebuff.selectedIndex = id+1; elseif ( ( CT_RAMenuFrameDebuff.selectedIndex or 0 ) == id+1 ) then CT_RAMenuFrameDebuff.selectedIndex = id; end tinsert(CT_RA_DebuffTemplates, id, tremove(CT_RA_DebuffTemplates, id+1)); end CT_RAMenuFrameDebuff_UpdateSet(); end function CT_RAMenuDebuff_MoveSetUp() local id = this:GetParent():GetID() + FauxScrollFrame_GetOffset(CT_RAMenuFrameDebuffUseScrollFrame); if ( id > 1 ) then if ( ( CT_RAMenuFrameDebuff.selectedIndex or 0 ) == id ) then CT_RAMenuFrameDebuff.selectedIndex = id-1; elseif ( ( CT_RAMenuFrameDebuff.selectedIndex or 0 ) == id-1 ) then CT_RAMenuFrameDebuff.selectedIndex = id; end tinsert(CT_RA_DebuffTemplates, id-1, tremove(CT_RA_DebuffTemplates, id)); end CT_RAMenuFrameDebuff_UpdateSet(); end function CT_RAMenuDebuff_NewSet() tinsert(CT_RA_DebuffTemplates, 1, { ["name"] = "", ["debuffName"] = ".*", ["debuffDesc"] = ".*", ["debuffType"] = ".*", ["affectClasses"] = { [CT_RA_WARRIOR] = 1, [CT_RA_DRUID] = 1, [CT_RA_MAGE] = 1, [CT_RA_WARLOCK] = 1, [CT_RA_ROGUE] = 1, [CT_RA_HUNTER] = 1, [CT_RA_PRIEST] = 1, [CT_RA_PALADIN] = 1, [CT_RA_SHAMAN] = 1, [CT_RA_PETS] = 1 }, ["cureOrder"] = { 1, 2, 3, 4, 5, 6, 7 } }); CT_RAMenuFrameDebuffSettingsNameEB:ClearFocus(); CT_RAMenuFrameDebuffSettingsDebuffTitleEB:ClearFocus(); CT_RAMenuFrameDebuffSettingsDebuffTypeEB:ClearFocus(); CT_RAMenuFrameDebuffSettingsDebuffDescriptEB:ClearFocus(); CT_RAMenuFrameDebuff.selectedIndex = 1; CT_RAMenuFrameDebuff_UpdateSet(); end function CT_RAMenuDebuff_DeleteSet() if ( CT_RAMenuFrameDebuff.selectedIndex ) then tremove(CT_RA_DebuffTemplates, CT_RAMenuFrameDebuff.selectedIndex); CT_RAMenuFrameDebuff.selectedIndex = nil; CT_RAMenuFrameDebuff_UpdateSet(); end end function CT_RA_Priority_OnUpdate() if ( CT_RA_PriorityFrame.moving ) then local numUsed, numAvailable = 0, 0; CT_RA_PriorityFrame.isOver = nil; for i=1, 17, 1 do slot = getglobal("CT_RA_PriorityFramePriority" .. i); if ( slot.currParent == "CT_RA_PriorityFrameAvailable" ) then numAvailable = numAvailable + 1; elseif ( slot.currParent == "CT_RA_PriorityFrameUse" ) then numUsed = numUsed + 1; end if ( MouseIsOver(slot) and CT_RA_PriorityFrame.moving ~= slot ) then slot:SetBackdropBorderColor(1, 1, 0, 1); CT_RA_PriorityFrame.isOver = slot; else slot:SetBackdropBorderColor(1, 1, 1, 1); end end if ( MouseIsOver(CT_RA_PriorityFrameAvailable) ) then CT_RA_PriorityFrame.isOverParent = "CT_RA_PriorityFrameAvailable"; CT_RA_PriorityFrame.numInParent = numAvailable; elseif ( MouseIsOver(CT_RA_PriorityFrameUse) ) then CT_RA_PriorityFrame.isOverParent = "CT_RA_PriorityFrameUse"; CT_RA_PriorityFrame.numInParent = numUsed; else CT_RA_PriorityFrame.numInParent = nil; CT_RA_PriorityFrame.isOverParent = nil; end else for i = 1, 17, 1 do getglobal("CT_RA_PriorityFramePriority" .. i):SetBackdropBorderColor(1, 1, 1, 1); end end end function CT_RA_Priority_SetPosition() if ( CT_RA_PriorityFrame.isOver ) then local tempParent, tempIndex = this.currParent, this.currIndex; CT_RA_PriorityFrame.isOver:ClearAllPoints(); this:ClearAllPoints(); CT_RA_PriorityFrame.isOver:SetPoint("TOP", this.currParent, "TOP", 0, -5-(33*(this.currIndex-1))); this:SetPoint("TOP", CT_RA_PriorityFrame.isOver.currParent, "TOP", 0, -5-(33*(CT_RA_PriorityFrame.isOver.currIndex-1))); this.currParent = CT_RA_PriorityFrame.isOver.currParent; this.currIndex = CT_RA_PriorityFrame.isOver.currIndex; CT_RA_PriorityFrame.isOver.currParent = tempParent; CT_RA_PriorityFrame.isOver.currIndex = tempIndex; elseif ( CT_RA_PriorityFrame.isOverParent ) then for i = 1, 17, 1 do if ( i ~= this:GetID() ) then local slot = getglobal("CT_RA_PriorityFramePriority" .. i); if ( slot.currParent == this.currParent and slot.currIndex > this.currIndex ) then slot.currIndex = slot.currIndex - 1; end end end if ( CT_RA_PriorityFrame.isOverParent == this.currParent ) then this.currParent = CT_RA_PriorityFrame.isOverParent; this.currIndex = CT_RA_PriorityFrame.numInParent; else this.currParent = CT_RA_PriorityFrame.isOverParent; this.currIndex = CT_RA_PriorityFrame.numInParent+1; end this:ClearAllPoints(); this:SetPoint("TOP", CT_RA_PriorityFrame.isOverParent, "TOP", 0, -5-(33*(this.currIndex-1))); end CT_RA_Priority_ClearPositions(); end function CT_RA_Priority_ClearPositions() for i = 1, 17, 1 do local btn = getglobal("CT_RA_PriorityFramePriority" .. i); btn:ClearAllPoints(); btn:SetPoint("TOP", btn.currParent, "TOP", 0, -5-(33*(btn.currIndex-1)) ); end end function CT_RA_Priority_InitPriorities() local tbl = { { "Target", 1, 1, 0 }, { "Player", 0, 1, 0 }, { "Party", 0.7, 0.7, 1 }, { "Raid", 1, 0.5, 0 }, { "Pet", 0, 1, 1 }, { "Party's Pets", 0, 1, 0.7 }, { "Raid's Pets", 0, 1, 0.5 }, { "Main Tanks", 1, 0, 0 }, { CT_RA_WARRIOR, 0.78, 0.61, 0.43 }, { CT_RA_DRUID, 1.0, 0.49, 0.04 }, { CT_RA_MAGE, 0.41, 0.8, 0.94 }, { CT_RA_WARLOCK, 0.58, 0.51, 0.79 }, { CT_RA_ROGUE, 1.0, 0.96, 0.41 }, { CT_RA_HUNTER, 0.67, 0.83, 0.45 }, { CT_RA_PRIEST, 1.0, 1.0, 1.0 }, { CT_RA_PALADIN, 0.96, 0.55, 0.73 }, { CT_RA_SHAMAN, 0.96, 0.55, 0.73 } }; local classTbl = { [9] = CT_RA_WARRIOR, [10] = CT_RA_DRUID, [11] = CT_RA_MAGE, [12] = CT_RA_WARLOCK, [13] = CT_RA_ROGUE, [14] = CT_RA_HUNTER, [15] = CT_RA_PRIEST, [16] = CT_RA_PALADIN, [17] = CT_RA_SHAMAN }; local numUsed, numAvailable = 0, 0; local debuffTbl = CT_RA_DebuffTemplates[CT_RAMenuFrameDebuff.selectedIndex]; CT_RA_PriorityFrameSave:SetText("Editing set '|c00FFFFFF" .. debuffTbl["name"] .. "|r'."); for i = 1, 17, 1 do local used; if ( i > 8 and not debuffTbl["affectClasses"][classTbl[i]] ) then getglobal("CT_RA_PriorityFramePriority" .. i):Hide(); else getglobal("CT_RA_PriorityFramePriority" .. i):Show(); end for k, v in debuffTbl["cureOrder"] do if ( v == i and ( i <= 8 or debuffTbl["affectClasses"][classTbl[i]] ) ) then used = k; break; end end getglobal("CT_RA_PriorityFramePriority" .. i):ClearAllPoints(); getglobal("CT_RA_PriorityFramePriority" .. i .. "Name"):SetText(tbl[i][1]); getglobal("CT_RA_PriorityFramePriority" .. i):SetBackdropColor(tbl[i][2], tbl[i][3], tbl[i][4], 0.5); if ( used ) then numUsed = numUsed + 1; getglobal("CT_RA_PriorityFramePriority" .. i):SetPoint("TOP", "CT_RA_PriorityFrameUse", "TOP", 0, -5-(33*(used-1)) ); getglobal("CT_RA_PriorityFramePriority" .. i).currParent = "CT_RA_PriorityFrameUse"; getglobal("CT_RA_PriorityFramePriority" .. i).currIndex = used; elseif ( getglobal("CT_RA_PriorityFramePriority" .. i):IsVisible() ) then numAvailable = numAvailable + 1; getglobal("CT_RA_PriorityFramePriority" .. i):SetPoint("TOP", "CT_RA_PriorityFrameAvailable", "TOP", 0, -5-(33*(numAvailable-1)) ); getglobal("CT_RA_PriorityFramePriority" .. i).currParent = "CT_RA_PriorityFrameAvailable"; getglobal("CT_RA_PriorityFramePriority" .. i).currIndex = numAvailable; end end end function CT_RA_Priority_SavePriorities() local tbl = CT_RA_DebuffTemplates[CT_RAMenuFrameDebuff.selectedIndex]; CT_RA_DebuffTemplates[CT_RAMenuFrameDebuff.selectedIndex]["cureOrder"] = { }; for i = 1, 17, 1 do local btn = getglobal("CT_RA_PriorityFramePriority" .. i); if ( btn.currParent == "CT_RA_PriorityFrameUse" ) then CT_RA_DebuffTemplates[CT_RAMenuFrameDebuff.selectedIndex]["cureOrder"][btn.currIndex] = btn:GetID(); end end end function CT_RADebuff_SaveClass() local tbl = { CT_RA_WARRIOR, CT_RA_PALADIN, CT_RA_HUNTER, CT_RA_ROGUE, CT_RA_MAGE, CT_RA_WARLOCK, CT_RA_PRIEST, CT_RA_DRUID, CT_RA_SHAMAN, CT_RA_PETS }; CT_RA_DebuffTemplates[CT_RAMenuFrameDebuff.selectedIndex]["affectClasses"][tbl[this:GetID()]] = this:GetChecked(); end function CT_RADebuff_SaveName() local text = this:GetText() or ""; text = string.gsub(text, "*", ".*"); CT_RA_DebuffTemplates[CT_RAMenuFrameDebuff.selectedIndex]["name"] = text; CT_RAMenuFrameDebuff_UpdateSet(); end function CT_RADebuff_SaveTitle() local text = this:GetText() or ""; text = string.gsub(text, "*", ".*"); CT_RA_DebuffTemplates[CT_RAMenuFrameDebuff.selectedIndex]["debuffName"] = text; CT_RAMenuFrameDebuff_UpdateSet(); end function CT_RADebuff_SaveType() local text = this:GetText() or ""; text = string.gsub(text, "*", ".*"); CT_RA_DebuffTemplates[CT_RAMenuFrameDebuff.selectedIndex]["debuffType"] = text; CT_RAMenuFrameDebuff_UpdateSet(); end function CT_RADebuff_SaveDescript() local text = this:GetText() or ""; text = string.gsub(text, "*", ".*"); CT_RA_DebuffTemplates[CT_RAMenuFrameDebuff.selectedIndex]["debuffDesc"] = text; CT_RAMenuFrameDebuff_UpdateSet(); end