Jak sprawić by klawisze działały w grze.

0

Mam pewien problem a mianowicie nie wiem jak zrobić żeby Q oraz E działało w grze dokładnie MTA:SA wyczytałem że gry potrzebują direct input więc zrobiłem to ale dalej nic wszystko działa dobrze jedyny problem to że nie wiem jak to przenieść do gry. Od razu mówię że jestem totalnie nowy także nie wiele wiem.

import pyautogui 
import time 
import keyboard 
import random
import win32api, win32con
from directkeys import PressKey, W, A, S, D, Q, E

while 1:
    if pyautogui.locateOnScreen('durok.png', region=(30,958,167,51), confidence=0.92) != None:
        time.sleep(0.5)
        PressKey(Q)
        time.sleep(0.5)
        PressKey(Q)
    else:
        time.sleep(0.5)
        PressKey(E)
        time.sleep(0.5)
        PressKey(E)
        

Directkeys:

import time

SendInput = ctypes.windll.user32.SendInput


W = 0x11
A = 0x1E
S = 0x1F
D = 0x20
Q = 0x10
E = 0x12

# C struct redefinitions 
PUL = ctypes.POINTER(ctypes.c_ulong)
class KeyBdInput(ctypes.Structure):
    _fields_ = [("wVk", ctypes.c_ushort),
                ("wScan", ctypes.c_ushort),
                ("dwFlags", ctypes.c_ulong),
                ("time", ctypes.c_ulong),
                ("dwExtraInfo", PUL)]

class HardwareInput(ctypes.Structure):
    _fields_ = [("uMsg", ctypes.c_ulong),
                ("wParamL", ctypes.c_short),
                ("wParamH", ctypes.c_ushort)]

class MouseInput(ctypes.Structure):
    _fields_ = [("dx", ctypes.c_long),
                ("dy", ctypes.c_long),
                ("mouseData", ctypes.c_ulong),
                ("dwFlags", ctypes.c_ulong),
                ("time",ctypes.c_ulong),
                ("dwExtraInfo", PUL)]

class Input_I(ctypes.Union):
    _fields_ = [("ki", KeyBdInput),
                 ("mi", MouseInput),
                 ("hi", HardwareInput)]

class Input(ctypes.Structure):
    _fields_ = [("type", ctypes.c_ulong),
                ("ii", Input_I)]

# Actuals Functions

def PressKey(hexKeyCode):
    extra = ctypes.c_ulong(0)
    ii_ = Input_I()
    ii_.ki = KeyBdInput( 0, hexKeyCode, 0x0008, 0, ctypes.pointer(extra) )
    x = Input( ctypes.c_ulong(1), ii_ )
    ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))

def ReleaseKey(hexKeyCode):
    extra = ctypes.c_ulong(0)
    ii_ = Input_I()
    ii_.ki = KeyBdInput( 0, hexKeyCode, 0x0008 | 0x0002, 0, ctypes.pointer(extra) )
    x = Input( ctypes.c_ulong(1), ii_ )
    ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))

if __name__ == '__main__':
    PressKey(0x11)
    time.sleep(1)
    ReleaseKey(0x11)
    time.sleep(1)
0

Musisz ten program zainjectować do procesu. Ogólnie to taki proggram w c++ a python tylko wrapuje :D C++ jest do takich rzeczy jak właśnie zabawy pamięcią w grach. Tworzysz dll i jazda.

0

@ledi12: Kompletnie nie wiem jak się za to zabrać poza tym nie ma jakiejś prostej metody potrzebuje tylko aktywować dany przycisk

0

Teraz użyłem tego: https://github.com/Arbazkhan4712/AI_Play_GTA_San_Andreas i działa w gta a nawet w mta ale nie działa na tym serwerze do którego jest mi potrzebne, jakieś pomysły jak to obejść?

1 użytkowników online, w tym zalogowanych: 0, gości: 1