mirror of
https://github.com/parnic/ice-hud.git
synced 2025-06-16 14:50:13 -05:00
Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
f74233dcfa | |||
0c729d77e9 | |||
7ec918ecb6 | |||
29dc1b8955 | |||
e36b87a407 | |||
880e2e3278 | |||
a5de40f087 | |||
6090814d4e | |||
c78f618149 | |||
6133a59ef3 | |||
a201aa5149 |
@ -272,7 +272,7 @@ end
|
||||
|
||||
function IceCore.prototype:RedirectRemovedModules()
|
||||
local _, class = UnitClass("player")
|
||||
if class == "WARRIOR" and self.settings.modules["SunderCount"] and IceHUD.WowVer < 60000 then
|
||||
if class == "WARRIOR" and self.settings.modules["SunderCount"] and GetSpellInfo(SUNDER_SPELL_ID) and IceHUD.WowVer < 60000 then
|
||||
if self.settings.modules["SunderCount"].enabled or self.settings.modules["SunderCount"].enabled == nil then
|
||||
local bFound = false
|
||||
|
||||
@ -309,7 +309,7 @@ function IceCore.prototype:RedirectRemovedModules()
|
||||
self.settings.modules["SunderCount"] = nil
|
||||
end
|
||||
|
||||
if class == "DRUID" and self.settings.modules["LacerateCount"] then
|
||||
if class == "DRUID" and self.settings.modules["LacerateCount"] and GetSpellInfo(LACERATE_SPELL_ID) then
|
||||
if self.settings.modules["LacerateCount"].enabled or self.settings.modules["LacerateCount"].enabled == nil then
|
||||
local bFound = false
|
||||
for k,v in pairs(self.elements) do
|
||||
@ -346,7 +346,7 @@ function IceCore.prototype:RedirectRemovedModules()
|
||||
self.settings.modules["LacerateCount"] = nil
|
||||
end
|
||||
|
||||
if class == "SHAMAN" and self.settings.modules["MaelstromCount"] then
|
||||
if class == "SHAMAN" and self.settings.modules["MaelstromCount"] and GetSpellInfo(MAELSTROM_SPELL_ID) then
|
||||
if self.settings.modules["MaelstromCount"].enabled or self.settings.modules["MaelstromCount"].enabled == nil then
|
||||
local bFound = false
|
||||
for k,v in pairs(self.elements) do
|
||||
|
@ -89,6 +89,7 @@ modules\FocusAbsorb.lua
|
||||
modules\Stagger.lua
|
||||
modules\PlayerAltMana.lua
|
||||
modules\ArcaneCharges.lua
|
||||
modules\RollTheBones.lua
|
||||
|
||||
#@do-not-package@
|
||||
IceHUD_Options\Options.lua
|
||||
|
@ -65,22 +65,22 @@ Expand "|cffffdc42Module Settings|r", expand PlayerHealth (or TargetHealth for t
|
||||
Expand "|cffffdc42Module Settings|r", expand PlayerInfo (or TargetInfo for targets), select Buff Settings or Debuff Settings, and un-check "show buffs" (or "show debuffs").
|
||||
|
||||
|cff9999ff12. How do I turn off these big huge bars that pulse whenever one of my abilities procs?|r
|
||||
This isn't |cff9999ffIceHUD|r - it's Blizzard's new Spell Alerts they added in 4.0.1. Interface options => Combat => "Show Spell Alerts" to turn them off or search for a mod to tweak their positioning/size/etc.
|
||||
This isn't |cff9999ffIceHUD|r - it's Blizzard's Spell Alerts they added in 4.0.1. Interface options => Combat => "Spell Alert Opacity" to turn them off or search for a mod to tweak their positioning/size/etc.
|
||||
|
||||
|cff9999ff13. I don't like where some of the bars are placed. How do I put the health/mana on the left/right?|r
|
||||
Expand "|cffffdc42Module Settings|r", expand whatever module you want to move (e.g. PlayerHealth, PlayerMana), and adjust the "Side" and "Offset" settings. "Side" controls whether it's on the left or the right and "Offset" controls how far from center it is.
|
||||
|
||||
|cff9999ff14. Which module displays Monk Chi power?|r
|
||||
This module is called HarmonyPower. Harmony was the original name for Chi back when 5.0 was in beta, so I used Blizzard's name for it while I was developing for Cataclysm. I feel like it's too late to change now that many people are familiar with the Harmony name.
|
||||
This module is called |cffdcff42HarmonyPower|r. Harmony was the original name for Chi back when 5.0 was in beta, so I used Blizzard's name for it while I was developing for Cataclysm. I feel like it's too late to change now that many people are familiar with the Harmony name.
|
||||
|
||||
|cff9999ff15. How do I add commas/periods into big numbers like health?|r
|
||||
If you have DogTags enabled, you can open the Text Settings for the module in question and add SeparateDigits() around the tag you're trying to split up. To display Health/MaxHealth with commas, use: [(SeparateDigits(HP):HPColor "/" SeparateDigits(MaxHP):HPColor):Bracket]. To use periods instead of commas, use: [(SeparateDigits(HP, "."):HPColor "/" SeparateDigits(MaxHP, "."):HPColor):Bracket]. Use the /dog help menu to build your own similar tags for Mana, etc.
|
||||
If you have |cff42ffffDogTags|r enabled, you can open the Text Settings for the module in question and add SeparateDigits() around the tag you're trying to split up. To display Health/MaxHealth with commas, use: [(SeparateDigits(HP):HPColor "/" SeparateDigits(MaxHP):HPColor):Bracket]. To use periods instead of commas, use: [(SeparateDigits(HP, "."):HPColor "/" SeparateDigits(MaxHP, "."):HPColor):Bracket]. Use the /dog help menu to build your own similar tags for Mana, etc.
|
||||
|
||||
|cff9999ff16. The countdown timers on buffs and debuffs completely obscure the icon. How do I disable the timer text?|r
|
||||
IceHUD is not responsible for this countdown text and cannot control it. The 6.0 patch added an option in the game client to display counts on top of cooldowns. Look at the Action Bars menu under the game's Interface options. You can turn the text on or off there. Mods like OmniCC or CooldownCount will generally give you the same feature but allow you to control when, where, and how the text shows up.
|
||||
|cff9999ffIceHUD|r is not responsible for this countdown text and cannot control it. The 6.0 patch added an option in the game client to display counts on top of cooldowns. Look at the Action Bars menu under the game's Interface options. You can turn the text on or off there. Mods like |cff42ffffOmniCC|r or |cff42ffffCooldownCount|r will generally give you the same feature but allow you to control when, where, and how the text shows up.
|
||||
|
||||
|cff9999ff17. When I rotate some modules 90 degrees, such as the castbar, the bar appears to wiggle up and down as it fills or empties. How do I fix this?|r
|
||||
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. IceHUD 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. Quartz is a good castbar replacement that you can use and disable IceHUD's built-in castbar, for example.
|
||||
This is a side effect of the animation API that I'm co-opting to force a rotation without having to provide duplicates of every bar texture in the mod. Any bar moving sufficiently quickly and updating rapidly will cause this. |cff9999ffIceHUD|r is intended to be a vertically-oriented mod, so the rotation feature is there for people who are willing to accept the side effects that come with it. My suggestion is to use one of the many horizontally-oriented bar mods out there if you're wanting horizontal bars. |cff42ffffQuartz|r is a good castbar replacement that you can use and disable |cff9999ffIceHUD|r's built-in castbar, for example.
|
||||
|
||||
|cff9999ff18. How do I get rid of the bars that showed up beneath the player in the 7.0 patch?|r
|
||||
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.]]
|
||||
|
@ -684,11 +684,6 @@ function IceClassPowerCounter.prototype:SetDisplayMode()
|
||||
for i=1, self.numRunes do
|
||||
self:SetupRuneTexture(i)
|
||||
self.frame.graphical[i]:Show()
|
||||
if self.moduleSettings.inactiveDisplayMode == "Darkened" then
|
||||
self.frame.graphical[i].runebg:Show()
|
||||
else
|
||||
self.frame.graphical[i].runebg:Hide()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -723,8 +718,6 @@ function IceClassPowerCounter.prototype:CreateRune(i)
|
||||
|
||||
self.frame.graphical[i].rune = self.frame.graphical[i]:CreateTexture(nil, "ARTWORK")
|
||||
self.frame.graphical[i].rune:SetVertexColor(0, 0, 0)
|
||||
self.frame.graphical[i].runebg = self.frame.graphical[i]:CreateTexture(nil, "BACKGROUND")
|
||||
self.frame.graphical[i].runebg:SetVertexColor(0, 0, 0)
|
||||
self:SetupRuneTexture(i)
|
||||
|
||||
self.frame.graphical[i].shine = self.frame.graphical[i]:CreateTexture(nil, "OVERLAY")
|
||||
@ -749,14 +742,10 @@ function IceClassPowerCounter.prototype:CreateRune(i)
|
||||
self.frame.graphical[i]:SetHeight(self.runeHeight)
|
||||
self.frame.graphical[i].rune:SetWidth(self.runeWidth)
|
||||
self.frame.graphical[i].rune:SetHeight(self.runeHeight)
|
||||
self.frame.graphical[i].runebg:SetWidth(self.runeWidth)
|
||||
self.frame.graphical[i].runebg:SetHeight(self.runeHeight)
|
||||
if self.currentGrowMode == self.growModes["width"] then
|
||||
self.frame.graphical[i].rune:SetPoint("LEFT", self.frame.graphical[i], "LEFT")
|
||||
self.frame.graphical[i].runebg:SetPoint("LEFT", self.frame.graphical[i], "LEFT")
|
||||
else
|
||||
self.frame.graphical[i].rune:SetPoint("BOTTOM", self.frame.graphical[i], "BOTTOM")
|
||||
self.frame.graphical[i].runebg:SetPoint("BOTTOM", self.frame.graphical[i], "BOTTOM")
|
||||
end
|
||||
end
|
||||
|
||||
@ -774,7 +763,6 @@ function IceClassPowerCounter.prototype:SetupRuneTexture(rune)
|
||||
|
||||
-- make sure any texture aside from the special one is square and has the proper coordinates
|
||||
self.frame.graphical[rune].rune:SetTexCoord(a, b, c, d)
|
||||
self.frame.graphical[rune].runebg:SetTexCoord(a, b, c, d)
|
||||
self.frame.graphical[rune]:SetWidth(width)
|
||||
self.frame:SetWidth(width*self.numRunes)
|
||||
local runeAdjust = rune - (self.numRunes / 2) - 0.5
|
||||
@ -784,8 +772,8 @@ function IceClassPowerCounter.prototype:SetupRuneTexture(rune)
|
||||
self.frame.graphical[rune]:SetPoint("CENTER", 0, -1 * (runeAdjust * (self.runeHeight-5) + runeAdjust + (runeAdjust * self.moduleSettings.runeGap)))
|
||||
end
|
||||
|
||||
local tex = self:GetRuneTexture(rune)
|
||||
if self:GetRuneMode() == "Graphical" then
|
||||
local tex = self:GetRuneTexture(rune)
|
||||
if tex then
|
||||
self.frame.graphical[rune].rune:SetTexture(tex)
|
||||
else
|
||||
@ -800,11 +788,6 @@ function IceClassPowerCounter.prototype:SetupRuneTexture(rune)
|
||||
elseif self:GetRuneMode() == "Graphical Clean Circle" then
|
||||
self.frame.graphical[rune].rune:SetTexture(IceElement.TexturePath .. "ComboCleanCurves")
|
||||
end
|
||||
if tex then
|
||||
self.frame.graphical[rune].runebg:SetTexture(tex)
|
||||
else
|
||||
self.frame.graphical[rune].runebg:SetAtlas(self.frame.graphical[rune].rune:GetAtlas())
|
||||
end
|
||||
end
|
||||
|
||||
function IceClassPowerCounter.prototype:GetAlphaAdd()
|
||||
|
@ -17,11 +17,5 @@ function PlayerAbsorb.prototype:GetDefaultSettings()
|
||||
return settings
|
||||
end
|
||||
|
||||
function PlayerAbsorb.prototype:MyRegisterCustomEvents()
|
||||
end
|
||||
|
||||
function PlayerAbsorb.prototype:MyUnregisterCustomEvents()
|
||||
end
|
||||
|
||||
-- Load us up
|
||||
IceHUD.PlayerAbsorb = PlayerAbsorb:new()
|
||||
|
@ -19,6 +19,8 @@ function PlayerMana.prototype:init()
|
||||
if IceHUD.WowVer >= 70000 then
|
||||
self:SetDefaultColor("PlayerInsanity", 150, 50, 255)
|
||||
self:SetDefaultColor("PlayerFury", 255, 50, 255)
|
||||
self:SetDefaultColor("PlayerMaelstrom", 62, 54, 152)
|
||||
self:SetDefaultColor("PlayerPain", 255, 50, 255)
|
||||
end
|
||||
end
|
||||
|
||||
@ -98,6 +100,27 @@ end
|
||||
order = 53
|
||||
}
|
||||
|
||||
opts["scaleManaColorForAll"] = {
|
||||
type = "toggle",
|
||||
name = L["Scale for non-mana users"],
|
||||
desc = L["Uses the 'color bar by mana %' setting/colors even for classes that don't use Mana"],
|
||||
width = 'double',
|
||||
get = function()
|
||||
return self.moduleSettings.scaleManaColorForAll
|
||||
end,
|
||||
set = function(info, value)
|
||||
self.moduleSettings.scaleManaColorForAll = value
|
||||
self:Redraw()
|
||||
end,
|
||||
disabled = function()
|
||||
return not self.moduleSettings.enabled
|
||||
end,
|
||||
hidden = function()
|
||||
return not self.moduleSettings.scaleManaColor
|
||||
end,
|
||||
order = 53.1
|
||||
}
|
||||
|
||||
return opts
|
||||
end
|
||||
|
||||
@ -245,7 +268,7 @@ end
|
||||
function PlayerMana.prototype:TreatEmptyAsFull()
|
||||
return self.manaType == SPELL_POWER_RAGE or self.manaType == SPELL_POWER_RUNIC_POWER
|
||||
or (IceHUD.WowVer >= 70000 and (self.manaType == SPELL_POWER_LUNAR_POWER or self.manaType == SPELL_POWER_INSANITY
|
||||
or self.manaType == SPELL_POWER_FURY))
|
||||
or self.manaType == SPELL_POWER_FURY or self.manaType == SPELL_POWER_PAIN or self.manaType == SPELL_POWER_MAELSTROM))
|
||||
end
|
||||
|
||||
function PlayerMana.prototype:UpdateEvent(event, unit, powertype)
|
||||
@ -280,11 +303,10 @@ function PlayerMana.prototype:Update(unit, powertype)
|
||||
end
|
||||
|
||||
local color = "PlayerMana"
|
||||
if (self.moduleSettings.scaleManaColor) then
|
||||
color = "ScaledManaColor"
|
||||
end
|
||||
if not (self.alive) then
|
||||
color = "Dead"
|
||||
elseif (self.moduleSettings.scaleManaColor and (UnitPowerType(self.unit) == SPELL_POWER_MANA or self.moduleSettings.scaleManaColorForAll)) then
|
||||
color = "ScaledManaColor"
|
||||
else
|
||||
if (self.manaType == SPELL_POWER_RAGE) then
|
||||
color = "PlayerRage"
|
||||
@ -298,6 +320,10 @@ function PlayerMana.prototype:Update(unit, powertype)
|
||||
color = "PlayerInsanity"
|
||||
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_FURY) then
|
||||
color = "PlayerFury"
|
||||
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_MAELSTROM) then
|
||||
color = "PlayerMaelstrom"
|
||||
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_PAIN) then
|
||||
color = "PlayerPain"
|
||||
end
|
||||
end
|
||||
|
||||
|
397
modules/RollTheBones.lua
Normal file
397
modules/RollTheBones.lua
Normal file
@ -0,0 +1,397 @@
|
||||
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
||||
local RollTheBones = IceCore_CreateClass(IceUnitBar)
|
||||
|
||||
local IceHUD = _G.IceHUD
|
||||
|
||||
local baseTime = 12
|
||||
local gapPerComboPoint = 6
|
||||
local maxComboPoints = 5
|
||||
local rtbEndTime = 0
|
||||
local rtbDuration = 0
|
||||
|
||||
local CurrMaxRtBDuration = 0
|
||||
local PotentialRtBDuration = 0
|
||||
|
||||
local RtBBuffs = {199603, 193358, 193357, 193359, 199600, 193356}
|
||||
local RtBSet = {}
|
||||
for _, v in ipairs(RtBBuffs) do
|
||||
RtBSet[v] = true
|
||||
end
|
||||
|
||||
-- Constructor --
|
||||
function RollTheBones.prototype:init()
|
||||
RollTheBones.super.prototype.init(self, "RollTheBones", "player")
|
||||
|
||||
self.moduleSettings = {}
|
||||
self.moduleSettings.desiredLerpTime = 0
|
||||
self.moduleSettings.shouldAnimate = false
|
||||
|
||||
self:SetDefaultColor("RollTheBones", 0.75, 1, 0.2)
|
||||
self:SetDefaultColor("RollTheBonesPotential", 1, 1, 1)
|
||||
|
||||
self.bTreatEmptyAsFull = true
|
||||
end
|
||||
|
||||
-- 'Public' methods -----------------------------------------------------------
|
||||
|
||||
-- OVERRIDE
|
||||
function RollTheBones.prototype:Enable(core)
|
||||
RollTheBones.super.prototype.Enable(self, core)
|
||||
|
||||
self:RegisterEvent("UNIT_AURA", "UpdateRollTheBones")
|
||||
self:RegisterEvent("UNIT_POWER", "ComboPointsChanged")
|
||||
|
||||
if not self.moduleSettings.alwaysFullAlpha then
|
||||
self:Show(false)
|
||||
else
|
||||
self:UpdateRollTheBones()
|
||||
end
|
||||
|
||||
self:SetBottomText1("")
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:Disable(core)
|
||||
RollTheBones.super.prototype.Disable(self, core)
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:ComboPointsChanged(...)
|
||||
if select('#', ...) >= 3 and select(1, ...) == "UNIT_POWER" and select(3, ...) ~= "COMBO_POINTS" then
|
||||
return
|
||||
end
|
||||
|
||||
self:TargetChanged()
|
||||
self:UpdateDurationBar()
|
||||
end
|
||||
|
||||
-- OVERRIDE
|
||||
function RollTheBones.prototype:GetDefaultSettings()
|
||||
local settings = RollTheBones.super.prototype.GetDefaultSettings(self)
|
||||
|
||||
settings["enabled"] = false
|
||||
settings["shouldAnimate"] = false
|
||||
settings["desiredLerpTime"] = nil
|
||||
settings["lowThreshold"] = 0
|
||||
settings["side"] = IceCore.Side.Right
|
||||
settings["offset"] = 6
|
||||
settings["upperText"]="RtB:"
|
||||
settings["showAsPercentOfMax"] = true
|
||||
settings["durationAlpha"] = 0.6
|
||||
settings["usesDogTagStrings"] = false
|
||||
settings["lockLowerFontAlpha"] = false
|
||||
settings["lowerTextString"] = ""
|
||||
settings["lowerTextVisible"] = false
|
||||
settings["hideAnimationSettings"] = true
|
||||
settings["bAllowExpand"] = true
|
||||
settings["bShowWithNoTarget"] = true
|
||||
|
||||
return settings
|
||||
end
|
||||
|
||||
-- OVERRIDE
|
||||
function RollTheBones.prototype:GetOptions()
|
||||
local opts = RollTheBones.super.prototype.GetOptions(self)
|
||||
|
||||
opts["textSettings"].args["upperTextString"]["desc"] = "The text to display under this bar. # will be replaced with the number of Roll the Bones seconds remaining."
|
||||
opts["textSettings"].args["upperTextString"].hidden = false
|
||||
|
||||
opts["showAsPercentOfMax"] =
|
||||
{
|
||||
type = 'toggle',
|
||||
name = L["Show bar as % of maximum"],
|
||||
desc = L["If this is checked, then the RtB buff time shows as a percent of the maximum attainable (taking set bonuses and talents into account). Otherwise, the bar always goes from full to empty when applying RtB no matter the duration."],
|
||||
get = function()
|
||||
return self.moduleSettings.showAsPercentOfMax
|
||||
end,
|
||||
set = function(info, v)
|
||||
self.moduleSettings.showAsPercentOfMax = v
|
||||
end,
|
||||
disabled = function()
|
||||
return not self.moduleSettings.enabled
|
||||
end
|
||||
}
|
||||
|
||||
opts["durationAlpha"] =
|
||||
{
|
||||
type = "range",
|
||||
name = L["Potential RtB time bar alpha"],
|
||||
desc = L["What alpha value to use for the bar that displays how long your RtB will last if you activate it. (This gets multiplied by the bar's current alpha to stay in line with the bar on top of it)"],
|
||||
min = 0,
|
||||
max = 100,
|
||||
step = 5,
|
||||
get = function()
|
||||
return self.moduleSettings.durationAlpha * 100
|
||||
end,
|
||||
set = function(info, v)
|
||||
self.moduleSettings.durationAlpha = v / 100.0
|
||||
self:Redraw()
|
||||
end,
|
||||
disabled = function()
|
||||
return not self.moduleSettings.enabled
|
||||
end
|
||||
}
|
||||
|
||||
opts["bShowWithNoTarget"] =
|
||||
{
|
||||
type = 'toggle',
|
||||
name = L["Show with no target"],
|
||||
desc = L["Whether or not to display when you have no target selected but have combo points available"],
|
||||
get = function()
|
||||
return self.moduleSettings.bShowWithNoTarget
|
||||
end,
|
||||
set = function(info, v)
|
||||
self.moduleSettings.bShowWithNoTarget = v
|
||||
self:ComboPointsChanged()
|
||||
end,
|
||||
disabled = function()
|
||||
return not self.moduleSettings.enabled
|
||||
end,
|
||||
}
|
||||
|
||||
return opts
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:CreateFrame()
|
||||
RollTheBones.super.prototype.CreateFrame(self)
|
||||
|
||||
self:CreateDurationBar()
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:CreateDurationBar()
|
||||
self.durationFrame = self:BarFactory(self.durationFrame, "BACKGROUND","ARTWORK")
|
||||
|
||||
-- Rokiyo: Do we need to call this here?
|
||||
self.CurrScale = 0
|
||||
|
||||
self.durationFrame.bar:SetVertexColor(self:GetColor("RollTheBonesPotential", self.moduleSettings.durationAlpha))
|
||||
self.durationFrame.bar:SetHeight(0)
|
||||
|
||||
self:UpdateBar(1, "undef")
|
||||
|
||||
-- force update the bar...if we're in here, then either the UI was just loaded or the player is jacking with the options.
|
||||
-- either way, make sure the duration bar matches accordingly
|
||||
self:UpdateDurationBar()
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:RotateHorizontal()
|
||||
RollTheBones.super.prototype.RotateHorizontal(self)
|
||||
|
||||
self:RotateFrame(self.durationFrame)
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:ResetRotation()
|
||||
RollTheBones.super.prototype.ResetRotation(self)
|
||||
|
||||
if self.durationFrame and self.durationFrame.anim then
|
||||
self.durationFrame.anim:Stop()
|
||||
end
|
||||
end
|
||||
|
||||
-- 'Protected' methods --------------------------------------------------------
|
||||
|
||||
function RollTheBones.prototype:GetBuffDuration(unitName, ids)
|
||||
local i = 1
|
||||
local buff, rank, texture, count, type, duration, endTime, remaining, spellId
|
||||
buff, _, _, count, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
|
||||
|
||||
while buff do
|
||||
if (spellId and ids[spellId]) then
|
||||
if endTime and not remaining then
|
||||
remaining = endTime - GetTime()
|
||||
end
|
||||
return duration, remaining
|
||||
end
|
||||
|
||||
i = i + 1;
|
||||
|
||||
buff, _, _, count, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
|
||||
|
||||
end
|
||||
|
||||
return nil, nil
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:MyOnUpdate()
|
||||
RollTheBones.super.prototype.MyOnUpdate(self)
|
||||
if self.bUpdateRtb then
|
||||
self:UpdateRollTheBones(nil, self.unit, true)
|
||||
end
|
||||
if self.target or self.moduleSettings.bShowWithNoTarget then
|
||||
self:UpdateDurationBar()
|
||||
end
|
||||
end
|
||||
|
||||
local function RTBGetComboPoints(unit)
|
||||
return UnitPower(unit, SPELL_POWER_COMBO_POINTS)
|
||||
end
|
||||
|
||||
-- use this to figure out if Roll the Bones is available or not. neither IsSpellKnown nor IsPlayerSpell are correct for it
|
||||
-- when SnD is known, but this is.
|
||||
local function HasSpell(id)
|
||||
local spell = GetSpellInfo(id)
|
||||
return spell == GetSpellInfo(spell)
|
||||
end
|
||||
|
||||
local function ShouldHide()
|
||||
return not HasSpell(193316)
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:UpdateRollTheBones(event, unit, fromUpdate)
|
||||
if unit and unit ~= self.unit then
|
||||
return
|
||||
end
|
||||
|
||||
local now = GetTime()
|
||||
local remaining = nil
|
||||
|
||||
if not fromUpdate then
|
||||
rtbDuration, remaining = self:GetBuffDuration(self.unit, RtBSet)
|
||||
|
||||
if not remaining then
|
||||
rtbEndTime = 0
|
||||
else
|
||||
rtbEndTime = remaining + now
|
||||
end
|
||||
end
|
||||
|
||||
if rtbEndTime and rtbEndTime >= now then
|
||||
if not fromUpdate then
|
||||
self.bUpdateRtb = true
|
||||
end
|
||||
|
||||
self:Show(true)
|
||||
if not remaining then
|
||||
remaining = rtbEndTime - now
|
||||
end
|
||||
local denominator = (self.moduleSettings.showAsPercentOfMax and CurrMaxRtBDuration or rtbDuration)
|
||||
self:UpdateBar(denominator ~= 0 and remaining / denominator or 0, "RollTheBones")
|
||||
else
|
||||
self:UpdateBar(0, "RollTheBones")
|
||||
|
||||
if RTBGetComboPoints(self.unit) == 0 or (not UnitExists("target") and not self.moduleSettings.bShowWithNoTarget) or ShouldHide() then
|
||||
if self.bIsVisible then
|
||||
self.bUpdateRtb = nil
|
||||
end
|
||||
|
||||
if not self.moduleSettings.alwaysFullAlpha or ShouldHide() then
|
||||
self:Show(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- somewhat redundant, but we also need to check potential remaining time
|
||||
if (remaining ~= nil) or PotentialRtBDuration > 0 then
|
||||
local potText = " (" .. PotentialRtBDuration .. ")"
|
||||
self:SetBottomText1(self.moduleSettings.upperText .. tostring(floor(remaining or 0)) .. (self.moduleSettings.durationAlpha ~= 0 and potText or ""))
|
||||
end
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:TargetChanged()
|
||||
if self.moduleSettings.bShowWithNoTarget and RTBGetComboPoints(self.unit) > 0 then
|
||||
self.target = true
|
||||
else
|
||||
self.target = UnitExists("target")
|
||||
end
|
||||
self:Update(self.unit)
|
||||
|
||||
self:UpdateDurationBar()
|
||||
self:UpdateRollTheBones()
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:UpdateDurationBar(event, unit)
|
||||
if unit and unit ~= self.unit then
|
||||
return
|
||||
end
|
||||
|
||||
local points = RTBGetComboPoints(self.unit)
|
||||
-- check for Deeper Stratagem
|
||||
local _, _, _, DeeperStratagem = GetTalentInfo(3, 1, 1)
|
||||
|
||||
if DeeperStratagem then
|
||||
-- first, set the cached upper limit of RtB duration
|
||||
CurrMaxRtBDuration = self:GetMaxBuffTime(maxComboPoints + 1)
|
||||
else
|
||||
CurrMaxRtBDuration = self:GetMaxBuffTime(maxComboPoints)
|
||||
end
|
||||
|
||||
if event then
|
||||
self:UpdateRollTheBones()
|
||||
end
|
||||
|
||||
-- player doesn't want to show the percent of max or the alpha is zeroed out, so don't bother with the duration bar
|
||||
if not self.moduleSettings.showAsPercentOfMax or self.moduleSettings.durationAlpha == 0 or (points == 0 and not self:IsVisible())
|
||||
or ShouldHide() then
|
||||
self.durationFrame:Hide()
|
||||
return
|
||||
end
|
||||
self.durationFrame:Show()
|
||||
|
||||
-- if we have combo points and a target selected, go ahead and show the bar so the duration bar can be seen
|
||||
if points > 0 and (UnitExists("target") or self.moduleSettings.bShowWithNoTarget) then
|
||||
self:Show(true)
|
||||
end
|
||||
|
||||
if self.moduleSettings.durationAlpha > 0 then
|
||||
PotentialRtBDuration = self:GetMaxBuffTime(points)
|
||||
|
||||
-- compute the scale from the current number of combo points
|
||||
local scale = IceHUD:Clamp(PotentialRtBDuration / CurrMaxRtBDuration, 0, 1)
|
||||
|
||||
-- sadly, animation uses bar-local variables so we can't use the animation for 2 bar textures on the same bar element
|
||||
if (self.moduleSettings.reverse) then
|
||||
scale = 1 - scale
|
||||
end
|
||||
|
||||
self.durationFrame.bar:SetVertexColor(self:GetColor("RollTheBonesPotential", self.moduleSettings.durationAlpha))
|
||||
self:SetBarCoord(self.durationFrame, scale)
|
||||
end
|
||||
|
||||
if rtbEndTime < GetTime() then
|
||||
local potText = " (" .. PotentialRtBDuration .. ")"
|
||||
self:SetBottomText1(self.moduleSettings.upperText .. "0" .. (self.moduleSettings.durationAlpha > 0 and potText or ""))
|
||||
end
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:GetMaxBuffTime(numComboPoints)
|
||||
local maxduration
|
||||
|
||||
if numComboPoints == 0 then
|
||||
return 0
|
||||
end
|
||||
|
||||
maxduration = baseTime + ((numComboPoints - 1) * gapPerComboPoint)
|
||||
|
||||
return maxduration
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:GetItemIdFromItemLink(linkStr)
|
||||
local itemId
|
||||
local _
|
||||
|
||||
if linkStr then
|
||||
_, itemId, _, _, _, _, _, _, _ = strsplit(":", linkStr)
|
||||
end
|
||||
|
||||
return itemId or 0
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:IsItemIdInList(itemId, list)
|
||||
for i=1,#list do
|
||||
if string.match(itemId, list[i]) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function RollTheBones.prototype:OutCombat()
|
||||
RollTheBones.super.prototype.OutCombat(self)
|
||||
|
||||
self:UpdateRollTheBones()
|
||||
end
|
||||
|
||||
local _, unitClass = UnitClass("player")
|
||||
-- Load us up
|
||||
if unitClass == "ROGUE" and IceHUD.WowVer >= 70000 then
|
||||
IceHUD.RollTheBones = RollTheBones:new()
|
||||
end
|
@ -4,13 +4,8 @@ IceTargetAbsorb.prototype.highestAbsorbSinceLastZero = 0
|
||||
IceTargetAbsorb.prototype.ColorName = "TargetAbsorb"
|
||||
|
||||
local UnitGetTotalAbsorbs = UnitGetTotalAbsorbs
|
||||
if IceHUD.WowVer < 50200 then
|
||||
UnitGetTotalAbsorbs = nil
|
||||
end
|
||||
|
||||
-- Constructor --
|
||||
function IceTargetAbsorb.prototype:init(moduleName, unit, colorName)
|
||||
-- not sure if this is necessary...i think it is...this way, we can instantiate this bar on its own or as a parent class
|
||||
if moduleName == nil or unit == nil then
|
||||
IceTargetAbsorb.super.prototype.init(self, "TargetAbsorb", "target")
|
||||
else
|
||||
@ -29,45 +24,46 @@ function IceTargetAbsorb.prototype:GetDefaultSettings()
|
||||
|
||||
settings["side"] = IceCore.Side.Right
|
||||
settings["offset"] = 3
|
||||
settings["upperText"] = "[TotalAbsorb]"
|
||||
settings["upperText"] = "[TotalAbsorb:VeryShort]"
|
||||
|
||||
return settings
|
||||
end
|
||||
|
||||
-- OVERRIDE
|
||||
function IceTargetAbsorb.prototype:Enable(core)
|
||||
IceTargetAbsorb.super.prototype.Enable(self, core)
|
||||
|
||||
self:RegisterEvent("UNIT_ABSORB_AMOUNT_CHANGED", "UpdateAbsorbAmount")
|
||||
self:MyRegisterCustomEvents()
|
||||
|
||||
self:UpdateAbsorbAmount("UNIT_ABSORB_AMOUNT_CHANGED", self.unit)
|
||||
self:UpdateAbsorbAmount()
|
||||
|
||||
self:Show(false)
|
||||
end
|
||||
|
||||
function IceTargetAbsorb.prototype:MyRegisterCustomEvents()
|
||||
self:RegisterEvent("PLAYER_TARGET_CHANGED", "UpdateAbsorbAmount")
|
||||
end
|
||||
|
||||
function IceTargetAbsorb.prototype:MyUnregisterCustomEvents()
|
||||
self:UnregisterEvent("PLAYER_TARGET_CHANGED")
|
||||
end
|
||||
|
||||
function IceTargetAbsorb.prototype:Update()
|
||||
self:UpdateAbsorbAmount()
|
||||
end
|
||||
|
||||
function IceTargetAbsorb.prototype:UpdateAbsorbAmount(event, unit)
|
||||
if UnitGetTotalAbsorbs == nil or (event == "UNIT_ABSORB_AMOUNT_CHANGED" and unit ~= self.unit) then
|
||||
if event == "UNIT_ABSORB_AMOUNT_CHANGED" and unit ~= self.unit then
|
||||
return
|
||||
end
|
||||
|
||||
local absorbAmount = UnitGetTotalAbsorbs(self.unit)
|
||||
local absorbAmount = UnitGetTotalAbsorbs(self.unit) or 0
|
||||
|
||||
if absorbAmount == nil or absorbAmount <= 0 then
|
||||
if absorbAmount <= 0 then
|
||||
self.highestAbsorbSinceLastZero = 0
|
||||
elseif absorbAmount > self.highestAbsorbSinceLastZero then
|
||||
self.highestAbsorbSinceLastZero = absorbAmount
|
||||
end
|
||||
|
||||
if absorbAmount == nil or absorbAmount <= 0 or self.highestAbsorbSinceLastZero <= 0 then
|
||||
if absorbAmount <= 0 or self.highestAbsorbSinceLastZero <= 0 then
|
||||
self:Show(false)
|
||||
else
|
||||
self:Show(true)
|
||||
@ -82,4 +78,6 @@ function IceTargetAbsorb.prototype:Disable(core)
|
||||
self:MyUnregisterCustomEvents()
|
||||
end
|
||||
|
||||
IceHUD.TargetAbsorb = IceTargetAbsorb:new()
|
||||
if UnitGetTotalAbsorbs ~= nil then
|
||||
IceHUD.TargetAbsorb = IceTargetAbsorb:new()
|
||||
end
|
||||
|
@ -1325,6 +1325,7 @@ do
|
||||
icon:SetHeight(size-2)
|
||||
end
|
||||
else
|
||||
frame.texture:SetTexture(0, 0, 0, 0.5)
|
||||
icon:SetWidth(size-2)
|
||||
icon:SetHeight(size-2)
|
||||
end
|
||||
|
@ -21,6 +21,8 @@ function IceTargetMana.prototype:init(moduleName, unit)
|
||||
if IceHUD.WowVer >= 70000 then
|
||||
self:SetDefaultColor("TargetInsanity", 150, 50, 255)
|
||||
self:SetDefaultColor("TargetFury", 255, 50, 255)
|
||||
self:SetDefaultColor("TargetMaelstrom", 52, 64, 221)
|
||||
self:SetDefaultColor("TargetPain", 255, 50, 255)
|
||||
end
|
||||
end
|
||||
|
||||
@ -109,10 +111,14 @@ function IceTargetMana.prototype:Update(unit)
|
||||
self.color = "TargetEnergy"
|
||||
elseif (manaType == SPELL_POWER_RUNIC_POWER) then
|
||||
self.color = "TargetRunicPower"
|
||||
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_INSANITY) then
|
||||
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_INSANITY) then
|
||||
self.color = "TargetInsanity"
|
||||
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_FURY) then
|
||||
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_FURY) then
|
||||
self.color = "TargetFury"
|
||||
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_MAELSTROM) then
|
||||
self.color = "TargetMaelstrom"
|
||||
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_PAIN) then
|
||||
self.color = "TargetPain"
|
||||
end
|
||||
|
||||
if (self.tapped) then
|
||||
@ -133,7 +139,7 @@ end
|
||||
function IceTargetMana.prototype:TreatEmptyAsFull(manaType)
|
||||
return manaType == SPELL_POWER_RAGE or manaType == SPELL_POWER_RUNIC_POWER
|
||||
or (IceHUD.WowVer >= 70000 and (manaType == SPELL_POWER_LUNAR_POWER or manaType == SPELL_POWER_INSANITY
|
||||
or manaType == SPELL_POWER_FURY))
|
||||
or manaType == SPELL_POWER_FURY or manaType == SPELL_POWER_PAIN or manaType == SPELL_POWER_MAELSTROM))
|
||||
end
|
||||
|
||||
-- OVERRIDE
|
||||
|
Reference in New Issue
Block a user