魔獸世界超級(jí)助手Lua腳本語(yǔ)言
魔獸世界超級(jí)助手Lua腳本語(yǔ)言是本文要介紹的內(nèi)容,主要是來(lái)了解魔獸世界的開(kāi)發(fā)語(yǔ)言lua的學(xué)習(xí),具體內(nèi)容來(lái)看本文詳解。
Lua的編程結(jié)構(gòu):
(1)Lua的注釋?zhuān)盒凶⑨寴?biāo)識(shí)符"",用來(lái)注釋其后的一行內(nèi)容。多行注釋以"[["表示注釋開(kāi)始,延續(xù)到"]]"結(jié)束。
(2)Lua的程序:Lua的每一個(gè)語(yǔ)句塊都需要end關(guān)鍵字進(jìn)行結(jié)尾。控制語(yǔ)句有
- if 條件 then ... elseif 條件 then ... else ... end
- while 條件 do ... end
- for 變量=初值, 終點(diǎn)值, 步進(jìn) do ... end
- for 變量1, 變量2, ... 變量n in 表或枚舉函數(shù) do ... end
等模式。
函數(shù)以function開(kāi)始,以end結(jié)尾。同時(shí)支持類(lèi)、繼承、私有等面向?qū)ο蟪绦蛟O(shè)計(jì)模式。
注意事項(xiàng):
(1)string庫(kù)的string.len(s)函數(shù)是計(jì)算單字節(jié)長(zhǎng)度的,比如雙字節(jié)的一個(gè)漢字則長(zhǎng)度為2,依次計(jì)算類(lèi)推。
(2)table庫(kù)的數(shù)組類(lèi)型元素起點(diǎn)為1,常規(guī)語(yǔ)言的元素起點(diǎn)0將被忽視,table.getn()獲取指定數(shù)組元素個(gè)數(shù)以起點(diǎn)1算起。例如a[0]永遠(yuǎn)是nil(即null不存在的)。
(3)邏輯運(yùn)算符“and(與)、or(或)、not(非)”;關(guān)系運(yùn)算符“~=(不等于)”;連接運(yùn)算符“..” 都是有別于或類(lèi)似于其他語(yǔ)言的,請(qǐng)勿混淆濫用。其中連接符可以直接連接數(shù)值、字符串、表達(dá)式等。
腳本控制和多腳本協(xié)同:
暫停休眠:sleep(毫秒數(shù))函數(shù)
設(shè)置定時(shí)器:定時(shí)器編號(hào) = settimer(毫秒, '函數(shù)名')函數(shù)
關(guān)閉定時(shí)器:killtimer(定時(shí)器編號(hào))
顯示調(diào)試信息:trace('內(nèi)容')函數(shù)
執(zhí)行腳本函數(shù):線程句柄, 線程ID = runlua('文件名')
(啟動(dòng)多腳本,文件名:相對(duì)于助手Scripts目錄)其中多腳本有設(shè)置和獲取公共變量的支持。因?yàn)?strong>Lua腳本是不支持多線程的,因此我們用多腳本即可實(shí)現(xiàn)多線程的程序操作模式。
返回值線程句柄整型值,線程ID整型值
設(shè)置字符串全局變量:setglobalstring('變量名', '變量值')
設(shè)置整型全局變量:setglobalint('變量名', 變量值)
設(shè)置浮點(diǎn)數(shù)全局變量:setglobalfloat('變量名', 變量值)
獲取全局變量:值 = getglobalvar('變量名')
獲取全局變量個(gè)數(shù):個(gè)數(shù) = getglobalvarcount()
刪除全局變量:removeglobalvar('變量名')
注意:以上變量名最長(zhǎng)63字節(jié),超過(guò)部分將被截?cái)唷H肿兞渴撬?strong>LUA腳本都可以訪問(wèn)的,所以命名變量名時(shí)盡可能復(fù)雜,以免沖突投遞線程消息:是否成功 = postthreadmessage(線程ID, 消息, 字參, 長(zhǎng)參)
線程ID:對(duì)應(yīng)runlua返回的線程ID。
message:消息ID
wParam:字參
lParam:長(zhǎng)參
返回值:0/1
設(shè)置監(jiān)視線程消息:setmsgwatch('消息監(jiān)視回調(diào)函數(shù)名')
注意:此函數(shù)必須放在所有代碼的最后,否則其后的代碼將不會(huì)被執(zhí)行
參考格式為:
- function msgwatchfunc(message, wParam, lParam)
- [[message、wParam、lParam分別對(duì)應(yīng)投遞線程消息函數(shù)的消息, 字參, 長(zhǎng)參]]
- …
- end
- setmsgwatch('msgwatchfunc')
文件與系統(tǒng)功能支持:
ini文件讀操作:值 = readini('節(jié)名', '值名', '文件名')
ini文件寫(xiě)操作:writeini('節(jié)名', '值名', '值', '文件名')
獲取系統(tǒng)啟動(dòng)至今的毫秒數(shù):毫秒數(shù) = gettickcount()
返回值:無(wú)符號(hào)整形數(shù)值
響鈴:beep(頻率, 持續(xù)時(shí)間[毫秒])函數(shù)
MP3播放:playmp3('mp3或wav文件路徑')函數(shù)
復(fù)制文字到剪切板:copytexttoclipboard('要復(fù)制的文字內(nèi)容')函數(shù)
窗口控制與進(jìn)程操作:
助手提供了windows程序窗口與進(jìn)程操作的眾多函數(shù)接口,可以實(shí)現(xiàn)絕大多數(shù)的windows程序控制和進(jìn)程操作,此處暫不一一列舉,有興趣的詳細(xì)參看助手腳本編輯器的功能菜單。在這里我們要特別強(qiáng)調(diào)一下其中2個(gè)函數(shù):
客戶區(qū)域坐標(biāo)轉(zhuǎn)換為屏幕區(qū)域坐標(biāo):x,y = clienttoscreen(窗口句柄, 客戶區(qū)域x坐標(biāo), 客戶區(qū)域y坐標(biāo))
屏幕區(qū)域坐標(biāo)轉(zhuǎn)換為客戶區(qū)域坐標(biāo):x,y = screentoclient(窗口句柄, 屏幕x坐標(biāo), 屏幕y坐標(biāo))
當(dāng)涉及鼠標(biāo)定位有關(guān)操作時(shí)往往使用屏幕區(qū)域坐標(biāo),而程序(非腳本鍵鼠模擬操作的程序)相對(duì)自身位置定位操作則為客戶區(qū)域坐標(biāo),因此兩者交互坐標(biāo)參數(shù)時(shí)將需要這2個(gè)函數(shù)進(jìn)行轉(zhuǎn)換。
鍵盤(pán)鼠標(biāo)操作與控制:
我們做游戲的基本鍵鼠模擬操作將大量使用該功能支持。
進(jìn)行鍵鼠模擬操作與控制首先就需要設(shè)置鍵鼠監(jiān)視程序?qū)︽I鼠操作進(jìn)行攔截或過(guò)濾模擬操作,而助手直接為我們提供了函數(shù)支持即可實(shí)現(xiàn)監(jiān)視及其控制。
1) 設(shè)置監(jiān)視鍵盤(pán)按鍵函數(shù)setkeywatch('函數(shù)名'):鍵盤(pán)操作
參考示例格式為:
- setkeywatch('keyhookfunc')
- function keyhookfunc(keycode, controlkey, downorup)
- keycode : 按鍵鍵碼
- controlkeycode : Alt Shift Ctrl 的狀態(tài)
- 1:左Alt按下 2:右Alt按下
- 4:左Shift按下 8:右Shift按下
- 16:左Ctrl按下 32:右Ctrl按下
多個(gè)控制鍵可以位運(yùn)算檢測(cè)
- downorup:0 按下 1 放開(kāi)
返回值:1-助手和Windows不再繼續(xù)處理該鍵 0-助手和Windows繼續(xù)處理該鍵
- return 1
- end
在函數(shù)keyhookfunc函數(shù)內(nèi)我們就可以對(duì)所有按鍵信息進(jìn)行按鍵攔截與過(guò)濾、加入模擬操作等程序處理。從而實(shí)現(xiàn)我們想要實(shí)現(xiàn)的模擬鍵盤(pán)操作。
(2)設(shè)置監(jiān)視鼠標(biāo)消息函數(shù)setmousewatch('函數(shù)名'):鼠標(biāo)操作
參考示例格式為:
- setmousewatch('mousehookfunc')
- function mousehookfunc(msg)
- msg : 鼠標(biāo)消息
- 1-左鍵按下 2-右鍵按下 3-中鍵按下
- 4-擴(kuò)展鍵1按下 5-擴(kuò)展鍵2按下
- 11-左鍵松開(kāi) 12-右鍵松開(kāi) 13-中鍵松開(kāi)
- 14-擴(kuò)展鍵1松開(kāi) 15-擴(kuò)展鍵2松開(kāi)
- 21-滾輪上滾 22-滾輪下滾
返回值:1-助手和Windows不再繼續(xù)處理該消息 0-助手和Windows繼續(xù)處理該消息
- return 1
- end
在mousehookfunc函數(shù)內(nèi)我們就可以對(duì)所有鼠標(biāo)消息進(jìn)行按鍵攔截與過(guò)濾、加入模擬操作等程序處理。從而實(shí)現(xiàn)我們想要實(shí)現(xiàn)的模擬鼠標(biāo)操作。
(3)設(shè)置監(jiān)視鼠標(biāo)消息擴(kuò)展函數(shù)setmousewatchex('函數(shù)名'):鼠標(biāo)定位操作
參考示例格式為:
- setmousewatchex('mousehookfuncex')
- function mousehookfuncex(msg, x坐標(biāo), y坐標(biāo))
- msg : 鼠標(biāo)消息
- 0-鼠標(biāo)移動(dòng) 1-左鍵按下 2-右鍵按下 3-中鍵按下
- 4-擴(kuò)展鍵1按下 5-擴(kuò)展鍵2按下
- 11-左鍵松開(kāi) 12-右鍵松開(kāi) 13-中鍵松開(kāi)
- 14-擴(kuò)展鍵1松開(kāi) 15-擴(kuò)展鍵2松開(kāi)
- 21-滾輪上滾 22-滾輪下滾
返回值:1-助手和Windows不再繼續(xù)處理該消息 0-助手和Windows繼續(xù)處理該消息
注意:請(qǐng)不要在鼠標(biāo)移動(dòng)消息中做耗時(shí)的操作,否則將會(huì)引起鼠標(biāo)移動(dòng)遲鈍
如果不需要監(jiān)視鼠標(biāo)移動(dòng),那么請(qǐng)直接
- if msg==0 then return 0 end
- return 1
- end
setmousewatchex與setmousewatch功能基本一致,所不同的是setmousewatch函數(shù)允許長(zhǎng)時(shí)間的延時(shí)操作模擬,而setmousewatchex是絕對(duì)不建議進(jìn)行有長(zhǎng)時(shí)間的延時(shí)操作模擬,否則在該延時(shí)時(shí)間內(nèi),你的鼠標(biāo)將會(huì)呆滯不受操作控制。正常腳本操作時(shí)有延時(shí)的與鼠標(biāo)定位無(wú)關(guān)的操作在setmousewatch內(nèi)進(jìn)行,有關(guān)鼠標(biāo)定位的模擬操作在setmousewatchex內(nèi)進(jìn)行處理,2者協(xié)同處理將不會(huì)有問(wèn)題發(fā)生。
當(dāng)某些模擬操作需要進(jìn)行鍵盤(pán)、鼠標(biāo)、以及鼠標(biāo)定位同時(shí)操作時(shí)腳本就需要設(shè)置以上3個(gè)監(jiān)視函數(shù)然后分解進(jìn)行各司其職的模擬操作與控制,而模擬同步問(wèn)題可以采用一種最簡(jiǎn)單的變量狀態(tài)變化模式進(jìn)行協(xié)同。這一模式廣泛應(yīng)用于現(xiàn)有助手自帶腳本,有興趣的自行閱讀查看。
(4)鍵鼠模擬操作函數(shù):
鍵盤(pán)按鍵:keypress(鍵碼)
鍵盤(pán)按鍵按下:keydown(鍵碼)
鍵盤(pán)按鍵松開(kāi):keyup(鍵碼)
鼠標(biāo)點(diǎn)擊:mouseclick(鼠標(biāo)鍵)
鼠標(biāo)鍵: 0-左鍵 1-右鍵 2-中鍵
鼠標(biāo)按鍵按下:mousedown(鼠標(biāo)鍵)
鼠標(biāo)按鍵松開(kāi):mouseup(鼠標(biāo)鍵)
剪輯鼠標(biāo):lockmouse(x坐標(biāo), y坐標(biāo))
坐標(biāo)為客戶區(qū)域坐標(biāo) x坐標(biāo)或y坐標(biāo)為-1時(shí),解除鎖定
注:客戶與區(qū)域坐標(biāo)為相對(duì)于程序界面的坐標(biāo)位置,客戶與區(qū)域坐標(biāo)需要與屏幕坐標(biāo)進(jìn)行轉(zhuǎn)換。轉(zhuǎn)換函數(shù)在窗口操作內(nèi)。
鎖定鼠標(biāo):disablemouse()
解鎖鼠標(biāo):enablemouse()
以上函數(shù)中鍵盤(pán)按鍵 與鍵盤(pán)按鍵按下和鍵盤(pán)按鍵松開(kāi),以及鼠標(biāo)點(diǎn)擊 與鼠標(biāo)按鍵按下和鼠標(biāo)按鍵松開(kāi)的區(qū)別在于,當(dāng)普通單獨(dú)鍵鼠按鍵模擬時(shí)只需要鍵盤(pán)按鍵或鼠標(biāo)點(diǎn)擊即可,當(dāng)執(zhí)行組合鍵操作時(shí)則需要鍵盤(pán)按鍵按下和鍵盤(pán)按鍵松 開(kāi)、鼠標(biāo)按鍵按下和鼠標(biāo)按鍵松開(kāi)配合完成,先執(zhí)行組合鍵的全部按下模擬操作,再執(zhí)行全部松開(kāi)操作,即達(dá)到組合鍵模擬操作。當(dāng)然單鍵模擬操作時(shí)也可先按下再 松開(kāi)的模擬操作。其中模擬操作特別是組合鍵模擬操作每一個(gè)模擬之后都需要一定的sleep延時(shí),以免某些時(shí)候模擬操作失敗
(5)鼠標(biāo)光標(biāo)操作:
查詢鼠標(biāo)指針坐標(biāo):x,y = getcursorpos()
設(shè)置鼠標(biāo)指針坐標(biāo):setcursorpos(x, y)
即定位鼠標(biāo)坐標(biāo)
5、魔獸世界信息獲取與支持:
助手作為魔獸世界的輔助工具,對(duì)腳本的魔獸世界信息獲取與支持將是最值得我們?cè)敿?xì)去了解的。
(1)魔獸世界信息和狀態(tài):
查詢魔獸世界版本:版本 = getwar3version()
返回值為無(wú)符號(hào)整型數(shù)字
獲取魔獸世界路徑:魔獸世界路徑 = getwar3path()
返回值為路徑字符串
判斷魔獸世界是否在最前端:是否在前端 = iswar3front()
返回值為0或1
判斷魔獸世界是否一運(yùn)行:是否已運(yùn)行 = iswar3running()
返回值為0或1
判斷魔獸世界是否已開(kāi)始:是否已開(kāi)始 = isplaying()
返回值為0或1
判斷是否處于聊天狀態(tài):是否聊天狀態(tài) = ischat()
返回值為0或1
查詢當(dāng)前地圖名(包含路徑):地圖名 = getmapname()
返回值為地圖名稱(chēng)字符串
查詢當(dāng)前選中單位ID:選中單位 = getselunit()
返回選中單位的ID列表(多個(gè))
查詢當(dāng)前選中單位ID和句柄:選中單位ID,選中單位句柄 = getselunitex()
返回選中單位的ID和句柄列表(多個(gè))
查詢當(dāng)前可操作單位ID和句柄:?jiǎn)挝籌D, 單位句柄 = getcurrentunit()
與“獲取當(dāng)前選中單位”不同的是,此函數(shù)取得選中的一組單位中可操作的那個(gè)(魔獸世界中Tab鍵可切換)
返回領(lǐng)隊(duì)單位ID和句柄(單個(gè))
查詢單位屬性:屬性值1,屬性值2,屬性值3,... = getunitattribute(單位句柄, 屬性代號(hào)1, 屬性代號(hào)2, 屬性代號(hào)3,...)
可一次查詢多個(gè)屬性值。屬性代號(hào):
1:HP上限 2:HP 3:MP上限 4:MP
5:經(jīng)驗(yàn) 6:力量 7:敏捷 8:智力
9:攻擊頻率 10:基礎(chǔ)攻擊力 11:攻擊倍乘 12:骰子
13:攻擊類(lèi)型 15:護(hù)甲 16:護(hù)甲類(lèi)型
19:技能1ID 20:技能2ID 21:技能3ID 22:技能4ID 23:技能5ID
24~28:技能1~5最高等級(jí) 29:可用技能點(diǎn)
此函數(shù)是一個(gè)多參多返回值函數(shù),有多少個(gè)屬性代號(hào)參數(shù)就有多少個(gè)對(duì)應(yīng)的返回值
查詢單位物品欄信息:物品句柄, 物品ID, 物品剩余使用次數(shù) = getunititem(單位句柄, 物品序號(hào)[0-5])
返回整型,字符串,整型。獲取指定位置物品失敗時(shí)返回0,’’,0
喊話:talk('內(nèi)容', 喊話對(duì)象)
內(nèi)容:多行內(nèi)容用\r\n分隔
喊話對(duì)象:0-盟友 1-所有人
設(shè)置魔獸世界視野:setcamera(視野[500~5000之間])
顯示FPS:enablefps(是否開(kāi)啟[0-否 1-是])
查詢本地玩家和隊(duì)伍:SlotID, 隊(duì)伍 = getmyslotidteam()
SlotID即游戲位置ID,該ID在主機(jī)開(kāi)始游戲前玩家的游戲位置決定
隊(duì)伍即游戲陣營(yíng)
查詢指定SlotID的玩家信息:隊(duì)伍, 人或電腦, 種族 = getplayerinfoex(SlotID)
人或電腦:0-人 1-電腦
種族:1-HUM 2-ORC 3-UD 4-NE
隊(duì)伍: -1:獲取失敗(可能是還沒(méi)進(jìn)入游戲,或SlotID超界) 0:無(wú)此玩家 >=1:隊(duì)伍
查詢指定SlotID的英雄列表: 英雄個(gè)數(shù), 英雄句柄列表, 英雄ID列表, 英雄所屬SlotID列表 = getherolist(SlotID)
英雄句柄列表, 英雄ID列表, 英雄所屬SlotID列表 皆為逗號(hào)“,”分隔的字符串
SlotID:-1:取所有玩家的英雄列表 -2:取自己的英雄列表 0-15:取對(duì)應(yīng)SlotID的英雄列表
取出的順序符合F1~F5順序
查詢玩家索引:玩家索引 = getplayerindex(SlotID)
此函數(shù)取得玩家進(jìn)入游戲后(可能會(huì)交換陣營(yíng)),實(shí)際的位置索引。
澄海交換陣營(yíng)后可由此判斷玩家陣營(yíng)。
(2)局域網(wǎng)信息和狀態(tài):局域網(wǎng)信息和狀態(tài)的函數(shù)依賴“主機(jī)”頁(yè)功能是否開(kāi)啟
獲取主機(jī)信息:游戲ID, 主機(jī)IP, 主機(jī)名, 主機(jī)創(chuàng)建者名 = gethostinfo(序號(hào)[0-255])
返回ID整型值,IP字符串,主機(jī)名字符串,創(chuàng)建者字符串
獲取玩家信息:玩家ID, 玩家IP, 玩家端口, 玩家名, 玩家狀態(tài) = getplayerinfo(序號(hào)[0-15])
玩家狀態(tài):0-100: 地圖下載進(jìn)度 256: 地圖加載完畢
返回ID整型值,IP字符串,端口整型值,玩家名字符串,狀態(tài)整型值
當(dāng)自己創(chuàng)建主機(jī)時(shí),自己的玩家名為實(shí)際游戲名,當(dāng)自己進(jìn)入別人主機(jī)時(shí),自己的玩家名為”<自己>”字符串
獲取自己的游戲次數(shù):游戲次數(shù) = getgametimes()
獲取自己的游戲加載狀態(tài):游戲加載狀態(tài) = getgamestatus()
0:未開(kāi)始 1:開(kāi)始5秒倒計(jì)時(shí) 2:5秒倒計(jì)時(shí)完畢 3:游戲開(kāi)始
狀態(tài)3相當(dāng)于isplaying()==1狀態(tài)
獲取剩余位置(Slot)數(shù):剩余Slot數(shù) = gethostfreeslot()
返回?zé)o符號(hào)整型數(shù)
(3)助手信息和功能:
查詢助手版本:版本號(hào) = getwshscriptversion()
返回值為無(wú)符號(hào)整型數(shù)字
查詢助手路徑:助手路徑 = getwshpath()
返回值為路徑字符串
開(kāi)關(guān)助手功能:enablewshfunction(功能編號(hào), 是否開(kāi)啟)
功能編號(hào):0-小地圖區(qū)右擊無(wú)效 1-鍵盤(pán)改鍵 2-鼠標(biāo)映射
3-允許在組合鍵中改鍵 4-滾輪每滾一次按任意鍵復(fù)位
5-自動(dòng)切換改鍵方案 6-喊話
7-Ctrl+右擊=右擊+Shift+H 8-Ctrl+左擊=A+左擊
9-Alt+[Q/W/A/S/Z/X]控制包裹欄 10-右擊=M+Shift+H
11-Alt+Num1~Num0代替Alt+1~0
12-顯示我方血條 13-顯示敵軍血條 14-屏蔽Win鍵 15-屏蔽Alt+Tab鍵
16-調(diào)整視野[0:恢復(fù) 1:近 -1:遠(yuǎn)] 17-調(diào)整亮度[0:恢復(fù) 1:暗 -1:亮] 18-復(fù)選改鍵方案 19-單選改鍵方案
是否開(kāi)啟:0-關(guān)閉 1-開(kāi)啟
查詢助手功能是否開(kāi)啟:是否開(kāi)啟 = iswshfunctionenable(功能編號(hào))
功能編號(hào):0-小地圖區(qū)右擊無(wú)效 1-鍵盤(pán)改鍵 2-鼠標(biāo)映射
3-允許在組合鍵中改鍵 4-滾輪每滾一次按任意鍵復(fù)位
5-自動(dòng)切換改鍵方案 6-喊話
7-Ctrl+右擊=右擊+Shift+H 8-Ctrl+左擊=A+左擊
9-Alt+[Q/W/A/S/Z/X]控制包裹欄 10-右擊=M+Shift+H
11-Alt+Num1~Num0代替Alt+1~0
12-顯示我方血條 13-顯示敵軍血條 14-屏蔽Win鍵 15-屏蔽Alt+Tab鍵
16-主機(jī)功能
是否開(kāi)啟:0-關(guān)閉 1-開(kāi)啟
獲取當(dāng)前喊話方案名:名稱(chēng) = getseltalkscheme()
返回字符串
獲取所選改鍵方案名:名稱(chēng) = getselkeyscheme()
返回字符串
獲取喊話方案列表:名稱(chēng) = gettalkschemelist()
各個(gè)方案名稱(chēng)之間用換行符'\n'隔開(kāi)
獲取改鍵方案列表:名稱(chēng) = getkeyschemelist()
各個(gè)方案名稱(chēng)之間用換行符'\n'隔開(kāi)
獲取當(dāng)前喊話方案內(nèi)容:內(nèi)容 = getseltalkwords()
返回喊話內(nèi)容字符串
獲取所選改鍵方案內(nèi)容:內(nèi)容 = getselkeymaps()
返回改鍵方案內(nèi)容
選擇指定喊話方案:是否成功 = seltalkscheme('方案名')
返回0或1
選擇指定改建方案:是否成功 = selkeyscheme('方案名', 是否選擇[1-選擇 0-不選])
返回0或1
判斷改鍵方案是否被選中:是否選擇 = iskeyschemesel('方案名')
返回0或1
執(zhí)行改建序列:是否成功 = runkeys('改鍵序列')
如:runkeys('使用物品I50I 使用物品B60I DOTA近衛(wèi)基地')
返回0或1,是否成功僅代表改鍵序列是否可成功執(zhí)行,不代表實(shí)際模擬操作成功與否
等待改鍵序列執(zhí)行完成:waitrunkeysdone()
與runkeys配套使用
助手中的Lua使用注意事項(xiàng):
助手中的Lua因?yàn)樘峁┑囊恍┲С趾蜋C(jī)制,有些會(huì)跟原版Lua會(huì)有所不同,因此實(shí)際腳本制作或修改時(shí)要特別注意一些問(wèn)題:
(1)模擬操作盡量不要執(zhí)行長(zhǎng)時(shí)間延時(shí)的模擬操作,否則個(gè)人的游戲操作能力將直線下降,還可能因此而導(dǎo)致因?qū)嶋H游戲情況而造成極大的失誤。比如諸葛風(fēng)E司馬風(fēng)N腳本,只能拿來(lái)玩玩學(xué)習(xí),切不可用于實(shí)戰(zhàn),因?yàn)檫@種長(zhǎng)時(shí)間延時(shí)的模擬操作因?qū)崙?zhàn)具體情況影響因素太大。
(2)定時(shí)器或函數(shù)腳本常駐延時(shí)程序(無(wú)限循環(huán)wile、repeat等)與鍵鼠監(jiān)視消息監(jiān)視函數(shù)切不可同處于一個(gè)腳本內(nèi)。定時(shí)器函數(shù)或腳本常駐程 序和鍵鼠消息監(jiān)視函數(shù)都會(huì)新起一個(gè)單獨(dú)的線程,而Lua腳本是不支持多線程的,因此會(huì)導(dǎo)致這2類(lèi)函數(shù)同竟資源問(wèn)題,極可能導(dǎo)致腳本崩潰。而定時(shí)器函數(shù)和腳 本常駐延時(shí)程序(無(wú)限循環(huán)wile、repeat等)不建議處于一個(gè)腳本,因?yàn)槿绻葓?zhí)行的是腳本常駐延時(shí)程序時(shí),程序之外的定時(shí)器將永遠(yuǎn)不會(huì)執(zhí)行;一個(gè) 腳本可以有多個(gè)定時(shí)器。
(3)腳本常駐延時(shí)程序即循環(huán)內(nèi)含延時(shí)操作,與定時(shí)器一樣都能定時(shí)執(zhí)行程序,而它與定時(shí)器卻有很大不同:首先腳本常駐延時(shí)程序可以自定義先延時(shí)還是 先程序的問(wèn)題,而定時(shí)器本身則是固定的先延時(shí)后程序;其次腳本常駐延時(shí)程序?qū)嶋H延時(shí)時(shí)間除了明確的延時(shí)時(shí)間外還包含程序執(zhí)行的實(shí)際時(shí)間,而定時(shí)器則會(huì)固定 的根據(jù)設(shè)置時(shí)間執(zhí)行程序,程序段執(zhí)行頻率是固定的。二者因?yàn)檫@些異同將有不同的用處,具體使用哪種根據(jù)程序?qū)嶋H情況需要而取舍。
小結(jié):魔獸世界超級(jí)助手Lua腳本語(yǔ)言的內(nèi)容介紹完了,希望通過(guò)本文的學(xué)習(xí)能對(duì)你有所幫助!