|
|
@ -1,9 +1,9 @@ |
|
|
|
local Tinkr = ... |
|
|
|
local Tinkr = ... |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local Evaulator = Tinkr.Evaluator |
|
|
|
|
|
|
|
|
|
|
|
---@class Bastion |
|
|
|
---@class Bastion |
|
|
|
local Bastion = { |
|
|
|
local Bastion = {DebugMode = false} |
|
|
|
DebugMode = false |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Bastion.__index = Bastion |
|
|
|
Bastion.__index = Bastion |
|
|
|
|
|
|
|
|
|
|
|
function Bastion:Require(file) |
|
|
|
function Bastion:Require(file) |
|
|
@ -50,6 +50,9 @@ function Bastion.require(class) |
|
|
|
return Bastion:Require("~/src/" .. class .. "/" .. class) |
|
|
|
return Bastion:Require("~/src/" .. class .. "/" .. class) |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- fenv for all required files |
|
|
|
|
|
|
|
function Bastion.Bootstrap() |
|
|
|
|
|
|
|
|
|
|
|
Bastion.Globals = {} |
|
|
|
Bastion.Globals = {} |
|
|
|
|
|
|
|
|
|
|
|
---@type ClassMagic |
|
|
|
---@type ClassMagic |
|
|
@ -59,7 +62,8 @@ Bastion.List = Bastion.require("List") |
|
|
|
---@type Library |
|
|
|
---@type Library |
|
|
|
Bastion.Library = Bastion.require("Library") |
|
|
|
Bastion.Library = Bastion.require("Library") |
|
|
|
---@type NotificationsList, Notification |
|
|
|
---@type NotificationsList, Notification |
|
|
|
Bastion.NotificationsList, Bastion.Notification = Bastion.require("NotificationsList") |
|
|
|
Bastion.NotificationsList, Bastion.Notification = Bastion.require( |
|
|
|
|
|
|
|
"NotificationsList") |
|
|
|
---@type Vector3 |
|
|
|
---@type Vector3 |
|
|
|
Bastion.Vector3 = Bastion.require("Vector3") |
|
|
|
Bastion.Vector3 = Bastion.require("Vector3") |
|
|
|
---@type Sequencer |
|
|
|
---@type Sequencer |
|
|
@ -115,15 +119,15 @@ local MODULES = {} |
|
|
|
|
|
|
|
|
|
|
|
Bastion.Enabled = false |
|
|
|
Bastion.Enabled = false |
|
|
|
|
|
|
|
|
|
|
|
Bastion.Globals.EventManager:RegisterWoWEvent('UNIT_AURA', function(unit, auras) |
|
|
|
Bastion.Globals.EventManager:RegisterWoWEvent('UNIT_AURA', |
|
|
|
|
|
|
|
function(unit, auras) |
|
|
|
local u = Bastion.UnitManager[unit] |
|
|
|
local u = Bastion.UnitManager[unit] |
|
|
|
|
|
|
|
|
|
|
|
if u then |
|
|
|
if u then u:GetAuras():OnUpdate(auras) end |
|
|
|
u:GetAuras():OnUpdate(auras) |
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
end) |
|
|
|
end) |
|
|
|
|
|
|
|
|
|
|
|
Bastion.Globals.EventManager:RegisterWoWEvent("UNIT_SPELLCAST_SUCCEEDED", function(...) |
|
|
|
Bastion.Globals.EventManager:RegisterWoWEvent("UNIT_SPELLCAST_SUCCEEDED", |
|
|
|
|
|
|
|
function(...) |
|
|
|
local unit, castGUID, spellID = ... |
|
|
|
local unit, castGUID, spellID = ... |
|
|
|
|
|
|
|
|
|
|
|
local spell = Bastion.Globals.SpellBook:GetIfRegistered(spellID) |
|
|
|
local spell = Bastion.Globals.SpellBook:GetIfRegistered(spellID) |
|
|
@ -140,7 +144,8 @@ end) |
|
|
|
local pguid = UnitGUID("player") |
|
|
|
local pguid = UnitGUID("player") |
|
|
|
local missed = {} |
|
|
|
local missed = {} |
|
|
|
|
|
|
|
|
|
|
|
Bastion.Globals.EventManager:RegisterWoWEvent("COMBAT_LOG_EVENT_UNFILTERED", function() |
|
|
|
Bastion.Globals.EventManager:RegisterWoWEvent("COMBAT_LOG_EVENT_UNFILTERED", |
|
|
|
|
|
|
|
function() |
|
|
|
local args = {CombatLogGetCurrentEventInfo()} |
|
|
|
local args = {CombatLogGetCurrentEventInfo()} |
|
|
|
|
|
|
|
|
|
|
|
local subEvent = args[2] |
|
|
|
local subEvent = args[2] |
|
|
@ -161,14 +166,13 @@ Bastion.Globals.EventManager:RegisterWoWEvent("COMBAT_LOG_EVENT_UNFILTERED", fun |
|
|
|
|
|
|
|
|
|
|
|
local t = GetTime() |
|
|
|
local t = GetTime() |
|
|
|
|
|
|
|
|
|
|
|
if u then |
|
|
|
if u then u:SetLastCombatTime(t) end |
|
|
|
u:SetLastCombatTime(t) |
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if u2 then |
|
|
|
if u2 then |
|
|
|
u2:SetLastCombatTime(t) |
|
|
|
u2:SetLastCombatTime(t) |
|
|
|
|
|
|
|
|
|
|
|
if subEvent == "SPELL_MISSED" and sourceGUID == pguid and spellID == 408 then |
|
|
|
if subEvent == "SPELL_MISSED" and sourceGUID == pguid and spellID == |
|
|
|
|
|
|
|
408 then |
|
|
|
local missType = args[15] |
|
|
|
local missType = args[15] |
|
|
|
|
|
|
|
|
|
|
|
if missType == "IMMUNE" then |
|
|
|
if missType == "IMMUNE" then |
|
|
@ -187,15 +191,14 @@ end) |
|
|
|
Bastion.Ticker = C_Timer.NewTicker(0.1, function() |
|
|
|
Bastion.Ticker = C_Timer.NewTicker(0.1, function() |
|
|
|
if not Bastion.CombatTimer:IsRunning() and UnitAffectingCombat("player") then |
|
|
|
if not Bastion.CombatTimer:IsRunning() and UnitAffectingCombat("player") then |
|
|
|
Bastion.CombatTimer:Start() |
|
|
|
Bastion.CombatTimer:Start() |
|
|
|
elseif Bastion.CombatTimer:IsRunning() and not UnitAffectingCombat("player") then |
|
|
|
elseif Bastion.CombatTimer:IsRunning() and |
|
|
|
|
|
|
|
not UnitAffectingCombat("player") then |
|
|
|
Bastion.CombatTimer:Reset() |
|
|
|
Bastion.CombatTimer:Reset() |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
if Bastion.Enabled then |
|
|
|
if Bastion.Enabled then |
|
|
|
Bastion.ObjectManager:Refresh() |
|
|
|
Bastion.ObjectManager:Refresh() |
|
|
|
for i = 1, #MODULES do |
|
|
|
for i = 1, #MODULES do MODULES[i]:Tick() end |
|
|
|
MODULES[i]:Tick() |
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
end |
|
|
|
end |
|
|
|
end) |
|
|
|
end) |
|
|
|
|
|
|
|
|
|
|
@ -207,9 +210,7 @@ end |
|
|
|
-- Find a module by name |
|
|
|
-- Find a module by name |
|
|
|
function Bastion:FindModule(name) |
|
|
|
function Bastion:FindModule(name) |
|
|
|
for i = 1, #MODULES do |
|
|
|
for i = 1, #MODULES do |
|
|
|
if MODULES[i].name == name then |
|
|
|
if MODULES[i].name == name then return MODULES[i] end |
|
|
|
return MODULES[i] |
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
return nil |
|
|
|
return nil |
|
|
@ -218,21 +219,15 @@ end |
|
|
|
function Bastion:Print(...) |
|
|
|
function Bastion:Print(...) |
|
|
|
local args = {...} |
|
|
|
local args = {...} |
|
|
|
local str = "|cFFDF362D[Bastion]|r |cFFFFFFFF" |
|
|
|
local str = "|cFFDF362D[Bastion]|r |cFFFFFFFF" |
|
|
|
for i = 1, #args do |
|
|
|
for i = 1, #args do str = str .. tostring(args[i]) .. " " end |
|
|
|
str = str .. tostring(args[i]) .. " " |
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
print(str) |
|
|
|
print(str) |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
function Bastion:Debug(...) |
|
|
|
function Bastion:Debug(...) |
|
|
|
if not Bastion.DebugMode then |
|
|
|
if not Bastion.DebugMode then return end |
|
|
|
return |
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
local args = {...} |
|
|
|
local args = {...} |
|
|
|
local str = "|cFFDF6520[Bastion]|r |cFFFFFFFF" |
|
|
|
local str = "|cFFDF6520[Bastion]|r |cFFFFFFFF" |
|
|
|
for i = 1, #args do |
|
|
|
for i = 1, #args do str = str .. tostring(args[i]) .. " " end |
|
|
|
str = str .. tostring(args[i]) .. " " |
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
print(str) |
|
|
|
print(str) |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
@ -259,21 +254,35 @@ end) |
|
|
|
Command:Register('dumpspells', 'Dump spells to a file', function() |
|
|
|
Command:Register('dumpspells', 'Dump spells to a file', function() |
|
|
|
local i = 1 |
|
|
|
local i = 1 |
|
|
|
local rand = math.random(100000, 999999) |
|
|
|
local rand = math.random(100000, 999999) |
|
|
|
|
|
|
|
local BOOKTYPE_SPELL = BOOKTYPE_SPELL or (Enum.SpellBookSpellBank.Player and Enum.SpellBookSpellBank.Player or 'spell') |
|
|
|
while true do |
|
|
|
while true do |
|
|
|
local spellName, spellSubName = GetSpellBookItemName(i, BOOKTYPE_SPELL) |
|
|
|
local spellName, spellSubName |
|
|
|
if not spellName then |
|
|
|
|
|
|
|
do |
|
|
|
if C_SpellBook.GetSpellBookItemName then |
|
|
|
break |
|
|
|
spellName, spellSubName = C_SpellBook.GetSpellBookItemName(i, BOOKTYPE_SPELL) |
|
|
|
end |
|
|
|
else |
|
|
|
|
|
|
|
spellName, spellSubName = GetSpellBookItemName(i, BOOKTYPE_SPELL) |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not spellName then do break end end |
|
|
|
|
|
|
|
|
|
|
|
-- use spellName and spellSubName here |
|
|
|
-- use spellName and spellSubName here |
|
|
|
local spellID = select(7, GetSpellInfo(spellName)) |
|
|
|
local spellID |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if C_Spell.GetSpellInfo then |
|
|
|
|
|
|
|
local info = C_Spell.GetSpellInfo(spellName) |
|
|
|
|
|
|
|
spellID = info.spellID |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
spellID = select(7, GetSpellInfo(spellName)) |
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
if spellID then |
|
|
|
if spellID then |
|
|
|
spellName = spellName:gsub("[%W%s]", "") |
|
|
|
spellName = spellName:gsub("[%W%s]", "") |
|
|
|
WriteFile('bastion-' .. UnitClass('player') .. '-' .. rand .. '.lua', |
|
|
|
WriteFile('bastion-' .. UnitClass('player') .. '-' .. rand .. |
|
|
|
"local " .. spellName .. " = Bastion.Globals.SpellBook:GetSpell(" .. spellID .. ")\n", true) |
|
|
|
'.lua', |
|
|
|
|
|
|
|
"local " .. spellName .. |
|
|
|
|
|
|
|
" = Bastion.Globals.SpellBook:GetSpell(" .. |
|
|
|
|
|
|
|
spellID .. ")\n", true) |
|
|
|
end |
|
|
|
end |
|
|
|
i = i + 1 |
|
|
|
i = i + 1 |
|
|
|
end |
|
|
|
end |
|
|
@ -297,13 +306,16 @@ Command:Register('mplus', 'Toggle m+ module on/off', function(args) |
|
|
|
local cmd = args[2] |
|
|
|
local cmd = args[2] |
|
|
|
if cmd == 'debuffs' then |
|
|
|
if cmd == 'debuffs' then |
|
|
|
Bastion.MythicPlusUtils:ToggleDebuffLogging() |
|
|
|
Bastion.MythicPlusUtils:ToggleDebuffLogging() |
|
|
|
Bastion:Print("Debuff logging", Bastion.MythicPlusUtils.debuffLogging and "enabled" or "disabled") |
|
|
|
Bastion:Print("Debuff logging", Bastion.MythicPlusUtils |
|
|
|
|
|
|
|
.debuffLogging and "enabled" or "disabled") |
|
|
|
return |
|
|
|
return |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
if cmd == 'casts' then |
|
|
|
if cmd == 'casts' then |
|
|
|
Bastion.MythicPlusUtils:ToggleCastLogging() |
|
|
|
Bastion.MythicPlusUtils:ToggleCastLogging() |
|
|
|
Bastion:Print("Cast logging", Bastion.MythicPlusUtils.castLogging and "enabled" or "disabled") |
|
|
|
Bastion:Print("Cast logging", |
|
|
|
|
|
|
|
Bastion.MythicPlusUtils.castLogging and "enabled" or |
|
|
|
|
|
|
|
"disabled") |
|
|
|
return |
|
|
|
return |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
@ -313,10 +325,9 @@ Command:Register('mplus', 'Toggle m+ module on/off', function(args) |
|
|
|
Bastion:Print("casts") |
|
|
|
Bastion:Print("casts") |
|
|
|
end) |
|
|
|
end) |
|
|
|
|
|
|
|
|
|
|
|
Command:Register('missed', 'Dump the list of immune kidney shot spells', function() |
|
|
|
Command:Register('missed', 'Dump the list of immune kidney shot spells', |
|
|
|
for k, v in pairs(missed) do |
|
|
|
function() |
|
|
|
Bastion:Print(k) |
|
|
|
for k, v in pairs(missed) do Bastion:Print(k) end |
|
|
|
end |
|
|
|
|
|
|
|
end) |
|
|
|
end) |
|
|
|
|
|
|
|
|
|
|
|
---@param library Library |
|
|
|
---@param library Library |
|
|
@ -333,13 +344,16 @@ function Bastion:CheckLibraryDependencies() |
|
|
|
if LIBRARIES[dep].dependencies then |
|
|
|
if LIBRARIES[dep].dependencies then |
|
|
|
for j = 1, #LIBRARIES[dep].dependencies do |
|
|
|
for j = 1, #LIBRARIES[dep].dependencies do |
|
|
|
if LIBRARIES[dep].dependencies[j] == v.name then |
|
|
|
if LIBRARIES[dep].dependencies[j] == v.name then |
|
|
|
Bastion:Print("Circular dependency detected between " .. v.name .. " and " .. dep) |
|
|
|
Bastion:Print( |
|
|
|
|
|
|
|
"Circular dependency detected between " .. |
|
|
|
|
|
|
|
v.name .. " and " .. dep) |
|
|
|
return false |
|
|
|
return false |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
else |
|
|
|
else |
|
|
|
Bastion:Print("Library " .. v.name .. " depends on " .. dep .. " but it's not registered") |
|
|
|
Bastion:Print("Library " .. v.name .. " depends on " .. |
|
|
|
|
|
|
|
dep .. " but it's not registered") |
|
|
|
return false |
|
|
|
return false |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
@ -352,9 +366,7 @@ end |
|
|
|
function Bastion:Import(library) |
|
|
|
function Bastion:Import(library) |
|
|
|
local lib = self:GetLibrary(library) |
|
|
|
local lib = self:GetLibrary(library) |
|
|
|
|
|
|
|
|
|
|
|
if not lib then |
|
|
|
if not lib then error("Library " .. library .. " not found") end |
|
|
|
error("Library " .. library .. " not found") |
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return lib:Resolve() |
|
|
|
return lib:Resolve() |
|
|
|
end |
|
|
|
end |
|
|
@ -395,3 +407,6 @@ end |
|
|
|
Load("@Libraries/") |
|
|
|
Load("@Libraries/") |
|
|
|
Load("@Modules/") |
|
|
|
Load("@Modules/") |
|
|
|
Load("@") |
|
|
|
Load("@") |
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bastion.Bootstrap() |
|
|
|