Re: [wizs] set_npcs 或 set("npcs",..

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間13年前 (2013/02/05 14:01), 編輯推噓0(001)
留言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
另外,虛擬村民必定有 "NPC" 這個 id
02/05 14:09, 1F
文章代碼(AID): #1H4A1HLy (mud_sanc)
文章代碼(AID): #1H4A1HLy (mud_sanc)