xhtdtk 发表于 2021-8-14 18:36

根据游戏规律制作脚本之自动钓鱼

本帖最后由 xhtdtk 于 2021-8-14 19:13 编辑

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


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))
                y=float(re.findall(',(\\d\\d?\\d?)',xy))
      pyperclip.copy('')
      return x,y,xy

效果:

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

2、是否触发了对话
若触发了对话,shift+鼠标左键获取链接时,聊天框不能获取链接。
所以先判断我和目标的距离,当游戏距离小于10的时候,尝试点击目标,否则等待。
当我不能获取链接时,说明我触发了对话。

#触发NPC对话
while True:
      time.sleep(3)
      try:
                xy=window.getxy()#若触发了对话,获取坐标就会报错
                if '傲来国' in xy:#判断我是否在傲来国
                        if ((xy-98)*(xy-98)-(xy-18)*(xy-18))**0.5<10:#判断我和目标的距离
                              time.sleep(3)
                              m.click(sizewindow+410+int((98-xy)*20),sizewindow+330+int((xy-18)*20)-80)#点击任务,20个电脑坐标相当于1个游戏坐标
                              break
      except:
                m.click(sizewindow+311,sizewindow+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+479,sizewindow+504)
                time.sleep(0.5)
                k.tap_key(k.escape_key)
                break

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


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


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


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


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


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


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


过程5.4 卖鱼


5.5 循环以上四个过程就可以实现自动钓鱼,我在这其中遇到什么问题呢,我们一个一个来解决。
5.5.1 抛竿之后如何判定鱼上钩了让鼠标一直点击第一个图标,截图OCR识别,如果不是“你已经抛竿了点击收杆后可重新抛竿”,说明鱼上钩了。ddddocr简单识别速度较快


#点击
while True:
    m.click(sizewindow+360,sizewindow+278)
    time.sleep(random.randint(2,5))
    m.click(sizewindow+360,sizewindow+278)
    time.sleep(1)
    m.click(sizewindow+360,sizewindow+278)
    time.sleep(1)

    img1 = ImageGrab.grab(bbox=(sizewindow+276,sizewindow+128,sizewindow+541,sizewindow+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 比拼体力过程中,如何让指针维持在安全区域
空格键松开,容易脱钩,截图判断是否出现“脱钩”,有就立刻按空格


空格键一直按,容易断线,截图判断是否出现“断线”,有就立刻松开空格,等待0.6秒再按空格(因为松开空格网脱钩方向移动非常快)

#钓鱼
m.click(sizewindow+403,sizewindow+265)
lst=[]
while True:
    img3 = ImageGrab.grab(bbox=(sizewindow+394-79,sizewindow+261-75,sizewindow+441-79,sizewindow+283-75))
    img3.save('03.png')
    img4 = ImageGrab.grab(bbox=(sizewindow+532-79,sizewindow+260-75,sizewindow+575-79,sizewindow+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

xhtdtk 发表于 2022-7-18 17:39

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

自从钓鱼不能换宝图,就没有意义了,要家园积分还不如多种菜

xhtdtk 发表于 2021-8-14 19:16

林沫 发表于 2021-8-14 18:52
这个我之前有写过一个自动师门的(就是现在的修业)需要我可以发思路 你这个思路很棒

做师门买二级药,买烹饪这些要怎么解决呢{:301_1003:}

璐璐诺 发表于 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

自动钓鱼的思路很棒!
页: [1] 2 3 4
查看完整版本: 根据游戏规律制作脚本之自动钓鱼