泰拉瑞亚实现自动钓鱼
参考知乎上的一篇文章:https://zhuanlan.zhihu.com/p/367243635
知乎上的做法是:
- 修改游戏本身的
FishingCheck
函数,添加一个钓鱼的标志位fishFlag
,初始为false,如果钓到了鱼就将fishFlag
置为true - 创建一个线程,内部是一个死循环,循环不断检测
fishFlag
,如果为true则执行2次鼠标单击事件,一次为收杆,一次为重新抛竿,然后将fishFlag
重新设置为false
这个做法有些问题,一个是游戏无法完全退出,退出后会残留一个线程;还有就是2次鼠标事件的间隔太短,有时游戏内收杆的动画还没结束,抛竿的鼠标事件就执行了
我参考文章的做法做了一些修改:
下载dnSpy,如果要调试则需要下载32位版本
dnSpy打开泰拉瑞亚主程序,找到
Projectile
类右键
Projectile
类创建一个DoFish
方法,并编辑函数1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public extern void DoFish();
//替换这一句为
[ ]
private static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
public void DoFish(){
//收杆
Projectile.mouse_event(2, 0, 0, 0, 0);
Thread.Sleep(100);
Projectile.mouse_event(4, 0, 0, 0, 0);
Thread.Sleep(500);//这个是收杆和抛竿的间隔,如果人物站的比较远可以适当调高
//下杆
Projectile.mouse_event(2, 0, 0, 0, 0);
Thread.Sleep(100);
Projectile.mouse_event(4, 0, 0, 0, 0);
Thread.Sleep(500);
}然后添加引用
using System.Threading;
编辑
Projectile
类下的FishingCheck
函数,末尾添加1
2
3
4
5
6
7using (StreamReader streamReader = new StreamReader("fish.conf"))
{
if (flag && streamReader.ReadLine() == "true")
{
new Thread(new ThreadStart(this.DoFish)).Start();
}
}然后添加引用
using System.Threading;
和using System.IO;
在游戏目录下创建
fish.conf
,如果内容为true则开启自动钓鱼保存为模块,然后就能愉快的钓鱼了
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 徇的小站!
评论