Compare commits

..

19 Commits

Author SHA1 Message Date
666bd12126 Updated TOC for 8.0 2018-07-16 22:56:17 -05:00
941c633a32 Updated changelog 2018-07-16 14:33:17 -05:00
af73b87626 More rune updates for 8.0
It looks like the entire game-side code for runes and rune events have been re-done, so this module was failing to properly update rune availability. I've switched to a model of ignoring the rune index coming in from the update event and just rebuilding my internal state of rune availability/cooldown for all runes on each event (sometimes the incoming rune index was 32760 or a huge negative number...looks like garbage values). This is how the built-in rune frame is handling things now as well.

I also tweaked the shine fade-in to not create a new function every shine. Whoops.
2018-07-16 11:36:24 -05:00
37b31ab3fd Set DH pain/fury colors to match 8.0 default UI 2018-07-16 11:36:24 -05:00
097c5802e0 Don't show castbar "show rank" option on BfA
All the spellcasting event callbacks need their signatures changed, but I can't cleanly do that without breaking Legion compatibility. So that will have to wait, I think. Castbars seem to be working for now...
The simplest solution is probably to register different callbacks for BfA versus pre-BfA, but that seems ugly.
2018-07-16 11:36:24 -05:00
30281ddb76 Updated changelog 2018-06-21 00:04:36 -05:00
5701b72300 Fixed color when rolling 5 buffs 2018-06-20 18:06:45 -05:00
0aad165944 Fixed GCD in BfA 2018-06-07 00:18:38 -05:00
b3757f4892 Missed this change note last time 2018-06-07 00:01:21 -05:00
a4d7b3302f Initial dump of BfA compatibility
Updated for:
- SPELL_POWER_* constants becoming Enum.PowerType.*
- Rank no longer existing in return values for UnitAura, UnitBuff, UnitDebuff, UnitCastingInfo, UnitChannelInfo
- UNIT_POWER event becoming UNIT_POWER_UPDATE
- UnitPopupFrames no longer existing
- Removed events: PLAYER_PET_CHANGED, UNIT_MAXPOWER, PET_BAR_CHANGED, UNIT_DYNAMIC_FLAGS
- Texture return value from UnitAura type changing (name -> id)
- All Warlock specializations using soul shards
- Death Knight rune changes

Haven't tested all classes/specializations yet, so I'm sure I missed some stuff.
Probably need to add support for the new circular cooldown wipe flourish added in the base client.
Saw a problem with cooldown flashes being delayed on DK runes becoming available that probably need to be fixed.
2018-06-06 22:57:35 -05:00
c9e93e8219 Added Gap setting between upper and lower text
Partial merge of pull request #1 from lrds (https://github.com/parnic/ice-hud/pull/1). Removed the localization change because loc is managed on the wowace side.
2018-06-06 20:20:08 -05:00
0dddbd9b1a Show text on Absorb and AltMana with DogTags disabled 2018-02-10 17:45:09 -06:00
8105567792 Fixed Insanity display with DogTags disabled
Apparently internally Insanity is multiplied by 100 from the value that's actually displayed on the ui (so the internal max for my test character is 10500 while the displayed amount is 105).
2018-02-10 17:44:32 -06:00
5cf4ec7457 Moved Round down for other modules to use 2018-02-10 17:41:44 -06:00
6d2a6392eb Updated TOC for 7.3 2017-08-31 16:10:36 -05:00
89f60cb34f Added raid icon toggle to Info modules 2017-08-30 23:29:20 -05:00
3ce982bb71 Updated changelog 2017-08-30 23:18:03 -05:00
fcf156e048 Updated shard texture for Warlocks 2017-08-30 23:10:22 -05:00
aa559113eb Updated shard display for Destro Warlocks
Ticket #234, thanks stencil!
2017-06-17 20:38:12 -05:00
73 changed files with 772 additions and 2635 deletions

View File

@ -1,58 +0,0 @@
# description of this workflow, can be anything you want
name: Package and release
# we need to let GitHub know _when_ we want to release, typically only when we create a new tag.
# this will target only tags, and not all pushes to the master branch.
# this part can be heavily customized to your liking, like targeting only tags that match a certain word,
# other branches or even pullrequests.
on:
push:
tags:
- '**'
# a workflow is built up as jobs, and within these jobs are steps
jobs:
# "release" is a job, you can name it anything you want
release:
# we can run our steps on pretty much anything, but the "ubuntu-latest" image is a safe bet
runs-on: ubuntu-latest
# specify the environment variables used by the packager, matching the secrets from the project on GitHub
env:
CF_API_KEY: ${{ secrets.CF_API_KEY }}
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
# for your own token, the name cannot start with "GITHUB_"
# "steps" holds a list of all the steps needed to package and release our AddOn
steps:
# we first have to clone the AddOn project, this is a required step
- name: Clone project
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
- name: Package and release
uses: BigWigsMods/packager@v2
# another example where we supply additional arguments, this example is specifically to release
# for the Classic version of the game
- name: Package and release for Classic
uses: BigWigsMods/packager@v2
with:
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

View File

@ -1,3 +1,2 @@
Parnic <parnic@parnic.com> Parnic <chris@parnic.com>
rokiyo <rokiyo@example.com> Rokiyo <Rokiyo@example.com>
Parnic <parnic@parnic.com> Chris Pickett <chris@perniciousgames.com>

View File

@ -24,7 +24,7 @@ externals:
tag: latest
libs/AceGUI-3.0:
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceGUI-3.0
tag: latest
tag: latest
libs/AceGUI-3.0-SharedMediaWidgets:
url: svn://svn.wowace.com/wow/ace-gui-3-0-shared-media-widgets/mainline/trunk/AceGUI-3.0-SharedMediaWidgets
tag: latest
@ -37,18 +37,15 @@ externals:
libs/AceLocale-3.0:
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceLocale-3.0
tag: latest
libs/AceHook-3.0:
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceHook-3.0
tag: latest
libs/LibRangeCheck-2.0:
url: https://github.com/WeakAuras/LibRangeCheck-2.0/
url: svn://svn.wowace.com/wow/librangecheck-2-0/mainline/trunk/LibRangeCheck-2.0
libs/LibSharedMedia-3.0:
url: svn://svn.wowace.com/wow/libsharedmedia-3-0/mainline/trunk
tag: latest
libs/LibDogTag-3.0:
url: https://github.com/parnic/LibDogTag-3.0
url: git://git.wowace.com/wow/libdogtag-3-0/mainline.git
libs/LibDogTag-Unit-3.0:
url: https://github.com/parnic/LibDogTag-Unit-3.0
url: git://git.wowace.com/wow/libdogtag-unit-3-0/mainline.git
libs/LibDBIcon-1.0:
url: svn://svn.wowace.com/wow/libdbicon-1-0/mainline/trunk/LibDBIcon-1.0
libs/LibDualSpec-1.0:
@ -61,16 +58,11 @@ optional-dependencies:
move-folders:
IceHUD/IceHUD_Options: IceHUD_Options
IceHUD/libs/LibRangeCheck-2.0/LibRangeCheck-2.0: IceHUD/libs/LibRangeCheck-2.0
tools-used:
- libdatabroker-1-1
ignore:
- readme.md
- FUNDING.yml
- this_version.md
manual-changelog: this_version.md
enable-nolib-creation: yes
manual-changelog: changelog.txt

View File

@ -1,3 +0,0 @@
github: parnic
ko_fi: parnic
custom: "https://www.paypal.me/parnic"

View File

@ -415,7 +415,7 @@ do
type='range',
name = L["Bar vertical offset"],
desc = L["Adjust the vertical placement of this bar"],
min = -600,
min = -400,
max = 600,
step = 1,
get = function()
@ -436,7 +436,7 @@ do
type='range',
name = L["Bar horizontal adjust"],
desc = L["This is a per-pixel horizontal adjustment. You should probably use the 'offset' setting above as it is designed to snap bars together. This may be used in the case of a horizontal bar needing to be positioned outside the normal bar locations."],
min = -600,
min = -400,
max = 600,
step = 1,
get = function()
@ -626,7 +626,7 @@ do
v = DogTag:CleanCode(v)
end
self.moduleSettings.upperText = strtrim(v)
self.moduleSettings.upperText = v
self:RegisterFontStrings()
self:Redraw()
end,
@ -655,7 +655,7 @@ do
v = DogTag:CleanCode(v)
end
self.moduleSettings.lowerText = strtrim(v)
self.moduleSettings.lowerText = v
self:RegisterFontStrings()
self:Redraw()
end,
@ -1040,7 +1040,7 @@ end
-- Creates the actual bar
function IceBarElement.prototype:CreateBar()
self.barFrame = self:BarFactory(self.barFrame, "LOW", "ARTWORK", "Bar")
self.barFrame = self:BarFactory(self.barFrame, "LOW", "ARTWORK")
self:SetBarCoord(self.barFrame)
self.barFrame.bar:SetBlendMode(self.settings.barBlendMode)
@ -1050,9 +1050,9 @@ end
-- Returns a barFrame & barFrame.bar
-- Rokiyo: Currently keeping old behaviour of running through bar creation on every Redraw, but I'm not convinced we need to.
function IceBarElement.prototype:BarFactory(barFrame, frameStrata, textureLayer, nameSuffix)
function IceBarElement.prototype:BarFactory(barFrame, frameStrata, textureLayer)
if not (barFrame) then
barFrame = CreateFrame("Frame", "IceHUD_"..self.elementName.."_"..(nameSuffix or "Bar"), self.frame)
barFrame = CreateFrame("Frame", nil, self.frame)
end
barFrame:SetFrameStrata(frameStrata and frameStrata or "LOW")
@ -1584,7 +1584,7 @@ function IceBarElement.prototype:CreateMarker(idx)
self.Markers[idx] = nil
end
self.Markers[idx] = self:BarFactory(self.Markers[idx], "MEDIUM", "OVERLAY", "Marker"..idx)
self.Markers[idx] = self:BarFactory(self.Markers[idx], "MEDIUM", "OVERLAY")
local color = self.moduleSettings.markers[idx].color
self.Markers[idx].bar:SetVertexColor(color.r, color.g, color.b, self.alpha)

View File

@ -13,31 +13,10 @@ IceCastBar.prototype.unit = nil
IceCastBar.prototype.current = nil
local SPELL_POWER_MANA = SPELL_POWER_MANA
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_MANA = Enum.PowerType.Mana
end
local UnitCastingInfo, UnitChannelInfo = UnitCastingInfo, UnitChannelInfo
if not UnitCastingInfo then
UnitCastingInfo = CastingInfo
UnitChannelInfo = ChannelInfo
end
-- Fulzamoth 2019-09-27 : Use LibClassicCasterino if it's there so we can use TargetCast
-- module in Classic WoW
if IceHUD.WowClassic then
LibClassicCasterino = LibStub("LibClassicCasterino", true)
if LibClassicCasterino then
UnitCastingInfo = function(unit)
return LibClassicCasterino:UnitCastingInfo(unit)
end
UnitChannelInfo = function(unit)
return LibClassicCasterino:UnitChannelInfo(unit)
end
end
end
-- end Fulzamoth change
local AuraIconWidth = 20
local AuraIconHeight = 20
@ -61,55 +40,21 @@ end
function IceCastBar.prototype:Enable(core)
IceCastBar.super.prototype.Enable(self, core)
-- Fulzamoth 2019-09-27 : LibClassicCasterino support
-- Setup callback to the library, and route events to
-- IceHUD's handler functions.
if LibClassicCasterino then
local CastbarEventHandler = function(event, ...) -- unitTarget, castGUID, spellID
if (event == "UNIT_SPELLCAST_START") then
return IceCastBar.prototype.SpellCastStart(self, event, ...)
elseif (event == "UNIT_SPELLCAST_DELAYED") then
return IceCastBar.prototype.SpellCastDelayed(self, event, ...)
elseif (event == "UNIT_SPELLCAST_STOP") then
return IceCastBar.prototype.SpellCastStop(self, event, ...)
elseif (event == "UNIT_SPELLCAST_FAILED") then
return IceCastBar.prototype.SpellCastFailed(self, event, ...)
elseif (event == "UNIT_SPELLCAST_INTERRUPTED") then
return IceCastBar.prototype.SpellCastInterrupted(self, event, ...)
elseif (event == "UNIT_SPELLCAST_CHANNEL_START") then
return IceCastBar.prototype.SpellCastChannelStart(self, event, ...)
elseif (event == "UNIT_SPELLCAST_CHANNEL_UPDATE") then
return IceCastBar.prototype.SpellCastChannelUpdate(self, event, ...)
elseif (event == "UNIT_SPELLCAST_CHANNEL_STOP") then
return IceCastBar.prototype.SpellCastChannelStop(self, event, ...)
end
end
LibClassicCasterino.RegisterCallback(self,"UNIT_SPELLCAST_START", CastbarEventHandler)
LibClassicCasterino.RegisterCallback(self,"UNIT_SPELLCAST_DELAYED", CastbarEventHandler) -- only for player
LibClassicCasterino.RegisterCallback(self,"UNIT_SPELLCAST_STOP", CastbarEventHandler)
LibClassicCasterino.RegisterCallback(self,"UNIT_SPELLCAST_FAILED", CastbarEventHandler)
LibClassicCasterino.RegisterCallback(self,"UNIT_SPELLCAST_INTERRUPTED", CastbarEventHandler)
LibClassicCasterino.RegisterCallback(self,"UNIT_SPELLCAST_CHANNEL_START", CastbarEventHandler)
LibClassicCasterino.RegisterCallback(self,"UNIT_SPELLCAST_CHANNEL_UPDATE", CastbarEventHandler) -- only for player
LibClassicCasterino.RegisterCallback(self,"UNIT_SPELLCAST_CHANNEL_STOP", CastbarEventHandler)
else -- No LibClassicCasterino, or we're not on Classic, so use IceHUD's normal event handlers.
self:RegisterEvent("UNIT_SPELLCAST_SENT", "SpellCastSent") -- "player", spell, rank, target
self:RegisterEvent("CURRENT_SPELL_CAST_CHANGED", "SpellCastChanged")
self:RegisterEvent("UNIT_SPELLCAST_START", "SpellCastStart") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_STOP", "SpellCastStop") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_SENT", "SpellCastSent") -- "player", spell, rank, target
self:RegisterEvent("CURRENT_SPELL_CAST_CHANGED", "SpellCastChanged")
self:RegisterEvent("UNIT_SPELLCAST_START", "SpellCastStart") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_STOP", "SpellCastStop") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_FAILED", "SpellCastFailed") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED", "SpellCastInterrupted") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_FAILED", "SpellCastFailed") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED", "SpellCastInterrupted") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_DELAYED", "SpellCastDelayed") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED", "SpellCastSucceeded") -- "player", spell, rank
self:RegisterEvent("UNIT_SPELLCAST_DELAYED", "SpellCastDelayed") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED", "SpellCastSucceeded") -- "player", spell, rank
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_START", "SpellCastChannelStart") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_UPDATE", "SpellCastChannelUpdate") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_STOP", "SpellCastChannelStop") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_START", "SpellCastChannelStart") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_UPDATE", "SpellCastChannelUpdate") -- unit, spell, rank
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_STOP", "SpellCastChannelStop") -- unit, spell, rank
end
self:Show(false)
end
@ -146,7 +91,7 @@ function IceCastBar.prototype:GetOptions()
end,
order = 39.998
}
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
opts["showSpellRank"] =
{
type = 'toggle',
@ -407,24 +352,21 @@ end
function IceCastBar.prototype:StartBar(action, message)
local spell, rank, displayName, icon, startTime, endTime, isTradeSkill
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
spell, rank, displayName, icon, startTime, endTime, isTradeSkill = UnitCastingInfo(self.unit)
else
spell, displayName, icon, startTime, endTime, isTradeSkill = UnitCastingInfo(self.unit)
end
if not (spell) then
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
spell, rank, displayName, icon, startTime, endTime = UnitChannelInfo(self.unit)
else
spell, displayName, icon, startTime, endTime = UnitChannelInfo(self.unit)
end
end
-- Fulzamoth 2019-09-27 : LibClassicCasterino won't return spell info on target's failed or interrupted cast
if LibClassicCasterino and not spell then
self:StopBar()
elseif not spell then
return
if not spell then
return
end
if icon ~= nil then
@ -450,7 +392,7 @@ function IceCastBar.prototype:StartBar(action, message)
self.actionDuration = 1 -- instants/failures
end
if not (message) and spell then
if not (message) then
self.actionMessage = spell .. (self.moduleSettings.showSpellRank and self:GetShortRank(rank) or "")
end
@ -470,7 +412,7 @@ function IceCastBar.prototype:StopBar()
end
function IceCastBar.prototype:GetShortRank(rank)
if IceHUD.SpellFunctionsReturnRank and rank then
if (rank) then
local _, _, sRank = string.find(rank, "(%d+)")
if (sRank) then
return " (" .. sRank .. ")"
@ -485,30 +427,30 @@ end
-- NORMAL SPELLS --
-------------------------------------------------------------------------------
function IceCastBar.prototype:SpellCastSent(event, unit, target, castGuid, spellId)
function IceCastBar.prototype:SpellCastSent(event, unit, spell, rank, target, lineId)
if (unit ~= self.unit) then return end
IceHUD:Debug("SpellCastSent", unit, target, castGuid, spellId)
IceHUD:Debug("SpellCastSent", unit, spell, rank, target, lineId)
end
function IceCastBar.prototype:SpellCastChanged(event, cancelled)
IceHUD:Debug("SpellCastChanged", cancelled)
function IceCastBar.prototype:SpellCastChanged(event, arg1)
IceHUD:Debug("SpellCastChanged", arg1)
end
function IceCastBar.prototype:SpellCastStart(event, unit, castGuid, spellId)
function IceCastBar.prototype:SpellCastStart(event, unit, spell, rank, lineId, spellId)
if (unit ~= self.unit) then return end
IceHUD:Debug("SpellCastStart", unit, castGuid, spellId)
IceHUD:Debug("SpellCastStart", unit, spell, rank, lineId, spellId)
--UnitCastingInfo(unit)
self:StartBar(IceCastBar.Actions.Cast)
self.current = castGuid
self.current = lineId
end
function IceCastBar.prototype:SpellCastStop(event, unit, castGuid, spellId)
function IceCastBar.prototype:SpellCastStop(event, unit, spell, rank, lineId, spellId)
if (unit ~= self.unit) then return end
IceHUD:Debug("SpellCastStop", unit, castGuid, spellId)
IceHUD:Debug("SpellCastStop", unit, spell, self.current, rank, lineId, spellId)
-- ignore if not coming from current spell
if (self.current and castGuid and self.current ~= castGuid) then
if (self.current and lineId and self.current ~= lineId) then
return
end
@ -522,12 +464,12 @@ function IceCastBar.prototype:SpellCastStop(event, unit, castGuid, spellId)
end
function IceCastBar.prototype:SpellCastFailed(event, unit, castGuid, spellId)
function IceCastBar.prototype:SpellCastFailed(event, unit, spell, rank, lineId, spellId)
if (unit ~= self.unit) then return end
IceHUD:Debug("SpellCastFailed", unit, castGuid, spellId)
IceHUD:Debug("SpellCastFailed", unit, self.current, lineId, spellId)
-- ignore if not coming from current spell
if (self.current and castGuid and self.current ~= castGuid) then
if (self.current and lineId and self.current ~= lineId) then
return
end
@ -550,12 +492,12 @@ function IceCastBar.prototype:SpellCastFailed(event, unit, castGuid, spellId)
self:StartBar(IceCastBar.Actions.Failure, "Failed")
end
function IceCastBar.prototype:SpellCastInterrupted(event, unit, castGuid, spellId)
function IceCastBar.prototype:SpellCastInterrupted(event, unit, spell, rank, lineId, spellId)
if (unit ~= self.unit) then return end
IceHUD:Debug("SpellCastInterrupted", unit, castGuid, spellId)
IceHUD:Debug("SpellCastInterrupted", unit, self.current, lineId, spellId)
-- ignore if not coming from current spell
if (self.current and castGuid and self.current ~= castGuid) then
if (self.current and lineId and self.current ~= lineId) then
return
end
@ -564,11 +506,11 @@ function IceCastBar.prototype:SpellCastInterrupted(event, unit, castGuid, spellI
self:StartBar(IceCastBar.Actions.Failure, "Interrupted")
end
function IceCastBar.prototype:SpellCastDelayed(event, unit, castGuid, spellId)
function IceCastBar.prototype:SpellCastDelayed(event, unit, delay)
if (unit ~= self.unit) then return end
--IceHUD:Debug("SpellCastDelayed", unit, UnitCastingInfo(unit))
local endTime = select(IceHUD.SpellFunctionsReturnRank and 6 or 5, UnitCastingInfo(self.unit))
local endTime = select(IceHUD.WowVer < 80000 and 6 or 5, UnitCastingInfo(self.unit))
if (endTime and self.actionStartTime) then
-- apparently this check is needed, got nils during a horrible lag spike
@ -577,9 +519,9 @@ function IceCastBar.prototype:SpellCastDelayed(event, unit, castGuid, spellId)
end
function IceCastBar.prototype:SpellCastSucceeded(event, unit, castGuid, spellId)
function IceCastBar.prototype:SpellCastSucceeded(event, unit, spell, rank, lineId, spellId)
if (unit ~= self.unit) then return end
--IceHUD:Debug("SpellCastSucceeded", unit, castGuid, spellId)
--IceHUD:Debug("SpellCastSucceeded", unit, spell, rank)
-- never show on channeled (why on earth does this event even fire when channeling starts?)
if (self.action == IceCastBar.Actions.Channel) then
@ -587,12 +529,10 @@ function IceCastBar.prototype:SpellCastSucceeded(event, unit, castGuid, spellId)
end
-- ignore if not coming from current spell
if (self.current and self.current ~= castGuid) then
if (self.current and self.current ~= lineId) then
return
end
local spell = GetSpellInfo(spellId)
-- show after normal successfull cast
if (self.action == IceCastBar.Actions.Cast) then
self:StartBar(IceCastBar.Actions.Success, spell.. self:GetShortRank(rank))
@ -629,7 +569,7 @@ function IceCastBar.prototype:SpellCastChannelUpdate(event, unit)
--IceHUD:Debug("SpellCastChannelUpdate", unit, UnitChannelInfo(unit))
local spell, rank, displayName, icon, startTime, endTime
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
spell, rank, displayName, icon, startTime, endTime = UnitChannelInfo(unit)
else
spell, displayName, icon, startTime, endTime = UnitChannelInfo(unit)

View File

@ -41,26 +41,6 @@ IceCore.TextDecorationStyle = {
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 LACERATE_SPELL_ID = 33745
local MAELSTROM_SPELL_ID = 53817
@ -114,7 +94,6 @@ function IceCore.prototype:SetupDefaults()
bHideDuringPetBattles = true,
bHideInBarberShop = true,
bHideDuringShellGame = true,
},
global = {
lastRunVersion = 0,
@ -194,13 +173,6 @@ function IceCore.prototype:CheckDisplayUpdateMessage()
self.settings.modules["DruidMana"] = nil
end
end
if self.accountSettings.lastRunVersion <= 20180720033008 then
if self.settings.modules["HarmonyPower"] ~= nil then
self.settings.modules["Chi"] = self.settings.modules["HarmonyPower"]
self.settings.modules["HarmonyPower"] = nil
self.settings.colors["ChiNumeric"] = self.settings.colors["HarmonyPowerNumeric"]
end
end
self.accountSettings.lastRunVersion = thisVersion
end
end
@ -271,21 +243,10 @@ function IceCore.prototype:Enable(userToggle)
IceHUD_Options:GenerateModuleOptions()
end
if UnitCanPetBattle then
self.IceHUDFrame:RegisterEvent("PET_BATTLE_OPENING_START")
self.IceHUDFrame:RegisterEvent("PET_BATTLE_OVER")
end
if GetBarberShopStyleInfo then
self.IceHUDFrame:RegisterEvent("BARBER_SHOP_OPEN")
self.IceHUDFrame:RegisterEvent("BARBER_SHOP_CLOSE")
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("PLAYER_REGEN_ENABLED", IceHUD.PLAYER_REGEN_ENABLED)
self.IceHUDFrame:RegisterEvent("PLAYER_REGEN_DISABLED", IceHUD.PLAYER_REGEN_DISABLED)
self.IceHUDFrame:RegisterEvent("PET_BATTLE_OPENING_START")
self.IceHUDFrame:RegisterEvent("PET_BATTLE_OVER")
self.IceHUDFrame:RegisterEvent("BARBER_SHOP_OPEN")
self.IceHUDFrame:RegisterEvent("BARBER_SHOP_CLOSE")
self.IceHUDFrame:SetScript("OnEvent", function(self, event, ...)
if (event == "PET_BATTLE_OPENING_START") then
if IceHUD.IceCore.settings.bHideDuringPetBattles then
@ -303,50 +264,6 @@ function IceCore.prototype:Enable(userToggle)
if IceHUD.IceCore.settings.bHideInBarberShop then
self:Show()
end
elseif (event == "UNIT_AURA") then
local unit = ...
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: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
elseif (event == "UNIT_EXITED_VEHICLE") then
self:UnregisterEvent("UNIT_EXITED_VEHICLE")
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)
@ -581,14 +498,10 @@ function IceCore.prototype:Disable(userToggle)
end
end
if UnitCanPetBattle then
self.IceHUDFrame:UnregisterEvent("PET_BATTLE_OPENING_START")
self.IceHUDFrame:UnregisterEvent("PET_BATTLE_OVER")
end
if GetBarberShopStyleInfo then
self.IceHUDFrame:UnregisterEvent("BARBER_SHOP_OPEN")
self.IceHUDFrame:UnregisterEvent("BARBER_SHOP_CLOSE")
end
self.IceHUDFrame:UnregisterEvent("PET_BATTLE_OPENING_START")
self.IceHUDFrame:UnregisterEvent("PET_BATTLE_OVER")
self.IceHUDFrame:UnregisterEvent("BARBER_SHOP_OPEN")
self.IceHUDFrame:UnregisterEvent("BARBER_SHOP_CLOSE")
self.IceHUDFrame:SetScript("OnEvent", nil)
self.enabled = false

View File

@ -69,7 +69,7 @@ function IceElement.prototype:Create(parent)
self.parent = parent
if not self.masterFrame then
self.masterFrame = CreateFrame("Frame", "IceHUD_Element_"..self.elementName, self.parent)
self.masterFrame = CreateFrame("Frame", nil, self.parent)
self.masterFrame:SetFrameStrata("MEDIUM")
end
self:CreateFrame()

View File

@ -1,12 +1,14 @@
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
IceHUD = LibStub("AceAddon-3.0"):NewAddon("IceHUD", "AceConsole-3.0", "AceHook-3.0")
IceHUD = LibStub("AceAddon-3.0"):NewAddon("IceHUD", "AceConsole-3.0")
local IceHUD = IceHUD
local SML = LibStub("LibSharedMedia-3.0")
local ACR = LibStub("AceConfigRegistry-3.0")
local ConfigDialog = LibStub("AceConfigDialog-3.0")
local icon = LibStub("LibDBIcon-1.0", true)
local icon = LibStub("LibDBIcon-1.0")
local AceGUI = LibStub("AceGUI-3.0")
local AceSerializer = LibStub("AceSerializer-3.0", 1)
local pendingModuleLoads = {}
local bReadyToRegisterModules = false
@ -15,59 +17,13 @@ IceHUD.CurrTagVersion = 3
IceHUD.debugging = false
IceHUD.WowVer = select(4, GetBuildInfo())
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 = IceHUD.WowVer < 80000 and "UNIT_POWER" or "UNIT_POWER_UPDATE"
IceHUD.validBarList = { "Bar", "HiBar", "RoundBar", "ColorBar", "RivetBar", "RivetBar2", "CleanCurves", "GlowArc",
"BloodGlaives", "ArcHUD", "FangRune", "DHUD", "CleanCurvesOut", "CleanTank", "PillTank", "GemTank" }
IceHUD.validCustomModules = {Bar="Buff/Debuff watcher", Counter="Buff/Debuff stack counter", CD="Cooldown bar", Health="Health bar", Mana="Mana bar", CounterBar="Stack count bar"}
IceHUD_UnitFrame_DropDown = CreateFrame("Frame", "IceHUD_UnitFrame_DropDown", UIParent, "UIDropDownMenuTemplate")
--@debug@
IceHUD.optionsLoaded = true
--@end-debug@
@ -92,43 +48,6 @@ end
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"
StaticPopupDialogs["ICEHUD_CUSTOM_BAR_CREATED"] =
@ -339,10 +258,6 @@ function IceHUD:NotifyOptionsChange()
end
function IceHUD:OnEnable(isFirst)
-- if isFirst then
self:SetDebugging(self.IceCore:GetDebug())
self.debugFrame = ChatFrame1
-- end
self:Debug("IceHUD:OnEnable()")
if self.db.profile.enable then
@ -358,6 +273,11 @@ function IceHUD:OnEnable(isFirst)
--@debug@
IceHUD_Options:OnLoad()
--@end-debug@
-- if isFirst then
self:SetDebugging(self.IceCore:GetDebug())
self.debugFrame = ChatFrame1
-- end
end
-- add settings changes/updates here so that existing users don't lose their settings
@ -404,7 +324,7 @@ end
-- blizzard interface options
local blizOptionsPanel = CreateFrame("FRAME", "IceHUDConfigPanel", UIParent)
blizOptionsPanel.name = "IceHUD"
blizOptionsPanel.button = CreateFrame("BUTTON", "IceHUDOpenConfigButton", blizOptionsPanel, IceHUD.UsesUIPanelButtonTemplate and "UIPanelButtonTemplate" or "UIPanelButtonTemplate2")
blizOptionsPanel.button = CreateFrame("BUTTON", "IceHUDOpenConfigButton", blizOptionsPanel, IceHUD.WowVer >= 50000 and "UIPanelButtonTemplate" or "UIPanelButtonTemplate2")
blizOptionsPanel.button:SetText("Open IceHUD configuration")
blizOptionsPanel.button:SetWidth(240)
blizOptionsPanel.button:SetHeight(30)
@ -446,11 +366,7 @@ function IceHUD:Debug(...)
for n=1,select('#', ...) do
msg = msg .. tostring(select(n, ...)) .. " "
end
if self.debugFrame then
self.debugFrame:AddMessage(msg)
else
print(msg)
end
self.debugFrame:AddMessage(msg)
end
end
@ -496,7 +412,7 @@ function IceHUD:GetAuraCount(auraType, unit, ability, onlyMine, matchByName)
local i = 1
local name, _, texture, applications
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
name, _, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
else
name, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
@ -508,7 +424,7 @@ function IceHUD:GetAuraCount(auraType, unit, ability, onlyMine, matchByName)
end
i = i + 1
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
name, _, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
else
name, texture, applications = UnitAura(unit, i, auraType..(onlyMine and "|PLAYER" or ""))
@ -521,17 +437,17 @@ end
do
local retval = {}
function IceHUD:HasBuffs(unit, spellIDs, filter)
function IceHUD:HasBuffs(unit, spellIDs)
for i=1, #spellIDs do
retval[i] = false
end
local i = 1
local name, _, texture, applications, _, _, _, _, _, _, auraID
if IceHUD.SpellFunctionsReturnRank then
name, _, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
if IceHUD.WowVer < 80000 then
name, _, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i)
else
name, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
name, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i)
end
while name do
for i=1, #spellIDs do
@ -542,43 +458,15 @@ do
end
i = i + 1
if IceHUD.SpellFunctionsReturnRank then
name, _, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
if IceHUD.WowVer < 80000 then
name, _, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i)
else
name, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i, filter)
name, texture, applications, _, _, _, _, _, _, auraID = UnitAura(unit, i)
end
end
return retval
end
function IceHUD:HasDebuffs(unit, spellIDs, filter)
return IceHUD:HasBuffs(unit, spellIDs, filter and filter.."|HARMFUL" or "HARMFUL")
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
function IceHUD:OnDisable()
@ -713,19 +601,15 @@ local function CheckLFGMode(mode)
end
function IceHUD:GetIsInLFGGroup()
if not GetLFGMode then
return false
end
local mode, submode
if LE_LFG_CATEGORY_LFD then
if IceHUD.WowVer >= 50000 then
mode, submode = GetLFGMode(LE_LFG_CATEGORY_LFD)
else
mode, submode = GetLFGMode()
end
local IsInLFGGroup = CheckLFGMode(mode)
if not LE_LFG_CATEGORY_LFD then
if IceHUD.WowVer < 50000 then
return IsInLFGGroup
end
@ -745,69 +629,31 @@ function IceHUD:GetIsInLFGGroup()
return IsInLFGGroup
end
local BLACKLISTED_UNIT_MENU_OPTIONS = {}
if UnitPopupButtons then
BLACKLISTED_UNIT_MENU_OPTIONS = {
SET_FOCUS = "ICEHUD_SET_FOCUS",
CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS",
LOCK_FOCUS_FRAME = true,
UNLOCK_FOCUS_FRAME = true,
}
if select(2, UnitClass("player")) ~= "WARLOCK" then
BLACKLISTED_UNIT_MENU_OPTIONS[PET_DISMISS] = "ICEHUD_PET_DISMISS"
end
local BLACKLISTED_UNIT_MENU_OPTIONS = {
SET_FOCUS = "ICEHUD_SET_FOCUS",
CLEAR_FOCUS = "ICEHUD_CLEAR_FOCUS",
PET_DISMISS = "ICEHUD_PET_DISMISS",
LOCK_FOCUS_FRAME = true,
UNLOCK_FOCUS_FRAME = true,
}
UnitPopupButtons["ICEHUD_SET_FOCUS"] = {
text = L["Type %s to set focus"]:format(SLASH_FOCUS1),
tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."],
dist = 0,
}
UnitPopupButtons["ICEHUD_SET_FOCUS"] = {
text = L["Type %s to set focus"]:format(SLASH_FOCUS1),
tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."],
dist = 0,
}
UnitPopupButtons["ICEHUD_CLEAR_FOCUS"] = {
text = L["Type %s to clear focus"]:format(SLASH_CLEARFOCUS1),
tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."],
dist = 0,
}
UnitPopupButtons["ICEHUD_CLEAR_FOCUS"] = {
text = L["Type %s to clear focus"]:format(SLASH_CLEARFOCUS1),
tooltipText = L["Blizzard currently does not provide a proper way to right-click focus with custom unit frames."],
dist = 0,
}
UnitPopupButtons["ICEHUD_PET_DISMISS"] = {
text = L["Use your Dismiss Pet spell to dismiss a pet"],
tooltipText = L["Blizzard currently does not provide a proper way to right-click dismiss a pet with custom unit frames."],
dist = 0,
}
elseif UnitPopupSetFocusButtonMixin then
IceHUDUnitPopupSetFocusButtonMixin = CreateFromMixins(UnitPopupButtonBaseMixin)
function IceHUDUnitPopupSetFocusButtonMixin:GetText()
return L["Type %s to set focus"]:format(SLASH_FOCUS1)
end
function IceHUDUnitPopupSetFocusButtonMixin:OnClick()
end
IceHUDUnitPopupClearFocusButtonMixin = CreateFromMixins(UnitPopupButtonBaseMixin)
function IceHUDUnitPopupClearFocusButtonMixin:GetText()
return L["Type %s to clear focus"]:format(SLASH_CLEARFOCUS1)
end
function IceHUDUnitPopupClearFocusButtonMixin:OnClick()
end
IceHUDUnitPopupPetDismissButtonMixin = CreateFromMixins(UnitPopupButtonBaseMixin)
function IceHUDUnitPopupPetDismissButtonMixin:GetText()
return L["Use your Dismiss Pet spell to dismiss a pet"]
end
function IceHUDUnitPopupPetDismissButtonMixin:CanShow()
return UnitPopupPetDismissButtonMixin:CanShow()
end
function IceHUDUnitPopupPetDismissButtonMixin:OnClick()
end
BLACKLISTED_UNIT_MENU_OPTIONS[SET_FOCUS] = IceHUDUnitPopupSetFocusButtonMixin
BLACKLISTED_UNIT_MENU_OPTIONS[CLEAR_FOCUS] = IceHUDUnitPopupClearFocusButtonMixin
BLACKLISTED_UNIT_MENU_OPTIONS[LOCK_FOCUS_FRAME] = true
BLACKLISTED_UNIT_MENU_OPTIONS[UNLOCK_FOCUS_FRAME] = true
if select(2, UnitClass("player")) ~= "WARLOCK" then
BLACKLISTED_UNIT_MENU_OPTIONS[PET_DISMISS] = IceHUDUnitPopupPetDismissButtonMixin
end
end
UnitPopupButtons["ICEHUD_PET_DISMISS"] = {
text = L["Use your Dismiss Pet spell to dismiss a pet"],
tooltipText = L["Blizzard currently does not provide a proper way to right-click dismiss a pet with custom unit frames."],
dist = 0,
}
local munged_unit_menus = {}
local function munge_unit_menu(menu)
@ -828,34 +674,11 @@ local function munge_unit_menu(menu)
end
local found = false
if data.GetMenuButtons then
local btns = data.GetMenuButtons()
for i=1, #btns do
if btns[i].IsMenu() then
local subbtns = btns[i].GetMenuButtons()
for j=1, #subbtns do
if BLACKLISTED_UNIT_MENU_OPTIONS[subbtns[j]:GetText()] then
found = true
break
end
end
else
if BLACKLISTED_UNIT_MENU_OPTIONS[btns[i]:GetText()] then
found = true
break
end
end
if found then
break
end
end
else
for _, v in ipairs(data) do
if BLACKLISTED_UNIT_MENU_OPTIONS[v] then
found = true
break
end
local _, v
for _, v in ipairs(data) do
if BLACKLISTED_UNIT_MENU_OPTIONS[v] then
found = true
break
end
end
@ -866,42 +689,15 @@ local function munge_unit_menu(menu)
end
local new_data = {}
if data.GetMenuButtons then
local new_buttons_list = {}
local btns = data.GetMenuButtons()
for i=1, #btns do
if btns[i].IsMenu() then
local subbtns = btns[i].GetMenuButtons()
for j=1, #subbtns do
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
for _, v in ipairs(data) do
local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[v]
if v == "PET_DISMISS" and select(2, UnitClass("player")) == "WARLOCK" then
blacklisted = false
end
new_data = data
function new_data:GetMenuButtons()
return new_buttons_list
end
else
for _, v in ipairs(data) do
local blacklisted = BLACKLISTED_UNIT_MENU_OPTIONS[v]
if not blacklisted then
new_data[#new_data+1] = v
elseif blacklisted ~= true then
new_data[#new_data+1] = blacklisted
end
if not blacklisted then
new_data[#new_data+1] = v
elseif blacklisted ~= true then
new_data[#new_data+1] = blacklisted
end
end
local new_menu_name = "ICEHUD_" .. menu
@ -947,6 +743,7 @@ local function figure_unit_menu(unit)
return "PLAYER"
end
IceHUD_UnitFrame_DropDown = CreateFrame("Frame", "IceHUD_UnitFrame_DropDown", UIParent, "UIDropDownMenuTemplate")
if UnitPopupFrames then
UnitPopupFrames[#UnitPopupFrames+1] = "IceHUD_UnitFrame_DropDown"
end
@ -963,53 +760,3 @@ UIDropDownMenu_Initialize(IceHUD_UnitFrame_DropDown, function()
UnitPopup_ShowMenu(IceHUD_UnitFrame_DropDown, menu, IceHUD.DropdownUnit, nil, id)
end
end, "MENU", nil)
function IceHUD:OutOfCombatWrapper(func)
return function(...)
return IceHUD:RunOnLeaveCombat(func, ...)
end
end
do
local in_combat = false
local in_lockdown = false
local actions_to_perform = {}
local pool = setmetatable({}, {__mode='k'})
function IceHUD:PLAYER_REGEN_ENABLED()
in_combat = false
in_lockdown = false
for i, t in ipairs(actions_to_perform) do
t.f(unpack(t, 1, t.n))
actions_to_perform[i] = nil
wipe(t)
pool[t] = true
end
end
function IceHUD:PLAYER_REGEN_DISABLED()
in_combat = true
end
function IceHUD:RunOnLeaveCombat(func, ...)
if not in_combat then
-- out of combat, call right away and return
func(...)
return
end
if not in_lockdown then
in_lockdown = InCombatLockdown() -- still in PLAYER_REGEN_DISABLED
if not in_lockdown then
func(...)
return
end
end
local t = next(pool) or {}
pool[t] = nil
t.f = func
local n = select('#', ...)
t.n = n
for i = 1, n do
t[i] = select(i, ...)
end
actions_to_perform[#actions_to_perform+1] = t
end
end

View File

@ -1,25 +1,15 @@
## Interface: 100000
## Interface-Retail: 100000
## Interface-Classic: 11403
## Interface-BCC: 20504
## Interface-Wrath: 30400
## Interface: 80000
## Author: Parnic, originally created by Iceroth
## Name: IceHUD
## Title: IceHUD |cff7fff7f-Ace3-|r
## Notes: Another HUD addon
#@debug@
## Version: development
#@end-debug@
#@non-debug@
# ## Version: @project-version@
#@end-non-debug@
## Version: @project-version@
## SavedVariables: IceCoreDB
## OptionalDeps: Ace3, LibSharedMedia-3.0, LibDogTag-3.0, LibDogTag-Unit-3.0, LibRangeCheck-2.0, LibDualSpec-1.0, LibDBIcon-1.0, AceGUI-3.0-SharedMediaWidgets
## X-Compatible-With: 70300
## X-Category: HUDs
## X-Website: https://www.wowace.com/projects/ice-hud
## X-Curse-Project-ID: 5394
## X-WoWI-ID: 8149
## X-Wago-ID: 5bGolJN0
#@no-lib-strip@
# Libraries
@ -39,6 +29,7 @@ IceCastBar.lua
IceStackCounter.lua
# IceHUD modules
# - Feel free to comment these out if you like
modules\PlayerHealth.lua
modules\PlayerMana.lua
modules\TargetHealth.lua
@ -101,8 +92,5 @@ modules\ArcaneCharges.lua
modules\RollTheBones.lua
#@do-not-package@
IceHUD_Options\Json.lua
IceHUD_Options\JsonDecode.lua
IceHUD_Options\JsonEncode.lua
IceHUD_Options\Options.lua
#@end-do-not-package@

View File

@ -1,8 +1,4 @@
## Interface: 100000
## Interface-Retail: 100000
## Interface-Classic: 11403
## Interface-BCC: 20504
## Interface-Wrath: 30400
## Interface: 80000
## Title: IceHUD |cff7fff7f-Options-|r
## Author: Parnic
## Version: @project-version@
@ -11,7 +7,4 @@
## Dependencies: IceHUD
## LoadOnDemand: 1
Json.lua
JsonDecode.lua
JsonEncode.lua
Options.lua

View File

@ -1 +0,0 @@
IceHUD.json = {}

View File

@ -1,241 +0,0 @@
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

View File

@ -1,100 +0,0 @@
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

View File

@ -1,8 +1,6 @@
local LibDualSpec = LibStub('LibDualSpec-1.0', true)
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
local icon = LibStub("LibDBIcon-1.0", true)
local AceGUI = LibStub("AceGUI-3.0")
local AceSerializer = LibStub("AceSerializer-3.0", 1)
local icon = LibStub("LibDBIcon-1.0")
local lastCustomModule = "Bar"
IceHUD_Options = {}
@ -73,7 +71,7 @@ This isn't |cff9999ffIceHUD|r - it's Blizzard's Spell Alerts they added in 4.0.1
Expand "|cffffdc42Module Settings|r", expand whatever module you want to move (e.g. PlayerHealth, PlayerMana), and adjust the "Side" and "Offset" settings. "Side" controls whether it's on the left or the right and "Offset" controls how far from center it is.
|cff9999ff14. Which module displays Monk Chi power?|r
Prior to |cff9999ffIceHUD|r v1.11.2, this module was called |cffdcff42HarmonyPower|r. Harmony was the original name for Chi back when 5.0 was in beta, so I used Blizzard's name for it while I was developing for Cataclysm. |cff9999ffIceHUD|r v1.11.2 changed this module to be called |cffdcff42Chi|r.
This module is called |cffdcff42HarmonyPower|r. Harmony was the original name for Chi back when 5.0 was in beta, so I used Blizzard's name for it while I was developing for Cataclysm. I feel like it's too late to change now that many people are familiar with the Harmony name.
|cff9999ff15. How do I add commas/periods into big numbers like health?|r
If you have |cff42ffffDogTags|r enabled, you can open the Text Settings for the module in question and add SeparateDigits() around the tag you're trying to split up. To display Health/MaxHealth with commas, use: [(SeparateDigits(HP):HPColor "/" SeparateDigits(MaxHP):HPColor):Bracket]. To use periods instead of commas, use: [(SeparateDigits(HP, "."):HPColor "/" SeparateDigits(MaxHP, "."):HPColor):Bracket]. Use the /dog help menu to build your own similar tags for Mana, etc.
@ -85,13 +83,7 @@ If you have |cff42ffffDogTags|r enabled, you can open the Text Settings for the
This is a side effect of the animation API that I'm co-opting to force a rotation without having to provide duplicates of every bar texture in the mod. Any bar moving sufficiently quickly and updating rapidly will cause this. |cff9999ffIceHUD|r is intended to be a vertically-oriented mod, so the rotation feature is there for people who are willing to accept the side effects that come with it. My suggestion is to use one of the many horizontally-oriented bar mods out there if you're wanting horizontal bars. |cff42ffffQuartz|r is a good castbar replacement that you can use and disable |cff9999ffIceHUD|r's built-in castbar, for example.
|cff9999ff18. How do I get rid of the bars that showed up beneath the player in the 7.0 patch?|r
Blizzard added a "Personal Resource Display" feature in the 7.0 game client. You can disable it in the Game options -> Interface -> Names -> Personal Resource Display.
|cff9999ff19. Why is there no target castbar for Classic?|r
The Classic game client doesn't offer a reliable way to show castbars for anyone except the player. You can install the LibCasterCasterino addon to enable support, but it's a best guess and not at all accurate.
|cff9999ff20. Why do buff/debuff timers not work in Classic?|r
The Classic game client doesn't provide this information to addons because it wasn't a feature when the game first released. You can install the LibClassicDurations addon to enable support, but it's a best guess and not at all accurate.]]
Blizzard added a "Personal Resource Display" feature in the 7.0 game client. You can disable it in the Game options -> Interface -> Names -> Personal Resource Display.]]
}
}
},
@ -387,7 +379,6 @@ The Classic game client doesn't provide this information to addons because it wa
IceHUD.IceCore.IceHUDFrame:Show()
end
end,
hidden = not UnitCanPetBattle,
order = 34,
},
@ -405,27 +396,8 @@ The Classic game client doesn't provide this information to addons because it wa
IceHUD.IceCore.IceHUDFrame:Show()
end
end,
hidden = not GetBarberShopStyleInfo,
order = 35,
},
bHideDuringShellGame = {
type = 'toggle',
name = L["Hide during shell game"],
desc = L["This will hide the entire mod when playing the BfA Tortollan shell game world quest."],
width = 'double',
get = function()
return IceHUD.IceCore.settings.bHideDuringShellGame
end,
set = function(info, value)
IceHUD.IceCore.settings.bHideDuringShellGame = value
if not value then
IceHUD.IceCore.IceHUDFrame:Show()
end
end,
hidden = not IceHUD.HasShellGame,
order = 36,
},
}
},
@ -759,9 +731,6 @@ function IceHUD_Options:OnLoad()
self:GenerateModuleOptions(true)
self.options.args.colors.args = IceHUD.IceCore:GetColorOptions()
self.options.args.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(IceHUD.db)
--@debug@
IceHUD_Options:SetupProfileImportButtons()
--@end-debug@
-- Add dual-spec support
if IceHUD.db ~= nil and LibDualSpec then
@ -792,14 +761,14 @@ function IceHUD_Options:SetupProfileImportButtons()
editbox:SetLabel("Profile")
editbox:SetFullWidth(true)
editbox:SetFullHeight(true)
local profileTable = IceHUD.deepcopy(IceHUD.db.profile)
local profileTable = deepcopy(IceHUD.db.profile)
IceHUD:removeDefaults(profileTable, IceHUD.IceCore.defaults.profile)
editbox:SetText(IceHUD.json.encode(profileTable))
editbox:SetText(IceHUD:Serialize(profileTable))
editbox:DisableButton(true)
frame:AddChild(editbox)
end,
hidden =
-- hello, snooper! exporting works well enough, but importing is very rough, so enable this at your own peril
-- hello, snooper! this feature doesn't actually work yet, so enabling it won't help you much :)
--[===[@non-debug@
true
--@end-non-debug@]===]
@ -808,7 +777,7 @@ function IceHUD_Options:SetupProfileImportButtons()
--@end-debug@
,
disabled =
-- hello, snooper! exporting works well enough, but importing is very rough, so enable this at your own peril
-- hello, snooper! this feature doesn't actually work yet, so enabling it won't help you much :)
--[===[@non-debug@
true
--@end-non-debug@]===]
@ -829,14 +798,11 @@ function IceHUD_Options:SetupProfileImportButtons()
frame:SetStatusText("Exported profile details")
frame:SetLayout("Flow")
frame:SetCallback("OnClose", function(widget)
local newTable, err = IceHUD.json.decode(widget.children[1]:GetText())
if err ~= nil then
print("failed to import profile: "..err)
else
print("importing profile")
local success, newTable = IceHUD:Deserialize(widget.children[1]:GetText())
if success then
IceHUD:PreProfileChanged()
IceHUD:populateDefaults(newTable, IceHUD.IceCore.defaults.profile)
IceHUD.db.profile = IceHUD.deepcopy(newTable)
IceHUD.db.profile = deepcopy(newTable)
IceHUD:PostProfileChanged()
end
AceGUI:Release(widget)
@ -849,7 +815,7 @@ function IceHUD_Options:SetupProfileImportButtons()
frame:AddChild(editbox)
end,
hidden =
-- hello, snooper! this feature is really rough, so enable it at your own peril
-- hello, snooper! this feature doesn't actually work yet, so enabling it won't help you much :)
--[===[@non-debug@
true
--@end-non-debug@]===]
@ -858,7 +824,7 @@ function IceHUD_Options:SetupProfileImportButtons()
--@end-debug@
,
disabled =
-- hello, snooper! this feature is really rough, so enable it at your own peril
-- hello, snooper! this feature doesn't actually work yet, so enabling it won't help you much :)
--[===[@non-debug@
true
--@end-non-debug@]===]
@ -870,3 +836,7 @@ function IceHUD_Options:SetupProfileImportButtons()
}
end
end
--@debug@
IceHUD_Options:SetupProfileImportButtons()
--@end-debug@

View File

@ -1,37 +0,0 @@
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

View File

@ -128,12 +128,10 @@ end
function IceStackCounter_Enable(frame)
frame:RegisterEvent("UNIT_AURA", "UpdateCustomCount")
frame:RegisterEvent("UNIT_PET", "UpdateCustomCount")
if IceHUD.EventExistsPlayerPetChanged then
if IceHUD.WowVer < 80000 then
frame:RegisterEvent("PLAYER_PET_CHANGED", "UpdateCustomCount")
end
if FocusUnit then
frame:RegisterEvent("PLAYER_FOCUS_CHANGED", "UpdateCustomCount")
end
frame:RegisterEvent("PLAYER_FOCUS_CHANGED", "UpdateCustomCount")
frame:RegisterEvent("PLAYER_DEAD", "UpdateCustomCount")
frame:RegisterEvent("SPELL_UPDATE_CHARGES", "UpdateCustomCount")

View File

@ -19,10 +19,9 @@ IceUnitBar.prototype.hasPet = nil
IceUnitBar.prototype.noFlash = nil
local SPELL_POWER_INSANITY, SPELL_POWER_RAGE = SPELL_POWER_INSANITY, SPELL_POWER_RAGE
if Enum and Enum.PowerType then
local SPELL_POWER_INSANITY = SPELL_POWER_INSANITY
if IceHUD.WowVer >= 80000 then
SPELL_POWER_INSANITY = Enum.PowerType.Insanity
SPELL_POWER_RAGE = Enum.PowerType.Rage
end
-- Constructor --
@ -171,7 +170,7 @@ end
-- Creates the low amount warning frame
function IceUnitBar.prototype:CreateFlashFrame()
if not (self.flashFrame) then
self.flashFrame = CreateFrame("Frame", "IceHUD_"..self.elementName.."_Flash", self.frame)
self.flashFrame = CreateFrame("Frame", nil, self.frame)
end
self.flashFrame:SetFrameStrata("BACKGROUND")
@ -221,7 +220,7 @@ end
function IceUnitBar.prototype:Update()
IceUnitBar.super.prototype.Update(self)
if UnitIsTapped then
if IceHUD.WowVer < 70000 then
self.tapped = UnitIsTapped(self.unit) and (not UnitIsTappedByPlayer(self.unit))
else
self.tapped = UnitIsTapDenied(self.unit)
@ -231,26 +230,13 @@ function IceUnitBar.prototype:Update()
self.maxHealth = UnitHealthMax(self.unit)
self.healthPercentage = self.maxHealth ~= 0 and (self.health/self.maxHealth) or 0
-- note that UnitPowerType returns 2 arguments and UnitPower[Max] accepts a third argument to get the values on a different scale
-- so this technically doesn't get us the answer we want most of the time. too risky to change at this point, though.
self.mana = UnitPower(self.unit, UnitPowerType(self.unit))
self.maxMana = UnitPowerMax(self.unit, UnitPowerType(self.unit))
if UnitPowerType(self.unit) == SPELL_POWER_RAGE and self.maxMana == 1000 then
self.mana = IceHUD:MathRound(self.mana / 10)
self.maxMana = IceHUD:MathRound(self.maxMana / 10)
end
if IceHUD.WowVer >= 70300 and UnitPowerType(self.unit) == SPELL_POWER_INSANITY then
self.mana = IceHUD:MathRound(self.mana / 100)
self.maxMana = IceHUD:MathRound(self.maxMana / 100)
end
-- 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
self.manaPercentage = self.maxMana ~= 0 and (self.mana/self.maxMana) or 0
local locClass
locClass, self.unitClass = UnitClass(self.unit)

21
LICENSE
View File

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2021-2022 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.

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,4 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd">
<!--@non-debug@
<Script file="libs\LibStub\LibStub.lua"/>
<Script file="libs\CallbackHandler-1.0\CallbackHandler-1.0.lua"/>
<Include file="libs\AceDB-3.0\AceDB-3.0.xml"/>
@ -11,7 +10,6 @@
<Include file="libs\AceConsole-3.0\AceConsole-3.0.xml"/>
<Include file="libs\AceAddon-3.0\AceAddon-3.0.xml"/>
<Include file="libs\AceLocale-3.0\AceLocale-3.0.xml"/>
<Include file="libs\AceHook-3.0\AceHook-3.0.xml"/>
<Include file="libs\LibDogTag-3.0\lib.xml"/>
<Include file="libs\LibDogTag-Unit-3.0\lib.xml"/>
<Script file="libs\LibRangeCheck-2.0\LibRangeCheck-2.0.lua"/>
@ -20,5 +18,4 @@
<Script file="LibDataBroker-1.1.lua"/>
<Script file="libs\LibDBIcon-1.0\LibDBIcon-1.0.lua"/>
<Script file="libs\LibDualSpec-1.0\LibDualSpec-1.0.lua"/>
@end-non-debug@-->
</Ui>

View File

@ -2,7 +2,7 @@ local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
local ArcaneCharges = IceCore_CreateClass(IceClassPowerCounter)
local SPELL_POWER_ARCANE_CHARGES = SPELL_POWER_ARCANE_CHARGES
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_ARCANE_CHARGES = Enum.PowerType.ArcaneCharges
end
@ -61,6 +61,6 @@ end
-- Load us up
local _, unitClass = UnitClass("player")
if (unitClass == "MAGE" and MageArcaneChargesFrame) then
if (unitClass == "MAGE" and IceHUD.WowVer >= 70000) then
IceHUD.ArcaneCharges = ArcaneCharges:new()
end

View File

@ -3,12 +3,8 @@ local CastBar = IceCore_CreateClass(IceCastBar)
local IceHUD = _G.IceHUD
local CastingBarFrame = CastingBarFrame
if not CastingBarFrame then
CastingBarFrame = PlayerCastingBarFrame
end
CastBar.prototype.spellCastSent = nil
CastBar.prototype.sentSpell = nil
-- Constructor --
function CastBar.prototype:init()
@ -318,10 +314,8 @@ end
function CastBar.prototype:Enable(core)
CastBar.super.prototype.Enable(self, core)
if UnitHasVehicleUI then
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "EnteringVehicle")
self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle")
end
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "EnteringVehicle")
self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle")
self:RegisterEvent("PLAYER_ENTERING_WORLD", "CheckVehicle")
self:RegisterEvent("CVAR_UPDATE", "CVarUpdate")
@ -355,12 +349,10 @@ end
function CastBar.prototype:CheckVehicle()
if UnitHasVehicleUI then
if UnitHasVehicleUI("player") then
self:EnteringVehicle(nil, "player", true)
else
self:ExitingVehicle(nil, "player")
end
if UnitHasVehicleUI("player") then
self:EnteringVehicle(nil, "player", true)
else
self:ExitingVehicle(nil, "player")
end
end
@ -402,9 +394,7 @@ end
function CastBar.prototype:CreateLagBar()
if self.lagBar == nil then
self.lagBar = self:BarFactory(self.lagBar, "LOW", "OVERLAY", "Lag")
end
self.lagBar = self:BarFactory(self.lagBar, "LOW", "OVERLAY")
local r, g, b = self:GetColor("CastLag")
if (self.settings.backgroundToggle) then
@ -417,13 +407,14 @@ end
-- OVERRIDE
function CastBar.prototype:SpellCastSent(event, unit, target, castGuid, spellId)
CastBar.super.prototype.SpellCastSent(self, event, unit, target, castGuid, spellId)
function CastBar.prototype:SpellCastSent(event, unit, spell, rank, target, lineId)
CastBar.super.prototype.SpellCastSent(self, event, unit, spell, rank, target, lineId)
if (unit ~= self.unit) then return end
if IceHUD.WowVer < 70000 then
self.spellCastSent = GetTime()
end
self.sentSpell = lineId
end
-- OVERRIDE
@ -435,18 +426,32 @@ function CastBar.prototype:SpellCastChanged(event, arg1)
end
-- OVERRIDE
function CastBar.prototype:SpellCastStart(event, unit, castGuid, spellId)
CastBar.super.prototype.SpellCastStart(self, event, unit, castGuid, spellId)
if (unit ~= self.unit or not spellId) then return end
function CastBar.prototype:SpellCastStart(event, unit, spell, rank, lineId, spellId)
CastBar.super.prototype.SpellCastStart(self, event, unit, spell, rank, lineId, spellId)
if (unit ~= self.unit) then return end
if not self:IsVisible() or not self.actionDuration then
return
end
self:UpdateLagBar()
if IceHUD.GlobalCoolDown then
self.nextLagUpdate = GetTime() + (select(2, GetSpellCooldown(IceHUD.GlobalCoolDown:GetSpellId())) / 2)
if self.sentSpell ~= lineId then
self.spellCastSent = nil
end
local scale
if self.unit == "vehicle" then
scale = 0
elseif self.useFixedLatency then
scale = IceHUD:Clamp(self.fixedLatency / self.actionDuration, 0, 1)
else
local now = GetTime()
local lag = now - (self.spellCastSent or now)
scale = IceHUD:Clamp(lag / self.actionDuration, 0, 1)
end
self:SetBarCoord(self.lagBar, scale, true, true)
self.spellCastSent = nil
end
@ -459,45 +464,20 @@ function CastBar.prototype:SpellCastChannelStart(event, unit)
return
end
self:UpdateLagBar(self.moduleSettings.reverseChannel)
end
-- OVERRIDE
function CastBar.prototype:SpellCastSucceeded(event, unit, castGuid, spellId)
CastBar.super.prototype.SpellCastSucceeded(self, event, unit, castGuid, spellId)
if not self.actionDuration or unit ~= self.unit then
return
end
self:UpdateLagBar()
if IceHUD.GlobalCoolDown then
self.nextLagUpdate = GetTime() + (select(2, GetSpellCooldown(IceHUD.GlobalCoolDown:GetSpellId())) / 2)
end
end
function CastBar.prototype:UpdateLagBar(isChannel)
local now = GetTime()
if self.nextLagUpdate and now <= self.nextLagUpdate then
return
end
local scale
if self.unit == "vehicle" then
scale = 0
elseif self.useFixedLatency then
scale = IceHUD:Clamp(self.fixedLatency / self.actionDuration, 0, 1)
else
local now = GetTime()
local lag = now - (self.spellCastSent or now)
if lag >= (self.actionDuration / 2) then
scale = 0
else
scale = IceHUD:Clamp(lag / self.actionDuration, 0, 1)
end
scale = IceHUD:Clamp(lag / self.actionDuration, 0, 1)
end
self:SetBarCoord(self.lagBar, scale, not isChannel, true)
local top = not self.moduleSettings.reverseChannel
self:SetBarCoord(self.lagBar, scale, top, true)
self.spellCastSent = nil
end

View File

@ -101,7 +101,7 @@ function IceClassPowerCounter.prototype:GetOptions()
opts["displayMode"] = {
type = 'select',
name = L["Display mode"],
desc = L["Choose whether you'd like a graphical or numeric representation of the runes."],
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."],
get = function(info)
return IceHUD:GetSelectValue(info, self.moduleSettings.runeMode)
end,
@ -467,10 +467,7 @@ function IceClassPowerCounter.prototype:DisplayCounter()
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateRunePower")
self:RegisterEvent("UNIT_DISPLAYPOWER", "UpdateRunePower")
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
if IceHUD.EventExistsUnitMaxPower then
self:RegisterEvent("UNIT_MAXPOWER", "UpdateRunePower")
end
self:RegisterEvent("PLAYER_ENTERING_WORLD", "UpdateRunePower")
if (self.moduleSettings.hideBlizz) then
self:HideBlizz()
@ -487,11 +484,6 @@ function IceClassPowerCounter.prototype:Disable(core)
end
end
function IceClassPowerCounter.prototype:EnteringWorld()
self:TargetChanged()
self:UpdateRunePower()
end
function IceClassPowerCounter.prototype:UpdateRunePower(event, arg1, arg2)
if event and (event == IceHUD.UnitPowerEvent or event == "UNIT_POWER_FREQUENT") and arg1 ~= "player" and arg1 ~= "vehicle" then
return
@ -500,22 +492,8 @@ function IceClassPowerCounter.prototype:UpdateRunePower(event, arg1, arg2)
if IceHUD.WowVer >= 70000 then
local numMax = UnitPowerMax(self.unit, self.unitPower)
if numMax ~= self.numRunes then
local oldMax = self.numRunes
self.numRunes = numMax
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
@ -584,7 +562,11 @@ function IceClassPowerCounter.prototype:UpdateRunePower(event, arg1, arg2)
end
end
else
self:HideRune(i)
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
end
end
@ -605,19 +587,6 @@ function IceClassPowerCounter.prototype:UpdateRunePower(event, arg1, arg2)
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()
if not self.AnimUpdate then
self.AnimUpdate = function() self:UpdateRuneAnimation() end
@ -743,9 +712,6 @@ function IceClassPowerCounter.prototype:CreateRuneFrame()
for i=1, self.numRunes do
self:CreateRune(i)
end
for i=self.numRunes+1, #self.frame.graphical do
self.frame.graphical[i]:Hide()
end
end
function IceClassPowerCounter.prototype:CreateRune(i)
@ -787,13 +753,7 @@ function IceClassPowerCounter.prototype:CreateRune(i)
end
end
function IceClassPowerCounter.prototype:SetupNewRune(rune)
end
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
return
end

View File

@ -4,12 +4,11 @@ local ComboPoints = IceCore_CreateClass(IceElement)
local IceHUD = _G.IceHUD
local AnticipationSpellId = 114015
local AnticipationExists = GetSpellInfo(AnticipationSpellId) and IceHUD.WowVer < 70000
ComboPoints.prototype.comboSize = 20
local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
end
@ -18,10 +17,7 @@ function ComboPoints.prototype:init()
ComboPoints.super.prototype.init(self, "ComboPoints")
self:SetDefaultColor("ComboPoints", 1, 1, 0)
if AnticipationExists then
self:SetDefaultColor("AnticipationPoints", 1, 0, 1)
end
self:SetDefaultColor("ChargedComboPoint", 0.3137254901960784, 0.3725490196078432, 1)
self:SetDefaultColor("AnticipationPoints", 1, 0, 1)
self.scalingEnabled = true
end
@ -167,7 +163,7 @@ function ComboPoints.prototype:GetOptions()
order = 33.2
}
if AnticipationExists then
if IceHUD.WowVer < 70000 then
opts["anticipation"] = {
type = "toggle",
name = L["Show Anticipation"],
@ -219,28 +215,6 @@ function ComboPoints.prototype:GetOptions()
disabled = function()
return not self.moduleSettings.enabled
end,
order = 35
}
opts["bShowCharged"] = {
type = 'toggle',
width = 'double',
name = L["Show 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."],
get = function()
return self.moduleSettings.bShowCharged
end,
set = function(info, v)
self.moduleSettings.bShowCharged = v
self:UpdateChargedComboPoints()
end,
disabled = function()
return not self.moduleSettings.enabled
end,
hidden = function()
return not GetUnitChargedPowerPoints
end,
order = 36
}
return opts
@ -261,7 +235,6 @@ function ComboPoints.prototype:GetDefaultSettings()
defaults["comboGap"] = 0
defaults["showAnticipation"] = true
defaults["bShowWithNoTarget"] = true
defaults["bShowCharged"] = true
return defaults
end
@ -280,20 +253,18 @@ function ComboPoints.prototype:Enable(core)
ComboPoints.super.prototype.Enable(self, core)
self:RegisterEvent("PLAYER_TARGET_CHANGED", "UpdateComboPoints")
if not IceHUD.EventExistsPlayerComboPoints then
if IceHUD.EventExistsUnitComboPoints then
if IceHUD.WowVer >= 30000 then
if IceHUD.WowVer < 70000 then
self:RegisterEvent("UNIT_COMBO_POINTS", "UpdateComboPoints")
else
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateComboPoints")
if IceHUD.EventExistsUnitMaxPower then
if IceHUD.WowVer < 80000 then
self:RegisterEvent("UNIT_MAXPOWER", "UpdateMaxComboPoints")
end
end
if UnitHasVehicleUI then
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "UpdateComboPoints")
self:RegisterEvent("UNIT_EXITED_VEHICLE", "UpdateComboPoints")
end
if AnticipationExists then
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "UpdateComboPoints")
self:RegisterEvent("UNIT_EXITED_VEHICLE", "UpdateComboPoints")
if IceHUD.WowVer < 70000 then
self:RegisterEvent("PLAYER_TALENT_UPDATE", "AddAnticipation")
self:AddAnticipation()
end
@ -301,16 +272,11 @@ function ComboPoints.prototype:Enable(core)
self:RegisterEvent("PLAYER_COMBO_POINTS", "UpdateComboPoints")
end
if GetUnitChargedPowerPoints then
self:RegisterEvent("UNIT_POWER_POINT_CHARGE", "UpdateChargedComboPoints")
end
if self.moduleSettings.comboMode == "Graphical" then
self.moduleSettings.comboMode = "Graphical Bar"
end
self:CreateComboFrame(true)
self:UpdateChargedComboPoints()
end
function ComboPoints.prototype:UpdateMaxComboPoints(event, unit, powerType)
@ -323,14 +289,6 @@ function ComboPoints.prototype:UpdateMaxComboPoints(event, unit, powerType)
end
end
function ComboPoints.prototype:UpdateChargedComboPoints()
if GetUnitChargedPowerPoints then
self.chargedPowerPoints = GetUnitChargedPowerPoints("player")
self:CreateComboFrame()
self:UpdateComboPoints()
end
end
-- 'Protected' methods --------------------------------------------------------
-- OVERRIDE
@ -439,18 +397,13 @@ function ComboPoints.prototype:CreateComboFrame(forceTextureUpdate)
if (self.moduleSettings.gradient) then
g = g - ((1 / maxComboPoints)*i)
end
if self.moduleSettings.bShowCharged and self:IsChargedPoint(i) then
self.frame.graphical[i].texture:SetVertexColor(self:GetColor("ChargedComboPoint"))
else
self.frame.graphical[i].texture:SetVertexColor(r, g, b)
end
self.frame.graphical[i].texture:SetVertexColor(r, g, b)
self.frame.graphical[i]:Hide()
end
-- create Anticipation points
if AnticipationExists then
if IceHUD.WowVer < 70000 then
for i = 1, 5 do
if (not self.frame.graphicalAnt[i]) then
local frame = CreateFrame("Frame", nil, self.frame)
@ -489,20 +442,6 @@ function ComboPoints.prototype:CreateComboFrame(forceTextureUpdate)
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(...)
if select('#', ...) >= 3 and select(1, ...) == IceHUD.UnitPowerEvent and select(3, ...) ~= "COMBO_POINTS" then
return
@ -511,23 +450,27 @@ function ComboPoints.prototype:UpdateComboPoints(...)
local points, anticipate, _
if IceHUD.IceCore:IsInConfigMode() then
points = self:GetMaxComboPoints()
elseif UnitHasVehicleUI then
elseif IceHUD.WowVer >= 30000 then
-- Parnic: apparently some fights have combo points while the player is in a vehicle?
local isInVehicle = UnitHasVehicleUI and UnitHasVehicleUI("player")
local isInVehicle = UnitHasVehicleUI("player")
local checkUnit = isInVehicle and "vehicle" or "player"
if IceHUD.PerTargetComboPoints then
points = GetComboPoints(checkUnit, "target")
else
if IceHUD.WowVer >= 60000 then
points = UnitPower(checkUnit, SPELL_POWER_COMBO_POINTS)
else
points = GetComboPoints(checkUnit, "target")
end
if AnticipationExists then
_, _, _, anticipate = UnitAura("player", GetSpellInfo(AnticipationSpellId))
if IceHUD.WowVer < 70000 then
if IceHUD.WowVer < 80000 then
_, _, _, anticipate = UnitAura("player", GetSpellInfo(AnticipationSpellId))
else
_, _, anticipate = UnitAura("player", GetSpellInfo(AnticipationSpellId))
end
else
anticipate = 0
end
else
points = GetComboPoints("player", "target")
points = GetComboPoints("target")
end
points = points or 0
@ -589,7 +532,7 @@ do
function ComboPoints.prototype:CheckAnticipation(e, unit) -- UNIT_AURA handler
if UnitIsUnit(unit, "player") then
local _, _, _, newAntStacks
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
_, _, _, newAntStacks = UnitAura("player", GetSpellInfo(AnticipationSpellId))
else
_, _, newAntStacks = UnitAura("player", GetSpellInfo(AnticipationSpellId))
@ -612,7 +555,4 @@ end
-- Load us up
local _, class = UnitClass("player")
if (not IceHUD.WowClassic and not IceHUD.WowClassicBC) or class == "ROGUE" or class == "DRUID" then
IceHUD.ComboPoints = ComboPoints:new()
end
IceHUD.ComboPoints = ComboPoints:new()

View File

@ -2,7 +2,7 @@ local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
local ComboPointsBar = IceCore_CreateClass(IceBarElement)
local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
end
@ -57,6 +57,7 @@ end
function ComboPointsBar.prototype:GetDefaultSettings()
local defaults = ComboPointsBar.super.prototype.GetDefaultSettings(self)
defaults.textVisible['lower'] = false
defaults.offset = 8
defaults.enabled = false
defaults.alwaysDisplay = false
@ -69,33 +70,17 @@ function ComboPointsBar.prototype:Enable(core)
ComboPointsBar.super.prototype.Enable(self, core)
self:RegisterEvent("PLAYER_TARGET_CHANGED", "UpdateComboPoints")
if not IceHUD.EventExistsPlayerComboPoints then
if IceHUD.EventExistsUnitComboPoints then
if IceHUD.WowVer >= 30000 then
if IceHUD.WowVer < 70000 then
self:RegisterEvent("UNIT_COMBO_POINTS", "UpdateComboPoints")
else
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateComboPoints")
end
if UnitHasVehicleUI then
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "UpdateComboPoints")
self:RegisterEvent("UNIT_EXITED_VEHICLE", "UpdateComboPoints")
end
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "UpdateComboPoints")
self:RegisterEvent("UNIT_EXITED_VEHICLE", "UpdateComboPoints")
else
self:RegisterEvent("PLAYER_COMBO_POINTS", "UpdateComboPoints")
end
if GetUnitChargedPowerPoints then
self:RegisterEvent("UNIT_POWER_POINT_CHARGE", "UpdateChargedComboPoints")
end
self:UpdateChargedComboPoints()
end
function ComboPointsBar.prototype:UpdateChargedComboPoints()
if GetUnitChargedPowerPoints then
local chargedPowerPoints = GetUnitChargedPowerPoints("player")
self.chargedPowerPointIndex = chargedPowerPoints and chargedPowerPoints[1]
self:UpdateComboPoints()
end
end
function ComboPointsBar.prototype:CreateFrame()
@ -114,17 +99,17 @@ function ComboPointsBar.prototype:UpdateComboPoints(...)
local points
if IceHUD.IceCore:IsInConfigMode() then
points = UnitPowerMax("player", SPELL_POWER_COMBO_POINTS)
elseif UnitHasVehicleUI then
elseif IceHUD.WowVer >= 30000 then
-- Parnic: apparently some fights have combo points while the player is in a vehicle?
local isInVehicle = UnitHasVehicleUI and UnitHasVehicleUI("player")
local isInVehicle = UnitHasVehicleUI("player")
local checkUnit = isInVehicle and "vehicle" or "player"
if IceHUD.PerTargetComboPoints then
points = GetComboPoints(checkUnit, "target")
else
if IceHUD.WowVer >= 60000 then
points = UnitPower(checkUnit, SPELL_POWER_COMBO_POINTS)
else
points = GetComboPoints(checkUnit, "target")
end
else
points = GetComboPoints("player", "target")
points = GetComboPoints("target")
end
if (points == 0) then
@ -142,16 +127,10 @@ function ComboPointsBar.prototype:UpdateComboPoints(...)
end
self:SetBottomText1(points or "0")
if self.chargedPowerPointIndex then
self:SetBottomText2(self.chargedPowerPointIndex)
end
end
function ComboPointsBar.prototype:Update()
self:UpdateComboPoints()
end
local _, class = UnitClass("player")
if (not IceHUD.WowClassic and not IceHUD.WowClassicBC) or class == "ROGUE" or class == "DRUID" then
IceHUD.ComboPointsBar = ComboPointsBar:new()
end
IceHUD.ComboPointsBar = ComboPointsBar:new()

View File

@ -19,7 +19,6 @@ IceCustomBar.prototype.bIsAura = false
function IceCustomBar.prototype:init()
IceCustomBar.super.prototype.init(self, "MyCustomBar", "player")
self.textColorOverride = true
self.CustomBarUpdateFunc = function() self:UpdateCustomBar(self.unit, true) end
end
-- 'Public' methods -----------------------------------------------------------
@ -37,12 +36,10 @@ function IceCustomBar.prototype:Enable(core)
self:RegisterEvent("UNIT_AURA", "UpdateCustomBarEvent")
self:RegisterEvent("UNIT_PET", "UpdateCustomBarEvent")
if IceHUD.EventExistsPlayerPetChanged then
if IceHUD.WowVer < 80000 then
self:RegisterEvent("PLAYER_PET_CHANGED", "UpdateCustomBarEvent")
end
if FocusUnit then
self:RegisterEvent("PLAYER_FOCUS_CHANGED", "UpdateCustomBarEvent")
end
self:RegisterEvent("PLAYER_FOCUS_CHANGED", "UpdateCustomBarEvent")
if self.unitClass == "SHAMAN" then
self:RegisterEvent("PLAYER_TOTEM_UPDATE", "UpdateTotems")
end
@ -82,10 +79,6 @@ function IceCustomBar.prototype:Disable(core)
end
function IceCustomBar.prototype:GetUnitToTrack()
if not IceHUD.CanTrackOtherUnitBuffs then
return "player"
end
if self.moduleSettings.myUnit == "other" then
if self.moduleSettings.customUnit ~= nil and self.moduleSettings.customUnit ~= "" then
return self.moduleSettings.customUnit
@ -108,7 +101,11 @@ end
function IceCustomBar.prototype:ConditionalSubscribe()
if self:ShouldAlwaysSubscribe() then
if not IceHUD.IceCore:IsUpdateSubscribed(self, self.CustomBarUpdateFunc) then
if not IceHUD.IceCore:IsUpdateSubscribed(self) then
if not self.CustomBarUpdateFunc then
self.CustomBarUpdateFunc = function() self:UpdateCustomBar() end
end
self.handlesOwnUpdates = true
IceHUD.IceCore:RequestUpdates(self, self.CustomBarUpdateFunc)
end
@ -119,7 +116,7 @@ function IceCustomBar.prototype:ConditionalSubscribe()
end
function IceCustomBar.prototype:ShouldAlwaysSubscribe()
return self.unit == "focustarget" or self.unit == "pettarget" or self.unit == "targettarget"
return self.unit == "focustarget" or self.unit == "pettarget"
end
function IceCustomBar.prototype:TargetChanged()
@ -171,7 +168,9 @@ function IceCustomBar.prototype:CreateBar()
IceCustomBar.super.prototype.CreateBar(self)
if not self.barFrame.icon then
self.barFrame.icon = self.masterFrame:CreateTexture(nil, "BACKGROUND")
self.barFrame.icon = self.masterFrame:CreateTexture(nil, "LOW")
-- default texture so that 'config mode' can work without activating the bar first
self.barFrame.icon:SetTexture("Interface\\Icons\\Spell_Frost_Frost")
-- this cuts off the border around the buff icon
self.barFrame.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)
self.barFrame.icon:SetDrawLayer("OVERLAY")
@ -259,53 +258,51 @@ function IceCustomBar.prototype:GetOptions()
order = 30.3,
}
if IceHUD.CanTrackOtherUnitBuffs then
opts["unitToTrack"] = {
type = 'select',
values = validUnits,
name = L["Unit to track"],
desc = L["Select which unit that this bar should be looking for buffs/debuffs on"],
get = function(info)
return IceHUD:GetSelectValue(info, self.moduleSettings.myUnit)
end,
set = function(info, v)
self.moduleSettings.myUnit = info.option.values[v]
self.unit = self:GetUnitToTrack()
self:RegisterFontStrings()
self:ConditionalSubscribe()
self:Redraw()
self:UpdateCustomBar(self.unit)
IceHUD:NotifyOptionsChange()
end,
disabled = function()
return not self.moduleSettings.enabled
end,
order = 30.4,
}
opts["unitToTrack"] = {
type = 'select',
values = validUnits,
name = L["Unit to track"],
desc = L["Select which unit that this bar should be looking for buffs/debuffs on"],
get = function(info)
return IceHUD:GetSelectValue(info, self.moduleSettings.myUnit)
end,
set = function(info, v)
self.moduleSettings.myUnit = info.option.values[v]
self.unit = self:GetUnitToTrack()
self:RegisterFontStrings()
self:ConditionalSubscribe()
self:Redraw()
self:UpdateCustomBar(self.unit)
IceHUD:NotifyOptionsChange()
end,
disabled = function()
return not self.moduleSettings.enabled
end,
order = 30.4,
}
opts["customUnitToTrack"] = {
type = 'input',
name = L["Custom unit"],
desc = L["Any valid unit id such as: party1, raid14, targettarget, etc. Not guaranteed to work with all unit ids.\n\nRemember to press ENTER after filling out this box with the name you want or it will not save."],
get = function()
return self.moduleSettings.customUnit
end,
set = function(info, v)
self.moduleSettings.customUnit = v
self.unit = self:GetUnitToTrack()
self:RegisterFontStrings()
self:ConditionalSubscribe()
self:Redraw()
self:UpdateCustomBar(self.unit)
IceHUD:NotifyOptionsChange()
end,
hidden = function()
return self.moduleSettings.myUnit ~= "other"
end,
usage = "<what custom unit to track when unitToTrack is set to 'other'>",
order = 30.45,
}
end
opts["customUnitToTrack"] = {
type = 'input',
name = L["Custom unit"],
desc = L["Any valid unit id such as: party1, raid14, targettarget, etc. Not guaranteed to work with all unit ids.\n\nRemember to press ENTER after filling out this box with the name you want or it will not save."],
get = function()
return self.moduleSettings.customUnit
end,
set = function(info, v)
self.moduleSettings.customUnit = v
self.unit = self:GetUnitToTrack()
self:RegisterFontStrings()
self:ConditionalSubscribe()
self:Redraw()
self:UpdateCustomBar(self.unit)
IceHUD:NotifyOptionsChange()
end,
hidden = function()
return self.moduleSettings.myUnit ~= "other"
end,
usage = "<what custom unit to track when unitToTrack is set to 'other'>",
order = 30.45,
}
opts["buffOrDebuff"] = {
type = 'select',
@ -638,7 +635,7 @@ end
-- 'Protected' methods --------------------------------------------------------
function IceCustomBar.prototype:GetAuraDuration(unitName, buffName)
if not unitName or not buffName or buffName == "" then
if not unitName or not buffName then
return nil
end
@ -670,7 +667,7 @@ function IceCustomBar.prototype:GetAuraDuration(unitName, buffName)
local isBuff = self.moduleSettings.buffOrDebuff == "buff" and true or false
local buffFilter = (isBuff and "HELPFUL" or "HARMFUL") .. (self.moduleSettings.trackOnlyMine and "|PLAYER" or "")
local buff, rank, texture, count, type, duration, endTime, unitCaster, _, _, spellId
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
buff, rank, texture, count, type, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, buffFilter)
else
buff, texture, count, type, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, buffFilter)
@ -700,7 +697,7 @@ function IceCustomBar.prototype:GetAuraDuration(unitName, buffName)
i = i + 1;
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
buff, rank, texture, count, type, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, buffFilter)
else
buff, texture, count, type, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, buffFilter)
@ -752,7 +749,7 @@ function IceCustomBar.prototype:UpdateCustomBar(unit, fromUpdate)
local auraIcon = nil
local endTime = 0
--if not fromUpdate then
if not fromUpdate then
if tonumber(self.moduleSettings.buffToTrack) == nil then
self.auraDuration, remaining, self.auraBuffCount, auraIcon, endTime =
self:GetAuraDuration(self.unit, self.moduleSettings.buffToTrack)
@ -779,22 +776,22 @@ function IceCustomBar.prototype:UpdateCustomBar(unit, fromUpdate)
end
if IceHUD.IceCore:IsInConfigMode() or self.moduleSettings.displayAuraIcon then
if IceHUD.IceCore:IsInConfigMode() and not self.barFrame.icon:GetTexture() then
self.barFrame.icon:SetTexture("Interface\\Icons\\Spell_Frost_Frost")
end
self.barFrame.icon:Show()
else
self.barFrame.icon:Hide()
end
--end
end
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 not self:ShouldAlwaysSubscribe() and not fromUpdate and not IceHUD.IceCore:IsUpdateSubscribed(self, self.CustomBarUpdateFunc) then
if not self:ShouldAlwaysSubscribe() and not fromUpdate and not IceHUD.IceCore:IsUpdateSubscribed(self) then
if not self.UpdateCustomBarFunc then
self.UpdateCustomBarFunc = function() self:UpdateCustomBar(self.unit, true) end
end
self.handlesOwnUpdates = true
IceHUD.IceCore:RequestUpdates(self, self.CustomBarUpdateFunc)
IceHUD.IceCore:RequestUpdates(self, self.UpdateCustomBarFunc)
end
self:Show(true)

View File

@ -131,7 +131,9 @@ function IceCustomCDBar.prototype:CreateBar()
IceCustomCDBar.super.prototype.CreateBar(self)
if not self.barFrame.icon then
self.barFrame.icon = self.masterFrame:CreateTexture(nil, "BACKGROUND")
self.barFrame.icon = self.masterFrame:CreateTexture(nil, "LOW")
-- default texture so that 'config mode' can work without activating the bar first
self.barFrame.icon:SetTexture("Interface\\Icons\\Spell_Frost_Frost")
-- this cuts off the border around the buff icon
self.barFrame.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)
self.barFrame.icon:SetDrawLayer("OVERLAY")
@ -673,9 +675,6 @@ function IceCustomCDBar.prototype:UpdateIcon()
end
if IceHUD.IceCore:IsInConfigMode() or self.moduleSettings.displayAuraIcon then
if not self.barFrame.icon:GetTexture() and IceHUD.IceCore:IsInConfigMode() then
self.barFrame.icon:SetTexture("Interface\\Icons\\Spell_Frost_Frost")
end
self.barFrame.icon:Show()
else
self.barFrame.icon:Hide()
@ -695,10 +694,7 @@ function IceCustomCDBar.prototype:UpdateItemUnitInventoryChanged(event, unit)
end
end
function IceCustomCDBar.prototype:UpdateCustomBarEvent(event, unit)
if unit ~= self.unit then
return
end
function IceCustomCDBar.prototype:UpdateCustomBarEvent()
if not self.moduleSettings.cooldownType or self.moduleSettings.cooldownType == COOLDOWN_TYPE_SPELL then
self:UpdateCustomBar()
end
@ -726,8 +722,6 @@ function IceCustomCDBar.prototype:UpdateCustomBar(fromUpdate)
else
self.cooldownEndTime = remaining + now
end
self:UpdateIcon()
end
if self.cooldownEndTime and self.cooldownEndTime >= now then
@ -802,9 +796,7 @@ function IceCustomCDBar.prototype:IsReady()
local checkSpell = self:GetSpellNameOrId(self.moduleSettings.cooldownToTrack)
if (IsUsableSpell(checkSpell)) then
if self.moduleSettings.bIgnoreRange and self.moduleSettings.bOnlyShowWithTarget then
is_ready = UnitExists("target") and 1 or nil
elseif (not self.moduleSettings.bIgnoreRange and SpellHasRange(checkSpell)) or (self.moduleSettings.bOnlyShowWithTarget) then
if (not self.moduleSettings.bIgnoreRange and SpellHasRange(checkSpell)) or (self.moduleSettings.bOnlyShowWithTarget) then
if (UnitExists("target") and (not SpellHasRange(checkSpell) or IsSpellInRange(checkSpell, "target") == 1))
or (not UnitExists("target") and not self.moduleSettings.bOnlyShowWithTarget and IsSpellInRange(checkSpell, "player")) then
is_ready = 1

View File

@ -122,7 +122,7 @@ function IceCustomCount.prototype:GetOptions()
self.moduleSettings.vpos = v
self:Redraw()
end,
min = -700,
min = -400,
max = 700,
step = 1,
disabled = function()

View File

@ -277,7 +277,8 @@ function IceCustomCounterBar.prototype:CreateFrame()
IceCustomCounterBar.super.prototype.CreateFrame(self)
if not self.barFrame.icon then
self.barFrame.icon = self.masterFrame:CreateTexture(nil, "BACKGROUND")
self.barFrame.icon = self.masterFrame:CreateTexture(nil, "LOW")
self.barFrame.icon:SetTexture(DefaultAuraIcon)
self.barFrame.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)
self.barFrame.icon:SetDrawLayer("OVERLAY")
self.barFrame.icon:Hide()
@ -305,6 +306,10 @@ function IceCustomCounterBar.prototype:UpdateAuraIcon()
local auraIcon, _
_, _, auraIcon = GetSpellInfo(self.moduleSettings.auraName)
if auraIcon == nil then
auraIcon = "Interface\\Icons\\Spell_Frost_Frost"
end
self.barFrame.icon:SetTexture(auraIcon)
end
@ -314,10 +319,6 @@ function IceCustomCounterBar.prototype:UpdateCustomCount()
local percent = IceHUD:Clamp(1.0 * points / (max > 0 and max or 1), 0, 1)
if IceHUD.IceCore:IsInConfigMode() then
if not self.barFrame.icon:GetTexture() then
self.barFrame.icon:SetTexture(DefaultAuraIcon)
end
points = IceStackCounter_GetMaxCount(self)
percent = 1
self.barFrame.icon:Show()

View File

@ -107,7 +107,7 @@ function EclipseBar.prototype:CreateFrame()
end
function EclipseBar.prototype:CreateSolarBar()
self.solarBar = self:BarFactory(self.solarBar,"BACKGROUND", "ARTWORK", "Solar")
self.solarBar = self:BarFactory(self.solarBar,"BACKGROUND", "ARTWORK")
self:SetBarCoord(self.solarBar, 0.5, true)
self.solarBar.bar:SetVertexColor(self:GetColor("EclipseSolar", 1))
@ -119,7 +119,7 @@ function EclipseBar.prototype:UpdateShown()
if form == MOONKIN_FORM or not form then
local PrimaryTalentTree = 0
if GetSpecialization then
if IceHUD.WowVer >= 50000 then
PrimaryTalentTree = GetSpecialization()
else
PrimaryTalentTree = GetPrimaryTalentTree()
@ -190,6 +190,6 @@ function EclipseBar.prototype:MyOnUpdate()
end
local _, unitClass = UnitClass("player")
if (unitClass == "DRUID" and GetEclipseDirection) then
if (unitClass == "DRUID" and IceHUD.WowVer >= 40000 and IceHUD.WowVer < 70000) then
IceHUD.EclipseBar = EclipseBar:new()
end

View File

@ -26,6 +26,4 @@ function FocusAbsorb.prototype:MyUnregisterCustomEvents()
end
-- Load us up
if UnitGetTotalAbsorbs ~= nil then
IceHUD.FocusAbsorb = FocusAbsorb:new()
end
IceHUD.FocusAbsorb = FocusAbsorb:new()

View File

@ -23,6 +23,4 @@ end
-- 'Protected' methods --------------------------------------------------------
-- Load us up
if FocusUnit then
IceHUD.FocusCC = FocusCC:new()
end
IceHUD.FocusCC = FocusCC:new()

View File

@ -112,6 +112,4 @@ end
-- Load us up
if FocusUnit then
IceHUD.FocusCast = FocusCast:new()
end
IceHUD.FocusCast = FocusCast:new()

View File

@ -471,6 +471,4 @@ function FocusHealth.prototype:HideBlizz()
end
-- Load us up
if FocusUnit then
IceHUD.FocusHealth = FocusHealth:new()
end
IceHUD.FocusHealth = FocusHealth:new()

View File

@ -4,7 +4,7 @@ local FocusMana = IceCore_CreateClass(IceUnitBar)
local SPELL_POWER_RAGE = SPELL_POWER_RAGE
local SPELL_POWER_FOCUS = SPELL_POWER_FOCUS
local SPELL_POWER_ENERGY = SPELL_POWER_ENERGY
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_RAGE = Enum.PowerType.Rage
SPELL_POWER_FOCUS = Enum.PowerType.Focus
SPELL_POWER_ENERGY = Enum.PowerType.Energy
@ -39,9 +39,9 @@ end
function FocusMana.prototype:Enable(core)
FocusMana.super.prototype.Enable(self, core)
if not IceHUD.PerPowerEventsExist then
if IceHUD.WowVer >= 40000 then
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateEvent")
if IceHUD.EventExistsUnitMaxPower then
if IceHUD.WowVer < 80000 then
self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent")
end
else
@ -136,6 +136,4 @@ end
-- Load us up
if FocusUnit then
IceHUD.FocusMana = FocusMana:new()
end
IceHUD.FocusMana = FocusMana:new()

View File

@ -16,6 +16,4 @@ function IceFocusThreat.prototype:GetDefaultSettings()
end
-- Load us up
if FocusUnit then
IceHUD.IceFocusThreat = IceFocusThreat:new()
end
IceHUD.IceFocusThreat = IceFocusThreat:new()

View File

@ -20,7 +20,7 @@ function GlobalCoolDown.prototype:Enable(core)
self.moduleSettings.inverse = "NORMAL"
end
self:RegisterEvent("CURRENT_SPELL_CAST_CHANGED", "SpellCastChanged")
self:RegisterEvent("UNIT_SPELLCAST_SENT","SpellCastSent")
--self:RegisterEvent("ACTIONBAR_UPDATE_COOLDOWN", "CooldownStateChanged")
self:RegisterEvent("UNIT_SPELLCAST_START","CooldownStateChanged")
@ -143,16 +143,28 @@ function GlobalCoolDown.prototype:IsFull(scale)
return false
end
function GlobalCoolDown.prototype:SpellCastChanged(event, cancelled)
self.spellCastSent = GetTime()
end
function GlobalCoolDown.prototype:SpellCastSent(event, unit, spell, bfaCastGUID, bfaSpellId)
if IceHUD.WowVer >= 80000 then
spell = bfaSpellId
end
function GlobalCoolDown.prototype:SpellCastStop(event, unit, castGuid, spellId)
if unit ~= "player" or not spellId or not self.CurrSpellGuid or self.CurrSpellGuid ~= castGuid then
if unit ~= "player" or not spell then
return
end
self.CurrSpellGuid = nil
self.spellCastSent = GetTime()
end
function GlobalCoolDown.prototype:SpellCastStop(event, unit, spell, one, two, spellId)
if IceHUD.WowVer >= 80000 then
spellId = one
end
if unit ~= "player" or not spellId or not self.CurrSpellId or self.CurrSpellId ~= spellId then
return
end
self.CurrSpellId = nil
if event == "UNIT_SPELLCAST_INTERRUPTED" or event == "UNIT_SPELLCAST_FAILED" then
self.CurrLerpTime = self.moduleSettings.desiredLerpTime
@ -165,7 +177,7 @@ function GlobalCoolDown.prototype:GetSpellCastTime(spell)
end
local spellname, castTime, _
if IceHUD.GetSpellInfoReturnsFunnel then
if IceHUD.WowVer < 60000 then
spellName, _, _, _, _, _, castTime = GetSpellInfo(spell)
else
spellName, _, _, castTime = GetSpellInfo(spell)
@ -178,19 +190,23 @@ function GlobalCoolDown.prototype:GetSpellCastTime(spell)
end
end
function GlobalCoolDown.prototype:CooldownStateChanged(event, unit, castGuid, spellId)
function GlobalCoolDown.prototype:CooldownStateChanged(event, unit, spell, one, two, spellId)
if IceHUD.WowVer >= 80000 then
spellId = one
end
if unit ~= "player" or not spellId then
return
end
-- Ignore all events unrelated to the spell currently being cast
if self.CurrSpellGuid and self.CurrSpellGuid ~= castGuid then
if self.CurrSpellId and self.CurrSpellId ~= spellId then
return
end
-- Update the current spell ID for all events indicating a spellcast is starting
if event ~= "UNIT_SPELLCAST_SUCCEEDED" then
self.CurrSpellGuid = castGuid
self.CurrSpellId = spellId
end
local start, dur = GetSpellCooldown(self.CDSpellId)
@ -255,7 +271,7 @@ function GlobalCoolDown.prototype:CreateFrame()
end
function GlobalCoolDown.prototype:CreateLagBar()
self.lagBar = self:BarFactory(self.lagBar, "LOW", "OVERLAY", "Lag")
self.lagBar = self:BarFactory(self.lagBar, "LOW", "OVERLAY")
local r, g, b = self:GetColor("CastLag")
if (self.settings.backgroundToggle) then
@ -267,35 +283,28 @@ function GlobalCoolDown.prototype:CreateLagBar()
end
function GlobalCoolDown.prototype:GetSpellId()
if GetSpellInfo(61304) then
return 61304
else
local defaultSpells
return 61304
--[[
local defaultSpells
defaultSpells = {
ROGUE=1752, -- sinister strike
PRIEST=585, -- smite
DRUID=5176, -- wrath
WARRIOR=34428, -- victory rush (not available until 5, sadly)
MAGE=44614, -- frostfire bolt
WARLOCK=686, -- shadow bolt
PALADIN=105361, -- seal of command (level 3)
SHAMAN=403, -- lightning bolt
HUNTER=3044, -- arcane shot
DEATHKNIGHT=47541, -- death coil
MONK=100780, -- jab
}
defaultSpells = {
ROGUE=1752, -- sinister strike
PRIEST=585, -- smite
DRUID=5176, -- wrath
WARRIOR=34428, -- victory rush (not available until 5, sadly)
MAGE=44614, -- frostfire bolt
WARLOCK=686, -- shadow bolt
PALADIN=105361, -- seal of command (level 3)
SHAMAN=403, -- lightning bolt
HUNTER=3044, -- arcane shot
DEATHKNIGHT=47541, -- death coil
MONK=100780, -- jab
}
if not GetSpellInfo(defaultSpells["PALADIN"]) then
defaultSpells["PALADIN"] = 635
end
local _, unitClass = UnitClass("player")
return defaultSpells[unitClass]
end
local _, unitClass = UnitClass("player")
return defaultSpells[unitClass]
]]
end
-- Load us up
if IceHUD.CanTrackGCD then
IceHUD.GlobalCoolDown = GlobalCoolDown:new()
end
IceHUD.GlobalCoolDown = GlobalCoolDown:new()

View File

@ -2,17 +2,14 @@ local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
local HarmonyPower = IceCore_CreateClass(IceClassPowerCounter)
local SPELL_POWER_CHI = SPELL_POWER_CHI
if not SPELL_POWER_CHI then
SPELL_POWER_CHI = SPELL_POWER_LIGHT_FORCE
end
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_CHI = Enum.PowerType.Chi
end
function HarmonyPower.prototype:init()
HarmonyPower.super.prototype.init(self, "Chi")
HarmonyPower.super.prototype.init(self, "HarmonyPower")
self:SetDefaultColor("ChiNumeric", 218, 231, 31)
self:SetDefaultColor("HarmonyPowerNumeric", 218, 231, 31)
-- pulled from MonkHarmonyBar.xml in Blizzard's UI source
self.runeCoords =
@ -25,8 +22,12 @@ function HarmonyPower.prototype:init()
{0.00390625, 0.08593750, 0.71093750, 0.87500000},
}
self.numRunes = 4
self.numericColor = "ChiNumeric"
self.unitPower = SPELL_POWER_CHI
self.numericColor = "HarmonyPowerNumeric"
if IceHUD.WowVer >= 50100 then
self.unitPower = SPELL_POWER_CHI
else
self.unitPower = SPELL_POWER_LIGHT_FORCE
end
if IceHUD.WowVer >= 70000 then
self.requiredSpec = SPEC_MONK_WINDWALKER
end
@ -116,6 +117,6 @@ end
-- Load us up
local _, unitClass = UnitClass("player")
if unitClass == "MONK" then
if (unitClass == "MONK" and IceHUD.WowVer >= 50000) then
IceHUD.HarmonyPower = HarmonyPower:new()
end

View File

@ -2,7 +2,7 @@ local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
local HolyPower = IceCore_CreateClass(IceClassPowerCounter)
local SPELL_POWER_HOLY_POWER = SPELL_POWER_HOLY_POWER
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_HOLY_POWER = Enum.PowerType.HolyPower
end
@ -32,13 +32,13 @@ function HolyPower.prototype:init()
self.numericColor = "HolyPowerNumeric"
self.unitPower = SPELL_POWER_HOLY_POWER
self.minLevel = PALADINPOWERBAR_SHOW_LEVEL
if IceHUD.WowVer >= 70000 and IceHUD.WowVer < 90000 then
if IceHUD.WowVer >= 70000 then
self.requiredSpec = SPEC_PALADIN_RETRIBUTION
end
self.bTreatEmptyAsFull = true
self.unit = "player"
self.numRunes = 5
if HOLY_POWER_FULL then
if IceHUD.WowVer >= 50000 then
self.numConsideredFull = HOLY_POWER_FULL
else
self.numConsideredFull = 3
@ -134,7 +134,7 @@ end
-- Load us up
local _, unitClass = UnitClass("player")
if (unitClass == "PALADIN" and (PaladinPowerBar or PaladinPowerBarFrame)) then
if (unitClass == "PALADIN" and IceHUD.WowVer >= 40000) then
IceHUD.HolyPower = HolyPower:new()
end

View File

@ -280,8 +280,8 @@ function MirrorBarHandler.prototype:GetOptions()
type='range',
name = L["Bar vertical offset"],
desc = L["Adjust the vertical placement of this bar"],
min = -600,
max = 600,
min = -400,
max = 400,
step = 1,
get = function()
return self.moduleSettings.barVerticalOffset

View File

@ -42,23 +42,18 @@ function PetHealth.prototype:Enable(core)
PetHealth.super.prototype.Enable(self, core)
self:RegisterEvent("PET_UI_UPDATE", "CheckPet");
if IceHUD.EventExistsPlayerPetChanged then
if IceHUD.WowVer < 80000 then
self:RegisterEvent("PLAYER_PET_CHANGED", "CheckPet");
end
self:RegisterEvent("PET_BAR_UPDATE_USABLE", "CheckPet");
self:RegisterEvent(IceHUD.WowVer < 80000 and "PET_BAR_CHANGED" or "PET_BAR_UPDATE_USABLE", "CheckPet");
self:RegisterEvent("UNIT_PET", "CheckPet");
self:RegisterEvent("UNIT_HEALTH", "UpdateEvent")
if IceHUD.EventExistsUnitHealthFrequent then
self:RegisterEvent("UNIT_HEALTH_FREQUENT", "UpdateEvent")
end
self:RegisterEvent("UNIT_MAXHEALTH", "UpdateEvent")
if UnitHasVehicleUI then
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "EnteringVehicle")
self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle")
end
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "EnteringVehicle")
self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle")
self:RegisterEvent("PLAYER_ENTERING_WORLD", "CheckVehicle")
self.frame:SetAttribute("unit", self.unit)
RegisterUnitWatch(self.frame)
@ -224,16 +219,11 @@ function PetHealth.prototype:ExitingVehicle(event, unit)
end
end
function PetHealth.prototype:EnteringWorld()
self:TargetChanged()
self:Update(self.unit)
if UnitHasVehicleUI then
if UnitHasVehicleUI("player") then
self:EnteringVehicle(nil, "player", true)
else
self:ExitingVehicle(nil, "player")
end
function PetHealth.prototype:CheckVehicle()
if UnitHasVehicleUI("player") then
self:EnteringVehicle(nil, "player", true)
else
self:ExitingVehicle(nil, "player")
end
end

View File

@ -5,7 +5,7 @@ local SPELL_POWER_RAGE = SPELL_POWER_RAGE
local SPELL_POWER_FOCUS = SPELL_POWER_FOCUS
local SPELL_POWER_ENERGY = SPELL_POWER_ENERGY
local SPELL_POWER_RUNIC_POWER = SPELL_POWER_RUNIC_POWER
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_RAGE = Enum.PowerType.Rage
SPELL_POWER_FOCUS = Enum.PowerType.Focus
SPELL_POWER_ENERGY = Enum.PowerType.Energy
@ -62,15 +62,15 @@ function PetMana.prototype:Enable(core)
PetMana.super.prototype.Enable(self, core)
self:RegisterEvent("PET_UI_UPDATE", "CheckPet")
if IceHUD.EventExistsPlayerPetChanged then
if IceHUD.WowVer < 80000 then
self:RegisterEvent("PLAYER_PET_CHANGED", "CheckPet")
end
self:RegisterEvent(IceHUD.EventExistsPetBarChanged and "PET_BAR_CHANGED" or "PET_BAR_UPDATE_USABLE", "CheckPet")
self:RegisterEvent(IceHUD.WowVer < 80000 and "PET_BAR_CHANGED" or "PET_BAR_UPDATE_USABLE", "CheckPet")
self:RegisterEvent("UNIT_PET", "CheckPet")
if not IceHUD.PerPowerEventsExist then
if IceHUD.WowVer >= 40000 then
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateEvent")
if IceHUD.EventExistsUnitMaxPower then
if IceHUD.WowVer < 80000 then
self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent")
end
else
@ -86,11 +86,9 @@ function PetMana.prototype:Enable(core)
self:RegisterEvent("UNIT_DISPLAYPOWER", "ManaType")
if UnitHasVehicleUI then
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "EnteringVehicle")
self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle")
end
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "EnteringVehicle")
self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle")
self:RegisterEvent("PLAYER_ENTERING_WORLD", "CheckVehicle")
self:CheckPet()
self:ManaType(nil, self.unit)
@ -241,16 +239,11 @@ function PetMana.prototype:ExitingVehicle(event, unit)
end
end
function PetMana.prototype:EnteringWorld()
self:TargetChanged()
self:Update(self.unit)
if UnitHasVehicleUI then
if UnitHasVehicleUI("player") then
self:EnteringVehicle(nil, "player", true)
else
self:ExitingVehicle(nil, "player")
end
function PetMana.prototype:CheckVehicle()
if UnitHasVehicleUI("player") then
self:EnteringVehicle(nil, "player", true)
else
self:ExitingVehicle(nil, "player")
end
end

View File

@ -19,6 +19,4 @@ function PlayerAbsorb.prototype:GetDefaultSettings()
end
-- Load us up
if UnitGetTotalAbsorbs ~= nil then
IceHUD.PlayerAbsorb = PlayerAbsorb:new()
end
IceHUD.PlayerAbsorb = PlayerAbsorb:new()

View File

@ -8,7 +8,7 @@ local _, unitClass = UnitClass("player")
local SPELL_POWER_MANA = SPELL_POWER_MANA
local SPELL_POWER_INSANITY = SPELL_POWER_INSANITY
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_MANA = Enum.PowerType.Mana
SPELL_POWER_INSANITY = Enum.PowerType.Insanity
end

View File

@ -29,7 +29,7 @@ function IceHUDPlayerAlternatePower.prototype:Enable(core)
IceHUDPlayerAlternatePower.super.prototype.Enable(self, core)
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateEvent")
if IceHUD.EventExistsUnitMaxPower then
if IceHUD.WowVer < 80000 then
self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent")
end
self:RegisterEvent("UNIT_POWER_BAR_SHOW", "PowerBarShow")
@ -132,6 +132,4 @@ function IceHUDPlayerAlternatePower.prototype:HideBlizz()
end
-- Load us up
if ALTERNATE_POWER_INDEX then
IceHUD.PlayerAlternatePower = IceHUDPlayerAlternatePower:new()
end
IceHUD.PlayerAlternatePower = IceHUDPlayerAlternatePower:new()

View File

@ -10,7 +10,6 @@ PlayerHealth.prototype.absorbAmount = 0
local configMode = false
local HealComm
local incomingHealAmt = 0
local groupEvent = IceHUD.EventExistsGroupRosterUpdate and "GROUP_ROSTER_UPDATE" or "PARTY_MEMBERS_CHANGED"
-- Constructor --
function PlayerHealth.prototype:init()
@ -69,9 +68,6 @@ function PlayerHealth.prototype:Enable(core)
PlayerHealth.super.prototype.Enable(self, core)
self:RegisterEvent("UNIT_HEALTH", "UpdateEvent")
if IceHUD.EventExistsUnitHealthFrequent then
self:RegisterEvent("UNIT_HEALTH_FREQUENT", "UpdateEvent")
end
self:RegisterEvent("UNIT_MAXHEALTH", "UpdateEvent")
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
@ -82,12 +78,14 @@ function PlayerHealth.prototype:Enable(core)
self:RegisterEvent("PLAYER_REGEN_DISABLED", "CheckCombat")
self:RegisterEvent("PARTY_LEADER_CHANGED", "CheckLeader")
self:RegisterEvent(groupEvent, "CheckLeader")
if GetLFGProposal then
self:RegisterEvent("LFG_PROPOSAL_UPDATE", "CheckPartyRole")
self:RegisterEvent("LFG_PROPOSAL_FAILED", "CheckPartyRole")
self:RegisterEvent("LFG_ROLE_UPDATE", "CheckPartyRole")
if IceHUD.WowVer >= 50000 then
self:RegisterEvent("GROUP_ROSTER_UPDATE", "CheckLeader")
else
self:RegisterEvent("PARTY_MEMBERS_CHANGED", "CheckLeader")
end
self:RegisterEvent("LFG_PROPOSAL_UPDATE", "CheckPartyRole")
self:RegisterEvent("LFG_PROPOSAL_FAILED", "CheckPartyRole")
self:RegisterEvent("LFG_ROLE_UPDATE", "CheckPartyRole")
--self:RegisterEvent("PARTY_MEMBERS_CHANGED", "CheckPartyFrameStatus")
@ -97,12 +95,10 @@ function PlayerHealth.prototype:Enable(core)
self:RegisterEvent("PLAYER_FLAGS_CHANGED", "CheckPvP")
self:RegisterEvent("UNIT_FACTION", "CheckPvP")
if UnitHasVehicleUI then
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "EnteringVehicle")
self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle")
end
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "EnteringVehicle")
self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle")
if not IceHUD.SupportsHealPrediction then
if IceHUD.WowVer < 40000 then
HealComm = LibStub("LibHealComm-4.0", true)
if HealComm then
HealComm.RegisterCallback(self, "HealComm_HealStarted", function(event, casterGUID, spellID, spellType, endTime, ...) self:HealComm_HealEvent(event, casterGUID, spellID, spellType, endTime, ...) end)
@ -115,9 +111,7 @@ function PlayerHealth.prototype:Enable(core)
self:RegisterEvent("UNIT_HEAL_PREDICTION", "IncomingHealPrediction")
end
if UnitGetTotalAbsorbs then
self:RegisterEvent("UNIT_ABSORB_AMOUNT_CHANGED", "UpdateAbsorbAmount")
end
self:RegisterEvent("UNIT_ABSORB_AMOUNT_CHANGED", "UpdateAbsorbAmount")
if (self.moduleSettings.hideBlizz) then
self:HideBlizz()
@ -166,7 +160,7 @@ function PlayerHealth.prototype:HealComm_ModifierChanged(event, guid)
end
function PlayerHealth.prototype:IncomingHealPrediction(event, unit)
if IceHUD.SupportsHealPrediction then
if IceHUD.WowVer >= 40000 then
if unit and unit ~= self.unit then
return
end
@ -318,7 +312,7 @@ function PlayerHealth.prototype:GetOptions()
self:Update()
end,
disabled = function()
return not (self.moduleSettings.enabled and (IceHUD.SupportsHealPrediction or HealComm))
return not (self.moduleSettings.enabled and (IceHUD.WowVer >= 40000 or HealComm))
end,
order = 43.6
}
@ -364,7 +358,7 @@ function PlayerHealth.prototype:GetOptions()
self:Update()
end,
disabled = function()
return not (self.moduleSettings.enabled and UnitGetTotalAbsorbs)
return not (self.moduleSettings.enabled and IceHUD.WowVer >= 70000)
end,
order = 43.8
}
@ -933,25 +927,25 @@ function PlayerHealth.prototype:CreateBackground(redraw)
end
function PlayerHealth.prototype:CreateHealBar()
self.healFrame = self:BarFactory(self.healFrame, "LOW","BACKGROUND", "Heal")
self.healFrame = self:BarFactory(self.healFrame, "LOW","BACKGROUND")
self.healFrame.bar:SetVertexColor(self:GetColor("PlayerHealthHealAmount", self.alpha * self.moduleSettings.healAlpha))
self:UpdateBar(1, "undef")
if not self.moduleSettings.showIncomingHeals or (not IceHUD.SupportsHealPrediction and not HealComm) then
if not self.moduleSettings.showIncomingHeals or (IceHUD.WowVer < 40000 and not HealComm) then
self.healFrame.bar:Hide()
end
end
function PlayerHealth.prototype:CreateAbsorbBar()
self.absorbFrame = self:BarFactory(self.absorbFrame, "LOW","BACKGROUND", "Absorb")
self.absorbFrame = self:BarFactory(self.absorbFrame, "LOW","BACKGROUND")
self.absorbFrame.bar:SetVertexColor(self:GetColor("PlayerHealthAbsorbAmount", self.alpha * self.moduleSettings.absorbAlpha))
self:UpdateBar(1, "undef")
if not self.moduleSettings.showAbsorbs or not UnitGetTotalAbsorbs then
if not self.moduleSettings.showAbsorbs or UnitGetTotalAbsorbs == nil then
self.absorbFrame.bar:Hide()
end
end
@ -1000,12 +994,10 @@ function PlayerHealth.prototype:EnteringWorld()
end
function PlayerHealth.prototype:CheckVehicle()
if UnitHasVehicleUI then
if UnitHasVehicleUI("player") then
self:EnteringVehicle(nil, "player", true)
else
self:ExitingVehicle(nil, "player")
end
if UnitHasVehicleUI("player") then
self:EnteringVehicle(nil, "player", true)
else
self:ExitingVehicle(nil, "player")
end
end
@ -1091,7 +1083,7 @@ function PlayerHealth.prototype:CheckPartyRole()
proposalExists, id, typeID, subtypeID, name, texture, role, hasResponded, totalEncounters, completedEncounters, numMembers, isleader = GetLFGProposal()
local p = self.unit
if not IceHUD.UnitGroupRolesReturnsRoleString then
if IceHUD.WowVer < 40000 then
isTank, isHeal, isDPS = UnitGroupRolesAssigned(p)
else
local grpRole = UnitGroupRolesAssigned(p)
@ -1168,7 +1160,7 @@ end
function PlayerHealth.prototype:CheckLeader()
local isLeader
if UnitIsGroupLeader then
if IceHUD.WowVer >= 50000 then
isLeader = UnitIsGroupLeader("player")
else
isLeader = IsPartyLeader()
@ -1404,56 +1396,15 @@ end
function PlayerHealth.prototype:ShowBlizz()
PlayerFrame:SetParent(self.OriginalPlayerFrameParent or UIParent)
PlayerFrame:Show()
PlayerFrame:GetScript("OnLoad")(PlayerFrame)
end
function PlayerHealth.prototype:HideBlizz()
if not self.PlayerFrameParent then
self.PlayerFrameParent = CreateFrame("Frame")
self.PlayerFrameParent:Hide()
end
PlayerFrame:Hide()
self.OriginalPlayerFrameParent = PlayerFrame:GetParent()
PlayerFrame:SetParent(self.PlayerFrameParent)
end
local parents = {}
local hide_frame = IceHUD:OutOfCombatWrapper(function(self) self:Hide() end)
local function hook_frames(...)
for i = 1, select("#", ...) do
local frame = select(i, ...)
frame:UnregisterAllEvents()
if not IceHUD:IsHooked(frame, "OnShow") then
IceHUD:SecureHookScript(frame, "OnShow", hide_frame)
end
frame:Hide()
end
end
local function unhook_frame(frame)
if IceHUD:IsHooked(frame, "OnShow") then
IceHUD:Unhook(frame, "OnShow")
local parent = parents[frame]
if parent then
frame:SetParent(parent)
end
elseif IceHUD:IsHooked(frame, "Show") then
IceHUD:Unhook(frame, "Show")
IceHUD:Unhook(frame, "SetPoint")
end
end
local function unhook_frames(...)
for i = 1, select("#", ...) do
local frame = select(i, ...)
unhook_frame(frame)
local handler = frame:GetScript("OnLoad")
if handler then
handler(frame)
end
end
PlayerFrame:UnregisterAllEvents()
end
function PlayerHealth.prototype:HideBlizzardParty()
@ -1462,34 +1413,37 @@ function PlayerHealth.prototype:HideBlizzardParty()
return
end
if PartyFrame then
PartyFrame:Hide()
PartyFrame:UnregisterEvent(groupEvent)
else
for i = 1, MAX_PARTY_MEMBERS do
local frame = _G["PartyMemberFrame" .. i]
frame:SetAttribute("statehidden", true)
hook_frames(frame)
end
UIParent:UnregisterEvent(groupEvent)
-- Both Pitbull 4 and Xperl use these exact code, so we use it too.
for i = 1, MAX_PARTY_MEMBERS do
local party = _G['PartyMemberFrame'..i]
party:UnregisterAllEvents()
party:Hide()
party.Show = function() end
end
UIParent:UnregisterEvent('RAID_ROSTER_UPDATE')
end
function PlayerHealth.prototype:ShowBlizzardParty()
if PartyFrame then
PartyFrame:Show()
PartyFrame:Layout()
PartyFrame:RegisterEvent(groupEvent)
else
for i = 1, MAX_PARTY_MEMBERS do
local frame = _G["PartyMemberFrame" .. i]
frame:SetAttribute("statehidden", nil)
unhook_frames(frame)
frame:GetScript("OnEvent")(frame, groupEvent)
-- Both Pitbull 4 and Xperl use these exact code, so we use it too.
for i = 1, MAX_PARTY_MEMBERS do
local frame = _G["PartyMemberFrame"..i]
if frame then
frame.Show = nil
frame:GetScript("OnLoad")(frame)
if IceHUD.WowVer >= 50000 then
frame:GetScript("OnEvent")(frame, "GROUP_ROSTER_UPDATE")
else
frame:GetScript("OnEvent")(frame, "PARTY_MEMBERS_CHANGED")
end
PartyMemberFrame_UpdateMember(frame)
end
UIParent:RegisterEvent(groupEvent)
end
UIParent:RegisterEvent("RAID_ROSTER_UPDATE")
end
--function PlayerHealth.prototype:ShowBlizzParty()

View File

@ -115,9 +115,7 @@ end
function PlayerInfo.prototype:ShowBlizz()
BuffFrame:Show()
if TemporaryEnchantFrame then
TemporaryEnchantFrame:Show()
end
TemporaryEnchantFrame:Show()
BuffFrame:GetScript("OnLoad")(BuffFrame)
end
@ -125,9 +123,7 @@ end
function PlayerInfo.prototype:HideBlizz()
BuffFrame:Hide()
if TemporaryEnchantFrame then
TemporaryEnchantFrame:Hide()
end
TemporaryEnchantFrame:Hide()
BuffFrame:UnregisterAllEvents()
end

View File

@ -13,7 +13,7 @@ local SPELL_POWER_FURY = SPELL_POWER_FURY
local SPELL_POWER_MAELSTROM = SPELL_POWER_MAELSTROM
local SPELL_POWER_PAIN = SPELL_POWER_PAIN
local SPELL_POWER_LUNAR_POWER = SPELL_POWER_LUNAR_POWER
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_MANA = Enum.PowerType.Mana
SPELL_POWER_RAGE = Enum.PowerType.Rage
SPELL_POWER_FOCUS = Enum.PowerType.Focus
@ -153,9 +153,9 @@ function PlayerMana.prototype:Enable(core)
self:CreateTickerFrame()
if not IceHUD.PerPowerEventsExist then
if IceHUD.WowVer >= 40000 then
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateEvent")
if IceHUD.EventExistsUnitMaxPower then
if IceHUD.WowVer < 80000 then
self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent")
end
else
@ -170,10 +170,8 @@ function PlayerMana.prototype:Enable(core)
self:RegisterEvent("UNIT_RUNIC_POWER", "UpdateEvent")
end
if UnitHasVehicleUI then
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "EnteringVehicle")
self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle")
end
self:RegisterEvent("UNIT_ENTERED_VEHICLE", "EnteringVehicle")
self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle")
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
if not self.CustomOnUpdate then
@ -193,17 +191,15 @@ function PlayerMana.prototype:EnteringWorld()
end
function PlayerMana.prototype:CheckVehicle()
if UnitHasVehicleUI then
if UnitHasVehicleUI("player") then
self:EnteringVehicle(nil, "player", true)
else
self:ExitingVehicle(nil, "player")
end
if UnitHasVehicleUI("player") then
self:EnteringVehicle(nil, "player", true)
else
self:ExitingVehicle(nil, "player")
end
end
function PlayerMana.prototype:ShouldUseTicker()
return IceHUD.WowVer < 30000 or (IceHUD.WowVer < 70100 and not GetCVarBool("predictedPower") and not IceHUD.WowClassicWrath)
return IceHUD.WowVer < 30000 or (IceHUD.WowVer < 70100 and not GetCVarBool("predictedPower"))
end
function PlayerMana.prototype:SetupOnUpdate(enable)
@ -280,7 +276,7 @@ function PlayerMana.prototype:ManaType(event, unit)
if self:ShouldUseTicker() then
-- register ticker for rogue energy
if self.moduleSettings.tickerEnabled and self.manaType == SPELL_POWER_ENERGY then
if (self.moduleSettings.tickerEnabled and (self.manaType == SPELL_POWER_ENERGY) and self.alive) then
self.tickerFrame:Show()
self.tickerFrame:SetScript("OnUpdate", function() self:EnergyTick() end)
else
@ -300,14 +296,6 @@ function PlayerMana.prototype:TreatEmptyAsFull()
or self.manaType == SPELL_POWER_FURY or self.manaType == SPELL_POWER_PAIN or self.manaType == SPELL_POWER_MAELSTROM))
end
function PlayerMana.prototype:IsFull(scale)
if IceHUD.WowVer >= 80000 and self.manaType == SPELL_POWER_LUNAR_POWER and IsPlayerSpell(202430) then
return scale - 0.5 >= 0
end
return PlayerMana.super.prototype.IsFull(self, scale)
end
function PlayerMana.prototype:UpdateEvent(event, unit, powertype)
self:Update(unit, powertype)
end
@ -353,13 +341,13 @@ function PlayerMana.prototype:Update(unit, powertype)
color = "PlayerRunicPower"
elseif (self.manaType == SPELL_POWER_FOCUS) then
color = "PlayerFocus"
elseif (self.manaType == SPELL_POWER_INSANITY) then
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_INSANITY) then
color = "PlayerInsanity"
elseif (self.manaType == SPELL_POWER_FURY) then
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_FURY) then
color = "PlayerFury"
elseif (self.manaType == SPELL_POWER_MAELSTROM) then
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_MAELSTROM) then
color = "PlayerMaelstrom"
elseif (self.manaType == SPELL_POWER_PAIN) then
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_PAIN) then
color = "PlayerPain"
end
end
@ -387,7 +375,7 @@ function PlayerMana.prototype:Update(unit, powertype)
if not IceHUD.IceCore:ShouldUseDogTags() then
-- extra hack for whiny rogues (are there other kind?)
local displayPercentage = self.manaPercentage
if self.manaType == SPELL_POWER_ENERGY or self.manaType == SPELL_POWER_FOCUS or self.manaType == SPELL_POWER_FURY then
if (self.manaType == SPELL_POWER_ENERGY) then
displayPercentage = self.mana
else
displayPercentage = math.floor(displayPercentage * 100)
@ -419,17 +407,17 @@ function PlayerMana.prototype:UpdateEnergy(event, unit)
return
end
if self:ShouldUseTicker() and
((not (self.previousEnergy) or (self.previousEnergy < UnitPower(self.unit, UnitPowerType(self.unit)))) and
(self.moduleSettings.tickerEnabled) and self.manaType == SPELL_POWER_ENERGY) then
self.tickStart = GetTime()
self.tickerFrame:Show()
end
self.previousEnergy = UnitPower(self.unit, UnitPowerType(self.unit))
if IceHUD.WowVer < 40000 then
self:Update(unit)
end
if self:ShouldUseTicker() and
((not (self.previousEnergy) or (self.previousEnergy <= UnitPower(self.unit, UnitPowerType(self.unit)))) and
(self.moduleSettings.tickerEnabled) and self.manaType == SPELL_POWER_ENERGY) then
self.tickStart = GetTime()
self.tickerFrame:Show()
end
end
@ -438,7 +426,7 @@ function PlayerMana.prototype:EnergyTick()
return
end
if not self.tickStart or not self.alive then
if not (self.tickStart) then
self.tickerFrame:Hide()
return
end

View File

@ -56,7 +56,7 @@ do
return
end
self.current = select(IceHUD.SpellFunctionsReturnRank and 15 or 14, UnitAura(self.unit, spellName)) or 0
self.current = select(IceHUD.WowVer < 80000 and 15 or 14, UnitAura(self.unit, spellName)) or 0
self:Update()
end
@ -79,7 +79,7 @@ end
-- Load for tanks only
local _, unitClass = UnitClass("player")
if (unitClass == "DEATHKNIGHT" or unitClass == "DRUID" or unitClass == "PALADIN" or unitClass == "WARRIOR" or unitClass == "MONK")
and GetSpellInfo(RESOLVE_SPELL_ID) then
if ((unitClass == "DEATHKNIGHT" or unitClass == "DRUID" or unitClass == "PALADIN" or unitClass == "WARRIOR" or unitClass == "MONK")
and IceHUD.WowVer >= 60000 and IceHUD.WowVer < 70000) then
IceHUD.Resolve = Resolve:new()
end

View File

@ -9,8 +9,6 @@ local maxComboPoints = 5
local rtbEndTime = 0
local rtbDuration = 0
local rtbCount = 0
local sixComboPointsTalentID = 19240
local behaviorDependsOnComboPoints = IceHUD.WowVer < 90000
local CurrMaxRtBDuration = 0
local PotentialRtBDuration = 0
@ -22,7 +20,7 @@ for _, v in ipairs(RtBBuffs) do
end
local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
end
@ -35,14 +33,12 @@ function RollTheBones.prototype:init()
self.moduleSettings.shouldAnimate = false
self:SetDefaultColor("RollTheBones", 1, 0.6, 0.2)
if behaviorDependsOnComboPoints then
self:SetDefaultColor("RollTheBones2", 0.75, 1, 0.2)
self:SetDefaultColor("RollTheBones3", 0.4, 1, 0.2)
self:SetDefaultColor("RollTheBones4", 0.4, 1, 0.2)
self:SetDefaultColor("RollTheBones5", 0.1, 1, 0.7)
self:SetDefaultColor("RollTheBones6", 0.1, 1, 0.7)
self:SetDefaultColor("RollTheBonesPotential", 1, 1, 1)
end
self:SetDefaultColor("RollTheBones2", 0.75, 1, 0.2)
self:SetDefaultColor("RollTheBones3", 0.4, 1, 0.2)
self:SetDefaultColor("RollTheBones4", 0.4, 1, 0.2)
self:SetDefaultColor("RollTheBones5", 0.1, 1, 0.7)
self:SetDefaultColor("RollTheBones6", 0.1, 1, 0.7)
self:SetDefaultColor("RollTheBonesPotential", 1, 1, 1)
self.bTreatEmptyAsFull = true
end
@ -54,10 +50,7 @@ function RollTheBones.prototype:Enable(core)
RollTheBones.super.prototype.Enable(self, core)
self:RegisterEvent("UNIT_AURA", "UpdateRollTheBones")
if behaviorDependsOnComboPoints then
self:RegisterEvent(IceHUD.UnitPowerEvent, "ComboPointsChanged")
end
self:RegisterEvent(IceHUD.UnitPowerEvent, "ComboPointsChanged")
if not self.moduleSettings.alwaysFullAlpha then
self:Show(false)
@ -113,60 +106,41 @@ function RollTheBones.prototype:GetOptions()
opts["textSettings"].args["upperTextString"]["desc"] = "The text to display under this bar. # will be replaced with the number of Roll the Bones seconds remaining."
opts["textSettings"].args["upperTextString"].hidden = false
if behaviorDependsOnComboPoints then
opts["showAsPercentOfMax"] =
{
type = 'toggle',
name = L["Show bar as % of maximum"],
desc = L["If this is checked, then the RtB buff time shows as a percent of the maximum attainable (taking set bonuses and talents into account). Otherwise, the bar always goes from full to empty when applying RtB no matter the duration."],
get = function()
return self.moduleSettings.showAsPercentOfMax
end,
set = function(info, v)
self.moduleSettings.showAsPercentOfMax = v
end,
disabled = function()
return not self.moduleSettings.enabled
end
}
opts["showAsPercentOfMax"] =
{
type = 'toggle',
name = L["Show bar as % of maximum"],
desc = L["If this is checked, then the RtB buff time shows as a percent of the maximum attainable (taking set bonuses and talents into account). Otherwise, the bar always goes from full to empty when applying RtB no matter the duration."],
get = function()
return self.moduleSettings.showAsPercentOfMax
end,
set = function(info, v)
self.moduleSettings.showAsPercentOfMax = v
end,
disabled = function()
return not self.moduleSettings.enabled
end
}
opts["durationAlpha"] =
{
type = "range",
name = L["Potential RtB time bar alpha"],
desc = L["What alpha value to use for the bar that displays how long your RtB will last if you activate it. (This gets multiplied by the bar's current alpha to stay in line with the bar on top of it)"],
min = 0,
max = 100,
step = 5,
get = function()
return self.moduleSettings.durationAlpha * 100
end,
set = function(info, v)
self.moduleSettings.durationAlpha = v / 100.0
self:Redraw()
end,
disabled = function()
return not self.moduleSettings.enabled
end
}
opts["bUseMultipleBuffColors"] =
{
type = 'toggle',
name = L["Use multiple buff colors"],
desc = L["If this is checked, then the bar uses different colors depending on how many RtB buffs you have"],
get = function()
return self.moduleSettings.bUseMultipleBuffColors
end,
set = function(info, v)
self.moduleSettings.bUseMultipleBuffColors = v
self:Redraw()
end,
disabled = function()
return not self.moduleSettings.enabled
end,
}
end
opts["durationAlpha"] =
{
type = "range",
name = L["Potential RtB time bar alpha"],
desc = L["What alpha value to use for the bar that displays how long your RtB will last if you activate it. (This gets multiplied by the bar's current alpha to stay in line with the bar on top of it)"],
min = 0,
max = 100,
step = 5,
get = function()
return self.moduleSettings.durationAlpha * 100
end,
set = function(info, v)
self.moduleSettings.durationAlpha = v / 100.0
self:Redraw()
end,
disabled = function()
return not self.moduleSettings.enabled
end
}
opts["bShowWithNoTarget"] =
{
@ -185,6 +159,23 @@ function RollTheBones.prototype:GetOptions()
end,
}
opts["bUseMultipleBuffColors"] =
{
type = 'toggle',
name = L["Use multiple buff colors"],
desc = L["If this is checked, then the bar uses different colors depending on how many RtB buffs you have"],
get = function()
return self.moduleSettings.bUseMultipleBuffColors
end,
set = function(info, v)
self.moduleSettings.bUseMultipleBuffColors = v
self:Redraw()
end,
disabled = function()
return not self.moduleSettings.enabled
end,
}
return opts
end
@ -195,11 +186,7 @@ function RollTheBones.prototype:CreateFrame()
end
function RollTheBones.prototype:CreateDurationBar()
if not behaviorDependsOnComboPoints then
return
end
self.durationFrame = self:BarFactory(self.durationFrame, "BACKGROUND","ARTWORK", "Duration")
self.durationFrame = self:BarFactory(self.durationFrame, "BACKGROUND","ARTWORK")
-- Rokiyo: Do we need to call this here?
self.CurrScale = 0
@ -217,9 +204,7 @@ end
function RollTheBones.prototype:RotateHorizontal()
RollTheBones.super.prototype.RotateHorizontal(self)
if self.durationFrame then
self:RotateFrame(self.durationFrame)
end
self:RotateFrame(self.durationFrame)
end
function RollTheBones.prototype:ResetRotation()
@ -235,7 +220,7 @@ end
function RollTheBones.prototype:GetBuffDuration(unitName, ids)
local i = 1
local buff, _, type, duration, endTime, spellId
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
buff, _, _, _, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
else
buff, _, _, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
@ -256,7 +241,7 @@ function RollTheBones.prototype:GetBuffDuration(unitName, ids)
i = i + 1;
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
buff, _, _, _, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
else
buff, _, _, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
@ -274,7 +259,7 @@ end
function RollTheBones.prototype:MyOnUpdate()
RollTheBones.super.prototype.MyOnUpdate(self)
if self.bUpdateRtb then
self:UpdateRollTheBones("internal", self.unit)
self:UpdateRollTheBones(nil, self.unit, true)
end
if self.target or self.moduleSettings.bShowWithNoTarget then
self:UpdateDurationBar()
@ -296,14 +281,13 @@ local function ShouldHide()
return not HasSpell(193316)
end
function RollTheBones.prototype:UpdateRollTheBones(event, unit)
function RollTheBones.prototype:UpdateRollTheBones(event, unit, fromUpdate)
if unit and unit ~= self.unit then
return
end
local now = GetTime()
local remaining = nil
local fromUpdate = event == "internal"
if not fromUpdate then
rtbDuration, remaining, rtbCount = self:GetBuffDuration(self.unit, RtBSet)
@ -324,7 +308,7 @@ function RollTheBones.prototype:UpdateRollTheBones(event, unit)
if not remaining then
remaining = rtbEndTime - now
end
local denominator = ((self.moduleSettings.showAsPercentOfMax and behaviorDependsOnComboPoints) and CurrMaxRtBDuration or rtbDuration)
local denominator = (self.moduleSettings.showAsPercentOfMax and CurrMaxRtBDuration or rtbDuration)
self:UpdateBar(denominator ~= 0 and remaining / denominator or 0, self:GetColorName(rtbCount))
else
self:UpdateBar(0, "RollTheBones")
@ -342,13 +326,13 @@ function RollTheBones.prototype:UpdateRollTheBones(event, unit)
-- somewhat redundant, but we also need to check potential remaining time
if (remaining ~= nil) or PotentialRtBDuration > 0 then
local potText = behaviorDependsOnComboPoints and " (" .. PotentialRtBDuration .. ")" or ""
local potText = " (" .. PotentialRtBDuration .. ")"
self:SetBottomText1(self.moduleSettings.upperText .. tostring(floor(remaining or 0)) .. (self.moduleSettings.durationAlpha ~= 0 and potText or ""))
end
end
function RollTheBones.prototype:GetColorName(count)
if behaviorDependsOnComboPoints and self.moduleSettings.bUseMultipleBuffColors and count >= 2 then
if self.moduleSettings.bUseMultipleBuffColors and count >= 2 then
return "RollTheBones"..count
else
return "RollTheBones"
@ -368,27 +352,19 @@ function RollTheBones.prototype:TargetChanged()
end
function RollTheBones.prototype:UpdateDurationBar(event, unit)
if not self.durationFrame then
return
end
if unit and unit ~= self.unit then
return
end
local points = RTBGetComboPoints(self.unit)
if UnitPowerMax then
CurrMaxRtBDuration = self:GetMaxBuffTime(UnitPowerMax(self.unit, SPELL_POWER_COMBO_POINTS))
-- check for Deeper Stratagem
local _, _, _, DeeperStratagem = GetTalentInfo(3, 1, 1)
if DeeperStratagem then
-- first, set the cached upper limit of RtB duration
CurrMaxRtBDuration = self:GetMaxBuffTime(maxComboPoints + 1)
else
-- 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
CurrMaxRtBDuration = self:GetMaxBuffTime(maxComboPoints)
end
if event then

View File

@ -3,23 +3,21 @@ local Runes = IceCore_CreateClass(IceElement)
local IceHUD = _G.IceHUD
local RunesReturnedByMaxPower = IceHUD.WowVer >= 70000
local CooldownFrame_SetTimer = CooldownFrame_SetTimer
if CooldownFrame_Set then
if IceHUD.WowVer >= 70000 then
CooldownFrame_SetTimer = CooldownFrame_Set
end
local RUNETYPE_BLOOD = 1;
local RUNETYPE_DEATH = IceHUD.DeathKnightUnholyFrostRunesSwapped and 2 or 3;
local RUNETYPE_FROST = IceHUD.DeathKnightUnholyFrostRunesSwapped and 3 or 2;
local RUNETYPE_DEATH = IceHUD.WowVer < 70300 and 2 or 3;
local RUNETYPE_FROST = IceHUD.WowVer < 70300 and 3 or 2;
local RUNETYPE_CHROMATIC = 4;
local RUNETYPE_LEGION = 5; -- not real, but makes for an easy update
local GetRuneType = GetRuneType
if IceHUD.WowVer >= 70000 and IceHUD.WowVer < 70300 then
GetRuneType = function() return RUNETYPE_LEGION end
elseif IceHUD.WowVer >= 70300 and GetSpecialization then
elseif IceHUD.WowVer >= 70300 then
GetRuneType = function() return GetSpecialization() end
end
@ -46,7 +44,7 @@ Runes.prototype.numRunes = 6
Runes.prototype.lastRuneState = {}
local SPELL_POWER_RUNES = SPELL_POWER_RUNES
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_RUNES = Enum.PowerType.Runes
end
@ -134,9 +132,6 @@ function Runes.prototype:GetOptions()
disabled = function()
return not self.moduleSettings.enabled
end,
hidden = function()
return not PlayerFrame_HideVehicleTexture
end,
order = 32
}
@ -270,7 +265,7 @@ end
-- OVERRIDE
function Runes.prototype:Enable(core)
if RunesReturnedByMaxPower then
if IceHUD.WowVer >= 70000 then
self.numRunes = UnitPowerMax("player", SPELL_POWER_RUNES)
end
@ -287,21 +282,14 @@ function Runes.prototype:Enable(core)
if IceHUD.WowVer >= 70300 then
self:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED", "UpdateRuneColors")
end
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
if RunesReturnedByMaxPower then
self:RegisterEvent("UNIT_MAXPOWER", "CheckMaxNumRunes")
end
self:RegisterEvent("PLAYER_ENTERING_WORLD", "ResetRuneAvailability")
self:RegisterEvent("UNIT_MAXPOWER", "CheckMaxNumRunes")
if (self.moduleSettings.hideBlizz) then
self:HideBlizz()
end
end
function Runes.prototype:EnteringWorld()
self:TargetChanged()
self:ResetRuneAvailability()
end
function Runes.prototype:Disable(core)
Runes.super.prototype.Disable(self, core)
@ -329,7 +317,9 @@ function Runes.prototype:ResetRuneAvailability(event)
self:UpdateRunePower(event, i, not event)
end
self:Redraw()
if not event then
self:Redraw()
end
end
-- simply shows/hides the foreground rune when it becomes usable/unusable. this allows the background transparent rune to show only
@ -348,9 +338,9 @@ function Runes.prototype:UpdateRunePower(event, rune, dontFlash)
local lastState = self.lastRuneState[rune]
self.lastRuneState[rune] = usable
-- if lastState == usable then
-- return
-- end
if lastState == usable then
return
end
-- print("Runes.prototype:UpdateRunePower: rune="..rune.." usable="..(usable and "yes" or "no").." GetRuneType(rune)="..GetRuneType(rune));
@ -364,7 +354,7 @@ function Runes.prototype:UpdateRunePower(event, rune, dontFlash)
self.frame.graphical[rune]:SetAlpha(1)
end
if not dontFlash and lastState ~= usable then
if not dontFlash then
local fadeInfo={
mode = "IN",
timeToFade = 0.25,
@ -388,6 +378,8 @@ function Runes.prototype:UpdateRunePower(event, rune, dontFlash)
self.frame.graphical[rune]:SetAlpha(0.2)
end
end
self:Redraw()
end
function Runes.prototype:GetNumRunesAvailable()
@ -510,7 +502,7 @@ function Runes.prototype:CreateRune(i, type, name)
-- create runes
if (not self.frame.graphical[i]) then
self.frame.graphical[i] = CreateFrame("Frame", nil, self.frame)
self.frame.graphical[i].rune = self.frame.graphical[i]:CreateTexture(nil, "BACKGROUND")
self.frame.graphical[i].rune = self.frame.graphical[i]:CreateTexture(nil, "LOW")
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].shine = self.frame.graphical[i]:CreateTexture(nil, "OVERLAY")
@ -571,7 +563,13 @@ function Runes.prototype:ShowBlizz()
RuneFrame:Show()
RuneFrame:GetScript("OnLoad")(RuneFrame)
RuneFrame:GetScript("OnEvent")(RuneFrame, "PLAYER_ENTERING_WORLD")
RuneFrame:GetScript("OnEvent")(frame, "PLAYER_ENTERING_WORLD")
for i=1, self.numRunes do
local frame = _G["RuneButtonIndividual"..i]
if frame then
frame:GetScript("OnLoad")(frame)
end
end
end
local function hook_playerframe()
@ -584,10 +582,6 @@ local function hook_playerframe()
end
function Runes.prototype:HideBlizz()
if not PlayerFrame_HideVehicleTexture then
return
end
RuneFrame:Hide()
RuneFrame:UnregisterAllEvents()

View File

@ -38,7 +38,7 @@ local DemonologyCoords =
}
local SPELL_POWER_SOUL_SHARDS = SPELL_POWER_SOUL_SHARDS
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_SOUL_SHARDS = Enum.PowerType.SoulShards
end
@ -67,7 +67,7 @@ function ShardCounter.prototype:Enable(core)
if IceHUD.WowVer >= 70000 then
self.numRunes = UnitPowerMax(self.unit, self.unitPower)
if IceHUD.WowVer >= 80000 or GetSpecialization() == SPEC_WARLOCK_DESTRUCTION then
if GetSpecialization() == SPEC_WARLOCK_DESTRUCTION then
self.shouldShowUnmodified = true
self.numericFormat = "%.1f"
self.round = floor
@ -107,7 +107,6 @@ function ShardCounter.prototype:UpdateRunePower(event, arg1, arg2)
end
if event == "PLAYER_ENTERING_WORLD" and IceHUD.WowVer < 70000 then
self:TargetChanged()
self:UpdatePowerType(event)
end
@ -276,6 +275,6 @@ end
-- Load us up
local _, unitClass = UnitClass("player")
if (unitClass == "WARLOCK" and WarlockPowerFrame) then
if (unitClass == "WARLOCK" and IceHUD.WowVer >= 40000) then
IceHUD.ShardCounter = ShardCounter:new()
end

View File

@ -20,36 +20,17 @@ local impSndBonusPerRank = 0.25
local maxComboPoints = 5
local sndEndTime = 0
local sndDuration = 0
local sixComboPointsTalentID = 19240
local CurrMaxSnDDuration = 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
baseTime = 12
gapPerComboPoint = 6
end
if IceHUD.WowClassic then
impSndBonusPerRank = 0.15
impSndTalentPage = 1
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
local SPELL_POWER_COMBO_POINTS = SPELL_POWER_COMBO_POINTS
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
end
@ -74,21 +55,12 @@ function SliceAndDice.prototype:Enable(core)
SliceAndDice.super.prototype.Enable(self, core)
self:RegisterEvent("UNIT_AURA", "UpdateSliceAndDice")
if IceHUD.EventExistsUnitComboPoints then
if IceHUD.WowVer < 70000 then
self:RegisterEvent("UNIT_COMBO_POINTS", "ComboPointsChanged")
else
self:RegisterEvent(IceHUD.UnitPowerEvent, "ComboPointsChanged")
end
if IceHUD.WowVer >= 70000 then
self:RegisterEvent("PLAYER_TALENT_UPDATE", "CheckMaxComboPoints")
self:CheckMaxComboPoints()
end
if IceHUD.EventExistsUnitMaxPower then
self:RegisterEvent("UNIT_MAXPOWER", "CheckMaxComboPoints")
end
if not self.moduleSettings.alwaysFullAlpha then
self:Show(false)
else
@ -98,15 +70,6 @@ function SliceAndDice.prototype:Enable(core)
self:SetBottomText1("")
end
function SliceAndDice.prototype:CheckMaxComboPoints()
if UnitPowerMax then
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
function SliceAndDice.prototype:Disable(core)
SliceAndDice.super.prototype.Disable(self, core)
end
@ -214,7 +177,7 @@ function SliceAndDice.prototype:CreateFrame()
end
function SliceAndDice.prototype:CreateDurationBar()
self.durationFrame = self:BarFactory(self.durationFrame, "BACKGROUND","ARTWORK", "Duration")
self.durationFrame = self:BarFactory(self.durationFrame, "BACKGROUND","ARTWORK")
-- Rokiyo: Do we need to call this here?
self.CurrScale = 0
@ -248,7 +211,7 @@ end
function SliceAndDice.prototype:GetBuffDuration(unitName, buffName)
local i = 1
local buff, _, texture, duration, endTime, remaining
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
buff, _, texture, _, _, duration, endTime = UnitBuff(unitName, i)
else
buff, texture, _, _, duration, endTime = UnitBuff(unitName, i)
@ -264,7 +227,7 @@ function SliceAndDice.prototype:GetBuffDuration(unitName, buffName)
i = i + 1;
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
buff, _, texture, _, _, duration, endTime = UnitBuff(unitName, i)
else
buff, texture, _, _, duration, endTime = UnitBuff(unitName, i)
@ -277,7 +240,7 @@ end
function SliceAndDice.prototype:MyOnUpdate()
SliceAndDice.super.prototype.MyOnUpdate(self)
if self.bUpdateSnd then
self:UpdateSliceAndDice("internal", self.unit)
self:UpdateSliceAndDice(nil, self.unit, true)
end
if self.target or self.moduleSettings.bShowWithNoTarget then
self:UpdateDurationBar()
@ -285,10 +248,10 @@ function SliceAndDice.prototype:MyOnUpdate()
end
local function SNDGetComboPoints(unit)
if IceHUD.PerTargetComboPoints then
return GetComboPoints(unit, "target")
elseif IceHUD.WowVer >= 60000 then
if IceHUD.WowVer >= 60000 then
return UnitPower(unit, SPELL_POWER_COMBO_POINTS)
elseif IceHUD.WowVer >= 30000 then
return GetComboPoints(unit, "target")
else
return GetComboPoints()
end
@ -302,27 +265,22 @@ local function HasSpell(id)
end
local function ShouldHide()
if IceHUD.WowVer >= 90000 or IceHUD.WowClassicBC or IceHUD.WowClassicWrath then
return false
end
return --[[(IceHUD.WowVer < 70000 or not IsSpellKnown(193316)) and]] not IsPlayerSpell(5171) -- IsSpellKnown returns incorrect info for SnD in 7.0
-- commented code is here in case we decide we'd like to use this module for Roll the Bones.
-- if we do, though, the "active" check gets way more complicated since it can activate any number of 6 different abilities
-- with different durations
end
function SliceAndDice.prototype:UpdateSliceAndDice(event, unit)
function SliceAndDice.prototype:UpdateSliceAndDice(event, unit, fromUpdate)
if unit and unit ~= self.unit then
return
end
local now = GetTime()
local remaining = nil
local fromUpdate = event == "internal"
if not fromUpdate or IceHUD.WowVer < 30000 then
sndDuration, remaining = self:GetBuffDuration(self.unit, sndBuffName)
sndDuration, remaining = self:GetBuffDuration(self.unit, IceHUD.WowVer < 80000 and "Ability_Rogue_SliceDice" or 132306)
if not remaining then
sndEndTime = 0
@ -424,11 +382,13 @@ function SliceAndDice.prototype:UpdateDurationBar(event, unit)
end
function SliceAndDice.prototype:GetMaxBuffTime(numComboPoints)
local maxduration
if numComboPoints == 0 then
return 0
end
local maxduration = baseTime + ((numComboPoints - 1) * gapPerComboPoint)
maxduration = baseTime + ((numComboPoints - 1) * gapPerComboPoint)
if self:HasNetherbladeBonus() then
maxduration = maxduration + netherbladeBonus
@ -444,10 +404,8 @@ function SliceAndDice.prototype:GetMaxBuffTime(numComboPoints)
end
local rank = 0
if GetTalentInfo then
local _
_, _, _, _, rank = GetTalentInfo(impSndTalentPage, impSndTalentIdx)
end
local _
_, _, _, _, rank = GetTalentInfo(impSndTalentPage, impSndTalentIdx)
maxduration = maxduration * (1 + (rank * impSndBonusPerRank))
end
@ -508,9 +466,6 @@ function SliceAndDice.prototype:HasNineTailedBonus()
end
function SliceAndDice.prototype:HasGlyphBonus()
if not GetNumGlyphSockets then
return false
end
for i=1,GetNumGlyphSockets() do
local enabled, _, _, spell = GetGlyphSocketInfo(i)

View File

@ -13,7 +13,6 @@ local ModerateID = 124274
local HeavyID = 124273
local StaggerID = 124255
local staggerNames = {"", "", ""}
local staggerIds = {LightID, ModerateID, HeavyID}
local MinLevel = 10
@ -137,7 +136,7 @@ function StaggerBar.prototype:CreateFrame()
end
function StaggerBar.prototype:CreateTimerBar()
self.timerFrame = self:BarFactory(self.timerFrame, "MEDIUM","ARTWORK", "Timer")
self.timerFrame = self:BarFactory(self.timerFrame, "MEDIUM","ARTWORK")
self.CurrScale = 0
@ -157,7 +156,6 @@ function StaggerBar.prototype:UpdateShown()
end
function StaggerBar.prototype:PLAYER_ENTERING_WORLD()
self:TargetChanged()
self:UpdateStaggerBar()
end
@ -167,7 +165,7 @@ end
function StaggerBar.prototype:GetDebuffInfo()
if IceHUD.WowVer >= 70000 then
self.amount = UnitStagger(self.unit) or 0
self.amount = UnitStagger(self.unit)
self.staggerLevel = 1
local healthMax = UnitHealthMax(self.unit)
@ -185,13 +183,13 @@ function StaggerBar.prototype:GetDebuffInfo()
local staggerLevel = 1
for i = 1, IceCore.BuffLimit do
local debuffID = select(IceHUD.SpellFunctionsReturnRank and 11 or 10, UnitDebuff(self.unit, i))
local debuffID = select(IceHUD.WowVer < 80000 and 11 or 10, UnitDebuff(self.unit, i))
if debuffID == LightID or debuffID == ModerateID or debuffID == HeavyID then
local spellName = UnitDebuff(self.unit, i)
duration = select(IceHUD.SpellFunctionsReturnRank and 6 or 5, UnitAura(self.unit, spellName, "", "HARMFUL"))
amount = select(IceHUD.SpellFunctionsReturnRank and 15 or 14, UnitAura(self.unit, spellName, "", "HARMFUL"))
duration = select(IceHUD.WowVer < 80000 and 6 or 5, UnitAura(self.unit, spellName, "", "HARMFUL"))
amount = select(IceHUD.WowVer < 80000 and 15 or 14, UnitAura(self.unit, spellName, "", "HARMFUL"))
staggerLevel = (debuffID == LightID) and 1 or (debuffID == ModerateID) and 2 or 3
break
@ -203,14 +201,9 @@ function StaggerBar.prototype:GetDebuffInfo()
self.staggerLevel = staggerLevel or 1
end
function StaggerBar.prototype:COMBAT_LOG_EVENT_UNFILTERED(...)
local eventArgs = {...}
if (CombatLogGetCurrentEventInfo) then
eventArgs = {CombatLogGetCurrentEventInfo()}
end
if eventArgs[9] == playerName then
if eventArgs[12] == StaggerID or eventArgs[2] == "SWING_DAMAGE" or eventArgs[2] == "SPELL_AURA_APPLIED" or eventArgs[2] == "SPELL_AURA_REMOVED" then
function StaggerBar.prototype:COMBAT_LOG_EVENT_UNFILTERED(_, timestamp, event, hideCaster, sourceGUID, sourceName, sourceFlags, sourceFlags2, destGUID, destName, destFlags, destFlags2, spellID)
if destName == playerName then
if spellID == StaggerID or event == "SWING_DAMAGE" or event == "SPELL_AURA_APPLIED" or event == "SPELL_AURA_REMOVED" then
self:UpdateStaggerBar()
end
end
@ -223,7 +216,7 @@ function StaggerBar.prototype:UpdateStaggerBar()
local maxHealth = UnitHealthMax(self.unit)
local scale = IceHUD:Clamp((self.amount / maxHealth) * (100 / self.moduleSettings.maxPercent), 0, 1)
if self.amount > 0 and (IceHUD.WowVer >= 70000 or self.duration <= 10) then
if self.amount > 0 and (IceHUD.WowVer >= 7000 or self.duration <= 10) then
-- self.timerFrame.bar:SetVertexColor(self:GetColor("StaggerTime", self.moduleSettings.timerAlpha))
self:UpdateBar(scale or 0, "Stagger"..self.staggerLevel)
self:UpdateShown()
@ -234,19 +227,12 @@ function StaggerBar.prototype:UpdateStaggerBar()
end
end
function StaggerBar.prototype:GetDebuffDuration(unitName, buffId)
function StaggerBar.prototype:GetDebuffDuration(unitName, buffName)
local name, _, duration, endTime
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
name, _, _, _, _, duration, endTime = UnitDebuff(unitName, buffName)
else
for i = 1, IceCore.BuffLimit do
local id
name, _, _, _, duration, endTime, _, _, _, id = UnitDebuff(unitName, i)
if id == buffId then
break
end
end
name, _, _, _, duration, endTime = UnitDebuff(unitName, buffName)
end
if name then
@ -274,7 +260,7 @@ function StaggerBar.prototype:UpdateTimerFrame(event, unit, fromUpdate)
if not fromUpdate then
for i = 1, 3 do
self.StaggerDuration, remaining = self:GetDebuffDuration(self.unit, staggerIds[i])
self.StaggerDuration, remaining = self:GetDebuffDuration(self.unit, staggerNames[i])
if remaining then
break

View File

@ -7,7 +7,7 @@ TargetCC.prototype.debuffRemaining = 0
TargetCC.prototype.debuffDuration = 0
local GetNumPartyMembers, GetNumRaidMembers = GetNumPartyMembers, GetNumRaidMembers
if GetNumGroupMembers then
if IceHUD.WowVer >= 50000 then
GetNumPartyMembers = GetNumGroupMembers
GetNumRaidMembers = GetNumGroupMembers
end
@ -53,8 +53,6 @@ local StunCCList = {
105593,
-- Remorseless Winter
115001,
-- Between the Eyes
199804,
}
local IncapacitateCCList = {
@ -80,14 +78,6 @@ local IncapacitateCCList = {
28271,
-- Polymorph: Penguin
59634,
-- Polymorph: Monkey
161354,
-- Polymorph: Polar Bear Cub
120137,
-- Polymorph: Porcupine
120140,
-- Polymorph: Direhorn
162625,
-- Hibernate
2637,
-- Freezing Trap Effect
@ -113,8 +103,6 @@ local IncapacitateCCList = {
local FearCCList = {
-- Psychic Scream
8122,
-- Fear (Retail)
118699,
-- Fear
5782,
-- Howl of Terror
@ -125,16 +113,6 @@ local FearCCList = {
5246,
-- Hex
51514,
-- Hex: Compy
210873,
-- Hex: Wicker Mongrel
277784,
-- Hex: Zandalari Tendonripper
277778,
-- Hex: Spider
211004,
-- Hex: Skeletal Hatchling
269352,
-- Scare Beast
1513,
}
@ -338,7 +316,7 @@ end
function TargetCC.prototype:GetMaxDebuffDuration(unitName, debuffNames)
local i = 1
local debuff, rank, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
debuff, rank, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, "HARMFUL")
else
debuff, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, "HARMFUL")
@ -362,7 +340,7 @@ function TargetCC.prototype:GetMaxDebuffDuration(unitName, debuffNames)
i = i + 1;
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
debuff, rank, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, "HARMFUL")
else
debuff, texture, count, debuffType, duration, endTime, unitCaster, _, _, spellId = UnitAura(unitName, i, "HARMFUL")
@ -375,12 +353,11 @@ end
function TargetCC.prototype:MyOnUpdate()
TargetCC.super.prototype.MyOnUpdate(self)
self:UpdateTargetDebuffs("internal", self.unit)
self:UpdateTargetDebuffs(nil, self.unit, true)
end
function TargetCC.prototype:UpdateTargetDebuffs(event, unit)
function TargetCC.prototype:UpdateTargetDebuffs(event, unit, isUpdate)
local name, duration, remaining
local isUpdate = event == "internal"
if not isUpdate or not self.lastUpdateTime then
self.debuffName, self.debuffDuration, self.debuffRemaining = self:GetMaxDebuffDuration(self.unit, self.debuffList)

View File

@ -15,10 +15,8 @@ end
function TargetCast.prototype:Enable(core)
TargetCast.super.prototype.Enable(self, core)
if IceHUD.EventExistsSpellcastInterruptible then
self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTIBLE", "SpellCastInterruptible")
self:RegisterEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "SpellCastNotInterruptible")
end
self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTIBLE", "SpellCastInterruptible")
self:RegisterEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "SpellCastNotInterruptible")
end
@ -65,12 +63,7 @@ function TargetCast.prototype:GetDefaultSettings()
settings["side"] = IceCore.Side.Right
settings["offset"] = 3
settings["flashInstants"] = "Never"
-- Fulzamoth 2019-09-27 : let the flash handler work if in Classic and LibClassicCasterino exists
if LibClassicCasterino then
settings["flashFailures"] = ""
else
settings["flashFailures"] = "Never"
end
settings["flashFailures"] = "Never"
settings["shouldAnimate"] = false
settings["hideAnimationSettings"] = true
settings["usesDogTagStrings"] = false
@ -89,24 +82,20 @@ function TargetCast.prototype:TargetChanged(unit)
return
end
if UnitCastingInfo then
local spell = UnitCastingInfo(self.unit)
local notInterruptible = select(IceHUD.SpellFunctionsReturnRank and 9 or 8, UnitCastingInfo(self.unit))
if spell then
self.notInterruptible = notInterruptibleCast
self:StartBar(IceCastBar.Actions.Cast)
return
end
local spell = UnitCastingInfo(self.unit)
local notInterruptible = select(IceHUD.WowVer < 80000 and 9 or 8, UnitCastingInfo(self.unit))
if spell then
self.notInterruptible = notInterruptibleCast
self:StartBar(IceCastBar.Actions.Cast)
return
end
if UnitChannelInfo then
local channel = UnitChannelInfo(self.unit)
notInterruptible = select(IceHUD.SpellFunctionsReturnRank and 8 or 7, UnitChannelInfo(self.unit))
if channel then
self.notInterruptible = notInterruptibleChannel
self:StartBar(IceCastBar.Actions.Channel)
return
end
local channel = UnitChannelInfo(self.unit)
notInterruptible = select(IceHUD.WowVer < 80000 and 8 or 7, UnitChannelInfo(self.unit))
if channel then
self.notInterruptible = notInterruptibleChannel
self:StartBar(IceCastBar.Actions.Channel)
return
end
self:StopBar()
@ -180,18 +169,15 @@ function TargetCast.prototype:GetOptions()
end
function TargetCast.prototype:StartBar(action, message)
local spell, notInterruptible
if UnitCastingInfo then
spell = UnitCastingInfo(self.unit)
notInterruptible = select(IceHUD.SpellFunctionsReturnRank and 9 or 8, UnitCastingInfo(self.unit))
end
if UnitChannelInfo and not spell then
local spell = UnitCastingInfo(self.unit)
local notInterruptible = select(IceHUD.WowVer < 80000 and 9 or 8, UnitCastingInfo(self.unit))
if not spell then
spell = UnitChannelInfo(self.unit)
notInterruptible = select(IceHUD.SpellFunctionsReturnRank and 8 or 7, UnitChannelInfo(self.unit))
notInterruptible = select(IceHUD.WowVer < 80000 and 8 or 7, UnitChannelInfo(self.unit))
end
if not spell then
return
end
if not spell then
return
end
self.notInterruptible = notInterruptible
@ -202,8 +188,5 @@ end
-------------------------------------------------------------------------------
-- Fulzamoth 2019-09-27 : load in Classic if LibClassicCasterino exists
-- Load us up
if not IceHUD.WowClassic or LibClassicCasterino then
IceHUD.TargetCast = TargetCast:new()
end
IceHUD.TargetCast = TargetCast:new()

View File

@ -637,15 +637,9 @@ function IceTargetHealth.prototype:Enable(core)
self:RegisterEvent("UPDATE_FACTION", "CheckPvP")
self:RegisterEvent("PLAYER_FLAGS_CHANGED", "CheckPvP")
self:RegisterEvent("UNIT_FACTION", "CheckPvP")
if GetLFGRoles then
self:RegisterEvent("LFG_PROPOSAL_UPDATE", "CheckPartyRole")
self:RegisterEvent("LFG_PROPOSAL_FAILED", "CheckPartyRole")
self:RegisterEvent("LFG_ROLE_UPDATE", "CheckPartyRole")
end
if IceHUD.ShouldUpdateTargetHealthEveryTick and self.unit == "target" then
self.frame:SetScript("OnUpdate", function() self:Update(self.unit) end)
end
self:RegisterEvent("LFG_PROPOSAL_UPDATE", "CheckPartyRole")
self:RegisterEvent("LFG_PROPOSAL_FAILED", "CheckPartyRole")
self:RegisterEvent("LFG_ROLE_UPDATE", "CheckPartyRole")
end
if (self.moduleSettings.hideBlizz) then
@ -663,10 +657,6 @@ function IceTargetHealth.prototype:Disable(core)
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
self:ShowBlizz()
end
@ -850,46 +840,21 @@ function IceTargetHealth.prototype:Update(unit)
self:UpdateBar(self.healthPercentage, self.color)
if IsAddOnLoaded("RealMobHealth") then
if not IceHUD.IceCore:ShouldUseDogTags() and self.frame:IsVisible() then
self:SetBottomText1(math.floor(self.healthPercentage * 100))
if not IceHUD.IceCore:ShouldUseDogTags() and self.frame:IsVisible() then
self:SetBottomText1(math.floor(self.healthPercentage * 100))
if self.moduleSettings.abbreviateHealth then
if RealMobHealth.UnitHasHealthData(unit) then
self.health, self.maxHealth = RealMobHealth.GetUnitHealth(unit)
end
self.health = self:Round(self.health)
self.maxHealth = self:Round(self.maxHealth)
end
if RealMobHealth.UnitHasHealthData(unit) or (self.maxHealth ~= 100) then
if RealMobHealth.UnitHasHealthData(unit) then
self.health, self.maxHealth = RealMobHealth.GetUnitHealth(unit)
self:SetBottomText2(self:GetFormattedText(self.health, self.maxHealth), self.color)
else
self:SetBottomText2(self:GetFormattedText(self.health, self.maxHealth), self.color)
end
else
self:SetBottomText2()
end
if self.moduleSettings.abbreviateHealth then
self.health = self:Round(self.health)
self.maxHealth = self:Round(self.maxHealth)
end
else
if not IceHUD.IceCore:ShouldUseDogTags() and self.frame:IsVisible() then
self:SetBottomText1(math.floor(self.healthPercentage * 100))
if self.moduleSettings.abbreviateHealth then
self.health = self:Round(self.health)
self.maxHealth = self:Round(self.maxHealth)
end
if (self.maxHealth ~= 100) then
self:SetBottomText2(self:GetFormattedText(self.health, self.maxHealth), self.color)
else
self:SetBottomText2()
end
end
if (self.maxHealth ~= 100) then
self:SetBottomText2(self:GetFormattedText(self.health, self.maxHealth), self.color)
else
self:SetBottomText2()
end
end
self:CheckPvP()
self:CheckPartyRole()
self:SetIconAlpha()
@ -1065,25 +1030,20 @@ end
function IceTargetHealth.prototype:ShowBlizz()
TargetFrame:SetParent(self.OriginalTargetFrameParent or UIParent)
ComboFrame:SetParent(self.OriginalComboFrameParent or UIParent)
TargetFrame:Show()
TargetFrame:GetScript("OnLoad")(TargetFrame)
ComboFrame:Show()
ComboFrame:GetScript("OnLoad")(ComboFrame)
end
function IceTargetHealth.prototype:HideBlizz()
if not self.TargetFrameParent then
self.TargetFrameParent = CreateFrame("Frame")
self.TargetFrameParent:Hide()
end
if not self.ComboFrameParent then
self.ComboFrameParent = CreateFrame("Frame")
self.ComboFrameParent:Hide()
end
TargetFrame:Hide()
TargetFrame:UnregisterAllEvents()
self.OriginalTargetFrameParent = TargetFrame:GetParent()
TargetFrame:SetParent(self.TargetFrameParent)
self.OriginalComboFrameParent = ComboFrame:GetParent()
ComboFrame:SetParent(self.ComboFrameParent)
ComboFrame:Hide()
ComboFrame:UnregisterAllEvents()
end
function IceTargetHealth.prototype:UpdateBar(scale, color, alpha)
@ -1108,7 +1068,7 @@ function IceTargetHealth.prototype:CheckPartyRole()
proposalExists, id, typeID, subtypeID, name, texture, role, hasResponded, totalEncounters, completedEncounters, numMembers, isleader = GetLFGProposal()
local p = self.unit
if not IceHUD.UnitGroupRolesReturnsRoleString then
if IceHUD.WowVer < 40000 then
isTank, isHeal, isDPS = UnitGroupRolesAssigned(p)
else
local grpRole = UnitGroupRolesAssigned(p)

View File

@ -2,7 +2,7 @@ local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
IceTargetInfo = IceCore_CreateClass(IceElement)
local CooldownFrame_SetTimer = CooldownFrame_SetTimer
if CooldownFrame_Set then
if IceHUD.WowVer >= 70000 then
CooldownFrame_SetTimer = CooldownFrame_Set
end
@ -12,10 +12,6 @@ local internal = "internal"
local ValidAnchors = { "TOPLEFT", "TOPRIGHT", "BOTTOMLEFT", "BOTTOMRIGHT", "CENTER" }
---- Fulzamoth - 2019-09-04 : support for cooldowns on target buffs/debuffs (classic)
local LibClassicDurations = LibStub("LibClassicDurations", 1)
---- end change by Fulzamoth
IceTargetInfo.prototype.unit = "target"
IceTargetInfo.prototype.buffSize = nil
@ -133,7 +129,7 @@ function IceTargetInfo.prototype:Enable(core)
self:RegisterEvent("UNIT_LEVEL", "TargetLevel")
self:RegisterEvent("UNIT_FLAGS", "TargetFlags")
if IceHUD.EventExistsUnitDynamicFlags then
if IceHUD.WowVer < 80000 then
self:RegisterEvent("UNIT_DYNAMIC_FLAGS", "TargetFlags")
end
@ -1414,27 +1410,10 @@ function IceTargetInfo.prototype:UpdateBuffType(aura)
if self.moduleSettings.auras[aura].show then
for i = 1, IceCore.BuffLimit do
local name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable
---- Fulzamoth - 2019-09-04 : support for cooldowns on target buffs/debuffs (classic)
local spellID
---- end change by Fulzamoth
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable = UnitAura(self.unit, i, reaction .. (filter and "|PLAYER" or ""))
else
---- Fulzamoth - 2019-09-04 : support for cooldowns on target buffs/debuffs (classic)
-- 1. in addition to other info, get the spellID for for the (de)buff
name, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, _, spellID = UnitAura(self.unit, i, reaction .. (filter and "|PLAYER" or ""))
if duration == 0 and LibClassicDurations then
-- 2. if no duration defined for the (de)buff, look up the spell in LibClassicDurations
local classicDuration, classicExpirationTime = LibClassicDurations:GetAuraDurationByUnit(self.unit, spellID, caster)
-- 3. set the duration if we found one.
if classicDuration then
duration = classicDuration
expirationTime = classicExpirationTime
end
end
---- end change by Fulzamoth
name, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable = UnitAura(self.unit, i, reaction .. (filter and "|PLAYER" or ""))
end
local isFromMe = (unitCaster == "player")
@ -1605,7 +1584,7 @@ function IceTargetInfo.prototype:TargetName(event, unit)
end
if UnitIsPartyLeader then
if IceHUD.WowVer < 50000 then
self.leader = UnitIsPartyLeader(self.unit) and " |cffcccc11Leader|r" or ""
else
self.leader = UnitIsGroupLeader(self.unit) and " |cffcccc11Leader|r" or ""
@ -1676,7 +1655,7 @@ end
function IceTargetInfo.prototype:TargetFlags(event, unit)
if (unit == self.unit or unit == internal) then
if UnitIsTapped then
if IceHUD.WowVer < 70000 then
self.tapped = UnitIsTapped(self.unit) and (not UnitIsTappedByPlayer(self.unit))
else
self.tapped = UnitIsTapDenied(self.unit)

View File

@ -7,7 +7,7 @@ TargetInvuln.prototype.buffRemaining = 0
TargetInvuln.prototype.buffDuration = 0
local GetNumPartyMembers, GetNumRaidMembers = GetNumPartyMembers, GetNumRaidMembers
if GetNumGroupMembers then
if IceHUD.WowVer >= 50000 then
GetNumPartyMembers = GetNumGroupMembers
GetNumRaidMembers = GetNumGroupMembers
end
@ -147,7 +147,7 @@ end
function TargetInvuln.prototype:GetMaxbuffDuration(unitName, buffNames)
local i = 1
local buff, rank, texture, count, buffType, duration, endTime, unitCaster
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
buff, rank, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
else
buff, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
@ -178,7 +178,7 @@ function TargetInvuln.prototype:GetMaxbuffDuration(unitName, buffNames)
i = i + 1;
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
buff, rank, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
else
buff, texture, count, buffType, duration, endTime, unitCaster = UnitAura(unitName, i, "HELPFUL")
@ -191,14 +191,13 @@ end
function TargetInvuln.prototype:MyOnUpdate()
TargetInvuln.super.prototype.MyOnUpdate(self)
self:UpdateTargetBuffs("internal", self.unit)
self:UpdateTargetBuffs(nil, self.unit, true)
end
function TargetInvuln.prototype:UpdateTargetBuffs(event, unit)
function TargetInvuln.prototype:UpdateTargetBuffs(event, unit, isUpdate)
local name, duration, remaining
local isUpdate = event == "internal"
if not isUpdate or not self.lastUpdateTime then
if not isUpdate then
self.buffName, self.buffDuration, self.buffRemaining = self:GetMaxbuffDuration(self.unit, self.buffList)
else
self.buffRemaining = math.max(0, self.buffRemaining - (GetTime() - self.lastUpdateTime))

View File

@ -14,7 +14,7 @@ local SPELL_POWER_FURY = SPELL_POWER_FURY
local SPELL_POWER_MAELSTROM = SPELL_POWER_MAELSTROM
local SPELL_POWER_PAIN = SPELL_POWER_PAIN
local SPELL_POWER_LUNAR_POWER = SPELL_POWER_LUNAR_POWER
if Enum and Enum.PowerType then
if IceHUD.WowVer >= 80000 then
SPELL_POWER_MANA = Enum.PowerType.Mana
SPELL_POWER_RAGE = Enum.PowerType.Rage
SPELL_POWER_FOCUS = Enum.PowerType.Focus
@ -66,9 +66,9 @@ function IceTargetMana.prototype:Enable(core)
IceTargetMana.super.prototype.Enable(self, core)
if self.registerEvents then
if not IceHUD.PerPowerEventsExist then
if IceHUD.WowVer >= 40000 then
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateEvent")
if IceHUD.EventExistsUnitMaxPower then
if IceHUD.WowVer < 80000 then
self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent")
end
else
@ -83,7 +83,7 @@ function IceTargetMana.prototype:Enable(core)
self:RegisterEvent("UNIT_FOCUS", "UpdateEvent")
-- DK rune stuff
if SPELL_POWER_RUNIC_POWER then
if IceHUD.WowVer >= 30000 then
self:RegisterEvent("UNIT_RUNIC_POWER", "UpdateEvent")
self:RegisterEvent("UNIT_MAXRUNIC_POWER", "UpdateEvent")
end
@ -135,13 +135,13 @@ function IceTargetMana.prototype:Update(unit)
self.color = "TargetEnergy"
elseif (manaType == SPELL_POWER_RUNIC_POWER) then
self.color = "TargetRunicPower"
elseif (manaType == SPELL_POWER_INSANITY) then
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_INSANITY) then
self.color = "TargetInsanity"
elseif (manaType == SPELL_POWER_FURY) then
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_FURY) then
self.color = "TargetFury"
elseif (manaType == SPELL_POWER_MAELSTROM) then
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_MAELSTROM) then
self.color = "TargetMaelstrom"
elseif (manaType == SPELL_POWER_PAIN) then
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_PAIN) then
self.color = "TargetPain"
end
@ -156,7 +156,7 @@ function IceTargetMana.prototype:Update(unit)
if not IceHUD.IceCore:ShouldUseDogTags() then
self:SetBottomText1(math.floor(self.manaPercentage * 100))
self:SetBottomText2(self:GetFormattedText(self.mana, self.maxMana), self.color)
self:SetBottomText2(self:GetFormattedText(self.mana, self.maxMana), color)
end
end

View File

@ -486,7 +486,7 @@ function TargetOfTarget.prototype:UpdateBuffs()
if (self.moduleSettings.showDebuffs) then
for i = 1, IceCore.BuffLimit do
local buffName, buffRank, buffTexture, buffApplications
if IceHUD.SpellFunctionsReturnRank then
if IceHUD.WowVer < 80000 then
buffName, buffRank, buffTexture, buffApplications = UnitDebuff(self.unit, i)
else
buffName, buffTexture, buffApplications = UnitDebuff(self.unit, i)

View File

@ -58,20 +58,16 @@ function TargetTargetCast.prototype:UpdateTargetTarget()
return
end
if UnitCastingInfo then
local spell = UnitCastingInfo(self.unit)
if spell then
self:StartBar(IceCastBar.Actions.Cast)
return
end
local spell = UnitCastingInfo(self.unit)
if (spell) then
self:StartBar(IceCastBar.Actions.Cast)
return
end
if UnitChannelInfo then
local channel = UnitChannelInfo(self.unit)
if channel then
self:StartBar(IceCastBar.Actions.Channel)
return
end
local channel = UnitChannelInfo(self.unit)
if (channel) then
self:StartBar(IceCastBar.Actions.Channel)
return
end
self:StopBar()
@ -148,6 +144,4 @@ end
-- Load us up
if not IceHUD.WowClassic then
IceHUD.TargetTargetCast = TargetTargetCast:new()
end
IceHUD.TargetTargetCast = TargetTargetCast:new()

View File

@ -16,20 +16,13 @@ IceThreat.prototype.scheduledEvent = nil
local GetNumPartyMembers, GetNumRaidMembers = GetNumPartyMembers, GetNumRaidMembers
local MAX_NUM_RAID_MEMBERS, MAX_NUM_PARTY_MEMBERS = MAX_NUM_RAID_MEMBERS, MAX_NUM_PARTY_MEMBERS
if not GetNumPartyMembers then
if IceHUD.WowVer >= 50000 then
GetNumPartyMembers = GetNumGroupMembers
GetNumRaidMembers = GetNumGroupMembers
MAX_NUM_PARTY_MEMBERS = MAX_PARTY_MEMBERS
MAX_NUM_RAID_MEMBERS = MAX_RAID_MEMBERS
end
local UnitGroupRolesAssigned = UnitGroupRolesAssigned
if not UnitGroupRolesAssigned then
UnitGroupRolesAssigned = function()
return "NONE"
end
end
local MAX_NUM_RAID_MEMBERS = 40
local MAX_NUM_PARTY_MEMBERS = 5
@ -231,7 +224,7 @@ end
-- create the aggro range indicator bar
function IceThreat.prototype:CreateAggroBar()
self.aggroBar = self:BarFactory(self.aggroBar, "BACKGROUND","ARTWORK", "Aggro")
self.aggroBar = self:BarFactory(self.aggroBar, "BACKGROUND","ARTWORK")
local r, g, b = self:GetColor("ThreatPullAggro")
if (self.settings.backgroundToggle) then
@ -243,7 +236,7 @@ function IceThreat.prototype:CreateAggroBar()
end
function IceThreat.prototype:CreateSecondThreatBar()
self.secondThreatBar = self:BarFactory(self.secondThreatBar, "MEDIUM", "OVERLAY", "SecondThreat")
self.secondThreatBar = self:BarFactory(self.secondThreatBar, "MEDIUM", "OVERLAY")
self.secondThreatBar.bar:SetVertexColor(self:GetColor("ThreatSecondPlace", self.alpha * self.moduleSettings.secondPlaceThreatAlpha))
@ -475,6 +468,4 @@ function IceThreat.prototype:Show(bShouldShow)
end
-- Load us up
if UnitDetailedThreatSituation then
IceHUD.IceThreat = IceThreat:new()
end
IceHUD.IceThreat = IceThreat:new()

View File

@ -2,7 +2,7 @@ local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
local Totems = IceCore_CreateClass(IceElement)
local CooldownFrame_SetTimer = CooldownFrame_SetTimer
if CooldownFrame_Set then
if IceHUD.WowVer >= 70000 then
CooldownFrame_SetTimer = CooldownFrame_Set
end
@ -215,7 +215,7 @@ function Totems.prototype:Enable(core)
Totems.super.prototype.Enable(self, core)
self:RegisterEvent("PLAYER_TOTEM_UPDATE", "UpdateTotem");
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld");
self:RegisterEvent("PLAYER_ENTERING_WORLD", "ResetTotemAvailability");
if self.moduleSettings.hideBlizz then
self:HideBlizz()
@ -230,11 +230,6 @@ function Totems.prototype:Disable(core)
end
end
function Totems.prototype:EnteringWorld()
self:TargetChanged()
self:ResetTotemAvailability()
end
function Totems.prototype:ResetTotemAvailability()
for i=1, self.numTotems do
self:UpdateTotem(nil, i)
@ -242,17 +237,16 @@ function Totems.prototype:ResetTotemAvailability()
end
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 then
return
end
local thisTotemName = self.totemNames[TOTEM_PRIORITIES[totem]]
local haveTotem, name, startTime, duration, icon = GetTotemInfo(totem);
if duration > 0 then
self.frame.graphical[totem].totem:SetTexture(icon)
CooldownFrame_SetTimer(self.frame.graphical[totem].cd, startTime, duration, true)
self.frame.graphical[totem].cd:Show()
self.frame.graphical[totem]:Show()
self.frame.graphical[totem].name = name
else
self.frame.graphical[totem].cd:Hide()
self.frame.graphical[totem]:Hide()
@ -287,9 +281,10 @@ function Totems.prototype:CreateTotemFrame()
self.frame.graphical = {}
end
local totemType
for i=1, self.numTotems do
local slot = TOTEM_PRIORITIES[i]
self:CreateTotem(slot, self.totemNames[slot])
slot = TOTEM_PRIORITIES[i]
self:CreateTotem(slot, self.totemNames[slot])
end
end
@ -298,18 +293,14 @@ function Totems.prototype:GetAlphaAdd()
end
function Totems.prototype:ShowBlizz()
if TotemFrame then
TotemFrame:Show()
TotemFrame:GetScript("OnLoad")(TotemFrame)
end
TotemFrame:Show()
TotemFrame:GetScript("OnLoad")(TotemFrame)
end
function Totems.prototype:HideBlizz()
if TotemFrame then
TotemFrame:Hide()
TotemFrame:UnregisterAllEvents()
end
TotemFrame:Hide()
TotemFrame:UnregisterAllEvents()
end
function Totems.prototype:TargetChanged()
@ -335,18 +326,21 @@ function Totems.prototype:CheckCombat()
end
function Totems.prototype:CreateTotem(i, name)
if not name or not GetTotemInfo then
-- whiskey tango foxtrot?! apparently arenas can cause this? I can't test out the real cause myself, so putting in a stopgap for now
if not name then
return
end
local haveTotem, name, startTime, duration, icon = GetTotemInfo(i)
local bWasNewFrame = false
if (not self.frame.graphical[i]) then
self.frame.graphical[i] = CreateFrame("Frame", nil, self.frame)
self.frame.graphical[i].totem = self.frame.graphical[i]:CreateTexture(nil, "BACKGROUND")
self.frame.graphical[i].totem = self.frame.graphical[i]:CreateTexture(nil, "LOW")
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].totem:SetTexture(icon)
self.frame.graphical[i].totem:SetAllPoints(self.frame.graphical[i])
bWasNewFrame = true
end
self.frame.graphical[i]:SetFrameStrata("BACKGROUND")
@ -360,22 +354,15 @@ function Totems.prototype:CreateTotem(i, name)
end
if not self.graphicalOnEnter then
self.graphicalOnEnter = function(button)
GameTooltip:SetOwner(button)
if IceHUD.WowClassic then
GameTooltip:SetText(button.name)
else
GameTooltip:SetTotem(button.slot)
end
end
self.graphicalOnEnter = function(button) GameTooltip:SetOwner(button); GameTooltip:SetTotem(button.slot) end
end
if not self.graphicalOnLeave then
self.graphicalOnLeave = function() GameTooltip:Hide() end
end
if not self.graphicalOnMouseUp then
self.graphicalOnMouseUp = function (button, mouseButton)
self.graphicalOnMouseUp = function (self, mouseButton)
if mouseButton == "RightButton" then
DestroyTotem(button.slot)
DestroyTotem(self.slot)
end
end
end
@ -403,23 +390,21 @@ function Totems.prototype:CreateTotem(i, name)
self.frame.graphical[i]:EnableMouse(true)
self.frame.graphical[i]:SetScript("OnEnter", self.graphicalOnEnter)
self.frame.graphical[i]:SetScript("OnLeave", self.graphicalOnLeave)
if IceHUD.CanHookDestroyTotem then
self.frame.graphical[i]:SetScript("OnMouseUp", self.graphicalOnMouseUp)
end
else
self.frame.graphical[i]:EnableMouse(false)
self.frame.graphical[i]:SetScript("OnEnter", nil)
self.frame.graphical[i]:SetScript("OnLeave", nil)
if IceHUD.CanHookDestroyTotem then
self.frame.graphical[i]:SetScript("OnMouseUp", nil)
end
end
self.frame.graphical[i].slot = i
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
-- Load us up
local _, unitClass = UnitClass("player")
if IceHUD.WowVer >= 90000 or (unitClass == "SHAMAN") or (unitClass == "DRUID") then
if (unitClass == "SHAMAN") or (unitClass == "DRUID") then
IceHUD.Totems = Totems:new()
end

View File

@ -1,13 +1,11 @@
# IceHUD
IceHUD is a highly configurable and customizable HUD addon in the spirit of DHUD, MetaHUD, and others designed to keep your focus in the center of the screen where your character is.
## **What it is**
* Player and target health and mana bars, casting and mirror bars, pet health and mana bars, druid mana bar in forms, extensive target info, ToT display, and much more, in a vertically-oriented heads-up display.
### **What it is**
* Player and target health and mana bars, casting and mirror bars, pet health and mana bars, druid mana bar in forms, extensive target info, ToT display, and much more
## **Short feature list**
### **Short feature list**
* Lots of different bar shapes and patterns to make the HUD look like you want
* Class-specific modules such as combo point counters, Slice'n'dice timers, druid mana trackers, Eclipse bar, Holy Power monitoring, Warlock shard tracking, and more
* Target-of-target bars, Crowd Control timers, Range Finders, Threat meters, and plenty of other helpful modules
@ -17,12 +15,13 @@ IceHUD is a highly configurable and customizable HUD addon in the spirit of DHUD
* Fully customizable bars and counters capable of tracking buff/debuff applications on any unit, spell/ability cooldowns, and the health/mana of any unit you specify. The custom health/mana bars will even work with crazy unit specifications like "focustargettargetfocustarget" if you want!
* Highly configurable (can totally re-arrange all bars, change text display, etc.)
## **Slash commands**
### **Slash commands**
* /icehud - opens the configuration UI to tweak any setting
* /icehudCL - command-line access to tweak IceHUD settings (for use with macros, etc.)
## **Frequently Asked Questions**
# **Frequently Asked Questions**
1. **How do I hide the default Blizzard player, target unit frames and party unit frames?**
Type /icehud, expand the "Module Settings" section, click "Player Health" or "Target Health," and check "Hide Blizzard Frame" and/or "Hide Blizzard Party Frame". (NOTE: before version 1.3.7, the player/target unitframes were hidden by default. Follow the same steps to enable them if desired)
@ -64,7 +63,7 @@ IceHUD is a highly configurable and customizable HUD addon in the spirit of DHUD
Type /icehud, expand Module Settings, expand whatever module you want to move (e.g. PlayerHealth, PlayerMana), and adjust the "Side" and "Offset" settings. "Side" controls whether it's on the left or the right and "Offset" controls how far from center it is.
1. **Which module displays Monk Chi power?**
Prior to v1.11.2, this module was called HarmonyPower. Harmony was the original name for Chi back when 5.0 was in beta, so I used Blizzard's name for it while I was developing for Cataclysm. IceHUD v1.11.2 changed this module to be called Chi.
This module is called HarmonyPower. Harmony was the original name for Chi back when 5.0 was in beta, so I used Blizzard's name for it while I was developing for Cataclysm. I feel like it's too late to change now that many people are familiar with the Harmony name.
1. **How do I add commas/periods into big numbers like health?**
If you have DogTags enabled, you can open the Text Settings for the module in question and add SeparateDigits() around the tag you're trying to split up. To display Health/MaxHealth with commas, use: [(SeparateDigits(HP):HPColor "/" SeparateDigits(MaxHP):HPColor):Bracket]. To use periods instead of commas, use: [(SeparateDigits(HP, "."):HPColor "/" SeparateDigits(MaxHP, "."):HPColor):Bracket]. Use the /dog help menu to build your own similar tags for Mana, etc.
@ -78,10 +77,5 @@ IceHUD is a highly configurable and customizable HUD addon in the spirit of DHUD
1. **How do I get rid of the bars that showed up beneath the player in the 7.0 patch?**
Blizzard added a "Personal Resource Display" feature in the 7.0 game client. You can disable it in the Game options -> Interface -> Names -> Personal Resource Display.
1. **Why is there no target castbar for Classic?**
The Classic game client doesn't offer a reliable way to show castbars for anyone except the player. IceHUD doesn't support the type of inaccurate guessing at combat log details that would be required to get a semi-useful target castbar.
1. **Why do buff/debuff timers not work in Classic?**
The Classic game client doesn't provide this information to addons because it wasn't a feature when the game first released. You can install the LibClassicDurations addon to enable support, but it's a best guess and not completely accurate.
See [here](https://www.wowace.com/projects/ice-hud/issues/113) for a user-created guide to creating new IceHUD textures.
See [here](http://www.wowace.com/addons/ice-hud/tickets/113-basic-guide-to-texture-creation/) for a user-created guide to creating new IceHUD textures.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 256 KiB

View File

@ -1,14 +0,0 @@
# Changelog
v1.14.2:
- Fix CC and Invuln modules not showing immediately when they should.
v1.14.1:
- Fix Hide Party feature on pre-10.0 clients.
v1.14.0:
- 10.0 compatibility
- Renamed Anima Charged combo points to Charged, and removed specific references to Kyrian.