魔兽的经典地图dota可以说最热门的MOBA游戏,虽然都可以单独视为一款游戏了,不过说起来还是魔兽的一个地图,所以玩家可以用这个工具来计算出双方随机选择的英雄阵容,知己知彼百战不殆。
更新日志:
DOTA阵容计算器 6.79版本更新报告:
有的玩家使用后弹出 “MFC100U.dll” 这类的 丢失文件,导致程序无法使用, 这个错误是作者自身的失误! 编译程序时未使用静态MFC生成,导致某些环境系统无法使用该程序(现在已经解决)
计算过程:
本人也玩过魔兽争霸的地图编辑 懂得一些JASS函数 , JASS内存在随机数, 既然是联网数据同步主机的游戏, 那么随机种子一定是从主机方得到,
种子数值就在 “房间” 名称附近的内存中!
就说明每个房间都公开有一个指定的游戏随机数计算的种子 , 魔兽开始游戏时 在载入游戏过程中会产生一次随机数
0012DB50 0B80C630 ASCII “GetRandomInt”
GetRandomInt(0×0,0xA) ; 该函数是在游戏Game.DLl 模块中
该函数入口地址
“6F3B40A0″
返回随即值
当我们正常进入游戏 -RD的时候 会瞬间 随机选出 22位英雄
当然 现在”炸弹人”是不允许开放在RD模式了!
-RD的时候在 函数入口下断 可以看到 push 的参数
就是最小值 最大值
GetRandomInt(int mix,int max)
函数retn的时候 可以看到edi 中的返回值 就是相关英雄专属的 整型地址!
如果加上SP模式 就必须先算SP模式
过程是这样的
游戏载入进度 随机一次 GetRandomInt(0,0xA)
如果非SP模式 直接-RD 将随机一次GetRandomInt(1,1)
如果SP 并且RD 那么就先得算 SP 十次随机GetRandomInt 并过滤重复 成功返回
RD模式 存在最大最小的 计算过程GetRandomInt(1,2) 从1和2中随机
如果 == 1 则 GetRandomInt(0×1,0x3B) == 2 GetRandomInt(0x3C,0×70)