Quantcast

- added click through option

Sidoine De Wispelaere [01-26-10 - 19:48]
- added click through option
- better buffnocd support
- stacks more than 1 spell when lagging
- warlock: drain soul can be interrupted
- shadow priest: bug with vampiric touch
- death knight: does not show Icy Touch if Glyph of Howling Blast
- hunter; buffnocd allows better lock and load modeling / show dragonhawk when full mana

git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@215 d5049fe3-3747-40f7-a4b5-f36d6801af5f
Filename
Locale-enUS.lua
Locale-frFR.lua
Ovale.lua
OvaleFrame.lua
OvaleIcone.lua
defaut/Chasseur.lua
defaut/Chevalier.lua
defaut/Demoniste.lua
defaut/Pretre.lua
diff --git a/Locale-enUS.lua b/Locale-enUS.lua
index 8a761d3..3905f5b 100644
--- a/Locale-enUS.lua
+++ b/Locale-enUS.lua
@@ -43,4 +43,5 @@ L["Défilement"] = "Scrolling"
 L["Les icônes se déplacent"] = "Scroll the icons"
 L["multidot"] = "Damage Over Time on multiple targets"
 L["buff"] = "Buffs"
-L["Inverser la boîte à cocher "] = "Toggle check box"
\ No newline at end of file
+L["Inverser la boîte à cocher "] = "Toggle check box"
+L["Ignorer les clics souris"] = "Ignore mouse clicks"
\ No newline at end of file
diff --git a/Locale-frFR.lua b/Locale-frFR.lua
index 9e724cb..a1bdcbd 100644
--- a/Locale-frFR.lua
+++ b/Locale-frFR.lua
@@ -43,4 +43,5 @@ L["Défilement"] = true
 L["Les icônes se déplacent"] = true
 L["multidot"] = "Multicible pour DoTs"
 L["buff"] = "Améliorations"
-L["Inverser la boîte à cocher "] = true
\ No newline at end of file
+L["Inverser la boîte à cocher "] = true
+L["Ignorer les clics souris"] = true
\ No newline at end of file
diff --git a/Ovale.lua b/Ovale.lua
index 2b551af..9e3a441 100644
--- a/Ovale.lua
+++ b/Ovale.lua
@@ -36,8 +36,7 @@ Ovale.score = 0
 Ovale.maxScore = 0
 Ovale.serial = 0
 Ovale.counter = {}
-Ovale.lastSpellName = nil
-Ovale.lastSpellTime = 0
+Ovale.lastSpell = {}

 Ovale.arbre = {}

@@ -217,6 +216,14 @@ local options =
 					get = function(info) return Ovale.db.profile.apparence.highlightIcon end,
 					set = function(info, value) Ovale.db.profile.apparence.highlightIcon = value; Ovale:UpdateFrame() end
 				},
+				clickThru =
+				{
+					order = 15,
+					type = "toggle",
+					name = L["Ignorer les clics souris"],
+					get = function(info) return Ovale.db.profile.apparence.clickThru end,
+					set = function(info, value) Ovale.db.profile.apparence.clickThru = value; Ovale:UpdateFrame() end
+				}
 			}
 		},
 		code =
@@ -361,8 +368,12 @@ function Ovale:COMBAT_LOG_EVENT_UNFILTERED(event, ...)
 		if sourceName == UnitName("player") then
 			if string.find(event, "SPELL_") == 1 then
 				local spellId, spellName = select(9, ...)
-				if spellName == self.lastSpellName then
-					self.lastSpellName = nil
+				for i,v in ipairs(self.lastSpell) do
+					if v.name == spellName then
+						self:Print("on supprime " ..spellName.." a "..time)
+						table.remove(self.lastSpell, i)
+						break
+					end
 				end
 			end
 			if string.find(event, "SPELL_AURA_") == 1 then
@@ -587,8 +598,18 @@ end
 function Ovale:UNIT_SPELLCAST_SENT(event,unit,name,rank,target)
 --	self:Print("UNIT_SPELLCAST_SENT"..event.." unit="..unit.." name="..name.." tank="..rank.." target="..target)
 	if unit=="player" then
-		self.lastSpellName = name
-		self.lastSpellTime = GetTime()
+		local newSpell = {}
+		newSpell.name = name
+		newSpell.time = GetTime()
+		local si = self.spellInfo[name]
+
+		if si and si.buffnocd and UnitBuff("player", GetSpellInfo(si.buffnocd)) then
+			newSpell.nocd = true
+		else
+			newSpell.nocd = false
+		end
+		self.lastSpell[#self.lastSpell+1] = newSpell
+--		self:Print("on ajoute "..name.." a ".. GetTime())
 	end

 	if unit=="player" and self.enCombat then
@@ -920,7 +941,15 @@ function Ovale:GetCD(spellName)
 	end
 end

-function Ovale:AddSpellToStack(spellName, startCast, endCast, nextCast)
+local function nilstring(text)
+	if text == nil then
+		return "nil"
+	else
+		return text
+	end
+end
+
+function Ovale:AddSpellToStack(spellName, startCast, endCast, nextCast, nocd)
 --	self.spellStack.length = self.spellStack.length + 1
 --	if not self.spellStack[self.spellStack.length] then
 --		self.spellStack[self.spellStack.length] = {}
@@ -984,6 +1013,24 @@ function Ovale:AddSpellToStack(spellName, startCast, endCast, nextCast)
 		if cd then
 			cd.start = startCast
 			cd.duration = newSpellInfo.cd
+			if nocd then
+				cd.duration = 0
+			end
+			if newSpellInfo.buffnocd and not nocd then
+				local buffAura = self:GetAura("player", "HELPFUL", newSpellInfo.buffnocd)
+				if self.traceAura then
+					if buffAura then
+						self:Print("buffAura stacks = "..buffAura.stacks.." start="..nilstring(buffAura.start).." ending = "..nilstring(buffAura.ending))
+						self:Print("startCast = "..startCast)
+					else
+						self:Print("buffAura = nil")
+					end
+					self.traceAura = false
+				end
+				if buffAura and buffAura.stacks>0 and buffAura.start and buffAura.start<=startCast and (not buffAura.ending or buffAura.ending>startCast) then
+					cd.duration = 0
+				end
+			end
 			cd.enable = 1
 			if newSpellInfo.toggle then
 				cd.toggled = 1
@@ -1016,7 +1063,11 @@ function Ovale:AddSpellToStack(spellName, startCast, endCast, nextCast)
 							newAura.stacks = 1
 						end
 						if Ovale.trace then
-							self:Print("adding aura "..spellName.." to "..target.." "..newAura.start..","..newAura.ending)
+							if spellName then
+								self:Print("adding aura "..spellName.." to "..target.." "..newAura.start..","..newAura.ending)
+							else
+								self:Print("adding nil aura")
+							end
 						end
 					end
 				end
@@ -1059,6 +1110,13 @@ function Ovale:InitCalculerMeilleureAction()
 		v.toggled = nil
 	end

+	for i,v in ipairs(self.lastSpell) do
+		if not self.spellInfo[v.name] or not self.spellInfo[v.name].toggle then
+			if self.maintenant - v.time<1 then
+				self:AddSpellToStack(v.name, v.time, v.time, v.time, v.nocd)
+			end
+		end
+	end
 	-- On attend que le sort courant soit fini
 	local spell, rank, displayName, icon, startTime, endTime, isTradeSkill = UnitCastingInfo("player")
 	if (spell) then
@@ -1067,12 +1125,6 @@ function Ovale:InitCalculerMeilleureAction()
 		local spell, rank, displayName, icon, startTime, endTime, isTradeSkill = UnitChannelInfo("player")
 		if (spell) then
 			self:AddSpellToStack(spell, startTime/1000, endTime/1000, endTime/1000)
-		elseif self.lastSpellName then
-			if not self.spellInfo[self.lastSpellName] or not self.spellInfo[self.lastSpellName].toggle then
-				if self.lastSpellName and self.maintenant - self.lastSpellTime<1 then
-					self:AddSpellToStack(self.lastSpellName, self.lastSpellTime, self.lastSpellTime, self.lastSpellTime)
-				end
-			end
 		end
 	end
 end
@@ -1118,13 +1170,6 @@ function Ovale:GetGCD(spellName)
 end


-local function nilstring(text)
-	if text == nil then
-		return "nil"
-	else
-		return text
-	end
-end

 function Ovale:GetActionInfo(element)
 	if not element then
@@ -1558,7 +1603,7 @@ function Ovale:ChargerDefaut()
 			list = {},
 			apparence = {enCombat=false, iconWidth = 64, iconHeight = 64, margin = 4,
 				smallIconWidth=28, smallIconHeight=28, raccourcis=true, numeric=false, avecCible = false,
-				verrouille = false, vertical = false, predictif=false, highlightIcon = true},
+				verrouille = false, vertical = false, predictif=false, highlightIcon = true, clickThru = false},
 			skin = {SkinID="Blizzard", Backdrop = true, Gloss = false, Colors = {}}
 		}
 	})
diff --git a/OvaleFrame.lua b/OvaleFrame.lua
index 3d00741..71c47e9 100644
--- a/OvaleFrame.lua
+++ b/OvaleFrame.lua
@@ -235,6 +235,8 @@ do
 			end
 		end

+		self.frame:EnableMouse(not Ovale.db.profile.apparence.clickThru)
+
 		local left = 0
 		local maxHeight = 0
 		local maxWidth = 0
@@ -296,6 +298,7 @@ do
 				icon:SetPoint("TOPLEFT",self.frame,"TOPLEFT",action.left + (l-1)*action.dx,action.top - (l-1)*action.dy)
 				icon:SetSize(action.width, action.height)
 				icon:SetHelp(node.params.help)
+				icon:EnableMouse(not Ovale.db.profile.apparence.clickThru)

 				if LBF then
 					icon:SetSkinGroup(self.skinGroup)
@@ -356,7 +359,9 @@ do
 		frame:SetWidth(100)
 		frame:SetHeight(100)
 		frame:SetPoint("CENTER",UIParent,"CENTER",0,0)
-		frame:EnableMouse()
+		if not Ovale.db.profile.apparence.clickThru then
+			frame:EnableMouse()
+		end
 		frame:SetMovable(true)
 		frame:SetFrameStrata("BACKGROUND")
 		frame:SetScript("OnMouseDown", frameOnMouseDown)
diff --git a/OvaleIcone.lua b/OvaleIcone.lua
index b1770ad..72423c7 100644
--- a/OvaleIcone.lua
+++ b/OvaleIcone.lua
@@ -202,4 +202,8 @@ function OvaleIcone_OnLoad(self)
 	self.Update = Update
 	self.SetSize = SetSize
 	self.SetHelp = SetHelp
+	if Ovale.db.profile.clickThru then
+		self:EnableMouse(false)
+	end
 end
+
diff --git a/defaut/Chasseur.lua b/defaut/Chasseur.lua
index be99ce6..2808920 100644
--- a/defaut/Chasseur.lua
+++ b/defaut/Chasseur.lua
@@ -19,6 +19,8 @@ Define(CALLOFTHEWILD 53434)
 Define(CHIMERASHOT 53209)
 Define(READINESS 23989)
 Define(SILENCINGSHOT 34490)
+Define(ASPECTOFTHEVIPER 34074)
+Define(ASPECTOFTHEDRAGONHAWK 61846)

 Define(TALENTTRACKING 1623)
 Define(TRACKBEASTS 1494)
@@ -30,7 +32,8 @@ Define(TRACKHUMANOIDS 19883)
 Define(TRACKUNDEAD 19884)

 SpellAddTargetDebuff(EXPLOSIVESHOT EXPLOSIVESHOT=2)
-SpellInfo(EXPLOSIVESHOT cd=6)
+SpellAddBuff(EXPLOSIVESHOT LOCKANDLOAD=-1)
+SpellInfo(EXPLOSIVESHOT cd=6 buffnocd=LOCKANDLOAD)
 SpellAddTargetDebuff(SERPENTSTING SERPENTSTING=15)
 SpellAddTargetDebuff(BLACKARROW BLACKARROW=15)
 SpellInfo(BLACKARROW cd=26)
@@ -48,6 +51,7 @@ ScoreSpells(HUNTERSMARK BLACKARROW SERPENTSTING CHIMERASHOT AIMEDSHOT MULTISHOT

 AddIcon help=main
 {
+	if ManaPercent(more 95) and BuffPresent(ASPECTOFTHEVIPER) Spell(ASPECTOFTHEDRAGONHAWK)
 	if TalentPoints(TALENTTRACKING more 0) and Tracking(TRACKBEASTS no) and Tracking(TRACKDEMONS no) and Tracking(TRACKDRAGONKIN no)
 			and Tracking(TRACKELEMENTALS no) and Tracking(TRACKGIANTS no) and Tracking(TRACKHUMANOIDS no) and Tracking(TRACKUNDEAD no)
 				Spell(TRACKBEASTS)
diff --git a/defaut/Chevalier.lua b/defaut/Chevalier.lua
index 2450ff6..78f3087 100644
--- a/defaut/Chevalier.lua
+++ b/defaut/Chevalier.lua
@@ -94,7 +94,7 @@ AddIcon help=main
 	if TargetDebuffExpires(FROSTFEVER 0 mine=1) and Runes(frost 1)
 	{
 		if Glyph(GLYPHHOWLINGBLAST) Spell(HOWLINGBLAST)
-		Spell(ICYTOUCH)
+		unless Glyph(GLYPHHOWLINGBLAST) Spell(ICYTOUCH)
 	}

 	if TargetDebuffExpires(BLOODPLAGUE 0 mine=1) and Runes(unholy 1)
diff --git a/defaut/Demoniste.lua b/defaut/Demoniste.lua
index aa9c8a7..27c9e77 100644
--- a/defaut/Demoniste.lua
+++ b/defaut/Demoniste.lua
@@ -44,6 +44,7 @@ AddListItem(curse weakness SpellName(CURSEWEAKNESS))
 SpellInfo(HAUNT cd=8)
 SpellInfo(CONFLAGRATE cd=10)
 SpellInfo(CHAOSBOLT cd=12)
+SpellInfo(DRAINSOUL canStopChannelling=3)
 SpellAddTargetDebuff(CORRUPTION CORRUPTION=18)
 SpellAddTargetDebuff(CURSEAGONY CURSEAGONY=24)
 SpellAddTargetDebuff(CURSEELEMENTS CURSEELEMENTS=300)
diff --git a/defaut/Pretre.lua b/defaut/Pretre.lua
index 52a3751..6cb005d 100644
--- a/defaut/Pretre.lua
+++ b/defaut/Pretre.lua
@@ -64,11 +64,8 @@ if BuffPresent(SW stacks=5) and TargetDebuffExpires(SWP 0 mine=1) and TargetDead
 }

 #Refresh VT
-unless CheckBoxOn(multidot)
-{
-	if TargetDebuffExpires(VT 1 mine=1 haste=spell) and TargetDeadIn(more 8)
-		Spell(VT)
-}
+if TargetDebuffExpires(VT 1 mine=1 haste=spell) and TargetDeadIn(more 8)
+	Spell(VT)

 #cast MB if up
 unless BuffPresent(Heroism) or BuffPresent(Bloodlust)