Quantcast

alpha version 0.0.3

XrystalBelle [02-15-14 - 19:42]
alpha version 0.0.3
Filename
XShieldMonitor.lua
XShieldMonitor.toc
diff --git a/XShieldMonitor.lua b/XShieldMonitor.lua
index a9b48b4..a1276c3 100644
--- a/XShieldMonitor.lua
+++ b/XShieldMonitor.lua
@@ -1,235 +1,245 @@
+
 local addonName, XSM = ...

- local BarWidth = 200
- local BarHeight = 10
- local ShieldSpell = 17
-
- local FontSize = 8
-
- XSM = XSM or {}
-
- XSM.ShieldSpells = {
- 17, -- Power Word: Shield -- Regular Ability
- 123258, -- Power Word: Shield -- Modified by Angelic Bulwhark (108946), Divine Insight (123266)
-
- 47753, -- Divine Aegis (1) -- Modified by Angelic Bulwhark (108946)
-
- -- 108946, -- Angelic Bulwhark -- Modifies Power Word: Shield (17), Spirit Shell (109964)
- 114214, -- Angelic Bulwhark (1) -- Regular Ability ?
-
- -- 109175, -- Divine Insight (75) -- Applies Aura Divine Insight (124430/123266/123267)
- 123266, -- Divine Insight -- Modifies Power Word Shield (17)
-
- 109964, -- Spirit Shell (28) -- Modifies Heals to absorb - Modified By Angelic Bulwhark (108946)
- }
-
- XSM.Events = CreateFrame("Frame")
-
- XSM.CreateFrames = function(self)
-
- XSM.MaxAbsorb = 0
- XSM.CurrAbsorb = 0
- XSM.PercAbsorb = 0
- XSM.LastAbsorb = 0
-
- -- Create the Main Bar
- XSM.Bar = CreateFrame("Frame","XShieldMonitor_Bar",UIParent)
- XSM.Bar:SetWidth(BarWidth)
- XSM.Bar:SetHeight(BarHeight * 3)
- XSM.Bar:EnableMouse(true)
- XSM.Bar:SetMovable(true)
- if ( not XSM.Bar:IsUserPlaced() ) then
- XSM.Bar:SetPoint("CENTER")
- end
- XSM.Bar:SetUserPlaced(true)
- XSM.Bar:RegisterForDrag("LeftButton")
- XSM.Bar:SetScript("OnDragStart",function(self) self:StartMoving() end)
- XSM.Bar:SetScript("OnDragStop",function(self) self:StopMovingOrSizing() end)
- XSM.Bar:Show()
-
-
- -- create the Spell Icon for the Cooldown Animation
- XSM.Icon = CreateFrame("Frame","XShieldMonitor_Icon",XSM.Bar)
- XSM.Icon:SetWidth(BarHeight * 3)
- XSM.Icon:SetHeight(BarHeight * 3)
- XSM.Icon:SetPoint("TOPLEFT")
- XSM.Icon.Texture = XSM.Icon:CreateTexture(nil,"ARTWORK")
- XSM.Icon.Texture:SetTexture(GetSpellTexture(ShieldSpell))
- XSM.Icon.Texture:SetAllPoints()
- XSM.Icon.Texture:Show()
- XSM.Icon.Caption = XSM.Icon:CreateFontString(nil,"OVERLAY","GameFontNormal")
- XSM.Icon.Caption:SetFont("Fonts\\FRIZQT__.TTF",FontSize,"OUTLINE")
- XSM.Icon.Caption:SetJustifyV("CENTER")
- XSM.Icon.Caption:SetJustifyH("MIDDLE")
- XSM.Icon.Caption:SetAllPoints()
- XSM.Icon.Caption:Show()
- XSM.Icon.Cooldown = CreateFrame("Cooldown","XShieldMonitor_Icon_Cooldown",XSM.Icon,"CooldownFrameTemplate")
- XSM.Icon.Duration = CreateFrame("Cooldown","XShieldMonitor_Icon_Duration",XSM.Icon,"CooldownFrameTemplate")
- XSM.Icon:Show()
-
-
- -- the Cooldown Bar
- XSM.Cooldown = CreateFrame("StatusBar","XShieldMonitor_Cooldown",XSM.Bar)
- XSM.Cooldown.Background = XSM.Cooldown:CreateTexture(nil,"BACKGROUND")
- XSM.Cooldown.Background:SetTexture(0,0,0)
- XSM.Cooldown.Background:SetAllPoints()
- XSM.Cooldown.Background:Show()
- XSM.Cooldown.Caption = XSM.Cooldown:CreateFontString(nil,"OVERLAY","GameFontNormal")
- XSM.Cooldown.Caption:SetFont("Fonts\\FRIZQT__.TTF",FontSize,"OUTLINE")
- XSM.Cooldown.Caption:SetJustifyV("CENTER")
- XSM.Cooldown.Caption:SetJustifyH("MIDDLE")
- XSM.Cooldown.Caption:SetAllPoints()
- XSM.Cooldown.Caption:Show()
- XSM.Cooldown:SetWidth(BarWidth - (BarHeight * 3))
- XSM.Cooldown:SetHeight(BarHeight)
- XSM.Cooldown:SetOrientation("HORIZONTAL")
- XSM.Cooldown:SetMinMaxValues(0,100)
- XSM.Cooldown:SetStatusBarColor(0,0,1,1)
- XSM.Cooldown:SetStatusBarTexture("Interface\\TargetingFrame\\UI-StatusBar")
- XSM.Cooldown:SetValue(0)
- XSM.Cooldown:SetPoint("TOPLEFT",XSM.Icon,"TOPRIGHT",0,0)
- XSM.Cooldown:SetPoint("RIGHT")
- XSM.Cooldown:SetScript("OnUpdate",function(self,elapsed)
- if not XSM.CDActivated then return end
- XSM.CDCounter = XSM.CDCounter + elapsed
- XSM.CDLeft = XSM.CDDuration - XSM.CDCounter
- XSM.Cooldown.Caption:SetText(string.format("%0.2d",XSM.CDLeft))
- local percLeft = (( XSM.CDLeft / XSM.CDDuration ) * 100 )
- XSM.Cooldown:SetValue(percLeft)
- HealthBar_OnValueChanged(XSM.Cooldown,percLeft,true)
- if ( XSM.CDCounter and XSM.CDCounter >= XSM.CDDuration ) then
- XSM.CDActivated = false
- end
- end)
- XSM.Cooldown:Show()
-
- -- The Shield Status Bar
- XSM.Status = CreateFrame("StatusBar","XShieldMonitor_Status",XSM.Bar)
- XSM.Status.Background = XSM.Status:CreateTexture(nil,"BACKGROUND")
- XSM.Status.Background:SetTexture(0,0,0)
- XSM.Status.Background:SetAllPoints()
- XSM.Status.Background:Show()
- XSM.Status.Caption = XSM.Status:CreateFontString(nil,"OVERLAY","GameFontNormal")
- XSM.Status.Caption:SetFont("Fonts\\FRIZQT__.TTF",FontSize,"OUTLINE")
- XSM.Status.Caption:SetJustifyV("CENTER")
- XSM.Status.Caption:SetJustifyH("MIDDLE")
- XSM.Status.Caption:SetAllPoints()
- XSM.Status.Caption:Show()
- XSM.Status:SetWidth(BarWidth - (BarHeight * 3))
- XSM.Status:SetHeight(BarHeight)
- XSM.Status:SetOrientation("HORIZONTAL")
- XSM.Status:SetMinMaxValues(0,100)
- XSM.Status:SetStatusBarColor(0,1,0,1)
- XSM.Status:SetStatusBarTexture("Interface\\TargetingFrame\\UI-StatusBar")
- XSM.Status:SetValue(0)
- XSM.Status:SetPoint("TOPLEFT",XSM.Cooldown,"BOTTOMLEFT",0,0)
- XSM.Status:SetPoint("RIGHT")
- XSM.Status:Show()
-
- -- The Aura duration Bar
- XSM.Timer = CreateFrame("StatusBar","XShieldMonitor_Timer",XSM.Bar)
- XSM.Timer.Background = XSM.Timer:CreateTexture(nil,"BACKGROUND")
- XSM.Timer.Background:SetTexture(0,0,0)
- XSM.Timer.Background:SetAllPoints()
- XSM.Timer.Background:Show()
- XSM.Timer.Caption = XSM.Timer:CreateFontString(nil,"OVERLAY","GameFontNormal")
- XSM.Timer.Caption:SetFont("Fonts\\FRIZQT__.TTF",FontSize,"OUTLINE")
- XSM.Timer.Caption:SetJustifyV("CENTER")
- XSM.Timer.Caption:SetJustifyH("MIDDLE")
- XSM.Timer.Caption:SetAllPoints()
- XSM.Timer.Caption:Show()
- XSM.Timer:SetWidth(BarWidth - (BarHeight * 3))
- XSM.Timer:SetHeight(BarHeight)
- XSM.Timer:SetOrientation("HORIZONTAL")
- XSM.Timer:SetMinMaxValues(0,100)
- XSM.Timer:SetStatusBarColor(1.0,0.0,0.0,1.0)
- XSM.Timer:SetStatusBarTexture("Interface\\TargetingFrame\\UI-StatusBar")
- XSM.Timer:SetValue(0)
- XSM.Timer:SetPoint("TOPLEFT",XSM.Status,"BOTTOMLEFT",0,0)
- XSM.Timer:SetPoint("RIGHT")
- XSM.Timer:SetScript("OnUpdate",function(self,elapsed)
- if not XSM.AuraActivated then return end
- XSM.AuraCounter = XSM.AuraCounter + elapsed
- XSM.AuraLeft = XSM.AuraDuration - XSM.AuraCounter
- XSM.Timer.Caption:SetText(string.format("%0.2d",XSM.AuraLeft))
- local percLeft = (( XSM.AuraLeft / XSM.AuraDuration ) * 100 )
- XSM.Timer:SetValue(percLeft)
- HealthBar_OnValueChanged(XSM.Timer,percLeft,true)
- if ( XSM.AuraCounter and XSM.AuraCounter >= XSM.AuraDuration ) then
- XSM.AuraActivated = false
- end
- end)
- XSM.Timer:Show()
- end
-
- -- Check the Aura Duration for the Shield Spell and update the timers accordingly
- XSM.CheckAura = function(self,...)
- if ( XSM.AuraActivated ) then return end
- XSM.AuraStart, XSM.AuraDuration, XSM.AuraCounter, XSM.AuraEnabled,XSM.AuraActivated = 0,0,0,0,false
- XSM.AuraActivated = false
- for i = 1,40 do
- local name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, canStealOrPurge, shouldConsolidate, spellId, canApplyAura, isBossDebuff, isCastByPlayer, auraData1,auraData2,auraData3 = UnitAura("player",i,"PLAYER HELPFUL")
- if ( not name ) then break end
- if tContains(XSM.ShieldSpells,spellId) then
- -- print(i,spellId,name)
- if ( XSM.AuraActivated == false ) then
- XSM.AuraStart = GetTime()
- XSM.AuraDuration = expirationTime - GetTime()
- XSM.AuraEnabled = true
- XSM.AuraCounter = 0
- XSM.AuraActivated = true
- XSM.Icon.Texture:SetTexture(GetSpellTexture(spellId))
- end
- end
- end
- CooldownFrame_SetTimer(XSM.Icon.Duration,XSM.AuraStart,XSM.AuraDuration,XSM.AuraEnabled)
- end
-
- -- Check the Absorb Value as this will affect the shield status
- XSM.CheckAbsorbs = function(self,...)
- local args = { ... }
- XSM.MaxAbsorb = XSM.MaxAbsorb or UnitGetTotalAbsorbs(args[1]) or 0
- XSM.CurrAbsorb = UnitGetTotalAbsorbs(args[1]) or 0
- if ( XSM.CurrAbsorb > XSM.MaxAbsorb ) then XSM.MaxAbsorb = XSM.CurrAbsorb end
- XSM.PercAbsorb = ((XSM.CurrAbsorb / XSM.MaxAbsorb) * 100) or 0
- if XSM.PercAbsorb < 0 then XSM.MaxAbsorb = 0 end
- XSM.Status:SetValue( XSM.PercAbsorb )
- HealthBar_OnValueChanged(XSM.Status,XSM.PercAbsorb,true)
- XSM.Status.Caption:SetText(XSM.CurrAbsorb .. "/" .. XSM.MaxAbsorb .. " (" .. string.format("%0.2d",XSM.PercAbsorb) .. "% )")
- XSM.LastAbsorb = XSM.CurrAbsorb
- end
-
- -- Check the shield spell cooldown
- XSM.CheckCooldowns = function(self,...)
- if XSM.CDActivated then return end
- XSM.CDStart, XSM.CDDuration, XSM.CDEnabled, XSM.CDActivated = nil,nil,nil,false
- XSM.CDStart, XSM.CDDuration, XSM.CDEnabled = GetSpellCooldown(GetSpellInfo(ShieldSpell))
- if not XSM.CDEnabled then return end
- if ( XSM.CDDuration ~= nil and XSM.CDDuration > 2 ) then
- XSM.CDCounter = 0
- XSM.CDActivated = true
- end
- if XSM.CDActivated then CooldownFrame_SetTimer(XSM.Icon.Cooldown,XSM.CDStart,XSM.CDDuration,XSM.CDEnabled) end
- end
-
- -- check any events and deal with accordingly
- XSM.Events:SetScript("OnEvent",function(self,event,...)
- local args = { ... }
- if ( event == "ADDON_LOADED" and args[1] == addonName ) then
- XSM:CreateFrames()
- elseif ( event == "UNIT_AURA" ) then
- XSM:CheckAura(...)
- XSM:CheckCooldowns(...)
- elseif ( event == "UNIT_ABSORB_AMOUNT_CHANGED" ) then
- XSM:CheckAbsorbs(...)
- elseif ( event == "SPELL_UPDATE_COOLDOWN" ) then
- XSM:CheckAura(...)
- XSM:CheckCooldowns(...)
- end
- end)
-
- XSM.Events:RegisterEvent("ADDON_LOADED")
- XSM.Events:RegisterUnitEvent("UNIT_AURA","player")
- XSM.Events:RegisterUnitEvent("UNIT_ABSORB_AMOUNT_CHANGED","player")
- XSM.Events:RegisterEvent("SPELL_UPDATE_COOLDOWN")
-
\ No newline at end of file
+local BarWidth = 200
+local BarHeight = 10
+local ShieldSpell = 17
+
+local FontSize = 8
+
+XSM = XSM or {}
+
+XSM.ShieldSpells = {
+	17, 	-- Power Word: Shield 	-- Regular Ability
+	123258, -- Power Word: Shield 	-- Modified by Angelic Bulwhark (108946), Divine Insight (123266)
+
+	47753, 	-- Divine Aegis (1) 	-- Modified by Angelic Bulwhark (108946)
+
+--	108946, -- Angelic Bulwhark 	-- Modifies Power Word: Shield (17), Spirit Shell (109964)
+	114214, -- Angelic Bulwhark (1)	-- Regular Ability ?
+
+--	109175, -- Divine Insight (75) 	-- Applies Aura Divine Insight (124430/123266/123267)
+--	123266, -- Divine Insight 		-- Modifies Power Word Shield (17)
+
+	109964, -- Spirit Shell (28) 	-- Modifies Heals to absorb - Modified By Angelic Bulwhark (108946)
+}
+
+XSM.Events = CreateFrame("Frame")
+
+XSM.CreateFrames = function(self)
+
+	XSM.MaxAbsorb = 0
+	XSM.CurrAbsorb = 0
+	XSM.PercAbsorb = 0
+	XSM.LastAbsorb = 0
+
+	-- Create the Main Bar
+	XSM.Bar = CreateFrame("Frame","XShieldMonitor_Bar",UIParent)
+	XSM.Bar:SetWidth(BarWidth)
+	XSM.Bar:SetHeight(BarHeight * 3)
+	XSM.Bar:EnableMouse(true)
+	XSM.Bar:SetMovable(true)
+	if ( not XSM.Bar:IsUserPlaced() ) then
+		XSM.Bar:SetPoint("CENTER")
+	end
+	XSM.Bar:SetUserPlaced(true)
+	XSM.Bar:RegisterForDrag("LeftButton")
+	XSM.Bar:SetScript("OnDragStart",function(self) self:StartMoving() end)
+	XSM.Bar:SetScript("OnDragStop",function(self) self:StopMovingOrSizing() end)
+	XSM.Bar:Show()
+
+
+	-- create the Spell Icon for the Cooldown Animation
+	XSM.Icon = CreateFrame("Frame","XShieldMonitor_Icon",XSM.Bar)
+	XSM.Icon:SetWidth(BarHeight * 3)
+	XSM.Icon:SetHeight(BarHeight * 3)
+	XSM.Icon:SetPoint("TOPLEFT")
+	XSM.Icon.Texture = XSM.Icon:CreateTexture(nil,"ARTWORK")
+	XSM.Icon.Texture:SetTexture(GetSpellTexture(ShieldSpell))
+	XSM.Icon.Texture:SetAllPoints()
+	XSM.Icon.Texture:Show()
+	XSM.Icon.Caption = XSM.Icon:CreateFontString(nil,"OVERLAY","GameFontNormal")
+	XSM.Icon.Caption:SetFont("Fonts\\FRIZQT__.TTF",FontSize,"OUTLINE")
+	XSM.Icon.Caption:SetJustifyV("CENTER")
+	XSM.Icon.Caption:SetJustifyH("MIDDLE")
+	XSM.Icon.Caption:SetAllPoints()
+	XSM.Icon.Caption:Show()
+	XSM.Icon.Cooldown = CreateFrame("Cooldown","XShieldMonitor_Icon_Cooldown",XSM.Icon,"CooldownFrameTemplate")
+	XSM.Icon.Duration = CreateFrame("Cooldown","XShieldMonitor_Icon_Duration",XSM.Icon,"CooldownFrameTemplate")
+	XSM.Icon:Show()
+
+
+	-- the Cooldown Bar
+	XSM.Cooldown = CreateFrame("StatusBar","XShieldMonitor_Cooldown",XSM.Bar)
+	XSM.Cooldown.Background = XSM.Cooldown:CreateTexture(nil,"BACKGROUND")
+	XSM.Cooldown.Background:SetTexture(0,0,0)
+	XSM.Cooldown.Background:SetAllPoints()
+	XSM.Cooldown.Background:Show()
+	XSM.Cooldown.Caption = XSM.Cooldown:CreateFontString(nil,"OVERLAY","GameFontNormal")
+	XSM.Cooldown.Caption:SetFont("Fonts\\FRIZQT__.TTF",FontSize,"OUTLINE")
+	XSM.Cooldown.Caption:SetJustifyV("CENTER")
+	XSM.Cooldown.Caption:SetJustifyH("MIDDLE")
+	XSM.Cooldown.Caption:SetAllPoints()
+	XSM.Cooldown.Caption:Show()
+	XSM.Cooldown:SetWidth(BarWidth - (BarHeight * 3))
+	XSM.Cooldown:SetHeight(BarHeight)
+	XSM.Cooldown:SetOrientation("HORIZONTAL")
+	XSM.Cooldown:SetMinMaxValues(0,100)
+	XSM.Cooldown:SetStatusBarColor(0,0,1,1)
+	XSM.Cooldown:SetStatusBarTexture("Interface\\TargetingFrame\\UI-StatusBar")
+	XSM.Cooldown:SetValue(0)
+	XSM.Cooldown:SetPoint("TOPLEFT",XSM.Icon,"TOPRIGHT",0,0)
+	XSM.Cooldown:SetPoint("RIGHT")
+	XSM.Cooldown:SetScript("OnUpdate",function(self,elapsed)
+		if not XSM.CDActivated then return end
+		XSM.CDCounter = XSM.CDCounter + elapsed
+		XSM.CDLeft = XSM.CDDuration - XSM.CDCounter
+		XSM.Cooldown.Caption:SetText(string.format("%0.2d",XSM.CDLeft))
+		local percLeft = (( XSM.CDLeft / XSM.CDDuration ) * 100 )
+		XSM.Cooldown:SetValue(percLeft)
+		HealthBar_OnValueChanged(XSM.Cooldown,percLeft,true)
+		if ( XSM.CDCounter and XSM.CDCounter >= XSM.CDDuration ) then
+			XSM.CDActivated = false
+		end
+	end)
+	XSM.Cooldown:Show()
+
+	-- The Shield Status Bar
+	XSM.Status = CreateFrame("StatusBar","XShieldMonitor_Status",XSM.Bar)
+	XSM.Status.Background  = XSM.Status:CreateTexture(nil,"BACKGROUND")
+	XSM.Status.Background:SetTexture(0,0,0)
+	XSM.Status.Background:SetAllPoints()
+	XSM.Status.Background:Show()
+	XSM.Status.Caption = XSM.Status:CreateFontString(nil,"OVERLAY","GameFontNormal")
+	XSM.Status.Caption:SetFont("Fonts\\FRIZQT__.TTF",FontSize,"OUTLINE")
+	XSM.Status.Caption:SetJustifyV("CENTER")
+	XSM.Status.Caption:SetJustifyH("MIDDLE")
+	XSM.Status.Caption:SetAllPoints()
+	XSM.Status.Caption:Show()
+	XSM.Status:SetWidth(BarWidth - (BarHeight * 3))
+	XSM.Status:SetHeight(BarHeight)
+	XSM.Status:SetOrientation("HORIZONTAL")
+	XSM.Status:SetMinMaxValues(0,100)
+	XSM.Status:SetStatusBarColor(0,1,0,1)
+	XSM.Status:SetStatusBarTexture("Interface\\TargetingFrame\\UI-StatusBar")
+	XSM.Status:SetValue(0)
+	XSM.Status:SetPoint("TOPLEFT",XSM.Cooldown,"BOTTOMLEFT",0,0)
+	XSM.Status:SetPoint("RIGHT")
+	XSM.Status:Show()
+
+	-- The Aura duration Bar
+	XSM.Timer = CreateFrame("StatusBar","XShieldMonitor_Timer",XSM.Bar)
+	XSM.Timer.Background = XSM.Timer:CreateTexture(nil,"BACKGROUND")
+	XSM.Timer.Background:SetTexture(0,0,0)
+	XSM.Timer.Background:SetAllPoints()
+	XSM.Timer.Background:Show()
+	XSM.Timer.Caption = XSM.Timer:CreateFontString(nil,"OVERLAY","GameFontNormal")
+	XSM.Timer.Caption:SetFont("Fonts\\FRIZQT__.TTF",FontSize,"OUTLINE")
+	XSM.Timer.Caption:SetJustifyV("CENTER")
+	XSM.Timer.Caption:SetJustifyH("MIDDLE")
+	XSM.Timer.Caption:SetAllPoints()
+	XSM.Timer.Caption:Show()
+	XSM.Timer:SetWidth(BarWidth - (BarHeight * 3))
+	XSM.Timer:SetHeight(BarHeight)
+	XSM.Timer:SetOrientation("HORIZONTAL")
+	XSM.Timer:SetMinMaxValues(0,100)
+	XSM.Timer:SetStatusBarColor(1.0,0.0,0.0,1.0)
+	XSM.Timer:SetStatusBarTexture("Interface\\TargetingFrame\\UI-StatusBar")
+	XSM.Timer:SetValue(0)
+	XSM.Timer:SetPoint("TOPLEFT",XSM.Status,"BOTTOMLEFT",0,0)
+	XSM.Timer:SetPoint("RIGHT")
+	XSM.Timer:SetScript("OnUpdate",function(self,elapsed)
+		if not XSM.AuraActivated then return end
+		XSM.AuraCounter = XSM.AuraCounter + elapsed
+		XSM.AuraLeft = XSM.AuraDuration - XSM.AuraCounter
+		XSM.Timer.Caption:SetText(string.format("%0.2d",XSM.AuraLeft))
+		local percLeft = (( XSM.AuraLeft / XSM.AuraDuration ) * 100 )
+		XSM.Timer:SetValue(percLeft)
+		HealthBar_OnValueChanged(XSM.Timer,percLeft,true)
+		if ( XSM.AuraCounter and XSM.AuraCounter >= XSM.AuraDuration ) then
+			XSM.AuraActivated = false
+			XSM:CheckAura("player")
+		end
+	end)
+	XSM.Timer:Show()
+end
+
+-- Check the Aura Duration for the Shield Spell and update the timers accordingly
+XSM.CheckAura = function(self,...)
+	if ( XSM.AuraActivated ) then return end
+	XSM.AuraStart, XSM.AuraDuration, XSM.AuraCounter, XSM.AuraEnabled,XSM.AuraActivated = 0,0,0,0,false
+	XSM.AuraActivated = false
+	for i = 1,40 do
+		local name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, canStealOrPurge, shouldConsolidate, spellId, canApplyAura, isBossDebuff, isCastByPlayer, auraData1,auraData2,auraData3 = UnitAura("player",i,"PLAYER HELPFUL")
+		if ( not name ) then break end
+		if tContains(XSM.ShieldSpells,spellId) then
+--			print(i,spellId,name)
+			if ( XSM.AuraActivated == false ) then
+				XSM.AuraStart = GetTime()
+				XSM.AuraDuration = expirationTime - GetTime()
+				XSM.AuraEnabled = true
+				XSM.AuraCounter = 0
+				XSM.AuraActivated = true
+				XSM.Spell = spellId
+				XSM.Icon.Texture:SetTexture(GetSpellTexture(spellId))
+			end
+		end
+	end
+	CooldownFrame_SetTimer(XSM.Icon.Duration,XSM.AuraStart,XSM.AuraDuration,XSM.AuraEnabled)
+end
+
+-- Check the Absorb Value as this will affect the shield status
+XSM.CheckAbsorbs = function(self,...)
+	local args = { ... }
+	XSM.MaxAbsorb = XSM.MaxAbsorb or UnitGetTotalAbsorbs(args[1]) or 0
+	XSM.CurrAbsorb = UnitGetTotalAbsorbs(args[1]) or 0
+	if ( XSM.CurrAbsorb > XSM.MaxAbsorb ) then XSM.MaxAbsorb = XSM.CurrAbsorb end
+	XSM.PercAbsorb = ((XSM.CurrAbsorb / XSM.MaxAbsorb) * 100) or 0
+	if XSM.PercAbsorb < 0 then XSM.MaxAbsorb = 0 end
+	XSM.Status:SetValue( XSM.PercAbsorb )
+	HealthBar_OnValueChanged(XSM.Status,XSM.PercAbsorb,true)
+	XSM.Status.Caption:SetText(XSM.CurrAbsorb .. "/" .. XSM.MaxAbsorb .. " (" .. string.format("%0.2d",XSM.PercAbsorb) .. "% )")
+	XSM.LastAbsorb = XSM.CurrAbsorb
+end
+
+-- Check the shield spell cooldown
+XSM.CheckCooldowns = function(self,...)
+	for i,v in pairs(XSM.ShieldSpells) do
+		local start, duration, enabled = GetSpellCooldown(v)
+		local name = GetSpellInfo(v)
+		print(i,v,name,start,duration,enabled, start > 0 and GetTime() - start or 0)
+	end
+	if XSM.CDActivated then return end
+	XSM.CDStart, XSM.CDDuration, XSM.CDEnabled, XSM.CDActivated = nil,nil,nil,false
+	XSM.CDStart, XSM.CDDuration, XSM.CDEnabled = GetSpellCooldown(GetSpellInfo(ShieldSpell))
+	if not XSM.CDEnabled then return end
+	if ( XSM.CDDuration ~= nil and XSM.CDDuration > 2 ) then
+		XSM.CDCounter = 0
+		XSM.CDActivated = true
+	end
+	if XSM.CDActivated then CooldownFrame_SetTimer(XSM.Icon.Cooldown,XSM.CDStart,XSM.CDDuration,XSM.CDEnabled) end
+end
+
+-- check any events and deal with accordingly
+XSM.Events:SetScript("OnEvent",function(self,event,...)
+	local args = { ... }
+	if ( event == "ADDON_LOADED" and args[1] == addonName ) then
+		XSM:CreateFrames()
+	elseif ( event == "UNIT_AURA" ) then
+		print(event,...)
+		XSM:CheckAura(...)
+		XSM:CheckCooldowns(...)
+	elseif ( event == "UNIT_ABSORB_AMOUNT_CHANGED" ) then
+		print(event,...)
+		XSM:CheckAbsorbs(...)
+	elseif ( event == "SPELL_UPDATE_COOLDOWN" ) then
+		print(event,...)
+		XSM:CheckAura(...)
+		XSM:CheckCooldowns(...)
+	end
+end)
+
+XSM.Events:RegisterEvent("ADDON_LOADED")
+XSM.Events:RegisterUnitEvent("UNIT_AURA","player")
+XSM.Events:RegisterUnitEvent("UNIT_ABSORB_AMOUNT_CHANGED","player")
+XSM.Events:RegisterEvent("SPELL_UPDATE_COOLDOWN")
diff --git a/XShieldMonitor.toc b/XShieldMonitor.toc
index 58429de..3a76bd6 100644
--- a/XShieldMonitor.toc
+++ b/XShieldMonitor.toc
@@ -1,7 +1,7 @@
 ## Interface: 50400
 ## Title: Xrystal Shield Monitor
 ## Author: Tina Kirby / Gwynedda / Sen'Jin
-## Version: 5.4.0.17399 ( 0.0.2 alpha )
+## Version: 5.4.0.17399 ( 0.0.3 alpha )
 ## eMail: xrystal@swangen.co.uk
 ## Notes: Monitors Absorption Shields. -- Copyright (c) 2013 by Tina Kirby -- All Rights Reserved
 ## OptionalDeps: