利用Lua脚本语言制作魔兽WOW插件
1 WOW内编程办法
第一种:打开WOW自带macro宏编辑窗口-->输入/script或WOW API直接制作简单宏
(1)跪倒求婚Macro
/kneel
/say 如果你不嫁给我,我就一辈子不起来
(2)切换WOW程序的窗口与全屏模式
/script SetCVar("gxWindow",1-GetCVar("gxWindow"));
/console gxRestart
(3) 打开所有包
/script OpenAllBags()
/script CloseBag(X) (X=4~0)
(4) ALT键切换
用Alt切换大小冰箭
/cast [modifier:alt] 寒冰箭(等级 1);寒冰箭(等级 11)
用Alt切换AOE火/雪
/cast [modifier:alt] 烈焰风暴(等级 6);暴风雪(等级 6)
用Alt切换大小魔爆术
/use 莫阿姆之眼
/cast [modifier:alt] 魔爆术(等级 1);暴风雪(魔爆术 6)
(5)饰品+技能(多饰品+stopcasting )
/use 赞达拉英雄护符
/cast 火球术(等级 12)
(6)闪烁宏(按一次闪现后需再按一次以便调回方向)
/stopcasting
/cast 闪现术
/script FlipCameraYaw(180);
(7)招BB并立即攻击目标(连按2次)
/cast [nopet] 召唤水元素
/stopmacro [target=pettarget,exists]
/petattack
第二种:打开WOW自带macro宏编辑窗口-->结合WOW API+Lua制作复杂宏(255字以内)
目标:把前4个包的灵魂碎片全放到最后一个包内
/script
bag=0 cw=1 sc=1 --定义好变量,bag是包的编号,cw表示查找包的槽位,sc指向最后一个包内的槽位
for bag=0,3,1 do --从0号包开始,到3号包结束,最后一个包不搜索。
for cw=1,16,1 do --这里假设所有的包都是16个槽位的,如果没那么多槽位的包也可以用。
if GetContainerItemLink(bag,cw)~=nil --判断这个槽位是否是空的,是空就直接跳到下一个槽位
then
if string.find(GetContainerItemInfo(bag,cw),"Gem") --判断这个槽位里是否是灵魂碎片
then
while string.find(GetContainerItemInfo(4,sc),"Gem") do sc=sc+1 end
--判断最后一个包里原来是否已经有灵魂碎片,有的话就指向包的下一个槽位
PickupContainerItem(bag,cw)
PickupContainerItem(4,sc)
PickupContainerItem(bag,cw) --这3句控制灵魂碎片和最后一个包内物品的交换
sc=sc+1 --每放置好一个碎片后把最后一个包的槽位指针指向下一个槽位
end --(then end)
end --(then end)
end --(for end)
end --(for end 循环结束)
因为宏的限制是255个字,需要简化,先从内容最长的函数开始。建立以下宏:
/script function P(c,d) PickupContainerItem(c,d) end
/script function I(e,f)
if GetContainerItemInfo(e,f) then return string.find(GetContainerItemInfo(e,f),"Gem") else return nil end
end
原来的宏就变成了:
/script
bag=0 cw=1 sc=1
for bag=0,3,1 do
for cw=1,16,1 do
if G(bag,cw)~=nil
then
if I(bag,cw)
then
while I(4,sc) do sc=sc+1 end
P(bag,cw)
P(4,sc)
P(bag,cw)
sc=sc+1
end
end
end
end
多余的变量定义和过长的变量都可以更改:
/script
s=1
for g=0,3 do
for w=1,16 do
if G(g,w)
then
if I(g,w)
then
while I(4,s) do s=s+1 end
P(g,w)
P(4,s)
P(g,w)
s=s+1
end
end
end
end
这样就实现了结合WOW API+Lua制作宏的目标。
第三种: Interface/AddOns建立插件文件夹-->编写.Toc索引+.XML框架+.Lua脚本-->WOW启动Load插件
Addons (Add-Ons) 俗称插件,是一些附加的文件,被放置在玩家 WOW 游戏目录下的 Interface 文件夹中。插件使用Blizzard提供的LUA和XML代码(官方API函数接口)来扩充玩家可以使用的用户功能,通过暴雪WOW的编译机解释和执行。
重点学习并实现第三类--Lua/XML+Lib+WOW API编写插件。
2 插件分类
按体系分类: 独立单体插件(如TrinketMenu饰品管理器,SCT战斗信息插件);ACE类插件(FuBar系列,BigWig团队助手);D系列插件(DAB 、DUF、DART)
按功能分类: 界面背景插件(Xart、Dart、Oskin);战斗辅助插件(DEX、SCT、NaturEnemyCastBar);日常辅助插件(Auctioneer拍卖助手 CT_MailMod邮件助手)
按插件设置分类: 免设置插件 (MCP插件控制盒,CT_MailMod邮件助手);图形界面设置插件(NaturEnemyCastBar,D系列插件);输入指令设置插件(StatusBars,ocb)
其中按体系分的独立单体插件是指下载后可直接放入World of Warcraft/Interface/AddOns 文件夹下使用的插件。ACE类插件:分自带库类型,公共库类型。自带库的只要放入addons下就可以了。公共库类型的,需要自己在Addons下有一个公共库!!!Libs。D系列插件:目前最常见就是3个,DAB动作条插件,DUF头像界面插件,Dart界面背景类插件。和ACE类一样,需要一个D系列专用的DiscordLibrary库。
重点学习战斗信息辅助类+简单图形界面设置插件。
2 目前学习并实现的
(1)Welcome插件功能:支持"/"命令;当在WOW中改变区域时,显示文本欢迎信息;支持两种文本显示位置-聊天框/屏幕中央;WOW中可自定义Welcome信息;欢迎消息格式为:自定义Welcome信息+系统地名。
插件文件:Welcome.toc+Welcome.lua+Locale-enUs.lua;注:本插件无界面,故无XML文件。
核心代码段:
WelcomeHome=AceLibrary("AceAddon-2.0"):new("AceConsole-2.0","AceEvent-2.0","AceDB-2.0")--使用Lib库
Welcome:RegisterChatCommand(L["Slash-Commands"], opts) --支持"/"命令
self:RegisterEvent("ZONE_CHANGED")--登记区域改变事件
self:Print(self.db.profile.message)--聊天框显示
UIErrorsFrame:AddMessage(self.db.profile.message, 1.0, 1.0, 1.0, 5.0)--屏幕中央显示
self:Print("XXX"+GetSubZoneText()) --显示自定义格式+系统地名
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
请发表评论