[wizs] 如何以新型态区域的开发方式制作城镇

楼主: 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

Links booklink

Contact Us: admin [ a t ] ucptt.com