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.
153 lines
5.7 KiB
153 lines
5.7 KiB
---@class DBMCoreNamespace
|
|
local private = select(2, ...)
|
|
|
|
local isRetail = WOW_PROJECT_ID == (WOW_PROJECT_MAINLINE or 1)
|
|
|
|
---@class DevToolsModule: DBMModule
|
|
local module = private:NewModule("DevToolsModule")
|
|
|
|
---@class DBM
|
|
local DBM = private:GetPrototype("DBM")
|
|
|
|
function module:OnModuleLoad()
|
|
self:OnDebugToggle()
|
|
end
|
|
|
|
do
|
|
--Debug Mode
|
|
local eventsRegistered = false
|
|
local UnitName, UnitExists = UnitName, UnitExists
|
|
function module:UNIT_TARGETABLE_CHANGED(uId)
|
|
local transcriptor = _G["Transcriptor"]
|
|
if DBM.Options.DebugLevel > 2 or (transcriptor and transcriptor:IsLogging()) then
|
|
local active = UnitExists(uId) and "true" or "false"
|
|
DBM:Debug("UNIT_TARGETABLE_CHANGED event fired for "..UnitName(uId)..". Active: "..active)
|
|
end
|
|
end
|
|
|
|
function module:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
|
|
local spellName = DBM:GetSpellName(spellId)
|
|
DBM:Debug("UNIT_SPELLCAST_SUCCEEDED fired: "..UnitName(uId).."'s "..spellName.."("..spellId..")", 3)
|
|
end
|
|
|
|
--Spammy events that core doesn't otherwise need are now dynamically registered/unregistered based on whether or not user is actually debugging
|
|
function module:OnDebugToggle()
|
|
if DBM.Options.DebugMode and not eventsRegistered then
|
|
eventsRegistered = true
|
|
if isRetail then
|
|
self:RegisterShortTermEvents("UNIT_SPELLCAST_SUCCEEDED boss1 boss2 boss3 boss4 boss5", "UNIT_TARGETABLE_CHANGED")
|
|
else--No Boss unit Ids in classic, register backups
|
|
self:RegisterShortTermEvents("UNIT_SPELLCAST_SUCCEEDED target focus", "UNIT_TARGETABLE_CHANGED")
|
|
end
|
|
elseif not DBM.Options.DebugMode and eventsRegistered then
|
|
eventsRegistered = false
|
|
self:UnregisterShortTermEvents()
|
|
end
|
|
end
|
|
|
|
---Utility function for debugging DBM and blizzard events
|
|
---@param text string|number
|
|
---@param level number? Level 1: non spammy events. Level 2: mildly spammy events. Level 3: very spammy events.
|
|
---@param useSound boolean? Play 'ding' sound when displaying message
|
|
---@param alwaysFireEvent boolean? Used specifically for transcriptor logging
|
|
function DBM:Debug(text, level, useSound, alwaysFireEvent)
|
|
--Still fire debug callbacks for transcriptor even if user level debug is not enabled
|
|
--Cap debug level to 2 for transcriptor unless user specifically specifies 3
|
|
if (DBM.Options and DBM.Options.DebugLevel == 3) or (level or 1) < 3 or alwaysFireEvent then
|
|
DBM:FireEvent("DBM_Debug", text, level)
|
|
end
|
|
if not DBM.Options or not DBM.Options.DebugMode then return end
|
|
if (level or 1) <= DBM.Options.DebugLevel then
|
|
local frame = _G[tostring(DBM.Options.ChatFrame)]
|
|
frame = frame and frame:IsShown() and frame or DEFAULT_CHAT_FRAME
|
|
frame:AddMessage("|cffff7d0aDBM Debug:|r "..text, 1, 1, 1)
|
|
end
|
|
if DBM.Options.DebugSound and useSound then
|
|
DBM:PlaySoundFile(567458)--"Ding"
|
|
end
|
|
end
|
|
end
|
|
|
|
do
|
|
local EJ_SetDifficulty, EJ_GetEncounterInfoByIndex = EJ_SetDifficulty, EJ_GetEncounterInfoByIndex
|
|
---Used to scan a range of instance IDs to find right one.
|
|
---<br>Returns GetRealZoneText for entire range
|
|
---@param low number?
|
|
---@param peak number?
|
|
---@param contains string?
|
|
function DBM:FindDungeonMapIDs(low, peak, contains)
|
|
local start = low or 1
|
|
local range = peak or 4000
|
|
DBM:AddMsg("-----------------")
|
|
for i = start, range do
|
|
local dungeon = GetRealZoneText(i)
|
|
if dungeon and dungeon ~= "" then
|
|
if not contains or contains and dungeon:find(contains) then
|
|
DBM:AddMsg(i..": "..dungeon)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
---Used to scan a range of journal IDs to find right one.
|
|
---<br>Returns EJ_GetInstanceInfo for entire range
|
|
---@param low number?
|
|
---@param peak number?
|
|
---@param contains string?
|
|
function DBM:FindInstanceIDs(low, peak, contains)
|
|
local start = low or 1
|
|
local range = peak or 3000
|
|
DBM:AddMsg("-----------------")
|
|
for i = start, range do
|
|
local instance = EJ_GetInstanceInfo(i)
|
|
if instance then
|
|
if not contains or contains and instance:find(contains) then
|
|
DBM:AddMsg(i..": "..instance)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
---Used to scan a range of instance queue IDs to find right one.
|
|
---<br>Returns GetDungeonInfo for entire range
|
|
---@param low number?
|
|
---@param peak number?
|
|
---@param contains string?
|
|
function DBM:FindScenarioIDs(low, peak, contains)
|
|
local start = low or 1
|
|
local range = peak or 3000
|
|
DBM:AddMsg("-----------------")
|
|
for i = start, range do
|
|
local instance = DBM:GetDungeonInfo(i)
|
|
if instance and (not contains or contains and instance:find(contains)) then
|
|
DBM:AddMsg(i..": "..instance)
|
|
end
|
|
end
|
|
end
|
|
|
|
--/run DBM:FindEncounterIDs(1192)--Shadowlands
|
|
--/run DBM:FindEncounterIDs(1178, 23)--Dungeon Template (mythic difficulty)
|
|
--/run DBM:FindEncounterIDs(237, 1)--Classic Dungeons need diff 1 specified
|
|
--/run DBM:FindDungeonMapIDs(1, 500)--Find Classic Dungeon Map IDs
|
|
--/run DBM:FindInstanceIDs(1, 300)--Find Classic Dungeon Journal IDs
|
|
function DBM:FindEncounterIDs(instanceID, diff)
|
|
if not instanceID then
|
|
DBM:AddMsg("Error: Function requires instanceID be provided")
|
|
end
|
|
if not isRetail then
|
|
DBM:AddMsg("Error: There is no Dungeon Journal in classic")
|
|
end
|
|
if not diff then diff = 14 end--Default to "normal" in 6.0+ if diff arg not given.
|
|
EJ_SetDifficulty(diff)--Make sure it's set to right difficulty or it'll ignore mobs (ie ra-den if it's not set to heroic). Use user specified one as primary, with curernt zone difficulty as fallback
|
|
DBM:AddMsg("-----------------")
|
|
for i=1, 25 do
|
|
local name, _, encounterID = EJ_GetEncounterInfoByIndex(i, instanceID)
|
|
if name then
|
|
DBM:AddMsg(encounterID..": "..name)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--Taint the script that disables /run /dump, etc
|
|
--ScriptsDisallowedForBeta = function() return false end
|
|
|