lua - 如何将游戏[魔兽世界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
但我不明白如何解决我的问题。
解决方案
可能有更好的方法可以做到这一点,例如在鼠标悬停时在工具提示中显示信息,但这里有一个简单的解决方案,基本上可以满足您的要求:当您按住 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");
参考:
推荐阅读
- node.js - Neo4j NodeJS 代码不显示整个节点数据
- selenium - 如何单击遇到 TimeoutException 和 NoSuchElementException 错误的 href?
- javascript - 在倒数第二个索引之后删除其余字符串
- sql - SQL:识别事件是否发生?
- javascript - Companies House API jquery ajax 返回 401
- node.js - 尝试根据nodejs中的另一个集合对象从集合中获取对象
- python - 基于字典在数据框中搜索字符串
- ios - 如何使用 HockeyApp 在应用程序配置文件中未列出的设备上安装移动应用程序
- javascript - Jests 测试找不到图像 Webpacker
- visual-studio - Visual Studio 不接受 Xamarin UWP 应用的 makecert 证书