From 96490217ddac0dfb144caa87c12c35d6afcc3662 Mon Sep 17 00:00:00 2001 From: Adriein Date: Tue, 24 Oct 2023 19:07:27 +0200 Subject: [PATCH 01/25] locate ring in the ui --- CaveBot/CaveBot.py | 6 +++--- ScreenAnalizerPackage/Scanner.py | 32 +++++++++++++++++++++++++++++++ Wiki/Ui/GameWindow/soul.png | Bin 0 -> 974 bytes 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 Wiki/Ui/GameWindow/soul.png diff --git a/CaveBot/CaveBot.py b/CaveBot/CaveBot.py index ce13cd5..115dcf7 100644 --- a/CaveBot/CaveBot.py +++ b/CaveBot/CaveBot.py @@ -27,17 +27,17 @@ def start(self): auto_loot = AutoLoot(player, Screen.GAME_WINDOW) - auto_walk = AutoWalk(cave_bot_script, player, walking_event) + # auto_walk = AutoWalk(cave_bot_script, player, walking_event) auto_attack = AutoAttack(auto_loot, player, walking_event, combat_event, cave_bot_script.creatures) attack_thread = Thread(daemon=True, target=auto_attack.attack) - walk_thread = Thread(daemon=True, target=auto_walk.start) + # walk_thread = Thread(daemon=True, target=auto_walk.start) attack_thread.start() - walk_thread.start() + # walk_thread.start() walking_event.set() diff --git a/ScreenAnalizerPackage/Scanner.py b/ScreenAnalizerPackage/Scanner.py index 8e794be..a0c5ec4 100644 --- a/ScreenAnalizerPackage/Scanner.py +++ b/ScreenAnalizerPackage/Scanner.py @@ -8,7 +8,21 @@ class Scanner: + @staticmethod + def ring_position(frame: np.array) -> tuple[int, int, int, int]: + grey_scale_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) + + soul_anchor = Cv2File.load_image('Wiki/Ui/GameWindow/soul.png') + + match = cv2.matchTemplate(grey_scale_frame, soul_anchor, cv2.TM_CCOEFF_NORMED) + + [_, _, _, max_coordinates] = cv2.minMaxLoc(match) + + (x, y) = max_coordinates + height, width = soul_anchor.shape + + return x, x + width, y, y + height @staticmethod def combat_stance_position(frame: np.array) -> tuple[int, int, int, int]: grey_scale_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) @@ -23,6 +37,24 @@ def combat_stance_position(frame: np.array) -> tuple[int, int, int, int]: height, width = combat_stance_anchor.shape + frame_roi = frame[y:y + height + 20, x:x + width] + + hsv_image = cv2.cvtColor(frame_roi, cv2.COLOR_BGR2HSV) + + # Window name in which image is displayed + window_name = 'image' + + # Using cv2.imshow() method + # Displaying the image + cv2.imshow(window_name, hsv_image) + + # waits for user to press any key + # (this is necessary to avoid Python kernel form crashing) + cv2.waitKey(0) + + # closing all open windows + cv2.destroyAllWindows() + return x, x + width, y, y + height @staticmethod diff --git a/Wiki/Ui/GameWindow/soul.png b/Wiki/Ui/GameWindow/soul.png new file mode 100644 index 0000000000000000000000000000000000000000..d1fbaf6554c6909f85a6178654510f800b7f299b GIT binary patch literal 974 zcmV;<12O!GP)SS|9tQF-8P^3{xBt!%% zsnKFeObA;~~5;02%v8qY{h#@Lc%xrCuQqo#y&P2qV z5l|azv>_s+H2@6#5CE_uS z<4gHJY`u2Pnx&zwVHlRvd-vZb=TFW46jn`i%N1iQl~T^R7^3%0dt@Z%EG$Tv zQW9n)(XTSKpntWp4;n&_c{^I>zvts(0z0>N#>Df~kVDrBH+g!*10w5s^ zK+ZW83IT*U^)6rh@t426Ku%d0!fLk%mO0TRpq+LsavmoZuC_jLl};bmZ9I+-&w6A}mv1_M$`kwOF!2_fW^kVr%bsXrLBsum*F ziwo8iqzDm3q-mPM7Fui0*%(7gD`95N*4lbup|CcFv^-N31pvg9GBXh&01_b}0y1-9 wi++DmL`K@9e&_)}ScG$@(}^)EqUE>$0~QSPAPBPjEdT%j07*qoM6N<$g5~?odH?_b literal 0 HcmV?d00001 From 7ae373bd928b2eeda3e5b1ecebced57696a47d1c Mon Sep 17 00:00:00 2001 From: Adriein Date: Tue, 24 Oct 2023 19:07:55 +0200 Subject: [PATCH 02/25] locate ring in the ui --- CaveBot/AutoAttack.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index 5ef1bc8..9f5b668 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -30,6 +30,8 @@ def attack(self) -> None: while True: frame = WindowCapturer.start() + Scanner.ring_position(frame); + try: enemies_in_battle_list = self.battle_list.find_enemies(frame, self.creatures) From d4bf863d31582125804752e23f66ef533f3eb417 Mon Sep 17 00:00:00 2001 From: Adriein Date: Tue, 24 Oct 2023 19:13:00 +0200 Subject: [PATCH 03/25] locate ring in the ui --- ScreenAnalizerPackage/Scanner.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/ScreenAnalizerPackage/Scanner.py b/ScreenAnalizerPackage/Scanner.py index a0c5ec4..21f960c 100644 --- a/ScreenAnalizerPackage/Scanner.py +++ b/ScreenAnalizerPackage/Scanner.py @@ -22,21 +22,6 @@ def ring_position(frame: np.array) -> tuple[int, int, int, int]: height, width = soul_anchor.shape - return x, x + width, y, y + height - @staticmethod - def combat_stance_position(frame: np.array) -> tuple[int, int, int, int]: - grey_scale_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) - - combat_stance_anchor = Cv2File.load_image('Wiki/Ui/Battle/combat_stance.png') - - match = cv2.matchTemplate(grey_scale_frame, combat_stance_anchor, cv2.TM_CCOEFF_NORMED) - - [_, _, _, max_coordinates] = cv2.minMaxLoc(match) - - (x, y) = max_coordinates - - height, width = combat_stance_anchor.shape - frame_roi = frame[y:y + height + 20, x:x + width] hsv_image = cv2.cvtColor(frame_roi, cv2.COLOR_BGR2HSV) @@ -55,6 +40,21 @@ def combat_stance_position(frame: np.array) -> tuple[int, int, int, int]: # closing all open windows cv2.destroyAllWindows() + return x, x + width, y, y + height + @staticmethod + def combat_stance_position(frame: np.array) -> tuple[int, int, int, int]: + grey_scale_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) + + combat_stance_anchor = Cv2File.load_image('Wiki/Ui/Battle/combat_stance.png') + + match = cv2.matchTemplate(grey_scale_frame, combat_stance_anchor, cv2.TM_CCOEFF_NORMED) + + [_, _, _, max_coordinates] = cv2.minMaxLoc(match) + + (x, y) = max_coordinates + + height, width = combat_stance_anchor.shape + return x, x + width, y, y + height @staticmethod From 3e471a35ae87c59ec09ff33b7956e177b7cd0d9d Mon Sep 17 00:00:00 2001 From: Adriein Date: Tue, 24 Oct 2023 19:27:08 +0200 Subject: [PATCH 04/25] locate ring in the ui --- CaveBot/AutoAttack.py | 2 -- ScreenAnalizerPackage/Scanner.py | 20 +------------------- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index 9f5b668..5ef1bc8 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -30,8 +30,6 @@ def attack(self) -> None: while True: frame = WindowCapturer.start() - Scanner.ring_position(frame); - try: enemies_in_battle_list = self.battle_list.find_enemies(frame, self.creatures) diff --git a/ScreenAnalizerPackage/Scanner.py b/ScreenAnalizerPackage/Scanner.py index 21f960c..0b21f07 100644 --- a/ScreenAnalizerPackage/Scanner.py +++ b/ScreenAnalizerPackage/Scanner.py @@ -22,25 +22,7 @@ def ring_position(frame: np.array) -> tuple[int, int, int, int]: height, width = soul_anchor.shape - frame_roi = frame[y:y + height + 20, x:x + width] - - hsv_image = cv2.cvtColor(frame_roi, cv2.COLOR_BGR2HSV) - - # Window name in which image is displayed - window_name = 'image' - - # Using cv2.imshow() method - # Displaying the image - cv2.imshow(window_name, hsv_image) - - # waits for user to press any key - # (this is necessary to avoid Python kernel form crashing) - cv2.waitKey(0) - - # closing all open windows - cv2.destroyAllWindows() - - return x, x + width, y, y + height + return x, x + width, y - 39, y + height @staticmethod def combat_stance_position(frame: np.array) -> tuple[int, int, int, int]: grey_scale_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) From f5aa50dd6ee68b3f0dac83ed77f77c613d18050b Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 18:29:59 +0100 Subject: [PATCH 05/25] use the ring on and off --- CaveBot/AutoAttack.py | 30 ++++++++++++++- CaveBot/Player.py | 3 ++ CaveBot/Script.py | 4 ++ Wiki/Script/Venore/orc_fotress_outskirt.json | 40 ++++++++++++++++++++ 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 Wiki/Script/Venore/orc_fotress_outskirt.json diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index 5ef1bc8..4ae183a 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -16,7 +16,7 @@ class AutoAttack: - def __init__(self, auto_loot: AutoLoot, player: Player, walk_event: Event, combat_event: Event, creatures: list[ScriptEnemy]): + def __init__(self, auto_loot: AutoLoot, player: Player, walk_event: Event, combat_event: Event, creatures: list[ScriptEnemy], force_ring: bool): initial_frame = WindowCapturer.start() self.battle_list = BattleList.create(initial_frame) self.auto_loot = auto_loot @@ -25,6 +25,7 @@ def __init__(self, auto_loot: AutoLoot, player: Player, walk_event: Event, comba self.combat_event = combat_event self.creatures = creatures self.runner_enemy = False + self.force_ring = force_ring def attack(self) -> None: while True: @@ -40,6 +41,10 @@ def attack(self) -> None: battle_list_attack_position = enemies_in_battle_list[0].position for enemy in enemies_in_battle_list: + if self.force_ring and not self.__is_stealth_ring_on(frame): + print('use ring') + self.player.use_stealth_ring() + self.runner_enemy = enemy.runner self.__activate_chase_opponent(enemy) @@ -110,3 +115,26 @@ def __activate_chase_opponent(self, enemy: Enemy) -> None: if not self.__is_chasing_opponent_activated(frame) and enemy.runner: self.player.chase_opponent() + + def __is_stealth_ring_on(self, frame: np.array) -> bool: + (start_x, end_x, start_y, end_y) = Scanner.ring_position(frame) + + frame_roi = frame[start_y:end_y, start_x:end_x] + + hsv_image = cv2.cvtColor(frame_roi, cv2.COLOR_BGR2HSV) + + # Define the lower and upper bounds for blue color in HSV + lower_blue = np.array([90, 50, 50]) + upper_blue = np.array([130, 255, 255]) + + # Create a mask based on the color threshold + mask = cv2.inRange(hsv_image, lower_blue, upper_blue) + + # Count the number of green pixels + blue_pixel_count = cv2.countNonZero(mask) + + # Determine if the image contains green color + if blue_pixel_count > 0: + return True + + return False diff --git a/CaveBot/Player.py b/CaveBot/Player.py index 343f50b..20248ce 100644 --- a/CaveBot/Player.py +++ b/CaveBot/Player.py @@ -69,3 +69,6 @@ def position(self, frame: np.array) -> Position: def move(self, command: MoveCommand) -> None: Keyboard.press(command.key) + + def use_stealth_ring(self) -> None: + Keyboard.press('t') diff --git a/CaveBot/Script.py b/CaveBot/Script.py index 74d7d6e..b876087 100644 --- a/CaveBot/Script.py +++ b/CaveBot/Script.py @@ -9,6 +9,7 @@ class Script: waypoints: LinkedList = LinkedList() creatures: list[ScriptEnemy] = list() + force_ring: bool = False __previous_waypoint = None @@ -24,6 +25,9 @@ def __init__(self, script_json_data): self.FLOORS_LEVELS.add(Script.__extract_z_level_from_waypoint(waypoint[0])) self.waypoints.append(waypoint) + if 'ring' in script_json_data: + self.force_ring = True + @staticmethod def load(name: str) -> 'Script': with open(name, Script.__READ_MODE) as file: diff --git a/Wiki/Script/Venore/orc_fotress_outskirt.json b/Wiki/Script/Venore/orc_fotress_outskirt.json new file mode 100644 index 0000000..cfe44d6 --- /dev/null +++ b/Wiki/Script/Venore/orc_fotress_outskirt.json @@ -0,0 +1,40 @@ +{ + "walk": [ + ["32431,32317,8"], + ["32432,32325,8"], + ["32439,32326,8"], + ["32444,32325,8"], + ["32446,32317,8"], + ["32442,32308,8"], + ["32438,32308,8"], + ["32438,32303,8"], + ["32436,32297,8"], + ["32432,32294,8"], + ["32423,32294,8"], + ["32423,32302,8"], + ["32423,32306,8"], + ["32430,32306,8"], + ["32430,32302,8", "holeDown"], + ["32424,32302,9"], + ["32425,32314,9"], + ["32418,32314,9"], + ["32433,32314,9"], + ["32426,32314,9"], + ["32426,32302,9"], + ["32430,32307,9"], + ["32444,32307,9"], + ["32444,32294,9"], + ["32444,32307,9"], + ["32430,32307,9"], + ["32430,32303,9"], + ["32430,32302,9", "holeUp"] + ], + "creatures": [ + { + "name": "wasp", + "runner": false, + "loot": true + } + ], + "ring": true +} \ No newline at end of file From af859150f92457b2b3907ebea6ac8d8fc0625264 Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 18:31:26 +0100 Subject: [PATCH 06/25] use the ring on and off --- CaveBot/AutoAttack.py | 2 +- CaveBot/CaveBot.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index 4ae183a..1983bd2 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -133,7 +133,7 @@ def __is_stealth_ring_on(self, frame: np.array) -> bool: # Count the number of green pixels blue_pixel_count = cv2.countNonZero(mask) - # Determine if the image contains green color + # Determine if the image contains blue color if blue_pixel_count > 0: return True diff --git a/CaveBot/CaveBot.py b/CaveBot/CaveBot.py index 115dcf7..ce13cd5 100644 --- a/CaveBot/CaveBot.py +++ b/CaveBot/CaveBot.py @@ -27,17 +27,17 @@ def start(self): auto_loot = AutoLoot(player, Screen.GAME_WINDOW) - # auto_walk = AutoWalk(cave_bot_script, player, walking_event) + auto_walk = AutoWalk(cave_bot_script, player, walking_event) auto_attack = AutoAttack(auto_loot, player, walking_event, combat_event, cave_bot_script.creatures) attack_thread = Thread(daemon=True, target=auto_attack.attack) - # walk_thread = Thread(daemon=True, target=auto_walk.start) + walk_thread = Thread(daemon=True, target=auto_walk.start) attack_thread.start() - # walk_thread.start() + walk_thread.start() walking_event.set() From a4bbd0dec1fa1537b5d574e35613386891b4b4bc Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 18:32:36 +0100 Subject: [PATCH 07/25] use the ring on and off --- CaveBot/CaveBot.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/CaveBot/CaveBot.py b/CaveBot/CaveBot.py index ce13cd5..b3465ad 100644 --- a/CaveBot/CaveBot.py +++ b/CaveBot/CaveBot.py @@ -21,15 +21,23 @@ def start(self): combat_event = Event() # Thread(daemon=True, target=player.watch_mana).start() - cave_bot_script = Script.load('Wiki/Script/Thais/thais_wasp.json') + # cave_bot_script = Script.load('Wiki/Script/Thais/thais_wasp.json') # cave_bot_script = Script.load('Wiki/Script/Venore/swamp_troll_cave.json') # cave_bot_script = Script.load('Wiki/Script/Venore/swampling_cave_floor_10.json') + cave_bot_script = Script.load('Wiki/Script/Venore/orc_fortress_outskirt.json') auto_loot = AutoLoot(player, Screen.GAME_WINDOW) auto_walk = AutoWalk(cave_bot_script, player, walking_event) - auto_attack = AutoAttack(auto_loot, player, walking_event, combat_event, cave_bot_script.creatures) + auto_attack = AutoAttack( + auto_loot, + player, + walking_event, + combat_event, + cave_bot_script.creatures, + cave_bot_script.force_ring + ) attack_thread = Thread(daemon=True, target=auto_attack.attack) From 6757695bfaad95d049585174bb7b8641e5b10809 Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 18:34:49 +0100 Subject: [PATCH 08/25] use the ring on and off --- .../{orc_fotress_outskirt.json => orc_fortress_outskirt.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Wiki/Script/Venore/{orc_fotress_outskirt.json => orc_fortress_outskirt.json} (100%) diff --git a/Wiki/Script/Venore/orc_fotress_outskirt.json b/Wiki/Script/Venore/orc_fortress_outskirt.json similarity index 100% rename from Wiki/Script/Venore/orc_fotress_outskirt.json rename to Wiki/Script/Venore/orc_fortress_outskirt.json From 73b97cf3f32d59c51fdfb461074dfd965a22ca2a Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 18:35:51 +0100 Subject: [PATCH 09/25] use the ring on and off --- CaveBot/AutoAttack.py | 1 + 1 file changed, 1 insertion(+) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index 1983bd2..e24413a 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -132,6 +132,7 @@ def __is_stealth_ring_on(self, frame: np.array) -> bool: # Count the number of green pixels blue_pixel_count = cv2.countNonZero(mask) + print(blue_pixel_count) # Determine if the image contains blue color if blue_pixel_count > 0: From 05086a6fdd4b8f20fff622736001f709756bce3a Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 18:39:59 +0100 Subject: [PATCH 10/25] use the ring on and off --- CaveBot/AutoAttack.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index e24413a..ca5d9a5 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -121,14 +121,12 @@ def __is_stealth_ring_on(self, frame: np.array) -> bool: frame_roi = frame[start_y:end_y, start_x:end_x] - hsv_image = cv2.cvtColor(frame_roi, cv2.COLOR_BGR2HSV) - # Define the lower and upper bounds for blue color in HSV lower_blue = np.array([90, 50, 50]) upper_blue = np.array([130, 255, 255]) # Create a mask based on the color threshold - mask = cv2.inRange(hsv_image, lower_blue, upper_blue) + mask = cv2.inRange(frame_roi, lower_blue, upper_blue) # Count the number of green pixels blue_pixel_count = cv2.countNonZero(mask) From 137f36d0e46e730ba5a70d11d63fdd34454a162e Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 18:43:17 +0100 Subject: [PATCH 11/25] use the ring on and off --- CaveBot/AutoAttack.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index ca5d9a5..31d4093 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -128,12 +128,10 @@ def __is_stealth_ring_on(self, frame: np.array) -> bool: # Create a mask based on the color threshold mask = cv2.inRange(frame_roi, lower_blue, upper_blue) - # Count the number of green pixels - blue_pixel_count = cv2.countNonZero(mask) - print(blue_pixel_count) + # Count the number of blue pixels + print(np.any(mask > 0)) - # Determine if the image contains blue color - if blue_pixel_count > 0: - return True + blue_present = np.any(mask > 0) - return False + # Determine if the image contains blue color + return blue_present From cf6b2b22132170ca6c4397c21839df998792bd43 Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 18:47:53 +0100 Subject: [PATCH 12/25] use the ring on and off --- CaveBot/AutoAttack.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index 31d4093..82bb02e 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -121,17 +121,15 @@ def __is_stealth_ring_on(self, frame: np.array) -> bool: frame_roi = frame[start_y:end_y, start_x:end_x] - # Define the lower and upper bounds for blue color in HSV - lower_blue = np.array([90, 50, 50]) - upper_blue = np.array([130, 255, 255]) + mask = cv2.cvtColor(frame_roi, cv2.COLOR_BGR2RGB) - # Create a mask based on the color threshold - mask = cv2.inRange(frame_roi, lower_blue, upper_blue) + # Define the RGB value of the color you want to find + color_to_find = (76, 111, 204) # Corresponding to #416fcc in RGB - # Count the number of blue pixels - print(np.any(mask > 0)) + # Check if the color is present in the image + color_found = np.any(np.all(mask == color_to_find, axis=-1)) - blue_present = np.any(mask > 0) + print(color_found) # Determine if the image contains blue color - return blue_present + return color_found From 8d66fcec1571b8d707a6c550a14d995080ee0aa9 Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 18:51:30 +0100 Subject: [PATCH 13/25] use the ring on and off --- CaveBot/AutoAttack.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index 82bb02e..4c1ab34 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -126,8 +126,16 @@ def __is_stealth_ring_on(self, frame: np.array) -> bool: # Define the RGB value of the color you want to find color_to_find = (76, 111, 204) # Corresponding to #416fcc in RGB - # Check if the color is present in the image - color_found = np.any(np.all(mask == color_to_find, axis=-1)) + # Calculate the Euclidean distance between the image and target color + color_difference = np.linalg.norm(mask - color_to_find, axis=-1) + + print(color_difference) + + # Define a threshold for color similarity + threshold = 50 # You can adjust this threshold based on your needs + + # Check if the color is similar to the target color + color_found = np.any(color_difference < threshold) print(color_found) From 06a36ae644f356e6d6cad0eb5c78f62903d10906 Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 18:53:40 +0100 Subject: [PATCH 14/25] use the ring on and off --- CaveBot/AutoAttack.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index 4c1ab34..f681e6f 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -121,13 +121,25 @@ def __is_stealth_ring_on(self, frame: np.array) -> bool: frame_roi = frame[start_y:end_y, start_x:end_x] - mask = cv2.cvtColor(frame_roi, cv2.COLOR_BGR2RGB) + # Window name in which image is displayed + window_name = 'image' + + # Using cv2.imshow() method + # Displaying the image + cv2.imshow(window_name, frame_roi) + + # waits for user to press any key + # (this is necessary to avoid Python kernel form crashing) + cv2.waitKey(0) + + # closing all open windows + cv2.destroyAllWindows() # Define the RGB value of the color you want to find color_to_find = (76, 111, 204) # Corresponding to #416fcc in RGB # Calculate the Euclidean distance between the image and target color - color_difference = np.linalg.norm(mask - color_to_find, axis=-1) + color_difference = np.linalg.norm(frame_roi - color_to_find, axis=-1) print(color_difference) From d9e34efd7ff316266b0dc1a4a62f024b06ab47dd Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 18:54:57 +0100 Subject: [PATCH 15/25] use the ring on and off --- CaveBot/AutoAttack.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index f681e6f..3995009 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -124,17 +124,6 @@ def __is_stealth_ring_on(self, frame: np.array) -> bool: # Window name in which image is displayed window_name = 'image' - # Using cv2.imshow() method - # Displaying the image - cv2.imshow(window_name, frame_roi) - - # waits for user to press any key - # (this is necessary to avoid Python kernel form crashing) - cv2.waitKey(0) - - # closing all open windows - cv2.destroyAllWindows() - # Define the RGB value of the color you want to find color_to_find = (76, 111, 204) # Corresponding to #416fcc in RGB From 04b390e2b55e382a90d1ab9cd1663ae5f0eb3d6d Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 18:55:05 +0100 Subject: [PATCH 16/25] use the ring on and off --- CaveBot/AutoAttack.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index 3995009..a3164a3 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -121,9 +121,6 @@ def __is_stealth_ring_on(self, frame: np.array) -> bool: frame_roi = frame[start_y:end_y, start_x:end_x] - # Window name in which image is displayed - window_name = 'image' - # Define the RGB value of the color you want to find color_to_find = (76, 111, 204) # Corresponding to #416fcc in RGB From 9bf1c9f9ea4f311943700492e83b7758d3e40058 Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 18:56:25 +0100 Subject: [PATCH 17/25] use the ring on and off --- CaveBot/AutoAttack.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index a3164a3..f681e6f 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -121,6 +121,20 @@ def __is_stealth_ring_on(self, frame: np.array) -> bool: frame_roi = frame[start_y:end_y, start_x:end_x] + # Window name in which image is displayed + window_name = 'image' + + # Using cv2.imshow() method + # Displaying the image + cv2.imshow(window_name, frame_roi) + + # waits for user to press any key + # (this is necessary to avoid Python kernel form crashing) + cv2.waitKey(0) + + # closing all open windows + cv2.destroyAllWindows() + # Define the RGB value of the color you want to find color_to_find = (76, 111, 204) # Corresponding to #416fcc in RGB From 877f646b11d610ab2a6d678950a3dfc55477d3c4 Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 18:57:00 +0100 Subject: [PATCH 18/25] use the ring on and off --- CaveBot/AutoAttack.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index f681e6f..c02df32 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -121,12 +121,14 @@ def __is_stealth_ring_on(self, frame: np.array) -> bool: frame_roi = frame[start_y:end_y, start_x:end_x] + hsv_image = cv2.cvtColor(frame_roi, cv2.COLOR_BGR2HSV) + # Window name in which image is displayed window_name = 'image' # Using cv2.imshow() method # Displaying the image - cv2.imshow(window_name, frame_roi) + cv2.imshow(window_name, hsv_image) # waits for user to press any key # (this is necessary to avoid Python kernel form crashing) From 704acd849e9d85113d551225bb61360bca319683 Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 19:00:21 +0100 Subject: [PATCH 19/25] use the ring on and off --- CaveBot/AutoAttack.py | 28 +++------------------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index c02df32..8b81702 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -123,33 +123,11 @@ def __is_stealth_ring_on(self, frame: np.array) -> bool: hsv_image = cv2.cvtColor(frame_roi, cv2.COLOR_BGR2HSV) - # Window name in which image is displayed - window_name = 'image' - - # Using cv2.imshow() method - # Displaying the image - cv2.imshow(window_name, hsv_image) - - # waits for user to press any key - # (this is necessary to avoid Python kernel form crashing) - cv2.waitKey(0) - - # closing all open windows - cv2.destroyAllWindows() - - # Define the RGB value of the color you want to find - color_to_find = (76, 111, 204) # Corresponding to #416fcc in RGB - - # Calculate the Euclidean distance between the image and target color - color_difference = np.linalg.norm(frame_roi - color_to_find, axis=-1) - - print(color_difference) - - # Define a threshold for color similarity - threshold = 50 # You can adjust this threshold based on your needs + # Define the RGB value of the color red that are counter of the ring + color_to_find = (191, 0, 0) # Check if the color is similar to the target color - color_found = np.any(color_difference < threshold) + color_found = np.any(np.all(hsv_image == color_to_find, axis=-1)) print(color_found) From ed16032800f0ee18a94986fc9d825036a8ada7ca Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 19:03:38 +0100 Subject: [PATCH 20/25] use the ring on and off --- CaveBot/AutoAttack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index 8b81702..bd265e2 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -127,7 +127,7 @@ def __is_stealth_ring_on(self, frame: np.array) -> bool: color_to_find = (191, 0, 0) # Check if the color is similar to the target color - color_found = np.any(np.all(hsv_image == color_to_find, axis=-1)) + color_found = np.all(hsv_image == color_to_find, axis=-1).any() print(color_found) From 2327b84e4739475900909675f10688ff5026ca2d Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 19:06:16 +0100 Subject: [PATCH 21/25] use the ring on and off --- CaveBot/AutoAttack.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CaveBot/AutoAttack.py b/CaveBot/AutoAttack.py index bd265e2..3e312aa 100644 --- a/CaveBot/AutoAttack.py +++ b/CaveBot/AutoAttack.py @@ -41,8 +41,7 @@ def attack(self) -> None: battle_list_attack_position = enemies_in_battle_list[0].position for enemy in enemies_in_battle_list: - if self.force_ring and not self.__is_stealth_ring_on(frame): - print('use ring') + if self.force_ring: self.player.use_stealth_ring() self.runner_enemy = enemy.runner From a08103ed2424ebef13209365e14c401c37c8c8e1 Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 19:09:50 +0100 Subject: [PATCH 22/25] use the ring on and off --- CaveBot/AutoWalk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CaveBot/AutoWalk.py b/CaveBot/AutoWalk.py index f738d6a..104e805 100644 --- a/CaveBot/AutoWalk.py +++ b/CaveBot/AutoWalk.py @@ -62,7 +62,7 @@ def start(self) -> None: command: MoveCommand = walk_instructions.current.data - time.sleep(0.2) + # time.sleep(0.2) self.player.move(command) From b21eb32fa019452d4582f357cdb0e4e93d97c3b3 Mon Sep 17 00:00:00 2001 From: Adriein Date: Mon, 30 Oct 2023 19:41:53 +0100 Subject: [PATCH 23/25] adding waypoints to the script --- Wiki/Script/Venore/orc_fortress_outskirt.json | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/Wiki/Script/Venore/orc_fortress_outskirt.json b/Wiki/Script/Venore/orc_fortress_outskirt.json index cfe44d6..65cf714 100644 --- a/Wiki/Script/Venore/orc_fortress_outskirt.json +++ b/Wiki/Script/Venore/orc_fortress_outskirt.json @@ -1,38 +1,39 @@ { "walk": [ - ["32431,32317,8"], - ["32432,32325,8"], - ["32439,32326,8"], - ["32444,32325,8"], - ["32446,32317,8"], - ["32442,32308,8"], - ["32438,32308,8"], - ["32438,32303,8"], - ["32436,32297,8"], - ["32432,32294,8"], - ["32423,32294,8"], - ["32423,32302,8"], - ["32423,32306,8"], - ["32430,32306,8"], - ["32430,32302,8", "holeDown"], - ["32424,32302,9"], - ["32425,32314,9"], - ["32418,32314,9"], - ["32433,32314,9"], - ["32426,32314,9"], - ["32426,32302,9"], - ["32430,32307,9"], - ["32444,32307,9"], - ["32444,32294,9"], - ["32444,32307,9"], - ["32430,32307,9"], - ["32430,32303,9"], - ["32430,32302,9", "holeUp"] + ["32828,31767,7"], + ["32834,31764,7"], + ["32834,31757,7"], + ["32834,31747,7"], + ["32834,31740,7"], + ["32825,31740,7"], + ["32822,31731,7"], + ["32825,31722,7"], + ["32833,31720,7"], + ["32840,31725,7"], + ["32840,31738,7"], + ["32840,31755,7"], + ["32840,31765,7"], + ["32846,31765,7"], + ["32860,31769,7"], + ["32870,31779,7"], + ["32870,31768,7"], + ["32880,31760,7"], + ["32884,31749,7"], + ["32888,31739,7"], + ["32890,31729,7"], + ["32894,31721,7"], + ["32890,31729,7"], + ["32888,31739,7"], + ["32884,31749,7"], + ["32880,31760,7"], + ["32870,31768,7"], + ["32852,31768,7"], + ["32830,31768,7"] ], "creatures": [ { "name": "wasp", - "runner": false, + "runner": true, "loot": true } ], From 15ead26335fd3bf3d635fa6ff4dd1d162178a30f Mon Sep 17 00:00:00 2001 From: Adriein Date: Tue, 31 Oct 2023 19:57:30 +0100 Subject: [PATCH 24/25] adding creatures to the script --- Wiki/Script/Venore/orc_fortress_outskirt.json | 27 +++++++++++++++++- Wiki/Ui/Battle/Mobs/Orc/orc.png | Bin 0 -> 2204 bytes Wiki/Ui/Battle/Mobs/Orc/orc_label.png | Bin 0 -> 316 bytes .../Mobs/OrcBerserker/orc_berserker.png | Bin 0 -> 2227 bytes .../Mobs/OrcBerserker/orc_berserker_label.png | Bin 0 -> 850 bytes Wiki/Ui/Battle/Mobs/OrcLeader/orc_leader.png | Bin 0 -> 2067 bytes .../Mobs/OrcLeader/orc_leader_label.png | Bin 0 -> 744 bytes Wiki/Ui/Battle/Mobs/OrcShaman/orc_shaman.png | Bin 0 -> 2287 bytes .../Mobs/OrcShaman/orc_shaman_label.png | Bin 0 -> 789 bytes .../Battle/Mobs/OrcSpearman/orc_spearman.png | Bin 0 -> 2378 bytes .../Mobs/OrcSpearman/orc_spearman_label.png | Bin 0 -> 957 bytes .../Ui/Battle/Mobs/OrcWarrior/orc_warrior.png | Bin 0 -> 2197 bytes .../Mobs/OrcWarrior/orc_warrior_label.png | Bin 0 -> 698 bytes 13 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 Wiki/Ui/Battle/Mobs/Orc/orc.png create mode 100644 Wiki/Ui/Battle/Mobs/Orc/orc_label.png create mode 100644 Wiki/Ui/Battle/Mobs/OrcBerserker/orc_berserker.png create mode 100644 Wiki/Ui/Battle/Mobs/OrcBerserker/orc_berserker_label.png create mode 100644 Wiki/Ui/Battle/Mobs/OrcLeader/orc_leader.png create mode 100644 Wiki/Ui/Battle/Mobs/OrcLeader/orc_leader_label.png create mode 100644 Wiki/Ui/Battle/Mobs/OrcShaman/orc_shaman.png create mode 100644 Wiki/Ui/Battle/Mobs/OrcShaman/orc_shaman_label.png create mode 100644 Wiki/Ui/Battle/Mobs/OrcSpearman/orc_spearman.png create mode 100644 Wiki/Ui/Battle/Mobs/OrcSpearman/orc_spearman_label.png create mode 100644 Wiki/Ui/Battle/Mobs/OrcWarrior/orc_warrior.png create mode 100644 Wiki/Ui/Battle/Mobs/OrcWarrior/orc_warrior_label.png diff --git a/Wiki/Script/Venore/orc_fortress_outskirt.json b/Wiki/Script/Venore/orc_fortress_outskirt.json index 65cf714..3d06c92 100644 --- a/Wiki/Script/Venore/orc_fortress_outskirt.json +++ b/Wiki/Script/Venore/orc_fortress_outskirt.json @@ -32,9 +32,34 @@ ], "creatures": [ { - "name": "wasp", + "name": "orc_warrior", + "runner": true, + "loot": false + }, + { + "name": "orc", + "runner": true, + "loot": false + }, + { + "name": "orc_shaman", "runner": true, "loot": true + }, + { + "name": "orc_berserker", + "runner": true, + "loot": false + }, + { + "name": "orc_spearman", + "runner": true, + "loot": false + }, + { + "name": "orc_leader", + "runner": true, + "loot": false } ], "ring": true diff --git a/Wiki/Ui/Battle/Mobs/Orc/orc.png b/Wiki/Ui/Battle/Mobs/Orc/orc.png new file mode 100644 index 0000000000000000000000000000000000000000..71ade04a0ecef8aef50704fb8316940aa59dfb52 GIT binary patch literal 2204 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 literal 0 HcmV?d00001 diff --git a/Wiki/Ui/Battle/Mobs/OrcLeader/orc_leader_label.png b/Wiki/Ui/Battle/Mobs/OrcLeader/orc_leader_label.png new file mode 100644 index 0000000000000000000000000000000000000000..d726fa85de5d57e7fca7963e732daf8992476ed8 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^PC(4b!3-ofigJ|#DaPU;cPGZ1Cw1yUG6f!y#S9GG z!XV7ZFl&wkQ1DfNPl&6JkB_snv#YDCqobpf6A(Fhdwbj4+uPXKczSxdxw$#JfPk;B zUtnO6o4dQ0mzTS{yNj!9U|^t~ot?kGzpt-PNJxmMrw0&tdI2d>V7OU7SNhL%h6!ZgaJFuy^-xcXD?2@N~DewRLd; zI@UEPD9FLl(c9b0#@5Ew&DGD(&%@Kh(b2);>K+eZuuS)KaSW-LV;WdpFJvg-W2SmQ z=&fEj%PpO0t1G@~b@A^=T6#1q-frLj>xGjq|C#t#)p)bDK9vL!X!(|=oVoS!Ez zWXR|2IIX`TMWDCRaGp>9O=+7>PT`Fbf8V4&zhdAhBcY$^SpUw;rQWP+D}&3Hg#rt& zUzN7#7vaxl;^&xm{ObatLgRwx?Be;S1*W|hb7Q%mJ$qej>!sEcf@vKWAFvDlyYbUy zexdCx6YtlCF}DhyWd}Ha$qG)``S;Rpmt4mZ)uL5r#krPw#BLKAbdDw?fQ_9qtPBGB;Cmb~H^roVSvV zL&i0eiiLJWOhV6nzW)4TWog3s$>m6xoqyrN7t+*;19qp4G!P(x@h9OMTxc$o+EdIc zJ?LbRbrUdVqz?d@gIXjszX~`4)a^PpCx#OQsjV%017I^NDSUA~;Ur}?I#ZUkJDz}@ zKL>`5n&HyYlkkoI5{8SHHZBII&qX#akCGY5#xv#~kEL_9=ggJ%`AD23%Mf7|eM^Ld z<>b|2k)&HGyBD$JGwgi1^3uz^28jrc8_=OY3GQ~*;~3h{|6tq zPXNTqHzmLI{f&!-bNebzmvx%}9p^cnoX_(yELo?Ih-+nyumzjv8B(6*d1FuKW~1bq z-?a;I`~#>6to#suRQ9J5W3`e{&*P7$Oa3Psx|h$AF*ksL@4$e+yQ}EzqVR@_U;Wj zIFAKc6O;F~0#>O#9TJ>79#;0pPZWW2lX%*yZDvpmvEpA@N1~dxi3RSweR{IF2Cu$>ko~C(@Khx_%p8p(Y zGJU1Fm{fm3`M_6<_|`nyWcOn}fbwr!EkRg&H{!;>`1joKq8<-G)}#IkLeVw~ZSRHP ztoKZ19dJh#)Ela+q4AeFtLM|A*7qZII;@)JWZ+!h?&-5iA(bS_QC#zUu9%(j&3fvI zD&+Jqu*ZDaQGRl=-q20kkUjc0-->xYquQIWTGiqc@85mrR=5-nLpXfzexrxnAst-v zq4wy_m{)N_tM3=a6EgJmQFZ%ebxL1X;ykaaTvc=w=T4`=RjdLAZZ-*ke7P<48wXo=`h%F_ezS z1dZnPg~hcz;g!LnJ=E9K$@8Y(-%*b$>Ky)JV3}*?`I-jqm+GVPqZHZux|_e_L5}%L zbIJ!-Y+&UVvX1$Y^7Z%ycsS8FT}_0F+t<7Wja`6W+1YFsk4lN$D14wooeC=Lm6vzk3{QBspI-%dF)PjFDfuW+7;bloa=11>GEXqGyEBHXa zZ6EU^X_{%Ox8q0F=qZbFxVgW7a1ah2JU9r##R=qk=nb9Ob!+qI`iq^hWdq|q;?0Q2 zIcjMA>_0l4(8E5P*w|BPnX@_-b?fp=zw6+-beT-W8M;2;r>nnDqqMry`GXd@$LE`= zO?-Fi@P1W-svBHTsp;X8$($FejSqiN>LCpM5%;3Rh|aP6CmDsX#xrA*DU@68EvLP)&F%8`pA9Kc`KUmKLIqj!a7r{<2(QW002ov JPDHLkV1kFBAkzQ< literal 0 HcmV?d00001 diff --git a/Wiki/Ui/Battle/Mobs/OrcShaman/orc_shaman_label.png b/Wiki/Ui/Battle/Mobs/OrcShaman/orc_shaman_label.png new file mode 100644 index 0000000000000000000000000000000000000000..cc64284b70f2ac2b903f80112817e25ba39866bf GIT binary patch literal 789 zcmV+w1M2*VP)>B0kTO%K~#90Es=|Q(=ZH$iLF> z*+E^i78-}KxvA_A8-Giku!!*O&?v=`FMLalrBx|~C^2+Yc21*ndK8jh)ogrca<`h^ zi!=1PAM}`Iej?(gzJ>@d-10%$9ub-G!$)SPejbAlY_$7=h>WDKL%4Qi^tWI zIO@8mIukv6rq5T^dC|mLh1ZpT0U-%R5(1VPWelPiCuSERCL%1Rm&5d3zsd`*>7|}qezFeM|)wP*_i+y4C&R;o%Fq?_X2=xK7_j=ep zMl07*OCC7>&jLWe1j$6Uv&I=^jB+Wq<2Ac3vJfd=5f!Hugx(K7IIqN>^bkk%s5T%# zc-EO6L;mWc*(XdQJ<$7%B+5d5vx_z{xe+7QzTF=U7P$6V2LFOEPt97`U(tI8BL6L; zgw||<0ewf^_V>$=q|ZqS#q;rMvu>056C~X)v)^={^Gft%2(191f3~F%`D^wMQ0FZ? Tz1Z~v00000NkvXXu0mjfj?Ogv literal 0 HcmV?d00001 diff --git a/Wiki/Ui/Battle/Mobs/OrcSpearman/orc_spearman.png b/Wiki/Ui/Battle/Mobs/OrcSpearman/orc_spearman.png new file mode 100644 index 0000000000000000000000000000000000000000..d44038d85b248b4de5ae3013e7785602f968c083 GIT binary patch literal 2378 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 X2^M>q?91aE00000NkvXXu0mjf8pGa8 literal 0 HcmV?d00001 diff --git a/Wiki/Ui/Battle/Mobs/OrcWarrior/orc_warrior_label.png b/Wiki/Ui/Battle/Mobs/OrcWarrior/orc_warrior_label.png new file mode 100644 index 0000000000000000000000000000000000000000..b7f66c7027f2c41e08817afa5c2d8200512d8e6a GIT binary patch literal 698 zcmeAS@N?(olHy`uVBq!ia0vp^?m*1J!3-qlBnV9bQjEnx?oNz1PwLbIIh+L^k;M!Q z+`=Ht$S`Y;1W@pHfKQ04x3~9!0|#7PT|GU$9G#pT9UUDU9Na*_-QVBe$H&*p+uPaM z*~P^rFfh=|%gfH*&d0~w)6>(<-QCyM*WKMcBqRhV?dI<0>gEPCz~A4`%F5c)%gf!} z!^g+R!^6Yd$H(5@-owM)$JfWt-{0BU$=%&8ARxfQ)6)fLv8$WCgM*EYjkAlhqmyH3 zXowRKI6HfJdwFNAYZ zj&9^sZA~&LO0^_SZYs zyyJc0<)abb7CmeFgGRSTe!(9SSw9XjOiO>T z>A>ocwIXeb6T`kF$Q|DJX4cA6YB9|7v%=q$)+H)$yTY_r|Bugc--K${Cz-7$W?a+n z@jNvvXYTpw-@jUfZgymv;rYvJ@k@ypK!rh_3K~j zAG$d8+NwP_{%fdx;uVaQ$!jzwd@_@c8$Uk9WGc??#r> e&2Jt(w9i>8{oeOLQX4R-F?hQAxvX Date: Wed, 1 Nov 2023 09:30:00 +0100 Subject: [PATCH 25/25] adding creatures to the script --- CaveBot/AutoWalk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CaveBot/AutoWalk.py b/CaveBot/AutoWalk.py index 104e805..e0f9a43 100644 --- a/CaveBot/AutoWalk.py +++ b/CaveBot/AutoWalk.py @@ -16,7 +16,7 @@ class AutoWalk: __waypoints: LinkedList = LinkedList() __previous_waypoint = None - FLOOR_LEVEL = 8 + FLOOR_LEVEL = 7 FLOORS_LEVELS: set[int] = set()