作者:
laechan (揮淚斬馬雲)
2015-10-21 14:49:17這篇也是備忘。
l mirror 到 rocky,該區域所在目錄 /u/p/ppl/hiei/rocky/
其中 /u/p/ppl/hiei/rocky/002.c 是武器店,與其它房間的差
別在於該房間保留了底下幾行
// inherit 替換成別的時就回復底下
void init()
{
::init();
if(!query("long"))
find_object_or_load(__DIR__+"area_room")->init(this_object());
}
而其它房間的這幾行則以 /* */ abort 掉,與 script_area 檔
的內容一樣。
這意思就是說,一開始 002.c 的這幾行就是 /* */ 的,之後要
將這格設為武器店時才把 /* */ 拿掉。
那麼,把 void init() 函數寫成這樣的用意是什麼呢?
1.讓該房間可照舊跑它原先的 init (例如繼承武器店的房間,
::init() 就可以使用 list, sell, buy 等指令)
2.讓該房間的房間敘述及其它設定,可 follow area_room.c 的
設定 (也就是一般新型態區域的設定)
另外,因為是武器店,所以 inherit 的地方也要改為 WP_SHOP;
這樣,就可以讓該房間變成武器店。至於該武器店預設要賣哪些
武器,個人是認為這樣的設定應該放在 area_room.c 裡面,這樣
才會方便統一管理。
(日後不需要再去動武器店、防具店、..,只要動 area_room.c)
這意思就是說,公會也是一樣
1.把 /* */ 拿掉
2.把 inherit 改成 GUILD;
3.進行其它必要的設定(建議在 area_room.c 做)
set("guild","knight");
set("chi_name","騎士公會");
set("un_pri_guild_max_lv",25);
set("pri_guild_skill","encasement");
這樣就能把 /u/p/ppl/hiei/rocky/007.c 變成騎士公會。
那麼,area_room.c 需注意什麼事項呢?
1.先令 n = atoi(ob->query("room_file"));
這樣就能讀出房間編號
2.有了房間編號就能做 switch(n) 或是 if(n==xxx) 這樣的獨
立判斷及設定。
3.村子除了 set_npcs 之外,還可以設定一些村民,而且可透過
新型態區域的特性,讓村民每次出生的位置都不一樣。
其它就都跟一般的新型態區域設定方式一樣了。
最近將以這樣的做法弄出泰帕依城。
LAechan