北大侠客行给npc提供了一些接口，帮助巫师实现更加‘智能’的npc.
接口列表如下；
*  got_fight(object who,string type)
   被攻击时调用，who为攻击者，type为攻击类型，有kill和fight两种
*  enemy_removed(object who)
   攻击停止时调用，who为攻击者
*  busy_started()
   被busy时调用
*  busy_stopped()
   busy解除时调用
*  damage_received(mixed who,string type)
   受到伤害时调用，who为伤害者，也可能是个字符串. type为伤害类型，包括jing和qi
*  wound_received(mixed who,string type)
   受到伤害时调用，who为伤害者，也可能是个字符串. type为伤害类型，包括jing和qi
*  heal_received()
   伤势得到恢复时调用
*  curing_received()
   被治疗时调用
*  got_revived()
   从昏迷中醒来时调用
   
使用方法：
在特定的npc中实现部分接口，并在接口中写入希望的逻辑。这些接口
都是用于战斗的，所以实际中大部分的逻辑是为战斗服务的。将来可以
进一步扩展，用于其他方面。没实现的接口自动被忽略。

举例：
void got_fight(object ob)
{
    command("kao "+ob->query("id"));
    command("kill "+ob->query("id"));
    command("perform staff.chan on "+ob->query("id"));
}

void busy_stopped(object ob)
{
    object target;
    if(is_fighting())
    {
        target = enemy[random(sizeof(enemy))];
        if(objectp(target)) 
        {
            command("perform staff.zhuan on "+target->query("id"));
        }
    }
}   

void damage_received(object who,string type)
{
    object target;
    if(!is_busy())
    {
        if(!is_fighting())
        {
            if(type == "jing")
                command("exert recover");
            else
                command("exert regenerate");
        }
        else
        {
            target = enemy[random(sizeof(enemy))];
            if(objectp(target)) 
            {
                if(target->query("qi")*100 / target->query("max_qi") < 10 || target->query("eff_qi")*100 / target->query("max_qi") < 10)
                {
                    //do nothing, just attack
                    command("perform staff.zhuan on "+target->query("id"));
                }
                else
                {
                    if(type == "jing")
                        command("exert recover");
                    else
                        command("exert regenerate");                    
                }
            }            
        }
       
    }
}

这类代码可以写在任务npc的基类里。在npc.c里不宜写的太复杂。也可以进一步抽象。


Jason 2009
