HearthBuddy炉石兄弟 Method 'Entity.GetRace' not found.
解决方案
namespace Triton.Game.Mapping
{
// Token: 0x020004A4 RID: 1188
[Attribute38("Entity")]
public class Entity : EntityBase
// Triton.Game.Mapping.Entity
// Token: 0x06003007 RID: 12295 RVA: 0x00026F09 File Offset: 0x00025109
public TAG_RACE GetRace()
{
return base.method_11<TAG_RACE>("GetRace", Array.Empty<object>());
}
modify as following
// Triton.Game.Mapping.Entity
// Token: 0x06003007 RID: 12295
public TAG_RACE GetRace()
{
return this.GetEntityDef().GetRace();
}
分析
很早就修复了,但是前任吧主在7月就把我永久封禁了。所以一直没办法发教程

========
在分析出错的原因之前,先分析一下兄弟的工作原理。
这是我之前在调试CollectionDeckBoxVisual.IsValid的这个错误的时候发现的。
兄弟是通过greymagic来获取游戏的客户端进程里面的api的,拿到api之后,调用api来玩游戏。
而游戏的api逻辑是在一个叫做Assembly-CSharp的文件中,可以用软件everything来搜索。
一般来讲,如果提示方法或者属性找不到了,都是因为Assembly-CSharp这个文件更新导致的。
================
为了能够找出api调用不成功的原因,大家可以手动备份这个叫做Assembly-CSharp的文件。
最好是能够备份统计目录下的所有文件,这样等到新版本更新,还可以去查看旧版本的Assembly-CSharp文件。
我目前只备份了Assembly-CSharp文件,并且给文件名加上了sha256的唯一识别码,以及日期。
8月2日之前的版本,我备份的文件是SHA-256: 0061e3e6959babde52f2 很长的一串数字,大概取前6位就足够了。
这里涉及到另外一个软件hashcheck,用来查看文件hash的

================
根据错误的堆栈信息,我们可以找到出错的方法
Exception was thrown by coroutine ---> System.MissingMethodException: 未找到方法“Entity.GetRace”。
在 Triton.Game.Mono.MonoClass.3b(String string_4, Enum20[] enum20_0, Object[] object_0)
在 Triton.Game.Mono.MonoClass.3e[T](String string_4, Enum20[] enum20_0, Object[] object_0)
在 Triton.Game.Mono.MonoClass.3f[T](String string_4, Object[] object_0)
在 Triton.Game.Mapping.Entity.GetRace()
==================
首先我们去8月2日之前的Assembly-CSharp看看这个Entity.GetRace方法。
Entity.GetRace方法内部首先调用另外一个方法,GetEntityDef。
GetEntityDef方法返回了EntityDef类型的结果,然后再调用这个结果的GetRace方法。
这一块的调用C sharp里面的基础知识,有兴趣的可以了解一下。

===============
然后我们看一下新版的Assembly-CSharp被改成什么样子了:
之前旧版本中getrace的下一个方法是hasrace,所以我们直接找到hasrace,看看附近是否还有getrace这个方法。
当然也可以直接整个类中搜索方法名,你会发现之前存在的方法被删除了。

===========
方法已经被删除,那就意味着之前的mehod_11方法,没办法再通过greymagic去内存中拿到对应的方法了。
所以,我们需要回到旧版本中,研究一下之前的方法getrace在做什么?
前面已经提到,之前的getrace做了两件事情:
1.通过GetEntityDef拿到一个类型EntityDef的结果
2.调用EntityDef的getRace方法。
我们尝试在Assembly-CSharp中搜索EntityDef.getrace,你会发现这个方法还是在的。所以我们可以考虑调用这个类的方法。

======
仔细分析之前Assembly-CSharp的getrace方法内容,调用的语法是this.GetEntityDef().GetRace。
这意味着Entity本身还有一个方法,方法名字是GetEntityDef。
因为兄弟是和Assembly做了一对一的映射关系的,所以兄弟里面应该也会有这么一个方法的。
搜索mapping.entity.getentitydef,果然找到了方法。并且这个方法的返回值就是EntityDef类型的。

======
能拿到EntityDef,事情就变得简单了,只要做如下调整就可以了

HearthBuddy炉石兄弟 Method 'Entity.GetRace' not found.的更多相关文章
- HearthBuddy炉石兄弟 Method 'CollectionDeckBoxVisual.IsValid' not found.
[CollectionManagerScene_COLLECTION] An exception occurred when calling CacheCustomDecks: System.Miss ...
- HearthBuddy炉石兄弟 如何调试ai
Sepefeets's update to botmaker's Silverfish AI This AI is a Custom Class for Hearthranger and Hearth ...
- HearthBuddy炉石兄弟 格雷迈恩
getDecks(); 设置 private void getDecks() { Dictionary<string, int> tmpDeck = new Dictionary<s ...
- 炉石兄弟 修复图腾师问题 by大神beebee102, 还有阴燃电鳗
修复图腾师问题 beebee102 修复了先摇图腾再下图腾师的问题,另外加了阴燃电鳗的sim卡.在兄弟策略的模拟程序中测试了没问题,真机没有试过,麻烦吧友测试了回复一下.链接: [有效] http ...
- Playfield 类方法的注释
前言 本篇随笔的底包采用的是百度炉石兄弟吧20200109折腾版中自带的 routines 文件. 本次仅为绝大多数方法添加 xml 注释和简单解析,没有具体解析与重构. Playfield 类方法众 ...
- 简单通用JDBC辅助类封装
哎,最近很好久没在博客园写点东西了,由于工作的原因,接触公司自己研发的底层orm框架,偶然发现该框架在调用jdbc操作的时候参考的是hibernate 里面的SimpleJdbcTemplate,这里 ...
- java自定义注解注解方法、类、属性等等【转】
http://anole1982.iteye.com/blog/1450421 http://www.open-open.com/doc/view/51fe76de67214563b20b385320 ...
- conpot_usage简要说明
conpot是一个ICS(工业控制系统)蜜罐, 旨在收集攻击者针对工业控制系统的攻击方法和动机. 这篇文章主要用来说明conpot的用户定制相关的一些配置. (英文原文详见: https://gith ...
- RestTemplateIntegrationTests
摘录RestTemplate的集成测试类/* 2. * Copyright 2002-2010 the original author or authors. 3. * 4. * L ...
随机推荐
- 理解JVM之JAVA运行时内存区域
java运行时内存区域划分为方法区,堆区,虚拟机栈区,本地方法栈,程序计数器.其中方法区跟堆区是线程共享的数据区,其他的是线程私有的数据区. 1.程序计数器 程序计数器(PC)是一块较小的内存,他是存 ...
- ant design pro超详细入门教程
1.Ant Design Pro 初了解 说到ant design pro,得先了解一下ant design是个什么东西?ant design蚂蚁金服基于react打造的一个服务于企业级产品的UI框架 ...
- HTML锚点的使用
锚点: 连接到的本页面的位置:
- 为什么Java大数据能带你走上人生巅峰
国内大多数大型互联网公司的程序员被称作研发工程师,但实际上国内几乎没有研发项目,只能叫做开发. 开发程序员的工作大多是重复性劳动,容易产生疲惫感,薪资在工作2-5年内就达到了一个峰值,再要提升就比较困 ...
- Mysql中的锁机制-转载
原文:http://blog.csdn.net/soonfly/article/details/70238902 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的 计算资源(如 ...
- Windows10系统里安装SCons
1. 安装python2.7 执行python2.x的安装包程序python-2.7.12.amd64.msi进行安装即可 2. 安装scons 下载scons-2.5.0.zip压缩包并解压缩 CM ...
- SNMP OID列表
zabbix的snmp监控还没开始讲,不过先给大家列一些snmp常用的一些OID,比如cpu.内存.硬盘什么的.先了解这些,在使用snmp监控服务器. 系统参数(1.3.6.1.2.1.1) OID ...
- mongodb索引 过期索引
过期索引,指的是一段时间后会过期的索引,在索引过期后,相应的数据会被删除,这适合存储一些在一段时间之后会失效的数据,比如用户的登录信息,想要用户登录信息2天后失效,需要用户重新登录,或者存储的日志,希 ...
- spring实例化二:SimpleInstantiationStrategy
spring对类的实例化,定义了接口InstantiationStrategy,同时先做了个简单实现类SimpleInstantiationStrategy.采用实现部分,抽象部分的策 ...
- express框架封装前戏
一.开启一文件,这里暂且命名为aexpressclass.js 声明一个app类,用来模仿http模块中的回调函数 //var route = require('http-route'); var u ...