□ 技能系统

我们使用的技能系统是属於多元成长途径的系统，有别於传统用经验值换取等级的
方式，一个技能由两个数值来描述：「等级」与「学习点数」，平常使用时只看等
级，学习点数完全不影响技能的效力。

由於技能的性质不同，我们将技能分为两大类：基本技能跟特殊技能，基本技能又
可以称为技能种类，所有的特殊技能都必须有至少一种的基本技能为基础，举例来
说，「xx剑法」是一种特殊技能，以「基本剑术」、「拆招卸力之法」为基础，这
个意思是说，这种剑法可以被「使用」在剑术与拆招卸力的用途上，并不是说必须
先学过基本剑术与拆招卸力之法才能学这个剑术，有关技能的学习限制完全由技能
本身定义，系统不预作假设。

通常我们公式中计算技能等级的时候，使用的是一种称为「有效等级」的计算方式
，所谓的有效等级，是以「技能种类」(基本技能)为索引的，特殊技能没有有效等
级，因为有效等级的计算是合并 □ 基本技能、□ 被「致能」的特殊技能， 以及
 □ 装备、法术等其他影响，所计算出来的，其中基本技能的等级以二分之一计算
，特殊技能以原来等级计算，装备及其他法术影响以修正值计算(可正可负)。大概
的公式如下：

  有效等级 = (基本技能 / 2) + 特殊技能(enabled) + 修正值

大多数的公式中所称的「技能等级」指的便是上面的有效等级。

□ 技能定义

所有的技能包括基本技能与特殊技能，我们都用一个物件来定义，定义技能的物件
必须继承标准技能物件 SKILL，并且定义以下几个函数：

string type()

  传回技能的型态，目前有 "knowledge"、"martial" 两种，其中 "martial" 型态
  的技能 learn 指令会自动限制当实战经验小於技能(不是有效技能)三次方的时候
  不能学习。

int valid_learn(object me)

  检查 me 是否有学习这项技能的条件，这里的学习包括 learn, study, practice
  ，但是不包括经由使用而进步的情形。如果合乎条件，传回 1，否则传回 0。

int valid_enable(string usage)

  检查这个技能是否可以用在 usage 的用途上，若是，传回 1，否则传回 0。

int practice_skill(object me)

  让一个人物「练习」一个技能，这个函数是由 practice 指令呼叫，作为技能物件
  的处理函数。

void skill_improved(object me)

  每当一个人物的技能等级提升了，就会呼叫这个函数，你可以在这里面做一些跟等
  级相关的改变或奖励。

By Annihilator (07/28/95)
