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

  • 相关阅读:
    Linux下查看文件和文件夹大小
    ADB Usage Complete / ADB 用法大全
    Android adb你真的会用吗?
    数组方法-map方法
    数组方法-forEach方法
    js-深入浅出之闭包
    js-作用域-变量申明提升
    递归思想及几个经典题目
    js中eval 详解
    arguments对象 的使用方法
  • 原文地址:https://www.cnblogs.com/skiwnchiwns/p/10344758.html
Copyright © 2020-2023  润新知