首页 > 解决方案 > 如何将游戏[魔兽世界1.13.3]中的物品ID转移到我的插件中?

问题描述

我想通过使用修饰键用鼠标指针单击它来获取项目 ID,或者通过单击键盘键来获取鼠标指针下方的项目 ID。

或者我怎样才能在我的插件中获得所选项目的 ID?

我找到了文档:

https://wowwiki.fandom.com/wiki/Using_bindings.xml_to_create_key_bindings_for_your_addon

https://wow.gamepedia.com/API_Frame_SetPropagateKeyboardInput

但我不明白如何解决我的问题。

标签: luaadd-onworld-of-warcraft

解决方案


可能有更好的方法可以做到这一点,例如在鼠标悬停时在工具提示中显示信息,但这里有一个简单的解决方案,基本上可以满足您的要求:当您按住 shift-click 时在聊天窗口中显示项目及其 id .

该解决方案创建了一个监听器,在您第一次打开行李时进行检查。然后,它会将代码附加到打开的包中的每个插槽,告诉它在单击 shift 时打印信息。当这段代码被打印到你最终包中的插槽时,它也会告诉监听器停止运行以避免浪费 CPU 资源。

local listener = CreateFrame("Frame");
listener:SetScript("OnEvent", function()
    for bag=1, 5 do
        for slot=1, GetContainerNumSlots(bag-1) do
            local frame = _G["ContainerFrame" .. bag .. "Item" .. slot];
            if (frame and not frame.isHooked) then
                frame.isHooked = true;
                frame:HookScript("PreClick", function()
                    if (IsShiftKeyDown()) then
                        local itemLink, __, __, itemID = select(7, GetContainerItemInfo(bag - 1, frame:GetID()));
                        if (itemID) then
                            print(itemLink .. " " .. itemID);
                        end
                    end
                end);
                if(bag == 5) then
                    -- stops this from continuing to execute after all bags have been openned at least once.
                    listener:UnregisterEvent("BAG_UPDATE");
                end
            end
        end
    end
end);
listener:RegisterEvent("BAG_UPDATE");

参考:


推荐阅读