作者laechan (小太保)
看板mud_sanc
标题Re: [建议] 副本相关
时间Mon Apr 14 09:51:47 2014
※ 引述《laechan (小太保)》之铭言:
: ※ 引述《justinj (黑旋风)》之铭言:
: : 3.任务:副本通关
: 最常见有两种形式(多种也可以)
: 一、走到这格即通关
: 在 instance_data 里面新增参数判断即可
: 二、打死该格某只怪物即通关
: 用 mob_alldie 来判断即可
目前 instance_rooms.c 会针对每一个 heart_beat_ob 去做
check_instance 的动作,因此有两种做法。
一种是写在基底房间,再依 instance_name 做区别。但是我
一般不建议这种做法(因为要改基底房间)。
另一种是写在副本物件里头,让 check_instance 去判断房间
是不是有 instance_check 设定,有的话就去 call 001.c 执
行 instance_check 函数,把房间档名代过去,该函数就能依
档名来做各种判断。写在 001.c 则一 more 也会知道哪些房间
有设定 instance_check、以及它们的判断内容、执行内容等等
它的做法说明如下:
/std/new_ob/instance_room.c 不备份新增修改。
if(undefinedp(data["instance_check"]))
{
msg=data["instance_files"];
tt=strlen(msg);
while(tt-->0)
{
if(msg[tt..tt]=="/")
{
files=msg[tt+1..strlen(msg)-1];
break;
}
}
if(ob)
if(msg=catch(ob->instance_check(files,this_object())))
tell_room(this_object(),msg+"\n");
则写在 instance_ob 的 instance_check 就可以依据档名来
做各种判断,理论上「可以做到任何的事情」,所以原则还是
一样,该给 instance_data 的设定就应交给 instance_data
,真的不太好做的判断才交给 instance_check。
另外 instance_ob 本来是物件型式,我也改成了字串型式,
因为 001.c 有可能会被 update。(跟护盾的 issue 一样)
最後,一个已经不应该再判断 instance_check 的房间,就应
该做 room->delete("instance_check") 的动作,这个会在范
例档里写出来,这可减少误判及判断错误。
(一般我会额外检查房间是不是有玩家)
// 基底房间
instance_files :"/u/l/laechan/area/whitetile/room/083"
// creator 的等级
instance_level :120
// 一开始有几人进入副本
instance_member :1
// 副本名称
// 一般则以「instance_player」为该副本实际使用的 name
instance_name :"白瓦镇黑熊讨伐任务副本"
// 指向的副本物件
instance_ob :"/std/new_ob/instance/laechan/001"
// creator 是谁。同一时间只允许一位玩家 create 一个副本
// 所以每一个副本的 creator 是独立的
instance_player :"laechan"
// 副本被 creator 时的时间
instance_time :1397442060
我一般不会宣告为 mapping 型式,这是因为
1.数量不多(上面的数量还在可接受范围)
2.方便判断(使用 mapping 资料时)
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.61.157.53
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1397440311.A.D95.html
※ 编辑: laechan (210.61.157.53), 04/14/2014 10:24:35
1F:→ laechan :下午再做补充说明,有空会再继续改副本相关 04/14 11:59
2F:→ laechan :改完会实验确定可正常运作 04/14 12:00