爐石傳說卡組代碼是什么原理?代碼是如何對應(yīng)卡牌的?
網(wǎng)友解答: 這里企鵝,從南極第一線為你解答早在兩年以前,爐石傳說上線了全新的卡組代碼。從那時起,爐石玩家便有了一個極其方便的分享卡組的方法。當(dāng)然,卡組代碼方便我們的同時,也有很多人好奇,
這里企鵝,從南極第一線為你解答
早在兩年以前,爐石傳說上線了全新的卡組代碼。從那時起,爐石玩家便有了一個極其方便的分享卡組的方法。當(dāng)然,卡組代碼方便我們的同時,也有很多人好奇,卡組代碼是如何生成并且準(zhǔn)確識別的。由于其中涉及復(fù)雜的計(jì)算機(jī)知識,所以企鵝會盡量通俗的解釋一下,卡組代碼蘊(yùn)含的意義。
代碼原理首先,你需要理解最關(guān)鍵的兩點(diǎn),爐石傳說的代碼在計(jì)算機(jī)編程的角度來說,屬于Base64代碼,這個代碼有一個最為明顯的特征,即你復(fù)制的代碼中,以=或者==作為結(jié)尾,代表這個代碼的結(jié)束。
另外一點(diǎn)則是作為標(biāo)識符的DBF ID,這個你可以理解為,爐石傳說中的獨(dú)有表示系統(tǒng)。簡單的解釋來說,就是每一張卡牌都被這個ID按順序進(jìn)行了標(biāo)記,早在爐石傳說開發(fā)之初就已經(jīng)有了這個標(biāo)記方式,只不過在爐石傳說上線卡組代碼的系統(tǒng)時,這些ID就被官方開源了,才被眾人所知曉。其實(shí)如果你有一定的計(jì)算機(jī)基礎(chǔ),挖掘爐石傳說的源文件時,你就可以發(fā)現(xiàn)這些代碼了。正是因?yàn)橛许樞虻臉?biāo)記,才讓爐石傳說每一張卡牌都有準(zhǔn)確的描述以及配圖,所以你可以看到如果不人為修改的話,爐石傳說是不會有卡牌描述上面的錯亂的。
說完這兩個關(guān)鍵點(diǎn),我們深入代碼來了解一下具體含義。
代碼含義通過上文的解釋,我們得知了兩個信息:代碼是被獨(dú)立出來進(jìn)行識別的,每一張卡牌都有對應(yīng)的ID便于區(qū)分。
所以,企鵝再從大家可以理解的角度,解讀一下其中部分代碼的含義。
首先是開頭部分,前四個字母代表了這套卡組所屬的模式,即AAEC為標(biāo)準(zhǔn)卡組,AAEB為狂野卡組。這個是單純從表面可以看出來的。
至于后面的一大串,當(dāng)然是具體的卡牌了。不過為了簡化以便于處理,這里的代碼是經(jīng)過base64代碼進(jìn)行二次轉(zhuǎn)換過的。換句話說,如果你想看到其中的具體ID的話,你可以下載一個base64代碼的轉(zhuǎn)換工具(或者叫解碼工具)把卡組代碼放進(jìn)去,這樣你就可以看見具體的代碼了。
當(dāng)然,企鵝在上面說了,這是進(jìn)行二次轉(zhuǎn)換的代碼。如果再詳細(xì)的想知道卡牌的ID,這里就涉及一個新的varint代碼了。這個代碼并不是屬于加密那種的代碼,而是對卡組進(jìn)行更為詳細(xì)的區(qū)分,舉個例子,相同名稱的卡牌使用了多少張,你選用的職業(yè)是誰,這個版本的版本號,以及所屬的模式(上文說的標(biāo)準(zhǔn)或者狂野模式就是用這個代碼區(qū)分的)等等。這些是卡組代碼必須要有的內(nèi)容,否則系統(tǒng)會不予識別。
總結(jié)所以,企鵝在這里再次總結(jié)一下上文所說的關(guān)鍵點(diǎn)。
一個卡組代碼里面包含三個要素:base64代碼,用于獨(dú)立以及加密。varint代碼,用于卡組的識別以及分類。DBF ID,用于標(biāo)記每一張卡牌。
通過這三個要素,游戲才能識別這個代碼屬于哪個職業(yè),哪個模式以及用了多少張什么卡牌。因此,卡組代碼中的每一個字符都是不可或缺的,正是工程師的智慧和努力,才能讓每一套卡組有了自己的名字和意義,讓每個玩家都有機(jī)會分享自己的成果。
我是企鵝,如果回答對你有所幫助,記得點(diǎn)個關(guān)注哦:) 網(wǎng)友解答:這個問題問得好!
好久沒有看到這么有趣的問題了,來答一個。
首先,我也算半個程序員,對于這類游戲和代碼問題(可惜我并不是游戲開發(fā)),雖然真正的原理,還需要爐石設(shè)計(jì)師來答~
嘛,剛剛好也有興趣,來嘗試著探討一下。如果有其他開發(fā)大神,也請賜教。
首先,我們找一個切入點(diǎn)以小見大,那就是威茲班。
### 神奇的威茲班 # 職業(yè):獵人 # 模式:標(biāo)準(zhǔn)模式 # 渡鴉年 # # 1x (4) 神奇的威茲班 # AAECAR8BrYoDAAA= # #
威茲班的代碼就是上面這個,但好像意義不大。
然后再看一套標(biāo)準(zhǔn)的垃圾元素法:##AAECAf0EDk1xigG7AtAClgXsB8LDAsrDAsbHApvTAs7yAqCAA6iHAwjJA6sEwsEC68ICx8cCltMCluQCyYcDAA== # #
最后再來一套狂野臟牧的代碼:##AAEBAa0GFB7cAfIFuQaNCNMK1wqCtQLovwLqvwLZwQLfxALTxQKJzQLwzwL86gLy7AL38wKXhwPmiAMFkAK1uwK6uwLL5gLoiQMA # #
但似乎還有一點(diǎn)問題,所以又必須再組一套專用卡組。
代碼是:### 自定義 牧師3 # 職業(yè):牧師 # 模式:狂野模式 # # AAEBAa0GDNMBmwPJrwLovwKawgLjwgLmzAKJzQLx6gLy7AKO7gKihwMJCPmsArW7ApnIAujQAubTAuPpAouAA+uKAwA= # #
這一套和上面的狂野臟牧的四張一費(fèi)卡相同,其他的卡牌全都是7費(fèi)以上湊數(shù)卡。
一套宇宙卡組:
AAEBAa0GHgiGAdMBmwPIBfEFlw3aE/msAsmvArW7Aui/AqDBAprCAuPCAsjHApnIAubMAonNAujQAubTAuPpAvHqAtfrAsPsAvLsAo7uAouAA9uJA+uKAwAA # #
一套全重復(fù)卡組:AAEBAf0EAA+sAbQElgW8CIkPh6wC67oChLsCnNMC7tMC1eECluQCuf8CyIcDzYkDAA== # # 想要使用這副套牌,請先復(fù)制到剪貼板,然后在游戲中點(diǎn)擊“新套牌”進(jìn)行粘貼。
咳咳,就現(xiàn)在這點(diǎn)東西(我自己測驗(yàn)了半個小時),只能看出幾個點(diǎn)。
卡牌肯定是以字母小寫,大寫,數(shù)字的組合來代替,每套卡組代碼約莫100左右,也就是每張牌3個或者4個代碼代替。
AAEBA和AAECA,分別是狂野和標(biāo)準(zhǔn)卡牌。
此外,前三個字符代表著職業(yè),法師f0e,牧師a0g
卡牌代碼順序,并不以費(fèi)用為準(zhǔn),可能是以擴(kuò)展包前后時間為準(zhǔn),emmm,卡牌有自己的數(shù)組,或許是升序~
不同的牌,其信息跟擴(kuò)展包掛鉤。
是否重復(fù),被代碼自動分為兩段(前面為單張,后面為兩張。這個沒有列代碼,)
最后是最重要的一點(diǎn),加密和解析!加密方法應(yīng)該是base64位的加密??ㄅ票旧碇挥袃扇齻€字符表示。
據(jù)說編碼方式是:import {encode, decode} from "deckstrings"; const deck = { cards: [[1, 3], [2, 3], [3, 3], [4, 3]], // [dbfid, count] pairs heroes: [7], // Garrosh Hellscream format: 1, // 1 for Wild, 2 for Standard };
......
然后就沒啥了...
實(shí)際上,我們看到的代碼,是進(jìn)行編譯以后的結(jié)果,只有在爐石代碼的某個方法解析之后才能清楚的看到原編碼。
解碼似乎是.net做的,但我并沒有HearthDB~或許爐石文件夾有,就不去測試了。
說難呢,也不難,就是把卡牌分組排列,獲取卡牌數(shù)據(jù)庫的key(也可能其他是專屬唯一的代號),排序,加密,輸出。
在復(fù)制的時候,先確認(rèn)卡組正常與否(我試著改了幾個字母,出現(xiàn)了“不適合這個模式”的提醒,說明什么?說明還有一些“隱藏”卡牌,比如冒險模式,衍生...),根據(jù)數(shù)據(jù)填充,展示卡組...
就是這樣啦,回答完畢。
說個題外話,從這件事,我發(fā)現(xiàn)...爐石竟然監(jiān)控我的復(fù)制剪切板!天哪~
溜了溜了。