魔獸的經(jīng)典地圖dota可以說最熱門的MOBA游戲,雖然都可以單獨(dú)視為一款游戲了,不過說起來還是魔獸的一個(gè)地圖,所以玩家可以用這個(gè)工具來計(jì)算出雙方隨機(jī)選擇的英雄陣容,知己知彼百戰(zhàn)不殆。
更新日志:
DOTA陣容計(jì)算器 6.79版本更新報(bào)告:
有的玩家使用后彈出 “MFC100U.dll” 這類的 丟失文件,導(dǎo)致程序無法使用, 這個(gè)錯(cuò)誤是作者自身的失誤! 編譯程序時(shí)未使用靜態(tài)MFC生成,導(dǎo)致某些環(huán)境系統(tǒng)無法使用該程序(現(xiàn)在已經(jīng)解決)
計(jì)算過程:
本人也玩過魔獸爭(zhēng)霸的地圖編輯 懂得一些JASS函數(shù) , JASS內(nèi)存在隨機(jī)數(shù), 既然是聯(lián)網(wǎng)數(shù)據(jù)同步主機(jī)的游戲, 那么隨機(jī)種子一定是從主機(jī)方得到,
種子數(shù)值就在 “房間” 名稱附近的內(nèi)存中!
就說明每個(gè)房間都公開有一個(gè)指定的游戲隨機(jī)數(shù)計(jì)算的種子 , 魔獸開始游戲時(shí) 在載入游戲過程中會(huì)產(chǎn)生一次隨機(jī)數(shù)
0012DB50 0B80C630 ASCII “GetRandomInt”
GetRandomInt(0×0,0xA) ; 該函數(shù)是在游戲Game.DLl 模塊中
該函數(shù)入口地址
“6F3B40A0″
返回隨即值
當(dāng)我們正常進(jìn)入游戲 -RD的時(shí)候 會(huì)瞬間 隨機(jī)選出 22位英雄
當(dāng)然 現(xiàn)在”炸彈人”是不允許開放在RD模式了!
-RD的時(shí)候在 函數(shù)入口下斷 可以看到 push 的參數(shù)
就是最小值 最大值
GetRandomInt(int mix,int max)
函數(shù)retn的時(shí)候 可以看到edi 中的返回值 就是相關(guān)英雄專屬的 整型地址!
如果加上SP模式 就必須先算SP模式
過程是這樣的
游戲載入進(jìn)度 隨機(jī)一次 GetRandomInt(0,0xA)
如果非SP模式 直接-RD 將隨機(jī)一次GetRandomInt(1,1)
如果SP 并且RD 那么就先得算 SP 十次隨機(jī)GetRandomInt 并過濾重復(fù) 成功返回
RD模式 存在最大最小的 計(jì)算過程GetRandomInt(1,2) 從1和2中隨機(jī)
如果 == 1 則 GetRandomInt(0×1,0x3B) == 2 GetRandomInt(0x3C,0×70)