Hello Flower 2024-04-11 11:38 采纳率: 0%
浏览 90

python实现瓦罗兰特急停-vscode开发

以下是一个使用Python和pyautogui库实现电击鼠标左键时,键盘的a键和d键失效,但是松开鼠标左键时,键盘的a键和d键不被禁用的代码示例:

 

import pyautogui
import keyboard
import time

def mouse_left_click_listener(event):
    if event.button == 'left':
        keyboard.block_key('a')
        keyboard.block_key('d')

def mouse_left_release_listener(event):
    if event.button == 'left':
        keyboard.unblock_key('a')
        keyboard.unblock_key('d')

# 注册鼠标左键点击和释放事件
pyautogui.on_click(mouse_left_click_listener)
pyautogui.on_click(mouse_left_release_listener)

# 运行事件循环
pyautogui.PAUSE = 0.5
pyautogui.hotkey('ctrl', 'c').wait()

这段代码首先导入了pyautogui和keyboard库,然后定义了两个函数:mouse_left_click_listener和mouse_left_release_listener。这两个函数分别用于处理鼠标左键点击和释放事件。

在mouse_left_click_listener函数中,我们使用keyboard.block_key方法禁用了a键和d键。在mouse_left_release_listener函数中,我们使用keyboard.unblock_key方法启用了a键和d键。

最后,我们使用pyautogui.on_click方法注册了这两个事件,并运行事件循环。在事件循环中,我们使用了pyautogui.hotkey方法模拟按下ctrl+c键,以便程序能够正常退出。

各路大咖,我想请教一下,我这个代码在微信聊天框可以使用,但是为什么在瓦罗兰特里面,用a或d移动的时候,点击鼠标左键射击不会达到急停的效果?

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-11 11:38
    关注

    引自免费微信小程序:皆我百晓生

    你的代码逻辑看起来是正确的,但可能是因为游戏内键盘输入的处理机制与普通的GUI应用(如微信)不同。为了更准确地解决这个问题,我们需要对瓦罗兰特(V Rising)游戏进行一些额外的调整。下面是一个改进的版本,它使用PyAutoGUI的typewrite()方法代替keyboard.block_key()keyboard.unblock_key(),尝试更直接地模拟按键输入。这种方法可能会更适应游戏内的输入处理方式。

    import pyautogui
    import time
    
    def mouse_left_click_listener(event):
        if event.button == 'left':
            # 模拟按住A键
            pyautogui.typewrite(['a'], interval=0)
            # 模拟按住D键
            pyautogui.typewrite(['d'], interval=0)
    
    def mouse_left_release_listener(event):
        if event.button == 'left':
            # 模拟释放A键
            pyautogui.typewrite(['a'], interval=0, presses=1)
            # 模拟释放D键
            pyautogui.typewrite(['d'], interval=0, presses=1)
    
    # 注册鼠标左键点击和释放事件
    pyautogui.on_click(mouse_left_click_listener)
    pyautogui.on_click(mouse_left_release_listener)
    
    # 运行事件循环
    pyautogui.PAUSE = 0.5
    pyautogui.hotkey('ctrl', 'c').wait()
    

    在这个修改后的版本中,当鼠标左键被按下时,程序会模拟同时按下"A"和"D"键;当鼠标左键被抬起时,程序会模拟同时释放这两个键。这样做的目的是确保游戏接收到完整的按键序列,而不是简单地阻塞特定键。

    然而,需要注意的是,这仍然可能因为瓦罗兰特内部的游戏机制而不起作用。有些游戏可能会检查连续的按键序列,或者使用更复杂的输入过滤系统来防止这种类型的作弊行为。在这种情况下,可能需要使用更高级的自动化工具,例如PyInputPlus、DirectInput或其他专门针对游戏设计的自动化库。

    如果你发现上述代码仍然无法达到预期效果,那么可能需要考虑其他方法,比如使用硬件级别的键盘模拟器(如hidapi),或者寻找专门为瓦罗兰特定制的脚本工具。不过这些方法通常需要更多的编程经验和专业知识,也可能涉及到法律和游戏服务条款的问题。因此,在尝试此类操作之前,请务必了解并遵守相关规则。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月11日