Re: [wizs] set_npcs 或 set("npcs",..
看板mud_sanc (Sanctuary - 聖殿)作者laechan (小太保)時間13年前 (2013/02/05 14:01)推噓0(0推 0噓 1→)留言1則, 1人參與討論串2/2 (看更多)
寫這東西需注意虛擬村民是否在記憶體中堆疊的問題,
可以用 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
→
02/05 14:09, , 1F
02/05 14:09, 1F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
10
16