From 6f0a000bf1edb66a33db0831f889b7bdfbdff114 Mon Sep 17 00:00:00 2001 From: aeon0 Date: Thu, 2 Dec 2021 16:40:13 +0100 Subject: [PATCH] Template finder auto load based on filenames (#178) * Fix gamerecovery creating 2 bot instances * Auto load template based on filenames * Actually load the correct templates --- .../{anya_gold.png => anya_name_tag_gold.png} | Bin ...anya_white.png => anya_name_tag_white.png} | Bin ...rzuk_gold.png => larzuk_name_tag_gold.png} | Bin ...uk_white.png => larzuk_name_tag_white.png} | Bin ...malah_gold.png => malah_name_tag_gold.png} | Bin ...lah_white.png => malah_name_tag_white.png} | Bin assets/npc/malah/trade_btn.png | Bin 1856 -> 0 bytes ...l_kehk_gold.png => qual_name_tag_gold.png} | Bin ...kehk_white.png => qual_name_tag_white.png} | Bin ...l_with_text.png => a5_red_portal_text.png} | Bin assets/templates/shenk/shenk_5.png | Bin 71542 -> 0 bytes src/template_finder.py | 130 ++---------------- src/utils/misc.py | 7 + 13 files changed, 18 insertions(+), 119 deletions(-) rename assets/npc/anya/{anya_gold.png => anya_name_tag_gold.png} (100%) rename assets/npc/anya/{anya_white.png => anya_name_tag_white.png} (100%) rename assets/npc/larzuk/{larzuk_gold.png => larzuk_name_tag_gold.png} (100%) rename assets/npc/larzuk/{larzuk_white.png => larzuk_name_tag_white.png} (100%) rename assets/npc/malah/{malah_gold.png => malah_name_tag_gold.png} (100%) rename assets/npc/malah/{malah_white.png => malah_name_tag_white.png} (100%) delete mode 100644 assets/npc/malah/trade_btn.png rename assets/npc/qual_kehk/{qual_kehk_gold.png => qual_name_tag_gold.png} (100%) rename assets/npc/qual_kehk/{qual_kehk_white.png => qual_name_tag_white.png} (100%) rename assets/templates/{a5_red_portal_with_text.png => a5_red_portal_text.png} (100%) delete mode 100644 assets/templates/shenk/shenk_5.png diff --git a/assets/npc/anya/anya_gold.png b/assets/npc/anya/anya_name_tag_gold.png similarity index 100% rename from assets/npc/anya/anya_gold.png rename to assets/npc/anya/anya_name_tag_gold.png diff --git a/assets/npc/anya/anya_white.png b/assets/npc/anya/anya_name_tag_white.png similarity index 100% rename from assets/npc/anya/anya_white.png rename to assets/npc/anya/anya_name_tag_white.png diff --git a/assets/npc/larzuk/larzuk_gold.png b/assets/npc/larzuk/larzuk_name_tag_gold.png similarity index 100% rename from assets/npc/larzuk/larzuk_gold.png rename to assets/npc/larzuk/larzuk_name_tag_gold.png diff --git a/assets/npc/larzuk/larzuk_white.png b/assets/npc/larzuk/larzuk_name_tag_white.png similarity index 100% rename from assets/npc/larzuk/larzuk_white.png rename to assets/npc/larzuk/larzuk_name_tag_white.png diff --git a/assets/npc/malah/malah_gold.png b/assets/npc/malah/malah_name_tag_gold.png similarity index 100% rename from assets/npc/malah/malah_gold.png rename to assets/npc/malah/malah_name_tag_gold.png diff --git a/assets/npc/malah/malah_white.png b/assets/npc/malah/malah_name_tag_white.png similarity index 100% rename from assets/npc/malah/malah_white.png rename to assets/npc/malah/malah_name_tag_white.png diff --git a/assets/npc/malah/trade_btn.png b/assets/npc/malah/trade_btn.png deleted file mode 100644 index 0ba0b7865d322c0e625b38ca2730f8be80fdf00d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1856 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 z 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 U+c6cY{{R3007*qoM6N<$g3BL=82|tP diff --git a/src/template_finder.py b/src/template_finder.py index 7bf0940..8be776e 100644 --- a/src/template_finder.py +++ b/src/template_finder.py @@ -7,7 +7,7 @@ from logger import Logger import time import os from config import Config -from utils.misc import load_template +from utils.misc import load_template, list_files_in_folder @dataclass @@ -18,7 +18,7 @@ class TemplateMatch: valid: bool = False class TemplateFinder: - def __init__(self, screen: Screen, scale_factor: float = None): + def __init__(self, screen: Screen): """ :param screen: Screen object :param scale_factor: Scale factor that is used for templates. Note: UI and NPC templates will always have scale of 1.0 @@ -27,123 +27,15 @@ class TemplateFinder: self._config = Config() self._scale_factor = 1.0 self.last_res = None - self._templates = { - # Templates for node in A5 Town - "A5_TOWN_0": [load_template(f"assets/templates/a5_town/a5_town_0.png", self._scale_factor), self._scale_factor], - "A5_TOWN_0.5": [load_template(f"assets/templates/a5_town/a5_town_0.5.png", self._scale_factor), self._scale_factor], - "A5_TOWN_1": [load_template(f"assets/templates/a5_town/a5_town_1.png", self._scale_factor), self._scale_factor], - "A5_TOWN_2": [load_template(f"assets/templates/a5_town/a5_town_2.png", self._scale_factor), self._scale_factor], - "A5_TOWN_3": [load_template(f"assets/templates/a5_town/a5_town_3.png", self._scale_factor), self._scale_factor], - "A5_TOWN_4": [load_template(f"assets/templates/a5_town/a5_town_4.png", self._scale_factor), self._scale_factor], - "A5_TOWN_5": [load_template(f"assets/templates/a5_town/a5_town_5.png", self._scale_factor), self._scale_factor], - "A5_TOWN_6": [load_template(f"assets/templates/a5_town/a5_town_6.png", self._scale_factor), self._scale_factor], - "A5_TOWN_7": [load_template(f"assets/templates/a5_town/a5_town_7.png", self._scale_factor), self._scale_factor], - "A5_TOWN_8": [load_template(f"assets/templates/a5_town/a5_town_8.png", self._scale_factor), self._scale_factor], - "A5_TOWN_9": [load_template(f"assets/templates/a5_town/a5_town_9.png", self._scale_factor), self._scale_factor], - "A5_TOWN_10": [load_template(f"assets/templates/a5_town/a5_town_10.png", self._scale_factor), self._scale_factor], - # Templates for nod at Pindle - "PINDLE_0": [load_template(f"assets/templates/pindle/pindle_0.png", self._scale_factor), self._scale_factor], - "PINDLE_1": [load_template(f"assets/templates/pindle/pindle_1.png", self._scale_factor), self._scale_factor], - "PINDLE_2": [load_template(f"assets/templates/pindle/pindle_2.png", self._scale_factor), self._scale_factor], - "PINDLE_3": [load_template(f"assets/templates/pindle/pindle_3.png", self._scale_factor), self._scale_factor], - "PINDLE_4": [load_template(f"assets/templates/pindle/pindle_4.png", self._scale_factor), self._scale_factor], - "PINDLE_5": [load_template(f"assets/templates/pindle/pindle_5.png", self._scale_factor), self._scale_factor], - "PINDLE_6": [load_template(f"assets/templates/pindle/pindle_6.png", self._scale_factor), self._scale_factor], - "PINDLE_7": [load_template(f"assets/templates/pindle/pindle_7.png", self._scale_factor), self._scale_factor], - # Templates for nodes to Eldritch - "ELDRITCH_START": [load_template(f"assets/templates/eldritch/eldritch_start.png", self._scale_factor), self._scale_factor], - "ELDRITCH_0": [load_template(f"assets/templates/eldritch/eldritch_0.png", self._scale_factor), self._scale_factor], - "ELDRITCH_1": [load_template(f"assets/templates/eldritch/eldritch_1.png", self._scale_factor), self._scale_factor], - "ELDRITCH_2": [load_template(f"assets/templates/eldritch/eldritch_2.png", self._scale_factor), self._scale_factor], - "ELDRITCH_3": [load_template(f"assets/templates/eldritch/eldritch_3.png", self._scale_factor), self._scale_factor], - "ELDRITCH_4": [load_template(f"assets/templates/eldritch/eldritch_4.png", self._scale_factor), self._scale_factor], - # Templates for nodes to Shenk (from Eldritch) - "SHENK_0": [load_template(f"assets/templates/shenk/shenk_0.png", self._scale_factor), self._scale_factor], - "SHENK_1": [load_template(f"assets/templates/shenk/shenk_1.png", self._scale_factor), self._scale_factor], - "SHENK_2": [load_template(f"assets/templates/shenk/shenk_2.png", self._scale_factor), self._scale_factor], - "SHENK_3": [load_template(f"assets/templates/shenk/shenk_3.png", self._scale_factor), self._scale_factor], - "SHENK_4": [load_template(f"assets/templates/shenk/shenk_4.png", self._scale_factor), self._scale_factor], - "SHENK_6": [load_template(f"assets/templates/shenk/shenk_6.png", self._scale_factor), self._scale_factor], - "SHENK_7": [load_template(f"assets/templates/shenk/shenk_7.png", self._scale_factor), self._scale_factor], - "SHENK_8": [load_template(f"assets/templates/shenk/shenk_8.png", self._scale_factor), self._scale_factor], - "SHENK_9": [load_template(f"assets/templates/shenk/shenk_9.png", self._scale_factor), self._scale_factor], - "SHENK_10": [load_template(f"assets/templates/shenk/shenk_10.png", self._scale_factor), self._scale_factor], - "SHENK_11": [load_template(f"assets/templates/shenk/shenk_11.png", self._scale_factor), self._scale_factor], - "SHENK_12": [load_template(f"assets/templates/shenk/shenk_12.png", self._scale_factor), self._scale_factor], - "SHENK_13": [load_template(f"assets/templates/shenk/shenk_13.png", self._scale_factor), self._scale_factor], - "SHENK_15": [load_template(f"assets/templates/shenk/shenk_15.png", self._scale_factor), self._scale_factor], - "SHENK_16": [load_template(f"assets/templates/shenk/shenk_16.png", self._scale_factor), self._scale_factor], - "SHENK_17": [load_template(f"assets/templates/shenk/shenk_17.png", self._scale_factor), self._scale_factor], - # Template Selectables - "A5_STASH": [load_template(f"assets/templates/a5_stash.png", self._scale_factor), self._scale_factor], - "A5_WP": [load_template(f"assets/templates/a5_wp.png", self._scale_factor), self._scale_factor], - "A5_RED_PORTAL": [load_template(f"assets/templates/a5_red_portal.png", self._scale_factor), self._scale_factor], - "A5_RED_PORTAL_TEXT": [load_template(f"assets/templates/a5_red_portal_with_text.png", self._scale_factor), self._scale_factor], - "BLUE_PORTAL": [load_template(f"assets/templates/blue_portal.png", self._scale_factor), self._scale_factor], - "BLUE_PORTAL_2": [load_template(f"assets/templates/blue_portal_2.png", self._scale_factor), self._scale_factor], - # Template Inventory / UI - "INVENTORY_GOLD_BTN": [load_template(f"assets/templates/inventory_gold_btn.png", 1.0), 1.0], - "D2_LOGO_HS": [load_template(f"assets/templates/d2_logo_hs.png", 1.0), 1.0], - "LOADING": [load_template(f"assets/templates/loading.png", 1.0), 1.0], - "PLAY_BTN": [load_template(f"assets/templates/play_btn.png", 1.0), 1.0], - "PLAY_BTN_GRAY": [load_template(f"assets/templates/play_btn_gray.png", 1.0), 1.0], - "NORMAL_BTN": [load_template(f"assets/templates/normal_btn.png", 1.0), 1.0], - "NIGHTMARE_BTN": [load_template(f"assets/templates/nightmare_btn.png", 1.0), 1.0], - "HELL_BTN": [load_template(f"assets/templates/hell_btn.png", 1.0), 1.0], - "SAVE_AND_EXIT_NO_HIGHLIGHT": [load_template(f"assets/templates/save_and_exit_no_highlight.png", 1.0), 1.0], - "SAVE_AND_EXIT_HIGHLIGHT": [load_template(f"assets/templates/save_and_exit_highlight.png", 1.0), 1.0], - "SERVER_ISSUES": [load_template(f"assets/templates/server_issues.png", 1.0), 1.0], - "WAYPOINT_MENU": [load_template(f"assets/templates/waypoint_menu.png", 1.0), 1.0], - "MERC": [load_template(f"assets/templates/merc.png", 1.0), 1.0], - "TELE_ACTIVE": [load_template(f"assets/templates/tele_active.png", 1.0), 1.0], - "TELE_INACTIVE": [load_template(f"assets/templates/tele_inactive.png", 1.0), 1.0], - "VIGOR": [load_template(f"assets/templates/vigor.png", 1.0), 1.0], - "REPAIR_BTN": [load_template(f"assets/templates/repair_btn.png", 1.0), 1.0], - "TP_TOME": [load_template(f"assets/templates/tp_tome.png", 1.0), 1.0], - "SUPER_HEALING_POTION": [load_template(f"assets/templates/super_healing_potion.png", 1.0), 1.0], - "SUPER_MANA_POTION": [load_template(f"assets/templates/super_mana_potion.png", 1.0), 1.0], - "FULL_REJUV_POTION": [load_template(f"assets/templates/full_rejuv_potion.png", 1.0), 1.0], - "REJUV_POTION": [load_template(f"assets/templates/rejuv_potion.png", 1.0), 1.0], - "WINDOW_INGAME_OFFSET_REFERENCE":[load_template(f"assets/templates/window_ingame_offset_reference.png", 1.0), 1.0], - # NPC: Action buttons - "TRADE": [load_template(f"assets/npc/action_btn/trade.png", 1.0), 1.0], - "TRADE_BLUE": [load_template(f"assets/npc/action_btn/trade_blue.png", 1.0), 1.0], - "RESURRECT": [load_template(f"assets/npc/action_btn/resurrect.png", 1.0), 1.0], - "RESURRECT_BLUE": [load_template(f"assets/npc/action_btn/resurrect_blue.png", 1.0), 1.0], - "TRADE_REPAIR": [load_template(f"assets/npc/action_btn/trade_repair.png", 1.0), 1.0], - "TRADE_REPAIR_BLUE": [load_template(f"assets/npc/action_btn/trade_repair_blue.png", 1.0), 1.0], - # NPC: Qual-Kehk - "QUAL_FRONT": [load_template(f"assets/npc/qual_kehk/qual_front.png", 1.0), 1.0], - "QUAL_SIDE": [load_template(f"assets/npc/qual_kehk/qual_side.png", 1.0), 1.0], - "QUAL_BACK": [load_template(f"assets/npc/qual_kehk/qual_back.png", 1.0), 1.0], - "QUAL_45": [load_template(f"assets/npc/qual_kehk/qual_45.png", 1.0), 1.0], - "QUAL_45_2": [load_template(f"assets/npc/qual_kehk/qual_45_2.png", 1.0), 1.0], - "QUAL_45_3": [load_template(f"assets/npc/qual_kehk/qual_45_3.png", 1.0), 1.0], - "QUAL_NAME_TAG_WHITE": [load_template(f"assets/npc/qual_kehk/qual_kehk_white.png", 1.0), 1.0], - "QUAL_NAME_TAG_GOLD": [load_template(f"assets/npc/qual_kehk/qual_kehk_gold.png", 1.0), 1.0], - # NPC: Malah - "MALAH_FRONT": [load_template(f"assets/npc/malah/malah_front.png", 1.0), 1.0], - "MALAH_BACK": [load_template(f"assets/npc/malah/malah_BACK.png", 1.0), 1.0], - "MALAH_45": [load_template(f"assets/npc/malah/malah_45.png", 1.0), 1.0], - "MALAH_SIDE": [load_template(f"assets/npc/malah/malah_side.png", 1.0), 1.0], - "MALAH_SIDE_2": [load_template(f"assets/npc/malah/malah_side_2.png", 1.0), 1.0], - "MALAH_NAME_TAG_WHITE": [load_template(f"assets/npc/malah/malah_white.png", 1.0), 1.0], - "MALAH_NAME_TAG_GOLD": [load_template(f"assets/npc/malah/malah_gold.png", 1.0), 1.0], - # NPC: Larzuk - "LARZUK_FRONT": [load_template(f"assets/npc/larzuk/larzuk_front.png", 1.0), 1.0], - "LARZUK_BACK": [load_template(f"assets/npc/larzuk/larzuk_back.png", 1.0), 1.0], - "LARZUK_SIDE": [load_template(f"assets/npc/larzuk/larzuk_side.png", 1.0), 1.0], - "LARZUK_SIDE_2": [load_template(f"assets/npc/larzuk/larzuk_side_2.png", 1.0), 1.0], - "LARZUK_SIDE_3": [load_template(f"assets/npc/larzuk/larzuk_side_3.png", 1.0), 1.0], - "LARZUK_NAME_TAG_WHITE": [load_template(f"assets/npc/larzuk/larzuk_white.png", 1.0), 1.0], - "LARZUK_NAME_TAG_GOLD": [load_template(f"assets/npc/larzuk/larzuk_gold.png", 1.0), 1.0], - # NPC: Anya - "ANYA_FRONT": [load_template(f"assets/npc/anya/anya_front.png", 1.0), 1.0], - "ANYA_BACK": [load_template(f"assets/npc/anya/anya_back.png", 1.0), 1.0], - "ANYA_SIDE": [load_template(f"assets/npc/anya/anya_side.png", 1.0), 1.0], - "ANYA_NAME_TAG_GOLD": [load_template(f"assets/npc/anya/anya_gold.png", 1.0), 1.0], - "ANYA_NAME_TAG_WHITE": [load_template(f"assets/npc/anya/anya_white.png", 1.0), 1.0], - } + template_path = "assets\\templates" + npc_path = "assets\\npc" + pathes = list_files_in_folder(npc_path) + list_files_in_folder(template_path) + self._templates = {} + for file_path in pathes: + file_name: str = os.path.basename(file_path) + if file_name.endswith('.png'): + key = file_name[:-4].upper() + self._templates[key] = [load_template(file_path, 1.0), 1.0] def get_template(self, key): return self._templates[key][0] diff --git a/src/utils/misc.py b/src/utils/misc.py index 8d93cee..c67a864 100644 --- a/src/utils/misc.py +++ b/src/utils/misc.py @@ -57,3 +57,10 @@ def load_template(path, scale_factor): template_img = cv2.resize(template_img, None, fx=scale_factor, fy=scale_factor, interpolation=cv2.INTER_NEAREST) return template_img return None + +def list_files_in_folder(path: str): + r = [] + for root, _, files in os.walk(path): + for name in files: + r.append(os.path.join(root, name)) + return r