--[[ Range Color: Change the icon color when out of range, no mana, etc; also it shows the hotkeys for the extra Blizzard Bars. Made by: Edswor Commands: /rangecolor or /rc ]] -------------------------------------------------------------------------------------------------- -- Other variables -------------------------------------------------------------------------------------------------- local Old_ActionButton_OnUpdate; local Old_ActionButton_UpdateUsable local Old_ActionButton_UpdateHotkeys local Old_FlexBarButton_OnUpdate; local Old_FlexBarButton_UpdateUsable; local Old_Gypsy_ActionButtonOnUpdate; local Old_Gypsy_ActionButtonUpdateUsable; -------------------------------------------------------------------------------------------------- -- OnLoad, Initialize -------------------------------------------------------------------------------------------------- function RangeColor_OnLoad() this:RegisterEvent("VARIABLES_LOADED"); this:RegisterEvent("UPDATE_BINDINGS"); this:RegisterEvent("ADDON_LOADED"); SLASH_RANGECOLOR1 = "/rangecolor"; SLASH_RANGECOLOR2 = "/rc"; SlashCmdList["RANGECOLOR"] = RangeColor_ShowOptions; --Hook the ActionButton_OnUpdate function Old_ActionButton_OnUpdate = ActionButton_OnUpdate; ActionButton_OnUpdate = RangeColor_ActionButton_OnUpdate; --Hook the ActionButton_UpdateUsable function Old_ActionButton_UpdateUsable = ActionButton_UpdateUsable; ActionButton_UpdateUsable = RangeColor_ActionButton_UpdateUsable; --Hook the ActionButton_UpdateUsable function Old_ActionButton_UpdateHotkeys = ActionButton_UpdateHotkeys; ActionButton_UpdateHotkeys = RangeColor_ActionButton_UpdateHotkeys; --FlexBarButton_OnUpdate --Hook the FlexBarButton_OnUpdate and FlexBarButton_UpdateUsable function if (type(FlexBarButton_OnUpdate) == 'function') then Old_FlexBarButton_OnUpdate = FlexBarButton_OnUpdate; FlexBarButton_OnUpdate = RangeColor_FlexBarButton_OnUpdate; end if (type(FlexBarButton_UpdateUsable) == 'function') then Old_FlexBarButton_UpdateUsable = FlexBarButton_UpdateUsable; FlexBarButton_UpdateUsable = RangeColor_FlexBarButton_UpdateUsable; end --Hook the Gypsy_ActionButtonOnUpdate and Gypsy_ActionButtonOnUpdate function if (type(Gypsy_ActionButtonOnUpdate) == 'function') then Old_Gypsy_ActionButtonOnUpdate = Gypsy_ActionButtonOnUpdate; Gypsy_ActionButtonOnUpdate = RangeColor_Gypsy_ActionButtonOnUpdate; end if (type(Gypsy_ActionButtonUpdateUsable) == 'function') then Old_Gypsy_ActionButtonUpdateUsable = Gypsy_ActionButtonUpdateUsable; Gypsy_ActionButtonUpdateUsable = RangeColor_Gypsy_ActionButtonUpdateUsable; end end function RangeColor_Initialize() RangeColor_Save2 = { ["Version"] = RANGECOLOR_VERSION, ["Mode"] = 3, ["Filter"] = 1, ["Dash"] = 1, ["Colors"] = { [1] = {r = 1.0, g = 0.0, b = 0.0}, [2] = {r = 1.0, g = 0.0, b = 0.0}, [3] = {r = 1.0, g = 0.0, b = 0.0}, [4] = {r = 0.3, g = 0.3, b = 1.0}, [5] = {r = 0.3, g = 0.3, b = 1.0}, [6] = {r = 0.3, g = 0.3, b = 1.0}, [7] = {r = 0.4, g = 0.4, b = 0.4}, [8] = {r = 0.4, g = 0.4, b = 0.4}, [9] = {r = 0.6, g = 0.6, b = 0.6}, [10] = {r = 1.0, g = 1.0, b = 1.0}, [11] = {r = 1.0, g = 1.0, b = 1.0}, [12] = {r = 0.6, g = 0.6, b = 0.6} } }; end -------------------------------------------------------------------------------------------------- -- ShowOptions, HideOptions, Toggle -------------------------------------------------------------------------------------------------- function RangeColor_ShowOptions() ShowUIPanel(RangeColorOptionsFrame); end function RangeColor_HideOptions() HideUIPanel(RangeColorOptionsFrame); end function RangeColor_Toggle() if(RangeColorOptionsFrame:IsVisible()) then HideUIPanel(RangeColorOptionsFrame); else ShowUIPanel(RangeColorOptionsFrame); end end function RangeColor_ResetOptions() RangeColor_Initialize(); RangeColor_HideOptions(); end -------------------------------------------------------------------------------------------------- -- OnEvent, OnUpdate, UpdateUsable -------------------------------------------------------------------------------------------------- function RangeColor_OnEvent() if( event == "VARIABLES_LOADED" ) then if ( RangeColor_Save2 == nil ) then RangeColor_Initialize(); elseif( RangeColor_Save2["Version"] == nil or RangeColor_Save2["Version"] ~= RANGECOLOR_VERSION) then RangeColor_Initialize(); end if( DEFAULT_CHAT_FRAME ) then DEFAULT_CHAT_FRAME:AddMessage("|cff00ff00Range Color|r, made by: |cffff3300Edswor|r, Version: |cffffff00"..RANGECOLOR_VERSION.."|r, loaded."); end return; elseif( event == "ADDON_LOADED") then if(myAddOnsFrame_Register) then RangeColorDetails = { name = "RangeColor", version = RANGECOLOR_VERSION, releaseDate = RANGECOLOR_RELEASE, author = "Edswor", email = "edsowr@hotmail.com", website = "http://edswor.iespana.es", category = MYADDONS_CATEGORY_BARS, optionsframe = "RangeColorOptionsFrame" }; myAddOnsFrame_Register(RangeColorDetails, RangeColorHelp); end return; elseif( event == "UPDATE_BINDINGS" ) then RangeColor_UpdateHotkeys(); return; end end function RangeColor_ActionButton_OnUpdate(elapsed) --This calls the old OnUpdate function Old_ActionButton_OnUpdate(elapsed); --This is to change the color if is out of range --Blizzard only change the color of the hotkey of the icon RangeColor_ActionButton(elapsed); end function RangeColor_ActionButton_UpdateUsable() --This calls the old UpdateUsable function --I dont make this calls, because I have rewritten all the Blizzard code --Uncomment to use it if needed with other addon --Old_ActionButton_UpdateUsable(); RangeColor_ActionButton(0); end function RangeColor_ActionButton(elapsed) local icon = getglobal(this:GetName().."Icon"); local normalTexture = getglobal(this:GetName().."NormalTexture"); local isUsable, notEnoughMana = IsUsableAction(ActionButton_GetPagedID(this)); local hotkey = getglobal(this:GetName().."HotKey"); if ( (RangeColor_Get("Mode")==3) or (RangeColor_Get("Mode")==2 and hotkey:GetText()==nil)) then hotkey:SetVertexColor(0.6, 0.6, 0.6); if ( this.rangeTimer ) then if ( this.rangeTimer <= elapsed ) then if ( IsActionInRange(ActionButton_GetPagedID(this)) == 0 ) then icon:SetVertexColor(RangeColor_Save2["Colors"][1].r, RangeColor_Save2["Colors"][1].g, RangeColor_Save2["Colors"][1].b); normalTexture:SetVertexColor(RangeColor_Save2["Colors"][2].r, RangeColor_Save2["Colors"][2].g, RangeColor_Save2["Colors"][2].b); else if ( isUsable ) then icon:SetVertexColor(RangeColor_Save2["Colors"][10].r, RangeColor_Save2["Colors"][10].g, RangeColor_Save2["Colors"][10].b); normalTexture:SetVertexColor(RangeColor_Save2["Colors"][11].r, RangeColor_Save2["Colors"][11].g, RangeColor_Save2["Colors"][11].b); elseif ( notEnoughMana ) then icon:SetVertexColor(RangeColor_Save2["Colors"][4].r, RangeColor_Save2["Colors"][4].g, RangeColor_Save2["Colors"][4].b); normalTexture:SetVertexColor(RangeColor_Save2["Colors"][5].r, RangeColor_Save2["Colors"][5].g, RangeColor_Save2["Colors"][5].b); else icon:SetVertexColor(RangeColor_Save2["Colors"][7].r, RangeColor_Save2["Colors"][7].g, RangeColor_Save2["Colors"][7].b); normalTexture:SetVertexColor(RangeColor_Save2["Colors"][8].r, RangeColor_Save2["Colors"][8].g, RangeColor_Save2["Colors"][8].b); end end end end else if ( this.rangeTimer ) then if ( this.rangeTimer <= elapsed ) then if ( IsActionInRange(ActionButton_GetPagedID(this)) == 0 ) then icon:SetVertexColor(1.0, 1.0, 1.0); normalTexture:SetVertexColor(1.0, 1.0, 1.0); end end end if ( IsActionInRange(ActionButton_GetPagedID(this)) == 0 ) then hotkey:SetVertexColor(RangeColor_Save2["Colors"][3].r, RangeColor_Save2["Colors"][3].g, RangeColor_Save2["Colors"][3].b); else if ( isUsable ) then hotkey:SetVertexColor(RangeColor_Save2["Colors"][12].r, RangeColor_Save2["Colors"][12].g, RangeColor_Save2["Colors"][12].b); elseif ( notEnoughMana ) then hotkey:SetVertexColor(RangeColor_Save2["Colors"][6].r, RangeColor_Save2["Colors"][6].g, RangeColor_Save2["Colors"][6].b); else hotkey:SetVertexColor(RangeColor_Save2["Colors"][9].r, RangeColor_Save2["Colors"][9].g, RangeColor_Save2["Colors"][9].b); end end end end -------------------------------------------------------------------------------------------------- -- ActionButton_UpdateHotkeys, UpdateHotkeys, UpdateHotkeysBar, TransformText -------------------------------------------------------------------------------------------------- --Overwrittes the Blizzard one to be able to use our filter for the text function RangeColor_ActionButton_UpdateHotkeys(actionButtonType) if ( not actionButtonType ) then actionButtonType = "ACTIONBUTTON"; end local hotkey = getglobal(this:GetName().."HotKey"); local action = actionButtonType..this:GetID(); local text = GetBindingText(GetBindingKey(action), "KEY_"); if ( string.len(text)==0 ) then hotkey:Hide(); else hotkey:SetText(RangeColor_TransformText(text)); hotkey:Show(); end end function RangeColor_UpdateHotkeys() RangeColor_UpdateHotkeysBar("MultiBarBottomLeft", 1); RangeColor_UpdateHotkeysBar("MultiBarBottomRight", 2); RangeColor_UpdateHotkeysBar("MultiBarRight", 3); RangeColor_UpdateHotkeysBar("MultiBarLeft", 4); end --Change the text of hotkeys of this multibar function RangeColor_UpdateHotkeysBar(bar, id) local hotkey, action, text; for i = 1, 12 do hotkey = getglobal(bar.."Button"..i.."HotKey"); action = "MULTIACTIONBAR"..id.."BUTTON"..i; text = GetBindingText(GetBindingKey(action),"KEY_"); if ( string.len(text)==0 ) then hotkey:Hide(); else hotkey:SetText(RangeColor_TransformText(text)); hotkey:Show(); end end end function RangeColor_TransformText(text) --The fisrt time that WoW loads, it calls this function before any addon loads, --so I have put a default option if the addon is not loaded. --If you want to change to your options, make a change in the key binding menu --so this function is called again if (RangeColor_Save2 ~= nil) then if( RangeColor_Get("Filter")==1 ) then text = string.gsub(text, "CTRL", "C"); text = string.gsub(text, "ALT", "A"); text = string.gsub(text, "SHIFT", "S"); if( RangeColor_Get("Dash")==1 ) then text = string.gsub(text, "-", ""); end end else text = string.gsub(text, "CTRL", "C"); text = string.gsub(text, "ALT", "A"); text = string.gsub(text, "SHIFT", "S"); text = string.gsub(text, "-", ""); end return text; end -------------------------------------------------------------------------------------------------- -- Set, Get, GetColor, SetColor -------------------------------------------------------------------------------------------------- function RangeColor_Get(option) if (RangeColor_Save2[option] ~= nil) then return RangeColor_Save2[option]; end end function RangeColor_Set(option, val) if (RangeColor_Save2 ~= nil) then if ( option ) then RangeColor_Save2[option] = val; end end end function RangeColor_GetColor(key) local color = {r = 1.0, g = 1.0, b = 1.0}; if (RangeColor_Save2["Colors"][key] ~= nil) then color.r = RangeColor_Save2["Colors"][key].r; color.g = RangeColor_Save2["Colors"][key].g; color.b = RangeColor_Save2["Colors"][key].b; return color; end end function RangeColor_SetColor(key, r, g, b) if (RangeColor_Save2["Colors"][key] ~= nil) then RangeColor_Save2["Colors"][key].r = r; RangeColor_Save2["Colors"][key].g = g; RangeColor_Save2["Colors"][key].b = b; end end -------------------------------------------------------------------------------------------------- -- Flexbar -------------------------------------------------------------------------------------------------- -- OnUpdate, UpdateUsable -------------------------------------------------------------------------------------------------- function RangeColor_FlexBarButton_OnUpdate(elapsed, button) --This calls the old OnUpdate function Old_FlexBarButton_OnUpdate(elapsed, button); --This is to change the color if is out of range RangeColor_FlexBarButton_UpdateUsable(button); end function RangeColor_FlexBarButton_UpdateUsable(button) --This calls the old UpdateUsable function Old_FlexBarButton_UpdateUsable(button); local icon = getglobal(button:GetName().."Icon"); local normalTexture = getglobal(button:GetName().."NormalTexture"); local isUsable, notEnoughMana = IsUsableAction(FlexBarButton_GetID(button)); local hotkey = getglobal(button:GetName().."HotKey"); if ( (RangeColor_Get("Mode")==3) or (RangeColor_Get("Mode")==2 and hotkey:GetText()==nil)) then hotkey:SetVertexColor(0.6, 0.6, 0.6); if ( button.rangeTimer ) then if ( button.rangeTimer < 0 ) then if ( IsActionInRange(FlexBarButton_GetID(button)) == 0 ) then icon:SetVertexColor(RangeColor_Save2["Colors"][1].r, RangeColor_Save2["Colors"][1].g, RangeColor_Save2["Colors"][1].b); normalTexture:SetVertexColor(RangeColor_Save2["Colors"][2].r, RangeColor_Save2["Colors"][2].g, RangeColor_Save2["Colors"][2].b); else if ( isUsable ) then icon:SetVertexColor(RangeColor_Save2["Colors"][10].r, RangeColor_Save2["Colors"][10].g, RangeColor_Save2["Colors"][10].b); normalTexture:SetVertexColor(RangeColor_Save2["Colors"][11].r, RangeColor_Save2["Colors"][11].g, RangeColor_Save2["Colors"][11].b); elseif ( notEnoughMana ) then icon:SetVertexColor(RangeColor_Save2["Colors"][4].r, RangeColor_Save2["Colors"][4].g, RangeColor_Save2["Colors"][4].b); normalTexture:SetVertexColor(RangeColor_Save2["Colors"][5].r, RangeColor_Save2["Colors"][5].g, RangeColor_Save2["Colors"][5].b); else icon:SetVertexColor(RangeColor_Save2["Colors"][7].r, RangeColor_Save2["Colors"][7].g, RangeColor_Save2["Colors"][7].b); normalTexture:SetVertexColor(RangeColor_Save2["Colors"][8].r, RangeColor_Save2["Colors"][8].g, RangeColor_Save2["Colors"][8].b); end end end end else if ( button.rangeTimer ) then if ( button.rangeTimer < 0 ) then if ( IsActionInRange(FlexBarButton_GetID(button)) == 0 ) then icon:SetVertexColor(1.0, 1.0, 1.0); normalTexture:SetVertexColor(1.0, 1.0, 1.0); end end end if ( IsActionInRange(FlexBarButton_GetID(button)) == 0 ) then hotkey:SetVertexColor(RangeColor_Save2["Colors"][3].r, RangeColor_Save2["Colors"][3].g, RangeColor_Save2["Colors"][3].b); else if ( isUsable ) then hotkey:SetVertexColor(RangeColor_Save2["Colors"][12].r, RangeColor_Save2["Colors"][12].g, RangeColor_Save2["Colors"][12].b); elseif ( notEnoughMana ) then hotkey:SetVertexColor(RangeColor_Save2["Colors"][6].r, RangeColor_Save2["Colors"][6].g, RangeColor_Save2["Colors"][6].b); else hotkey:SetVertexColor(RangeColor_Save2["Colors"][9].r, RangeColor_Save2["Colors"][9].g, RangeColor_Save2["Colors"][9].b); end end end end -------------------------------------------------------------------------------------------------- -- Other Action Bars -------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------- -- Gypsy -------------------------------------------------------------------------------------------------- -- OnUpdate, UpdateUsable -------------------------------------------------------------------------------------------------- function RangeColor_Gypsy_ActionButtonOnUpdate(elapsed) --This calls the old OnUpdate function Old_Gypsy_ActionButtonOnUpdate(elapsed); --This is to change the color if is out of range RangeColor_Gypsy_ActionButtonUpdateUsable(); end function RangeColor_Gypsy_ActionButtonUpdateUsable() --This calls the old UpdateUsable function --I dont make this calls, because I have rewritten all the code --Uncomment to use it if needed with other addon or some errors occurs --Old_Gypsy_ActionButtonUpdateUsable(); local icon = getglobal(this:GetName().."Icon"); local normalTexture = getglobal(this:GetName().."NormalTexture"); local isUsable, notEnoughMana = IsUsableAction(Gypsy_ActionButtonGetPagedID(this)); local hotkey = getglobal(this:GetName().."HotKey"); if ( (RangeColor_Get("Mode")==3) or (RangeColor_Get("Mode")==2 and hotkey:GetText()==nil)) then hotkey:SetVertexColor(0.6, 0.6, 0.6); if ( this.rangeTimer ) then if ( this.rangeTimer < 0 ) then if ( IsActionInRange(Gypsy_ActionButtonGetPagedID(this)) == 0 ) then icon:SetVertexColor(RangeColor_Save2["Colors"][1].r, RangeColor_Save2["Colors"][1].g, RangeColor_Save2["Colors"][1].b); normalTexture:SetVertexColor(RangeColor_Save2["Colors"][2].r, RangeColor_Save2["Colors"][2].g, RangeColor_Save2["Colors"][2].b); else if ( isUsable ) then icon:SetVertexColor(RangeColor_Save2["Colors"][10].r, RangeColor_Save2["Colors"][10].g, RangeColor_Save2["Colors"][10].b); normalTexture:SetVertexColor(RangeColor_Save2["Colors"][11].r, RangeColor_Save2["Colors"][11].g, RangeColor_Save2["Colors"][11].b); elseif ( notEnoughMana ) then icon:SetVertexColor(RangeColor_Save2["Colors"][4].r, RangeColor_Save2["Colors"][4].g, RangeColor_Save2["Colors"][4].b); normalTexture:SetVertexColor(RangeColor_Save2["Colors"][5].r, RangeColor_Save2["Colors"][5].g, RangeColor_Save2["Colors"][5].b); else icon:SetVertexColor(RangeColor_Save2["Colors"][7].r, RangeColor_Save2["Colors"][7].g, RangeColor_Save2["Colors"][7].b); normalTexture:SetVertexColor(RangeColor_Save2["Colors"][8].r, RangeColor_Save2["Colors"][8].g, RangeColor_Save2["Colors"][8].b); end end end end else if ( this.rangeTimer ) then if ( this.rangeTimer < 0 ) then if ( IsActionInRange(Gypsy_ActionButtonGetPagedID(this)) == 0 ) then icon:SetVertexColor(1.0, 1.0, 1.0); normalTexture:SetVertexColor(1.0, 1.0, 1.0); end end end if ( IsActionInRange(Gypsy_ActionButtonGetPagedID(this)) == 0 ) then hotkey:SetVertexColor(RangeColor_Save2["Colors"][3].r, RangeColor_Save2["Colors"][3].g, RangeColor_Save2["Colors"][3].b); else if ( isUsable ) then hotkey:SetVertexColor(RangeColor_Save2["Colors"][12].r, RangeColor_Save2["Colors"][12].g, RangeColor_Save2["Colors"][12].b); elseif ( notEnoughMana ) then hotkey:SetVertexColor(RangeColor_Save2["Colors"][6].r, RangeColor_Save2["Colors"][6].g, RangeColor_Save2["Colors"][6].b); else hotkey:SetVertexColor(RangeColor_Save2["Colors"][9].r, RangeColor_Save2["Colors"][9].g, RangeColor_Save2["Colors"][9].b); end end end end