Re: [問題]關於es2lib虛擬物件的生成
※ 引述《happyhero (2010)》之銘言:
: Es2lib的物件生成 有種以虛擬物件的方式
: 例如有個檔案是 /std/room.c
: 可以在程式碼裡用
: obj=new("/std/room.c");
: 來生成一個新的物件
: 然後檔名會變成/std/room#33
: /std/room#76
: /std/room#177
: ....
: (都是原檔名後面增加#數字)
: 想請問虛擬物件的檔名是如何產生?
: (#後面的數字是亂數決定或是有規律?)
: 有辦法改變或指定虛擬物件生成後的檔名嗎?
: 想說如果可以的話
: 就可以方便管理整個都用虛擬物件生成的區域
: 最近在寫類似OLG副本的東西
: 例如某個玩家happyhero開啟了副本
: 那那個區域房間名就會以 /std/room/happyhero/0/0/0
: /std/room/happyhero/0/1/0
: 後面數字表示三維空間(x,y,z) 0/0/0=第0層空間的(0,0)
: 這樣還可以做出無限層的地下城冒險區域
這個一般建議是不要這樣寫,比方說單人副本,省時省力
的方法就是「全部運作在同一個房間」。
例如該房間平常長底下這樣..
地下城--一樓
這裡可看到一條長長的走道,走道上十分的陰暗,不遠處
似乎有著水滴的聲音。
明顯出口有: north, south.
則當你往 north 走時
set("pre_exit_func/north","check_north");
object tmp_room;
int check_north()
{
object ppl=this_player();
int *pos=([]);
pos=query("pos"); // 讀取房間座標 ({x,y})
做一下必要的判斷如戰鬥中,etc...時不能走動;
if(!tmp_room)
tmp_room=find_object_or_load(TMP_ROOM); // 自設一個房間當 tmp_room
// 往北走 => y+1
set("pos",({pos[0],pos[1]+1});
set("long",set_room_long()); // 重設房間 long
set("exits",set_room_exits()); // 重設房間出口
ppl->move(tmp_room); // 先把玩家移往 tmp_room
ppl->move_player(this_object()); // 瞬間再把玩家移回來
clone_mob(); // 做一下房間怪物的隨機召喚
return 1;
}
這樣就可以模擬一個玩家在一個「空間」裡面的走動跟戰鬥
,set_room_long 等函數就看你怎麼寫。
這樣當 n 位玩家同時在解這個「單人任務」時,就可以每個
玩家給一個房間來跑(tmp_room 則是大家共通的),而假設是
n 人組隊型的任務,就限制不能脫隊即可。
而這樣的房間也可以事先寫好,例如預設同一時間只能 10個
團體(包含單人)解任務,那就一次寫好十個房間就可以了,這
樣玩家在解任務時會變更的就只有物件資料(記憶體資料),檔
案的讀寫部份就會比較少。
至於檔案部份一般是 base_name 跟 file_name 的區別,後者
或許你可以找找 simul_efun 區是不是有該函數,那說不定就
能找到後頭的編號是怎麼編的。
(印象中是物件生成流水號)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 223.142.203.159
推
12/28 20:20, , 1F
12/28 20:20, 1F
→
12/28 20:21, , 2F
12/28 20:21, 2F
→
12/28 20:23, , 3F
12/28 20:23, 3F
一般來說有一種做法並不需要知道 file_name 所加的流水號。
例如你因為需要而得在同一時間 new 出 n 個物件,那麼你可以
做個 control_room
object cr,new_room;
int *pos=([]);
string new_pos;
if(!cr)
cr=find_object_or_load(CONTROL_ROOM);
j=sizeof_rooms; // 需 new 出的 n 個房間
for(i=0;i<j;i++)
{
new_room=new(room); // new 出新的房間
pos=get_pos(i); // 取出第 i 個房間的座標
new_pos=implode(pos,"_"); // 把座標變成 a_b_c 這種字串
cr->set("new_pos",new_room);
}
這樣你要讀取座標 (a,b,c) 的房間時
this_room = (object)cr->query(""+a+"_"+b+"_"+c);
※ 編輯: laechan 來自: 122.117.7.33 (12/28 21:00)
推
12/28 21:52, , 4F
12/28 21:52, 4F
→
12/28 21:53, , 5F
12/28 21:53, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
mud 近期熱門文章
PTT遊戲區 即時熱門文章
26
81