北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: jarlyyn

开个新坑折腾

[复制链接]
发表于 2025-12-13 10:42:52 | 显示全部楼层
NB  大神这个最终做出来的是个画地图的插件或者调用程序么
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2025-12-13 11:47:17 | 显示全部楼层
devilkate 发表于 2025-12-13 10:42 AM
NB  大神这个最终做出来的是个画地图的插件或者调用程序么

这个不画地图 ,画地图的事情肯定是脚本来做。

这个相当于定制版的excel,方便人工查看和修订脚本生成的地图,可以对比两个时间的地图查看差异,甚至可以部分回退。

然后提供一个全功能的http接口,方便没有js/lua的客户端,或者js/lua性能不高的客户端使用。

我同步做了一套配套的js/lua,可以脱离这个直接使用。

甚至可以不使用我的地图格式,直接用脚本解析现有的地图格式直接计算路径。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2025-12-13 12:05:30 | 显示全部楼层
devilkate 发表于 2025-12-13 10:42 AM
NB  大神这个最终做出来的是个画地图的插件或者调用程序么

举个例子,这两天有人想让我把我现成的机器移植到其他mud去。

我做了基本框架的迁移后,就要整理新mud的地图信息了。

对方提供了mush(jscript)/hc(js)/ls(lua)的机器给我做参考,其实都是同一份地图转来转去的。

我找了最全的一份,lua的地图,格式大概是

  1. M.rooms = {
  2.     [0] = { roomNo = 0, roomName = "玄冥峰山脚", exits = { ["ed"] = 5, ["nw"] = 1 } },
  3.     [1] = { roomNo = 1, roomName = "山路", exits = { ["nw"] = 6 } },
  4.     [2] = { roomNo = 2, roomName = "山路", exits = { ["nu"] = 3, ["se"] = 11 } },
  5.     [3] = { roomNo = 3, roomName = "山路", exits = { ["nd"] = 10, ["sd"] = 2 } },
  6. }
复制代码
这样的,我写了一个脚本转成了我的格式

  1. local hmm = require("./hmm")
  2. local map=require("./map")

  3. local MapDatabase = hmm.MapDatabase:New();

  4. MapDatabase:NewMap()
  5. MapDatabase.Current.Map.Encoding=hmm.MapEncoding.GB18030
  6. local all={}
  7. function splitAnd(data)
  8.    local result={}
  9.    for item in data:gmatch("[^&]+") do
  10.       table.insert(result,item)
  11.    end
  12.    return result
  13. end
  14. for key, value in pairs(map.rooms) do
  15. local room=hmm.Room:New()
  16. room.Key=tostring(value.roomNo)
  17. room.Name=value.roomName
  18. for k2,v2 in pairs(value.exits) do
  19.     local exit=hmm.Exit:New()
  20.     local data={}
  21.     for item in k2:gmatch("[^>]+") do
  22.       table.insert(data,item)
  23.     end
  24.     local tag=""
  25.     local cmd=""
  26.     if #data==1 then
  27.       cmd=data[1]
  28.     else
  29.       tag=data[1]
  30.       cmd=data[2]
  31.     end
  32.     exit.Command=cmd
  33.     if (tag ~= "") then
  34.       print(tag)
  35.       local cond=hmm.ValueCondition:New(tag,1,false)
  36.       table.insert(exit.Conditions,cond)
  37.     end
  38.     exit.Cost=#splitAnd(cmd)
  39.     if cmd:sub(1, #"goto ")=="goto " then
  40.       exit.Cost=20
  41.     end
  42.     exit.To=tostring(v2)
  43.    
  44.     table.insert(room.Exits,exit)
  45. end
  46. table.insert(all,room)
  47. end
  48. MapDatabase:APIInsertRooms(all)
  49. print(#MapDatabase.Current.Records.Rooms)
  50. local file = io.open("./map.hmm", "w")
  51. file:write(MapDatabase:Export(""))
复制代码
然后,能在我的程序里编辑,维护了



可以使用我前面提到过的关系地图,差异对比等各种维护功能


然后在维护的时候,可以手动或者用脚本给地图的房间打标签,出口加条件等等

直接实现不同的路径不同的耗时计算,以及各种动态规划功能,比如

https://www.pkuxkx.net/forum/thread-50473-1-1.html

里说的各种。

更重要的是,这样一份地图是脱离客户端存在的。

不管你是gbk的mush跑的js/lua,utf8的mudlet跑的lua,还是你自己用python糊的客户端。

都可以用使用同一份地图,有相同的功能,

至少我拿到的这3个机器,真的有需要的话,我都可以通过写个补丁文件,重写路径计算部分的功能直接无感无缝使用。

本帖子中包含更多资源

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

x
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 5 天前 | 显示全部楼层


更新了js版的文档,在github上顺手让AI理解了下,发现AI能理解,说明我文档写的没问题,恩恩。


本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-12-22 09:15 PM , Processed in 0.009179 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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