Compare commits

...

21 Commits

Author SHA1 Message Date
af74c9e3fe Update changelog 2022-03-28 10:30:30 -05:00
611f37a1f3 Add reported missing nil check
Fixes #20 (github)
2022-03-25 21:30:54 -05:00
5d8b83e5ef Update changelog 2022-03-24 11:54:20 -05:00
53fdb48b05 Fix reported TBC issue of target health updates
For some reason, on TBC classic target health is not updating frequently. I waded through the official TBC source code, and it looks like if predictedHealth is enabled (which it is by default), then the default UI uses an OnUpdate handler to update the target's health bar. So now I'm doing the same.
2022-03-24 11:51:58 -05:00
b64294ca11 Minor optimization for ZM puzzle detection
COMBAT_LOG_EVENT_UNFILTERED is a spam-fest, so let's only subscribe to it when we absolutely have to. This could arguably by done entirely in UNIT_AURA, but since we don't know for sure that a given UNIT_AURA event was the removal of a buff, there is a potential problem with trying to detect exactly when the puzzle session was finished. This code can potentially mis-detect puzzle starting, or hide the addon again when it's already hidden, but there shouldn't be an issue in practice. If this turns out to be problematic, I will roll back to the previous method.
2022-03-23 23:07:20 -05:00
0785265feb Convenience method for looking for any buff from a list 2022-03-23 23:04:00 -05:00
4007f1258b Fix whitespace 2022-03-23 11:40:12 -05:00
c7c92d468e Update changelog 2022-03-22 22:59:38 -05:00
eee20f17b4 Change method of hiding the target frame
See 51e2debc4d for the PlayerFrame version of this (and reasoning for this)
2022-03-22 22:57:36 -05:00
0aa584d81a Hide IceHUD during Zereth Mortis puzzles 2022-03-22 22:56:57 -05:00
51e2debc4d Change method of hiding the player frame
This existing method worked fine for many years, but seems to have become inadequate in 9.2, likely due to this change that's restoring player frame visibility sometimes: 20f786e45b

Fixes #19 (Github)
2022-03-22 15:58:10 -05:00
d48ae9b12a Update TOCs 2022-03-22 08:25:50 -05:00
83028c159f Prep for release 2022-01-28 11:22:18 -06:00
a8a3da753e Update TOC for BCC, changelog 2022-01-28 11:18:32 -06:00
9e77fa6831 fix totem bar dismissal (#18)
* fix totem bar dismissal

* limit insecure DestroyTotem fix to Classic/TBC

* fix fussy commit

Co-authored-by: Wiktor Ozimek <wiktor.ozimek@gmail.com>
2021-11-24 13:25:10 -06:00
e4919fb1fe Update TOCs 2021-11-11 13:00:39 -06:00
724a3001ed Prep for release 2021-10-14 19:55:56 -05:00
8226679ccd Update TOC for Classic 1.14.0 2021-10-13 22:15:21 -05:00
2c0b3d5f6f Update changelog 2021-10-12 21:22:51 -05:00
a08c2455c6 Support multiple anima-charged combo points
#16
2021-10-12 21:11:39 -05:00
8868b16785 Fix FocusMana event registration on Classic builds
Thanks to Lethay's comments on WowAce.
2021-09-25 09:34:44 -05:00
12 changed files with 179 additions and 38 deletions

View File

@ -41,6 +41,26 @@ IceCore.TextDecorationStyle = {
NoDecoration = L["No decoration"], NoDecoration = L["No decoration"],
} }
local ZM_MAP_ID = 1970
IceCore.zmPuzzleIds = {
--Fugueal Protolock
366046,
366108,
359488,
--Mezzonic Protolock
366042,
366106,
351405,
--Cantaric Protolock
365840,
366107,
348792,
}
IceCore.zmPuzzleMap = {}
for i=1, #IceCore.zmPuzzleIds do
IceCore.zmPuzzleMap[IceCore.zmPuzzleIds[i]] = true
end
local SUNDER_SPELL_ID = 7386 local SUNDER_SPELL_ID = 7386
local LACERATE_SPELL_ID = 33745 local LACERATE_SPELL_ID = 33745
local MAELSTROM_SPELL_ID = 53817 local MAELSTROM_SPELL_ID = 53817
@ -259,6 +279,10 @@ function IceCore.prototype:Enable(userToggle)
self.IceHUDFrame:RegisterEvent("BARBER_SHOP_OPEN") self.IceHUDFrame:RegisterEvent("BARBER_SHOP_OPEN")
self.IceHUDFrame:RegisterEvent("BARBER_SHOP_CLOSE") self.IceHUDFrame:RegisterEvent("BARBER_SHOP_CLOSE")
end end
if C_Map then
self.IceHUDFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
self.IceHUDFrame:RegisterEvent("ZONE_CHANGED")
end
self.IceHUDFrame:RegisterEvent("UNIT_AURA") self.IceHUDFrame:RegisterEvent("UNIT_AURA")
self.IceHUDFrame:SetScript("OnEvent", function(self, event, ...) self.IceHUDFrame:SetScript("OnEvent", function(self, event, ...)
if (event == "PET_BATTLE_OPENING_START") then if (event == "PET_BATTLE_OPENING_START") then
@ -279,13 +303,48 @@ function IceCore.prototype:Enable(userToggle)
end end
elseif (event == "UNIT_AURA") then elseif (event == "UNIT_AURA") then
local unit = ... local unit = ...
if IceHUD.IceCore.settings.bHideDuringShellGame and unit == "player" and IceHUD:HasDebuffs("player", {271571})[1] and UnitInVehicle("player") then if unit ~= "player" then
return
end
if IceHUD.IceCore.settings.bHideDuringShellGame and IceHUD:HasAnyDebuff("player", {271571}) and UnitInVehicle("player") then
self:RegisterEvent("UNIT_EXITED_VEHICLE") self:RegisterEvent("UNIT_EXITED_VEHICLE")
self:Hide() self:Hide()
elseif C_Map then
local bestMapID = C_Map.GetBestMapForUnit("player")
if bestMapID ~= ZM_MAP_ID then
return
end
if IceHUD:HasAnyBuff("player", IceCore.zmPuzzleIds) then
self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
self:Hide()
end
end end
elseif (event == "UNIT_EXITED_VEHICLE") then elseif (event == "UNIT_EXITED_VEHICLE") then
self:UnregisterEvent("UNIT_EXITED_VEHICLE") self:UnregisterEvent("UNIT_EXITED_VEHICLE")
self:Show() self:Show()
elseif (event == "PLAYER_ENTERING_WORLD" or event == "ZONE_CHANGED") then
if C_Map then
local bestMapID = C_Map.GetBestMapForUnit("player")
if bestMapID == ZM_MAP_ID then
if IceHUD:HasAnyBuff("player", IceCore.zmPuzzleIds) then
self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
self:Hide()
end
end
end
elseif (event == "COMBAT_LOG_EVENT_UNFILTERED") then
local _,subevent,_,_,_,_,_,_,destName,_,_,spellId = CombatLogGetCurrentEventInfo()
if subevent == "SPELL_AURA_REMOVED" then
if destName == UnitName("player") then
if IceCore.zmPuzzleMap[spellId] then
self:Show()
self:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
end
end
end
end end
end) end)

View File

@ -35,6 +35,8 @@ IceHUD.PerTargetComboPoints = IceHUD.WowVer < 60000
IceHUD.CanTrackOtherUnitBuffs = not IceHUD.WowClassic IceHUD.CanTrackOtherUnitBuffs = not IceHUD.WowClassic
IceHUD.CanTrackGCD = not IceHUD.WowClassic IceHUD.CanTrackGCD = not IceHUD.WowClassic
IceHUD.GetSpellInfoReturnsFunnel = IceHUD.WowMain and IceHUD.WowVer < 60000 IceHUD.GetSpellInfoReturnsFunnel = IceHUD.WowMain and IceHUD.WowVer < 60000
IceHUD.CanHookDestroyTotem = IceHUD.WowClassic or IceHUD.WowClassicBC
IceHUD.ShouldUpdateTargetHealthEveryTick = IceHUD.WowClassicBC and GetCVarBool("predictedHealth")
IceHUD.UnitPowerEvent = "UNIT_POWER_UPDATE" IceHUD.UnitPowerEvent = "UNIT_POWER_UPDATE"
@ -492,6 +494,30 @@ do
function IceHUD:HasDebuffs(unit, spellIDs, filter) function IceHUD:HasDebuffs(unit, spellIDs, filter)
return IceHUD:HasBuffs(unit, spellIDs, filter and filter.."|HARMFUL" or "HARMFUL") return IceHUD:HasBuffs(unit, spellIDs, filter and filter.."|HARMFUL" or "HARMFUL")
end end
function IceHUD:HasAnyBuff(unit, spellIDs, filter)
local buffs = IceHUD:HasBuffs(unit, spellIDs, filter)
for i=1, #buffs do
if buffs[i] then
return true
end
end
return false
end
function IceHUD:HasAnyDebuff(unit, spellIDs, filter)
local debuffs = IceHUD:HasDebuffs(unit, spellIDs, filter)
for i=1, #debuffs do
if debuffs[i] then
return true
end
end
return false
end
end end
function IceHUD:OnDisable() function IceHUD:OnDisable()

View File

@ -1,7 +1,7 @@
## Interface: 90100 ## Interface: 90200
## Interface-Retail: 90100 ## Interface-Retail: 90200
## Interface-Classic: 11307 ## Interface-Classic: 11402
## Interface-BCC: 20502 ## Interface-BCC: 20503
## Author: Parnic, originally created by Iceroth ## Author: Parnic, originally created by Iceroth
## Name: IceHUD ## Name: IceHUD
## Title: IceHUD |cff7fff7f-Ace3-|r ## Title: IceHUD |cff7fff7f-Ace3-|r

View File

@ -1,7 +1,7 @@
## Interface: 90100 ## Interface: 90200
## Interface-Retail: 90100 ## Interface-Retail: 90200
## Interface-Classic: 11307 ## Interface-Classic: 11402
## Interface-BCC: 20502 ## Interface-BCC: 20503
## Title: IceHUD |cff7fff7f-Options-|r ## Title: IceHUD |cff7fff7f-Options-|r
## Author: Parnic ## Author: Parnic
## Version: @project-version@ ## Version: @project-version@

View File

@ -1,5 +1,32 @@
# Changelog # Changelog
v1.13.13:
- Slight optimization of Zereth Mortis puzzle detection logic.
- Fixed target health updating infrequently on Classic-BC.
- Fixed reported error in TargetInvuln module.
v1.13.12:
- Hide IceHUD during Zereth Mortis puzzles
- Fixed default player and target frames coming back sometimes (github issue #19)
- Updated TOC for 9.2.0 and 1.14.2
v1.13.11:
- Fixed totem bar dismissal for BC-Classic and Classic
- Updated TOC for BC-Clasic
v1.13.10:
- Updated TOCs for 9.1.5 and 1.14.1
v1.13.9:
- Fixed FocusMana modules attempting to register invalid events in Classic builds.
- Add support for multiple anima-charged combo points to display at once.
- Update TOC for Classic 1.14.0
v1.13.8.1: v1.13.8.1:
- Updated TOC for BC-Classic and Classic. - Updated TOC for BC-Classic and Classic.

View File

@ -330,8 +330,7 @@ function ComboPoints.prototype:UpdateMaxComboPoints(event, unit, powerType)
end end
function ComboPoints.prototype:UpdateChargedComboPoints() function ComboPoints.prototype:UpdateChargedComboPoints()
local chargedPowerPoints = GetUnitChargedPowerPoints("player") self.chargedPowerPoints = GetUnitChargedPowerPoints("player")
self.chargedPowerPointIndex = chargedPowerPoints and chargedPowerPoints[1]
self:CreateComboFrame() self:CreateComboFrame()
self:UpdateComboPoints() self:UpdateComboPoints()
end end
@ -445,7 +444,7 @@ function ComboPoints.prototype:CreateComboFrame(forceTextureUpdate)
g = g - ((1 / maxComboPoints)*i) g = g - ((1 / maxComboPoints)*i)
end end
if i == self.chargedPowerPointIndex and self.moduleSettings.bShowAnimaCharged then if self.moduleSettings.bShowAnimaCharged and self:IsAnimaChargedPoint(i) then
self.frame.graphical[i].texture:SetVertexColor(self:GetColor("KyrianAnimaComboPoint")) self.frame.graphical[i].texture:SetVertexColor(self:GetColor("KyrianAnimaComboPoint"))
else else
self.frame.graphical[i].texture:SetVertexColor(r, g, b) self.frame.graphical[i].texture:SetVertexColor(r, g, b)
@ -494,6 +493,20 @@ function ComboPoints.prototype:CreateComboFrame(forceTextureUpdate)
end end
end end
function ComboPoints.prototype:IsAnimaChargedPoint(point)
if not self.chargedPowerPoints then
return false
end
for i=1, #self.chargedPowerPoints do
if self.chargedPowerPoints[i] == point then
return true
end
end
return false
end
function ComboPoints.prototype:UpdateComboPoints(...) function ComboPoints.prototype:UpdateComboPoints(...)
if select('#', ...) >= 3 and select(1, ...) == IceHUD.UnitPowerEvent and select(3, ...) ~= "COMBO_POINTS" then if select('#', ...) >= 3 and select(1, ...) == IceHUD.UnitPowerEvent and select(3, ...) ~= "COMBO_POINTS" then
return return

View File

@ -39,9 +39,9 @@ end
function FocusMana.prototype:Enable(core) function FocusMana.prototype:Enable(core)
FocusMana.super.prototype.Enable(self, core) FocusMana.super.prototype.Enable(self, core)
if IceHUD.WowVer >= 40000 then if not IceHUD.PerPowerEventsExist then
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateEvent") self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateEvent")
if IceHUD.WowVer < 80000 then if IceHUD.EventExistsUnitMaxPower then
self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent") self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent")
end end
else else

View File

@ -1407,15 +1407,18 @@ end
function PlayerHealth.prototype:ShowBlizz() function PlayerHealth.prototype:ShowBlizz()
PlayerFrame:Show() PlayerFrame:SetParent(self.OriginalPlayerFrameParent or UIParent)
PlayerFrame:GetScript("OnLoad")(PlayerFrame)
end end
function PlayerHealth.prototype:HideBlizz() function PlayerHealth.prototype:HideBlizz()
PlayerFrame:Hide() if not self.PlayerFrameParent then
self.PlayerFrameParent = CreateFrame("Frame")
self.PlayerFrameParent:Hide()
end
PlayerFrame:UnregisterAllEvents() self.OriginalPlayerFrameParent = PlayerFrame:GetParent()
PlayerFrame:SetParent(self.PlayerFrameParent)
end end
function PlayerHealth.prototype:HideBlizzardParty() function PlayerHealth.prototype:HideBlizzardParty()

View File

@ -642,6 +642,10 @@ function IceTargetHealth.prototype:Enable(core)
self:RegisterEvent("LFG_PROPOSAL_FAILED", "CheckPartyRole") self:RegisterEvent("LFG_PROPOSAL_FAILED", "CheckPartyRole")
self:RegisterEvent("LFG_ROLE_UPDATE", "CheckPartyRole") self:RegisterEvent("LFG_ROLE_UPDATE", "CheckPartyRole")
end end
if IceHUD.ShouldUpdateTargetHealthEveryTick and self.unit == "target" then
self.frame:SetScript("OnUpdate", function() self:Update(self.unit) end)
end
end end
if (self.moduleSettings.hideBlizz) then if (self.moduleSettings.hideBlizz) then
@ -659,6 +663,10 @@ function IceTargetHealth.prototype:Disable(core)
UnregisterUnitWatch(self.frame) UnregisterUnitWatch(self.frame)
if self.registerEvents and IceHUD.ShouldUpdateTargetHealthEveryTick and self.unit == "target" then
self.frame:SetScript("OnUpdate", nil)
end
if self.moduleSettings.hideBlizz then if self.moduleSettings.hideBlizz then
self:ShowBlizz() self:ShowBlizz()
end end
@ -1057,20 +1065,25 @@ end
function IceTargetHealth.prototype:ShowBlizz() function IceTargetHealth.prototype:ShowBlizz()
TargetFrame:Show() TargetFrame:SetParent(self.OriginalTargetFrameParent or UIParent)
TargetFrame:GetScript("OnLoad")(TargetFrame) ComboFrame:SetParent(self.OriginalComboFrameParent or UIParent)
ComboFrame:Show()
ComboFrame:GetScript("OnLoad")(ComboFrame)
end end
function IceTargetHealth.prototype:HideBlizz() function IceTargetHealth.prototype:HideBlizz()
TargetFrame:Hide() if not self.TargetFrameParent then
TargetFrame:UnregisterAllEvents() self.TargetFrameParent = CreateFrame("Frame")
self.TargetFrameParent:Hide()
end
if not self.ComboFrameParent then
self.ComboFrameParent = CreateFrame("Frame")
self.ComboFrameParent:Hide()
end
ComboFrame:Hide() self.OriginalTargetFrameParent = TargetFrame:GetParent()
ComboFrame:UnregisterAllEvents() TargetFrame:SetParent(self.TargetFrameParent)
self.OriginalComboFrameParent = ComboFrame:GetParent()
ComboFrame:SetParent(self.ComboFrameParent)
end end
function IceTargetHealth.prototype:UpdateBar(scale, color, alpha) function IceTargetHealth.prototype:UpdateBar(scale, color, alpha)

View File

@ -197,7 +197,7 @@ end
function TargetInvuln.prototype:UpdateTargetBuffs(event, unit, isUpdate) function TargetInvuln.prototype:UpdateTargetBuffs(event, unit, isUpdate)
local name, duration, remaining local name, duration, remaining
if not isUpdate then if not isUpdate or not self.lastUpdateTime then
self.buffName, self.buffDuration, self.buffRemaining = self:GetMaxbuffDuration(self.unit, self.buffList) self.buffName, self.buffDuration, self.buffRemaining = self:GetMaxbuffDuration(self.unit, self.buffList)
else else
self.buffRemaining = math.max(0, self.buffRemaining - (GetTime() - self.lastUpdateTime)) self.buffRemaining = math.max(0, self.buffRemaining - (GetTime() - self.lastUpdateTime))

View File

@ -339,7 +339,6 @@ function Totems.prototype:CreateTotem(i, name)
return return
end end
local haveTotem, name, startTime, duration, icon = GetTotemInfo(i) local haveTotem, name, startTime, duration, icon = GetTotemInfo(i)
local bWasNewFrame = false
if (not self.frame.graphical[i]) then if (not self.frame.graphical[i]) then
self.frame.graphical[i] = CreateFrame("Frame", nil, self.frame) self.frame.graphical[i] = CreateFrame("Frame", nil, self.frame)
self.frame.graphical[i].totem = self.frame.graphical[i]:CreateTexture(nil, "LOW") self.frame.graphical[i].totem = self.frame.graphical[i]:CreateTexture(nil, "LOW")
@ -348,7 +347,6 @@ function Totems.prototype:CreateTotem(i, name)
self.frame.graphical[i].totem:SetTexture(icon) self.frame.graphical[i].totem:SetTexture(icon)
self.frame.graphical[i].totem:SetAllPoints(self.frame.graphical[i]) self.frame.graphical[i].totem:SetAllPoints(self.frame.graphical[i])
bWasNewFrame = true
end end
self.frame.graphical[i]:SetFrameStrata("BACKGROUND") self.frame.graphical[i]:SetFrameStrata("BACKGROUND")
@ -405,18 +403,19 @@ function Totems.prototype:CreateTotem(i, name)
self.frame.graphical[i]:EnableMouse(true) self.frame.graphical[i]:EnableMouse(true)
self.frame.graphical[i]:SetScript("OnEnter", self.graphicalOnEnter) self.frame.graphical[i]:SetScript("OnEnter", self.graphicalOnEnter)
self.frame.graphical[i]:SetScript("OnLeave", self.graphicalOnLeave) self.frame.graphical[i]:SetScript("OnLeave", self.graphicalOnLeave)
if IceHUD.CanHookDestroyTotem then
self.frame.graphical[i]:SetScript("OnMouseUp", self.graphicalOnMouseUp)
end
else else
self.frame.graphical[i]:EnableMouse(false) self.frame.graphical[i]:EnableMouse(false)
self.frame.graphical[i]:SetScript("OnEnter", nil) self.frame.graphical[i]:SetScript("OnEnter", nil)
self.frame.graphical[i]:SetScript("OnLeave", nil) self.frame.graphical[i]:SetScript("OnLeave", nil)
if IceHUD.CanHookDestroyTotem then
self.frame.graphical[i]:SetScript("OnMouseUp", nil)
end
end end
self.frame.graphical[i].slot = i self.frame.graphical[i].slot = i
self.frame.graphical[i].name = name self.frame.graphical[i].name = name
-- it looks like HookScript will continue to add handlers every time instead of replacing them like SetScript
if (bWasNewFrame) then
--self.frame.graphical[i]:HookScript("OnMouseUp", self.graphicalOnMouseUp)
end
end end
-- Load us up -- Load us up

View File

@ -1,6 +1,7 @@
# Changelog # Changelog
v1.13.8.1: v1.13.13:
- Fixed Paladin GCD not functioning in BC-Classic. - Slight optimization of Zereth Mortis puzzle detection logic.
- Updated TOC for BC-Classic and Classic. - Fixed target health updating infrequently on Classic-BC.
- Fixed reported error in TargetInvuln module.