Re: [建議] 副本相關

作者: laechan (揮淚斬馬雲)   2014-04-28 10:09:15
今天在 instance_ob.c 新增了三個函數如下
int instance_set(object room,mixed tmps)
它的格式如下
instance_set(room,({
"exits/out","/d/wiz/room/disc",
"instance_flags",2,"already_ended",1
})
);
也就是把要設定的目標 room 及要設定的東西放進 tmps 裡頭,
這函數就會把 tmps 裡面的東西設定進去。
int instance_del(object room,mixed tmps)
它的格式如下
instance_del(room,({"cant_go","long2"}));
也就是說把目標 room 及欲刪除的欄位放進 tmps 裡頭,這函數
就會把 room 的這些欄位刪掉。
int find_npc(object room,mixed exits)
它的格式如下
if(ob=find_npc(room,({"north","north","west","west","west"}))
ob->move(room);
它的意思是說,如果玩家目前所在格的 2n 3w 的地方有一隻npc
,我們希望把它直接 move 過來,就可以使用上面段落的格式,
它會去找 2n 3w 的那隻 npc,有找到就可以 npc->move(room);
(或是 npc->remove(),由 wiz 自行決定)。
另外修改了一個原先的函數
varargs int birth_npcs(object room,string npc_files,string tmp)
這個今天有略做修改,主要是把最後面的參數 mixed tmps 改成
string tmp,並新增 static mapping instance_npcs=([]);
而 instance_npcs 的宣告方式如下
instance_npcs=([
"sealker":({
"short","不幸的魔法師─西爾克(Sealker)",
"chi_name","不幸的魔法師─西爾克"
}),
]);
這樣比方我們要在 room 新增 sealker 時就可以這樣做
birth_npcs(room,INSTANCE_NPCS,"sealker");
^^^^^^^^^^^^^一般 npc 樣本檔 = /std/new_ob/instance/npc.c
那因為是 varargs 宣告,所以,假設沒有接 tmp,它就直接使
用玩家所接的 npc_files,比方你可以這樣做
birth_npcs(room,"/d/wiz/mob/lodao");
它就會把小滷蛋叫到 room 裡頭,而且幾乎不變動其參數設定。
(instance_npcs["sealker"] 裡面所宣告的就是要變動的資料)
做這些修改主要是
1.簡化腳本物件的設定程式碼複雜度
2.將部份設定公用化,方便以後統一修改。比方以後如果決定旗
 標一律使用 instance_flags 及 instance_next_times,那就
 可以更簡化為
instance_set(room, 2, 12,({...}));
^^ ^^
旗標 next_times
然後 -1 -1 時就代表不更動。
Laechan

Links booklink

Contact Us: admin [ a t ] ucptt.com