-
关注Ta
-
- 注册时间 2014-10-29
- 最后登录 2016-05-06
-
- 发帖84
- 在线41小时
- 精华0
- DB768
- 威望0
- 保证金0
- 桃子0
- 鲜花0
- 鸡蛋0
-
访问TA的空间加好友用道具
|
—
本帖被 mimi_rice 执行加亮操作(2015-01-25)
—
秒杀所有类似疾风之刃的创建角色思路 本文由按键学院提供技术支持 零基础学按键精灵群(2群):372671254 疾风之刃自动登录
引用 《疾风之刃》的自动登录和上一期的DNF的思路流程是一样的,套用进去即可。 上期院刊链接地址:学会这招,所有的游戏自动登录不在话下 创建角色——流程图 脚本界面 在该区服已创建过角色 目前疾风之刃有四个大区。 自动登录里,小编做的选区例子选择的是电信一区的幽眠峡谷。 如果之前在这个区服中创建过角色,点击进入游戏,游戏动画播放完之后会进入选频道的界面。
那么,问题来了,播放动画很耗时,跳过动画播放的方法是点击游戏窗口按ESC键。 但是,我们在上期的时候提到过,游戏窗口句柄生成并不代表窗口界面已经完全加载好显示出来了。 所以估摸不好,要在什么时候按下ESC键。 性能不好点的电脑,加载游戏的时候,虽然窗口边缘出来了,但是窗口内里还是空的透明的。所以通过找窗口标题条的图片也不得行。 例子中,小编没有跳过动画,而是等动画播放完毕。如果童鞋们有好的解决方法,欢迎跟帖分享~~ 所以,选好区服点击 进入游戏 按钮之后, 咱们就开始循环找图, 找选频道界面的这个选择频道按钮。 如果找到了,说明动画已经播放完毕。 接着就是绑定窗口了,游戏窗口的类名为"JFZR" 我们就用类名来查找窗口。 与登录窗口不同,游戏窗口是支持后台图色模式的, 测试发现,dx模式可以截取到后台图色。 图色模式:dx模式 鼠标模式:windows模式 键盘模式:windows模式 文本输入:SendString2 本例子中,游戏窗口的分辨率为1280*720,窗口模式。 选择频道默认选中的是上次登录过的频道。不需去改变它。绑定窗口之后我们点击进入频道进入选角色的界面。 循环找图判断 “创建角色” 按钮 是否出现,出现则说明到了选择角色界面。 注意:找到创建角色按钮图片的时候,界面并没有完全加载,所以如果找到就马上点击的话,会出现没有响应的情况。在找到创建角色 按钮图片的代码之后,我们可以加点延时。延时过后再点击创建角色按钮 进入创建角色界面。 在该区服未创建过角色引用 未创建过角色,在选好区服点击进入游戏之后,游戏动画播放完毕直接进入到创建角色界面。 我们通过循环找 “生成”按钮,来判断是不是已经到了创建角色界面。 疾风之刃选择角色职业的方式,是靠点击来选择的,点击生成按钮上方的小圈圈选择中意的职业。 每个圈圈之间间隔87个像素点(没有很精确,小编估算了下是87。误差一点没有关系,只要保证四个角色,点击的位置都在有效范围即可。) 第一个职业圈圈的中心点为 500,590. 也就是说,如果我们想要点击第二个的话,要在第一个的基础上,x坐标加上87个像素点,y坐标不变。 第三个的x坐标加上2个87 第四个的x坐标加上3个87 我们用列表框来作为职业选择框,列表框的索引起始是0 剑斗士放在第一位,它的索引为0 刃武者第二位,索引为1 控魔师第三位,索引为2 千月姬第四位,索引为3 列表框的ListIndex属性,返回的是当前列表框选中项的索引值。x坐标 = 500 + 87 * Form1.ComboBox1.ListIndex 这样,一行代码就可以计算出当前要创建的职业的图标x坐标的值。 x坐标的值知道了,y坐标值不变,我们就可以开始点击要创建的职业图标, 点击之后会切换职业画面,我们设置个延时,等画面切完之后,点击“生成”按钮 拓展:引用 有的游戏是通过点击左右键来滚动切换角色,进行角色职业的选择。 角色排列顺序是固定的情况下,我们可以 以默认职业作为基点,计算到自己要创建的角色,需要再此基础上点击多少次右键或者左键才能选到。 通过这样的方式,即可选择要创建的职业。 取名界面通过循环找 “名称”字样,来判断是不是已经到了取名界面。用dm插件的 SendString2命令向输入框输入名称,可以是指定的名称,也可以是随机的。 例子中,我们使用 随机取名。 怎么个随机法呢? 我的命令库——》算法 ] 算法下就有随机取姓名函数 直接调用十分方便。 如果不想随机取中规中矩的姓名, 我们也可以自己设置要随机的名字。 详细内容可参见:【院刊】-【201410期】游戏创建角色随机取名 输入名称之后,点击 创建角色 按钮。 判断名字是否重复如果取的名字重复了会出现上图中的提示 如果名字可以使用,则角色创建成功,会返回到选择角色的界面。 所以,我们点击创建角色之后,循环判断上图中的“是”按钮有没有出现(出现则返回到随机取名的步骤,重新取名重新输入。) 同时判断 “创建角色” 按钮是否出现,出现则说明创建成功,脚本结束。 整体代码- ////////////////////////////////////////////////////////////////////////////////
- // 自动登录 ////////////////
- //////////////////////////////////////////////////////////////////////////////
- 帐号 = Form1.InputBox1.Text
- 密码 = Form1.InputBox2.Text
- //////////////////////////////////
- // 释放附件、注册大漠等 ////////
- /////////////////////////////////
- PutAttachment "D:\test","*.*"'释放附件
- Call register()'调用注册大漠子程序
- dm_ret = dm.SetDict(0, "test.txt")'加载字库
- RunApp "E:\疾风之刃\TCLS\Client.exe"'启动游戏
- ////////////////////////////////////
- //// 查找登录窗口句柄 ////////
- ///////////////////////////////////
- Do
- hwnd = Plugin.Window.find(0, "疾风之刃登录程序") '查找登录窗口句柄
- Delay 200
- Loop While hwnd = 0
- ////////////////////////////////////
- //// 绑定窗口句柄 ////////
- ///////////////////////////////////
- dm_ret = dm.BindWindow(hwnd,"normal","windows","windows",0)'绑定窗口
- dm_ret = dm.GetClientRect(hwnd, x1, y1, x2, y2)'获取窗口客户区大小
- ////////////////////////////////////
- //// 判断是否在帐号输入界面 ////////
- //////////////////////////////////
- Call 判断(x1, y1, x2, y2, "判断是否在帐号输入界面.bmp")
- Rem 输入帐号密码
- Delay 1000
- MoveTo x1 + 966, y1 + 565'点击帐号输入框
- LeftClick 1
- ////////////////////////////////////
- //// 删除之前的帐号 ////////
- //////////////////////////////////
- For 20
- KeyPress 8,1
- Next
- For 20
- KeyPress 46,1
- Next
- ////////////////////////////////////
- //// 输入帐号 ////////
- //////////////////////////////////
- SayString 帐号
- ////////////////////////////////////
- //// 输入密码、点击 进入游戏 按钮 //
- //////////////////////////////////
- moveto x1+974,y1+608 '点击密码输入框
- LeftClick 1
- Delay 1000
- Call Lib.键盘.KeyList(密码, 2, 20)'输入帐号
- dm.moveto 1023,725'点击 进入游戏 按钮
- dm.LeftdoubleClick
- ////////////////////////////////////
- // 判断是否在选区界面、选区 //////
- ///////////////////////////////////
- Do
- dm_ret = dm.FindStr(x1, y1, x2, y2,"电信一区","ffffff-000000",1.0,intX,intY)
- If intX >= 0 and intY >= 0 Then
- dm.moveto intx, inty
- dm.leftclick '点击"电信一区"
- End If
- Delay 200
- Loop While dm_ret = - 1
- Do
- dm_ret = dm.FindStr(x1, y1, x2, y2,"幽眠峡谷","ffffff-000000",1.0,intX,intY)
- If intX >= 0 and intY >= 0 Then
- dm.moveto intx, inty
- dm.leftclick '点击"幽眠峡谷"
- End If
- Delay 200
- Loop While dm_ret = - 1
- ////////////////////////////////////
- //// 点击"进入游戏" 按钮 ///////
- //////////////////////////////////
- dm.moveto 1035,714
- dm.leftclick
- ////////////////////////////////////
- //// 判断登录是否成功 ////////
- //////////////////////////////////
- Do
- ' 查找 密码错误 界面
- dm_ret = dm.FindPic( x1, y1, x2, y2,"确定.bmp","000000",0.9,0,intX,intY)
- If intX >= 0 and intY >= 0 Then
- Delay 1000
- dm.moveto intX, intY
- dm.leftclick
- Goto 输入帐号密码 '出现错误提示,点击确定按钮之后,重新开始输入帐号密码
- Exit Do
- End If
- '查找创建角色窗口句柄
- hwnd = Plugin.Window.find("JFZR",0)
- Delay 200
- Loop While hwnd = 0
- dm_ret = dm.UnBindWindow() '解绑登录窗口
- ////////////////////////////////////////////////////////////////////////////////////
- ////// 创建角色 ////////////////
- //////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////
- ////// 该区服已创建过角色,则执行选频道操作。未创建过则不选频道 ////
- /////////////////////////////////////////////////////////////////
- If Form1.OptionBox1.Value = 1 Then
- //////////////////////////////////////
- /// 判断是否在选择频道界面 ///////
- /////////////////////////////////////
- Call 判断(0, 0, 2000, 2000, "选择频道界面.bmp")
- ////////////////////////////////////
- //////// 绑定窗口句柄 ////
- ////////////////////////////////////
- dm_ret = dm.BindWindow(hwnd,"dx","windows","windows",0)'绑定窗口
- dm_ret = dm.GetClientRect(hwnd, x1, y1, x2, y2)'获取窗口客户区大小
- //////////////////////////////////////
- /// 点击 选择频道 按钮 ///////
- /////////////////////////////////////
- Delay 1000
- dm.moveto 637,653
- dm.leftclick
- //////////////////////////////////////
- ////// 查找创建角色按钮 ///////
- /////////////////////////////////////
- Do
- dm_ret = dm.FindPic( x1, y1, x2, y2,"创建角色.bmp","000000",0.9,0,intX,intY)
- If intX >= 0 and intY >= 0 Then
- Delay 2000
- dm.moveto intX, intY
- dm.leftclick
- Exit Do
- End If
- Loop While dm_ret = - 1
- End if
- ///////////////////////////////////////
- ////// ////////
- //////////////////////////////////////
- //////////////////////////////////////
- ////// 判断是否在创建角色界面 ////////
- /////////////////////////////////////
- Call 判断(0, 0, 2000, 2000, "判断是否在创建角色界面.bmp")
- ////////////////////////////////////
- //////// 绑定窗口句柄 ////
- ////////////////////////////////////
- dm_ret = dm.BindWindow(hwnd,"normal","windows","windows",0)'绑定窗口
- dm_ret = dm.GetClientRect(hwnd, x1, y1, x2, y2)'获取窗口客户区大小
- ////////////////////////////////////////
- //////// 点击职业图标 ////////
- ///////////////////////////////////////
- 职业序号= Form1.ComboBox1.ListIndex
- x坐标 = 500 + 87 * 职业序号
- dm.moveto x坐标, 590
- dm.leftclick
- ////////////////////////////////////////
- //////// 点击"生成"按钮 ////////
- ///////////////////////////////////////
- Delay 2000
- dm.moveto 634,673
- dm.leftclick
- ////////////////////////////////////////
- //////// 输入随机姓名 ////////
- ///////////////////////////////////////
- rem 输入随机姓名
- Call 判断(x1, y1, x2, y2, "输入名字.bmp")
- 随机姓名 = Lib.算法.随机取姓名()
- dm.moveto 566,576 '点击输入框
- dm.leftclick
- dm.SendString2 hwnd, 随机姓名
- Delay 200
- dm.moveto 630,670
- dm.leftclick
- ////////////////////////////////////////
- //////// 判断名字是否被占用 ////////
- ///////////////////////////////////////
- Do
- dm_ret = dm.FindPic( x1, y1, x2, y2,"名字被占用.bmp","000000",0.9,0,intX,intY)
- If intX >= 0 and intY >= 0 Then
- Delay 1000
- dm.moveto intX, intY
- dm.leftclick
- Goto 输入随机姓名 '出现错误提示,点击确定按钮之后,重新开始输入随机姓名
- Exit Do
- End If
- ks = dm.FindPic( x1, y1, x2, y2,"创建角色.bmp","000000",0.9,0,intX,intY)
- Loop While ks = - 1
- ////////////////////////////////////////
- ////// "判断图片是否存在"子程序 ////
- ///////////////////////////////////////
- Sub 判断(x, y, x2, y2,图片名称)
- Do
- dm_ret = dm.FindPic(x1, y1, x2, y2,图片名称,"000000",0.9,0,intX,intY)
- Delay 200
- Loop While dm_ret = - 1
- End Sub
- ////////////////////////////////////////
- ////// 注册大漠 ////////
- ///////////////////////////////////////
- Sub register()
- Set ws = createobject("Wscript.Shell")
- ws.run "regsvr32 atl.dll /s"
- Set ws = nothing
- call Plugin.RegDll.Reg ( "D:\test\dm.dll")
- Set dm = createobject("dm.dmsoft")
- ver = dm.ver()
- If len(ver) = 0 Then
- MessageBox "插件注册失败,检查系统是否禁用了vbs脚本权限"
- EndScript
- End If
- dm.SetPath "D:\test"
- End Sub
- ////////////////////////////////////////
- ////// "脚本停止子程序" ////////
- ///////////////////////////////////////
- Sub OnScriptExit()
- dm_ret = dm.UnBindWindow() //解绑窗口
- End Sub
Q文件下载: 疾风之刃登录 创建角色.rar[点击下载](777 K) 下载次数:0 累计下载获得 DB 没有记录 刀 [ 此帖被mimi_rice在2015-01-25 15:53重新编辑 ]
|