上一篇删除,是因为这一篇可能才是我真正想做的东西。
以 /d/wiz/room/disc.c 巨型高塔来说,玩家往 down 离开时,
它会跑到 /d/map/lodoos/room/wiz_tower.c 这个房间。
那能不能在往 down 离开时动一点手脚呢?
例如在 /open/area 目录建立 /open/area/d/map/lodoos/room
的相对目录(若没有这些子目录就新增),当玩家往 down 离开:
// 读取 wiz_tower 房间档
files=here->query("exits/"+directs);
htm_files="/open/area"+files+".htm";
if(!file_exists(htm_files))
{
if(ob=find_object_or_load(files))
{
// 这里只是简单写一下,实际上要对读出来的东西做处理
str=sprintf("<html>\n%s<room_short/>\n%s<room_long/><p>\n<t><t>明显出口:\n",
ob->query("short"),ob->query("long"));
tmps=ob->query("exits");
foreach(tmp in tmps)
str+="<a href=\"/open/area"+ob->query("exits/"+tmp)+".htm\">"+
tmp+"</a>,\n";
write_file(htm_files,str[0..strlen(str)-4]+"</html>\n");
}
}
这样产生出的 htm 档,其内容类似如下
/open/area/d/map/lodoos/room/wiz_tower.htm
===========================================================
<html>
巨型高塔下<room_short/>
眼前是一座纯白色大理石建构成的高塔,塔似剑般刺向天空,石
墙映照着日光,令人无法直视。西边则有一间神秘的房子,你看
到有许多人在那里进进出出的。<room_long/><p>
<t><t>明显出口:
<a href="/open/area/d/map/lodoos/room/sq-w1.htm">south</a>,
<a href="/open/area/d/wiz/room/race.htm">west</a>,
<a href="/open/area/d/wiz/room/disc.htm">up</a>
</html>
===========================================================
这个档若以浏览器开启的话,会类似底下这样:
https://i.imgur.com/HjILx6z.jpg
也就是说,只要靠 _go.c 这个指令,就能自动建立与房间 .c 档
相对映的 .htm 档,这时只要用浏览器任意点开一个 .htm 档,就
能靠着点超连结去“浏览”与其相邻的其它房间的内容。
因为它是自动产生的,而且实际上只要 .htm 档存在,它每次只多
做一个 file_exists 的判断而已,耗费不了多少资源。
当 /open/area 里面的 .htm 档达一定量时,就能将它单独下载到
“本机”,然后在本机以浏览器开启,就能在本机走房间了。
它有几个注意事项:
一、写进 .htm 的实际字串内容,需经过适当的处理。例如 linux
环境下目录是像 /open/area/.. 这样的格式,可是在 windows
下,它是读 d:\open\area\.. 这样的格式。
也就是说,要默认玩家会把 release 出的东西默认放在 win
的电脑下的 d:\ 目录,才能顺利点开各个 .htm 档。
但如果是开放 mud server 端的 http 浏览时,就要照 linux
下的路径格式。
二、当一个 mud 的玩家数够多时,理论上 .htm 档的产生会很顺
利,而且要是产生的不对,只要 rm 掉整个 /open/area 下的
目录,就可以让 _go.c 自己重新产生。
三、原则上可对 .htm 档做后制,例如说次元镜所在的房间,我们
可以额外增加下拉式选单,把次元镜所有出口放在选单内,玩
家选择了某一出口,就自动开启对映的 .htm 档即可。
最后,这么做有什么目的呢?就是不需释出房间的 .c 原始档,也
可以释出 sanc 的区域资料,线上玩家走过的区域越多,可释出的
资料也越多。
然后才是 javascript 可发挥的部份,当我一个目录下有 .htm 档
时,如果我默认它们都会 import 某个我写好的 .js 档的话,那么
就可以让每个 .htm 可拥有特殊的功能,例如:
1.进行即时统计(房间数多少、..)
2.甚至进行即时周边地图绘制呈现(抓超连结来分析就行了)
└呈现出来的地图有格子,点格子即跳到那一格
3.方便进行各种搜寻(比方找房间的特定叙述)
最后是这个 project 的最大优点,就是由使用者在自己[本机]上
操作,耗费的是本机的资源,对处于服务器端的 sanc 来说不会有
任何影响。当然缺点是它没有办法即时更新,但通常一个已发展成
熟的 mud,已存在的区域,其资料通常也不会有啥变动。
这项计划会在今年找一天开始做,实际上的做法不会跟上面完全一
样,会有所变化,但方向是一致的,而且将不会只侷限在区域上。
Laechan