Bolt.gg 飾品強化網站演算法揭秘

最近幫客戶定製一個類似bolt.gg的csgo飾品強化網站,專門研究了下bolt.gg的演算法,接下來為大家介紹下:

市面上的強化玩法的勝負判別方式都是以玩家下注的概率A與該局強化的隨機概率B比較,若玩家下注概率A小於等於此次強化隨機的概率B,則玩家獲勝,強化成功,反之強化失敗。

以bolt.gg的玩法為例,一局遊戲的隨機概率的計算,一般由以下兩個要素來決定:玩家自定義密鑰 clientSeed、該局遊戲的伺服器密鑰 servereed

遊戲開始時,網站會使用sha256演算法根據玩家自定義密鑰以及伺服器密鑰來生成該局遊戲的hash值,如 newHash = sha256(clientSeed + serverSeed),假設玩家密鑰為 myseed,伺服器密鑰為 d563c16b00bc68a6f54ce97b5e3df882209d0bcf349baf01c408d7c0f93c6ed1, 將兩組密鑰進行sha256演算法計算,得到一個新的newHash值 5fbde6c46c161b36254d496fdc247f1120387dc6129a0c687eb58a952f4d6b5c,取該newHash值最後6為4d6b5c,將其按16進位轉換為10進位,得到整數 5073756 ,除以 16777215並取整,得到3025,再除以100,得到30.25,則玩家此局遊戲的隨機概率為 30.25%,如果玩家此局下注的強化概率大於30.25%(比如玩家選擇強化2倍,強化概率為45%),則玩家此次強化就成功了,反之玩家選擇的強化概率小於30.25%,玩家強化就失敗了。

為了保證遊戲的公平性,網站在開始遊戲前,允許玩家自定義自己的密鑰clientSeed(如果玩家不自定義的話,網站一般會為玩家生成一個隨機字元串),由於sha256演算法的散列性質,修改任意一個字元後,都會導致最終的計算結果得到的hash完全不同,因而也就影響了最終結束時的隨機概率值,也保證了每次強化的結果概率一定是隨機的。

玩家一般在遊戲開始前只能修改自己的clientSeed密鑰,而伺服器為玩家生成的該局密鑰是不可見的,不然玩家就可以自己提前計算出概率值了,不過伺服器一般為玩家顯示一個加鹽後的serverSeed;比如遊戲開始前,除了玩家可以自定義的clientSeed,網站還會同時顯示兩個額外的字元串,salt、hash,以上面的serverSeed為例,網站會同時提供一個加密salt為4d43d8c39e2351d0b45b31a307ef85183a2a01a33904e9f11abf320858fb4ce1,以及hash c401d467928be2e21eb662942fc244bb5f7bdb34f74547af2eeaf850b36d33ea,而這裡的這個hash是通過 hash = sha256(salt + serverSeed) 的演算法得到的,所以當一局遊戲結束後,伺服器會公布該局遊戲的serverSeed,玩家可以根據遊戲開始前網站提供的salt,對公布的serverSeed進行sha256計算,然後得到一個hash值,將該hash值與遊戲開始前提供的hash值比較,是否相同;相同說明遊戲過程中,網站並未篡改該局遊戲的serverSeed。

每局遊戲結束後,玩家開始一局新的遊戲時,網站會為玩家生成一個新的serverSeed,並公布該serverSeed對應的salt和hash,以供玩家遊戲結束後校驗。

簡單來說,每局遊戲的概率值,由玩家和網站兩方的因素來控制的,玩家可以在一局遊戲開始前修改自己的seed,而網站為了保證自己不會修改該局遊戲的伺服器端的seed,會提前公布一個加密後的seed值,當遊戲結束後,玩家可以根據網站公布的伺服器端seed去做加密計算,比較加密結果是否與網站提前公布的加密結果匹配,以此來校驗網站是否在遊戲過程中作弊篡改了概率。

順便打個廣告,如果有Steam相關網站的開發需求,比如交易平台,開箱網站,飾品升級網站,可以聯繫我:

Steam機器人-成都海盜海科技有限公司?

www.steamrobot.me


推薦閱讀:

關於新手接觸CSGO皮膚一個很重要的事情

TAG:Steam | CSGO皮膚 | DOTA2飾品 |