Python 做游戏脚本可以做得比按键精灵更快更好吗? - V2EX
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 44527 次点击
    这是一个创建于 3285 天前的主题,其中的信息可能已经有所发展或是发生改变。

    平时偶尔会玩某个 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     Solana     2678 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 02:30 PVG 10:30 LAX 19:30 JFK 22:30
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86