Compare commits

...

50 Commits

Author SHA1 Message Date
087c64ee6a Revert "Show "development" as addon version for non-packaged builds"
This reverts commit 5c19d7f89c. The Twitch client is apparently having problems with alpha versions, so I'm taking guesses as to why that might be.
2020-10-14 13:05:26 -05:00
077f381adb Increased valid ranges by request (wowace ticket #280) 2020-10-14 12:57:34 -05:00
a5be2996da Fix RollTheBones for 9.0 2020-10-13 22:28:10 -05:00
22f473b54d Fix SnD for 9.0, add support for Deeper Stratagem talent
There's still some situations where refreshing SnD can give a much longer buff than expected...I'm not sure what those conditions are, though.
2020-10-13 21:59:44 -05:00
e7f95cbcb6 Holy power is usable by all specs in 9.0 2020-10-13 21:28:37 -05:00
5c19d7f89c Show "development" as addon version for non-packaged builds 2020-10-13 20:32:02 -05:00
f01d6495f8 Update readme to match Curse/WoWAce pages 2020-10-13 20:31:44 -05:00
34ecd95e4f Add github workflow for packaging with the community packager 2020-10-13 09:15:46 -05:00
564919e0c6 Configure for compatibility with community addon packager 2020-10-13 09:02:45 -05:00
a18144aec0 9.0 compatibility updates - initial attempt 2020-10-13 08:46:41 -05:00
53bf76c58a Update mailmap 2020-08-31 21:34:50 -05:00
1140d2e8c5 Update changelog 2020-08-31 21:24:43 -05:00
7d562dfb35 Possible fix for reported Classic issue 2020-08-28 21:20:47 -05:00
7c2fe06fa8 Update changelog 2020-07-13 11:21:59 -05:00
819cc64aca Maybe fix pet health visibility on teleport
Untested fix for a similar issue as seen on other modules.
2020-06-25 10:09:52 -05:00
36c8f02fc2 Show focus raw value as top number when DogTags are disabled 2020-06-19 14:07:38 -05:00
db7d797eb2 Fixed various class power indicators using the wrong alpha sometimes 2020-05-30 15:25:02 -05:00
a9cf5d5b2c Updated changelog 2020-05-27 11:26:18 -05:00
81d8ffeae1 Fixed issue of Runes alpha being wrong after a teleport with a target 2020-05-23 15:55:31 -05:00
d9c3de0a5e Drycode attempt to fix reported issue 278
This should only happen on a Classic client with LibClassicCasterino installed and a specific type of spell event fires
2020-05-22 10:17:18 -05:00
efdad59911 Updated changelog 2020-01-14 20:16:08 -06:00
b8e8b41ae7 Updated TOC 2020-01-14 20:14:34 -06:00
261be76d90 Fixed Rage showing on a scale of 0-1000 instead of 0-100 w/o DogTags on
Added a note about why this is happening for the next time I need to mess with it. I am fairly certain there is code in IceHUD that's already dealing with the 0-1000 scale and handling it, so I don't want to disrupt stuff without having enough testing.
2020-01-11 22:31:34 -06:00
55fbfbdf1c Fixed TargetMana value not showing in the proper color w/ DogTags off 2020-01-11 22:18:38 -06:00
e6077ab39f Updated FAQ 2020-01-07 19:46:20 -06:00
abf3c0d514 Updated changelog for release 2019-12-13 16:24:45 -06:00
b1e746bec9 Guard against missing GetTotemInfo API 2019-12-10 16:56:38 -06:00
659de89d0c Fixed player cast error for users without LibCasterCasterino installed 2019-11-30 10:49:37 -06:00
da79bb35c8 Updated changelog 2019-11-29 19:09:47 -06:00
b40829abbb add TargetCast support in Classic (#8)
This change adds support for using LibCasterCasterino to get your
target's casting info to enable the TargetCast module. It's not as
clean as the newer retail native calls but works well enough for
most interrupts.

Note: because LibCasterCasterino is using combat log events to get
casting info if a spell cast starts and is immediately cancelled or
interrupted the log may not get updated and the cast bar will zombie
complete.

LibCasterCasterino can be found at:

https://github.com/rgd87/LibClassicCasterino
2019-09-28 22:58:39 -05:00
7dfc05aa91 Fixed fallout from disabling GCD module
Fixes wowace ticket 253
2019-09-26 15:38:42 -05:00
a0d05ebf94 Updated changelog 2019-09-26 11:19:18 -05:00
b5b5c31791 Only use combo modules in Classic for Rogues and Druids 2019-09-22 14:24:02 -05:00
5c66970d8f GCD doesn't function in Classic 2019-09-19 22:09:16 -05:00
4fbb70ebc0 Updated changelog for release 2019-09-10 23:16:18 -05:00
9cfa00227f Fixed indentation to match the rest of the file (spaces/tabs) 2019-09-10 23:16:08 -05:00
9b90694912 add missing unit parameter on SpellCastFailed (#5) 2019-09-06 18:12:39 -05:00
67f79736d8 Preparing for release 2019-09-05 21:39:10 -05:00
dc98e5b521 Updated changelog 2019-09-04 17:56:29 -05:00
94506cc591 Merge remote-tracking branch 'github/master' 2019-09-04 17:52:07 -05:00
09d9a9c6f7 Add cooldowns support on target buffs/debuffs (#4)
* Add cooldowns support on target buffs/debuffs

Duration and expiration times are not set on target buffs/debuffs
when using UnitAura. This change looks up the spellID in
LibClassicDurations and sets the duration and expiry using that
source.

This change enables the cooldown sweep that allows OmniCC to properly
display the countdown of time remaining on the buff/debuff.

Note that this only adds the cooldown on buff/debuffs applied
to the target by the player.

* set LibStub to silently fail if library is missing

Support for cooldown durations on Classic WoW is provided by
LibClassicDurations, which comes with the ClassicAuraDurations
addon. This change prevents IceHUD throwing an error if the
library is missing.
2019-09-04 17:50:33 -05:00
8b7ce521ff Merge pull request #3 from TwentyOneZ/master
RealMobHealth addon compatibility
2019-09-03 17:34:51 -05:00
26fd86134b RealMobHealth addon compatibility
It will only work with DogTags disabled. Otherwise it will respect the DogTag (which doesn't support the RealMobHealth info).
2019-09-03 16:03:38 -03:00
e4d8bae185 Only allow custom bars to track players in Classic 2019-09-03 10:17:03 -05:00
2d42116f8d Updated changelog 2019-08-30 10:41:14 -05:00
a7d1629ed3 Fixed error in Classic when changing profiles 2019-08-29 11:53:27 -05:00
070d66eca3 Disabled target and target-target castbars in classic 2019-08-28 20:30:35 -05:00
a0c5b97ccb Updated changelog 2019-08-28 20:04:19 -05:00
3e56595709 Fixed energy ticker resetting when spending energy 2019-08-28 19:49:50 -05:00
c016b0ccc0 Fixed PLAYER_PET_CHANGED event on stack counters in Classic 2019-08-28 08:56:31 -05:00
41 changed files with 575 additions and 248 deletions

45
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,45 @@
# 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 }}
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@v1
# once cloned, we just run the GitHub Action for the packager project
- name: Package and release
uses: BigWigsMods/packager@master
# 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@master
with:
args: -g 1.13.5 -w 0

View File

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

View File

@ -415,7 +415,7 @@ do
type='range', type='range',
name = L["Bar vertical offset"], name = L["Bar vertical offset"],
desc = L["Adjust the vertical placement of this bar"], desc = L["Adjust the vertical placement of this bar"],
min = -400, min = -600,
max = 600, max = 600,
step = 1, step = 1,
get = function() get = function()
@ -436,7 +436,7 @@ do
type='range', type='range',
name = L["Bar horizontal adjust"], 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."], 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 = -400, min = -600,
max = 600, max = 600,
step = 1, step = 1,
get = function() get = function()
@ -1040,7 +1040,7 @@ end
-- Creates the actual bar -- Creates the actual bar
function IceBarElement.prototype:CreateBar() function IceBarElement.prototype:CreateBar()
self.barFrame = self:BarFactory(self.barFrame, "LOW", "ARTWORK") self.barFrame = self:BarFactory(self.barFrame, "LOW", "ARTWORK", "Bar")
self:SetBarCoord(self.barFrame) self:SetBarCoord(self.barFrame)
self.barFrame.bar:SetBlendMode(self.settings.barBlendMode) self.barFrame.bar:SetBlendMode(self.settings.barBlendMode)
@ -1050,9 +1050,9 @@ end
-- Returns a barFrame & barFrame.bar -- 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. -- 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) function IceBarElement.prototype:BarFactory(barFrame, frameStrata, textureLayer, nameSuffix)
if not (barFrame) then if not (barFrame) then
barFrame = CreateFrame("Frame", nil, self.frame) barFrame = CreateFrame("Frame", "IceHUD_"..self.elementName.."_"..(nameSuffix or "Bar"), self.frame)
end end
barFrame:SetFrameStrata(frameStrata and frameStrata or "LOW") barFrame:SetFrameStrata(frameStrata and frameStrata or "LOW")
@ -1584,7 +1584,7 @@ function IceBarElement.prototype:CreateMarker(idx)
self.Markers[idx] = nil self.Markers[idx] = nil
end end
self.Markers[idx] = self:BarFactory(self.Markers[idx], "MEDIUM", "OVERLAY") self.Markers[idx] = self:BarFactory(self.Markers[idx], "MEDIUM", "OVERLAY", "Marker"..idx)
local color = self.moduleSettings.markers[idx].color local color = self.moduleSettings.markers[idx].color
self.Markers[idx].bar:SetVertexColor(color.r, color.g, color.b, self.alpha) self.Markers[idx].bar:SetVertexColor(color.r, color.g, color.b, self.alpha)

View File

@ -23,6 +23,21 @@ if IceHUD.WowClassic then
UnitChannelInfo = ChannelInfo UnitChannelInfo = ChannelInfo
end end
-- Fulzamoth 2019-09-27 : Use LibClassicCasterino if it's there so we can use TargetCast
-- module in Classic WoW
if IceHUD.WowClassic then
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 AuraIconWidth = 20
local AuraIconHeight = 20 local AuraIconHeight = 20
@ -46,6 +61,39 @@ end
function IceCastBar.prototype:Enable(core) function IceCastBar.prototype:Enable(core)
IceCastBar.super.prototype.Enable(self, 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("UNIT_SPELLCAST_SENT", "SpellCastSent") -- "player", spell, rank, target
self:RegisterEvent("CURRENT_SPELL_CAST_CHANGED", "SpellCastChanged") self:RegisterEvent("CURRENT_SPELL_CAST_CHANGED", "SpellCastChanged")
self:RegisterEvent("UNIT_SPELLCAST_START", "SpellCastStart") -- unit, spell, rank self:RegisterEvent("UNIT_SPELLCAST_START", "SpellCastStart") -- unit, spell, rank
@ -61,6 +109,7 @@ function IceCastBar.prototype:Enable(core)
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_UPDATE", "SpellCastChannelUpdate") -- 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_STOP", "SpellCastChannelStop") -- unit, spell, rank
end
self:Show(false) self:Show(false)
end end
@ -371,7 +420,10 @@ function IceCastBar.prototype:StartBar(action, message)
end end
end end
if not spell then -- 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 return
end end
@ -398,7 +450,7 @@ function IceCastBar.prototype:StartBar(action, message)
self.actionDuration = 1 -- instants/failures self.actionDuration = 1 -- instants/failures
end end
if not (message) then if not (message) and spell then
self.actionMessage = spell .. (self.moduleSettings.showSpellRank and self:GetShortRank(rank) or "") self.actionMessage = spell .. (self.moduleSettings.showSpellRank and self:GetShortRank(rank) or "")
end end
@ -470,7 +522,7 @@ function IceCastBar.prototype:SpellCastStop(event, unit, castGuid, spellId)
end end
function IceCastBar.prototype:SpellCastFailed(event, castGuid, spellId) function IceCastBar.prototype:SpellCastFailed(event, unit, castGuid, spellId)
if (unit ~= self.unit) then return end if (unit ~= self.unit) then return end
IceHUD:Debug("SpellCastFailed", unit, castGuid, spellId) IceHUD:Debug("SpellCastFailed", unit, castGuid, spellId)

View File

@ -520,10 +520,14 @@ function IceCore.prototype:Disable(userToggle)
end end
end end
if UnitCanPetBattle then
self.IceHUDFrame:UnregisterEvent("PET_BATTLE_OPENING_START") self.IceHUDFrame:UnregisterEvent("PET_BATTLE_OPENING_START")
self.IceHUDFrame:UnregisterEvent("PET_BATTLE_OVER") self.IceHUDFrame:UnregisterEvent("PET_BATTLE_OVER")
end
if GetBarberShopStyleInfo then
self.IceHUDFrame:UnregisterEvent("BARBER_SHOP_OPEN") self.IceHUDFrame:UnregisterEvent("BARBER_SHOP_OPEN")
self.IceHUDFrame:UnregisterEvent("BARBER_SHOP_CLOSE") self.IceHUDFrame:UnregisterEvent("BARBER_SHOP_CLOSE")
end
self.IceHUDFrame:SetScript("OnEvent", nil) self.IceHUDFrame:SetScript("OnEvent", nil)
self.enabled = false self.enabled = false

View File

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

View File

@ -259,6 +259,10 @@ function IceHUD:NotifyOptionsChange()
end end
function IceHUD:OnEnable(isFirst) function IceHUD:OnEnable(isFirst)
-- if isFirst then
self:SetDebugging(self.IceCore:GetDebug())
self.debugFrame = ChatFrame1
-- end
self:Debug("IceHUD:OnEnable()") self:Debug("IceHUD:OnEnable()")
if self.db.profile.enable then if self.db.profile.enable then
@ -274,11 +278,6 @@ function IceHUD:OnEnable(isFirst)
--@debug@ --@debug@
IceHUD_Options:OnLoad() IceHUD_Options:OnLoad()
--@end-debug@ --@end-debug@
-- if isFirst then
self:SetDebugging(self.IceCore:GetDebug())
self.debugFrame = ChatFrame1
-- end
end end
-- add settings changes/updates here so that existing users don't lose their settings -- add settings changes/updates here so that existing users don't lose their settings
@ -367,7 +366,11 @@ function IceHUD:Debug(...)
for n=1,select('#', ...) do for n=1,select('#', ...) do
msg = msg .. tostring(select(n, ...)) .. " " msg = msg .. tostring(select(n, ...)) .. " "
end end
if self.debugFrame then
self.debugFrame:AddMessage(msg) self.debugFrame:AddMessage(msg)
else
print(msg)
end
end end
end end

View File

@ -1,4 +1,9 @@
## Interface: 80200 #@retail@
## Interface: 90001
#@end-retail@
#@non-retail@
# ## Interface: 11305
#@end-non-retail@
## Author: Parnic, originally created by Iceroth ## Author: Parnic, originally created by Iceroth
## Name: IceHUD ## Name: IceHUD
## Title: IceHUD |cff7fff7f-Ace3-|r ## Title: IceHUD |cff7fff7f-Ace3-|r
@ -8,8 +13,8 @@
## 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 ## 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-Category: HUDs ## X-Category: HUDs
## X-Website: https://www.wowace.com/projects/ice-hud ## X-Website: https://www.wowace.com/projects/ice-hud
## X-Curse-Project-ID: 5394
## X-WoWI-ID: 8149 ## X-WoWI-ID: 8149
## X-Compatible-With: 11302
#@no-lib-strip@ #@no-lib-strip@
# Libraries # Libraries

View File

@ -1,4 +1,4 @@
## Interface: 80200 ## Interface: 90001
## Title: IceHUD |cff7fff7f-Options-|r ## Title: IceHUD |cff7fff7f-Options-|r
## Author: Parnic ## Author: Parnic
## Version: @project-version@ ## Version: @project-version@

View File

@ -83,7 +83,13 @@ 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. 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 |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.]] 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.]]
} }
} }
}, },

View File

@ -128,7 +128,7 @@ end
function IceStackCounter_Enable(frame) function IceStackCounter_Enable(frame)
frame:RegisterEvent("UNIT_AURA", "UpdateCustomCount") frame:RegisterEvent("UNIT_AURA", "UpdateCustomCount")
frame:RegisterEvent("UNIT_PET", "UpdateCustomCount") frame:RegisterEvent("UNIT_PET", "UpdateCustomCount")
if IceHUD.WowVer < 80000 then if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
frame:RegisterEvent("PLAYER_PET_CHANGED", "UpdateCustomCount") frame:RegisterEvent("PLAYER_PET_CHANGED", "UpdateCustomCount")
end end
if FocusUnit then if FocusUnit then

View File

@ -19,9 +19,10 @@ IceUnitBar.prototype.hasPet = nil
IceUnitBar.prototype.noFlash = nil IceUnitBar.prototype.noFlash = nil
local SPELL_POWER_INSANITY = SPELL_POWER_INSANITY local SPELL_POWER_INSANITY, SPELL_POWER_RAGE = SPELL_POWER_INSANITY, SPELL_POWER_RAGE
if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
SPELL_POWER_INSANITY = Enum.PowerType.Insanity SPELL_POWER_INSANITY = Enum.PowerType.Insanity
SPELL_POWER_RAGE = Enum.PowerType.Rage
end end
-- Constructor -- -- Constructor --
@ -170,7 +171,7 @@ end
-- Creates the low amount warning frame -- Creates the low amount warning frame
function IceUnitBar.prototype:CreateFlashFrame() function IceUnitBar.prototype:CreateFlashFrame()
if not (self.flashFrame) then if not (self.flashFrame) then
self.flashFrame = CreateFrame("Frame", nil, self.frame) self.flashFrame = CreateFrame("Frame", "IceHUD_"..self.elementName.."_Flash", self.frame)
end end
self.flashFrame:SetFrameStrata("BACKGROUND") self.flashFrame:SetFrameStrata("BACKGROUND")
@ -230,8 +231,14 @@ function IceUnitBar.prototype:Update()
self.maxHealth = UnitHealthMax(self.unit) self.maxHealth = UnitHealthMax(self.unit)
self.healthPercentage = self.maxHealth ~= 0 and (self.health/self.maxHealth) or 0 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.mana = UnitPower(self.unit, UnitPowerType(self.unit))
self.maxMana = UnitPowerMax(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 if IceHUD.WowVer >= 70300 and UnitPowerType(self.unit) == SPELL_POWER_INSANITY then
self.mana = IceHUD:MathRound(self.mana / 100) self.mana = IceHUD:MathRound(self.mana / 100)
self.maxMana = IceHUD:MathRound(self.maxMana / 100) self.maxMana = IceHUD:MathRound(self.maxMana / 100)

View File

@ -1,5 +1,63 @@
v1.12.0-alpha: v1.13.0:
- WoW Classic compatibility - Made compatible with 9.0
- Improved frame naming/debuggability
- Updated TOC for 9.0
v1.12.15:
- (Classic) Fixed reported issue with the Threat bar throwing errors sometimes.
v1.12.14:
- Fixed pet health/mana sometimes using the wrong alpha if the player teleported.
v1.12.13:
- Fixed various class power indicators using the wrong alpha visibility if the player teleported (like with a Hearthstone) when they had a target selected.
- Show Hunter Focus top text as the raw Focus amount instead of a 0-100 scale with DogTags off.
v1.12.12:
- (Classic) Fixed an error when certain spell events fire (like turning in Arathi Basin tokens) with LibClassicCasterino installed.
- Fixed Death Knight Runes using the wrong alpha visibility if the player teleported (like with a Hearthstone) when they had a target selected.
v1.12.11:
- Fixed TargetMana value not showing in the proper color with DogTags off
- Fixed Rage showing on a scale of 0-1000 instead of 0-100 with DogTags off
- Updated TOC for 8.3
v1.12.10:
- (Classic) Temporarily(?) disabled the Totems module as the GetTotemInfo() API was removed.
v1.12.9:
- (Classic) Fixed error in player cast bar if the user didn't have LibClassicCasterino installed.
v1.12.8:
- (Classic) Fixed TargetCast bar to work for users with the LibClassicCasterino library installed. (thanks, Fulzamoth!)
v1.12.7:
- (Classic) Fixed fallout from disabling GCD module (errors in castbar).
v1.12.6:
- (Classic) Disabled Combo modules for non-Rogues/-Druids. They were sometimes showing for other class abilities for some reason.
v1.12.5:
- (Classic) Disabled GCD module as the Classic client doesn't support tracking GCD.
- (Classic) Packaged new LibDogTag-Unit to pick up Happiness tag fixes.
v1.12.4:
- Fixed spellcast failure events on the castbar not being handled properly. (thanks, Fulzamoth!)
v1.12.3:
- (Classic) Added support for RealMobHealth on the TargetHealth module when DogTags are disabled. (thanks, TwentyOneZ!)
- (Classic) Added support for LibClassicDurations on the TargetInfo module to show (de)buff durations when the lib is installed. (thanks, Fulzamoth!)
v1.12.2:
- (Classic) Fixed error when changing profiles or disabling IceHUD
v1.12.1:
- (Classic) Fixed energy ticker resetting when spending energy.
- (Classic) Fixed stack counters throwing errors and generally not functioning.
- (Classic) Disabled target and target-of-target castbars. Added a note to the FAQ as to why.
v1.12.0:
- Initial WoW Classic compatibility
v1.11.11: v1.11.11:
- Updated TOC to 8.2 - Updated TOC to 8.2

View File

@ -398,7 +398,7 @@ end
function CastBar.prototype:CreateLagBar() function CastBar.prototype:CreateLagBar()
if self.lagBar == nil then if self.lagBar == nil then
self.lagBar = self:BarFactory(self.lagBar, "LOW", "OVERLAY") self.lagBar = self:BarFactory(self.lagBar, "LOW", "OVERLAY", "Lag")
end end
local r, g, b = self:GetColor("CastLag") local r, g, b = self:GetColor("CastLag")
@ -439,8 +439,10 @@ function CastBar.prototype:SpellCastStart(event, unit, castGuid, spellId)
end end
self:UpdateLagBar() self:UpdateLagBar()
if IceHUD.GlobalCoolDown then
self.nextLagUpdate = GetTime() + (select(2, GetSpellCooldown(IceHUD.GlobalCoolDown:GetSpellId())) / 2) self.nextLagUpdate = GetTime() + (select(2, GetSpellCooldown(IceHUD.GlobalCoolDown:GetSpellId())) / 2)
end end
end
-- OVERRIDE -- OVERRIDE
@ -464,8 +466,10 @@ function CastBar.prototype:SpellCastSucceeded(event, unit, castGuid, spellId)
end end
self:UpdateLagBar() self:UpdateLagBar()
if IceHUD.GlobalCoolDown then
self.nextLagUpdate = GetTime() + (select(2, GetSpellCooldown(IceHUD.GlobalCoolDown:GetSpellId())) / 2) self.nextLagUpdate = GetTime() + (select(2, GetSpellCooldown(IceHUD.GlobalCoolDown:GetSpellId())) / 2)
end end
end
function CastBar.prototype:UpdateLagBar(isChannel) function CastBar.prototype:UpdateLagBar(isChannel)

View File

@ -467,7 +467,7 @@ function IceClassPowerCounter.prototype:DisplayCounter()
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateRunePower") self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateRunePower")
self:RegisterEvent("UNIT_DISPLAYPOWER", "UpdateRunePower") self:RegisterEvent("UNIT_DISPLAYPOWER", "UpdateRunePower")
self:RegisterEvent("PLAYER_ENTERING_WORLD", "UpdateRunePower") self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
if (self.moduleSettings.hideBlizz) then if (self.moduleSettings.hideBlizz) then
self:HideBlizz() self:HideBlizz()
@ -484,6 +484,11 @@ function IceClassPowerCounter.prototype:Disable(core)
end end
end end
function IceClassPowerCounter.prototype:EnteringWorld()
self:TargetChanged()
self:UpdateRunePower()
end
function IceClassPowerCounter.prototype:UpdateRunePower(event, arg1, arg2) 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 if event and (event == IceHUD.UnitPowerEvent or event == "UNIT_POWER_FREQUENT") and arg1 ~= "player" and arg1 ~= "vehicle" then
return return

View File

@ -553,4 +553,7 @@ end
-- Load us up -- Load us up
local _, class = UnitClass("player")
if not IceHUD.WowClassic or class == "ROGUE" or class == "DRUID" then
IceHUD.ComboPoints = ComboPoints:new() IceHUD.ComboPoints = ComboPoints:new()
end

View File

@ -135,4 +135,7 @@ function ComboPointsBar.prototype:Update()
self:UpdateComboPoints() self:UpdateComboPoints()
end end
local _, class = UnitClass("player")
if not IceHUD.WowClassic or class == "ROGUE" or class == "DRUID" then
IceHUD.ComboPointsBar = ComboPointsBar:new() IceHUD.ComboPointsBar = ComboPointsBar:new()
end

View File

@ -81,6 +81,10 @@ function IceCustomBar.prototype:Disable(core)
end end
function IceCustomBar.prototype:GetUnitToTrack() function IceCustomBar.prototype:GetUnitToTrack()
if IceHUD.WowClassic then
return "player"
end
if self.moduleSettings.myUnit == "other" then if self.moduleSettings.myUnit == "other" then
if self.moduleSettings.customUnit ~= nil and self.moduleSettings.customUnit ~= "" then if self.moduleSettings.customUnit ~= nil and self.moduleSettings.customUnit ~= "" then
return self.moduleSettings.customUnit return self.moduleSettings.customUnit
@ -258,6 +262,7 @@ function IceCustomBar.prototype:GetOptions()
order = 30.3, order = 30.3,
} }
if not IceHUD.WowClassic then
opts["unitToTrack"] = { opts["unitToTrack"] = {
type = 'select', type = 'select',
values = validUnits, values = validUnits,
@ -303,6 +308,7 @@ function IceCustomBar.prototype:GetOptions()
usage = "<what custom unit to track when unitToTrack is set to 'other'>", usage = "<what custom unit to track when unitToTrack is set to 'other'>",
order = 30.45, order = 30.45,
} }
end
opts["buffOrDebuff"] = { opts["buffOrDebuff"] = {
type = 'select', type = 'select',

View File

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

View File

@ -107,7 +107,7 @@ function EclipseBar.prototype:CreateFrame()
end end
function EclipseBar.prototype:CreateSolarBar() function EclipseBar.prototype:CreateSolarBar()
self.solarBar = self:BarFactory(self.solarBar,"BACKGROUND", "ARTWORK") self.solarBar = self:BarFactory(self.solarBar,"BACKGROUND", "ARTWORK", "Solar")
self:SetBarCoord(self.solarBar, 0.5, true) self:SetBarCoord(self.solarBar, 0.5, true)
self.solarBar.bar:SetVertexColor(self:GetColor("EclipseSolar", 1)) self.solarBar.bar:SetVertexColor(self:GetColor("EclipseSolar", 1))

View File

@ -1,12 +1,6 @@
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false) local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
local FocusCast = IceCore_CreateClass(IceCastBar) local FocusCast = IceCore_CreateClass(IceCastBar)
local UnitCastingInfo, UnitChannelInfo = UnitCastingInfo, UnitChannelInfo
if IceHUD.WowClassic then
UnitCastingInfo = CastingInfo
UnitChannelInfo = ChannelInfo
end
-- Constructor -- -- Constructor --
function FocusCast.prototype:init() function FocusCast.prototype:init()
FocusCast.super.prototype.init(self, "FocusCast") FocusCast.super.prototype.init(self, "FocusCast")

View File

@ -255,7 +255,7 @@ function GlobalCoolDown.prototype:CreateFrame()
end end
function GlobalCoolDown.prototype:CreateLagBar() function GlobalCoolDown.prototype:CreateLagBar()
self.lagBar = self:BarFactory(self.lagBar, "LOW", "OVERLAY") self.lagBar = self:BarFactory(self.lagBar, "LOW", "OVERLAY", "Lag")
local r, g, b = self:GetColor("CastLag") local r, g, b = self:GetColor("CastLag")
if (self.settings.backgroundToggle) then if (self.settings.backgroundToggle) then
@ -291,4 +291,6 @@ function GlobalCoolDown.prototype:GetSpellId()
end end
-- Load us up -- Load us up
if not IceHUD.WowClassic then
IceHUD.GlobalCoolDown = GlobalCoolDown:new() IceHUD.GlobalCoolDown = GlobalCoolDown:new()
end

View File

@ -32,7 +32,7 @@ function HolyPower.prototype:init()
self.numericColor = "HolyPowerNumeric" self.numericColor = "HolyPowerNumeric"
self.unitPower = SPELL_POWER_HOLY_POWER self.unitPower = SPELL_POWER_HOLY_POWER
self.minLevel = PALADINPOWERBAR_SHOW_LEVEL self.minLevel = PALADINPOWERBAR_SHOW_LEVEL
if IceHUD.WowVer >= 70000 then if IceHUD.WowVer >= 70000 and IceHUD.WowVer < 90000 then
self.requiredSpec = SPEC_PALADIN_RETRIBUTION self.requiredSpec = SPEC_PALADIN_RETRIBUTION
end end
self.bTreatEmptyAsFull = true self.bTreatEmptyAsFull = true

View File

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

View File

@ -49,7 +49,9 @@ function PetHealth.prototype:Enable(core)
self:RegisterEvent("UNIT_PET", "CheckPet"); self:RegisterEvent("UNIT_PET", "CheckPet");
self:RegisterEvent("UNIT_HEALTH", "UpdateEvent") self:RegisterEvent("UNIT_HEALTH", "UpdateEvent")
if IceHUD.WowVer < 90000 then
self:RegisterEvent("UNIT_HEALTH_FREQUENT", "UpdateEvent") self:RegisterEvent("UNIT_HEALTH_FREQUENT", "UpdateEvent")
end
self:RegisterEvent("UNIT_MAXHEALTH", "UpdateEvent") self:RegisterEvent("UNIT_MAXHEALTH", "UpdateEvent")
if UnitHasVehicleUI then if UnitHasVehicleUI then
@ -223,6 +225,7 @@ function PetHealth.prototype:ExitingVehicle(event, unit)
end end
function PetHealth.prototype:EnteringWorld() function PetHealth.prototype:EnteringWorld()
self:TargetChanged()
self:Update(self.unit) self:Update(self.unit)
if UnitHasVehicleUI then if UnitHasVehicleUI then

View File

@ -242,6 +242,7 @@ function PetMana.prototype:ExitingVehicle(event, unit)
end end
function PetMana.prototype:EnteringWorld() function PetMana.prototype:EnteringWorld()
self:TargetChanged()
self:Update(self.unit) self:Update(self.unit)
if UnitHasVehicleUI then if UnitHasVehicleUI then

View File

@ -68,7 +68,9 @@ function PlayerHealth.prototype:Enable(core)
PlayerHealth.super.prototype.Enable(self, core) PlayerHealth.super.prototype.Enable(self, core)
self:RegisterEvent("UNIT_HEALTH", "UpdateEvent") self:RegisterEvent("UNIT_HEALTH", "UpdateEvent")
if IceHUD.WowVer < 90000 then
self:RegisterEvent("UNIT_HEALTH_FREQUENT", "UpdateEvent") self:RegisterEvent("UNIT_HEALTH_FREQUENT", "UpdateEvent")
end
self:RegisterEvent("UNIT_MAXHEALTH", "UpdateEvent") self:RegisterEvent("UNIT_MAXHEALTH", "UpdateEvent")
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld") self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
@ -934,7 +936,7 @@ function PlayerHealth.prototype:CreateBackground(redraw)
end end
function PlayerHealth.prototype:CreateHealBar() function PlayerHealth.prototype:CreateHealBar()
self.healFrame = self:BarFactory(self.healFrame, "LOW","BACKGROUND") self.healFrame = self:BarFactory(self.healFrame, "LOW","BACKGROUND", "Heal")
self.healFrame.bar:SetVertexColor(self:GetColor("PlayerHealthHealAmount", self.alpha * self.moduleSettings.healAlpha)) self.healFrame.bar:SetVertexColor(self:GetColor("PlayerHealthHealAmount", self.alpha * self.moduleSettings.healAlpha))
@ -946,7 +948,7 @@ function PlayerHealth.prototype:CreateHealBar()
end end
function PlayerHealth.prototype:CreateAbsorbBar() function PlayerHealth.prototype:CreateAbsorbBar()
self.absorbFrame = self:BarFactory(self.absorbFrame, "LOW","BACKGROUND") self.absorbFrame = self:BarFactory(self.absorbFrame, "LOW","BACKGROUND", "Absorb")
self.absorbFrame.bar:SetVertexColor(self:GetColor("PlayerHealthAbsorbAmount", self.alpha * self.moduleSettings.absorbAlpha)) self.absorbFrame.bar:SetVertexColor(self:GetColor("PlayerHealthAbsorbAmount", self.alpha * self.moduleSettings.absorbAlpha))

View File

@ -387,7 +387,7 @@ function PlayerMana.prototype:Update(unit, powertype)
if not IceHUD.IceCore:ShouldUseDogTags() then if not IceHUD.IceCore:ShouldUseDogTags() then
-- extra hack for whiny rogues (are there other kind?) -- extra hack for whiny rogues (are there other kind?)
local displayPercentage = self.manaPercentage local displayPercentage = self.manaPercentage
if (self.manaType == SPELL_POWER_ENERGY) then if self.manaType == SPELL_POWER_ENERGY or self.manaType == SPELL_POWER_FOCUS then
displayPercentage = self.mana displayPercentage = self.mana
else else
displayPercentage = math.floor(displayPercentage * 100) displayPercentage = math.floor(displayPercentage * 100)
@ -419,17 +419,17 @@ function PlayerMana.prototype:UpdateEnergy(event, unit)
return return
end end
self.previousEnergy = UnitPower(self.unit, UnitPowerType(self.unit))
if IceHUD.WowVer < 40000 then
self:Update(unit)
end
if self:ShouldUseTicker() and if self:ShouldUseTicker() and
((not (self.previousEnergy) or (self.previousEnergy <= UnitPower(self.unit, UnitPowerType(self.unit)))) 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.moduleSettings.tickerEnabled) and self.manaType == SPELL_POWER_ENERGY) then
self.tickStart = GetTime() self.tickStart = GetTime()
self.tickerFrame:Show() self.tickerFrame:Show()
end end
self.previousEnergy = UnitPower(self.unit, UnitPowerType(self.unit))
if IceHUD.WowVer < 40000 then
self:Update(unit)
end
end end

View File

@ -9,6 +9,8 @@ local maxComboPoints = 5
local rtbEndTime = 0 local rtbEndTime = 0
local rtbDuration = 0 local rtbDuration = 0
local rtbCount = 0 local rtbCount = 0
local sixComboPointsTalentID = 19240
local behaviorDependsOnComboPoints = IceHUD.WowVer < 90000
local CurrMaxRtBDuration = 0 local CurrMaxRtBDuration = 0
local PotentialRtBDuration = 0 local PotentialRtBDuration = 0
@ -33,12 +35,14 @@ function RollTheBones.prototype:init()
self.moduleSettings.shouldAnimate = false self.moduleSettings.shouldAnimate = false
self:SetDefaultColor("RollTheBones", 1, 0.6, 0.2) self:SetDefaultColor("RollTheBones", 1, 0.6, 0.2)
if behaviorDependsOnComboPoints then
self:SetDefaultColor("RollTheBones2", 0.75, 1, 0.2) self:SetDefaultColor("RollTheBones2", 0.75, 1, 0.2)
self:SetDefaultColor("RollTheBones3", 0.4, 1, 0.2) self:SetDefaultColor("RollTheBones3", 0.4, 1, 0.2)
self:SetDefaultColor("RollTheBones4", 0.4, 1, 0.2) self:SetDefaultColor("RollTheBones4", 0.4, 1, 0.2)
self:SetDefaultColor("RollTheBones5", 0.1, 1, 0.7) self:SetDefaultColor("RollTheBones5", 0.1, 1, 0.7)
self:SetDefaultColor("RollTheBones6", 0.1, 1, 0.7) self:SetDefaultColor("RollTheBones6", 0.1, 1, 0.7)
self:SetDefaultColor("RollTheBonesPotential", 1, 1, 1) self:SetDefaultColor("RollTheBonesPotential", 1, 1, 1)
end
self.bTreatEmptyAsFull = true self.bTreatEmptyAsFull = true
end end
@ -50,7 +54,10 @@ function RollTheBones.prototype:Enable(core)
RollTheBones.super.prototype.Enable(self, core) RollTheBones.super.prototype.Enable(self, core)
self:RegisterEvent("UNIT_AURA", "UpdateRollTheBones") self:RegisterEvent("UNIT_AURA", "UpdateRollTheBones")
if behaviorDependsOnComboPoints then
self:RegisterEvent(IceHUD.UnitPowerEvent, "ComboPointsChanged") self:RegisterEvent(IceHUD.UnitPowerEvent, "ComboPointsChanged")
end
if not self.moduleSettings.alwaysFullAlpha then if not self.moduleSettings.alwaysFullAlpha then
self:Show(false) self:Show(false)
@ -106,6 +113,7 @@ 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"]["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 opts["textSettings"].args["upperTextString"].hidden = false
if behaviorDependsOnComboPoints then
opts["showAsPercentOfMax"] = opts["showAsPercentOfMax"] =
{ {
type = 'toggle', type = 'toggle',
@ -142,6 +150,24 @@ function RollTheBones.prototype:GetOptions()
end 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["bShowWithNoTarget"] = opts["bShowWithNoTarget"] =
{ {
type = 'toggle', type = 'toggle',
@ -159,23 +185,6 @@ function RollTheBones.prototype:GetOptions()
end, 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 return opts
end end
@ -186,7 +195,11 @@ function RollTheBones.prototype:CreateFrame()
end end
function RollTheBones.prototype:CreateDurationBar() function RollTheBones.prototype:CreateDurationBar()
self.durationFrame = self:BarFactory(self.durationFrame, "BACKGROUND","ARTWORK") if not behaviorDependsOnComboPoints then
return
end
self.durationFrame = self:BarFactory(self.durationFrame, "BACKGROUND","ARTWORK", "Duration")
-- Rokiyo: Do we need to call this here? -- Rokiyo: Do we need to call this here?
self.CurrScale = 0 self.CurrScale = 0
@ -204,8 +217,10 @@ end
function RollTheBones.prototype:RotateHorizontal() function RollTheBones.prototype:RotateHorizontal()
RollTheBones.super.prototype.RotateHorizontal(self) RollTheBones.super.prototype.RotateHorizontal(self)
if self.durationFrame then
self:RotateFrame(self.durationFrame) self:RotateFrame(self.durationFrame)
end end
end
function RollTheBones.prototype:ResetRotation() function RollTheBones.prototype:ResetRotation()
RollTheBones.super.prototype.ResetRotation(self) RollTheBones.super.prototype.ResetRotation(self)
@ -308,7 +323,7 @@ function RollTheBones.prototype:UpdateRollTheBones(event, unit, fromUpdate)
if not remaining then if not remaining then
remaining = rtbEndTime - now remaining = rtbEndTime - now
end end
local denominator = (self.moduleSettings.showAsPercentOfMax and CurrMaxRtBDuration or rtbDuration) local denominator = ((self.moduleSettings.showAsPercentOfMax and behaviorDependsOnComboPoints) and CurrMaxRtBDuration or rtbDuration)
self:UpdateBar(denominator ~= 0 and remaining / denominator or 0, self:GetColorName(rtbCount)) self:UpdateBar(denominator ~= 0 and remaining / denominator or 0, self:GetColorName(rtbCount))
else else
self:UpdateBar(0, "RollTheBones") self:UpdateBar(0, "RollTheBones")
@ -326,13 +341,13 @@ function RollTheBones.prototype:UpdateRollTheBones(event, unit, fromUpdate)
-- somewhat redundant, but we also need to check potential remaining time -- somewhat redundant, but we also need to check potential remaining time
if (remaining ~= nil) or PotentialRtBDuration > 0 then if (remaining ~= nil) or PotentialRtBDuration > 0 then
local potText = " (" .. PotentialRtBDuration .. ")" local potText = behaviorDependsOnComboPoints and " (" .. PotentialRtBDuration .. ")" or ""
self:SetBottomText1(self.moduleSettings.upperText .. tostring(floor(remaining or 0)) .. (self.moduleSettings.durationAlpha ~= 0 and potText or "")) self:SetBottomText1(self.moduleSettings.upperText .. tostring(floor(remaining or 0)) .. (self.moduleSettings.durationAlpha ~= 0 and potText or ""))
end end
end end
function RollTheBones.prototype:GetColorName(count) function RollTheBones.prototype:GetColorName(count)
if self.moduleSettings.bUseMultipleBuffColors and count >= 2 then if behaviorDependsOnComboPoints and self.moduleSettings.bUseMultipleBuffColors and count >= 2 then
return "RollTheBones"..count return "RollTheBones"..count
else else
return "RollTheBones" return "RollTheBones"
@ -352,13 +367,17 @@ function RollTheBones.prototype:TargetChanged()
end end
function RollTheBones.prototype:UpdateDurationBar(event, unit) function RollTheBones.prototype:UpdateDurationBar(event, unit)
if not self.durationFrame then
return
end
if unit and unit ~= self.unit then if unit and unit ~= self.unit then
return return
end end
local points = RTBGetComboPoints(self.unit) local points = RTBGetComboPoints(self.unit)
-- check for Deeper Stratagem -- check for Deeper Stratagem
local _, _, _, DeeperStratagem = GetTalentInfo(3, 1, 1) local _, _, _, DeeperStratagem = GetTalentInfoByID(sixComboPointsTalentID, GetActiveSpecGroup())
if DeeperStratagem then if DeeperStratagem then
-- first, set the cached upper limit of RtB duration -- first, set the cached upper limit of RtB duration

View File

@ -282,7 +282,7 @@ function Runes.prototype:Enable(core)
if IceHUD.WowVer >= 70300 then if IceHUD.WowVer >= 70300 then
self:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED", "UpdateRuneColors") self:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED", "UpdateRuneColors")
end end
self:RegisterEvent("PLAYER_ENTERING_WORLD", "ResetRuneAvailability") self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
self:RegisterEvent("UNIT_MAXPOWER", "CheckMaxNumRunes") self:RegisterEvent("UNIT_MAXPOWER", "CheckMaxNumRunes")
if (self.moduleSettings.hideBlizz) then if (self.moduleSettings.hideBlizz) then
@ -290,6 +290,11 @@ function Runes.prototype:Enable(core)
end end
end end
function Runes.prototype:EnteringWorld()
self:TargetChanged()
self:ResetRuneAvailability()
end
function Runes.prototype:Disable(core) function Runes.prototype:Disable(core)
Runes.super.prototype.Disable(self, core) Runes.super.prototype.Disable(self, core)

View File

@ -107,6 +107,7 @@ function ShardCounter.prototype:UpdateRunePower(event, arg1, arg2)
end end
if event == "PLAYER_ENTERING_WORLD" and IceHUD.WowVer < 70000 then if event == "PLAYER_ENTERING_WORLD" and IceHUD.WowVer < 70000 then
self:TargetChanged()
self:UpdatePowerType(event) self:UpdatePowerType(event)
end end

View File

@ -20,6 +20,7 @@ local impSndBonusPerRank = 0.25
local maxComboPoints = 5 local maxComboPoints = 5
local sndEndTime = 0 local sndEndTime = 0
local sndDuration = 0 local sndDuration = 0
local sixComboPointsTalentID = 19240
local CurrMaxSnDDuration = 0 local CurrMaxSnDDuration = 0
local PotentialSnDDuration = 0 local PotentialSnDDuration = 0
@ -66,6 +67,11 @@ function SliceAndDice.prototype:Enable(core)
self:RegisterEvent(IceHUD.UnitPowerEvent, "ComboPointsChanged") self:RegisterEvent(IceHUD.UnitPowerEvent, "ComboPointsChanged")
end end
if IceHUD.WowVer >= 70000 then
self:RegisterEvent("PLAYER_TALENT_UPDATE", "CheckMaxComboPoints")
self:CheckMaxComboPoints()
end
if not self.moduleSettings.alwaysFullAlpha then if not self.moduleSettings.alwaysFullAlpha then
self:Show(false) self:Show(false)
else else
@ -75,6 +81,11 @@ function SliceAndDice.prototype:Enable(core)
self:SetBottomText1("") self:SetBottomText1("")
end end
function SliceAndDice.prototype:CheckMaxComboPoints()
local talentID, name, texture, selected, available, spellID, unknown, row, column, known, grantedByAura = GetTalentInfoByID(sixComboPointsTalentID, GetActiveSpecGroup())
maxComboPoints = selected and 6 or 5
end
function SliceAndDice.prototype:Disable(core) function SliceAndDice.prototype:Disable(core)
SliceAndDice.super.prototype.Disable(self, core) SliceAndDice.super.prototype.Disable(self, core)
end end
@ -182,7 +193,7 @@ function SliceAndDice.prototype:CreateFrame()
end end
function SliceAndDice.prototype:CreateDurationBar() function SliceAndDice.prototype:CreateDurationBar()
self.durationFrame = self:BarFactory(self.durationFrame, "BACKGROUND","ARTWORK") self.durationFrame = self:BarFactory(self.durationFrame, "BACKGROUND","ARTWORK", "Duration")
-- Rokiyo: Do we need to call this here? -- Rokiyo: Do we need to call this here?
self.CurrScale = 0 self.CurrScale = 0
@ -270,6 +281,10 @@ local function HasSpell(id)
end end
local function ShouldHide() local function ShouldHide()
if IceHUD.WowVer >= 90000 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 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. -- 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 -- if we do, though, the "active" check gets way more complicated since it can activate any number of 6 different abilities

View File

@ -137,7 +137,7 @@ function StaggerBar.prototype:CreateFrame()
end end
function StaggerBar.prototype:CreateTimerBar() function StaggerBar.prototype:CreateTimerBar()
self.timerFrame = self:BarFactory(self.timerFrame, "MEDIUM","ARTWORK") self.timerFrame = self:BarFactory(self.timerFrame, "MEDIUM","ARTWORK", "Timer")
self.CurrScale = 0 self.CurrScale = 0
@ -157,6 +157,7 @@ function StaggerBar.prototype:UpdateShown()
end end
function StaggerBar.prototype:PLAYER_ENTERING_WORLD() function StaggerBar.prototype:PLAYER_ENTERING_WORLD()
self:TargetChanged()
self:UpdateStaggerBar() self:UpdateStaggerBar()
end end

View File

@ -3,12 +3,6 @@ local TargetCast = IceCore_CreateClass(IceCastBar)
TargetCast.prototype.notInterruptible = false TargetCast.prototype.notInterruptible = false
local UnitCastingInfo, UnitChannelInfo = UnitCastingInfo, UnitChannelInfo
if IceHUD.WowClassic then
UnitCastingInfo = CastingInfo
UnitChannelInfo = ChannelInfo
end
-- Constructor -- -- Constructor --
function TargetCast.prototype:init() function TargetCast.prototype:init()
TargetCast.super.prototype.init(self, "TargetCast") TargetCast.super.prototype.init(self, "TargetCast")
@ -71,7 +65,12 @@ function TargetCast.prototype:GetDefaultSettings()
settings["side"] = IceCore.Side.Right settings["side"] = IceCore.Side.Right
settings["offset"] = 3 settings["offset"] = 3
settings["flashInstants"] = "Never" 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" settings["flashFailures"] = "Never"
end
settings["shouldAnimate"] = false settings["shouldAnimate"] = false
settings["hideAnimationSettings"] = true settings["hideAnimationSettings"] = true
settings["usesDogTagStrings"] = false settings["usesDogTagStrings"] = false
@ -90,6 +89,7 @@ function TargetCast.prototype:TargetChanged(unit)
return return
end end
if UnitCastingInfo then
local spell = UnitCastingInfo(self.unit) local spell = UnitCastingInfo(self.unit)
local notInterruptible = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 9 or 8, UnitCastingInfo(self.unit)) local notInterruptible = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 9 or 8, UnitCastingInfo(self.unit))
if spell then if spell then
@ -97,7 +97,9 @@ function TargetCast.prototype:TargetChanged(unit)
self:StartBar(IceCastBar.Actions.Cast) self:StartBar(IceCastBar.Actions.Cast)
return return
end end
end
if UnitChannelInfo then
local channel = UnitChannelInfo(self.unit) local channel = UnitChannelInfo(self.unit)
notInterruptible = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 8 or 7, UnitChannelInfo(self.unit)) notInterruptible = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 8 or 7, UnitChannelInfo(self.unit))
if channel then if channel then
@ -105,6 +107,7 @@ function TargetCast.prototype:TargetChanged(unit)
self:StartBar(IceCastBar.Actions.Channel) self:StartBar(IceCastBar.Actions.Channel)
return return
end end
end
self:StopBar() self:StopBar()
end end
@ -177,16 +180,19 @@ function TargetCast.prototype:GetOptions()
end end
function TargetCast.prototype:StartBar(action, message) function TargetCast.prototype:StartBar(action, message)
local spell = UnitCastingInfo(self.unit) local spell, notInterruptible
local notInterruptible = select(IceHUD.WowVer < 80000 and 9 or 8, UnitCastingInfo(self.unit)) if UnitCastingInfo then
if not spell then spell = UnitCastingInfo(self.unit)
notInterruptible = select(IceHUD.WowVer < 80000 and 9 or 8, UnitCastingInfo(self.unit))
end
if UnitChannelInfo and not spell then
spell = UnitChannelInfo(self.unit) spell = UnitChannelInfo(self.unit)
notInterruptible = select(IceHUD.WowVer < 80000 and 8 or 7, UnitChannelInfo(self.unit)) notInterruptible = select(IceHUD.WowVer < 80000 and 8 or 7, UnitChannelInfo(self.unit))
end
if not spell then if not spell then
return return
end end
end
self.notInterruptible = notInterruptible self.notInterruptible = notInterruptible
@ -196,5 +202,8 @@ end
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- Fulzamoth 2019-09-27 : load in Classic if LibClassicCasterino exists
-- Load us up -- Load us up
if not IceHUD.WowClassic or LibClassicCasterino then
IceHUD.TargetCast = TargetCast:new() IceHUD.TargetCast = TargetCast:new()
end

View File

@ -842,6 +842,30 @@ function IceTargetHealth.prototype:Update(unit)
self:UpdateBar(self.healthPercentage, self.color) 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 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
end
else
if not IceHUD.IceCore:ShouldUseDogTags() and self.frame:IsVisible() then if not IceHUD.IceCore:ShouldUseDogTags() and self.frame:IsVisible() then
self:SetBottomText1(math.floor(self.healthPercentage * 100)) self:SetBottomText1(math.floor(self.healthPercentage * 100))
@ -856,6 +880,7 @@ function IceTargetHealth.prototype:Update(unit)
self:SetBottomText2() self:SetBottomText2()
end end
end end
end
self:CheckPvP() self:CheckPvP()
self:CheckPartyRole() self:CheckPartyRole()

View File

@ -12,6 +12,10 @@ local internal = "internal"
local ValidAnchors = { "TOPLEFT", "TOPRIGHT", "BOTTOMLEFT", "BOTTOMRIGHT", "CENTER" } 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.unit = "target"
IceTargetInfo.prototype.buffSize = nil IceTargetInfo.prototype.buffSize = nil
@ -1410,10 +1414,27 @@ function IceTargetInfo.prototype:UpdateBuffType(aura)
if self.moduleSettings.auras[aura].show then if self.moduleSettings.auras[aura].show then
for i = 1, IceCore.BuffLimit do for i = 1, IceCore.BuffLimit do
local name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable 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.WowVer < 80000 and not IceHUD.WowClassic then if IceHUD.WowVer < 80000 and not IceHUD.WowClassic then
name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable = UnitAura(self.unit, i, reaction .. (filter and "|PLAYER" or "")) name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable = UnitAura(self.unit, i, reaction .. (filter and "|PLAYER" or ""))
else else
name, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable = UnitAura(self.unit, i, reaction .. (filter and "|PLAYER" or "")) ---- 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
end end
local isFromMe = (unitCaster == "player") local isFromMe = (unitCaster == "player")

View File

@ -156,7 +156,7 @@ function IceTargetMana.prototype:Update(unit)
if not IceHUD.IceCore:ShouldUseDogTags() then if not IceHUD.IceCore:ShouldUseDogTags() then
self:SetBottomText1(math.floor(self.manaPercentage * 100)) self:SetBottomText1(math.floor(self.manaPercentage * 100))
self:SetBottomText2(self:GetFormattedText(self.mana, self.maxMana), color) self:SetBottomText2(self:GetFormattedText(self.mana, self.maxMana), self.color)
end end
end end

View File

@ -4,12 +4,6 @@ TargetTargetCast.prototype.scheduledEvent = nil
local SelfDisplayModeOptions = {"Hide", "Normal"} local SelfDisplayModeOptions = {"Hide", "Normal"}
local UnitCastingInfo, UnitChannelInfo = UnitCastingInfo, UnitChannelInfo
if IceHUD.WowClassic then
UnitCastingInfo = CastingInfo
UnitChannelInfo = ChannelInfo
end
-- Constructor -- -- Constructor --
function TargetTargetCast.prototype:init() function TargetTargetCast.prototype:init()
TargetTargetCast.super.prototype.init(self, "TargetTargetCast") TargetTargetCast.super.prototype.init(self, "TargetTargetCast")
@ -64,17 +58,21 @@ function TargetTargetCast.prototype:UpdateTargetTarget()
return return
end end
if UnitCastingInfo then
local spell = UnitCastingInfo(self.unit) local spell = UnitCastingInfo(self.unit)
if (spell) then if spell then
self:StartBar(IceCastBar.Actions.Cast) self:StartBar(IceCastBar.Actions.Cast)
return return
end end
end
if UnitChannelInfo then
local channel = UnitChannelInfo(self.unit) local channel = UnitChannelInfo(self.unit)
if (channel) then if channel then
self:StartBar(IceCastBar.Actions.Channel) self:StartBar(IceCastBar.Actions.Channel)
return return
end end
end
self:StopBar() self:StopBar()
end end
@ -150,4 +148,6 @@ end
-- Load us up -- Load us up
if not IceHUD.WowClassic then
IceHUD.TargetTargetCast = TargetTargetCast:new() IceHUD.TargetTargetCast = TargetTargetCast:new()
end

View File

@ -23,6 +23,13 @@ if IceHUD.WowVer >= 50000 or IceHUD.WowClassic then
MAX_NUM_RAID_MEMBERS = MAX_RAID_MEMBERS MAX_NUM_RAID_MEMBERS = MAX_RAID_MEMBERS
end end
local UnitGroupRolesAssigned = UnitGroupRolesAssigned
if not UnitGroupRolesAssigned then
UnitGroupRolesAssigned = function()
return "NONE"
end
end
local MAX_NUM_RAID_MEMBERS = 40 local MAX_NUM_RAID_MEMBERS = 40
local MAX_NUM_PARTY_MEMBERS = 5 local MAX_NUM_PARTY_MEMBERS = 5
@ -224,7 +231,7 @@ end
-- create the aggro range indicator bar -- create the aggro range indicator bar
function IceThreat.prototype:CreateAggroBar() function IceThreat.prototype:CreateAggroBar()
self.aggroBar = self:BarFactory(self.aggroBar, "BACKGROUND","ARTWORK") self.aggroBar = self:BarFactory(self.aggroBar, "BACKGROUND","ARTWORK", "Aggro")
local r, g, b = self:GetColor("ThreatPullAggro") local r, g, b = self:GetColor("ThreatPullAggro")
if (self.settings.backgroundToggle) then if (self.settings.backgroundToggle) then
@ -236,7 +243,7 @@ function IceThreat.prototype:CreateAggroBar()
end end
function IceThreat.prototype:CreateSecondThreatBar() function IceThreat.prototype:CreateSecondThreatBar()
self.secondThreatBar = self:BarFactory(self.secondThreatBar, "MEDIUM", "OVERLAY") self.secondThreatBar = self:BarFactory(self.secondThreatBar, "MEDIUM", "OVERLAY", "SecondThreat")
self.secondThreatBar.bar:SetVertexColor(self:GetColor("ThreatSecondPlace", self.alpha * self.moduleSettings.secondPlaceThreatAlpha)) self.secondThreatBar.bar:SetVertexColor(self:GetColor("ThreatSecondPlace", self.alpha * self.moduleSettings.secondPlaceThreatAlpha))

View File

@ -215,7 +215,7 @@ function Totems.prototype:Enable(core)
Totems.super.prototype.Enable(self, core) Totems.super.prototype.Enable(self, core)
self:RegisterEvent("PLAYER_TOTEM_UPDATE", "UpdateTotem"); self:RegisterEvent("PLAYER_TOTEM_UPDATE", "UpdateTotem");
self:RegisterEvent("PLAYER_ENTERING_WORLD", "ResetTotemAvailability"); self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld");
if self.moduleSettings.hideBlizz then if self.moduleSettings.hideBlizz then
self:HideBlizz() self:HideBlizz()
@ -230,6 +230,11 @@ function Totems.prototype:Disable(core)
end end
end end
function Totems.prototype:EnteringWorld()
self:TargetChanged()
self:ResetTotemAvailability()
end
function Totems.prototype:ResetTotemAvailability() function Totems.prototype:ResetTotemAvailability()
for i=1, self.numTotems do for i=1, self.numTotems do
self:UpdateTotem(nil, i) self:UpdateTotem(nil, i)
@ -237,7 +242,7 @@ function Totems.prototype:ResetTotemAvailability()
end end
function Totems.prototype:UpdateTotem(event, totem, ...) function Totems.prototype:UpdateTotem(event, totem, ...)
if not totem or tonumber(totem) ~= totem or totem < 1 or totem > self.numTotems then if not totem or tonumber(totem) ~= totem or totem < 1 or totem > self.numTotems or not GetTotemInfo then
return return
end end
local thisTotemName = self.totemNames[TOTEM_PRIORITIES[totem]] local thisTotemName = self.totemNames[TOTEM_PRIORITIES[totem]]
@ -331,8 +336,7 @@ function Totems.prototype:CheckCombat()
end end
function Totems.prototype:CreateTotem(i, name) function Totems.prototype:CreateTotem(i, name)
-- 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 or not GetTotemInfo then
if not name then
return return
end end
local haveTotem, name, startTime, duration, icon = GetTotemInfo(i) local haveTotem, name, startTime, duration, icon = GetTotemInfo(i)

View File

@ -1,11 +1,23 @@
# IceHUD
## Shadowlands/9.0 note
Anyone wanting to try out my first attempt at 9.0 compatibility is welcome to download the latest alpha build. I'm going to give this some time to percolate and wait for reports to come in before tagging it as a final build. I don't have a whole lot of time right now to work on the mod, so feedback is helpful.
Additionally, if you find this mod integral to your WoW experience, [a donation is very helpful](https://www.paypal.com/cgi-bin/webscr?return=https://www.github.com/parnic/ice-hud&cn=Add+special+instructions+to+the+addon+author()&business=icehud%40parnic.com&bn=PP-DonationsBF:btn_donateCC_LG.gif:NonHosted&cancel_return=https://www.github.com/parnic/ice-hud&lc=US&item_name=IceHUD+(from+github.com)&cmd=_donations&rm=1&no_shipping=1&currency_code=USD) to allow me to gauge how much time I need to put into this as well as maintain a WoW subscription to be able to develop the mod.
Thanks!
----
IceHUD is a highly configurable and customizable HUD addon in the spirit of DHUD, MetaHUD, and others designed to keep your focus in the center of the screen where your character is. IceHUD is a highly configurable and customizable HUD addon in the spirit of DHUD, MetaHUD, and others designed to keep your focus in the center of the screen where your character is.
## **What it is**
### **What it is** * 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.
* 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 * 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 * 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 * Target-of-target bars, Crowd Control timers, Range Finders, Threat meters, and plenty of other helpful modules
@ -15,13 +27,12 @@ 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! * 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.) * 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 * /icehud - opens the configuration UI to tweak any setting
* /icehudCL - command-line access to tweak IceHUD settings (for use with macros, etc.) * /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?** 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) 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)
@ -77,5 +88,10 @@ 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?** 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. 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](https://www.wowace.com/projects/ice-hud/issues/113) for a user-created guide to creating new IceHUD textures.