Skip to content

CurssedCoffin/Terraria-auto-fish

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 

Repository files navigation

Terraria AUTO-FISH tutorial

FOR ENGLISH VERSION

教程中所用代码和思路来自于吾爱论坛,本人负责提供一个清晰明确的过程

该方法具有以下两个缺点:1、钓鱼时,Terraria需处于前台,无法在后台进行钓鱼(实现方法为调用Windows的鼠标点击操作实现收放鱼竿) 2、游戏无法完全关闭(虽然窗口已经关闭,但进程任然存在,需要手动到任务管理器中关闭,原因为钓鱼过程中使用了一个线程,并且线程未结束,目前没有找到这个bug的一个好的修复方法)

在Terraria 1.4.4.9版本下测试可行

avatar

使用工具:dnSpy

请下载使用32位版本

自动钓鱼实现

  • 使用dnSpy打开terraria主程序,进行反编译
  • 在程序左侧找到Terraria - Terraria.exe - Terraria - Projectile
  • 右键点击Projectile,选择创建字段,如图中红框所示

avatar

  • 在弹出的窗口中更改名称为fishFlag, 并勾选static;在类型栏目中将默认类型int改为bool ,具体方法为:点击清除,点击类型,在新弹出的窗口中搜索bool,并添加如图中所示bool类型(注意bool类型由{}System提供),点击确定即可完成创建

avatar

avatar

avatar

avatar

avatar

  • 同上一步,添加名称为createdThread的字段
  • 右键点击Projectile,选择创建方法,名称为mouse_event,并勾选static;在签名栏目中添加输入参数类型,具体方法为:点击类型按钮,在新的弹出窗口中搜索System.int(注意int类型由{}System提供),点击确定,再点击添加。重复这个添加过程五次,用以添加5个int类型参数

avatar

avatar

avatar

avatar

  • 在程序左侧找到Terraria - Terraria.exe - Terraria - Projectile - mouse_event(字体显示颜色为橙色),右键点击mouse_event,选择编辑方法(C#),在右侧代码区域内,在顶部声明部分添加using System.Runtime.InteropServices;,并将图中红框部分用如下代码替换

avatar

[DllImport("user32")]
private static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
  • 结束之后点击窗口右下角的编译按钮,完成对mouse_event方法的创建
  • 右键点击Projectile,选择创建方法,名称为DoFish,点击确定即可

avatar

  • 在程序左侧找到Terraria - Terraria.exe - Terraria - Projectile - DoFish(字体显示颜色为橙色),右键点击DoFish,选择编辑方法(C#),在右侧代码区域内,在顶部声明部分添加using System.Threading; ,并将图中红框部分用如下代码替换

avatar

public void DoFish()
{
	int millisecondsTimeout = 1200;
	for (;;)
	{
		if (Projectile.fishFlag)
		{
			Projectile.mouse_event(2, 0, 0, 0, 0);
			Thread.Sleep(100);
			Projectile.mouse_event(4, 0, 0, 0, 0);
			Thread.Sleep(millisecondsTimeout);
			Projectile.mouse_event(2, 0, 0, 0, 0);
			Thread.Sleep(100);
			Projectile.mouse_event(4, 0, 0, 0, 0);
			Thread.Sleep(100);
			Projectile.fishFlag = false;
		}
	}
}
  • 结束之后点击窗口右下角的编译按钮,完成对DoFish方法的创建
  • 在程序左侧找到Terraria - Terraria.exe - Terraria - Projectile - FishingCheck(字体显示颜色为橙色),右键点击FishingCheck,选择编辑方法(C#),在右侧代码区域内,在顶部声明部分添加using System.Threading; ,并在末尾处,if函数下面(图中箭头指向部分)添加如下代码:

avatar

if (this.bobber && this.Name == "浮标")
{
	if (!Projectile.createdThread)
	{
		Thread thread = new Thread(new ThreadStart(this.DoFish));
		Projectile.createdThread = true;
		thread.Start();
	}
	Projectile.fishFlag = true;
}
  • 结束之后点击窗口右下角的编译按钮,完成对FishingCheck方法的修改
  • 在程序左侧找到Terraria,左键点击,然后点击程序左上角的文件,保存模块,选择路径,确定

avatar

avatar

avatar

  • 如此,便可以成功反编译并保存到exe文件中,运行保存的exe,在游戏中钓鱼查看效果

离线游玩实现(免steam)

  • 通过注释初始化steam信息的代码,可以实现免登录
  • 在程序左侧找到Terraria - Terraria.exe - Terraria.Social - SocialAPI - LoadSteam(字体显示颜色为橙色),右键点击LoadSteam,选择编辑方法(C#),在右侧代码区域内,将图中红框部分删除即可

avatar

avatar

  • steam正版的存档位置在 C:\Program Files (x86)\Steam\userdata\[your steam id]\105600\remote,该路径会随着你的steam安装位置和你的steamid不同而改变

  • 离线版的存档位置在%userprofile%\Documents\My Games\Terraria路径下

  • 一些别的细节

Terraria - Terraria.exe - Terraria - Item - SetDefaults //初始化物品属性,可以在这里改单独武器的伤害,效率
Terraria - Terraria.exe - Terraria.GameContent.ItemDropRules - ItemDropDatabase //掉落的物品和概率,概率为值的倒数,例如值20代表概率为1/20
Terraria - Terraria.exe - Terraria - Item - buyPrice //购买价格
Terraria - Terraria.exe - Terraria - Item - sellPrice //出售价格
Terraria - Terraria.exe - Terraria - Player - Hurt //受到伤害,经过测试可能和无敌帧有一点关系但不多,数值也不影响受到伤害,直接return一个数就可以无敌,烧伤等负面效果无法免疫
Terraria - Terraria.exe - Terraria - Player - GetWeaponDamage //所有武器伤害的计算都在这里

编译时报错the type or namespace name "ReLogic",则去Terraria - Terraria.exe - 资源里看看有没有类似的dll,导出dll到相同目录下即可。

About

A tutorial for terraria auto fish

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published