作者laechan (小太保)
看板mud_sanc
标题[抠顶] 副本系统
时间Fri Feb 21 08:35:47 2014
#define INSTANCE_ROOM
static mixed files=({});
static mapping instance_area=([]);
int product_instance(object ppl)
{
string f,names;
object room,ob;
names=ppl->query("name");
instance_room[names]=([]);
foreach(f in files)
{
if(!file_exists(f+".c"))
{
write("副本产生失败!\n");
return 1;
}
else if(catch(room=find_object_or_load(f)))
{
write("副本产生失败!\n");
return 1;
}
ob=clone_object(INSTANCE_ROOM);
ob->set("short",room->query("short"));
ob->set("long",room->query("long"));
ob->set("exits",room->query("exits"));
ob->set("objects",room->query("objects"));
ob->reset();
instance_room[names][f]=ob;
}
write("副本产生中......\n");
call_out("enter_instance",2,ppl,names);
return 1;
}
int enter_instance(object ppl)
{
object ob;
if(!ppl)
{
clean_instance(ppl,names);
return 1;
}
ob=instance_room[names][files[0]];
ppl->move_player(ob,"SNEAK");
ob->start_count_time(ppl);
return 1;
}
========================================================
这个副本系统是比之前更单纯的东西,如上所见,它的核心只有
几行,加上一些扩充的东西应该 200 行以内也可以搞定,精华
主要写在 INSTANCE_ROOM 里头。结合 quest 的话就类似底下的
表现..
> quest ooo about xxx
某人: 好的, 现在就送你到OO之地, 请跟那里的神官对话!
副本产生中....
+ 罗德斯大教堂 +
你现在位於本地最负盛名的教堂里,这个教堂已经有相当久的历
史了,看起来大概有一、二百年的时间,墙上的绘画已经开始剥
落了,已经快看不出来在画些什麽了,但依稀可见到的是,天神
创造这个世界的情况。目前这个教堂由几个牧师来管理,帮忙人
们办理结婚大事。你可以打(help marriage)来获得讯息。
明显出口有: north.
Lv200.教堂神官-尤尼(Yuuni)
>
这东西不会很难写,而且它也支援组队过副本、多人副本、脚本
架构等,甚至玩家也有能力写,因为它的脚本架构还蛮简单的。
不过这东西我现在没啥动力写(给我一些动力吧!!),可以确定的
是这东西一定会出现在圣殿。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 编辑: laechan 来自: 210.61.157.53 (02/21 10:47)
1F:→ laechan :我想说先决定一下要怎麽测这东西 02/21 13:48
难决定的原因是比方我拿现用的区域,则到时要凭空创出区域时
得改很多东西。
但假若一开始拿凭空创出的区域测试,则怕写出来的东西反而会
不相容於现有区域(而且比较花时间)。
然後理论上应该从後者开始,但实务上一般多会拿现用的..
so,到下班前我得多考虑考虑。
※ 编辑: laechan 来自: 210.61.157.53 (02/21 14:56)
2F:→ laechan :另一个问题就是除了quest,这东西有无其它用途 02/21 14:57
3F:→ laechan :比方幻想有所谓的50关副本,「理论上」圣殿是可以做 02/21 14:58
4F:→ laechan :的,只是比起单纯闯区域,副本除非有吸引力不然玩家 02/21 14:58
5F:→ laechan :一般是不会想去打副本的 <- 所以我才会没啥兴趣写 02/21 14:58
顺便备份
副本一定包括底下几个要素
1.跑副本的封闭区域
2.每一房间的触发设定(init)
a.触发生怪(生出物件)
b.触发剧情(生出 npc、对话等)
c.触发剧情提示
d.可下指令(add_action)
e.block 玩家(block_command)
3.怪物死亡设定(物件的 die 函数)
a.死亡後生出可对话 npc
b.死亡後生出出口
c.死亡後触发剧情
4.times_check 辅助管理该副本
※ 编辑: laechan 来自: 210.61.157.53 (02/21 15:25)
6F:→ laechan :我觉得还是用脚本化的做法,但舍弃之前的一些构想方式 02/21 17:37
7F:→ laechan :(之前是想连地图都脚本化) 02/21 17:37