本教程由“鬼谷子”鬼总原创,屌丝托代发而已。。。各位看官请注意!!!
BY:鬼谷子

首先声明:本帖仅仅针对最初级接触脚本编写和想自己编写脚本玩玩的WOW玩家,仅仅涉及LUA语言里与WOW有关的东西。更高深的LUA脚本语言技巧请自行百度学习。LUA高手可以绕道。 本帖的目的是在最短的时间内仅仅通过本帖的内容就让你学会怎么依葫芦画瓢学会简单的LUA脚本编写,并且足够你平常玩WOW所用。 在开始的时候,我想先简单解释一下脚本、宏、方案的区别,以便让你在主观上对脚本有个基本认识。 脚本是通过lua语言手动打字编写的自动施法程序,相当于复杂而更智能强大的宏,强大到可以实现一个职业所有操作放进一个脚本实现;他的功能通过方案同样能实现,但脚本也能实现一些方案不能实现的特殊操作。脚本比方案高效而且占内存小。
宏在wow里经常用,只能用少数字符(最多255个)实现简单功能,如/cast 英勇打击;
方案是在YJ里通过把所有你职业的技能拖进去,通过点点鼠标设置好施法条件后,形成的一个自动施法的lua文本,他对于初学者来说最容易上手。 好了,现在开始说说脚本吧。 脚本是用LUA语言编写的,LUA语言是巴西里约内热卢圣保罗天主教传信大学发明的,玻璃渣也利用这种语言来编写脚本。如果你在大学学过C语言,你会发现LUA语言和C语言特别像,某些语句的功能如if A then B,elseif C then D的功能是一模一样的。 一个脚本编写好后,需要插件去执行它采用运行起来,就像一个windows XP操作系统必须要装在一台电脑上才能用起来是一个道理的。运行脚本的插件有 Automacro或者YJ。初学者在YJ上用就行了。 在YJ上编写脚本按下图操作: 点方案设定(圈1)-创建自定义宏或脚本(圈2)-新建脚本取个名字(圈3)-点这个名字(圈4)-编辑(圈5),就会弹出一个脚本编辑框。
学脚本之前,你得先搞清楚一些简单的LUA语言的组成,LUA语言一般包含变量、函数、语句。我以数学方程式y=ax+b举个例子。整个方程式y=ax+b在LUA语言里可以看成是一条语句,x相当于变量,a,b相当于函数。看起来很简单吧! 我们先学学定义变量和给变量赋值。 例子1:定义一个变量叫xue,并把当前目标的血量值赋值给xue Xue = UnitHealth(“target”) 这句语句中,=号表示把后面的东西的值赋给前面的变量,UnitHealth(“target”)是一个函数,它是暴雪定义的一个API函数,还有很多像这样的中API函数是暴雪都已经定义好的,你可以在百度中搜到。 target是“当前目标”的英文;相应的还有player,自己;focus,焦点目标 例子2: Xue ,sudu= UnitHealth(“target”), GetUnitSpeed("player") 这句定义的意思是把目标的血量值赋值给xue,把玩家自己的当前移动速度值赋值给sudu。 像上面定义的这个变量,叫做全局变量,它是在整个LUA脚本中都可以调用的。 还有一种叫局部变量,只能在整个LUA脚本的部分范围才能用,它的定义是这样的: local xue= UnitHealth(“target”) 要实现将当前目标的血量值赋值给xue,还可以利用特殊函数aml(Unit,p,q); UnitHealth(“target”)可以获得目标的血量值,它同样可以,它还可以获得血量百分比,如: Xue = aml("target" ,”%”) 在wow里,我们编写脚本用到的最多的就是if A then B语句,及其变种,如:if A then B elseif C then D,或者if A then if Bthen C等等。 if A then B的意思就是,如果条件A成立,那么就执行B。就好象说如果房间门是开着的那我们就进房间,门是关着的那就啥也不干。 if A then B elseif C then D的意思就是,如果条件A成立,那么就执行B,如果条件A不成立而条件C成立,那就执行D。就好象说如果房间门是开着的那我们就进房间,如果门没开着而是关着的那就去睡觉。 if A then if B then C的意思就是,如果条件A成立,再看如果条件B也成立,那就执行C。就好象说如果房间门是开着的,再看如果房间里没人,那我们就进房间。 每个if语句最末尾必须有个end,意思是这个if语句结束了。 现在开始切入正题: 例子1:我们先举个法师保命的简单例子: 我们想实现当我身上有治疗石(术士拉的糖)的时候,且血低于75%的时候就自动吃治疗石,如果治疗石没有且血低于30%就自动冰箱。
首先,我们分析一下:一般我们吃治疗石都是在战斗状态,因为我平时从高处掉下来血少我就不浪费治疗石了,我可以吃法师的蛋糕,所以我需要在“AM函数使用引导帖”找到判断是否在战斗状态的函数,就是amzd(),然后要判断现在治疗石能不能吃,又找到函数amisr,再看看治疗石是否在CD,又找到函数amcd,再看看自己的血是不是少于75%,又找到aml,好了,要找的都找齐了,现在就把它们写进一个语句里。 再看冰箱的情况,同样我们要在战斗状态才用冰箱,找到amzd(),再看看冰箱技能是不是CD,又找到函数amcd,再看看自己的血是不是少于30%,又找到aml,好了,要找的都找齐了,现在就把它们写进一个语句里。
最终语句就是下面这样的:
语句中,and这个词一看就懂是“并且”的意思,相对用的还有or代表“或者”,not代表“不是”。 每个if语句后面都要带个return;和end,并且只有return后面才有个分号。 例子2:我们举个法师自动使用深度冻结技能的编写例子。 能对目标使用深度冻结技能的情况有两种,1、当目标被水元素的冰冻术或自己的冰霜新星技能冰住后;2、当你点了寒冰结界天赋,对方近战攻击你而被你的寒冰结界冰住的时候;3、当自己身上有寒冰指BUFF的时候。
我们可以这样编写这个脚本:
这个脚本中,我们使用了局部变量Tbi来代表当前目标身上的BUFF,使用了局部变量Tbm来代表自己身上的BUFF,由于我想让这个局部变量只在我想用的这块范围内生效,所以在首尾使用了do….end来界定这个范围。第一个if语句的翻译就是:如果我在战斗状态,并且目标可被深度冻结,并且我的深度冻结技能CD好了,并且目标被冰冻术或者冰霜新星给冰住了,就对目标使用深度冻结技能。注意这句的or前后两个函数被括号给括起来了,意思就是只要被冰冻术或者冰霜新星这两个任意一个技能冰柱就行,因为or与and是同优先级的,故要单独括起来判断冰冻术、冰霜新星这两个技能。 例子3:再举个牧师加血的例子
这句的翻译就是:当目标血少于90%并且可以对其使用治疗之环的目标大于1个以上并且目标在团队中并且目标没死就对其使用治疗之环技能。 例子4:再举个冰法控制水元素宝宝的例子:
这两句的翻译就是:当我在战斗状态并且宝宝离我35码远时,就让宝宝跟随;当我在战斗状态并且宝宝离我25码远时,就让宝宝停下来攻击我的当前目标; 例子5:再举个奥法在有4层奥冲DEBUFF但是没有触发奥术飞弹时释放技能的例子:
按顺序翻译就是: 如果我在战斗状态并且我的奥术充能DEBUFF有4层并且我身上没有奥术飞弹BUFF并且我身上没有2T16套装的法力高超BUFF并且我的蓝大于96%那就释放奥术冲击技能,否则就打奥术弹幕消层。如果上面的不成立,而我在战斗状态并且我的奥术充能DEBUFF有4层并且我身上没有奥术飞弹BUFF并且我身上有1层2T16套装的法力高超BUFF并且我的蓝大于92%那就释放奥术冲击技能,否则就打奥术弹幕消层。如果上面的再不成立,而我在战斗状态并且我的奥术充能DEBUFF有4层并且我身上没有奥术飞弹BUFF并且我身上有2层以上2T16套装的法力高超BUFF那就继续释放奥术冲击技能。 好了,举了这几个例子,你理解完之后,那编写一个完整脚本的工作就已经完成90%了,你要做的就是仿照这些例子,依葫芦画瓢写你自己职业的语句。 剩下的10%就是你每写好一个技能的脚本,把它加入到方案里,去打桩试试效果,有问题再改进。加入到方案的操作如下: 新建一个方案(圈6)或者打开一个已有的方案,点这个方案并勾选(圈7),点添加宏或脚本(圈8),选择你刚创建的脚本(圈9)并勾选(圈10),然后目标选“无目标”(圈11),在属性设置里(圈12)选择按“标准格式运行”(圈13)(圈14)。
你把你职业的所有技能一个个都写到一个整个脚本里后就是你这个职业的完整脚本。 要想编写一个完善的脚本,需要你细心的检查和耐心的打桩或者实战测试改进,希望本期课程能为你成为脚本高玩抛砖引玉。
|