CT_AddMovable("CT_HotbarLeft_Drag", CT_BARMOD_MOVABLE_LEFTHOTBAR, "BOTTOM", "BOTTOM", "UIParent", -490, 98, function(status) if ( status and CT_HotbarLeft:IsVisible() ) then CT_HotbarLeft_Drag:Show() else CT_HotbarLeft_Drag:Hide(); end end); CT_AddMovable("CT_HotbarRight_Drag", CT_BARMOD_MOVABLE_RIGHTHOTBAR, "BOTTOM", "BOTTOM", "UIParent", 14, 98, function(status) if ( status and CT_HotbarRight:IsVisible() ) then CT_HotbarRight_Drag:Show() else CT_HotbarRight_Drag:Hide(); end end); CT_AddMovable("CT_SidebarLeft_Drag", CT_BARMOD_MOVABLE_LEFTSIDEBAR, "TOPLEFT", "TOPLEFT", "UIParent", 15, -86, function(status) if ( status and CT_SidebarFrame:IsVisible() ) then CT_SidebarLeft_Drag:Show() else CT_SidebarLeft_Drag:Hide(); end end); CT_AddMovable("CT_SidebarRight_Drag", CT_BARMOD_MOVABLE_RIGHTSIDEBAR, "TOPRIGHT", "TOPRIGHT", "UIParent", -15, -148, function(status) if ( status and CT_SidebarFrame2:IsVisible() ) then CT_SidebarRight_Drag:Show() else CT_SidebarRight_Drag:Hide(); end end); CT_AddMovable("CT_HotbarTop_Drag", CT_BARMOD_MOVABLE_TOPHOTBAR, "BOTTOM", "BOTTOM", "UIParent", -28, 140, function(status) if ( status and CT_HotbarTop:IsVisible() ) then CT_HotbarTop_Drag:Show() else CT_HotbarTop_Drag:Hide(); end end); CT_AddMovable("CT_PetBar_Drag", CT_BARMOD_MOVABLE_PETBAR, "BOTTOMLEFT", "BOTTOM", "UIParent", -453, 82, function(status) if ( status and PetActionBarFrame:IsVisible() ) then CT_PetBar_Drag:Show() else CT_PetBar_Drag:Hide(); end end, function() if ( CT_HotbarLeft:IsVisible() ) then local x = CT_PetBar_Drag:GetLeft()-(UIParent:GetRight()/2); local y = CT_PetBar_Drag:GetBottom()+40; CT_PetBar_Drag:ClearAllPoints(); CT_PetBar_Drag:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOM", x, y); end end); CT_AddMovable("CT_BABar_Drag", CT_BARMOD_MOVABLE_CLASSBAR, "BOTTOMLEFT", "BOTTOM", "UIParent", -461, 88, function(status) if ( status and ShapeshiftBarFrame:IsVisible() ) then CT_BABar_Drag:Show() else CT_BABar_Drag:Hide(); end end, function() if ( CT_HotbarLeft:IsVisible() ) then local x = CT_BABar_Drag:GetLeft()-(UIParent:GetRight()/2); local y = CT_BABar_Drag:GetBottom()+40; CT_BABar_Drag:ClearAllPoints(); CT_BABar_Drag:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOM", x, y); end end); local CT_Hotcast = 0; CT_SelfCast = 0; CT_CDCount = 0; CT_FadeColor = { ["r"] = 1.0, ["g"] = 1.0, ["b"] = 1.0 }; CT_ActionBar_LockedPage = 1; local CT_NextSelfCast; CT_Hotbar = { }; CT_SidebarAxis = { [1] = 2, [2] = 2, [3] = 1, [4] = 1, [5] = 2 }; CT_LSidebar_Buttons = 12; CT_RSidebar_Buttons = 12; CT_Alt_Hotbar = 0; CT_Hotbars_Locked = false; CT_HotbarButtons_Locked = false; CT_ShowGrid = 1; function CT_ButtonLock_Update(modid) local val = CT_Mods[modid]; if ( val["modStatus"] == "off" ) then CT_HotbarButtons_Locked = false; else CT_HotbarButtons_Locked = true; end end function CT_Sidebar_ButtonInUse(btn) if ( ( strsub(btn:GetName(), 1, 3) == "CT3" and btn:GetID() <= CT_LSidebar_Buttons ) or ( strsub( btn:GetName(), 1, 3) == "CT4" and btn:GetID() <= CT_RSidebar_Buttons ) ) then return 1; else return nil; end end function CT_HotbarcastUp(id) CT_Hotbar[id] = nil; end function CT_HotbarcastDown(id) CT_Hotbar[id] = 1; end function CT_ActionButton_Update() -- Special case code for bonus bar buttons -- Prevents the button from updating if the bonusbar is still in an animation transition if ( this.isBonus and this.inTransition ) then CT_ActionButton_UpdateUsable(); CT_ActionButton_UpdateCooldown(); return; end local icon = getglobal(this:GetName().."Icon"); local buttonCooldown = getglobal(this:GetName().."Cooldown"); local texture = GetActionTexture(CT_ActionButton_GetPagedID(this)); if ( texture ) then icon:SetTexture(texture); icon:Show(); this.rangeTimer = -1; this:SetNormalTexture("Interface\\Buttons\\UI-Quickslot2"); -- Save texture if the button is a bonus button, will be needed later if ( this.isBonus ) then this.texture = texture; end else icon:Hide(); buttonCooldown:Hide(); this.rangeTimer = nil; this:SetNormalTexture("Interface\\Buttons\\UI-Quickslot"); getglobal(this:GetName().."HotKey"):SetVertexColor(0.6, 0.6, 0.6); end CT_ActionButton_UpdateCount(); if ( HasAction(CT_ActionButton_GetPagedID(this)) ) then this:RegisterEvent("ACTIONBAR_UPDATE_STATE"); this:RegisterEvent("ACTIONBAR_UPDATE_USABLE"); this:RegisterEvent("ACTIONBAR_UPDATE_COOLDOWN"); this:RegisterEvent("UPDATE_INVENTORY_ALERTS"); this:RegisterEvent("PLAYER_AURAS_CHANGED"); this:RegisterEvent("PLAYER_TARGET_CHANGED"); this:RegisterEvent("UNIT_INVENTORY_CHANGED"); this:RegisterEvent("CRAFT_SHOW"); this:RegisterEvent("CRAFT_CLOSE"); this:RegisterEvent("TRADE_SKILL_SHOW"); this:RegisterEvent("TRADE_SKILL_CLOSE"); this:RegisterEvent("PLAYER_ENTER_COMBAT"); this:RegisterEvent("PLAYER_LEAVE_COMBAT"); this:RegisterEvent("START_AUTOREPEAT_SPELL"); this:RegisterEvent("STOP_AUTOREPEAT_SPELL"); this:Show(); CT_ActionButton_UpdateState(); CT_ActionButton_UpdateUsable(); CT_ActionButton_UpdateCooldown(); CT_ActionButton_UpdateFlash(); else this:UnregisterEvent("ACTIONBAR_UPDATE_STATE"); this:UnregisterEvent("ACTIONBAR_UPDATE_USABLE"); this:UnregisterEvent("ACTIONBAR_UPDATE_COOLDOWN"); this:UnregisterEvent("UPDATE_INVENTORY_ALERTS"); this:UnregisterEvent("PLAYER_AURAS_CHANGED"); this:UnregisterEvent("PLAYER_TARGET_CHANGED"); this:UnregisterEvent("UNIT_INVENTORY_CHANGED"); this:UnregisterEvent("CRAFT_SHOW"); this:UnregisterEvent("CRAFT_CLOSE"); this:UnregisterEvent("TRADE_SKILL_SHOW"); this:UnregisterEvent("TRADE_SKILL_CLOSE"); this:UnregisterEvent("PLAYER_ENTER_COMBAT"); this:UnregisterEvent("PLAYER_LEAVE_COMBAT"); this:UnregisterEvent("START_AUTOREPEAT_SPELL"); this:UnregisterEvent("STOP_AUTOREPEAT_SPELL"); if ( this.showgrid == 0 ) then this:Hide(); else buttonCooldown:Hide(); end end -- Add a green border if button is an equipped item local border = getglobal(this:GetName().."Border"); if ( IsEquippedAction(CT_ActionButton_GetPagedID(this)) ) then border:SetVertexColor(0, 1.0, 0, 0.35); border:Show(); else border:Hide(); end if ( GameTooltip:IsOwned(this) ) then CT_ActionButton_SetTooltip(); else this.updateTooltip = nil; end -- Update Macro Text local macroName = getglobal(this:GetName().."Name"); macroName:SetText(GetActionText(CT_ActionButton_GetPagedID(this))); end function CT_ActionButton_UpdateFlash() local pagedID = CT_ActionButton_GetPagedID(this); if ( (IsAttackAction(pagedID) and IsCurrentAction(pagedID)) or IsAutoRepeatAction(pagedID) ) then CT_ActionButton_StartFlash(); else CT_ActionButton_StopFlash(); end end function CT_ActionButton_HideGrid(button) local btn; if ( button ) then btn = button; else btn = this; end local isException; if ( ( GetBonusBarOffset() > 0 and strsub(btn:GetName(), 1, 12) ~= "ActionButton" ) or ( strsub(btn:GetName(), 1, 12) == "MultiBarLeft" and not SHOW_MULTI_ACTIONBAR_4 ) or ( strsub(btn:GetName(), 1, 13) == "MultiBarRight" and not SHOW_MULTI_ACTIONBAR_3 ) or ( strsub(btn:GetName(), 1, 18) == "MultiBarBottomLeft" and not SHOW_MULTI_ACTIONBAR_1 ) or ( strsub(btn:GetName(), 1, 19) == "MultiBarBottomRight" and not SHOW_MULTI_ACTIONBAR_2 ) or ( GetBonusBarOffset() == 0 and strsub(btn:GetName(), 1, 17) ~= "BonusActionButton" ) ) then isException = 1; end if ( CT_ShowGrid and isException ) then return; end btn.showgrid = 0; if ( not HasAction(CT_ActionButton_GetPagedID(btn)) or not isException ) then btn:Hide(); end end function CT_ActionButton_OnLoad() if ( ( ( strsub( this:GetName(), 1, 3) == "CT3" and this:GetID() <= CT_LSidebar_Buttons ) or ( strsub( this:GetName(), 1, 3) == "CT4" and this:GetID() <= CT_RSidebar_Buttons ) ) and ( strsub( this:GetName(), 1, 3 ) == "CT3" or strsub( this:GetName(), 1, 3 ) == "CT4" ) ) then this:Hide(); else this:Show(); end this.flashing = 0; this.flashtime = 0; ActionButton_Update(); this:RegisterForDrag("LeftButton", "RightButton"); this:RegisterForClicks("LeftButtonUp", "RightButtonUp"); this:RegisterEvent("ACTIONBAR_SHOWGRID"); this:RegisterEvent("ACTIONBAR_HIDEGRID"); this:RegisterEvent("ACTIONBAR_PAGE_CHANGED"); this:RegisterEvent("ACTIONBAR_SLOT_CHANGED"); this:RegisterEvent("ACTIONBAR_UPDATE_STATE"); this:RegisterEvent("ACTIONBAR_UPDATE_USABLE"); this:RegisterEvent("ACTIONBAR_UPDATE_COOLDOWN"); this:RegisterEvent("PLAYER_AURAS_CHANGED"); this:RegisterEvent("PLAYER_TARGET_CHANGED"); this:RegisterEvent("UNIT_AURASTATE"); this:RegisterEvent("UNIT_INVENTORY_CHANGED"); this:RegisterEvent("CRAFT_SHOW"); this:RegisterEvent("CRAFT_CLOSE"); this:RegisterEvent("TRADE_SKILL_SHOW"); this:RegisterEvent("TRADE_SKILL_CLOSE"); this:RegisterEvent("UNIT_HEALTH"); this:RegisterEvent("UNIT_MANA"); this:RegisterEvent("UNIT_RAGE"); this:RegisterEvent("UNIT_FOCUS"); this:RegisterEvent("UNIT_ENERGY"); this:RegisterEvent("UPDATE_BONUS_ACTIONBAR"); this:RegisterEvent("PLAYER_ENTER_COMBAT"); this:RegisterEvent("PLAYER_LEAVE_COMBAT"); this:RegisterEvent("PLAYER_COMBO_POINTS"); this:RegisterEvent("UPDATE_BINDINGS"); this:RegisterEvent("START_AUTOREPEAT_SPELL"); this:RegisterEvent("STOP_AUTOREPEAT_SPELL"); CT_ActionButton_UpdateHotkeys(); this.showgrid = 2; end function CT_ActionButton_UpdateHotkeys(actionbtn) if ( not actionbtn ) then actionbtn = this; end if ( CT_ShowHotkeys == -1 ) then getglobal(actionbtn:GetName() .. "HotKey"):Hide(); return; end local hotkey = getglobal(actionbtn:GetName().."HotKey"); hotkey:Show(); if ( not CT_ShowHotkeys ) then local key = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=" }; hotkey:SetText(key[actionbtn:GetID()]); return; end local prefix; if ( strsub(actionbtn:GetName(), 0, 3) == "CT_" ) then prefix = "CT_HOTBAR1"; elseif ( strsub(actionbtn:GetName(), 0, 2) == "CT" ) then prefix = "CT_HOTBAR" .. strsub(actionbtn:GetName(), 3, 3); else prefix = "ACTION"; end local action = prefix .. "BUTTON"..actionbtn:GetID(); local text = GetBindingText(GetBindingKey(action), "KEY_"); text = string.gsub(text, "CTRL%-", "C-"); text = string.gsub(text, "ALT%-", "A-"); text = string.gsub(text, "SHIFT%-", "S-"); text = string.gsub(text, "Num Pad", "NP"); text = string.gsub(text, "Backspace", "Bksp"); text = string.gsub(text, "Spacebar", "Space"); text = string.gsub(text, "Page", "Pg"); text = string.gsub(text, "Down", "Dn"); text = string.gsub(text, "Arrow", ""); text = string.gsub(text, "Insert", "Ins"); text = string.gsub(text, "Delete", "Del"); hotkey:SetText(text); end function CT_ActionButton_UpdateState() if ( IsCurrentAction(CT_ActionButton_GetPagedID(this)) or IsAutoRepeatAction(CT_ActionButton_GetPagedID(this)) ) then this:SetChecked(1); else this:SetChecked(0); end end function CT_ActionButton_UpdateUsable() local icon = getglobal(this:GetName().."Icon"); local normalTexture = getglobal(this:GetName().."NormalTexture"); local isUsable, notEnoughMana = IsUsableAction(CT_ActionButton_GetPagedID(this)); if ( isUsable ) then if ( this.inRange and this.inRange == 0 ) then icon:SetVertexColor(CT_FadeColor.r, CT_FadeColor.g, CT_FadeColor.b); if ( not CT_ShowGrid ) then normalTexture:SetVertexColor(CT_FadeColor.r, CT_FadeColor.g, CT_FadeColor.b); end else icon:SetVertexColor(1.0, 1.0, 1.0); if ( not CT_ShowGrid ) then normalTexture:SetVertexColor(1.0, 1.0, 1.0); end end elseif ( notEnoughMana ) then icon:SetVertexColor(0.5, 0.5, 1.0); if ( not CT_ShowGrid ) then normalTexture:SetVertexColor(0.5, 0.5, 1.0); end else icon:SetVertexColor(0.4, 0.4, 0.4); if ( not CT_ShowGrid ) then normalTexture:SetVertexColor(0.4, 0.4, 0.4); end end end function CT_ActionButton_UpdateCount() local text = getglobal(this:GetName().."Count"); local count = GetActionCount(CT_ActionButton_GetPagedID(this)); if ( count > 1 ) then text:SetText(count); else text:SetText(""); end end function CT_ActionButton_UpdateCooldown() local cooldown = getglobal(this:GetName().."Cooldown"); local start, duration, enable = GetActionCooldown(CT_ActionButton_GetPagedID(this)); CooldownFrame_SetTimer(cooldown, start, duration, enable); end function CT_ActionButton_OnEvent(event) if ( event == "PLAYER_LEAVING_WORLD" ) then this.disableEvents = true; elseif ( event == "PLAYER_ENTERING_WORLD" ) then this.disableEvents = nil; elseif ( this.disableEvents ) then return; end if ( event == "ACTIONBAR_SLOT_CHANGED" ) then if ( arg1 == -1 or arg1 == CT_ActionButton_GetPagedID(this) ) then CT_ActionButton_Update(); end return; end if ( event == "ACTIONBAR_PAGE_CHANGED" or event == "PLAYER_AURAS_CHANGED" or event == "UPDATE_BONUS_ACTIONBAR" ) then CT_BarMod_UpdateCooldownCount(this); CT_ActionButton_Update(); CT_ActionButton_UpdateState(); return; end if ( event == "ACTIONBAR_SHOWGRID" ) then CT_ActionButton_ShowGrid(); return; end if ( event == "ACTIONBAR_HIDEGRID" ) then CT_ActionButton_HideGrid(); return; end if ( event == "UPDATE_BINDINGS" ) then CT_ActionButton_UpdateHotkeys(); end -- All event handlers below this line MUST only be valid when the button is visible if ( not this:IsVisible() ) then return; end if ( event == "PLAYER_TARGET_CHANGED" ) then CT_ActionButton_UpdateUsable(); return; end if ( event == "UNIT_AURASTATE" ) then if ( arg1 == "player" or arg1 == "target" ) then CT_ActionButton_UpdateUsable(); end return; end if ( event == "UNIT_INVENTORY_CHANGED" ) then if ( arg1 == "player" ) then CT_ActionButton_Update(); end return; end if ( event == "ACTIONBAR_UPDATE_STATE" ) then CT_ActionButton_UpdateState(); return; end if ( event == "ACTIONBAR_UPDATE_USABLE" ) then CT_ActionButton_UpdateUsable(); return; end if ( event == "ACTIONBAR_UPDATE_COOLDOWN" ) then CT_ActionButton_UpdateCooldown(); return; end if ( event == "CRAFT_SHOW" or event == "CRAFT_CLOSE" or event == "TRADE_SKILL_SHOW" or event == "TRADE_SKILL_CLOSE" ) then CT_ActionButton_UpdateState(); return; end if ( arg1 == "player" and (event == "UNIT_HEALTH" or event == "UNIT_MANA" or event == "UNIT_RAGE" or event == "UNIT_FOCUS" or event == "UNIT_ENERGY") ) then CT_ActionButton_UpdateUsable(); return; end if ( event == "PLAYER_ENTER_COMBAT" ) then IN_ATTACK_MODE = 1; if ( IsAttackAction(CT_ActionButton_GetPagedID(this)) ) then CT_ActionButton_StartFlash(); end return; end if ( event == "PLAYER_LEAVE_COMBAT" ) then IN_ATTACK_MODE = 0; if ( IsAttackAction(CT_ActionButton_GetPagedID(this)) ) then CT_ActionButton_StopFlash(); end return; end if ( event == "PLAYER_COMBO_POINTS" ) then CT_ActionButton_UpdateUsable(); return; end if ( event == "START_AUTOREPEAT_SPELL" ) then IN_AUTOREPEAT_MODE = 1; if ( IsAutoRepeatAction(CT_ActionButton_GetPagedID(this)) ) then CT_ActionButton_StartFlash(); end return; end if ( event == "STOP_AUTOREPEAT_SPELL" ) then IN_AUTOREPEAT_MODE = nil; if ( ActionButton_IsFlashing() and not IsAttackAction(CT_ActionButton_GetPagedID(this)) ) then CT_ActionButton_StopFlash(); end return; end end function CT_ActionButton_StartFlash() this.flashing = 1; this.flashtime = 0; CT_ActionButton_UpdateState(); end function CT_ActionButton_StopFlash() this.flashing = 0; getglobal(this:GetName().."Flash"):Hide(); CT_ActionButton_UpdateState(); end function CT_ActionButton_SetTooltip() if ( GetCVar("UberTooltips") == "1" ) then GameTooltip_SetDefaultAnchor(GameTooltip, this); else if ( this:GetCenter() < UIParent:GetCenter() ) then GameTooltip:SetOwner(this, "ANCHOR_RIGHT"); else GameTooltip:SetOwner(this, "ANCHOR_LEFT"); end end if ( GameTooltip:SetAction(CT_ActionButton_GetPagedID(this)) ) then this.updateTooltip = TOOLTIP_UPDATE_TIME; else this.updateTooltip = nil; end end function CT_ActionButton_GetPagedID(button) if( button == nil ) then return 0; end local page = CURRENT_ACTIONBAR_PAGE; if ( CT_Hotbars_Locked ) then page = CT_ActionBar_LockedPage; end local isBonus; if ( not page ) then page = 1; end if ( strsub( button:GetName(), 1, 3 ) == "CT2" ) then page = page + 1; elseif ( strsub( button:GetName(), 1, 3 ) == "CT3" ) then page = page + 2; elseif ( strsub( button:GetName(), 1, 3 ) == "CT4" ) then page = page + 3; elseif ( strsub( button:GetName(), 1, 3 ) == "CT5" ) then page = page + 4; elseif ( string.find(button:GetName(), "^ActionButton%d+$") ) then page = page - 1; elseif ( string.find(button:GetName(), "^BonusActionButton%d+$") or string.find(button:GetName(), "^MultiBar") ) then return ActionButton_GetPagedID(button); end if ( page >= 6 and not isBonus ) then page = page - 6; end return (button:GetID() + ((page) * NUM_ACTIONBAR_BUTTONS)); end function CT_ActionButtonDown(bar, id) if ( bar == 1 ) then bar = ""; end -- First bar's buttons aren't named CT1 local button = getglobal("CT" .. bar .. "_ActionButton" .. id); if ( button:GetButtonState() == "NORMAL" ) then button:SetButtonState("PUSHED"); end if ( CT_SelfCastModifier ) then CT_NextSelfCast = 1; end end function CT_ActionButtonUp(bar, id) if ( bar == 1 ) then bar = ""; end -- First bar's buttons aren't named CT1 local button = getglobal("CT" .. bar .. "_ActionButton" .. id); if ( button:GetButtonState() == "PUSHED" ) then button:SetButtonState("NORMAL"); -- Used to save a macro if ( MacroFrame_SaveMacro ) then MacroFrame_SaveMacro(); end if ( CT_NextSelfCast ) then UseAction(CT_ActionButton_GetPagedID(button), 0, 1); else UseAction(CT_ActionButton_GetPagedID(button), 1, nil); if ( SpellIsTargeting() and CT_SelfCast == 1 and SpellCanTargetUnit("player") ) then SpellTargetUnit("player"); end end if ( CT_DebuffTimers_AddDebuff ) then CT_DebuffTimers_AddDebuff(CT_ActionButton_GetPagedID(button)); end if ( IsCurrentAction(CT_ActionButton_GetPagedID(button)) ) then button:SetChecked(1); else button:SetChecked(0); end end CT_NextSelfCast = nil; end CT_oldActionButtonUp = ActionButtonUp; function CT_newActionButtonUp(id, onSelf) if ( CT_NextSelfCast ) then CT_oldActionButtonUp(id, 1); else CT_oldActionButtonUp(id, onSelf); if ( SpellIsTargeting() and CT_SelfCast == 1 and SpellCanTargetUnit("player") ) then SpellTargetUnit("player"); end end CT_NextSelfCast = nil; end ActionButtonUp = CT_newActionButtonUp; CT_oldActionButtonDown = ActionButtonDown; function CT_newActionButtonDown(id) CT_oldActionButtonDown(id); if ( CT_SelfCastModifier ) then CT_NextSelfCast = 1; end end ActionButtonDown = CT_newActionButtonDown; function CT_LHotbar_Update() local modStatusLeft = "on"; for key, val in CT_Mods do if ( val["modName"] == BARMOD_MODNAME_LEFTHB ) then modStatusLeft = val["modStatus"]; end end if ( modStatusLeft == "off" ) then CT_HotbarLeft:Hide(); else CT_HotbarLeft:Show(); if ( not CT_BABar_Drag:IsUserPlaced() ) then CT_BABar_Drag:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOM", -461, 128); end if ( not CT_PetBar_Drag:IsUserPlaced() ) then CT_PetBar_Drag:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOM", -453, 122); end end end function CT_RHotbar_Update() local modStatusRight = "on"; for key, val in CT_Mods do if ( val["modName"] == BARMOD_MODNAME_RIGHTHB ) then modStatusRight = val["modStatus"]; end end if ( modStatusRight == "off" ) then CT_HotbarRight:Hide(); else CT_HotbarRight:Show(); end end function CT_THotbar_Update() local modStatusTop = "on"; for key, val in CT_Mods do if ( val["modName"] == BARMOD_MODNAME_TOPHB ) then modStatusTop = val["modStatus"]; end end if ( modStatusTop == "off" ) then CT_HotbarTop:Hide(); else CT_HotbarTop:Show(); end end function CT_ActionButton_ShowGrid() if ( CT_Sidebar_ButtonInUse(this) or ( strsub( this:GetName(), 1, 3 ) ~= "CT3" and strsub( this:GetName(), 1, 3 ) ~= "CT4" ) ) then this.showgrid = this.showgrid+1; getglobal(this:GetName().."NormalTexture"):SetVertexColor(1.0, 1.0, 1.0, 1.0); this:Show(); end end function CT_GetBagColumns() local freeScreenHeight = GetScreenHeight() - CONTAINER_OFFSET; local index = 1; local column = 0; for i=1, NUM_CONTAINER_FRAMES, 1 do if ( getglobal("ContainerFrame" .. i):IsVisible() ) then column = 1; break; end end while ContainerFrame1.bags[index] do local frame = getglobal(ContainerFrame1.bags[index]); -- freeScreenHeight determines when to start a new column of bags if ( freeScreenHeight < frame:GetHeight() and index > 1 ) then column = column + 1; freeScreenHeight = UIParent:GetHeight() - CONTAINER_OFFSET; end freeScreenHeight = freeScreenHeight - frame:GetHeight() - VISIBLE_CONTAINER_SPACING; index = index + 1; end return column; end function CT_HideButtons(buttonname, unt, stop, hidebefore) for i=1, stop, 1 do local button = getglobal(buttonname .. i); if ( i <= unt ) then if ( hidebefore == 1 ) then button:Hide(); else button:Show(); end else if ( hidebefore == 1 ) then button:Show(); else button:Hide(); end end end end CT_oldActionButton_OnUpdate = ActionButton_OnUpdate; function CT_newActionButton_OnUpdate(elapsed) if ( this.rangeTimer and this.rangeTimer <= elapsed ) then if ( IsActionInRange( ActionButton_GetPagedID(this)) == 0 ) then this.inRange = 0; else this.inRange = 1; end ActionButton_UpdateUsable(); end CT_oldActionButton_OnUpdate(elapsed); end ActionButton_OnUpdate = CT_newActionButton_OnUpdate; CT_oldActionButton_UpdateUsable = ActionButton_UpdateUsable; function CT_newActionButton_UpdateUsable() CT_oldActionButton_UpdateUsable(); local icon = getglobal(this:GetName().."Icon"); local isUsable, notEnoughMana = IsUsableAction(ActionButton_GetPagedID(this)); if ( isUsable ) then if ( this.inRange and this.inRange == 0 ) then icon:SetVertexColor(CT_FadeColor.r, CT_FadeColor.g, CT_FadeColor.b); end end end ActionButton_UpdateUsable = CT_newActionButton_UpdateUsable; function CT_ActionButton_UpdateUsable() local icon = getglobal(this:GetName().."Icon"); local normalTexture = getglobal(this:GetName().."NormalTexture"); local isUsable, notEnoughMana = IsUsableAction(CT_ActionButton_GetPagedID(this)); if ( isUsable ) then if ( this.inRange and this.inRange == 0 ) then icon:SetVertexColor(CT_FadeColor.r, CT_FadeColor.g, CT_FadeColor.b); if ( not CT_ShowGrid ) then normalTexture:SetVertexColor(CT_FadeColor.r, CT_FadeColor.g, CT_FadeColor.b); end else icon:SetVertexColor(1.0, 1.0, 1.0); if ( not CT_ShowGrid ) then normalTexture:SetVertexColor(1.0, 1.0, 1.0); end end elseif ( notEnoughMana ) then icon:SetVertexColor(0.5, 0.5, 1.0); if ( not CT_ShowGrid ) then normalTexture:SetVertexColor(0.5, 0.5, 1.0); end else icon:SetVertexColor(0.4, 0.4, 0.4); if ( not CT_ShowGrid ) then normalTexture:SetVertexColor(0.4, 0.4, 0.4); end end end function CT_ActionButton_OnUpdate(elapsed) if ( ActionButton_IsFlashing() ) then this.flashtime = this.flashtime - elapsed; if ( this.flashtime <= 0 ) then local overtime = -this.flashtime; if ( overtime >= ATTACK_BUTTON_FLASH_TIME ) then overtime = 0; end this.flashtime = ATTACK_BUTTON_FLASH_TIME - overtime; local flashTexture = getglobal(this:GetName().."Flash"); if ( flashTexture:IsVisible() ) then flashTexture:Hide(); else flashTexture:Show(); end end end if ( this.rangeTimer ) then if ( this.rangeTimer < 0 ) then local count = getglobal(this:GetName().."HotKey"); if ( IsActionInRange( CT_ActionButton_GetPagedID(this)) == 0 ) then count:SetVertexColor(1.0, 0.1, 0.1); this.inRange = 0; else count:SetVertexColor(1.0, 1.0, 1.0); this.inRange = 1; end this.rangeTimer = TOOLTIP_UPDATE_TIME; CT_ActionButton_UpdateUsable(); else this.rangeTimer = this.rangeTimer - elapsed; end end if ( not this.updateTooltip ) then return; end this.updateTooltip = this.updateTooltip - elapsed; if ( this.updateTooltip > 0 ) then return; end if ( GameTooltip:IsOwned(this) ) then CT_ActionButton_SetTooltip(); else this.updateTooltip = nil; end end function CT_Sidebar_ChangeAxis(bar, force) local curraxis = CT_SidebarAxis[bar]; if ( force ) then curraxis = force; end if ( curraxis == 1 ) then CT_SidebarAxis[tonumber(bar)] = 2; else CT_SidebarAxis[tonumber(bar)] = 1; end if ( CT_BarModOptions_Options[UnitName("player")] ) then CT_BarModOptions_RemoveSpaceBars(CT_BarModOptions_Options[UnitName("player")]["removeBars"]) else CT_BarModOptions_RemoveSpaceBars(); end end BLIZZARD_Original_updateContainerFrameAnchors = updateContainerFrameAnchors; function updateContainerFrameAnchors() CT_Bag_Update(); end function CT_updateContainerFrameAnchors() local freeScreenHeight = GetScreenHeight() - CONTAINER_OFFSET; local index = 1; local column = 0; while ContainerFrame1.bags[index] do local frame = getglobal(ContainerFrame1.bags[index]); if ( index == 1 ) then frame:SetPoint("BOTTOMRIGHT", frame:GetParent():GetName(), "BOTTOMRIGHT", -40, CONTAINER_OFFSET); elseif ( freeScreenHeight < frame:GetHeight() ) then column = column + 1; freeScreenHeight = UIParent:GetHeight() - CONTAINER_OFFSET; frame:SetPoint("BOTTOMRIGHT", frame:GetParent():GetName(), "BOTTOMRIGHT", -(column * CONTAINER_WIDTH + 40), CONTAINER_OFFSET); else frame:SetPoint("BOTTOMRIGHT", ContainerFrame1.bags[index - 1], "TOPRIGHT", 0, CONTAINER_SPACING); end freeScreenHeight = freeScreenHeight - frame:GetHeight() - VISIBLE_CONTAINER_SPACING; index = index + 1; end return column; end function CT_Bag_Update() if ( CT_HotbarTop:IsVisible() ) then CONTAINER_OFFSET = 110; elseif ( CT_HotbarRight:IsVisible() ) then CONTAINER_OFFSET = 90; else CONTAINER_OFFSET = 70; end if ( CT_SidebarFrame2:IsVisible() ) then CT_updateContainerFrameAnchors(); else BLIZZARD_Original_updateContainerFrameAnchors(); end end CT_oldFCF_UpdateDockPosition = FCF_UpdateDockPosition; CT_newFCF_UpdateDockPosition = function() end; function CT_GlobalFrame_OnUpdate(elapsed) this.update = this.update + elapsed; if ( SIMPLE_CHAT == "1" and this.update > 0.05 ) then FCF_UpdateDockPosition = CT_newFCF_UpdateDockPosition; this.update = this.update - 0.05; ChatFrame2:SetPoint("BOTTOMRIGHT", "UIParent", "BOTTOMRIGHT", -32, 95); if ( ShapeshiftBarFrame:IsVisible() ) then ChatFrame1:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", 32, 138); elseif ( PetActionBarFrame:IsVisible() ) then ChatFrame1:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", 32, 130); else ChatFrame1:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", 32, 95); end else FCF_UpdateDockPosition = CT_oldFCF_UpdateDockPosition; end this.updateCDC = this.updateCDC + elapsed; if ( this.updateCDC >= 0.25 ) then this.updateCDC = 0; local currTime = GetTime(); for k, v in CT_BarMod_Cooldowns do CT_BarMod_Cooldowns[k][3] = floor((v[1]+v[2])-currTime); if ( CT_BarMod_Cooldowns[k][3] <= 0 ) then CT_BarMod_Cooldowns[k] = nil; end end CT_BarMod_UpdateCooldownCount(); end end sidebarfunction = function() if ( CT_SidebarFrame:IsVisible() ) then CT_SidebarFrame:Hide(); CT_SetModStatus(BARMOD_MODNAME_LEFTSB, "off"); CT_Print(BARMOD_OFF_LEFTSBAR, 1.0, 1.0, 0.0); else if ( CT_MF_ShowFrames ) then CT_SidebarLeft_Drag:Show(); end CT_SidebarFrame:Show(); CT_SetModStatus(BARMOD_MODNAME_LEFTSB, "on"); CT_Print(BARMOD_ON_LEFTSBAR, 1.0, 1.0, 0.0); end end sidebarRfunction = function() if ( CT_SidebarFrame2:IsVisible() ) then CT_SidebarFrame2:Hide(); CT_SetModStatus(BARMOD_MODNAME_RIGHTSB, "off"); CT_Print(BARMOD_OFF_RIGHTSBAR, 1.0, 1.0, 0.0); else if ( CT_MF_ShowFrames ) then CT_SidebarRight_Drag:Show(); end CT_SidebarFrame2:Show(); CT_SetModStatus(BARMOD_MODNAME_RIGHTSB, "on"); CT_Print(BARMOD_ON_RIGHTSBAR, 1.0, 1.0, 0.0); end -- dbrong CT_Bag_Update(); end lsidebarbuttonsfunction = function(modID, text) local val = CT_Mods[modID]["modValue"]; if ( val == "6" or val == 6 ) then val = "9"; elseif ( val == "9" or val == 9 ) then val = "12"; elseif ( val == "12" or val == 12 ) then val = "6"; end if ( text ) then text:SetText(val); end CT_Mods[modID]["modValue"] = val; LCT_SidebarBtns_Update(modID); end hotbarleftfunction = function (modId) local val = CT_Mods[modId]["modStatus"]; if ( val == "off" ) then CT_HotbarLeft:Hide(); CT_LeftHotbar_OnHide(); CT_Print(BARMOD_OFF_LEFTHBAR, 1.0, 1.0, 0.0); else if ( CT_MF_ShowFrames ) then CT_HotbarLeft_Drag:Show(); end local x = CT_PetBar_Drag:GetLeft()-(UIParent:GetRight()/2); local y = CT_PetBar_Drag:GetBottom()+40; CT_PetBar_Drag:ClearAllPoints(); CT_PetBar_Drag:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOM", x, y); x = CT_BABar_Drag:GetLeft()-(UIParent:GetRight()/2); y = CT_BABar_Drag:GetBottom()+40; CT_BABar_Drag:ClearAllPoints(); CT_BABar_Drag:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOM", x, y); CT_HotbarLeft:Show(); CT_Print(BARMOD_ON_LEFTHBAR, 1.0, 1.0, 0.0); end end hotbarrightfunction = function (modId) local val = CT_Mods[modId]["modStatus"]; if ( val == "off" ) then CT_HotbarRight:Hide(); CT_Print(BARMOD_OFF_RIGHTHBAR, 1.0, 1.0, 0.0); else if ( CT_MF_ShowFrames ) then CT_HotbarRight_Drag:Show(); end CT_HotbarRight:Show(); CT_Print(BARMOD_ON_RIGHTHBAR, 1.0, 1.0, 0.0); end CT_Bag_Update(); end hotbartopfunction = function () if ( CT_HotbarTop:IsVisible() ) then CT_HotbarTop:Hide(); CT_SetModStatus(BARMOD_MODNAME_TOPHB, "off"); CT_Print(BARMOD_OFF_TOPBAR, 1.0, 1.0, 0.0); else if ( CT_MF_ShowFrames ) then CT_HotbarTop_Drag:Show(); end CT_HotbarTop:Show(); CT_SetModStatus(BARMOD_MODNAME_TOPHB, "on"); CT_Print(BARMOD_ON_TOPBAR, 1.0, 1.0, 0.0); end CT_Bag_Update(); end function gridinitfunction(modId) local val = CT_Mods[modId]["modStatus"]; local i; if ( val == "off" ) then CT_ShowGrid = 1; else CT_ShowGrid = 0; for i=1, 12, 1 do CT_ActionButton_HideGrid(getglobal("ActionButton" .. i)); CT_ActionButton_HideGrid(getglobal("BonusActionButton" .. i)); CT_ActionButton_HideGrid(getglobal("MultiBarLeftButton" .. i)); CT_ActionButton_HideGrid(getglobal("MultiBarRightButton" .. i)); CT_ActionButton_HideGrid(getglobal("MultiBarBottomLeftButton" .. i)); CT_ActionButton_HideGrid(getglobal("MultiBarBottomRightButton" .. i)); CT_ActionButton_HideGrid(getglobal("CT_ActionButton" .. i)); CT_ActionButton_HideGrid(getglobal("CT2_ActionButton" .. i)); CT_ActionButton_HideGrid(getglobal("CT3_ActionButton" .. i)); CT_ActionButton_HideGrid(getglobal("CT4_ActionButton" .. i)); CT_ActionButton_HideGrid(getglobal("CT5_ActionButton" .. i)); end end end function movefunction(modId) local val = CT_Mods[modId]["modStatus"]; if ( val == "off" ) then CT_Print(BARMOD_OFF_MOVEPARTYFRAME); CT_CheckPartyMove(); elseif ( val == "on" ) then CT_Print(BARMOD_ON_MOVEPARTYFRAME); CT_CheckPartyMove(); end end function CT_CheckPartyMove() if ( CT_MovableParty_IsInstalled ) then for i = 1, 4, 1 do CT_LinkFrameDrag(getglobal("PartyMemberFrame" .. i), getglobal("CT_MovableParty" .. i .. "_Drag"), "TOPLEFT", "TOPLEFT", -40, -7); end return; elseif ( CT_GetModStatus(BARMOD_MODNAME_MOVEPARTYFRAME) == "on" ) then local offset = -128; if ( UnitExists("pet") ) then offset = -160; end PartyMemberFrame1:ClearAllPoints(); PartyMemberFrame1:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 50, offset); else local offset = -128; if ( UnitExists("pet") ) then offset = -160; end PartyMemberFrame1:ClearAllPoints(); PartyMemberFrame1:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 10, offset); end for i = 2, 4, 1 do getglobal("PartyMemberFrame" .. i):ClearAllPoints(); getglobal("PartyMemberFrame" .. i):SetPoint("TOPLEFT", "PartyMemberFrame" .. (i-1) .. "PetFrame", "BOTTOMLEFT", -23, -10); end end CT_oldPickupAction = PickupAction; CT_PickupAction = function(x) if ( not CT_HotbarButtons_Locked or IsShiftKeyDown() ) then if ( this ) then CT_BarMod_Cooldowns[this:GetName()] = nil; CT_BarMod_UpdateCooldownCount(); end CT_oldPickupAction(x); end end PickupAction = CT_PickupAction; function cooldownfunction(modId) local val = CT_Mods[modId]["modStatus"]; if ( val == "off" ) then CT_Print(BARMOD_OFF_COOLDOWNCOUNT, 1, 1, 0); CT_CDCount = 0; CT_BarMod_UpdateCooldownCount(); elseif ( val == "on" ) then CT_Print(BARMOD_ON_COOLDOWNCOUNT, 1, 1, 0); CT_CDCount = 1; CT_BarMod_UpdateCooldownCount(); end end function cooldowninitfunction(modId) local val = CT_Mods[modId]["modStatus"]; if ( val == "off" ) then CT_CDCount = 0; CT_BarMod_UpdateCooldownCount(); elseif ( val == "on" ) then CT_CDCount = 1; CT_BarMod_UpdateCooldownCount(); end end --[[ CT_RegisterMod(BARMOD_MODNAME_LEFTSB, BARMOD_ONOFFTOGGLE, 2, "Interface\\Icons\\Spell_Holy_MindVision", BARMOD_TOOLTIP_LEFTSB, "off", nil, sidebarfunction, CT_LSidebar_Update); CT_RegisterMod(BARMOD_MODNAME_RIGHTSB, BARMOD_ONOFFTOGGLE, 2, "Interface\\Icons\\Spell_Holy_MindVision", BARMOD_TOOLTIP_RIGHTSB, "off", nil, sidebarRfunction, CT_RSidebar_Update); CT_RegisterMod(BARMOD_MODNAME_LEFTHB, BARMOD_ONOFFTOGGLE, 2, "Interface\\Icons\\Spell_Holy_MindVision", BARMOD_TOOLTIP_LEFTHB, "off", nil, hotbarleftfunction, CT_LHotbar_Update); CT_RegisterMod(BARMOD_MODNAME_RIGHTHB, BARMOD_ONOFFTOGGLE, 2, "Interface\\Icons\\Spell_Holy_MindVision", BARMOD_TOOLTIP_RIGHTHB, "off", nil, hotbarrightfunction, CT_RHotbar_Update); CT_RegisterMod(BARMOD_MODNAME_TOPHB, BARMOD_ONOFFTOGGLE, 2, "Interface\\Icons\\Spell_Holy_MindVision", BARMOD_TOOLTIP_TOPHB, "off", nil, hotbartopfunction, CT_THotbar_Update); CT_RegisterMod(BARMOD_MODNAME_PAGELOCK, BARMOD_SUB_PAGELOCK, 2, "Interface\\Icons\\INV_Misc_Key_03", BARMOD_TOOLTIP_PAGELOCK, "off", nil, HotbarsLockFunction, HotbarsLockInitFunction); CT_RegisterMod(BARMOD_MODNAME_BUTTONLOCK, BARMOD_SUB_BUTTONLOCK, 2, "Interface\\Icons\\INV_Misc_Key_13", BARMOD_TOOLTIP_BUTTONLOCK, "off", nil, HotbarButtonsLockFunction, CT_ButtonLock_Update); CT_RegisterMod(BARMOD_MODNAME_HIDEGRID, BARMOD_SUB_HIDEGRID, 2, "Interface\\Icons\\Ability_Vanish", BARMOD_TOOLTIP_HIDEGRID, "off", nil, gridfunction, gridinitfunction); ]] CT_RegisterMod(BARMOD_MODNAME_MOVEPARTYFRAME, BARMOD_ONOFFTOGGLE, 2, "Interface\\Icons\\Spell_Holy_MindSooth", BARMOD_TOOLTIP_MOVEPARTYFRAME, "off", nil, movefunction, CT_CheckPartyMove); CT_RegisterMod(BARMOD_MODNAME_COOLDOWNCOUNT, BARMOD_SUB_COOLDOWNCOUNT, 2, "Interface\\Icons\\INV_Misc_PocketWatch_01", BARMOD_TOOLTIP_COOLDOWNCOUNT, "off", nil, cooldownfunction, cooldowninitfunction); CT_PetBar_DragFrame_Orientation = "H"; CT_BABar_DragFrame_Orientation = "H"; CT_Show_PetBarDrag = 0; function CT_Bar_DragFrame_OnMD(force) local var, type; if ( this == CT_PetBar_Drag ) then var = CT_PetBar_DragFrame_Orientation; type = "PetAction"; else var = CT_BABar_DragFrame_Orientation; type = "Shapeshift"; end if ( arg1 == "LeftButton" ) then this:StartMoving(); else if ( var == "H" or force ) then var = "V"; else var = "H"; end local i; for i = 2, 10, 1 do getglobal(type .. "Button" .. i):ClearAllPoints(); if ( var == "H" ) then getglobal(type .. "Button" .. i):SetPoint("LEFT", type .. "Button" .. (i-1), "RIGHT", 8, 0); else getglobal(type .. "Button" .. i):SetPoint("TOP", type .. "Button" .. (i-1), "BOTTOM", 0, -8); end end end if ( this == CT_PetBar_Drag ) then CT_PetBar_DragFrame_Orientation = var; else CT_BABar_DragFrame_Orientation = var; end if ( CT_BarModOptions_RemoveSpaceSpecial ) then CT_BarModOptions_RemoveSpaceSpecial(CT_BarModOptions_Options[UnitName("player")]["removeSpecial"]); end if ( CT_BottomBar_HideTextures ) then CT_BottomBar_HideTextures(CT_BottomBar_HiddenFrames[UnitName("player")]["ClassBackground"]); end end function CT_BarMod_CheckRotations() for key, val in CT_SidebarAxis do if ( val == 1 ) then val = 2; else val = 1; end CT_Sidebar_ChangeAxis(tonumber(key), val); end end local oorfunc = function(modId, text) local val = CT_Mods[modId]["modValue"]; if ( val == "1" ) then val = "2" CT_FadeColor = { ["r"] = 0.5, ["g"] = 0.5, ["b"] = 0.5 }; CT_Print(BARMOD_ON_OOR1, 1, 1, 0); elseif ( val == "2" ) then val = "3"; CT_FadeColor = { ["r"] = 0.8, ["g"] = 0.4, ["b"] = 0.4 }; CT_Print(BARMOD_ON_OOR2, 1, 1, 0); elseif ( val == "3" ) then val = "1"; CT_FadeColor = { ["r"] = 1, ["g"] = 1, ["b"] = 1 }; CT_Print(BARMOD_OFF_OOR, 1, 1, 0); end if ( text ) then text:SetText(val); end CT_Mods[modId]["modValue"] = val; CT_Mods[modId]["modStatus"] = "switch"; end local oorinitfunc = function(modId) local val = CT_Mods[modId]["modValue"]; if ( val == "2" ) then CT_FadeColor = { ["r"] = 0.5, ["g"] = 0.5, ["b"] = 0.5 }; elseif ( val == "3" ) then CT_FadeColor = { ["r"] = 0.8, ["g"] = 0.4, ["b"] = 0.4 }; elseif ( val == "1" ) then CT_FadeColor = { ["r"] = 1, ["g"] = 1, ["b"] = 1 }; end end local selffunc = function(modId) local val = CT_Mods[modId]["modStatus"]; if ( val == "on" ) then CT_SelfCast = 1; CT_Print(BARMOD_ON_SELFCAST, 1, 1, 0); else CT_Print(BARMOD_OFF_SELFCAST, 1, 1, 0); CT_SelfCast = 0; end end local selfinitfunc = function(modId) local val = CT_Mods[modId]["modStatus"]; if ( val == "on" ) then CT_SelfCast = 1; else CT_SelfCast = 0; end end local hotkeyfunc = function(modId, text) local val = CT_Mods[modId]["modValue"]; if ( val == "3" ) then val = "1"; CT_ShowHotkeys = nil; CT_Print(BARMOD_ON_HOTKEY1, 1, 1, 0); elseif ( val == "1" ) then val = "2"; CT_ShowHotkeys = 1; CT_Print(BARMOD_ON_HOTKEY2, 1, 1, 0); elseif ( val == "2" ) then val = "3"; CT_ShowHotkeys = -1; CT_Print(BARMOD_OFF_HOTKEY, 1, 1, 0); end CT_BarMod_UpdateAllHotkeys(); if ( text ) then text:SetText(val); end CT_Mods[modId]["modValue"] = val; end local hotkeyinitfunc = function(modId) local val = CT_Mods[modId]["modValue"]; if ( val == "1" ) then CT_ShowHotkeys = nil; elseif ( val == "2" ) then CT_ShowHotkeys = 1; elseif ( val == "3" ) then CT_ShowHotkeys = -1; end CT_BarMod_UpdateAllHotkeys(); CT_Mods[modId]["modStatus"] = "switch"; end function cskeyfunc(modId, text) local val = CT_Mods[modId]["modValue"]; if ( val == "Ctrl" ) then val = "Alt"; CT_SelfCastModKey = IsAltKeyDown; CT_Print(BARMOD_ON_SCKEY2, 1, 1, 0); elseif ( val == "Alt" ) then val = "Shift"; CT_SelfCastModKey = IsShiftKeyDown; CT_Print(BARMOD_ON_SCKEY3, 1, 1, 0); elseif ( val == "Shift" ) then val = "None"; CT_SelfCastModKey = nil; CT_Print(BARMOD_ON_SCKEY4, 1, 1, 0); elseif ( val == "None" ) then val = "Ctrl"; CT_SelfCastModKey = IsControlKeyDown; CT_Print(BARMOD_ON_SCKEY1, 1, 1, 0); end CT_Mods[modId]["modValue"] = val; if ( text ) then text:SetText(val); end end function cskeyinitfunc(modId, text) local val = CT_Mods[modId]["modValue"]; if ( val == "Alt" ) then CT_SelfCastModKey = IsAltKeyDown; elseif ( val == "Shift" ) then CT_SelfCastModKey = IsShiftKeyDown; elseif ( val == "Ctrl" ) then CT_SelfCastModKey = IsControlKeyDown; end end CT_RegisterMod(BARMOD_MODNAME_OOR, BARMOD_SUB_OOR, 2, "Interface\\Icons\\Ability_TownWatch", BARMOD_TOOLTIP_OOR, "switch", "1", oorfunc, oorinitfunc); CT_RegisterMod(BARMOD_MODNAME_HOTKEYS, BARMOD_SUB_HOTKEYS, 2, "Interface\\Icons\\INV_Misc_Key_09", BARMOD_TOOLTIP_HOTKEYS, "switch", "1", hotkeyfunc, hotkeyinitfunc); --CT_RegisterMod(BARMOD_MODNAME_TTPOS, BARMOD_SUB_TTPOS, 5, "Interface\\Icons\\Ability_Mount_WhiteTiger", BARMOD_TOOLTIP_TTPOS, "off", nil, ttfunc, ttinitfunc); CT_RegisterMod(BARMOD_MODNAME_SCKEY, BARMOD_SUB_SCKEY, 4, "Interface\\Icons\\Spell_Holy_GreaterHeal", BARMOD_TOOLTIP_SCKEY, "switch", "None", cskeyfunc, cskeyinitfunc); CT_RegisterMod(BARMOD_MODNAME_SELFCAST, BARMOD_SUB_SELFCAST, 4, "Interface\\Icons\\Spell_Holy_GreaterHeal", BARMOD_TOOLTIP_SELFCAST, "off", nil, selffunc, selfinitfunc); function CT_ActionButton_OnClick() if ( ( strsub( this:GetName(), 1, 3 ) ~= "CT3" and strsub( this:GetName(), 1, 3 ) ~= "CT4" ) or CT_Sidebar_ButtonInUse(this) ) then if ( IsShiftKeyDown() ) then PickupAction(CT_ActionButton_GetPagedID(this)); else if ( MacroFrame_SaveMacro ) then MacroFrame_SaveMacro(); end if ( CT_NextSelfCast ) then UseAction(CT_ActionButton_GetPagedID(this), 0, 1); else UseAction(CT_ActionButton_GetPagedID(this), 1, nil); if ( SpellIsTargeting() and CT_SelfCast == 1 and not SpellCanTargetUnit("target") and SpellCanTargetUnit("player") ) then SpellTargetUnit("player"); end end end CT_ActionButton_Update(); CT_ActionButton_UpdateState(); end end CT_oldUseAction = UseAction; function CT_newUseAction(id, cursor, onSelf) if ( ( CT_SelfCastModifier and CT_SelfCast == 1 ) or ( CT_SelfCastModKey and CT_SelfCastModKey() ) ) then onSelf = 1; end CT_oldUseAction(id, cursor, onSelf); if ( SpellIsTargeting() and CT_SelfCast == 1 and not SpellCanTargetUnit("target") and SpellCanTargetUnit("player") ) then SpellTargetUnit("player"); end end UseAction = CT_newUseAction; CT_BarMod_oldUseContainerItem = UseContainerItem; function CT_BarMod_newUseContainerItem(bag, item) CT_BarMod_oldUseContainerItem(bag, item); if ( ( CT_SelfCast == 1 or ( CT_SelfCastModKey and CT_SelfCastModKey() ) ) and SpellIsTargeting() and not SpellCanTargetUnit("target") and SpellCanTargetUnit("player") ) then SpellTargetUnit("player"); end end UseContainerItem = CT_BarMod_newUseContainerItem; function CT_BarMod_UpdateAllHotkeys() local key = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=" }; local i; for i = 1, 12, 1 do CT_ActionButton_UpdateHotkeys(getglobal("CT_ActionButton" .. i)); CT_ActionButton_UpdateHotkeys(getglobal("CT2_ActionButton" .. i)); CT_ActionButton_UpdateHotkeys(getglobal("CT3_ActionButton" .. i)); CT_ActionButton_UpdateHotkeys(getglobal("CT4_ActionButton" .. i)); CT_ActionButton_UpdateHotkeys(getglobal("CT5_ActionButton" .. i)); if ( CT_ShowHotkeys and CT_ShowHotkeys == -1 ) then getglobal("ActionButton" .. i .. "HotKey"):Hide(); getglobal("BonusActionButton" .. i .. "HotKey"):Hide(); getglobal("MultiBarBottomLeftButton" .. i .. "HotKey"):Hide(); getglobal("MultiBarBottomRightButton" .. i .. "HotKey"):Hide(); getglobal("MultiBarLeftButton" .. i .. "HotKey"):Hide(); getglobal("MultiBarRightButton" .. i .. "HotKey"):Hide(); else getglobal("ActionButton" .. i .. "HotKey"):Show(); getglobal("BonusActionButton" .. i .. "HotKey"):Show(); getglobal("MultiBarBottomLeftButton" .. i .. "HotKey"):Show(); getglobal("MultiBarBottomRightButton" .. i .. "HotKey"):Show(); getglobal("MultiBarLeftButton" .. i .. "HotKey"):Show(); getglobal("MultiBarRightButton" .. i .. "HotKey"):Show(); if ( not CT_ShowHotkeys ) then getglobal("ActionButton" .. i .. "HotKey"):SetText(key[i]); getglobal("BonusActionButton" .. i .. "HotKey"):SetText(key[i]); getglobal("MultiBarBottomLeftButton" .. i .. "HotKey"):Show(); getglobal("MultiBarBottomRightButton" .. i .. "HotKey"):Show(); getglobal("MultiBarLeftButton" .. i .. "HotKey"):Show(); getglobal("MultiBarRightButton" .. i .. "HotKey"):Show(); else getglobal("ActionButton" .. i .. "HotKey"):SetText(GetBindingText(GetBindingKey("ACTIONBUTTON" .. i), "KEY_")); getglobal("BonusActionButton" .. i .. "HotKey"):SetText(GetBindingText(GetBindingKey("ACTIONBUTTON" .. i), "KEY_")); getglobal("MultiBarBottomLeftButton" .. i .. "HotKey"):SetText(GetBindingText(GetBindingKey("MULTIACTIONBAR1BUTTON" .. i), "KEY_")); getglobal("MultiBarBottomRightButton" .. i .. "HotKey"):SetText(GetBindingText(GetBindingKey("MULTIACTIONBAR2BUTTON" .. i), "KEY_")); getglobal("MultiBarLeftButton" .. i .. "HotKey"):SetText(GetBindingText(GetBindingKey("MULTIACTIONBAR4BUTTON" .. i), "KEY_")); getglobal("MultiBarRightButton" .. i .. "HotKey"):SetText(GetBindingText(GetBindingKey("MULTIACTIONBAR3BUTTON" .. i), "KEY_")); end end end end CT_oldActionButton_UpdateHotkeys = ActionButton_UpdateHotkeys; function CT_newActionButton_UpdateHotkeys() local key = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=" }; if ( not CT_ShowHotkeys ) then getglobal(this:GetName() .. "HotKey"):SetText(key[this:GetID()]); getglobal(this:GetName() .. "HotKey"):Show(); else CT_ActionButton_UpdateHotkeys(); end end ActionButton_UpdateHotkeys = CT_newActionButton_UpdateHotkeys; CT_oldPickupPetAction = PickupPetAction; function CT_newPickupPetAction(arg) if ( not CT_HotbarButtons_Locked or IsShiftKeyDown() ) then CT_oldPickupPetAction(arg); end end PickupPetAction = CT_newPickupPetAction; function CT_HotbarToggle(num) local arr = { "CT_HotbarLeft", "CT_HotbarRight", "CT_SidebarFrame", "CT_SidebarFrame2", "CT_HotbarTop" }; if ( getglobal(arr[num]):IsVisible() ) then getglobal(arr[num]):Hide(); else getglobal(arr[num]):Show(); end end CT_oldSPAB = ShowPetActionBar; function CT_newSPAB() CT_oldSPAB(); if ( PetActionBarFrame:IsVisible() and CT_MF_ShowFrames ) then CT_PetBar_Drag:Show(); else CT_PetBar_Drag:Hide(); end end ShowPetActionBar = CT_newSPAB; function CT_LeftHotbar_OnHide() local x = CT_BABar_Drag:GetLeft()-(UIParent:GetRight()/2); local y = CT_BABar_Drag:GetBottom()-40; CT_BABar_Drag:ClearAllPoints(); CT_BABar_Drag:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOM", x, y); x = CT_PetBar_Drag:GetLeft()-(UIParent:GetRight()/2); y = CT_PetBar_Drag:GetBottom()-40; CT_PetBar_Drag:ClearAllPoints(); CT_PetBar_Drag:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOM", x, y); end -- Functions to display grid function CT_updateActionButtons() for i = 1, 12, 1 do local ab = getglobal("ActionButton" .. i); if ( CT_BottomBar_Enabled and CT_BottomBar_Enabled[UnitName("player")] and CT_BottomBar_HiddenFrames[UnitName("player")]["BarHotbar"] ) then ab.showgrid = 0; ab:Hide(); elseif ( not HasAction(ActionButton_GetPagedID(ab)) ) then if ( CT_ShowGrid ) then ab.showgrid = 1; ab:Show(); else ab.showgrid = 0; ab:Hide(); end elseif ( GetBonusBarOffset() > 0 ) then ab.showgrid = 0; ab:Hide(); else ab.showgrid = 1; ab:Show(); end --[[local ab = getglobal("ActionButton" .. i); if ( not HasAction(ActionButton_GetPagedID(ab)) or CT_ShowGrid ) then if ( ( not CT_ShowGrid and not HasAction(CT_ActionButton_GetPagedID(ab)) ) or GetBonusBarOffset() > 0 or ( not CT_BottomBar_Enabled or not CT_BottomBar_Enabled[UnitName("player")] or ( not CT_BottomBar_RotatedFrames[UnitName("player")]["Bars"] and not CT_BottomBar_HiddenFrames[UnitName("player")]["BarHotbarBackgroundLeft"] ) ) ) then ab.showgrid = 0; ab:Hide(); else ab.showgrid = 1; ab:Show(); end end ab = getglobal("BonusActionButton" .. i); if ( not HasAction(ActionButton_GetPagedID(ab)) or CT_ShowGrid ) then if ( GetBonusBarOffset() == 0 or ( not CT_ShowGrid and not HasAction(CT_ActionButton_GetPagedID(ab)) ) or ( not CT_BottomBar_Enabled or not CT_BottomBar_Enabled[UnitName("player")] or ( not CT_BottomBar_RotatedFrames[UnitName("player")]["Bars"] and not CT_BottomBar_HiddenFrames[UnitName("player")]["BarHotbarBackgroundLeft"] ) ) ) then ab.showgrid = 0; ab:Hide(); else ab.showgrid = 1; ab:Show(); end end]] local ab = getglobal("BonusActionButton" .. i); if ( CT_BottomBar_Enabled and CT_BottomBar_Enabled[UnitName("player")] and CT_BottomBar_HiddenFrames[UnitName("player")]["BarHotbar"] ) then ab.showgrid = 0; ab:Hide(); elseif ( not HasAction(ActionButton_GetPagedID(ab)) ) then if ( CT_ShowGrid ) then ab.showgrid = 1; ab:Show(); else ab.showgrid = 0; ab:Hide(); end elseif ( GetBonusBarOffset() == 0 ) then ab.showgrid = 0; ab:Hide(); else ab.showgrid = 1; ab:Show(); end ab = getglobal("MultiBarBottomLeftButton" .. i); if ( not HasAction(ActionButton_GetPagedID(ab)) and ab.showgrid == 0 ) then if ( not CT_ShowGrid ) then ab.showgrid = 0; ab:Hide(); else ab.showgrid = 1; ab:Show(); end end ab = getglobal("MultiBarBottomRightButton" .. i); if ( not HasAction(ActionButton_GetPagedID(ab)) and ab.showgrid == 0 ) then if ( not CT_ShowGrid ) then ab.showgrid = 0; ab:Hide(); else ab.showgrid = 1; ab:Show(); end end ab = getglobal("MultiBarLeftButton" .. i); if ( not HasAction(ActionButton_GetPagedID(ab)) and ab.showgrid == 0 ) then if ( not CT_ShowGrid ) then ab.showgrid = 0; ab:Hide(); else ab.showgrid = 1; ab:Show(); end end ab = getglobal("MultiBarRightButton" .. i); if ( not HasAction(ActionButton_GetPagedID(ab)) and ab.showgrid == 0 ) then if ( not CT_ShowGrid ) then ab.showgrid = 0; ab:Hide(); else ab.showgrid = 1; ab:Show(); end end end end CT_oldActionButton_Update = ActionButton_Update; function CT_newActionButton_Update() CT_oldActionButton_Update(); if ( not HasAction(CT_ActionButton_GetPagedID(this)) and this.showgrid == 0 ) then if ( not CT_ShowGrid or ( ( not CT_BottomBar_Enabled or not CT_BottomBar_Enabled[UnitName("player")] or ( not CT_BottomBar_RotatedFrames[UnitName("player")]["Bars"] and not CT_BottomBar_HiddenFrames[UnitName("player")]["BarHotbarBackgroundLeft"] ) ) and ( strsub(this:GetName(), 1, 12) == "ActionButton" or strsub(this:GetName(), 1, 17) == "BonusActionButton" ) ) ) then this.showgrid = 0; this:Hide(); return; else this.showgrid = 1; this:Show(); return; end end if ( ( strsub(this:GetName(), 1, 12) == "ActionButton" and GetBonusBarOffset() > 0 ) or ( strsub(this:GetName(), 1, 12) == "MultiBarLeft" and not SHOW_MULTI_ACTIONBAR_4 ) or ( strsub(this:GetName(), 1, 13) == "MultiBarRight" and not SHOW_MULTI_ACTIONBAR_3 ) or ( strsub(this:GetName(), 1, 18) == "MultiBarBottomLeft" and not SHOW_MULTI_ACTIONBAR_1 ) or ( strsub(this:GetName(), 1, 19) == "MultiBarBottomRight" and not SHOW_MULTI_ACTIONBAR_2 ) or ( strsub(this:GetName(), 1, 17) == "BonusActionButton" and GetBonusBarOffset() == 0 ) ) then this.showgrid = 0; this:Hide(); elseif ( CT_ShowGrid ) then this.showgrid = 1; this:Show(); end end ActionButton_Update = CT_newActionButton_Update; function CT_newActionButton_UpdateUsable() local icon = getglobal(this:GetName().."Icon"); if ( not icon ) then return; end local normalTexture = getglobal(this:GetName().."NormalTexture"); local isUsable, notEnoughMana = IsUsableAction(ActionButton_GetPagedID(this)); if ( isUsable ) then if ( this.inRange and this.inRange == 0 ) then icon:SetVertexColor(CT_FadeColor.r, CT_FadeColor.g, CT_FadeColor.b); if ( not CT_ShowGrid ) then normalTexture:SetVertexColor(CT_FadeColor.r, CT_FadeColor.g, CT_FadeColor.b); end else icon:SetVertexColor(1.0, 1.0, 1.0); if ( not CT_ShowGrid ) then normalTexture:SetVertexColor(1.0, 1.0, 1.0); end end elseif ( notEnoughMana ) then icon:SetVertexColor(0.5, 0.5, 1.0); if ( not CT_ShowGrid ) then normalTexture:SetVertexColor(0.5, 0.5, 1.0); end else icon:SetVertexColor(0.4, 0.4, 0.4); if ( not CT_ShowGrid ) then normalTexture:SetVertexColor(0.4, 0.4, 0.4); end end end ActionButton_UpdateUsable = CT_newActionButton_UpdateUsable; ActionButton_HideGrid = CT_ActionButton_HideGrid; function CT_newActionButton_ShowGrid(button) if ( not button ) then button = this; end button.showgrid = button.showgrid+1; getglobal(button:GetName().."NormalTexture"):SetVertexColor(1.0, 1.0, 1.0, 1.0); if ( ( strsub(button:GetName(), 1, 12) == "ActionButton" and ( ( CT_BottomBar_Enabled and CT_BottomBar_Enabled[UnitName("player")] and CT_BottomBar_HiddenFrames[UnitName("player")] and CT_BottomBar_HiddenFrames[UnitName("player")]["BarHotbar"] ) or GetBonusBarOffset() > 0 ) ) or ( strsub(button:GetName(), 1, 12) == "MultiBarLeft" and not SHOW_MULTI_ACTIONBAR_4 ) or ( strsub(button:GetName(), 1, 13) == "MultiBarRight" and not SHOW_MULTI_ACTIONBAR_3 ) or ( strsub(button:GetName(), 1, 18) == "MultiBarBottomLeft" and not SHOW_MULTI_ACTIONBAR_1 ) or ( strsub(button:GetName(), 1, 19) == "MultiBarBottomRight" and not SHOW_MULTI_ACTIONBAR_2 ) ) then button:Hide(); elseif ( strsub(button:GetName(), 1, 17) == "BonusActionButton" and ( ( CT_BottomBar_Enabled and CT_BottomBar_Enabled[UnitName("player")] and CT_BottomBar_HiddenFrames[UnitName("player")] and CT_BottomBar_HiddenFrames[UnitName("player")]["BarHotbar"] ) or GetBonusBarOffset() == 0 ) ) then button:Hide(); else button:Show(); end end ActionButton_ShowGrid = CT_newActionButton_ShowGrid; CT_oldActionButton_OnEvent = ActionButton_OnEvent; function CT_newActionButton_OnEvent(event) if ( event == "UPDATE_BONUS_ACTIONBAR" ) then ActionButton_Update(); else CT_oldActionButton_OnEvent(event); end end ActionButton_OnEvent = CT_newActionButton_OnEvent; MultiActionBar_UpdateGrid = function(barName) for i=1, NUM_MULTIBAR_BUTTONS do if ( CT_ShowGrid ) then ActionButton_ShowGrid(getglobal(barName.."Button"..i)); else ActionButton_HideGrid(getglobal(barName.."Button"..i)); end end end function CT_BarMod_GetSpellName(id) if ( not CTTooltip ) then return; end CTTooltipTextLeft1:SetText(""); CTTooltip:SetAction(id); local name = CTTooltipTextLeft1:GetText(); if ( name and name ~= "" ) then return name; end end CT_BarMod_Cooldowns = { }; CT_BarMod_oldCooldownFrame_SetTimer = CooldownFrame_SetTimer; function CT_BarMod_newCooldownFrame_SetTimer(this, start, duration, enable) CT_BarMod_oldCooldownFrame_SetTimer(this, start, duration, enable); if ( duration >= 2 and start > 0 and enable > 0 ) then CT_BarMod_Cooldowns[this:GetParent():GetName()] = { start, duration, duration, CT_BarMod_GetSpellName(CT_ActionButton_GetPagedID(this:GetParent())) }; else CT_BarMod_Cooldowns[this:GetParent():GetName()] = nil; end end CooldownFrame_SetTimer = CT_BarMod_newCooldownFrame_SetTimer; function CT_BarMod_UpdateCooldownCount(btn) if ( not btn ) then for b = 1, 7, 1 do local prefix = "CT" .. b .. "_"; if ( b == 1 ) then prefix = "CT_"; elseif ( b == 6 ) then prefix = ""; elseif ( b == 7 ) then prefix = "Bonus"; end for i = 1, 12, 1 do if ( CT_CDCount == 1 ) then local name = prefix .. "ActionButton" .. i; local btn = getglobal(name); local id = CT_ActionButton_GetPagedID(btn); local count = getglobal(name .. "CDCount"); if ( CT_BarMod_Cooldowns[name] and CT_BarMod_Cooldowns[name][3] > 0 ) then local form = CT_BarMod_FormatCooldown(CT_BarMod_Cooldowns[name][3]); count:Show(); count:SetText(form); else count:Hide(); end else getglobal(prefix .. "ActionButton" .. i .. "CDCount"):Hide(); end end end else if ( CT_CDCount == 1 ) then local name = btn:GetName(); local id = CT_ActionButton_GetPagedID(btn); local count = getglobal(btn:GetName() .. "CDCount"); if ( CT_BarMod_Cooldowns[name] and CT_BarMod_Cooldowns[name][3] > 0 ) then local form = CT_BarMod_FormatCooldown(CT_BarMod_Cooldowns[name][3]); count:Show(); count:SetText(form); else count:Hide(); end else getglobal(btn:GetName() .. "CDCount"):Hide(); end end end function CT_BarMod_FormatCooldown(cd) if ( cd >= 3600 ) then return floor(cd/3600) .. "h"; elseif ( cd > 60 ) then local m = mod(cd, 60); if ( m < 10 ) then m = "0" .. m; end return floor(cd/60) .. ":" .. m; else return cd; end end function CT_BarMod_FindRanges() CT_BarMod_MaxRanges = { }; CT_BarMod_MinRanges = { }; for i = 1, 120, 1 do CTTooltipTextLeft1:SetText(""); CTTooltip:SetAction(i); if ( CTTooltipTextLeft1:GetText() and CTTooltipTextLeft1:GetText() ~= "" ) then local range; for y = 1, CTTooltip:NumLines(), 1 do CT_Print("Looping " .. y .. "/" .. CTTooltip:NumLines()); local useless, useless, maxRange = string.find(getglobal("CTTooltipTextRight" .. y):GetText() or "", "^(%d+) yd range$"); if ( maxRange ) then CT_BarMod_MaxRanges[i] = tonumber(maxRange); break; else local useless, useless, maxRange = string.find(getglobal("CTTooltipTextLeft" .. y):GetText() or "", "^(%d+) yd range$"); if ( maxRange ) then CT_BarMod_MaxRanges[i] = tonumber(maxRange); break; else local useless, useless, minRange, maxRange = string.find(getglobal("CTTooltipTextRight" .. y):GetText() or "", "^(%d+)%-(%d+) yd range$"); if ( str ) then CT_BarMod_MaxRanges[i] = tonumber(maxRange); CT_BarMod_MinRanges[i] = tonumber(minRange); break; else local useless, useless, minRange, maxRange = string.find(getglobal("CTTooltipTextLeft" .. y):GetText() or "", "^(%d+)%-(%d+) yd range$"); if ( str ) then CT_BarMod_MaxRanges[i] = tonumber(maxRange); CT_BarMod_MinRanges[i] = tonumber(minRange); break; end end end end end end end end function CT_BarMod_FindTargetRange() if ( not UnitExists("target") ) then return ""; end local currMin = 0; local currMax = 1000; for k, v in CT_BarMod_MaxRanges do if ( IsActionInRange(v) == 1 and v < currMax ) then break; end end end function CT_BarMod_SetCCScaling(scale) if ( not CT_BarMod_EnteredWorld ) then CT_BarMod_RequiresScalingUpdate = scale; return; end for i = 1, 12, 1 do getglobal("CT_ActionButton" .. i .. "CD"):SetScale(scale); getglobal("CT2_ActionButton" .. i .. "CD"):SetScale(scale); getglobal("CT3_ActionButton" .. i .. "CD"):SetScale(scale); getglobal("CT4_ActionButton" .. i .. "CD"):SetScale(scale); getglobal("CT5_ActionButton" .. i .. "CD"):SetScale(scale); getglobal("ActionButton" .. i .. "CD"):SetScale(scale); getglobal("BonusActionButton" .. i .. "CD"):SetScale(scale); getglobal("CT_ActionButton" .. i .. "CD").scale = scale; getglobal("CT2_ActionButton" .. i .. "CD").scale = scale; getglobal("CT3_ActionButton" .. i .. "CD").scale = scale; getglobal("CT4_ActionButton" .. i .. "CD").scale = scale; getglobal("CT5_ActionButton" .. i .. "CD").scale = scale; getglobal("ActionButton" .. i .. "CD").scale = scale; getglobal("BonusActionButton" .. i .. "CD").scale = scale; end end if ( CT_CPFrame_ShowSlider ) then -- Add stuff for CC scaling local function ccscalingonchangefunc(modName, value) if ( value ) then CT_Mods[modName]["modValue"] = value; CT_BarMod_SetCCScaling(value); CT_SaveInfoName(modName); end end local function ccscalinginitfunction(modName) CT_BarMod_SetCCScaling(CT_Mods[modName]["modValue"] or 1); end local function ccscalingfunction(modName, button) if ( CT_CPFrame_IsSliderVisible() ) then CT_CPFrame_HideSlider(); else CT_CPFrame_ShowSlider(button, modName, ( CT_Mods[modName]["modValue"] or 1 ), ccscalingonchangefunc, 0.75, 1.5, 0.05, "0.75", "1.5", modName, "Drag this slider to increase or decrease the size of the CooldownCount text", "%s"); end end CT_RegisterMod(BARMOD_MODNAME_CCSCALING, BARMOD_SUB_CCSCALING, 2, "Interface\\Icons\\Spell_Holy_MindVision", BARMOD_TOOLTIP_CCSCALING, "slider", nil, ccscalingfunction, ccscalinginitfunction); end