fishyboteso/fishy/engine/semifisher/engine.py
2020-06-01 18:28:18 +05:30

91 lines
2.8 KiB
Python

import time
import typing
from collections import Callable
from threading import Thread
import cv2
import logging
import pywintypes
from fishy.engine.IEngine import IEngine
from fishy.engine.semifisher import fishing_event
from .fishing_event import HookEvent, StickEvent, LookEvent, IdleEvent
from .fishing_mode import FishingMode
from .pixel_loc import PixelLoc
from fishy.engine.window import Window
if typing.TYPE_CHECKING:
from fishy.gui import GUI
def _wait_and_check(gui):
time.sleep(10)
if not fishing_event._FishingStarted:
gui.show_error("Doesn't look like fishing has started\n\n"
"Check out #faqs on our discord channel to troubleshoot the issue")
class SemiFisherEngine(IEngine):
def __init__(self, config, gui_ref: 'Callable[[], GUI]'):
super().__init__(config, gui_ref)
def run(self):
"""
Starts the fishing
code explained in comments in detail
"""
action_key = self.config.get("action_key", "e")
borderless = self.config.get("borderless", False)
# initialize widow
# noinspection PyUnresolvedReferences
try:
Window.init(borderless)
except pywintypes.error:
logging.info("Game window not found")
self.start = False
return
# initializes fishing modes and their callbacks
FishingMode("hook", 0, HookEvent(action_key, False))
FishingMode("stick", 1, StickEvent())
FishingMode("look", 2, LookEvent(action_key))
FishingMode("idle", 3, IdleEvent(self.config.get("uid")))
self.fishPixWindow = Window(color=cv2.COLOR_RGB2HSV)
# check for game window and stuff
self.gui.bot_started(True)
logging.info("Starting the bot engine, look at the fishing hole to start fishing")
Thread(target=_wait_and_check, args=(self.gui,)).start()
while self.start:
# Services to be ran in the start of the main loop
Window.loop()
# get the PixelLoc and find the color values, to give it to `FishingMode.Loop`
self.fishPixWindow.crop = PixelLoc.val
hue_value = self.fishPixWindow.get_capture()[0][0][0]
FishingMode.loop(hue_value)
# Services to be ran in the end of the main loop
Window.loop_end()
logging.info("Fishing engine stopped")
self.gui.bot_started(False)
def show_pixel_vals(self):
def show():
freq = 0.5
t = 0
while t < 10.0:
t += freq
logging.debug(str(FishingMode.CurrentMode.label) + ":" + str(self.fishPixWindow.get_capture()[0][0]))
time.sleep(freq)
logging.debug("Will display pixel values for 10 seconds")
time.sleep(5)
Thread(target=show, args=()).start()