zoukankan      html  css  js  c++  java
  • 2021.06.04 更新带来的对局内报错问题

    第一步

    错误提示

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

    由于我选择的模式是标准休闲,所以他报错未找到 PLAY_CASUAL_STANDARD

    分析&思路

    PLAY_CASUAL_STANDARD 在兄弟里和原来的Managed中是搜索不到的,这里就不贴图了。说明这是个新东西。

    借个账号更新炉石后,用 dnspy 打开 HearthstoneHearthstone_DataManagedAssembly-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 中编辑方法,复制进去就可以了。

    修复结果

    一切正常。

  • 相关阅读:
    POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)
    LCA 最近公共祖先 (模板)
    线段树,最大值查询位置
    带权并查集
    转负二进制
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
  • 原文地址:https://www.cnblogs.com/varc/p/14851480.html
Copyright © 2011-2022 走看看