if( !mapp(ob_list) ) return;
//如果这个房间初始时就没有设定有生物物品,就说明根本无需要刷新,因此到此返回。
  if( !mapp(ob = query_temp("objects")) )
  ob = allocate_mapping(sizeof(ob_list));
//程序到后面才可看到ob = query_temp("objects")是如何出来的,在这里,我们先不管,你只要知道,如果是一个刚刚编译进内存的房间,是不会有ob这个映射集的,因此需要用allocate_mapping按照ob_list的多少为这个新设定的映射集ob分配内存大小。
  list = keys(ob_list);
//从ob_list映射中取出关键字组成一个新数组。
  for(i=0; i<sizeof(list); i++)
//开始循环检查这个数组里的每一项
  {
    if( undefinedp(ob[list[i]])
      && intp(ob_list[list[i]])
      && ob_list[list[i]] > 1 )
      ob[list[i]] = allocate(ob_list[list[i]]);
//如果房间里曾经定义了要产生物品,并且数量不止一个的话,就要进行ob[list[i]]这个物件数组的内存分配
    switch(ob_list[list[i]])
    {
    case 1:
//举例一个文件里:set("objects",(["/d/city/npc/bing":1]));,那么在这里,也就是ob_list[list[i]]这个值取出是1
      if( !ob[list[i]] )
        ob[list[i]] = make_inventory(list[i]);
//如果这一个对象已经不在了(玩家理解的就是被杀死了或被当作任务送掉了,巫师的理解就是被destruct了),就使用make_inventory()函数再重新制造一个放进来。这里注意了,仁去递过去的list[i]就是这一项物品的路径名,正因为有了路径名,make_inventory()函数才能正确制造出新的来。
      if( environment(ob[list[i]]) != this_object())
//反之如果还存在,但它目前所处之地却不是目前的这个房间
      {
        if(ob[list[i]]->is_character()
          &&!ob[list[i]]->return_home(this_object()))
        add("no_clean_up",1);
//这句判断该物体如果是生物,就呼叫生物的return_home()叫它回来,如果这个NPC不能回来并且返回值是0的话,就会给这个房间增加一次no_clean_up的记号,程序的原作者之所以要在这里增加房间的no_clean_up记号,估计它的意思就是不想让系统在房间不能成功召回自己的NPC的情况下清除它,因为它想在以后的刷新中再把它呼叫回来。但是实际上,大家注意到前面的程序了吧,只要产生了下一次呼叫reset()时,前面就会把no_clean_up设为0,因此这段ES的源程有些莫名其妙,但大家居然都没人改,也是怪事。

      }
      break;
      default:
//除此之外,也就是物件不止一个的话,举例相当于文件里:set("objects",(["/d/city/npc/bing":2]))或者3,4....这类的情况
      for(j=0; j<ob_list[list[i]]; j++)
      {
        if( !objectp(ob[list[i]][j]) )
        {
          ob[list[i]][j] = make_inventory(list[i]);
          continue;
        }
        if( environment(ob[list[i]][j]) != this_object())
        {
          if(ob[list[i]][j]->is_character()
          &&!ob[list[i]][j]->return_home(this_object()) )
          add("no_clean_up", 1);
        }
      }
//这里其实与物件只有一个是一样的,只是因为相同的物品不止一个,需要进行几次的循环判断而已。

     }
  }
  set_temp("objects", ob);
//看到这里,知道这个函数里ob映射集是如何来的了吧,实际上ob

下一页 上一页
返回列表
返回首页
©2024 MUD游戏网_文字mud 电脑版
Powered by iwms