北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 1535|回复: 3

Mutlet UI中文换行bug(已解决)

[复制链接]
发表于 2023-8-17 11:31:36 | 显示全部楼层 |阅读模式
本帖最后由 daidaishu 于 2023-8-23 07:57 PM 编辑

环境:Win10

问题描述:

  如下图所示,我在右上角创建了一个MiniConsole,并在其中显示“【谣言】”相关的信息,
并设置了30个字符自动换行,当字符长度超过30个时,会在空格处换行,而不是第30个字
符的位置。




解决方案:

  取消自动换行,自己写一个函数,在字符串达到指定宽度时调用函数插入一个换行符。

效果:


完整代码:
  1. -- 顶边UI
  2. local function creatUI_top()
  3.   -- 创建顶边UI容器
  4.   topContainer = topContainer or Geyser.Container:new({
  5.     name = "topContainer",
  6.     x = "0",y = "0",
  7.     width = "100%",
  8.     height = "100",
  9.   })
  10.   -- 创建聊天信息显示迷你控制台
  11.   chatConsole = chatConsole or Geyser.MiniConsole:new({
  12.     name = "chatConsole",
  13.     x = "0",y = "0",
  14.     width = "50%",
  15.     height = "100%",
  16.     fontSize = 10,
  17.     scrollBar = false,
  18.     wrap = 30
  19.   }, topContainer)
  20.   -- 创建系统信息显示迷你控制台
  21.   systemConsole = systemConsole or Geyser.MiniConsole:new({
  22.     name = "systemConsole",
  23.     x = "50%", y = "0",
  24.     width = "50%",
  25.     height = "100%",
  26.     fontSize = 10,
  27.     scrollBar = false,
  28.   }, topContainer)
  29. end

  30. -- 右边UI
  31. local function creatUI_right()
  32.   -- 创建右边UI容器
  33.   rightContainer = rightContainer or Geyser.Container:new({
  34.     name = "topContainer",
  35.     x = "-500",y = "100",
  36.     width = "500",
  37.     height = "500",
  38.   })
  39.   -- 创建地图
  40.   myMap = Geyser.Mapper:new({
  41.   name = "myMap",
  42.   x = 0, y = 0,
  43.   width = "100%",
  44.   height = "100%"
  45.   },rightContainer)
  46. end

  47. -- 自动换行函数
  48. local function processCopy2decho(text,windowWidth)
  49.   local processedText = ""
  50.   local accumulatedWidth = 0
  51.   local colorFlag = 1
  52.   for char in text:gmatch(utf8.charpattern) do
  53.     if char == "<" then
  54.       colorFlag  = 0
  55.     elseif char == ">" then
  56.       colorFlag = 1
  57.     elseif colorFlag == 1 then
  58.       local charWidth = utf8.width(char, true)
  59.       accumulatedWidth = accumulatedWidth + charWidth
  60.       if accumulatedWidth > windowWidth then
  61.         processedText = processedText .. "\n"
  62.         accumulatedWidth = charWidth
  63.       end
  64.     end
  65.     processedText = processedText .. char
  66.   end
  67.   return processedText.."\n"
  68. end

  69. -- 聊天信息Trigger
  70. function chatTrigger()
  71.   if chatConsole then
  72.     selectCurrentLine()
  73.     chatConsole:decho(processCopy2decho(copy2decho(),96))
  74.     deleteLine()
  75.   end
  76. end
  77. -- 系统信息Trigger
  78. function systemTrigger()
  79.   if systemConsole then
  80.     selectCurrentLine()
  81.     systemConsole:decho(processCopy2decho(copy2decho(),96))
  82.     deleteLine()
  83.   end
  84. end

  85. -- 初始化
  86. creatUI_top()
  87. creatUI_right()

  88. --聊天信息分类
  89. if(exists("聊天信息分类","trigger") == 0) then
  90.   permRegexTrigger("聊天信息分类", "Pkuxkx_gui", {
  91.     [[^【(闲聊|北侠QQ群|求助)】.*$]]
  92.     --此行可继续增加,注意在上一行末尾加上逗号
  93.   }, [[chatTrigger()]])
  94. end
  95. --系统信息分类
  96. if(exists("系统信息分类","trigger") == 0) then
  97.   permRegexTrigger("系统信息分类", "Pkuxkx_gui", {
  98.     [[^【(谣言|江湖|交易)】.*$]]
  99.     --此行可继续增加,注意在上一行末尾加上逗号
  100.   }, [[systemTrigger()]])
  101. end
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2023-8-17 11:56:20 | 显示全部楼层
你把 word wrap 关掉试试。找找有没有类似的设置。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2023-8-19 17:17:35 | 显示全部楼层
这个应该是Mudlet本身程序的问题,粗略看了一下GitHub,icer两年多以前提过关于换行的问题,然后去年下半年,有港台人修复了这个问题,但是提供的代码有Bug所以去年年底回滚了。所以我猜目前可能没有解决办法,只能等有人更新
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2023-8-19 18:00:32 | 显示全部楼层
这个问题的原理大概是icer在那个issue里提到的。为了保证英语词语不断在一半,mudlet是自己找空格来换行的,北侠的消息冒号后面有个空格,所以会换行。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-12-25 01:00 AM , Processed in 0.018188 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表