精華區beta mud 關於我們 聯絡資訊
這裡順便聊一下 vroom 會產生的一個問題,以及一個 簡易的暫時解決方案,比方 002.c 這個房間,假設它 被載入(生成)了,那麼一般 mud 要找到該已載入房間 的簡易做法如下.. if(room=find_object(__DIR__+"002")) 它的意思就是,如果 002 已經被載入了,就令 room 等於「該已被載入的房間」;若 002 沒有被載入,就 載入它、然後令 002 等於「這個新載入的房間」。 那麼,虛擬物件的部份,一個最大的問題就是,我們如 何知道一個虛擬物件已經被載入呢? 最簡單的做法就是在載入虛擬物件時,替它標上「識別 」,例如「玩家」實際上也算是廣義的虛擬物件,則要 找到「已被載入的玩家 laechan」就可以用這種做法.. if(user=find_player("laechan")) 也就是說,find_player 是一個已經被寫好、專門用來 找已被載入玩家的函數。 那同理亦可假設有一個 find_vobject 的函數也是用來 做這種事的,則以 find_player 為例,它的依據是以 「玩家ID」做為識別,則 find_vobject 同樣也應該標 示一個東西來做為識別。 那麼,假設說,你不知道系統是否有內建找尋虛擬物件 的函數時,該怎麼做呢? 只要自訂函數來處理即可 比方我們自訂找家族根據地的函數 find_groom,則其內 容可以這樣寫.. // names 為族長ID object find_groom(string names) { object* obs=([]); object ob; // 令 obs = mud 全物件 obs=objects(); foreach(ob in obs) if(ob && ob->check_leader_names(names)) return ob; ob=new("/inherit/vroom"); ob->restore_room("/group_data/"+names); return ob; } 則當我們做如下判斷時 if(vroom=find_groom(names)) 當 objects() 裡面有存在該 vroom 時,就回傳該已載 入的 vroom; 若不存在的話,就 new 出一個新的東西並 return 它。 基本原則就是若該虛擬物件存在,就要呼叫已存在的; 虛擬物件不存在時,才 new 出來用。 LAechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.106.224