修复基于大神beebee102发出的版本,来源 Chuck Lu的博客园
修复时间为2020年11月,按照顺序修复。
1. 修复mono.dll -> mono-2.0-bdwgc.dll
现象/错误提示
炉石兄弟与炉石传说一起闪退
来源
1. wjhwjhn 的博客中的《2020-05-16 记录对炉石兄弟的修复》
原文章被整理合并进《炉石兄弟DIY汇总》中
网址: http://blog.wjhwjhn.com/index.php/archives/18/
2. 《2020-05-16 记录对炉石兄弟的修复》下方评论(hanling1015)
简单提到两个 + 12
改为 + 8
原文章被合并,评论丢失
3. maxiori 的帖子《发几张截图,懂的自然懂》
网址:http://tieba.baidu.com/p/6684018294
具体修复
- ns27 - Class276
原来
this.intptr_0 = this.method_18("mono.dll");
this.intptr_31 = this.intptr_0 + 522030;
this.intptr_28 = this.intptr_0 + 91559;
this.intptr_13 = this.intptr_0 + 226176;
this.intptr_16 = this.intptr_0 + 91615;
this.intptr_6 = this.intptr_0 + 78677;
this.intptr_1 = this.intptr_0 + 102855;
this.intptr_15 = this.intptr_0 + 230512;
this.intptr_14 = this.intptr_0 + 224970;
this.intptr_7 = this.intptr_0 + 73617;
this.intptr_19 = this.intptr_0 + 120353;
this.intptr_29 = this.intptr_0 + 162866;
this.intptr_17 = this.intptr_0 + 525190;
this.intptr_25 = this.intptr_0 + 389455;
this.intptr_24 = this.intptr_0 + 385464;
this.intptr_32 = this.intptr_0 + 389677;
this.intptr_34 = this.intptr_0 + 384279;
this.intptr_36 = this.intptr_0 + 382675;
this.intptr_35 = this.intptr_0 + 91327;
this.intptr_23 = this.intptr_0 + 428289;
this.intptr_33 = this.intptr_0 + 378912;
this.intptr_27 = this.intptr_0 + 515937;
this.intptr_12 = this.intptr_0 + 176417;
this.intptr_10 = this.intptr_0 + 176976;
this.intptr_4 = this.intptr_0 + 77237;
this.intptr_8 = this.intptr_0 + 107261;
this.intptr_21 = this.intptr_0 + 231261;
this.intptr_18 = this.intptr_0 + 522401;
this.intptr_5 = this.intptr_0 + 733279;
this.intptr_30 = this.intptr_0 + 91701;
this.intptr_2 = this.intptr_0 + 733427;
this.intptr_9 = this.intptr_0 + 162872;
this.intptr_3 = this.intptr_0 + 91604;
this.intptr_26 = this.intptr_0 + 383139;
this.intptr_22 = this.intptr_0 + 385556;
this.intptr_20 = this.intptr_0 + 91570;
this.intptr_11 = this.intptr_0 + 401933;
修改为
this.intptr_0 = this.method_18("mono-2.0-bdwgc.dll");
this.intptr_1 = this.intptr_0 + 199840;
this.intptr_2 = this.intptr_0 + 203968;
this.intptr_3 = this.intptr_0 + 203984;
this.intptr_4 = this.intptr_0 + 166304;
this.intptr_5 = this.intptr_0 + 204000;
this.intptr_6 = this.intptr_0 + 175328;
this.intptr_7 = this.intptr_0 + 168320;
this.intptr_8 = this.intptr_0 + 202016;
this.intptr_9 = this.intptr_0 + 154816;
this.intptr_10 = this.intptr_0 + 974896;
this.intptr_11 = this.intptr_0 + 636272;
this.intptr_12 = this.intptr_0 + 975808;
this.intptr_13 = this.intptr_0 + 379920;
this.intptr_14 = this.intptr_0 + 376208;
this.intptr_15 = this.intptr_0 + 403952;
this.intptr_16 = this.intptr_0 + 204960;
this.intptr_17 = this.intptr_0 + 526647;
this.intptr_18 = this.intptr_0 + 731120;
this.intptr_19 = this.intptr_0 + 203856;
this.intptr_20 = this.intptr_0 + 204080;
this.intptr_21 = this.intptr_0 + 232912;
this.intptr_22 = this.intptr_0 + 647472;
this.intptr_23 = this.intptr_0 + 864192;
this.intptr_24 = this.intptr_0 + 644320;
this.intptr_25 = this.intptr_0 + 656512;
this.intptr_26 = this.intptr_0 + 652128;
this.intptr_27 = this.intptr_0 + 730864;
this.intptr_28 = this.intptr_0 + 204176;
this.intptr_29 = this.intptr_0 + 155712;
this.intptr_30 = this.intptr_0 + 232880;
this.intptr_31 = this.intptr_0 + 729376;
this.intptr_32 = this.intptr_0 + 657968;
this.intptr_33 = this.intptr_0 + 658720;
this.intptr_34 = this.intptr_0 + 627408;
this.intptr_35 = this.intptr_0 + 189456;
this.intptr_36 = this.intptr_0 + 644448;
- ns27 - Class276 - method_31
IntPtr pointer = intPtr + 12;
将 + 12
修改为 +8
- ns27 - Class276 - method_32
IntPtr pointer = intPtr2 + 12;
将 + 12
修改为 +8
2. 去除正版检测
现象/错误提示
The current process file does not match the expected process file. Please reinstall Hearthbuddy.
来源
Chuck(霜之咏叹调99) 的博客园《HearthBuddy 第一次调试》
网址:https://www.cnblogs.com/chucklu/p/11179300.html
具体修复
找到主程序入口,在HearthBuddy下面的APP文件中搜索,找到如下代码。把这个检查直接去掉
if (!first.SequenceEqual(second))
{
App.ilog_0.Error("The current process file does not match the expected process file. Please reinstall Hearthbuddy.");
Logger.OpenLogFile();
base.Shutdown(1);
return;
}移除代码之后,尝试编译发现报错,是因为变量的名字不符合C#的规范导致的
右键选中字段,然后Edit Field,把<>9改成Instance9。<>9_5_0改为Instance9_5_0
3.修复Network.m_lastGameServerInfo
现象/错误提示
[Tick] Exception during execution:System.MissingFieldException: Field 'Network.m_lastGameServerInfo' not found.
来源
Chuck 的github (https://github.com/ChuckHearthstone/SilverFish)
中的Issues (ghotm)
网址:https://github.com/ChuckHearthstone/SilverFish/issues/40
具体修复
原来
// Triton.Game.Mapping.Network
public GameServerInfo m_lastGameServerInfo
{
get
{
return base.method_3<GameServerInfo>("m_lastGameServerInfo");
}
}
修改为
// Triton.Game.Mapping.Network
public GameServerInfo m_lastGameServerInfo
{
get
{
return base.method_14<GameServerInfo>("GetLastGameServerJoined", Array.Empty<object>());
}
}
4. 修复CollectionDeckBoxVisual.IsValid
现象/错误提示
System.MissingMethodException: Method 'CollectionDeckBoxVisual.IsValid' not found.
来源
Chuck 的博客园《HearthBuddy炉石兄弟 Method 'CollectionDeckBoxVisual.IsValid' not found.》
网址:https://www.cnblogs.com/chucklu/p/11183453.html
具体修复
处理思路是,把HearthBuddy里面的IsValid改为IsValidForCurrentMode【注意这里最后是mode不是model】
原来
//Triton.Game.Mapping.CollectionDeckBoxVisual
public bool IsValid()
{
return base.method_11<bool>("IsValid", Array.Empty<object>());
}
修改为
//Triton.Game.Mapping.CollectionDeckBoxVisual
public bool IsValid()
{
return base.method_11<bool>("IsValidForCurrentMode", Array.Empty<object>());
}
5. 修复选不中对战模式、卡组
现象/错误提示
[TournamentScene_DeckPicker] The client has been detected to be in a broken state. Please restart it as soon as possible as it cannot leave the current scene.
选不中对战模式、卡组
来源
hanling1015 在群中的帮助
具体修复
搜字符串 UnityEngine.dll 改为 UnityEngine.CoreModule.dll
位置:Triton.Game.TritonHs
(需要先修改不规范变量名,参考“修复2”)
6. 修复收藏界面报错
现象/错误提示
System.MissingMethodException: Method 'CollectionManager.GetTaggedDeck' not found.
收藏界面报错
具体修复
原来
//Triton.Game.Mapping.CollectionManager
public CollectionDeck GetTaggedDeck(CollectionManager.DeckTag tag)
{
return base.method_14<CollectionDeck>("GetTaggedDeck", new object[]
{
tag
});
}
修改为
//Triton.Game.Mapping.CollectionManager
public CollectionDeck GetTaggedDeck(CollectionManager.DeckTag tag)
{
return base.method_14<CollectionDeck>("GetEditedDeck", Array.Empty<object>());
}
}
7. 修复点击开始对战卡死/狂野和休闲模式来回切换
现象/错误提示
GreyMagic.InjectionDesyncException: Process must have frozen or gotten out of sync: Injection Finished Event was never fired
点击开始对战卡死
或者狂野和休闲模式来回切换
来源
与 铁甲依然在 的聊天
具体修复
- Triton.Bot.Logic.DefaultBot
搜索 IN_RANKED_PLAY_MODE
和 IN_RANKED_PLAY_MODE
右键编辑IL指令,修改对应option数值
- Triton.Game.Mapping.Option
搜索 IN_RANKED_PLAY_MODE
和 IN_RANKED_PLAY_MODE
右键编辑字段,修改对应option数值
最新option数值在炉石的Assembly-CSharp.dll中找
注
可以用反射一劳永逸,不过已经是后来大家想出来的办法。这里只讲修复,而且这也是之前一直以来都修复方式。所以暂且不提。
8. 修复UberText.m_TextMeshGameObject
现象/错误提示
System.MissingFieldException: Field 'UberText.m_TextMeshGameObject' not found.
来源
Chuck 的github (https://github.com/ChuckHearthstone/SilverFish)
中的Issues (Dustsc)
网址:https://github.com/ChuckHearthstone/SilverFish/issues/43
具体修复
-
添加类
using ns26; using ns27; using System; using System.Collections.Generic; using Triton.Game.Mono; using System.Runtime.InteropServices; namespace Triton.Game.Mapping { [Attribute38("UberTextRendering")] public class UberTextRendering : MonoBehaviour { public UberTextRendering(IntPtr address, string className) : base(address, className) { } public UberTextRendering(IntPtr address) : this(address, "UberTextRendering") { } public GameObject m_textMeshGameObject => method_3<GameObject>("m_textMeshGameObject"); } }
添加后编译
-
编辑类
Triton.Game.Mapping.UberText
原来//Triton.Game.Mapping.UberText public GameObject m_TextMeshGameObject { get { return base.method_3<GameObject>("m_TextMeshGameObject"); } }
修改为
//Triton.Game.Mapping.UberText public UberTextRendering m_UberTextRendering => method_3<UberTextRendering>("m_UberTextRendering"); public GameObject m_TextMeshGameObject => m_UberTextRendering.m_textMeshGameObject;
9. 留牌界面报错
现象/错误提示
System.MissingMethodException: Method 'Entity.GetRace' not found.