Re: [F/GO][日服][闲聊] 推特课金26万没梅林

楼主: LaPass (LaPass)   2017-10-06 11:18:59
先讲一个概念
不论是方法一 (卡片在服务器端早已序列产生好)
或方法二 (服务器端即时产生乱数,再依照乱数大小生成卡片)
如果你使用的是“真乱数”
那么,不论是用什么样的方式去生成抽卡结果
那对抽卡的人来说
期望值都不会有影响
1%的机率长期统计下来仍然是1%
会有影响的,是抽卡结果的常态分布
例如,方法一可以避免“连续N单大暴死”
以及“十抽十五星”这种状况发生
所以,担心被领石帐/工作室抢走的假设
完全是多余的
因为对方也可能帮你把杠龟的卡通通抽走
一来一往,等于没影响
接下来会针对两种方式做更仔细的解释跟分析
可能会有点无聊
方法一:
卡片在服务器端早已序列产生好
这就像是圣诞刷箱抽袜子,从一个固定的卡池抽奖的概念
这里先声明
卡池的大小并不一定要能包含所有卡片
因为再生成卡池的时候,也可以使用乱数
例如可以生成一百张卡的卡池
其中那一张五星卡,随机决定是哪一张五星等等
另外关于池的大小也是一个问题
当你的池子数量太大的时候,等于没作用
例如以1000抽为一池
依然可能发生900抽没五星,最后100抽10五星这种状况
所以如果有用卡池功能的话
这卡池的数目不能太大
卡池又有分,多人(全服务器或单一服务器节点)共用一个卡池,以下称公池
或是个人独立的卡池,以下称个人池
如果是个人池
那么,这种设计主要是避免“连续N单大暴死”或是“十抽十五星”
这种状况发生
但很显然FGO没这么做
为常常听过有几百抽0五星之类的状况
或是十抽好几只五星的状况出现
如果是公池
那没有讨论的必要了
在一大堆人共用卡池的状况下
跟方法二的效果是一样的
方法二:
服务器端即时产生乱数,再依照乱数大小生成卡片
这个太简单,我不知道该怎么解释
总之就是丢骰子那样的模式
每次抽卡都等于是丢一次100面骰,丢中就中奖
接下来讲关于程式的部分
方法二在实作上是最简单的方案
就叫系统生成一个乱数,再用乱数去查表
他们应该会有一个设定档案,决定了卡池的机率,记录了每张卡的机率是多少
再用那张表,决定该生成什么卡片出来
这种程式不需要考虑其他节点,或是各种锁定、同步问题
所以说这是最简单的方式
方法一,在实作上比较麻烦一点
如果是个人池的话,你需要去储存他的卡池状况
在他下次抽卡时,再拿出看看要给他什么卡
如果是公池,那是非常麻烦的事情
如果A、B两个人同时抽卡的话
你需要考虑两者的执行绪安全问题
因为这可能会导致A、B两个人都抽到同一张卡
这个bug在抽卡上造成的影响,听起来好像没什么
但如果用购物网站来当例子的话.....
商品的数量只剩下1个
A、B两个人同时按下结帐,结果两个人都同时成交了。
大概是这种层级的问题
所以,实际上在写这段程式码的时候要这样:
1. A锁定卡池
2. A抽卡
3. A释放卡池
B要等A把1~3都做完,才能抽卡
同一时间可能有几百,甚至上千上万人在抽卡
每个人都要一个个排队、抽卡
这对服务器来讲是吃力不讨好的工作
而且没有必要搞成这样
同样的道理,把乱数交给第三方也只是把系统搞得更麻烦,更复杂而已
另外关于这个影片
https://youtu.be/Nehvzf9esQs
发生的原因可能是这样
有些程式语言中的乱数
在初始化的时候要给他一个seed
而同样的seed会导致生成同样的乱数数列出来
而程式设计师给他的seed
是用“时间”,而且单位只到“秒”
例如php当中就是 srand(time()); 这样
这会导致同样时间点击抽卡
抽到的卡都一样的状况
我的工作虽然不是转蛋游戏
但也是线上机率游戏,跟游戏、机率有扯上点关系
像这种机率游戏,常常会有人怀疑站方作弊
或是在机率上动手脚
但营运单位才不会搞这种麻烦事
因为规则上就已经写白了
营运单位就是要赚你的钱
拿大乐透来举例
如果你看得懂游戏规则的话
你就能看出“买一张大乐透平均下来会损失20元”这件事情
但还是有人会去赌
所以在评估“最差的状况”的时候
基本上拿营运方公告的数值下去估算就可以了
以FGO来讲,就是“真随机,1%SSR”
转蛋游戏跟线上机率游戏,有本质上不一样的地方
转蛋游戏的营运方跟玩家的对立,不像线上机率游戏那样强
反而是,防止极端值出现,比较能避免玩家弃坑
这也是为什么B服之前搞了个120抽保底出来的原因
像是保底机制,比较有可能的实现方法
就是在没抽中的时候,在他个人纪录上+1
当这个纪录超过某个数值的时候,偷偷调高抽卡机率,这样
B服那时候的状况是直接设成100%,所以看起来很明显
这种做法比个人池的方式,还要来的简单方便的多
我认为在推断卡池的机制的时候
应该要把日服跟B服分开来看
嘛.... 因为B服有前科
作者: LayerZ (無法如願)   2017-10-06 11:22:00
B服很久以前就有在做人工保底了=w=其实1跟2的差别只在于1抽完有没有把卡放回去
作者: officeyuli (yuli)   2017-10-06 11:22:00
http://www.sfoxstudio.com/10499水库可以看看这个
作者: aduijjr (阿战)   2017-10-06 11:25:00
好复杂,就想成50%就好了阿XD
作者: fatdragonz (肥龙)   2017-10-06 11:26:00
台服的资料来自B服, 所以台服也有可能有保底机制??
作者: sakeru (里昂~)   2017-10-06 11:26:00
B服150抽泳装爆死~~~ 保底一去不复返
作者: sb8888 (V5)   2017-10-06 11:26:00
想成0%就好了抽中的都不会是你
作者: LayerZ (無法如願)   2017-10-06 11:27:00
阿,我说的B服不是指陆版,是指大陆手游
作者: hollowland (顛倒鐘)   2017-10-06 11:27:00
方法一的锁卡池(执行绪).. 呜我的头好痛...
作者: zerox123456 (苍流俊)   2017-10-06 11:30:00
保底是好文明
作者: LayerZ (無法如願)   2017-10-06 11:31:00
所以说1的作法是bullshit 抽个卡不会搞成这样..
作者: officeyuli (yuli)   2017-10-06 11:36:00
会啊 1.做法的好处就是有人来查时机率一定一样啊 只是让玩家等个执行绪而已也不会很久啊
作者: LayerZ (無法如願)   2017-10-06 11:37:00
保底机制最简单的作法,纪录没抽中次数,超过后换个只有四星的池给你,然后归零"只是让玩家等个执行绪而已" (灿笑我豆页痛
作者: officeyuli (yuli)   2017-10-06 11:38:00
又不是没等过 怎么了吗
作者: juju6326 (教主)   2017-10-06 11:39:00
不用多,想想看有一千个玩家冲进来要等执行绪时会怎样
作者: officeyuli (yuli)   2017-10-06 11:40:00
超过就炸服务器啊 这不就是fgo吗
作者: LayerZ (無法如願)   2017-10-06 11:40:00
这种东西理论上在大次数(来个一亿抽) 机率会一样啦所以不用特地作1来防别人查
作者: shintz (Snow halation)   2017-10-06 11:41:00
看了下来还是觉得有保底跟天井好一点点
作者: LayerZ (無法如願)   2017-10-06 11:41:00
自己东西出去前就会做这种测试了
作者: shintz (Snow halation)   2017-10-06 11:42:00
不然就像现在日版SIF搞个200抽box,把内容物剩余数量都标示出来让人流口水
作者: ts1993 (komi1111)   2017-10-06 11:43:00
('・ω・')那跟游戏王的卡包一样啊
作者: torrot (totoro)   2017-10-06 11:43:00
现在10抽有保底阿(欸 其实我觉得可以用个30连抽保4星从者?
作者: officeyuli (yuli)   2017-10-06 11:43:00
那是一番赏吗
作者: torrot (totoro)   2017-10-06 11:44:00
有保底或是天井机制总是比较好的
作者: fate201 (Licht)   2017-10-06 11:58:00
把抽个卡搞成mutex也太搞刚XD
作者: nightcrow (叶子曰)   2017-10-06 12:00:00
很遗憾的是保底已经不复存在了
作者: faruz04 (far)   2017-10-06 12:03:00
保底120抽超佛的,1.2倍期望值就保了
作者: dansy (Eye Taiwan)   2017-10-06 12:03:00
实际上机制1也无法防止个人N单暴死 因为共用卡池随时在变十抽十五星的状况就要看卡池箱子大小 够大也不是不可能@@如果要真的做到常态分布 那实际上就会调整 而不是真随机
作者: sbd0517 (兔子飞行使者)   2017-10-06 12:10:00
满好奇十连保底的机制~
作者: wsgg25482 (wsgg)   2017-10-06 12:10:00
120保底的期望值大概比1.2再高一点 因为还要考虑前面的机率
作者: dansy (Eye Taiwan)   2017-10-06 12:10:00
所以才需要验证机制来取信说服玩家 避免黑箱疑云
作者: chuegou (chuegou)   2017-10-06 12:15:00
我在这里宣布 哲学家用餐问题正式改名为御主抽卡问题
作者: sai4311 (zero)   2017-10-06 12:18:00
10连保底的机制并不难,只要排列成任意取10组必SR即可
作者: e5a1t20 (吃饭)   2017-10-06 13:10:00
御主抽卡问题www工程师可不会没事自找麻烦
作者: k0286 (k0)   2017-10-06 13:14:00
当你的池子数量太大的时候,等于没作用<< 不懂问题在哪?
作者: twistedvate (tf)   2017-10-06 13:15:00
(体感)当按下去伫列就排订好哪些东西给你了,所以以才有换时段抽的说法
作者: orze04 (orz)   2017-10-06 13:19:00
个人池要看会不会update,不然就是伪机率了还要要看抽后是否放回
作者: dderfken (托雷迪亞(鬍鬚張))   2017-10-06 13:30:00
把你杠龟的抽走是你也抽很大才行啊
作者: twistedvate (tf)   2017-10-06 13:31:00
伫列中100张卡就依机率塞卡,100张就一张五星随机英然后再依你现有的酒桃量来切一段伫列给你抽
作者: e5a1t20 (吃饭)   2017-10-06 13:34:00
我觉得光是服务器没有爆,就足够证明不会是先预先产生池子了,100个执行绪同时抢一个内存空间,绝对塞爆
作者: twistedvate (tf)   2017-10-06 13:34:00
这概念跟池子没关,要查验也没问题(?)*每100张卡每个请求刚好都没切到那段含有五星英灵的伫列 就暴死
作者: e5a1t20 (吃饭)   2017-10-06 13:49:00
楼上不就要每人摆个100张牌,最近1000万下载,嗯?
作者: twistedvate (tf)   2017-10-06 14:35:00
就想像有个接近无限生成的长链的伫列等著大家切?拉长一算机率的确是对的 可是你切不到那段五星石头石头就抽光了
作者: louis791021 (路易呜呜呜)   2017-10-06 21:56:00
我的看法同楼上
作者: twistedvate (tf)   2017-10-07 01:46:00
XD 我只是体感猜测一次十抽内不知道会不会有三张五星? 目前只有看到双
作者: sameber520 (请给我萝莉)   2017-10-07 02:22:00
你要取的物事先在数据库储存没有意义 做成公池没必要而且抽到卡片应该是产生以使用者区分的资料如果先产生一个某从者的表单 然后玩家抽到就往里面加那PU的时候服务器应该要爆 不然就是资料被覆蓋遗失

Links booklink

Contact Us: admin [ a t ] ucptt.com