嘟嘟之魂 发表于 2012-10-28 11:53

原创 - 如何逆推出闪光精灵的性格值

因为是一边思考一边写的所以写得比较乱,欢迎优化和挑刺,有更好的方法也欢迎提出-3-
本贴测试脚本语言为php,我把大概的一个思路和代码放了出来提供参考

异或的概念:http://zh.wikipedia.org/wiki/%E9%80%BB%E8%BE%91%E5%BC%82%E6%88%96

请勿转载// 已知训练师ID,将训练师ID拆分成两份
$tidA = 0x9928;
$tidB = 0xC67A;

// 随机性格值前半部分
$pvStr = '0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF';
$pvStr = str_shuffle($pvStr);
$pvA = hexdec(substr($pvStr, 0, 4));
$pvB = '';

// 训练师ID前半部分异或后半部分再异或性格值前半部分,转为2进制并补足0
$xorStr = str_split(str_pad(decbin($tidA ^ $tidB ^ $pvA), 16, '0', STR_PAD_LEFT));

// 异或中双0和双1为假,其余为真;$xorStr异或性格值后半部分的结果应该小于111(16),所以利用遍历来组成后半部分,前面的位数不变,倒数第12位时开始判断0还是1,0则1,1则0,组合成后半部分
foreach($xorStr as $key => $value) {
        $pvB .= ($key > 12) ? (($value == '0') ? 1 : 0) : $value;
}

// 化为16进制,拼合
$pvA = str_pad(dechex($pvA), 4, '0', STR_PAD_LEFT);
$pvB = str_pad(base_convert($pvB, 2, 16), 4, '0', STR_PAD_LEFT);
$pv = $pvA . $pvB;

北风露露 发表于 2012-10-28 13:44

完全看不懂什么意思……

小哼哼 发表于 2012-10-28 13:44

这是天书吗 完全看不懂

Muiki 发表于 2012-11-1 05:23

窝模模糊糊的看懂了一部分...2333...问题是推这个有啥用QAQ

嘟嘟之魂 发表于 2012-11-1 05:57

回复 4# Muiki


    后台奖励精灵需要用到阿233
页: [1]
查看完整版本: 原创 - 如何逆推出闪光精灵的性格值