吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3028|回复: 1
收起左侧

[会员申请] 申请会员ID:ivan21

[复制链接]
吾爱游客  发表于 2022-3-11 18:23
1、申 请 I D : ivan21                                 
2、个人邮箱:314315035@qq.com


最近云顶之弈小蜜蜂活动,网上查了下都不好用。就用python自己写了个简单的挂机脚本。打包成exe文件,直接运行


ps: 一直在论坛上下载东西,刚好自己弄了个挂机的脚本,想着分享给别人。申请不过的话,就等13号在注册咯

脚本比较简单,没有修改游戏文件、没有操作内存、没有修改游戏数据。只是做了图片匹配和鼠标动作

首先需要安装好需要用到的库,如下图
[Java] 纯文本查看 复制代码
[mw_shl_code=python,true]i

import os
import random
import time

import cv2
import pyautogui
import win32api
import win32con
from PIL import ImageGrab
from pykeyboard import *
from pymouse import *
from pynput.mouse import Controller[/mw_shl_code]

脚本的功能
+ 自动寻找并接受对局
+ 多阵容随机切换
+ 自动升人口
+ 自动捡装备
+ 自动给英雄上装备
+ 自动卖英雄
+ 死亡后自动退出
+ 用户可自行扩展阵容,使用版本英雄变化,自己搭配阵容
+ 手动设置挂机时间,挂机满x小时,自动关闭脚本,并5分钟后退出(关闭脚本页面可退出关机)
[Python] 纯文本查看 复制代码
# 设置挂机时长
print("请输入挂机时长?单位小时,范围1-24之间整数")
print("输入后按enter结束")
useHour = input()
try:
    useHour = int(useHour)
except Exception:
    print("输入错误,默认挂机:3小时")
    useHour = 3

if useHour > 24 or useHour < 1:
    useHour = 3



一、准备进入游戏,通过判断是否有开始游戏、接受等图片,获取坐标,鼠标点击左边
[Python] 纯文本查看 复制代码
    
for i in range(len(leftClickIcon)):
        theight, twidth = leftClickIcon[i].shape[:2]
        result = cv2.matchTemplate(target, leftClickIcon[i], cv2.TM_SQDIFF_NORMED)
        min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
        if min_val < threashLeft[0]:
            if i < 1:
                # 判断是否已经运行x小时
                t = time.time()
                if t - startTime > gameTime:
                    gaming = False
                    break
                startNewGame()  # 判断是否开启一局新游戏
            leftClick(min_loc[0] + twidth // 2 + X_START, min_loc[1] + theight // 2 + Y_START)


二、进入游戏后
有四个逻辑判断,购买英雄,捡装备,出售不要英雄,给英雄携带装备 .
【购买英雄】和【捡装备】逻辑很简单,获取坐标,控制鼠标点击就可以了。
【出售不要英雄】和【给英雄携带装备】就麻烦很多,涉及到拖拽,怎么获取拖拽前和拖拽后的坐标?
[Python] 纯文本查看 复制代码
    
# 判断是否在游戏中
    if judgeInGame():
        # 左键购买旗子
        for i in range(len(buyHeroIcon)):
            theight, twidth = buyHeroIcon[i].shape[:2]
            result = cv2.matchTemplate(target, buyHeroIcon[i], cv2.TM_SQDIFF_NORMED)
            min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
            if min_val < threashLeft[0]:
                leftClick(min_loc[0] + twidth // 2 + X_START, min_loc[1] + theight // 2 + Y_START)

        # 右键点击的装备
        for i in range(len(rightClickIcon)):
            theight, twidth = rightClickIcon[i].shape[:2]
            result = cv2.matchTemplate(target, rightClickIcon[i], cv2.TM_SQDIFF_NORMED)
            min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
            if min_val < threashRight[0]:
                rightClick(min_loc[0] + twidth // 2 + X_START, min_loc[1] + theight // 2 + Y_START)
                time.sleep(0.1)
                moveToSpace()

        # 自动上装备
        t = time.time()
        if t - lastItemTime > 10:
            dst = random.randint(0, len(heroItem) - 1)
            drag(x1[index % len(x1)], y1[index % len(y1)], x2[heroItem[dst]], y2[heroItem[dst]])
            time.sleep(0.1)
            moveToSpace()
            index += 1
            lastItemTime = t

        t = time.time()
        interval = 42 + random.randint(1, 10)
        if t - lastFTime > interval:  # 42秒钟升级一次
            for i in range(len(leftClickDelayIcon)):
                theight, twidth = leftClickDelayIcon[i].shape[:2]
                result = cv2.matchTemplate(target, leftClickDelayIcon[i], cv2.TM_SQDIFF_NORMED)
                min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
                if min_val < threashLeftDelay[0]:
                    leftClick(min_loc[0] + twidth // 2 + X_START, min_loc[1] + theight // 2 + Y_START)
                    time.sleep(0.1)
                    moveToSpace()
            lastFTime = t

        # 查看英雄信息必须放到每个循环最后,或出售英雄
        t = time.time()
        if t - lastJudgeHeroTime > 4:  # 4秒钟查看一次英雄
            target2 = target[660 - Y_START:1080 - Y_START, :]
            result = cv2.matchTemplate(target2, flags[3], cv2.TM_SQDIFF_NORMED)
            min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
            result = cv2.matchTemplate(target2, flags[4], cv2.TM_SQDIFF_NORMED)
            min_val_2, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
            if min_val < 0.2 or min_val_2 < 0.15 and inPlaceHeroNum < len(isHeroInPlace):
                judgeHeroIndex = (judgeHeroIndex + 1) % len(heroPosX)
                while judgeHeroIndex < len(isHeroInPlace) and judgeHeroIndex > placeNum:
                    judgeHeroIndex = (judgeHeroIndex + 1) % len(isHeroInPlace)

                rightClick(heroPosX[judgeHeroIndex], heroPosY[judgeHeroIndex])
                needJudgeHero = True
                lastJudgeHeroTime = t
            else:
                judgeWatcherIndex = (judgeWatcherIndex + 1) % len(watcherPosX)
                rightClick(watcherPosX[judgeWatcherIndex], watcherPosY[judgeWatcherIndex])
                needJudgeWatcher = True
                lastJudgeHeroTime = t


三、结束一盘后,清空游戏数据,并初始化默认参数,随机一个新的阵容
[Python] 纯文本查看 复制代码
def startNewGame():
    for i in range(len(isHeroInPlace)):
        isHeroInPlace[i] = False
        isPosReady[i] = False
    global inPlaceHeroNum
    global placeNum
    inPlaceHeroNum = 0
    placeNum = 1
    global currentIndex
    currentIndex = random.randint(0, maxZr - 1)
    selectTeam()
    print("新的一局,当前阵容:", currentIndex + 1)



四、每盘结束后,判断脚本已运行时间,如果大于设置挂机时间,退出脚本,并5分钟后关闭电脑。否则就继续下一盘
[Python] 纯文本查看 复制代码
print("脚本结束,5分钟后准备关机")
time.sleep(300)  # 一分钟后准备关机
os.system('shutdown -a')
os.system('shutdown /s /t 60')


五、执行打包命令,将依赖环境一起打包成exe文件,直接运行即可
pyinstaller -F ivan.py

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

Hmily 发表于 2022-3-11 19:17
【开放注册公告】吾爱破解论坛2022年3月13日十四周年开放注册公告
https://www.52pojie.cn/thread-1596731-1-1.html


周日自己来注册。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 01:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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