如何将游戏[魔兽世界 1.13.3]中的物品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

但我不知道如何解决我的问题。

点赞
用户4889587
用户4889587

可能有更好的方法来实现这个,比如当你将鼠标悬停在物品上时显示信息。但这里提供了一个简单的解决方案,基本上是在你按住Shift+点击时在聊天窗口中显示物品和物品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");

参考:

2020-02-14 20:35:58