攻击性技能制作详解（以浣花剑法为例）

// huanhua-jian.c 浣花剑法
	——文件名及技能中文名
// 笨小孩(Load)制作于1999.3
	——制作人及制作时间

inherit SKILL;
	——继承SKILL属性

mapping *action = ({
	——技能行为主体
([	"action" : "$N手腕一抖一式「梅花三弄」，手中$w虚虚实实画出三朵梅花，突的合为一剑，刺向$n。",
		——招式描述
	"damage" : 20,
		——在基础伤害值上加20%的伤害值
	"parry"  : -10,
		——敌人的招架可能值-10
	"force"  : 30,
		——在基础伤害附加值上加30%的伤害附加值
	"lvl"  : 0,
		——当技能等级到０级时可使用此招式
	"dodge"  : -10,
		——敌人的躲避可能值-10
	"skill_name" : "梅花三弄",
		——此项招式的名字
	"damage_type" : "刺伤"
		——造成伤害的类型
]),

	……

([	"action" : "$N不顾$n的攻势，向前急冲，手中$w点出「点点星光」，将$n完全罩在了一片剑光之中。",
//	"parry_action" : "",
	"damage" : 150,
	"parry"  : -25,
	"force"  : 150,
	"lvl"  : 90,
	"dodge"  : -15,
	"skill_name" : "点点星光",
	"damage_type" : "刺伤"
]),
});

int valid_enable(string usage) { return (usage == "sword") || (usage == "parry"); }
	——技能可以激发的类型

string query_skill_name(int level)
{
        int i;
        for(i = sizeof(action)-1; i >= 0; i--)
                if(level >= action[i]["lvl"])
                        return action[i]["skill_name"];
}
	——需要取得技能名称时调用的函数

int valid_learn(object me)
{
	if ((int)me->query("max_neili") < 100)
		return notify_fail("你的内力不够。\n");
	if ((int)me->query_skill("jiuqu-xinfa", 1) < 25)
		return notify_fail("你的九曲心法火候不够。\n");
	return 1;
}
	——学此项技能时调用的函数

int practice_skill(object me)
{
	object weapon;

	if (!objectp(weapon = me->query_temp("weapon"))	|| (string)weapon->query("skill_type") != "sword")
		return notify_fail("没有剑怎么练习浣花剑法？\n");
	if ((int)me->query("jingli") < 50)
		return notify_fail("你太累了，还是歇一会再练吧。。\n");
	me->add("jingli",-30);
	return 1;
}
	——练此项技能时调用的函数

mapping query_action(object me, object weapon)
{
        int i, level;
		level   = (int) me->query_skill("huanhua-jian",1);
        for(i = sizeof(action); i > 0; i--)
                if(level > action[i-1]["lvl"])
                        return action[NewRandom(i, 20, level/5)];
}
	——攻击时调用的函数，用来选择一个攻击找式

string perform_action_file(string action)
{
	return __DIR__"huanhua-jian/" + action;
}
	——特殊攻击时调用的函数

此外攻击性技能还可以又一个hit_ob()函数例：
mixed hit_ob(object me, object victim, int damage_bonus, int factor)
{
    if( random(me->query_skill("jiuyin-zhua",1)) > 50) {
    victim->apply_condition("jy_poison", random(2) + 1 +
   victim->query_condition("jy_poison"));
    }
}
	——在攻击时调用的函数，用以产生特殊效果