2021.06.04 更新帶來的對局內報錯問題


第一步

錯誤提示

System.ArgumentException: Requested value 'PLAY_CASUAL_STANDARD' was not found.

由於我選擇的模式是標准休閑,所以他報錯未找到 PLAY_CASUAL_STANDARD

分析&思路

PLAY_CASUAL_STANDARD 在兄弟里和原來的Managed中是搜索不到的,這里就不貼圖了。說明這是個新東西。

借個賬號更新爐石后,用 dnspy 打開 Hearthstone\Hearthstone_Data\Managed\Assembly-CSharp.dll 后搜索程序集(快捷鍵 Ctrl+K),搜索 PLAY_CASUAL_STANDARD

搜索結果:

位於一個叫做 PresenceStatus 的枚舉下面。

熟悉的可以知道 PresenceStatus 是兄弟里面一個與場景有關的類,不熟悉也可以通過搜索一下其他枚舉值定位到兄弟中的對應位置。

所以首先需要更新一下這個枚舉。

具體修復

復制反編譯爐石文件中的 PresenceStatus 枚舉后,定位到兄弟的 PresenceStatus,右鍵編輯類,復制進去,編譯一下即可。

修復結果

不再報長篇大錯,只有一條

[GameplayScene] Unhandled presence status detected: PLAY_CASUAL_STANDARD. Please restart your client and try again. If the error is still not fixed, please report this message.

進入下一步。

第二步

錯誤提示

[GameplayScene] Unhandled presence status detected: PLAY_CASUAL_STANDARD. Please restart your client and try again. If the error is still not fixed, please report this message.

分析&思路

注意關鍵部分[GameplayScene] Unhandled presence status detected:,所以可以搜索一下這個字符串定位一下位置。接下來教大家用 dnspy 來搜索字符串。


題外話:有的時候前面 [GameplayScene] 這部分中間的關鍵詞是字符串格式化輸出的,如

所以如果一整個前面搜索不到的話,可以嘗試去除一下關鍵詞,比如只搜索 Unhandled presence status detected:


搜索程序集(快捷鍵 Ctrl+K),調出后設置為搜索數字、字符串,並設置范圍為所選文件以縮小范圍。

可以看到成功定位到問題所在位置。

瀏覽了一下整個方法,感慨一句dnspy反編譯真不彳亍。

異步亂亂的不說,switch 語句還轉化成 if 語句。

所以這里推薦一下 ilspy 來反編譯看一下代碼。

(ilspy 只能反編譯,沒法修改代碼、編譯,但是它的反編譯能力比 dnspy 要強很多,大家可以根據這個反編譯出來的代碼進行修改,來替換進dnspy。)

這是 ilspy 反編譯出來的代碼

其中着重需要關注的是我所標識的兩行,這個是之前游戲進行時候會走的分支(不信的話就點開其他的 case 來讀一下代碼)。但是現在不叫作 PresenceStatus.PLAY_GAME 了,而是分為第一步中添加的那 6 個枚舉了。所以我們只要讓上面添加的那 6 個枚舉都走這個 case 就可以了。

具體修復

先復制出來 ilspy 中反編譯出來的比 dnspy 好多了的代碼。

在原來的 case PresenceStatus.PLAY_GAME: 后面添加上其他的 6 個 case 讓他們都走 method_39

case PresenceStatus.PLAY_GAME:
case PresenceStatus.PLAY_RANKED_STANDARD:
case PresenceStatus.PLAY_RANKED_WILD:
case PresenceStatus.PLAY_RANKED_CLASSIC:
case PresenceStatus.PLAY_CASUAL_STANDARD:
case PresenceStatus.PLAY_CASUAL_WILD:
case PresenceStatus.PLAY_CASUAL_CLASSIC:
	await method_39(gameplay_0);

然后在 dnspy 中編輯方法,復制進去就可以了。

修復結果

一切正常。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM