□ 战斗

    战斗可说是 LPmud 最重要的部份，而且各种 mudlib 的实作方式也大同小异，
都是利用 heart_beat() 这个函数来执行每「回合」的攻击动作，整个 mud 的执行
时间有极大的部份用在执行物件的 heart_beat() 上 ，而 heart_beat() 所作的工
作主要就是进行战斗，因此有关战斗的程式若是缺乏效率，整个 mud 的速度就会变
得很慢。

    有别於大部分的 mudlib，我将进行战斗的主要程式从使用者物件中分离出来，
写成一个 daemon，这样做的理由有二：

    第一，方便线上更新(update)战斗部份的程式 ，如果战斗的程式是由使用者继
承的传统方式 ，你必须更新使用者物件才能使你在线上所作的修改能动作，但是更
新使用者物件是一件「极端」麻烦与复杂的工作 ，牵涉的东西太多了，如 hunt、
poison.... 等等，能避免就尽量避免，因此将这些未来扩充或除错时可能常常会修
改的部份独立成一个 daemon，修改时只要更新 daemon 就可以了。

    第二，是记忆体和速度的考量 ，一般而言战斗部份的程式常常用到许多常数字
串(讯息)，但是因为 LPmud是用解译(interpret)的执行方式，因此使用常数的速度
往往比变数慢很多，尤其是常数型态的阵列、mapping等，因此在遇到这类情形时我
通常将这些资料用「具有初始值的变数」定义好 ，这样一来这些资料结构的建置只
有在物件被载入时执行一次，往後都是以变数形式使用 ，这种方式虽然加快了速度
，但只能说是「以空间换取时间」，因为增加了变数的数量 ，若是每个生物都自己
拥有一份这些实际上是常数的变数，(复制的物件会复制一份所有继承物件的变数)
记忆体的负担是很可怕的，因此把这些变数放在 daemon 里 ，既节省空间，又加快
速度。

□ 战斗的进行

    当一个生物处於战斗状态下，原则上每回合会作出一个动作(action)去攻击敌人
，这个动作是定义在一个 mapping 中，有关动作的定义方式请参考其他文件，

