游戏脚本一般情况指的都是基于图像识别的前端脚本,而非内存挂。
即识别游戏窗口内容,判断是否需要执行某些操作来打到自动化目的的。
废话不多说,直接开干。

为什么选择 TC + 大漠 的组合

游戏脚本工具就这么几种,按键精灵、易语言都是常用的游戏脚本工具,那么我为什么会选择TC呢

  1. 按键 和 TC 都很容易上手,我最开始是用按键写的,完成脚本功能啥的没有任何问题,但是和TC相比,生成出单包exe更麻烦一些,不像TC只需要一个生成按钮就可以。
  2. 易语言的开发界面和中文的开发语言,不太适合以后转战其他编程语言,TC则有中英文两种开发方式。
  3. 按键和易语言知名度更高一些,可能更容易被游戏识别为外挂,虽然他们都有各自的保护方式。但是我不会用  ̄□ ̄||

选择大漠的原因就简单多了,因为他稳定,各方面。
本文基于 TC7.0 + 大漠3.1123(最后一个免费版本)

上代码

注册 dm.dll 到系统

1
2
3
4
5
6
7
regdll("rc:dm.dll", true) 
// 注册插件 rc:表示的是TC中的资源目录 我把dm.dll放在项目资源目录里了
// 可以选择在TC内注册,也可以事先注册到系统,就不需要在这边注册了(毕竟注册dll可能会被WD报毒)
dm = com("dm.dmsoft")
// 创建com对象
dm.SetPath(program_path)
// 设置全局路径

绑定窗口句柄

1
2
3
4
5
6
7
8
9
hwnd = dm.FindWindow("","记事本") 
// 先查找窗口句柄
dm.BindWindow(hwnd,"dx","dx","dx",0)
// 再执行绑定操作,一般脚本都是后台操作,所以选择后台的绑定方式,DM的文档里有具体的绑定方法
// 绑定方式根据不同的游戏进程可能会不一样,主要根据哪种绑定方式可以正确识别画面,正确执行操作来决定
// 有些情况会绑定失败,多试试不同的模式来绑定
dm.SetDict(0, getrcpath("rc:dm_soft.txt"))
// 绑定成功之后再进行字库的绑定,用来做文字识别
// getrcpath是TC库中返回TC资源路径绝对路径的接口

识图

  1. 使用TC右上角工具箱的”AB抓抓” AB抓抓
  2. 在图像中选择我们需要的游戏窗口句柄 AB抓抓
  3. 框选截取我们需要识别的图片并保存
  4. 调用DM接口来识图
    1
    2
    3
    4
    5
    dm.FindPic(0,0,2000,2000,"1.bmp|2.bmp|3.bmp","000000",0.9,0,intX,intY)
    // 这里找了三张图,用竖线分割
    if(intX >= 0 && intY >= 0)
    messagebox("找到")
    end

识字

识字稍微麻烦一些

  1. 先根据 “识图1-3” 的步骤保存需要识字的图片
  2. 打开大漠综合工具,加载刚才保存的图片
  3. 选取文字部分颜色
  4. 提取点阵(单个或多个都可)(单个是把所有文字看做一个整体,多个是一个字一个字的定义)
  5. 选择点阵并定义对应点阵的内容 P.S.记得看下右上角的字库文件是不是你需要使用的那个字库
    识字操作
  6. 调用DM接口来识字
    1
    2
    3
    4
    5
    dm.FindStr(0,0,2000,2000,"快速制透明图","000000-000000",1.0,intX,intY)
    // "快速制透明图"是需要识别的文字,"000000-000000"是刚刚大漠综合工具中色彩描述的部分—"RGB-偏色"
    if(intX >= 0 && intY >= 0)
    messagebox("找到")
    end

鼠标键盘操作

1
2
3
4
5
dm.MoveTo(x,y)
dm.LeftClick()
// 鼠标操作 鼠标移动到指定位置再点击
dm.KeyPress(13)
// 键盘操作(键码)

适用范围

基本上只要是你自己可以用鼠标键盘操作的步骤都可以用脚本实现,只是需要考虑流程上更加完善

如果有什么疑问可以留言探讨