北大侠客行MUD论坛

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

回字的四种解法--说说mush的机制两个细节

[复制链接]
发表于 2024-5-3 22:49:20 | 显示全部楼层 |阅读模式
本帖最后由 jarlyyn 于 2024-5-3 10:51 PM 编辑

陪娃玩了一天,终于等娃睡了把昨天测试的时候发现的遗留问题解决了,被mush/mudlet的兼容性问题和lua蛋疼的于法折腾的欲生欲死,停手透口气, 顺便来水一帖解决的方向。

1.GetStyleInfo与换行的兼容。

众所周知,北侠的任务系统非常考验GetStyleInfo的使用(对应mudlet就是那个满是bug的GetTextFormat)。

但是,GetStyleInfo依赖于Buffer里的行数,而如果开启了Mush的换行,同时使用了默认设置(80字符)换行的话,很多内容,比如score后的表格,会导致显示分行。

这时候使用GetStyleInfo就会由于不知道想要处理几行被困扰了。

这时最简单粗暴的方案应该是设置更长的换行或者取消换行。

那我们如果不想改换行设置(低侵入性)的话应该怎么办?

可以使用另一个函数配合,GetLineInfo。
GetLineInfo有三个重要参数
  • 3 newline.结尾是否有换行符号(这个居然不是开头)
  • 4 是否是Note
  • 5 是否是回显


从当前行上一行开始不停向上查询信息,直到有任何一个3,4,5是true,之间的就是被换行的同一行内容(Note和Echo也很可能没有换行)

把同一行的内容做一个for循环处理

大概的代码是

  1.     local offset=0
  2.     -- 被wrap的行,上一行的newline是false
  3.     -- 还需要排除Note和echo的用户输出
  4.     while offset + linescount > 0 do
  5.         if GetLineInfo(offset + linescount - 1, 3) or GetLineInfo(offset + linescount - 1, 4) or GetLineInfo(offset + linescount - 1, 5) then
  6.             break
  7.         end
  8.         offset = offset - 1
  9.     end
  10.     for lineno = linescount+offset,linescount, 1 do
  11.         local styles = GetStyleInfo(lineno)
  12.         for index, value in ipairs(styles) do
复制代码

2.指定scriptname和sendto 12有什么区别
执行顺序不同,是否能终止触发继续匹配不同。

具体说明在

https://www.gammon.com.au/script ... pEvaluatingTriggers

具体来说是先执行所有触发的sentto 12,再执行scriptname中的脚本。这个优先级是高于Sequence的设置的。

如果非常强调脚本之间的执行顺序,需要注意到这一点。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-1 04:50 AM , Processed in 0.009457 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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