Wow 插件开发-清理背包插件

在对话框中输入 “/delete [轻弹丸]” 回车即可删除轻弹丸,有了这个就可以方便的删除掉背包的任意垃圾

1.安装IDE

编辑器这里我推荐用sublime,因为它可以装格式化lua 代码插件,而且高亮显示关键字。如果你喜欢用Notepad++,Vscode,Editplus也无所谓,选择一个自己喜欢的。

Sublime3 [http://www.sublimetext.com/3]

2.编写Plugin

打开Sublime 3

执行:File -> Open Folder ,选择WOW插件目录\World of Warcraft_classic_\Interface\AddOns

打开目录以后,创建一个MyDelete的目录,并在目录下创建两个文件MyDelete.toc和MyDelete.lua。

下面我们开始写代码,用的语言是Lua

第一个MyDelete.toc中包含了我们的插件描述信息,其中包含标题、作者、版本号、备注、lua脚本连接等,具体代码如下:

MyDelete.toc

1
2
3
4
5
6
7
8
9
## Interface: 32999
## Title: MyDelete
## Author: zyh
## Version: 0.1
## Notes: 自动清理背包
## DefaultState: Enabled
## LoadOnDemand: 0
## SavedVariables:
MyDelete.lua

第二个MyDelete.lua 中包含了我们的核心代码部分,核心思想如下:

  • Drop函数,注册/delete 指令
  • DeleteItemAction函数,是/delete 指令触发的函数,其核心思路是:遍历背包中的所有solt(槽),匹配待删除物品,检测到物品以后使用PickupContainerItem和DeleteCursorItem两个API来丢弃物品
  • GetItemName函数,获取 Item Hyperlink (物品超链接)中的Item Name (物品名称),这边Item Name和Item Hyperlink是两个概念。

MyDelete.lua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function Drop()

SlashCmdList["DeleteItem"] = DeleteItemAction
SLASH_DeleteItem1 = "/delete"
print("MyDelete load finish")

end

function GetItemName(item)

itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, itemEquipLoc, itemIcon,
itemSellPrice, itemClassID, itemSubClassID, bindType, expacID, itemSetID, isCraftingReagent = GetItemInfo(item)

return itemName
end

function DeleteItemAction(item)
if item == "" then return end

name = GetItemName(item)
for b = 0, 4 do
p = GetContainerNumSlots(b)
for i = 1, p do
e = GetContainerItemLink(b, i)
if e and string.find(e, name) then
PickupContainerItem(b, i);
DeleteCursorItem();
end
end
end
end

local frame = CreateFrame("Frame", nil, UIParent);
frame:RegisterEvent("VARIABLES_LOADED");
frame:SetScript("OnEvent", Drop);

将两个核心文件放到AddOns/MyDelete目录下,重启WOW。进入游戏以后,先看一下“综合”频道有没有打出“MyDelete load finish”等字样,如果有,则插件已经生效。

如果你是粘贴的我的代码,你应该已经看到了“MyDelete load finish”

3.测试

下面我们来删除一些东西测试一下,请在操作之前务必用自己的小号或者腾空自己的背包,不然删掉一些重要物品就玩大了。

到商店卖一些轻弹丸和重弹丸,或者找点便宜的道具。 输入/delete 在后面跟上轻弹丸的超链接(shift + 鼠标左键),然后回车查看效果

4.其他

下面附上wow api地址,想了解的看一下
:[http://wowprogramming.com/docs/api.html]

想给Sublime安装格式化LUA代码工具,连接地址:[https://github.com/Koihik/LuaFormatter]

有朋友跟我反应不想用超链接删除物品,喜欢打字,其实也好改,只需要该DeleteItemAction函数即可,如下所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function DeleteItemAction(item)

if item == "" then return end

--name = GetItemName(item)
for b = 0, 4 do
p = GetContainerNumSlots(b)
for i = 1, p do
e = GetContainerItemLink(b, i)
if e and string.find(e, item ) then
PickupContainerItem(b, i);
DeleteCursorItem();
end
end
end
end

这样改好以后输入/rl 重新加载,输入 "/delete 轻弹丸 "查看效果

Tips:可以结合宏一起使用比如我这样

1
2
3
4
5
6
7
/delete 加固的宝箱
/delete 新鲜的大鱼
/delete 巨型蚌壳
/delete 21磅重的龙虾
/delete 12磅重的龙虾
/delete 9磅重的龙虾
/delete 7磅重的龙虾

https://bbs.nga.cn/read.php?&tid=22813671