北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
123
返回列表 发新帖
楼主: jarlyyn

杰哥乱弹琴之任务多行文字处理

[复制链接]
 楼主| 发表于 2024-5-24 16:32:27 | 显示全部楼层
开始触发:


结束触发


效果:

本帖子中包含更多资源

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

x
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2024-5-24 16:35:08 | 显示全部楼层
如果多行文字有分割符号,那么i=i-2部分按实际间隔递减就好。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2024-5-31 16:05:02 | 显示全部楼层
本帖最后由 jarlyyn 于 2024-5-31 04:15 PM 编辑

正好有人问我房间描述的是否可以处理。
我就写一个简单的demo。

首先是 房间开始,我们就按最简单的有 - 都当房间处理,实际肯定触发肯定要更复杂
正则是
  1. ^(.+) - .*
复制代码
注意,实际肯定不能这样用,会有很多错误触发
代码就是启动记录器
  1. Hclua.HC.recorder:start(999)
复制代码



然后我们目测下小地图,恩,应该是前6行都是不带色彩的空白

然后是连续的描述,知道空行

再是招牌,天气啥的。

最后是出口信息。

那我们就按这个方式尝试分解一下。

同样的,做个不严禁的触发,实际需要自己处理

  1. ^    这里(明显|唯一|没有)
复制代码
代码就是停记录器,获取所有行,加个local变量mode,记录下当前行的模式,存到不同的变量,最后再打赢出来

  1. Hclua.HC.recorder:stop()
  2. local lines=Hclua.HC.recorder:getLines()
  3. table.remove(lines)
  4. local map={}
  5. local desc={}
  6. local misc={}
  7. local mode=0

  8. for i, v in ipairs(lines) do
  9.     if mode==0 then
  10.         if (v:slice(1,6):toShort()=='#0AA0      ') then
  11.             table.insert(map,v)
  12.         else
  13.             mode=1
  14.         end
  15.     end
  16.     if mode ==1 then
  17.         if string.gsub(v.Text,' ','')~='' then
  18.             table.insert(desc,v)
  19.         else
  20.             mode=2
  21.         end
  22.     end
  23.     if mode ==2 then
  24.         table.insert(misc,v)
  25.     end
  26. end

  27. print(Hclua.HC.lineutils.combineLinesShort(map))
  28. print('---')
  29. print(Hclua.HC.lineutils.combineLinesShort(desc))
  30. print('---')
  31. print(Hclua.HC.lineutils.combineLinesShort(misc))
复制代码



就好了。
注意,这个是我花十分钟手写的,实际触发没这么简单




然后look一下,看看效果

用---把地图,描述,环境分开打印了。

注意,实际使用时肯定不会这样处理,从触发到数据的保存都不应该这样用的,这只是个showcase.


本帖子中包含更多资源

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

x
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-8 10:21 AM , Processed in 0.009796 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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