作者laechan (小太保)
看板mud_sanc
标题[wizs] /open/vroom
时间Fri Dec 28 17:48:45 2007
底下有三个档案...
vroom_d.c 共通继承档
这个档设定了玩家在移动到其它房间时会做的事
vroom.c 虚拟房间档, 每个虚拟房间的本体都是 vroom.c
每个 vroom.c 都会有个 check_ppl 函数, 它会
在特定时间被 control.c 呼叫, 用以判断虚拟
房间还有没有玩家存在.
control.c 区域的起点, 有四个出口通往对映的虚拟房间,
它并定义了该方块型区域的四个边界值.
(以目前的 control 来说, 它是 31 x 31 的区域)
heart_beat 则是每一秒它会做的事, 其中有个全
域变数 f 会累加...
当 f/150 的余数是 30 时, 对第一象限的所有虚拟房间做 check_ppl
当 f/150 的余数是 60 时, 对第二象限的所有虚拟房间做 check_ppl
当 f/150 的余数是 90 时, 对第三象限的所有虚拟房间做 check_ppl
当 f/150 的余数是 120 时, 对第四象限的所有虚拟房间做 check_ppl
所以它可以定时去对所有的虚拟房间做 check_ppl,
只要该房间的 check 结果是没有任何玩家存在, 它
就会把该虚拟房间从系统记忆体中 clean 掉。
在有设定边界值以及一般合理的情况下,最多只会产生 31 x 31
个房间,而每过一个 check_ppl 的循环周期後,最多只会剩下
与「玩家在线人数」相同的房间数。
(即假设线上的玩家全部都跑去那个区域,而且每个人占一格)
又假设,如果玩家每进一个房间,例如它就得停留一段时间才
能再往次一格走,亦或者每进一个房间就得跟房间的怪物战斗
(等於同样要停留一段时间),那麽实际上就不可能一下子产生
许多房间。
甚至,我们可以先画好一个依一定格式完成的地图,把地图让
control.c 去处理,之後,它就会依照那份地图,去 product
出整个虚拟房间组成的区域,这也是一种不错的方式。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.225.184.184
1F:推 doall:是的...我在其他MUD看过这东西... 12/28 23:21
2F:推 doall:但这方法只能做出「平面」的区域 12/29 03:56
3F:→ doall:这是我认为比较可惜的地方... 12/29 03:56
4F:→ laechan:以相同的概念要扩展成三维空间并不是问题,把二维的写法延 12/29 18:34
5F:→ laechan:伸为三维即可. 12/29 18:35
6F:→ laechan:但是这样一来就不能丢图给它去product,只能用手动输入的方 12/29 18:36
7F:→ laechan:式去让control.c事先储存各格子的资料,这并不难. 12/29 18:36