leevccc 发表于 2025-3-1 16:59:47

GMS083 修复道具介绍中,中文换行的问题

这是修复前的样子



这是修复后的样子



083和095两个版本我都有修复,095的以前拍过视频演示 https://www.bilibili.com/video/BV1ePxyeuECb/ 上面的图片截取自该视频

以下修复代码仅 GMSv083 可用
**** Hidden Message *****


原理很简单,在 ToolTip 输出道具描述时会判断 5 个特殊符号(空格 , . ; :)

如果遇到这 5 个特殊符号就检查后面的文字(一直到再次遇到这些特殊符号)是否有足够的位置,如果位置不够就换行插入。

举个例子 "123456,789;123456."

第一个特殊符号是","第二个特殊符号是";"第三个特殊符号是"."

程序会在第n个特殊符号后,获取第n个到第n+1个特殊符号之间的文字(比如n=1时就是"789") 然后计算这段字符串的宽度并判断当前行是否有足够的空间容纳,如果放不下就把"789"插入下一行。

这个操作对最初的字符串 "123456" 也有效。对后续所有的特殊符号都是。

那么我们来看假如纯中文的道具描述,由于全文都没有特殊符号,相当于输入了"1234567890123456798···"这样一段超长的内容,即使第一行前面没有任何东西,这段超长内容也过长了,所以被强行插入下一行,又由于,后续也没有特殊符号,所以整个内容都挤在同一行了。也就是图1魔方描述的效果。

橙色字是#c开头的,在后续代码有单独的判断,所以不受影响。

修复代码的原理是移除了对特殊符号的判断,改为对所有符号都进行一次判断。即每一个字符都是特殊符号,每一个字符都进行判断。

这么做有一个弊端,就是如果你的描述中有英文的话,英文单词可能会被强行拆开在两行显示,这样其实不美观。所以我在 095 的时候改用了复杂一点的判断。不是简单粗暴的对所有字符进行判断,而是在原来5个特殊字符的基础上增加对中文的判断。当然这样的修改需要使用 codecave 或者 sethook 来进行,代码我暂时不放出,就当作是一个小练习,只要看过前面的基础教程加上ai的帮助,很容易就可以写出来。

BurgerKing 发表于 2025-3-1 17:17:48

來參考下是怎麼換行的

disguisebilly 发表于 2025-3-1 17:21:46

我hook替换了字符串中的中文字符为英文字符 不过还是怪怪的 有的也有bug 来学习一下

leevccc 发表于 2025-3-1 17:25:12

disguisebilly 发表于 2025-3-1 17:21
我hook替换了字符串中的中文字符为英文字符 不过还是怪怪的 有的也有bug 来学习一下 ...

具体说说?

disguisebilly 发表于 2025-3-1 19:25:09

leevccc 发表于 2025-3-1 17:25
具体说说?

没什么技术含量..就是单纯替换了中文符号为英文符号,部分显示的会好一些,不过有些地方也有很多问题..
我现在把这个结合跟你的一起使用 看起来更舒服了一些.
HOOK了drawtextsepartedline函数,应该是叫这个。。里面第五个还是第六个参数 就是显示的文本,然后写了一个列表,把。替换成. 以此类推

Magical-H 发表于 2025-3-1 21:24:33

可算等到你了{:3_54:}

a1231187 发表于 2025-3-1 23:26:58

看看额了

可可可乐 发表于 2025-3-3 10:26:41

本帖最后由 可可可乐 于 2025-3-3 10:32 编辑

支持一下。。其实追加个判断 || v13 == 255 就好。直接全砍没了就太惨了。

tokyoeric 发表于 2025-3-3 15:13:01

:'( 太强了吧 挽尊!

lv5111703 发表于 2025-3-16 21:10:51

:)看看怎么弄呀
页: [1] 2
查看完整版本: GMS083 修复道具介绍中,中文换行的问题