V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
jmyz0455
V2EX  ›  Python

Python 做游戏脚本可以做得比按键精灵更快更好吗?

  •  
  •   jmyz0455 · 2016-10-13 15:37:57 +08:00 · 43984 次点击
    这是一个创建于 2999 天前的主题,其中的信息可能已经有所发展或是发生改变。

    平时偶尔会玩某个 Windows 客户端游戏,后来嫌没时间赚金币打不过人民币玩家就很少玩了。某天心血来潮学了按键精灵,写个简单的脚本赚了好多金币,一下子就激活了我的兴趣,兴冲冲列了好多需求(我不知道我是对打游戏感兴趣还是对写代码感兴趣哈哈),结果发现按键论坛很多插件找起来很麻烦,有些要收费,文档也不清晰,在官方社区发帖问了几个问题没什么人回答,热情一下子被浇灭了。

    最近我在学 Python 写服务器脚本,觉得 Python 真是无所不能,我想既然按键精灵可以做到的那 Python 应该也可以吧,而且按键精灵的运行进程太明显了,想封我应该挺简单。我分析了一下,我想要实现的功能无非是:

    1 、让游戏客户端在后台运行,不影响我使用键鼠和软件,学习娱乐两不误。

    2 、识别、提取文字和识别区域内的图片。

    3 、简单的鼠标模拟输入,都是点点点。

    4 、最复杂就是做个小窗口,实时输出日志,显示现在脚本跑到那一步了和现在赚了多少金币等游戏状态。

    有没有人用 Python 做过这种游戏脚本?最好也了解按键精灵的知识,客观分析下用哪种语言做脚本会更快更好?

    第 1 条附言  ·  2016-10-14 12:09:42 +08:00
    评论好乱,很多评论都不知道答主支持哪个,希望大家尽量按这个格式回答:
    一、我选 Python /我选按键 /我知道更好的语言;
    二、我做过 /我知道 Python 或按键脚本可以做到原题目的 1/2/3/4 点;
    三、最后就是吐槽啦。
    第 2 条附言  ·  2016-10-17 12:35:37 +08:00
    很多人没有回答我第四点,第四点很难做啊,我完全不知道脚本精灵能不能做到这一点 @_@

    这个窗口就是拿来滚动输出字符串的,就像 shell 或 console 一样,我自己能够 print 我预设的字符串出来。
    我习惯写日志,那样我就不用手动打开 *.log ,也能实时看到脚本的输出信息。

    比方说就是在 Windows 的桌面上,除了游戏窗口,还有一个 200*200 的小窗口,能够滚动输出 “现在已经匹配到对手了” “已经结束战斗” “正在等待对手” 这些文字。
    第 3 条附言  ·  2016-10-20 11:27:32 +08:00
    @_@ 难道就没人来回答一下需求四那个实时输出框吗?
    就像控制台一样滚动显示代码就行,不知道怎么实现,求思路方案
    45 条回复    2019-02-28 14:46:21 +08:00
    ifishman
        1
    ifishman  
       2016-10-13 16:25:33 +08:00
    易语言专门做这个的
    peter999
        2
    peter999  
       2016-10-13 16:29:36 +08:00
    ahk
    youxiachai
        3
    youxiachai  
       2016-10-13 16:30:13 +08:00
    这不就是外挂了吗......

    一般来说..外挂这种功利性东西...不要指望有啥人会分享这方面经验..

    闷声发大财才是最吼的.
    bearqq
        4
    bearqq  
       2016-10-13 16:40:10 +08:00   ❤️ 1
    用 大漠插件
    或者 天使插件
    天使的主要功能都是免费的
    最早用按键精灵调用天使,后来用 python 调用他来写过
    wyds591101
        5
    wyds591101  
       2016-10-13 16:51:45 +08:00
    我只会写 python 的黑窗口程序~~~
    jmyz0455
        6
    jmyz0455  
    OP
       2016-10-13 17:09:40 +08:00
    @ifishman 我问的是二选一,你这样我就更纠结了:)
    jmyz0455
        7
    jmyz0455  
    OP
       2016-10-13 17:10:37 +08:00
    @peter999 看了一下,感觉不错,你是意思是 AutoHotKey 比那两个都要好?我先了解下
    jmyz0455
        8
    jmyz0455  
    OP
       2016-10-13 17:11:42 +08:00
    @youxiachai 虽然这不是作弊,但的确外挂了呢,你说的我也考虑过,难道只能摸着石头走路?但是我的功能都好简单的啊
    jmyz0455
        9
    jmyz0455  
    OP
       2016-10-13 17:12:26 +08:00
    @bearqq 大漠插件 和 天使插件 都可以被 Python 调用?这两个插件没了解过呢,能简单说一下怎么调用吗
    jmyz0455
        10
    jmyz0455  
    OP
       2016-10-13 17:12:43 +08:00
    @wyds591101 那就帮我顶一下呗:)
    crab
        11
    crab  
       2016-10-13 17:14:26 +08:00
    win api 窗口句柄 鼠标键盘消息 等等
    enenaaa
        12
    enenaaa  
       2016-10-13 17:53:43 +08:00
    按键精灵做的工作比你想象的要多得多, 模拟输入不单是发个 windows 消息就完了的,现在的客户端游戏都有反外挂机制, 很可能需要在驱动层模拟输入,甚至在驱动层反复 hook 纠缠。
    另外如果要最小化后还能获取游戏数据, 你需要直接读取游戏进程的内存,或调用其函数。这就不是模拟输入了。
    bearqq
        13
    bearqq  
       2016-10-13 19:18:51 +08:00
    @jmyz0455 可以看看这个文件,以前双十一写的。
    https://bitbucket.org/bearqq/python/src/1b33f0b2f6990a751ef442dcd5e002d4ad8f6068/old/S1_hhbz.py?at=master&fileviewer=file-view-default
    项目的其他文件也可以参考,这个比较简单。我用的天使,天使的函数可以查看他的 chm 文档。
    pyufftj
        14
    pyufftj  
       2016-10-13 20:09:36 +08:00
    按键精灵现在的功能简直要逆天了。在游戏脚本方面,不得不服。以前粗略学过一段时间。
    写这个东西,最主要的是思路。它的生态系统已经很强大了,谁更快更好不知道。但是没有必要再在 python 下面造轮子了,而且按键的学习成本也不高,好多小学没毕业的人都写游戏脚本来赚钱。
    YingJie
        15
    YingJie  
       2016-10-13 20:39:00 +08:00
    还有 TC
    icedx
        16
    icedx  
       2016-10-13 20:56:05 +08:00
    Python 有 bi 格.
    按键精灵上手比较容易.
    diefishfish
        17
    diefishfish  
       2016-10-13 21:23:48 +08:00
    听说 lua 比较厉害
    Osk
        18
    Osk  
       2016-10-13 21:28:38 +08:00 via Android
    我在想一个问题,有没有这种按键精灵,因为有反外挂的机制,为了模拟输入各种纠结,为何不用 MCU 如 arhuino micro 等做成真正的受控键盘,主机通过串口等发送键位数据,然后像真正的键盘一样发按键,反外挂对这种硬件级的模拟没办法吧
    naomhan
        19
    naomhan  
       2016-10-13 21:45:42 +08:00
    @Osk 按键精灵有硬件版 叫按键盒子
    daveze
        20
    daveze  
       2016-10-13 22:39:25 +08:00   ❤️ 1
    了解下 UI 自动化测试,说简单点其实做的这是这种代替手来点点点的工作, python 下有相关的库来支撑 windows 程序的对象识别,或者实现 ocr 。
    weakiwi
        21
    weakiwi  
       2016-10-14 09:18:58 +08:00 via Android
    234 能做到,之前做过 fifaol3 自动买卡的,就是图像文字识别还是做不好。
    Level5
        22
    Level5  
       2016-10-14 09:36:31 +08:00
    @weakiwi 234 是?
    zhenjiachen
        23
    zhenjiachen  
       2016-10-14 09:57:05 +08:00
    第一次接触的代码就是按键精灵!!!!!
    lianxiaoyi
        24
    lianxiaoyi  
       2016-10-14 10:20:59 +08:00
    那你改写手机的吧 。。。。。。。手机端 触动精灵 体验要比按键精灵体验好 N 倍
    weakiwi
        25
    weakiwi  
       2016-10-14 10:29:55 +08:00 via Android
    @Level5 第二条,第三条,第四条。我是用 winapi 撸的,网上有现成的 python 做外挂的教程
    qooweds
        26
    qooweds  
       2016-10-14 11:14:03 +08:00
    1 和 2,3 有冲突吧?后台运行如何实现 2,3 中的功能?
    jpyl0423
        27
    jpyl0423  
       2016-10-14 11:49:28 +08:00
    按键精灵的大漠插件可以实现大部分的后台操作 原来写过类似的游戏脚本
    大漠有免费版的, 应该够你用的了
    jmyz0455
        28
    jmyz0455  
    OP
       2016-10-14 14:16:54 +08:00
    @enenaaa @pyufftj 好,那我还是选择按键精灵了,但是我想问我的第四点,小窗口怎么做好呢
    jmyz0455
        29
    jmyz0455  
    OP
       2016-10-14 14:26:58 +08:00
    @bearqq @jpyl0423 @weakiwi 那小窗口怎么实现,这个不知道怎么做好
    bearqq
        30
    bearqq  
       2016-10-14 15:02:38 +08:00 via Android
    我记得按键精灵里面可以做界面 直接拖控件 更新控件数值
    bearqq
        31
    bearqq  
       2016-10-14 15:03:30 +08:00 via Android
    @weakiwi 我也写了半自动的买卡,最后合卡炸了超大一个礼花,太棒了!
    jmyz0455
        32
    jmyz0455  
    OP
       2016-10-14 16:38:08 +08:00
    @bearqq @weakiwi 哈哈我说的游戏就是 FIFA OL3 ,我看现成的辅助很多功能都满足不了我,所以就想自己弄一个了,我说的需求 4 有什么建议嚒
    bearqq
        33
    bearqq  
       2016-10-14 17:34:15 +08:00 via Android
    @jmyz0455 那就好说了。。
    弃坑吧。。贬值太快,要么烧钱要么被人玩。。
    歪楼了
    mengskysama
        34
    mengskysama  
       2016-10-15 00:15:47 +08:00   ❤️ 1
    python 做不了,涉及到很底层的东西,调试以及反调试,系统驱动相关的东西 py 没法做。现在能用 winapi 投递消息的游戏没几个了。
    jmyz0455
        35
    jmyz0455  
    OP
       2016-10-15 22:04:00 +08:00
    @bearqq 你说得很对,这游戏贬值太快,幸亏没充过钱
    但是我迷上了用脚本打游戏怎么办:-)
    weakiwi
        36
    weakiwi  
       2016-10-16 21:07:46 +08:00 via Android
    @jmyz0455 我用的是图像识别,但是太费劲了。老实说还是抓包分析比较靠谱。或者你可以先输入自己拥有的金额,然后仅仅判断购买成功的次数(同一个球员购买成功的包应该是一样的吧,一个猜想不一定对),再自己算一个大概的价格咯
    jmyz0455
        37
    jmyz0455  
    OP
       2016-10-17 10:31:36 +08:00
    @weakiwi 我的需求四是原题目里:
    4 、最复杂就是做个小窗口,实时输出日志,显示现在脚本跑到那一步了和现在赚了多少金币等游戏状态。
    weakiwi
        38
    weakiwi  
       2016-10-17 11:01:58 +08:00 via Android
    @jmyz0455 那金币数量(脚本执行结果)你是怎么知道的。有可能网络延时,或者你的笔记本没电了,直接强退了。怎么知道脚本执行一次的确达到了预期的效果
    jmyz0455
        39
    jmyz0455  
    OP
       2016-10-17 12:26:16 +08:00
    @weakiwi 看来重点说错了,我的关注点是做一个小窗口,这个窗口能输出字符串就好了,字符是什么没关系

    就有点像 shell 一样,自己能够 print 字符串出来,我习惯写日志,那样我就不用总是手动打开 *.log 这样子

    就比如说现在我匹配到了对手, Windows10 的桌面上除了游戏窗口还有一个 200*200 的小窗口,能够滚动输出“现在已经匹配到对手了”这样。
    jmyz0455
        40
    jmyz0455  
    OP
       2016-10-17 12:36:35 +08:00
    @qooweds 貌似是模拟输入
    jmyz0455
        41
    jmyz0455  
    OP
       2016-10-20 11:29:08 +08:00
    @lianxiaoyi 但我是 PC 端游
    jmyz0455
        42
    jmyz0455  
    OP
       2016-12-05 17:06:58 +08:00
    有大兄弟回答一下我第四个问题嚒
    求帮顶
    wizardforcel
        43
    wizardforcel  
       2017-06-16 19:46:19 +08:00 via Android   ❤️ 1
    autopy 是控制鼠标的,不是控制窗体的,你游戏做多强的防护也白搭。

    另外如果你用了模拟点击,你的图像分析算法一定要好。你的程序质量完全取决于你的算法。
    Antigen
        44
    Antigen  
       2017-08-04 15:19:43 +08:00
    @jmyz0455 我最近也在纠结这个问题。这过去好几个月了,想知道题主现在如何选择的?能留个联系方式吗?互相学习
    xiangdaoni
        45
    xiangdaoni  
       2019-02-28 14:46:21 +08:00
    楼主最后选择的哪一个?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1373 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:10 · PVG 01:10 · LAX 09:10 · JFK 12:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.