diff --git a/.luacheckrc b/.luacheckrc index 81cfda23..f9b8d18c 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -563,6 +563,8 @@ stds.ecs = { "C_UnitAuras", "C_UnitAuras.GetAuraDataByIndex", "C_UnitAuras.GetBuffDataByIndex", + "C_UnitAuras.GetDebuffDataByIndex", + "C_UnitAuras.GetPlayerAuraBySpellID", "C_VideoOptions.GetGxAdapterInfo", "C_VoiceChat.ActivateChannel", "C_VoiceChat.BeginLocalCapture", diff --git a/Modules/Config/SpellSection.lua b/Modules/Config/SpellSection.lua index 5f7e84e5..fa28e2ea 100755 --- a/Modules/Config/SpellSection.lua +++ b/Modules/Config/SpellSection.lua @@ -62,9 +62,6 @@ function _Config:LoadSpellSection() name = function() return i18n("Haste Bonus") end, desc = function() return i18n("Shows/Hides the spell haste bonus value.") end, width = 1.5, - hidden = function() - return (not ECS.IsWotlk) - end, disabled = function() return (not ExtendedCharacterStats.profile.spell.display); end, get = function () return ExtendedCharacterStats.profile.spell.hasteBonus.display; end, set = function (_, value) diff --git a/Modules/Data/Constants.lua b/Modules/Data/Constants.lua index a880a090..44b36af8 100755 --- a/Modules/Data/Constants.lua +++ b/Modules/Data/Constants.lua @@ -346,6 +346,69 @@ Data.Aura = { [51466] = 3, -- Elemental Oath Rank 1 [51470] = 5, -- Elemental Oath Rank 2 }, + SpellHaste = { + [1714] = -50, -- Curse of Tongues Rank 1 + [3603] = -35, -- Distracting Pain + [5760] = -40, -- Mind-numbing Poison Rank 1 + [7102] = -25, -- Contagion of Rot + [7103] = -25, -- Contagion of Rot + [7127] = -20, -- Wavering Will + [8140] = -50, -- Befuddlement + [8215] = 100, -- Rapid Cast + [8272] = -20, -- Mind Tremor + [8692] = -50, -- Mind-numbing Poison II Rank 2 + [10348] = 100, -- Tune Up + [10651] = -20, -- Curse of the Eye + [10653] = -20, -- Curse of the Eye + [11398] = -60, -- Mind-numbing Poison III Rank 3 + [11719] = -60, -- Curse of Tongues Rank 2 + [12255] = -15, -- Curse of Tuten'kash + [12889] = -50, -- Curse of Tongues + [13338] = -50, -- Curse of Tongues + [14538] = -35, -- Aural Shock + [15470] = -50, -- Curse of Tongues + [17331] = -10, -- Fang of the Crystal Spider + [17633] = 66, -- Arcane Focus + [18173] = 100000, -- Burning Adrenaline + [18803] = 100000, -- Focus + [19365] = -50, -- Ancient Dread + [19779] = 26, -- Inspire + [22247] = -80, -- Suppression Aura + [22642] = -50, -- Brood Power: Bronze + [22710] = 100, -- Enlarge + [22909] = -50, -- Eye of Immol'thar + [23153] = -50, -- Brood Affliction: Blue + [23620] = 100000, -- Burning Adrenaline + [23723] = 33, -- Mind Quickening + [23733] = 33, -- Blinding Light + [24415] = -50, -- Slow + [25195] = -75, -- Curse of Tongues + [25516] = 11, -- Aura of Command + [25773] = 300, -- Will of Weavil + [25810] = -50, -- Mind-numbing Poison + [367987] = 101, -- Burning Adrenaline + [368615] = 30, -- Pulse Lightning + [370066] = 51, -- Visions of Madness + [370767] = 11, -- Essence of C'Thun + [370832] = 15, -- Gift of the Spider + [371206] = 100, -- Servant of Chaos + [402794] = -60, -- Curse of Tongues + [425121] = 20, -- Icy Veins + [427714] = 30, -- Backdraft + [429125] = 20, -- Icy Veins + [431060] = 100001, -- Flight Insurance + [437362] = 20, -- Hyperconductive Shock + [444046] = -50, -- Curse of Tongues + [446528] = 10, -- Echoes of Madness + [467141] = 33, -- Mind Quickening + [467522] = 33, -- Blinding Light + [469261] = 101, -- Burning Adrenaline + [474236] = 100000, -- Blessing of Ji'zhi + [1221578] = 25, -- Mark of the Master + [1226451] = 20, -- Emergency + [1227200] = 20, -- Wickedness + [1236220] = -50, -- Slow + }, } Data.Enchant = { BlockValue = { @@ -444,6 +507,272 @@ Data.Gem = { [42146] = 17, -- Lustrous Dragon's Eye }, } +Data.Item = { + IsTimeworn = { + [233496] = true, + [233505] = true, + [233506] = true, + [233514] = true, + [233516] = true, + [233517] = true, + [233518] = true, + [233520] = true, + [233521] = true, + [233522] = true, + [233523] = true, + [233559] = true, + [233560] = true, + [233561] = true, + [233563] = true, + [233564] = true, + [233566] = true, + [233567] = true, + [233568] = true, + [233573] = true, + [233574] = true, + [233575] = true, + [233577] = true, + [233578] = true, + [233579] = true, + [233582] = true, + [233583] = true, + [233584] = true, + [233590] = true, + [233591] = true, + [233592] = true, + [233593] = true, + [233594] = true, + [233595] = true, + [233598] = true, + [233603] = true, + [233604] = true, + [233607] = true, + [233608] = true, + [233610] = true, + [233611] = true, + [233612] = true, + [233613] = true, + [233614] = true, + [233617] = true, + [233618] = true, + [233619] = true, + [233622] = true, + [233623] = true, + [233624] = true, + [233625] = true, + [233631] = true, + [233632] = true, + [233633] = true, + [233635] = true, + [233637] = true, + [233644] = true, + [233645] = true, + [233646] = true, + [234062] = true, + [234063] = true, + [234064] = true, + [234065] = true, + [234066] = true, + [234068] = true, + [234069] = true, + [234070] = true, + [234071] = true, + [234072] = true, + [234073] = true, + [234075] = true, + [234077] = true, + [234078] = true, + [234081] = true, + [234082] = true, + [234084] = true, + [234087] = true, + [234088] = true, + [234090] = true, + [234091] = true, + [234093] = true, + [234094] = true, + [234095] = true, + [234098] = true, + [234099] = true, + [234100] = true, + [234102] = true, + [234103] = true, + [234105] = true, + [234106] = true, + [234107] = true, + [234108] = true, + [234109] = true, + [234110] = true, + [234111] = true, + [234114] = true, + [234117] = true, + [234120] = true, + [234123] = true, + [234146] = true, + [234147] = true, + [234148] = true, + [234149] = true, + [234150] = true, + [234156] = true, + [234157] = true, + [234161] = true, + [234162] = true, + [234163] = true, + [234164] = true, + [234165] = true, + [234166] = true, + [234167] = true, + [234168] = true, + [234171] = true, + [234173] = true, + [234174] = true, + [234962] = true, + [234963] = true, + [235047] = true, + }, + SpellHaste = { + [235874] = 2, + [236060] = 2, + [236062] = 2, + [236064] = 2, + [236077] = 1, + [236078] = 2, + [236079] = 2, + [236080] = 2, + [236081] = 2, + [236082] = 2, + [236083] = 2, + [236084] = 2, + [236085] = 1, + [236087] = 2, + [236088] = 2, + [236089] = 2, + [236090] = 2, + [236091] = 2, + [236092] = 2, + [236093] = 2, + [236094] = 2, + [236095] = 2, + [236115] = 2, + [236116] = 2, + [236117] = 2, + [236118] = 2, + [236119] = 2, + [236120] = 2, + [236121] = 2, + [236122] = 2, + [236123] = 2, + [236142] = 2, + [236143] = 2, + [236144] = 2, + [236145] = 2, + [236146] = 2, + [236147] = 2, + [236148] = 2, + [236149] = 2, + [236150] = 2, + [236151] = 1, + [236152] = 2, + [236153] = 2, + [236154] = 2, + [236155] = 2, + [236156] = 2, + [236157] = 1, + [236158] = 2, + [236159] = 2, + [236261] = 1, + [236264] = 1, + [236265] = 1, + [236267] = 2, + [236273] = 1, + [236275] = 1, + [236277] = 2, + [236289] = 1, + [236296] = 1, + [236298] = 2, + [236303] = 3, + [236305] = 4, + [236327] = 2, + [236328] = 2, + [236346] = 4, + [236347] = 2, + [236348] = 2, + [236400] = 4, + [236644] = 2, + [236645] = 1, + [240020] = 1, + [240021] = 2, + [240022] = 2, + [240039] = 2, + [240040] = 2, + [240041] = 3, + [240042] = 3, + [240043] = 3, + [240044] = 1, + [240045] = 1, + [240046] = 2, + [240047] = 3, + [240048] = 4, + [240049] = 2, + [240050] = 2, + [240051] = 2, + [240053] = 2, + [240054] = 2, + [240055] = 3, + [240056] = 3, + [240057] = 1, + [240058] = 2, + [240059] = 2, + [240092] = 2, + [240093] = 2, + [240096] = 2, + [240097] = 2, + [240098] = 3, + [240099] = 1, + [240100] = 2, + [240109] = 3, + [240110] = 3, + [240122] = 1, + [240123] = 2, + [240124] = 3, + [240125] = 1, + [240126] = 3, + [240127] = 1, + [240138] = 2, + [240139] = 2, + [240140] = 2, + [240141] = 2, + [240142] = 3, + [240143] = 2, + [240145] = 2, + [241002] = 2, + [241003] = 2, + [241006] = 2, + [241011] = 4, + [241017] = 1, + [241018] = 1, + [241031] = 1, + [241039] = 4, + [241153] = 4, + [241160] = 4, + [241161] = 3, + [241168] = 3, + [241176] = 3, + [241177] = 3, + [241181] = 4, + [241182] = 4, + [241183] = 3, + [242315] = 3, + [242317] = 3, + }, + TimewornSpellHaste = { + [234016] = 2, + [234020] = 2, + [234024] = 2, + [234028] = 2, + [234032] = 2, + }, +} Data.setNames = { AUGURS_REGALIA = "Augur's Regalia", BLOODSOUL_EMBRACE = "Bloodsoul Embrace", diff --git a/Modules/Data/DataUtils.lua b/Modules/Data/DataUtils.lua index 352c51ef..17ce273c 100644 --- a/Modules/Data/DataUtils.lua +++ b/Modules/Data/DataUtils.lua @@ -142,4 +142,18 @@ function DataUtils:GetSocketedGemsFromItemLink(itemLink) return nil end +---@return number +function DataUtils:CountTimewornItems() + local timeworn = 0 + if ECS.IsSoD then + for i = 1, 18 do + local id, _ = GetInventoryItemID("player", i) + if Data.Item.IsTimeworn[id] then + timeworn = timeworn + 1 + end + end + end + return timeworn +end + return DataUtils diff --git a/Modules/Data/SpellDamage.lua b/Modules/Data/SpellDamage.lua index 4801b5e9..970c8f5b 100755 --- a/Modules/Data/SpellDamage.lua +++ b/Modules/Data/SpellDamage.lua @@ -47,6 +47,43 @@ end ---@return string function Data:GetSpellHasteBonus() - local hasteBonus = GetCombatRatingBonus(CR_HASTE_SPELL) + local hasteBonus = GetHaste() + + -- items + local timeworn = DataUtils:CountTimewornItems() + for i = 1, 18 do + local id, _ = GetInventoryItemID("player", i) + hasteBonus = hasteBonus + (Data.Item.SpellHaste[id] or 0) + hasteBonus = hasteBonus + timeworn * (Data.Item.TimewornSpellHaste[id] or 0) + end + + -- buffs + local i = 1 + repeat + local aura = C_UnitAuras.GetBuffDataByIndex("player", i) + if aura and aura.spellId then + hasteBonus = hasteBonus + (Data.Aura.SpellHaste[aura.spellId] or 0) + end + i = i + 1 + until (not aura) + + -- debuffs + i = 1 + repeat + local aura = C_UnitAuras.GetDebuffDataByIndex("player", i) + if aura and aura.spellId then + hasteBonus = hasteBonus + (Data.Aura.SpellHaste[aura.spellId] or 0) + end + i = i + 1 + until (not aura) + + -- not stacking buffs + if ECS.IsSod then + local aura = C_UnitAuras.GetPlayerAuraBySpellID(1219557) -- Power of the Guardian + if aura then + hasteBonus = hasteBonus + 2 + end + end + return DataUtils:Round(hasteBonus, 2) .. "%" -end \ No newline at end of file +end