|
|

楼主 |
发表于 2025-12-13 12:05:30
|
显示全部楼层
举个例子,这两天有人想让我把我现成的机器移植到其他mud去。
我做了基本框架的迁移后,就要整理新mud的地图信息了。
对方提供了mush(jscript)/hc(js)/ls(lua)的机器给我做参考,其实都是同一份地图转来转去的。
我找了最全的一份,lua的地图,格式大概是
- M.rooms = {
- [0] = { roomNo = 0, roomName = "玄冥峰山脚", exits = { ["ed"] = 5, ["nw"] = 1 } },
- [1] = { roomNo = 1, roomName = "山路", exits = { ["nw"] = 6 } },
- [2] = { roomNo = 2, roomName = "山路", exits = { ["nu"] = 3, ["se"] = 11 } },
- [3] = { roomNo = 3, roomName = "山路", exits = { ["nd"] = 10, ["sd"] = 2 } },
- }
复制代码 这样的,我写了一个脚本转成了我的格式
- local hmm = require("./hmm")
- local map=require("./map")
- local MapDatabase = hmm.MapDatabase:New();
- MapDatabase:NewMap()
- MapDatabase.Current.Map.Encoding=hmm.MapEncoding.GB18030
- local all={}
- function splitAnd(data)
- local result={}
- for item in data:gmatch("[^&]+") do
- table.insert(result,item)
- end
- return result
- end
- for key, value in pairs(map.rooms) do
- local room=hmm.Room:New()
- room.Key=tostring(value.roomNo)
- room.Name=value.roomName
- for k2,v2 in pairs(value.exits) do
- local exit=hmm.Exit:New()
- local data={}
- for item in k2:gmatch("[^>]+") do
- table.insert(data,item)
- end
- local tag=""
- local cmd=""
- if #data==1 then
- cmd=data[1]
- else
- tag=data[1]
- cmd=data[2]
- end
- exit.Command=cmd
- if (tag ~= "") then
- print(tag)
- local cond=hmm.ValueCondition:New(tag,1,false)
- table.insert(exit.Conditions,cond)
- end
- exit.Cost=#splitAnd(cmd)
- if cmd:sub(1, #"goto ")=="goto " then
- exit.Cost=20
- end
- exit.To=tostring(v2)
-
- table.insert(room.Exits,exit)
- end
- table.insert(all,room)
- end
- MapDatabase:APIInsertRooms(all)
- print(#MapDatabase.Current.Records.Rooms)
- local file = io.open("./map.hmm", "w")
- file:write(MapDatabase:Export(""))
复制代码 然后,能在我的程序里编辑,维护了
可以使用我前面提到过的关系地图,差异对比等各种维护功能
然后在维护的时候,可以手动或者用脚本给地图的房间打标签,出口加条件等等
直接实现不同的路径不同的耗时计算,以及各种动态规划功能,比如
https://www.pkuxkx.net/forum/thread-50473-1-1.html
里说的各种。
更重要的是,这样一份地图是脱离客户端存在的。
不管你是gbk的mush跑的js/lua,utf8的mudlet跑的lua,还是你自己用python糊的客户端。
都可以用使用同一份地图,有相同的功能,
至少我拿到的这3个机器,真的有需要的话,我都可以通过写个补丁文件,重写路径计算部分的功能直接无感无缝使用。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|