GTA RP nopixel热点快速点击bot
#python #bot #computervision #gta

如果您玩过GTA RP nopixel,您知道它具有非常具有挑战性的迷你游戏,其中之一称为“ Thermite”。

Image description

在这个迷你游戏中,您只能在5秒内记住该模式,然后要求您快速重复它,正如您可能想象的那样。

但不用担心,这是我的脚本进行救援的地方,您要做的就是按HOTKEY在记录模式上,然后按另一个脚本重复其刚刚记录的内容。

克隆github repo here

查看bot视频here

代码解释了

线(12)记录功能

def record():
    img_bgr = pag.screenshot()
    img_bgr = np.array(img_bgr)
    img_rgb = img_bgr[:,:,::-1].copy()
    img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)
    template = cv.imread('obj/' + WIMG + '.jpg',0)
    w, h = template.shape[::-1]

    res = cv.matchTemplate(img_gray, template,cv.TM_SQDIFF_NORMED)
    mn,mx,mnLoc,mxLoc = cv.minMaxLoc(res)

当用户按下时,调用此功能
“ Ctrl + Shift + Alt + O”

启动模式录制过程。

它通过使用pyautogui.screenshot函数拍摄整个屏幕的屏幕截图,然后查找屏幕的一部分,看起来完全像白色正方形,通过将白色正方形的模板图像与openCENT进行比较的模板图像,并使用openCV“ cv” .matchtemplate“函数。

线(23)记录函数续

    print(mx)
    threshold = 0.05
    loc = np.where(res <= threshold)
    points = []
    for pt in zip(*loc[::-1]):
        close = False
        for p in points:
            if abs(pt[0] - p[0]) < 10 and abs(pt[1] - p[1]) < 10:
                close = True
                break

        if close: 
            continue
        points.append(pt)
        cv.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)

    global Whites
    Whites = points

在记录功能的这一部分中,它寻找匹配项,并将它们保存在“白色”中,将它们处理到屏幕位置元组后。

线(43)GO功能

def go():
    global Whites
    print(Whites)
    for pt in Whites:
        pag.click(pt[0] + 30, pt[1] + 30)
        sleep(0.05)

用户按下时执行此功能
“ Ctrl + Shift + Alt + P”

它通过单​​击录制的屏幕位置来工作,该位置由“记录”函数保存。

它跨越全局列表“白色”,并使用pyautogui.click函数单击每个屏幕位置。

def kb_listener():
    def on_release(key):
        print(str(key))
        if str(key) == "<79>":
            record()
        elif str(key) == "<80>":
            go()

    with Listener(on_release=on_release) as listener:
        listener.join()

这是我们通常的键盘侦听器函数,当用户按正确组合时,该功能执行“记录”和“ go”功能(请检查PYNPUT文档以获取有关此功能的更多信息)。

line(62)脚本主代码

if __name__ == '__main__':
    WIMG = input("Type 7 for 7x7, 8 for 8x8 then press Enter\n")
    if not (WIMG in ("7", "8")):
        print("Type either 7 or 8 to run this bot, Exiting...")
        quit()

    print("Running...")

    while True:
        kb_listener()

该部分负责运行整个脚本并加载全局变量'Wimg',该脚本的选择器是Minigame Square大小,7x7和8x8的选择器。

感谢您的阅读。