Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 如何将物品ID从游戏[魔兽世界1.13.3]转移到我的插件?_Lua_Add On_World Of Warcraft - Fatal编程技术网

Lua 如何将物品ID从游戏[魔兽世界1.13.3]转移到我的插件?

Lua 如何将物品ID从游戏[魔兽世界1.13.3]转移到我的插件?,lua,add-on,world-of-warcraft,Lua,Add On,World Of Warcraft,我想通过使用鼠标指针和修改键单击项目ID来获取项目ID,或者通过单击键盘键来获取鼠标指针下方的项目ID 或者,我怎样才能在我的插件中获取所选项目的ID 我找到了文件: 但是我不知道如何解决我的问题。可能有更好的方法来解决这个问题,比如鼠标悬停时在工具提示中显示信息,但这里有一个简单的解决方案,基本上可以满足您的要求:按住shift键并单击时在聊天窗口中显示项目及其id 此解决方案创建一个侦听器,在您第一次打开行李时进行检查。然后,它将代码附加到打开的包中的每个插槽,告诉它在按下shift键时

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

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

我找到了文件:


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

可能有更好的方法来解决这个问题,比如鼠标悬停时在工具提示中显示信息,但这里有一个简单的解决方案,基本上可以满足您的要求:按住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");
参考资料:


非常感谢您的回答。我还不能检查游戏中的代码。但是,如果物品不在包中,而是在战利品窗口中,您的代码是否有变体?物品在战利品窗口中,我用修改器键单击它。我如何跟踪此事件?如果我可以跟踪此事件,那么我如何获取物品的位置:在包中还是在战利品中?查看并研究战利品窗口中的战利品,而不是在包中。不,我需要在包窗口和战利品窗口中采取相同的行动。例如:“使用键盘上的修改器按钮按下鼠标按钮”或“按下键盘上的按钮并获取此时鼠标指针下的项目”。是否有可能创建?