作者laechan (挥泪斩马云)
看板mud
标题Re: [闲聊] RO的猎人老鹰->宠物系统
时间Tue Jul 30 16:43:49 2019
刚好上次有人问,这里提一下。
带宠物(或是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://webptt.com/cn.aspx?n=bbs/mud/M.1564476232.A.07B.html
1F:→ laechan : 改了一下,有打错一些地方 114.33.66.104 07/30 16:48
※ 编辑: laechan (114.33.66.104 台湾), 07/30/2019 17:32:41
2F:推 bonix : (点点头。) 1.34.62.104 07/30 23:46
3F:→ taily : 想过把mud写成LOL,但AI我头就痛了 211.74.11.254 07/31 00:15
4F:→ typers : 做成NPC,後续才有比较多的玩法 36.234.15.250 07/31 00:31
※ 编辑: laechan (114.33.66.104 台湾), 08/30/2019 08:52:40
5F:→ laechan : 今天才看到 3.跟4. 写错了,改一下 114.33.66.104 08/30 08:52