Set misc_gold=0 in case stash is full of gold (#260)

* Set misc_gold=0 in case stash is full of gold

* fix config

* fix imports
This commit is contained in:
aeon0
2021-12-11 12:38:46 +01:00
committed by GitHub
parent ea74a3b43f
commit 2c53524e79
7 changed files with 21 additions and 19 deletions
+3 -2
View File
@@ -21,7 +21,8 @@ from pather import Pather, Location
from npc_manager import NpcManager
from health_manager import HealthManager
from death_manager import DeathManager
from char import Sorceress, Hammerdin
from char.sorceress import Sorceress
from char.hammerdin import Hammerdin
from run import Pindle, ShenkEld, Trav
from town import TownManager, A3, A4, A5
@@ -32,7 +33,7 @@ class Bot:
self._game_stats = game_stats
self._config = Config()
self._template_finder = TemplateFinder(self._screen)
self._item_finder = ItemFinder()
self._item_finder = ItemFinder(self._config)
self._ui_manager = UiManager(self._screen, self._template_finder)
self._belt_manager = BeltManager(self._screen, self._template_finder)
self._pather = Pather(self._screen, self._template_finder)
-2
View File
@@ -1,3 +1 @@
from .i_char import IChar
from .hammerdin import Hammerdin
from .sorceress import Sorceress
+8 -6
View File
@@ -25,8 +25,7 @@ class Item:
roi: List[int] = None
class ItemFinder:
def __init__(self):
config = Config()
def __init__(self, config: Config):
self._item_cropper = ItemCropper()
# color range for each type of item
# hsv ranges in opencv h: [0-180], s: [0-255], v: [0, 255]
@@ -40,10 +39,10 @@ class ItemFinder:
"runes": [np.array([21, 251, 190]), np.array([22, 255, 255])]
}
self._items_to_pick = config.items
self._folder_name = "items"
self._min_score = 0.86
# load all templates
self._config = config
self._templates = {}
for filename in os.listdir(f'assets/{self._folder_name}'):
filename = filename.lower()
@@ -53,7 +52,7 @@ class ItemFinder:
blacklist_item = item_name.startswith("bl__")
# these items will be searched for regardless of pickit setting (e.g. for runes to avoid mixup)
force_search = item_name.startswith("rune_")
if blacklist_item or ((item_name in config.items and self._config.items[item_name]) or force_search):
if blacklist_item or ((item_name in config.items and config.items[item_name]) or force_search):
data = cv2.imread(f"assets/{self._folder_name}/" + filename)
filtered_template = np.zeros(data.shape, np.uint8)
for key in self._template_color_ranges:
@@ -69,6 +68,9 @@ class ItemFinder:
template.blacklist = True
self._templates[item_name] = template
def update_items_to_pick(self, config: Config):
self._items_to_pick = config.items
def search(self, inp_img: np.ndarray) -> List[Item]:
img = inp_img[:,:,:]
start = time.time()
@@ -118,7 +120,7 @@ class ItemFinder:
item.roi = [max_loc[0] + x, max_loc[1] + y, template.data.shape[1], template.data.shape[0]]
center_abs = (item.center[0] - (inp_img.shape[1] // 2), item.center[1] - (inp_img.shape[0] // 2))
item.dist = math.dist(center_abs, (0, 0))
if item is not None and self._config.items[item.name]:
if item is not None and self._items_to_pick[item.name]:
item_list.append(item)
elapsed = time.time() - start
# print(f"Item Search: {elapsed}")
@@ -131,7 +133,7 @@ if __name__ == "__main__":
from config import Config
config = Config()
screen = Screen(config.general["monitor"])
item_finder = ItemFinder()
item_finder = ItemFinder(config)
while 1:
# img = cv2.imread("")
img = screen.grab().copy()
+1 -1
View File
@@ -167,7 +167,7 @@ if __name__ == "__main__":
belt_manager = BeltManager(screen, t_finder)
belt_manager._pot_needs = {"rejuv": 0, "health": 2, "mana": 2}
pather = Pather(screen, t_finder)
item_finder = ItemFinder()
item_finder = ItemFinder(config)
char = Hammerdin(config.hammerdin, config.char, screen, t_finder, ui_manager, pather)
pickit = PickIt(screen, item_finder, ui_manager, belt_manager, game_states)
print(pickit.pick_up_items(char))
+2 -2
View File
@@ -11,10 +11,10 @@ from utils.misc import wait
class TownManager:
def __init__(self, template_finder: TemplateFinder, ui_manager: UiManager, a3: A3, a4: A4, a5: A5):
self._config = Config()
self._template_finder = template_finder
self._ui_manager = ui_manager
self._item_finder = ItemFinder()
self._config = Config()
self._item_finder = ItemFinder(self._config)
self._acts: dict[Location, IAct] = {
Location.A3_TOWN_START: a3,
Location.A4_TOWN_START: a4,
+6 -5
View File
@@ -323,11 +323,12 @@ class UiManager():
if self._curr_stash["gold"] > 3:
inventory_full_gold = self._template_finder.search("INVENTORY_FULL_GOLD", self._screen.grab(), roi=self._config.ui_roi["inventory_gold"], threshold=0.98)
if inventory_full_gold.valid:
# TODO: Instead of quiting turn of gold pickup in pickit or itemfinder
Logger.error("All stash tabs and character are full of gold, quitting")
msg = "All stash tabs and character are full of gold, turn of gold pickup"
Logger.info(msg)
if self._config.general["custom_discord_hook"]:
send_discord(f"{self._config.general['name']} all stash is full of gold, quitting", self._config.general["custom_discord_hook"])
os._exit(1)
send_discord(f"{self._config.general['name']}: {msg}", self._config.general["custom_discord_hook"])
self._config.items["misc_gold"] = 0
item_finder.update_items_to_pick(self._config)
else:
Logger.info("All tabs are full but character is not. Continuing.")
self._curr_stash["gold"] = 3
@@ -532,6 +533,6 @@ if __name__ == "__main__":
config = Config()
screen = Screen(config.general["monitor"])
template_finder = TemplateFinder(screen)
item_finder = ItemFinder()
item_finder = ItemFinder(config)
ui_manager = UiManager(screen, template_finder)
ui_manager.stash_all_items(1, item_finder)
+1 -1
View File
@@ -10,7 +10,7 @@ from template_finder import TemplateFinder
def run_graphic_debugger():
config = Config()
screen = Screen(config.general["monitor"])
item_finder = ItemFinder()
item_finder = ItemFinder(config)
template_finder = TemplateFinder(screen)
search_templates = ["A5_TOWN_0", "A5_TOWN_1", "A5_TOWN_2", "A5_TOWN_3"]
while 1: