我正在尝试创建一个播放CS:GO的AI。
但是我无法移动目标。
我尝试了pyautogui,win32api,pynput库,它们全部都在台式机或任何有光标的地方工作。
但是在游戏中没有光标,并且当我跟随鼠标的位置时,将鼠标移到中间位置(对我来说是(1920/2,1080/2))会增加一小段时间然后又回到该位置。
如何通过python在CS:GO或GTAV或任何游戏中移动目标。 python代码和真正的鼠标有什么区别?
我不认为这是因为反作弊,因为它不适用于GTAV
我看过相同的主题,但它们没有解决我的问题
所有库的代码都相似,所以我使用的代码是这样:
import pyautogui, sys
import _thread
import time
time.sleep(2)
def kaydir(miktarX, miktarY):
pyautogui.moveRel(miktarX, miktarY)
print('Press Ctrl-C to quit.')
try:
while True:
x, y = pyautogui.position()
positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
print(positionStr, end='')
print('\b' * len(positionStr), end='', flush=True)
_thread.start_new_thread(kaydir, (1, 1))
time.sleep(0.08)
except KeyboardInterrupt:
print('\n')
所以第一件事是:您对这个问题有什么意思:
python代码和真正的鼠标有什么区别?
但是,如果您想为任何游戏创建一个机器人,则有两个选择:
Memory Hacking:获取一些内存指针以更改输入标志等(通过CheatEngine等)
模拟用户互动(您的方式):如果您想使用PyAutoGUI进行交互,我认为这是一个不错的起点:https://www.youtube.com/watch?v=NaZTtUmE990
我更喜欢的另一种方法是(如您所提到的)WinAPI:鼠标移动的C ++实现(因为我不知道如何在python中做到):
int main() {
HWND tWin= FindWindow("TargetWindow", "Target Window");
if (tWin) {
RECT rect = {0};
GetWindowRect(tWin, &rect);
SetCursorPos(rect.right - 180 /*x offset*/, rect.bottom - 300 /*y offset*/);
}
return 0;
}
还请确保如果您的程序是64位,请使用64位WinAPI。
如果您的机器人在游戏中以更高的特权运行,则您需要以管理员或系统身份运行机器人
但是我想创建一个机器人您还需要内存破解(只是读取)以获取玩家的位置等信息,因为从程序员的角度来看,您是如何从gamescreen-imgage中提取pos项目等的。 ?。您可能还可以使用机器学习,但是对于游戏而言,它需要大量的训练过程。