mirror of
https://github.com/parnic/ice-hud.git
synced 2025-06-16 14:50:13 -05:00
Compare commits
32 Commits
Author | SHA1 | Date | |
---|---|---|---|
42fab8e4a4 | |||
b368558959
|
|||
78cb950a80 | |||
06dcc7ce99 | |||
2c00b23bf5 | |||
590638a156 | |||
e6bd39352c | |||
a4060dff6f | |||
268a6c6fbc | |||
b75112db79 | |||
42e76dde72 | |||
43aa303887 | |||
30ec3750c1
|
|||
73891bca4b
|
|||
66f4492fa7 | |||
6c1c68a0c3 | |||
b17582afab | |||
e94138d201 | |||
8a3f9e19d0
|
|||
1f4a8aefa7
|
|||
1ca424dccb
|
|||
8b9263a2c5 | |||
40efe6a551 | |||
f15dda769d | |||
9b063bed63 | |||
d451969177
|
|||
6c2e759f45 | |||
b0f7c776db | |||
c425206748 | |||
57ddf62f73 | |||
67cd7330ad | |||
5c344cfac1 |
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@ -32,7 +32,7 @@ jobs:
|
||||
|
||||
# we first have to clone the AddOn project, this is a required step
|
||||
- name: Clone project
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # gets git history for changelogs
|
||||
|
||||
|
3
.pkgmeta
3
.pkgmeta
@ -10,6 +10,9 @@ externals:
|
||||
libs/AceEvent-3.0:
|
||||
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceEvent-3.0
|
||||
tag: latest
|
||||
libs/AceSerializer-3.0:
|
||||
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceSerializer-3.0
|
||||
tag: latest
|
||||
libs/AceTimer-3.0:
|
||||
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceTimer-3.0
|
||||
tag: latest
|
||||
|
@ -23,6 +23,25 @@ if not UnitCastingInfo then
|
||||
UnitChannelInfo = ChannelInfo
|
||||
end
|
||||
|
||||
local GetSpellName = GetSpellInfo
|
||||
if C_Spell and C_Spell.GetSpellName then
|
||||
GetSpellName = C_Spell.GetSpellName
|
||||
end
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then
|
||||
GetSpellInfo = function(spellID)
|
||||
if not spellID then
|
||||
return nil
|
||||
end
|
||||
|
||||
local spellInfo = C_Spell.GetSpellInfo(spellID)
|
||||
if spellInfo then
|
||||
return spellInfo.name, nil, spellInfo.iconID, spellInfo.castTime, spellInfo.minRange, spellInfo.maxRange, spellInfo.spellID, spellInfo.originalIconID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Fulzamoth 2019-09-27 : Use LibClassicCasterino if it's there so we can use TargetCast
|
||||
-- module in Classic WoW
|
||||
if IceHUD.WowClassic then
|
||||
@ -470,6 +489,10 @@ function IceCastBar.prototype:GetCurrentCastingColor()
|
||||
end
|
||||
|
||||
function IceCastBar.prototype:FlashBar(color, alpha, text, textColor)
|
||||
if self.moduleSettings.flashInstants == "Never" then
|
||||
return
|
||||
end
|
||||
|
||||
if alpha then
|
||||
self.frame:SetAlpha(alpha)
|
||||
end
|
||||
@ -697,11 +720,11 @@ function IceCastBar.prototype:SpellCastSucceeded(event, unit, castGuid, spellId)
|
||||
return
|
||||
end
|
||||
|
||||
local spell = GetSpellInfo(spellId)
|
||||
local spell = GetSpellName(spellId)
|
||||
|
||||
-- show after normal successfull cast
|
||||
if (self.action == IceCastBar.Actions.Cast) then
|
||||
self:StartBar(IceCastBar.Actions.Success, spell.. self:GetShortRank(rank), spellId)
|
||||
self:StartBar(IceCastBar.Actions.Success, spell, spellId)
|
||||
return
|
||||
end
|
||||
|
||||
@ -719,7 +742,7 @@ function IceCastBar.prototype:SpellCastSucceeded(event, unit, castGuid, spellId)
|
||||
return
|
||||
end
|
||||
|
||||
self:StartBar(IceCastBar.Actions.Success, spell.. self:GetShortRank(rank), spellId)
|
||||
self:StartBar(IceCastBar.Actions.Success, spell, spellId)
|
||||
end
|
||||
|
||||
|
||||
|
37
IceCore.lua
37
IceCore.lua
@ -19,6 +19,25 @@ end
|
||||
|
||||
local DogTag = LibStub("LibDogTag-3.0", true)
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then
|
||||
GetSpellInfo = function(spellID)
|
||||
if not spellID then
|
||||
return nil
|
||||
end
|
||||
|
||||
local spellInfo = C_Spell.GetSpellInfo(spellID)
|
||||
if spellInfo then
|
||||
return spellInfo.name, nil, spellInfo.iconID, spellInfo.castTime, spellInfo.minRange, spellInfo.maxRange, spellInfo.spellID, spellInfo.originalIconID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local GetSpellName = GetSpellInfo
|
||||
if C_Spell and C_Spell.GetSpellName then
|
||||
GetSpellName = C_Spell.GetSpellName
|
||||
end
|
||||
|
||||
IceCore = IceCore_CreateClass()
|
||||
|
||||
IceCore.Side = { Left = "LEFT", Right = "RIGHT" }
|
||||
@ -367,13 +386,13 @@ end
|
||||
|
||||
function IceCore.prototype:RedirectRemovedModules()
|
||||
local _, class = UnitClass("player")
|
||||
if class == "WARRIOR" and self.settings.modules["SunderCount"] and GetSpellInfo(SUNDER_SPELL_ID) and IceHUD.WowVer < 60000 then
|
||||
if class == "WARRIOR" and self.settings.modules["SunderCount"] and GetSpellName(SUNDER_SPELL_ID) and IceHUD.WowVer < 60000 then
|
||||
if self.settings.modules["SunderCount"].enabled or self.settings.modules["SunderCount"].enabled == nil then
|
||||
local bFound = false
|
||||
|
||||
for k,v in pairs(self.elements) do
|
||||
if v.moduleSettings.customBarType == "Counter" and v.moduleSettings.auraName
|
||||
and string.upper(v.moduleSettings.auraName) == string.upper(GetSpellInfo(SUNDER_SPELL_ID)) then
|
||||
and string.upper(v.moduleSettings.auraName) == string.upper(GetSpellName(SUNDER_SPELL_ID)) then
|
||||
bFound = true
|
||||
break
|
||||
end
|
||||
@ -396,7 +415,7 @@ function IceCore.prototype:RedirectRemovedModules()
|
||||
newCounter.moduleSettings.maxCount = 3
|
||||
newCounter.moduleSettings.auraTarget = "target"
|
||||
newCounter.moduleSettings.auraType = "debuff"
|
||||
newCounter.moduleSettings.auraName = GetSpellInfo(SUNDER_SPELL_ID)
|
||||
newCounter.moduleSettings.auraName = GetSpellName(SUNDER_SPELL_ID)
|
||||
newCounter:Enable()
|
||||
end
|
||||
end
|
||||
@ -404,12 +423,12 @@ function IceCore.prototype:RedirectRemovedModules()
|
||||
self.settings.modules["SunderCount"] = nil
|
||||
end
|
||||
|
||||
if class == "DRUID" and self.settings.modules["LacerateCount"] and GetSpellInfo(LACERATE_SPELL_ID) then
|
||||
if class == "DRUID" and self.settings.modules["LacerateCount"] and GetSpellName(LACERATE_SPELL_ID) then
|
||||
if self.settings.modules["LacerateCount"].enabled or self.settings.modules["LacerateCount"].enabled == nil then
|
||||
local bFound = false
|
||||
for k,v in pairs(self.elements) do
|
||||
if v.moduleSettings.customBarType == "Counter" and v.moduleSettings.auraName
|
||||
and string.upper(v.moduleSettings.auraName) == string.upper(GetSpellInfo(LACERATE_SPELL_ID)) then
|
||||
and string.upper(v.moduleSettings.auraName) == string.upper(GetSpellName(LACERATE_SPELL_ID)) then
|
||||
bFound = true
|
||||
break
|
||||
end
|
||||
@ -433,7 +452,7 @@ function IceCore.prototype:RedirectRemovedModules()
|
||||
newCounter.moduleSettings.maxCount = 3
|
||||
newCounter.moduleSettings.auraTarget = "target"
|
||||
newCounter.moduleSettings.auraType = "debuff"
|
||||
newCounter.moduleSettings.auraName = GetSpellInfo(LACERATE_SPELL_ID)
|
||||
newCounter.moduleSettings.auraName = GetSpellName(LACERATE_SPELL_ID)
|
||||
newCounter:Enable()
|
||||
end
|
||||
end
|
||||
@ -441,12 +460,12 @@ function IceCore.prototype:RedirectRemovedModules()
|
||||
self.settings.modules["LacerateCount"] = nil
|
||||
end
|
||||
|
||||
if class == "SHAMAN" and self.settings.modules["MaelstromCount"] and GetSpellInfo(MAELSTROM_SPELL_ID) then
|
||||
if class == "SHAMAN" and self.settings.modules["MaelstromCount"] and GetSpellName(MAELSTROM_SPELL_ID) then
|
||||
if self.settings.modules["MaelstromCount"].enabled or self.settings.modules["MaelstromCount"].enabled == nil then
|
||||
local bFound = false
|
||||
for k,v in pairs(self.elements) do
|
||||
if v.moduleSettings.customBarType == "Counter" and v.moduleSettings.auraName
|
||||
and string.upper(v.moduleSettings.auraName) == string.upper(GetSpellInfo(MAELSTROM_SPELL_ID)) then
|
||||
and string.upper(v.moduleSettings.auraName) == string.upper(GetSpellName(MAELSTROM_SPELL_ID)) then
|
||||
bFound = true
|
||||
break
|
||||
end
|
||||
@ -466,7 +485,7 @@ function IceCore.prototype:RedirectRemovedModules()
|
||||
newCounter.moduleSettings.countMode = self.settings.modules["MaelstromCount"].maelstromMode or newCounter.moduleSettings.countMode
|
||||
newCounter.moduleSettings.countGap = self.settings.modules["MaelstromCount"].maelstromGap or newCounter.moduleSettings.countGap
|
||||
newCounter.moduleSettings.gradient = self.settings.modules["MaelstromCount"].gradient or newCounter.moduleSettings.gradient
|
||||
newCounter.moduleSettings.auraName = GetSpellInfo(MAELSTROM_SPELL_ID)
|
||||
newCounter.moduleSettings.auraName = GetSpellName(MAELSTROM_SPELL_ID)
|
||||
newCounter:Enable()
|
||||
end
|
||||
end
|
||||
|
301
IceHUD.lua
301
IceHUD.lua
@ -11,6 +11,20 @@ local icon = LibStub("LibDBIcon-1.0", true)
|
||||
local pendingModuleLoads = {}
|
||||
local bReadyToRegisterModules = false
|
||||
|
||||
local LoadAddOn = C_AddOns and C_AddOns.LoadAddOn or LoadAddOn
|
||||
|
||||
IceHUD.UnitAura = UnitAura
|
||||
if not IceHUD.UnitAura then
|
||||
IceHUD.UnitAura = function(unitToken, index, filter)
|
||||
local auraData = C_UnitAuras.GetAuraDataByIndex(unitToken, index, filter)
|
||||
if not auraData then
|
||||
return nil
|
||||
end
|
||||
|
||||
return AuraUtil.UnpackAuraData(auraData)
|
||||
end
|
||||
end
|
||||
|
||||
IceHUD.CurrTagVersion = 3
|
||||
IceHUD.debugging = false
|
||||
|
||||
@ -39,6 +53,25 @@ else
|
||||
end
|
||||
end
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then
|
||||
GetSpellInfo = function(spellID)
|
||||
if not spellID then
|
||||
return nil
|
||||
end
|
||||
|
||||
local spellInfo = C_Spell.GetSpellInfo(spellID)
|
||||
if spellInfo then
|
||||
return spellInfo.name, nil, spellInfo.iconID, spellInfo.castTime, spellInfo.minRange, spellInfo.maxRange, spellInfo.spellID, spellInfo.originalIconID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local GetSpellName = GetSpellInfo
|
||||
if C_Spell and C_Spell.GetSpellName then
|
||||
GetSpellName = C_Spell.GetSpellName
|
||||
end
|
||||
|
||||
-- compatibility/feature flags
|
||||
IceHUD.CanShowTargetCasting = not IceHUD.WowClassic or LibClassicCasterino or (IceHUD.WowClassic and IceHUD.WowVer >= 11500)
|
||||
IceHUD.GetPlayerAuraBySpellID = _G["C_UnitAuras"] and C_UnitAuras.GetPlayerAuraBySpellID
|
||||
@ -60,13 +93,13 @@ IceHUD.CanHookDestroyTotem = IceHUD.WowClassic or IceHUD.WowClassicBC or IceHUD.
|
||||
IceHUD.ShouldUpdateTargetHealthEveryTick = (IceHUD.WowClassic or IceHUD.WowClassicBC) and GetCVarBool("predictedHealth")
|
||||
IceHUD.UsesUIPanelButtonTemplate = IceHUD.WowVer >= 50000 or not IceHUD.WowMain
|
||||
IceHUD.EventExistsSpellcastInterruptible = IceHUD.WowVer >= 30200 and not IceHUD.WowClassicWrath
|
||||
IceHUD.DeathKnightUnholyFrostRunesSwapped = IceHUD.WowVer < 70300 and not IceHUD.WowClassicWrath
|
||||
IceHUD.DeathKnightUnholyFrostRunesSwapped = IceHUD.WowVer < 70300 and not IceHUD.WowClassicWrath and not IceHUD.WowClassicCataclysm
|
||||
IceHUD.SupportsHealPrediction = IceHUD.WowVer >= 40000 or IceHUD.WowClassicWrath
|
||||
IceHUD.UnitGroupRolesReturnsRoleString = IceHUD.WowVer >= 40000 or IceHUD.WowClassicWrath
|
||||
IceHUD.ShellGameSpellID = 271571
|
||||
IceHUD.HasShellGame = GetSpellInfo(IceHUD.ShellGameSpellID)
|
||||
IceHUD.HasShellGame = GetSpellName(IceHUD.ShellGameSpellID)
|
||||
IceHUD.CatalogingSpellIDs = {366290, 372817, 385025, 385635, 386070, 386504, 400043, 403115}
|
||||
IceHUD.HasCataloging = GetSpellInfo(366290)
|
||||
IceHUD.HasCataloging = GetSpellName(366290)
|
||||
|
||||
IceHUD.UnitPowerEvent = "UNIT_POWER_UPDATE"
|
||||
|
||||
@ -74,8 +107,6 @@ IceHUD.validBarList = { "Bar", "HiBar", "RoundBar", "ColorBar", "RivetBar", "Riv
|
||||
"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_UnitFrame_DropDown = CreateFrame("Frame", "IceHUD_UnitFrame_DropDown", UIParent, "UIDropDownMenuTemplate")
|
||||
|
||||
--@debug@
|
||||
IceHUD.optionsLoaded = true
|
||||
--@end-debug@
|
||||
@ -418,7 +449,12 @@ blizOptionsPanel.button:SetWidth(240)
|
||||
blizOptionsPanel.button:SetHeight(30)
|
||||
blizOptionsPanel.button:SetScript("OnClick", function(self) HideUIPanel(InterfaceOptionsFrame) HideUIPanel(GameMenuFrame) IceHUD:OpenConfig() end)
|
||||
blizOptionsPanel.button:SetPoint('TOPLEFT', blizOptionsPanel, 'TOPLEFT', 20, -20)
|
||||
InterfaceOptions_AddCategory(blizOptionsPanel)
|
||||
if InterfaceOptions_AddCategory then
|
||||
InterfaceOptions_AddCategory(blizOptionsPanel)
|
||||
elseif Settings then
|
||||
local category = Settings.RegisterCanvasLayoutCategory(blizOptionsPanel, "IceHUD")
|
||||
Settings.RegisterAddOnCategory(category)
|
||||
end
|
||||
|
||||
function IceHUD:OpenConfig()
|
||||
if not ConfigDialog then return end
|
||||
@ -486,7 +522,7 @@ end
|
||||
|
||||
function IceHUD:GetAuraCount(auraType, unit, ability, onlyMine, matchByName)
|
||||
if not unit or not ability then
|
||||
return 0
|
||||
return 0, nil
|
||||
end
|
||||
|
||||
if unit == "main hand weapon" or unit == "off hand weapon" then
|
||||
@ -494,46 +530,46 @@ function IceHUD:GetAuraCount(auraType, unit, ability, onlyMine, matchByName)
|
||||
= GetWeaponEnchantInfo()
|
||||
|
||||
if unit == "main hand weapon" and hasMainHandEnchant then
|
||||
return mainHandCharges
|
||||
return mainHandCharges, nil
|
||||
elseif unit == "off hand weapon" and hasOffHandEnchant then
|
||||
return offHandCharges
|
||||
return offHandCharges, nil
|
||||
end
|
||||
|
||||
return 0
|
||||
return 0, nil
|
||||
end
|
||||
|
||||
-- Support for Spell IDs
|
||||
if (IceHUD.GetPlayerAuraBySpellID and tonumber(ability) ~= nil) then
|
||||
local aura = C_UnitAuras.GetPlayerAuraBySpellID(ability)
|
||||
if aura ~= nil then
|
||||
return aura.applications
|
||||
return aura.applications, nil
|
||||
else
|
||||
return 0
|
||||
return 0, nil
|
||||
end
|
||||
end
|
||||
|
||||
local i = 1
|
||||
local name, _, texture, applications
|
||||
if IceHUD.SpellFunctionsReturnRank then
|
||||
name, _, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
||||
name, _, texture, applications = IceHUD.UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
||||
else
|
||||
name, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
||||
name, texture, applications = IceHUD.UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
||||
end
|
||||
while name do
|
||||
if (not matchByName and string.match(texture:upper(), ability:upper()))
|
||||
or (matchByName and string.match(name:upper(), ability:upper())) then
|
||||
return applications
|
||||
return applications, i
|
||||
end
|
||||
|
||||
i = i + 1
|
||||
if IceHUD.SpellFunctionsReturnRank then
|
||||
name, _, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
||||
name, _, texture, applications = IceHUD.UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
||||
else
|
||||
name, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
||||
name, texture, applications = IceHUD.UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
||||
end
|
||||
end
|
||||
|
||||
return 0
|
||||
return 0, nil
|
||||
end
|
||||
|
||||
do
|
||||
@ -547,9 +583,9 @@ do
|
||||
local i = 1
|
||||
local name, _, texture, applications, _, _, _, _, _, _, auraID
|
||||
if IceHUD.SpellFunctionsReturnRank then
|
||||
name, _, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
|
||||
name, _, texture, applications, _, _, _, _, _, _, auraID = IceHUD.UnitAura(unit, i, filter)
|
||||
else
|
||||
name, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
|
||||
name, texture, applications, _, _, _, _, _, _, auraID = IceHUD.UnitAura(unit, i, filter)
|
||||
end
|
||||
while name do
|
||||
for i=1, #spellIDs do
|
||||
@ -561,9 +597,9 @@ do
|
||||
|
||||
i = i + 1
|
||||
if IceHUD.SpellFunctionsReturnRank then
|
||||
name, _, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
|
||||
name, _, texture, applications, _, _, _, _, _, _, auraID = IceHUD.UnitAura(unit, i, filter)
|
||||
else
|
||||
name, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
|
||||
name, texture, applications, _, _, _, _, _, _, auraID = IceHUD.UnitAura(unit, i, filter)
|
||||
end
|
||||
end
|
||||
|
||||
@ -763,227 +799,6 @@ function IceHUD:GetIsInLFGGroup()
|
||||
return IsInLFGGroup
|
||||
end
|
||||
|
||||
local BLACKLISTED_UNIT_MENU_OPTIONS = {}
|
||||
if UnitPopupButtons then
|
||||
BLACKLISTED_UNIT_MENU_OPTIONS = {
|
||||
SET_FOCUS = "ICEHUD_SET_FOCUS",
|
||||
CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS",
|
||||
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"] = {
|
||||
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."],
|
||||
dist = 0,
|
||||
}
|
||||
|
||||
UnitPopupButtons["ICEHUD_CLEAR_FOCUS"] = {
|
||||
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."],
|
||||
dist = 0,
|
||||
}
|
||||
|
||||
UnitPopupButtons["ICEHUD_PET_DISMISS"] = {
|
||||
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."],
|
||||
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 function munge_unit_menu(menu)
|
||||
local result = munged_unit_menus[menu]
|
||||
if result then
|
||||
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
|
||||
if data.GetMenuButtons then
|
||||
local btns = data.GetMenuButtons()
|
||||
for i=1, #btns do
|
||||
if btns[i].IsMenu() then
|
||||
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
|
||||
|
||||
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 = {}
|
||||
if data.GetMenuButtons then
|
||||
local new_buttons_list = {}
|
||||
local btns = data.GetMenuButtons()
|
||||
for i=1, #btns do
|
||||
if btns[i].IsMenu() then
|
||||
local subbtns = btns[i].GetMenuButtons()
|
||||
for j=1, #subbtns do
|
||||
if subbtns[j] then
|
||||
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
|
||||
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
|
||||
|
||||
new_data = data
|
||||
function new_data:GetMenuButtons()
|
||||
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
|
||||
local new_menu_name = "ICEHUD_" .. menu
|
||||
|
||||
UnitPopupMenus[new_menu_name] = new_data
|
||||
munged_unit_menus[menu] = new_menu_name
|
||||
return new_menu_name
|
||||
end
|
||||
IceHUD.MungeUnitMenu = munge_unit_menu
|
||||
|
||||
local function figure_unit_menu(unit)
|
||||
if unit == "focus" then
|
||||
return "FOCUS"
|
||||
end
|
||||
|
||||
if UnitIsUnit(unit, "player") then
|
||||
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
|
||||
|
||||
if UnitPopupFrames then
|
||||
UnitPopupFrames[#UnitPopupFrames+1] = "IceHUD_UnitFrame_DropDown"
|
||||
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)
|
||||
|
||||
function IceHUD:OutOfCombatWrapper(func)
|
||||
return function(...)
|
||||
return IceHUD:RunOnLeaveCombat(func, ...)
|
||||
|
20
IceHUD.toc
20
IceHUD.toc
@ -1,9 +1,9 @@
|
||||
## Interface: 100206
|
||||
## Interface-Retail: 100206
|
||||
## Interface-Classic: 11502
|
||||
## Interface: 110105
|
||||
## Interface-Retail: 110105
|
||||
## Interface-Classic: 11507
|
||||
## Interface-BCC: 20504
|
||||
## Interface-Wrath: 30403
|
||||
## Interface-Cata: 40400
|
||||
## Interface-Cata: 40402
|
||||
## Author: Parnic, originally created by Iceroth
|
||||
## Name: IceHUD
|
||||
## Title: IceHUD |cff7fff7f-Ace3-|r
|
||||
@ -22,6 +22,18 @@
|
||||
## X-Curse-Project-ID: 5394
|
||||
## X-WoWI-ID: 8149
|
||||
## X-Wago-ID: 5bGolJN0
|
||||
## Category-enUS: Unit Frames
|
||||
## Category-deDE: Einheitenfenster
|
||||
## Category-esES: Marcos de unidades
|
||||
## Category-esMX: Marcos de unidades
|
||||
## Category-frFR: Portraits d'unités
|
||||
## Category-itIT: Riquadri delle unità
|
||||
## Category-koKR: 개체창
|
||||
## Category-ptBR: Quadros de unidade
|
||||
## Category-ruRU: Рамки юнитов
|
||||
## Category-zhCN: 单位框体
|
||||
## Category-zhTW: 單位框架
|
||||
## Group: IceHUD
|
||||
|
||||
#@no-lib-strip@
|
||||
# Libraries
|
||||
|
@ -1,9 +1,9 @@
|
||||
## Interface: 100206
|
||||
## Interface-Retail: 100206
|
||||
## Interface-Classic: 11502
|
||||
## Interface: 110105
|
||||
## Interface-Retail: 110105
|
||||
## Interface-Classic: 11507
|
||||
## Interface-BCC: 20504
|
||||
## Interface-Wrath: 30403
|
||||
## Interface-Cata: 40400
|
||||
## Interface-Cata: 40402
|
||||
## Title: IceHUD |cff7fff7f-Options-|r
|
||||
## Author: Parnic
|
||||
## Version: @project-version@
|
||||
@ -12,6 +12,18 @@
|
||||
## Dependencies: IceHUD
|
||||
## LoadOnDemand: 1
|
||||
## IconTexture: Interface\Icons\Spell_Frost_Frost
|
||||
## Category-enUS: Unit Frames
|
||||
## Category-deDE: Einheitenfenster
|
||||
## Category-esES: Marcos de unidades
|
||||
## Category-esMX: Marcos de unidades
|
||||
## Category-frFR: Portraits d'unités
|
||||
## Category-itIT: Riquadri delle unità
|
||||
## Category-koKR: 개체창
|
||||
## Category-ptBR: Quadros de unidade
|
||||
## Category-ruRU: Рамки юнитов
|
||||
## Category-zhCN: 单位框体
|
||||
## Category-zhTW: 單位框架
|
||||
## Group: IceHUD
|
||||
|
||||
Json.lua
|
||||
JsonDecode.lua
|
||||
|
@ -464,25 +464,6 @@ The Classic game client doesn't provide this information to addons because it wa
|
||||
},
|
||||
|
||||
|
||||
textSettings = {
|
||||
type = 'select',
|
||||
dialogControl = "LSM30_Font",
|
||||
name = L["Font"],
|
||||
desc = L["IceHUD Font"],
|
||||
order = 19,
|
||||
get = function(info)
|
||||
return IceHUD.IceCore:GetFontFamily()
|
||||
end,
|
||||
set = function(info, value)
|
||||
IceHUD.IceCore:SetFontFamily(value)
|
||||
end,
|
||||
disabled = function()
|
||||
return not IceHUD.IceCore:IsEnabled()
|
||||
end,
|
||||
values = AceGUIWidgetLSMlists.font,
|
||||
order = 94.75,
|
||||
},
|
||||
|
||||
barSettings = {
|
||||
type = 'group',
|
||||
name = L["Bar Settings"],
|
||||
@ -780,6 +761,26 @@ The Classic game client doesn't provide this information to addons because it wa
|
||||
}
|
||||
}
|
||||
|
||||
if AceGUIWidgetLSMlists then
|
||||
options.args.textSettings = {
|
||||
type = 'select',
|
||||
dialogControl = "LSM30_Font",
|
||||
name = L["Font"],
|
||||
desc = L["IceHUD Font"],
|
||||
get = function(info)
|
||||
return IceHUD.IceCore:GetFontFamily()
|
||||
end,
|
||||
set = function(info, value)
|
||||
IceHUD.IceCore:SetFontFamily(value)
|
||||
end,
|
||||
disabled = function()
|
||||
return not IceHUD.IceCore:IsEnabled()
|
||||
end,
|
||||
values = AceGUIWidgetLSMlists.font,
|
||||
order = 94.75,
|
||||
}
|
||||
end
|
||||
|
||||
IceHUD_Options.options = options
|
||||
|
||||
function IceHUD_Options:GenerateModuleOptions(firstLoad)
|
||||
@ -789,26 +790,6 @@ function IceHUD_Options:GenerateModuleOptions(firstLoad)
|
||||
end
|
||||
end
|
||||
|
||||
function IceHUD_Options:OnLoad()
|
||||
self:GenerateModuleOptions(true)
|
||||
self.options.args.colors.args = IceHUD.IceCore:GetColorOptions()
|
||||
self.options.args.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(IceHUD.db)
|
||||
--@debug@
|
||||
IceHUD_Options:SetupProfileImportButtons()
|
||||
--@end-debug@
|
||||
|
||||
-- Add dual-spec support
|
||||
if IceHUD.db ~= nil and LibDualSpec then
|
||||
LibDualSpec:EnhanceOptions(IceHUD_Options.options.args.profiles, IceHUD.db)
|
||||
end
|
||||
|
||||
LibStub("AceConfig-3.0"):RegisterOptionsTable("IceHUD", options, "icehudcl")
|
||||
end
|
||||
|
||||
if IceHUD and IceHUD.IceCore then
|
||||
IceHUD_Options:OnLoad()
|
||||
end
|
||||
|
||||
function IceHUD_Options:SetupProfileImportButtons()
|
||||
if AceSerializer then
|
||||
AceSerializer:Embed(self)
|
||||
@ -832,24 +813,6 @@ function IceHUD_Options:SetupProfileImportButtons()
|
||||
editbox:DisableButton(true)
|
||||
frame:AddChild(editbox)
|
||||
end,
|
||||
hidden =
|
||||
-- hello, snooper! exporting works well enough, but importing is very rough, so enable this at your own peril
|
||||
--[===[@non-debug@
|
||||
true
|
||||
--@end-non-debug@]===]
|
||||
--@debug@
|
||||
false
|
||||
--@end-debug@
|
||||
,
|
||||
disabled =
|
||||
-- hello, snooper! exporting works well enough, but importing is very rough, so enable this at your own peril
|
||||
--[===[@non-debug@
|
||||
true
|
||||
--@end-non-debug@]===]
|
||||
--@debug@
|
||||
false
|
||||
--@end-debug@
|
||||
,
|
||||
order = 98.1
|
||||
}
|
||||
|
||||
@ -867,10 +830,11 @@ function IceHUD_Options:SetupProfileImportButtons()
|
||||
if err ~= nil then
|
||||
print("failed to import profile: "..err)
|
||||
else
|
||||
print("importing profile")
|
||||
-- print("importing profile")
|
||||
IceHUD:PreProfileChanged()
|
||||
IceHUD:populateDefaults(newTable, IceHUD.IceCore.defaults.profile)
|
||||
IceHUD.db.profile = IceHUD.deepcopy(newTable)
|
||||
IceHUD.db.profiles[IceHUD.db:GetCurrentProfile()] = IceHUD.db.profile
|
||||
IceHUD:PostProfileChanged()
|
||||
end
|
||||
AceGUI:Release(widget)
|
||||
@ -882,25 +846,25 @@ function IceHUD_Options:SetupProfileImportButtons()
|
||||
editbox:DisableButton(true)
|
||||
frame:AddChild(editbox)
|
||||
end,
|
||||
hidden =
|
||||
-- hello, snooper! this feature is really rough, so enable it at your own peril
|
||||
--[===[@non-debug@
|
||||
true
|
||||
--@end-non-debug@]===]
|
||||
--@debug@
|
||||
false
|
||||
--@end-debug@
|
||||
,
|
||||
disabled =
|
||||
-- hello, snooper! this feature is really rough, so enable it at your own peril
|
||||
--[===[@non-debug@
|
||||
true
|
||||
--@end-non-debug@]===]
|
||||
--@debug@
|
||||
false
|
||||
--@end-debug@
|
||||
,
|
||||
order = 98.2
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
function IceHUD_Options:OnLoad()
|
||||
self:GenerateModuleOptions(true)
|
||||
self.options.args.colors.args = IceHUD.IceCore:GetColorOptions()
|
||||
self.options.args.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(IceHUD.db)
|
||||
self:SetupProfileImportButtons()
|
||||
|
||||
-- Add dual-spec support
|
||||
if IceHUD.db ~= nil and LibDualSpec then
|
||||
LibDualSpec:EnhanceOptions(IceHUD_Options.options.args.profiles, IceHUD.db)
|
||||
end
|
||||
|
||||
LibStub("AceConfig-3.0"):RegisterOptionsTable("IceHUD", options, "icehudcl")
|
||||
end
|
||||
|
||||
if IceHUD and IceHUD.IceCore then
|
||||
IceHUD_Options:OnLoad()
|
||||
end
|
||||
|
@ -3,6 +3,21 @@ local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
||||
local validUnits = {"player", "target", "focus", "pet", "vehicle", "targettarget", "main hand weapon", "off hand weapon"}
|
||||
local buffOrDebuff = {"buff", "debuff", "charges", "spell count"}
|
||||
|
||||
local GetSpellCharges = GetSpellCharges
|
||||
if not GetSpellCharges and C_Spell then
|
||||
GetSpellCharges = function(spellID)
|
||||
local spellChargeInfo = C_Spell.GetSpellCharges(spellID)
|
||||
if spellChargeInfo then
|
||||
return spellChargeInfo.currentCharges, spellChargeInfo.maxCharges, spellChargeInfo.cooldownStartTime, spellChargeInfo.cooldownDuration, spellChargeInfo.chargeModRate
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local GetSpellCount = GetSpellCount
|
||||
if not GetSpellCount and C_Spell then
|
||||
GetSpellCount = C_Spell.GetSpellCastCount
|
||||
end
|
||||
|
||||
-- OVERRIDE
|
||||
function IceStackCounter_GetOptions(frame, opts)
|
||||
opts["customHeader"] = {
|
||||
|
86
changelog.md
86
changelog.md
@ -1,5 +1,85 @@
|
||||
# Changelog
|
||||
|
||||
v1.15.14:
|
||||
|
||||
- Support WoW 11.1.5
|
||||
- Update TWW TOC to 11.1.5
|
||||
|
||||
v1.15.13:
|
||||
|
||||
- Update TOCs
|
||||
|
||||
v1.15.12:
|
||||
|
||||
- Update TOCs
|
||||
|
||||
v1.15.11:
|
||||
|
||||
- Fix imported profiles not saving across reloads
|
||||
|
||||
v1.15.10:
|
||||
|
||||
- Fix Chi not updating properly when the player's maximum amount of Chi points changes (e.g. via Ascension talent).
|
||||
- Update TOCs
|
||||
|
||||
v1.15.9:
|
||||
|
||||
- Update Cataclysm Classic TOC to 4.4.1
|
||||
- Update Classic-era TOC to 1.15.4
|
||||
- Update TWW TOC to 11.0.5
|
||||
|
||||
v1.15.8:
|
||||
|
||||
- Fix reported error with custom cooldown bars set to "when ready" mode due to deprecation in 11.x (wowace issue #368)
|
||||
|
||||
v1.15.7:
|
||||
|
||||
- Fix cooldown display for overridden spells (such as Evoker spells where Font of Magic replaces the base spell with an override with the same name).
|
||||
|
||||
v1.15.6:
|
||||
|
||||
- Package new version of LibDogTag-Unit to fix an error with some units on 11.0.2
|
||||
|
||||
v1.15.5:
|
||||
|
||||
- Fix error when using an invalid spell with a custom bar on 11.x
|
||||
|
||||
v1.15.4:
|
||||
|
||||
- Update TOC for TWW
|
||||
|
||||
v1.15.3:
|
||||
|
||||
- Fix custom cooldown bars not working in 11.x (wowace issue #363)
|
||||
|
||||
v1.15.2:
|
||||
|
||||
- Re-enable right-click context menus on 11.x.
|
||||
- Update TOC for Classic-era
|
||||
|
||||
v1.15.1:
|
||||
|
||||
- Fix error opening options.
|
||||
|
||||
v1.15.0:
|
||||
|
||||
- Support The War Within/11.0
|
||||
- Add support for exporting and importing profiles through text.
|
||||
|
||||
v1.14.42:
|
||||
|
||||
- Fix Vengeance module in Cataclysm Classic
|
||||
|
||||
v1.14.41:
|
||||
|
||||
- Fix swapped DK runes in Cataclysm Classic
|
||||
- Possible fix for castbar flashing sometimes when set to "Never"
|
||||
- Fix IceHUD Vigor bar not showing up for some types of dragons such as the Algarian Stormrider
|
||||
|
||||
v1.14.40:
|
||||
|
||||
- Update TOC for Dragonflight to 10.2.7
|
||||
|
||||
v1.14.39:
|
||||
|
||||
- Support Cataclysm Classic 4.4.0
|
||||
@ -73,7 +153,7 @@ v1.14.23:
|
||||
|
||||
v1.14.22:
|
||||
|
||||
- Fixed reported issue with a Lua error on Wrath Classic clients. https://www.wowace.com/projects/ice-hud/issues/344
|
||||
- Fixed reported issue with a Lua error on Wrath Classic clients. <https://www.wowace.com/projects/ice-hud/issues/344>
|
||||
- Fixed Vigor module not working when riding Grotto Netherwing Drake (and theoretically all future Dragonriding mount types).
|
||||
- Updated TOC for Wrath-Classic.
|
||||
|
||||
@ -494,7 +574,7 @@ v1.10.13:
|
||||
|
||||
v1.10.12:
|
||||
|
||||
- Tweaked a few Druid CCs in the CC modules. If you've got a more up-to-date list of any of the CCs, please send them along to icehud@parnic.com
|
||||
- Tweaked a few Druid CCs in the CC modules. If you've got a more up-to-date list of any of the CCs, please send them along to <icehud@parnic.com>
|
||||
- Fixed a problem that could cause a custom counter to loop forever and cause framerate problems. (ticket #230)
|
||||
- Updated default text values for Health and Mana modules to show values in shortened form so they're more readable. Anyone who has customized their text will not be affected by this change and the shortened form only kicks in once values reach 10,000.
|
||||
|
||||
@ -1511,7 +1591,7 @@ v1.3.17:
|
||||
- fixed <http://www.wowace.com/projects/ice-hud/tickets/8-module-target-info-long-targetnames-overwrites-the/> : target name in the TargetInfo module no longer spills to the next line or gets cut off if it's too long
|
||||
- made the threat module only display while the player is in combat or the player has some threat on his target
|
||||
- added an option to only display the threat module while in a group. set by default
|
||||
- adding HungerForBlood user-submitted module. I don't have an assassination rogue and don't plan on having one, so this is _untested_ by me. the author is responsible for fixing bugs in it
|
||||
- adding HungerForBlood user-submitted module. I don't have an assassination rogue and don't plan on having one, so this is *untested* by me. the author is responsible for fixing bugs in it
|
||||
- also updated a few settings in SliceAndDice to conform with the rest of the mod
|
||||
- fix for malygos fight where the player uses combo points while in a vehicle
|
||||
- made runes flash when they become active whether the cooldown or alpha setting is being used
|
||||
|
@ -7,6 +7,7 @@
|
||||
<Include file="libs\AceGUI-3.0\AceGUI-3.0.xml"/>
|
||||
<Include file="libs\AceConfig-3.0\AceConfig-3.0.xml"/>
|
||||
<Include file="libs\AceEvent-3.0\AceEvent-3.0.xml"/>
|
||||
<Include file="libs\AceSerializer-3.0\AceSerializer-3.0.xml"/>
|
||||
<Include file="libs\AceTimer-3.0\AceTimer-3.0.xml"/>
|
||||
<Include file="libs\AceConsole-3.0\AceConsole-3.0.xml"/>
|
||||
<Include file="libs\AceAddon-3.0\AceAddon-3.0.xml"/>
|
||||
|
@ -8,6 +8,21 @@ if not CastingBarFrame then
|
||||
CastingBarFrame = PlayerCastingBarFrame
|
||||
end
|
||||
|
||||
local IsSpellInRange = IsSpellInRange
|
||||
if not IsSpellInRange and C_Spell then
|
||||
IsSpellInRange = C_Spell.IsSpellInRange
|
||||
end
|
||||
|
||||
local GetSpellCooldown = GetSpellCooldown
|
||||
if not GetSpellCooldown and C_Spell then
|
||||
GetSpellCooldown = function(spellID)
|
||||
local spellCooldownInfo = C_Spell.GetSpellCooldown(spellID)
|
||||
if spellCooldownInfo then
|
||||
return spellCooldownInfo.startTime, spellCooldownInfo.duration, spellCooldownInfo.isEnabled, spellCooldownInfo.modRate
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
CastBar.prototype.spellCastSent = nil
|
||||
|
||||
-- Constructor --
|
||||
|
@ -3,8 +3,27 @@ local ComboPoints = IceCore_CreateClass(IceElement)
|
||||
|
||||
local IceHUD = _G.IceHUD
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then
|
||||
GetSpellInfo = function(spellID)
|
||||
if not spellID then
|
||||
return nil
|
||||
end
|
||||
|
||||
local spellInfo = C_Spell.GetSpellInfo(spellID)
|
||||
if spellInfo then
|
||||
return spellInfo.name, nil, spellInfo.iconID, spellInfo.castTime, spellInfo.minRange, spellInfo.maxRange, spellInfo.spellID, spellInfo.originalIconID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local GetSpellName = GetSpellInfo
|
||||
if C_Spell and C_Spell.GetSpellName then
|
||||
GetSpellName = C_Spell.GetSpellName
|
||||
end
|
||||
|
||||
local AnticipationSpellId = 114015
|
||||
local AnticipationExists = GetSpellInfo(AnticipationSpellId) and IceHUD.WowVer < 70000
|
||||
local AnticipationExists = GetSpellName(AnticipationSpellId) and IceHUD.WowVer < 70000
|
||||
|
||||
ComboPoints.prototype.comboSize = 20
|
||||
|
||||
@ -522,7 +541,7 @@ function ComboPoints.prototype:UpdateComboPoints(...)
|
||||
end
|
||||
|
||||
if AnticipationExists then
|
||||
_, _, _, anticipate = UnitAura("player", GetSpellInfo(AnticipationSpellId))
|
||||
_, _, _, anticipate = IceHUD.UnitAura("player", GetSpellName(AnticipationSpellId))
|
||||
else
|
||||
anticipate = 0
|
||||
end
|
||||
@ -593,9 +612,9 @@ do
|
||||
if UnitIsUnit(unit, "player") then
|
||||
local _, _, _, newAntStacks
|
||||
if IceHUD.SpellFunctionsReturnRank then
|
||||
_, _, _, newAntStacks = UnitAura("player", GetSpellInfo(AnticipationSpellId))
|
||||
_, _, _, newAntStacks = IceHUD.UnitAura("player", GetSpellName(AnticipationSpellId))
|
||||
else
|
||||
_, _, newAntStacks = UnitAura("player", GetSpellInfo(AnticipationSpellId))
|
||||
_, _, newAntStacks = IceHUD.UnitAura("player", GetSpellName(AnticipationSpellId))
|
||||
end
|
||||
if newAntStacks ~= antStacks then
|
||||
antStacks = newAntStacks
|
||||
|
@ -12,6 +12,25 @@ local AuraIconWidth = 20
|
||||
local AuraIconHeight = 20
|
||||
local displayModes = {NORMAL = L["When present"], ALWAYS = L["Always"], WHEN_TARGETING = L["Always, when targeting"], MISSING = L["When missing"]}
|
||||
|
||||
local GetSpellName = GetSpellInfo
|
||||
if C_Spell and C_Spell.GetSpellName then
|
||||
GetSpellName = C_Spell.GetSpellName
|
||||
end
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then
|
||||
GetSpellInfo = function(id)
|
||||
if not id then
|
||||
return nil
|
||||
end
|
||||
|
||||
local info = C_Spell.GetSpellInfo(id)
|
||||
if info then
|
||||
return info.name, nil, info.iconID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
IceCustomBar.prototype.auraDuration = -1
|
||||
IceCustomBar.prototype.auraEndTime = -1
|
||||
IceCustomBar.prototype.bIsAura = false
|
||||
@ -686,9 +705,9 @@ function IceCustomBar.prototype:GetAuraDuration(unitName, buffName)
|
||||
local buffFilter = (isBuff and "HELPFUL" or "HARMFUL") .. (self.moduleSettings.trackOnlyMine and "|PLAYER" or "")
|
||||
local buff, rank, texture, count, type, duration, endTime, unitCaster, _, _, spellId
|
||||
if IceHUD.SpellFunctionsReturnRank then
|
||||
buff, rank, texture, count, type, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, buffFilter)
|
||||
buff, rank, texture, count, type, duration, endTime, unitCaster, _, _, spellId = IceHUD.UnitAura(unitName, i, buffFilter)
|
||||
else
|
||||
buff, texture, count, type, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, buffFilter)
|
||||
buff, texture, count, type, duration, endTime, unitCaster, _, _, spellId = IceHUD.UnitAura(unitName, i, buffFilter)
|
||||
end
|
||||
local isMine = unitCaster == "player"
|
||||
local mySpellId = tonumber(self.moduleSettings.buffToTrack)
|
||||
@ -716,9 +735,9 @@ function IceCustomBar.prototype:GetAuraDuration(unitName, buffName)
|
||||
i = i + 1;
|
||||
|
||||
if IceHUD.SpellFunctionsReturnRank then
|
||||
buff, rank, texture, count, type, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, buffFilter)
|
||||
buff, rank, texture, count, type, duration, endTime, unitCaster, _, _, spellId = IceHUD.UnitAura(unitName, i, buffFilter)
|
||||
else
|
||||
buff, texture, count, type, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, buffFilter)
|
||||
buff, texture, count, type, duration, endTime, unitCaster, _, _, spellId = IceHUD.UnitAura(unitName, i, buffFilter)
|
||||
end
|
||||
isMine = unitCaster == "player"
|
||||
end
|
||||
@ -773,7 +792,7 @@ function IceCustomBar.prototype:UpdateCustomBar(unit, fromUpdate)
|
||||
self:GetAuraDuration(self.unit, self.moduleSettings.buffToTrack)
|
||||
else
|
||||
self.auraDuration, remaining, self.auraBuffCount, auraIcon, endTime =
|
||||
self:GetAuraDuration(self.unit, GetSpellInfo(self.moduleSettings.buffToTrack))
|
||||
self:GetAuraDuration(self.unit, GetSpellName(self.moduleSettings.buffToTrack))
|
||||
end
|
||||
|
||||
if endTime == 0 then
|
||||
|
@ -17,6 +17,55 @@ local COOLDOWN_TYPE_ITEM = 2
|
||||
|
||||
local localizedInventorySlotNames = {}
|
||||
|
||||
local IsSpellInRange = IsSpellInRange
|
||||
if not IsSpellInRange and C_Spell then
|
||||
IsSpellInRange = C_Spell.IsSpellInRange
|
||||
end
|
||||
|
||||
local GetSpellName = GetSpellInfo
|
||||
if C_Spell and C_Spell.GetSpellName then
|
||||
GetSpellName = C_Spell.GetSpellName
|
||||
end
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then
|
||||
GetSpellInfo = function(id)
|
||||
if not id then
|
||||
return nil
|
||||
end
|
||||
|
||||
local info = C_Spell.GetSpellInfo(id)
|
||||
if info then
|
||||
return info.name, nil, info.iconID, info.spellID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local GetSpellCooldown = GetSpellCooldown
|
||||
if not GetSpellCooldown and C_Spell then
|
||||
GetSpellCooldown = function(spellID)
|
||||
local spellCooldownInfo = C_Spell.GetSpellCooldown(spellID)
|
||||
if spellCooldownInfo then
|
||||
return spellCooldownInfo.startTime, spellCooldownInfo.duration, spellCooldownInfo.isEnabled, spellCooldownInfo.modRate
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local GetItemInfo = GetItemInfo
|
||||
if not GetItemInfo and C_Item then
|
||||
GetItemInfo = C_Item.GetItemInfo
|
||||
end
|
||||
|
||||
local IsUsableSpell = IsUsableSpell
|
||||
if not IsUsableSpell and C_Spell then
|
||||
IsUsableSpell = C_Spell.IsSpellUsable
|
||||
end
|
||||
|
||||
local SpellHasRange = SpellHasRange
|
||||
if not SpellHasRange and C_Spell then
|
||||
SpellHasRange = C_Spell.SpellHasRange
|
||||
end
|
||||
|
||||
IceCustomCDBar.prototype.cooldownDuration = 0
|
||||
IceCustomCDBar.prototype.cooldownEndTime = 0
|
||||
IceCustomCDBar.prototype.coolingDown = false
|
||||
@ -161,7 +210,7 @@ function IceCustomCDBar.prototype:GetDisplayText(fromValue)
|
||||
|
||||
if not self.moduleSettings.cooldownType or self.moduleSettings.cooldownType == COOLDOWN_TYPE_SPELL then
|
||||
if tonumber(fromValue) ~= nil then
|
||||
local spellName = GetSpellInfo(tonumber(fromValue))
|
||||
local spellName = GetSpellName(tonumber(fromValue))
|
||||
if spellName then
|
||||
v = spellName
|
||||
end
|
||||
@ -278,7 +327,7 @@ function IceCustomCDBar.prototype:GetOptions()
|
||||
set = function(info, v)
|
||||
local orig = v
|
||||
if tonumber(v) ~= nil then
|
||||
v = GetSpellInfo(tonumber(v))
|
||||
v = GetSpellName(tonumber(v))
|
||||
end
|
||||
if v == nil then
|
||||
v = orig
|
||||
@ -592,17 +641,27 @@ end
|
||||
|
||||
-- 'Protected' methods --------------------------------------------------------
|
||||
|
||||
function IceCustomCDBar.prototype:GetCooldownDurationOverride(spellID)
|
||||
if spellID and FindSpellOverrideByID then
|
||||
local override = FindSpellOverrideByID(spellID)
|
||||
if override and override ~= spellID then
|
||||
return self:GetCooldownDuration(override)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function IceCustomCDBar.prototype:GetCooldownDuration(buffName)
|
||||
buffName = self:GetSpellNameOrId(buffName)
|
||||
local spellID
|
||||
buffName, spellID = self:GetSpellNameOrId(buffName)
|
||||
|
||||
local now = GetTime()
|
||||
local localRemaining = nil
|
||||
local localStart, localDuration, hasCooldown = GetSpellCooldown(buffName)
|
||||
|
||||
if (hasCooldown == 1) then
|
||||
if hasCooldown then
|
||||
-- the item has a potential cooldown
|
||||
if (localDuration <= 1.5) then
|
||||
return nil, nil
|
||||
if localDuration <= 1.5 then
|
||||
return self:GetCooldownDurationOverride(spellID)
|
||||
end
|
||||
|
||||
localRemaining = localDuration + (localStart - now)
|
||||
@ -613,7 +672,7 @@ function IceCustomCDBar.prototype:GetCooldownDuration(buffName)
|
||||
|
||||
return localDuration, localRemaining
|
||||
else
|
||||
return nil, nil
|
||||
return self:GetCooldownDurationOverride(spellID)
|
||||
end
|
||||
end
|
||||
|
||||
@ -696,7 +755,7 @@ function IceCustomCDBar.prototype:UpdateItemUnitInventoryChanged(event, unit)
|
||||
end
|
||||
|
||||
function IceCustomCDBar.prototype:UpdateCustomBarEvent(event, unit)
|
||||
if unit ~= self.unit then
|
||||
if unit and unit ~= self.unit then
|
||||
return
|
||||
end
|
||||
if not self.moduleSettings.cooldownType or self.moduleSettings.cooldownType == COOLDOWN_TYPE_SPELL then
|
||||
@ -824,7 +883,8 @@ function IceCustomCDBar.prototype:IsReady()
|
||||
end
|
||||
|
||||
function IceCustomCDBar.prototype:GetSpellNameOrId(spellName)
|
||||
return spellName
|
||||
local id = select(4, GetSpellInfo(spellName))
|
||||
return spellName, id
|
||||
end
|
||||
|
||||
function IceCustomCDBar.prototype:Show(bShouldShow, bForceHide)
|
||||
|
@ -7,6 +7,20 @@ local AuraIconWidth = 20
|
||||
local AuraIconHeight = 20
|
||||
local DefaultAuraIcon = "Interface\\Icons\\Spell_Frost_Frost"
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then
|
||||
GetSpellInfo = function(id)
|
||||
if not id then
|
||||
return nil
|
||||
end
|
||||
|
||||
local info = C_Spell.GetSpellInfo(id)
|
||||
if info then
|
||||
return info.name, nil, info.iconID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function IceCustomCounterBar.prototype:init()
|
||||
IceCustomCounterBar.super.prototype.init(self, "CustomCounterBar")
|
||||
|
||||
|
@ -11,7 +11,9 @@ local DragonridingBuffs = {
|
||||
}
|
||||
|
||||
local vigorWidgetSetID = 283
|
||||
local vigorWidgetID = 4460
|
||||
local vigorWidgetType = 24
|
||||
local defaultVigorWidgetID = 4460
|
||||
local vigorWidgetIDs = nil
|
||||
local knowsAlternateMountEnum = Enum and Enum.PowerType and Enum.PowerType.AlternateMount
|
||||
local unitPowerType = Enum and Enum.PowerType and Enum.PowerType.AlternateMount
|
||||
unitPowerType = unitPowerType or ALTERNATE_POWER_INDEX
|
||||
@ -51,12 +53,24 @@ function DragonridingVigor.prototype:EnteringWorld()
|
||||
end
|
||||
|
||||
function DragonridingVigor.prototype:CheckShouldShow(event, unit, info)
|
||||
if unit ~= "player" then
|
||||
if not vigorWidgetIDs or #vigorWidgetIDs == 0 then
|
||||
self:PopulateVigorWidgetIDs()
|
||||
end
|
||||
|
||||
if unit ~= "player" or not vigorWidgetIDs then
|
||||
return
|
||||
end
|
||||
|
||||
local info = C_UIWidgetManager.GetFillUpFramesWidgetVisualizationInfo(vigorWidgetID)
|
||||
if not info or info.shownState == 0 then
|
||||
local shown = false
|
||||
for i=1,#vigorWidgetIDs do
|
||||
local info = C_UIWidgetManager.GetFillUpFramesWidgetVisualizationInfo(vigorWidgetIDs[i])
|
||||
if info and info.shownState ~= 0 then
|
||||
shown = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if not shown then
|
||||
self:Show(false)
|
||||
self.suppressHideBlizz = true
|
||||
if self.moduleSettings.hideBlizz then
|
||||
@ -85,14 +99,43 @@ function DragonridingVigor.prototype:UpdateRunePower(event, arg1, arg2)
|
||||
DragonridingVigor.super.prototype.UpdateRunePower(self, event, arg1, arg2)
|
||||
end
|
||||
|
||||
function DragonridingVigor.prototype:PopulateVigorWidgetIDs()
|
||||
local widgets = C_UIWidgetManager.GetAllWidgetsBySetID(vigorWidgetSetID)
|
||||
if not widgets then
|
||||
return
|
||||
end
|
||||
|
||||
for i=1,#widgets do
|
||||
if widgets[i].widgetType == vigorWidgetType then
|
||||
if not vigorWidgetIDs then
|
||||
vigorWidgetIDs = {}
|
||||
end
|
||||
|
||||
table.insert(vigorWidgetIDs, widgets[i].widgetID)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function DragonridingVigor.prototype:UpdateVigorRecharge(event, widget)
|
||||
if not vigorWidgetIDs or #vigorWidgetIDs == 0 then
|
||||
self:PopulateVigorWidgetIDs()
|
||||
end
|
||||
if not vigorWidgetIDs or #vigorWidgetIDs == 0 then
|
||||
return
|
||||
end
|
||||
|
||||
self.partialReady = nil
|
||||
self.partialReadyPercent = nil
|
||||
if event ~= "internal" and (not widget or widget.widgetSetID ~= vigorWidgetSetID) then
|
||||
return
|
||||
end
|
||||
|
||||
local info = C_UIWidgetManager.GetFillUpFramesWidgetVisualizationInfo(vigorWidgetID)
|
||||
local widgetID = defaultVigorWidgetID
|
||||
if widget then
|
||||
widgetID = widget.widgetID
|
||||
end
|
||||
|
||||
local info = C_UIWidgetManager.GetFillUpFramesWidgetVisualizationInfo(widgetID)
|
||||
if not info then
|
||||
return
|
||||
end
|
||||
@ -166,20 +209,20 @@ function DragonridingVigor.prototype:GetPartialRuneAtlas(rune)
|
||||
end
|
||||
|
||||
function DragonridingVigor.prototype:ShowBlizz()
|
||||
local info = C_UIWidgetManager.GetFillUpFramesWidgetVisualizationInfo(vigorWidgetID)
|
||||
local info = C_UIWidgetManager.GetFillUpFramesWidgetVisualizationInfo(defaultVigorWidgetID)
|
||||
if not info or info.shownState == 0 then
|
||||
return
|
||||
end
|
||||
UIWidgetPowerBarContainerFrame.widgetFrames[vigorWidgetID]:Show()
|
||||
UIWidgetPowerBarContainerFrame.widgetFrames[defaultVigorWidgetID]:Show()
|
||||
end
|
||||
|
||||
function DragonridingVigor.prototype:HideBlizz()
|
||||
if not UIWidgetPowerBarContainerFrame.widgetFrames or not UIWidgetPowerBarContainerFrame.widgetFrames[vigorWidgetID] then
|
||||
if not UIWidgetPowerBarContainerFrame.widgetFrames or not UIWidgetPowerBarContainerFrame.widgetFrames[defaultVigorWidgetID] then
|
||||
return
|
||||
end
|
||||
|
||||
if not self.suppressHideBlizz then
|
||||
UIWidgetPowerBarContainerFrame.widgetFrames[vigorWidgetID]:Hide()
|
||||
UIWidgetPowerBarContainerFrame.widgetFrames[defaultVigorWidgetID]:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -1,6 +1,35 @@
|
||||
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
||||
local GlobalCoolDown = IceCore_CreateClass(IceBarElement)
|
||||
|
||||
local GetSpellName = GetSpellInfo
|
||||
if C_Spell and C_Spell.GetSpellName then
|
||||
GetSpellName = C_Spell.GetSpellName
|
||||
end
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then
|
||||
GetSpellInfo = function(id)
|
||||
if not id then
|
||||
return nil
|
||||
end
|
||||
|
||||
local info = C_Spell.GetSpellInfo(id)
|
||||
if info then
|
||||
return info.name, nil, info.iconID, info.castTime
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local GetSpellCooldown = GetSpellCooldown
|
||||
if not GetSpellCooldown and C_Spell then
|
||||
GetSpellCooldown = function(spellID)
|
||||
local spellCooldownInfo = C_Spell.GetSpellCooldown(spellID)
|
||||
if spellCooldownInfo then
|
||||
return spellCooldownInfo.startTime, spellCooldownInfo.duration, spellCooldownInfo.isEnabled, spellCooldownInfo.modRate
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Constructor --
|
||||
function GlobalCoolDown.prototype:init()
|
||||
GlobalCoolDown.super.prototype.init(self, "GlobalCoolDown")
|
||||
@ -267,7 +296,7 @@ function GlobalCoolDown.prototype:CreateLagBar()
|
||||
end
|
||||
|
||||
function GlobalCoolDown.prototype:GetSpellId()
|
||||
if GetSpellInfo(61304) then
|
||||
if GetSpellName(61304) then
|
||||
return 61304
|
||||
else
|
||||
local defaultSpells
|
||||
@ -286,13 +315,13 @@ function GlobalCoolDown.prototype:GetSpellId()
|
||||
MONK=100780, -- jab
|
||||
}
|
||||
|
||||
if not GetSpellInfo(defaultSpells["PALADIN"]) then
|
||||
if not GetSpellName(defaultSpells["PALADIN"]) then
|
||||
defaultSpells["PALADIN"] = 635
|
||||
end
|
||||
if not GetSpellInfo(defaultSpells["MAGE"]) then
|
||||
if not GetSpellName(defaultSpells["MAGE"]) then
|
||||
defaultSpells["MAGE"] = 133
|
||||
end
|
||||
if not GetSpellInfo(defaultSpells["WARRIOR"]) then
|
||||
if not GetSpellName(defaultSpells["WARRIOR"]) then
|
||||
defaultSpells["WARRIOR"] = 6673
|
||||
end
|
||||
|
||||
|
@ -40,6 +40,13 @@ function HarmonyPower.prototype:Enable(core)
|
||||
HarmonyPower.super.prototype.Enable(self, core)
|
||||
|
||||
self:RegisterEvent("UNIT_POWER_FREQUENT", "UpdateRunePower")
|
||||
if IceHUD.EventExistsUnitMaxPower then
|
||||
self:RegisterEvent("UNIT_MAXPOWER", "PlayerChiUpdate")
|
||||
end
|
||||
end
|
||||
|
||||
function HarmonyPower.prototype:PlayerChiUpdate()
|
||||
self:Redraw()
|
||||
end
|
||||
|
||||
function HarmonyPower.prototype:UpdateRunePower(event, arg1, arg2)
|
||||
|
@ -922,13 +922,6 @@ function PlayerHealth.prototype:CreateBackground(redraw)
|
||||
end
|
||||
end
|
||||
|
||||
if not self.frame.button.menu then
|
||||
self.frame.button.menu = function(this, unit)
|
||||
IceHUD.DropdownUnit = unit
|
||||
ToggleDropDownMenu(1, nil, IceHUD_UnitFrame_DropDown, "cursor")
|
||||
end
|
||||
end
|
||||
|
||||
self:EnableClickTargeting(self.moduleSettings.allowMouseInteraction)
|
||||
end
|
||||
|
||||
@ -962,7 +955,7 @@ function PlayerHealth.prototype:EnableClickTargeting(bEnable)
|
||||
self.frame.button:EnableMouse(true)
|
||||
self.frame.button:RegisterForClicks("AnyUp")
|
||||
self.frame.button:SetAttribute("type1", "target")
|
||||
self.frame.button:SetAttribute("type2", "menu")
|
||||
self.frame.button:SetAttribute("type2", "togglemenu")
|
||||
self.frame.button:SetAttribute("unit", self.unit)
|
||||
|
||||
-- set up click casting
|
||||
|
@ -4,6 +4,25 @@ local Resolve = IceCore_CreateClass(IceUnitBar)
|
||||
local RESOLVE_SPELL_ID = 158300
|
||||
local RESOLVE_MAX = 240
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then
|
||||
GetSpellInfo = function(spellID)
|
||||
if not spellID then
|
||||
return nil
|
||||
end
|
||||
|
||||
local spellInfo = C_Spell.GetSpellInfo(spellID)
|
||||
if spellInfo then
|
||||
return spellInfo.name, nil, spellInfo.iconID, spellInfo.castTime, spellInfo.minRange, spellInfo.maxRange, spellInfo.spellID, spellInfo.originalIconID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local GetSpellName = GetSpellInfo
|
||||
if C_Spell and C_Spell.GetSpellName then
|
||||
GetSpellName = C_Spell.GetSpellName
|
||||
end
|
||||
|
||||
Resolve.prototype.current = nil
|
||||
Resolve.prototype.max = RESOLVE_MAX
|
||||
|
||||
@ -49,14 +68,19 @@ end
|
||||
|
||||
-- scan the tooltip and extract the Resolve value
|
||||
do
|
||||
local spellName = GetSpellInfo(RESOLVE_SPELL_ID)
|
||||
local spellName = GetSpellName(RESOLVE_SPELL_ID)
|
||||
|
||||
function Resolve.prototype:UpdateCurrent(event, unit)
|
||||
if (unit and (unit ~= self.unit)) then
|
||||
return
|
||||
end
|
||||
|
||||
self.current = select(IceHUD.SpellFunctionsReturnRank and 15 or 14, UnitAura(self.unit, spellName)) or 0
|
||||
if UnitAura then
|
||||
self.current = select(IceHUD.SpellFunctionsReturnRank and 15 or 14, UnitAura(self.unit, spellName)) or 0
|
||||
else
|
||||
local auraInfo = C_UnitAuras.GetAuraDataBySpellName(self.unit, spellName)
|
||||
self.current = auraInfo and auraInfo.timeMod or 0
|
||||
end
|
||||
|
||||
self:Update()
|
||||
end
|
||||
@ -80,6 +104,6 @@ end
|
||||
-- Load for tanks only
|
||||
local _, unitClass = UnitClass("player")
|
||||
if (unitClass == "DEATHKNIGHT" or unitClass == "DRUID" or unitClass == "PALADIN" or unitClass == "WARRIOR" or unitClass == "MONK")
|
||||
and GetSpellInfo(RESOLVE_SPELL_ID) then
|
||||
and GetSpellName(RESOLVE_SPELL_ID) then
|
||||
IceHUD.Resolve = Resolve:new()
|
||||
end
|
||||
|
@ -26,6 +26,37 @@ if Enum and Enum.PowerType then
|
||||
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
|
||||
end
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then
|
||||
GetSpellInfo = function(spellID)
|
||||
if not spellID then
|
||||
return nil
|
||||
end
|
||||
|
||||
local spellInfo = C_Spell.GetSpellInfo(spellID)
|
||||
if spellInfo then
|
||||
return spellInfo.name, nil, spellInfo.iconID, spellInfo.castTime, spellInfo.minRange, spellInfo.maxRange, spellInfo.spellID, spellInfo.originalIconID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local GetSpellName = GetSpellInfo
|
||||
if C_Spell and C_Spell.GetSpellName then
|
||||
GetSpellName = C_Spell.GetSpellName
|
||||
end
|
||||
|
||||
local UnitBuff = UnitBuff
|
||||
if not UnitBuff and C_UnitAuras and AuraUtil then
|
||||
UnitBuff = function(unitToken, index, filter)
|
||||
local auraData = C_UnitAuras.GetBuffDataByIndex(unitToken, index, filter)
|
||||
if not auraData then
|
||||
return nil
|
||||
end
|
||||
|
||||
return AuraUtil.UnpackAuraData(auraData)
|
||||
end
|
||||
end
|
||||
|
||||
-- Constructor --
|
||||
function RollTheBones.prototype:init()
|
||||
RollTheBones.super.prototype.init(self, "RollTheBones", "player")
|
||||
@ -288,8 +319,8 @@ end
|
||||
-- use this to figure out if Roll the Bones is available or not. neither IsSpellKnown nor IsPlayerSpell are correct for it
|
||||
-- when SnD is known, but this is.
|
||||
local function HasSpell(id)
|
||||
local spell = GetSpellInfo(id)
|
||||
return spell == GetSpellInfo(spell)
|
||||
local spell = GetSpellName(id)
|
||||
return spell == GetSpellName(spell)
|
||||
end
|
||||
|
||||
local function ShouldHide()
|
||||
@ -446,7 +477,11 @@ function RollTheBones.prototype:GetItemIdFromItemLink(linkStr)
|
||||
local _
|
||||
|
||||
if linkStr then
|
||||
_, itemId, _, _, _, _, _, _, _ = strsplit(":", linkStr)
|
||||
_, itemId, itemId2, _, _, _, _, _, _ = strsplit(":", linkStr)
|
||||
end
|
||||
|
||||
if not tonumber(itemId) then
|
||||
itemId = itemId2
|
||||
end
|
||||
|
||||
return itemId or 0
|
||||
|
@ -53,6 +53,18 @@ if Enum and Enum.PowerType then
|
||||
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
|
||||
end
|
||||
|
||||
local UnitBuff = UnitBuff
|
||||
if not UnitBuff and C_UnitAuras and AuraUtil then
|
||||
UnitBuff = function(unitToken, index, filter)
|
||||
local auraData = C_UnitAuras.GetBuffDataByIndex(unitToken, index, filter)
|
||||
if not auraData then
|
||||
return nil
|
||||
end
|
||||
|
||||
return AuraUtil.UnpackAuraData(auraData)
|
||||
end
|
||||
end
|
||||
|
||||
-- Constructor --
|
||||
function SliceAndDice.prototype:init()
|
||||
SliceAndDice.super.prototype.init(self, "SliceAndDice", "player")
|
||||
@ -294,13 +306,6 @@ local function SNDGetComboPoints(unit)
|
||||
end
|
||||
end
|
||||
|
||||
-- use this to figure out if Roll the Bones is available or not. neither IsSpellKnown nor IsPlayerSpell are correct for it
|
||||
-- when SnD is known, but this is.
|
||||
local function HasSpell(id)
|
||||
local spell = GetSpellInfo(id)
|
||||
return spell == GetSpellInfo(spell)
|
||||
end
|
||||
|
||||
local function ShouldHide()
|
||||
if IceHUD.WowVer >= 90000 or IceHUD.WowClassicBC or IceHUD.WowClassicWrath then
|
||||
return false
|
||||
@ -527,7 +532,11 @@ function SliceAndDice.prototype:GetItemIdFromItemLink(linkStr)
|
||||
local _
|
||||
|
||||
if linkStr then
|
||||
_, itemId, _, _, _, _, _, _, _ = strsplit(":", linkStr)
|
||||
_, itemId, itemId2, _, _, _, _, _, _ = strsplit(":", linkStr)
|
||||
end
|
||||
|
||||
if not tonumber(itemId) then
|
||||
itemId = itemId2
|
||||
end
|
||||
|
||||
return itemId or 0
|
||||
|
@ -23,6 +23,37 @@ if STAGGER_STATES then
|
||||
STAGGER_RED_TRANSITION = STAGGER_STATES.RED.threshold
|
||||
end
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then
|
||||
GetSpellInfo = function(spellID)
|
||||
if not spellID then
|
||||
return nil
|
||||
end
|
||||
|
||||
local spellInfo = C_Spell.GetSpellInfo(spellID)
|
||||
if spellInfo then
|
||||
return spellInfo.name, nil, spellInfo.iconID, spellInfo.castTime, spellInfo.minRange, spellInfo.maxRange, spellInfo.spellID, spellInfo.originalIconID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local GetSpellName = GetSpellInfo
|
||||
if C_Spell and C_Spell.GetSpellName then
|
||||
GetSpellName = C_Spell.GetSpellName
|
||||
end
|
||||
|
||||
local UnitDebuff = UnitDebuff
|
||||
if not UnitDebuff and C_UnitAuras and AuraUtil then
|
||||
UnitDebuff = function(unitToken, index, filter)
|
||||
local auraData = C_UnitAuras.GetDebuffDataByIndex(unitToken, index, filter)
|
||||
if not auraData then
|
||||
return nil
|
||||
end
|
||||
|
||||
return AuraUtil.UnpackAuraData(auraData)
|
||||
end
|
||||
end
|
||||
|
||||
StaggerBar.prototype.StaggerDuration = 0
|
||||
StaggerBar.prototype.StaggerEndTime = 0
|
||||
|
||||
@ -119,9 +150,9 @@ function StaggerBar.prototype:Enable(core)
|
||||
StaggerBar.super.prototype.Enable(self, core)
|
||||
|
||||
playerName = UnitName(self.unit)
|
||||
staggerNames[1] = GetSpellInfo(LightID)
|
||||
staggerNames[2] = GetSpellInfo(ModerateID)
|
||||
staggerNames[3] = GetSpellInfo(HeavyID)
|
||||
staggerNames[1] = GetSpellName(LightID)
|
||||
staggerNames[2] = GetSpellName(ModerateID)
|
||||
staggerNames[3] = GetSpellName(HeavyID)
|
||||
|
||||
self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
|
||||
self:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
@ -196,8 +227,8 @@ function StaggerBar.prototype:GetDebuffInfo()
|
||||
if debuffID == LightID or debuffID == ModerateID or debuffID == HeavyID then
|
||||
local spellName = UnitDebuff(self.unit, i)
|
||||
|
||||
duration = select(IceHUD.SpellFunctionsReturnRank and 6 or 5, UnitAura(self.unit, spellName, "", "HARMFUL"))
|
||||
amount = select(IceHUD.SpellFunctionsReturnRank and 15 or 14, UnitAura(self.unit, spellName, "", "HARMFUL"))
|
||||
duration = select(IceHUD.SpellFunctionsReturnRank and 6 or 5, IceHUD.UnitAura(self.unit, spellName, "", "HARMFUL"))
|
||||
amount = select(IceHUD.SpellFunctionsReturnRank and 15 or 14, IceHUD.UnitAura(self.unit, spellName, "", "HARMFUL"))
|
||||
staggerLevel = (debuffID == LightID) and 1 or (debuffID == ModerateID) and 2 or 3
|
||||
|
||||
break
|
||||
|
@ -12,6 +12,25 @@ if GetNumGroupMembers then
|
||||
GetNumRaidMembers = GetNumGroupMembers
|
||||
end
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then
|
||||
GetSpellInfo = function(spellID)
|
||||
if not spellID then
|
||||
return nil
|
||||
end
|
||||
|
||||
local spellInfo = C_Spell.GetSpellInfo(spellID)
|
||||
if spellInfo then
|
||||
return spellInfo.name, nil, spellInfo.iconID, spellInfo.castTime, spellInfo.minRange, spellInfo.maxRange, spellInfo.spellID, spellInfo.originalIconID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local GetSpellName = GetSpellInfo
|
||||
if C_Spell and C_Spell.GetSpellName then
|
||||
GetSpellName = C_Spell.GetSpellName
|
||||
end
|
||||
|
||||
-- list of spell ID's for each CC type so we can avoid localization issues
|
||||
local StunCCList = {
|
||||
-- kidney shot
|
||||
@ -259,7 +278,7 @@ function TargetCC.prototype:PopulateSpellList(debuffListVar, ccList, ccName)
|
||||
local spellName
|
||||
|
||||
for i=1,#ccList do
|
||||
spellName = GetSpellInfo(ccList[i])
|
||||
spellName = GetSpellName(ccList[i])
|
||||
|
||||
if spellName and spellName ~= "" then
|
||||
debuffListVar[spellName] = ccName
|
||||
@ -349,9 +368,9 @@ function TargetCC.prototype:GetMaxDebuffDuration(unitName, debuffNames)
|
||||
local i = 1
|
||||
local debuff, rank, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId
|
||||
if IceHUD.SpellFunctionsReturnRank then
|
||||
debuff, rank, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, "HARMFUL")
|
||||
debuff, rank, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = IceHUD.UnitAura(unitName, i, "HARMFUL")
|
||||
else
|
||||
debuff, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, "HARMFUL")
|
||||
debuff, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = IceHUD.UnitAura(unitName, i, "HARMFUL")
|
||||
end
|
||||
local isMine = unitCaster == "player"
|
||||
local result = {nil, nil, nil}
|
||||
@ -373,9 +392,9 @@ function TargetCC.prototype:GetMaxDebuffDuration(unitName, debuffNames)
|
||||
i = i + 1;
|
||||
|
||||
if IceHUD.SpellFunctionsReturnRank then
|
||||
debuff, rank, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, "HARMFUL")
|
||||
debuff, rank, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = IceHUD.UnitAura(unitName, i, "HARMFUL")
|
||||
else
|
||||
debuff, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, "HARMFUL")
|
||||
debuff, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = IceHUD.UnitAura(unitName, i, "HARMFUL")
|
||||
end
|
||||
isMine = unitCaster == "player"
|
||||
end
|
||||
|
@ -3,6 +3,11 @@ IceTargetHealth = IceCore_CreateClass(IceUnitBar)
|
||||
|
||||
local IceHUD = _G.IceHUD
|
||||
|
||||
local IsAddOnLoaded = IsAddOnLoaded
|
||||
if not IsAddOnLoaded and C_AddOns then
|
||||
IsAddOnLoaded = C_AddOns.IsAddOnLoaded
|
||||
end
|
||||
|
||||
IceTargetHealth.prototype.color = nil
|
||||
IceTargetHealth.prototype.determineColor = true
|
||||
IceTargetHealth.prototype.registerEvents = true
|
||||
@ -708,13 +713,6 @@ function IceTargetHealth.prototype:CreateBackground(redraw)
|
||||
self.frame.button:SetPoint("BOTTOMRIGHT", self.frame, "BOTTOMRIGHT", -1 * self.frame:GetWidth() / 1.5, 0)
|
||||
end
|
||||
end
|
||||
|
||||
if not self.frame.button.menu then
|
||||
self.frame.button.menu = function(this, unit)
|
||||
IceHUD.DropdownUnit = unit
|
||||
ToggleDropDownMenu(1, nil, IceHUD_UnitFrame_DropDown, "cursor")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -728,7 +726,7 @@ function IceTargetHealth.prototype:EnableClickTargeting(bEnable)
|
||||
self.frame.button:EnableMouse(true)
|
||||
self.frame.button:RegisterForClicks("AnyUp")
|
||||
self.frame.button:SetAttribute("type1", "target")
|
||||
self.frame.button:SetAttribute("type2", "menu")
|
||||
self.frame.button:SetAttribute("type2", "togglemenu")
|
||||
self.frame.button:SetAttribute("unit", self.unit)
|
||||
|
||||
-- set up click casting
|
||||
|
@ -1150,7 +1150,7 @@ do -- OVERRIDE: IceTargetInfo.prototype:CreateFrame(redraw)
|
||||
self.frame:SetScript("OnLeave", function(frame) self:OnLeave(frame) end)
|
||||
|
||||
self.frame:SetAttribute("type1", "target")
|
||||
self.frame:SetAttribute("type2", "menu")
|
||||
self.frame:SetAttribute("type2", "togglemenu")
|
||||
|
||||
-- set up click casting
|
||||
ClickCastFrames = ClickCastFrames or {}
|
||||
@ -1173,13 +1173,6 @@ do -- OVERRIDE: IceTargetInfo.prototype:CreateFrame(redraw)
|
||||
|
||||
self.frame:SetAttribute("unit", self.unit)
|
||||
|
||||
if not self.frame.menu then
|
||||
self.frame.menu = function(this, unit)
|
||||
IceHUD.DropdownUnit = unit
|
||||
ToggleDropDownMenu(1, nil, IceHUD_UnitFrame_DropDown, "cursor")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- create a fancy highlight frame for mouse over
|
||||
if (not self.frame.highLight) then
|
||||
@ -1420,11 +1413,11 @@ function IceTargetInfo.prototype:UpdateBuffType(aura)
|
||||
---- end change by Fulzamoth
|
||||
|
||||
if IceHUD.SpellFunctionsReturnRank then
|
||||
name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable = UnitAura(self.unit, i, reaction .. (filter and "|PLAYER" or ""))
|
||||
name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable = IceHUD.UnitAura(self.unit, i, reaction .. (filter and "|PLAYER" or ""))
|
||||
else
|
||||
---- Fulzamoth - 2019-09-04 : support for cooldowns on target buffs/debuffs (classic)
|
||||
-- 1. in addition to other info, get the spellID for for the (de)buff
|
||||
name, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, _, spellID = UnitAura(self.unit, i, reaction .. (filter and "|PLAYER" or ""))
|
||||
name, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, _, spellID = IceHUD.UnitAura(self.unit, i, reaction .. (filter and "|PLAYER" or ""))
|
||||
if duration == 0 and LibClassicDurations then
|
||||
-- 2. if no duration defined for the (de)buff, look up the spell in LibClassicDurations
|
||||
local classicDuration, classicExpirationTime = LibClassicDurations:GetAuraDurationByUnit(self.unit, spellID, caster)
|
||||
|
@ -12,6 +12,25 @@ if GetNumGroupMembers then
|
||||
GetNumRaidMembers = GetNumGroupMembers
|
||||
end
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then
|
||||
GetSpellInfo = function(spellID)
|
||||
if not spellID then
|
||||
return nil
|
||||
end
|
||||
|
||||
local spellInfo = C_Spell.GetSpellInfo(spellID)
|
||||
if spellInfo then
|
||||
return spellInfo.name, nil, spellInfo.iconID, spellInfo.castTime, spellInfo.minRange, spellInfo.maxRange, spellInfo.spellID, spellInfo.originalIconID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local GetSpellName = GetSpellInfo
|
||||
if C_Spell and C_Spell.GetSpellName then
|
||||
GetSpellName = C_Spell.GetSpellName
|
||||
end
|
||||
|
||||
-- list of spell ID's for each CC type so we can avoid localization issues
|
||||
local InvulnList= {
|
||||
-- Anti-Magic Shell
|
||||
@ -76,7 +95,7 @@ function TargetInvuln.prototype:PopulateSpellList(buffListVar, ccList, ccName)
|
||||
local spellName
|
||||
|
||||
for i=1,#ccList do
|
||||
spellName = GetSpellInfo(ccList[i])
|
||||
spellName = GetSpellName(ccList[i])
|
||||
|
||||
if spellName and spellName ~= "" then
|
||||
buffListVar[spellName] = ccName
|
||||
@ -148,9 +167,9 @@ function TargetInvuln.prototype:GetMaxbuffDuration(unitName, buffNames)
|
||||
local i = 1
|
||||
local buff, rank, texture, count, buffType, duration, endTime, unitCaster
|
||||
if IceHUD.SpellFunctionsReturnRank then
|
||||
buff, rank, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
|
||||
buff, rank, texture, count, buffType, duration, endTime, unitCaster = IceHUD.UnitAura(unitName, i, "HELPFUL")
|
||||
else
|
||||
buff, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
|
||||
buff, texture, count, buffType, duration, endTime, unitCaster = IceHUD.UnitAura(unitName, i, "HELPFUL")
|
||||
end
|
||||
local isMine = unitCaster == "player"
|
||||
local result = {nil, nil, nil}
|
||||
@ -179,9 +198,9 @@ function TargetInvuln.prototype:GetMaxbuffDuration(unitName, buffNames)
|
||||
i = i + 1;
|
||||
|
||||
if IceHUD.SpellFunctionsReturnRank then
|
||||
buff, rank, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
|
||||
buff, rank, texture, count, buffType, duration, endTime, unitCaster = IceHUD.UnitAura(unitName, i, "HELPFUL")
|
||||
else
|
||||
buff, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
|
||||
buff, texture, count, buffType, duration, endTime, unitCaster = IceHUD.UnitAura(unitName, i, "HELPFUL")
|
||||
end
|
||||
isMine = unitCaster == "player"
|
||||
end
|
||||
|
@ -4,6 +4,18 @@ local DogTag = nil
|
||||
|
||||
local TargetOfTarget = IceCore_CreateClass(IceElement)
|
||||
|
||||
local UnitDebuff = UnitDebuff
|
||||
if not UnitDebuff and C_UnitAuras and AuraUtil then
|
||||
UnitDebuff = function(unitToken, index, filter)
|
||||
local auraData = C_UnitAuras.GetDebuffDataByIndex(unitToken, index, filter)
|
||||
if not auraData then
|
||||
return nil
|
||||
end
|
||||
|
||||
return AuraUtil.UnpackAuraData(auraData)
|
||||
end
|
||||
end
|
||||
|
||||
TargetOfTarget.prototype.stackedDebuffs = nil
|
||||
TargetOfTarget.prototype.buffSize = nil
|
||||
TargetOfTarget.prototype.height = nil
|
||||
@ -124,24 +136,26 @@ function TargetOfTarget.prototype:GetOptions()
|
||||
order = 34
|
||||
}
|
||||
|
||||
opts["texture"] = {
|
||||
type = 'select',
|
||||
dialogControl = "LSM30_Statusbar",
|
||||
name = L["Texture"],
|
||||
desc = L["ToT frame texture"],
|
||||
get = function(info)
|
||||
return self.moduleSettings.texture
|
||||
end,
|
||||
set = function(info, v)
|
||||
self.moduleSettings.texture = v
|
||||
self:Redraw()
|
||||
end,
|
||||
disabled = function()
|
||||
return not self.moduleSettings.enabled
|
||||
end,
|
||||
values = AceGUIWidgetLSMlists.statusbar,
|
||||
order = 35
|
||||
}
|
||||
if AceGUIWidgetLSMlists then
|
||||
opts["texture"] = {
|
||||
type = 'select',
|
||||
dialogControl = "LSM30_Statusbar",
|
||||
name = L["Texture"],
|
||||
desc = L["ToT frame texture"],
|
||||
get = function(info)
|
||||
return self.moduleSettings.texture
|
||||
end,
|
||||
set = function(info, v)
|
||||
self.moduleSettings.texture = v
|
||||
self:Redraw()
|
||||
end,
|
||||
disabled = function()
|
||||
return not self.moduleSettings.enabled
|
||||
end,
|
||||
values = AceGUIWidgetLSMlists.statusbar,
|
||||
order = 35
|
||||
}
|
||||
end
|
||||
|
||||
opts["sizeToGap"] = {
|
||||
type = 'toggle',
|
||||
|
@ -30,6 +30,11 @@ if not UnitGroupRolesAssigned then
|
||||
end
|
||||
end
|
||||
|
||||
local GetItemInfo = GetItemInfo
|
||||
if not GetItemInfo and C_Item then
|
||||
GetItemInfo = C_Item.GetItemInfo
|
||||
end
|
||||
|
||||
local MAX_NUM_RAID_MEMBERS = 40
|
||||
local MAX_NUM_PARTY_MEMBERS = 5
|
||||
|
||||
|
@ -3,6 +3,25 @@ local Vengeance = IceCore_CreateClass(IceUnitBar)
|
||||
|
||||
local VENGEANCE_SPELL_ID = 93098
|
||||
|
||||
local GetSpellInfo = GetSpellInfo
|
||||
if not GetSpellInfo and C_Spell and C_Spell.GetSpellInfo then
|
||||
GetSpellInfo = function(spellID)
|
||||
if not spellID then
|
||||
return nil
|
||||
end
|
||||
|
||||
local spellInfo = C_Spell.GetSpellInfo(spellID)
|
||||
if spellInfo then
|
||||
return spellInfo.name, nil, spellInfo.iconID, spellInfo.castTime, spellInfo.minRange, spellInfo.maxRange, spellInfo.spellID, spellInfo.originalIconID
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local GetSpellName = GetSpellInfo
|
||||
if C_Spell and C_Spell.GetSpellName then
|
||||
GetSpellName = C_Spell.GetSpellName
|
||||
end
|
||||
|
||||
Vengeance.prototype.current = nil
|
||||
Vengeance.prototype.max = nil
|
||||
|
||||
@ -50,43 +69,25 @@ end
|
||||
-- scan the tooltip and extract the vengeance value
|
||||
do
|
||||
-- making these local as they're not used anywhere else
|
||||
local regions = {}
|
||||
local spellName = GetSpellInfo(VENGEANCE_SPELL_ID)
|
||||
local tooltipBuffer = CreateFrame("GameTooltip","tooltipBuffer",nil,"GameTooltipTemplate")
|
||||
tooltipBuffer:SetOwner(WorldFrame, "ANCHOR_NONE")
|
||||
|
||||
-- suggested by Antiarc as a way to repopulate the same table instead of repeatedly creating a new one
|
||||
local function makeTable(t, ...)
|
||||
wipe(t)
|
||||
for i = 1, select("#", ...) do
|
||||
t[i] = select(i, ...)
|
||||
end
|
||||
end
|
||||
local spellName = GetSpellName(VENGEANCE_SPELL_ID)
|
||||
|
||||
function Vengeance.prototype:UpdateCurrent(event, unit)
|
||||
if (unit and (unit ~= self.unit)) then
|
||||
return
|
||||
end
|
||||
|
||||
local name = UnitAura(self.unit, spellName)
|
||||
if name then
|
||||
-- Buff found, copy it into the buffer for scanning
|
||||
tooltipBuffer:ClearLines()
|
||||
tooltipBuffer:SetUnitBuff(self.unit, name)
|
||||
|
||||
-- Grab all regions, stuff em into our table
|
||||
makeTable(regions, tooltipBuffer:GetRegions())
|
||||
|
||||
-- Convert FontStrings to strings, replace anything else with ""
|
||||
for i=1, #regions do
|
||||
local region = regions[i]
|
||||
regions[i] = region:GetObjectType() == "FontString" and region:GetText() or ""
|
||||
if C_UnitAuras and C_UnitAuras.GetAuraDataBySpellName then
|
||||
local data = C_UnitAuras.GetAuraDataBySpellName(self.unit, spellName)
|
||||
if data and data.points and #data.points > 0 then
|
||||
self.current = (data and data.points and #data.points > 0) and data.points[1] or 0
|
||||
end
|
||||
|
||||
-- Find the number, save it
|
||||
self.current = tonumber(string.match(table.concat(regions),"%d+")) or 0
|
||||
else
|
||||
self.current = 0
|
||||
local _, idx = IceHUD:GetBuffCount(self.unit, spellName, true, true)
|
||||
if idx then
|
||||
self.current = select(17, IceHUD.UnitAura(self.unit, idx))
|
||||
else
|
||||
self.current = 0
|
||||
end
|
||||
end
|
||||
|
||||
self:Update()
|
||||
|
189
this_version.md
189
this_version.md
@ -1,186 +1,67 @@
|
||||
# Changelog
|
||||
|
||||
v1.14.39:
|
||||
v1.15.14:
|
||||
|
||||
- Support Cataclysm Classic 4.4.0
|
||||
- Support WoW 11.1.5
|
||||
- Update TWW TOC to 11.1.5
|
||||
|
||||
v1.14.38:
|
||||
v1.15.13:
|
||||
|
||||
- Update TOCs
|
||||
|
||||
v1.14.37:
|
||||
v1.15.12:
|
||||
|
||||
- Update LibRangeCheck version to address taint issues (wowace ticket #353)
|
||||
- Update TOCs
|
||||
|
||||
v1.14.36:
|
||||
v1.15.11:
|
||||
|
||||
- Really fix IceHUD stomping on other uses of the PowerBarContainer such as the Digging bar for the Archive event.
|
||||
- Fix imported profiles not saving across reloads
|
||||
|
||||
v1.14.35:
|
||||
v1.15.10:
|
||||
|
||||
- Fix IceHUD stomping on other uses of the PowerBarContainer such as the Digging bar for the Archive event.
|
||||
- Fix Chi not updating properly when the player's maximum amount of Chi points changes (e.g. via Ascension talent).
|
||||
- Update TOCs
|
||||
|
||||
v1.14.34:
|
||||
v1.15.9:
|
||||
|
||||
- Fix Vigor showing up sometimes when it shouldn't.
|
||||
- Update Cataclysm Classic TOC to 4.4.1
|
||||
- Update Classic-era TOC to 1.15.4
|
||||
- Update TWW TOC to 11.0.5
|
||||
|
||||
v1.14.33:
|
||||
v1.15.8:
|
||||
|
||||
- Update TOC for Dragonflight to 10.2.5
|
||||
- Fix reported error with custom cooldown bars set to "when ready" mode due to deprecation in 11.x (wowace issue #368)
|
||||
|
||||
v1.14.32:
|
||||
v1.15.7:
|
||||
|
||||
- Enable GlobalCoolDown module in Classic Era 1.15.0+
|
||||
- Enable tracking target buffs/debuffs in Classic Era 1.15.0+
|
||||
- Fix cooldown display for overridden spells (such as Evoker spells where Font of Magic replaces the base spell with an override with the same name).
|
||||
|
||||
v1.14.31:
|
||||
v1.15.6:
|
||||
|
||||
- Fix nil concatenation error (wowace ticket #351)
|
||||
- Package new version of LibDogTag-Unit to fix an error with some units on 11.0.2
|
||||
|
||||
v1.14.30:
|
||||
v1.15.5:
|
||||
|
||||
- Update Classic-era TOC for 1.15.0
|
||||
- Enable TargetCastBar module on Classic-era 1.15+
|
||||
- Fix error when using an invalid spell with a custom bar on 11.x
|
||||
|
||||
v1.14.29:
|
||||
v1.15.4:
|
||||
|
||||
- Fix Stagger bar error for 10.2.0 (wowace ticket #348)
|
||||
- Update TOC for TWW
|
||||
|
||||
v1.14.28:
|
||||
v1.15.3:
|
||||
|
||||
- Update TOC for Dragonflight to 10.2.0
|
||||
- Fix custom cooldown bars not working in 11.x (wowace issue #363)
|
||||
|
||||
v1.14.27:
|
||||
v1.15.2:
|
||||
|
||||
- Update TOC for Dragonflight to 10.1.7
|
||||
- Re-enable right-click context menus on 11.x.
|
||||
- Update TOC for Classic-era
|
||||
|
||||
v1.14.26:
|
||||
v1.15.1:
|
||||
|
||||
- Update TOC for classic-era to 1.14.4
|
||||
- Fix error opening options.
|
||||
|
||||
v1.14.25:
|
||||
v1.15.0:
|
||||
|
||||
- Fixed lua error that would appear when targetting webwrapped players in heroic alpha/beta titan rune dungeons.
|
||||
- Added ability to adjust strata globally.
|
||||
|
||||
v1.14.24:
|
||||
|
||||
- Fixed an error when targeting a player and right-clicking a module that should show a menu in 10.1.5.
|
||||
|
||||
v1.14.23:
|
||||
|
||||
- Update Dragonflight TOC for 10.1.5
|
||||
|
||||
v1.14.22:
|
||||
|
||||
- Fixed reported issue with a Lua error on Wrath Classic clients. https://www.wowace.com/projects/ice-hud/issues/344
|
||||
- Fixed Vigor module not working when riding Grotto Netherwing Drake (and theoretically all future Dragonriding mount types).
|
||||
- Updated TOC for Wrath-Classic.
|
||||
|
||||
v1.14.21:
|
||||
|
||||
- Increased maximum scale/zoom to 400%, by request.
|
||||
- Fixed TargetCC/FocusCC modules on Wrath Classic.
|
||||
- Fixed disabled Buff/Debuff Watchers showing a static gray bar when set to When Missing or Always display modes.
|
||||
- Fixed Buff/Debuff Watchers showing an empty bar when set to Missing mode. If the background was disabled, this looked like just a floating spell icon.
|
||||
- Fixed spell icons sometimes not showing up for custom bars until the tracked spell had been cast once.
|
||||
|
||||
v1.14.20:
|
||||
|
||||
- Added Winding Slitherdrake as recognized for the Dragonriding Vigor module
|
||||
|
||||
v1.14.19:
|
||||
|
||||
- Updated TOCs for 10.1.0
|
||||
- Added addon icon for 10.1.0 clients
|
||||
- Fixed Dragonriding Vigor charges not showing up in 10.1.0
|
||||
- Fixed Vigor not always updating correctly when loading into the game or a new zone
|
||||
|
||||
v1.14.18:
|
||||
|
||||
- Fixed Runic Power showing on a scale of 0-1000+ instead of 0-100+ with DogTags off
|
||||
- Added option (enabled by default) to hide mod during cataloging.
|
||||
- Fixed "Hide Blizzard Buffs" option on PlayerInfo causing errors and "?" icons when toggling off.
|
||||
- Also hide Debuff frame if it exists (Dragonflight+) when enabling "Hide Blizzard Buffs" in the PlayerInfo module.
|
||||
|
||||
v1.14.17:
|
||||
|
||||
- Updated TOCs for 10.0.7
|
||||
|
||||
v1.14.16:
|
||||
|
||||
- Exposed the option in the Totems module to hide the Blizzard Totems frame or not, and changed the default value to not hide when on a version of the game that doesn't support right-clicking to destroy totems (any version after Wrath). This enables using the default Totems frame to cancel totems early.
|
||||
- Fixed a reported error when playing Darkmoon Faire games.
|
||||
- Added a few more Polymorph ranks to TargetCC for Classic. I'm sure there are more missing.
|
||||
|
||||
v1.14.15:
|
||||
|
||||
- Updated TOCs for 10.0.5
|
||||
|
||||
v1.14.14:
|
||||
|
||||
- Fixed PlayerAlternatePower bar showing up when it shouldn't have, such as when casting Power Word: Shield before ever having done anything to trigger a game-level "alternate power" event, such as mounting a Dragonriding mount.
|
||||
|
||||
v1.14.13:
|
||||
|
||||
- Fixed Vigor module hiding default Climbing, Film, etc. UIs. (wowace ticket #336)
|
||||
|
||||
v1.14.12:
|
||||
|
||||
- Added a module for showing Dragonriding Vigor points.
|
||||
|
||||
v1.14.11:
|
||||
|
||||
- Packaged a new version of LibDogTag-Unit to fix the Guild roster resetting its scroll position every 20 seconds.
|
||||
|
||||
v1.14.10:
|
||||
|
||||
- Fix an error in TargetTargetHealth/Mana and CustomHealth when Low Threshold Color was checked and Scale by Health % was un-checked.
|
||||
|
||||
v1.14.9:
|
||||
|
||||
- Fix Low Threshold to be usable even when Color By Health/Mana % is disabled. (ticket #334)
|
||||
|
||||
v1.14.8:
|
||||
|
||||
- Fix Color By Health % to work with Low Threshold Color option. Previously, if Low Threshold was set, the color was always either MaxHealth/MaxMana or MinHealth/MinMana, it would never be colored by health %. Now if both are set, it will scale by health % until it reaches the low threshold, at which point it will switch to the Min color.
|
||||
- Fix Low Threshold color and flashing to work at the same percentage. Previously these were slightly different such that it would start flashing at 40% but not turn to the Min color until 39.9999%, for example.
|
||||
|
||||
v1.14.7:
|
||||
|
||||
- Add option to scale absorb bar by the unit's maximum health.
|
||||
|
||||
v1.14.6:
|
||||
|
||||
- Add ability for buff/debuff watchers to only display when the specified buff/debuff is missing. This also adds the ability to require that the given unit exists. So if you had Unit set to Target, Display mode set to Missing, and Only if unit exists checked, you'd show the bar if you have a target and they don't have the given buff/debuff.
|
||||
- Don't flash the castbar for instant-cast spells that the player didn't cast (such as internal quest spells).
|
||||
- Add DruidEnergy module (disabled by default). This module will show the player's Energy level if they're a Druid and currently shapeshifted to a non-energy-using form (eligible forms are configurable by the user).
|
||||
|
||||
v1.14.5:
|
||||
|
||||
- Fix castbar flashing. There are controls on the player castbar module for flashing when a spell succeeds or fails, and separate controls for flashing when an instant cast completes. Those were broken, but now work again.
|
||||
- Add "@" after the number when the Combo Points module is in Numeric mode, "Show Charged points" is enabled, and the current combo point is charged.
|
||||
- Fix Charged point support in the ComboPointsBar module.
|
||||
|
||||
v1.14.4:
|
||||
|
||||
- Update TOC for 10.0.2
|
||||
|
||||
v1.14.3:
|
||||
|
||||
- Add Spell ID support for aura tracking.
|
||||
- Add Evoker support.
|
||||
- Add Empowered Casting (hold-to-cast levels) support.
|
||||
|
||||
v1.14.2:
|
||||
|
||||
- Fix CC and Invuln modules not showing immediately when they should.
|
||||
|
||||
v1.14.1:
|
||||
|
||||
- Fix Hide Party feature on pre-10.0 clients.
|
||||
|
||||
v1.14.0:
|
||||
|
||||
- 10.0 compatibility
|
||||
- Renamed Anima Charged combo points to Charged, and removed specific references to Kyrian.
|
||||
- Support The War Within/11.0
|
||||
- Add support for exporting and importing profiles through text.
|
||||
|
Reference in New Issue
Block a user