Compare commits

...

11 Commits

Author SHA1 Message Date
b65909c570 Wrath updates for Paladin GCD, Rogue SnD 2022-08-30 22:25:16 -05:00
b33a82622f Update changelogs 2022-08-30 22:03:46 -05:00
96a8fb2c3d Bump TOC for retail 2022-08-30 22:01:00 -05:00
6c623d6965 Initial Wrath-Classic compatibility
Briefly fought a training dummy with a Death Knight and a Shaman. I'm sure stuff like Slice-and-dice will need attention for talents moving around and such.
2022-08-30 21:59:58 -05:00
d31872512e Add support for blocked submenu options
Some menus, such as when targeting other players, use mixins which are themselves menus. We have to dive down one more layer to resolve those. The official UI source does this submenu thing (as opposed to recursion) so this should exactly mimic how the base game now works.
2022-06-06 09:02:43 -05:00
d424afdab1 Rework blocked menu options for 9.2.5
Since 9.2.5 completely re-worked UnitPopupMenus, IceHUD's "Set Focus" right-click menu option overrides were broken. This restores the override so that it can still suppress the tainted functionality.

Additionally, it turns out that having Clique installed replaces this entire thing somehow and makes Set Focus et al function (with IceHUD's ClickCastFrames registration). I don't know what that magic is about, but none of this munging happens and the tainted paths work fine. Interesting.

Fixes wowace ticket #319
2022-06-05 23:30:09 -05:00
9500bdf393 Fix error on BCC
Fixes #21
2022-06-01 16:26:12 -05:00
6325ed1ade Fix changelogs
This is why Unreleased is used instead...
2022-06-01 08:31:05 -05:00
a4c44a5809 Update TOC 2022-06-01 08:30:21 -05:00
82db70969a Remove UnitPopupButtons usage
I need to find a way to reintroduce this, but Blizzard's new method of building these frames doesn't look like it's going to be particularly easy. This stops error popups on 9.2.5
2022-06-01 08:29:39 -05:00
47931922bd Fix target health updating infrequently on Classic 2022-05-02 12:22:07 -05:00
11 changed files with 197 additions and 63 deletions

View File

@ -48,3 +48,8 @@ jobs:
uses: BigWigsMods/packager@master uses: BigWigsMods/packager@master
with: with:
args: -g bcc -w 0 args: -g bcc -w 0
- name: Package and release for Wrath
uses: BigWigsMods/packager@master
with:
args: -g wrath -w 0

View File

@ -19,24 +19,36 @@ IceHUD.debugging = false
IceHUD.WowVer = select(4, GetBuildInfo()) IceHUD.WowVer = select(4, GetBuildInfo())
IceHUD.WowMain = not WOW_PROJECT_ID or WOW_PROJECT_ID == WOW_PROJECT_MAINLINE IceHUD.WowMain = not WOW_PROJECT_ID or WOW_PROJECT_ID == WOW_PROJECT_MAINLINE
IceHUD.WowClassic = WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_CLASSIC IceHUD.WowClassic = WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_CLASSIC
IceHUD.WowClassicBC = WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_BURNING_CRUSADE_CLASSIC IceHUD.WowClassicBC = false
IceHUD.WowClassicWrath = false
if WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_BURNING_CRUSADE_CLASSIC then
if not LE_EXPANSION_LEVEL_CURRENT or LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_BURNING_CRUSADE then
IceHUD.WowClassicBC = true
elseif LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_WRATH_OF_THE_LICH_KING then
IceHUD.WowClassicWrath = true
end
end
-- compatibility/feature flags -- compatibility/feature flags
IceHUD.SpellFunctionsReturnRank = IceHUD.WowMain and IceHUD.WowVer < 80000 IceHUD.SpellFunctionsReturnRank = IceHUD.WowMain and IceHUD.WowVer < 80000
IceHUD.EventExistsPlayerPetChanged = IceHUD.WowVer < 80000 and not IceHUD.WowClassic and not IceHUD.WowClassicBC IceHUD.EventExistsPlayerPetChanged = IceHUD.WowVer < 80000 and not IceHUD.WowClassic and not IceHUD.WowClassicBC and not IceHUD.WowClassicWrath
IceHUD.EventExistsPetBarChanged = IceHUD.WowVer < 80000 and not IceHUD.WowClassic and not IceHUD.WowClassicBC IceHUD.EventExistsPetBarChanged = IceHUD.WowVer < 80000 and not IceHUD.WowClassic and not IceHUD.WowClassicBC and not IceHUD.WowClassicWrath
IceHUD.EventExistsPlayerComboPoints = IceHUD.WowMain and IceHUD.WowVer < 30000 IceHUD.EventExistsPlayerComboPoints = IceHUD.WowMain and IceHUD.WowVer < 30000
IceHUD.EventExistsUnitComboPoints = IceHUD.WowMain and IceHUD.WowVer < 70000 IceHUD.EventExistsUnitComboPoints = IceHUD.WowMain and IceHUD.WowVer < 70000
IceHUD.EventExistsUnitMaxPower = IceHUD.WowMain and IceHUD.WowVer < 80000 IceHUD.EventExistsUnitMaxPower = IceHUD.WowMain and IceHUD.WowVer < 80000
IceHUD.EventExistsGroupRosterUpdate = IceHUD.WowVer >= 50000 or IceHUD.WowClassic or IceHUD.WowClassicBC IceHUD.EventExistsGroupRosterUpdate = IceHUD.WowVer >= 50000 or IceHUD.WowClassic or IceHUD.WowClassicBC or IceHUD.WowClassicWrath
IceHUD.EventExistsUnitDynamicFlags = IceHUD.WowMain and IceHUD.WowVer < 80000 IceHUD.EventExistsUnitDynamicFlags = IceHUD.WowMain and IceHUD.WowVer < 80000
IceHUD.PerPowerEventsExist = IceHUD.WowMain and IceHUD.WowVer < 40000 IceHUD.PerPowerEventsExist = IceHUD.WowMain and IceHUD.WowVer < 40000
IceHUD.PerTargetComboPoints = IceHUD.WowVer < 60000 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.CanHookDestroyTotem = IceHUD.WowClassic or IceHUD.WowClassicBC or IceHUD.WowClassicWrath
IceHUD.ShouldUpdateTargetHealthEveryTick = IceHUD.WowClassicBC and GetCVarBool("predictedHealth") IceHUD.ShouldUpdateTargetHealthEveryTick = (IceHUD.WowClassic or IceHUD.WowClassicBC) and GetCVarBool("predictedHealth")
IceHUD.UsesUIPanelButtonTemplate = IceHUD.WowVer >= 50000 or IceHUD.WowClassic or IceHUD.WowClassicBC or IceHUD.WowClassicWrath
IceHUD.EventExistsSpellcastInterruptible = IceHUD.WowVer >= 30200 and not IceHUD.WowClassicWrath
IceHUD.DeathKnightUnholyFrostRunesSwapped = IceHUD.WowVer < 70300 and not IceHUD.WowClassicWrath
IceHUD.UseFallbackPaladinGCDSpell = IceHUD.WowClassic or IceHUD.WowClassicBC or IceHUD.WowClassicWrath
IceHUD.UnitPowerEvent = "UNIT_POWER_UPDATE" IceHUD.UnitPowerEvent = "UNIT_POWER_UPDATE"
@ -44,6 +56,8 @@ IceHUD.validBarList = { "Bar", "HiBar", "RoundBar", "ColorBar", "RivetBar", "Riv
"BloodGlaives", "ArcHUD", "FangRune", "DHUD", "CleanCurvesOut", "CleanTank", "PillTank", "GemTank" } "BloodGlaives", "ArcHUD", "FangRune", "DHUD", "CleanCurvesOut", "CleanTank", "PillTank", "GemTank" }
IceHUD.validCustomModules = {Bar="Buff/Debuff watcher", Counter="Buff/Debuff stack counter", CD="Cooldown bar", Health="Health bar", Mana="Mana bar", CounterBar="Stack count bar"} IceHUD.validCustomModules = {Bar="Buff/Debuff watcher", Counter="Buff/Debuff stack counter", CD="Cooldown bar", Health="Health bar", Mana="Mana bar", CounterBar="Stack count bar"}
IceHUD_UnitFrame_DropDown = CreateFrame("Frame", "IceHUD_UnitFrame_DropDown", UIParent, "UIDropDownMenuTemplate")
--@debug@ --@debug@
IceHUD.optionsLoaded = true IceHUD.optionsLoaded = true
--@end-debug@ --@end-debug@
@ -343,7 +357,7 @@ end
-- blizzard interface options -- blizzard interface options
local blizOptionsPanel = CreateFrame("FRAME", "IceHUDConfigPanel", UIParent) local blizOptionsPanel = CreateFrame("FRAME", "IceHUDConfigPanel", UIParent)
blizOptionsPanel.name = "IceHUD" blizOptionsPanel.name = "IceHUD"
blizOptionsPanel.button = CreateFrame("BUTTON", "IceHUDOpenConfigButton", blizOptionsPanel, (IceHUD.WowVer >= 50000 or IceHUD.WowClassic or IceHUD.WowClassicBC) and "UIPanelButtonTemplate" or "UIPanelButtonTemplate2") blizOptionsPanel.button = CreateFrame("BUTTON", "IceHUDOpenConfigButton", blizOptionsPanel, IceHUD.UsesUIPanelButtonTemplate and "UIPanelButtonTemplate" or "UIPanelButtonTemplate2")
blizOptionsPanel.button:SetText("Open IceHUD configuration") blizOptionsPanel.button:SetText("Open IceHUD configuration")
blizOptionsPanel.button:SetWidth(240) blizOptionsPanel.button:SetWidth(240)
blizOptionsPanel.button:SetHeight(30) blizOptionsPanel.button:SetHeight(30)
@ -684,31 +698,69 @@ function IceHUD:GetIsInLFGGroup()
return IsInLFGGroup return IsInLFGGroup
end end
local BLACKLISTED_UNIT_MENU_OPTIONS = { local BLACKLISTED_UNIT_MENU_OPTIONS = {}
SET_FOCUS = "ICEHUD_SET_FOCUS", if UnitPopupButtons then
CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS", BLACKLISTED_UNIT_MENU_OPTIONS = {
PET_DISMISS = "ICEHUD_PET_DISMISS", SET_FOCUS = "ICEHUD_SET_FOCUS",
LOCK_FOCUS_FRAME = true, CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS",
UNLOCK_FOCUS_FRAME = true, LOCK_FOCUS_FRAME = true,
} UNLOCK_FOCUS_FRAME = true,
}
if select(2, UnitClass("player")) ~= "WARLOCK" then
BLACKLISTED_UNIT_MENU_OPTIONS[PET_DISMISS] = "ICEHUD_PET_DISMISS"
end
UnitPopupButtons["ICEHUD_SET_FOCUS"] = { UnitPopupButtons["ICEHUD_SET_FOCUS"] = {
text = L["Type %s to set focus"]:format(SLASH_FOCUS1), text = L["Type %s to set focus"]:format(SLASH_FOCUS1),
tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."], tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."],
dist = 0, dist = 0,
} }
UnitPopupButtons["ICEHUD_CLEAR_FOCUS"] = { UnitPopupButtons["ICEHUD_CLEAR_FOCUS"] = {
text = L["Type %s to clear focus"]:format(SLASH_CLEARFOCUS1), text = L["Type %s to clear focus"]:format(SLASH_CLEARFOCUS1),
tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."], tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."],
dist = 0, dist = 0,
} }
UnitPopupButtons["ICEHUD_PET_DISMISS"] = { UnitPopupButtons["ICEHUD_PET_DISMISS"] = {
text = L["Use your Dismiss Pet spell to dismiss a pet"], text = L["Use your Dismiss Pet spell to dismiss a pet"],
tooltipText = L["Blizzard currently does not provide a proper way to right-click dismiss a pet with custom unit frames."], tooltipText = L["Blizzard currently does not provide a proper way to right-click dismiss a pet with custom unit frames."],
dist = 0, dist = 0,
} }
elseif UnitPopupSetFocusButtonMixin then
IceHUDUnitPopupSetFocusButtonMixin = CreateFromMixins(UnitPopupButtonBaseMixin)
function IceHUDUnitPopupSetFocusButtonMixin:GetText()
return L["Type %s to set focus"]:format(SLASH_FOCUS1)
end
function IceHUDUnitPopupSetFocusButtonMixin:OnClick()
end
IceHUDUnitPopupClearFocusButtonMixin = CreateFromMixins(UnitPopupButtonBaseMixin)
function IceHUDUnitPopupClearFocusButtonMixin:GetText()
return L["Type %s to clear focus"]:format(SLASH_CLEARFOCUS1)
end
function IceHUDUnitPopupClearFocusButtonMixin:OnClick()
end
IceHUDUnitPopupPetDismissButtonMixin = CreateFromMixins(UnitPopupButtonBaseMixin)
function IceHUDUnitPopupPetDismissButtonMixin:GetText()
return L["Use your Dismiss Pet spell to dismiss a pet"]
end
function IceHUDUnitPopupPetDismissButtonMixin:CanShow()
return UnitPopupPetDismissButtonMixin:CanShow()
end
function IceHUDUnitPopupPetDismissButtonMixin:OnClick()
end
BLACKLISTED_UNIT_MENU_OPTIONS[SET_FOCUS] = IceHUDUnitPopupSetFocusButtonMixin
BLACKLISTED_UNIT_MENU_OPTIONS[CLEAR_FOCUS] = IceHUDUnitPopupClearFocusButtonMixin
BLACKLISTED_UNIT_MENU_OPTIONS[LOCK_FOCUS_FRAME] = true
BLACKLISTED_UNIT_MENU_OPTIONS[UNLOCK_FOCUS_FRAME] = true
if select(2, UnitClass("player")) ~= "WARLOCK" then
BLACKLISTED_UNIT_MENU_OPTIONS[PET_DISMISS] = IceHUDUnitPopupPetDismissButtonMixin
end
end
local munged_unit_menus = {} local munged_unit_menus = {}
local function munge_unit_menu(menu) local function munge_unit_menu(menu)
@ -729,11 +781,34 @@ local function munge_unit_menu(menu)
end end
local found = false local found = false
local _, v if data.GetMenuButtons then
for _, v in ipairs(data) do local btns = data.GetMenuButtons()
if BLACKLISTED_UNIT_MENU_OPTIONS[v] then for i=1, #btns do
found = true if btns[i].IsMenu() then
break local subbtns = btns[i].GetMenuButtons()
for j=1, #subbtns do
if BLACKLISTED_UNIT_MENU_OPTIONS[subbtns[j]:GetText()] then
found = true
break
end
end
else
if BLACKLISTED_UNIT_MENU_OPTIONS[btns[i]:GetText()] then
found = true
break
end
end
if found then
break
end
end
else
for _, v in ipairs(data) do
if BLACKLISTED_UNIT_MENU_OPTIONS[v] then
found = true
break
end
end end
end end
@ -744,15 +819,42 @@ local function munge_unit_menu(menu)
end end
local new_data = {} local new_data = {}
for _, v in ipairs(data) do if data.GetMenuButtons then
local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[v] local new_buttons_list = {}
if v == "PET_DISMISS" and select(2, UnitClass("player")) == "WARLOCK" then local btns = data.GetMenuButtons()
blacklisted = false for i=1, #btns do
if btns[i].IsMenu() then
local subbtns = btns[i].GetMenuButtons()
for j=1, #subbtns do
local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[subbtns[j]:GetText()]
if not blacklisted then
new_buttons_list[#new_buttons_list+1] = subbtns[j]
elseif blacklisted ~= true then
new_buttons_list[#new_buttons_list+1] = blacklisted
end
end
else
local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[btns[i]:GetText()]
if not blacklisted then
new_buttons_list[#new_buttons_list+1] = btns[i]
elseif blacklisted ~= true then
new_buttons_list[#new_buttons_list+1] = blacklisted
end
end
end end
if not blacklisted then
new_data[#new_data+1] = v new_data = data
elseif blacklisted ~= true then function new_data:GetMenuButtons()
new_data[#new_data+1] = blacklisted return new_buttons_list
end
else
for _, v in ipairs(data) do
local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[v]
if not blacklisted then
new_data[#new_data+1] = v
elseif blacklisted ~= true then
new_data[#new_data+1] = blacklisted
end
end end
end end
local new_menu_name = "ICEHUD_" .. menu local new_menu_name = "ICEHUD_" .. menu
@ -798,7 +900,6 @@ local function figure_unit_menu(unit)
return "PLAYER" return "PLAYER"
end end
IceHUD_UnitFrame_DropDown = CreateFrame("Frame", "IceHUD_UnitFrame_DropDown", UIParent, "UIDropDownMenuTemplate")
if UnitPopupFrames then if UnitPopupFrames then
UnitPopupFrames[#UnitPopupFrames+1] = "IceHUD_UnitFrame_DropDown" UnitPopupFrames[#UnitPopupFrames+1] = "IceHUD_UnitFrame_DropDown"
end end

View File

@ -1,7 +1,8 @@
## Interface: 90200 ## Interface: 90207
## Interface-Retail: 90200 ## Interface-Retail: 90207
## Interface-Classic: 11402 ## Interface-Classic: 11403
## Interface-BCC: 20503 ## Interface-BCC: 20504
## Interface-Wrath: 30400
## 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,8 @@
## Interface: 90200 ## Interface: 90207
## Interface-Retail: 90200 ## Interface-Retail: 90207
## Interface-Classic: 11402 ## Interface-Classic: 11403
## Interface-BCC: 20503 ## Interface-BCC: 20504
## Interface-Wrath: 30400
## 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,28 @@
# Changelog # Changelog
v1.13.15:
- Updated TOC for Retail (9.2.7).
- Added Wrath-Classic compatibility.
v1.13.14.3:
- Restored right-click menus on Info and Health bars when targeting other players.
v1.13.14.2:
- Restored right-click menus on Info and Health bars.
v1.13.14.1:
- Restored guard around array that doesn't exist on Classic clients.
v1.13.14:
- Fixed target health updating infrequently on Classic.
- Fixed compatibility with WoW 9.2.5.
- Updated TOC for all game flavors.
v1.13.13: v1.13.13:
- Slight optimization of Zereth Mortis puzzle detection logic. - Slight optimization of Zereth Mortis puzzle detection logic.

View File

@ -286,7 +286,7 @@ function GlobalCoolDown.prototype:GetSpellId()
MONK=100780, -- jab MONK=100780, -- jab
} }
if IceHUD.WowClassicBC or IceHUD.WowClassic then if IceHUD.UseFallbackPaladinGCDSpell then
defaultSpells["PALADIN"] = 635 defaultSpells["PALADIN"] = 635
end end

View File

@ -203,7 +203,7 @@ function PlayerMana.prototype:CheckVehicle()
end end
function PlayerMana.prototype:ShouldUseTicker() function PlayerMana.prototype:ShouldUseTicker()
return IceHUD.WowVer < 30000 or (IceHUD.WowVer < 70100 and not GetCVarBool("predictedPower")) return IceHUD.WowVer < 30000 or (IceHUD.WowVer < 70100 and not GetCVarBool("predictedPower") and not IceHUD.WowClassicWrath)
end end
function PlayerMana.prototype:SetupOnUpdate(enable) function PlayerMana.prototype:SetupOnUpdate(enable)

View File

@ -9,15 +9,15 @@ if CooldownFrame_Set then
end end
local RUNETYPE_BLOOD = 1; local RUNETYPE_BLOOD = 1;
local RUNETYPE_DEATH = IceHUD.WowVer < 70300 and 2 or 3; local RUNETYPE_DEATH = IceHUD.DeathKnightUnholyFrostRunesSwapped and 2 or 3;
local RUNETYPE_FROST = IceHUD.WowVer < 70300 and 3 or 2; local RUNETYPE_FROST = IceHUD.DeathKnightUnholyFrostRunesSwapped and 3 or 2;
local RUNETYPE_CHROMATIC = 4; local RUNETYPE_CHROMATIC = 4;
local RUNETYPE_LEGION = 5; -- not real, but makes for an easy update local RUNETYPE_LEGION = 5; -- not real, but makes for an easy update
local GetRuneType = GetRuneType local GetRuneType = GetRuneType
if IceHUD.WowVer >= 70000 and IceHUD.WowVer < 70300 then if IceHUD.WowVer >= 70000 and IceHUD.WowVer < 70300 and RUNETYPE_LEGION then
GetRuneType = function() return RUNETYPE_LEGION end GetRuneType = function() return RUNETYPE_LEGION end
elseif IceHUD.WowVer >= 70300 then elseif IceHUD.WowVer >= 70300 and GetSpecialization then
GetRuneType = function() return GetSpecialization() end GetRuneType = function() return GetSpecialization() end
end end

View File

@ -42,6 +42,10 @@ elseif IceHUD.WowClassicBC then
impSndBonusPerRank = 0.15 impSndBonusPerRank = 0.15
impSndTalentPage = 2 impSndTalentPage = 2
impSndTalentIdx = 4 impSndTalentIdx = 4
elseif IceHUD.WowClassicWrath then
impSndBonusPerRank = 0.25
impSndTalentPage = 2
impSndTalentIdx = 23
end end
local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS
@ -290,7 +294,7 @@ local function HasSpell(id)
end end
local function ShouldHide() local function ShouldHide()
if IceHUD.WowVer >= 90000 or IceHUD.WowClassicBC then if IceHUD.WowVer >= 90000 or IceHUD.WowClassicBC or IceHUD.WowClassicWrath then
return false return false
end end

View File

@ -15,7 +15,7 @@ end
function TargetCast.prototype:Enable(core) function TargetCast.prototype:Enable(core)
TargetCast.super.prototype.Enable(self, core) TargetCast.super.prototype.Enable(self, core)
if IceHUD.WowVer >= 30200 then if IceHUD.EventExistsSpellcastInterruptible then
self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTIBLE", "SpellCastInterruptible") self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTIBLE", "SpellCastInterruptible")
self:RegisterEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "SpellCastNotInterruptible") self:RegisterEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "SpellCastNotInterruptible")
end end

View File

@ -1,7 +1,6 @@
# Changelog # Changelog
v1.13.13: v1.13.15:
- Slight optimization of Zereth Mortis puzzle detection logic. - Updated TOC for Retail (9.2.7).
- Fixed target health updating infrequently on Classic-BC. - Added Wrath-Classic compatibility.
- Fixed reported error in TargetInvuln module.