From 3f85dd4476bb83b3e981bbaffd837a2640b28cff Mon Sep 17 00:00:00 2001 From: brunocordioli072 Date: Mon, 3 Jun 2024 15:55:06 -0300 Subject: [PATCH 1/3] feat: improve react performance --- packages/app/package-lock.json | 19 ++++++-- packages/app/package.json | 6 ++- packages/app/src/App.tsx | 34 ++++++-------- .../app/src/components/AppSider/AppSider.tsx | 47 ++++++++++--------- packages/app/src/components/Header/Header.tsx | 24 +++++----- .../LogsContainer/LogsContainer.tsx | 7 ++- .../StatsContainer/StatsContainer.tsx | 7 ++- packages/app/src/context/AppContext.tsx | 8 ++-- packages/core/epic7_bot/core/ScreenManager.py | 12 +++-- 9 files changed, 90 insertions(+), 74 deletions(-) diff --git a/packages/app/package-lock.json b/packages/app/package-lock.json index a04b777..df4114c 100644 --- a/packages/app/package-lock.json +++ b/packages/app/package-lock.json @@ -11,7 +11,9 @@ "@babel/runtime": "^7.24.0", "antd": "^5.15.3", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "scheduler": "^0.23.2", + "use-context-selector": "^2.0.0" }, "devDependencies": { "@types/react": "^18.2.15", @@ -3064,9 +3066,9 @@ } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } @@ -3268,6 +3270,15 @@ "punycode": "^2.1.0" } }, + "node_modules/use-context-selector": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/use-context-selector/-/use-context-selector-2.0.0.tgz", + "integrity": "sha512-owfuSmUNd3eNp3J9CdDl0kMgfidV+MkDvHPpvthN5ThqM+ibMccNE0k+Iq7TWC6JPFvGZqanqiGCuQx6DyV24g==", + "peerDependencies": { + "react": ">=18.0.0", + "scheduler": ">=0.19.0" + } + }, "node_modules/vite": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", diff --git a/packages/app/package.json b/packages/app/package.json index 61a186c..6b18f59 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -14,7 +14,9 @@ "@babel/runtime": "^7.24.0", "antd": "^5.15.3", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "scheduler": "^0.23.2", + "use-context-selector": "^2.0.0" }, "devDependencies": { "@types/react": "^18.2.15", @@ -28,4 +30,4 @@ "typescript": "^5.0.2", "vite": "^4.5.2" } -} +} \ No newline at end of file diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx index a9eb99d..073e42b 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -1,30 +1,28 @@ import React, { useEffect } from 'react'; import { Layout, notification } from 'antd'; -import AppSider from './components/AppSider/AppSider' -import './App.css' +import AppSider from './components/AppSider/AppSider'; +import './App.css'; import { useAppContext } from './context/AppContext'; -const { Content } = Layout; -import LogsContainer from './components/LogsContainer/LogsContainer' -import StatsContainer from './components/StatsContainer/StatsContainer' -import Header from './components/Header/Header' +import LogsContainer from './components/LogsContainer/LogsContainer'; +import StatsContainer from './components/StatsContainer/StatsContainer'; +import Header from './components/Header/Header'; +const { Content } = Layout; const App: React.FC = () => { const [api, contextHolder] = notification.useNotification(); - const { - setAppVersion, - setFastMode, - setCurrentScreen, - setDevMode - } = useAppContext() + const setAppVersion = useAppContext((state) => state.setAppVersion); + const setCurrentScreen = useAppContext((state) => state.setCurrentScreen); + const setDevMode = useAppContext((state) => state.setDevMode); + const setFastMode = useAppContext((state) => state.setFastMode); useEffect(() => { const handleKeyDownDevMode = (e: KeyboardEvent) => { if (e.key === "F1") { e.preventDefault(); setDevMode((val) => !val); - setCurrentScreen(false) - setFastMode(false) + setCurrentScreen(false); + setFastMode(false); } }; @@ -38,10 +36,10 @@ const App: React.FC = () => { }, []); async function getVersionAndCheckForUpdate() { - const res = await window.pywebview.api.get_version() + const res = await window.pywebview.api.get_version(); if (res) { - setAppVersion(res.current_app_version) - if (res.current_app_version != res.latest_app_version) { + setAppVersion(res.current_app_version); + if (res.current_app_version !== res.latest_app_version) { api.warning({ message: `Update Available`, description: Update {res.latest_app_version} available!, @@ -56,13 +54,11 @@ const App: React.FC = () => { {contextHolder} - {/*
*/}
- {/*
Ant Design ©2023 Created by Ant UED
*/} ); diff --git a/packages/app/src/components/AppSider/AppSider.tsx b/packages/app/src/components/AppSider/AppSider.tsx index 4742213..6980f0e 100644 --- a/packages/app/src/components/AppSider/AppSider.tsx +++ b/packages/app/src/components/AppSider/AppSider.tsx @@ -1,8 +1,9 @@ import { useState } from 'react'; import { Layout, Menu } from 'antd'; import type { MenuProps } from 'antd'; -import './AppSider.css' -import { useAppContext } from '../../context/AppContext'; +import './AppSider.css'; +import { AppContext } from '../../context/AppContext'; +import { useContextSelector } from 'use-context-selector'; const { Sider } = Layout; @@ -26,35 +27,39 @@ function getItem({ label, key, icon, children, disabled }: { const AppSider: React.FC = () => { const [collapsed, setCollapsed] = useState(false); - const { - setCommand, - commands, setLogs, - setSummary, appVersion, - setFastMode, - setCurrentScreen - } = useAppContext() + const setCommand = useContextSelector(AppContext, (state) => state.setCommand); + const commands = useContextSelector(AppContext, (state) => state.commands); + const setLogs = useContextSelector(AppContext, (state) => state.setLogs); + const setSummary = useContextSelector(AppContext, (state) => state.setSummary); + const appVersion = useContextSelector(AppContext, (state) => state.appVersion); + const setFastMode = useContextSelector(AppContext, (state) => state.setFastMode); + const setCurrentScreen = useContextSelector(AppContext, (state) => state.setCurrentScreen); function handleSelect(key: string) { - setCommand(commands.find(el => el.label === key) as any) - setLogs([]) - setSummary(null as any) - setFastMode(false) - setCurrentScreen(false) + setCommand(commands.find(el => el.label === key) as any); + setLogs([]); + setSummary(null as any); + setFastMode(false); + setCurrentScreen(false); } return ( - setCollapsed(value)} > - handleSelect(e.key)} defaultSelectedKeys={['shop']} mode="inline" items={commands.map(el => { - return getItem({ + setCollapsed(value)}> + handleSelect(e.key)} + defaultSelectedKeys={['shop']} + mode="inline" + items={commands.map(el => getItem({ label: el.label, key: el.label, icon: el.icon, disabled: el.disabled - }) - })} /> + }))} + />
Version: {appVersion}
- ) -} + ); +}; export default AppSider \ No newline at end of file diff --git a/packages/app/src/components/Header/Header.tsx b/packages/app/src/components/Header/Header.tsx index 13a92b5..5ee7c7d 100644 --- a/packages/app/src/components/Header/Header.tsx +++ b/packages/app/src/components/Header/Header.tsx @@ -1,20 +1,20 @@ import { Breadcrumb, Button, Checkbox, Popconfirm } from "antd" -import { useAppContext } from "../../context/AppContext"; +import { AppContext } from "../../context/AppContext"; import { useState } from "react"; +import { useContextSelector } from "use-context-selector"; const Header: React.FC = () => { const [logsInterval, setLogsInterval] = useState(0) - const { - command, - logs, - setLogs, - setSummary, - fastMode, - setFastMode, - currentScreen, - setCurrentScreen, - devMode, - } = useAppContext() + const command = useContextSelector(AppContext, (state) => state.command); + const logs = useContextSelector(AppContext, (state) => state.logs); + const setLogs = useContextSelector(AppContext, (state) => state.setLogs); + const setSummary = useContextSelector(AppContext, (state) => state.setSummary); + const fastMode = useContextSelector(AppContext, (state) => state.fastMode); + const setFastMode = useContextSelector(AppContext, (state) => state.setFastMode); + const currentScreen = useContextSelector(AppContext, (state) => state.currentScreen); + const setCurrentScreen = useContextSelector(AppContext, (state) => state.setCurrentScreen); + const devMode = useContextSelector(AppContext, (state) => state.devMode); + async function handleStop() { diff --git a/packages/app/src/components/LogsContainer/LogsContainer.tsx b/packages/app/src/components/LogsContainer/LogsContainer.tsx index 1717557..7f69db5 100644 --- a/packages/app/src/components/LogsContainer/LogsContainer.tsx +++ b/packages/app/src/components/LogsContainer/LogsContainer.tsx @@ -1,6 +1,7 @@ import { useEffect, useRef } from "react"; -import { useAppContext } from "../../context/AppContext"; +import { AppContext } from "../../context/AppContext"; import './LogsContainer.css' +import { useContextSelector } from "use-context-selector"; const AlwaysScrollToBottom = () => { const elementRef = useRef(null); @@ -13,9 +14,7 @@ const AlwaysScrollToBottom = () => { const Logs: React.FC = () => { - const { - logs, - } = useAppContext() + const logs = useContextSelector(AppContext, (state) => state.logs); return (
diff --git a/packages/app/src/components/StatsContainer/StatsContainer.tsx b/packages/app/src/components/StatsContainer/StatsContainer.tsx index 9169284..29f88bd 100644 --- a/packages/app/src/components/StatsContainer/StatsContainer.tsx +++ b/packages/app/src/components/StatsContainer/StatsContainer.tsx @@ -1,10 +1,9 @@ -import { useAppContext } from "../../context/AppContext"; +import { useContextSelector } from "use-context-selector"; +import { AppContext } from "../../context/AppContext"; import './StatsContainer.css' const StatsContainer: React.FC = () => { - const { - summary, - } = useAppContext() + const summary = useContextSelector(AppContext, (state) => state.summary); return (
diff --git a/packages/app/src/context/AppContext.tsx b/packages/app/src/context/AppContext.tsx index 6c7cb22..5f196a9 100644 --- a/packages/app/src/context/AppContext.tsx +++ b/packages/app/src/context/AppContext.tsx @@ -1,10 +1,11 @@ -import React, { useContext, useState } from "react"; +import React, { useState } from "react"; import { ShoppingOutlined, RocketOutlined, BorderlessTableOutlined, RetweetOutlined, } from '@ant-design/icons'; +import { createContext, useContextSelector } from 'use-context-selector'; interface Command { id: string @@ -35,7 +36,7 @@ interface AppContextInterface { setDevMode: React.Dispatch> } -export const AppContext = React.createContext({ +export const AppContext = createContext({ commands: [], setCommands: () => { }, command: {} as any, @@ -122,4 +123,5 @@ export const AppProvider = ({ children }: { children: any }) => { ) } -export const useAppContext = () => useContext(AppContext); \ No newline at end of file +export const useAppContext = (selector: (state: AppContextInterface) => T): T => + useContextSelector(AppContext, selector); \ No newline at end of file diff --git a/packages/core/epic7_bot/core/ScreenManager.py b/packages/core/epic7_bot/core/ScreenManager.py index eacfec4..083e88f 100644 --- a/packages/core/epic7_bot/core/ScreenManager.py +++ b/packages/core/epic7_bot/core/ScreenManager.py @@ -8,6 +8,8 @@ from cv2 import Mat import numpy as np +import jax.numpy as jnp + from epic7_bot.core.DeviceManager import DeviceManager from epic7_bot.core.MathUtils import MathUtils from epic7_bot.templates.Template import Template @@ -27,9 +29,9 @@ def sleep(self, waitTime): time.sleep(random.uniform(waitTime, waitTime + 1)) def get_position_of_template_match(self, matchTemplate): - position_x = np.unravel_index( + position_x = jnp.unravel_index( matchTemplate.argmax(), matchTemplate.shape)[1] - position_y = np.unravel_index( + position_y = jnp.unravel_index( matchTemplate.argmax(), matchTemplate.shape)[0] return position_x, position_y @@ -37,7 +39,7 @@ def take_screenshot(self): png_screenshot_data = self.DeviceManager.device.shell( "screencap -p | busybox base64") png_screenshot_data = base64.b64decode(png_screenshot_data) - nparr = np.frombuffer(png_screenshot_data, np.uint8) + nparr = jnp.frombuffer(png_screenshot_data, jnp.uint8) img = cv2.imdecode(nparr, 0) return img @@ -87,8 +89,8 @@ def check_if_images_changed(self, img1, img2, percentage=70, action=None): if img1 is None or img2 is None: return False res = cv2.absdiff(img1, img2) - res = res.astype(np.uint8) - result = (np.count_nonzero(res) * 100) / res.size + res = res.astype(jnp.uint8) + result = (jnp.count_nonzero(res) * 100) / res.size if action is not None: logging.debug(f"{action}, check_if_images_changed: {result}") return result >= percentage From b2af835bb1110ca6cf5591e84d26ff34638a6f69 Mon Sep 17 00:00:00 2001 From: brunocordioli072 Date: Mon, 3 Jun 2024 16:37:36 -0300 Subject: [PATCH 2/3] feat: improved ScreenManager --- packages/core/epic7_bot/core/ScreenManager.py | 132 +++++++----------- packages/core/epic7_bot/modules/Arena.py | 18 +-- packages/core/epic7_bot/modules/Battle.py | 23 +-- packages/core/epic7_bot/modules/Guild.py | 44 +++--- packages/core/epic7_bot/modules/PetHouse.py | 12 +- packages/core/epic7_bot/modules/Sanctuary.py | 24 ++-- packages/core/epic7_bot/modules/SecretShop.py | 14 +- packages/core/epic7_bot/modules/Summon.py | 14 +- .../epic7_bot/processes/CheckConnection.py | 2 +- .../processes/DispatchMissionChecker.py | 2 +- 10 files changed, 124 insertions(+), 161 deletions(-) diff --git a/packages/core/epic7_bot/core/ScreenManager.py b/packages/core/epic7_bot/core/ScreenManager.py index 083e88f..d6021bf 100644 --- a/packages/core/epic7_bot/core/ScreenManager.py +++ b/packages/core/epic7_bot/core/ScreenManager.py @@ -8,8 +8,6 @@ from cv2 import Mat import numpy as np -import jax.numpy as jnp - from epic7_bot.core.DeviceManager import DeviceManager from epic7_bot.core.MathUtils import MathUtils from epic7_bot.templates.Template import Template @@ -17,144 +15,108 @@ class ScreenManager(metaclass=Singleton): - def __init__(self, fastMode=False): + def __init__(self, fastMode: bool = False): self.MathUtils = MathUtils() self.DeviceManager = DeviceManager() self.fastMode = fastMode - def sleep(self, waitTime): - if self.fastMode: - time.sleep(random.uniform(0.5, 0.8)) - return - time.sleep(random.uniform(waitTime, waitTime + 1)) - - def get_position_of_template_match(self, matchTemplate): - position_x = jnp.unravel_index( - matchTemplate.argmax(), matchTemplate.shape)[1] - position_y = jnp.unravel_index( - matchTemplate.argmax(), matchTemplate.shape)[0] + def sleep(self, waitTime: float): + sleep_time = random.uniform( + 0.5, 0.8) if self.fastMode else random.uniform(waitTime, waitTime + 1) + time.sleep(sleep_time) + + def get_position_of_template_match(self, matchTemplate: np.ndarray) -> tuple[int, int]: + position_y, position_x = np.unravel_index( + matchTemplate.argmax(), matchTemplate.shape) return position_x, position_y - def take_screenshot(self): + def take_screenshot(self) -> np.ndarray: + logging.info( + f"comecei aq") png_screenshot_data = self.DeviceManager.device.shell( "screencap -p | busybox base64") png_screenshot_data = base64.b64decode(png_screenshot_data) - nparr = jnp.frombuffer(png_screenshot_data, jnp.uint8) - img = cv2.imdecode(nparr, 0) + nparr = np.frombuffer(png_screenshot_data, np.uint8) + img = cv2.imdecode(nparr, cv2.IMREAD_GRAYSCALE) + logging.info( + f"terminei aq") return img - def take_screnshot_from_area(self, x1=None, x2=None, y1=None, y2=None): + def take_screenshot_from_area(self, x1: int = None, x2: int = None, y1: int = None, y2: int = None) -> np.ndarray: img = self.take_screenshot() - if x1 != None and y1 != None and x2 != None and y2 != None: + if x1 is not None and y1 is not None and x2 is not None and y2 is not None: img = img[y1:y2, x1:x2] - return img - def match_template_on_screen(self, template: Template, percentage=0.6): + def match_template_on_screen(self, template: Template, percentage: float = 0.6) -> np.ndarray: image = self.take_screenshot() match = cv2.matchTemplate( image, template['image'], cv2.TM_CCOEFF_NORMED) - min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(match) - + _, max_val, _, _ = cv2.minMaxLoc(match) logging.debug( f"match_template_on_screen {template['name']}, percentage: {max_val}, {max_val > percentage}") + return match if max_val > percentage else None - if max_val > percentage: - return match - else: - return None - - def match_template_on_screen_area(self, x1, y1, x2, y2, template, percentage=0.55): - image = self.take_screnshot_from_area(x1, x2, y1, y2) + def match_template_on_screen_area(self, x1: int, y1: int, x2: int, y2: int, template: Template, percentage: float = 0.55) -> float: + image = self.take_screenshot_from_area(x1, x2, y1, y2) result = cv2.matchTemplate( image, template['image'], cv2.TM_CCOEFF_NORMED) - min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) + _, max_val, _, _ = cv2.minMaxLoc(result) logging.debug( f"match_template_on_screen_area {template['name']}, percentage: {max_val}, {max_val > percentage}") - if max_val > percentage: - return max_val - else: - return None + return max_val if max_val > percentage else None - def match_template_on_screen_and_click_it(self, template, waitTime=0): + def match_template_on_screen_and_click_it(self, template: Template, waitTime: float = 0): self.sleep(random.uniform(waitTime, waitTime + 0.5)) match = self.match_template_on_screen(template) if match is not None: position_x, position_y = self.get_position_of_template_match(match) x, y = self.MathUtils.randomPoint(position_x, position_y) - self.DeviceManager.device.shell("input tap " + - str(x) + " " + str(y)) + self.DeviceManager.device.shell(f"input tap {x} {y}") - def check_if_images_changed(self, img1, img2, percentage=70, action=None): + def check_if_images_changed(self, img1: np.ndarray, img2: np.ndarray, percentage: float = 70, action: str = None) -> bool: if img1 is None or img2 is None: return False res = cv2.absdiff(img1, img2) - res = res.astype(jnp.uint8) - result = (jnp.count_nonzero(res) * 100) / res.size - if action is not None: + result = (np.count_nonzero(res) * 100) / res.size + if action: logging.debug(f"{action}, check_if_images_changed: {result}") return result >= percentage - def click_position(self, position_x, position_y, waitTime, message=None): + def click_position(self, position_x: int, position_y: int, waitTime: float, message: str = None): self.sleep(waitTime) x, y = self.MathUtils.randomPoint(position_x, position_y) - self.DeviceManager.device.shell("input tap " + str(x) + " " + str(y)) + self.DeviceManager.device.shell(f"input tap {x} {y}") - def random_click_on_area(self, x1, y1, x2, y2): + def random_click_on_area(self, x1: int, y1: int, x2: int, y2: int): position_x, position_y = self.MathUtils.random_point_in_area( x1, y1, x2, y2) self.click_position(position_x, position_y, waitTime=0) - # position_x, position_y = self.MathUtils.midpoint(x1, y1, x2, y2) - # self.click_position(position_x, position_y, waitTime=0) - def random_click_on_area_get_before_and_after_images_from_screen(self, x1, y1, x2, y2): - beforeImage = self.take_screenshot() + def random_click_on_area_get_before_and_after_images(self, x1: int, y1: int, x2: int, y2: int) -> tuple[np.ndarray, np.ndarray]: + before_image = self.take_screenshot() self.random_click_on_area(x1, y1, x2, y2) self.sleep(3) - afterImage = self.take_screenshot() - return (beforeImage, afterImage) + after_image = self.take_screenshot() + return before_image, after_image - def random_click_on_area_and_check_change_on_screen_retry(self, x1, y1, x2, y2, action=None, percentage=70): + def random_click_on_area_and_check_change_retry(self, x1: int, y1: int, x2: int, y2: int, action: str = None, percentage: float = 70) -> bool: self.sleep(1) - if action is not None: + if action: logging.info(f"{action}") - beforeImage, afterImage = None, None - count = 0 - while self.check_if_images_changed(beforeImage, afterImage, percentage=percentage, action=action) is False and count < 2: - beforeImage, afterImage = self.random_click_on_area_get_before_and_after_images_from_screen( + for _ in range(2): + before_image, after_image = self.random_click_on_area_get_before_and_after_images( x1, y1, x2, y2) - count += 1 - if count < 2 == False: - logging.error(f"{action}") - - return count < 2 + if self.check_if_images_changed(before_image, after_image, percentage, action): + return True - def random_click_on_area_get_before_and_after_images_from_area(self, x1, y1, x2, y2): - beforeImage = self.take_screnshot_from_area(x1, x2, y1, y2) - self.random_click_on_area(x1, y1, x2, y2) - self.sleep(3) - afterImage = self.take_screnshot_from_area(x1, x2, y1, y2) - return (beforeImage, afterImage) - - def random_click_on_area_and_check_change_on_area_retry(self, x1, y1, x2, y2, action=None, percentage=70): - self.sleep(1) - if action is not None: - logging.info(f"{action}") - - beforeImage, afterImage = None, None - count = 0 - while self.check_if_images_changed(beforeImage, afterImage, percentage, action) is False and count < 2: - beforeImage, afterImage = self.random_click_on_area_get_before_and_after_images_from_area( - x1, y1, x2, y2) - count += 1 - return count < 2 + logging.error(f"{action}") + return False def ensure_not_on_sleep_mode_on_lobby(self): logging.info( "Double Click on Screen to Ensure not on Sleep Mode on Lobby") - self.random_click_on_area( - x1=894, y1=848, x2=935, y2=879) + self.random_click_on_area(894, 848, 935, 879) self.sleep(1) - self.random_click_on_area( - x1=894, y1=848, x2=935, y2=879) + self.random_click_on_area(894, 848, 935, 879) diff --git a/packages/core/epic7_bot/modules/Arena.py b/packages/core/epic7_bot/modules/Arena.py index 55f4286..b116102 100644 --- a/packages/core/epic7_bot/modules/Arena.py +++ b/packages/core/epic7_bot/modules/Arena.py @@ -14,15 +14,15 @@ def __init__(self): def battle_rotation(self): logging.info(f"Started battle rotation") - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1065, x2=1216, y1=799, y2=852, action="Click on start battle") self.ScreenManager.sleep(4) - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1476, x2=1574, y1=23, y2=76, action="Click on skip") - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1379, x2=1439, y1=14, y2=68, action="Click on auto battle") logging.info(f"Wait for skip button to appear") @@ -30,16 +30,16 @@ def battle_rotation(self): template=self.CommonTemplates.skip_button, percentage=0.55) is None: self.ScreenManager.sleep(1) - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1476, x2=1574, y1=23, y2=76, action="Click on skip button") self.ScreenManager.sleep(2) - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1378, x2=1546, y1=802, y2=853, action="Click on confirm") def do_battle_rotation(self, x1, y1, x2, y2, action): - clicked = self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + clicked = self.ScreenManager.random_click_on_area_and_check_change_retry( x1, y1, x2, y2, action, percentage=50) if clicked: self.battle_rotation() @@ -86,13 +86,13 @@ def start_arena_npc_auto_battle(self): def start_arena_npc_auto_battle_from_lobby(self): self.ScreenManager.ensure_not_on_sleep_mode_on_lobby() - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1022, x2=1129, y1=749, y2=882, action="Click on arena icon on lobby") - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=246, x2=438, y1=218, y2=283, action="Click on arena ranked") - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1334, x2=1551, y1=236, y2=298, action="Click on NPC opponents") self.start_arena_npc_auto_battle() diff --git a/packages/core/epic7_bot/modules/Battle.py b/packages/core/epic7_bot/modules/Battle.py index 2008525..d54759c 100644 --- a/packages/core/epic7_bot/modules/Battle.py +++ b/packages/core/epic7_bot/modules/Battle.py @@ -62,16 +62,16 @@ def do_hunt_rotation(self): ) is not None ): - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1395, y1=808, x2=1492, y2=839, action="Click on confirm button" ) self.total_rotations += 1 - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1416, x2=1533, y1=810, y2=841, action="Click on try again button" ) - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1404, y1=811, x2=1469, y2=842, action="Click on start button" ) @@ -81,8 +81,9 @@ def do_hunt_rotation(self): self.do_hunt_rotation() def show_stats(self): - self.table.update({'total_rotations': self.total_rotations}, doc_ids=[1]) - + self.table.update( + {'total_rotations': self.total_rotations}, doc_ids=[1]) + # comment = ( # f"\nTotal Rotations: {str(self.total_rotations)}{' '*30} \n" # + f"{' '*30} \n" @@ -100,7 +101,7 @@ def start_hunt(self): ) is None ): - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=705, y1=675, x2=749, @@ -109,7 +110,7 @@ def start_hunt(self): percentage=20, ) - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1404, y1=811, x2=1469, y2=842, action="Click on start button" ) @@ -118,19 +119,19 @@ def start_hunt(self): def start_hunt_from_lobby(self): self.ScreenManager.ensure_not_on_sleep_mode_on_lobby() - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1164, y1=803, x2=1254, y2=870, action="Click on Battle button" ) - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=907, y1=648, x2=1055, y2=715, action="Click on Hunt button" ) - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=984, y1=259, x2=1113, y2=336, action="Click on Wyvern Hunt" ) - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1404, y1=810, x2=1559, y2=848, action="Click on Select Team" ) diff --git a/packages/core/epic7_bot/modules/Guild.py b/packages/core/epic7_bot/modules/Guild.py index 49903cd..461fa69 100644 --- a/packages/core/epic7_bot/modules/Guild.py +++ b/packages/core/epic7_bot/modules/Guild.py @@ -7,79 +7,79 @@ def __init__(self): super(self.__class__, self).__init__() def world_boss_rotation(self): - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1083, y1=808, x2=1182, y2=848, action="Click on Ready Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1221, y1=739, x2=1390, y2=774, action="Click on Select Team Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1249, y1=805, x2=1460, y2=838, action="Click on Team Formation Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=120, y1=794, x2=287, y2=838, action="Click on Auto Assign Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1104, y1=804, x2=1189, y2=842, action="Click on Start Button") sleep(10) - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1318, y1=25, x2=1407, y2=62, action="Click on Skip Button") sleep(10) - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=735, y1=758, x2=873, y2=798, action="Click on Open All Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=735, y1=758, x2=873, y2=798, action="Click on Confirm Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1388, y1=806, x2=1505, y2=844, action="Click on Confirm Button Again") def do_daily_contributions(self): self.ScreenManager.ensure_not_on_sleep_mode_on_lobby() - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=604, y1=812, x2=679, y2=881, action="Click on Guild Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=759, y1=797, x2=844, y2=833, action="Click on Tap to Close") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1064, y1=792, x2=1186, y2=848, action="Click on Daily Reward") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=759, y1=797, x2=844, y2=833, action="Click on Tap to Close") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1332, y1=249, x2=1476, y2=294, action="Click on Battlefield Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=408, y1=509, x2=614, y2=556, action="Click on World Boss Button") self.world_boss_rotation() self.world_boss_rotation() - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=34, y1=12, x2=225, y2=67, action="Go Back to Clan Lobby") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1336, y1=502, x2=1441, y2=535, action="Click on Donate Section") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1041, y1=528, x2=1155, y2=559, action="Click on Donate Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=720, y1=649, x2=878, y2=683, action="Click on Tap to Close") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1046, y1=799, x2=1159, y2=839, action="Click on Donate Button Again") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=720, y1=649, x2=878, y2=683, action="Click on Tap to Close") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=34, y1=12, x2=225, y2=67, action="Go Back to Lobby") diff --git a/packages/core/epic7_bot/modules/PetHouse.py b/packages/core/epic7_bot/modules/PetHouse.py index 38d7484..af5cc1d 100644 --- a/packages/core/epic7_bot/modules/PetHouse.py +++ b/packages/core/epic7_bot/modules/PetHouse.py @@ -9,20 +9,20 @@ def __init__(self): def get_free_pet_summon(self): self.ScreenManager.ensure_not_on_sleep_mode_on_lobby() - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=481, y1=795, x2=582, y2=877, action="Click on Pet House Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1096, y1=795, x2=1197, y2=839, action="Click on First Adopt Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=810, y1=747, x2=923, y2=786, action="Click on Second Adopt Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=699, y1=841, x2=878, y2=879, action="Click on Tap to Close") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=699, y1=841, x2=878, y2=879, action="Click on Tap to Close Again") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=34, y1=12, x2=225, y2=67, action="Go Back to Lobby") diff --git a/packages/core/epic7_bot/modules/Sanctuary.py b/packages/core/epic7_bot/modules/Sanctuary.py index 3cc5da5..fa78b36 100644 --- a/packages/core/epic7_bot/modules/Sanctuary.py +++ b/packages/core/epic7_bot/modules/Sanctuary.py @@ -9,44 +9,44 @@ def __init__(self): def do_sanctuary_routine(self): self.ScreenManager.ensure_not_on_sleep_mode_on_lobby() - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=259, y1=240, x2=359, y2=301, action="Click on Sanctuary Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=708, y1=596, x2=876, y2=661, action="Click on Heart of Orbis Reward") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=722, y1=608, x2=882, y2=647, action="Click on Tap to Close") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=351, y1=365, x2=505, y2=388, action="Click on Forest of Souls") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=663, y1=157, x2=748, y2=223, action="Click on Penguin Nest Reward") sleep(2) - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=722, y1=608, x2=882, y2=647, action="Click on Tap to Close") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1251, y1=276, x2=1320, y2=322, action="Click on Spirit Well Reward") sleep(2) - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=722, y1=608, x2=882, y2=647, action="Click on Tap to Close") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=915, y1=508, x2=989, y2=573, action="Click on MolaGora Farm Reward") sleep(2) - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=722, y1=608, x2=882, y2=647, action="Click on Tap to Close") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=34, y1=12, x2=225, y2=67, action="Go Back to Sanctuary") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=34, y1=12, x2=225, y2=67, action="Go Back to Lobby") diff --git a/packages/core/epic7_bot/modules/SecretShop.py b/packages/core/epic7_bot/modules/SecretShop.py index 92e76f6..c95cade 100644 --- a/packages/core/epic7_bot/modules/SecretShop.py +++ b/packages/core/epic7_bot/modules/SecretShop.py @@ -55,10 +55,10 @@ def check_bookmarks(self): x2 = x + math.floor(width / 2) + 800 y2 = y + math.floor(height / 2) + 55 - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=x1, y1=y1, x2=x2, y2=y2, action="Click on Buy") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=761, y1=605, x2=1059, y2=660, action="Click on Confirm Buy") self.mystic_count += 1 @@ -75,10 +75,10 @@ def check_bookmarks(self): x2 = x + math.floor(width / 2) + 800 y2 = y + math.floor(height / 2) + 55 - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=x1, y1=y1, x2=x2, y2=y2, action="Click on Buy") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=761, y1=605, x2=1059, y2=660, action="Click on Confirm Buy") self.covenant_count += 1 @@ -100,9 +100,9 @@ def check_store(self): self.check_bookmarks() def refresh(self): - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=287, y1=808, x2=387, y2=838, action="Click on Refresh Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=878, y1=537, x2=986, y2=568, action="Click on Confirm Button") self.refreshes_count += 1 @@ -132,6 +132,6 @@ def start_auto_buy_secret_shop(self): def start_auto_buy_secret_shop_from_lobby(self): self.ScreenManager.ensure_not_on_sleep_mode_on_lobby() - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=683, y1=204, x2=728, y2=246, action="Click on Bartender") self.start_auto_buy_secret_shop() diff --git a/packages/core/epic7_bot/modules/Summon.py b/packages/core/epic7_bot/modules/Summon.py index 1bae004..979f5e6 100644 --- a/packages/core/epic7_bot/modules/Summon.py +++ b/packages/core/epic7_bot/modules/Summon.py @@ -9,25 +9,25 @@ def __init__(self): def get_free_summon(self): self.ScreenManager.ensure_not_on_sleep_mode_on_lobby() - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=245, y1=801, x2=349, y2=878, action="Click on Summon Lobby Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1232, y1=649, x2=1478, y2=685, action="Click on Covenant Summon Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=433, y1=795, x2=554, y2=851, action="Click on Free Summon Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=889, y1=636, x2=1010, y2=678, action="Click on Confirm Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=702, y1=453, x2=794, y2=508, action="Click on Middle of Screen") sleep(4) - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=143, y1=809, x2=251, y2=842, action="Click on Back Button") - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=34, y1=12, x2=225, y2=67, action="Go Back to Lobby") diff --git a/packages/core/epic7_bot/processes/CheckConnection.py b/packages/core/epic7_bot/processes/CheckConnection.py index 7647036..3dd8ba3 100644 --- a/packages/core/epic7_bot/processes/CheckConnection.py +++ b/packages/core/epic7_bot/processes/CheckConnection.py @@ -41,7 +41,7 @@ def run(self): time.sleep(1) if there_was_a_connection_error is not None: there_was_a_connection_error = self.match_there_was_a_connection_error_template() - self.ScreenManager.random_click_on_area_and_check_change_on_area_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=475, y1=372, x2=1122, y2=406, action="Click on there_was_a_connection_error") if there_was_a_connection_error is None: main_process.resume() diff --git a/packages/core/epic7_bot/processes/DispatchMissionChecker.py b/packages/core/epic7_bot/processes/DispatchMissionChecker.py index e754100..e12636b 100644 --- a/packages/core/epic7_bot/processes/DispatchMissionChecker.py +++ b/packages/core/epic7_bot/processes/DispatchMissionChecker.py @@ -37,7 +37,7 @@ def run(self): main_process.suspend() logging.error(f"Dispatch Mission appeared") time.sleep(5) - self.ScreenManager.random_click_on_area_and_check_change_on_screen_retry( + self.ScreenManager.random_click_on_area_and_check_change_retry( x1=1099, y1=703, x2=1228, y2=745, action="Click on Try Again") time.sleep(2) main_process.resume() From 523db57df6914d5b8a062de77a8f0df5774135c8 Mon Sep 17 00:00:00 2001 From: brunocordioli072 Date: Mon, 3 Jun 2024 16:39:22 -0300 Subject: [PATCH 3/3] fix: not using print --- packages/core/epic7_bot/core/ScreenManager.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/core/epic7_bot/core/ScreenManager.py b/packages/core/epic7_bot/core/ScreenManager.py index d6021bf..0774804 100644 --- a/packages/core/epic7_bot/core/ScreenManager.py +++ b/packages/core/epic7_bot/core/ScreenManager.py @@ -31,15 +31,11 @@ def get_position_of_template_match(self, matchTemplate: np.ndarray) -> tuple[int return position_x, position_y def take_screenshot(self) -> np.ndarray: - logging.info( - f"comecei aq") png_screenshot_data = self.DeviceManager.device.shell( "screencap -p | busybox base64") png_screenshot_data = base64.b64decode(png_screenshot_data) nparr = np.frombuffer(png_screenshot_data, np.uint8) img = cv2.imdecode(nparr, cv2.IMREAD_GRAYSCALE) - logging.info( - f"terminei aq") return img def take_screenshot_from_area(self, x1: int = None, x2: int = None, y1: int = None, y2: int = None) -> np.ndarray: