□ NPC

object carry_object(string file)
複製 NPC 身上所攜帶的東西.

object add_money(string type, int amount)
設定 NPC 身上所攜帶的錢幣種類及數量.

int accept_fight(object who)
判定 NPC 是否接受挑戰 (fight). 首先檢查 NPC 的戰鬥行為 (attitude), 
判定是否可以被圍毆. 再來判定 NPC 自身的體力, 並依 attitude 的設定決
定是否接受挑戰. 

int chat()
如果 NPC 有設定任何固定時間會執行的事項, 則此函數會依照 chat_chance
所設的數字亂數決定是否可以執行, 若可, 則亂數決定要執行那一項, 如果該
事項為文字字串, 則直接顯示該字串, 若為函數設定, 則呼叫並執行該函數.

int random_move()
內定的 NPC 逛街函數, 系統會亂數決定一個出口並試著使該 NPC 往那個方向
移動. (如果有出口的話)

void cast_spell(string spell)
使一個 NPC 施法. 首先確定 NPC 會施法 (檢查技能) 接下來由系統亂數決定
施法對象.
目前我測試的用法是void cast1_spell(string spell)

int exert_function(string func)
使用內力.//此行應該沒用到

int return_home(object home)
將被綁走的 NPC 送回家, 首先系統會判定 NPC 是否處於戰鬥狀態中, 如果是
那就只好等下次了... 不然 NPC 就大搖大擺的變回去了.

####怪物基本資料####
一個怪物的基本資料有 

level 等級 影響怪物強度主要因素, 因為所有屬性不能超過lv 太多
age   年齡

race  種族 可以為 "人類" "野獸" "妖魔" 以後再增加
      種族若是"野獸", 則要設定 limbs 和 verbs 
	野獸(beast) 的verbs 有"hoof"蹬 "bite"咬 "claw"抓 "poke"啄

gender 性別: 系統根據此設定給予人稱代名詞. 可以為 "中性神" "男性" "女性" "雄性" "雌性"
	     其人稱代名詞分別為 "祂" "他" "她" 和 "牠"
	
str   力量 與攻擊力和負重有關
dex   命中 命中率 與 閃躲率
con   體質 與生命力上限和生命力回覆速度有關
int   智慧 與學習和施法有關
	(ps 屬性如果不設定, 則系統會自動照等級決定)

evil  陣營 (陣營值從 -999 到 999 不過一般最好設在-99 到 +99 以內)
            正的表示邪惡, 負的表示善良

temp_apply 戰鬥附加裝備效果 通常是指 eq 附加的暫時性效果
如
        set_temp("apply/damage", 10);	//附加傷害力
        set_temp("apply/hit", 10);	//附加命中率
        set_temp("apply/armor", 3);	//附加物理性防護力
	set_temp("apply/shield", 3);	//附加非物理性(魔法)防護力

temp_spell 戰鬥附加法術效果 指施法造成的暫時性效果.
如
        set_temp("spell/damage", 10);	//附加傷害力
        set_temp("spell/hit", 10);	//附加命中率
        set_temp("sepll/armor", 3);	//附加物理性防護力
	set_temp("spell/shield", 3);	//附加非物理性(魔法)防護力

想要讓怪物主動殺人的話 要設 set("attitude", "aggressive");

□□□ 3月23日 新增!! □□□

 talk.c 為了讓任務更有變化以及NPC更生動, 加了此一指令.
 
  以下為NPC新增函數, 對應於talk 可以做到所有動作.

 □1. talk_action [回應動作]

     若NPC有加入此函式, 則 talk 時會NPC執行此函式之動作.

     return 1 則不會出現 talk_reply訊息, 若為return 0; 則執行完action後會呼叫reply
 
 範例:(/u/l/luky/npc/passenger.c)

	 int talk_action(object me)	
	 {
	  command("smile "+me->query("id") );
 	  return 1;
 	 }

 □2.talk_reply [回應訊息]
 
      若NPC有設定此字串( set("talk_reply",<訊息>); ) 則在talk時會說出此<訊息>字串.

      字串中可以有$N(NPC名稱) $n(玩家名稱) 等等代號;

      若沒有設, 則會以NPC的態度設定來決定會應訊息, 若態度為"killer"則會開始攻擊.


// dog.c
inherit NPC;

void create()
{
        set_name("野狗", ({ "dog" }) );
        set("long", "一隻渾身髒兮兮的野狗。\n");
        set("race", "野獸");
	set("gender","雌性");   // 1999.2.28 增加此註解
        set("age", 3);
        set("level",2);
        
        set("str", 14);		// 其他不設則系統會自動產生(依照level)
        set("dex", 16);		//

        set("limbs", ({ "頭部", "身體", "前腳", "後腳", "尾巴" }) ); //受攻部位
        set("verbs", ({ "bite", "claw" }) );			     //攻擊方式

        set("chat_chance", 6);
        set("chat_msg", ({
                (: this_object(), "random_move" :),	//會自己走動
                "野狗用鼻子聞了聞你的腳。\n",
                "野狗在你的腳邊挨挨擦擦的﹐想討東西吃。\n",
                "野狗對著你搖了搖尾巴。\n",
                "野狗用後腿抓了抓自己的耳朵。\n" }) );
                
        set_temp("apply/damage", 10);	//附加傷害力
        set_temp("apply/hit", 10);	//附加命中率
        set_temp("apply/armor", 3);	//附加防護力

        setup();
}

int accept_object(object who, object ob)	//可接受東西
{
        if( ob->id("bone") ) {
                set_leader(who);
                message("vision", name() + "高興地汪汪叫了起來。\n", environment());
                return 1;
        }
}

...其他想到再加

