利用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

posted on 2019-02-01 09:11  jack船长大哥  阅读(24378)  评论(1编辑  收藏  举报

导航