mirror of
https://github.com/parnic/ice-hud.git
synced 2025-06-16 14:50:13 -05:00
Compare commits
35 Commits
Author | SHA1 | Date | |
---|---|---|---|
36c8f02fc2
|
|||
db7d797eb2
|
|||
a9cf5d5b2c
|
|||
81d8ffeae1
|
|||
d9c3de0a5e
|
|||
efdad59911
|
|||
b8e8b41ae7
|
|||
261be76d90 | |||
55fbfbdf1c
|
|||
e6077ab39f
|
|||
abf3c0d514
|
|||
b1e746bec9
|
|||
659de89d0c
|
|||
da79bb35c8
|
|||
b40829abbb | |||
7dfc05aa91
|
|||
a0d05ebf94
|
|||
b5b5c31791
|
|||
5c66970d8f
|
|||
4fbb70ebc0
|
|||
9cfa00227f
|
|||
9b90694912 | |||
67f79736d8
|
|||
dc98e5b521
|
|||
94506cc591
|
|||
09d9a9c6f7 | |||
8b7ce521ff | |||
26fd86134b | |||
e4d8bae185
|
|||
2d42116f8d
|
|||
a7d1629ed3
|
|||
070d66eca3
|
|||
a0c5b97ccb
|
|||
3e56595709
|
|||
c016b0ccc0
|
@ -23,6 +23,21 @@ if IceHUD.WowClassic then
|
||||
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
|
||||
|
||||
@ -46,21 +61,55 @@ end
|
||||
function IceCastBar.prototype:Enable(core)
|
||||
IceCastBar.super.prototype.Enable(self, core)
|
||||
|
||||
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
|
||||
-- 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_FAILED", "SpellCastFailed") -- unit, spell, rank
|
||||
self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED", "SpellCastInterrupted") -- 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_DELAYED", "SpellCastDelayed") -- unit, spell, rank
|
||||
self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED", "SpellCastSucceeded") -- "player", spell, rank
|
||||
self:RegisterEvent("UNIT_SPELLCAST_FAILED", "SpellCastFailed") -- unit, spell, rank
|
||||
self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED", "SpellCastInterrupted") -- 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
|
||||
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
|
||||
|
||||
end
|
||||
self:Show(false)
|
||||
end
|
||||
|
||||
@ -371,8 +420,11 @@ function IceCastBar.prototype:StartBar(action, message)
|
||||
end
|
||||
end
|
||||
|
||||
if not spell then
|
||||
return
|
||||
-- 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
|
||||
end
|
||||
|
||||
if icon ~= nil then
|
||||
@ -398,7 +450,7 @@ function IceCastBar.prototype:StartBar(action, message)
|
||||
self.actionDuration = 1 -- instants/failures
|
||||
end
|
||||
|
||||
if not (message) then
|
||||
if not (message) and spell then
|
||||
self.actionMessage = spell .. (self.moduleSettings.showSpellRank and self:GetShortRank(rank) or "")
|
||||
end
|
||||
|
||||
@ -470,7 +522,7 @@ function IceCastBar.prototype:SpellCastStop(event, unit, castGuid, spellId)
|
||||
end
|
||||
|
||||
|
||||
function IceCastBar.prototype:SpellCastFailed(event, castGuid, spellId)
|
||||
function IceCastBar.prototype:SpellCastFailed(event, unit, castGuid, spellId)
|
||||
if (unit ~= self.unit) then return end
|
||||
IceHUD:Debug("SpellCastFailed", unit, castGuid, spellId)
|
||||
|
||||
|
12
IceCore.lua
12
IceCore.lua
@ -520,10 +520,14 @@ function IceCore.prototype:Disable(userToggle)
|
||||
end
|
||||
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")
|
||||
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:SetScript("OnEvent", nil)
|
||||
|
||||
self.enabled = false
|
||||
|
@ -1,4 +1,4 @@
|
||||
## Interface: 80200
|
||||
## Interface: 80300
|
||||
## Author: Parnic, originally created by Iceroth
|
||||
## Name: IceHUD
|
||||
## Title: IceHUD |cff7fff7f-Ace3-|r
|
||||
|
@ -1,4 +1,4 @@
|
||||
## Interface: 80200
|
||||
## Interface: 80300
|
||||
## Title: IceHUD |cff7fff7f-Options-|r
|
||||
## Author: Parnic
|
||||
## Version: @project-version@
|
||||
|
@ -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.
|
||||
|
||||
|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.]]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -128,7 +128,7 @@ end
|
||||
function IceStackCounter_Enable(frame)
|
||||
frame:RegisterEvent("UNIT_AURA", "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")
|
||||
end
|
||||
if FocusUnit then
|
||||
|
@ -19,9 +19,10 @@ IceUnitBar.prototype.hasPet = 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
|
||||
SPELL_POWER_INSANITY = Enum.PowerType.Insanity
|
||||
SPELL_POWER_RAGE = Enum.PowerType.Rage
|
||||
end
|
||||
|
||||
-- Constructor --
|
||||
@ -230,8 +231,14 @@ 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)
|
||||
|
@ -1,5 +1,52 @@
|
||||
v1.12.0-alpha:
|
||||
- WoW Classic compatibility
|
||||
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:
|
||||
- Updated TOC to 8.2
|
||||
|
@ -439,7 +439,9 @@ function CastBar.prototype:SpellCastStart(event, unit, castGuid, spellId)
|
||||
end
|
||||
|
||||
self:UpdateLagBar()
|
||||
self.nextLagUpdate = GetTime() + (select(2, GetSpellCooldown(IceHUD.GlobalCoolDown:GetSpellId())) / 2)
|
||||
if IceHUD.GlobalCoolDown then
|
||||
self.nextLagUpdate = GetTime() + (select(2, GetSpellCooldown(IceHUD.GlobalCoolDown:GetSpellId())) / 2)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -464,7 +466,9 @@ function CastBar.prototype:SpellCastSucceeded(event, unit, castGuid, spellId)
|
||||
end
|
||||
|
||||
self:UpdateLagBar()
|
||||
self.nextLagUpdate = GetTime() + (select(2, GetSpellCooldown(IceHUD.GlobalCoolDown:GetSpellId())) / 2)
|
||||
if IceHUD.GlobalCoolDown then
|
||||
self.nextLagUpdate = GetTime() + (select(2, GetSpellCooldown(IceHUD.GlobalCoolDown:GetSpellId())) / 2)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
@ -467,7 +467,7 @@ function IceClassPowerCounter.prototype:DisplayCounter()
|
||||
|
||||
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateRunePower")
|
||||
self:RegisterEvent("UNIT_DISPLAYPOWER", "UpdateRunePower")
|
||||
self:RegisterEvent("PLAYER_ENTERING_WORLD", "UpdateRunePower")
|
||||
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
|
||||
|
||||
if (self.moduleSettings.hideBlizz) then
|
||||
self:HideBlizz()
|
||||
@ -484,6 +484,11 @@ 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
|
||||
|
@ -553,4 +553,7 @@ end
|
||||
|
||||
|
||||
-- Load us up
|
||||
IceHUD.ComboPoints = ComboPoints:new()
|
||||
local _, class = UnitClass("player")
|
||||
if not IceHUD.WowClassic or class == "ROGUE" or class == "DRUID" then
|
||||
IceHUD.ComboPoints = ComboPoints:new()
|
||||
end
|
||||
|
@ -135,4 +135,7 @@ function ComboPointsBar.prototype:Update()
|
||||
self:UpdateComboPoints()
|
||||
end
|
||||
|
||||
IceHUD.ComboPointsBar = ComboPointsBar:new()
|
||||
local _, class = UnitClass("player")
|
||||
if not IceHUD.WowClassic or class == "ROGUE" or class == "DRUID" then
|
||||
IceHUD.ComboPointsBar = ComboPointsBar:new()
|
||||
end
|
||||
|
@ -81,6 +81,10 @@ function IceCustomBar.prototype:Disable(core)
|
||||
end
|
||||
|
||||
function IceCustomBar.prototype:GetUnitToTrack()
|
||||
if IceHUD.WowClassic then
|
||||
return "player"
|
||||
end
|
||||
|
||||
if self.moduleSettings.myUnit == "other" then
|
||||
if self.moduleSettings.customUnit ~= nil and self.moduleSettings.customUnit ~= "" then
|
||||
return self.moduleSettings.customUnit
|
||||
@ -258,51 +262,53 @@ function IceCustomBar.prototype:GetOptions()
|
||||
order = 30.3,
|
||||
}
|
||||
|
||||
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,
|
||||
}
|
||||
if not IceHUD.WowClassic 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["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["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["buffOrDebuff"] = {
|
||||
type = 'select',
|
||||
|
@ -1,12 +1,6 @@
|
||||
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
||||
local FocusCast = IceCore_CreateClass(IceCastBar)
|
||||
|
||||
local UnitCastingInfo, UnitChannelInfo = UnitCastingInfo, UnitChannelInfo
|
||||
if IceHUD.WowClassic then
|
||||
UnitCastingInfo = CastingInfo
|
||||
UnitChannelInfo = ChannelInfo
|
||||
end
|
||||
|
||||
-- Constructor --
|
||||
function FocusCast.prototype:init()
|
||||
FocusCast.super.prototype.init(self, "FocusCast")
|
||||
|
@ -291,4 +291,6 @@ function GlobalCoolDown.prototype:GetSpellId()
|
||||
end
|
||||
|
||||
-- Load us up
|
||||
IceHUD.GlobalCoolDown = GlobalCoolDown:new()
|
||||
if not IceHUD.WowClassic then
|
||||
IceHUD.GlobalCoolDown = GlobalCoolDown:new()
|
||||
end
|
||||
|
@ -387,7 +387,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) then
|
||||
if self.manaType == SPELL_POWER_ENERGY or self.manaType == SPELL_POWER_FOCUS then
|
||||
displayPercentage = self.mana
|
||||
else
|
||||
displayPercentage = math.floor(displayPercentage * 100)
|
||||
@ -419,17 +419,17 @@ function PlayerMana.prototype:UpdateEnergy(event, unit)
|
||||
return
|
||||
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
|
||||
((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
|
||||
end
|
||||
|
||||
|
||||
|
@ -282,7 +282,7 @@ function Runes.prototype:Enable(core)
|
||||
if IceHUD.WowVer >= 70300 then
|
||||
self:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED", "UpdateRuneColors")
|
||||
end
|
||||
self:RegisterEvent("PLAYER_ENTERING_WORLD", "ResetRuneAvailability")
|
||||
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
|
||||
self:RegisterEvent("UNIT_MAXPOWER", "CheckMaxNumRunes")
|
||||
|
||||
if (self.moduleSettings.hideBlizz) then
|
||||
@ -290,6 +290,11 @@ function Runes.prototype:Enable(core)
|
||||
end
|
||||
end
|
||||
|
||||
function Runes.prototype:EnteringWorld()
|
||||
self:TargetChanged()
|
||||
self:ResetRuneAvailability()
|
||||
end
|
||||
|
||||
function Runes.prototype:Disable(core)
|
||||
Runes.super.prototype.Disable(self, core)
|
||||
|
||||
|
@ -107,6 +107,7 @@ function ShardCounter.prototype:UpdateRunePower(event, arg1, arg2)
|
||||
end
|
||||
|
||||
if event == "PLAYER_ENTERING_WORLD" and IceHUD.WowVer < 70000 then
|
||||
self:TargetChanged()
|
||||
self:UpdatePowerType(event)
|
||||
end
|
||||
|
||||
|
@ -157,6 +157,7 @@ function StaggerBar.prototype:UpdateShown()
|
||||
end
|
||||
|
||||
function StaggerBar.prototype:PLAYER_ENTERING_WORLD()
|
||||
self:TargetChanged()
|
||||
self:UpdateStaggerBar()
|
||||
end
|
||||
|
||||
|
@ -3,12 +3,6 @@ local TargetCast = IceCore_CreateClass(IceCastBar)
|
||||
|
||||
TargetCast.prototype.notInterruptible = false
|
||||
|
||||
local UnitCastingInfo, UnitChannelInfo = UnitCastingInfo, UnitChannelInfo
|
||||
if IceHUD.WowClassic then
|
||||
UnitCastingInfo = CastingInfo
|
||||
UnitChannelInfo = ChannelInfo
|
||||
end
|
||||
|
||||
-- Constructor --
|
||||
function TargetCast.prototype:init()
|
||||
TargetCast.super.prototype.init(self, "TargetCast")
|
||||
@ -71,7 +65,12 @@ function TargetCast.prototype:GetDefaultSettings()
|
||||
settings["side"] = IceCore.Side.Right
|
||||
settings["offset"] = 3
|
||||
settings["flashInstants"] = "Never"
|
||||
settings["flashFailures"] = "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["shouldAnimate"] = false
|
||||
settings["hideAnimationSettings"] = true
|
||||
settings["usesDogTagStrings"] = false
|
||||
@ -90,20 +89,24 @@ function TargetCast.prototype:TargetChanged(unit)
|
||||
return
|
||||
end
|
||||
|
||||
local spell = UnitCastingInfo(self.unit)
|
||||
local notInterruptible = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 9 or 8, UnitCastingInfo(self.unit))
|
||||
if spell then
|
||||
self.notInterruptible = notInterruptibleCast
|
||||
self:StartBar(IceCastBar.Actions.Cast)
|
||||
return
|
||||
if UnitCastingInfo then
|
||||
local spell = UnitCastingInfo(self.unit)
|
||||
local notInterruptible = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 9 or 8, UnitCastingInfo(self.unit))
|
||||
if spell then
|
||||
self.notInterruptible = notInterruptibleCast
|
||||
self:StartBar(IceCastBar.Actions.Cast)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local channel = UnitChannelInfo(self.unit)
|
||||
notInterruptible = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 8 or 7, UnitChannelInfo(self.unit))
|
||||
if channel then
|
||||
self.notInterruptible = notInterruptibleChannel
|
||||
self:StartBar(IceCastBar.Actions.Channel)
|
||||
return
|
||||
if UnitChannelInfo then
|
||||
local channel = UnitChannelInfo(self.unit)
|
||||
notInterruptible = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 8 or 7, UnitChannelInfo(self.unit))
|
||||
if channel then
|
||||
self.notInterruptible = notInterruptibleChannel
|
||||
self:StartBar(IceCastBar.Actions.Channel)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
self:StopBar()
|
||||
@ -177,15 +180,18 @@ function TargetCast.prototype:GetOptions()
|
||||
end
|
||||
|
||||
function TargetCast.prototype:StartBar(action, message)
|
||||
local spell = UnitCastingInfo(self.unit)
|
||||
local notInterruptible = select(IceHUD.WowVer < 80000 and 9 or 8, UnitCastingInfo(self.unit))
|
||||
if not spell then
|
||||
local spell, notInterruptible
|
||||
if UnitCastingInfo 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)
|
||||
notInterruptible = select(IceHUD.WowVer < 80000 and 8 or 7, UnitChannelInfo(self.unit))
|
||||
end
|
||||
|
||||
if not spell then
|
||||
return
|
||||
if not spell then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
self.notInterruptible = notInterruptible
|
||||
@ -196,5 +202,8 @@ end
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
-- Fulzamoth 2019-09-27 : load in Classic if LibClassicCasterino exists
|
||||
-- Load us up
|
||||
IceHUD.TargetCast = TargetCast:new()
|
||||
if not IceHUD.WowClassic or LibClassicCasterino then
|
||||
IceHUD.TargetCast = TargetCast:new()
|
||||
end
|
||||
|
@ -842,21 +842,46 @@ function IceTargetHealth.prototype:Update(unit)
|
||||
|
||||
self:UpdateBar(self.healthPercentage, self.color)
|
||||
|
||||
if not IceHUD.IceCore:ShouldUseDogTags() and self.frame:IsVisible() then
|
||||
self:SetBottomText1(math.floor(self.healthPercentage * 100))
|
||||
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
|
||||
self.health = self:Round(self.health)
|
||||
self.maxHealth = self:Round(self.maxHealth)
|
||||
end
|
||||
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 (self.maxHealth ~= 100) then
|
||||
self:SetBottomText2(self:GetFormattedText(self.health, self.maxHealth), self.color)
|
||||
else
|
||||
self:SetBottomText2()
|
||||
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
|
||||
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
|
||||
end
|
||||
|
||||
|
||||
self:CheckPvP()
|
||||
self:CheckPartyRole()
|
||||
self:SetIconAlpha()
|
||||
|
@ -12,6 +12,10 @@ 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
|
||||
@ -1410,10 +1414,27 @@ 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.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 ""))
|
||||
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
|
||||
local isFromMe = (unitCaster == "player")
|
||||
|
||||
|
@ -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), color)
|
||||
self:SetBottomText2(self:GetFormattedText(self.mana, self.maxMana), self.color)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -4,12 +4,6 @@ TargetTargetCast.prototype.scheduledEvent = nil
|
||||
|
||||
local SelfDisplayModeOptions = {"Hide", "Normal"}
|
||||
|
||||
local UnitCastingInfo, UnitChannelInfo = UnitCastingInfo, UnitChannelInfo
|
||||
if IceHUD.WowClassic then
|
||||
UnitCastingInfo = CastingInfo
|
||||
UnitChannelInfo = ChannelInfo
|
||||
end
|
||||
|
||||
-- Constructor --
|
||||
function TargetTargetCast.prototype:init()
|
||||
TargetTargetCast.super.prototype.init(self, "TargetTargetCast")
|
||||
@ -64,16 +58,20 @@ function TargetTargetCast.prototype:UpdateTargetTarget()
|
||||
return
|
||||
end
|
||||
|
||||
local spell = UnitCastingInfo(self.unit)
|
||||
if (spell) then
|
||||
self:StartBar(IceCastBar.Actions.Cast)
|
||||
return
|
||||
if UnitCastingInfo then
|
||||
local spell = UnitCastingInfo(self.unit)
|
||||
if spell then
|
||||
self:StartBar(IceCastBar.Actions.Cast)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local channel = UnitChannelInfo(self.unit)
|
||||
if (channel) then
|
||||
self:StartBar(IceCastBar.Actions.Channel)
|
||||
return
|
||||
if UnitChannelInfo then
|
||||
local channel = UnitChannelInfo(self.unit)
|
||||
if channel then
|
||||
self:StartBar(IceCastBar.Actions.Channel)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
self:StopBar()
|
||||
@ -150,4 +148,6 @@ end
|
||||
|
||||
|
||||
-- Load us up
|
||||
IceHUD.TargetTargetCast = TargetTargetCast:new()
|
||||
if not IceHUD.WowClassic then
|
||||
IceHUD.TargetTargetCast = TargetTargetCast:new()
|
||||
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", "ResetTotemAvailability");
|
||||
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld");
|
||||
|
||||
if self.moduleSettings.hideBlizz then
|
||||
self:HideBlizz()
|
||||
@ -230,6 +230,11 @@ 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)
|
||||
@ -237,7 +242,7 @@ 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 then
|
||||
if not totem or tonumber(totem) ~= totem or totem < 1 or totem > self.numTotems or not GetTotemInfo then
|
||||
return
|
||||
end
|
||||
local thisTotemName = self.totemNames[TOTEM_PRIORITIES[totem]]
|
||||
@ -331,8 +336,7 @@ function Totems.prototype:CheckCombat()
|
||||
end
|
||||
|
||||
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 then
|
||||
if not name or not GetTotemInfo then
|
||||
return
|
||||
end
|
||||
local haveTotem, name, startTime, duration, icon = GetTotemInfo(i)
|
||||
|
@ -77,5 +77,8 @@ 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.
|
||||
|
||||
|
||||
See [here](https://www.wowace.com/projects/ice-hud/issues/113) for a user-created guide to creating new IceHUD textures.
|
||||
|
Reference in New Issue
Block a user