精華區beta C_Chat 關於我們 聯絡資訊
※ 引述《dsa3717 (FishCA)》之銘言: : http://dbz-dokkan.bngames.net/info1116.html : 官方出正式聲明了 : 還把出問題的程式碼貼出來www 小弟鍵盤工程師沒有玩,但是根據文章大概是這麼個意思(盡量白話): 遊戲裡面卡片是以ID來存卡片資料的 當程式因為某些緣故要展現腳色資料的時候(列出卡池啦,展示你已經有的卡片等等) 會利用卡片ID去查對應的資料然後顯示給你 而文章裡那段code就是流程 ①是 傳入需求的卡片ID列表,如果該卡片是你APP啟動後已經有顯示過的卡片 那該卡片的資料會已經在你手機記憶體裡 而如果沒有顯示過的卡片呢? 就找不到,會是個空指標 於是接著② 程式利用卡片ID去資料庫查相關資料,並抓回來填進cache裡的空缺 資料都填滿後就處理完畢 邏輯上是這樣,但是這邊遇到的BUG是 他從資料庫查回來的資料並沒有排序,而程式也沒有比對ID,直接依照抓回來的順序填坑 用他給的舉例來講: 你要查詢的卡片ID是 1 3 5 7 9 (已按大小排序) 手機已經顯示過,存在記憶體裡的卡片資料是 1 3 5 空 9 所以缺了7的資料,就要用②的方式去資料庫查7的資料回來 然而他的查詢語法沒排序(估計table欄位也沒有),所以查回來的資料可能是 9 3 7 1 5 然後程式直接做比對: 1 3 5 空 9 9 3 7 1 5 好,所以他就把1的資料給放進記憶體裡的那個空白去了 (開放吐槽) 所以即使你用 1 3 5 7 9 去查,也會變成查到 1 3 5 1 9 的資料,自然顯示錯誤 而記憶體裡的卡片資料是會因為你APP啟動後的操作而變動的 所以上面這個BUG會造成不同人有不同的錯誤顯示 然而如果你去按スカウターボタン,程式會去伺服抓正確的id list回來蓋掉你手機記憶 體裡的資料,就不會有這樣的問題出現 大概是這樣,有錯請指正 -- 解BUG超有趣的啦 -- <(┘╴└)>﹍﹍﹍ ︿︿ ╴▅ 生命,就該浪費在 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.75.122 ※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1510816728.A.944.html
Chantaljones: 樓下你信Bandai嗎 11/16 15:20
noob9527: 工程師的角度來看 我信 11/16 15:20
Satoman: 我信,這bug很蠢但不是不可能,因為我碰過更扯的 11/16 15:22
如果是快速開發(各種意義上),的確會出現很多意料外的東西
crazycy: 快推不然別人以為我看不懂 11/16 15:22
BoatLord: 一夜燒百億 11/16 15:23
Satoman: 以遊戲測試的角度來看,也是有可能會被漏掉沒錯 11/16 15:23
sixthday: 我看的心得也差不多 重點在為什麼DB來的是錯的沒有講 11/16 15:24
Satoman: 因為不管是研發還是qa,他們手上的裝置一定都有完整的資 11/16 15:24
Satoman: 料 11/16 15:24
GPX2020: 我好奇這包如果是真的 出包工程師會什麼下場 11/16 15:24
Satoman: 所以才會到了玩家手上的裝置才出現問題 11/16 15:25
genesic: 他不是去server抓喔,sqlite是client端的db 11/16 15:30
genesic: 他server用sqlite的話也太扯 11/16 15:30
沒錯,應該是手機內建的,不然查一次就要連回server把所有卡片資料都抓回來也太... 敲內文的時候用是想寫的淺一點所以用'資料庫'去代換掉sqlite了,怕有人看不懂
kuninaka: 這種寫法真的蠻奇妙的,第一次看到 11/16 15:33
有不少想吐槽的地方,不過就算了,可能寫程式的工程師也沒心力/時間去優化吧 先上了能動,後面再說
kuninaka: 大概是把server資料下載後放到sqlite吧 11/16 15:34
genesic: 如果讓app可以直連db的話就更扯,開不到一分鐘db就爆了吧 11/16 15:34
※ 編輯: seaEPC (60.250.75.122), 11/16/2017 15:42:48
genesic: 這段code有點摸魚摸到大白鯊的感覺,老實一點hash map就 11/16 15:37
genesic: 好了,結果看起來像是sql cmd忘記加order by id 11/16 15:37
wxyz899: 每個人看到的卡池不一樣是這次才有的還是一直都有的? 11/16 15:39
maxi326: 這也能信, 我也只是笑笑, 連抽蛋的random部份一點都沒有 11/16 15:41
maxi326: 是在信甚麼, 科科. 11/16 15:42
killerj466: 寫得看得懂 給推 11/16 15:43
killerj466: 應該說也不是信不信這次的問題 而是之後能不能保證的 11/16 15:44
killerj466: 問題 這次他也把石頭全數吐回來+300石了 11/16 15:44
kuninaka: 只是這可以解釋100%嗎? 11/16 15:44
genesic: 又不是在討論信不信的問題,信不信是沒有答案的 11/16 15:44
wxyz899: 抽蛋 random 的肯定是放在 server 端, client 只能收結果 11/16 15:45
killerj466: 這次不信也就罷了 問題是他後台是不是還是那樣很令人 11/16 15:45
genesic: 就算他把整個server的code給你看,你也可以說他實際跑的 11/16 15:45
genesic: 不是這些code 11/16 15:45
sixthday: 這篇是在把官方貼的 code 翻成白話文 11/16 15:45
Satoman: 大家是在討論表單出包,不是轉蛋機率問題 11/16 15:46
HETARE: 原文已有說空缺的資料是去裝置的儲存空間抓而非從server載 11/16 15:46
Satoman: 現在就是你無法證明他轉蛋機率是錯的,他也無法證明自己 11/16 15:47
Satoman: 沒動手腳 11/16 15:47
genesic: 只要有人貼出來抽到不在表單內的角色,就可以證明只是顯 11/16 15:48
kuninaka: 這個可以解釋大家看到的不一樣的資料 11/16 15:48
genesic: 示錯誤,但這個太難了 11/16 15:49
Satoman: 照這bug的結果就是純粹的表單出包,信不信由你這樣 11/16 15:49
sixthday: @genesic 下一篇就是? 11/16 15:50
j9145: 就算真的是這BUG,也不能保證它們轉蛋過去不是這樣撈資料。 11/16 15:50
sixthday: 啊沒事 不太一樣 11/16 15:50
andy0481: 另一個角度想啦 官方想賺錢就用很爛的大獎率就好了 像是 11/16 15:53
andy0481: 1%之類的 搞這種東西 要額外弄工程師去搞 還只能多騙一 11/16 15:53
andy0481: 點抽到有的大課長的錢 還很容易被大數統計抓出來黑掉 11/16 15:54
andy0481: 花額外成本去多賺一點點 風險大到靠杯 這麼智障我是不信 11/16 15:54
andy0481: 啦.. 11/16 15:54
j9145: 人性就是抽越多越會覺得下一抽就中,所以他這樣搞很容易釣 11/16 15:55
j9145: 到課長。 而且如果不是出這包,想驗證還沒辦法 11/16 15:56
eddiego: 這麼智障我是不信? 還是信比較好 智障沒有極限的 11/16 15:57
keerily: 風險不大呀,機率這東西就是這樣,運氣不好就是抽不到 11/16 16:00
j9145: 除了痛定思痛把整個轉蛋機制重寫,設個保底機制,不然這信 11/16 16:01
j9145: 任度危機基本是無解了 11/16 16:01
genesic: 其實營運最喜歡看到的是大家都抽得到而不是大家都抽不到 11/16 16:01
keerily: 今天他出這包,課長1000抽抽不到也沒辦法證實卡池沒這卡 11/16 16:01
genesic: 最好是你抽到之後上SNS或論壇狂曬猛曬,這種營運最愛了 11/16 16:02
keerily: 喜歡大家都抽的到(X) 喜歡大家都課到有(O) 11/16 16:02
j9145: 營運才不會care玩家抽不抽得到,重點是玩家掏了多少錢。 11/16 16:03
genesic: 低機率只是想要讓你抽到時有快感,並不是為了讓你抽不到 11/16 16:03
eternaldark: 那有沒有可能他資料是從你能抽到的卡池抓結果卡池沒 11/16 16:03
eternaldark: 有所以造成資料短缺? 我不懂程式不知能否寫成這樣=3= 11/16 16:03
globe1022: 說實在我也信,其實沒必要去分帳號卡池不一樣, 11/16 16:04
TeamNTR: 大家都抽的到那還幹嘛曬? 保皇派滾 11/16 16:04
genesic: 你要這樣想我也可以理解囉,大部分玩家都是這樣想 11/16 16:04
aaaaooo: sqlite的東西應該是in-app更新下載回來的吧 那這樣理論上 11/16 16:04
genesic: 其實今天營收跟這個卡片吸不吸引人比較有關,跟抽中的機 11/16 16:05
TeamNTR: 在前篇文章畫虎爛被戳破還來耍屌== 11/16 16:05
genesic: 率"比較"無關 11/16 16:05
j9145: 快感 X 投更多錢 O,你搞錯因果了。 11/16 16:05
genesic: 因為我也沒有證據,一直找不到機率跟營收的相關性 11/16 16:06
j9145: 如果真的希望玩家都抽得到,設保底就好 11/16 16:06
keerily: 分池對營運來說不會沒必要,分的好可以增加大量的營收 11/16 16:06
aaaaooo: 不用再按スカウターボタン重抓server資料重開app就好才對 11/16 16:07
genesic: 對啊,大陸數字機這方面比較強,都會有保底,日本的很少 11/16 16:07
Satoman: 專業工程師花時間出來解釋,還被說是保皇派 11/16 16:07
Satoman: 這篇的原po好口憐 11/16 16:07
keerily: 還有曬卡這種事,如果大家都有了,曬卡就一點意義都沒有 11/16 16:08
j9145: 找不到是你搞錯,關鍵字:賭場數學 11/16 16:08
genesic: 漏字了,大陸遊戲在處理跟數字有關的部分比日本強太多了 11/16 16:08
andy0481: 所以說啦 強化曬卡程度 調整看的到的%數直接簡單多了 11/16 16:09
andy0481: 1%的強卡跟被偷調機率成1%表定5%的強卡 實際抽到的機率 11/16 16:10
andy0481: 一樣是1% 但是前者曬度高多了 根本不用去搞什麼偷調 11/16 16:10
andy0481: 後者還要被大數檢驗跟課長驗證抓出實際只有1% 風險超大 11/16 16:11
hanks0802: 1%喔,很可惜這遊戲的新限定都不到1%XD 11/16 16:13
j9145: 有甚麼好風險大的,似乎沒搞懂這次問題重點不在機率不實。 11/16 16:14
j9145: 而是他們搞「動態機率」 11/16 16:14
hanks0802: 而最稀有的LR卡都是約0.04-5%而已 11/16 16:15
genesic: 我也沒全世界的營運都接觸過,無法證明沒有營運不是這樣 11/16 16:15
genesic: 也是聽過有不少營運是用直覺不是用數據經營遊戲 11/16 16:16
genesic: 所以我也實在無法反駁 11/16 16:16
j9145: 不管直覺或數據都不想讓你都抽中啊,不然他們要吃甚麼。 11/16 16:18
j9145: 願意給你容易抽中只是怕太多人沒抽到被靠杯而已啦 11/16 16:18
genesic: 我懂你的意思啊,我把機率偷偷調低,玩家就會更用力抽 11/16 16:23
genesic: 這個邏輯非常的直覺 11/16 16:23
andy0481: 樓上這招有例子啊 GBF的猴娘 結果就是輕鬆抓出來罵翻 11/16 16:24
andy0481: 問題是今天被質疑的這招是搞各個玩家的池子不一樣 11/16 16:25
andy0481: 這招的效益完全就莫名其妙了..成本還超高 11/16 16:25
keerily: 猴妹事件是標註不實,Up角本來就沒說有猴妹 11/16 16:26
genesic: 這招有例子不代表這招有成功啊 11/16 16:27
genesic: 現在遊戲這麼多,我相信任何招式應該都會有例子吧 11/16 16:27
keerily: 只是讓大家覺得有,然後Cy就搭順風車行銷 11/16 16:27
keerily: 順勢改出天井+顯示機率讓自己變成佛心公司 11/16 16:28
keerily: 不然Cy這邊站的住腳,也不用怕被告 11/16 16:29
keerily: 玩家還是一樣在玩,那時燒的人沒在玩的還比較多 11/16 16:31
j9145: 轉蛋就是一種賭博,去搜尋賭場機率就一堆例子了 11/16 16:33
iceisland: 我大海膽太太 11/16 16:45
zack2: 除非有人能證明他抽出不在清單內的角色 不然官方推給前端說 11/16 17:08
zack2: 單純是清單顯示異常 實際後台運作沒問題 鬼才信xD 11/16 17:08
keerily: 這麼多人玩的遊戲,結果目前仍沒人能證實有抽到不在清單 11/16 17:36
mizuarashi: 先上了再說,以這遊戲來說很有可能是這樣沒錯…… 11/16 17:52
s6031417: 我就是因為猴妹炎上70抽才入坑的(ry 11/16 19:26
ENCOREH33456: 難怪這遊戲大到1.3G卻永遠只能存內存 02/25 02:36