关于[赠送]与[交换]的研究
mobbles吧
全部回复
仅看楼主
level 11
这将是一篇很长很长的文章,充分证明了
lz
最近确实很闲
这可能是一篇无聊的文章,但确实是lz的用心之作。
研究背景:
有些小伙伴们觉得赠送会丢宠物,于是说:我们交换吧,这样安全。
虽然想一想就会明白交换比赠送还要危险,
因为赠送就是你读条,但交换要你读条我读条,如果是变相的交换式赠送就是你读条我读条你读条,更坑了有没有?
但lz还是研究了一下
研究现状:可能有大神以前研究过吧,记得以前有个复制的bug,但现在已经没有了。
2013年09月27日 01点09分 1
level 11
研究基础:
赠送:当我们把宠物从房间退拽到右上角的小门时,会有两个选项,第一个是放生,第二个是赠送。我们点赠送,然后出现好友列表,然后点击就好
交换:当我们在好友的宠物列表中看准要交换的宠物然后点击交换发送请求就好,好友同意了我们接收就好。
研究道具:
以灯泡为主的,主要就是灯泡君,丢的都是灯泡君等的mobbles为实验对象。(我一定要想灯泡君表示歉意,不仅做成就利用了你,这里还要伤害你~~)
2013年09月27日 01点09分 2
level 11
赠送的详细过程:
在这里举个例子,然后每一步我会写的比较详细:
[][掉线]童鞋:
我要送给[cat]一只gummy(当然基本上不会有人需要gummy了)
我先把gummy拖到小门里,然后选择赠送
出现【loading】(这是在加载好友列表)
然后我点击cat的ID后
这个时候会出现了【loading】(我们正在向系统发送数据)
loading一结束就会显示【发送成功】
(第二个loading虽然也能点返回,但是赠送已经不可改变了。强退呢?掉线呢?可以,但要速度够快。掉线和强退在以后的过程中都是有用的,下面就不说了)
然后cat的邮箱中会收到信件
提示 好友掉线 赠送你一只gummy
[][cat]童鞋:
打开邮箱,选择接收,又开始【loading】
(这个loading同样没法取消的,可以点击返回然后再接收另一只,这样一次收2个。)
弹出画面【读条】开始从服务器接收数据。
(如果点返回到主界面,再回互动模块就继续开始传送数据了,只要网络没问题,是不会丢失宠物的)
进度100%接收成功!!
[][掉线]:
邮箱中收到信件:cat接受了你的礼物。
(弄丢了也会这么显示。。。拒绝了就显示拒绝,不过宠物拿不回来。)
在回信的机制里,
当你二选一【接收】或【拒绝】的时候系统就会发送回信了,就是在那个【loading】的时候。
所以别拿什么网路不好忽悠你的小伙伴了,其实你就是拒收了!!!
2013年09月27日 01点09分 3
level 11
关于赠送的几点疑问:
1.为什么有【loading】和【读条】两种形式?
2.为什么感觉赠送很快,接收很慢?
3.为什么赠送的宠物只保持等级不变,服装和当前等级多出的经验消失了呢?
4.为什么拒绝的宠物不能收回呢?
2013年09月27日 01点09分 4
level 11
研究结果(疑问解答):
我们可以想一下都有哪些环节是【读条】呢?
没错,
只有在我们接收宠物的时候才会进行读条(抓到的宠物传回、接收、交换)
其他都是【loading】
当我们赠送宠物的时候,我们是向服务器发送数据,这个时候是【loading】
当网络不好的时候,这一功能显然无法实现,会显示【error】宠物不会被赠送。
然后就是服务器如何接收我们的数据的问题。
我认为,这里并没有真正的向服务器发送宠物数据,而是服务器读取了待赠送宠物的数据。
服务器会读取记录你的ID、赠送好友的ID、赠送宠物的种类和等级。
可以说服务器只读取了最重要的几个信息,最大化的减轻了负担。
所以你就知道为什么多出的经验没了,衣服也没了。。。(就是服务器在偷懒啊)
服务器没有将宠物带走,而是选择了就地放生。
这句话真要好好解释一下了。
(可能会有人对这样的说法反感,但事实上数据就是这样的。因为我们不是在用对讲机,没有办法真正意义上的把宠物从一部手机传到另一部手机。如果以后可以增加蓝牙功能的话,也不错哦。这是时间差和服务器减压必须做出的抉择)
就是说服务器读取了它最需要的信息然后生成了一份信件发到你好友那里,作为一个赠送的凭证。
然后系统把你的宠物按照拖进小门后的第一项,放生掉了。
所以对方拒绝你的赠送你也拿不回宠物,因为在赠送达成的那一刻,你的宠物就已经被放生了。
(这个地方是可以改变的,完全可以把信件退回,然后为主人生成一只新的mobbles。但这样的缺点一个是增加了工作量一个是在被退回后宠物明显经验少了衣服没了痕迹也太明显了吧,怕玩家更接受不了吧。。。)
当你的好友接收你的赠送时,这个【loading】的含义就是系统在读取邮箱中的赠送凭证
凭证里也只包括那几条信息。然后系统生成一只同等级的宠物发送给你
你读条接收。
这里的邮箱、信件也要好好理解。信件这个东西应该是存在于服务器的。可以想象服务器有一个个的储物柜,每个储物柜都对应着玩家的ID,里面就是各种信件。当你打开邮箱时就是在打开这个储物柜。
这样就完全了解赠送的机制了:
读取数据-生成信件-放生原有宠物-生成新宠物-传输
为了避免bug,生成信件和放生宠物应该是(几乎)同时完成的。
2013年09月27日 02点09分 5
level 13
2013年09月27日 03点09分 6
level 11

交换的详细过程:
[]
[掉线]童鞋:
当我看中了cat的宠物tintu
点击【交换】
出现我的宠物列表(只有happy的才能交换哦,但赠送却不需要)
我选择用gummy交换。
然后【loading】,结束后显示已向好友发送请求。
我的gummy当然还在房间里好好的生活。
[]
[cat]童鞋
打开邮箱发现。。。。。。居然有2货拿gummy换我的tintu,
还是只一级的gummy,拒绝坚决要拒绝!!!!
结果一不小心点了【同意】。。。。
开始【loading】(只能快速强退或掉线取消了)
然后开始【读条】,这里倒是可以取消,呵呵,取消你就啥都没了。
原来的没了,该交换来的也没了。。。
和赠送系统一样,在对方二选一的时候就已经生成了回信。
所以即使对方在读条的时候断掉,我这里还是交换到了宠物
[]
[掉线]童鞋:
我打开邮箱,哇,居然真的有2货和我交换耶!!
然后拾取我的小tintu吧,哇咔咔!!!
【loading】
然后开始【读条】
然后接收成功!如果这个时候读条卡住了那就失败了。。。
交换和赠送一样,衣无经验无,只有等级在。
2013年09月30日 02点09分 8
level 11
关于交换的几点疑问:
1.为什么赠送不需要心情度,交换却只能【happy】呢?
2.为什么读条的时候我人工掐断,我没了宠物对方却收到了我的宠物?
3.我不想交换了,但邀请已经发出去了,我把宠物升级,交换会不会失败?
4.我接受了一个交换请求,为什么刷新后一些请求消失了?
2013年09月30日 02点09分 9
level 11

研究结果(疑问解答):
虽然想简单的将交换解释为双重赠送,但这里确实有些机制是不一样的。
比如心情度的要求,可见交换被列入了标准的【互动模块】而赠送只是半个互动,只需在【宠物模块】中完成
PK的时候说过PK的邀请模式是实时的。其实交换也是一种实时的模式。
为什么不单纯的采用赠送那种模式呢?还节省数据和运算?
为什么?为了防止小伙伴们作弊啊!!!
详细说一下。
当你向好友发出交换的请求时,
系统记录了你的ID、好友的ID、你待交换宠物的种类、等级和唯一标识、对方待交换的宠物的种类、等级和唯一标识
然后生成一份信件发送到好友邮箱

唯一标识和实时性:
我在交换时系统记录的信息中增加了“
唯一标识”这个信息,就是考虑到交换操作的
实时性
这个实时性包括对双方宠物的监视工作。
这里我也做了实验,结果是这样的。
我用1级gummy交换好友1级mix
a 我把gummy升到2级,然后直接退出,好友接收,拿到1级gummy
b 我把gummy升到2级,进入互动系统,然后退出,好友接收,拿到2级gummy
c 好友把mix升到2级,接收交换,我收到2级mix
d 我用同一个gummy向两个好友发出交换请求,两个好友同时接受交换请求
结果有两种:双方error,一方error另一方成功
唯一标识的作用就是准确监督你的宠物,不至于把交换的宠物弄错,同时实现实时的互动。
a和b的区别,就是一个单机、一个走了网络。在进入互动系统的时候,系统就会立刻对唯一标识的宠物进行监督,一旦等级改变,立刻更新对方邮箱中的交换信件。
而当系统检测到唯一标识的宠物已不存在时,会立即取消和它相关的交换信件。
这个监督是在进行互动系统相关操作(宠物模块里的赠送、打开互动模块)时执行的
而进入商城和抓宠模块则不会执行。
所以交换的信件和赠送的信件不同,是会发生变化的
像d的情况,只能进行一次交换,双方同时进行时,或是出错,或是速度快的交换成功

我们再来看接受交换过程:
当对方打开邮箱接受交换时,其实这里根本不是所谓的交换
而是对方将自己的宠物放生然后接收系统传来的新宠物
这个新宠物就是按信件里的内容生成的。
可以把这次操作看成一次赠送+接受赠送的过程。(注意这里是实时的)
前面说了,在二选一的是时候就生成了信件,
那么我们想一下这个阶段有几只宠物?
cat接收到的gummy,送过去的tintu,2个?
我们可以想一下,当cat接受了交换而我则在睡大觉,手机都没开,那么此时此刻我的gummy会因为cat的操作被交换走吗?
我们的宠物数据不是存在手机上?不需要上网的吗?
我们当然可以很肯定的回答,这个时候,在cat接收到gummy的时候,我的gummy还是存在的。
这就是我要重点说的
第三只宠物
这只宠物我们这里称它为【重点监督对象】!
第三只宠物是确确实实存在的,就是因为mobbles可以单机及互动系统的时间差
我们所说的曾经
的复制bug就是对第三只宠物“没有重点监督”导致的!
所以为了避免bug,当对方接受交换后,最重要的工作就是消灭【重点监督对象】!
在二选一生成回信的同时,系统也接受了一项重要的命令
就是消灭重点监督对象。这个任务独立于信件,是互动系统最为优先的工作。
所以即便你没有读回信,系统也会消灭掉第三只宠物。
因为任何关乎互动系统的操作都会执行消灭该宠物的命令。
这样第三只宠物就不会被赠送或再度交换了。
(当然如果你一直拒绝上网,就可以一直保存第三只宠物了)
主动交换人打开邮箱接收回信中的宠物,这一过程就比较好理解了
因为这就是一次接收赠送的过程。
2013年09月30日 03点09分 10
level 11
结论:
1.赠送宠物是一次放生+接收新宠物的过程
2.交换宠物是一次放生+接收新宠物+放生。。。+接收新宠物的过程。该过程具有实时性,同时系统会对宠物进行重点监督,避免bug
3.交换宠物的风险远高于赠送宠物
2013年09月30日 03点09分 11
level 9
我竟然全都看完了。。。。
2013年11月09日 00点11分 12
level 9
我竟然全都看完了。。。。
2013年11月09日 00点11分 13
厉害[大拇指]
2013年11月09日 02点11分
level 8
楼主好厉害哦[真棒][真棒][真棒]
2013年12月27日 01点12分 15
level 9
好厉害~怎么研究的?
2014年02月05日 07点02分 16
level 3
可是宠物接受到了,但是显示不出来是什么情况。。。明明有八只,但是第八个房间是空的,小图标又会出来探头探脑
2014年04月24日 03点04分 17
level 6
一个紧急问题要问吧主大人, 我主动拿SKRACH跟一个人的高级SPLLON交换,等我看到一个信息,里面说他同意跟我交换,我可以选择同意或拒绝,我看见我的SKRACH还在房间里,这时候我可以拒绝吗?拒绝后就没有SKRACH也没有SPLLON了吗?
2014年05月07日 20点05分 18
1