193 lines
6.7 KiB
Lua
193 lines
6.7 KiB
Lua
-- No superwow, no superapi
|
|
local version = tonumber(SUPERWOW_VERSION)
|
|
|
|
if not version or version < 2.2 then
|
|
StaticPopupDialogs["UPDATE_SUPERWOW"] = {
|
|
text = "No SuperWoW detected. Please download latest version.",
|
|
button1 = "Download",
|
|
button2 = TEXT(IGNORE),
|
|
OnAccept = function(data)
|
|
local url = "https://github.com/balakethelock/SuperWoW/releases/tag/Release"
|
|
|
|
if not ChatFrameEditBox:IsVisible() then
|
|
ChatFrameEditBox:Show()
|
|
end
|
|
|
|
ChatFrameEditBox:SetText(url)
|
|
ChatFrameEditBox:SetFocus()
|
|
ChatFrameEditBox:HighlightText()
|
|
end,
|
|
timeout = 0,
|
|
exclusive = 1,
|
|
whileDead = 1,
|
|
hideOnEscape = 1
|
|
};
|
|
|
|
DEFAULT_CHAT_FRAME:AddMessage("No SuperWoW detected. Please download latest version https://github.com/balakethelock/SuperWoW ");
|
|
StaticPopup_Show("UPDATE_SUPERWOW");
|
|
return
|
|
end
|
|
|
|
SUPERAPI_ContainerItemsTable = {}
|
|
|
|
SuperAPI = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceDebug-2.0", "AceModuleCore-2.0", "AceConsole-2.0", "AceDB-2.0", "AceHook-2.1")
|
|
SuperAPI:RegisterDB("SuperAPIDB")
|
|
SuperAPI.frame = CreateFrame("Frame", "SuperAPI", UIParent)
|
|
|
|
function SuperAPI:OnEnable()
|
|
-- Let macro frame allow 511 characters
|
|
MacroFrame_LoadUI();
|
|
MacroFrameText:SetMaxLetters(511);
|
|
MACROFRAME_CHAR_LIMIT = "%d/511 Characters Used";
|
|
|
|
-- Change chat bubbles options name
|
|
OPTION_TOOLTIP_PARTY_CHAT_BUBBLES = "Shows whisper, party, raid, and battleground chat text in speech bubbles above characters' heads.";
|
|
PARTY_CHAT_BUBBLES_TEXT = "Show Whisper and Group Chat Bubbles";
|
|
|
|
SuperAPI.SetItemRefOriginal = SetItemRef
|
|
SuperAPI.SpellButton_OnClickOriginal = SpellButton_OnClick
|
|
SuperAPI.SetItemButtonCountOriginal = SetItemButtonCount
|
|
SuperAPI.SetActionOriginal = GameTooltip.SetAction
|
|
SuperAPI.UnitFrame_OnEnterOriginal = UnitFrame_OnEnter
|
|
SuperAPI.UnitFrame_OnLeaveOriginal = UnitFrame_OnLeave
|
|
SuperAPI.CombatText_AddMessageOriginal = CombatText_AddMessage
|
|
SuperAPI.QuestLogTitleButton_OnClickOriginal = QuestLogTitleButton_OnClick
|
|
|
|
-- activate hooks
|
|
SetItemRef = SuperAPI.SetItemRef
|
|
SpellButton_OnClick = SuperAPI.SpellButton_OnClick
|
|
SetItemButtonCount = SuperAPI.SetItemButtonCount
|
|
GameTooltip.SetAction = SuperAPI.SetAction
|
|
UnitFrame_OnEnter = SuperAPI.UnitFrame_OnEnter
|
|
UnitFrame_OnLeave = SuperAPI.UnitFrame_OnLeave
|
|
CombatText_AddMessage = SuperAPI.CombatText_AddMessage
|
|
QuestLogTitleButton_OnClick = SuperAPI.QuestLogTitleButton_OnClick
|
|
|
|
|
|
-- SuperAPI.frame:RegisterEvent("BAG_UPDATE")
|
|
-- SuperAPI.frame:RegisterEvent("BAG_UPDATE_COOLDOWN")
|
|
SuperAPI.frame:SetScript("OnEvent", SuperAPI.OnEvent)
|
|
|
|
-- this chatcommand is empty. It is essential for showing tooltips of macros
|
|
-- the format for showing a tooltip on a macro is EXACTLY this: /tooltip spell:spellid and then skip line
|
|
SLASH_MACROTOOLTIP1 = "/tooltip"
|
|
SlashCmdList["MACROTOOLTIP"] = function(cmd)
|
|
end
|
|
DEFAULT_CHAT_FRAME:AddMessage("|cffffcc00SuperAPI|cffffaaaa Loaded. Check the minimap icon for options.")
|
|
end
|
|
|
|
function SuperAPI:OnEvent()
|
|
if (event == "BAG_UPDATE_COOLDOWN" or event == "BAG_UPDATE") then
|
|
SUPERAPI_ContainerItemsTable = {}
|
|
for ibag = 0, 4 do
|
|
for islot = 1, GetContainerNumSlots(ibag) do
|
|
local bagitemlink = GetContainerItemLink(ibag, islot)
|
|
if bagitemlink then
|
|
local _, _, bagitemID = strfind(bagitemlink, "item:(%d+)")
|
|
bagitemID = tonumber(bagitemID)
|
|
SUPERAPI_ContainerItemsTable[bagitemID] = { bag = ibag; slot = islot }
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- HOOKS --
|
|
-- Global function to get a spell link from its exact id
|
|
SuperAPI.GetSpellLink = function(id)
|
|
local spellname = SpellInfo(id)
|
|
local link = "\124cffffffff\124Henchant:" .. id .. "\124h[" .. spellname .. "]\124h\124r"
|
|
return link
|
|
end
|
|
|
|
-- reformat "Enchant" itemlinks to better supported "Spell" itemlinks
|
|
SuperAPI.SetItemRef = function(link, text, button)
|
|
link = gsub(link, "spell:", "enchant:")
|
|
SuperAPI.SetItemRefOriginal(link, text, button)
|
|
end
|
|
|
|
-- hooking spellbook frame to get a spell link on shift clicking a spell's button with chatframe open
|
|
SuperAPI.SpellButton_OnClick = function(drag)
|
|
if ((not drag) and IsShiftKeyDown() and ChatFrameEditBox:IsVisible() and (not MacroFrame or not MacroFrame:IsVisible())) then
|
|
local bookId = SpellBook_GetSpellID(this:GetID());
|
|
local _, _, spellID = GetSpellName(bookId, SpellBookFrame.bookType)
|
|
local link = SuperAPI.GetSpellLink(spellID)
|
|
ChatFrameEditBox:Insert(link)
|
|
else
|
|
SuperAPI.SpellButton_OnClickOriginal(drag)
|
|
end
|
|
end
|
|
|
|
-- hooking bags item button frames to show uses count
|
|
SuperAPI.SetItemButtonCount = function(button, count)
|
|
if not button or not count then
|
|
return SuperAPI.SetItemButtonCountOriginal(button, count)
|
|
end
|
|
if (count < 0) then
|
|
if (count < -999) then
|
|
count = "*";
|
|
end
|
|
getglobal(button:GetName() .. "Count"):SetText(-count);
|
|
getglobal(button:GetName() .. "Count"):Show();
|
|
getglobal(button:GetName() .. "Count"):SetFontObject(NumberFontNormalYellow);
|
|
else
|
|
getglobal(button:GetName() .. "Count"):SetFontObject(NumberFontNormal);
|
|
SuperAPI.SetItemButtonCountOriginal(button, count)
|
|
end
|
|
end
|
|
|
|
-- hooking actionbutton tooltip to show item tooltip on macros
|
|
SuperAPI.SetAction = function(this, buttonID)
|
|
--local name, actiontype, macroID = GetActionText(buttonID)
|
|
--if actiontype == "MACRO" then
|
|
-- local _,_, body = GetMacroInfo(macroID)
|
|
-- local _,_, itemID = strfind(body, "^/tooltip item:(%d+)")
|
|
-- if itemID then
|
|
-- itemID = tonumber(itemID)
|
|
-- iteminfo = SUPERAPI_ContainerItemsTable[itemID]
|
|
-- if iteminfo then
|
|
-- return this:SetBagItem(iteminfo.bag, iteminfo.slot)
|
|
-- end
|
|
-- end
|
|
--end
|
|
--
|
|
return SuperAPI.SetActionOriginal(this, buttonID)
|
|
end
|
|
|
|
-- Add Mouseover casting to default blizzard unitframes and all unitframe addons that use the same function
|
|
SuperAPI.UnitFrame_OnEnter = function()
|
|
SuperAPI.UnitFrame_OnEnterOriginal()
|
|
SetMouseoverUnit(this.unit)
|
|
end
|
|
|
|
SuperAPI.UnitFrame_OnLeave = function()
|
|
SuperAPI.UnitFrame_OnLeaveOriginal()
|
|
SetMouseoverUnit()
|
|
end
|
|
|
|
-- Fix scrolling combat text healer name
|
|
SuperAPI.CombatText_AddMessage = function(message, scrollFunction, r, g, b, displayType, isStaggered)
|
|
local newMessage = gsub(message, "(%s%[)(0x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x)(%])", function(bracket1, hex, bracket2)
|
|
if UnitIsUnit(hex, "player") then return nil
|
|
else return " ["..UnitName(hex).."]" end
|
|
end)
|
|
return SuperAPI.CombatText_AddMessageOriginal(newMessage, scrollFunction, r, g, b, displayType, isStaggered)
|
|
end
|
|
|
|
-- Link quest in chat from Blizzard QuestLog
|
|
SuperAPI.QuestLogTitleButton_OnClick = function(button)
|
|
local questIndex = this:GetID() + FauxScrollFrame_GetOffset(QuestLogListScrollFrame);
|
|
|
|
if ( IsShiftKeyDown() ) then
|
|
if ( not this.isHeader ) then
|
|
if ( ChatFrameEditBox:IsVisible() ) then
|
|
local questLink = GetQuestLinkForLogIndex(questIndex)
|
|
ChatFrameEditBox:Insert(questLink);
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
return SuperAPI.QuestLogTitleButton_OnClickOriginal(button)
|
|
end
|