暗黑破坏神吧 关注:679,744贴子:20,501,574

关于使用按键精灵对战网所有副本的教学(示例经典战网)

只看楼主收藏回复

将陆续对各个场景的脚本进行详细讲解,并附上脚本附件


IP属地:内蒙古来自Android客户端1楼2021-01-10 09:52回复
    然后呢?


    IP属地:浙江3楼2021-03-03 11:11
    回复
      好忙,我有空做一下


      IP属地:内蒙古来自Android客户端4楼2021-03-03 15:20
      收起回复
        期待期待


        IP属地:北京来自Android客户端5楼2021-03-14 17:22
        回复
          上面的内容很多,都是很核心的解释,这个时候我们已经进入了游戏,在罗格营地里,接下来我门需要走到小站上,然后点击石旷荒野,然后用VIP护身符开启一个红门,打怪捡东西,+1重建房间如此循环。
          //出城
          MoveTo 870, 480
          Delay 300
          LeftClick 1
          Delay 600
          FindColor 816,31,1452,298,"F4F4CC",intX,intY
          If intX > 0 And intY > 0 Then
          MoveTo intx, inty
          Delay 500
          leftClick 1
          Delay 2500
          MoveTo 523, 384
          Delay 900
          LeftClick 1
          Delay 700
          Else
          Delay 500
          MoveTo 1352, 690
          Delay 500
          LeftClick 1
          Delay 1500
          MoveTo 1050, 440
          Delay 500
          LeftClick 1
          Delay 900
          FindColor 243,40,1086,377,"F4F4CC",intX,intY
          If intX > 0 And intY > 0 Then
          MoveTo intx, inty
          Delay 500
          leftClick 1
          Delay 1700
          MoveTo 523, 384
          Delay 700
          LeftClick 1
          Delay 500
          End If
          End If
          解释:以上是后期经常遇到的一个随机地图的处理方式,A1小站位置每次进去都不一样,我们需要找规律,使用1600*900分辨率,如果A1小站出现在屏幕右上角,我就直接点击小站走过去,如果不在这个位置,我就往下走,然后再找小站。
          可以看到脚本里,我没有写找找小站的截图,而是用找颜色的命令来判断,这个颜色是小站上燃烧的两个火苗的颜色,非常特殊,我在固定区域找这个颜色,如果有,则执行点击这个火苗,否则执行B方案,B方案内再嵌套一个找另一个位置是否有火苗的IF,这和excel里多层嵌套IF函数一模一样,建议最多嵌套两层,否则脑子就糊涂了。
          之后执行容错判断脚本
          Delay 500
          FindPic 1468,27,1606,89,"Attachment:\罗格营地.bmp",0.9,intX,intY
          If intX > 0 And intY > 0 Then
          Delay 500
          Goto chongjian
          End If
          Delay 200
          按道理,我已经出城了,为了保险,我找屏幕右上角,是否有“罗格营地”字的透明图,如果找到了,就证明我出城失败,执行goto 重建命令,我会在脚本最后+1前,写一个rem chongjian,goto chongjian 就是不管现在执行什么,我直接跳到rem标记的这个位置。这样我就保证即便没出去城,我也+1能重来一遍。
          //用技能,加状态白骨盾冰盾
          Delay 200
          Call 上状态
          Delay 200
          KeyPress "F3", 1
          Delay 200
          //上状态
          Sub 上状态
          Delay 200
          KeyPress "F4", 1
          Delay 200
          RightClick 1
          Delay 200
          KeyPress "F5", 1
          Delay 200
          RightClick 1
          Delay 200
          KeyPress "F6", 1
          Delay 200
          RightClick 1
          Delay 200
          End Sub
          KeyPress "S", 1
          Delay 800
          MoveTo 1260, 817
          Delay 500
          LeftClick 1
          Delay 800
          RightClick 1
          Delay 1100
          MoveTo 791, 350
          Delay 200
          LeftClick 1
          Delay 1000
          MoveTo 1034, 379 //鼠标移动到门上
          Delay 500
          以上脚本是加状态,我这里用到一个函数是子程序的命令,Sub 上状态 --end sub,我定义一段语句为 上状态,后期我只要想上状态,我就可以使用一个 Call 上状态 的命令就行,当然你也可以不用子程序,直接复制那一大段再执行一遍也行,但是子程序的优点在于,方便修改,比如你换角色上快捷键需要把F6改为F7,你只要改子程序就行。
          FindPic 0,0,1593,889, "Attachment:\地牢.bmp", 1.0, intX, intY
          If intX > 0 And intY > 0 Then
          Delay 500
          MoveTo 1364, 215
          Delay 300
          KeyPress "F3", 1
          Delay 200
          RightClick 1
          Delay 480
          RightClick 1
          Delay 480
          RightClick 1
          Delay 480
          MoveTo 711, 238
          Delay 200
          RightClick 1
          Delay 460
          Delay 1000
          Else
          GOTO bfangan
          End If
          Delay 700
          FindPic 0,0,1593,889, "Attachment:\2140.bmp", 1.0, intX, intY
          If intX > 0 And intY > 0 Then
          MoveTo intx - 4, inty + 2
          Delay 500
          KeyPress "F3", 1
          Delay 500
          RightClick 1
          Delay 500
          MoveTo 804, 439
          Delay 500
          LeftClick 1
          Delay 500
          End If
          Delay 700
          FindPic 0,0,1593,889, "Attachment:\2140.bmp", 1.0, intX, intY
          If intX > 0 And intY > 0 Then
          MoveTo intx - 4, inty + 4
          Delay 500
          LeftClick 1
          Delay 500
          End If
          Delay 700
          FindPic 0,0,1593,889, "Attachment:\2140.bmp", 1.0, intX, intY
          If intX > 0 And intY > 0 Then
          MoveTo intx - 4, inty + 4
          Delay 500
          LeftClick 1
          Delay 500
          End If
          Delay 1000
          Goto CHONGJIAN
          Rem bfangan
          Delay 1000
          KeyPress "F3", 1
          Delay 200
          MoveTo 334, 128
          Delay 300
          RightClick 1
          Delay 450
          MoveTo 262, 193
          Delay 400
          RightClick 1
          Delay 450
          MoveTo 265, 178
          Delay 450
          RightClick 1
          Delay 2300
          Delay 700
          FindPic 0,0,1593,889, "Attachment:\2140.bmp", 1.0, intX, intY
          If intX > 0 And intY > 0 Then
          MoveTo intx - 4, inty + 2
          Delay 500
          KeyPress "F3", 1
          Delay 500
          RightClick 1
          Delay 500
          MoveTo 804, 439
          Delay 500
          LeftClick 1
          Delay 500
          End If
          Delay 700
          FindPic 0,0,1593,889, "Attachment:\2140.bmp", 1.0, intX, intY
          If intX > 0 And intY > 0 Then
          MoveTo intx - 4, inty + 4
          Delay 500
          LeftClick 1
          Delay 500
          End If
          Delay 700
          FindPic 0,0,1593,889, "Attachment:\2140.bmp", 1.0, intX, intY
          If intX > 0 And intY > 0 Then
          MoveTo intx - 4, inty + 4
          Delay 500
          LeftClick 1
          Delay 500
          End If
          Delay 700
          以上语句是,进入女伯爵红门后,这个图有两种情况随机,需要判断一下,把鼠标移动到图1地牢们上,鼠标上方会显示出地牢5曾的字眼,我门找地牢这两个字,如果找到,就证明我在图1,否则我就go to 到B方案。
          我们tp到女伯爵脚下,延时3秒后开始捡东西,捡东西我做的透明图,显示了物品代码,比如A1要是代码为2140我就找这个,然后鼠标移动到物品上点右键TP,永远都会tp到物品正上方,物品的位置永远固定是屏幕中间,然后我点击左键捡一下,然后鼠标挪到屏幕左上角,然后再地上找一次,万一爆了3把钥匙。
          KeyPress "B", 1
          Delay 1000
          //打开箱子
          MoveTo 1095, 402
          Delay 200
          MoveTo 1095, 402
          Delay 200
          RightClick 1
          Delay 500
          //检查箱子是否被打开,否则out
          FindPic 584,450,711,569, "Attachment:\转换符号.bmp", 0.9, intX, intY
          If intX < 0 And intY < 0 Then
          GOTO chongjian
          End If
          Delay 300
          //如果道具栏里有3个A1钥匙则开始合成操作
          //道具栏里精华变量
          n = Lib.图像.查找屏幕图片数量(813, 384, 1120, 629, "Attachment:\A1钥匙.bmp", 0.9)
          Delay 100
          If n >= 3 Then
          Do
          //箱子里精华数量变
          mmm = Lib.图像.查找屏幕图片数量(482, 238, 807,505, "Attachment:\A1钥匙.bmp", 0.9)
          Delay 100
          If mmm = 3 Then
          Exit do
          End If
          FindPic 808,377,1114,629, "Attachment:\A1钥匙.bmp", 0.9, intX, intY
          If intX > 0 And intY > 0 Then
          MoveTo intx + 5, inty + 5
          Delay 200
          LeftClick 1
          Delay 300
          MoveTo 1095, 402
          Delay 200
          LeftClick 1
          Delay 300
          End If
          Loop
          //如果背包里没有9个精华,则退出游戏
          Else
          Goto chongjian
          End If
          //背包里现在已经有9个精华了,点击合成2次,合成精华包
          Delay 500
          MoveTo 640, 515
          Delay 500
          LeftClick 1
          Delay 500
          //点击精华包仍在地上
          MoveTo 773, 468
          Delay 500
          LeftClick 1
          Delay 500
          MoveTo 345, 233
          Delay 500
          RightClick 1
          Delay 500
          //对道具栏进行操作丢失物品,搜索道具栏,如果出现则跳转到重建游戏
          FindPic 428,194,1185,704,"Attachment:\道具栏的关闭.bmp", 0.9, intX, intY
          If intX > 0 And intY > 0 Then
          MoveTo intx + 5, inty + 5
          Delay 300
          LeftClick 1
          Delay 300
          Else
          GOTO chongjian
          End If
          //捡地上的A1钥匙扣
          Delay 1000
          FindPic 0,0,1593,899,"Attachment:\2165.bmp",1.0,intX,intY
          If intX > 0 And intY > 0 Then
          Delay 1500
          MoveTo intx - 2, inty + 2
          Delay 400
          LeftClick 1
          Delay 500
          End If
          Rem chongjian
          Delay 800
          KeyPress "=", 1
          Delay 3000
          以上,和合成篇,因为A1钥匙需要合成钥匙串,否则太占地方。这里我用到了一个查找目标图片数量的插件函数+一个循环函数,当我打开背包和箱子后,我检查右面背包的大钥匙是否大于3个,如果大于三个,我就一直循环执行合成,否则我就停止合成,并终止循环。
          还有一种情况会经常用到,就是要把合成的物品仍在地上,再捡起来,因为无法判断右边背包哪里有空格,这里面空格看上去黑色的,其实每个空格都不一样,很难搞定,不如直接再捡起来,肯定没问题。
          最后标记一个rem chongjian 为了方便前面的语句,做失败判断后跳转到+1


          IP属地:内蒙古7楼2021-03-18 22:20
          回复
            案例2:A2召唤者钥匙
            有了案例一的详细说明,A2钥匙就比较简单了,到小站,需要从A2进入后,先往右走,再往上,再往左,再右上进入小站,绕个圈子是因为往左走会经常碰到NPN出现意外,这里直接就用固定坐标移动就行。
            进入庇护所后,有四个方向,我需要选择有绿色指引线的那个方向进行tp。
            这里可以用,找颜色方式判断,
            FindColor 1036,539,1149,625,"00FC18",intX,intY
            If intX > 0 And intY > 0 Then
            一大段语句,包括tp,打怪,捡东西,打开背包,合成钥匙
            end if
            四个方向一共需要写四段这样的
            原理就是,在屏幕中画个长方形,找四条边区域内是否有绿色,如果有,则执行提前录制好的移动语句。
            案例3:A5 钥匙
            鼠标固定到小站,到痛苦厅,在1600*900分辨率下,可以在小地图上看到一个瓦特厅的字眼,不管那种随即图都可以看到,将鼠标移动到这个字眼上,一直右键TP 5秒后,这个延时自己掌握,正好能到瓦特厅的入口,然后再找地下入口那个截图,也不用做什么透明图,就截一大片,相似度设置0.8,找到为止,然后点击进入这个坑。
            进入瓦特厅之后,出现四个方向,这个和A2钥匙一样,四个方向,再写四段脚本就行。
            案例4:牛场
            牛场一般都有VIP能直接开门,有些MOD需要到崔斯特姆捡牛腿合成,之类,这个从石矿荒野到崔斯特姆的石柱是个难点
            tt = now
            FindPic 0, 0, 1599, 899, "Attachment:\石柱.bmp", 0.8, intX, intY
            If intX > 0 And intY > 0 Then
            Delay 500
            MoveTo intx, inty
            Delay 200
            RightClick 1
            Delay 500
            MoveTo 808, 543
            Delay 1000
            LeftClick 1
            Delay 500
            Goto cuisi
            Else
            Do While intx = - 1
            Call move
            Delay 300
            KeyPress "Tab", 1
            Delay 300
            Call zhaotu
            Delay 300
            KeyPress "Tab", 1
            Delay 300
            call jishi
            Loop
            //退出循环
            End If
            Sub move
            //次找绿点
            Delay 300
            FindPic 0,0,1593,889,"Attachment:\绿点.bmp",1.0,intX,intY
            If intX > 0 And intY > 0 Then
            If intX > 854 Then
            intZ = 481 + 571 * (intY - 480) / (intX - 854)
            Delay 200
            If 35 < intZ < 840 Then
            MoveTo 1425, intZ
            Delay 200
            RightClick 1
            Delay 400
            RightClick 1
            Delay 400
            Elseif intZ <35 then
            MoveTo 890, 34
            Delay 200
            RightClick 1
            Delay 400
            RightClick 1
            Delay 400
            Elseif intZ >=840 then
            MoveTo 890, 840
            Delay 200
            RightClick 1
            Delay 400
            RightClick 1
            Delay 400
            End If
            End If
            If intX < 854 Then
            intZ = 481 - 637 * (intY - 480) / (intX - 854)
            Delay 300
            If 35 < intZ < 840 Then
            MoveTo 87, intZ
            Delay 200
            RightClick 1
            Delay 400
            RightClick 1
            Delay 400
            Elseif intZ <35 then
            MoveTo 330, 34
            Delay 200
            RightClick 1
            Delay 400
            RightClick 1
            Delay 400
            Elseif intZ >=840 then
            MoveTo 330, 840
            Delay 200
            RightClick 1
            Delay 400
            RightClick 1
            Delay 400
            End If
            End If
            Else MoveTo 973, 430
            Delay 200
            LeftClick 1
            Delay 400
            End If
            End Sub
            Sub zhaotu
            FindPic 0, 0, 1599, 899, "Attachment:\石柱.bmp", 0.85, intX, intY
            If intX > 0 And intY > 0 Then
            Delay 500
            MoveTo intx, inty
            Delay 200
            RightClick 1
            Delay 500
            MoveTo 808, 543
            Delay 1200
            LeftClick 1
            Delay 500
            Goto cuisi
            End If
            End Sub
            Sub jishi
            If DateDiff("s", tt, now) >= 30 Then
            Goto chongjian
            End If
            End Sub
            Delay 1000
            Rem cuisi
            Delay 600
            MoveTo 296, 672
            Delay 600
            RightClick 1
            Delay 500
            RightClick 1
            Delay 600
            RightClick 1
            MoveTo 280, 219
            Delay 600
            RightClick 1
            Delay 600
            RightClick 1
            Delay 600
            RightClick 1
            Delay 600
            RightClick 1
            Delay 1800
            //通过找打脚丫子进入免费红门
            Delay 100
            FindPic 0,0,1593,889, "Attachment:\红门3.bmp", 0.1, intX, intY
            Delay 300
            If intX > 0 And intY > 0 Then
            Delay 300
            MoveTo intx + 20, inty + 40
            Delay 300
            KeyPress "F3", 1
            Delay 500
            RightClick 1
            Delay 300
            MoveTo 804, 439
            Delay 300
            LeftClick 1
            Delay 800
            Else
            Goto chongjian
            End If
            Delay 300
            以上这段是刚到石矿小站,我们的目标图是石柱子,需要费心点做个透明图,一进小站就找石柱子,因为有时候石柱子就在小站旁边,如果没有找到,则执行判断逻辑,这个判断逻辑是核心,很多人看不明白,从小站到石柱子会有一个绿色指引线,我们手工操作就是跟着线去tp,找到石阵,进入红门。
            我们把屏幕画个十字,分成四个区域,我们找那个绿色的指引线的原点,如果这原点在右上角区域内找到,那么酒吧鼠标移动到固定位置右上角tp2次,然后再找一次石柱,如此反复循环。比如我右上角tp2次,tp过头了,绿点出现在左上角区域,那么第二次循环就会鼠标放到左上角tp2次,再找石柱,最后肯定能找到石柱。
            进入了崔斯特姆后,就就可以找牛腿了,这里有个问题,就是牛腿的颜色因为属性不一样有可能是红色,也有可能是蓝色,黄色之类的,这是因为mod有变色补丁,这就需要我们把5种颜色的牛腿都做好图找一次,然后才能放入箱子进行合成。
            还有一种办法,就是通过遍历方式,就是把鼠标一格一格的在背包内移动,如果出现牛腿的字眼,就证明鼠标放在牛腿上了,然后执行合成,这样会慢一点,但是十分可靠。
            同样用到遍历的情况有,比如一个场景开了一个红门,这个红门还被柱子或墙挡住了,如果这个红门没挡住,我们可以直接用红门截图,相似度0.1直接查找就行,如果被挡住了,我们可以先找,找不到则执行把鼠标放在屏幕上,一格一格的移动,这个鼠标总会放到红门上,显示出红门上方的副本名字,然后就可以进入这个红门了,这个遍历比较复杂,可以参考一下语句
            如果遍历15秒钟还没找到,则跳出循环,只要是循环必须有个跳出时间限制,否则容易卡死。
            这个是十八层地狱副本中的一层
            本帖中牛腿,还有十八层地狱的复杂脚本编写都为zhu01000,特此鸣谢。
            //十一层地狱
            Sub shiyiceng
            tt = now
            Do
            Delay 200
            MoveTo 518, 70
            Delay 300
            RightClick 1
            Delay 500
            MoveTo 411, 94
            Delay 300
            RightClick 1
            Delay 500
            If DateDiff("s", tt, now) >= 15 Then
            Exit Do
            End if
            Loop
            Call wucai
            Delay 1500
            Call hongmen2
            Delay 500
            FindPic 1450,34,1600,189,"Attachment:\十一.bmp",1.0,intX,intY
            If intX > 0 And intY > 0 Then
            Delay 500
            Call 小地图小黄圈
            Delay 500
            M = 800
            For 7
            N = 1560
            For 19
            MoveTo N, M
            N = N - 80
            Delay 300
            FindPic 0,0,1561,893,"Attachment:\10.bmp",1.0,intX,intY
            If intX > 0 And intY > 0 Then
            Delay 300
            RightClick 1
            Delay 300
            MoveTo 803, 431
            Delay 500
            LeftClick 1
            Delay 1000
            Goto f12
            End If
            Next
            M = M - 100
            Next
            Goto chongjian
            End if
            End Sub


            IP属地:内蒙古8楼2021-03-18 22:55
            回复
              进阶高手篇
              将多个场景整合:例如把A1\A2\A5整合成一个,都打一遍,检查背包里是否够合成娃娃的钥匙数量直接合成娃娃,并且每次+1后,先打开储物箱,把合成好的娃娃放在仓库内。每次进去判断是否死亡再捡尸体。
              GM防查房篇:
              这需要涉及到双线程:原理是主线程一直挂机刷怪,副线程每隔0.2秒检查是否有人进入房间,就是不停的XX进入暗黑世界这个字眼的图,如果发现有人进入房间则按下主线程副本1的热键,当屏幕上出现XX离开暗黑世界后,再恢复主线程。
              比如下面这个例子:我另写一个脚本为防查房,主脚本设置暂停/继续热键为:Pause/Break,我把两个脚本同时勾选F10启动,这样两个脚本就会独立的执行。当有人进来后我就不动,人一走我继续刷。
              //请勾选主脚本一起执行,主脚本暂停/继续热键为Pause/Break
              Do
              FindPic 0,23,585,347,"Attachment:\进入.bmp",1.0,intX,intY
              If intX > 0 And intY > 0 Then
              Delay 500
              KeyPress "Pause/Break", 1
              Delay 500
              Exit Do
              End If
              Loop
              Delay 500
              Do
              FindPic 0,23,585,347,"Attachment:\离开.bmp",1.0,intX,intY
              If intX > 0 And intY > 0 Then
              Delay 500
              KeyPress "Pause/Break", 1
              Delay 500
              Exit Do
              End If
              Loop
              Delay 500
              多开辅助工具:
              经常有需要多开打旗帜的需求,8开非常累,可以利用按键精灵的后台插件脚本,实现主屏幕一直玩的情况下,另外7个号陆续进入主游戏。
              准备条件:
              1个主号、7个小号
              桌面游戏快捷方式,创建2个,
              主号进入的图标快捷方式命令为:C:\暗黑破坏神2毁灭之王\D2Loader.exe -w -pdir Plugin
              小号为为:C:\暗黑破坏神2毁灭之王\D2Loader.exe -w -pdir Plugin -title 多开小号 ;分辨率需要选择为800*600进入
              这样做的目的就是让7个小号的窗口内容为“多开小号”这四个字,而主号窗口上什么字都没有,这样就能区分对待了。
              脚本解释:
              1、遍历所有窗口,把带 多开小号字眼的窗口,记录在系统里,并且给出一个这样窗口的个数值为MyArray
              2、我们取到这个数值为7,(如果我们只开了4个小号,这个值就是4)
              3、执行for循环,循环次数为MyArray这个变量,7个小号就循环7次,4个小号就循环4次,循环内容为:将小号1窗口挪到0,0坐标,就是屏幕左上角,然后用后台鼠标移动插件语句,鼠标移动到固定点,点击开始、加入
              4、使用方法:主号先+1,然后执行下脚本,小号跟着都+1,点击开始-加入游戏,因为房间号都一样,这样小号就都进来了。
              我这里的+1设置的是键盘的=号,根据键位查询为187,如果你的不一样,需要查询好后修改这个值。
              这个多开脚本鸣谢Meteora
              //下面这句是按查找方式(模糊),遍历符合窗口类名(0)且标题("多开小号")的句柄,保存到数组(HwndEx)里
              HwndEx = Plugin.Window.SearchEx(0,"多开小号",0)
              //下面这句用于分割字符串,将获得的句柄组分割
              dim MyArray
              MyArray = Split(HwndEx, "|")
              If UBound(MyArray)>=0 Then
              i=0
              For UBound(MyArray)
              Delay 100
              Call Plugin.Window.Move(MyArray(i), 0, 0)
              Delay 200
              Call Plugin.Bkgnd.KeyPress(MyArray(i), 187)//按= +1
              Delay 2000
              Call Plugin.Bkgnd.LeftClick(MyArray(i), 710, 459)
              Delay 800
              Call Plugin.Bkgnd.LeftClick(MyArray(i), 702, 421)
              i=i+1
              Next
              End If
              忘记说了,我每次游戏分辨率都是1600*900,双击抬头,再双击一次,窗口会自动到了左上角,所有脚本都是这个位置写的。


              IP属地:内蒙古9楼2021-03-18 23:30
              回复
                技术贴,不懂。围观


                来自Android客户端11楼2021-03-18 23:32
                回复
                  牛场一般都有VIP能直接开门 有些MOD需要到崔斯特姆捡牛腿合成


                  IP属地:浙江12楼2021-03-18 23:44
                  收起回复
                    后期买了个云主机,弄了个服务器,简单尝试修改技能伤害,范围,玩了一下,发现学的东西更多了,实在整不了了。
                    想了解服务器架设的,可以看看b站有个神话gm的视频,一共三节课很受用。


                    IP属地:内蒙古13楼2021-03-18 23:55
                    收起回复
                      这是被吞的一楼
                      我也不是计算机专业,完全是小白,最早接触按键精灵是工作中有重复操作,使用录制的功能完成简单重复性操作,后来接触游戏,组后把暗黑一款肝的游戏,变成抽空写语句,电脑g机,回家看收获的养成类游戏。
                      以下将由浅入深,对按键精灵进行讲解,这并不只是游戏,工作中也会有很多收获的。
                      以下脚本适用于原版相似的,就是增加点副本,修改点技能,增加点物品的,画面还需要和原版一致
                      一、案例1:A1钥匙-出城开红门
                      //这段脚本是对鼠标所在窗口设置前置,这是避免出现意外打开网页或者鼠标点到桌面上其他图标,这段是利用了按键精灵窗口插件的功能,想了解命令可以到插件中找到这个的说明
                      Hwnd = Plugin.Window.Foreground()
                      Delay 400
                      Call Plugin.Window.Top(Hwnd, 0)
                      //下面的是点开始--创建游戏,我先设置了一个随机的变量,这个是为了输入房间号变成随机数,而不是一直+1,容易引起怀疑;接下来的一段DO--LOOP是一段循环函数,配合TT1=NOW,可以实现指定时间内循环找图,这段脚本适用于非常多的场景。例如我+1后不知道什么时候可以页面显示出可以点开始,也许系统快时候2秒就行了,有时候卡了需要5秒,那么用这段函数,就可以在13秒内一直找开始的按钮,不管几秒内出现,我都可以瞬间点击开始,并且通过EXIT DO跳出循环,13秒的设置,是我对这个页面预估的最大时间。
                      以下将对这段进行拆解讲解
                      tt1 = now
                      定义变量TT1=这行这行记录时候的时间
                      DO LOOP 开始循环
                      循环第一条指令为
                      If DateDiff("s", tt1, now) >= 13 Then
                      Exit Do
                      end if
                      这个的意思就是,我检查这条记录的时间和上面记录TT1时间差,是否超过13秒,如果超过就终止do循环,这样的会避免语句一直找不到开始按钮,一直卡在这个循环内。
                      正常情况下13秒检查这条记录,肯定是这个时间差是小于13秒,所以上面那条IF不会被触发,
                      然后开始继续执行下面的语句
                      FindPic 506,425,671,542,"Attachment:\开始按钮.bmp",0.5,intX,intY
                      If intX > 0 And intY > 0 Then
                      MoveTo intx, inty +


                      IP属地:内蒙古来自Android客户端14楼2021-03-20 15:40
                      回复
                        然后开始继续执行下面语句
                        FindPic 506,425,671,542,"Attachment:\开始按钮.bmp",0.5,intX,intY
                        If intX > 0 And intY > 0 Then
                        MoveTo intx, inty + 5
                        Delay 500
                        LeftClick 1
                        Delay 500
                        上面这段缺个END IF,因为我把end if写到最下面了,上面这段是按键精灵最核心的最常用的语句,找一个图片,找的范围是屏幕左上角坐标和右下角坐标之间的矩形,相似度是50%,图片路径使用脚本附件路径,这个路径就是要把找的图片上传到附件选项,找到图标的左上角那个点的坐标后,对这个坐标定义为 intX intY。
                        然后开始IF函数,如果 intX intY,大于0(如果屏幕上没有这个图,找到的坐标将是-1,-1,所以用>0来区分是否找到图片),then那么就开始执行下面的语句,MoveTo intx, inty + 5,移动到 intx, inty这个变量,我在变量后面写了个+5的意思就是坐标向下偏移5个像素点的位置,因为找到的坐标都是左上角,所以基本所有语句都需要加一个向右、向下的变量,也就是+5,如果要向左、向上就是-5。现在鼠标已经找到开始按钮,并且移动到这个图标上了,Delay 500--LeftClick 1--Delay 500,这个是延时命令500就是500毫秒,半秒的意思,半秒后执行点击鼠标左键1下,这个点击鼠标命令可以在鼠标命令里找到,所有操作都需要设置延时,否则同一时间内执行两个命令肯定会出问题的。
                        之后到了创建房间窗口,执行SayString "noin-"--Delay 200--SayString suijiSayString suiji,这个是喊话的语句,输入noin-",200毫秒后再的输入上面定义的三位数随机数,最后房间号就是noin-861这样结果。
                        最后再执行MoveTo 678, 443,这个是固定坐标移动鼠标,移动到开始按钮上并点击一次,正是因为脚本内有很多这样固定坐标移动的命令,所以导致1024*768,1600*900等等分辨率不同的电脑无法共用一个脚本,比如我的脚本常用1920*1086的电脑,暗黑为1600*900分辨率打开,你想用我的脚本也必须用这个分辨率。
                        那么创建游戏就完成了,接下来加上EXIT DO


                        IP属地:内蒙古来自Android客户端15楼2021-03-20 15:41
                        回复
                          接下来加上EXIT DO,已经进入游戏了,目的达到了,就需要退出循环了,之后再加end if,这个是对If intX>0这段的结束,再loop,是对开通的DO的结尾。
                          这段中还涉及到一个找图,图片的做法,还有相似度0.5,50%是什么意思,我这款是核心内容,请打开按键精灵--抓抓--点击图像--点击截屏--用鼠标按住不放往右下拖松手--点击用图形处理打开--进入图像处理页面--点击右下角放大按钮--发现你所选的图片变成网格状的了,每一个网格就是一个分辨率点,坐标里往右移动1,就是一个格子的距离,50%相似度就是你要找的图片的像素点的位置和颜色,在整个屏幕内任何区域有一半的颜色或者位置相同,这就需要我们找图时候尽可能找屏幕中最不同的地方去定位,哪怕这个位置和实际想点的位置相差很远,我们也可以通过+偏移量500这么大的数值来点到想要的位置。
                          常见的作图方法,相似度经常需要改为1.0就是100%吻合,这就需要作透明图了,比如右上角写着崔斯特姆这四个字,我需要判断我现在所处的场景是否在这里,就需要找这四个字的图片,我先截图,做透明图,就是把除了这个字以外的地方都用填充、和铅笔把每个网格都涂成一个颜色,比如说我都涂成红色,那么系统就认为底色一样的地方就是透明的,系统只找这四个字的颜色区域,涂色的时候需要保证最少四周一圈都是红色的,这样系统才认。
                          suiji = lib.算法.随机数字串(3)
                          tt1 = now
                          Do
                          If DateDiff("s", tt1, now) >= 13 Then
                          Exit Do
                          End If
                          Delay 100
                          FindPic 506,425,671,542,"Attachment:\开始按钮.bmp",0.5,intX,intY
                          If intX > 0 And intY > 0 Then
                          MoveTo intx, inty + 5
                          Delay 500
                          LeftClick 1
                          Delay 500
                          SayString "noin-"
                          Delay 200
                          SayString suiji
                          Delay 500
                          MoveTo 678, 443//创建游戏
                          Delay 500
                          LeftClick 1
                          Delay 3000
                          Exit Do
                          End If
                          Delay 100
                          Loop


                          IP属地:内蒙古来自Android客户端16楼2021-03-20 15:41
                          回复
                            哇,太棒啦


                            IP属地:浙江17楼2021-03-20 15:54
                            回复
                              楼主有a4打大菠萝的脚本介绍吗?


                              IP属地:浙江来自Android客户端19楼2021-06-21 13:08
                              收起回复