Skip to content

Instantly share code, notes, and snippets.

@enlyth
Last active March 29, 2024 01:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save enlyth/a177e4102b0da37a73587e15dbd6892c to your computer and use it in GitHub Desktop.
Save enlyth/a177e4102b0da37a73587e15dbd6892c to your computer and use it in GitHub Desktop.
Doom Captcha Defeat
import cv2
import numpy as np
import pyautogui
import time
import base64
import zlib
monsters = [
"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",
]
sound_off_button = 'eJzrDPBz5+WS4mJgYOD19HAJAtLSQCzGASQYRBR3hAOpbZ4ujiEaoqUHNwYedhBgOLDXbl2L/1qpOY68PcL8ugYsTXIeJot4vzv8Uv2zg+/JASv1e7znW58fap7zv25KAN9+E9U3595neO2IVp+9jOXayXWJXy0nNK4ziSma0zaHOTbzhOrxkzasuy7lFJ0snOu2QPusr16mDFA8r2heTzCQq/Y884TgCy/nc5ctnk0C6ltz2WKS94NJZbzTX8/2bdv9Pnz2spa7P1UzvTTa11+Z8kHh+et2oXnc5/8yW07Vuznrk0sUyCeern4u65wSmgAjlmPV'
def deserialize_image(serialized_string):
compressed_data = base64.b64decode(serialized_string)
encoded_image = zlib.decompress(compressed_data)
image = cv2.imdecode(np.frombuffer(encoded_image, np.uint8), cv2.IMREAD_GRAYSCALE)
return image
def find_and_click(template):
screen = np.array(pyautogui.screenshot())
screen = cv2.cvtColor(screen, cv2.COLOR_RGB2GRAY)
result = cv2.matchTemplate(screen, template, cv2.TM_CCOEFF_NORMED)
_, max_val, _, max_loc = cv2.minMaxLoc(result)
if max_val >= 0.8:
click_location = (
max_loc[0] + template.shape[1] // 2,
max_loc[1] + template.shape[0] // 2,
)
pyautogui.click(click_location)
return True
return False
def main():
on_template = deserialize_image(sound_off_button)
m_templates = [deserialize_image(m) for m in monsters]
while True:
print("Searching for SOUND OFF button...")
if find_and_click(on_template):
time.sleep(0.5)
for i in range(4):
for template in m_templates:
if find_and_click(template):
print(f"Killing monster {i}...")
time.sleep(0.5)
break
break
time.sleep(1)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment