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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM