看板 mud 關於我們 聯絡資訊
剛好上次有人問,這裡提一下。 帶寵物(或是RO的獵鷹、生命體那樣的模式)趴趴造的情況,我們 先看結果,當你帶著寵物時,別的玩家 look 會看到 > look 一個房間 這是一間尋常的房間。 明顯出口有: out. 路人甲(User1)[帶著獵鷹]正站在這個地方。 > 假設是這樣子顯示,在 look_room 那邊的判斷通常有幾種: 1. if(user->query(XXX)) 2. if(user->query_temp(XXX)) 3. if(pet=present("PET",user)) // 所有寵物都有共通的 PET id 4. if(pet=present("PET",environment(user))) // 通常很少這樣寫但也不是不行 // 這樣寫的缺點是還要把玩家kill寵物、房間reset、玩家recall // 或陣亡等因素考量進來 我的意思就是,其實我們(mud coder)在 coding 一段時間到有 經驗之後,我們的思維就會很自然地變成 我們會優先去想像它在 mud 裡頭 run 起來的樣子 ↓ 接著大致也會知道大概要動、要改哪些地方(根據經驗) 甚至一些 code 就會產生,並開始在腦海裡轉啊轉的.. ↓ ┌─→ 不可行,可能是基於blabla..等因素 評估 ─┤ └─→ 可行 ─→ 決定動刀的順序 ─→ 動刀 以寵物系統為例,我通常會先決定的就是上面的 1,2,3,4 要用 哪一種,那假設用 2. if(user->query_temp(XXX)) 那就是假設寵物不是帶在身上的東西,而是類似"遠端"的一個 東西,那接著就決定它是不是生物(living)。 那假設它就是生物,但是又不希望把它帶在身上,那就是當我們 召喚牠時: pet=find_object(對映的寵物檔名); user->set_temp("pet",pet); 這樣的做法。 (我沒記錯的話部份 mud 的 horse 即座騎,是採取這種做法) 這樣這個寵物系統最關鍵的問題就解決了。 剩下的問題就是呈現,而任何的呈現幾乎都會跟底下的判斷有關 if(pet=user->query_temp("pet")) 比方其它玩家 look 時要看到你帶著寵物 -> 改相對應的 code 比方你自己下 i 指令時發現寵物在你身上 -> 改相對應的 code 比方你希望你走動時會看到寵物也跟著你移動的訊息 -> 改相對應的 code 比方你希望下 hp 或下 score 時也能看到寵物的 -> 改相對應的 code . . 你考量到的地方越多、你改動的範圍也越多時,你所呈現出來的 就會更趨近於真實(real),隨時都讓人感受到這隻寵物就像是在 你的身邊跟著你,並且對這件事絲毫不會有任何的起疑。 但是實際上: 這隻寵物根本就沒有在玩家的身邊 然後,實際上沒有在你身上,可是能不能做到當你下 look pet 時,能夠看到它呢? 當然可以,改相對應的 code 就行了。 以上一點分享,順便解答某人曾問過我的問題,以及再一次強調 ,因為我慣用的 mudlib 跟你正在研究且將要使用的不一樣,然 後座騎、寵物等系統,每一家的寫法也都不盡相同,所以把握共 通的原則就好,也就是讓呈現出來的樣子夠趨近於真實,就好了 ,採取怎樣的寫法都無所謂啦! 然後多看看別人的 code,甚至多玩、多接觸其它遊戲、事物, 對自己最有幫助的一點就是會激發自己將來能思考更多可能的寫 法。 mud coder 當到最後,每個人都會是高明的詐欺師。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.33.66.104 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/mud/M.1564476232.A.07B.html
laechan : 改了一下,有打錯一些地方 114.33.66.104 07/30 16:48
※ 編輯: laechan (114.33.66.104 臺灣), 07/30/2019 17:32:41
bonix : (點點頭。) 1.34.62.104 07/30 23:46
taily : 想過把mud寫成LOL,但AI我頭就痛了 211.74.11.254 07/31 00:15
typers : 做成NPC,後續才有比較多的玩法 36.234.15.250 07/31 00:31
※ 編輯: laechan (114.33.66.104 臺灣), 08/30/2019 08:52:40
laechan : 今天才看到 3.跟4. 寫錯了,改一下 114.33.66.104 08/30 08:52