Lua 语言 详解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

end end tmAutoPress=settimer(msPress, 'runAutoPressFunc') 这样能自动吃药且不浪费药了,是不是好了呢?在实际中你还会发现 有时候血补上,而蓝没补上,有时候蓝补上而血没补上,是什么原因呢?因为我 们把血魔监视放在离一个定时器函数,理论上看似这并没有问题,达到判断条件 就应该加血加蓝的,但因为我们设置了吃药间隔时间,因而吃红后必然影响吃蓝 的监视,吃蓝时必然会影响吃红的监视!那怎么办呢? 有想法的人会说分开2个定时器监视不就好了?说的好,是这样的, 下面我们就把它改成2个定时器的模式来看看,便于名称命名的区别,我们将部 分名称改变一下如下: hppt=0.75 --血量值监视限度保户值,即血量值的 75% mppt=0.15 --魔法值监视限度保户值,即魔法值的 15% msPress=200 --监视间隔时间,暂停200ms msHPPressWait=7000 --吃红间隔时间,7秒 msMPPressWait=9000 --吃蓝间隔时间,9秒 function runAutoHPPressFunc () if 1==isplaying() then --当游戏正在进行时才执行 unitid,unithandle=getselunitex() --获取当前英雄单位ID和句柄信息 hpmax,hp,mpmax,mp= getunitattribute(unithandle, 1, 2, 3, 4) --获取该单位的血魔的最大值和实际值 if hp/hpmax<hppt then --判断当前的血量值比率是否小于设定 值 keypress(103) --小于则执行小键盘7按键加血 killtimer(tmAutoHPPress) --关闭定时器 sleep(msHPPressWait) --延时加血操作 tmAutoHPPress=settimer(msPress, 'runAutoHPPressFunc') --打开定时器 end end end function runAutoMPPressFunc () if 1==isplaying() then --当游戏正在进行时才执行 unitid,unithandle=getselunitex() --获取当前英雄单位ID和句柄信息 hpmax,hp,mpmax,mp= getunitattribute(unithandle, 1, 2, 3, 4) --获取该单位的血魔的最大值和实际值 if mp/mpmax<mppt then --判断当前魔法值是比率否小于设定值 keypress(104) --小于则执行小键盘8按键加魔 killtimer(tmAutoHPPress) --关闭定时器 sleep(msMPPressWait) --延时加血操作
hpmax,hp,mpmax,mp= getunitattribute(unithandle, 1, 2, 3, 4) --获取该单位的血魔的最大值和实际值 if mp/mpmax<mppt then --判断当前魔法值是比率否小于设定值 keypressEx (104) --小于则执行小键盘8按键加魔 killtimer(tmAutoHPPress) --关闭定时器 sleep(msMPPressWait) --延时加血操作 tmAutoHPPress=settimer(msPress, 'runAutoHPPressFunc') --打开定时器 end end end tmAutoHPPress=settimer(msPress, 'runAutoHPPressFunc') tmAutoMPPress=settimer(msPress, 'runAutoMPPressFunc') 这样更改后,就可以实现无限制的自动吃药了,是不是很爽?爽的话 就嚎叫吧,O(∩_∩)O~! 然而有的朋友玩的时候还会发现一个问题,虽然以上程序能自动吃药 且不浪费还能挂机,但是有的图红蓝有多种,我们包裹里可能放了多种药,而每 种药冷却时间较长,一种药补血可能补不过来会导致英雄挂掉!为了解决这个问 题我们可以再增加几个血量限度保护值和对应的补血定时器程序,前面我们也提 到了防止多个判断写在一起导致延时时其后的程序有可能不被实际需要时而未执 行的问题。我们再增加多个血量监视吃药定时器及函数,同时为了变量和程序名 的规整,我们将部分名称稍作改变如下程序: hppt0=0.75 --第一重血量值监视限度保户值,即血量值的 75% hppt1=0.55 --第二重血量值监视限度保户值,即血量值的 55% hppt2=0.35 --第三重血量值监视限度保户值,即血量值的 35% mppt=0.15 --魔法值监视限度保户值,即魔法值的15% msPress=200 --监视间隔时间,暂停200ms msHPPressWait0=7000 --第一重吃红间隔时间,7秒 msHPPressWait1=8000 --第二重吃红间隔时间,8秒 msHPPressWait2=5000 --第三重吃红间隔时间,5秒 msMPPressWait=9000 --吃蓝间隔时间,9秒 function keypressEx(keycode) hWar3 = getwar3window() sendmessage(hWar3, 256, keycode, 0) sleep(1) sendmessage(hWar3, 257, keycode, 0) end function runAutoHPPress0Func () if 1==isplaying() then --当游戏正在进行时才执行 unitid,unithandle=getselunitex() --获取当前英雄单位ID和句柄信息 hpmax,hp,mpmax,mp= getunitattribute(unithandle, 1, 2, 3, 4)
脚本制作实例讲解: 脚本制作实例讲解:
助手的Lua脚本制作需要你对编程有一定基础,特别是脚本编程;需要你熟悉Lua 基本的语法结构、程序结构、使用习惯及约定、注意事项等。只要你有一定的编程基础, 并基于以上知识的了解和学习,脚本制作将不难进行。助手的Lua脚本制作中关于模拟操 作的脚本你还需要清楚你实现模拟操作的每一个细节,要能分解每一个细节到程序实现 上,这样你才能更好的完成脚本。下面我们举出一个具体的魔兽操作实例脚本给大家一个 脚本制作实现思路和方式。我们来看一个魔兽内吃药脚本的实现。
tmAutoHPPress=settimer(msPress, 'runAutoHPPressFunc') --打开定时器 end end end tmAutoHPPress=settimer(msPress, 'runAutoHPPressFunc') tmAutoMPPress=settimer(msPress, 'runAutoMPPressFunc') 到此功能和使用已完全实现,但我们会发现这样的方式必须要魔兽处 于前端才能自动吃药!而我们想要把魔兽最小化后还能自动吃药就不行了!那我 们要实现魔兽不在前端或最小化时如何自吃药呢?熟悉windows程序设计或原理 的朋友就会想到用消息机制吧?是的,就要用到消息机制,来实现吃药吧!我们 为程序增加一个keypressEx函数来实现消息机制按键,更改脚本为如下代码: hppt=0.75 --血量值监视限度保户值,即血量值的 75% mppt=0.15 --魔法值监视限度保户值,即魔法值的 15% msPress=200 --监视间隔时间,暂停200ms msHPPressWait=7000 --吃红间隔时间,7秒 msMPPressWait=9000 --吃蓝间隔时间,9秒 function keypressEx(keycode) hWar3 = getwar3window() sendmessage(hWar3, 256, keycode, 0) sleep(1) sendmessage(hWar3, 257, keycode, 0) end function runAutoHPPressFunc () if 1==isplaying() then --当游戏正在进行时才执行 unitid,unithandle=getselunitex() --获取当前英雄单位ID和句柄信息 hpmax,hp,mpmax,mp= getunitattribute(unithandle, 1, 2, 3, 4) --获取该单位的血魔的最大值和实际值 if hp/hpmax<hppt then --判断当前的血量值比率是否小于设定 值 keypressEx (103) --小于则执行小键盘7按键加血 killtimer(tmAutoHPPress) --关闭定时器 sleep(msHPPressWait) --延时加血操作 tmAutoHPPress=settimer(msPress, 'runAutoHPPressFunc') --打开定时器 end end end function runAutoMPPressFunc () if 1==isplaying() then --当游戏正在进行时才执行 unitid,unithandle=getselunitex() --获取当前英雄单位ID和句柄信息
开始编写测试修改代码: 3. 开始编写测试修改代码:
基于以上的准备那我们先新建一个脚本,暂时命名为“runAutoPress.txt”吧, 下面就逐步开始代码吧: 1) 先定义几个可能用到的变量和初始值,并将血瓶放到包裹7位置,魔瓶放到 包裹8位置。 hppt=0.75 --血量值监视限度保户值,即血量值的 75% mppt=0.15 --魔法值监视限度保户值,即魔法值的 15% msPress=200 --监视间隔时间,暂停200ms 2) 设置对应血魔监视的定时器函数,并加入基本代码: function runAutoPressFunc() if 1==isplaying() then --当游戏正在进行时才执行 unitid,unithandle=getselunitex() --获取当前英雄单位ID和句柄信息 hpmax,hp,mBiblioteka Baidumax,mp= getunitattribute(unithandle, 1, 2, 3, 4) --获取该单位的血魔的最大值和实际值 if hp/hpmax<hppt then --判断当前的血量值比率是否小于设定 值 keypress(103) --小于则执行小键盘7按键加血 end if mp/mpmax<mppt then --判断当前魔法值是比率否小于设定值 keypress(104) --小于则执行小键盘8按键加魔
end end end tmAutoPress=settimer(msPress, 'runAutoPressFunc') keypress(103)可用runkeys(“使用物品dpsp”)代替,keypress(104)可用 runkeys(“使用物品lclp”),其中dpsp为中型生命药水ID,lclp为中型魔法药水 ID,2者效果相同,只是参数及使用不同,keypress需要指定物品位置,而 runkeys需要指定使用物品ID。这样基本就可以实现了自动吃药。但实际中我们 会发现血量达到保户值时,使用药品没能立即补上时,药水将在监视时间间隔内 达到程序条件时一直使用!这就无异于浪费药水。这当然不是我们想要的!那如 何解决呢?有的人会说那把监视时间调大吧!调大是可以降低浪费吃药的程度! 但是随之会产生不能及时吃药的问题!因为监视时间间隔过大,在这监视时间间 隔里英雄很有可能会死掉,也显然不好。不能增加监视时间那这个定时器工作模 式如何改进呢?我们可以利用关闭定时器的方法,关闭掉定时器加入延时,延时 过后然后我们再打开它就OK,既然想明白了那我们改程序: hppt=0.75 --血量值监视限度保户值,即血量值的 75% mppt=0.15 --魔法值监视限度保户值,即魔法值的 15% msPress=200 --监视间隔时间,暂停200ms msHPPressWait=7000 --吃红间隔时间,7秒 msMPPressWait=9000 --吃蓝间隔时间,9秒 function runAutoPressFunc() if 1==isplaying() then --当游戏正在进行时才执行 unitid,unithandle=getselunitex() --获取当前英雄单位ID和句柄信息 hpmax,hp,mpmax,mp= getunitattribute(unithandle, 1, 2, 3, 4) --获取该单位的血魔的最大值和实际值 if hp/hpmax<hppt then --判断当前的血量值比率是否小于设定 值 keypress(103) --小于则执行小键盘7按键加血 killtimer(tmAutoHPPress) --关闭定时器 sleep(msHPPressWait) --延时加血操作 tmAutoHPPress=settimer(msPress, 'runAutoHPPressFunc') --打开定时器 end if mp/mpmax<mppt then --判断当前魔法值是比率否小于设定值 keypress(104) --小于则执行小键盘8按键加魔 killtimer(tmAutoHPPress) --关闭定时器 sleep(msMPPressWait) --延时加血操作 tmAutoHPPress=settimer(msPress, 'runAutoHPPressFunc') --打开定时器 end
脚本实例: 脚本实例:魔兽吃药脚本 思路准备: 1. 思路准备:
魔兽吃药是玩魔兽的一个关键项,然而有些地图药品繁多更显吃药之特点。 吃药虽然是一个简单的事情,但是当我们玩一个单机或挂机升级的图时,能自动 吃药挂机那将是有用的了,我们就此来进行实现魔兽自动吃药挂机的脚本,其中 吃药最常见的就是一点即用型药品了,还有一种使用后需要指定目标的麻烦点, 但是新版本的智能改键指令加上执行改键序列函数实现起来也是很简单的事。而 且最好能挂机吃药魔兽可以不再前端,那我们就可以挂机干其他事了^_^。
实现思想: 2. 实现思想:
要进行自动吃药监视我们要先想如何自动法?自动的前提当然是要定时检测 当前英雄血蓝量,这就需要用到定时器和延时;检查血量又需要用到查询单位属 性getunitattribute函数,此外还需要用到键鼠模拟操作函数等。下面我们以一 个具体地图实例来讲解脚本制作。地图就选择风霜的《遗失的记忆》吧
相关文档
最新文档