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