Compare commits

...

38 Commits

Author SHA1 Message Date
924bd4a6ef Update TOC to latest 2020-11-29 12:06:51 -06:00
0f753448d7 Add config setting to control showing anima-charged combo points 2020-11-28 23:00:24 -06:00
891ddc230c Update temp short changelog 2020-11-28 22:50:25 -06:00
06353d4974 Add support for Anima-charged combo points
Requested by Curseforge ticket 291
2020-11-28 20:37:12 -06:00
d44e62bee4 Reformat changelogs
This allows for a nicer release formatting, assuming I keep up with it.
2020-10-18 15:17:25 -05:00
8fe1ef75b7 Revert "Revert "Show "development" as addon version for non-packaged builds""
This reverts commit 087c64ee6a. Now that the community packager is being used, this should work fine.
2020-10-18 15:06:12 -05:00
702aa5bff6 Allow nolib versions to be created 2020-10-18 15:05:43 -05:00
d6e1fd707a Remove 9.0 dev note 2020-10-18 15:05:35 -05:00
88d7dd3982 Fix Options TOC to work with Classic 2020-10-18 09:11:38 -05:00
f495bb15be Change tabs to spaces to try and fix the community packager 2020-10-18 09:04:38 -05:00
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
35 changed files with 606 additions and 149 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>
rokiyo <rokiyo@example.com> Rokiyo <Rokiyo@example.com>
Parnic <parnic@parnic.com> Chris Pickett <chris@perniciousgames.com>

View File

@ -65,4 +65,6 @@ tools-used:
ignore:
- readme.md
manual-changelog: changelog.txt
manual-changelog: this_version.md
enable-nolib-creation: yes

View File

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

View File

@ -27,12 +27,14 @@ end
-- 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
@ -448,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

View File

@ -69,7 +69,7 @@ function IceElement.prototype:Create(parent)
self.parent = parent
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")
end
self:CreateFrame()

View File

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

View File

@ -1,15 +1,25 @@
## Interface: 80200
#@retail@
## Interface: 90002
#@end-retail@
#@non-retail@
# ## Interface: 11305
#@end-non-retail@
## Author: Parnic, originally created by Iceroth
## Name: IceHUD
## Title: IceHUD |cff7fff7f-Ace3-|r
## Notes: Another HUD addon
## Version: @project-version@
#@debug@
## Version: development
#@end-debug@
#@non-debug@
# ## Version: @project-version@
#@end-non-debug@
## SavedVariables: IceCoreDB
## OptionalDeps: Ace3, LibSharedMedia-3.0, LibDogTag-3.0, LibDogTag-Unit-3.0, LibRangeCheck-2.0, LibDualSpec-1.0, LibDBIcon-1.0, AceGUI-3.0-SharedMediaWidgets
## X-Category: HUDs
## X-Website: https://www.wowace.com/projects/ice-hud
## X-Curse-Project-ID: 5394
## X-WoWI-ID: 8149
## X-Compatible-With: 11302
#@no-lib-strip@
# Libraries

View File

@ -1,4 +1,9 @@
## Interface: 80200
#@retail@
## Interface: 90002
#@end-retail@
#@non-retail@
# ## Interface: 11305
#@end-non-retail@
## Title: IceHUD |cff7fff7f-Options-|r
## Author: Parnic
## Version: @project-version@

View File

@ -86,7 +86,10 @@ This is a side effect of the animation API that I'm co-opting to force a rotatio
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. IceHUD doesn't support the type of inaccurate guessing at combat log details that would be required to get a semi-useful target castbar.]]
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

@ -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 --
@ -170,7 +171,7 @@ end
-- Creates the low amount warning frame
function IceUnitBar.prototype:CreateFlashFrame()
if not (self.flashFrame) then
self.flashFrame = CreateFrame("Frame", nil, self.frame)
self.flashFrame = CreateFrame("Frame", "IceHUD_"..self.elementName.."_Flash", self.frame)
end
self.flashFrame:SetFrameStrata("BACKGROUND")
@ -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)

File diff suppressed because it is too large Load Diff

View File

@ -398,7 +398,7 @@ end
function CastBar.prototype:CreateLagBar()
if self.lagBar == nil then
self.lagBar = self:BarFactory(self.lagBar, "LOW", "OVERLAY")
self.lagBar = self:BarFactory(self.lagBar, "LOW", "OVERLAY", "Lag")
end
local r, g, b = self:GetColor("CastLag")

View File

@ -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

View File

@ -12,12 +12,20 @@ if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
end
local GetUnitChargedPowerPoints = GetUnitChargedPowerPoints
if not GetUnitChargedPowerPoints then
GetUnitChargedPowerPoints = function()
return nil
end
end
-- Constructor --
function ComboPoints.prototype:init()
ComboPoints.super.prototype.init(self, "ComboPoints")
self:SetDefaultColor("ComboPoints", 1, 1, 0)
self:SetDefaultColor("AnticipationPoints", 1, 0, 1)
self:SetDefaultColor("KyrianAnimaComboPoint", 0.3137254901960784, 0.3725490196078432, 1)
self.scalingEnabled = true
end
@ -215,8 +223,29 @@ function ComboPoints.prototype:GetOptions()
disabled = function()
return not self.moduleSettings.enabled
end,
order = 35
}
if IceHUD.WowVer >= 90000 then
opts["bShowAnimaCharged"] = {
type = 'toggle',
width = 'double',
name = L["Show Anima-charged points"],
desc = L["Whether or not to color an anima-charged combo point a separate color. Set the KyrianAnimaComboPoint color to the color you would like it to be."],
get = function()
return self.moduleSettings.bShowAnimaCharged
end,
set = function(info, v)
self.moduleSettings.bShowAnimaCharged = v
self:UpdateChargedComboPoints()
end,
disabled = function()
return not self.moduleSettings.enabled
end,
order = 36
}
end
return opts
end
@ -235,6 +264,7 @@ function ComboPoints.prototype:GetDefaultSettings()
defaults["comboGap"] = 0
defaults["showAnticipation"] = true
defaults["bShowWithNoTarget"] = true
defaults["bShowAnimaCharged"] = true
return defaults
end
@ -274,11 +304,16 @@ function ComboPoints.prototype:Enable(core)
self:RegisterEvent("PLAYER_COMBO_POINTS", "UpdateComboPoints")
end
if IceHUD.WowVer >= 90000 then
self:RegisterEvent("UNIT_POWER_POINT_CHARGE", "UpdateChargedComboPoints")
end
if self.moduleSettings.comboMode == "Graphical" then
self.moduleSettings.comboMode = "Graphical Bar"
end
self:CreateComboFrame(true)
self:UpdateChargedComboPoints()
end
function ComboPoints.prototype:UpdateMaxComboPoints(event, unit, powerType)
@ -291,6 +326,13 @@ function ComboPoints.prototype:UpdateMaxComboPoints(event, unit, powerType)
end
end
function ComboPoints.prototype:UpdateChargedComboPoints()
local chargedPowerPoints = GetUnitChargedPowerPoints("player")
self.chargedPowerPointIndex = chargedPowerPoints and chargedPowerPoints[1]
self:CreateComboFrame()
self:UpdateComboPoints()
end
-- 'Protected' methods --------------------------------------------------------
-- OVERRIDE
@ -399,7 +441,12 @@ function ComboPoints.prototype:CreateComboFrame(forceTextureUpdate)
if (self.moduleSettings.gradient) then
g = g - ((1 / maxComboPoints)*i)
end
if i == self.chargedPowerPointIndex and self.moduleSettings.bShowAnimaCharged then
self.frame.graphical[i].texture:SetVertexColor(self:GetColor("KyrianAnimaComboPoint"))
else
self.frame.graphical[i].texture:SetVertexColor(r, g, b)
end
self.frame.graphical[i]:Hide()
end

View File

@ -6,6 +6,13 @@ if IceHUD.WowVer >= 80000 or IceHUD.WowClassic then
SPELL_POWER_COMBO_POINTS = Enum.PowerType.ComboPoints
end
local GetUnitChargedPowerPoints = GetUnitChargedPowerPoints
if not GetUnitChargedPowerPoints then
GetUnitChargedPowerPoints = function()
return nil
end
end
function ComboPointsBar.prototype:init()
ComboPointsBar.super.prototype.init(self, "ComboPointsBar")
@ -57,7 +64,6 @@ end
function ComboPointsBar.prototype:GetDefaultSettings()
local defaults = ComboPointsBar.super.prototype.GetDefaultSettings(self)
defaults.textVisible['lower'] = false
defaults.offset = 8
defaults.enabled = false
defaults.alwaysDisplay = false
@ -83,6 +89,18 @@ function ComboPointsBar.prototype:Enable(core)
else
self:RegisterEvent("PLAYER_COMBO_POINTS", "UpdateComboPoints")
end
if IceHUD.WowVer >= 90000 then
self:RegisterEvent("UNIT_POWER_POINT_CHARGE", "UpdateChargedComboPoints")
end
self:UpdateChargedComboPoints()
end
function ComboPointsBar.prototype:UpdateChargedComboPoints()
local chargedPowerPoints = GetUnitChargedPowerPoints("player")
self.chargedPowerPointIndex = chargedPowerPoints and chargedPowerPoints[1]
self:UpdateComboPoints()
end
function ComboPointsBar.prototype:CreateFrame()
@ -129,6 +147,7 @@ function ComboPointsBar.prototype:UpdateComboPoints(...)
end
self:SetBottomText1(points or "0")
self:SetBottomText2(self.chargedPowerPointIndex)
end
function ComboPointsBar.prototype:Update()

View File

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

View File

@ -107,7 +107,7 @@ function EclipseBar.prototype:CreateFrame()
end
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.solarBar.bar:SetVertexColor(self:GetColor("EclipseSolar", 1))

View File

@ -255,7 +255,7 @@ function GlobalCoolDown.prototype:CreateFrame()
end
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")
if (self.settings.backgroundToggle) then

View File

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

View File

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

View File

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

View File

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

View File

@ -68,7 +68,9 @@ function PlayerHealth.prototype:Enable(core)
PlayerHealth.super.prototype.Enable(self, core)
self:RegisterEvent("UNIT_HEALTH", "UpdateEvent")
if IceHUD.WowVer < 90000 then
self:RegisterEvent("UNIT_HEALTH_FREQUENT", "UpdateEvent")
end
self:RegisterEvent("UNIT_MAXHEALTH", "UpdateEvent")
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
@ -934,7 +936,7 @@ function PlayerHealth.prototype:CreateBackground(redraw)
end
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))
@ -946,7 +948,7 @@ function PlayerHealth.prototype:CreateHealBar()
end
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))

View File

@ -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)

View File

@ -9,6 +9,8 @@ local maxComboPoints = 5
local rtbEndTime = 0
local rtbDuration = 0
local rtbCount = 0
local sixComboPointsTalentID = 19240
local behaviorDependsOnComboPoints = IceHUD.WowVer < 90000
local CurrMaxRtBDuration = 0
local PotentialRtBDuration = 0
@ -33,12 +35,14 @@ function RollTheBones.prototype:init()
self.moduleSettings.shouldAnimate = false
self:SetDefaultColor("RollTheBones", 1, 0.6, 0.2)
if behaviorDependsOnComboPoints then
self:SetDefaultColor("RollTheBones2", 0.75, 1, 0.2)
self:SetDefaultColor("RollTheBones3", 0.4, 1, 0.2)
self:SetDefaultColor("RollTheBones4", 0.4, 1, 0.2)
self:SetDefaultColor("RollTheBones5", 0.1, 1, 0.7)
self:SetDefaultColor("RollTheBones6", 0.1, 1, 0.7)
self:SetDefaultColor("RollTheBonesPotential", 1, 1, 1)
end
self.bTreatEmptyAsFull = true
end
@ -50,7 +54,10 @@ function RollTheBones.prototype:Enable(core)
RollTheBones.super.prototype.Enable(self, core)
self:RegisterEvent("UNIT_AURA", "UpdateRollTheBones")
if behaviorDependsOnComboPoints then
self:RegisterEvent(IceHUD.UnitPowerEvent, "ComboPointsChanged")
end
if not self.moduleSettings.alwaysFullAlpha then
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"].hidden = false
if behaviorDependsOnComboPoints then
opts["showAsPercentOfMax"] =
{
type = 'toggle',
@ -142,6 +150,24 @@ function RollTheBones.prototype:GetOptions()
end
}
opts["bUseMultipleBuffColors"] =
{
type = 'toggle',
name = L["Use multiple buff colors"],
desc = L["If this is checked, then the bar uses different colors depending on how many RtB buffs you have"],
get = function()
return self.moduleSettings.bUseMultipleBuffColors
end,
set = function(info, v)
self.moduleSettings.bUseMultipleBuffColors = v
self:Redraw()
end,
disabled = function()
return not self.moduleSettings.enabled
end,
}
end
opts["bShowWithNoTarget"] =
{
type = 'toggle',
@ -159,23 +185,6 @@ function RollTheBones.prototype:GetOptions()
end,
}
opts["bUseMultipleBuffColors"] =
{
type = 'toggle',
name = L["Use multiple buff colors"],
desc = L["If this is checked, then the bar uses different colors depending on how many RtB buffs you have"],
get = function()
return self.moduleSettings.bUseMultipleBuffColors
end,
set = function(info, v)
self.moduleSettings.bUseMultipleBuffColors = v
self:Redraw()
end,
disabled = function()
return not self.moduleSettings.enabled
end,
}
return opts
end
@ -186,7 +195,11 @@ function RollTheBones.prototype:CreateFrame()
end
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?
self.CurrScale = 0
@ -204,7 +217,9 @@ end
function RollTheBones.prototype:RotateHorizontal()
RollTheBones.super.prototype.RotateHorizontal(self)
if self.durationFrame then
self:RotateFrame(self.durationFrame)
end
end
function RollTheBones.prototype:ResetRotation()
@ -308,7 +323,7 @@ function RollTheBones.prototype:UpdateRollTheBones(event, unit, fromUpdate)
if not remaining then
remaining = rtbEndTime - now
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))
else
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
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 ""))
end
end
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
else
return "RollTheBones"
@ -352,13 +367,17 @@ function RollTheBones.prototype:TargetChanged()
end
function RollTheBones.prototype:UpdateDurationBar(event, unit)
if not self.durationFrame then
return
end
if unit and unit ~= self.unit then
return
end
local points = RTBGetComboPoints(self.unit)
-- check for Deeper Stratagem
local _, _, _, DeeperStratagem = GetTalentInfo(3, 1, 1)
local _, _, _, DeeperStratagem = GetTalentInfoByID(sixComboPointsTalentID, GetActiveSpecGroup())
if DeeperStratagem then
-- 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
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)

View File

@ -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

View File

@ -20,6 +20,7 @@ local impSndBonusPerRank = 0.25
local maxComboPoints = 5
local sndEndTime = 0
local sndDuration = 0
local sixComboPointsTalentID = 19240
local CurrMaxSnDDuration = 0
local PotentialSnDDuration = 0
@ -66,6 +67,11 @@ function SliceAndDice.prototype:Enable(core)
self:RegisterEvent(IceHUD.UnitPowerEvent, "ComboPointsChanged")
end
if IceHUD.WowVer >= 70000 then
self:RegisterEvent("PLAYER_TALENT_UPDATE", "CheckMaxComboPoints")
self:CheckMaxComboPoints()
end
if not self.moduleSettings.alwaysFullAlpha then
self:Show(false)
else
@ -75,6 +81,11 @@ function SliceAndDice.prototype:Enable(core)
self:SetBottomText1("")
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)
SliceAndDice.super.prototype.Disable(self, core)
end
@ -182,7 +193,7 @@ function SliceAndDice.prototype:CreateFrame()
end
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?
self.CurrScale = 0
@ -270,6 +281,10 @@ local function HasSpell(id)
end
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
-- 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

View File

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

View File

@ -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

View File

@ -23,6 +23,13 @@ if IceHUD.WowVer >= 50000 or IceHUD.WowClassic then
MAX_NUM_RAID_MEMBERS = MAX_RAID_MEMBERS
end
local UnitGroupRolesAssigned = UnitGroupRolesAssigned
if not UnitGroupRolesAssigned then
UnitGroupRolesAssigned = function()
return "NONE"
end
end
local MAX_NUM_RAID_MEMBERS = 40
local MAX_NUM_PARTY_MEMBERS = 5
@ -224,7 +231,7 @@ end
-- create the aggro range indicator bar
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")
if (self.settings.backgroundToggle) then
@ -236,7 +243,7 @@ function IceThreat.prototype:CreateAggroBar()
end
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))

View File

@ -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)

View File

@ -1,11 +1,13 @@
# IceHUD
IceHUD is a highly configurable and customizable HUD addon in the spirit of DHUD, MetaHUD, and others designed to keep your focus in the center of the screen where your character is.
## **What it is**
### **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
* 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.
## **Short feature list**
### **Short feature list**
* Lots of different bar shapes and patterns to make the HUD look like you want
* Class-specific modules such as combo point counters, Slice'n'dice timers, druid mana trackers, Eclipse bar, Holy Power monitoring, Warlock shard tracking, and more
* Target-of-target bars, Crowd Control timers, Range Finders, Threat meters, and plenty of other helpful modules
@ -15,13 +17,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!
* Highly configurable (can totally re-arrange all bars, change text display, etc.)
## **Slash commands**
### **Slash commands**
* /icehud - opens the configuration UI to tweak any setting
* /icehudCL - command-line access to tweak IceHUD settings (for use with macros, etc.)
# **Frequently Asked Questions**
## **Frequently Asked Questions**
1. **How do I hide the default Blizzard player, target unit frames and party unit frames?**
Type /icehud, expand the "Module Settings" section, click "Player Health" or "Target Health," and check "Hide Blizzard Frame" and/or "Hide Blizzard Party Frame". (NOTE: before version 1.3.7, the player/target unitframes were hidden by default. Follow the same steps to enable them if desired)
@ -80,5 +81,7 @@ IceHUD is a highly configurable and customizable HUD addon in the spirit of DHUD
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.

6
this_version.md Normal file
View File

@ -0,0 +1,6 @@
# Changelog
vNext:
- Added support for Anima-charged combo points for Kyrian covenant (ticket #291).
- Updated TOC for 9.0.2