您好,欢迎访问三七文档
Lua语言学习脚本基本流程•学习目的:了使大家更快的了解Lua这门语言、了解机器人基本函数库,熟练机器人编写网络模拟脚本的基本流程。•学习范围:Lua语言、用Lua写的脚本流程一、走进Lua的世界•目前很多程序语言都专注于帮你编写成千上万行的代码,所以此类型的语言所提供的包、命名空间、复杂的类型系统及无数的结构,有上千页的文档需要操作者学习。•而lua并不帮你编写大量的代码程序,相反的,Lua仅让你用少量的代码解决关键问题。Lua是一个小巧而简单的语言,因为lua不致力于做c语言已经做的很好的领域,lua所提供的机制是c不善于的:高级语言、动态接口、简洁、易于测试和调试等。正因如此,lua具有良好的安全保证,自动内存管理,简便的字符串处理功能及其他动态数据的改变。•Lua不仅是一种易于扩展的语言,也是一种易于整合语言;lua支持基于组件的,我们可以将一些已经存在的高级组建整合在一起实现一个应用软件。Lua特有的特征:•可扩展性:Lua的扩展性非常卓越,以至于很多人把Lua用作搭建领域语言的工具(注:比如游戏脚本)。Lua的很多功能都是通过外部库来扩展的。Lua很容易与c/c++、java、fortran以及其他语言接口。•高效率:Lua有很高的执行效率。•与平台无关:Lua几乎可以运行在所有我们听说过的系统上。•下面我们用lua写一个大家经常能看到的“helloworld”Print(“HelloWorld!”)•将此文件类型保存为test.lua格式,然后进行编译,你就能看到你所希望看到的“helloworld”了。让我们来看一下稍微复杂一点的例子:functionfun(n)ifn==0thenreturn1elsereturnn*fun(n-1)endendprint(Enteranumber:)a=io.read(*number)print(fun(a))这个例子定义了一个函数,计算输入参数n的阶乘;本例要求用户输入一个数字N,然后打印N的阶乘。•1,全局变量:全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是nil例如:print(b)--nilb=10print(b)--10•局部变量用关键字local定义例如:Whilei=xdoLocalx=i*2Print(x)I=i+1end•2,词法约定注意:lua中是大小写敏感的•注释:单行注释:--多行注释:--[[--]]•..在lua中是字符串连接符例如:Print(“hello”..”world”)--helloworldPrint(0..1)--01•3,像10=“10”这样的比较永远都是错的。如果需要显示将string转成数字可以使用函数tonumber(),如果string不是正确的数字该函数将返回nil。反之,可以调用tostring()将数字转换成字符串,这种转换一直有效•算术运算符:二元运算符:+-*/^(加减乘除幂)一元运算符:-(负值)这些运算符的操作数都是实数。•关系运算符:====~=这些操作符返回结果为false或者true•当不同类型的值的时候要特别注意:0==0--false215--true215--false•逻辑运算符:andornot逻辑运算符认为false和nil是假(false),其他为真,0也是true.and和or的运算结果不是true和false,而是和它的两个操作数相关。aandb--如果a为false,则返回a,否则返回baorb--如果a为true,则返回a,否则返回b例如:print(4and5)--5print(niland13)--nilprint(falseand13)--falseprint(4or5)--4print(falseor5)--5基本语法:•赋值语句:lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。a,b=10,2*x--a=10;b=2*x•控制结构语句:控制结构语句的条件表达式结果可以是任何值,lua认为false和nil为假,其他值为真。•1)if语句,有三种形式:ifconditionsthenthen-partend;•ifconditionsthenthen-partelseelse-partend;•ifconditionsthenthen-partelseifconditionsthenelseif-part---多个elseifelseelse-partend;•2)while语句:whileconditionsdostatements;end;例如:Whilei=xdoLocalx=i*2Print(x)I=i+1end•3)repeat-until语句:repeatstatements;untilconditions;•4)for语句有两大类:第一,数值for循环:forvar=exp1,exp2,exp3doexp1为变量初始值,exp2为变量终止值,其中exp3可以省略,默认1loop-partend例如:fori=10,1,-1doprint(i)10,9,8,7,6,5,4,3,2,1end第二:泛型for循环好了,简单的了解了lua,接下来我们就进入游戏充值了。(更为详细的lua语请大家通过lua程序设计_Programming_in_lua.pdf了解)二、Lua中几个常用的函数•1,string.find(s,pattern[,init[,plain]]):查找pattern在s中的位置,返回pattern在s中的开始位置和结束位置.init是开始查找的位置.plain未知.例如:str=hjfdfhsdhfdsfdec=string.find(str,s)print(dec)---7•2,string.len(s):返回字符串的长度.例如:str=hjfdfhsdhfdsfdec=string.len(str)print(dec)---13•3,string.lower(s):变小写.例如:str=HJFDFHSDHFDSFdec=string.lower(str)print(dec)---hjfdfhsdhfdsf•4,string.upper(s):变大写.例如:str=hjfdfhsdhfdsfdec=string.upper(str)print(dec)---HJFDFHSDHFDSF•5,string.sub(s,i[,j]):取s中从i开始到j为止的自字符串.默认j为长度.-i表示倒数.例如:str=HJFDFHSDHFDSFdec=string.sub(str,2,7)print(dec)---JFDFHS•6,string.gsub(s,模式串,替换串):全局字符串替换例如:s=string.gsub(luaiscute,cute,greate)print(s)---luaisgreate•7,string.rep(s,n):将s拷贝n份,并连接起来,返回.例如:str=HJFDFHSDHFDSFdec=string.rep(str,2)print(dec)---HJFDFHSDHFDSFHJFDFHSDHFDSF三、游戏充值中主要步骤:请求充值页面提交充值数据提交数据失败解析充值页面充值成功充值失败请求充值页面失败okerrorokerrorerror机器人充值结束ok机器人充值开始2、esales充值流程如下图:请求登陆页面提交登陆数据提交数据失败解析登陆页面登陆成功登陆失败请求登陆页面失败okerrorokerrorerror机器人充值结束ok机器人充值开始提交充值数据解析充值结果okerror提交数据失败充值成功充值失败errorokokok四、封装函数的大概用法•1,comm库说明:用于通用字符串处理,类型转换等•(1)字符串分隔--inputstring:原字符串--separator:分隔符comm:split(inputstring,separator)•(2)转化为非Nil的字符串comm:tostring(str)•(3)去掉字符串两端的空格comm:trim(str)--str表示字符或是字符串•(4)对字符串进行MD5加密A,Md5SignL(inputstring)B,UrlEncode(text,encoding,All)•2,errorlib.lua(主要用到的错误码)•(1)验证码相关错误--注意:卡号和密码错误直接报卡密库存错误gt_Error[VDC_001]={code=32301,msg=[充值前]等待人工校验码超时}gt_Error[VDC_002]={code=32302,msg=[充值前]校验码识别错误}•(2)充值时页面错误gt_Error[PBP_001]={code=52201,msg=[充值前]远程服务器无法联接或返回的数据包无法解析}gt_Error[PBP_002]={code=52202,msg=[充值前]提交到远程服务器的数据错误}gt_Error[“PBP_99”]={code=“53199”,msg=“[充值后]无法成功获取最终的充值页面,该订单已交由人工审}其中主要用到的是001和99;•(3)用户信息异常22200(userinformation)主要用到gt_Error[UIF_004]={code=22101,msg=用户帐户信息错误}gt_Error[UIF_005]={code=22204,msg=订单传入数据有误}•3,htmllib.lua说明:用于HTML文件页面的处理•(1)加载并解析HTML--html:HTML代码html:load(html)--加载html页面•(2)判断指定ID的元素是否存在--id:元素路径html:exist(id)•(3)对网页中javascript的处理html:script(tagid,html)•4,lualib.lua说明:用于系统级函数封装•(1)当前线程暂停指定的时候--sec:毫秒数lua:sleep(sec)•(2)创建进程锁--name:锁名称lua:createLock(name)•5,masklib.lua说明:用于验证码识别•(1)获取验证码识别值--lib:验证码识别库--data:验证码数据--odds:验证码信心率mask:get(lib,url,odds,len)验证码容易识别,通过机器人自动获取验证码•(2)人工验证码图像识别为文本--[in]v1:验证码地址--[in]v2:验证码图像文件扩展名--[out]:nil-失败,验证码文本-成功mask:getmaskbyMan(maskurl,ext)验证码难以识别。机器人无法自动识别,必须通过人工输入校验码,其中ext指的是图片的格式,比如bmp、jpg、png等•6,PwdGateReportlib.lua说明:发送密码网关获取密码•(1)根据账账户ID获取密码--参数1:账户ID--参数2:是否刷新密码--返回值:数组1:用户名,2:登录密码3:交易密码4:KEYPwdGateReportlib:GetAccountInfo(accid,f5)--主要用于esales充值•(2)对卡密进行DES解密PwdGateReportlib:DESDecrypt(signkey)--主要用于卡密充值,其中signkey是卡密密码•7,sdblib.lua说明:用于数据库操作--执行数据为操作--proc:存储过程名称--...:存储过程参数sDB:excute(proc,...)•8,siolib.lua说明:用于文件操作,包括文本文件和INI文件•(1)读取文件--filename:文件路径sIO:read(filename)例如:xxx.html=sIO:read(“c:\\js.html”)–加入文件路径是在c盘•(2)将文本写入文件--fil
本文标题:Lua_语言学习
链接地址:https://www.777doc.com/doc-3967526 .html