作者laechan (小太保)
看板mud_sanc
标题Re: [wizs] set_npcs 或 set("npcs",..
时间Tue Feb 5 14:01:50 2013
写这东西需注意虚拟村民是否在记忆体中堆叠的问题,
可以用 running code 确认。
> l
[/d/wiz/room/wiz1 ]
神之国度
这里是神居住的地方,在这里遍布着许多美丽的花园,里头
开满了漂亮的花,还有几只蝴蝶在花丛里飞舞着。中间有一条小
河流,潺潺的流水声使你忘却了心头的烦闷!另外,还有几位天
神正在坐在一旁的石头上聊着天!
明显出口有: 无
Lv100.神之仆人(servant)
> cc here
/std/ob/room.c: 更新及载入了.
/d/wiz/room/wiz1: 更新及载入了.
running code 如下...
obs=objects();
foreach(ob in obs)
if(ob && ob->id("servant"))
write(identify(ob)+"\n");
========== 程式执行区 ==========
怪物(servant /std/new_ob/npc)
========== 程式执行区 ==========
由上可知,当房间 update 时,虚拟村民也会跟着消失,
同时生成新的房间物件以及新的虚拟村民。
这时一般的房间 reborn 就可放心交给 query("npc") 来
判断。
虚拟村民在 /std/ob/room.c 的函数内容如下..
int set_npcs(mixed tmps)
{
object npc;
int i,j;
string tmp,t1,t2;
if(query("npc")) return 1;
if(catch(npc=clone_object("/std/new_ob/npc")))
return 1;
j=sizeof(tmps);
for(i=0;i<j;i=i+2)
{
if(tmps[i]!="level" && tmps[i]!="race") continue;
npc->set(tmps[i],tmps[i+1]);
}
// tell_room(this_object(),npc->query("level")+" : "+npc->query("race")+"\n");
npc->init_create();
j=sizeof(tmps);
for(i=0;i<j;i=i+2)
{
if(tmps[i]=="level" || tmps[i]=="race") continue;
npc->set(tmps[i],tmps[i+1]);
if(tmps[i]=="id")
npc->set_living_name(tmps[i+1][sizeof(tmps[i+1])-1]);
}
tmp=(string)npc->query("short");
sscanf(tmp,"%s(%s)",t1,t2);
npc->set_name(t1+NOR);
set("npc",npc);
npc->move(this_object());
return 1;
}
上面还可以再简化,不过暂时就先这样吧。
天空城商店街还蛮需要这类的 npc,每只都写一个档的话
光写这些 npc 就饱了.
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.117.106.224
1F:→ laechan :另外,虚拟村民必定有 "NPC" 这个 id 02/05 14:09