闲着玩游戏,看最终幻想14排名挺高,试着玩了玩。游戏体验还不错,就是交朋友有点麻烦,很难建立战斗友情。
休闲职业比如说钓鱼玩起来很枯燥,所以写了个脚本,平均正常运行1小时吧。
由于是通过界面识别的,所以技术含量不是很高,但是我觉得对于大部分了解程序的同学们来说还是可以理解的(外挂大神就飘过吧。。我知道这实在是不上台面。。)
游戏脚本制作的软件不是很多,大部分都要收费,所以我就用的按键精灵9,因为它封装了些不错的功能。
下面附上原理:
1.界面识别需要标志物,这里我是用鱼竿顶端的绿灯作为标志(游戏中是使用技能点亮的)【误差:绿灯颜色会随位置、光线、角度的不同而有偏差,例:某地区不同光线颜色范围由20FFFF~5EFFFF】
2.当标志位置几乎不变的时候判断为没有鱼上钩,当标志位置移动较大时判断为有鱼咬饵【误差:鱼竿会随风摇摆,不同视角看到的偏移是不同的】
3.收杆动作有多种,耗时不同,所以多次延时尝试抛饵【误差:脱钩4s收回,普通鱼8s收回,优品鱼可能到11s】
代码结构如下:
1.寻找游戏句柄
2.在游戏窗口中寻找鱼竿顶端绿灯
3.等待玩家收杆,并开始自动钓鱼
For 次数{
4.抛竿
5.寻找绿灯标志
6.找到标志后,进入标志位移判断阶段
7.标志位移超过常数,表明有鱼咬钩,拉杆
8.延时等待
}
功能扩展:
1.由于绿灯颜色根据游戏中光线明亮会有变化,增加颜色偏差指数
2.由于可能存在步骤5的无限循环,所以加入第二个线程。在进入步骤5时开启线程2,若5秒后尝试再次抛饵,10秒后报警提示
可扩展功能:
步骤2中加入标志位移测算
鱼饵用尽后自动更换
钓鱼一定时间后自动位移,防鱼洞枯竭
下载地址:链接:http://pan.baidu.com/s/1jGoVgoQ 密码:xcf8
源代码如下:
UserVar precision=0.9 "颜色匹配精度0.75-1" UserVar range = 13 "鱼鳔浮动范围10-30" UserVar times = 100 "钓鱼次数" Global watch DimEnv GameTable GameTable = 0 dim MyArray Dim x Dim y x = - 1 y = - 1 Dim XX Dim YY XX = - 1 YY = - 1 Dim z z = 0 //进程查找 Call Plugin.Msg.Tips("查找游戏进程中") While GameTable = 0 GameTable = Plugin.Window.Find(0, "最终幻想XIV") Delay 500 Wend Call Plugin.Msg.Tips("进城找到,句柄=" & GameTable)
下面贴图