查看: 5996|回复: 4

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

[复制链接]
嘟嘟之魂 发表于 2012-10-28 11:53 | 显示全部楼层 |阅读模式
因为是一边思考一边写的所以写得比较乱,欢迎优化和挑刺,有更好的方法也欢迎提出-3-
本贴测试脚本语言为php,我把大概的一个思路和代码放了出来提供参考

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

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

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

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

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

  15. // 化为16进制,拼合
  16. $pvA = str_pad(dechex($pvA), 4, '0', STR_PAD_LEFT);
  17. $pvB = str_pad(base_convert($pvB, 2, 16), 4, '0', STR_PAD_LEFT);
  18. $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
您需要登录后才可以回帖 登录 | 入住

本版积分规则

快速回复 返回顶部 返回列表