Advertisement
Guest User

Untitled

a guest
Nov 5th, 2012
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.54 KB | None | 0 0
  1. -- Absorb Field
  2. -- Author: Kar (EU-Silvermoon)
  3.  
  4. local amountAbsorb, totalAbsorb
  5. local UnitBuff = UnitBuff
  6. local UnitExists = UnitExists
  7.  
  8. local spells = {
  9.     [1] = {
  10.         ["Name"] = "Blood Shield",
  11.         ["Icon"] = "spell_deathknight_butcher2",
  12.     },
  13.     [2] = {
  14.         ["Name"] = "Power Word: Shield",
  15.         ["Icon"] = "spell_holy_powerwordshield",
  16.     },
  17.     [3] = {
  18.         ["Name"] = "Divine Aegis",
  19.         ["Icon"] = "spell_holy_devineaegis",
  20.     },
  21.     [4] = {
  22.         ["Name"] = "Illuminated Healing",
  23.         ["Icon"] = "spell_holy_absolution",
  24.     },
  25.     [5] = {
  26.         ["Name"] = "Total",
  27.         ["Icon"] = "spell_arcane_arcaneresilience",
  28.     },
  29. }
  30.  
  31. local function Absorb_SavePosition(frame)
  32.    
  33.     AbsorbField_Settings[frame.Unit.."PosX"] = frame:GetLeft()
  34.     AbsorbField_Settings[frame.Unit.."PosY"] = frame:GetBottom()
  35.    
  36. end
  37.  
  38. local function Absorb_FormatValue(value)
  39.  
  40.     if value > 999 then
  41.         value = value / 1000
  42.         if value < 100 then
  43.             value = format("%.1fk",value)
  44.         else
  45.             value = format("%.0fk",value)
  46.         end    
  47.     end
  48.            
  49.     return value
  50.  
  51. end
  52.  
  53. local hide_if_zero = true
  54. local hidden_alpha = 0
  55. local full_alpha = 1
  56. local focus_hidedetails = true
  57.  
  58. local function Absorb_UpdateAbsorbs(unit)
  59.  
  60.     totalAbsorb = 0
  61.  
  62.     for i = 1, 4 do
  63.         if UnitBuff(unit, spells[i]["Name"]) then
  64.             amountAbsorb = select(14, UnitBuff(unit, spells[i]["Name"]))
  65.             totalAbsorb = totalAbsorb + amountAbsorb
  66.             if(unit == "focus" and focus_hidedetails) then
  67.                 _G["AbsorbField"..unit.."_Frame"..i.."Coloumn"]:Hide()
  68.             else
  69.                 _G["AbsorbField"..unit.."_Frame"..i.."Coloumn"]:Show()
  70.                 _G["AbsorbField"..unit.."_Frame"..i.."Coloumn"].Amount:SetText(Absorb_FormatValue(amountAbsorb))
  71.                 _G["AbsorbField"..unit.."_Frame"..i.."Coloumn"].Amount:SetTextColor(0.2, 1.0, 0.2)
  72.                 _G["AbsorbField"..unit.."_Frame"..i.."Coloumn"].Icon:SetDesaturated(nil)
  73.             end
  74.         else
  75.             if(unit == "focus" and focus_hidedetails) then
  76.                 _G["AbsorbField"..unit.."_Frame"..i.."Coloumn"]:Hide()
  77.             else
  78.                 _G["AbsorbField"..unit.."_Frame"..i.."Coloumn"]:Show()
  79.                 _G["AbsorbField"..unit.."_Frame"..i.."Coloumn"].Amount:SetText("0")
  80.                 _G["AbsorbField"..unit.."_Frame"..i.."Coloumn"].Amount:SetTextColor(0.4, 0.4, 0.4)
  81.                 _G["AbsorbField"..unit.."_Frame"..i.."Coloumn"].Icon:SetDesaturated(true)
  82.             end
  83.         end
  84.     end
  85.    
  86.     if totalAbsorb > 0 then
  87.         _G["AbsorbField"..unit.."_Frame5Coloumn"].Amount:SetText(Absorb_FormatValue(totalAbsorb))
  88.         _G["AbsorbField"..unit.."_Frame5Coloumn"].Amount:SetTextColor(0.1, 0.7, 1.0)
  89.         _G["AbsorbField"..unit.."_Frame5Coloumn"].Icon:SetDesaturated(nil)
  90.  
  91.         if hide_if_zero then
  92.             _G["AbsorbField"..unit.."_Frame5Coloumn"]:SetAlpha(full_alpha)
  93.             for i = 1, 4 do
  94.                 _G["AbsorbField"..unit.."_Frame"..i.."Coloumn"]:SetAlpha(full_alpha)
  95.             end
  96.         end
  97.     else
  98.         _G["AbsorbField"..unit.."_Frame5Coloumn"].Amount:SetText(0)
  99.         _G["AbsorbField"..unit.."_Frame5Coloumn"].Amount:SetTextColor(0.4, 0.4, 0.4)
  100.         _G["AbsorbField"..unit.."_Frame5Coloumn"].Icon:SetDesaturated(true)
  101.  
  102.         if hide_if_zero then
  103.             _G["AbsorbField"..unit.."_Frame5Coloumn"]:SetAlpha(hidden_alpha)
  104.             for i = 1, 4 do
  105.                 _G["AbsorbField"..unit.."_Frame"..i.."Coloumn"]:SetAlpha(hidden_alpha)
  106.             end
  107.         end
  108.     end
  109.  
  110.  
  111. end
  112.  
  113. local function Absorb_CreateColumn(icon, name, id, unit)
  114.  
  115.     local button = CreateFrame("Button", "AbsorbField"..unit.."_Frame"..id.."Coloumn", _G["AbsorbField"..unit.."_Frame"])
  116.     button:SetWidth(50)
  117.     button:SetHeight(15)
  118.     button:SetPoint("LEFT", _G["AbsorbField"..unit.."_Frame"], "LEFT", (id - 1) * 51, 0)
  119.     button.Name = name
  120.     button:EnableMouse(false)
  121.    
  122.     local texture = button:CreateTexture(nil, "ARTWORK")
  123.     texture:SetWidth(15)
  124.     texture:SetHeight(15)
  125.     texture:SetPoint("LEFT", button, "LEFT", 0, 0)
  126.     texture:SetTexture("Interface\\Icons\\"..icon)
  127.     texture:SetDesaturated(true)
  128.     texture:SetTexCoord(.1, .9, .1, .9)
  129.     button.Icon = texture
  130.    
  131.     local amount = button:CreateFontString(nil, "OVERLAY")
  132.     amount:SetFont("Interface\\AddOns\\SharedMedia\\fonts\\Homespun.TTF", 10, "OUTLINE")
  133.     amount:SetText("0")
  134.     amount:SetTextColor(0.4, 0.4, 0.4)
  135.     amount:SetPoint("CENTER", button, "CENTER", 7, 0)
  136.     amount:SetJustifyH("CENTER")
  137.     button.Amount = amount
  138.  
  139.     if hide_if_zero then button:SetAlpha(0) end
  140.    
  141. end
  142.  
  143. local function Absorb_CreateField(unit)
  144.  
  145.     local frame = CreateFrame("Frame", "AbsorbField"..unit.."_Frame", UIParent)
  146.     frame:SetWidth(254)
  147.     frame:SetHeight(15)
  148.    
  149.     if not AbsorbField_Settings[unit.."PosX"] then
  150.         if unit == "player" then
  151.             frame:SetPoint("CENTER", UIParent, "CENTER", 0, 200)
  152.         else
  153.             frame:SetPoint("CENTER", UIParent, "CENTER", 0, 150)
  154.         end
  155.     else
  156.         frame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", AbsorbField_Settings[unit.."PosX"], AbsorbField_Settings[unit.."PosY"])   
  157.     end
  158.  
  159.     local texture = frame:CreateTexture(nil, "BACKGROUND")
  160.     texture:SetAllPoints(true)
  161.     texture:Hide()
  162.     frame.Unit = unit
  163.     frame.BG = texture
  164.  
  165.     for i = 1, #spells do
  166.         Absorb_CreateColumn(spells[i]["Icon"], spells[i]["Name"], i, unit)
  167.     end
  168.  
  169.     if unit == "focus" then
  170.         frame:Hide()
  171.     end
  172.    
  173. end
  174.  
  175. function AbsorbField_SlashHandler(msg)
  176.  
  177.     msg = string.lower(msg)
  178.    
  179.     if msg == "unlock" then
  180.         AbsorbFieldplayer_Frame:RegisterForDrag("LeftButton")
  181.         AbsorbFieldplayer_Frame:SetMovable(true)
  182.         AbsorbFieldplayer_Frame:EnableMouse(true)
  183.         AbsorbFieldplayer_Frame.BG:SetTexture(0.2, 1.0, 0.2)
  184.         AbsorbFieldplayer_Frame.BG:Show()
  185.         AbsorbFieldplayer_Frame:SetScript("OnDragStart", function (self) self:StartMoving() end)
  186.         AbsorbFieldplayer_Frame:SetScript("OnDragStop", function (self) self:StopMovingOrSizing() Absorb_SavePosition(self) end)
  187.         AbsorbFieldfocus_Frame:RegisterForDrag("LeftButton")
  188.         AbsorbFieldfocus_Frame:SetMovable(true)
  189.         AbsorbFieldfocus_Frame:EnableMouse(true)
  190.         AbsorbFieldfocus_Frame.BG:SetTexture(0.2, 0.2, 1.0)
  191.         AbsorbFieldfocus_Frame.BG:Show()
  192.         AbsorbFieldfocus_Frame:SetScript("OnDragStart", function (self) self:StartMoving() end)
  193.         AbsorbFieldfocus_Frame:SetScript("OnDragStop", function (self) self:StopMovingOrSizing() Absorb_SavePosition(self) end)
  194.         AbsorbFieldfocus_Frame:Show()
  195.     elseif msg == "lock" then
  196.         AbsorbFieldplayer_Frame:RegisterForDrag(nil)
  197.         AbsorbFieldplayer_Frame:SetMovable(false)
  198.         AbsorbFieldplayer_Frame:EnableMouse(false)
  199.         AbsorbFieldplayer_Frame.BG:Hide()
  200.         AbsorbFieldplayer_Frame:SetScript("OnDragStart", nil)
  201.         AbsorbFieldplayer_Frame:SetScript("OnDragStop", nil)
  202.         AbsorbFieldfocus_Frame:RegisterForDrag(nil)
  203.         AbsorbFieldfocus_Frame:SetMovable(false)
  204.         AbsorbFieldfocus_Frame:EnableMouse(false)
  205.         AbsorbFieldfocus_Frame.BG:Hide()
  206.         AbsorbFieldfocus_Frame:SetScript("OnDragStart", nil)
  207.         AbsorbFieldfocus_Frame:SetScript("OnDragStop", nil)
  208.         if not UnitExists("focus") then
  209.             AbsorbFieldfocus_Frame:Hide()
  210.         end
  211.     end
  212.  
  213. end
  214.  
  215. function AbsorbField_OnEvent(self, event, ...)
  216.  
  217.     if event == "VARIABLES_LOADED" then
  218.         if not AbsorbField_Settings then
  219.             AbsorbField_Settings = {}
  220.         end
  221.         Absorb_CreateField("player")
  222.         Absorb_CreateField("focus")
  223.         self:RegisterEvent("UNIT_AURA")
  224.         self:RegisterEvent("PLAYER_FOCUS_CHANGED")
  225.         SlashCmdList["ABSORBFIELDCOMMANDS"] = AbsorbField_SlashHandler;
  226.         SLASH_ABSORBFIELDCOMMANDS1 = "/abf"
  227.     elseif event == "UNIT_AURA" then
  228.         local arg1 = ...
  229.         if arg1 == "player" then
  230.             Absorb_UpdateAbsorbs("player")
  231.         elseif arg1 == "focus" then
  232.             Absorb_UpdateAbsorbs("focus")
  233.         end
  234.     elseif event == "PLAYER_FOCUS_CHANGED" then
  235.         if UnitExists("focus") then
  236.             AbsorbFieldfocus_Frame:Show()
  237.             Absorb_UpdateAbsorbs("focus")
  238.         else
  239.             AbsorbFieldfocus_Frame:Hide()
  240.         end
  241.     end
  242.  
  243. end
  244.  
  245. local frame = CreateFrame("Frame", "AbsorbField")
  246. frame:SetScript("OnEvent", AbsorbField_OnEvent)
  247. frame:RegisterEvent("VARIABLES_LOADED")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement