修復基於大神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.