diff --git a/api/config.lua b/api/config.lua index 39e8c6dc..3b823d00 100644 --- a/api/config.lua +++ b/api/config.lua @@ -768,6 +768,7 @@ function pfUI:LoadConfig() pfUI:UpdateConfig("thirdparty", "twt", "dock", "0") pfUI:UpdateConfig("thirdparty", "wim", "enable", "1") pfUI:UpdateConfig("thirdparty", "healcomm", "enable", "1") + pfUI:UpdateConfig("thirdparty", "superwow", "enable", "1") pfUI:UpdateConfig("thirdparty", "sortbags", "enable", "1") pfUI:UpdateConfig("thirdparty", "bag_sort", "enable", "1") pfUI:UpdateConfig("thirdparty", "mrplow", "enable", "1") diff --git a/modules/castbar.lua b/modules/castbar.lua index d1fb219c..033e39a4 100644 --- a/modules/castbar.lua +++ b/modules/castbar.lua @@ -90,6 +90,12 @@ pfUI:RegisterModule("castbar", "vanilla:tbc", function () cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo(this.unitstr or this.unitname) end + -- read enemy casts from SuperWoW if enabled + if superwow_active and this.unitstr and not UnitIsUnit(this.unitstr, 'player') then + local _, guid = UnitExists(this.unitstr) + cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitCastingInfo(guid) + end + if cast then local duration = endTime - startTime local max = duration / 1000 diff --git a/modules/gui.lua b/modules/gui.lua index f3b49419..6bfb3356 100644 --- a/modules/gui.lua +++ b/modules/gui.lua @@ -2271,6 +2271,7 @@ pfUI:RegisterModule("gui", "vanilla:tbc", function () CreateConfig(nil, "TW Threatmeter (" .. T["Dock"] .. ")", C.thirdparty.twt, "dock", "checkbox", nil, nil, nil, nil, "vanilla") CreateConfig(nil, "WIM", C.thirdparty.wim, "enable", "checkbox", nil, nil, nil, nil, "vanilla") CreateConfig(nil, "HealComm", C.thirdparty.healcomm, "enable", "checkbox", nil, nil, nil, nil, "vanilla") + CreateConfig(nil, "SuperWoW", C.thirdparty.superwow, "enable", "checkbox", nil, nil, nil, nil, "vanilla") CreateConfig(nil, "SortBags", C.thirdparty.sortbags, "enable", "checkbox", nil, nil, nil, nil, "vanilla") CreateConfig(nil, "Bag_Sort", C.thirdparty.bag_sort, "enable", "checkbox", nil, nil, nil, nil, "tbc") CreateConfig(nil, "MrPlow", C.thirdparty.mrplow, "enable", "checkbox") diff --git a/modules/nameplates.lua b/modules/nameplates.lua index b220fb82..007964ec 100644 --- a/modules/nameplates.lua +++ b/modules/nameplates.lua @@ -892,6 +892,11 @@ pfUI:RegisterModule("nameplates", "vanilla:tbc", function () if C.nameplates["showcastbar"] == "1" and ( C.nameplates["targetcastbar"] == "0" or target ) then local cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitCastingInfo(target and "target" or name) + -- read enemy casts from SuperWoW if enabled + if superwow_active then + cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitCastingInfo(nameplate.parent:GetName(1)) + end + if not cast then nameplate.castbar:Hide() elseif cast then diff --git a/modules/thirdparty-vanilla.lua b/modules/thirdparty-vanilla.lua index ace1460d..0a73f50a 100644 --- a/modules/thirdparty-vanilla.lua +++ b/modules/thirdparty-vanilla.lua @@ -796,6 +796,49 @@ pfUI:RegisterModule("thirdparty-vanilla", "vanilla", function() end) end) + -- SuperWoW + -- Vanilla: https://github.com/balakethelock/SuperWoW + HookAddonOrVariable("SpellInfo", function() + if C.thirdparty.superwow.enable == "0" then return end + + -- add UnitGUID based casting info to libcast + local unitcast = CreateFrame("Frame") + unitcast:RegisterEvent("UNIT_CASTEVENT") + unitcast:SetScript("OnEvent", function() + if event == "UNIT_CASTEVENT" and arg3 == "START" then + -- human readable argument list + local guid = arg1 + local target = arg2 + local event_type = arg3 + local spell_id = arg4 + local timer = arg5 + local start = GetTime() + + -- get spell info from spell id + local spell, icon, _ + if SpellInfo and SpellInfo(spell_id) then + spell, _, icon = SpellInfo(spell_id) + end + + -- set fallback values + spell = spell or UNKNOWN + icon = icon or "Interface\\Icons\\INV_Misc_QuestionMark" + + -- add cast action to the database + if not libcast.db[guid] then libcast.db[guid] = {} end + libcast.db[guid].cast = spell + libcast.db[guid].rank = nil + libcast.db[guid].start = GetTime() + libcast.db[guid].casttime = timer + libcast.db[guid].icon = icon + libcast.db[guid].channel = false + + -- write state variable + superwow_active = true + end + end) + end) + -- SortBags -- Vanilla: https://github.com/shirsig/SortBags-vanilla HookAddonOrVariable("SortBags", function()