mirror of
https://github.com/parnic/ice-hud.git
synced 2025-06-16 22:51:53 -05:00
Compare commits
22 Commits
Author | SHA1 | Date | |
---|---|---|---|
6a985bc67a
|
|||
3a5e58bf34 | |||
b467af21c0
|
|||
acc400de6e
|
|||
cac0deeb3c
|
|||
e951d40b12
|
|||
46883e355b
|
|||
004df582ef
|
|||
b8cf6e90b0
|
|||
d0c06c7b55
|
|||
8858459b10
|
|||
86e40187a2
|
|||
62bcc17ed6
|
|||
52c9b51e8d
|
|||
aa03a0b332
|
|||
3017b5dd18
|
|||
1f54f7d41d
|
|||
5b73d3b35f
|
|||
decb0017f3
|
|||
a32b75bf44
|
|||
6c506579be
|
|||
701fb1373f
|
13
.github/workflows/release.yml
vendored
13
.github/workflows/release.yml
vendored
@ -23,6 +23,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
CF_API_KEY: ${{ secrets.CF_API_KEY }}
|
CF_API_KEY: ${{ secrets.CF_API_KEY }}
|
||||||
WOWI_API_TOKEN: ${{ secrets.WOWI_API_TOKEN }}
|
WOWI_API_TOKEN: ${{ secrets.WOWI_API_TOKEN }}
|
||||||
|
WAGO_API_TOKEN: ${{ secrets.WAGO_API_TOKEN }}
|
||||||
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }} # "GITHUB_TOKEN" is a secret always provided to the workflow
|
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_"
|
# for your own token, the name cannot start with "GITHUB_"
|
||||||
|
|
||||||
@ -31,25 +32,27 @@ jobs:
|
|||||||
|
|
||||||
# we first have to clone the AddOn project, this is a required step
|
# we first have to clone the AddOn project, this is a required step
|
||||||
- name: Clone project
|
- name: Clone project
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0 # gets git history for changelogs
|
||||||
|
|
||||||
# once cloned, we just run the GitHub Action for the packager project
|
# once cloned, we just run the GitHub Action for the packager project
|
||||||
- name: Package and release
|
- name: Package and release
|
||||||
uses: BigWigsMods/packager@master
|
uses: BigWigsMods/packager@v2
|
||||||
|
|
||||||
# another example where we supply additional arguments, this example is specifically to release
|
# another example where we supply additional arguments, this example is specifically to release
|
||||||
# for the Classic version of the game
|
# for the Classic version of the game
|
||||||
- name: Package and release for Classic
|
- name: Package and release for Classic
|
||||||
uses: BigWigsMods/packager@master
|
uses: BigWigsMods/packager@v2
|
||||||
with:
|
with:
|
||||||
args: -g classic -w 0
|
args: -g classic -w 0
|
||||||
|
|
||||||
- name: Package and release for TBC
|
- name: Package and release for TBC
|
||||||
uses: BigWigsMods/packager@master
|
uses: BigWigsMods/packager@v2
|
||||||
with:
|
with:
|
||||||
args: -g bcc -w 0
|
args: -g bcc -w 0
|
||||||
|
|
||||||
- name: Package and release for Wrath
|
- name: Package and release for Wrath
|
||||||
uses: BigWigsMods/packager@master
|
uses: BigWigsMods/packager@v2
|
||||||
with:
|
with:
|
||||||
args: -g wrath -w 0
|
args: -g wrath -w 0
|
||||||
|
9
.pkgmeta
9
.pkgmeta
@ -37,15 +37,18 @@ externals:
|
|||||||
libs/AceLocale-3.0:
|
libs/AceLocale-3.0:
|
||||||
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceLocale-3.0
|
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceLocale-3.0
|
||||||
tag: latest
|
tag: latest
|
||||||
|
libs/AceHook-3.0:
|
||||||
|
url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceHook-3.0
|
||||||
|
tag: latest
|
||||||
libs/LibRangeCheck-2.0:
|
libs/LibRangeCheck-2.0:
|
||||||
url: https://github.com/WeakAuras/LibRangeCheck-2.0/
|
url: https://github.com/WeakAuras/LibRangeCheck-2.0/
|
||||||
libs/LibSharedMedia-3.0:
|
libs/LibSharedMedia-3.0:
|
||||||
url: svn://svn.wowace.com/wow/libsharedmedia-3-0/mainline/trunk
|
url: svn://svn.wowace.com/wow/libsharedmedia-3-0/mainline/trunk
|
||||||
tag: latest
|
tag: latest
|
||||||
libs/LibDogTag-3.0:
|
libs/LibDogTag-3.0:
|
||||||
url: git://git.wowace.com/wow/libdogtag-3-0/mainline.git
|
url: https://github.com/parnic/LibDogTag-3.0
|
||||||
libs/LibDogTag-Unit-3.0:
|
libs/LibDogTag-Unit-3.0:
|
||||||
url: git://git.wowace.com/wow/libdogtag-unit-3-0/mainline.git
|
url: https://github.com/parnic/LibDogTag-Unit-3.0
|
||||||
libs/LibDBIcon-1.0:
|
libs/LibDBIcon-1.0:
|
||||||
url: svn://svn.wowace.com/wow/libdbicon-1-0/mainline/trunk/LibDBIcon-1.0
|
url: svn://svn.wowace.com/wow/libdbicon-1-0/mainline/trunk/LibDBIcon-1.0
|
||||||
libs/LibDualSpec-1.0:
|
libs/LibDualSpec-1.0:
|
||||||
@ -65,6 +68,8 @@ tools-used:
|
|||||||
|
|
||||||
ignore:
|
ignore:
|
||||||
- readme.md
|
- readme.md
|
||||||
|
- FUNDING.yml
|
||||||
|
- this_version.md
|
||||||
|
|
||||||
manual-changelog: this_version.md
|
manual-changelog: this_version.md
|
||||||
|
|
||||||
|
3
FUNDING.yml
Normal file
3
FUNDING.yml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
github: parnic
|
||||||
|
ko_fi: parnic
|
||||||
|
custom: "https://www.paypal.me/parnic"
|
130
IceCastBar.lua
130
IceCastBar.lua
@ -3,7 +3,7 @@ IceCastBar = IceCore_CreateClass(IceBarElement)
|
|||||||
|
|
||||||
local IceHUD = _G.IceHUD
|
local IceHUD = _G.IceHUD
|
||||||
|
|
||||||
IceCastBar.Actions = { None = 0, Cast = 1, Channel = 2, Instant = 3, Success = 4, Failure = 5 }
|
IceCastBar.Actions = { None = 0, Cast = 1, Channel = 2, Instant = 3, Success = 4, Failure = 5, ReverseChannel = 6 }
|
||||||
|
|
||||||
IceCastBar.prototype.action = nil
|
IceCastBar.prototype.action = nil
|
||||||
IceCastBar.prototype.actionStartTime = nil
|
IceCastBar.prototype.actionStartTime = nil
|
||||||
@ -49,6 +49,13 @@ function IceCastBar.prototype:init(name)
|
|||||||
self:SetDefaultColor("CastChanneling", 242, 242, 10)
|
self:SetDefaultColor("CastChanneling", 242, 242, 10)
|
||||||
self:SetDefaultColor("CastSuccess", 242, 242, 70)
|
self:SetDefaultColor("CastSuccess", 242, 242, 70)
|
||||||
self:SetDefaultColor("CastFail", 1, 0, 0)
|
self:SetDefaultColor("CastFail", 1, 0, 0)
|
||||||
|
if GetUnitEmpowerMinHoldTime then
|
||||||
|
self:SetDefaultColor("EmpowerStage0", 165, 165, 165)
|
||||||
|
self:SetDefaultColor("EmpowerStage1", 242, 42, 10)
|
||||||
|
self:SetDefaultColor("EmpowerStage2", 242, 142, 10)
|
||||||
|
self:SetDefaultColor("EmpowerStage3", 242, 242, 10)
|
||||||
|
self:SetDefaultColor("EmpowerStage4", 242, 242, 242)
|
||||||
|
end
|
||||||
self.unit = "player"
|
self.unit = "player"
|
||||||
|
|
||||||
self.delay = 0
|
self.delay = 0
|
||||||
@ -109,6 +116,12 @@ function IceCastBar.prototype:Enable(core)
|
|||||||
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_UPDATE", "SpellCastChannelUpdate") -- unit, spell, rank
|
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_UPDATE", "SpellCastChannelUpdate") -- unit, spell, rank
|
||||||
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_STOP", "SpellCastChannelStop") -- unit, spell, rank
|
self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_STOP", "SpellCastChannelStop") -- unit, spell, rank
|
||||||
|
|
||||||
|
if GetUnitEmpowerHoldAtMaxTime then
|
||||||
|
self:RegisterEvent("UNIT_SPELLCAST_EMPOWER_START", "SpellCastChannelStart")
|
||||||
|
self:RegisterEvent("UNIT_SPELLCAST_EMPOWER_UPDATE", "SpellCastChannelUpdate")
|
||||||
|
self:RegisterEvent("UNIT_SPELLCAST_EMPOWER_STOP", "SpellCastChannelStop")
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
self:Show(false)
|
self:Show(false)
|
||||||
end
|
end
|
||||||
@ -311,7 +324,13 @@ function IceCastBar.prototype:PositionIcons()
|
|||||||
self.barFrame.icon:SetHeight(AuraIconHeight * self.moduleSettings.auraIconScale)
|
self.barFrame.icon:SetHeight(AuraIconHeight * self.moduleSettings.auraIconScale)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function IceCastBar.prototype:GetRemainingCastTime()
|
||||||
|
return self.actionStartTime + self.actionDuration - GetTime()
|
||||||
|
end
|
||||||
|
|
||||||
|
function IceCastBar.prototype:GetCurrentCastDurationMs()
|
||||||
|
return (GetTime() - (self.actionStartTime or GetTime())) * 1000
|
||||||
|
end
|
||||||
|
|
||||||
-- OnUpdate handler
|
-- OnUpdate handler
|
||||||
function IceCastBar.prototype:MyOnUpdate()
|
function IceCastBar.prototype:MyOnUpdate()
|
||||||
@ -322,17 +341,15 @@ function IceCastBar.prototype:MyOnUpdate()
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local time = GetTime()
|
|
||||||
|
|
||||||
self:Update()
|
self:Update()
|
||||||
self:SetTextAlpha()
|
self:SetTextAlpha()
|
||||||
|
|
||||||
-- handle casting and channeling
|
-- handle casting and channeling
|
||||||
if (self.action == IceCastBar.Actions.Cast or self.action == IceCastBar.Actions.Channel) then
|
if (self.action == IceCastBar.Actions.Cast or self.action == IceCastBar.Actions.Channel or self.action == IceCastBar.Actions.ReverseChannel) then
|
||||||
local remainingTime = self.actionStartTime + self.actionDuration - time
|
local remainingTime = self:GetRemainingCastTime()
|
||||||
local scale = 1 - (self.actionDuration ~= 0 and remainingTime / self.actionDuration or 0)
|
local scale = 1 - (self.actionDuration ~= 0 and remainingTime / self.actionDuration or 0)
|
||||||
|
|
||||||
if (self.moduleSettings.reverseChannel and self.action == IceCastBar.Actions.Channel) then
|
if self.action == IceCastBar.Actions.ReverseChannel then
|
||||||
scale = self.actionDuration ~= 0 and remainingTime / self.actionDuration or 0
|
scale = self.actionDuration ~= 0 and remainingTime / self.actionDuration or 0
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -343,14 +360,22 @@ function IceCastBar.prototype:MyOnUpdate()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local timeString = self.moduleSettings.showCastTime and string.format("%.1fs ", remainingTime) or ""
|
local timeString = self.moduleSettings.showCastTime and string.format("%.1fs ", remainingTime) or ""
|
||||||
self:SetBottomText1(timeString .. self.actionMessage)
|
local empowerString = self.NumStages ~= nil and (L["Stage %d"]):format(self:GetCurrentStage()) or ""
|
||||||
|
local line1 = timeString .. self.actionMessage
|
||||||
|
if self.moduleSettings.empowerStageTextDisplay == "TOPLINE" then
|
||||||
|
line1 = line1 .. " " .. empowerString
|
||||||
|
end
|
||||||
|
if self.moduleSettings.empowerStageTextDisplay == "BOTTOMLINE" then
|
||||||
|
self:SetBottomText2(empowerString)
|
||||||
|
end
|
||||||
|
self:SetBottomText1(line1)
|
||||||
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- stop bar if casting or channeling is done (in theory this should not be needed)
|
-- stop bar if casting or channeling is done (in theory this should not be needed)
|
||||||
if (self.action == IceCastBar.Actions.Cast or self.action == IceCastBar.Actions.Channel) then
|
if (self.action == IceCastBar.Actions.Cast or self.action == IceCastBar.Actions.Channel or self.action == IceCastBar.Actions.ReverseChannel) then
|
||||||
self:StopBar()
|
self:StopBar()
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -361,7 +386,7 @@ function IceCastBar.prototype:MyOnUpdate()
|
|||||||
self.action == IceCastBar.Actions.Success or
|
self.action == IceCastBar.Actions.Success or
|
||||||
self.action == IceCastBar.Actions.Failure)
|
self.action == IceCastBar.Actions.Failure)
|
||||||
then
|
then
|
||||||
local scale = time - self.actionStartTime
|
local scale = GetTime() - self.actionStartTime
|
||||||
|
|
||||||
if (scale > 1) then
|
if (scale > 1) then
|
||||||
self:StopBar()
|
self:StopBar()
|
||||||
@ -381,12 +406,60 @@ function IceCastBar.prototype:MyOnUpdate()
|
|||||||
self:StopBar()
|
self:StopBar()
|
||||||
end
|
end
|
||||||
|
|
||||||
function IceCastBar.prototype:GetCurrentCastingColor()
|
function IceCastBar.prototype:GetStageDuration(stage)
|
||||||
local updateColor = "CastCasting"
|
if not GetUnitEmpowerMinHoldTime then
|
||||||
if self.action == IceCastBar.Actions.Channel then
|
return 0
|
||||||
updateColor = "CastChanneling"
|
|
||||||
end
|
end
|
||||||
return updateColor
|
|
||||||
|
if stage == 0 then
|
||||||
|
return GetUnitEmpowerMinHoldTime(self.unit)
|
||||||
|
end
|
||||||
|
|
||||||
|
return GetUnitEmpowerStageDuration(self.unit, stage);
|
||||||
|
end
|
||||||
|
|
||||||
|
function IceCastBar.prototype:GetDurationUpToStage(stage)
|
||||||
|
if stage == nil or stage < 0 then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
local total = 0
|
||||||
|
for i=0,stage-1 do
|
||||||
|
total = total + self:GetStageDuration(i)
|
||||||
|
end
|
||||||
|
|
||||||
|
return total
|
||||||
|
end
|
||||||
|
|
||||||
|
function IceCastBar.prototype:GetCurrentStage()
|
||||||
|
if not GetUnitEmpowerMinHoldTime then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
local castDuration = self:GetCurrentCastDurationMs()
|
||||||
|
for i=1,self.NumStages do
|
||||||
|
if castDuration < self:GetDurationUpToStage(i) then
|
||||||
|
return i - 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return self.NumStages
|
||||||
|
end
|
||||||
|
|
||||||
|
function IceCastBar.prototype:IsCastingEmpowerSpell()
|
||||||
|
return self.NumStages ~= nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function IceCastBar.prototype:GetCurrentCastingColor()
|
||||||
|
if self:IsCastingEmpowerSpell() then
|
||||||
|
return ("EmpowerStage%d"):format(self:GetCurrentStage())
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.action == IceCastBar.Actions.Channel or self.action == IceCastBar.Actions.ReverseChannel then
|
||||||
|
return "CastChanneling"
|
||||||
|
end
|
||||||
|
|
||||||
|
return "CastCasting"
|
||||||
end
|
end
|
||||||
|
|
||||||
function IceCastBar.prototype:FlashBar(color, alpha, text, textColor)
|
function IceCastBar.prototype:FlashBar(color, alpha, text, textColor)
|
||||||
@ -406,7 +479,7 @@ end
|
|||||||
|
|
||||||
|
|
||||||
function IceCastBar.prototype:StartBar(action, message)
|
function IceCastBar.prototype:StartBar(action, message)
|
||||||
local spell, rank, displayName, icon, startTime, endTime, isTradeSkill
|
local spell, rank, displayName, icon, startTime, endTime, isTradeSkill, numStages
|
||||||
if IceHUD.SpellFunctionsReturnRank then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
spell, rank, displayName, icon, startTime, endTime, isTradeSkill = UnitCastingInfo(self.unit)
|
spell, rank, displayName, icon, startTime, endTime, isTradeSkill = UnitCastingInfo(self.unit)
|
||||||
else
|
else
|
||||||
@ -416,7 +489,24 @@ function IceCastBar.prototype:StartBar(action, message)
|
|||||||
if IceHUD.SpellFunctionsReturnRank then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
spell, rank, displayName, icon, startTime, endTime = UnitChannelInfo(self.unit)
|
spell, rank, displayName, icon, startTime, endTime = UnitChannelInfo(self.unit)
|
||||||
else
|
else
|
||||||
spell, displayName, icon, startTime, endTime = UnitChannelInfo(self.unit)
|
spell, displayName, icon, startTime, endTime, isTradeSkill, _, _, _, numStages = UnitChannelInfo(self.unit)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local isChargeSpell = numStages and numStages > 0
|
||||||
|
if isChargeSpell then
|
||||||
|
self.NumStages = numStages
|
||||||
|
endTime = endTime + GetUnitEmpowerHoldAtMaxTime(self.unit)
|
||||||
|
action = IceCastBar.Actions.ReverseChannel
|
||||||
|
else
|
||||||
|
self.NumStages = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.moduleSettings.reverseChannel then
|
||||||
|
if action == IceCastBar.Actions.Channel then
|
||||||
|
action = IceCastBar.Actions.ReverseChannel
|
||||||
|
elseif action == IceCastBar.Actions.ReverseChannel then
|
||||||
|
action = IceCastBar.Actions.Channel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -465,6 +555,7 @@ function IceCastBar.prototype:StopBar()
|
|||||||
self.actionDuration = nil
|
self.actionDuration = nil
|
||||||
|
|
||||||
self:SetBottomText1()
|
self:SetBottomText1()
|
||||||
|
self:SetBottomText2()
|
||||||
self:SetScale(0)
|
self:SetScale(0)
|
||||||
self:Show(false)
|
self:Show(false)
|
||||||
end
|
end
|
||||||
@ -514,7 +605,8 @@ function IceCastBar.prototype:SpellCastStop(event, unit, castGuid, spellId)
|
|||||||
|
|
||||||
if (self.action ~= IceCastBar.Actions.Success and
|
if (self.action ~= IceCastBar.Actions.Success and
|
||||||
self.action ~= IceCastBar.Actions.Failure and
|
self.action ~= IceCastBar.Actions.Failure and
|
||||||
self.action ~= IceCastBar.Actions.Channel)
|
self.action ~= IceCastBar.Actions.Channel and
|
||||||
|
self.action ~= IceCastBar.Actions.ReverseChannel)
|
||||||
then
|
then
|
||||||
self:StopBar()
|
self:StopBar()
|
||||||
self.current = nil
|
self.current = nil
|
||||||
@ -532,7 +624,7 @@ function IceCastBar.prototype:SpellCastFailed(event, unit, castGuid, spellId)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- channeled spells will call ChannelStop, not cast failed
|
-- channeled spells will call ChannelStop, not cast failed
|
||||||
if self.action == IceCastBar.Actions.Channel then
|
if self.action == IceCastBar.Actions.Channel or self.action == IceCastBar.Actions.ReverseChannel then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -582,7 +674,7 @@ function IceCastBar.prototype:SpellCastSucceeded(event, unit, castGuid, spellId)
|
|||||||
--IceHUD:Debug("SpellCastSucceeded", unit, castGuid, spellId)
|
--IceHUD:Debug("SpellCastSucceeded", unit, castGuid, spellId)
|
||||||
|
|
||||||
-- never show on channeled (why on earth does this event even fire when channeling starts?)
|
-- never show on channeled (why on earth does this event even fire when channeling starts?)
|
||||||
if (self.action == IceCastBar.Actions.Channel) then
|
if (self.action == IceCastBar.Actions.Channel or self.action == IceCastBar.Actions.ReverseChannel) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -284,6 +284,8 @@ function IceCore.prototype:Enable(userToggle)
|
|||||||
self.IceHUDFrame:RegisterEvent("ZONE_CHANGED")
|
self.IceHUDFrame:RegisterEvent("ZONE_CHANGED")
|
||||||
end
|
end
|
||||||
self.IceHUDFrame:RegisterEvent("UNIT_AURA")
|
self.IceHUDFrame:RegisterEvent("UNIT_AURA")
|
||||||
|
self.IceHUDFrame:RegisterEvent("PLAYER_REGEN_ENABLED", IceHUD.PLAYER_REGEN_ENABLED)
|
||||||
|
self.IceHUDFrame:RegisterEvent("PLAYER_REGEN_DISABLED", IceHUD.PLAYER_REGEN_DISABLED)
|
||||||
self.IceHUDFrame:SetScript("OnEvent", function(self, event, ...)
|
self.IceHUDFrame:SetScript("OnEvent", function(self, event, ...)
|
||||||
if (event == "PET_BATTLE_OPENING_START") then
|
if (event == "PET_BATTLE_OPENING_START") then
|
||||||
if IceHUD.IceCore.settings.bHideDuringPetBattles then
|
if IceHUD.IceCore.settings.bHideDuringPetBattles then
|
||||||
|
63
IceHUD.lua
63
IceHUD.lua
@ -1,5 +1,5 @@
|
|||||||
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
||||||
IceHUD = LibStub("AceAddon-3.0"):NewAddon("IceHUD", "AceConsole-3.0")
|
IceHUD = LibStub("AceAddon-3.0"):NewAddon("IceHUD", "AceConsole-3.0", "AceHook-3.0")
|
||||||
|
|
||||||
local IceHUD = IceHUD
|
local IceHUD = IceHUD
|
||||||
|
|
||||||
@ -36,6 +36,7 @@ else
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- compatibility/feature flags
|
-- compatibility/feature flags
|
||||||
|
IceHUD.GetPlayerAuraBySpellID = _G["C_UnitAuras"] and C_UnitAuras.GetPlayerAuraBySpellID
|
||||||
IceHUD.SpellFunctionsReturnRank = IceHUD.WowMain and IceHUD.WowVer < 80000
|
IceHUD.SpellFunctionsReturnRank = IceHUD.WowMain and IceHUD.WowVer < 80000
|
||||||
IceHUD.EventExistsPlayerPetChanged = IceHUD.WowMain and IceHUD.WowVer < 80000
|
IceHUD.EventExistsPlayerPetChanged = IceHUD.WowMain and IceHUD.WowVer < 80000
|
||||||
IceHUD.EventExistsPetBarChanged = IceHUD.WowMain and IceHUD.WowVer < 80000
|
IceHUD.EventExistsPetBarChanged = IceHUD.WowMain and IceHUD.WowVer < 80000
|
||||||
@ -494,6 +495,16 @@ function IceHUD:GetAuraCount(auraType, unit, ability, onlyMine, matchByName)
|
|||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Support for Spell IDs
|
||||||
|
if (IceHUD.GetPlayerAuraBySpellID and tonumber(ability) ~= nil) then
|
||||||
|
local aura = C_UnitAuras.GetPlayerAuraBySpellID(ability)
|
||||||
|
if aura ~= nil then
|
||||||
|
return aura.applications
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local i = 1
|
local i = 1
|
||||||
local name, _, texture, applications
|
local name, _, texture, applications
|
||||||
if IceHUD.SpellFunctionsReturnRank then
|
if IceHUD.SpellFunctionsReturnRank then
|
||||||
@ -963,3 +974,53 @@ UIDropDownMenu_Initialize(IceHUD_UnitFrame_DropDown, function()
|
|||||||
UnitPopup_ShowMenu(IceHUD_UnitFrame_DropDown, menu, IceHUD.DropdownUnit, nil, id)
|
UnitPopup_ShowMenu(IceHUD_UnitFrame_DropDown, menu, IceHUD.DropdownUnit, nil, id)
|
||||||
end
|
end
|
||||||
end, "MENU", nil)
|
end, "MENU", nil)
|
||||||
|
|
||||||
|
function IceHUD:OutOfCombatWrapper(func)
|
||||||
|
return function(...)
|
||||||
|
return IceHUD:RunOnLeaveCombat(func, ...)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
do
|
||||||
|
local in_combat = false
|
||||||
|
local in_lockdown = false
|
||||||
|
local actions_to_perform = {}
|
||||||
|
local pool = setmetatable({}, {__mode='k'})
|
||||||
|
function IceHUD:PLAYER_REGEN_ENABLED()
|
||||||
|
in_combat = false
|
||||||
|
in_lockdown = false
|
||||||
|
for i, t in ipairs(actions_to_perform) do
|
||||||
|
t.f(unpack(t, 1, t.n))
|
||||||
|
actions_to_perform[i] = nil
|
||||||
|
wipe(t)
|
||||||
|
pool[t] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function IceHUD:PLAYER_REGEN_DISABLED()
|
||||||
|
in_combat = true
|
||||||
|
end
|
||||||
|
function IceHUD:RunOnLeaveCombat(func, ...)
|
||||||
|
if not in_combat then
|
||||||
|
-- out of combat, call right away and return
|
||||||
|
func(...)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not in_lockdown then
|
||||||
|
in_lockdown = InCombatLockdown() -- still in PLAYER_REGEN_DISABLED
|
||||||
|
if not in_lockdown then
|
||||||
|
func(...)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local t = next(pool) or {}
|
||||||
|
pool[t] = nil
|
||||||
|
|
||||||
|
t.f = func
|
||||||
|
local n = select('#', ...)
|
||||||
|
t.n = n
|
||||||
|
for i = 1, n do
|
||||||
|
t[i] = select(i, ...)
|
||||||
|
end
|
||||||
|
actions_to_perform[#actions_to_perform+1] = t
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
## Interface: 90207
|
## Interface: 100000
|
||||||
## Interface-Retail: 90207
|
## Interface-Retail: 100000
|
||||||
## Interface-Classic: 11403
|
## Interface-Classic: 11403
|
||||||
## Interface-BCC: 20504
|
## Interface-BCC: 20504
|
||||||
## Interface-Wrath: 30400
|
## Interface-Wrath: 30400
|
||||||
@ -19,6 +19,7 @@
|
|||||||
## X-Website: https://www.wowace.com/projects/ice-hud
|
## X-Website: https://www.wowace.com/projects/ice-hud
|
||||||
## X-Curse-Project-ID: 5394
|
## X-Curse-Project-ID: 5394
|
||||||
## X-WoWI-ID: 8149
|
## X-WoWI-ID: 8149
|
||||||
|
## X-Wago-ID: 5bGolJN0
|
||||||
|
|
||||||
#@no-lib-strip@
|
#@no-lib-strip@
|
||||||
# Libraries
|
# Libraries
|
||||||
@ -98,6 +99,7 @@ modules\Stagger.lua
|
|||||||
modules\PlayerAltMana.lua
|
modules\PlayerAltMana.lua
|
||||||
modules\ArcaneCharges.lua
|
modules\ArcaneCharges.lua
|
||||||
modules\RollTheBones.lua
|
modules\RollTheBones.lua
|
||||||
|
modules\EssencePower.lua
|
||||||
|
|
||||||
#@do-not-package@
|
#@do-not-package@
|
||||||
IceHUD_Options\Json.lua
|
IceHUD_Options\Json.lua
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
## Interface: 90207
|
## Interface: 100000
|
||||||
## Interface-Retail: 90207
|
## Interface-Retail: 100000
|
||||||
## Interface-Classic: 11403
|
## Interface-Classic: 11403
|
||||||
## Interface-BCC: 20504
|
## Interface-BCC: 20504
|
||||||
## Interface-Wrath: 30400
|
## Interface-Wrath: 30400
|
||||||
|
@ -52,7 +52,13 @@ function IceStackCounter_GetOptions(frame, opts)
|
|||||||
opts["auraName"] = {
|
opts["auraName"] = {
|
||||||
type = 'input',
|
type = 'input',
|
||||||
name = L["Aura to track"],
|
name = L["Aura to track"],
|
||||||
desc = L["Which buff/debuff this counter will be tracking. \n\nRemember to press ENTER after filling out this box with the name you want or it will not save."],
|
desc = function()
|
||||||
|
if IceHUD.GetPlayerAuraBySpellID then
|
||||||
|
return L["Which buff/debuff this counter will be tracking. Can use the name or spell id. \n\nRemember to press ENTER after filling out this box with the name you want or it will not save."]
|
||||||
|
else
|
||||||
|
return L["Which buff/debuff this counter will be tracking. \n\nRemember to press ENTER after filling out this box with the name you want or it will not save."]
|
||||||
|
end
|
||||||
|
end,
|
||||||
get = function()
|
get = function()
|
||||||
return frame.moduleSettings.auraName
|
return frame.moduleSettings.auraName
|
||||||
end,
|
end,
|
||||||
|
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2021 parnic
|
Copyright (c) 2021-2022 parnic
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
27
changelog.md
27
changelog.md
@ -1,5 +1,32 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
v1.14.3:
|
||||||
|
|
||||||
|
- Add Spell ID support for aura tracking.
|
||||||
|
- Add Evoker support.
|
||||||
|
- Add Empowered Casting (hold-to-cast levels) support.
|
||||||
|
|
||||||
|
v1.14.2:
|
||||||
|
|
||||||
|
- Fix CC and Invuln modules not showing immediately when they should.
|
||||||
|
|
||||||
|
v1.14.1:
|
||||||
|
|
||||||
|
- Fix Hide Party feature on pre-10.0 clients.
|
||||||
|
|
||||||
|
v1.14.0:
|
||||||
|
|
||||||
|
- 10.0 compatibility
|
||||||
|
- Renamed Anima Charged combo points to Charged, and removed specific references to Kyrian.
|
||||||
|
|
||||||
|
v1.13.17.3:
|
||||||
|
|
||||||
|
- Packaged latest LibDogTag-Unit to work around crash in Wrath Classic client.
|
||||||
|
|
||||||
|
v1.13.17.2:
|
||||||
|
|
||||||
|
- Fixed Runes disappearing for Death Knights on Wrath Classic when using the dual spec feature.
|
||||||
|
|
||||||
v1.13.17.1:
|
v1.13.17.1:
|
||||||
|
|
||||||
- Fixed Priests hanging on login on the retail client.
|
- Fixed Priests hanging on login on the retail client.
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
<Include file="libs\AceConsole-3.0\AceConsole-3.0.xml"/>
|
<Include file="libs\AceConsole-3.0\AceConsole-3.0.xml"/>
|
||||||
<Include file="libs\AceAddon-3.0\AceAddon-3.0.xml"/>
|
<Include file="libs\AceAddon-3.0\AceAddon-3.0.xml"/>
|
||||||
<Include file="libs\AceLocale-3.0\AceLocale-3.0.xml"/>
|
<Include file="libs\AceLocale-3.0\AceLocale-3.0.xml"/>
|
||||||
|
<Include file="libs\AceHook-3.0\AceHook-3.0.xml"/>
|
||||||
<Include file="libs\LibDogTag-3.0\lib.xml"/>
|
<Include file="libs\LibDogTag-3.0\lib.xml"/>
|
||||||
<Include file="libs\LibDogTag-Unit-3.0\lib.xml"/>
|
<Include file="libs\LibDogTag-Unit-3.0\lib.xml"/>
|
||||||
<Script file="libs\LibRangeCheck-2.0\LibRangeCheck-2.0.lua"/>
|
<Script file="libs\LibRangeCheck-2.0\LibRangeCheck-2.0.lua"/>
|
||||||
|
@ -3,6 +3,11 @@ local CastBar = IceCore_CreateClass(IceCastBar)
|
|||||||
|
|
||||||
local IceHUD = _G.IceHUD
|
local IceHUD = _G.IceHUD
|
||||||
|
|
||||||
|
local CastingBarFrame = CastingBarFrame
|
||||||
|
if not CastingBarFrame then
|
||||||
|
CastingBarFrame = PlayerCastingBarFrame
|
||||||
|
end
|
||||||
|
|
||||||
CastBar.prototype.spellCastSent = nil
|
CastBar.prototype.spellCastSent = nil
|
||||||
|
|
||||||
-- Constructor --
|
-- Constructor --
|
||||||
@ -34,6 +39,9 @@ function CastBar.prototype:GetDefaultSettings()
|
|||||||
settings["rangeColor"] = true
|
settings["rangeColor"] = true
|
||||||
settings["bAllowExpand"] = false
|
settings["bAllowExpand"] = false
|
||||||
settings["respectLagTolerance"] = true
|
settings["respectLagTolerance"] = true
|
||||||
|
settings["lockUpperTextAlpha"] = true
|
||||||
|
settings["lockLowerTextAlpha"] = true
|
||||||
|
settings["empowerStageTextDisplay"] = "TOPLINE"
|
||||||
|
|
||||||
return settings
|
return settings
|
||||||
end
|
end
|
||||||
@ -231,6 +239,7 @@ function CastBar.prototype:GetOptions()
|
|||||||
end,
|
end,
|
||||||
set = function(info, v)
|
set = function(info, v)
|
||||||
self.moduleSettings.lockUpperTextAlpha = v
|
self.moduleSettings.lockUpperTextAlpha = v
|
||||||
|
self.moduleSettings.lockLowerTextAlpha = v
|
||||||
self:Redraw()
|
self:Redraw()
|
||||||
end,
|
end,
|
||||||
order = 13
|
order = 13
|
||||||
@ -303,7 +312,26 @@ function CastBar.prototype:GetOptions()
|
|||||||
disabled = function()
|
disabled = function()
|
||||||
return not self.moduleSettings.enabled
|
return not self.moduleSettings.enabled
|
||||||
end,
|
end,
|
||||||
}
|
},
|
||||||
|
|
||||||
|
empowerStageText = {
|
||||||
|
type = 'select',
|
||||||
|
name = L["Empower stage label display"],
|
||||||
|
desc = L["How to display the stage of an empowered spell"],
|
||||||
|
get = function()
|
||||||
|
return self.moduleSettings.empowerStageTextDisplay
|
||||||
|
end,
|
||||||
|
set = function(info, value)
|
||||||
|
self.moduleSettings.empowerStageTextDisplay = value
|
||||||
|
end,
|
||||||
|
values = { NONE = L["Don't show"], TOPLINE = L["After spell name"], BOTTOMLINE = L["Below spell name"] },
|
||||||
|
disabled = function()
|
||||||
|
return not self.moduleSettings.enabled
|
||||||
|
end,
|
||||||
|
hidden = function()
|
||||||
|
return not GetUnitEmpowerMinHoldTime
|
||||||
|
end,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -462,12 +462,19 @@ function IceClassPowerCounter.prototype:CheckValidSpec()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function IceClassPowerCounter.prototype:GetPowerEvent()
|
||||||
|
return IceHUD.UnitPowerEvent
|
||||||
|
end
|
||||||
|
|
||||||
function IceClassPowerCounter.prototype:DisplayCounter()
|
function IceClassPowerCounter.prototype:DisplayCounter()
|
||||||
self:UnregisterEvent("PLAYER_LEVEL_UP")
|
self:UnregisterEvent("PLAYER_LEVEL_UP")
|
||||||
|
|
||||||
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateRunePower")
|
self:RegisterEvent(self:GetPowerEvent(), "UpdateRunePower")
|
||||||
self:RegisterEvent("UNIT_DISPLAYPOWER", "UpdateRunePower")
|
self:RegisterEvent("UNIT_DISPLAYPOWER", "UpdateRunePower")
|
||||||
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
|
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
|
||||||
|
if IceHUD.EventExistsUnitMaxPower then
|
||||||
|
self:RegisterEvent("UNIT_MAXPOWER", "UpdateRunePower")
|
||||||
|
end
|
||||||
|
|
||||||
if (self.moduleSettings.hideBlizz) then
|
if (self.moduleSettings.hideBlizz) then
|
||||||
self:HideBlizz()
|
self:HideBlizz()
|
||||||
@ -490,15 +497,29 @@ function IceClassPowerCounter.prototype:EnteringWorld()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function IceClassPowerCounter.prototype:UpdateRunePower(event, arg1, arg2)
|
function IceClassPowerCounter.prototype:UpdateRunePower(event, arg1, arg2)
|
||||||
if event and (event == IceHUD.UnitPowerEvent or event == "UNIT_POWER_FREQUENT") and arg1 ~= "player" and arg1 ~= "vehicle" then
|
if event and (event == self:GetPowerEvent() or event == "UNIT_POWER_FREQUENT") and arg1 ~= "player" and arg1 ~= "vehicle" then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if IceHUD.WowVer >= 70000 then
|
if IceHUD.WowVer >= 70000 then
|
||||||
local numMax = UnitPowerMax(self.unit, self.unitPower)
|
local numMax = UnitPowerMax(self.unit, self.unitPower)
|
||||||
if numMax ~= self.numRunes then
|
if numMax ~= self.numRunes then
|
||||||
|
local oldMax = self.numRunes
|
||||||
self.numRunes = numMax
|
self.numRunes = numMax
|
||||||
self:CreateFrame()
|
self:CreateFrame()
|
||||||
|
self:SetDisplayMode()
|
||||||
|
|
||||||
|
for i=self.numRunes+1, oldMax do
|
||||||
|
if self.frame.graphical[i] then
|
||||||
|
self.frame.graphical[i]:Hide()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for i=oldMax+1, self.numRunes do
|
||||||
|
if self:GetRuneMode() ~= "Numeric" then
|
||||||
|
self.frame.graphical[i]:Show()
|
||||||
|
end
|
||||||
|
self:HideRune(i)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -567,11 +588,7 @@ function IceClassPowerCounter.prototype:UpdateRunePower(event, arg1, arg2)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if self.moduleSettings.inactiveDisplayMode == "Darkened" then
|
self:HideRune(i)
|
||||||
self.frame.graphical[i].rune:SetVertexColor(0, 0, 0)
|
|
||||||
elseif self.moduleSettings.inactiveDisplayMode == "Hidden" then
|
|
||||||
self.frame.graphical[i]:Hide()
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -592,6 +609,19 @@ function IceClassPowerCounter.prototype:UpdateRunePower(event, arg1, arg2)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function IceClassPowerCounter.prototype:HideRune(i)
|
||||||
|
if self:GetRuneMode() == "Numeric" then
|
||||||
|
self.frame.graphical[i].Hide()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.moduleSettings.inactiveDisplayMode == "Darkened" then
|
||||||
|
self.frame.graphical[i].rune:SetVertexColor(0, 0, 0)
|
||||||
|
elseif self.moduleSettings.inactiveDisplayMode == "Hidden" then
|
||||||
|
self.frame.graphical[i]:Hide()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function IceClassPowerCounter.prototype:StartRunesFullAnimation()
|
function IceClassPowerCounter.prototype:StartRunesFullAnimation()
|
||||||
if not self.AnimUpdate then
|
if not self.AnimUpdate then
|
||||||
self.AnimUpdate = function() self:UpdateRuneAnimation() end
|
self.AnimUpdate = function() self:UpdateRuneAnimation() end
|
||||||
@ -717,6 +747,9 @@ function IceClassPowerCounter.prototype:CreateRuneFrame()
|
|||||||
for i=1, self.numRunes do
|
for i=1, self.numRunes do
|
||||||
self:CreateRune(i)
|
self:CreateRune(i)
|
||||||
end
|
end
|
||||||
|
for i=self.numRunes+1, #self.frame.graphical do
|
||||||
|
self.frame.graphical[i]:Hide()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function IceClassPowerCounter.prototype:CreateRune(i)
|
function IceClassPowerCounter.prototype:CreateRune(i)
|
||||||
@ -758,7 +791,13 @@ function IceClassPowerCounter.prototype:CreateRune(i)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function IceClassPowerCounter.prototype:SetupNewRune(rune)
|
||||||
|
end
|
||||||
|
|
||||||
function IceClassPowerCounter.prototype:SetupRuneTexture(rune)
|
function IceClassPowerCounter.prototype:SetupRuneTexture(rune)
|
||||||
|
if rune > #self.runeCoords then
|
||||||
|
self:SetupNewRune(rune)
|
||||||
|
end
|
||||||
if not rune or rune < 1 or rune > #self.runeCoords then
|
if not rune or rune < 1 or rune > #self.runeCoords then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -21,7 +21,7 @@ function ComboPoints.prototype:init()
|
|||||||
if AnticipationExists then
|
if AnticipationExists then
|
||||||
self:SetDefaultColor("AnticipationPoints", 1, 0, 1)
|
self:SetDefaultColor("AnticipationPoints", 1, 0, 1)
|
||||||
end
|
end
|
||||||
self:SetDefaultColor("KyrianAnimaComboPoint", 0.3137254901960784, 0.3725490196078432, 1)
|
self:SetDefaultColor("ChargedComboPoint", 0.3137254901960784, 0.3725490196078432, 1)
|
||||||
self.scalingEnabled = true
|
self.scalingEnabled = true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -222,16 +222,16 @@ function ComboPoints.prototype:GetOptions()
|
|||||||
order = 35
|
order = 35
|
||||||
}
|
}
|
||||||
|
|
||||||
opts["bShowAnimaCharged"] = {
|
opts["bShowCharged"] = {
|
||||||
type = 'toggle',
|
type = 'toggle',
|
||||||
width = 'double',
|
width = 'double',
|
||||||
name = L["Show Anima-charged points"],
|
name = L["Show 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."],
|
desc = L["Whether or not to color a charged combo point a separate color. Set the ChargedComboPoint color to the color you would like it to be."],
|
||||||
get = function()
|
get = function()
|
||||||
return self.moduleSettings.bShowAnimaCharged
|
return self.moduleSettings.bShowCharged
|
||||||
end,
|
end,
|
||||||
set = function(info, v)
|
set = function(info, v)
|
||||||
self.moduleSettings.bShowAnimaCharged = v
|
self.moduleSettings.bShowCharged = v
|
||||||
self:UpdateChargedComboPoints()
|
self:UpdateChargedComboPoints()
|
||||||
end,
|
end,
|
||||||
disabled = function()
|
disabled = function()
|
||||||
@ -261,7 +261,7 @@ function ComboPoints.prototype:GetDefaultSettings()
|
|||||||
defaults["comboGap"] = 0
|
defaults["comboGap"] = 0
|
||||||
defaults["showAnticipation"] = true
|
defaults["showAnticipation"] = true
|
||||||
defaults["bShowWithNoTarget"] = true
|
defaults["bShowWithNoTarget"] = true
|
||||||
defaults["bShowAnimaCharged"] = true
|
defaults["bShowCharged"] = true
|
||||||
return defaults
|
return defaults
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -440,8 +440,8 @@ function ComboPoints.prototype:CreateComboFrame(forceTextureUpdate)
|
|||||||
g = g - ((1 / maxComboPoints)*i)
|
g = g - ((1 / maxComboPoints)*i)
|
||||||
end
|
end
|
||||||
|
|
||||||
if self.moduleSettings.bShowAnimaCharged and self:IsAnimaChargedPoint(i) then
|
if self.moduleSettings.bShowCharged and self:IsChargedPoint(i) then
|
||||||
self.frame.graphical[i].texture:SetVertexColor(self:GetColor("KyrianAnimaComboPoint"))
|
self.frame.graphical[i].texture:SetVertexColor(self:GetColor("ChargedComboPoint"))
|
||||||
else
|
else
|
||||||
self.frame.graphical[i].texture:SetVertexColor(r, g, b)
|
self.frame.graphical[i].texture:SetVertexColor(r, g, b)
|
||||||
end
|
end
|
||||||
@ -489,7 +489,7 @@ function ComboPoints.prototype:CreateComboFrame(forceTextureUpdate)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function ComboPoints.prototype:IsAnimaChargedPoint(point)
|
function ComboPoints.prototype:IsChargedPoint(point)
|
||||||
if not self.chargedPowerPoints then
|
if not self.chargedPowerPoints then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
@ -142,7 +142,9 @@ function ComboPointsBar.prototype:UpdateComboPoints(...)
|
|||||||
end
|
end
|
||||||
|
|
||||||
self:SetBottomText1(points or "0")
|
self:SetBottomText1(points or "0")
|
||||||
self:SetBottomText2(self.chargedPowerPointIndex)
|
if self.chargedPowerPointIndex then
|
||||||
|
self:SetBottomText2(self.chargedPowerPointIndex)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function ComboPointsBar.prototype:Update()
|
function ComboPointsBar.prototype:Update()
|
||||||
|
@ -329,16 +329,18 @@ function IceCustomBar.prototype:GetOptions()
|
|||||||
opts["buffToTrack"] = {
|
opts["buffToTrack"] = {
|
||||||
type = 'input',
|
type = 'input',
|
||||||
name = L["Aura to track"],
|
name = L["Aura to track"],
|
||||||
desc = L["Which buff/debuff this bar will be tracking.\n\nRemember to press ENTER after filling out this box with the name you want or it will not save."],
|
desc = function()
|
||||||
|
if IceHUD.GetPlayerAuraBySpellID then
|
||||||
|
return L["Which buff/debuff this bar will be tracking. Can use the name or spell id. \n\nRemember to press ENTER after filling out this box with the name you want or it will not save."]
|
||||||
|
else
|
||||||
|
return L["Which buff/debuff this bar will be tracking.\n\nRemember to press ENTER after filling out this box with the name you want or it will not save."]
|
||||||
|
end
|
||||||
|
end,
|
||||||
get = function()
|
get = function()
|
||||||
return self.moduleSettings.buffToTrack
|
return self.moduleSettings.buffToTrack
|
||||||
end,
|
end,
|
||||||
set = function(info, v)
|
set = function(info, v)
|
||||||
local orig = v
|
local orig = v
|
||||||
--Parnic: we now allow spell IDs to be used directly
|
|
||||||
--if tonumber(v) ~= nil then
|
|
||||||
-- v = GetSpellInfo(tonumber(v))
|
|
||||||
--end
|
|
||||||
if v == nil then
|
if v == nil then
|
||||||
v = orig
|
v = orig
|
||||||
end
|
end
|
||||||
|
74
modules/EssencePower.lua
Normal file
74
modules/EssencePower.lua
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
||||||
|
local EssencePower = IceCore_CreateClass(IceClassPowerCounter)
|
||||||
|
|
||||||
|
local SPELL_POWER_ESSENCE = SPELL_POWER_ESSENCE
|
||||||
|
if Enum and Enum.PowerType then
|
||||||
|
SPELL_POWER_ESSENCE = Enum.PowerType.Essence
|
||||||
|
end
|
||||||
|
|
||||||
|
function EssencePower.prototype:init()
|
||||||
|
EssencePower.super.prototype.init(self, "EssencePower")
|
||||||
|
|
||||||
|
self:SetDefaultColor("EssencePowerNumeric", 150, 150, 255)
|
||||||
|
|
||||||
|
self.unit = "player"
|
||||||
|
self.numericColor = "EssencePowerNumeric"
|
||||||
|
self.unitPower = SPELL_POWER_ESSENCE
|
||||||
|
self.minLevel = 0
|
||||||
|
self.bTreatEmptyAsFull = false
|
||||||
|
self.runeWidth = self.runeHeight
|
||||||
|
end
|
||||||
|
|
||||||
|
function EssencePower.prototype:Enable(core)
|
||||||
|
self.numRunes = UnitPowerMax(self.unit, SPELL_POWER_ESSENCE)
|
||||||
|
self.runeCoords = { }
|
||||||
|
for i = 1, self.numRunes do
|
||||||
|
self:SetupNewRune(i)
|
||||||
|
end
|
||||||
|
|
||||||
|
EssencePower.super.prototype.Enable(self, core)
|
||||||
|
end
|
||||||
|
|
||||||
|
function EssencePower.prototype:SetupNewRune(rune)
|
||||||
|
self.runeCoords[rune] = {0, 1, 0, 1}
|
||||||
|
end
|
||||||
|
|
||||||
|
function EssencePower.prototype:GetPowerEvent()
|
||||||
|
return "UNIT_POWER_FREQUENT"
|
||||||
|
end
|
||||||
|
|
||||||
|
function EssencePower.prototype:GetDefaultSettings()
|
||||||
|
local defaults = EssencePower.super.prototype.GetDefaultSettings(self)
|
||||||
|
|
||||||
|
defaults["pulseWhenFull"] = false
|
||||||
|
|
||||||
|
return defaults
|
||||||
|
end
|
||||||
|
|
||||||
|
function EssencePower.prototype:GetOptions()
|
||||||
|
local opts = EssencePower.super.prototype.GetOptions(self)
|
||||||
|
|
||||||
|
opts.hideBlizz.hidden = function() return true end
|
||||||
|
|
||||||
|
return opts
|
||||||
|
end
|
||||||
|
|
||||||
|
function EssencePower.prototype:GetRuneAtlas(rune)
|
||||||
|
return "UF-Essence-Icon"
|
||||||
|
end
|
||||||
|
|
||||||
|
function EssencePower.prototype:GetShineAtlas(rune)
|
||||||
|
return "Mage-ArcaneCharge-SmallSpark"
|
||||||
|
end
|
||||||
|
|
||||||
|
function EssencePower.prototype:ShowBlizz()
|
||||||
|
end
|
||||||
|
|
||||||
|
function EssencePower.prototype:HideBlizz()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Load us up
|
||||||
|
local _, unitClass = UnitClass("player")
|
||||||
|
if unitClass == "EVOKER" then
|
||||||
|
IceHUD.EssencePower = EssencePower:new()
|
||||||
|
end
|
@ -10,6 +10,7 @@ PlayerHealth.prototype.absorbAmount = 0
|
|||||||
local configMode = false
|
local configMode = false
|
||||||
local HealComm
|
local HealComm
|
||||||
local incomingHealAmt = 0
|
local incomingHealAmt = 0
|
||||||
|
local groupEvent = IceHUD.EventExistsGroupRosterUpdate and "GROUP_ROSTER_UPDATE" or "PARTY_MEMBERS_CHANGED"
|
||||||
|
|
||||||
-- Constructor --
|
-- Constructor --
|
||||||
function PlayerHealth.prototype:init()
|
function PlayerHealth.prototype:init()
|
||||||
@ -81,11 +82,7 @@ function PlayerHealth.prototype:Enable(core)
|
|||||||
self:RegisterEvent("PLAYER_REGEN_DISABLED", "CheckCombat")
|
self:RegisterEvent("PLAYER_REGEN_DISABLED", "CheckCombat")
|
||||||
|
|
||||||
self:RegisterEvent("PARTY_LEADER_CHANGED", "CheckLeader")
|
self:RegisterEvent("PARTY_LEADER_CHANGED", "CheckLeader")
|
||||||
if IceHUD.EventExistsGroupRosterUpdate then
|
self:RegisterEvent(groupEvent, "CheckLeader")
|
||||||
self:RegisterEvent("GROUP_ROSTER_UPDATE", "CheckLeader")
|
|
||||||
else
|
|
||||||
self:RegisterEvent("PARTY_MEMBERS_CHANGED", "CheckLeader")
|
|
||||||
end
|
|
||||||
if GetLFGProposal then
|
if GetLFGProposal then
|
||||||
self:RegisterEvent("LFG_PROPOSAL_UPDATE", "CheckPartyRole")
|
self:RegisterEvent("LFG_PROPOSAL_UPDATE", "CheckPartyRole")
|
||||||
self:RegisterEvent("LFG_PROPOSAL_FAILED", "CheckPartyRole")
|
self:RegisterEvent("LFG_PROPOSAL_FAILED", "CheckPartyRole")
|
||||||
@ -1421,43 +1418,78 @@ function PlayerHealth.prototype:HideBlizz()
|
|||||||
PlayerFrame:SetParent(self.PlayerFrameParent)
|
PlayerFrame:SetParent(self.PlayerFrameParent)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local parents = {}
|
||||||
|
local hide_frame = IceHUD:OutOfCombatWrapper(function(self) self:Hide() end)
|
||||||
|
|
||||||
|
local function hook_frames(...)
|
||||||
|
for i = 1, select("#", ...) do
|
||||||
|
local frame = select(i, ...)
|
||||||
|
frame:UnregisterAllEvents()
|
||||||
|
if not IceHUD:IsHooked(frame, "OnShow") then
|
||||||
|
IceHUD:SecureHookScript(frame, "OnShow", hide_frame)
|
||||||
|
end
|
||||||
|
frame:Hide()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function unhook_frame(frame)
|
||||||
|
if IceHUD:IsHooked(frame, "OnShow") then
|
||||||
|
IceHUD:Unhook(frame, "OnShow")
|
||||||
|
local parent = parents[frame]
|
||||||
|
if parent then
|
||||||
|
frame:SetParent(parent)
|
||||||
|
end
|
||||||
|
elseif IceHUD:IsHooked(frame, "Show") then
|
||||||
|
IceHUD:Unhook(frame, "Show")
|
||||||
|
IceHUD:Unhook(frame, "SetPoint")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function unhook_frames(...)
|
||||||
|
for i = 1, select("#", ...) do
|
||||||
|
local frame = select(i, ...)
|
||||||
|
unhook_frame(frame)
|
||||||
|
local handler = frame:GetScript("OnLoad")
|
||||||
|
if handler then
|
||||||
|
handler(frame)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function PlayerHealth.prototype:HideBlizzardParty()
|
function PlayerHealth.prototype:HideBlizzardParty()
|
||||||
if self.combat then
|
if self.combat then
|
||||||
self.pendingBlizzardPartyHide = true
|
self.pendingBlizzardPartyHide = true
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Both Pitbull 4 and Xperl use these exact code, so we use it too.
|
if PartyFrame then
|
||||||
for i = 1, MAX_PARTY_MEMBERS do
|
PartyFrame:Hide()
|
||||||
local party = _G['PartyMemberFrame'..i]
|
PartyFrame:UnregisterEvent(groupEvent)
|
||||||
party:UnregisterAllEvents()
|
else
|
||||||
party:Hide()
|
for i = 1, MAX_PARTY_MEMBERS do
|
||||||
party.Show = function() end
|
local frame = _G["PartyMemberFrame" .. i]
|
||||||
|
frame:SetAttribute("statehidden", true)
|
||||||
|
hook_frames(frame)
|
||||||
|
end
|
||||||
|
UIParent:UnregisterEvent(groupEvent)
|
||||||
end
|
end
|
||||||
|
|
||||||
UIParent:UnregisterEvent('RAID_ROSTER_UPDATE')
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function PlayerHealth.prototype:ShowBlizzardParty()
|
function PlayerHealth.prototype:ShowBlizzardParty()
|
||||||
-- Both Pitbull 4 and Xperl use these exact code, so we use it too.
|
if PartyFrame then
|
||||||
for i = 1, MAX_PARTY_MEMBERS do
|
PartyFrame:Show()
|
||||||
local frame = _G["PartyMemberFrame"..i]
|
PartyFrame:Layout()
|
||||||
if frame then
|
PartyFrame:RegisterEvent(groupEvent)
|
||||||
frame.Show = nil
|
else
|
||||||
frame:GetScript("OnLoad")(frame)
|
for i = 1, MAX_PARTY_MEMBERS do
|
||||||
if IceHUD.WowVer >= 50000 then
|
local frame = _G["PartyMemberFrame" .. i]
|
||||||
frame:GetScript("OnEvent")(frame, "GROUP_ROSTER_UPDATE")
|
frame:SetAttribute("statehidden", nil)
|
||||||
else
|
unhook_frames(frame)
|
||||||
frame:GetScript("OnEvent")(frame, "PARTY_MEMBERS_CHANGED")
|
frame:GetScript("OnEvent")(frame, groupEvent)
|
||||||
end
|
|
||||||
|
|
||||||
PartyMemberFrame_UpdateMember(frame)
|
|
||||||
end
|
end
|
||||||
|
UIParent:RegisterEvent(groupEvent)
|
||||||
end
|
end
|
||||||
|
|
||||||
UIParent:RegisterEvent("RAID_ROSTER_UPDATE")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--function PlayerHealth.prototype:ShowBlizzParty()
|
--function PlayerHealth.prototype:ShowBlizzParty()
|
||||||
|
@ -115,7 +115,9 @@ end
|
|||||||
|
|
||||||
function PlayerInfo.prototype:ShowBlizz()
|
function PlayerInfo.prototype:ShowBlizz()
|
||||||
BuffFrame:Show()
|
BuffFrame:Show()
|
||||||
TemporaryEnchantFrame:Show()
|
if TemporaryEnchantFrame then
|
||||||
|
TemporaryEnchantFrame:Show()
|
||||||
|
end
|
||||||
|
|
||||||
BuffFrame:GetScript("OnLoad")(BuffFrame)
|
BuffFrame:GetScript("OnLoad")(BuffFrame)
|
||||||
end
|
end
|
||||||
@ -123,7 +125,9 @@ end
|
|||||||
|
|
||||||
function PlayerInfo.prototype:HideBlizz()
|
function PlayerInfo.prototype:HideBlizz()
|
||||||
BuffFrame:Hide()
|
BuffFrame:Hide()
|
||||||
TemporaryEnchantFrame:Hide()
|
if TemporaryEnchantFrame then
|
||||||
|
TemporaryEnchantFrame:Hide()
|
||||||
|
end
|
||||||
|
|
||||||
BuffFrame:UnregisterAllEvents()
|
BuffFrame:UnregisterAllEvents()
|
||||||
end
|
end
|
||||||
|
@ -274,7 +274,7 @@ end
|
|||||||
function RollTheBones.prototype:MyOnUpdate()
|
function RollTheBones.prototype:MyOnUpdate()
|
||||||
RollTheBones.super.prototype.MyOnUpdate(self)
|
RollTheBones.super.prototype.MyOnUpdate(self)
|
||||||
if self.bUpdateRtb then
|
if self.bUpdateRtb then
|
||||||
self:UpdateRollTheBones(nil, self.unit, true)
|
self:UpdateRollTheBones("internal", self.unit)
|
||||||
end
|
end
|
||||||
if self.target or self.moduleSettings.bShowWithNoTarget then
|
if self.target or self.moduleSettings.bShowWithNoTarget then
|
||||||
self:UpdateDurationBar()
|
self:UpdateDurationBar()
|
||||||
@ -296,13 +296,14 @@ local function ShouldHide()
|
|||||||
return not HasSpell(193316)
|
return not HasSpell(193316)
|
||||||
end
|
end
|
||||||
|
|
||||||
function RollTheBones.prototype:UpdateRollTheBones(event, unit, fromUpdate)
|
function RollTheBones.prototype:UpdateRollTheBones(event, unit)
|
||||||
if unit and unit ~= self.unit then
|
if unit and unit ~= self.unit then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local now = GetTime()
|
local now = GetTime()
|
||||||
local remaining = nil
|
local remaining = nil
|
||||||
|
local fromUpdate = event == "internal"
|
||||||
|
|
||||||
if not fromUpdate then
|
if not fromUpdate then
|
||||||
rtbDuration, remaining, rtbCount = self:GetBuffDuration(self.unit, RtBSet)
|
rtbDuration, remaining, rtbCount = self:GetBuffDuration(self.unit, RtBSet)
|
||||||
|
@ -3,6 +3,8 @@ local Runes = IceCore_CreateClass(IceElement)
|
|||||||
|
|
||||||
local IceHUD = _G.IceHUD
|
local IceHUD = _G.IceHUD
|
||||||
|
|
||||||
|
local RunesReturnedByMaxPower = IceHUD.WowVer >= 70000
|
||||||
|
|
||||||
local CooldownFrame_SetTimer = CooldownFrame_SetTimer
|
local CooldownFrame_SetTimer = CooldownFrame_SetTimer
|
||||||
if CooldownFrame_Set then
|
if CooldownFrame_Set then
|
||||||
CooldownFrame_SetTimer = CooldownFrame_Set
|
CooldownFrame_SetTimer = CooldownFrame_Set
|
||||||
@ -132,6 +134,9 @@ function Runes.prototype:GetOptions()
|
|||||||
disabled = function()
|
disabled = function()
|
||||||
return not self.moduleSettings.enabled
|
return not self.moduleSettings.enabled
|
||||||
end,
|
end,
|
||||||
|
hidden = function()
|
||||||
|
return not PlayerFrame_HideVehicleTexture
|
||||||
|
end,
|
||||||
order = 32
|
order = 32
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,7 +270,7 @@ end
|
|||||||
|
|
||||||
-- OVERRIDE
|
-- OVERRIDE
|
||||||
function Runes.prototype:Enable(core)
|
function Runes.prototype:Enable(core)
|
||||||
if IceHUD.WowVer >= 70000 then
|
if RunesReturnedByMaxPower then
|
||||||
self.numRunes = UnitPowerMax("player", SPELL_POWER_RUNES)
|
self.numRunes = UnitPowerMax("player", SPELL_POWER_RUNES)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -283,7 +288,9 @@ function Runes.prototype:Enable(core)
|
|||||||
self:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED", "UpdateRuneColors")
|
self:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED", "UpdateRuneColors")
|
||||||
end
|
end
|
||||||
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
|
self:RegisterEvent("PLAYER_ENTERING_WORLD", "EnteringWorld")
|
||||||
self:RegisterEvent("UNIT_MAXPOWER", "CheckMaxNumRunes")
|
if RunesReturnedByMaxPower then
|
||||||
|
self:RegisterEvent("UNIT_MAXPOWER", "CheckMaxNumRunes")
|
||||||
|
end
|
||||||
|
|
||||||
if (self.moduleSettings.hideBlizz) then
|
if (self.moduleSettings.hideBlizz) then
|
||||||
self:HideBlizz()
|
self:HideBlizz()
|
||||||
@ -577,6 +584,10 @@ local function hook_playerframe()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Runes.prototype:HideBlizz()
|
function Runes.prototype:HideBlizz()
|
||||||
|
if not PlayerFrame_HideVehicleTexture then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
RuneFrame:Hide()
|
RuneFrame:Hide()
|
||||||
RuneFrame:UnregisterAllEvents()
|
RuneFrame:UnregisterAllEvents()
|
||||||
|
|
||||||
|
@ -277,7 +277,7 @@ end
|
|||||||
function SliceAndDice.prototype:MyOnUpdate()
|
function SliceAndDice.prototype:MyOnUpdate()
|
||||||
SliceAndDice.super.prototype.MyOnUpdate(self)
|
SliceAndDice.super.prototype.MyOnUpdate(self)
|
||||||
if self.bUpdateSnd then
|
if self.bUpdateSnd then
|
||||||
self:UpdateSliceAndDice(nil, self.unit, true)
|
self:UpdateSliceAndDice("internal", self.unit)
|
||||||
end
|
end
|
||||||
if self.target or self.moduleSettings.bShowWithNoTarget then
|
if self.target or self.moduleSettings.bShowWithNoTarget then
|
||||||
self:UpdateDurationBar()
|
self:UpdateDurationBar()
|
||||||
@ -312,13 +312,14 @@ local function ShouldHide()
|
|||||||
-- with different durations
|
-- with different durations
|
||||||
end
|
end
|
||||||
|
|
||||||
function SliceAndDice.prototype:UpdateSliceAndDice(event, unit, fromUpdate)
|
function SliceAndDice.prototype:UpdateSliceAndDice(event, unit)
|
||||||
if unit and unit ~= self.unit then
|
if unit and unit ~= self.unit then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local now = GetTime()
|
local now = GetTime()
|
||||||
local remaining = nil
|
local remaining = nil
|
||||||
|
local fromUpdate = event == "internal"
|
||||||
|
|
||||||
if not fromUpdate or IceHUD.WowVer < 30000 then
|
if not fromUpdate or IceHUD.WowVer < 30000 then
|
||||||
sndDuration, remaining = self:GetBuffDuration(self.unit, sndBuffName)
|
sndDuration, remaining = self:GetBuffDuration(self.unit, sndBuffName)
|
||||||
|
@ -375,11 +375,12 @@ end
|
|||||||
|
|
||||||
function TargetCC.prototype:MyOnUpdate()
|
function TargetCC.prototype:MyOnUpdate()
|
||||||
TargetCC.super.prototype.MyOnUpdate(self)
|
TargetCC.super.prototype.MyOnUpdate(self)
|
||||||
self:UpdateTargetDebuffs(nil, self.unit, true)
|
self:UpdateTargetDebuffs("internal", self.unit)
|
||||||
end
|
end
|
||||||
|
|
||||||
function TargetCC.prototype:UpdateTargetDebuffs(event, unit, isUpdate)
|
function TargetCC.prototype:UpdateTargetDebuffs(event, unit)
|
||||||
local name, duration, remaining
|
local name, duration, remaining
|
||||||
|
local isUpdate = event == "internal"
|
||||||
|
|
||||||
if not isUpdate or not self.lastUpdateTime then
|
if not isUpdate or not self.lastUpdateTime then
|
||||||
self.debuffName, self.debuffDuration, self.debuffRemaining = self:GetMaxDebuffDuration(self.unit, self.debuffList)
|
self.debuffName, self.debuffDuration, self.debuffRemaining = self:GetMaxDebuffDuration(self.unit, self.debuffList)
|
||||||
|
@ -191,11 +191,12 @@ end
|
|||||||
|
|
||||||
function TargetInvuln.prototype:MyOnUpdate()
|
function TargetInvuln.prototype:MyOnUpdate()
|
||||||
TargetInvuln.super.prototype.MyOnUpdate(self)
|
TargetInvuln.super.prototype.MyOnUpdate(self)
|
||||||
self:UpdateTargetBuffs(nil, self.unit, true)
|
self:UpdateTargetBuffs("internal", self.unit)
|
||||||
end
|
end
|
||||||
|
|
||||||
function TargetInvuln.prototype:UpdateTargetBuffs(event, unit, isUpdate)
|
function TargetInvuln.prototype:UpdateTargetBuffs(event, unit)
|
||||||
local name, duration, remaining
|
local name, duration, remaining
|
||||||
|
local isUpdate = event == "internal"
|
||||||
|
|
||||||
if not isUpdate or not self.lastUpdateTime then
|
if not isUpdate or not self.lastUpdateTime then
|
||||||
self.buffName, self.buffDuration, self.buffRemaining = self:GetMaxbuffDuration(self.unit, self.buffList)
|
self.buffName, self.buffDuration, self.buffRemaining = self:GetMaxbuffDuration(self.unit, self.buffList)
|
||||||
|
@ -1,14 +1,20 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
v1.13.17.1:
|
v1.14.3:
|
||||||
|
|
||||||
- Fixed Priests hanging on login on the retail client.
|
- Add Spell ID support for aura tracking.
|
||||||
|
- Add Evoker support.
|
||||||
|
- Add Empowered Casting (hold-to-cast levels) support.
|
||||||
|
|
||||||
v1.13.17:
|
v1.14.2:
|
||||||
|
|
||||||
- Internal maintainability updates. There are so many versions of the game now, updates need to be as easy and safe as possible.
|
- Fix CC and Invuln modules not showing immediately when they should.
|
||||||
- Improved reliability of Slice-n-Dice predicted length when changing talents.
|
|
||||||
- Improved various modules's ability to respond to the player's maximum power type changing (going from 5 max combo points to 6, for example).
|
v1.14.1:
|
||||||
- Fixed invalid texture layers specified on a variety of textures (10.0 fix).
|
|
||||||
- Removed HolyPowerNumeric text from the configuration options of several modules that it didn't belong with.
|
- Fix Hide Party feature on pre-10.0 clients.
|
||||||
- Fixed combo points in Classic Era clients.
|
|
||||||
|
v1.14.0:
|
||||||
|
|
||||||
|
- 10.0 compatibility
|
||||||
|
- Renamed Anima Charged combo points to Charged, and removed specific references to Kyrian.
|
||||||
|
Reference in New Issue
Block a user