利用Lua脚本语言制作魔兽WOW插件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利⽤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 ⽂件夹中。
插件使⽤提供的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()) --显⽰⾃定义格式+系统地名。