炉石兄弟更新修复记录(至2020年11月)

修复基于大神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

具体修复

  1. 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;
  1. ns27 - Class276 - method_31

IntPtr pointer = intPtr + 12;+ 12 修改为 +8

  1. 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

点击开始对战卡死

或者狂野和休闲模式来回切换

来源

与 铁甲依然在 的聊天

具体修复

  1. Triton.Bot.Logic.DefaultBot

搜索 IN_RANKED_PLAY_MODEIN_RANKED_PLAY_MODE 右键编辑IL指令,修改对应option数值

  1. Triton.Game.Mapping.Option

搜索 IN_RANKED_PLAY_MODEIN_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

具体修复

  1. 添加类

    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");
    	}
    }
    

    添加后编译

  2. 编辑类 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.

来源

Chuck 的博客园《HearthBuddy炉石兄弟 Method 'Entity.GetRace' not found.》

网址:https://www.cnblogs.com/chucklu/p/11378719.html

具体修复

原文地址:https://www.cnblogs.com/varc/p/14777947.html