forked from Bastion/Bastion
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
205 lines
9.3 KiB
205 lines
9.3 KiB
local Tinkr, Bastion = ...
|
|
|
|
---@class MythicPlusUtils
|
|
local MythicPlusUtils = {
|
|
debuffLogging = false,
|
|
castLogging = false,
|
|
random = '',
|
|
loggedCasts = {},
|
|
loggedDebuffs = {},
|
|
kickList = {},
|
|
}
|
|
|
|
MythicPlusUtils.__index = MythicPlusUtils
|
|
|
|
---@return MythicPlusUtils
|
|
function MythicPlusUtils:New()
|
|
local self = setmetatable({}, MythicPlusUtils)
|
|
|
|
self.random = math.random(1000000, 9999999)
|
|
self.kickList = {
|
|
-- Algeth'ar Academy
|
|
[396812] = { true, true }, -- https://www.wowhead.com/spell=396812/mystic-blast
|
|
[388392] = { true, true }, -- https://www.wowhead.com/spell=388392/monotonous-lecture
|
|
[388863] = { true, true }, -- https://www.wowhead.com/spell=388863/mana-void
|
|
[388862] = { true, true }, -- https://www.wowhead.com/spell=388862/surge
|
|
[377389] = { true, true }, -- https://www.wowhead.com/spell=377389/call-of-the-flock
|
|
[388623] = { true, true }, -- https://www.wowhead.com/spell=388623/branch-out
|
|
[396640] = { true, true }, -- https://www.wowhead.com/spell=396640/healing-touch
|
|
[387975] = { true, true }, -- https://www.wowhead.com/spell=387975/arcane-missiles
|
|
[387843] = { true, true }, -- https://www.wowhead.com/spell=387843/astral-bomb
|
|
-- Court of Stars
|
|
[211401] = { true, true }, -- https://www.wowhead.com/spell=211401/drifting-embers
|
|
[207980] = { true, true }, -- https://www.wowhead.com/spell=207980/disintegration-beam
|
|
[208165] = { true, true }, -- https://www.wowhead.com/spell=208165/withering-soul
|
|
[207881] = { true, true }, -- https://www.wowhead.com/spell=207881/infernal-eruption
|
|
[209413] = { true, false }, -- https://www.wowhead.com/spell=209413/suppress
|
|
[209485] = { true, true }, -- https://www.wowhead.com/spell=209485/drain-magic
|
|
[209410] = { true, true }, -- https://www.wowhead.com/spell=209410/nightfall-orb
|
|
[211470] = { true, true }, -- https://www.wowhead.com/spell=211470/bewitch
|
|
[225100] = { true, false }, -- https://www.wowhead.com/spell=225100/charging-station
|
|
[211299] = { true, false }, -- https://www.wowhead.com/spell=211299/searing-glare
|
|
-- Halls of Valor
|
|
[198595] = { true, true }, -- https://www.wowhead.com/spell=198595/thunderous-bolt
|
|
[198959] = { true, true }, -- https://www.wowhead.com/spell=198959/etch
|
|
[215433] = { true, true }, -- https://www.wowhead.com/spell=215433/holy-radiance
|
|
[192288] = { true, true }, -- https://www.wowhead.com/spell=192288/searing-light
|
|
[199726] = { true, true }, -- https://www.wowhead.com/spell=199726/unruly-yell
|
|
[198750] = { true, true }, -- https://www.wowhead.com/spell=198750/surge
|
|
[198934] = { true, true }, -- https://www.wowhead.com/spell=198934/rune-of-healing
|
|
[192563] = { true, true }, -- https://www.wowhead.com/spell=192563/cleansing-flames
|
|
-- Ruby Life Pools
|
|
[372749] = { true, true }, -- https://www.wowhead.com/spell=372749/ice-shield
|
|
-- [373803] = { true, true }, -- https://www.wowhead.com/spell=373803/cold-claws
|
|
[373017] = { true, true }, -- https://www.wowhead.com/spell=373017/roaring-blaze
|
|
[392398] = { true, true }, -- https://www.wowhead.com/spell=392398/crackling-detonation
|
|
[392451] = { true, true }, -- https://www.wowhead.com/spell=392451/flashfire
|
|
[385310] = { true, true }, -- https://www.wowhead.com/spell=385310/lightning-bolt
|
|
[384194] = { true, true }, -- https://www.wowhead.com/spell=384194/cinderbolt
|
|
[373680] = { true, false }, -- https://www.wowhead.com/spell=373680/frost-overload
|
|
-- Shadowmoon Burial Grounds
|
|
[152818] = { true, true }, -- https://www.wowhead.com/spell=152818/shadow-mend
|
|
[156776] = { true, true }, -- https://www.wowhead.com/spell=156776/rending-voidlash
|
|
[156722] = { true, true }, -- https://www.wowhead.com/spell=156722/void-bolt
|
|
[398206] = { true, true }, -- https://www.wowhead.com/spell=398206/death-blast
|
|
[153524] = { true, true }, -- https://www.wowhead.com/spell=153524/plague-spit
|
|
[156718] = { true, true }, -- https://www.wowhead.com/spell=156718/necrotic-burst
|
|
-- Temple of the Jade Serpent
|
|
[397888] = { true, false }, -- https://www.wowhead.com/spell=397888/hydrolance
|
|
[395859] = { true, true }, -- https://www.wowhead.com/spell=395859/haunting-scream
|
|
[396073] = { true, true }, -- https://www.wowhead.com/spell=396073/cat-nap
|
|
[397914] = { true, true }, -- https://www.wowhead.com/spell=397914/defiling-mist
|
|
[397899] = { false, true }, -- https://www.wowhead.com/spell=397899/leg-sweep
|
|
[397801] = { true, false }, -- https://www.wowhead.com/spell=397801/hydrolance
|
|
[395872] = { true, true }, -- https://www.wowhead.com/spell=395872/sleepy-soliloquy
|
|
-- The Azure Vault
|
|
[375602] = { true, true }, -- https://www.wowhead.com/spell=375602/erratic-growth
|
|
[387564] = { true, true }, -- https://www.wowhead.com/spell=387564/mystic-vapors
|
|
[373932] = { true, true }, -- https://www.wowhead.com/spell=373932/illusionary-bolt
|
|
[386546] = { true, true }, -- https://www.wowhead.com/spell=386546/waking-bane
|
|
[389804] = { true, true }, -- https://www.wowhead.com/spell=389804/heavy-tome
|
|
[377488] = { true, true }, -- https://www.wowhead.com/spell=377488/icy-bindings
|
|
[377503] = { true, true }, -- https://www.wowhead.com/spell=377503/condensed-frost
|
|
[375596] = { true, true }, -- https://www.wowhead.com/spell=375596/erratic-growth
|
|
-- NO
|
|
[384365] = { true, true }, -- https://www.wowhead.com/spell=384365/disruptive-shout
|
|
[386012] = { true, false }, -- https://www.wowhead.com/spell=386012/stormbolt
|
|
[386024] = { true, true }, -- https://www.wowhead.com/spell=386024/tempest
|
|
[387411] = { true, true }, -- https://www.wowhead.com/spell=387411/death-bolt-volley
|
|
[387606] = { true, true }, -- https://www.wowhead.com/spell=387606/dominate
|
|
[373395] = { true, true }, -- https://www.wowhead.com/spell=373395/bloodcurdling-shout
|
|
[376725] = { true, true }, -- https://www.wowhead.com/spell=376725/storm-bolt
|
|
[384808] = { true, true }, -- https://www.wowhead.com/spell=384808/guardian-wind
|
|
-- [363607] = {true, true}, -- https://www.wowhead.com/spell=363607/domination-bolt
|
|
}
|
|
|
|
Bastion.EventManager:RegisterWoWEvent('UNIT_AURA', function(unit, auras)
|
|
if not self.debuffLogging then
|
|
return
|
|
end
|
|
|
|
if auras.addedAuras then
|
|
local addedAuras = auras.addedAuras
|
|
|
|
if #addedAuras > 0 then
|
|
for i = 1, #addedAuras do
|
|
local aura = Bastion.Aura:CreateFromUnitAuraInfo(addedAuras[i])
|
|
|
|
if not self.loggedDebuffs[aura:GetSpell():GetID()] and not aura:IsBuff() then
|
|
WriteFile('bastion-MPlusDebuffs-' .. self.random .. '.lua', [[
|
|
AuraName: ]] .. aura:GetName() .. [[
|
|
AuraID: ]] .. aura:GetSpell():GetID() .. "\n" .. [[
|
|
]], true)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
Bastion.EventManager:RegisterWoWEvent('UNIT_SPELLCAST_START', function(unitTarget, castGUID, spellID)
|
|
if not self.castLogging then
|
|
return
|
|
end
|
|
|
|
if self.loggedCasts[spellID] then
|
|
return
|
|
end
|
|
|
|
local name = GetSpellInfo(spellID)
|
|
|
|
self.loggedCasts[spellID] = true
|
|
|
|
WriteFile('bastion-MPlusCasts-' .. self.random .. '.lua', [[
|
|
CastName: ]] .. name .. [[
|
|
CastID: ]] .. spellID .. "\n" .. [[
|
|
]], true)
|
|
end)
|
|
|
|
Bastion.EventManager:RegisterWoWEvent('UNIT_SPELLCAST_CHANNEL_START', function(unitTarget, castGUID, spellID)
|
|
if not self.castLogging then
|
|
return
|
|
end
|
|
|
|
if self.loggedCasts[spellID] then
|
|
return
|
|
end
|
|
|
|
local name = GetSpellInfo(spellID)
|
|
|
|
self.loggedCasts[spellID] = true
|
|
|
|
WriteFile('bastion-MPlusCasts-' .. self.random .. '.lua', [[
|
|
CastName: ]] .. name .. [[
|
|
CastID: ]] .. spellID .. "\n" .. [[
|
|
]], true)
|
|
end)
|
|
|
|
return self
|
|
end
|
|
|
|
---@return nil
|
|
function MythicPlusUtils:ToggleDebuffLogging()
|
|
self.debuffLogging = not self.debuffLogging
|
|
end
|
|
|
|
---@return nil
|
|
function MythicPlusUtils:ToggleCastLogging()
|
|
self.castLogging = not self.castLogging
|
|
end
|
|
|
|
---@param unit Unit
|
|
---@param percent number
|
|
---@return boolean
|
|
function MythicPlusUtils:CastingCriticalKick(unit, percent)
|
|
local castingSpell = unit:GetCastingOrChannelingSpell()
|
|
|
|
if castingSpell then
|
|
local spellID = castingSpell:GetID()
|
|
local isKick = unpack(self.kickList[spellID] or { false, false })
|
|
|
|
if isKick and unit:IsInterruptibleAt(percent) then
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
---@param unit Unit
|
|
---@param percent number
|
|
---@return boolean
|
|
function MythicPlusUtils:CastingCriticalStun(unit, percent)
|
|
local castingSpell = unit:GetCastingOrChannelingSpell()
|
|
|
|
if castingSpell then
|
|
local spellID = castingSpell:GetID()
|
|
local _, isStun = unpack(self.kickList[spellID] or { false, false })
|
|
if isStun and unit:IsInterruptibleAt(percent, true) then
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
return MythicPlusUtils
|
|
|