吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5890|回复: 33
收起左侧

[Python 转载] 根据游戏规律制作脚本之自动钓鱼

  [复制链接]
xhtdtk 发表于 2021-8-14 18:36
本帖最后由 xhtdtk 于 2021-8-14 19:13 编辑

直接开始:
(一)针对上个文章最后提出的两个问题做解答
1、是否触发了自动寻路
可以通过获取坐标链接来掌握我们现在的位置,在聊天框复制链接后通过剪贴板print出来
1.png

[Python] 纯文本查看 复制代码
def getxy(self):
        pyperclip.copy('')#将剪贴板复制的信息设置为空
        left,top,right,bottom=win32gui.GetWindowRect(self.hld)#获取游戏窗口位置
        m = PyMouse()
        k = PyKeyboard()
        
        #组合键,shift+鼠标左键点击坐标
        k.press_key(k.shift_key)
        m.click(left+100,top+65)#游戏坐标信息框,根据游戏窗口相对位置点击
        time.sleep(0.5)
        k.release_key(k.shift_key)
        
        #点击聊天框2次全选
        m.click(left+190,top+610,1,2)

        #组合键,ctrl+c复制
        time.sleep(0.5)
        k.press_key(k.control_key)
        k.tap_key('c')
        time.sleep(0.5)
        k.release_key(k.control_key)

        #删除聊天框信息
        k.tap_key(k.delete_key)

        #将在剪贴板复制的信息赋值并返回
        xy=pyperclip.paste()
        if xy!='':
                x=float(re.findall('(\\d\\d?\\d?),',xy)[0])
                y=float(re.findall(',(\\d\\d?\\d?)',xy)[0])
        pyperclip.copy('')
        return x,y,xy


效果:
1.png
这样就可以根据两点之间的举例来判断是否离目标越来越近,公式:|AB|=√[(x2-x1)^2+(y2-y1)^2]

2、是否触发了对话
若触发了对话,shift+鼠标左键获取链接时,聊天框不能获取链接。
所以先判断我和目标的距离,当游戏距离小于10的时候,尝试点击目标,否则等待。
当我不能获取链接时,说明我触发了对话。
1.png
[Python] 纯文本查看 复制代码
#触发NPC对话
while True:
        time.sleep(3)
        try:
                xy=window.getxy()#若触发了对话,获取坐标就会报错
                if '傲来国' in xy[2]:#判断我是否在傲来国
                        if ((xy[0]-98)*(xy[0]-98)-(xy[1]-18)*(xy[1]-18))**0.5<10:#判断我和目标的距离
                                time.sleep(3)
                                m.click(sizewindow[0]+410+int((98-xy[0])*20),sizewindow[1]+330+int((xy[1]-18)*20)-80)#点击任务,20个电脑坐标相当于1个游戏坐标
                                break
        except:
                m.click(sizewindow[0]+311,sizewindow[1]+381)#触发了对话,买鱼竿
                time.sleep(0.5)
                k.tap_key(k.escape_key)
                time.sleep(1)
                k.tap_key(k.tab_key)
                time.sleep(1)
                m.click(sizewindow[0]+479,sizewindow[1]+504)
                time.sleep(0.5)
                k.tap_key(k.escape_key)
                break


(二)实现自动钓鱼
过程:1找到渔夫→2买鱼竿→3去钓鱼位置→4点击鱼竿进入钓鱼模式→5自动钓鱼
1、alt+h进入小昕社区搜索钓鱼,根据窗口相对坐标点击傲来国
1.png

2、根据窗口相对位置购买鱼竿


3、根据窗口相对位置点击钓鱼位置
1.png

4、alt+e打开背包,为了方便我将鱼竿放在背包最后一个位置,根据窗口相对位置右键点击进入钓鱼模式
疑问:刚买的鱼竿不是放在最后一个位置怎么办
说明:鼠标静置在背包的物品时,会显示物品信息,根据其显示的相对位置再加上窗口相对位置进行物品名字截图,就能判断哪个是鱼竿,因为钓鱼才是重点,所以这一步简化。
1.png

5、钓鱼过程
过程5.1 点击第一个图标抛竿(第二个图标选择鱼饵,第三个图标收杆 )
1.png

过程5.2 上钩提示,10秒内点击感叹号
1.png

过程5.3 比拼体力,按空格键将指针维持在安全区域内,评分为正,否则为负
1.png

过程5.4 卖鱼
4.png

5.5 循环以上四个过程就可以实现自动钓鱼,我在这其中遇到什么问题呢,我们一个一个来解决。
5.5.1 抛竿之后如何判定鱼上钩了让鼠标一直点击第一个图标,截图OCR识别,如果不是“你已经抛竿了点击收杆后可重新抛竿”,说明鱼上钩了。ddddocr简单识别速度较快
1-1.png
1-2.png
[Python] 纯文本查看 复制代码
#点击
while True:
    m.click(sizewindow[0]+360,sizewindow[1]+278)
    time.sleep(random.randint(2,5))
    m.click(sizewindow[0]+360,sizewindow[1]+278)
    time.sleep(1)
    m.click(sizewindow[0]+360,sizewindow[1]+278)
    time.sleep(1)

    img1 = ImageGrab.grab(bbox=(sizewindow[0]+276,sizewindow[1]+128,sizewindow[0]+541,sizewindow[1]+161))
    img1.save('01.png')
    with open('01.png', 'rb') as f:
        img_bytes1 = f.read()
    res1 = ocr.classification(img_bytes1)
    #print(res1)

    if res1!='你已经抛竿了点击收杆后可重新抛竿':
        break


5.5.2 比拼体力过程中,如何让指针维持在安全区域
空格键松开,容易脱钩,截图判断是否出现“脱钩”,有就立刻按空格
2.png

空格键一直按,容易断线,截图判断是否出现“断线”,有就立刻松开空格,等待0.6秒再按空格(因为松开空格网脱钩方向移动非常快)
3.png
[Python] 纯文本查看 复制代码
#钓鱼
m.click(sizewindow[0]+403,sizewindow[1]+265)
lst=[]
while True:
    img3 = ImageGrab.grab(bbox=(sizewindow[0]+394-79,sizewindow[1]+261-75,sizewindow[0]+441-79,sizewindow[1]+283-75))
    img3.save('03.png')
    img4 = ImageGrab.grab(bbox=(sizewindow[0]+532-79,sizewindow[1]+260-75,sizewindow[0]+575-79,sizewindow[1]+284-75))
    img4.save('04.png')
 
    with open('03.png', 'rb') as f:
        img_bytes3 = f.read()
    res3 = ocr.classification(img_bytes3)
    lst.append(res3)
    #print(res3)
    with open('04.png', 'rb') as f:
        img_bytes4 = f.read()
    res4 = ocr.classification(img_bytes4)
    lst.append(res3)
    #print(res4)

    if lst.count('')>200:
        k.release_key(k.space_key)
        break

    if '脱' in res3:
        k.press_key(k.space_key)
    if '断' in res4:
        k.release_key(k.space_key)
        time.sleep(0.6)
        k.press_key(k.space_key)


最后附上源码,需要安装相应的第三方库,游戏窗口是800*600,自动钓鱼只能拿钓鱼成就,因为钓鱼分数不是很高
可以直接在傲来国(100,10)运行钓鱼.py

脚本源码.rar

3.09 KB, 下载次数: 30, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 4吾爱币 +3 热心值 +3 收起 理由
A202172167 + 1 我很赞同!
Lyine + 1 + 1 谢谢@Thanks!
yfmaha + 1 谢谢@Thanks!
水蜜桃好甜 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| xhtdtk 发表于 2022-7-18 17:39
nanmian 发表于 2022-7-17 20:28
我也是玩神武的。下载了你那个钓鱼的脚本,但是用的时候,一直卡在点击那里,请问有什么解决方法吗?

自从钓鱼不能换宝图,就没有意义了,要家园积分还不如多种菜
 楼主| xhtdtk 发表于 2021-8-14 19:16
林沫 发表于 2021-8-14 18:52
这个我之前有写过一个自动师门的(就是现在的修业)  需要我可以发思路 你这个思路很棒

做师门买二级药,买烹饪这些要怎么解决呢
璐璐诺 发表于 2021-8-14 18:45
头像被屏蔽
林沫 发表于 2021-8-14 18:52
提示: 作者被禁止或删除 内容自动屏蔽
2ci晨曦 发表于 2021-8-14 19:14
支持大佬,学习学习
万丅冧 发表于 2021-8-14 19:53
看到钓鱼还以为是奶块或者我的世界哈哈,就点进来了
tydzjing 发表于 2021-8-14 20:13
这里厉害了,真是大佬啊
u1024i 发表于 2021-8-14 20:39
我昨天被封了5个号,弃坑了 8年神武正式脱坑。
咔c君 发表于 2021-8-14 21:14
学习了不错
afti 发表于 2021-8-14 21:51
自动钓鱼的思路很棒!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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