KMT 發表於 2014-12-28 00:38:45

淺談抽卡類遊戲的卡片改法


請注意!以下文章內容全部估狗而來,與本帖作者完全無關:

相信手機卡牌類遊戲不斷換皮不換肉,改個包裝換個名字又重新出場的這種風氣下,
剛開始接觸遊戲修改的人一定會認為,
疑!?為什麼不修改卡片就好了,可是看看APK.TW充斥的都是各種無敵、秒怪,就是沒有人改卡片...
或許有,我不確定,因為某彈珠本魯沒玩過,聽說可以改蛋是吧?
那個修改的原理本魯猜一猜大概是因為戰鬥後的獎勵結算是在client進行,再request給sever(btw,我不確定)
打開封包攔截的相關軟體應該就可以知道大概...如果你用的軟體可以回傳封包甚至不用燒餅啊、八門啊、泡椒沙毀...blabla一堆修改軟體的就可以改了

如果你懂一點MVC,懂一點封包,懂一點資料庫,那這篇文章可以給你很大的啟示。

重點就是,你在自己的手機上、電腦上看到的牌組不過都是經由sever回傳給你的結果,透過你這台終端機顯示出來而已
所以修改卡片就無望了嗎?
答案是否定的,這必須要看你的遊戲是屬於下列哪一種。

1. 抽卡由sever處理
(最近比較火紅的遊戲都屬於這種,對於遊戲公司來說,安全,因為抽卡是他們最大收入來源。)

2.抽卡由client處理
(很少見了,通常比較破的單機遊戲才會這樣處理,有的連線遊戲原本這樣也是後來也改了。)




對於第一種類型的解法,因為我們不能決定自己抽到什麼卡片,所以我們得換個想法。
通常,當我們按下抽卡的瞬間時,會送出一個packet給遊戲的Sever。
並且馬上有Response回傳給你。通常會是result:"卡片ID、技能類型ID、種族blabla"......一堆的
這就像是為什麼很多遊戲都有人說,其實你按下去的瞬間早就決定是什麼卡片了,抽卡的動畫不過是看爽的......

如果我們不能決定抽什麼卡,那我們只好用別的方式了。
通常遊戲會有代幣,可能扣五枚代幣可以抽一次卡片,那假如扣一次代幣我們可以抽好幾次呢?

是的,這就是突破點之一,當然還有很多想法大家可以自己腦補看看,對!就是腦補,發揮你的想像力!
一個遊戲的Sever如果不給力,那像是Charles這種軟體便可以很輕易的辦到這種事情,

例如Charles中的repeat advanced功能,就可以『同時且快速』的送出抽卡要求的packet!
通常這種packet的request都很簡潔,加上最近的遊戲都不是單抽,就是十一抽,所以通常會寫成:
「type(抽卡種類ex.聖誕抽、友情抽、火系抽之類bla...)、number(數量,如果單抽就1,十一抽就11)」
連扣遊戲代幣扣幾顆的欄位都不存在,因為根本不需要,都在sever那邊定義好直接資料庫連結到你的帳戶資料表直接扣了。
如果伺服器來不及處理或根本無法處理這麼即時且大量的packet?會發生什麼事?


很有可能你因此拿到了兩張、三張或多張卡片,因為它來不及更新你的代幣,抽卡的處理程序就先跑了好幾回,因為每次判斷時都跟上一次剩餘代幣相同。

(有些遊戲比較嚴謹,packet會隨時間而變化,過一段時間可能你要重抽一次卡看它新的pack怎麼寫)

簡單來講,整個抽卡的流程:
伺服器接到玩家client端抽卡的packet,會去資料庫找你那張寫有你剩餘代幣的資料表,
判斷你的代幣夠不夠抽卡,然後創建一張獨一無二的卡片資料,寫進你的背包資料表裡,
而這張卡通常擁有整個遊戲中獨一無二的代碼,因為資料庫的主鍵不能重複,
(...補充一下除了主鍵不能重複的原因外,通常還有一個原因是因為現在卡牌遊戲都可以升級卡片,分開弄比較好處理...)
最後update你的代幣的Value。

(這邊有個地方要注意,通常代幣的值當初購買時會直接存Sever上,但也可能是存在你的手機上,像某通訊軟體的遊戲好像就是...這種的就可以直接改代幣數量,測試方法就是換手機登入同一個帳號看代幣有沒有一樣。)

所以每當有人說修改代幣或把封包的卡片ID改成你想要的東西,在板上看很久了,其實本魯看了都在偷笑(抱歉ㄏㄏ)。
如果你只是改response的卡片ID,你要怎麼寫進遊戲公司的資料庫?駭進去?
那你直接select那張資料表再update代幣或卡片的value就好了啊。

對於第二種的修改法,就很好處理了,
因為不管是直接打開手機裡暫存的xml改或是透過燒餅之類的修改方是應該都很簡單,
會採用這種方式的,通常是在抽卡時把你的抽卡結果(卡片ID)的packet送到Sever,然後Sever再進行扣代幣,把資料寫進你背包資料表的動作。
而且這種方式也與目前某些手機遊戲的戰鬥獎勵結算雷同,所以你可能可以修改每場戰鬥結束後的經驗、金錢等等。
如果你會改的話,某塔改鎖血倍攻的鎖帳號問題根本不存在,charles的Breakpoint夠你用了。
甚至你只要直接回傳戰鬥開始的packed(通常request一個mission ID、responseㄧ個roomID)+戰鬥結果的packed(通常要request前面的roomID來判斷是同一場戰鬥)+戰鬥獎勵的packed即可....
你畫面上根本沒顯示可是實際上Sever認為你打完了一場遊戲。
(有看過ㄧ些網路遊戲的脫機版外掛吧?)
**** Hidden Message *****
頁: [1]
查看完整版本: 淺談抽卡類遊戲的卡片改法