Re: [閒聊] RO的獵人老鷹->寵物系統

作者: laechan (揮淚斬馬雲)   2019-07-30 16:43:49
剛好上次有人問,這裡提一下。
帶寵物(或是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 當到最後,每個人都會是高明的詐欺師。

Links booklink

Contact Us: admin [ a t ] ucptt.com