
                    有关「东方故事」与 LPmud 之概念性介绍

                           By Annihilator 11-03-93

何谓 LPmud？
------------
    LPmud 是一种「多人角色扮演网路游戏」，也就是各位所熟知的 MUD。 东方故事
    是建立在目前国际上最普遍、最广为使用的 LPmud 系统上( 目前 Dikumud 和
    Ambermud 有逐渐三分天下的趋势 )。 LPmud 最早是由一个老外，名字以 L 和 P
    开头，所设计的并因而得名。

    LPmud 和 Dikumud 样是一种以战斗、冒险、解谜为主题的 mud，这一类的 mud
    目前是最普遍的。LPmud 的历史比较早，变化也可算是所有 mud 中最多的，世
    界上找不到任两个 LPmud 看起来是完全一样的。

driver 与 mudlib
----------------
    LPmud 最主要由两个部份构成，一个称为 driver、另一个称为 mudlib。

    driver 就是 mud 的可执行档，你必须在作业系统下编译、连结，然後执行。

    不过光有 driver 是无法执行 mud 的，lpmud 系统的特色是「资料与程式分离」，
    你必须有一个 mudlib 让 driver 去执行，mudlib 照字面看是 mud library 的
    简写，主要是由一大堆的 LPC 程式码组成，由於这些程式码完全是以文字档的形
    式储存，你在 mud 执行当中随时可以查看其内容，又由於这些程式码不需要经过
    编译、连结，所以在 mud 执行当中你随时可以修改它的内容，并且可以在线上随
    时将修改後的程式码载入记忆体执行。这点和 Dikumud 的 area 资料档作用方式
    不同，Dikumud 只在 mud 刚启动时将所有资料读进来，而 lpmud 的作法是只把
    用到的资料读进来，然後随时视需要而载入不同的程式码以结省空间。

    lpmud 的 driver 通常为了效率与功能，写得十分复杂而且用到的技巧与系统呼
    叫均十分艰深( driver 里面包含一个 LPC 的 compiler、网路 socket 的处理，
    以及一堆记忆体管理的程式 )，最要命的是几万行的 C 语言原始码中注解不多
    又不易了解，所有的 mud 通常是敬鬼神而远之——不敢更动它的程式码。

    所幸 lpmud 的精髓部份是在 mudlib 的部份，所有 mud 中有关游戏的部份，包
    括制度、属性、种种和游戏有关的东西都是由 mudlib 决定的，也就是说，你不
    需要去修改 driver 就可以作出大部份你想像得到的东西。

PS: 目前「东方故事」用的是 MudOS 0.9.18 的 driver，这个版本的 driver 可以算
    是第四代的 lpmud driver，目前国际上常见的 driver 还有 lpmud 3.1.2 和
    Amylaar driver。 MudOS 的特色是速度快，节省记忆体，而且是目前国际上新一
    代 lpmud 采用最多的的 driver，不但新的 lpmud 「市场占有率」最高，就连许
    多旧有的 mud 大站也纷纷将它们的 driver 换成 MudOS，其中还包括有不少台湾
    玩家的 Kingdoms、Genocide。

    「东方故事」的 mudlib 是以 TMI-2 1.1 的「发展用」mudlib 为基础所建立的，
    一个完整的 mudlib 如果从一无所有、白手起家开始建，是会累死「神」的，因
    此国际上一群有经验的 lpmud 「巫师」们，凑在一起开了一个 lpmud 叫作 TMI
    ( The Mud Institution )，这个 mud 的目的不是让玩家玩，而是让一群来自世
    界各地的巫师们聚在一起，集合大家的智慧写 mudlib 用的。对 TMI 有兴趣的人
    可以 telnet 129.10.11.53 5555 试试，如果你不熟 lpmud，最好用 guest 进
    去，因为新造人物一进去就被升为巫师，整个 mud 房间也不多，和其它 mud 有
    很大的不同。

巫师( wizards )
---------------
    在 LPmud 中，一般玩家升到最高级之後，并不是就没事干了。大部份的 lpmud
    允许玩家成为 wizard，中文的意思是「巫师」。巫师并不是玩家，这点是所有
    的 lpmud 一致强调的一点，就像 Dikumud 中的 immortal 一样，巫师具有许
    多一般玩家没有的能力，就某方面来说，甚至比 Dikumud 中的 God 还强，例如
    巫师可以无中生有造出一只怪物或一把剑，而 Dikumud 中的 God 除了 load
    原来就已经存在的物品或怪物，就必须修改 area 档然後把 mud reboot 才有可
    能。

    巫师的能力来自於 lpmud 中的线上编辑系统，一个巫师可以在其它玩家进行游戏
    的同时，修改 mudlib 的内容。也就是说，房间、怪物甚至整个 mud 的制度、属
    性都可以在不经由 reboot 的情形下进行修改或扩充。

    巫师通常可以利用系统内建的文书编辑器撰写或修改 LPC 程式码，细节在此不多
    作讨论。

LPC
---
    所谓的 LPC 程式码事实上就是 C 语言的程式码，就如同平常我们说 Borland C，
    Turbo C 一样，LPC 名称的来源和 LPmud 一样。

    LPC 的语法和 C 「完全一样」，甚至更简单。不过如果你没有学过 C，最好不要
    学 LPC，以免被它极端 user friendly 的架构惯坏了胃口。

    LPC 是一种「物件导向」的程式语言，你并不能用 LPC 写出一个完整的程式，只
    能用它来定义物件( object )，所谓的物件就是组成 LPmud 世界的基本单位，在
     mud 中一个房间、怪物、武器、药水... 都是物件，这些物件都是用一个 LPC 
    写成的程式码定义的，你在 mudlib 中看到的一大堆 *.c 的档案就是一个个物件
    的定义。

    用 LPC 写成的程式码并没有一个叫作 main() 的程式入口，这也是你无法用 LPC
    写一个完整程式的原因。这些物件的程式码中通常会有一些内定的函数名称，当
    系统遇到特定状况，如: 有人从地上捡起一个物品，driver 或其它 mudlib 中的
    物件就会去 call 这个函数，只要你在物件中定义了这个函数，就会执行到函数
    的内容。只有少数几个函数名称是由 driver 规定的，大部份要视不同的 mudlib
    才知道要定义哪些函数。

物件( Objects )
---------------
    在介绍物件之前，先简单地介绍一下 driver 处理 mudlib 中资料的方法，当系
    统( driver 的执行档 )一开始执行，它会将几个 mud 中必备的物件从 mudlib
    中载入到记忆体中，( 并不是直接载入 LPC 程式码，而是先「编译」成一种类似
    组合语言的中间码，这是 driver 内部运作的细节，知道有这麽回事就好，不必
    深究 )然後就开始等待玩家或巫师上线。在第一个人连线进来之前，mud 中所有
    的房间、怪物等物件都不会被载入或编译。

    当玩家连线之後，那些跟玩家有关的物件才会一个一个的被 driver 载入。物件
    被载入之後，若是有一段时间不曾被任何玩家使用到，如一个房间很久没有人经
    过，driver 就会将它清除掉以节省记忆体。

    前面曾提到过，一个物件的载入必须经过 driver 的「编译」，也就是将 LPC 的
    程式码转换成它内部的储存形式，在编译过程中，若是发生了错误，如少写一个
    分号等，mud 并不会 crash 掉，而会告诉你错误讯息( 甚至错在第几行 )。
