Compare commits
105 Commits
1.13.2
...
v1.14.0-al
Author | SHA1 | Date | |
---|---|---|---|
8858459b10
|
|||
86e40187a2
|
|||
62bcc17ed6
|
|||
52c9b51e8d
|
|||
aa03a0b332
|
|||
3017b5dd18
|
|||
1f54f7d41d
|
|||
5b73d3b35f
|
|||
decb0017f3
|
|||
a32b75bf44
|
|||
6c506579be
|
|||
701fb1373f
|
|||
20d26d8f5e
|
|||
5a41d9a7f4
|
|||
18d827965c
|
|||
c2183f99a0
|
|||
7ceb70737a
|
|||
faa3d326aa
|
|||
9fc90551e2
|
|||
0af47119e3
|
|||
955fa6efdc
|
|||
41ae17ba9a
|
|||
5bc1f04504
|
|||
09e1832fbe
|
|||
7c3fc54d26
|
|||
8972f7eed5
|
|||
9e68edbc43
|
|||
a259db6b8a
|
|||
d10586d477
|
|||
c804ba178b
|
|||
f04c5db493
|
|||
1de917223f
|
|||
fa064dc866
|
|||
ee72cd1f33
|
|||
777cf01174
|
|||
97e81018c7
|
|||
b65909c570
|
|||
b33a82622f
|
|||
96a8fb2c3d
|
|||
6c623d6965
|
|||
d31872512e
|
|||
d424afdab1
|
|||
9500bdf393
|
|||
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
|
|||
bc16ae677b
|
|||
dc5a3f3a05
|
|||
6c3ed55780
|
|||
dfcef9617f
|
|||
94b62d56a0
|
|||
90f126d7a0
|
|||
209fbe2b4e
|
|||
9435a9d74f
|
|||
1519ac2299
|
|||
2ba558d73d
|
|||
a3d9c7bd3d | |||
d641886a8a
|
|||
87456ca051
|
|||
d1eae2437f
|
|||
470ca2f592
|
|||
e313e679ae
|
|||
d43555b7c4
|
|||
90e0dd1597
|
|||
6282dfb256
|
|||
4de8cb0d27
|
|||
ea28a05051
|
|||
ca80ca3f75
|
|||
fe22f7e658
|
|||
354fb483bb
|
|||
f6c737c654
|
|||
9a38c4b3ea
|
21
.github/workflows/release.yml
vendored
@ -23,6 +23,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
CF_API_KEY: ${{ secrets.CF_API_KEY }}
|
CF_API_KEY: ${{ secrets.CF_API_KEY }}
|
||||||
WOWI_API_TOKEN: ${{ secrets.WOWI_API_TOKEN }}
|
WOWI_API_TOKEN: ${{ secrets.WOWI_API_TOKEN }}
|
||||||
|
WAGO_API_TOKEN: ${{ secrets.WAGO_API_TOKEN }}
|
||||||
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }} # "GITHUB_TOKEN" is a secret always provided to the workflow
|
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }} # "GITHUB_TOKEN" is a secret always provided to the workflow
|
||||||
# for your own token, the name cannot start with "GITHUB_"
|
# for your own token, the name cannot start with "GITHUB_"
|
||||||
|
|
||||||
@ -31,15 +32,27 @@ jobs:
|
|||||||
|
|
||||||
# we first have to clone the AddOn project, this is a required step
|
# we first have to clone the AddOn project, this is a required step
|
||||||
- name: Clone project
|
- name: Clone project
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0 # gets git history for changelogs
|
||||||
|
|
||||||
# once cloned, we just run the GitHub Action for the packager project
|
# once cloned, we just run the GitHub Action for the packager project
|
||||||
- name: Package and release
|
- name: Package and release
|
||||||
uses: BigWigsMods/packager@master
|
uses: BigWigsMods/packager@v2
|
||||||
|
|
||||||
# another example where we supply additional arguments, this example is specifically to release
|
# another example where we supply additional arguments, this example is specifically to release
|
||||||
# for the Classic version of the game
|
# for the Classic version of the game
|
||||||
- name: Package and release for Classic
|
- name: Package and release for Classic
|
||||||
uses: BigWigsMods/packager@master
|
uses: BigWigsMods/packager@v2
|
||||||
with:
|
with:
|
||||||
args: -g 1.13.5 -w 0
|
args: -g classic -w 0
|
||||||
|
|
||||||
|
- name: Package and release for TBC
|
||||||
|
uses: BigWigsMods/packager@v2
|
||||||
|
with:
|
||||||
|
args: -g bcc -w 0
|
||||||
|
|
||||||
|
- name: Package and release for Wrath
|
||||||
|
uses: BigWigsMods/packager@v2
|
||||||
|
with:
|
||||||
|
args: -g wrath -w 0
|
||||||
|
41
.pkgmeta
@ -2,58 +2,54 @@ package-as: IceHUD
|
|||||||
|
|
||||||
externals:
|
externals:
|
||||||
libs/LibStub:
|
libs/LibStub:
|
||||||
url: https://repos.wowace.com/wow/libstub/trunk
|
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/LibStub
|
||||||
tag: latest
|
tag: latest
|
||||||
libs/CallbackHandler-1.0:
|
libs/CallbackHandler-1.0:
|
||||||
url: https://repos.wowace.com/wow/callbackhandler/trunk
|
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/CallbackHandler-1.0
|
||||||
tag: latest
|
tag: latest
|
||||||
libs/AceEvent-3.0:
|
libs/AceEvent-3.0:
|
||||||
url: https://repos.wowace.com/wow/ace3/trunk/AceEvent-3.0
|
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceEvent-3.0
|
||||||
tag: latest
|
tag: latest
|
||||||
libs/AceTimer-3.0:
|
libs/AceTimer-3.0:
|
||||||
url: https://repos.wowace.com/wow/ace3/trunk/AceTimer-3.0
|
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceTimer-3.0
|
||||||
tag: latest
|
tag: latest
|
||||||
libs/AceDB-3.0:
|
libs/AceDB-3.0:
|
||||||
url: https://repos.wowace.com/wow/ace3/trunk/AceDB-3.0
|
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceDB-3.0
|
||||||
tag: latest
|
tag: latest
|
||||||
libs/AceDBOptions-3.0:
|
libs/AceDBOptions-3.0:
|
||||||
url: https://repos.wowace.com/wow/ace3/trunk/AceDBOptions-3.0
|
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceDBOptions-3.0
|
||||||
tag: latest
|
tag: latest
|
||||||
libs/AceConfig-3.0:
|
libs/AceConfig-3.0:
|
||||||
url: https://repos.wowace.com/wow/ace3/trunk/AceConfig-3.0
|
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceConfig-3.0
|
||||||
tag: latest
|
tag: latest
|
||||||
libs/AceGUI-3.0:
|
libs/AceGUI-3.0:
|
||||||
url: https://repos.wowace.com/wow/ace3/trunk/AceGUI-3.0
|
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceGUI-3.0
|
||||||
tag: latest
|
tag: latest
|
||||||
libs/AceGUI-3.0-SharedMediaWidgets:
|
libs/AceGUI-3.0-SharedMediaWidgets:
|
||||||
url: https://repos.wowace.com/wow/ace-gui-3-0-shared-media-widgets/trunk
|
url: svn://svn.wowace.com/wow/ace-gui-3-0-shared-media-widgets/mainline/trunk/AceGUI-3.0-SharedMediaWidgets
|
||||||
tag: latest
|
tag: latest
|
||||||
libs/AceAddon-3.0:
|
libs/AceAddon-3.0:
|
||||||
url: https://repos.wowace.com/wow/ace3/trunk/AceAddon-3.0
|
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceAddon-3.0
|
||||||
tag: latest
|
tag: latest
|
||||||
libs/AceConsole-3.0:
|
libs/AceConsole-3.0:
|
||||||
url: https://repos.wowace.com/wow/ace3/trunk/AceConsole-3.0
|
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceConsole-3.0
|
||||||
tag: latest
|
tag: latest
|
||||||
libs/AceLocale-3.0:
|
libs/AceLocale-3.0:
|
||||||
url: https://repos.wowace.com/wow/ace3/trunk/AceLocale-3.0
|
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceLocale-3.0
|
||||||
tag: latest
|
tag: latest
|
||||||
libs/LibRangeCheck-2.0:
|
libs/LibRangeCheck-2.0:
|
||||||
url: https://repos.wowace.com/wow/librangecheck-2-0/trunk
|
url: https://github.com/WeakAuras/LibRangeCheck-2.0/
|
||||||
libs/LibSharedMedia-3.0:
|
libs/LibSharedMedia-3.0:
|
||||||
url: https://repos.wowace.com/wow/libsharedmedia-3-0/trunk
|
url: svn://svn.wowace.com/wow/libsharedmedia-3-0/mainline/trunk
|
||||||
tag: latest
|
tag: latest
|
||||||
libs/LibDogTag-3.0:
|
libs/LibDogTag-3.0:
|
||||||
url: https://repos.wowace.com/wow/libdogtag-3-0
|
url: https://github.com/parnic/LibDogTag-3.0
|
||||||
tag: latest
|
|
||||||
type: git
|
|
||||||
libs/LibDogTag-Unit-3.0:
|
libs/LibDogTag-Unit-3.0:
|
||||||
url: https://repos.wowace.com/wow/libdogtag-unit-3-0
|
url: https://github.com/parnic/LibDogTag-Unit-3.0
|
||||||
tag: latest
|
|
||||||
type: git
|
|
||||||
libs/LibDBIcon-1.0:
|
libs/LibDBIcon-1.0:
|
||||||
url: https://repos.wowace.com/wow/libdbicon-1-0/trunk
|
url: svn://svn.wowace.com/wow/libdbicon-1-0/mainline/trunk/LibDBIcon-1.0
|
||||||
libs/LibDualSpec-1.0:
|
libs/LibDualSpec-1.0:
|
||||||
url: https://repos.wowace.com/wow/libdualspec-1-0
|
url: git://git.wowace.com/wow/libdualspec-1-0/mainline.git
|
||||||
|
|
||||||
optional-dependencies:
|
optional-dependencies:
|
||||||
- libdogtag-3-0
|
- libdogtag-3-0
|
||||||
@ -62,6 +58,7 @@ optional-dependencies:
|
|||||||
|
|
||||||
move-folders:
|
move-folders:
|
||||||
IceHUD/IceHUD_Options: IceHUD_Options
|
IceHUD/IceHUD_Options: IceHUD_Options
|
||||||
|
IceHUD/libs/LibRangeCheck-2.0/LibRangeCheck-2.0: IceHUD/libs/LibRangeCheck-2.0
|
||||||
|
|
||||||
tools-used:
|
tools-used:
|
||||||
- libdatabroker-1-1
|
- libdatabroker-1-1
|
||||||
|
@ -626,7 +626,7 @@ do
|
|||||||
v = DogTag:CleanCode(v)
|
v = DogTag:CleanCode(v)
|
||||||
end
|
end
|
||||||
|
|
||||||
self.moduleSettings.upperText = v
|
self.moduleSettings.upperText = strtrim(v)
|
||||||
self:RegisterFontStrings()
|
self:RegisterFontStrings()
|
||||||
self:Redraw()
|
self:Redraw()
|
||||||
end,
|
end,
|
||||||
@ -655,7 +655,7 @@ do
|
|||||||
v = DogTag:CleanCode(v)
|
v = DogTag:CleanCode(v)
|
||||||
end
|
end
|
||||||
|
|
||||||
self.moduleSettings.lowerText = v
|
self.moduleSettings.lowerText = strtrim(v)
|
||||||
self:RegisterFontStrings()
|
self:RegisterFontStrings()
|
||||||
self:Redraw()
|
self:Redraw()
|
||||||
end,
|
end,
|
||||||
|
@ -13,12 +13,12 @@ IceCastBar.prototype.unit = nil
|
|||||||
IceCastBar.prototype.current = nil
|
IceCastBar.prototype.current = nil
|
||||||
|
|
||||||
local SPELL_POWER_MANA = SPELL_POWER_MANA
|
local SPELL_POWER_MANA = SPELL_POWER_MANA
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_MANA = Enum.PowerType.Mana
|
SPELL_POWER_MANA = Enum.PowerType.Mana
|
||||||
end
|
end
|
||||||
|
|
||||||
local UnitCastingInfo, UnitChannelInfo = UnitCastingInfo, UnitChannelInfo
|
local UnitCastingInfo, UnitChannelInfo = UnitCastingInfo, UnitChannelInfo
|
||||||
if IceHUD.WowClassic then
|
if not UnitCastingInfo then
|
||||||
UnitCastingInfo = CastingInfo
|
UnitCastingInfo = CastingInfo
|
||||||
UnitChannelInfo = ChannelInfo
|
UnitChannelInfo = ChannelInfo
|
||||||
end
|
end
|
||||||
@ -146,7 +146,7 @@ function IceCastBar.prototype:GetOptions()
|
|||||||
end,
|
end,
|
||||||
order = 39.998
|
order = 39.998
|
||||||
}
|
}
|
||||||
if IceHUD.WowVer < 80000 then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
opts["showSpellRank"] =
|
opts["showSpellRank"] =
|
||||||
{
|
{
|
||||||
type = 'toggle',
|
type = 'toggle',
|
||||||
@ -407,13 +407,13 @@ end
|
|||||||
|
|
||||||
function IceCastBar.prototype:StartBar(action, message)
|
function IceCastBar.prototype:StartBar(action, message)
|
||||||
local spell, rank, displayName, icon, startTime, endTime, isTradeSkill
|
local spell, rank, displayName, icon, startTime, endTime, isTradeSkill
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
spell, rank, displayName, icon, startTime, endTime, isTradeSkill = UnitCastingInfo(self.unit)
|
spell, rank, displayName, icon, startTime, endTime, isTradeSkill = UnitCastingInfo(self.unit)
|
||||||
else
|
else
|
||||||
spell, displayName, icon, startTime, endTime, isTradeSkill = UnitCastingInfo(self.unit)
|
spell, displayName, icon, startTime, endTime, isTradeSkill = UnitCastingInfo(self.unit)
|
||||||
end
|
end
|
||||||
if not (spell) then
|
if not (spell) then
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
spell, rank, displayName, icon, startTime, endTime = UnitChannelInfo(self.unit)
|
spell, rank, displayName, icon, startTime, endTime = UnitChannelInfo(self.unit)
|
||||||
else
|
else
|
||||||
spell, displayName, icon, startTime, endTime = UnitChannelInfo(self.unit)
|
spell, displayName, icon, startTime, endTime = UnitChannelInfo(self.unit)
|
||||||
@ -470,7 +470,7 @@ function IceCastBar.prototype:StopBar()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function IceCastBar.prototype:GetShortRank(rank)
|
function IceCastBar.prototype:GetShortRank(rank)
|
||||||
if IceHUD.WowVer < 80000 and rank then
|
if IceHUD.SpellFunctionsReturnRank and rank then
|
||||||
local _, _, sRank = string.find(rank, "(%d+)")
|
local _, _, sRank = string.find(rank, "(%d+)")
|
||||||
if (sRank) then
|
if (sRank) then
|
||||||
return " (" .. sRank .. ")"
|
return " (" .. sRank .. ")"
|
||||||
@ -568,7 +568,7 @@ function IceCastBar.prototype:SpellCastDelayed(event, unit, castGuid, spellId)
|
|||||||
if (unit ~= self.unit) then return end
|
if (unit ~= self.unit) then return end
|
||||||
--IceHUD:Debug("SpellCastDelayed", unit, UnitCastingInfo(unit))
|
--IceHUD:Debug("SpellCastDelayed", unit, UnitCastingInfo(unit))
|
||||||
|
|
||||||
local endTime = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 6 or 5, UnitCastingInfo(self.unit))
|
local endTime = select(IceHUD.SpellFunctionsReturnRank and 6 or 5, UnitCastingInfo(self.unit))
|
||||||
|
|
||||||
if (endTime and self.actionStartTime) then
|
if (endTime and self.actionStartTime) then
|
||||||
-- apparently this check is needed, got nils during a horrible lag spike
|
-- apparently this check is needed, got nils during a horrible lag spike
|
||||||
@ -629,7 +629,7 @@ function IceCastBar.prototype:SpellCastChannelUpdate(event, unit)
|
|||||||
--IceHUD:Debug("SpellCastChannelUpdate", unit, UnitChannelInfo(unit))
|
--IceHUD:Debug("SpellCastChannelUpdate", unit, UnitChannelInfo(unit))
|
||||||
|
|
||||||
local spell, rank, displayName, icon, startTime, endTime
|
local spell, rank, displayName, icon, startTime, endTime
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
spell, rank, displayName, icon, startTime, endTime = UnitChannelInfo(unit)
|
spell, rank, displayName, icon, startTime, endTime = UnitChannelInfo(unit)
|
||||||
else
|
else
|
||||||
spell, displayName, icon, startTime, endTime = UnitChannelInfo(unit)
|
spell, displayName, icon, startTime, endTime = UnitChannelInfo(unit)
|
||||||
|
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", {IceHUD.ShellGameSpellID}) 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)
|
||||||
|
|
||||||
|
283
IceHUD.lua
@ -7,8 +7,6 @@ local SML = LibStub("LibSharedMedia-3.0")
|
|||||||
local ACR = LibStub("AceConfigRegistry-3.0")
|
local ACR = LibStub("AceConfigRegistry-3.0")
|
||||||
local ConfigDialog = LibStub("AceConfigDialog-3.0")
|
local ConfigDialog = LibStub("AceConfigDialog-3.0")
|
||||||
local icon = LibStub("LibDBIcon-1.0", true)
|
local icon = LibStub("LibDBIcon-1.0", true)
|
||||||
local AceGUI = LibStub("AceGUI-3.0")
|
|
||||||
local AceSerializer = LibStub("AceSerializer-3.0", 1)
|
|
||||||
|
|
||||||
local pendingModuleLoads = {}
|
local pendingModuleLoads = {}
|
||||||
local bReadyToRegisterModules = false
|
local bReadyToRegisterModules = false
|
||||||
@ -17,7 +15,50 @@ IceHUD.CurrTagVersion = 3
|
|||||||
IceHUD.debugging = false
|
IceHUD.debugging = false
|
||||||
|
|
||||||
IceHUD.WowVer = select(4, GetBuildInfo())
|
IceHUD.WowVer = select(4, GetBuildInfo())
|
||||||
IceHUD.WowClassic = WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_CLASSIC
|
IceHUD.WowMain = not WOW_PROJECT_ID or WOW_PROJECT_ID == WOW_PROJECT_MAINLINE
|
||||||
|
if GetClassicExpansionLevel then
|
||||||
|
IceHUD.WowClassic = GetClassicExpansionLevel() == 0
|
||||||
|
IceHUD.WowClassicBC = GetClassicExpansionLevel() == 1
|
||||||
|
IceHUD.WowClassicWrath = GetClassicExpansionLevel() == 2
|
||||||
|
else
|
||||||
|
IceHUD.WowClassic = WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_CLASSIC
|
||||||
|
IceHUD.WowClassicBC = false
|
||||||
|
IceHUD.WowClassicWrath = false
|
||||||
|
if WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_BURNING_CRUSADE_CLASSIC then
|
||||||
|
if not LE_EXPANSION_LEVEL_CURRENT or LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_BURNING_CRUSADE then
|
||||||
|
IceHUD.WowClassicBC = true
|
||||||
|
elseif LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_WRATH_OF_THE_LICH_KING then
|
||||||
|
IceHUD.WowClassicWrath = true
|
||||||
|
end
|
||||||
|
elseif WOW_PROJECT_WRATH_CLASSIC and WOW_PROJECT_ID == WOW_PROJECT_WRATH_CLASSIC then
|
||||||
|
IceHUD.WowClassicWrath = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- compatibility/feature flags
|
||||||
|
IceHUD.SpellFunctionsReturnRank = IceHUD.WowMain and IceHUD.WowVer < 80000
|
||||||
|
IceHUD.EventExistsPlayerPetChanged = IceHUD.WowMain and IceHUD.WowVer < 80000
|
||||||
|
IceHUD.EventExistsPetBarChanged = IceHUD.WowMain and IceHUD.WowVer < 80000
|
||||||
|
IceHUD.EventExistsPlayerComboPoints = IceHUD.WowMain and IceHUD.WowVer < 30000
|
||||||
|
IceHUD.EventExistsUnitComboPoints = IceHUD.WowMain and IceHUD.WowVer < 70000
|
||||||
|
IceHUD.EventExistsUnitMaxPower = IceHUD.WowMain and IceHUD.WowVer >= 40000
|
||||||
|
IceHUD.EventExistsGroupRosterUpdate = IceHUD.WowVer >= 50000 or not IceHUD.WowMain
|
||||||
|
IceHUD.EventExistsUnitDynamicFlags = IceHUD.WowMain and IceHUD.WowVer < 80000
|
||||||
|
IceHUD.EventExistsUnitHealthFrequent = not IceHUD.WowMain or (IceHUD.WowVer >= 40000 and IceHUD.WowVer < 90000)
|
||||||
|
IceHUD.PerPowerEventsExist = IceHUD.WowMain and IceHUD.WowVer < 40000
|
||||||
|
IceHUD.PerTargetComboPoints = IceHUD.WowVer < 60000
|
||||||
|
IceHUD.CanTrackOtherUnitBuffs = not IceHUD.WowClassic
|
||||||
|
IceHUD.CanTrackGCD = not IceHUD.WowClassic
|
||||||
|
IceHUD.GetSpellInfoReturnsFunnel = IceHUD.WowMain and IceHUD.WowVer < 60000
|
||||||
|
IceHUD.CanHookDestroyTotem = IceHUD.WowClassic or IceHUD.WowClassicBC or IceHUD.WowClassicWrath
|
||||||
|
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.SupportsHealPrediction = IceHUD.WowVer >= 40000 or IceHUD.WowClassicWrath
|
||||||
|
IceHUD.UnitGroupRolesReturnsRoleString = IceHUD.WowVer >= 40000 or IceHUD.WowClassicWrath
|
||||||
|
IceHUD.ShellGameSpellID = 271571
|
||||||
|
IceHUD.HasShellGame = GetSpellInfo(IceHUD.ShellGameSpellID)
|
||||||
|
|
||||||
IceHUD.UnitPowerEvent = "UNIT_POWER_UPDATE"
|
IceHUD.UnitPowerEvent = "UNIT_POWER_UPDATE"
|
||||||
|
|
||||||
@ -25,6 +66,8 @@ IceHUD.validBarList = { "Bar", "HiBar", "RoundBar", "ColorBar", "RivetBar", "Riv
|
|||||||
"BloodGlaives", "ArcHUD", "FangRune", "DHUD", "CleanCurvesOut", "CleanTank", "PillTank", "GemTank" }
|
"BloodGlaives", "ArcHUD", "FangRune", "DHUD", "CleanCurvesOut", "CleanTank", "PillTank", "GemTank" }
|
||||||
IceHUD.validCustomModules = {Bar="Buff/Debuff watcher", Counter="Buff/Debuff stack counter", CD="Cooldown bar", Health="Health bar", Mana="Mana bar", CounterBar="Stack count bar"}
|
IceHUD.validCustomModules = {Bar="Buff/Debuff watcher", Counter="Buff/Debuff stack counter", CD="Cooldown bar", Health="Health bar", Mana="Mana bar", CounterBar="Stack count bar"}
|
||||||
|
|
||||||
|
IceHUD_UnitFrame_DropDown = CreateFrame("Frame", "IceHUD_UnitFrame_DropDown", UIParent, "UIDropDownMenuTemplate")
|
||||||
|
|
||||||
--@debug@
|
--@debug@
|
||||||
IceHUD.optionsLoaded = true
|
IceHUD.optionsLoaded = true
|
||||||
--@end-debug@
|
--@end-debug@
|
||||||
@ -49,6 +92,43 @@ end
|
|||||||
|
|
||||||
IceHUD.deepcopy = deepcopy
|
IceHUD.deepcopy = deepcopy
|
||||||
|
|
||||||
|
function IceHUD:removeDefaults(db, defaults, blocker)
|
||||||
|
-- remove all metatables from the db, so we don't accidentally create new sub-tables through them
|
||||||
|
setmetatable(db, nil)
|
||||||
|
-- loop through the defaults and remove their content
|
||||||
|
for k,v in pairs(defaults) do
|
||||||
|
if type(v) == "table" and type(db[k]) == "table" then
|
||||||
|
-- if a blocker was set, dive into it, to allow multi-level defaults
|
||||||
|
self:removeDefaults(db[k], v, blocker and blocker[k])
|
||||||
|
if next(db[k]) == nil then
|
||||||
|
db[k] = nil
|
||||||
|
end
|
||||||
|
else
|
||||||
|
-- check if the current value matches the default, and that its not blocked by another defaults table
|
||||||
|
if db[k] == defaults[k] and (not blocker or blocker[k] == nil) then
|
||||||
|
db[k] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function IceHUD:populateDefaults(db, defaults, blocker)
|
||||||
|
-- remove all metatables from the db, so we don't accidentally create new sub-tables through them
|
||||||
|
setmetatable(db, nil)
|
||||||
|
-- loop through the defaults and add their content
|
||||||
|
for k,v in pairs(defaults) do
|
||||||
|
if type(v) == "table" and type(db[k]) == "table" then
|
||||||
|
-- if a blocker was set, dive into it, to allow multi-level defaults
|
||||||
|
self:populateDefaults(db[k], v, blocker and blocker[k])
|
||||||
|
else
|
||||||
|
-- check if the current value matches the default, and that its not blocked by another defaults table
|
||||||
|
if db[k] == nil then
|
||||||
|
db[k] = defaults[k]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
IceHUD.Location = "Interface\\AddOns\\IceHUD"
|
IceHUD.Location = "Interface\\AddOns\\IceHUD"
|
||||||
|
|
||||||
StaticPopupDialogs["ICEHUD_CUSTOM_BAR_CREATED"] =
|
StaticPopupDialogs["ICEHUD_CUSTOM_BAR_CREATED"] =
|
||||||
@ -324,7 +404,7 @@ end
|
|||||||
-- blizzard interface options
|
-- blizzard interface options
|
||||||
local blizOptionsPanel = CreateFrame("FRAME", "IceHUDConfigPanel", UIParent)
|
local blizOptionsPanel = CreateFrame("FRAME", "IceHUDConfigPanel", UIParent)
|
||||||
blizOptionsPanel.name = "IceHUD"
|
blizOptionsPanel.name = "IceHUD"
|
||||||
blizOptionsPanel.button = CreateFrame("BUTTON", "IceHUDOpenConfigButton", blizOptionsPanel, (IceHUD.WowVer >= 50000 or IceHUD.WowClassic) and "UIPanelButtonTemplate" or "UIPanelButtonTemplate2")
|
blizOptionsPanel.button = CreateFrame("BUTTON", "IceHUDOpenConfigButton", blizOptionsPanel, IceHUD.UsesUIPanelButtonTemplate and "UIPanelButtonTemplate" or "UIPanelButtonTemplate2")
|
||||||
blizOptionsPanel.button:SetText("Open IceHUD configuration")
|
blizOptionsPanel.button:SetText("Open IceHUD configuration")
|
||||||
blizOptionsPanel.button:SetWidth(240)
|
blizOptionsPanel.button:SetWidth(240)
|
||||||
blizOptionsPanel.button:SetHeight(30)
|
blizOptionsPanel.button:SetHeight(30)
|
||||||
@ -416,7 +496,7 @@ function IceHUD:GetAuraCount(auraType, unit, ability, onlyMine, matchByName)
|
|||||||
|
|
||||||
local i = 1
|
local i = 1
|
||||||
local name, _, texture, applications
|
local name, _, texture, applications
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
name, _, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
name, _, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
||||||
else
|
else
|
||||||
name, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
name, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
||||||
@ -428,7 +508,7 @@ function IceHUD:GetAuraCount(auraType, unit, ability, onlyMine, matchByName)
|
|||||||
end
|
end
|
||||||
|
|
||||||
i = i + 1
|
i = i + 1
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
name, _, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
name, _, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
||||||
else
|
else
|
||||||
name, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
name, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
|
||||||
@ -448,7 +528,7 @@ do
|
|||||||
|
|
||||||
local i = 1
|
local i = 1
|
||||||
local name, _, texture, applications, _, _, _, _, _, _, auraID
|
local name, _, texture, applications, _, _, _, _, _, _, auraID
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
name, _, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
|
name, _, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
|
||||||
else
|
else
|
||||||
name, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
|
name, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
|
||||||
@ -462,7 +542,7 @@ do
|
|||||||
end
|
end
|
||||||
|
|
||||||
i = i + 1
|
i = i + 1
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
name, _, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
|
name, _, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
|
||||||
else
|
else
|
||||||
name, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
|
name, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
|
||||||
@ -475,6 +555,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()
|
||||||
@ -614,14 +718,14 @@ function IceHUD:GetIsInLFGGroup()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local mode, submode
|
local mode, submode
|
||||||
if IceHUD.WowVer >= 50000 then
|
if LE_LFG_CATEGORY_LFD then
|
||||||
mode, submode = GetLFGMode(LE_LFG_CATEGORY_LFD)
|
mode, submode = GetLFGMode(LE_LFG_CATEGORY_LFD)
|
||||||
else
|
else
|
||||||
mode, submode = GetLFGMode()
|
mode, submode = GetLFGMode()
|
||||||
end
|
end
|
||||||
local IsInLFGGroup = CheckLFGMode(mode)
|
local IsInLFGGroup = CheckLFGMode(mode)
|
||||||
|
|
||||||
if IceHUD.WowVer < 50000 then
|
if not LE_LFG_CATEGORY_LFD then
|
||||||
return IsInLFGGroup
|
return IsInLFGGroup
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -641,31 +745,69 @@ function IceHUD:GetIsInLFGGroup()
|
|||||||
return IsInLFGGroup
|
return IsInLFGGroup
|
||||||
end
|
end
|
||||||
|
|
||||||
local BLACKLISTED_UNIT_MENU_OPTIONS = {
|
local BLACKLISTED_UNIT_MENU_OPTIONS = {}
|
||||||
SET_FOCUS = "ICEHUD_SET_FOCUS",
|
if UnitPopupButtons then
|
||||||
CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS",
|
BLACKLISTED_UNIT_MENU_OPTIONS = {
|
||||||
PET_DISMISS = "ICEHUD_PET_DISMISS",
|
SET_FOCUS = "ICEHUD_SET_FOCUS",
|
||||||
LOCK_FOCUS_FRAME = true,
|
CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS",
|
||||||
UNLOCK_FOCUS_FRAME = true,
|
LOCK_FOCUS_FRAME = true,
|
||||||
}
|
UNLOCK_FOCUS_FRAME = true,
|
||||||
|
}
|
||||||
|
if select(2, UnitClass("player")) ~= "WARLOCK" then
|
||||||
|
BLACKLISTED_UNIT_MENU_OPTIONS[PET_DISMISS] = "ICEHUD_PET_DISMISS"
|
||||||
|
end
|
||||||
|
|
||||||
UnitPopupButtons["ICEHUD_SET_FOCUS"] = {
|
UnitPopupButtons["ICEHUD_SET_FOCUS"] = {
|
||||||
text = L["Type %s to set focus"]:format(SLASH_FOCUS1),
|
text = L["Type %s to set focus"]:format(SLASH_FOCUS1),
|
||||||
tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."],
|
tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."],
|
||||||
dist = 0,
|
dist = 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
UnitPopupButtons["ICEHUD_CLEAR_FOCUS"] = {
|
UnitPopupButtons["ICEHUD_CLEAR_FOCUS"] = {
|
||||||
text = L["Type %s to clear focus"]:format(SLASH_CLEARFOCUS1),
|
text = L["Type %s to clear focus"]:format(SLASH_CLEARFOCUS1),
|
||||||
tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."],
|
tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."],
|
||||||
dist = 0,
|
dist = 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
UnitPopupButtons["ICEHUD_PET_DISMISS"] = {
|
UnitPopupButtons["ICEHUD_PET_DISMISS"] = {
|
||||||
text = L["Use your Dismiss Pet spell to dismiss a pet"],
|
text = L["Use your Dismiss Pet spell to dismiss a pet"],
|
||||||
tooltipText = L["Blizzard currently does not provide a proper way to right-click dismiss a pet with custom unit frames."],
|
tooltipText = L["Blizzard currently does not provide a proper way to right-click dismiss a pet with custom unit frames."],
|
||||||
dist = 0,
|
dist = 0,
|
||||||
}
|
}
|
||||||
|
elseif UnitPopupSetFocusButtonMixin then
|
||||||
|
IceHUDUnitPopupSetFocusButtonMixin = CreateFromMixins(UnitPopupButtonBaseMixin)
|
||||||
|
function IceHUDUnitPopupSetFocusButtonMixin:GetText()
|
||||||
|
return L["Type %s to set focus"]:format(SLASH_FOCUS1)
|
||||||
|
end
|
||||||
|
function IceHUDUnitPopupSetFocusButtonMixin:OnClick()
|
||||||
|
end
|
||||||
|
|
||||||
|
IceHUDUnitPopupClearFocusButtonMixin = CreateFromMixins(UnitPopupButtonBaseMixin)
|
||||||
|
function IceHUDUnitPopupClearFocusButtonMixin:GetText()
|
||||||
|
return L["Type %s to clear focus"]:format(SLASH_CLEARFOCUS1)
|
||||||
|
end
|
||||||
|
function IceHUDUnitPopupClearFocusButtonMixin:OnClick()
|
||||||
|
end
|
||||||
|
|
||||||
|
IceHUDUnitPopupPetDismissButtonMixin = CreateFromMixins(UnitPopupButtonBaseMixin)
|
||||||
|
function IceHUDUnitPopupPetDismissButtonMixin:GetText()
|
||||||
|
return L["Use your Dismiss Pet spell to dismiss a pet"]
|
||||||
|
end
|
||||||
|
function IceHUDUnitPopupPetDismissButtonMixin:CanShow()
|
||||||
|
return UnitPopupPetDismissButtonMixin:CanShow()
|
||||||
|
end
|
||||||
|
function IceHUDUnitPopupPetDismissButtonMixin:OnClick()
|
||||||
|
end
|
||||||
|
|
||||||
|
BLACKLISTED_UNIT_MENU_OPTIONS[SET_FOCUS] = IceHUDUnitPopupSetFocusButtonMixin
|
||||||
|
BLACKLISTED_UNIT_MENU_OPTIONS[CLEAR_FOCUS] = IceHUDUnitPopupClearFocusButtonMixin
|
||||||
|
BLACKLISTED_UNIT_MENU_OPTIONS[LOCK_FOCUS_FRAME] = true
|
||||||
|
BLACKLISTED_UNIT_MENU_OPTIONS[UNLOCK_FOCUS_FRAME] = true
|
||||||
|
|
||||||
|
if select(2, UnitClass("player")) ~= "WARLOCK" then
|
||||||
|
BLACKLISTED_UNIT_MENU_OPTIONS[PET_DISMISS] = IceHUDUnitPopupPetDismissButtonMixin
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local munged_unit_menus = {}
|
local munged_unit_menus = {}
|
||||||
local function munge_unit_menu(menu)
|
local function munge_unit_menu(menu)
|
||||||
@ -686,11 +828,34 @@ local function munge_unit_menu(menu)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local found = false
|
local found = false
|
||||||
local _, v
|
if data.GetMenuButtons then
|
||||||
for _, v in ipairs(data) do
|
local btns = data.GetMenuButtons()
|
||||||
if BLACKLISTED_UNIT_MENU_OPTIONS[v] then
|
for i=1, #btns do
|
||||||
found = true
|
if btns[i].IsMenu() then
|
||||||
break
|
local subbtns = btns[i].GetMenuButtons()
|
||||||
|
for j=1, #subbtns do
|
||||||
|
if BLACKLISTED_UNIT_MENU_OPTIONS[subbtns[j]:GetText()] then
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if BLACKLISTED_UNIT_MENU_OPTIONS[btns[i]:GetText()] then
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if found then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
for _, v in ipairs(data) do
|
||||||
|
if BLACKLISTED_UNIT_MENU_OPTIONS[v] then
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -701,15 +866,42 @@ local function munge_unit_menu(menu)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local new_data = {}
|
local new_data = {}
|
||||||
for _, v in ipairs(data) do
|
if data.GetMenuButtons then
|
||||||
local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[v]
|
local new_buttons_list = {}
|
||||||
if v == "PET_DISMISS" and select(2, UnitClass("player")) == "WARLOCK" then
|
local btns = data.GetMenuButtons()
|
||||||
blacklisted = false
|
for i=1, #btns do
|
||||||
|
if btns[i].IsMenu() then
|
||||||
|
local subbtns = btns[i].GetMenuButtons()
|
||||||
|
for j=1, #subbtns do
|
||||||
|
local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[subbtns[j]:GetText()]
|
||||||
|
if not blacklisted then
|
||||||
|
new_buttons_list[#new_buttons_list+1] = subbtns[j]
|
||||||
|
elseif blacklisted ~= true then
|
||||||
|
new_buttons_list[#new_buttons_list+1] = blacklisted
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[btns[i]:GetText()]
|
||||||
|
if not blacklisted then
|
||||||
|
new_buttons_list[#new_buttons_list+1] = btns[i]
|
||||||
|
elseif blacklisted ~= true then
|
||||||
|
new_buttons_list[#new_buttons_list+1] = blacklisted
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
if not blacklisted then
|
|
||||||
new_data[#new_data+1] = v
|
new_data = data
|
||||||
elseif blacklisted ~= true then
|
function new_data:GetMenuButtons()
|
||||||
new_data[#new_data+1] = blacklisted
|
return new_buttons_list
|
||||||
|
end
|
||||||
|
else
|
||||||
|
for _, v in ipairs(data) do
|
||||||
|
local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[v]
|
||||||
|
if not blacklisted then
|
||||||
|
new_data[#new_data+1] = v
|
||||||
|
elseif blacklisted ~= true then
|
||||||
|
new_data[#new_data+1] = blacklisted
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local new_menu_name = "ICEHUD_" .. menu
|
local new_menu_name = "ICEHUD_" .. menu
|
||||||
@ -755,7 +947,6 @@ local function figure_unit_menu(unit)
|
|||||||
return "PLAYER"
|
return "PLAYER"
|
||||||
end
|
end
|
||||||
|
|
||||||
IceHUD_UnitFrame_DropDown = CreateFrame("Frame", "IceHUD_UnitFrame_DropDown", UIParent, "UIDropDownMenuTemplate")
|
|
||||||
if UnitPopupFrames then
|
if UnitPopupFrames then
|
||||||
UnitPopupFrames[#UnitPopupFrames+1] = "IceHUD_UnitFrame_DropDown"
|
UnitPopupFrames[#UnitPopupFrames+1] = "IceHUD_UnitFrame_DropDown"
|
||||||
end
|
end
|
||||||
|
15
IceHUD.toc
@ -1,9 +1,8 @@
|
|||||||
#@retail@
|
## Interface: 100000
|
||||||
## Interface: 90002
|
## Interface-Retail: 100000
|
||||||
#@end-retail@
|
## Interface-Classic: 11403
|
||||||
#@non-retail@
|
## Interface-BCC: 20504
|
||||||
# ## Interface: 11305
|
## Interface-Wrath: 30400
|
||||||
#@end-non-retail@
|
|
||||||
## 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
|
||||||
@ -20,6 +19,7 @@
|
|||||||
## X-Website: https://www.wowace.com/projects/ice-hud
|
## X-Website: https://www.wowace.com/projects/ice-hud
|
||||||
## X-Curse-Project-ID: 5394
|
## X-Curse-Project-ID: 5394
|
||||||
## X-WoWI-ID: 8149
|
## X-WoWI-ID: 8149
|
||||||
|
## X-Wago-ID: 5bGolJN0
|
||||||
|
|
||||||
#@no-lib-strip@
|
#@no-lib-strip@
|
||||||
# Libraries
|
# Libraries
|
||||||
@ -101,5 +101,8 @@ modules\ArcaneCharges.lua
|
|||||||
modules\RollTheBones.lua
|
modules\RollTheBones.lua
|
||||||
|
|
||||||
#@do-not-package@
|
#@do-not-package@
|
||||||
|
IceHUD_Options\Json.lua
|
||||||
|
IceHUD_Options\JsonDecode.lua
|
||||||
|
IceHUD_Options\JsonEncode.lua
|
||||||
IceHUD_Options\Options.lua
|
IceHUD_Options\Options.lua
|
||||||
#@end-do-not-package@
|
#@end-do-not-package@
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
#@retail@
|
## Interface: 100000
|
||||||
## Interface: 90002
|
## Interface-Retail: 100000
|
||||||
#@end-retail@
|
## Interface-Classic: 11403
|
||||||
#@non-retail@
|
## Interface-BCC: 20504
|
||||||
# ## Interface: 11305
|
## Interface-Wrath: 30400
|
||||||
#@end-non-retail@
|
|
||||||
## Title: IceHUD |cff7fff7f-Options-|r
|
## Title: IceHUD |cff7fff7f-Options-|r
|
||||||
## Author: Parnic
|
## Author: Parnic
|
||||||
## Version: @project-version@
|
## Version: @project-version@
|
||||||
@ -12,4 +11,7 @@
|
|||||||
## Dependencies: IceHUD
|
## Dependencies: IceHUD
|
||||||
## LoadOnDemand: 1
|
## LoadOnDemand: 1
|
||||||
|
|
||||||
|
Json.lua
|
||||||
|
JsonDecode.lua
|
||||||
|
JsonEncode.lua
|
||||||
Options.lua
|
Options.lua
|
||||||
|
1
IceHUD_Options/Json.lua
Normal file
@ -0,0 +1 @@
|
|||||||
|
IceHUD.json = {}
|
241
IceHUD_Options/JsonDecode.lua
Normal file
@ -0,0 +1,241 @@
|
|||||||
|
local parse
|
||||||
|
|
||||||
|
local function create_set(...)
|
||||||
|
local res = {}
|
||||||
|
for i = 1, select("#", ...) do
|
||||||
|
res[select(i, ...)] = true
|
||||||
|
end
|
||||||
|
return res
|
||||||
|
end
|
||||||
|
|
||||||
|
local space_chars = create_set(" ", "\t", "\r", "\n")
|
||||||
|
local delim_chars = create_set(" ", "\t", "\r", "\n", "]", "}", ",")
|
||||||
|
local escape_chars = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u")
|
||||||
|
local literals = create_set("true", "false", "null")
|
||||||
|
|
||||||
|
local literal_map = {
|
||||||
|
["true"] = true,
|
||||||
|
["false"] = false,
|
||||||
|
["null"] = nil,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
local function next_char(str, idx, set, negate)
|
||||||
|
for i = idx, #str do
|
||||||
|
if set[str:sub(i, i)] ~= negate then
|
||||||
|
return i
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return #str + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
local function decode_error(str, idx, msg)
|
||||||
|
local line_count = 1
|
||||||
|
local col_count = 1
|
||||||
|
for i = 1, idx - 1 do
|
||||||
|
col_count = col_count + 1
|
||||||
|
if str:sub(i, i) == "\n" then
|
||||||
|
line_count = line_count + 1
|
||||||
|
col_count = 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return string.format("%s at line %d col %d", msg, line_count, col_count)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function codepoint_to_utf8(n)
|
||||||
|
-- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa
|
||||||
|
local f = math.floor
|
||||||
|
if n <= 0x7f then
|
||||||
|
return string.char(n)
|
||||||
|
elseif n <= 0x7ff then
|
||||||
|
return string.char(f(n / 64) + 192, n % 64 + 128)
|
||||||
|
elseif n <= 0xffff then
|
||||||
|
return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128)
|
||||||
|
elseif n <= 0x10ffff then
|
||||||
|
return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128,
|
||||||
|
f(n % 4096 / 64) + 128, n % 64 + 128)
|
||||||
|
end
|
||||||
|
return "", string.format("invalid unicode codepoint '%x'", n)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function parse_unicode_escape(s)
|
||||||
|
local n1 = tonumber(s:sub(1, 4), 16)
|
||||||
|
local n2 = tonumber(s:sub(7, 10), 16)
|
||||||
|
-- Surrogate pair?
|
||||||
|
if n2 then
|
||||||
|
return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000)
|
||||||
|
else
|
||||||
|
return codepoint_to_utf8(n1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function parse_string(str, i)
|
||||||
|
local res = ""
|
||||||
|
local j = i + 1
|
||||||
|
local k = j
|
||||||
|
|
||||||
|
while j <= #str do
|
||||||
|
local x = str:byte(j)
|
||||||
|
|
||||||
|
if x < 32 then
|
||||||
|
return str, j, decode_error(str, j, "control character in string")
|
||||||
|
|
||||||
|
elseif x == 92 then -- `\`: Escape
|
||||||
|
res = res .. str:sub(k, j - 1)
|
||||||
|
j = j + 1
|
||||||
|
local c = str:sub(j, j)
|
||||||
|
if c == "u" then
|
||||||
|
local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1)
|
||||||
|
or str:match("^%x%x%x%x", j + 1)
|
||||||
|
or false
|
||||||
|
if hex == false then
|
||||||
|
return str, j-1, decode_error(str, j - 1, "invalid unicode escape in string")
|
||||||
|
end
|
||||||
|
res = res .. parse_unicode_escape(hex)
|
||||||
|
j = j + #hex
|
||||||
|
else
|
||||||
|
if not escape_chars[c] then
|
||||||
|
return str, j-1, decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string")
|
||||||
|
end
|
||||||
|
res = res .. escape_char_map_inv[c]
|
||||||
|
end
|
||||||
|
k = j + 1
|
||||||
|
|
||||||
|
elseif x == 34 then -- `"`: End of string
|
||||||
|
res = res .. str:sub(k, j - 1)
|
||||||
|
return res, j + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
j = j + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
return str, i, decode_error(str, i, "expected closing quote for string")
|
||||||
|
end
|
||||||
|
|
||||||
|
local function parse_number(str, i)
|
||||||
|
local x = next_char(str, i, delim_chars)
|
||||||
|
local s = str:sub(i, x - 1)
|
||||||
|
local n = tonumber(s)
|
||||||
|
if not n then
|
||||||
|
return -1, -1, decode_error(str, i, "invalid number '" .. s .. "'")
|
||||||
|
end
|
||||||
|
return n, x
|
||||||
|
end
|
||||||
|
|
||||||
|
local function parse_literal(str, i)
|
||||||
|
local x = next_char(str, i, delim_chars)
|
||||||
|
local word = str:sub(i, x - 1)
|
||||||
|
if not literals[word] then
|
||||||
|
return false, -1, decode_error(str, i, "invalid literal '" .. word .. "'")
|
||||||
|
end
|
||||||
|
return literal_map[word], x
|
||||||
|
end
|
||||||
|
|
||||||
|
local function parse_array(str, i)
|
||||||
|
local res = {}
|
||||||
|
local n = 1
|
||||||
|
i = i + 1
|
||||||
|
while 1 do
|
||||||
|
local x
|
||||||
|
i = next_char(str, i, space_chars, true)
|
||||||
|
-- Empty / end of array?
|
||||||
|
if str:sub(i, i) == "]" then
|
||||||
|
i = i + 1
|
||||||
|
break
|
||||||
|
end
|
||||||
|
-- Read token
|
||||||
|
x, i = parse(str, i)
|
||||||
|
res[n] = x
|
||||||
|
n = n + 1
|
||||||
|
-- Next token
|
||||||
|
i = next_char(str, i, space_chars, true)
|
||||||
|
local chr = str:sub(i, i)
|
||||||
|
i = i + 1
|
||||||
|
if chr == "]" then break end
|
||||||
|
if chr ~= "," then return nil, -1, decode_error(str, i, "expected ']' or ','") end
|
||||||
|
end
|
||||||
|
return res, i
|
||||||
|
end
|
||||||
|
|
||||||
|
local function parse_object(str, i)
|
||||||
|
local res = {}
|
||||||
|
i = i + 1
|
||||||
|
while 1 do
|
||||||
|
local key, val
|
||||||
|
i = next_char(str, i, space_chars, true)
|
||||||
|
-- Empty / end of object?
|
||||||
|
if str:sub(i, i) == "}" then
|
||||||
|
i = i + 1
|
||||||
|
break
|
||||||
|
end
|
||||||
|
-- Read key
|
||||||
|
if str:sub(i, i) ~= '"' then
|
||||||
|
return nil, -1, decode_error(str, i, "expected string for key")
|
||||||
|
end
|
||||||
|
key, i = parse(str, i)
|
||||||
|
-- Read ':' delimiter
|
||||||
|
i = next_char(str, i, space_chars, true)
|
||||||
|
if str:sub(i, i) ~= ":" then
|
||||||
|
return nil, -1, decode_error(str, i, "expected ':' after key")
|
||||||
|
end
|
||||||
|
i = next_char(str, i + 1, space_chars, true)
|
||||||
|
-- Read value
|
||||||
|
val, i = parse(str, i)
|
||||||
|
-- Set
|
||||||
|
res[key] = val
|
||||||
|
-- Next token
|
||||||
|
i = next_char(str, i, space_chars, true)
|
||||||
|
local chr = str:sub(i, i)
|
||||||
|
i = i + 1
|
||||||
|
if chr == "}" then break end
|
||||||
|
if chr ~= "," then return nil, -1, decode_error(str, i, "expected '}' or ','") end
|
||||||
|
end
|
||||||
|
return res, i
|
||||||
|
end
|
||||||
|
|
||||||
|
local char_func_map = {
|
||||||
|
['"'] = parse_string,
|
||||||
|
["0"] = parse_number,
|
||||||
|
["1"] = parse_number,
|
||||||
|
["2"] = parse_number,
|
||||||
|
["3"] = parse_number,
|
||||||
|
["4"] = parse_number,
|
||||||
|
["5"] = parse_number,
|
||||||
|
["6"] = parse_number,
|
||||||
|
["7"] = parse_number,
|
||||||
|
["8"] = parse_number,
|
||||||
|
["9"] = parse_number,
|
||||||
|
["-"] = parse_number,
|
||||||
|
["t"] = parse_literal,
|
||||||
|
["f"] = parse_literal,
|
||||||
|
["n"] = parse_literal,
|
||||||
|
["["] = parse_array,
|
||||||
|
["{"] = parse_object,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
parse = function(str, idx)
|
||||||
|
local chr = str:sub(idx, idx)
|
||||||
|
local f = char_func_map[chr]
|
||||||
|
if f then
|
||||||
|
return f(str, idx)
|
||||||
|
end
|
||||||
|
return false, -1, decode_error(str, idx, "unexpected character '" .. chr .. "'")
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function IceHUD.json.decode(str)
|
||||||
|
if type(str) ~= "string" then
|
||||||
|
return nil, "expected argument of type string, got " .. type(str)
|
||||||
|
end
|
||||||
|
local res, idx, err = parse(str, next_char(str, 1, space_chars, true))
|
||||||
|
if err ~= nil then
|
||||||
|
return nil, err
|
||||||
|
end
|
||||||
|
idx = next_char(str, idx, space_chars, true)
|
||||||
|
if idx <= #str then
|
||||||
|
return nil, decode_error(str, idx, "trailing garbage")
|
||||||
|
end
|
||||||
|
return res, nil
|
||||||
|
end
|
100
IceHUD_Options/JsonEncode.lua
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
local encode
|
||||||
|
|
||||||
|
local escape_char_map = {
|
||||||
|
["\\"] = "\\",
|
||||||
|
["\""] = "\"",
|
||||||
|
["\b"] = "b",
|
||||||
|
["\f"] = "f",
|
||||||
|
["\n"] = "n",
|
||||||
|
["\r"] = "r",
|
||||||
|
["\t"] = "t",
|
||||||
|
}
|
||||||
|
|
||||||
|
local escape_char_map_inv = { ["/"] = "/" }
|
||||||
|
for k, v in pairs(escape_char_map) do
|
||||||
|
escape_char_map_inv[v] = k
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function escape_char(c)
|
||||||
|
return "\\" .. (escape_char_map[c] or string.format("u%04x", c:byte()))
|
||||||
|
end
|
||||||
|
|
||||||
|
local function encode_nil(val)
|
||||||
|
return "null"
|
||||||
|
end
|
||||||
|
|
||||||
|
local function encode_table(val, stack)
|
||||||
|
local res = {}
|
||||||
|
stack = stack or {}
|
||||||
|
|
||||||
|
-- Circular reference?
|
||||||
|
if stack[val] then error("circular reference") end
|
||||||
|
|
||||||
|
stack[val] = true
|
||||||
|
|
||||||
|
if rawget(val, 1) ~= nil or next(val) == nil then
|
||||||
|
-- Treat as array -- check keys are valid and it is not sparse
|
||||||
|
local n = 0
|
||||||
|
for k in pairs(val) do
|
||||||
|
if type(k) ~= "number" then
|
||||||
|
error("invalid table: mixed or invalid key types")
|
||||||
|
end
|
||||||
|
n = n + 1
|
||||||
|
end
|
||||||
|
if n ~= #val then
|
||||||
|
error("invalid table: sparse array")
|
||||||
|
end
|
||||||
|
-- Encode
|
||||||
|
for i, v in ipairs(val) do
|
||||||
|
table.insert(res, encode(v, stack))
|
||||||
|
end
|
||||||
|
stack[val] = nil
|
||||||
|
return "[" .. table.concat(res, ",") .. "]"
|
||||||
|
|
||||||
|
else
|
||||||
|
-- Treat as an object
|
||||||
|
for k, v in pairs(val) do
|
||||||
|
if type(k) ~= "string" then
|
||||||
|
error("invalid table: mixed or invalid key types")
|
||||||
|
end
|
||||||
|
table.insert(res, encode(k, stack) .. ":" .. encode(v, stack))
|
||||||
|
end
|
||||||
|
stack[val] = nil
|
||||||
|
return "{" .. table.concat(res, ",") .. "}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function encode_string(val)
|
||||||
|
return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"'
|
||||||
|
end
|
||||||
|
|
||||||
|
local function encode_number(val)
|
||||||
|
-- Check for NaN, -inf and inf
|
||||||
|
if val ~= val or val <= -math.huge or val >= math.huge then
|
||||||
|
error("unexpected number value '" .. tostring(val) .. "'")
|
||||||
|
end
|
||||||
|
return string.format("%.14g", val)
|
||||||
|
end
|
||||||
|
|
||||||
|
local type_func_map = {
|
||||||
|
["nil"] = encode_nil,
|
||||||
|
["table"] = encode_table,
|
||||||
|
["string"] = encode_string,
|
||||||
|
["number"] = encode_number,
|
||||||
|
["boolean"] = tostring,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
encode = function(val, stack)
|
||||||
|
local t = type(val)
|
||||||
|
local f = type_func_map[t]
|
||||||
|
if f then
|
||||||
|
return f(val, stack)
|
||||||
|
end
|
||||||
|
error("unexpected type '" .. t .. "'")
|
||||||
|
end
|
||||||
|
|
||||||
|
function IceHUD.json.encode(val)
|
||||||
|
return (encode(val))
|
||||||
|
end
|
@ -1,6 +1,8 @@
|
|||||||
local LibDualSpec = LibStub('LibDualSpec-1.0', true)
|
local LibDualSpec = LibStub('LibDualSpec-1.0', true)
|
||||||
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
||||||
local icon = LibStub("LibDBIcon-1.0", true)
|
local icon = LibStub("LibDBIcon-1.0", true)
|
||||||
|
local AceGUI = LibStub("AceGUI-3.0")
|
||||||
|
local AceSerializer = LibStub("AceSerializer-3.0", 1)
|
||||||
local lastCustomModule = "Bar"
|
local lastCustomModule = "Bar"
|
||||||
|
|
||||||
IceHUD_Options = {}
|
IceHUD_Options = {}
|
||||||
@ -421,7 +423,7 @@ The Classic game client doesn't provide this information to addons because it wa
|
|||||||
IceHUD.IceCore.IceHUDFrame:Show()
|
IceHUD.IceCore.IceHUDFrame:Show()
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
hidden = IceHUD.WowVer < 80000,
|
hidden = not IceHUD.HasShellGame,
|
||||||
order = 36,
|
order = 36,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -757,6 +759,9 @@ function IceHUD_Options:OnLoad()
|
|||||||
self:GenerateModuleOptions(true)
|
self:GenerateModuleOptions(true)
|
||||||
self.options.args.colors.args = IceHUD.IceCore:GetColorOptions()
|
self.options.args.colors.args = IceHUD.IceCore:GetColorOptions()
|
||||||
self.options.args.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(IceHUD.db)
|
self.options.args.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(IceHUD.db)
|
||||||
|
--@debug@
|
||||||
|
IceHUD_Options:SetupProfileImportButtons()
|
||||||
|
--@end-debug@
|
||||||
|
|
||||||
-- Add dual-spec support
|
-- Add dual-spec support
|
||||||
if IceHUD.db ~= nil and LibDualSpec then
|
if IceHUD.db ~= nil and LibDualSpec then
|
||||||
@ -787,14 +792,14 @@ function IceHUD_Options:SetupProfileImportButtons()
|
|||||||
editbox:SetLabel("Profile")
|
editbox:SetLabel("Profile")
|
||||||
editbox:SetFullWidth(true)
|
editbox:SetFullWidth(true)
|
||||||
editbox:SetFullHeight(true)
|
editbox:SetFullHeight(true)
|
||||||
local profileTable = deepcopy(IceHUD.db.profile)
|
local profileTable = IceHUD.deepcopy(IceHUD.db.profile)
|
||||||
IceHUD:removeDefaults(profileTable, IceHUD.IceCore.defaults.profile)
|
IceHUD:removeDefaults(profileTable, IceHUD.IceCore.defaults.profile)
|
||||||
editbox:SetText(IceHUD:Serialize(profileTable))
|
editbox:SetText(IceHUD.json.encode(profileTable))
|
||||||
editbox:DisableButton(true)
|
editbox:DisableButton(true)
|
||||||
frame:AddChild(editbox)
|
frame:AddChild(editbox)
|
||||||
end,
|
end,
|
||||||
hidden =
|
hidden =
|
||||||
-- hello, snooper! this feature doesn't actually work yet, so enabling it won't help you much :)
|
-- hello, snooper! exporting works well enough, but importing is very rough, so enable this at your own peril
|
||||||
--[===[@non-debug@
|
--[===[@non-debug@
|
||||||
true
|
true
|
||||||
--@end-non-debug@]===]
|
--@end-non-debug@]===]
|
||||||
@ -803,7 +808,7 @@ function IceHUD_Options:SetupProfileImportButtons()
|
|||||||
--@end-debug@
|
--@end-debug@
|
||||||
,
|
,
|
||||||
disabled =
|
disabled =
|
||||||
-- hello, snooper! this feature doesn't actually work yet, so enabling it won't help you much :)
|
-- hello, snooper! exporting works well enough, but importing is very rough, so enable this at your own peril
|
||||||
--[===[@non-debug@
|
--[===[@non-debug@
|
||||||
true
|
true
|
||||||
--@end-non-debug@]===]
|
--@end-non-debug@]===]
|
||||||
@ -824,11 +829,14 @@ function IceHUD_Options:SetupProfileImportButtons()
|
|||||||
frame:SetStatusText("Exported profile details")
|
frame:SetStatusText("Exported profile details")
|
||||||
frame:SetLayout("Flow")
|
frame:SetLayout("Flow")
|
||||||
frame:SetCallback("OnClose", function(widget)
|
frame:SetCallback("OnClose", function(widget)
|
||||||
local success, newTable = IceHUD:Deserialize(widget.children[1]:GetText())
|
local newTable, err = IceHUD.json.decode(widget.children[1]:GetText())
|
||||||
if success then
|
if err ~= nil then
|
||||||
|
print("failed to import profile: "..err)
|
||||||
|
else
|
||||||
|
print("importing profile")
|
||||||
IceHUD:PreProfileChanged()
|
IceHUD:PreProfileChanged()
|
||||||
IceHUD:populateDefaults(newTable, IceHUD.IceCore.defaults.profile)
|
IceHUD:populateDefaults(newTable, IceHUD.IceCore.defaults.profile)
|
||||||
IceHUD.db.profile = deepcopy(newTable)
|
IceHUD.db.profile = IceHUD.deepcopy(newTable)
|
||||||
IceHUD:PostProfileChanged()
|
IceHUD:PostProfileChanged()
|
||||||
end
|
end
|
||||||
AceGUI:Release(widget)
|
AceGUI:Release(widget)
|
||||||
@ -841,7 +849,7 @@ function IceHUD_Options:SetupProfileImportButtons()
|
|||||||
frame:AddChild(editbox)
|
frame:AddChild(editbox)
|
||||||
end,
|
end,
|
||||||
hidden =
|
hidden =
|
||||||
-- hello, snooper! this feature doesn't actually work yet, so enabling it won't help you much :)
|
-- hello, snooper! this feature is really rough, so enable it at your own peril
|
||||||
--[===[@non-debug@
|
--[===[@non-debug@
|
||||||
true
|
true
|
||||||
--@end-non-debug@]===]
|
--@end-non-debug@]===]
|
||||||
@ -850,7 +858,7 @@ function IceHUD_Options:SetupProfileImportButtons()
|
|||||||
--@end-debug@
|
--@end-debug@
|
||||||
,
|
,
|
||||||
disabled =
|
disabled =
|
||||||
-- hello, snooper! this feature doesn't actually work yet, so enabling it won't help you much :)
|
-- hello, snooper! this feature is really rough, so enable it at your own peril
|
||||||
--[===[@non-debug@
|
--[===[@non-debug@
|
||||||
true
|
true
|
||||||
--@end-non-debug@]===]
|
--@end-non-debug@]===]
|
||||||
@ -862,7 +870,3 @@ function IceHUD_Options:SetupProfileImportButtons()
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--@debug@
|
|
||||||
IceHUD_Options:SetupProfileImportButtons()
|
|
||||||
--@end-debug@
|
|
||||||
|
37
IceHUD_Options/TablePrint.lua
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
local function table_print(tt, indent, done)
|
||||||
|
done = done or {}
|
||||||
|
indent = indent or 0
|
||||||
|
if type(tt) == "table" then
|
||||||
|
local sb = {}
|
||||||
|
for key, value in pairs(tt) do
|
||||||
|
table.insert(sb, string.rep(" ", indent)) -- indent it
|
||||||
|
if type(value) == "table" and not done[value] then
|
||||||
|
done[value] = true
|
||||||
|
table.insert(sb, key .. " = {\n");
|
||||||
|
table.insert(sb, table_print(value, indent + 2, done))
|
||||||
|
table.insert(sb, string.rep(" ", indent)) -- indent it
|
||||||
|
table.insert(sb, "}\n");
|
||||||
|
elseif "number" == type(key) then
|
||||||
|
table.insert(sb, string.format("\"%s\"\n", tostring(value)))
|
||||||
|
else
|
||||||
|
table.insert(sb, string.format(
|
||||||
|
"%s = \"%s\"\n", tostring(key), tostring(value)))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return table.concat(sb)
|
||||||
|
else
|
||||||
|
return tt .. "\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function to_string(tbl)
|
||||||
|
if "nil" == type(tbl) then
|
||||||
|
return tostring(nil)
|
||||||
|
elseif "table" == type(tbl) then
|
||||||
|
return table_print(tbl)
|
||||||
|
elseif "string" == type(tbl) then
|
||||||
|
return tbl
|
||||||
|
else
|
||||||
|
return tostring(tbl)
|
||||||
|
end
|
||||||
|
end
|
@ -128,7 +128,7 @@ end
|
|||||||
function IceStackCounter_Enable(frame)
|
function IceStackCounter_Enable(frame)
|
||||||
frame:RegisterEvent("UNIT_AURA", "UpdateCustomCount")
|
frame:RegisterEvent("UNIT_AURA", "UpdateCustomCount")
|
||||||
frame:RegisterEvent("UNIT_PET", "UpdateCustomCount")
|
frame:RegisterEvent("UNIT_PET", "UpdateCustomCount")
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.EventExistsPlayerPetChanged then
|
||||||
frame:RegisterEvent("PLAYER_PET_CHANGED", "UpdateCustomCount")
|
frame:RegisterEvent("PLAYER_PET_CHANGED", "UpdateCustomCount")
|
||||||
end
|
end
|
||||||
if FocusUnit then
|
if FocusUnit then
|
||||||
|
@ -20,7 +20,7 @@ IceUnitBar.prototype.hasPet = nil
|
|||||||
IceUnitBar.prototype.noFlash = nil
|
IceUnitBar.prototype.noFlash = nil
|
||||||
|
|
||||||
local SPELL_POWER_INSANITY, SPELL_POWER_RAGE = SPELL_POWER_INSANITY, SPELL_POWER_RAGE
|
local SPELL_POWER_INSANITY, SPELL_POWER_RAGE = SPELL_POWER_INSANITY, SPELL_POWER_RAGE
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_INSANITY = Enum.PowerType.Insanity
|
SPELL_POWER_INSANITY = Enum.PowerType.Insanity
|
||||||
SPELL_POWER_RAGE = Enum.PowerType.Rage
|
SPELL_POWER_RAGE = Enum.PowerType.Rage
|
||||||
end
|
end
|
||||||
@ -243,7 +243,14 @@ function IceUnitBar.prototype:Update()
|
|||||||
self.mana = IceHUD:MathRound(self.mana / 100)
|
self.mana = IceHUD:MathRound(self.mana / 100)
|
||||||
self.maxMana = IceHUD:MathRound(self.maxMana / 100)
|
self.maxMana = IceHUD:MathRound(self.maxMana / 100)
|
||||||
end
|
end
|
||||||
self.manaPercentage = self.maxMana ~= 0 and (self.mana/self.maxMana) or 0
|
|
||||||
|
-- account for cases where maxMana is 0, perhaps briefly (during certain spells, for example)
|
||||||
|
-- and properly handle it as full. this allows for proper alpha handling during these times.
|
||||||
|
if self.maxMana == self.mana then
|
||||||
|
self.manaPercentage = 1
|
||||||
|
else
|
||||||
|
self.manaPercentage = self.maxMana ~= 0 and (self.mana/self.maxMana) or 0
|
||||||
|
end
|
||||||
|
|
||||||
local locClass
|
local locClass
|
||||||
locClass, self.unitClass = UnitClass(self.unit)
|
locClass, self.unitClass = UnitClass(self.unit)
|
||||||
|
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.
|
113
changelog.md
@ -1,5 +1,118 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
v1.13.17.3:
|
||||||
|
|
||||||
|
- Packaged latest LibDogTag-Unit to work around crash in Wrath Classic client.
|
||||||
|
|
||||||
|
v1.13.17.2:
|
||||||
|
|
||||||
|
- Fixed Runes disappearing for Death Knights on Wrath Classic when using the dual spec feature.
|
||||||
|
|
||||||
|
v1.13.17.1:
|
||||||
|
|
||||||
|
- Fixed Priests hanging on login on the retail client.
|
||||||
|
|
||||||
|
v1.13.17:
|
||||||
|
|
||||||
|
- Internal maintainability updates. There are so many versions of the game now, updates need to be as easy and safe as possible.
|
||||||
|
- Improved reliability of Slice-n-Dice predicted length when changing talents.
|
||||||
|
- Improved various modules's ability to respond to the player's maximum power type changing (going from 5 max combo points to 6, for example).
|
||||||
|
- Fixed invalid texture layers specified on a variety of textures (10.0 fix).
|
||||||
|
- Removed HolyPowerNumeric text from the configuration options of several modules that it didn't belong with.
|
||||||
|
- Fixed combo points in Classic Era clients.
|
||||||
|
|
||||||
|
v1.13.16:
|
||||||
|
|
||||||
|
- Enabled Incoming Heal Prediction on Wrath-Classic.
|
||||||
|
- Added detection for the full Wrath Classic build (not just the pre-patch).
|
||||||
|
|
||||||
|
v1.13.15:
|
||||||
|
|
||||||
|
- Updated TOC for Retail (9.2.7).
|
||||||
|
- Added Wrath-Classic compatibility.
|
||||||
|
|
||||||
|
v1.13.14.3:
|
||||||
|
|
||||||
|
- Restored right-click menus on Info and Health bars when targeting other players.
|
||||||
|
|
||||||
|
v1.13.14.2:
|
||||||
|
|
||||||
|
- Restored right-click menus on Info and Health bars.
|
||||||
|
|
||||||
|
v1.13.14.1:
|
||||||
|
|
||||||
|
- Restored guard around array that doesn't exist on Classic clients.
|
||||||
|
|
||||||
|
v1.13.14:
|
||||||
|
|
||||||
|
- Fixed target health updating infrequently on Classic.
|
||||||
|
- Fixed compatibility with WoW 9.2.5.
|
||||||
|
- Updated TOC for all game flavors.
|
||||||
|
|
||||||
|
v1.13.13:
|
||||||
|
|
||||||
|
- 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:
|
||||||
|
|
||||||
|
- Updated TOC to 9.1
|
||||||
|
- Packaged an updated DogTag library with a fix for Classic-era `[Class]` tags.
|
||||||
|
|
||||||
|
v1.13.5:
|
||||||
|
|
||||||
|
- Classic-Burning Crusade support
|
||||||
|
- Package a community fork of LibRangeCheck with BC-Classic compatibility
|
||||||
|
- Prevented DogTag strings sometimes cutting off and showing "..." when they shouldn't if the user entered blank lines in the text box for the tags. Also changed the tooltip to not suggest pressing Enter since that could cause this problem. If you already have blank lines in your DogTag strings, you will want to remove them manually, but this fix prevents the problem from occurring in the future.
|
||||||
|
- Fixed custom buff/debuff bar tracking for targettarget units.
|
||||||
|
|
||||||
|
v1.13.4:
|
||||||
|
|
||||||
|
- Show Demon Hunter Fury top text as the raw Fury amount instead of a 0-100 scale with DogTags off. (ticket #301)
|
||||||
|
- Package newer LibDogTag to fix upgrade bug in that library.
|
||||||
|
|
||||||
|
v1.13.3:
|
||||||
|
|
||||||
|
- Activated Totems module for all classes in Shadowlands. Some class abilities spawn units that live for a specific amount of time, and the game handles these as Totems.
|
||||||
|
- Fixed an issue where mana bars could use the wrong alpha settings if the player's maximum mana was 0 (such as during the use of Soulshape).
|
||||||
|
- Update TOC for 9.0.5
|
||||||
|
|
||||||
v1.13.2:
|
v1.13.2:
|
||||||
|
|
||||||
- Fixed which version of LibDogTag was being packaged. The previous version did not have 9.0 compatibility and was generating errors (ticket #293).
|
- Fixed which version of LibDogTag was being packaged. The previous version did not have 9.0 compatibility and was generating errors (ticket #293).
|
||||||
|
@ -2,7 +2,7 @@ local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
|||||||
local ArcaneCharges = IceCore_CreateClass(IceClassPowerCounter)
|
local ArcaneCharges = IceCore_CreateClass(IceClassPowerCounter)
|
||||||
|
|
||||||
local SPELL_POWER_ARCANE_CHARGES = SPELL_POWER_ARCANE_CHARGES
|
local SPELL_POWER_ARCANE_CHARGES = SPELL_POWER_ARCANE_CHARGES
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_ARCANE_CHARGES = Enum.PowerType.ArcaneCharges
|
SPELL_POWER_ARCANE_CHARGES = Enum.PowerType.ArcaneCharges
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -61,6 +61,6 @@ end
|
|||||||
|
|
||||||
-- Load us up
|
-- Load us up
|
||||||
local _, unitClass = UnitClass("player")
|
local _, unitClass = UnitClass("player")
|
||||||
if (unitClass == "MAGE" and IceHUD.WowVer >= 70000) then
|
if (unitClass == "MAGE" and MageArcaneChargesFrame) then
|
||||||
IceHUD.ArcaneCharges = ArcaneCharges:new()
|
IceHUD.ArcaneCharges = ArcaneCharges:new()
|
||||||
end
|
end
|
||||||
|
@ -3,6 +3,11 @@ local CastBar = IceCore_CreateClass(IceCastBar)
|
|||||||
|
|
||||||
local IceHUD = _G.IceHUD
|
local IceHUD = _G.IceHUD
|
||||||
|
|
||||||
|
local CastingBarFrame = CastingBarFrame
|
||||||
|
if not CastingBarFrame then
|
||||||
|
CastingBarFrame = PlayerCastingBarFrame
|
||||||
|
end
|
||||||
|
|
||||||
CastBar.prototype.spellCastSent = nil
|
CastBar.prototype.spellCastSent = nil
|
||||||
|
|
||||||
-- Constructor --
|
-- Constructor --
|
||||||
|
@ -101,7 +101,7 @@ function IceClassPowerCounter.prototype:GetOptions()
|
|||||||
opts["displayMode"] = {
|
opts["displayMode"] = {
|
||||||
type = 'select',
|
type = 'select',
|
||||||
name = L["Display mode"],
|
name = L["Display mode"],
|
||||||
desc = L["Choose whether you'd like a graphical or numeric representation of the runes.\n\nNOTE: The color of 'Numeric' mode can be controlled by the HolyPowerNumeric color."],
|
desc = L["Choose whether you'd like a graphical or numeric representation of the runes."],
|
||||||
get = function(info)
|
get = function(info)
|
||||||
return IceHUD:GetSelectValue(info, self.moduleSettings.runeMode)
|
return IceHUD:GetSelectValue(info, self.moduleSettings.runeMode)
|
||||||
end,
|
end,
|
||||||
@ -468,6 +468,9 @@ function IceClassPowerCounter.prototype:DisplayCounter()
|
|||||||
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateRunePower")
|
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateRunePower")
|
||||||
self:RegisterEvent("UNIT_DISPLAYPOWER", "UpdateRunePower")
|
self:RegisterEvent("UNIT_DISPLAYPOWER", "UpdateRunePower")
|
||||||
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
|
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
|
||||||
|
if IceHUD.EventExistsUnitMaxPower then
|
||||||
|
self:RegisterEvent("UNIT_MAXPOWER", "UpdateRunePower")
|
||||||
|
end
|
||||||
|
|
||||||
if (self.moduleSettings.hideBlizz) then
|
if (self.moduleSettings.hideBlizz) then
|
||||||
self:HideBlizz()
|
self:HideBlizz()
|
||||||
@ -497,8 +500,22 @@ function IceClassPowerCounter.prototype:UpdateRunePower(event, arg1, arg2)
|
|||||||
if IceHUD.WowVer >= 70000 then
|
if IceHUD.WowVer >= 70000 then
|
||||||
local numMax = UnitPowerMax(self.unit, self.unitPower)
|
local numMax = UnitPowerMax(self.unit, self.unitPower)
|
||||||
if numMax ~= self.numRunes then
|
if numMax ~= self.numRunes then
|
||||||
|
local oldMax = self.numRunes
|
||||||
self.numRunes = numMax
|
self.numRunes = numMax
|
||||||
self:CreateFrame()
|
self:CreateFrame()
|
||||||
|
self:SetDisplayMode()
|
||||||
|
|
||||||
|
for i=self.numRunes+1, oldMax do
|
||||||
|
if self.frame.graphical[i] then
|
||||||
|
self.frame.graphical[i]:Hide()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for i=oldMax+1, self.numRunes do
|
||||||
|
if self:GetRuneMode() ~= "Numeric" then
|
||||||
|
self.frame.graphical[i]:Show()
|
||||||
|
end
|
||||||
|
self:HideRune(i)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -567,11 +584,7 @@ function IceClassPowerCounter.prototype:UpdateRunePower(event, arg1, arg2)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if self.moduleSettings.inactiveDisplayMode == "Darkened" then
|
self:HideRune(i)
|
||||||
self.frame.graphical[i].rune:SetVertexColor(0, 0, 0)
|
|
||||||
elseif self.moduleSettings.inactiveDisplayMode == "Hidden" then
|
|
||||||
self.frame.graphical[i]:Hide()
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -592,6 +605,19 @@ function IceClassPowerCounter.prototype:UpdateRunePower(event, arg1, arg2)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function IceClassPowerCounter.prototype:HideRune(i)
|
||||||
|
if self:GetRuneMode() == "Numeric" then
|
||||||
|
self.frame.graphical[i].Hide()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.moduleSettings.inactiveDisplayMode == "Darkened" then
|
||||||
|
self.frame.graphical[i].rune:SetVertexColor(0, 0, 0)
|
||||||
|
elseif self.moduleSettings.inactiveDisplayMode == "Hidden" then
|
||||||
|
self.frame.graphical[i]:Hide()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function IceClassPowerCounter.prototype:StartRunesFullAnimation()
|
function IceClassPowerCounter.prototype:StartRunesFullAnimation()
|
||||||
if not self.AnimUpdate then
|
if not self.AnimUpdate then
|
||||||
self.AnimUpdate = function() self:UpdateRuneAnimation() end
|
self.AnimUpdate = function() self:UpdateRuneAnimation() end
|
||||||
@ -717,6 +743,9 @@ function IceClassPowerCounter.prototype:CreateRuneFrame()
|
|||||||
for i=1, self.numRunes do
|
for i=1, self.numRunes do
|
||||||
self:CreateRune(i)
|
self:CreateRune(i)
|
||||||
end
|
end
|
||||||
|
for i=self.numRunes+1, #self.frame.graphical do
|
||||||
|
self.frame.graphical[i]:Hide()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function IceClassPowerCounter.prototype:CreateRune(i)
|
function IceClassPowerCounter.prototype:CreateRune(i)
|
||||||
@ -758,7 +787,13 @@ function IceClassPowerCounter.prototype:CreateRune(i)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function IceClassPowerCounter.prototype:SetupNewRune(rune)
|
||||||
|
end
|
||||||
|
|
||||||
function IceClassPowerCounter.prototype:SetupRuneTexture(rune)
|
function IceClassPowerCounter.prototype:SetupRuneTexture(rune)
|
||||||
|
if rune > #self.runeCoords then
|
||||||
|
self:SetupNewRune(rune)
|
||||||
|
end
|
||||||
if not rune or rune < 1 or rune > #self.runeCoords then
|
if not rune or rune < 1 or rune > #self.runeCoords then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -4,28 +4,24 @@ local ComboPoints = IceCore_CreateClass(IceElement)
|
|||||||
local IceHUD = _G.IceHUD
|
local IceHUD = _G.IceHUD
|
||||||
|
|
||||||
local AnticipationSpellId = 114015
|
local AnticipationSpellId = 114015
|
||||||
|
local AnticipationExists = GetSpellInfo(AnticipationSpellId) and IceHUD.WowVer < 70000
|
||||||
|
|
||||||
ComboPoints.prototype.comboSize = 20
|
ComboPoints.prototype.comboSize = 20
|
||||||
|
|
||||||
local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS
|
local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
|
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
|
||||||
end
|
end
|
||||||
|
|
||||||
local GetUnitChargedPowerPoints = GetUnitChargedPowerPoints
|
|
||||||
if not GetUnitChargedPowerPoints then
|
|
||||||
GetUnitChargedPowerPoints = function()
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Constructor --
|
-- Constructor --
|
||||||
function ComboPoints.prototype:init()
|
function ComboPoints.prototype:init()
|
||||||
ComboPoints.super.prototype.init(self, "ComboPoints")
|
ComboPoints.super.prototype.init(self, "ComboPoints")
|
||||||
|
|
||||||
self:SetDefaultColor("ComboPoints", 1, 1, 0)
|
self:SetDefaultColor("ComboPoints", 1, 1, 0)
|
||||||
self:SetDefaultColor("AnticipationPoints", 1, 0, 1)
|
if AnticipationExists then
|
||||||
self:SetDefaultColor("KyrianAnimaComboPoint", 0.3137254901960784, 0.3725490196078432, 1)
|
self:SetDefaultColor("AnticipationPoints", 1, 0, 1)
|
||||||
|
end
|
||||||
|
self:SetDefaultColor("ChargedComboPoint", 0.3137254901960784, 0.3725490196078432, 1)
|
||||||
self.scalingEnabled = true
|
self.scalingEnabled = true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -171,7 +167,7 @@ function ComboPoints.prototype:GetOptions()
|
|||||||
order = 33.2
|
order = 33.2
|
||||||
}
|
}
|
||||||
|
|
||||||
if IceHUD.WowVer < 70000 and not IceHUD.WowClassic then
|
if AnticipationExists then
|
||||||
opts["anticipation"] = {
|
opts["anticipation"] = {
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Show Anticipation"],
|
name = L["Show Anticipation"],
|
||||||
@ -226,25 +222,26 @@ function ComboPoints.prototype:GetOptions()
|
|||||||
order = 35
|
order = 35
|
||||||
}
|
}
|
||||||
|
|
||||||
if IceHUD.WowVer >= 90000 then
|
opts["bShowCharged"] = {
|
||||||
opts["bShowAnimaCharged"] = {
|
type = 'toggle',
|
||||||
type = 'toggle',
|
width = 'double',
|
||||||
width = 'double',
|
name = L["Show Charged points"],
|
||||||
name = L["Show Anima-charged points"],
|
desc = L["Whether or not to color a charged combo point a separate color. Set the ChargedComboPoint color to the color you would like it to be."],
|
||||||
desc = L["Whether or not to color an anima-charged combo point a separate color. Set the KyrianAnimaComboPoint color to the color you would like it to be."],
|
get = function()
|
||||||
get = function()
|
return self.moduleSettings.bShowCharged
|
||||||
return self.moduleSettings.bShowAnimaCharged
|
end,
|
||||||
end,
|
set = function(info, v)
|
||||||
set = function(info, v)
|
self.moduleSettings.bShowCharged = v
|
||||||
self.moduleSettings.bShowAnimaCharged = v
|
self:UpdateChargedComboPoints()
|
||||||
self:UpdateChargedComboPoints()
|
end,
|
||||||
end,
|
disabled = function()
|
||||||
disabled = function()
|
return not self.moduleSettings.enabled
|
||||||
return not self.moduleSettings.enabled
|
end,
|
||||||
end,
|
hidden = function()
|
||||||
order = 36
|
return not GetUnitChargedPowerPoints
|
||||||
}
|
end,
|
||||||
end
|
order = 36
|
||||||
|
}
|
||||||
|
|
||||||
return opts
|
return opts
|
||||||
end
|
end
|
||||||
@ -264,7 +261,7 @@ function ComboPoints.prototype:GetDefaultSettings()
|
|||||||
defaults["comboGap"] = 0
|
defaults["comboGap"] = 0
|
||||||
defaults["showAnticipation"] = true
|
defaults["showAnticipation"] = true
|
||||||
defaults["bShowWithNoTarget"] = true
|
defaults["bShowWithNoTarget"] = true
|
||||||
defaults["bShowAnimaCharged"] = true
|
defaults["bShowCharged"] = true
|
||||||
return defaults
|
return defaults
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -283,12 +280,12 @@ function ComboPoints.prototype:Enable(core)
|
|||||||
ComboPoints.super.prototype.Enable(self, core)
|
ComboPoints.super.prototype.Enable(self, core)
|
||||||
|
|
||||||
self:RegisterEvent("PLAYER_TARGET_CHANGED", "UpdateComboPoints")
|
self:RegisterEvent("PLAYER_TARGET_CHANGED", "UpdateComboPoints")
|
||||||
if IceHUD.WowVer >= 30000 or IceHUD.WowClassic then
|
if not IceHUD.EventExistsPlayerComboPoints then
|
||||||
if IceHUD.WowVer < 70000 and not IceHUD.WowClassic then
|
if IceHUD.EventExistsUnitComboPoints then
|
||||||
self:RegisterEvent("UNIT_COMBO_POINTS", "UpdateComboPoints")
|
self:RegisterEvent("UNIT_COMBO_POINTS", "UpdateComboPoints")
|
||||||
else
|
else
|
||||||
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateComboPoints")
|
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateComboPoints")
|
||||||
if IceHUD.WowVer < 80000 then
|
if IceHUD.EventExistsUnitMaxPower then
|
||||||
self:RegisterEvent("UNIT_MAXPOWER", "UpdateMaxComboPoints")
|
self:RegisterEvent("UNIT_MAXPOWER", "UpdateMaxComboPoints")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -296,7 +293,7 @@ function ComboPoints.prototype:Enable(core)
|
|||||||
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "UpdateComboPoints")
|
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "UpdateComboPoints")
|
||||||
self:RegisterEvent("UNIT_EXITED_VEHICLE", "UpdateComboPoints")
|
self:RegisterEvent("UNIT_EXITED_VEHICLE", "UpdateComboPoints")
|
||||||
end
|
end
|
||||||
if IceHUD.WowVer < 70000 and not IceHUD.WowClassic then
|
if AnticipationExists then
|
||||||
self:RegisterEvent("PLAYER_TALENT_UPDATE", "AddAnticipation")
|
self:RegisterEvent("PLAYER_TALENT_UPDATE", "AddAnticipation")
|
||||||
self:AddAnticipation()
|
self:AddAnticipation()
|
||||||
end
|
end
|
||||||
@ -304,7 +301,7 @@ function ComboPoints.prototype:Enable(core)
|
|||||||
self:RegisterEvent("PLAYER_COMBO_POINTS", "UpdateComboPoints")
|
self:RegisterEvent("PLAYER_COMBO_POINTS", "UpdateComboPoints")
|
||||||
end
|
end
|
||||||
|
|
||||||
if IceHUD.WowVer >= 90000 then
|
if GetUnitChargedPowerPoints then
|
||||||
self:RegisterEvent("UNIT_POWER_POINT_CHARGE", "UpdateChargedComboPoints")
|
self:RegisterEvent("UNIT_POWER_POINT_CHARGE", "UpdateChargedComboPoints")
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -327,10 +324,11 @@ function ComboPoints.prototype:UpdateMaxComboPoints(event, unit, powerType)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function ComboPoints.prototype:UpdateChargedComboPoints()
|
function ComboPoints.prototype:UpdateChargedComboPoints()
|
||||||
local chargedPowerPoints = GetUnitChargedPowerPoints("player")
|
if GetUnitChargedPowerPoints then
|
||||||
self.chargedPowerPointIndex = chargedPowerPoints and chargedPowerPoints[1]
|
self.chargedPowerPoints = GetUnitChargedPowerPoints("player")
|
||||||
self:CreateComboFrame()
|
self:CreateComboFrame()
|
||||||
self:UpdateComboPoints()
|
self:UpdateComboPoints()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- 'Protected' methods --------------------------------------------------------
|
-- 'Protected' methods --------------------------------------------------------
|
||||||
@ -442,8 +440,8 @@ 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.bShowCharged and self:IsChargedPoint(i) then
|
||||||
self.frame.graphical[i].texture:SetVertexColor(self:GetColor("KyrianAnimaComboPoint"))
|
self.frame.graphical[i].texture:SetVertexColor(self:GetColor("ChargedComboPoint"))
|
||||||
else
|
else
|
||||||
self.frame.graphical[i].texture:SetVertexColor(r, g, b)
|
self.frame.graphical[i].texture:SetVertexColor(r, g, b)
|
||||||
end
|
end
|
||||||
@ -452,7 +450,7 @@ function ComboPoints.prototype:CreateComboFrame(forceTextureUpdate)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- create Anticipation points
|
-- create Anticipation points
|
||||||
if IceHUD.WowVer < 70000 then
|
if AnticipationExists then
|
||||||
for i = 1, 5 do
|
for i = 1, 5 do
|
||||||
if (not self.frame.graphicalAnt[i]) then
|
if (not self.frame.graphicalAnt[i]) then
|
||||||
local frame = CreateFrame("Frame", nil, self.frame)
|
local frame = CreateFrame("Frame", nil, self.frame)
|
||||||
@ -491,6 +489,20 @@ function ComboPoints.prototype:CreateComboFrame(forceTextureUpdate)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function ComboPoints.prototype:IsChargedPoint(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
|
||||||
@ -499,23 +511,23 @@ function ComboPoints.prototype:UpdateComboPoints(...)
|
|||||||
local points, anticipate, _
|
local points, anticipate, _
|
||||||
if IceHUD.IceCore:IsInConfigMode() then
|
if IceHUD.IceCore:IsInConfigMode() then
|
||||||
points = self:GetMaxComboPoints()
|
points = self:GetMaxComboPoints()
|
||||||
elseif IceHUD.WowVer >= 30000 or IceHUD.WowClassic then
|
elseif UnitHasVehicleUI then
|
||||||
-- Parnic: apparently some fights have combo points while the player is in a vehicle?
|
-- Parnic: apparently some fights have combo points while the player is in a vehicle?
|
||||||
local isInVehicle = UnitHasVehicleUI and UnitHasVehicleUI("player")
|
local isInVehicle = UnitHasVehicleUI and UnitHasVehicleUI("player")
|
||||||
local checkUnit = isInVehicle and "vehicle" or "player"
|
local checkUnit = isInVehicle and "vehicle" or "player"
|
||||||
if IceHUD.WowVer >= 60000 or IceHUD.WowClassic then
|
if IceHUD.PerTargetComboPoints then
|
||||||
points = UnitPower(checkUnit, SPELL_POWER_COMBO_POINTS)
|
|
||||||
else
|
|
||||||
points = GetComboPoints(checkUnit, "target")
|
points = GetComboPoints(checkUnit, "target")
|
||||||
|
else
|
||||||
|
points = UnitPower(checkUnit, SPELL_POWER_COMBO_POINTS)
|
||||||
end
|
end
|
||||||
|
|
||||||
if IceHUD.WowVer < 70000 and IceHUD.WowVer >= 50000 then
|
if AnticipationExists then
|
||||||
_, _, _, anticipate = UnitAura("player", GetSpellInfo(AnticipationSpellId))
|
_, _, _, anticipate = UnitAura("player", GetSpellInfo(AnticipationSpellId))
|
||||||
else
|
else
|
||||||
anticipate = 0
|
anticipate = 0
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
points = GetComboPoints("target")
|
points = GetComboPoints("player", "target")
|
||||||
end
|
end
|
||||||
|
|
||||||
points = points or 0
|
points = points or 0
|
||||||
@ -577,7 +589,7 @@ do
|
|||||||
function ComboPoints.prototype:CheckAnticipation(e, unit) -- UNIT_AURA handler
|
function ComboPoints.prototype:CheckAnticipation(e, unit) -- UNIT_AURA handler
|
||||||
if UnitIsUnit(unit, "player") then
|
if UnitIsUnit(unit, "player") then
|
||||||
local _, _, _, newAntStacks
|
local _, _, _, newAntStacks
|
||||||
if IceHUD.WowVer < 80000 then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
_, _, _, newAntStacks = UnitAura("player", GetSpellInfo(AnticipationSpellId))
|
_, _, _, newAntStacks = UnitAura("player", GetSpellInfo(AnticipationSpellId))
|
||||||
else
|
else
|
||||||
_, _, newAntStacks = UnitAura("player", GetSpellInfo(AnticipationSpellId))
|
_, _, newAntStacks = UnitAura("player", GetSpellInfo(AnticipationSpellId))
|
||||||
@ -601,6 +613,6 @@ end
|
|||||||
|
|
||||||
-- Load us up
|
-- Load us up
|
||||||
local _, class = UnitClass("player")
|
local _, class = UnitClass("player")
|
||||||
if not IceHUD.WowClassic or class == "ROGUE" or class == "DRUID" then
|
if (not IceHUD.WowClassic and not IceHUD.WowClassicBC) or class == "ROGUE" or class == "DRUID" then
|
||||||
IceHUD.ComboPoints = ComboPoints:new()
|
IceHUD.ComboPoints = ComboPoints:new()
|
||||||
end
|
end
|
||||||
|
@ -2,17 +2,10 @@ local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
|||||||
local ComboPointsBar = IceCore_CreateClass(IceBarElement)
|
local ComboPointsBar = IceCore_CreateClass(IceBarElement)
|
||||||
|
|
||||||
local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS
|
local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
|
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
|
||||||
end
|
end
|
||||||
|
|
||||||
local GetUnitChargedPowerPoints = GetUnitChargedPowerPoints
|
|
||||||
if not GetUnitChargedPowerPoints then
|
|
||||||
GetUnitChargedPowerPoints = function()
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function ComboPointsBar.prototype:init()
|
function ComboPointsBar.prototype:init()
|
||||||
ComboPointsBar.super.prototype.init(self, "ComboPointsBar")
|
ComboPointsBar.super.prototype.init(self, "ComboPointsBar")
|
||||||
|
|
||||||
@ -76,8 +69,8 @@ function ComboPointsBar.prototype:Enable(core)
|
|||||||
ComboPointsBar.super.prototype.Enable(self, core)
|
ComboPointsBar.super.prototype.Enable(self, core)
|
||||||
|
|
||||||
self:RegisterEvent("PLAYER_TARGET_CHANGED", "UpdateComboPoints")
|
self:RegisterEvent("PLAYER_TARGET_CHANGED", "UpdateComboPoints")
|
||||||
if IceHUD.WowVer >= 30000 or IceHUD.WowClassic then
|
if not IceHUD.EventExistsPlayerComboPoints then
|
||||||
if IceHUD.WowVer < 70000 and not IceHUD.WowClassic then
|
if IceHUD.EventExistsUnitComboPoints then
|
||||||
self:RegisterEvent("UNIT_COMBO_POINTS", "UpdateComboPoints")
|
self:RegisterEvent("UNIT_COMBO_POINTS", "UpdateComboPoints")
|
||||||
else
|
else
|
||||||
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateComboPoints")
|
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateComboPoints")
|
||||||
@ -90,7 +83,7 @@ function ComboPointsBar.prototype:Enable(core)
|
|||||||
self:RegisterEvent("PLAYER_COMBO_POINTS", "UpdateComboPoints")
|
self:RegisterEvent("PLAYER_COMBO_POINTS", "UpdateComboPoints")
|
||||||
end
|
end
|
||||||
|
|
||||||
if IceHUD.WowVer >= 90000 then
|
if GetUnitChargedPowerPoints then
|
||||||
self:RegisterEvent("UNIT_POWER_POINT_CHARGE", "UpdateChargedComboPoints")
|
self:RegisterEvent("UNIT_POWER_POINT_CHARGE", "UpdateChargedComboPoints")
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -98,9 +91,11 @@ function ComboPointsBar.prototype:Enable(core)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function ComboPointsBar.prototype:UpdateChargedComboPoints()
|
function ComboPointsBar.prototype:UpdateChargedComboPoints()
|
||||||
local chargedPowerPoints = GetUnitChargedPowerPoints("player")
|
if GetUnitChargedPowerPoints then
|
||||||
self.chargedPowerPointIndex = chargedPowerPoints and chargedPowerPoints[1]
|
local chargedPowerPoints = GetUnitChargedPowerPoints("player")
|
||||||
self:UpdateComboPoints()
|
self.chargedPowerPointIndex = chargedPowerPoints and chargedPowerPoints[1]
|
||||||
|
self:UpdateComboPoints()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function ComboPointsBar.prototype:CreateFrame()
|
function ComboPointsBar.prototype:CreateFrame()
|
||||||
@ -119,17 +114,17 @@ function ComboPointsBar.prototype:UpdateComboPoints(...)
|
|||||||
local points
|
local points
|
||||||
if IceHUD.IceCore:IsInConfigMode() then
|
if IceHUD.IceCore:IsInConfigMode() then
|
||||||
points = UnitPowerMax("player", SPELL_POWER_COMBO_POINTS)
|
points = UnitPowerMax("player", SPELL_POWER_COMBO_POINTS)
|
||||||
elseif IceHUD.WowVer >= 30000 or IceHUD.WowClassic then
|
elseif UnitHasVehicleUI then
|
||||||
-- Parnic: apparently some fights have combo points while the player is in a vehicle?
|
-- Parnic: apparently some fights have combo points while the player is in a vehicle?
|
||||||
local isInVehicle = UnitHasVehicleUI and UnitHasVehicleUI("player")
|
local isInVehicle = UnitHasVehicleUI and UnitHasVehicleUI("player")
|
||||||
local checkUnit = isInVehicle and "vehicle" or "player"
|
local checkUnit = isInVehicle and "vehicle" or "player"
|
||||||
if IceHUD.WowVer >= 60000 or IceHUD.WowClassic then
|
if IceHUD.PerTargetComboPoints then
|
||||||
points = UnitPower(checkUnit, SPELL_POWER_COMBO_POINTS)
|
|
||||||
else
|
|
||||||
points = GetComboPoints(checkUnit, "target")
|
points = GetComboPoints(checkUnit, "target")
|
||||||
|
else
|
||||||
|
points = UnitPower(checkUnit, SPELL_POWER_COMBO_POINTS)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
points = GetComboPoints("target")
|
points = GetComboPoints("player", "target")
|
||||||
end
|
end
|
||||||
|
|
||||||
if (points == 0) then
|
if (points == 0) then
|
||||||
@ -147,7 +142,9 @@ function ComboPointsBar.prototype:UpdateComboPoints(...)
|
|||||||
end
|
end
|
||||||
|
|
||||||
self:SetBottomText1(points or "0")
|
self:SetBottomText1(points or "0")
|
||||||
self:SetBottomText2(self.chargedPowerPointIndex)
|
if self.chargedPowerPointIndex then
|
||||||
|
self:SetBottomText2(self.chargedPowerPointIndex)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function ComboPointsBar.prototype:Update()
|
function ComboPointsBar.prototype:Update()
|
||||||
@ -155,6 +152,6 @@ function ComboPointsBar.prototype:Update()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local _, class = UnitClass("player")
|
local _, class = UnitClass("player")
|
||||||
if not IceHUD.WowClassic or class == "ROGUE" or class == "DRUID" then
|
if (not IceHUD.WowClassic and not IceHUD.WowClassicBC) or class == "ROGUE" or class == "DRUID" then
|
||||||
IceHUD.ComboPointsBar = ComboPointsBar:new()
|
IceHUD.ComboPointsBar = ComboPointsBar:new()
|
||||||
end
|
end
|
||||||
|
@ -19,6 +19,7 @@ IceCustomBar.prototype.bIsAura = false
|
|||||||
function IceCustomBar.prototype:init()
|
function IceCustomBar.prototype:init()
|
||||||
IceCustomBar.super.prototype.init(self, "MyCustomBar", "player")
|
IceCustomBar.super.prototype.init(self, "MyCustomBar", "player")
|
||||||
self.textColorOverride = true
|
self.textColorOverride = true
|
||||||
|
self.CustomBarUpdateFunc = function() self:UpdateCustomBar(self.unit, true) end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- 'Public' methods -----------------------------------------------------------
|
-- 'Public' methods -----------------------------------------------------------
|
||||||
@ -36,7 +37,7 @@ function IceCustomBar.prototype:Enable(core)
|
|||||||
|
|
||||||
self:RegisterEvent("UNIT_AURA", "UpdateCustomBarEvent")
|
self:RegisterEvent("UNIT_AURA", "UpdateCustomBarEvent")
|
||||||
self:RegisterEvent("UNIT_PET", "UpdateCustomBarEvent")
|
self:RegisterEvent("UNIT_PET", "UpdateCustomBarEvent")
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.EventExistsPlayerPetChanged then
|
||||||
self:RegisterEvent("PLAYER_PET_CHANGED", "UpdateCustomBarEvent")
|
self:RegisterEvent("PLAYER_PET_CHANGED", "UpdateCustomBarEvent")
|
||||||
end
|
end
|
||||||
if FocusUnit then
|
if FocusUnit then
|
||||||
@ -81,7 +82,7 @@ function IceCustomBar.prototype:Disable(core)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function IceCustomBar.prototype:GetUnitToTrack()
|
function IceCustomBar.prototype:GetUnitToTrack()
|
||||||
if IceHUD.WowClassic then
|
if not IceHUD.CanTrackOtherUnitBuffs then
|
||||||
return "player"
|
return "player"
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -107,11 +108,7 @@ end
|
|||||||
|
|
||||||
function IceCustomBar.prototype:ConditionalSubscribe()
|
function IceCustomBar.prototype:ConditionalSubscribe()
|
||||||
if self:ShouldAlwaysSubscribe() then
|
if self:ShouldAlwaysSubscribe() then
|
||||||
if not IceHUD.IceCore:IsUpdateSubscribed(self) then
|
if not IceHUD.IceCore:IsUpdateSubscribed(self, self.CustomBarUpdateFunc) then
|
||||||
if not self.CustomBarUpdateFunc then
|
|
||||||
self.CustomBarUpdateFunc = function() self:UpdateCustomBar() end
|
|
||||||
end
|
|
||||||
|
|
||||||
self.handlesOwnUpdates = true
|
self.handlesOwnUpdates = true
|
||||||
IceHUD.IceCore:RequestUpdates(self, self.CustomBarUpdateFunc)
|
IceHUD.IceCore:RequestUpdates(self, self.CustomBarUpdateFunc)
|
||||||
end
|
end
|
||||||
@ -122,7 +119,7 @@ function IceCustomBar.prototype:ConditionalSubscribe()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function IceCustomBar.prototype:ShouldAlwaysSubscribe()
|
function IceCustomBar.prototype:ShouldAlwaysSubscribe()
|
||||||
return self.unit == "focustarget" or self.unit == "pettarget"
|
return self.unit == "focustarget" or self.unit == "pettarget" or self.unit == "targettarget"
|
||||||
end
|
end
|
||||||
|
|
||||||
function IceCustomBar.prototype:TargetChanged()
|
function IceCustomBar.prototype:TargetChanged()
|
||||||
@ -174,7 +171,7 @@ function IceCustomBar.prototype:CreateBar()
|
|||||||
IceCustomBar.super.prototype.CreateBar(self)
|
IceCustomBar.super.prototype.CreateBar(self)
|
||||||
|
|
||||||
if not self.barFrame.icon then
|
if not self.barFrame.icon then
|
||||||
self.barFrame.icon = self.masterFrame:CreateTexture(nil, "LOW")
|
self.barFrame.icon = self.masterFrame:CreateTexture(nil, "BACKGROUND")
|
||||||
-- this cuts off the border around the buff icon
|
-- this cuts off the border around the buff icon
|
||||||
self.barFrame.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)
|
self.barFrame.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)
|
||||||
self.barFrame.icon:SetDrawLayer("OVERLAY")
|
self.barFrame.icon:SetDrawLayer("OVERLAY")
|
||||||
@ -262,7 +259,7 @@ function IceCustomBar.prototype:GetOptions()
|
|||||||
order = 30.3,
|
order = 30.3,
|
||||||
}
|
}
|
||||||
|
|
||||||
if not IceHUD.WowClassic then
|
if IceHUD.CanTrackOtherUnitBuffs then
|
||||||
opts["unitToTrack"] = {
|
opts["unitToTrack"] = {
|
||||||
type = 'select',
|
type = 'select',
|
||||||
values = validUnits,
|
values = validUnits,
|
||||||
@ -673,7 +670,7 @@ function IceCustomBar.prototype:GetAuraDuration(unitName, buffName)
|
|||||||
local isBuff = self.moduleSettings.buffOrDebuff == "buff" and true or false
|
local isBuff = self.moduleSettings.buffOrDebuff == "buff" and true or false
|
||||||
local buffFilter = (isBuff and "HELPFUL" or "HARMFUL") .. (self.moduleSettings.trackOnlyMine and "|PLAYER" or "")
|
local buffFilter = (isBuff and "HELPFUL" or "HARMFUL") .. (self.moduleSettings.trackOnlyMine and "|PLAYER" or "")
|
||||||
local buff, rank, texture, count, type, duration, endTime, unitCaster, _, _, spellId
|
local buff, rank, texture, count, type, duration, endTime, unitCaster, _, _, spellId
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
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 = UnitAura(unitName, i, buffFilter)
|
||||||
else
|
else
|
||||||
buff, texture, count, type, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, buffFilter)
|
buff, texture, count, type, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, buffFilter)
|
||||||
@ -703,7 +700,7 @@ function IceCustomBar.prototype:GetAuraDuration(unitName, buffName)
|
|||||||
|
|
||||||
i = i + 1;
|
i = i + 1;
|
||||||
|
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
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 = UnitAura(unitName, i, buffFilter)
|
||||||
else
|
else
|
||||||
buff, texture, count, type, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, buffFilter)
|
buff, texture, count, type, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, buffFilter)
|
||||||
@ -755,7 +752,7 @@ function IceCustomBar.prototype:UpdateCustomBar(unit, fromUpdate)
|
|||||||
local auraIcon = nil
|
local auraIcon = nil
|
||||||
local endTime = 0
|
local endTime = 0
|
||||||
|
|
||||||
if not fromUpdate then
|
--if not fromUpdate then
|
||||||
if tonumber(self.moduleSettings.buffToTrack) == nil then
|
if tonumber(self.moduleSettings.buffToTrack) == nil then
|
||||||
self.auraDuration, remaining, self.auraBuffCount, auraIcon, endTime =
|
self.auraDuration, remaining, self.auraBuffCount, auraIcon, endTime =
|
||||||
self:GetAuraDuration(self.unit, self.moduleSettings.buffToTrack)
|
self:GetAuraDuration(self.unit, self.moduleSettings.buffToTrack)
|
||||||
@ -790,18 +787,14 @@ function IceCustomBar.prototype:UpdateCustomBar(unit, fromUpdate)
|
|||||||
else
|
else
|
||||||
self.barFrame.icon:Hide()
|
self.barFrame.icon:Hide()
|
||||||
end
|
end
|
||||||
end
|
--end
|
||||||
|
|
||||||
self.auraBuffCount = self.auraBuffCount or 0
|
self.auraBuffCount = self.auraBuffCount or 0
|
||||||
|
|
||||||
if self.auraEndTime ~= nil and (self.auraEndTime == 0 or self.auraEndTime >= now) and (not self.moduleSettings.minCount or self.auraBuffCount >= self.moduleSettings.minCount) then
|
if self.auraEndTime ~= nil and (self.auraEndTime == 0 or self.auraEndTime >= now) and (not self.moduleSettings.minCount or self.auraBuffCount >= self.moduleSettings.minCount) then
|
||||||
if not self:ShouldAlwaysSubscribe() and not fromUpdate and not IceHUD.IceCore:IsUpdateSubscribed(self) then
|
if not self:ShouldAlwaysSubscribe() and not fromUpdate and not IceHUD.IceCore:IsUpdateSubscribed(self, self.CustomBarUpdateFunc) then
|
||||||
if not self.UpdateCustomBarFunc then
|
|
||||||
self.UpdateCustomBarFunc = function() self:UpdateCustomBar(self.unit, true) end
|
|
||||||
end
|
|
||||||
|
|
||||||
self.handlesOwnUpdates = true
|
self.handlesOwnUpdates = true
|
||||||
IceHUD.IceCore:RequestUpdates(self, self.UpdateCustomBarFunc)
|
IceHUD.IceCore:RequestUpdates(self, self.CustomBarUpdateFunc)
|
||||||
end
|
end
|
||||||
|
|
||||||
self:Show(true)
|
self:Show(true)
|
||||||
|
@ -131,7 +131,7 @@ function IceCustomCDBar.prototype:CreateBar()
|
|||||||
IceCustomCDBar.super.prototype.CreateBar(self)
|
IceCustomCDBar.super.prototype.CreateBar(self)
|
||||||
|
|
||||||
if not self.barFrame.icon then
|
if not self.barFrame.icon then
|
||||||
self.barFrame.icon = self.masterFrame:CreateTexture(nil, "LOW")
|
self.barFrame.icon = self.masterFrame:CreateTexture(nil, "BACKGROUND")
|
||||||
-- this cuts off the border around the buff icon
|
-- this cuts off the border around the buff icon
|
||||||
self.barFrame.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)
|
self.barFrame.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)
|
||||||
self.barFrame.icon:SetDrawLayer("OVERLAY")
|
self.barFrame.icon:SetDrawLayer("OVERLAY")
|
||||||
|
@ -277,7 +277,7 @@ function IceCustomCounterBar.prototype:CreateFrame()
|
|||||||
IceCustomCounterBar.super.prototype.CreateFrame(self)
|
IceCustomCounterBar.super.prototype.CreateFrame(self)
|
||||||
|
|
||||||
if not self.barFrame.icon then
|
if not self.barFrame.icon then
|
||||||
self.barFrame.icon = self.masterFrame:CreateTexture(nil, "LOW")
|
self.barFrame.icon = self.masterFrame:CreateTexture(nil, "BACKGROUND")
|
||||||
self.barFrame.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)
|
self.barFrame.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)
|
||||||
self.barFrame.icon:SetDrawLayer("OVERLAY")
|
self.barFrame.icon:SetDrawLayer("OVERLAY")
|
||||||
self.barFrame.icon:Hide()
|
self.barFrame.icon:Hide()
|
||||||
|
@ -119,7 +119,7 @@ function EclipseBar.prototype:UpdateShown()
|
|||||||
|
|
||||||
if form == MOONKIN_FORM or not form then
|
if form == MOONKIN_FORM or not form then
|
||||||
local PrimaryTalentTree = 0
|
local PrimaryTalentTree = 0
|
||||||
if IceHUD.WowVer >= 50000 then
|
if GetSpecialization then
|
||||||
PrimaryTalentTree = GetSpecialization()
|
PrimaryTalentTree = GetSpecialization()
|
||||||
else
|
else
|
||||||
PrimaryTalentTree = GetPrimaryTalentTree()
|
PrimaryTalentTree = GetPrimaryTalentTree()
|
||||||
@ -190,6 +190,6 @@ function EclipseBar.prototype:MyOnUpdate()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local _, unitClass = UnitClass("player")
|
local _, unitClass = UnitClass("player")
|
||||||
if (unitClass == "DRUID" and IceHUD.WowVer >= 40000 and IceHUD.WowVer < 70000) then
|
if (unitClass == "DRUID" and GetEclipseDirection) then
|
||||||
IceHUD.EclipseBar = EclipseBar:new()
|
IceHUD.EclipseBar = EclipseBar:new()
|
||||||
end
|
end
|
||||||
|
@ -4,7 +4,7 @@ local FocusMana = IceCore_CreateClass(IceUnitBar)
|
|||||||
local SPELL_POWER_RAGE = SPELL_POWER_RAGE
|
local SPELL_POWER_RAGE = SPELL_POWER_RAGE
|
||||||
local SPELL_POWER_FOCUS = SPELL_POWER_FOCUS
|
local SPELL_POWER_FOCUS = SPELL_POWER_FOCUS
|
||||||
local SPELL_POWER_ENERGY = SPELL_POWER_ENERGY
|
local SPELL_POWER_ENERGY = SPELL_POWER_ENERGY
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_RAGE = Enum.PowerType.Rage
|
SPELL_POWER_RAGE = Enum.PowerType.Rage
|
||||||
SPELL_POWER_FOCUS = Enum.PowerType.Focus
|
SPELL_POWER_FOCUS = Enum.PowerType.Focus
|
||||||
SPELL_POWER_ENERGY = Enum.PowerType.Energy
|
SPELL_POWER_ENERGY = Enum.PowerType.Energy
|
||||||
@ -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
|
||||||
|
@ -165,7 +165,7 @@ function GlobalCoolDown.prototype:GetSpellCastTime(spell)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local spellname, castTime, _
|
local spellname, castTime, _
|
||||||
if IceHUD.WowVer < 60000 then
|
if IceHUD.GetSpellInfoReturnsFunnel then
|
||||||
spellName, _, _, _, _, _, castTime = GetSpellInfo(spell)
|
spellName, _, _, _, _, _, castTime = GetSpellInfo(spell)
|
||||||
else
|
else
|
||||||
spellName, _, _, castTime = GetSpellInfo(spell)
|
spellName, _, _, castTime = GetSpellInfo(spell)
|
||||||
@ -267,30 +267,35 @@ function GlobalCoolDown.prototype:CreateLagBar()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function GlobalCoolDown.prototype:GetSpellId()
|
function GlobalCoolDown.prototype:GetSpellId()
|
||||||
return 61304
|
if GetSpellInfo(61304) then
|
||||||
--[[
|
return 61304
|
||||||
local defaultSpells
|
else
|
||||||
|
local defaultSpells
|
||||||
|
|
||||||
defaultSpells = {
|
defaultSpells = {
|
||||||
ROGUE=1752, -- sinister strike
|
ROGUE=1752, -- sinister strike
|
||||||
PRIEST=585, -- smite
|
PRIEST=585, -- smite
|
||||||
DRUID=5176, -- wrath
|
DRUID=5176, -- wrath
|
||||||
WARRIOR=34428, -- victory rush (not available until 5, sadly)
|
WARRIOR=34428, -- victory rush (not available until 5, sadly)
|
||||||
MAGE=44614, -- frostfire bolt
|
MAGE=44614, -- frostfire bolt
|
||||||
WARLOCK=686, -- shadow bolt
|
WARLOCK=686, -- shadow bolt
|
||||||
PALADIN=105361, -- seal of command (level 3)
|
PALADIN=105361, -- seal of command (level 3)
|
||||||
SHAMAN=403, -- lightning bolt
|
SHAMAN=403, -- lightning bolt
|
||||||
HUNTER=3044, -- arcane shot
|
HUNTER=3044, -- arcane shot
|
||||||
DEATHKNIGHT=47541, -- death coil
|
DEATHKNIGHT=47541, -- death coil
|
||||||
MONK=100780, -- jab
|
MONK=100780, -- jab
|
||||||
}
|
}
|
||||||
|
|
||||||
local _, unitClass = UnitClass("player")
|
if not GetSpellInfo(defaultSpells["PALADIN"]) then
|
||||||
return defaultSpells[unitClass]
|
defaultSpells["PALADIN"] = 635
|
||||||
]]
|
end
|
||||||
|
|
||||||
|
local _, unitClass = UnitClass("player")
|
||||||
|
return defaultSpells[unitClass]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Load us up
|
-- Load us up
|
||||||
if not IceHUD.WowClassic then
|
if IceHUD.CanTrackGCD then
|
||||||
IceHUD.GlobalCoolDown = GlobalCoolDown:new()
|
IceHUD.GlobalCoolDown = GlobalCoolDown:new()
|
||||||
end
|
end
|
||||||
|
@ -2,7 +2,10 @@ local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
|||||||
local HarmonyPower = IceCore_CreateClass(IceClassPowerCounter)
|
local HarmonyPower = IceCore_CreateClass(IceClassPowerCounter)
|
||||||
|
|
||||||
local SPELL_POWER_CHI = SPELL_POWER_CHI
|
local SPELL_POWER_CHI = SPELL_POWER_CHI
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if not SPELL_POWER_CHI then
|
||||||
|
SPELL_POWER_CHI = SPELL_POWER_LIGHT_FORCE
|
||||||
|
end
|
||||||
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_CHI = Enum.PowerType.Chi
|
SPELL_POWER_CHI = Enum.PowerType.Chi
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -23,11 +26,7 @@ function HarmonyPower.prototype:init()
|
|||||||
}
|
}
|
||||||
self.numRunes = 4
|
self.numRunes = 4
|
||||||
self.numericColor = "ChiNumeric"
|
self.numericColor = "ChiNumeric"
|
||||||
if IceHUD.WowVer >= 50100 then
|
self.unitPower = SPELL_POWER_CHI
|
||||||
self.unitPower = SPELL_POWER_CHI
|
|
||||||
else
|
|
||||||
self.unitPower = SPELL_POWER_LIGHT_FORCE
|
|
||||||
end
|
|
||||||
if IceHUD.WowVer >= 70000 then
|
if IceHUD.WowVer >= 70000 then
|
||||||
self.requiredSpec = SPEC_MONK_WINDWALKER
|
self.requiredSpec = SPEC_MONK_WINDWALKER
|
||||||
end
|
end
|
||||||
@ -117,6 +116,6 @@ end
|
|||||||
|
|
||||||
-- Load us up
|
-- Load us up
|
||||||
local _, unitClass = UnitClass("player")
|
local _, unitClass = UnitClass("player")
|
||||||
if (unitClass == "MONK" and IceHUD.WowVer >= 50000) then
|
if unitClass == "MONK" then
|
||||||
IceHUD.HarmonyPower = HarmonyPower:new()
|
IceHUD.HarmonyPower = HarmonyPower:new()
|
||||||
end
|
end
|
||||||
|
@ -2,7 +2,7 @@ local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
|||||||
local HolyPower = IceCore_CreateClass(IceClassPowerCounter)
|
local HolyPower = IceCore_CreateClass(IceClassPowerCounter)
|
||||||
|
|
||||||
local SPELL_POWER_HOLY_POWER = SPELL_POWER_HOLY_POWER
|
local SPELL_POWER_HOLY_POWER = SPELL_POWER_HOLY_POWER
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_HOLY_POWER = Enum.PowerType.HolyPower
|
SPELL_POWER_HOLY_POWER = Enum.PowerType.HolyPower
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ function HolyPower.prototype:init()
|
|||||||
self.bTreatEmptyAsFull = true
|
self.bTreatEmptyAsFull = true
|
||||||
self.unit = "player"
|
self.unit = "player"
|
||||||
self.numRunes = 5
|
self.numRunes = 5
|
||||||
if IceHUD.WowVer >= 50000 then
|
if HOLY_POWER_FULL then
|
||||||
self.numConsideredFull = HOLY_POWER_FULL
|
self.numConsideredFull = HOLY_POWER_FULL
|
||||||
else
|
else
|
||||||
self.numConsideredFull = 3
|
self.numConsideredFull = 3
|
||||||
@ -134,7 +134,7 @@ end
|
|||||||
|
|
||||||
-- Load us up
|
-- Load us up
|
||||||
local _, unitClass = UnitClass("player")
|
local _, unitClass = UnitClass("player")
|
||||||
if (unitClass == "PALADIN" and IceHUD.WowVer >= 40000) then
|
if (unitClass == "PALADIN" and (PaladinPowerBar or PaladinPowerBarFrame)) then
|
||||||
IceHUD.HolyPower = HolyPower:new()
|
IceHUD.HolyPower = HolyPower:new()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -42,14 +42,14 @@ function PetHealth.prototype:Enable(core)
|
|||||||
PetHealth.super.prototype.Enable(self, core)
|
PetHealth.super.prototype.Enable(self, core)
|
||||||
|
|
||||||
self:RegisterEvent("PET_UI_UPDATE", "CheckPet");
|
self:RegisterEvent("PET_UI_UPDATE", "CheckPet");
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.EventExistsPlayerPetChanged then
|
||||||
self:RegisterEvent("PLAYER_PET_CHANGED", "CheckPet");
|
self:RegisterEvent("PLAYER_PET_CHANGED", "CheckPet");
|
||||||
end
|
end
|
||||||
self:RegisterEvent("PET_BAR_UPDATE_USABLE", "CheckPet");
|
self:RegisterEvent("PET_BAR_UPDATE_USABLE", "CheckPet");
|
||||||
self:RegisterEvent("UNIT_PET", "CheckPet");
|
self:RegisterEvent("UNIT_PET", "CheckPet");
|
||||||
|
|
||||||
self:RegisterEvent("UNIT_HEALTH", "UpdateEvent")
|
self:RegisterEvent("UNIT_HEALTH", "UpdateEvent")
|
||||||
if IceHUD.WowVer < 90000 then
|
if IceHUD.EventExistsUnitHealthFrequent then
|
||||||
self:RegisterEvent("UNIT_HEALTH_FREQUENT", "UpdateEvent")
|
self:RegisterEvent("UNIT_HEALTH_FREQUENT", "UpdateEvent")
|
||||||
end
|
end
|
||||||
self:RegisterEvent("UNIT_MAXHEALTH", "UpdateEvent")
|
self:RegisterEvent("UNIT_MAXHEALTH", "UpdateEvent")
|
||||||
|
@ -5,7 +5,7 @@ local SPELL_POWER_RAGE = SPELL_POWER_RAGE
|
|||||||
local SPELL_POWER_FOCUS = SPELL_POWER_FOCUS
|
local SPELL_POWER_FOCUS = SPELL_POWER_FOCUS
|
||||||
local SPELL_POWER_ENERGY = SPELL_POWER_ENERGY
|
local SPELL_POWER_ENERGY = SPELL_POWER_ENERGY
|
||||||
local SPELL_POWER_RUNIC_POWER = SPELL_POWER_RUNIC_POWER
|
local SPELL_POWER_RUNIC_POWER = SPELL_POWER_RUNIC_POWER
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_RAGE = Enum.PowerType.Rage
|
SPELL_POWER_RAGE = Enum.PowerType.Rage
|
||||||
SPELL_POWER_FOCUS = Enum.PowerType.Focus
|
SPELL_POWER_FOCUS = Enum.PowerType.Focus
|
||||||
SPELL_POWER_ENERGY = Enum.PowerType.Energy
|
SPELL_POWER_ENERGY = Enum.PowerType.Energy
|
||||||
@ -62,15 +62,15 @@ function PetMana.prototype:Enable(core)
|
|||||||
PetMana.super.prototype.Enable(self, core)
|
PetMana.super.prototype.Enable(self, core)
|
||||||
|
|
||||||
self:RegisterEvent("PET_UI_UPDATE", "CheckPet")
|
self:RegisterEvent("PET_UI_UPDATE", "CheckPet")
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.EventExistsPlayerPetChanged then
|
||||||
self:RegisterEvent("PLAYER_PET_CHANGED", "CheckPet")
|
self:RegisterEvent("PLAYER_PET_CHANGED", "CheckPet")
|
||||||
end
|
end
|
||||||
self:RegisterEvent(IceHUD.WowVer < 80000 and not IceHUD.WowClassic and "PET_BAR_CHANGED" or "PET_BAR_UPDATE_USABLE", "CheckPet")
|
self:RegisterEvent(IceHUD.EventExistsPetBarChanged and "PET_BAR_CHANGED" or "PET_BAR_UPDATE_USABLE", "CheckPet")
|
||||||
self:RegisterEvent("UNIT_PET", "CheckPet")
|
self:RegisterEvent("UNIT_PET", "CheckPet")
|
||||||
|
|
||||||
if IceHUD.WowVer >= 40000 or IceHUD.WowClassic then
|
if not IceHUD.PerPowerEventsExist then
|
||||||
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateEvent")
|
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateEvent")
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.EventExistsUnitMaxPower then
|
||||||
self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent")
|
self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent")
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
@ -8,7 +8,7 @@ local _, unitClass = UnitClass("player")
|
|||||||
|
|
||||||
local SPELL_POWER_MANA = SPELL_POWER_MANA
|
local SPELL_POWER_MANA = SPELL_POWER_MANA
|
||||||
local SPELL_POWER_INSANITY = SPELL_POWER_INSANITY
|
local SPELL_POWER_INSANITY = SPELL_POWER_INSANITY
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_MANA = Enum.PowerType.Mana
|
SPELL_POWER_MANA = Enum.PowerType.Mana
|
||||||
SPELL_POWER_INSANITY = Enum.PowerType.Insanity
|
SPELL_POWER_INSANITY = Enum.PowerType.Insanity
|
||||||
end
|
end
|
||||||
|
@ -29,7 +29,7 @@ function IceHUDPlayerAlternatePower.prototype:Enable(core)
|
|||||||
IceHUDPlayerAlternatePower.super.prototype.Enable(self, core)
|
IceHUDPlayerAlternatePower.super.prototype.Enable(self, core)
|
||||||
|
|
||||||
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
|
||||||
self:RegisterEvent("UNIT_POWER_BAR_SHOW", "PowerBarShow")
|
self:RegisterEvent("UNIT_POWER_BAR_SHOW", "PowerBarShow")
|
||||||
|
@ -10,6 +10,7 @@ PlayerHealth.prototype.absorbAmount = 0
|
|||||||
local configMode = false
|
local configMode = false
|
||||||
local HealComm
|
local HealComm
|
||||||
local incomingHealAmt = 0
|
local incomingHealAmt = 0
|
||||||
|
local groupEvent = IceHUD.EventExistsGroupRosterUpdate and "GROUP_ROSTER_UPDATE" or "PARTY_MEMBERS_CHANGED"
|
||||||
|
|
||||||
-- Constructor --
|
-- Constructor --
|
||||||
function PlayerHealth.prototype:init()
|
function PlayerHealth.prototype:init()
|
||||||
@ -68,7 +69,7 @@ function PlayerHealth.prototype:Enable(core)
|
|||||||
PlayerHealth.super.prototype.Enable(self, core)
|
PlayerHealth.super.prototype.Enable(self, core)
|
||||||
|
|
||||||
self:RegisterEvent("UNIT_HEALTH", "UpdateEvent")
|
self:RegisterEvent("UNIT_HEALTH", "UpdateEvent")
|
||||||
if IceHUD.WowVer < 90000 then
|
if IceHUD.EventExistsUnitHealthFrequent then
|
||||||
self:RegisterEvent("UNIT_HEALTH_FREQUENT", "UpdateEvent")
|
self:RegisterEvent("UNIT_HEALTH_FREQUENT", "UpdateEvent")
|
||||||
end
|
end
|
||||||
self:RegisterEvent("UNIT_MAXHEALTH", "UpdateEvent")
|
self:RegisterEvent("UNIT_MAXHEALTH", "UpdateEvent")
|
||||||
@ -81,11 +82,7 @@ function PlayerHealth.prototype:Enable(core)
|
|||||||
self:RegisterEvent("PLAYER_REGEN_DISABLED", "CheckCombat")
|
self:RegisterEvent("PLAYER_REGEN_DISABLED", "CheckCombat")
|
||||||
|
|
||||||
self:RegisterEvent("PARTY_LEADER_CHANGED", "CheckLeader")
|
self:RegisterEvent("PARTY_LEADER_CHANGED", "CheckLeader")
|
||||||
if IceHUD.WowVer >= 50000 or IceHUD.WowClassic then
|
self:RegisterEvent(groupEvent, "CheckLeader")
|
||||||
self:RegisterEvent("GROUP_ROSTER_UPDATE", "CheckLeader")
|
|
||||||
else
|
|
||||||
self:RegisterEvent("PARTY_MEMBERS_CHANGED", "CheckLeader")
|
|
||||||
end
|
|
||||||
if GetLFGProposal then
|
if GetLFGProposal then
|
||||||
self:RegisterEvent("LFG_PROPOSAL_UPDATE", "CheckPartyRole")
|
self:RegisterEvent("LFG_PROPOSAL_UPDATE", "CheckPartyRole")
|
||||||
self:RegisterEvent("LFG_PROPOSAL_FAILED", "CheckPartyRole")
|
self:RegisterEvent("LFG_PROPOSAL_FAILED", "CheckPartyRole")
|
||||||
@ -105,7 +102,7 @@ function PlayerHealth.prototype:Enable(core)
|
|||||||
self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle")
|
self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle")
|
||||||
end
|
end
|
||||||
|
|
||||||
if IceHUD.WowVer < 40000 then
|
if not IceHUD.SupportsHealPrediction then
|
||||||
HealComm = LibStub("LibHealComm-4.0", true)
|
HealComm = LibStub("LibHealComm-4.0", true)
|
||||||
if HealComm then
|
if HealComm then
|
||||||
HealComm.RegisterCallback(self, "HealComm_HealStarted", function(event, casterGUID, spellID, spellType, endTime, ...) self:HealComm_HealEvent(event, casterGUID, spellID, spellType, endTime, ...) end)
|
HealComm.RegisterCallback(self, "HealComm_HealStarted", function(event, casterGUID, spellID, spellType, endTime, ...) self:HealComm_HealEvent(event, casterGUID, spellID, spellType, endTime, ...) end)
|
||||||
@ -169,7 +166,7 @@ function PlayerHealth.prototype:HealComm_ModifierChanged(event, guid)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function PlayerHealth.prototype:IncomingHealPrediction(event, unit)
|
function PlayerHealth.prototype:IncomingHealPrediction(event, unit)
|
||||||
if IceHUD.WowVer >= 40000 then
|
if IceHUD.SupportsHealPrediction then
|
||||||
if unit and unit ~= self.unit then
|
if unit and unit ~= self.unit then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -321,7 +318,7 @@ function PlayerHealth.prototype:GetOptions()
|
|||||||
self:Update()
|
self:Update()
|
||||||
end,
|
end,
|
||||||
disabled = function()
|
disabled = function()
|
||||||
return not (self.moduleSettings.enabled and (IceHUD.WowVer >= 40000 or HealComm))
|
return not (self.moduleSettings.enabled and (IceHUD.SupportsHealPrediction or HealComm))
|
||||||
end,
|
end,
|
||||||
order = 43.6
|
order = 43.6
|
||||||
}
|
}
|
||||||
@ -367,7 +364,7 @@ function PlayerHealth.prototype:GetOptions()
|
|||||||
self:Update()
|
self:Update()
|
||||||
end,
|
end,
|
||||||
disabled = function()
|
disabled = function()
|
||||||
return not (self.moduleSettings.enabled and IceHUD.WowVer >= 70000)
|
return not (self.moduleSettings.enabled and UnitGetTotalAbsorbs)
|
||||||
end,
|
end,
|
||||||
order = 43.8
|
order = 43.8
|
||||||
}
|
}
|
||||||
@ -942,7 +939,7 @@ function PlayerHealth.prototype:CreateHealBar()
|
|||||||
|
|
||||||
self:UpdateBar(1, "undef")
|
self:UpdateBar(1, "undef")
|
||||||
|
|
||||||
if not self.moduleSettings.showIncomingHeals or (IceHUD.WowVer < 40000 and not HealComm) then
|
if not self.moduleSettings.showIncomingHeals or (not IceHUD.SupportsHealPrediction and not HealComm) then
|
||||||
self.healFrame.bar:Hide()
|
self.healFrame.bar:Hide()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -954,7 +951,7 @@ function PlayerHealth.prototype:CreateAbsorbBar()
|
|||||||
|
|
||||||
self:UpdateBar(1, "undef")
|
self:UpdateBar(1, "undef")
|
||||||
|
|
||||||
if not self.moduleSettings.showAbsorbs or UnitGetTotalAbsorbs == nil then
|
if not self.moduleSettings.showAbsorbs or not UnitGetTotalAbsorbs then
|
||||||
self.absorbFrame.bar:Hide()
|
self.absorbFrame.bar:Hide()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -1094,7 +1091,7 @@ function PlayerHealth.prototype:CheckPartyRole()
|
|||||||
proposalExists, id, typeID, subtypeID, name, texture, role, hasResponded, totalEncounters, completedEncounters, numMembers, isleader = GetLFGProposal()
|
proposalExists, id, typeID, subtypeID, name, texture, role, hasResponded, totalEncounters, completedEncounters, numMembers, isleader = GetLFGProposal()
|
||||||
|
|
||||||
local p = self.unit
|
local p = self.unit
|
||||||
if IceHUD.WowVer < 40000 then
|
if not IceHUD.UnitGroupRolesReturnsRoleString then
|
||||||
isTank, isHeal, isDPS = UnitGroupRolesAssigned(p)
|
isTank, isHeal, isDPS = UnitGroupRolesAssigned(p)
|
||||||
else
|
else
|
||||||
local grpRole = UnitGroupRolesAssigned(p)
|
local grpRole = UnitGroupRolesAssigned(p)
|
||||||
@ -1407,15 +1404,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()
|
||||||
@ -1424,37 +1424,34 @@ function PlayerHealth.prototype:HideBlizzardParty()
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Both Pitbull 4 and Xperl use these exact code, so we use it too.
|
if PartyFrame then
|
||||||
for i = 1, MAX_PARTY_MEMBERS do
|
PartyFrame:Hide()
|
||||||
local party = _G['PartyMemberFrame'..i]
|
PartyFrame:UnregisterEvent(groupEvent)
|
||||||
party:UnregisterAllEvents()
|
else
|
||||||
party:Hide()
|
for i = 1, MAX_PARTY_MEMBERS do
|
||||||
party.Show = function() end
|
local frame = _G["PartyMemberFrame" .. i]
|
||||||
|
frame:SetAttribute("statehidden", true)
|
||||||
|
hook_frames(frame)
|
||||||
|
end
|
||||||
|
UIParent:UnregisterEvent(groupEvent)
|
||||||
end
|
end
|
||||||
|
|
||||||
UIParent:UnregisterEvent('RAID_ROSTER_UPDATE')
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function PlayerHealth.prototype:ShowBlizzardParty()
|
function PlayerHealth.prototype:ShowBlizzardParty()
|
||||||
-- Both Pitbull 4 and Xperl use these exact code, so we use it too.
|
if PartyFrame then
|
||||||
for i = 1, MAX_PARTY_MEMBERS do
|
PartyFrame:Show()
|
||||||
local frame = _G["PartyMemberFrame"..i]
|
PartyFrame:Layout()
|
||||||
if frame then
|
PartyFrame:RegisterEvent(groupEvent)
|
||||||
frame.Show = nil
|
else
|
||||||
frame:GetScript("OnLoad")(frame)
|
for i = 1, MAX_PARTY_MEMBERS do
|
||||||
if IceHUD.WowVer >= 50000 then
|
local frame = _G["PartyMemberFrame" .. i]
|
||||||
frame:GetScript("OnEvent")(frame, "GROUP_ROSTER_UPDATE")
|
frame:SetAttribute("statehidden", nil)
|
||||||
else
|
unhook_frames(frame)
|
||||||
frame:GetScript("OnEvent")(frame, "PARTY_MEMBERS_CHANGED")
|
frame:GetScript("OnEvent")(frame, groupEvent)
|
||||||
end
|
|
||||||
|
|
||||||
PartyMemberFrame_UpdateMember(frame)
|
|
||||||
end
|
end
|
||||||
|
UIParent:RegisterEvent(groupEvent)
|
||||||
end
|
end
|
||||||
|
|
||||||
UIParent:RegisterEvent("RAID_ROSTER_UPDATE")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--function PlayerHealth.prototype:ShowBlizzParty()
|
--function PlayerHealth.prototype:ShowBlizzParty()
|
||||||
|
@ -13,7 +13,7 @@ local SPELL_POWER_FURY = SPELL_POWER_FURY
|
|||||||
local SPELL_POWER_MAELSTROM = SPELL_POWER_MAELSTROM
|
local SPELL_POWER_MAELSTROM = SPELL_POWER_MAELSTROM
|
||||||
local SPELL_POWER_PAIN = SPELL_POWER_PAIN
|
local SPELL_POWER_PAIN = SPELL_POWER_PAIN
|
||||||
local SPELL_POWER_LUNAR_POWER = SPELL_POWER_LUNAR_POWER
|
local SPELL_POWER_LUNAR_POWER = SPELL_POWER_LUNAR_POWER
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_MANA = Enum.PowerType.Mana
|
SPELL_POWER_MANA = Enum.PowerType.Mana
|
||||||
SPELL_POWER_RAGE = Enum.PowerType.Rage
|
SPELL_POWER_RAGE = Enum.PowerType.Rage
|
||||||
SPELL_POWER_FOCUS = Enum.PowerType.Focus
|
SPELL_POWER_FOCUS = Enum.PowerType.Focus
|
||||||
@ -153,9 +153,9 @@ function PlayerMana.prototype:Enable(core)
|
|||||||
|
|
||||||
self:CreateTickerFrame()
|
self:CreateTickerFrame()
|
||||||
|
|
||||||
if IceHUD.WowVer >= 40000 or IceHUD.WowClassic then
|
if not IceHUD.PerPowerEventsExist then
|
||||||
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateEvent")
|
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateEvent")
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.EventExistsUnitMaxPower then
|
||||||
self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent")
|
self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent")
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -203,7 +203,7 @@ function PlayerMana.prototype:CheckVehicle()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function PlayerMana.prototype:ShouldUseTicker()
|
function PlayerMana.prototype:ShouldUseTicker()
|
||||||
return IceHUD.WowVer < 30000 or (IceHUD.WowVer < 70100 and not GetCVarBool("predictedPower"))
|
return IceHUD.WowVer < 30000 or (IceHUD.WowVer < 70100 and not GetCVarBool("predictedPower") and not IceHUD.WowClassicWrath)
|
||||||
end
|
end
|
||||||
|
|
||||||
function PlayerMana.prototype:SetupOnUpdate(enable)
|
function PlayerMana.prototype:SetupOnUpdate(enable)
|
||||||
@ -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
|
||||||
@ -353,13 +353,13 @@ function PlayerMana.prototype:Update(unit, powertype)
|
|||||||
color = "PlayerRunicPower"
|
color = "PlayerRunicPower"
|
||||||
elseif (self.manaType == SPELL_POWER_FOCUS) then
|
elseif (self.manaType == SPELL_POWER_FOCUS) then
|
||||||
color = "PlayerFocus"
|
color = "PlayerFocus"
|
||||||
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_INSANITY) then
|
elseif (self.manaType == SPELL_POWER_INSANITY) then
|
||||||
color = "PlayerInsanity"
|
color = "PlayerInsanity"
|
||||||
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_FURY) then
|
elseif (self.manaType == SPELL_POWER_FURY) then
|
||||||
color = "PlayerFury"
|
color = "PlayerFury"
|
||||||
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_MAELSTROM) then
|
elseif (self.manaType == SPELL_POWER_MAELSTROM) then
|
||||||
color = "PlayerMaelstrom"
|
color = "PlayerMaelstrom"
|
||||||
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_PAIN) then
|
elseif (self.manaType == SPELL_POWER_PAIN) then
|
||||||
color = "PlayerPain"
|
color = "PlayerPain"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -387,7 +387,7 @@ function PlayerMana.prototype:Update(unit, powertype)
|
|||||||
if not IceHUD.IceCore:ShouldUseDogTags() then
|
if not IceHUD.IceCore:ShouldUseDogTags() then
|
||||||
-- extra hack for whiny rogues (are there other kind?)
|
-- extra hack for whiny rogues (are there other kind?)
|
||||||
local displayPercentage = self.manaPercentage
|
local displayPercentage = self.manaPercentage
|
||||||
if self.manaType == SPELL_POWER_ENERGY or self.manaType == SPELL_POWER_FOCUS then
|
if self.manaType == SPELL_POWER_ENERGY or self.manaType == SPELL_POWER_FOCUS or self.manaType == SPELL_POWER_FURY then
|
||||||
displayPercentage = self.mana
|
displayPercentage = self.mana
|
||||||
else
|
else
|
||||||
displayPercentage = math.floor(displayPercentage * 100)
|
displayPercentage = math.floor(displayPercentage * 100)
|
||||||
@ -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
|
||||||
|
@ -56,7 +56,7 @@ do
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
self.current = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 15 or 14, UnitAura(self.unit, spellName)) or 0
|
self.current = select(IceHUD.SpellFunctionsReturnRank and 15 or 14, UnitAura(self.unit, spellName)) or 0
|
||||||
|
|
||||||
self:Update()
|
self:Update()
|
||||||
end
|
end
|
||||||
@ -79,7 +79,7 @@ end
|
|||||||
|
|
||||||
-- Load for tanks only
|
-- Load for tanks only
|
||||||
local _, unitClass = UnitClass("player")
|
local _, unitClass = UnitClass("player")
|
||||||
if ((unitClass == "DEATHKNIGHT" or unitClass == "DRUID" or unitClass == "PALADIN" or unitClass == "WARRIOR" or unitClass == "MONK")
|
if (unitClass == "DEATHKNIGHT" or unitClass == "DRUID" or unitClass == "PALADIN" or unitClass == "WARRIOR" or unitClass == "MONK")
|
||||||
and IceHUD.WowVer >= 60000 and IceHUD.WowVer < 70000) then
|
and GetSpellInfo(RESOLVE_SPELL_ID) then
|
||||||
IceHUD.Resolve = Resolve:new()
|
IceHUD.Resolve = Resolve:new()
|
||||||
end
|
end
|
||||||
|
@ -22,7 +22,7 @@ for _, v in ipairs(RtBBuffs) do
|
|||||||
end
|
end
|
||||||
|
|
||||||
local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS
|
local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
|
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -235,7 +235,7 @@ end
|
|||||||
function RollTheBones.prototype:GetBuffDuration(unitName, ids)
|
function RollTheBones.prototype:GetBuffDuration(unitName, ids)
|
||||||
local i = 1
|
local i = 1
|
||||||
local buff, _, type, duration, endTime, spellId
|
local buff, _, type, duration, endTime, spellId
|
||||||
if IceHUD.WowVer < 80000 then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
buff, _, _, _, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
|
buff, _, _, _, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
|
||||||
else
|
else
|
||||||
buff, _, _, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
|
buff, _, _, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
|
||||||
@ -256,7 +256,7 @@ function RollTheBones.prototype:GetBuffDuration(unitName, ids)
|
|||||||
|
|
||||||
i = i + 1;
|
i = i + 1;
|
||||||
|
|
||||||
if IceHUD.WowVer < 80000 then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
buff, _, _, _, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
|
buff, _, _, _, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
|
||||||
else
|
else
|
||||||
buff, _, _, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
|
buff, _, _, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
|
||||||
@ -376,14 +376,18 @@ function RollTheBones.prototype:UpdateDurationBar(event, unit)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local points = RTBGetComboPoints(self.unit)
|
local points = RTBGetComboPoints(self.unit)
|
||||||
-- check for Deeper Stratagem
|
if UnitPowerMax then
|
||||||
local _, _, _, DeeperStratagem = GetTalentInfoByID(sixComboPointsTalentID, GetActiveSpecGroup())
|
CurrMaxRtBDuration = self:GetMaxBuffTime(UnitPowerMax(self.unit, SPELL_POWER_COMBO_POINTS))
|
||||||
|
|
||||||
if DeeperStratagem then
|
|
||||||
-- first, set the cached upper limit of RtB duration
|
|
||||||
CurrMaxRtBDuration = self:GetMaxBuffTime(maxComboPoints + 1)
|
|
||||||
else
|
else
|
||||||
CurrMaxRtBDuration = self:GetMaxBuffTime(maxComboPoints)
|
-- check for Deeper Stratagem
|
||||||
|
local _, _, _, DeeperStratagem = GetTalentInfoByID(sixComboPointsTalentID, GetActiveSpecGroup())
|
||||||
|
|
||||||
|
if DeeperStratagem then
|
||||||
|
-- first, set the cached upper limit of RtB duration
|
||||||
|
CurrMaxRtBDuration = self:GetMaxBuffTime(maxComboPoints + 1)
|
||||||
|
else
|
||||||
|
CurrMaxRtBDuration = self:GetMaxBuffTime(maxComboPoints)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if event then
|
if event then
|
||||||
|
@ -3,21 +3,23 @@ local Runes = IceCore_CreateClass(IceElement)
|
|||||||
|
|
||||||
local IceHUD = _G.IceHUD
|
local IceHUD = _G.IceHUD
|
||||||
|
|
||||||
|
local RunesReturnedByMaxPower = IceHUD.WowVer >= 70000
|
||||||
|
|
||||||
local CooldownFrame_SetTimer = CooldownFrame_SetTimer
|
local CooldownFrame_SetTimer = CooldownFrame_SetTimer
|
||||||
if CooldownFrame_Set then
|
if CooldownFrame_Set then
|
||||||
CooldownFrame_SetTimer = CooldownFrame_Set
|
CooldownFrame_SetTimer = CooldownFrame_Set
|
||||||
end
|
end
|
||||||
|
|
||||||
local RUNETYPE_BLOOD = 1;
|
local RUNETYPE_BLOOD = 1;
|
||||||
local RUNETYPE_DEATH = IceHUD.WowVer < 70300 and 2 or 3;
|
local RUNETYPE_DEATH = IceHUD.DeathKnightUnholyFrostRunesSwapped and 2 or 3;
|
||||||
local RUNETYPE_FROST = IceHUD.WowVer < 70300 and 3 or 2;
|
local RUNETYPE_FROST = IceHUD.DeathKnightUnholyFrostRunesSwapped and 3 or 2;
|
||||||
local RUNETYPE_CHROMATIC = 4;
|
local RUNETYPE_CHROMATIC = 4;
|
||||||
local RUNETYPE_LEGION = 5; -- not real, but makes for an easy update
|
local RUNETYPE_LEGION = 5; -- not real, but makes for an easy update
|
||||||
|
|
||||||
local GetRuneType = GetRuneType
|
local GetRuneType = GetRuneType
|
||||||
if IceHUD.WowVer >= 70000 and IceHUD.WowVer < 70300 then
|
if IceHUD.WowVer >= 70000 and IceHUD.WowVer < 70300 then
|
||||||
GetRuneType = function() return RUNETYPE_LEGION end
|
GetRuneType = function() return RUNETYPE_LEGION end
|
||||||
elseif IceHUD.WowVer >= 70300 then
|
elseif IceHUD.WowVer >= 70300 and GetSpecialization then
|
||||||
GetRuneType = function() return GetSpecialization() end
|
GetRuneType = function() return GetSpecialization() end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -44,7 +46,7 @@ Runes.prototype.numRunes = 6
|
|||||||
Runes.prototype.lastRuneState = {}
|
Runes.prototype.lastRuneState = {}
|
||||||
|
|
||||||
local SPELL_POWER_RUNES = SPELL_POWER_RUNES
|
local SPELL_POWER_RUNES = SPELL_POWER_RUNES
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_RUNES = Enum.PowerType.Runes
|
SPELL_POWER_RUNES = Enum.PowerType.Runes
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -132,6 +134,9 @@ function Runes.prototype:GetOptions()
|
|||||||
disabled = function()
|
disabled = function()
|
||||||
return not self.moduleSettings.enabled
|
return not self.moduleSettings.enabled
|
||||||
end,
|
end,
|
||||||
|
hidden = function()
|
||||||
|
return not PlayerFrame_HideVehicleTexture
|
||||||
|
end,
|
||||||
order = 32
|
order = 32
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,7 +270,7 @@ end
|
|||||||
|
|
||||||
-- OVERRIDE
|
-- OVERRIDE
|
||||||
function Runes.prototype:Enable(core)
|
function Runes.prototype:Enable(core)
|
||||||
if IceHUD.WowVer >= 70000 then
|
if RunesReturnedByMaxPower then
|
||||||
self.numRunes = UnitPowerMax("player", SPELL_POWER_RUNES)
|
self.numRunes = UnitPowerMax("player", SPELL_POWER_RUNES)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -283,7 +288,9 @@ function Runes.prototype:Enable(core)
|
|||||||
self:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED", "UpdateRuneColors")
|
self:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED", "UpdateRuneColors")
|
||||||
end
|
end
|
||||||
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
|
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
|
||||||
self:RegisterEvent("UNIT_MAXPOWER", "CheckMaxNumRunes")
|
if RunesReturnedByMaxPower then
|
||||||
|
self:RegisterEvent("UNIT_MAXPOWER", "CheckMaxNumRunes")
|
||||||
|
end
|
||||||
|
|
||||||
if (self.moduleSettings.hideBlizz) then
|
if (self.moduleSettings.hideBlizz) then
|
||||||
self:HideBlizz()
|
self:HideBlizz()
|
||||||
@ -503,7 +510,7 @@ function Runes.prototype:CreateRune(i, type, name)
|
|||||||
-- create runes
|
-- create runes
|
||||||
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].rune = self.frame.graphical[i]:CreateTexture(nil, "LOW")
|
self.frame.graphical[i].rune = self.frame.graphical[i]:CreateTexture(nil, "BACKGROUND")
|
||||||
self.frame.graphical[i].rune:SetAllPoints(self.frame.graphical[i])
|
self.frame.graphical[i].rune:SetAllPoints(self.frame.graphical[i])
|
||||||
self.frame.graphical[i].cd = CreateFrame("Cooldown", nil, self.frame.graphical[i], "CooldownFrameTemplate")
|
self.frame.graphical[i].cd = CreateFrame("Cooldown", nil, self.frame.graphical[i], "CooldownFrameTemplate")
|
||||||
self.frame.graphical[i].shine = self.frame.graphical[i]:CreateTexture(nil, "OVERLAY")
|
self.frame.graphical[i].shine = self.frame.graphical[i]:CreateTexture(nil, "OVERLAY")
|
||||||
@ -577,6 +584,10 @@ local function hook_playerframe()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Runes.prototype:HideBlizz()
|
function Runes.prototype:HideBlizz()
|
||||||
|
if not PlayerFrame_HideVehicleTexture then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
RuneFrame:Hide()
|
RuneFrame:Hide()
|
||||||
RuneFrame:UnregisterAllEvents()
|
RuneFrame:UnregisterAllEvents()
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ local DemonologyCoords =
|
|||||||
}
|
}
|
||||||
|
|
||||||
local SPELL_POWER_SOUL_SHARDS = SPELL_POWER_SOUL_SHARDS
|
local SPELL_POWER_SOUL_SHARDS = SPELL_POWER_SOUL_SHARDS
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_SOUL_SHARDS = Enum.PowerType.SoulShards
|
SPELL_POWER_SOUL_SHARDS = Enum.PowerType.SoulShards
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -276,6 +276,6 @@ end
|
|||||||
|
|
||||||
-- Load us up
|
-- Load us up
|
||||||
local _, unitClass = UnitClass("player")
|
local _, unitClass = UnitClass("player")
|
||||||
if (unitClass == "WARLOCK" and IceHUD.WowVer >= 40000) then
|
if (unitClass == "WARLOCK" and WarlockPowerFrame) then
|
||||||
IceHUD.ShardCounter = ShardCounter:new()
|
IceHUD.ShardCounter = ShardCounter:new()
|
||||||
end
|
end
|
||||||
|
@ -25,6 +25,11 @@ local sixComboPointsTalentID = 19240
|
|||||||
local CurrMaxSnDDuration = 0
|
local CurrMaxSnDDuration = 0
|
||||||
local PotentialSnDDuration = 0
|
local PotentialSnDDuration = 0
|
||||||
|
|
||||||
|
local sndBuffName = 132306
|
||||||
|
if IceHUD.WowMain and IceHUD.WowVer < 80000 then
|
||||||
|
sndBuffName = "Ability_Rogue_SliceDice"
|
||||||
|
end
|
||||||
|
|
||||||
if IceHUD.WowVer >= 50000 then
|
if IceHUD.WowVer >= 50000 then
|
||||||
baseTime = 12
|
baseTime = 12
|
||||||
gapPerComboPoint = 6
|
gapPerComboPoint = 6
|
||||||
@ -33,10 +38,18 @@ if IceHUD.WowClassic then
|
|||||||
impSndBonusPerRank = 0.15
|
impSndBonusPerRank = 0.15
|
||||||
impSndTalentPage = 1
|
impSndTalentPage = 1
|
||||||
impSndTalentIdx = 6
|
impSndTalentIdx = 6
|
||||||
|
elseif IceHUD.WowClassicBC then
|
||||||
|
impSndBonusPerRank = 0.15
|
||||||
|
impSndTalentPage = 2
|
||||||
|
impSndTalentIdx = 4
|
||||||
|
elseif IceHUD.WowClassicWrath then
|
||||||
|
impSndBonusPerRank = 0.25
|
||||||
|
impSndTalentPage = 2
|
||||||
|
impSndTalentIdx = 23
|
||||||
end
|
end
|
||||||
|
|
||||||
local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS
|
local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS
|
||||||
if IceHUD.WowVer >= 80000 then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
|
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -61,7 +74,7 @@ function SliceAndDice.prototype:Enable(core)
|
|||||||
SliceAndDice.super.prototype.Enable(self, core)
|
SliceAndDice.super.prototype.Enable(self, core)
|
||||||
|
|
||||||
self:RegisterEvent("UNIT_AURA", "UpdateSliceAndDice")
|
self:RegisterEvent("UNIT_AURA", "UpdateSliceAndDice")
|
||||||
if IceHUD.WowVer < 70000 and not IceHUD.WowClassic then
|
if IceHUD.EventExistsUnitComboPoints then
|
||||||
self:RegisterEvent("UNIT_COMBO_POINTS", "ComboPointsChanged")
|
self:RegisterEvent("UNIT_COMBO_POINTS", "ComboPointsChanged")
|
||||||
else
|
else
|
||||||
self:RegisterEvent(IceHUD.UnitPowerEvent, "ComboPointsChanged")
|
self:RegisterEvent(IceHUD.UnitPowerEvent, "ComboPointsChanged")
|
||||||
@ -72,6 +85,10 @@ function SliceAndDice.prototype:Enable(core)
|
|||||||
self:CheckMaxComboPoints()
|
self:CheckMaxComboPoints()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if IceHUD.EventExistsUnitMaxPower then
|
||||||
|
self:RegisterEvent("UNIT_MAXPOWER", "CheckMaxComboPoints")
|
||||||
|
end
|
||||||
|
|
||||||
if not self.moduleSettings.alwaysFullAlpha then
|
if not self.moduleSettings.alwaysFullAlpha then
|
||||||
self:Show(false)
|
self:Show(false)
|
||||||
else
|
else
|
||||||
@ -82,8 +99,12 @@ function SliceAndDice.prototype:Enable(core)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function SliceAndDice.prototype:CheckMaxComboPoints()
|
function SliceAndDice.prototype:CheckMaxComboPoints()
|
||||||
local talentID, name, texture, selected, available, spellID, unknown, row, column, known, grantedByAura = GetTalentInfoByID(sixComboPointsTalentID, GetActiveSpecGroup())
|
if UnitPowerMax then
|
||||||
maxComboPoints = selected and 6 or 5
|
maxComboPoints = UnitPowerMax(self.unit, SPELL_POWER_COMBO_POINTS)
|
||||||
|
else
|
||||||
|
local talentID, name, texture, selected, available, spellID, unknown, row, column, known, grantedByAura = GetTalentInfoByID(sixComboPointsTalentID, GetActiveSpecGroup())
|
||||||
|
maxComboPoints = selected and 6 or 5
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function SliceAndDice.prototype:Disable(core)
|
function SliceAndDice.prototype:Disable(core)
|
||||||
@ -227,7 +248,7 @@ end
|
|||||||
function SliceAndDice.prototype:GetBuffDuration(unitName, buffName)
|
function SliceAndDice.prototype:GetBuffDuration(unitName, buffName)
|
||||||
local i = 1
|
local i = 1
|
||||||
local buff, _, texture, duration, endTime, remaining
|
local buff, _, texture, duration, endTime, remaining
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
buff, _, texture, _, _, duration, endTime = UnitBuff(unitName, i)
|
buff, _, texture, _, _, duration, endTime = UnitBuff(unitName, i)
|
||||||
else
|
else
|
||||||
buff, texture, _, _, duration, endTime = UnitBuff(unitName, i)
|
buff, texture, _, _, duration, endTime = UnitBuff(unitName, i)
|
||||||
@ -243,7 +264,7 @@ function SliceAndDice.prototype:GetBuffDuration(unitName, buffName)
|
|||||||
|
|
||||||
i = i + 1;
|
i = i + 1;
|
||||||
|
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
buff, _, texture, _, _, duration, endTime = UnitBuff(unitName, i)
|
buff, _, texture, _, _, duration, endTime = UnitBuff(unitName, i)
|
||||||
else
|
else
|
||||||
buff, texture, _, _, duration, endTime = UnitBuff(unitName, i)
|
buff, texture, _, _, duration, endTime = UnitBuff(unitName, i)
|
||||||
@ -264,10 +285,10 @@ function SliceAndDice.prototype:MyOnUpdate()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function SNDGetComboPoints(unit)
|
local function SNDGetComboPoints(unit)
|
||||||
if IceHUD.WowVer >= 60000 or IceHUD.WowClassic then
|
if IceHUD.PerTargetComboPoints then
|
||||||
return UnitPower(unit, SPELL_POWER_COMBO_POINTS)
|
|
||||||
elseif IceHUD.WowVer >= 30000 then
|
|
||||||
return GetComboPoints(unit, "target")
|
return GetComboPoints(unit, "target")
|
||||||
|
elseif IceHUD.WowVer >= 60000 then
|
||||||
|
return UnitPower(unit, SPELL_POWER_COMBO_POINTS)
|
||||||
else
|
else
|
||||||
return GetComboPoints()
|
return GetComboPoints()
|
||||||
end
|
end
|
||||||
@ -281,7 +302,7 @@ local function HasSpell(id)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function ShouldHide()
|
local function ShouldHide()
|
||||||
if IceHUD.WowVer >= 90000 then
|
if IceHUD.WowVer >= 90000 or IceHUD.WowClassicBC or IceHUD.WowClassicWrath then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -300,7 +321,7 @@ function SliceAndDice.prototype:UpdateSliceAndDice(event, unit, fromUpdate)
|
|||||||
local remaining = nil
|
local remaining = nil
|
||||||
|
|
||||||
if not fromUpdate or IceHUD.WowVer < 30000 then
|
if not fromUpdate or IceHUD.WowVer < 30000 then
|
||||||
sndDuration, remaining = self:GetBuffDuration(self.unit, (IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and "Ability_Rogue_SliceDice" or 132306)
|
sndDuration, remaining = self:GetBuffDuration(self.unit, sndBuffName)
|
||||||
|
|
||||||
if not remaining then
|
if not remaining then
|
||||||
sndEndTime = 0
|
sndEndTime = 0
|
||||||
@ -402,13 +423,11 @@ function SliceAndDice.prototype:UpdateDurationBar(event, unit)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function SliceAndDice.prototype:GetMaxBuffTime(numComboPoints)
|
function SliceAndDice.prototype:GetMaxBuffTime(numComboPoints)
|
||||||
local maxduration
|
|
||||||
|
|
||||||
if numComboPoints == 0 then
|
if numComboPoints == 0 then
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
maxduration = baseTime + ((numComboPoints - 1) * gapPerComboPoint)
|
local maxduration = baseTime + ((numComboPoints - 1) * gapPerComboPoint)
|
||||||
|
|
||||||
if self:HasNetherbladeBonus() then
|
if self:HasNetherbladeBonus() then
|
||||||
maxduration = maxduration + netherbladeBonus
|
maxduration = maxduration + netherbladeBonus
|
||||||
|
@ -185,13 +185,13 @@ function StaggerBar.prototype:GetDebuffInfo()
|
|||||||
local staggerLevel = 1
|
local staggerLevel = 1
|
||||||
|
|
||||||
for i = 1, IceCore.BuffLimit do
|
for i = 1, IceCore.BuffLimit do
|
||||||
local debuffID = select(IceHUD.WowVer < 80000 and 11 or 10, UnitDebuff(self.unit, i))
|
local debuffID = select(IceHUD.SpellFunctionsReturnRank and 11 or 10, UnitDebuff(self.unit, i))
|
||||||
|
|
||||||
if debuffID == LightID or debuffID == ModerateID or debuffID == HeavyID then
|
if debuffID == LightID or debuffID == ModerateID or debuffID == HeavyID then
|
||||||
local spellName = UnitDebuff(self.unit, i)
|
local spellName = UnitDebuff(self.unit, i)
|
||||||
|
|
||||||
duration = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 6 or 5, UnitAura(self.unit, spellName, "", "HARMFUL"))
|
duration = select(IceHUD.SpellFunctionsReturnRank and 6 or 5, UnitAura(self.unit, spellName, "", "HARMFUL"))
|
||||||
amount = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 15 or 14, UnitAura(self.unit, spellName, "", "HARMFUL"))
|
amount = select(IceHUD.SpellFunctionsReturnRank and 15 or 14, UnitAura(self.unit, spellName, "", "HARMFUL"))
|
||||||
staggerLevel = (debuffID == LightID) and 1 or (debuffID == ModerateID) and 2 or 3
|
staggerLevel = (debuffID == LightID) and 1 or (debuffID == ModerateID) and 2 or 3
|
||||||
|
|
||||||
break
|
break
|
||||||
@ -236,7 +236,7 @@ end
|
|||||||
|
|
||||||
function StaggerBar.prototype:GetDebuffDuration(unitName, buffId)
|
function StaggerBar.prototype:GetDebuffDuration(unitName, buffId)
|
||||||
local name, _, duration, endTime
|
local name, _, duration, endTime
|
||||||
if IceHUD.WowVer < 80000 then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
name, _, _, _, _, duration, endTime = UnitDebuff(unitName, buffName)
|
name, _, _, _, _, duration, endTime = UnitDebuff(unitName, buffName)
|
||||||
else
|
else
|
||||||
for i = 1, IceCore.BuffLimit do
|
for i = 1, IceCore.BuffLimit do
|
||||||
|
@ -7,7 +7,7 @@ TargetCC.prototype.debuffRemaining = 0
|
|||||||
TargetCC.prototype.debuffDuration = 0
|
TargetCC.prototype.debuffDuration = 0
|
||||||
|
|
||||||
local GetNumPartyMembers, GetNumRaidMembers = GetNumPartyMembers, GetNumRaidMembers
|
local GetNumPartyMembers, GetNumRaidMembers = GetNumPartyMembers, GetNumRaidMembers
|
||||||
if IceHUD.WowVer >= 50000 then
|
if GetNumGroupMembers then
|
||||||
GetNumPartyMembers = GetNumGroupMembers
|
GetNumPartyMembers = GetNumGroupMembers
|
||||||
GetNumRaidMembers = GetNumGroupMembers
|
GetNumRaidMembers = GetNumGroupMembers
|
||||||
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
|
||||||
@ -336,7 +338,7 @@ end
|
|||||||
function TargetCC.prototype:GetMaxDebuffDuration(unitName, debuffNames)
|
function TargetCC.prototype:GetMaxDebuffDuration(unitName, debuffNames)
|
||||||
local i = 1
|
local i = 1
|
||||||
local debuff, rank, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId
|
local debuff, rank, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
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 = UnitAura(unitName, i, "HARMFUL")
|
||||||
else
|
else
|
||||||
debuff, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, "HARMFUL")
|
debuff, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, "HARMFUL")
|
||||||
@ -360,7 +362,7 @@ function TargetCC.prototype:GetMaxDebuffDuration(unitName, debuffNames)
|
|||||||
|
|
||||||
i = i + 1;
|
i = i + 1;
|
||||||
|
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
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 = UnitAura(unitName, i, "HARMFUL")
|
||||||
else
|
else
|
||||||
debuff, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, "HARMFUL")
|
debuff, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, "HARMFUL")
|
||||||
|
@ -15,7 +15,7 @@ end
|
|||||||
function TargetCast.prototype:Enable(core)
|
function TargetCast.prototype:Enable(core)
|
||||||
TargetCast.super.prototype.Enable(self, core)
|
TargetCast.super.prototype.Enable(self, core)
|
||||||
|
|
||||||
if IceHUD.WowVer >= 30200 then
|
if IceHUD.EventExistsSpellcastInterruptible then
|
||||||
self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTIBLE", "SpellCastInterruptible")
|
self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTIBLE", "SpellCastInterruptible")
|
||||||
self:RegisterEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "SpellCastNotInterruptible")
|
self:RegisterEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "SpellCastNotInterruptible")
|
||||||
end
|
end
|
||||||
@ -91,7 +91,7 @@ function TargetCast.prototype:TargetChanged(unit)
|
|||||||
|
|
||||||
if UnitCastingInfo then
|
if UnitCastingInfo then
|
||||||
local spell = UnitCastingInfo(self.unit)
|
local spell = UnitCastingInfo(self.unit)
|
||||||
local notInterruptible = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 9 or 8, UnitCastingInfo(self.unit))
|
local notInterruptible = select(IceHUD.SpellFunctionsReturnRank and 9 or 8, UnitCastingInfo(self.unit))
|
||||||
if spell then
|
if spell then
|
||||||
self.notInterruptible = notInterruptibleCast
|
self.notInterruptible = notInterruptibleCast
|
||||||
self:StartBar(IceCastBar.Actions.Cast)
|
self:StartBar(IceCastBar.Actions.Cast)
|
||||||
@ -101,7 +101,7 @@ function TargetCast.prototype:TargetChanged(unit)
|
|||||||
|
|
||||||
if UnitChannelInfo then
|
if UnitChannelInfo then
|
||||||
local channel = UnitChannelInfo(self.unit)
|
local channel = UnitChannelInfo(self.unit)
|
||||||
notInterruptible = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 8 or 7, UnitChannelInfo(self.unit))
|
notInterruptible = select(IceHUD.SpellFunctionsReturnRank and 8 or 7, UnitChannelInfo(self.unit))
|
||||||
if channel then
|
if channel then
|
||||||
self.notInterruptible = notInterruptibleChannel
|
self.notInterruptible = notInterruptibleChannel
|
||||||
self:StartBar(IceCastBar.Actions.Channel)
|
self:StartBar(IceCastBar.Actions.Channel)
|
||||||
@ -183,11 +183,11 @@ function TargetCast.prototype:StartBar(action, message)
|
|||||||
local spell, notInterruptible
|
local spell, notInterruptible
|
||||||
if UnitCastingInfo then
|
if UnitCastingInfo then
|
||||||
spell = UnitCastingInfo(self.unit)
|
spell = UnitCastingInfo(self.unit)
|
||||||
notInterruptible = select(IceHUD.WowVer < 80000 and 9 or 8, UnitCastingInfo(self.unit))
|
notInterruptible = select(IceHUD.SpellFunctionsReturnRank and 9 or 8, UnitCastingInfo(self.unit))
|
||||||
end
|
end
|
||||||
if UnitChannelInfo and not spell then
|
if UnitChannelInfo and not spell then
|
||||||
spell = UnitChannelInfo(self.unit)
|
spell = UnitChannelInfo(self.unit)
|
||||||
notInterruptible = select(IceHUD.WowVer < 80000 and 8 or 7, UnitChannelInfo(self.unit))
|
notInterruptible = select(IceHUD.SpellFunctionsReturnRank and 8 or 7, UnitChannelInfo(self.unit))
|
||||||
|
|
||||||
if not spell then
|
if not spell then
|
||||||
return
|
return
|
||||||
|
@ -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)
|
||||||
@ -1095,7 +1108,7 @@ function IceTargetHealth.prototype:CheckPartyRole()
|
|||||||
proposalExists, id, typeID, subtypeID, name, texture, role, hasResponded, totalEncounters, completedEncounters, numMembers, isleader = GetLFGProposal()
|
proposalExists, id, typeID, subtypeID, name, texture, role, hasResponded, totalEncounters, completedEncounters, numMembers, isleader = GetLFGProposal()
|
||||||
|
|
||||||
local p = self.unit
|
local p = self.unit
|
||||||
if IceHUD.WowVer < 40000 then
|
if not IceHUD.UnitGroupRolesReturnsRoleString then
|
||||||
isTank, isHeal, isDPS = UnitGroupRolesAssigned(p)
|
isTank, isHeal, isDPS = UnitGroupRolesAssigned(p)
|
||||||
else
|
else
|
||||||
local grpRole = UnitGroupRolesAssigned(p)
|
local grpRole = UnitGroupRolesAssigned(p)
|
||||||
|
@ -133,7 +133,7 @@ function IceTargetInfo.prototype:Enable(core)
|
|||||||
self:RegisterEvent("UNIT_LEVEL", "TargetLevel")
|
self:RegisterEvent("UNIT_LEVEL", "TargetLevel")
|
||||||
|
|
||||||
self:RegisterEvent("UNIT_FLAGS", "TargetFlags")
|
self:RegisterEvent("UNIT_FLAGS", "TargetFlags")
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.EventExistsUnitDynamicFlags then
|
||||||
self:RegisterEvent("UNIT_DYNAMIC_FLAGS", "TargetFlags")
|
self:RegisterEvent("UNIT_DYNAMIC_FLAGS", "TargetFlags")
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1419,7 +1419,7 @@ function IceTargetInfo.prototype:UpdateBuffType(aura)
|
|||||||
local spellID
|
local spellID
|
||||||
---- end change by Fulzamoth
|
---- end change by Fulzamoth
|
||||||
|
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
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 = UnitAura(self.unit, i, reaction .. (filter and "|PLAYER" or ""))
|
||||||
else
|
else
|
||||||
---- Fulzamoth - 2019-09-04 : support for cooldowns on target buffs/debuffs (classic)
|
---- Fulzamoth - 2019-09-04 : support for cooldowns on target buffs/debuffs (classic)
|
||||||
|
@ -7,7 +7,7 @@ TargetInvuln.prototype.buffRemaining = 0
|
|||||||
TargetInvuln.prototype.buffDuration = 0
|
TargetInvuln.prototype.buffDuration = 0
|
||||||
|
|
||||||
local GetNumPartyMembers, GetNumRaidMembers = GetNumPartyMembers, GetNumRaidMembers
|
local GetNumPartyMembers, GetNumRaidMembers = GetNumPartyMembers, GetNumRaidMembers
|
||||||
if IceHUD.WowVer >= 50000 then
|
if GetNumGroupMembers then
|
||||||
GetNumPartyMembers = GetNumGroupMembers
|
GetNumPartyMembers = GetNumGroupMembers
|
||||||
GetNumRaidMembers = GetNumGroupMembers
|
GetNumRaidMembers = GetNumGroupMembers
|
||||||
end
|
end
|
||||||
@ -147,7 +147,7 @@ end
|
|||||||
function TargetInvuln.prototype:GetMaxbuffDuration(unitName, buffNames)
|
function TargetInvuln.prototype:GetMaxbuffDuration(unitName, buffNames)
|
||||||
local i = 1
|
local i = 1
|
||||||
local buff, rank, texture, count, buffType, duration, endTime, unitCaster
|
local buff, rank, texture, count, buffType, duration, endTime, unitCaster
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
buff, rank, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
|
buff, rank, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
|
||||||
else
|
else
|
||||||
buff, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
|
buff, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
|
||||||
@ -178,7 +178,7 @@ function TargetInvuln.prototype:GetMaxbuffDuration(unitName, buffNames)
|
|||||||
|
|
||||||
i = i + 1;
|
i = i + 1;
|
||||||
|
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
buff, rank, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
|
buff, rank, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
|
||||||
else
|
else
|
||||||
buff, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
|
buff, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
|
||||||
@ -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))
|
||||||
|
@ -14,7 +14,7 @@ local SPELL_POWER_FURY = SPELL_POWER_FURY
|
|||||||
local SPELL_POWER_MAELSTROM = SPELL_POWER_MAELSTROM
|
local SPELL_POWER_MAELSTROM = SPELL_POWER_MAELSTROM
|
||||||
local SPELL_POWER_PAIN = SPELL_POWER_PAIN
|
local SPELL_POWER_PAIN = SPELL_POWER_PAIN
|
||||||
local SPELL_POWER_LUNAR_POWER = SPELL_POWER_LUNAR_POWER
|
local SPELL_POWER_LUNAR_POWER = SPELL_POWER_LUNAR_POWER
|
||||||
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
|
if Enum and Enum.PowerType then
|
||||||
SPELL_POWER_MANA = Enum.PowerType.Mana
|
SPELL_POWER_MANA = Enum.PowerType.Mana
|
||||||
SPELL_POWER_RAGE = Enum.PowerType.Rage
|
SPELL_POWER_RAGE = Enum.PowerType.Rage
|
||||||
SPELL_POWER_FOCUS = Enum.PowerType.Focus
|
SPELL_POWER_FOCUS = Enum.PowerType.Focus
|
||||||
@ -66,9 +66,9 @@ function IceTargetMana.prototype:Enable(core)
|
|||||||
IceTargetMana.super.prototype.Enable(self, core)
|
IceTargetMana.super.prototype.Enable(self, core)
|
||||||
|
|
||||||
if self.registerEvents then
|
if self.registerEvents then
|
||||||
if IceHUD.WowVer >= 40000 or IceHUD.WowClassic then
|
if not IceHUD.PerPowerEventsExist then
|
||||||
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateEvent")
|
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateEvent")
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.EventExistsUnitMaxPower then
|
||||||
self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent")
|
self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent")
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -83,7 +83,7 @@ function IceTargetMana.prototype:Enable(core)
|
|||||||
self:RegisterEvent("UNIT_FOCUS", "UpdateEvent")
|
self:RegisterEvent("UNIT_FOCUS", "UpdateEvent")
|
||||||
|
|
||||||
-- DK rune stuff
|
-- DK rune stuff
|
||||||
if IceHUD.WowVer >= 30000 then
|
if SPELL_POWER_RUNIC_POWER then
|
||||||
self:RegisterEvent("UNIT_RUNIC_POWER", "UpdateEvent")
|
self:RegisterEvent("UNIT_RUNIC_POWER", "UpdateEvent")
|
||||||
self:RegisterEvent("UNIT_MAXRUNIC_POWER", "UpdateEvent")
|
self:RegisterEvent("UNIT_MAXRUNIC_POWER", "UpdateEvent")
|
||||||
end
|
end
|
||||||
@ -135,13 +135,13 @@ function IceTargetMana.prototype:Update(unit)
|
|||||||
self.color = "TargetEnergy"
|
self.color = "TargetEnergy"
|
||||||
elseif (manaType == SPELL_POWER_RUNIC_POWER) then
|
elseif (manaType == SPELL_POWER_RUNIC_POWER) then
|
||||||
self.color = "TargetRunicPower"
|
self.color = "TargetRunicPower"
|
||||||
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_INSANITY) then
|
elseif (manaType == SPELL_POWER_INSANITY) then
|
||||||
self.color = "TargetInsanity"
|
self.color = "TargetInsanity"
|
||||||
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_FURY) then
|
elseif (manaType == SPELL_POWER_FURY) then
|
||||||
self.color = "TargetFury"
|
self.color = "TargetFury"
|
||||||
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_MAELSTROM) then
|
elseif (manaType == SPELL_POWER_MAELSTROM) then
|
||||||
self.color = "TargetMaelstrom"
|
self.color = "TargetMaelstrom"
|
||||||
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_PAIN) then
|
elseif (manaType == SPELL_POWER_PAIN) then
|
||||||
self.color = "TargetPain"
|
self.color = "TargetPain"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -486,7 +486,7 @@ function TargetOfTarget.prototype:UpdateBuffs()
|
|||||||
if (self.moduleSettings.showDebuffs) then
|
if (self.moduleSettings.showDebuffs) then
|
||||||
for i = 1, IceCore.BuffLimit do
|
for i = 1, IceCore.BuffLimit do
|
||||||
local buffName, buffRank, buffTexture, buffApplications
|
local buffName, buffRank, buffTexture, buffApplications
|
||||||
if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
buffName, buffRank, buffTexture, buffApplications = UnitDebuff(self.unit, i)
|
buffName, buffRank, buffTexture, buffApplications = UnitDebuff(self.unit, i)
|
||||||
else
|
else
|
||||||
buffName, buffTexture, buffApplications = UnitDebuff(self.unit, i)
|
buffName, buffTexture, buffApplications = UnitDebuff(self.unit, i)
|
||||||
|
@ -16,7 +16,7 @@ IceThreat.prototype.scheduledEvent = nil
|
|||||||
|
|
||||||
local GetNumPartyMembers, GetNumRaidMembers = GetNumPartyMembers, GetNumRaidMembers
|
local GetNumPartyMembers, GetNumRaidMembers = GetNumPartyMembers, GetNumRaidMembers
|
||||||
local MAX_NUM_RAID_MEMBERS, MAX_NUM_PARTY_MEMBERS = MAX_NUM_RAID_MEMBERS, MAX_NUM_PARTY_MEMBERS
|
local MAX_NUM_RAID_MEMBERS, MAX_NUM_PARTY_MEMBERS = MAX_NUM_RAID_MEMBERS, MAX_NUM_PARTY_MEMBERS
|
||||||
if IceHUD.WowVer >= 50000 or IceHUD.WowClassic then
|
if not GetNumPartyMembers then
|
||||||
GetNumPartyMembers = GetNumGroupMembers
|
GetNumPartyMembers = GetNumGroupMembers
|
||||||
GetNumRaidMembers = GetNumGroupMembers
|
GetNumRaidMembers = GetNumGroupMembers
|
||||||
MAX_NUM_PARTY_MEMBERS = MAX_PARTY_MEMBERS
|
MAX_NUM_PARTY_MEMBERS = MAX_PARTY_MEMBERS
|
||||||
|
@ -245,7 +245,7 @@ function Totems.prototype:UpdateTotem(event, totem, ...)
|
|||||||
if not totem or tonumber(totem) ~= totem or totem < 1 or totem > self.numTotems or not GetTotemInfo then
|
if not totem or tonumber(totem) ~= totem or totem < 1 or totem > self.numTotems or not GetTotemInfo then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local thisTotemName = self.totemNames[TOTEM_PRIORITIES[totem]]
|
|
||||||
local haveTotem, name, startTime, duration, icon = GetTotemInfo(totem);
|
local haveTotem, name, startTime, duration, icon = GetTotemInfo(totem);
|
||||||
if duration > 0 then
|
if duration > 0 then
|
||||||
self.frame.graphical[totem].totem:SetTexture(icon)
|
self.frame.graphical[totem].totem:SetTexture(icon)
|
||||||
@ -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,16 +339,14 @@ 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, "BACKGROUND")
|
||||||
self.frame.graphical[i].cd = CreateFrame("Cooldown", nil, self.frame.graphical[i], "CooldownFrameTemplate")
|
self.frame.graphical[i].cd = CreateFrame("Cooldown", nil, self.frame.graphical[i], "CooldownFrameTemplate")
|
||||||
self.frame.graphical[i].shine = self.frame.graphical[i]:CreateTexture(nil, "OVERLAY")
|
self.frame.graphical[i].shine = self.frame.graphical[i]:CreateTexture(nil, "OVERLAY")
|
||||||
|
|
||||||
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,22 +403,23 @@ 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
|
||||||
local _, unitClass = UnitClass("player")
|
local _, unitClass = UnitClass("player")
|
||||||
if (unitClass == "SHAMAN") or (unitClass == "DRUID") then
|
if IceHUD.WowVer >= 90000 or (unitClass == "SHAMAN") or (unitClass == "DRUID") then
|
||||||
IceHUD.Totems = Totems:new()
|
IceHUD.Totems = Totems:new()
|
||||||
end
|
end
|
||||||
|
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,5 +1,22 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
v1.13.2:
|
v1.13.17.3:
|
||||||
|
|
||||||
- Fixed which version of LibDogTag was being packaged. The previous version did not have 9.0 compatibility and was generating errors (ticket #293).
|
- Packaged latest LibDogTag-Unit to work around crash in Wrath Classic client.
|
||||||
|
|
||||||
|
v1.13.17.2:
|
||||||
|
|
||||||
|
- Fixed Runes disappearing for Death Knights on Wrath Classic when using the dual spec feature.
|
||||||
|
|
||||||
|
v1.13.17.1:
|
||||||
|
|
||||||
|
- Fixed Priests hanging on login on the retail client.
|
||||||
|
|
||||||
|
v1.13.17:
|
||||||
|
|
||||||
|
- Internal maintainability updates. There are so many versions of the game now, updates need to be as easy and safe as possible.
|
||||||
|
- Improved reliability of Slice-n-Dice predicted length when changing talents.
|
||||||
|
- Improved various modules's ability to respond to the player's maximum power type changing (going from 5 max combo points to 6, for example).
|
||||||
|
- Fixed invalid texture layers specified on a variety of textures (10.0 fix).
|
||||||
|
- Removed HolyPowerNumeric text from the configuration options of several modules that it didn't belong with.
|
||||||
|
- Fixed combo points in Classic Era clients.
|
||||||
|