一. 前言
以下代碼只可用于私服,不可商用,代碼完全開源,這個應該cf系列第四篇了,目前已經(jīng)寫了ai瞄準,羅技鼠標宏,這篇功能相比前倆個更簡單一些,因為代碼不多所以就不寫類與功能函數(shù)了,直接直搗黃龍,我還寫了一些輔助腳本,可以用來獲取鼠標當前坐標和顏色的,改新的分辨率可以用得上
所需準備:羅技驅(qū)動的.dll文件與之對應的羅技驅(qū)動版本,鏈接我放下面了
鏈接:https://pan.baidu.com/s/1pd2RjNW6QoOSDRs_3gm1Tw?pwd=6666?
提取碼:6666
注意事項:這里游戲內(nèi)分辨率必須是1280*720,我的位置坐標參數(shù)就是根據(jù)這個分辨率調(diào)整的
二. 代碼
2.1 驅(qū)動代碼
這部分代碼主要就是調(diào)用.dll文件,用里面封裝好的方法,比如移動鼠標,點擊鼠標,鍵盤等等,主要實現(xiàn)的功能就是進行射擊操作,也就是自動鼠標點擊左鍵
import ctypes
import os
try:
# 獲取當前絕對路徑
root = os.path.abspath(os.path.dirname(__file__))
driver = ctypes.CDLL(f'{root}/logitech.driver.dll')
ok = driver.device_open() == 1 # 該驅(qū)動每個進程可打開一個實例
if not ok:
print('錯誤, GHUB驅(qū)動沒有找到')
except FileNotFoundError:
print(f'錯誤, DLL 文件沒有找到')
class Logitech:
class mouse:
"""
code: 1:左鍵, 2:中鍵, 3:右鍵
"""
@staticmethod
def press(code):
if not ok:
return
driver.mouse_down(code)
@staticmethod
def release(code):
if not ok:
return
driver.mouse_up(code)
@staticmethod
def click(code):
if not ok:
return
driver.mouse_down(code)
driver.mouse_up(code)
@staticmethod
def scroll(a):
"""
鼠標滾輪
"""
if not ok:
return
driver.scroll(a)
@staticmethod
def move(x, y):
"""
相對移動, 絕對移動需配合 pywin32 的 win32gui 中的 GetCursorPos 計算位置
pip install pywin32 -i https://pypi.tuna.tsinghua.edu.cn/simple
x: 水平移動的方向和距離, 正數(shù)向右, 負數(shù)向左
y: 垂直移動的方向和距離
"""
if not ok:
return
if x == 0 and y == 0:
return
driver.moveR(x, y, True)
class keyboard:
"""
鍵盤按鍵函數(shù)中,傳入的參數(shù)采用的是鍵盤按鍵對應的鍵碼
code: 'a'-'z':A鍵-Z鍵, '0'-'9':0-9
"""
@staticmethod
def press(code):
if not ok:
return
driver.key_down(code)
@staticmethod
def release(code):
if not ok:
return
driver.key_up(code)
@staticmethod
def click(code):
if not ok:
return
driver.key_down(code)
driver.key_up(code)
class RunLogitechTwo:
def __init__(self):
self.log_mouse = Logitech.mouse
pass
def quick_move(self):
# time.sleep(random.randint(1, 3))
self.log_mouse.click(1)
# print('hahaha')
2.2 紅名識別代碼
代碼思路:利用mss庫的mss()功能函數(shù),進行時對當前屏幕進行截圖,設置了字典monitor參數(shù),里面包含左上角坐標,寬高,用來控制截屏的范圍,我這里對敵人紅名出現(xiàn)的地方中央截取了16個像素,這16個像素中一定會有紅色像素格出現(xiàn),一旦其中一個符合rgb范圍要求就跳出循環(huán)不執(zhí)行剩下像素的判斷,節(jié)省資源也防止一直開槍
for循環(huán)部分講解:倆層for循環(huán)就是為了遍歷截取的16個像素的RGB值進行判斷,第二個for循環(huán)的bgr屬性(分解的每個像素)是有含4個值的,分別是R,B,G,通透度,我們只取前三個就夠了通透度不用管,np.array()會將16個像素值分成二維數(shù)組(4*4)類似于矩陣的形狀,所以倆層for循環(huán)就夠了
開槍延遲:這個開槍延遲一定要加上,要不然肯定會過快,進行檢測,速度大家自行修改嘗試就行了,我這個是噴子的延遲,大炮可以調(diào)的更長一些,火線還有個問題就是你可能在瞄準那個人附近的時候就開始出現(xiàn)紅名了,所以也要通過設置這個開槍延遲來平衡自動開槍時機
吐槽:你在瞄準敵人的時候,他的名字是漸變的,從暗紅色-紅色-亮紅色-橘色,這個RGB范圍讓我一頓好找
import logitech_test
from mss import mss
import numpy as np
import time
import random
if __name__ == "__main__":
# 設置檢測區(qū)域,這里截取整個屏幕
monitor = {"top": 405, "left": 635, "width": 4, "height": 4}
# monitor = {"top": 490, "left": 910, "width": 200, "height": 200} # 反人類的設計,正常左上,他上左
obj = logitech_test.RunLogitechTwo()
# 設置目標顏色(示例:紅色)
target_color = np.array([163, 57, 49]) # RGB顏色值
# 創(chuàng)建截屏對象
sct = mss()
while True:
flag=False
# 獲取屏幕截圖
screen_shot = sct.grab(monitor)
# 展示
scr_img = np.array(screen_shot)
for each_pic in scr_img:
for bgr in each_pic:
b, g, r = bgr[:3]
# rgb參數(shù)145,245,47,80,20,57
if r >= 140 and r <= 245 and g >= 45 and g <= 80 and b >= 20 and b <= 60:
time.sleep(random.randint(2, 5) * 0.01)
obj.quick_move()
flag = True
break
if flag:
break
三. 輔助工具
下面的腳本是用來時時獲取鼠標當前位置的坐標x,y和rgb值的,用于改分辨率時候算參數(shù)用的
import pyautogui
from PIL import Image
def test_b():
# obj = RunLogitechTwo()
# 默認屏幕為1280 * 720,屏幕中心位置如下
# x = 640 # 1.18
# y = 360 # 32.66666
# 屏幕檢測區(qū)域
# region_to_check = (590, 310, 690, 430)
# x = 636
# y = 410
while True:
x, y = pyautogui.position() # 獲取鼠標當前位置
# region = (600, 400, 80, 20)
im = pyautogui.screenshot() # 返回屏幕的截圖,是一個Pillow的image對象
r,g,b = im.getpixel((x,y))
print("x:", x, "y:", y, "r:", r,"-g:", g,"-b:", b)
# img = Image.new('RGB', (300, 300), im.getpixel((x, y))) # 用獲取的顏色創(chuàng)建一張圖片
# img.show() # 展示當前圖片
if __name__ == '__main__':
test_b()
四. 成品展示
因為有人建議我將這個集成為一個app更好一些,代碼不算很多,就抽時間集成了一下,圖片如下
這里我給了幾個參數(shù)可修改
游戲分辨率:因為有的人可能改了分辨率就不會找位置了,所以我加了這個參數(shù),會自適應找到位置,也可以點擊計算面積獲得比較適合當前分辨率的紅名面積?
紅名面積:也就是掃描的范圍,這個如果你電腦配置不錯,你可以開大點,但是一般計算面積自適應的就夠用了
開火反應速率:這個用來控制你秒到紅名之后,開槍之前的間隔,過快可能會進小黑屋1小時冷靜一下,玩JU的話我建議7-10就行,因為火線的機制是秒到人身體附近就會出現(xiàn)紅名了,所以你在玩JU架點的時候可能會有人慢慢蹭出來,這樣你先瞄到的就是空氣了,所以適當加一些延遲,其他步槍和噴子就默認就行了,不需要考慮這個
最后,對此有興趣或疑問的可以發(fā)我郵箱信息,看到會回復的
五. 總結(jié)
重要的事情多說一遍,如果你想用我這個代碼,游戲內(nèi)分辨率一定要調(diào)整為1280*720,因為我取像素位置就是根據(jù)這個分辨率來的,如果你想用別的分辨率自己重新計算一下就行了,也不難,重新找一下新分辨率下的紅名出現(xiàn)坐標位置,如果你找不到新的分辨率紅名坐標位置,我建議你可以把電腦分辨率調(diào)整為和游戲一樣的分辨率,然后在游戲中截屏,將截屏的照片設為全屏,再開啟輔助工具取坐標和rgb,這樣就能準確得知了(我就是這樣做的)文章來源:http://www.zghlxwxcb.cn/news/detail-665820.html
最后,如果還有什么不懂的或者困難或者改進也可以郵箱聯(lián)系我一起進步,874302104@qq.com文章來源地址http://www.zghlxwxcb.cn/news/detail-665820.html
到了這里,關于(python)cf火線瞄準紅名自動開槍的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!