搜索
查看: 8915|回复: 7

[模拟按键] QQ连连看辅助

  [复制链接]

2

主题

9

帖子

85

积分

一级会员

Rank: 2

积分
85
发表于 2013-2-7 03:17:39 | 显示全部楼层 |阅读模式
  1. /**
  2. QQ连连看辅助
  3. 可能要先找下基址~~
  4. 棋盘大小19*11
  5. 按一下空格消一次
  6. (按10多次的时候,程序就卡住了,要重新启动程序;暂时不知道卡在什么地方了~_~,有时间看看为啥)
  7. **/
  8. import win.ui;
  9. import process;
  10. /*DSG{{*/
  11. mainForm = ..win.form( bottom=400;parent=...;right=600;text="aardio Form" )
  12. mainForm.add(  )
  13. /*}}*/

  14. var BASE = 0x0018A1BC; //左上角那个块的地址,练习模式,用CE查找byte(基址没找到~_~),空的时候是0
  15. var LEFT = 8;    //棋盘距离窗口左边距离
  16. var TOP = 194;   //棋盘距离窗口顶部距离
  17. var WIDTH = 31.4; //单元格宽度
  18. var HEIGHT = 34.5; //单元格高度
  19. /**连接两点**/
  20. function click(x,y,i,j){
  21.         var w = win.find(,"QQ游戏 - 连连看角色版");
  22.         var l,t,wl,wt =win.getPos(w)
  23.         mouse.move(l+LEFT+x*WIDTH+10,t+TOP+HEIGHT*y+10,true);
  24.         sleep(300)
  25.         mouse.click();
  26.         mouse.move(l+LEFT+i*WIDTH+10,t+TOP+HEIGHT*j+10,true);
  27.         sleep(300);
  28.         mouse.click();
  29.         return true;
  30. }
  31. /**
  32.         (x1,y)-----(x2,y)
  33.         检查中间是否是空的
  34. **/
  35. function checkXLine(p,x1,x2,y){
  36.         var min=x1>x2?x2:x1;
  37.         var max=x1>x2?x1:x2;
  38.         if(max-min==1)return true;
  39.         for(t=min+1;max-1){
  40.                 if(p.readNumber(BASE+y*19+t,"BYTE")!=0)break;
  41.                 else if(t==max-1)return true;
  42.         }
  43.         return false;
  44. }
  45. /**
  46.         (x,y1)
  47.           |
  48.           |
  49.           |
  50.         (x,y2)
  51.         检查中间是否是空的
  52. **/
  53. function checkYLine(p,x,y1,y2){
  54.         var min=y1>y2?y2:y1;
  55.         var max=y1>y2?y1:y2;
  56.         if(max-min==1)return true;
  57.         for(t=min+1;max-1){
  58.                 if(p.readNumber(BASE+t*19+x,"BYTE")!=0)break;
  59.                 else if(t==max-1)return true;
  60.         }
  61.         return false;
  62. }

  63. /**
  64.         第一种,单直线
  65.         (x,y)----(x,j)
  66.        
  67.    (x,y)
  68.         |
  69.         |
  70.    (i,y)
  71. **/
  72. function first(p,y,x){
  73.         var data = p.readNumber(BASE+y*19+x,"BYTE");
  74.         if(data==0)return false;
  75.         for(j=0;10){
  76.                 if(j==y)continue;
  77.                 if(p.readNumber(BASE+j*19+x,"BYTE")!=data)continue;
  78.                 if(checkYLine(p,x,y,j))return x,y,x,j;
  79.         }
  80.         for(i=0;18){
  81.                 if(x==i)continue;
  82.                 if(p.readNumber(BASE+y*19+i,"BYTE")!=data)continue;
  83.                 if(checkXLine(p,x,i,y))return x,y,i,y;
  84.         }
  85.         return false;
  86. }

  87. /**
  88.         第二种需要两条线
  89.         (x,y)-------(x,j)
  90.                                 |
  91.                                 |
  92.                            (i,j)
  93.         A
  94.         |
  95.         |
  96.         |------A
  97. **/
  98. function second(p,y,x){
  99.         var data = p.readNumber(BASE+y*19+x,"BYTE");
  100.         if(data==0)return false;
  101.         for(j=0;10){
  102.                 if(j==y)continue;
  103.                 for(i=0;18){
  104.                         if(i==x)continue;
  105.                         if(p.readNumber(BASE+j*19+i,"BYTE")!=data)continue;
  106.                         if(p.readNumber(BASE+y*19+i,"BYTE")==0&&checkXLine(p,x,i,y)&&checkYLine(p,i,y,j))return x,y,i,j;
  107.                         if(p.readNumber(BASE+j*19+x,"BYTE")==0&&checkXLine(p,x,i,j)&&checkYLine(p,x,y,j))return x,y,i,j;
  108.                 }
  109.         }
  110.         return false;
  111. }

  112. /**
  113.         第三种需要3条线
  114.         |------|
  115.         |           |
  116.         |      |
  117.         A      |
  118.                A

  119.         |-------A
  120.         |
  121.         |
  122.         |----------A

  123. **/
  124. function third(p,y,x){
  125.         var data = p.readNumber(BASE+y*19+x,"BYTE");
  126.         if(data==0)return false;
  127.         for(j=0;10){
  128.                 for(i=0;18){
  129.                         if(p.readNumber(BASE+j*19+i,"BYTE")!=data)continue;
  130.                         for(xx=0;18){
  131.                                 if(xx==x)continue;
  132.                                 if(xx==i)continue;
  133.                                 if(p.readNumber(BASE+j*19+xx,"BYTE")==0&&p.readNumber(BASE+y*19+xx,"BYTE")==0&&checkXLine(p,x,xx,y)&&checkXLine(p,xx,i,j)&&checkYLine(p,xx,j,y))return x,y,i,j;
  134.                         }
  135.                         for(yy=0;10){
  136.                                 if(yy==y)continue;
  137.                                 if(yy==j)continue;
  138.                                 if(p.readNumber(BASE+yy*19+x,"BYTE")==0&&p.readNumber(BASE+yy*19+i,"BYTE")==0&&checkYLine(p,i,j,yy)&&checkYLine(p,x,y,yy)&&checkXLine(p,x,i,yy))return x,y,i,j;
  139.                         }
  140.                 }
  141.         }
  142.         return false;
  143. }

  144. /**
  145. 检查并消去两个
  146. **/
  147. function go(){
  148.         var p = process.find("kyodaiRPG.exe");
  149.         if(!p){
  150.                 win.msgbox("not found");
  151.                 return;
  152.         }
  153.         //优先消去一条线上的
  154.         for(j=0;10){
  155.                 for(i=0;18){
  156.                         var a,b,c,d=first(p,j,i);
  157.                         if(a){
  158.                                 click(a,b,c,d)
  159.                                 return ;
  160.                         }
  161.                 }
  162.         }
  163.         //然后消去两条线连接的
  164.         for(j=0;10){
  165.                 for(i=0;18){
  166.                         var a,b,c,d=second(p,j,i);
  167.                         if(a){
  168.                                 click(a,b,c,d)
  169.                                 return ;
  170.                         }
  171.                 }
  172.         }
  173.         //最后消去三条线连接的(计算时间最长)
  174.         for(j=0;10){
  175.                 for(i=0;18){
  176.                         var a,b,c,d=third(p,j,i);
  177.                         if(a){
  178.                                 click(a,b,c,d)
  179.                                 return ;
  180.                         }
  181.                 }
  182.         }
  183.         win.msgbox("no");
  184. }
  185. ////定义热键
  186. import key.hook;
  187. hook=key.hook();

  188. function hookProc(msg,vkcode,scancode,injected,flags,timeStamp,extraInfo){
  189.         hook.proc=null;//禁用热键,防止运算的时候点击第二次,貌似没效果~_~
  190.         if( injected ) return;
  191.          
  192.      var kn = key.getName( vkcode );
  193.      select(msg) {
  194.              case 0x100/*_WM_KEYDOWN*/ ,0x104/*_WM_SYSKEYDOWN*/{
  195.              }
  196.              case 0x101/*_WM_KEYUP*/,0x105/*_WM_SYSKEYUP*/{
  197.                   if(kn="SPACE"){                                             //hook空格键
  198.                                 go();
  199.                                 hook.proc=hookProc;
  200.              }
  201.              }  
  202.      }   
  203.         hook.proc=hookProc;//程序处理完,恢复热键
  204. }
  205. hook.proc=hookProc;
  206. mainForm.show()
  207. win.loopMessage();  
复制代码
回复

使用道具 举报

51

主题

286

帖子

1729

积分

荣誉会员

Rank: 8Rank: 8

积分
1729
发表于 2013-2-7 09:02:14 | 显示全部楼层

不错不错,学习下。QQ游戏好像会对CE,OD都有防调试吧,好像搜索不了内存?

不错不错,学习下。QQ游戏好像会对CE,OD都有防调试吧,好像搜索不了内存?
◆ 半醒半醉日复日,花落花开年复年 ◆
回复

使用道具 举报

6

主题

132

帖子

1128

积分

四级会员

Rank: 6Rank: 6

积分
1128
发表于 2013-2-7 09:21:20 | 显示全部楼层

学习一下

学习一下
回复

使用道具 举报

13

主题

38

帖子

366

积分

二级会员

Rank: 3Rank: 3

积分
366
发表于 2013-2-7 10:23:48 | 显示全部楼层

用OD看了看这游戏,找到他本地判断能否消除的语句,可实现任意两点都能消除。不过他服务器还验证,快消光了,一会又涨回来了。呵呵。本地有两个跳点,一个是判断两个花色

用OD看了看这游戏,找到他本地判断能否消除的语句,可实现任意两点都能消除。不过他服务器还验证,快消光了,一会又涨回来了。呵呵。本地有两个跳点,一个是判断两个花色是否一样,一个是判断能否消除。
回复

使用道具 举报

2

主题

9

帖子

85

积分

一级会员

Rank: 2

积分
85
 楼主| 发表于 2013-2-7 13:34:55 | 显示全部楼层

~~QQ系列游戏,用Win7/64位忽略一切防护。我用的win7/64的系统~别的系统没试过

~~QQ系列游戏,用Win7/64位忽略一切防护。我用的win7/64的系统~别的系统没试过
回复

使用道具 举报

2

主题

9

帖子

85

积分

一级会员

Rank: 2

积分
85
 楼主| 发表于 2013-2-7 13:37:16 | 显示全部楼层

[quote][size=2][color=#999999]feng 发表于 2013-2-7 10:23[/color] [url=forum.php?mod

feng 发表于 2013-2-7 10:23
用OD看了看这游戏,找到他本地判断能否消除的语句,可实现任意两点都能消除。不过他服务器还验证,快消光了 ...

那你直接调用他判断的函数,消去能消的不就好了~~~本地改数据,果断只能在单机啊~
回复

使用道具 举报

12

主题

176

帖子

1057

积分

四级会员

Rank: 6Rank: 6

积分
1057
QQ
发表于 2013-2-7 17:01:57 | 显示全部楼层

学习了,感谢分享

学习了,感谢分享
再烦也别忘微笑,再急也要注意语调!
即使是不成熟的尝试,也胜于胎死腹中的策略。
回复

使用道具 举报

0

主题

2

帖子

16

积分

新手入门

Rank: 1

积分
16
发表于 2013-2-8 23:23:40 | 显示全部楼层

看来这东西真的可以做辅助了

看来这东西真的可以做辅助了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2020-8-15 12:07 , Processed in 0.062500 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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