Skip to content
This repository has been archived by the owner on Aug 17, 2024. It is now read-only.

换行文本无法完全读取问题 #37

Open
cztBlue opened this issue Feb 23, 2023 · 6 comments
Open

换行文本无法完全读取问题 #37

cztBlue opened this issue Feb 23, 2023 · 6 comments

Comments

@cztBlue
Copy link

cztBlue commented Feb 23, 2023

在阅读《IxSHE Tell》的的时候发现了一个bug实例。此游戏经过一次国外的英化,英化组用
标签表示文本换行。(2020版的hook会将<br>不处理的展示出来)
Clip_20230223_185917

作者所用的当前的最新版本的Textractor会将该<br>标签自动处理成换行文本,采用的BeginOutputReadLine() 方法一次event只能读取导致一行控制台文本导致了这一bug。
Clip_20230223_183149
Clip_20230223_183041

该bug导致游戏中大段文本的丢失:每次HookDisplay()只能展示游戏中第一行的文本,而完整的hook文本分多次event放出,第一行<b\r>后的文本被丢弃(注:"pretty grloomy girl"不会被翻译器展示)
Clip_20230223_185523
Clip_20230223_185513
Clip_20230223_185613
Clip_20230223_185811
以上就是一个bug实例,作者能给出一个比较好的解决方案吗?。

@cztBlue
Copy link
Author

cztBlue commented Feb 23, 2023

Misaka采用的是一个根据Textractor2020年(不知道是哪一个版本)特制的一个HOOK(该HOOK已经很久没更新了......)
Clip_20230223_194118
我恰好发现其能够获取不被处理的完整源文本(但是Misaka开始翻译后会有HOOK丢失这种更大的bug,所以我没有用那个翻译器)。
我试着将旧版HOOK替换新版后重新编译,结果由于特制版的HOOK参数似乎与原版差异较大,在TsubakiTranslator不能正常工作,尝试将TsubakiTranslator的HOOK调用文件重构与旧版HOOK适配,但囿于个人水平,目前没有成功。

@cztBlue
Copy link
Author

cztBlue commented Feb 23, 2023

2fcd4d082e21e4393272c897906c51bc#5038181583#IxSHE Tell.7z
这里提供实例中使用的游戏资源。

@cztBlue
Copy link
Author

cztBlue commented Feb 23, 2023

我利用文本特性添加了一个正则,以此更改了一些On_TextHook_OutputDataReceived()中的调用逻辑来解决这个问题:
现在这个(特定的)游戏可以正常显示原文了,但是这个方法太过愚.蠢以至于问题没有真正被解决。
Clip_20230223_210558

@Isayama-Kagura
Copy link
Owner

Isayama-Kagura commented Feb 23, 2023

最好的解决方法还是到textractor提issue,让原项目的作者对这类引擎的提取做优化,因为这个问题肯定也不止在我这存在

其实也可以匹配前面的[*],但这种解决方法不优雅,回调函数本来的目的就是每次处理一个hook结果,每次调用都是独立无关联的,对于绝大部分游戏都能符合这个规则,为了其中一个引擎去改这里的核心逻辑我感觉不太合适

在此@DDWSdwqdq 大佬,我对逆向和c++都不懂,就先闪了

@luojunyuan
Copy link

luojunyuan commented Feb 23, 2023

感谢探讨

其实翻译器开发者自己直接控制textractor是最好的。lgztx老哥弄有一个texthost可以直接将几个文本提取器cli的几个函数提出来作为dll供其他语言使用。

这比cli通过管道更高效,而且可控性更大,还可以卸载不需要的钩子。直接用texthost也是原生的文本没有处理br和其他换行符之类的。

@jacklishufan
Copy link

jacklishufan commented Jul 21, 2023

textractor 的CLI 好像维护不是很积极,而且也不支持GUI的extension. Ad-Hoc 的解决方法是手动打开textractor-> 用extension 替换<br>-> 监视剪贴板. 最好解决方法是直接魔改CLI.

当前框架下的解决方案只能是把管道输出当成file-stream 并且维护一个当前钩子的state. 因为适用范围有限做成一个可选的tickbox比较符合逻辑,这样也不会影响原有的功能.
image

jacklishufan@30d1027

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants