Quantcast

various fixes for default scripts

Sidoine De Wispelaere [09-18-11 - 13:45]
various fixes for default scripts
added spell list, harmful, and helpful parameters to IsCasting
added remainingCastTime value
added second icon scale option

git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@419 d5049fe3-3747-40f7-a4b5-f36d6801af5f
Filename
Condition.lua
Ovale.lua
OvaleFrame.lua
defaut/Chasseur.lua
defaut/Druide.lua
defaut/Guerrier.lua
defaut/Pretre.lua
defaut/Voleur.lua
diff --git a/Condition.lua b/Condition.lua
index 585dff3..5030548 100644
--- a/Condition.lua
+++ b/Condition.lua
@@ -630,9 +630,26 @@ Ovale.conditions=
 		local spellId = condition.spell
 		if not spellId then
 			return testbool(UnitCastingInfo(target) or UnitChannelInfo(target), condition[1])
-		else
+		elseif type(spellId) == "number" then
 			local spellName = GetSpellInfo(spellId)
 			return testbool(UnitCastingInfo(target)==spellName or UnitChannelInfo(target) == spellName, condition[1])
+		elseif Ovale.buffSpellList[spellId] then
+			local castSpellName = UnitCastingInfo(target) or UnitChannelInfo(target)
+			local found = false
+			for k,v in pairs(Ovale.buffSpellList[spellId]) do
+				local spellName = GetSpellInfo(v)
+				if spellName == castSpellName then
+					found = true
+					break
+				end
+			end
+			return testbool(found, condition[1])
+		elseif spellId == "harmful" then
+			local castSpellName = UnitCastingInfo(target) or UnitChannelInfo(target)
+			return testbool(castSpellName and IsHarmfulSpell(castSpellName), condition[1])
+		elseif spellId == "helpful" then
+			local castSpellName = UnitCastingInfo(target) or UnitChannelInfo(target)
+			return testbool(castSpellName and IsHelpfulSpell(castSpellName), condition[1])
 		end
 	end,
 	IsFeared = function(condition)
@@ -896,6 +913,13 @@ Ovale.conditions=

 		return compare(difference, condition[1], condition[2])
 	end,
+	remainingCastTime = function(condition)
+		local name, nameSubtext, text, texture, startTime, endTime, isTradeSkill, castID, notInterruptible = UnitCastingInfo(getTarget(condition.target))
+		if not endTime then
+			return nil
+		end
+		return 0, endTime/1000, -1
+	end,
 	SoulShards = function(condition)
 		return compare(Ovale.state.shard, condition[1], condition[2])
 	end,
diff --git a/Ovale.lua b/Ovale.lua
index 221c838..42bcd87 100644
--- a/Ovale.lua
+++ b/Ovale.lua
@@ -210,6 +210,9 @@ Ovale.buffSpellList =
 		12880, -- Enrage (rank 1)
 		14201, -- Enrage (rank 2)
 		14202, -- Enrage (rank 3)
+		5229, -- Enrage (Bear)
+        52610, -- Savage Roar (Cat)
+        76691, -- Vengeance (All Tank Specs)
 	}
 }

@@ -272,6 +275,15 @@ local options =
 					get = function(info) return Ovale.db.profile.apparence.iconScale end,
 					set = function(info,value) Ovale.db.profile.apparence.iconScale = value; Ovale:UpdateFrame() end
 				},
+				secondIconScale =
+				{
+					order = 2.5,
+					type = "range",
+					name = L["Taille du second icône"],
+					min = 0.2, max = 1, step = 0.1,
+					get = function(info) return Ovale.db.profile.apparence.secondIconScale end,
+					set = function(info,value) Ovale.db.profile.apparence.secondIconScale = value; Ovale:UpdateFrame() end
+				},
 				fontScale =
 				{
 					order = 3,
@@ -1997,7 +2009,7 @@ function Ovale:CalculerMeilleureAction(element)
 				for k,v in pairs(element.params) do
 					parameterList = parameterList..k.."="..v..","
 				end
-				self:Print("Function "..parameterList..") returned "..nilstring(start)..","..nilstring(ending))
+				self:Print("Function "..parameterList..") returned "..nilstring(start)..","..nilstring(ending)..","..nilstring(rate))
 			end

 			return start, ending, rate
@@ -2330,7 +2342,7 @@ function Ovale:ChargerDefaut()
 			top = 500,
 			check = {},
 			list = {},
-			apparence = {enCombat=false, iconScale = 2, margin = 4, fontScale = 0.5, iconShiftX = 0, iconShiftY = 0,
+			apparence = {enCombat=false, iconScale = 2, secondIconScale = 1, margin = 4, fontScale = 0.5, iconShiftX = 0, iconShiftY = 0,
 				smallIconScale=1, raccourcis=true, numeric=false, avecCible = false,
 				verrouille = false, vertical = false, predictif=false, highlightIcon = true, clickThru = false,
 				latencyCorrection=true, hideVehicule=true, flashIcon=true, targetText = "●", alpha = 1,
diff --git a/OvaleFrame.lua b/OvaleFrame.lua
index dbdde3a..89b7e62 100644
--- a/OvaleFrame.lua
+++ b/OvaleFrame.lua
@@ -324,8 +324,12 @@ do
 					action.icons[l] = CreateFrame("CheckButton", "Icon"..k.."n"..l,self.frame,"OvaleIcone");
 				end
 				local icon = action.icons[l]
-				icon:SetPoint("TOPLEFT",self.frame,"TOPLEFT",(action.left + (l-1)*action.dx)/action.scale,(action.top - (l-1)*action.dy)/action.scale)
-				icon:SetScale(action.scale)
+				local scale = action.scale
+				if l> 1 then
+					scale = scale  * Ovale.db.profile.apparence.secondIconScale
+				end
+				icon:SetPoint("TOPLEFT",self.frame,"TOPLEFT",(action.left + (l-1)*action.dx)/scale,(action.top - (l-1)*action.dy)/scale)
+				icon:SetScale(scale)
 				icon:SetFontScale(Ovale.db.profile.apparence.fontScale)
 				icon:SetHelp(node.params.help)
 				icon:SetRangeIndicator(Ovale.db.profile.apparence.targetText)
diff --git a/defaut/Chasseur.lua b/defaut/Chasseur.lua
index 1bf6f12..4d89fec 100644
--- a/defaut/Chasseur.lua
+++ b/defaut/Chasseur.lua
@@ -142,7 +142,7 @@ AddIcon help=main mastery=2
 	if Glyph(GLYPHOFARCANESHOT)
 	{
 		#/aimed_shot,if=target.health_pct>80|buff.rapid_fire.up|buff.bloodlust.up
-		if TargetLifePercent(more 80) or
+		if TargetLifePercent(more 90) or
 			BuffPresent(RAPIDFIRE) or BuffPresent(heroism) if Mana(more 49) Spell(AIMEDSHOT)
         #/arcane_shot,if=(focus>=66|cooldown.chimera_shot.remains>=5)&(target.health_pct<90&!buff.rapid_fire.up&!buff.bloodlust.up)
 		if {Mana(more 65) or spell(CHIMERASHOT)>5} and {TargetLifePercent(less 90) and
diff --git a/defaut/Druide.lua b/defaut/Druide.lua
index fc76978..c435151 100644
--- a/defaut/Druide.lua
+++ b/defaut/Druide.lua
@@ -153,7 +153,7 @@ AddIcon help=main mastery=1
 			Spell(SUNFIRE nored=1)

 		#/moonfire,if=(!ticking|ticks_remain<2|(dot.moonfire.remains<4&buff.lunar_eclipse.up&eclipse>-20))
-		if BuffExpires(ECLIPSELUNAR 0) and {TargetDebuffExpires(MOONFIRE 2 mine=1) or {TargetDebuffExpires(MOONFIRE 4 mine=1) and Eclipse(more -20)}}
+		if {TargetDebuffExpires(MOONFIRE 2 mine=1) or {TargetDebuffExpires(MOONFIRE 4 mine=1) and Eclipse(more -20)}}
 				and TargetDebuffExpires(SUNFIRE 0 mine=1)
 			Spell(MOONFIRE nored=1)
 	}
@@ -234,7 +234,7 @@ AddIcon help=main mastery=2
 			Spell(MANGLECAT)

 		#ravage,if=buff.stampede_cat.up&buff.stampede_cat.remains<=1
-		if BuffPresent(STAMPEDE) and BuffExpires(STAMPEDE 1) Spell(RAVAGE)
+		if BuffPresent(STAMPEDE) and BuffExpires(STAMPEDE 1) and CheckBoxOn(shred) Spell(RAVAGE)

 		#ferocious_bite,if=buff.combo_points.stack>=1&dot.rip.ticking&dot.rip.remains<=1&target.health_pct<=25
 		if ComboPoints(more 0) and TargetDebuffPresent(RIP mine=1) and TargetDebuffExpires(RIP 1 mine=1) and TargetLifePercent(less 25)
@@ -245,7 +245,7 @@ AddIcon help=main mastery=2
 			Spell(FEROCIOUSBITE)

 		#/shred,extend_rip=1,if=dot.rip.ticking&dot.rip.remains<=4&target.health_pct>25  TODO: extend_rip=1?
-		if TargetDebuffPresent(RIP mine=1) and TargetDebuffExpires(RIP 4 mine=1) and TargetLifePercent(more 25) Spell(SHRED)
+		if TargetDebuffPresent(RIP mine=1) and TargetDebuffExpires(RIP 4 mine=1) and TargetLifePercent(more 25) and CheckBoxOn(shred) Spell(SHRED)

 		#rip,if=buff.combo_points.stack>=5&target.time_to_die>=6&dot.rip.remains<2.0&(buff.berserk.up|dot.rip.remains<=cooldown.tigers_fury.remains)
 		if ComboPoints(more 4) and TargetDeadIn(more 6) and TargetDebuffExpires(RIP 2 mine=1) and
@@ -265,7 +265,7 @@ AddIcon help=main mastery=2
 			Spell(RAKE)

 		#shred,if=buff.omen_of_clarity.react
-		if BuffPresent(CLEARCASTING) Spell(SHRED)
+		if CheckBoxOn(shred) and BuffPresent(CLEARCASTING) Spell(SHRED)

 		#savage_roar,if=buff.combo_points.stack>=1&buff.savage_roar.remains<=1
 		if ComboPoints(more 0) and BuffExpires(SAVAGEROAR 1) Spell(SAVAGEROAR)
@@ -274,18 +274,22 @@ AddIcon help=main mastery=2
 		if {TargetDeadIn(less 4) and ComboPoints(more 4)} or {TargetDeadIn(less 1) and ComboPoints(more 0)} Spell(FEROCIOUSBITE)
 		#/ferocious_bite,if=buff.combo_points.stack>=5&dot.rip.remains>=14.0&buff.savage_roar.remains>=10.0
 		if ComboPoints(more 4) and TargetDebuffPresent(RIP 14 mine=1) and BuffPresent(SAVAGEROAR 10) Spell(FEROCIOUSBITE)
-		#ravage,if=buff.stampede_cat.up&!buff.omen_of_clarity.react&buff.tigers_fury.up
-		if BuffPresent(STAMPEDE) and BuffExpires(CLEARCASTING) and BuffPresent(TIGERSFURY) Spell(RAVAGE)
-		#/shred,if=buff.tigers_fury.up|buff.berserk.up
-		if BuffPresent(TIGERSFURY) or BuffPresent(BERSERK) Spell(SHRED)
-        #/shred,if=(buff.combo_points.stack<5&dot.rip.remains<3.0)|(buff.combo_points.stack=0&buff.savage_roar.remains<2
-		if {ComboPoints(less 5) and TargetDebuffExpires(RIP 3 mine=1)} or {ComboPoints(less 1) and BuffExpires(SAVAGEROAR 2)} Spell(SHRED)
-        #/shred,if=cooldown.tigers_fury.remains<=3.0
-		if spell(TIGERSFURY) < 3 Spell(SHRED)
-        #/shred,if=target.time_to_die<=8.5
-		if TargetDeadIn(less 8.5) Spell(SHRED)
-        #/shred,if=time_to_max_energy<=1.0
-		if 1s before Mana(more 99) Spell(SHRED)
+		if CheckBoxOn(shred)
+		{
+			#ravage,if=buff.stampede_cat.up&!buff.omen_of_clarity.react&buff.tigers_fury.up
+			if BuffPresent(STAMPEDE) and BuffExpires(CLEARCASTING) and BuffPresent(TIGERSFURY) Spell(RAVAGE)
+			#/shred,if=buff.tigers_fury.up|buff.berserk.up
+			if BuffPresent(TIGERSFURY) or BuffPresent(BERSERK) Spell(SHRED)
+			#/shred,if=(buff.combo_points.stack<5&dot.rip.remains<3.0)|(buff.combo_points.stack=0&buff.savage_roar.remains<2
+			if {ComboPoints(less 5) and TargetDebuffExpires(RIP 3 mine=1)} or {ComboPoints(less 1) and BuffExpires(SAVAGEROAR 2)} Spell(SHRED)
+			#/shred,if=cooldown.tigers_fury.remains<=3.0
+			if spell(TIGERSFURY) < 3 Spell(SHRED)
+			#/shred,if=target.time_to_die<=8.5
+			if TargetDeadIn(less 8.5) Spell(SHRED)
+			#/shred,if=time_to_max_energy<=1.0
+			if 1s before Mana(more 99) Spell(SHRED)
+		}
+		if CheckBoxOff(shred) and ComboPoints(less 5) Spell(MANGLE)
 	}
 }

diff --git a/defaut/Guerrier.lua b/defaut/Guerrier.lua
index 1e687c6..28ea181 100644
--- a/defaut/Guerrier.lua
+++ b/defaut/Guerrier.lua
@@ -76,8 +76,6 @@ Define(REVENGE 6572)
 Define(SHATTERINGTHROW 64382)
 	SpellInfo(SHATTERINGTHROW cd=300)
 	SpellAddTargetDebuff(SHATTERINGTHROW SHATTERINGTHROW=10)
-Define(SHIELDBASH 72)
-	SpellInfo(SHIELDBASH cd=12)
 Define(SHIELDBLOCK 2565)
 	SpellInfo(SHIELDBLOCK cd=60)
 	SpellAddBuff(SHIELDBLOCK SHIELDBLOCK=10)
@@ -303,7 +301,7 @@ AddIcon help=main mastery=3

 AddIcon help=offgcd mastery=3
 {
-	if target.IsInterruptible() Spell(SHIELDBASH)
+	if target.IsInterruptible() Spell(PUMMEL)
 	if CheckBoxOn(multi) Spell(CLEAVE)
 	if Mana(more 35) Spell(HEROICSTRIKE)
 }
diff --git a/defaut/Pretre.lua b/defaut/Pretre.lua
index a47a1a8..3f77192 100644
--- a/defaut/Pretre.lua
+++ b/defaut/Pretre.lua
@@ -12,50 +12,50 @@ Define(EMPOWEREDSHADOW 95799)

 #Spells
 Define(DEVOURINGPLAGUE 2944) # Devouring Plague
-	SpellInfo(DEVOURINGPLAGUE duration=24 durationhaste=spell)
-	SpellAddTargetDebuff(DEVOURINGPLAGUE DEVOURINGPLAGUE=24)
-
+    SpellInfo(DEVOURINGPLAGUE duration=24 durationhaste=spell)
+    SpellAddTargetDebuff(DEVOURINGPLAGUE DEVOURINGPLAGUE=24)
+
 Define(DISPERSION 47585)
-	SpellInfo(DISPERSION cd=120)
-	SpellInfo(DISPERSION addcd=-45 glyph=63229)
-
+    SpellInfo(DISPERSION cd=120)
+    SpellInfo(DISPERSION addcd=-45 glyph=63229)
+
 Define(INNERFIRE 588) # Inner Fire
-	SpellAddBuff(INNERFIRE INNERFIRE=1800)
-
+    SpellAddBuff(INNERFIRE INNERFIRE=1800)
+
 Define(INNERWILL 73413) # Inner Will
-	SpellAddBuff(INNERWILL INNERWILL=1800)
-
+    SpellAddBuff(INNERWILL INNERWILL=1800)
+
 Define(MINDBLAST 8092) # Mind Blast
-	SpellInfo(MINDBLAST cd=5.5)
-	SpellAddBuff(MINDBLAST SHADOW_ORBS=0)
-	SpellAddBuff(MINDBLAST EMPOWEREDSHADOW=15)
-
+    SpellInfo(MINDBLAST cd=6.5)
+    SpellAddBuff(MINDBLAST SHADOW_ORBS=0)
+    SpellAddBuff(MINDBLAST EMPOWEREDSHADOW=15)
+
 Define(MINDFLAY 15407) # Mind Flay
-
+
 Define(SHADOWFIEND 34433)
-	SpellInfo(SHADOWFIEND cd=300)
-
+    SpellInfo(SHADOWFIEND cd=300)
+
 Define(SHADOWFORM 15473) # Shadowform

 Define(SHADOWWORDPAIN 589) # Shadow Word: Pain
-	SpellInfo(SHADOWWORDPAIN duration=18)
-	SpellAddTargetDebuff(SHADOWWORDPAIN SHADOWWORDPAIN=18)
-
+    SpellInfo(SHADOWWORDPAIN duration=18)
+    SpellAddTargetDebuff(SHADOWWORDPAIN SHADOWWORDPAIN=18)
+
 Define(VAMPIRICEMBRACE 15286) # Vampiric Embrace

 Define(VAMPIRICTOUCH 34914) # Vampiric Touch
-	SpellInfo(VAMPIRICTOUCH duration=15 durationhaste=spell)
-	SpellAddTargetDebuff(VAMPIRICTOUCH VAMPIRICTOUCH=15)
-
+    SpellInfo(VAMPIRICTOUCH duration=15 durationhaste=spell)
+    SpellAddTargetDebuff(VAMPIRICTOUCH VAMPIRICTOUCH=15)
+
 Define(MINDSPIKE 73510) # Mind Spike
-	# TODO : add talent condition for MIND_MELT
-	SpellAddBuff(MINDSPIKE MINDSPIKEEFFECT=12 MINDMELT=6)
-
+    # TODO : add talent condition for MIND_MELT
+    SpellAddBuff(MINDSPIKE MINDSPIKEEFFECT=12 MINDMELT=6)
+
 Define(SHADOWWORDDEATH 32379) # Shadow Word : Death

 Define(ARCHANGEL 87151) #Archangel
-	SpellInfo(ARCHANGEL cd=90)
-	SpellAddBuff(ARCHANGEL DARKARCHANGEL=18)
+    SpellInfo(ARCHANGEL cd=90)
+    SpellAddBuff(ARCHANGEL DARKARCHANGEL=18)

 ### end defines ###

@@ -64,96 +64,86 @@ ScoreSpells(MINDBLAST SHADOWWORDPAIN VAMPIRICTOUCH DEVOURINGPLAGUE MINDFLAY SHAD
 # Add main monitor
 AddIcon help=main mastery=3
 {
-	#Check shadowform is up
-	unless BuffPresent(SHADOWFORM) Spell(SHADOWFORM)
-
-	unless InCombat()
-	{
-		# Refresh inner fire  and vampiric embrace 5 minutes before it drops when out of combat
-		if BuffExpires(INNERFIRE 300) unless BuffPresent(INNERWILL) Spell(INNERFIRE)
-		if BuffExpires(INNERWILL 300) unless BuffPresent(INNERFIRE) Spell(INNERWILL)
-		if BuffExpires(VAMPIRICEMBRACE 300) Spell(VAMPIRICEMBRACE)
-	}
-
-	# Refresh inner fire and vampiric embrace if they drop during the fight
-	if BuffExpires(INNERFIRE 5) unless BuffPresent(INNERWILL) Spell(INNERFIRE)
-	if BuffExpires(INNERWILL 5) unless BuffPresent(INNERFIRE) Spell(INNERWILL)
-
-	if BuffExpires(VAMPIRICEMBRACE 5) Spell(VAMPIRICEMBRACE)
-
-	#if your rotation isn't set up and the target has few seconds to live, use MIND_SPIKE instead of normal rotation
+
+    #Check shadowform is up
+    unless BuffPresent(SHADOWFORM) Spell(SHADOWFORM)
+
+    unless InCombat()
+    {
+        # Refresh inner fire  and vampiric embrace 5 minutes before it drops when out of combat
+        if BuffExpires(INNERFIRE 300) unless BuffPresent(INNERWILL) Spell(INNERFIRE)
+        if BuffExpires(INNERWILL 300) unless BuffPresent(INNERFIRE) Spell(INNERWILL)
+        if BuffExpires(VAMPIRICEMBRACE 300) Spell(VAMPIRICEMBRACE)
+    }
+
+    # Refresh inner fire and vampiric embrace if they drop during the fight
+    if BuffExpires(INNERFIRE 5) unless BuffPresent(INNERWILL) Spell(INNERFIRE)
+    if BuffExpires(INNERWILL 5) unless BuffPresent(INNERFIRE) Spell(INNERWILL)
+
+	#if your rotation isn't set up and the target has few seconds to live, use MIND_SPIKE instead of normal rotation
 	if TargetDebuffExpires(SHADOWWORDPAIN 0 mine=1) and TargetDeadIn(less 10)
 	{
 		if BuffPresent(MINDSPIKE stacks=3) or BuffPresent(MINDMELT stacks=2) Spell(MINDBLAST)
 		Spell(MINDSPIKE)
 	}
-
-	if BuffPresent(DARKARCHANGEL) #specific DD-based rotation when under Dark Archangel
-	{
-		#Use SHADOWWORDDEATH if we have enough life left
-		if TargetLifePercent(less 25) and LifePercent(more 20) Spell(SHADOWWORDDEATH)
-
-		#Use MIND_BLAST on CD
-		if BuffPresent(SHADOWORBS stacks=1) Spell(MINDBLAST)
-
-		#Fill with MIND_FLAY
-		Spell(MINDFLAY priority=2)
-	}
-
+
 	#Refresh empowered shadows
 	if BuffPresent(SHADOWORBS stacks=1) and BuffExpires(EMPOWEREDSHADOW 2) Spell(MINDBLAST)

-	#Set up / refresh the dots
 	if TargetDebuffExpires(SHADOWWORDPAIN 0 mine=1) and TargetDeadIn(more 10) Spell(SHADOWWORDPAIN)
 	if TargetDebuffExpires(SHADOWWORDPAIN 2 mine=1) and TargetDeadIn(more 6) Spell(MINDFLAY)
 	if TargetDebuffExpires(VAMPIRICTOUCH 3 mine=1 haste=spell) and TargetDeadIn(more 8) Spell(VAMPIRICTOUCH)
-
+
 	# refresh DEVOURING_PLAGUE only if it is not ticking on another mob
 	unless OtherDebuffPresent(DEVOURINGPLAGUE)
 	{
-		if TargetDebuffExpires(DEVOURINGPLAGUE 2 mine=1) and TargetDeadIn(more 8) Spell(DEVOURINGPLAGUE)
+	 if TargetDebuffExpires(DEVOURINGPLAGUE 2 mine=1) and TargetDeadIn(more 8) Spell(DEVOURINGPLAGUE)
 	}

+	if TargetDeadIn(more 15) Spell(SHADOWFIEND)
+
+	#Use SHADOW_WORD_DEATH if we need mana
+	if ManaPercent(less 25) Spell(SHADOWWORDDEATH)
+
 	#Use SHADOW_WORD_DEATH if we have enough life left and it is more useful than MIND_BLAST
 	if TargetLifePercent(less 25) and LifePercent(more 20) Spell(SHADOWWORDDEATH)
-
-	# Launch the fiend
-	if TargetDeadIn(more 15) and ManaPercent(less 75) Spell(SHADOWFIEND)
-
-	#Use MIND_BLAST when orbs are at 1 or more stack
-	if BuffPresent(SHADOWORBS stacks=1) Spell(MINDBLAST)
-
+
+	Spell(MINDBLAST)
+
 	#Fill with MIND_FLAY
 	Spell(MINDFLAY priority=2)
 }

+#Tricket Cooldowns, and making sure DP and VT have at least 5 seconds left before casting Dark Angel
 AddIcon help=cd
 {
-        #Check that you won't have to reapply dots during DA
-	if BuffPresent(EVANGELISM stacks=5) and TargetDebuffPresent(DEVOURINGPLAGUE 18 mine=1) and TargetDebuffPresent(VAMPIRICTOUCH 13 mine=1) Spell(ARCHANGEL)
-	Item(Trinket0Slot usable=1)
-	Item(Trinket1Slot usable=1)
+    #Check that you won't have to reapply dots during DA
+    if BuffPresent(EVANGELISM stacks=5) and TargetDebuffPresent(DEVOURINGPLAGUE 5 mine=1) and TargetDebuffPresent(VAMPIRICTOUCH 5 mine=1) Spell(ARCHANGEL)
+    Item(Trinket0Slot usable=1)
+    Item(Trinket1Slot usable=1)
 }
-
+
+
 # Add mana monitor
 AddIcon help=mana mastery=3
 {
-	if LifePercent(less 10)
-	{
-		Spell(DISPERSION)
-		Item(36892) #Health stone
-		Item(36893)
-		Item(36894)
-		Item(33447) #Life potion (lvl 80)
+    if LifePercent(less 10)
+    {
+        Item(36892) #Health stone
+        Spell(DISPERSION)

-	}
-	if ManaPercent(less 80) Spell(SHADOWWORDDEATH)
-	if ManaPercent(less 5)
-	{
-		Spell(DISPERSION)
-		Item(33448) #Mana potion (lvl 80)
-	}
+    }
+    if ManaPercent(less 25)
+    {
+        Spell(DISPERSION)
+    }
 }

+#    Add Focus Target Monitor for Multi Dotting
+AddIcon mastery =3
+{
+        if TargetDebuffExpires(SHADOWWORDPAIN 1.5 mine=1 target=focus ) and TargetDeadIn(more 10) Spell(SHADOWWORDPAIN target=focus)
+        if TargetDebuffExpires(VAMPIRICTOUCH 3 mine=1 haste=spell target=focus) and TargetDeadIn(more 8) Spell(VAMPIRICTOUCH target=focus)
+}

 ]]
diff --git a/defaut/Voleur.lua b/defaut/Voleur.lua
index 55a8b8f..1ce1fa9 100644
--- a/defaut/Voleur.lua
+++ b/defaut/Voleur.lua
@@ -83,6 +83,7 @@ Define(DEADLYPOISON 2892)
 #Talents
 Define(TALENTCUTTOTHECHASE 2070)
 Define(TALENTENERGETICRECOVERY 11665)
+Define(TALENTHEMORRHAGE 681)

 SpellList(insight 84745 84746 84747)

@@ -226,10 +227,16 @@ AddIcon help=main mastery=3
 	#/eviscerate,if=combo_points=5&dot.rupture.remains>1
 	if ComboPoints(more 4) and TargetDebuffPresent(RUPTURE 1 mine=1) Spell(EVISCERATE)

-	#/backstab,if=combo_points<3&energy>60";
-	if ComboPoints(less 3) and Mana(more 60) Spell(BACKSTAB)
+	if TalentPoints(TALENTHEMORRHAGE more 0)
+	{
+		#/hemorrhage,if=combo_points<4&energy>40&dot.hemorrhage.remains<4";
+		if CombotPoints(less 4) and Mana(more 40) and TargetDebuffExpires(HEMORRHAGE 4 mine=1) Spell(HEMORRHAGE)
+        #/hemorrhage,if=combo_points<5&energy>80&dot.hemorrhage.remains<4";
+		if CombotPoints(less 5) and Mana(more 80) and TargetDebuffExpires(HEMORRHAGE 4 mine=1) Spell(HEMORRHAGE)
+	}
+
 	#/backstab,if=combo_points<4&energy>40&energy<80";
-	if ComboPoints(less 4) and Mana(more 40) and Mana(less 80) Spell(BACKSTAB)
+	if ComboPoints(less 4) and Mana(more 40) Spell(BACKSTAB)
 	#/backstab,if=combo_points<5&energy>80
 	if ComboPoints(less 5) and Mana(more 80) Spell(BACKSTAB)
 }