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:
+3
-2
@@ -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)
|
||||
|
||||
@@ -1,3 +1 @@
|
||||
from .i_char import IChar
|
||||
from .hammerdin import Hammerdin
|
||||
from .sorceress import Sorceress
|
||||
|
||||
@@ -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
@@ -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))
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user