Harden macros, world map and actionbar panels
This commit is contained in:
+48
-34
@@ -1,5 +1,6 @@
|
||||
local _G = ShaguTweaks.GetGlobalEnv()
|
||||
local T = ShaguTweaks.T
|
||||
local API = ShaguTweaks.API or {}
|
||||
|
||||
local module = ShaguTweaks:register({
|
||||
title = T["Macro Tweaks"],
|
||||
@@ -11,72 +12,85 @@ local module = ShaguTweaks:register({
|
||||
})
|
||||
|
||||
module.enable = function(self)
|
||||
-- make sure #showtooltip inside macros won't be sent
|
||||
local hookSendChatMessage = SendChatMessage
|
||||
function _G.SendChatMessage(msg, ...)
|
||||
if msg and string.find(msg, "^#showtooltip ") then return end
|
||||
hookSendChatMessage(msg, unpack(arg))
|
||||
-- This interception is intentional: #showtooltip is macro metadata and must
|
||||
-- not be sent as chat text by the Vanilla macro parser.
|
||||
local hookSendChatMessage = _G.SendChatMessage
|
||||
function _G.SendChatMessage(msg, a1, a2, a3, a4, a5, a6, a7, a8)
|
||||
if msg and string.find(msg, "^#showtooltip%s") then return end
|
||||
return hookSendChatMessage(msg, a1, a2, a3, a4, a5, a6, a7, a8)
|
||||
end
|
||||
|
||||
-- do not write macro calls into chat input history
|
||||
-- do not write executed macro commands into chat input history
|
||||
if not ChatFrameEditBox._AddHistoryLine then
|
||||
local userinput
|
||||
|
||||
ChatFrameEditBox._AddHistoryLine = ChatFrameEditBox.AddHistoryLine
|
||||
ChatFrameEditBox.AddHistoryLine = function(self, text)
|
||||
if not userinput and text and string.find(text, "^/run(.+)") then return end
|
||||
if not userinput and string.find(text, "^/script(.+)") then return end
|
||||
if not userinput and string.find(text, "^/cast(.+)") then return end
|
||||
if not userinput and text then
|
||||
if string.find(text, "^/run%s*") then return end
|
||||
if string.find(text, "^/script%s*") then return end
|
||||
if string.find(text, "^/cast%s*") then return end
|
||||
end
|
||||
ChatFrameEditBox._AddHistoryLine(self, text)
|
||||
end
|
||||
|
||||
local OnEnter = ChatFrameEditBox:GetScript("OnEnterPressed")
|
||||
ChatFrameEditBox:SetScript("OnEnterPressed", function(a1,a2,a3,a4)
|
||||
userinput = true
|
||||
OnEnter(a1,a2,a3,a4)
|
||||
userinput = nil
|
||||
if OnEnter then OnEnter(a1,a2,a3,a4) end
|
||||
userinput = nil
|
||||
end)
|
||||
end
|
||||
|
||||
local function GetBagItemName(bag, slot)
|
||||
if API.GetContainerItemID and API.GetItemNameByID then
|
||||
local itemID = API.GetContainerItemID(bag, slot)
|
||||
local name = itemID and API.GetItemNameByID(itemID)
|
||||
if name then return name end
|
||||
end
|
||||
|
||||
local itemLink = GetContainerItemLink(bag, slot)
|
||||
if not itemLink then return end
|
||||
local _, _, itemID = string.find(itemLink, "item:(%d+)")
|
||||
return itemID and GetItemInfo(itemID) or nil
|
||||
end
|
||||
|
||||
local function FindItem(item)
|
||||
local wanted = string.lower(item or "")
|
||||
for bag = 4, 0, -1 do
|
||||
for slot = 1, GetContainerNumSlots(bag) do
|
||||
local itemLink = GetContainerItemLink(bag,slot)
|
||||
if itemLink then
|
||||
local _, _, parse = strfind(itemLink, "(%d+):")
|
||||
local query = GetItemInfo(parse)
|
||||
if query and query ~= "" and string.lower(query) == string.lower(item) then
|
||||
return bag, slot
|
||||
end
|
||||
local query = GetBagItemName(bag, slot)
|
||||
if query and string.lower(query) == wanted then
|
||||
return bag, slot
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
-- add /use and /equip to the macro api:
|
||||
-- https://wowwiki.fandom.com/wiki/Making_a_macro
|
||||
-- supported arguments:
|
||||
-- /use <itemname>
|
||||
-- /use <inventory slot>
|
||||
-- /use <bag> <slot>
|
||||
_G.SLASH_EQUIP1 = "/equip"
|
||||
_G.SLASH_EQUIP2 = "/use"
|
||||
_G.SlashCmdList.EQUIP = function (msg)
|
||||
_G.SlashCmdList.EQUIP = function(msg)
|
||||
if not msg or msg == "" then return end
|
||||
local bag, slot, _
|
||||
if string.find(msg, "%d+%s+%d+") then
|
||||
_, _, bag, slot = string.find(msg, "(%d+)%s+(%d+)")
|
||||
elseif string.find(msg, "%d+") then
|
||||
_, _, slot = string.find(msg, "(%d+)")
|
||||
|
||||
local bag, slot
|
||||
local _, _, parsedBag, parsedSlot = string.find(msg, "^(%d+)%s+(%d+)$")
|
||||
if parsedBag and parsedSlot then
|
||||
bag, slot = parsedBag, parsedSlot
|
||||
else
|
||||
bag, slot = FindItem(msg)
|
||||
local _, _, inventorySlot = string.find(msg, "^(%d+)$")
|
||||
if inventorySlot then
|
||||
slot = inventorySlot
|
||||
else
|
||||
bag, slot = FindItem(msg)
|
||||
end
|
||||
end
|
||||
|
||||
bag = bag and tonumber(bag) or nil
|
||||
slot = slot and tonumber(slot) or nil
|
||||
|
||||
if bag and slot then
|
||||
UseContainerItem(bag, slot)
|
||||
elseif not bag and slot then
|
||||
elseif slot then
|
||||
UseInventoryItem(slot)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user