Compare commits
36 Commits
Author | SHA1 | Date | |
---|---|---|---|
6325ed1ade
|
|||
a4c44a5809
|
|||
82db70969a
|
|||
47931922bd
|
|||
af74c9e3fe
|
|||
611f37a1f3
|
|||
5d8b83e5ef
|
|||
53fdb48b05
|
|||
b64294ca11
|
|||
0785265feb
|
|||
4007f1258b
|
|||
c7c92d468e
|
|||
eee20f17b4
|
|||
0aa584d81a
|
|||
51e2debc4d
|
|||
d48ae9b12a
|
|||
83028c159f
|
|||
a8a3da753e
|
|||
9e77fa6831 | |||
e4919fb1fe
|
|||
724a3001ed
|
|||
8226679ccd
|
|||
2c0b3d5f6f
|
|||
a08c2455c6
|
|||
8868b16785
|
|||
fc009492cb
|
|||
e2ef8e6cb1
|
|||
da5498d1a2
|
|||
e8c8172298
|
|||
345d12263c
|
|||
843292eda7
|
|||
58721f4fa6
|
|||
ebbddc0001
|
|||
764a097fe2 | |||
60587b22f8
|
|||
ec80716991
|
61
IceCore.lua
@ -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)
|
||||||
|
|
||||||
|
258
IceHUD.lua
@ -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.WowClassic or 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()
|
||||||
@ -658,134 +684,134 @@ function IceHUD:GetIsInLFGGroup()
|
|||||||
return IsInLFGGroup
|
return IsInLFGGroup
|
||||||
end
|
end
|
||||||
|
|
||||||
local BLACKLISTED_UNIT_MENU_OPTIONS = {
|
if UnitPopupButtons then
|
||||||
SET_FOCUS = "ICEHUD_SET_FOCUS",
|
local BLACKLISTED_UNIT_MENU_OPTIONS = {
|
||||||
CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS",
|
SET_FOCUS = "ICEHUD_SET_FOCUS",
|
||||||
PET_DISMISS = "ICEHUD_PET_DISMISS",
|
CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS",
|
||||||
LOCK_FOCUS_FRAME = true,
|
PET_DISMISS = "ICEHUD_PET_DISMISS",
|
||||||
UNLOCK_FOCUS_FRAME = true,
|
LOCK_FOCUS_FRAME = true,
|
||||||
}
|
UNLOCK_FOCUS_FRAME = true,
|
||||||
|
}
|
||||||
|
|
||||||
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,
|
||||||
}
|
}
|
||||||
|
|
||||||
local munged_unit_menus = {}
|
local munged_unit_menus = {}
|
||||||
local function munge_unit_menu(menu)
|
local function munge_unit_menu(menu)
|
||||||
local result = munged_unit_menus[menu]
|
local result = munged_unit_menus[menu]
|
||||||
if result then
|
if result then
|
||||||
return result
|
return result
|
||||||
end
|
|
||||||
|
|
||||||
if not UnitPopupMenus then
|
|
||||||
munged_unit_menus[menu] = menu
|
|
||||||
return menu
|
|
||||||
end
|
|
||||||
|
|
||||||
local data = UnitPopupMenus[menu]
|
|
||||||
if not data then
|
|
||||||
munged_unit_menus[menu] = menu
|
|
||||||
return menu
|
|
||||||
end
|
|
||||||
|
|
||||||
local found = false
|
|
||||||
local _, v
|
|
||||||
for _, v in ipairs(data) do
|
|
||||||
if BLACKLISTED_UNIT_MENU_OPTIONS[v] then
|
|
||||||
found = true
|
|
||||||
break
|
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
if not found then
|
if not UnitPopupMenus then
|
||||||
-- nothing to remove or add, we're all fine here.
|
munged_unit_menus[menu] = menu
|
||||||
munged_unit_menus[menu] = menu
|
return menu
|
||||||
return menu
|
|
||||||
end
|
|
||||||
|
|
||||||
local new_data = {}
|
|
||||||
for _, v in ipairs(data) do
|
|
||||||
local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[v]
|
|
||||||
if v == "PET_DISMISS" and select(2, UnitClass("player")) == "WARLOCK" then
|
|
||||||
blacklisted = false
|
|
||||||
end
|
end
|
||||||
if not blacklisted then
|
|
||||||
new_data[#new_data+1] = v
|
local data = UnitPopupMenus[menu]
|
||||||
elseif blacklisted ~= true then
|
if not data then
|
||||||
new_data[#new_data+1] = blacklisted
|
munged_unit_menus[menu] = menu
|
||||||
|
return menu
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local found = false
|
||||||
|
local _, v
|
||||||
|
for _, v in ipairs(data) do
|
||||||
|
if BLACKLISTED_UNIT_MENU_OPTIONS[v] then
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if not found then
|
||||||
|
-- nothing to remove or add, we're all fine here.
|
||||||
|
munged_unit_menus[menu] = menu
|
||||||
|
return menu
|
||||||
|
end
|
||||||
|
|
||||||
|
local new_data = {}
|
||||||
|
for _, v in ipairs(data) do
|
||||||
|
local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[v]
|
||||||
|
if v == "PET_DISMISS" and select(2, UnitClass("player")) == "WARLOCK" then
|
||||||
|
blacklisted = false
|
||||||
|
end
|
||||||
|
if not blacklisted then
|
||||||
|
new_data[#new_data+1] = v
|
||||||
|
elseif blacklisted ~= true then
|
||||||
|
new_data[#new_data+1] = blacklisted
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local new_menu_name = "ICEHUD_" .. menu
|
||||||
|
|
||||||
|
UnitPopupMenus[new_menu_name] = new_data
|
||||||
|
munged_unit_menus[menu] = new_menu_name
|
||||||
|
return new_menu_name
|
||||||
end
|
end
|
||||||
local new_menu_name = "ICEHUD_" .. menu
|
IceHUD.MungeUnitMenu = munge_unit_menu
|
||||||
|
|
||||||
UnitPopupMenus[new_menu_name] = new_data
|
local function figure_unit_menu(unit)
|
||||||
munged_unit_menus[menu] = new_menu_name
|
if unit == "focus" then
|
||||||
return new_menu_name
|
return "FOCUS"
|
||||||
end
|
end
|
||||||
IceHUD.MungeUnitMenu = munge_unit_menu
|
|
||||||
|
|
||||||
local function figure_unit_menu(unit)
|
if UnitIsUnit(unit, "player") then
|
||||||
if unit == "focus" then
|
return "SELF"
|
||||||
return "FOCUS"
|
end
|
||||||
|
|
||||||
|
if UnitIsUnit(unit, "vehicle") then
|
||||||
|
-- NOTE: vehicle check must come before pet check for accuracy's sake because
|
||||||
|
-- a vehicle may also be considered your pet
|
||||||
|
return "VEHICLE"
|
||||||
|
end
|
||||||
|
|
||||||
|
if UnitIsUnit(unit, "pet") then
|
||||||
|
return "PET"
|
||||||
|
end
|
||||||
|
|
||||||
|
if not UnitIsPlayer(unit) then
|
||||||
|
return "TARGET"
|
||||||
|
end
|
||||||
|
|
||||||
|
local id = UnitInRaid(unit)
|
||||||
|
if id then
|
||||||
|
return "RAID_PLAYER", id
|
||||||
|
end
|
||||||
|
|
||||||
|
if UnitInParty(unit) then
|
||||||
|
return "PARTY"
|
||||||
|
end
|
||||||
|
|
||||||
|
return "PLAYER"
|
||||||
end
|
end
|
||||||
|
|
||||||
if UnitIsUnit(unit, "player") then
|
IceHUD_UnitFrame_DropDown = CreateFrame("Frame", "IceHUD_UnitFrame_DropDown", UIParent, "UIDropDownMenuTemplate")
|
||||||
return "SELF"
|
|
||||||
end
|
|
||||||
|
|
||||||
if UnitIsUnit(unit, "vehicle") then
|
|
||||||
-- NOTE: vehicle check must come before pet check for accuracy's sake because
|
|
||||||
-- a vehicle may also be considered your pet
|
|
||||||
return "VEHICLE"
|
|
||||||
end
|
|
||||||
|
|
||||||
if UnitIsUnit(unit, "pet") then
|
|
||||||
return "PET"
|
|
||||||
end
|
|
||||||
|
|
||||||
if not UnitIsPlayer(unit) then
|
|
||||||
return "TARGET"
|
|
||||||
end
|
|
||||||
|
|
||||||
local id = UnitInRaid(unit)
|
|
||||||
if id then
|
|
||||||
return "RAID_PLAYER", id
|
|
||||||
end
|
|
||||||
|
|
||||||
if UnitInParty(unit) then
|
|
||||||
return "PARTY"
|
|
||||||
end
|
|
||||||
|
|
||||||
return "PLAYER"
|
|
||||||
end
|
|
||||||
|
|
||||||
IceHUD_UnitFrame_DropDown = CreateFrame("Frame", "IceHUD_UnitFrame_DropDown", UIParent, "UIDropDownMenuTemplate")
|
|
||||||
if UnitPopupFrames then
|
|
||||||
UnitPopupFrames[#UnitPopupFrames+1] = "IceHUD_UnitFrame_DropDown"
|
UnitPopupFrames[#UnitPopupFrames+1] = "IceHUD_UnitFrame_DropDown"
|
||||||
|
|
||||||
|
IceHUD.DropdownUnit = nil
|
||||||
|
UIDropDownMenu_Initialize(IceHUD_UnitFrame_DropDown, function()
|
||||||
|
if not IceHUD.DropdownUnit then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local menu, id = figure_unit_menu(IceHUD.DropdownUnit)
|
||||||
|
if menu then
|
||||||
|
menu = IceHUD.MungeUnitMenu(menu)
|
||||||
|
UnitPopup_ShowMenu(IceHUD_UnitFrame_DropDown, menu, IceHUD.DropdownUnit, nil, id)
|
||||||
|
end
|
||||||
|
end, "MENU", nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
IceHUD.DropdownUnit = nil
|
|
||||||
UIDropDownMenu_Initialize(IceHUD_UnitFrame_DropDown, function()
|
|
||||||
if not IceHUD.DropdownUnit then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local menu, id = figure_unit_menu(IceHUD.DropdownUnit)
|
|
||||||
if menu then
|
|
||||||
menu = IceHUD.MungeUnitMenu(menu)
|
|
||||||
UnitPopup_ShowMenu(IceHUD_UnitFrame_DropDown, menu, IceHUD.DropdownUnit, nil, id)
|
|
||||||
end
|
|
||||||
end, "MENU", nil)
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
## Interface: 90100
|
## Interface: 90205
|
||||||
## Interface-Retail: 90100
|
## Interface-Retail: 90205
|
||||||
## Interface-Classic: 11306
|
## Interface-Classic: 11403
|
||||||
## Interface-BCC: 20501
|
## Interface-BCC: 20504
|
||||||
## 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
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
## Interface: 90100
|
## Interface: 90205
|
||||||
## Interface-Retail: 90100
|
## Interface-Retail: 90205
|
||||||
## Interface-Classic: 11306
|
## Interface-Classic: 11403
|
||||||
## Interface-BCC: 20501
|
## Interface-BCC: 20504
|
||||||
## Title: IceHUD |cff7fff7f-Options-|r
|
## Title: IceHUD |cff7fff7f-Options-|r
|
||||||
## Author: Parnic
|
## Author: Parnic
|
||||||
## Version: @project-version@
|
## Version: @project-version@
|
||||||
|
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021 parnic
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
47
changelog.md
@ -1,5 +1,52 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
- 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:
|
||||||
|
|
||||||
|
- Updated TOC for BC-Classic and Classic.
|
||||||
|
|
||||||
|
v1.13.8:
|
||||||
|
|
||||||
|
- Fixed Paladin GCD not functioning in BC-Classic.
|
||||||
|
|
||||||
|
v1.13.7:
|
||||||
|
|
||||||
|
- Fixed energy ticker when zoning back into an instance after dying (Classic builds)
|
||||||
|
- Added newer Fear spell to CC modules.
|
||||||
|
- Fixed the straight textures (Tanks) not showing the lowest or highest values appropriately (10% could look empty, 90% could look full).
|
||||||
|
|
||||||
v1.13.6:
|
v1.13.6:
|
||||||
|
|
||||||
- Updated TOC to 9.1
|
- Updated TOC to 9.1
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -286,6 +286,10 @@ function GlobalCoolDown.prototype:GetSpellId()
|
|||||||
MONK=100780, -- jab
|
MONK=100780, -- jab
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if IceHUD.WowClassicBC or IceHUD.WowClassic then
|
||||||
|
defaultSpells["PALADIN"] = 635
|
||||||
|
end
|
||||||
|
|
||||||
local _, unitClass = UnitClass("player")
|
local _, unitClass = UnitClass("player")
|
||||||
return defaultSpells[unitClass]
|
return defaultSpells[unitClass]
|
||||||
end
|
end
|
||||||
|
@ -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()
|
||||||
|
@ -280,7 +280,7 @@ function PlayerMana.prototype:ManaType(event, unit)
|
|||||||
|
|
||||||
if self:ShouldUseTicker() then
|
if self:ShouldUseTicker() then
|
||||||
-- register ticker for rogue energy
|
-- register ticker for rogue energy
|
||||||
if (self.moduleSettings.tickerEnabled and (self.manaType == SPELL_POWER_ENERGY) and self.alive) then
|
if self.moduleSettings.tickerEnabled and self.manaType == SPELL_POWER_ENERGY then
|
||||||
self.tickerFrame:Show()
|
self.tickerFrame:Show()
|
||||||
self.tickerFrame:SetScript("OnUpdate", function() self:EnergyTick() end)
|
self.tickerFrame:SetScript("OnUpdate", function() self:EnergyTick() end)
|
||||||
else
|
else
|
||||||
@ -438,7 +438,7 @@ function PlayerMana.prototype:EnergyTick()
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if not (self.tickStart) then
|
if not self.tickStart or not self.alive then
|
||||||
self.tickerFrame:Hide()
|
self.tickerFrame:Hide()
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -113,6 +113,8 @@ local IncapacitateCCList = {
|
|||||||
local FearCCList = {
|
local FearCCList = {
|
||||||
-- Psychic Scream
|
-- Psychic Scream
|
||||||
8122,
|
8122,
|
||||||
|
-- Fear (Retail)
|
||||||
|
118699,
|
||||||
-- Fear
|
-- Fear
|
||||||
5782,
|
5782,
|
||||||
-- Howl of Terror
|
-- Howl of Terror
|
||||||
|
@ -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)
|
||||||
|
@ -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))
|
||||||
|
@ -287,10 +287,9 @@ function Totems.prototype:CreateTotemFrame()
|
|||||||
self.frame.graphical = {}
|
self.frame.graphical = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
local totemType
|
|
||||||
for i=1, self.numTotems do
|
for i=1, self.numTotems do
|
||||||
slot = TOTEM_PRIORITIES[i]
|
local slot = TOTEM_PRIORITIES[i]
|
||||||
self:CreateTotem(slot, self.totemNames[slot])
|
self:CreateTotem(slot, self.totemNames[slot])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -340,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")
|
||||||
@ -349,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")
|
||||||
@ -376,9 +373,9 @@ function Totems.prototype:CreateTotem(i, name)
|
|||||||
self.graphicalOnLeave = function() GameTooltip:Hide() end
|
self.graphicalOnLeave = function() GameTooltip:Hide() end
|
||||||
end
|
end
|
||||||
if not self.graphicalOnMouseUp then
|
if not self.graphicalOnMouseUp then
|
||||||
self.graphicalOnMouseUp = function (self, mouseButton)
|
self.graphicalOnMouseUp = function (button, mouseButton)
|
||||||
if mouseButton == "RightButton" then
|
if mouseButton == "RightButton" then
|
||||||
DestroyTotem(self.slot)
|
DestroyTotem(button.slot)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -406,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
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
# IceHUD
|
# IceHUD
|
||||||
|
|
||||||
## If you are getting a `PLAYER_TALENT_UPDATE` error in LibRangeCheck-2.0 on BC-Classic, please see https://www.wowace.com/projects/ice-hud/issues/303 - this is not IceHUD's fault.
|
|
||||||
|
|
||||||
IceHUD is a highly configurable and customizable HUD addon in the spirit of DHUD, MetaHUD, and others designed to keep your focus in the center of the screen where your character is.
|
IceHUD is a highly configurable and customizable HUD addon in the spirit of DHUD, MetaHUD, and others designed to keep your focus in the center of the screen where your character is.
|
||||||
|
|
||||||
## **What it is**
|
## **What it is**
|
||||||
|
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 118 KiB |
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 37 KiB |
@ -1,6 +1,7 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
v1.13.6:
|
v1.13.14:
|
||||||
|
|
||||||
- Updated TOC to 9.1
|
- Fixed target health updating infrequently on Classic.
|
||||||
- Packaged an updated DogTag library with a fix for Classic-era `[Class]` tags.
|
- Fixed compatibility with WoW 9.2.5.
|
||||||
|
- Updated TOC for all game flavors.
|
||||||
|