mirror of
https://github.com/parnic/ice-hud.git
synced 2025-06-16 22:51:53 -05:00
Compare commits
23 Commits
1.12.13
...
v1.13.1-al
Author | SHA1 | Date | |
---|---|---|---|
891ddc230c
|
|||
06353d4974
|
|||
d44e62bee4
|
|||
8fe1ef75b7
|
|||
702aa5bff6
|
|||
d6e1fd707a
|
|||
88d7dd3982
|
|||
f495bb15be
|
|||
087c64ee6a
|
|||
077f381adb
|
|||
a5be2996da
|
|||
22f473b54d
|
|||
e7f95cbcb6
|
|||
5c19d7f89c
|
|||
f01d6495f8
|
|||
34ecd95e4f
|
|||
564919e0c6
|
|||
a18144aec0
|
|||
53bf76c58a
|
|||
1140d2e8c5
|
|||
7d562dfb35
|
|||
7c2fe06fa8
|
|||
819cc64aca
|
45
.github/workflows/release.yml
vendored
Normal file
45
.github/workflows/release.yml
vendored
Normal 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
|
1
.mailmap
1
.mailmap
@ -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>
|
||||
|
4
.pkgmeta
4
.pkgmeta
@ -65,4 +65,6 @@ tools-used:
|
||||
ignore:
|
||||
- readme.md
|
||||
|
||||
manual-changelog: changelog.txt
|
||||
manual-changelog: this_version.md
|
||||
|
||||
enable-nolib-creation: yes
|
||||
|
@ -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)
|
||||
|
@ -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()
|
||||
|
13
IceHUD.lua
13
IceHUD.lua
@ -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
|
||||
|
||||
|
16
IceHUD.toc
16
IceHUD.toc
@ -1,15 +1,25 @@
|
||||
## Interface: 80300
|
||||
#@retail@
|
||||
## Interface: 90001
|
||||
#@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
|
||||
|
@ -1,4 +1,9 @@
|
||||
## Interface: 80300
|
||||
#@retail@
|
||||
## Interface: 90001
|
||||
#@end-retail@
|
||||
#@non-retail@
|
||||
# ## Interface: 11305
|
||||
#@end-non-retail@
|
||||
## Title: IceHUD |cff7fff7f-Options-|r
|
||||
## Author: Parnic
|
||||
## Version: @project-version@
|
||||
|
@ -171,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")
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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")
|
||||
|
@ -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
|
||||
|
||||
@ -274,11 +282,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 +304,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 +419,12 @@ function ComboPoints.prototype:CreateComboFrame(forceTextureUpdate)
|
||||
if (self.moduleSettings.gradient) then
|
||||
g = g - ((1 / maxComboPoints)*i)
|
||||
end
|
||||
|
||||
if i == self.chargedPowerPointIndex 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
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -242,6 +242,7 @@ function PetMana.prototype:ExitingVehicle(event, unit)
|
||||
end
|
||||
|
||||
function PetMana.prototype:EnteringWorld()
|
||||
self:TargetChanged()
|
||||
self:Update(self.unit)
|
||||
|
||||
if UnitHasVehicleUI then
|
||||
|
@ -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))
|
||||
|
||||
|
@ -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,8 +217,10 @@ end
|
||||
function RollTheBones.prototype:RotateHorizontal()
|
||||
RollTheBones.super.prototype.RotateHorizontal(self)
|
||||
|
||||
if self.durationFrame then
|
||||
self:RotateFrame(self.durationFrame)
|
||||
end
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:ResetRotation()
|
||||
RollTheBones.super.prototype.ResetRotation(self)
|
||||
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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))
|
||||
|
||||
|
15
readme.md
15
readme.md
@ -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.
|
||||
|
5
this_version.md
Normal file
5
this_version.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Changelog
|
||||
|
||||
vNext:
|
||||
|
||||
- Added support for Anima-charged combo points for Kyrian covenant (ticket #291).
|
Reference in New Issue
Block a user