Вопрос Как в питоне "сканивароть" оружие в руках

ставь чайник, зажигай плиту
Эксперт
Статус
Оффлайн
Регистрация
22 Май 2020
Сообщения
1,444
Реакции[?]
1,092
Поинты[?]
10K
Код:
def get_current_weapon():
    screenshot = pyautogui.screenshot(region=(0, 0, 800, 600))
  
    weapon_color = screenshot.getpixel((400, 550))
  
    if weapon_color == (255, 0, 0):
        return "AK-47"
    elif weapon_color == (0, 255, 0):
        return "M4A1"
    elif weapon_color == (0, 0, 255):
        return "AWP"
    else:
        return ""

Увидел, но встаёт другой вопрос: если ему это делать лень, нахуя он спрашивает об этом у других людей, странный тип
худ в кс можно двигать
 
Говарда
Забаненный
Статус
Оффлайн
Регистрация
21 Дек 2022
Сообщения
497
Реакции[?]
193
Поинты[?]
95K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
I Want to Die in New Orleans
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
516
Реакции[?]
496
Поинты[?]
85K
Код:
def get_current_weapon():
    screenshot = pyautogui.screenshot(region=(0, 0, 800, 600))
 
    weapon_color = screenshot.getpixel((400, 550))
 
    if weapon_color == (255, 0, 0):
        return "AK-47"
    elif weapon_color == (0, 255, 0):
        return "M4A1"
    elif weapon_color == (0, 0, 255):
        return "AWP"
    else:
        return ""
Как сделать так, чтобы питон понимал, что у меня за оружие в руках?
обращение к людям которые пишут за детект "по цвету пикселя"
я возможно что-то неправильно понимаю, но как вы хотите что-бы цвет пикселя выдавал какое именно оружие находится в руках? активное (1 из 3-4) - да, сделать не проблема, но тс не это хочет.
по теме - подключай opencv и сравнивай картинки по вероятности, не знаю как на питоне, но на плюсах там особо сложного ничего нет.
 
Говарда
Забаненный
Статус
Оффлайн
Регистрация
21 Дек 2022
Сообщения
497
Реакции[?]
193
Поинты[?]
95K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
обращение к людям которые пишут за детект "по цвету пикселя"
я возможно что-то неправильно понимаю, но как вы хотите что-бы цвет пикселя выдавал какое именно оружие находится в руках? активное (1 из 3-4) - да, сделать не проблема, но тс не это хочет.
по теме - подключай opencv и сравнивай картинки по вероятности, не знаю как на питоне, но на плюсах там особо сложного ничего нет.
Для этого нужно либо искать уникальные изображения, соответствующие каждому типу оружия, и определять их на экране, либо использовать другие методы, например, анализировать значения игровых переменных, которые содержат информацию о текущем оружии. 2 подход более надежный и точный, но для его реализации необходимо знать структуру игровой памяти и адреса нужных переменных. Также это может быть затруднительно, если вальв приняли меры для защиты от использования макросов, но очень сомневаюсь в этом.
Но если всё-таки выбрать 1 вариант, но можно определить уникальные пиксельные шаблоны, соответствующие каждому типу оружия, и искать их на экране при помощи алгоритма шаблонного сопоставления.
 
I Want to Die in New Orleans
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
516
Реакции[?]
496
Поинты[?]
85K
например, анализировать значения игровых переменных, которые содержат информацию о текущем оружии.
я думаю что если человек хочет играть с "макросами", а не с каким-то легитнейшим легитом, то он настолько не хочет быть забаненным, что не решится как-либо читать игру.
Также это может быть затруднительно, если вальв приняли меры для защиты от использования макросов, но очень сомневаюсь в этом.
точно нет.
но можно определить уникальные пиксельные шаблоны, соответствующие каждому типу оружия, и искать их на экране при помощи алгоритма шаблонного сопоставления.
да, но это очень запарно, долго и ненужно, за тебя это уже давно сделали и написали целую хорошо оптимизированную библиотеку, достаточно лишь изучить пару строк документации (тем более на питоне)
 
Говарда
Забаненный
Статус
Оффлайн
Регистрация
21 Дек 2022
Сообщения
497
Реакции[?]
193
Поинты[?]
95K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
я думаю что если человек хочет играть с "макросами", а не с каким-то легитнейшим легитом, то он настолько не хочет быть забаненным, что не решится как-либо читать игру.

точно нет.

да, но это очень запарно, долго и ненужно, за тебя это уже давно сделали и написали целую хорошо оптимизированную библиотеку, достаточно лишь изучить пару строк документации (тем более на питоне)
Я вообще не понимаю зачем ему это. Лучше купить миднайт и не ебать себе мозги. Используя данный софт и меньше шансов того, что отлетишь, и функций хайповых больше. Ну решать всё-таки ему, я лишь предлагаю варианты решения вопроса
 
Забаненный
Статус
Оффлайн
Регистрация
27 Мар 2021
Сообщения
99
Реакции[?]
8
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Код:
def get_current_weapon():
    screenshot = pyautogui.screenshot(region=(0, 0, 800, 600))
  
    weapon_color = screenshot.getpixel((400, 550))
  
    if weapon_color == (255, 0, 0):
        return "AK-47"
    elif weapon_color == (0, 255, 0):
        return "M4A1"
    elif weapon_color == (0, 0, 255):
        return "AWP"
    else:
        return ""

Увидел, но встаёт другой вопрос: если ему это делать лень, нахуя он спрашивает об этом у других людей, странный тип
хм, интересно, а как сделать так, чтобы цвет худа зависел от оружия? инфы в инете не нашёл
 
Говарда
Забаненный
Статус
Оффлайн
Регистрация
21 Дек 2022
Сообщения
497
Реакции[?]
193
Поинты[?]
95K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Забаненный
Статус
Оффлайн
Регистрация
27 Мар 2021
Сообщения
99
Реакции[?]
8
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Говарда
Забаненный
Статус
Оффлайн
Регистрация
21 Дек 2022
Сообщения
497
Реакции[?]
193
Поинты[?]
95K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Посмотреть вложение 239944
я так понял, ты говоришь про это.
цвет для всех оружий же одинаковый
Посмотреть вложение 239945
Вообще у меня назрело 2 варианта реализации этого
1 Вариант - Брать уникальный пиксель, который есть только у конкретного оружия (пометил красным):
1677410270787.png
2 Вариант - брать пиксель не от иконки, а от модели оружия:
1677410230809.png1677410276893.png
 
легендарный нелегендарный пройдите по ссылке
Участник
Статус
Оффлайн
Регистрация
6 Янв 2019
Сообщения
328
Реакции[?]
216
Поинты[?]
3K
Вообще у меня назрело 2 варианта реализации этого
1 Вариант - Брать уникальный пиксель, который есть только у конкретного оружия (пометил красным):
Посмотреть вложение 239950
2 Вариант - брать пиксель не от иконки, а от модели оружия:
Посмотреть вложение 239949Посмотреть вложение 239951
мне интересно как будет работать 2 вариант если взять оружие с другим скином
а все понял как
 
Говарда
Забаненный
Статус
Оффлайн
Регистрация
21 Дек 2022
Сообщения
497
Реакции[?]
193
Поинты[?]
95K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
легендарный нелегендарный пройдите по ссылке
Участник
Статус
Оффлайн
Регистрация
6 Янв 2019
Сообщения
328
Реакции[?]
216
Поинты[?]
3K
Говарда
Забаненный
Статус
Оффлайн
Регистрация
21 Дек 2022
Сообщения
497
Реакции[?]
193
Поинты[?]
95K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пользователь
Статус
Оффлайн
Регистрация
1 Дек 2019
Сообщения
267
Реакции[?]
32
Поинты[?]
15K
Сразу скажу что проще спастить экстернал код который будет брать отдачу с направлением не смотря на оружие, на плюсах, но тут ради интереса написал.
Будем сравнивание изображения худа методом сравнения хеша изображений.
Скину код частями но не факт что фулл ибо достаю с кучи своего кода.
Python:
from PIL import Image, ImageDraw, ImageChops
import imagehash
import multiprocessing
from grabbers.mss import Grabber
import cv2
Теперь берём изображения, код грабера прикреплю.
Python:
_aim = True
detect_window = [200, 200] # размер читаемой области

def grab_process(q):
    grabber = Grabber()
    global detect_window, _aim

    while True:
        if _aim:
            img_weapon = grabber.get_image({
                "left": int((game_window_rect[2])/ 2-100), #координаты худа, пиши свои ибо мне лень как в кс искать
                "top": int((game_window_rect[3] )/ 2-100),#координаты худа, пиши свои ибо мне лень как в кс искать
                "width": detect_window[0],
                "height": detect_window[1]})

            if img_weapon is None:
                continue

            q.put_nowait(img_weapon)
            q.join()
Сама функция обработки изображения и сравнения
Python:
def cv2_process(q):
    global _aim
    while True:
        if _aim and not q.empty():
            img_weapon = q.get_nowait()
            q.task_done()

            # some processing code
            # OpenCV HSV Scale (H: 0-179, S: 0-255, V: 0-255)

            weapon_color = (0, 0, 240), (180, 10, 250)  # color | color contrast 0 - white | color brightness 255 - white
            #тут получаем маску по цвету и оставляем на изображении только то что белое
            hsv2 = cv2.cvtColor(img_weapon, cv2.COLOR_BGR2HSV)
            mask_weapon = cv2.inRange(hsv2, np.array(weapon_color[0], dtype=np.uint8),
                               np.array(weapon_color[1], dtype=np.uint8))
            mask_weapon = cv2.bitwise_and(hsv2, hsv2, mask=mask_weapon)
            weapon_img = cv2.cvtColor(mask_weapon, cv2.COLOR_HSV2BGR)
           
            #дальше мне стало лень так что єто просто пример по котормоу всё поймёшь
            hash1 = imagehash.average_hash(Image.open('vandal.jpg')) #єто допустим оружие которое надо
            hash2 = imagehash.average_hash(Image.open('now.jpg'))    #єто актуальное
            print(abs(hash1-hash2))                                     #разница хеша
            cv2.imwrite("now.jpg", weapon_img)                         #сохранение актуального изображения оружия
Ну и вызываем сами функции
Python:
if __name__ == "__main__":

    q = multiprocessing.JoinableQueue()
   
    p1 = multiprocessing.Process(target=grab_process, args=(q,))
    p2 = multiprocessing.Process(target=cv2_process, args=(q,))

   
    p1.start()
    p2.start()

Скинул ничего не тестя но скорее всего основные проблемы будут с установкой библиотек, так что сперва с ними разберись)
 

Вложения

Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,596
Реакции[?]
605
Поинты[?]
46K
парни, я всё понимаю конечно, но люди со скинами в кс тоже играют, какой НАХУЙ цвет пикселя...

по теме: трахать фото до той поры пока ты не получишь шумную обводочку оружия. похоже -> молодец, не похоже -> повторяй.
 
Говарда
Забаненный
Статус
Оффлайн
Регистрация
21 Дек 2022
Сообщения
497
Реакции[?]
193
Поинты[?]
95K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
парни, я всё понимаю конечно, но люди со скинами в кс тоже играют, какой НАХУЙ цвет пикселя...

по теме: трахать фото до той поры пока ты не получишь шумную обводочку оружия. похоже -> молодец, не похоже -> повторяй.
Ты внатуре слепой и не удосужился прочитать всю тему?
 
https://qweme.dev
Пользователь
Статус
Оффлайн
Регистрация
25 Май 2022
Сообщения
165
Реакции[?]
87
Поинты[?]
21K
Привет, мой пример через екстернел чтение памяти (намного быстрее и лучше всяких скринов)

1677718148778.png
1677718216654.png

1677718703293.png


Полный список имен есть в weapon.py файле:
class Weapon(Enum):
    WEAPON_DEAGLE = 1
    WEAPON_ELITE = 2
    WEAPON_FIVESEVEN = 3
    WEAPON_GLOCK = 4
    WEAPON_AK47 = 7
    WEAPON_AUG = 8
    WEAPON_AWP = 9
    WEAPON_FAMAS = 10
    WEAPON_G3SG1 = 11
    ... # там есть все пушки, это всего лишь первые 11 индексов, в weapon.py они есть все.
Установка:
pip install pymem
pip install requests
pip install hazedumper

py main.py # or python main.py or python3 main.py
скачать код можно тут:
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,596
Реакции[?]
605
Поинты[?]
46K
Полный список имен есть в weapon.py файле:
class Weapon(Enum):
    WEAPON_DEAGLE = 1
    WEAPON_ELITE = 2
    WEAPON_FIVESEVEN = 3
    WEAPON_GLOCK = 4
    WEAPON_AK47 = 7
    WEAPON_AUG = 8
    WEAPON_AWP = 9
    WEAPON_FAMAS = 10
    WEAPON_G3SG1 = 11
    ... # там есть все пушки, это всего лишь первые 11 индексов, в weapon.py они есть все.
enum.Enum -> enum.IntEnum
ps.
я б побоялся на мейне память читать напрямую из питоновского вма...
 
Сверху Снизу