作者laechan (小太保)
看板mud
标题Re: [闲聊] 分散式储存
时间Tue Jan 29 12:02:59 2013
这里顺便聊一下 vroom 会产生的一个问题,以及一个
简易的暂时解决方案,比方 002.c 这个房间,假设它
被载入(生成)了,那麽一般 mud 要找到该已载入房间
的简易做法如下..
if(room=find_object(__DIR__+"002"))
它的意思就是,如果 002 已经被载入了,就令 room
等於「该已被载入的房间」;若 002 没有被载入,就
载入它、然後令 002 等於「这个新载入的房间」。
那麽,虚拟物件的部份,一个最大的问题就是,我们如
何知道一个虚拟物件已经被载入呢?
最简单的做法就是在载入虚拟物件时,替它标上「识别
」,例如「玩家」实际上也算是广义的虚拟物件,则要
找到「已被载入的玩家 laechan」就可以用这种做法..
if(user=
find_player("laechan"))
也就是说,find_player 是一个已经被写好、专门用来
找已被载入玩家的函数。
那同理亦可假设有一个 find_vobject 的函数也是用来
做这种事的,则以 find_player 为例,它的依据是以
「玩家ID」做为识别,则 find_vobject 同样也应该标
示一个东西来做为识别。
那麽,假设说,你不知道系统是否有内建找寻虚拟物件
的函数时,该怎麽做呢? 只要自订函数来处理即可
比方我们自订找家族根据地的函数 find_groom,则其内
容可以这样写..
// names 为族长ID
object find_groom(string names)
{
object* obs=([]);
object ob;
// 令 obs = mud 全物件
obs=objects();
foreach(ob in obs)
if(ob && ob->check_leader_names(names))
return ob;
ob=new("/inherit/vroom");
ob->restore_room("/group_data/"+names);
return ob;
}
则当我们做如下判断时
if(vroom=find_groom(names))
当 objects() 里面有存在该 vroom 时,就回传该已载
入的 vroom; 若不存在的话,就 new 出一个新的东西并
return 它。
基本原则就是若该虚拟物件存在,就要呼叫已存在的;
虚拟物件不存在时,才 new 出来用。
LAechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.117.106.224