学了点关于内存读写的知识,本着学以致用的目的,写了个QQ记牌器.原理是读内存变化,判断出牌情况,方法网上有很多,一搜一篇.
这阵子和朋友玩升级,便先从QQ升级下手,既然是为自己写的记牌器,当然要尽可能的好使,互相看牌的功能就是必不可少的.我的办法是拿到牌后和对方交换一次数据,后来发现扣牌会导致交换的数据有误差,便改成交换两次,拿到牌交换一次,扣完牌再交换一次.通过两次拿到的牌不同判断扣掉的底牌.效果如下:
升级完成后,又添加了斗地主,双扣等功能.过程几经曲折,在此记录.
进行斗地主记牌的时候,最开始想的是和升级一样,利用出牌张数内存地址,然后根据出牌张数读取出牌.但是出牌张数变化很快,计时器设置时间为1秒,有时候网速变化时会出现读牌错误的情况.如果计时器间隔调太短,无疑影响程序性能.
后来不再读取出牌张数,直接根据手中牌数量的变化来计算出牌张数,计时器间隔1秒的情况下运行良好,目前还没发现问题.
在添加够级游戏时,遇到了难题,手中牌数量这个地址的值很怪,开局后都是0,只有出了牌才会变化为实际张数,而且最后一手牌出完后也不变为0.我估计我搜到的地址是界面显示的张数地址,想搜符合实际值的内存搜不到,网上搜也得不到结果,只好将就着用了.用的时候加判断,开局后把张数置为36,某个玩家出完后将张数置为0.
顺便发一下够级的基址:
玩家数量: 0x430F4;
玩家名称:从自己开始,顺时针为0x28B8E, 0x28C02, 0x28C76, 0x28CEA, 0X28D5E,...;偏移地址是16进制74,依次加便可.
我的座位号: 0x430CC;
准备情况: 0x26560, 0x26564, 0x26568, 0x2656c, 0x26570, 0x26574;没点准备按钮内存是0,点了后是1,开始游戏变为2.
自己的牌: 0x2628D;偏移是12.
剩余牌数: 0x26510, 0x26534, 0x26538, ...;偏移是4,依次加即可.
内存模块是GouJiLogic.dll
实际效果如图:
独乐乐不如众乐乐,已经发到网上,有兴趣的朋友可以使用. 够级记牌器
留言列表: