- Added beautiful french curves to the mouse movements from the pyclick project.
- Added
modules\_beziercurve.py
- Added
modules\_utils.py
- Added
modules\humanclicker.py
- Added
modules\humancurve.py
- Changed
modules\mouseutils.py
to use the newhumanclicker
andhumancurve
modules. - Removed
modules\mouseutils.py
mousespeed - Removed
modules\mouseutils.py
old randomization solutions. - Removed
conf\user\config.py
mousespeed dropdown. - Removed
conf\user\config.pyw
mousespeed dropdown. - Removed
prereqs_linux.py
and reworked it into the GUI. - Removed
prereqs_win.py
and reworked it into the GUI. - Removed
HSBotrunner.bat
to now use the GUI to launch the bot. - Removed
HSBotrunner.sh
to now use the GUI to launch the bot. - Added
conf\user\config.py
Start/Stop button to launch and kill the bot. - Added
conf\user\config.pyw
Start/Stop button to launch and kill the bot. - Moved\Renamed
conf\user\config.py
toLaunch.py
(rename this to your liking) - Moved\Renamed
conf\user\config.pyw
toLaunch.pyw
(this runs without the py console) - Updated
LICENSE
to reflect pyclick's MIT license.
- Uploaded missing Buttons and UIelements
- Added
modules\gameloop.py
checks for new menu buttons - Added
modules\reconnects.py
choose_mode function - Added
modules\constants.py
choose_mode button - Updated
requirements_win.txt
to add PSutil - Updated
requirements_linux.txt
to add PSutil
- Added
HSBotRunner.bat
system variable %~dp0 back so we can Run as Admin properly. - Added
modules\reconnects.py
for various reconnect scenarios. - Added
modules\gameloop.py
checks for reconnects. - Added
modules\game.py
checks for reconnects. - Created
files\1920x1080\UI_elements\reconnect_button.png
- Created
files\1920x1080\UI_elements\closed_sign.png
- Created
files\1920x1080\UI_elements\wipe_button.png
- Modified
modules\encounter.py
to omit certain print strings regarding Zone change. - Added
modules\constants.py
new UIelements - Added
modules\battlenetloop.py
attempts to set Battle.net as window focus
- Changed
HSbotRunner.bat
andHSbotRunner.sh
to force a Python 3.11 venv. - Fixed
\conf\user\config.py
read issues from settings, and adjusting checkboxes appropriately. - Configured
\conf\user\config.py
to use the MFB venv and prereqs scripts.
- Rewrote
HSbotRunner.bat
andHSbotRunner.sh
to use prereqs script. - Removed all links to AHK since it's deprecated and no longer used.
- Defined
modules\platforms\window_managers\windows\win32gui_manager.py
left, top, width, height at the module level. - Removed
modules\platforms\window_managers\windows\factory.py
unnecessary else statement. - Cleaned
modules\platforms\window_managers\windows\factory.py
_find_window
function. - Created
modules\__init__.py
empty list for root handlers, as it was required later in the module. - Commented out Zone changes in
\modules\log_board.py
and\modules\encounter.py
as it was game-breaking for some users. - Changed
conf\system\attacks.json
Archmage Khadgar 2nd ability to choose target. Changed #2 bool to true. - Changed
conf\system\combo.ini
Prince Malchezaar=1,3,2 from Prince Malchezaar=1,2,3. - Changed
conf\user\config.py
to use pre_reqs script. Also addedcombo.ini
changes upon creation. - Rewrote
modules\bounty.py
goToEncounter
into multiple helper functions. - Rewrote
modules\encounter.py
parse_ability_setting
function. - Rewrote
modules\file_utils.py
readINI
to not use_sections
. - Removed
modules\file_utils.py
orphan expressionos.path.exists(dstdir) or os.mkdir(dstdir)
. - Added
modules\image_utils.py
better exception handling. - Removed
modules\image_utils.py
find_element
unnecessaryelif
. - Removed
modules\image_utils.py
partscreen
resolution=None
. - Rewrote
modules\log_board.py
LogHSMercs
class into multiple functions. - Added
modules\log_board.py
some__init__
declarations. - Added
modules\notification.py
better exception handling. - Added
modules\notification.py
request.urlopen(req)
with statement to properly release resources. - Added
modules\travelpoint.py
better exception handling. - Added
modules\bounty.py
missing docstrings. - Added
modules\encounter.py
missing docstrings.
- Converted all relative imports to absolute.
- Organized all imports to be properly sorted unless to do so would break them (config.py)
- Updated
conf\user\combo.ini
to add Archimonde, rescued student, drakonid 3 to ability rotations. - Updated
conf\system\mercs.json
to add rescued student and drakonid 3. - Changed
modules\init.py
_sections
tohas_section
forconfigparser
. - Changed
modules\platforms\factory.py
elif
Linux statement toif
. - Replaced
modules\platforms\factory.py
Exception
with a more specificValueError
exception on line 13. - Changed
modules\platforms\factory.py
unnecessaryelse
toelif
on line 8 to address theno-else-return
linting issue. - Changed
modules\platforms\window_managers\windows\win32gui_manager.py
relative imports to absolute. - Defined
modules\platforms\window_managers\windows\win32gui_manager.py
global variables 'left', 'top', 'width', and 'height' at the module level. - Removed
modules\platforms\window_managers\windows\win32gui_manager.py
unnecessaryelse
statement after the return statement. - Addressed
modules\platforms\window_managers\windows\win32gui_manager.py
inconsistency in return statements by having all of them return an expression. - Moved
modules\platforms\window_managers\windows\win32gui_manager.py
attribute_handles
definition inside the__init__
method. - Added
modules\__init__.py
module docstring. - Added
modules\platforms\__init__.py
module docstring. - Added
modules\platforms\window_managers\base.py
function docstrings. - Changed
modules\platforms\window_managers\linux.py
relative imports to absolute. - Removed
modules\platforms\window_managers\linux.py
unused argumentBNCount
on line 44. - Resolved
modules\platforms\window_managers\linux.py
unnecessaryelse
statement on line 86. - Defined
modules\platforms\window_managers\linux.py
"win" within the__init__
method. - Removed
modules\settings\conf\conf.py
unusedsetting_name
. - Removed
modules\settings\conf\settings.py
unnecessaryelse
afterraise
. - Changed
modules\settings\conf\settings.py
raise
to use f-string. - Added
modules\battlenetloop.py
found_element
variable. - Fixed
modules\battlenetloop.py
import order. - Cleaned
modules\bounty.py
import statements. - Simplified
modules\bounty.py
function by reducing the number of branches and statements (Line 106). - Simplified
modules\bounty.py
the chained comparison insearchForEncounter()
by removing unnecessary parentheses (Line 200). - Changed
modules\bounty.py
string concatenation intravelToLevel()
to use explicit concatenation instead of implicit concatenation (Line 286). - Changed
modules\bounty.py
string formatting insend_slack_notification()
to use an f-string instead of formatting a regular string (Line 333). - Removed
modules\bounty.py
unnecessary return statement at the end of thequitBounty()
function (Line 356). - Removed
modules\campfire.py
toggle_campfire_screen()
removed unnecessaryelif
andelse
. - Removed
modules\campfire.py
look_at_campfire_completed_tasks()
removed unnecessaryelse
afterbreak
. - Modified
modules\encounter.py
the__init__
method to take any number of keyword arguments. - Rewrote
modules\encounter.py
classEnemies
to use anamedtuple
. - Rewrote
modules\encounter.py
classBoard
to use anamedtuple
. - Changed
modules\encounter.py
log.debug
to use lazy%
formatting (Line 783). - Moved
modules\encounter.py
self.coord_y
to inside__init__
. - Cleaned
modules\encounter.py
import list. - Added
modules\encounter.py
selectCardsInHand
docstring. - Added
modules\encounter.py
cardsInHand
docstring. - Added
modules\encounter.py
execute_action_sequence
docstring. - Added
modules\encounter.py
find_enemies
docstring. - Added
modules\exceptions.py
module docstring and class docstrings. - Changed
modules\file_utils.py
elif
to use raw string on lines 32 and 34. - Added
modules\file_utils.py
encoding types to open functions. - Added
modules\file_utils.py
copy_dir_and_func_files
docstring. - Converted
modules\game.py
lines 22 and 24 to f-strings.
- Changed
log.info
string to use lazy%
formatting. - Changed
modules\platforms\platforms.py
log.info
string to use lazy%
formatting. - Changed
modules\conf\conf.py
log.info
string to use lazy%
formatting. - Changed
modules\conf\settings.py
log.error
string to use lazy%
formatting. - Changed
modules\conf\settings.py
log.info
string to use lazy%
formatting. - Changed
modules\conf\settings.py
raiseSettingsError
string to use lazy%
formatting. - Changed
modules\conf\settings.py
raiseMissingGameDirectory
string to use lazy%
formatting. - Modified
modules\conf\settings.py
theZone.log
path builder. Line 79. - Changed
modules\bounty.py
log.info
strings to use lazy%
formatting (line 82, 253). - Changed
modules\bounty.py
log.debug
strings to use lazy%
formatting (line 197, 211). - Changed
modules\bounty.py
json.dumps
string to use lazy%
formatting. - Changed
modules\encounter.py
log.debug
strings to use lazy%
formatting (line 90, 115, 171, 172, 249, 366, 368, 783, 832). - Changed
modules\encounter.py
log.warning
string to use lazy%
formatting. - Changed
modules\encounter.py
log.info
strings to use lazy%
formatting (line 283, 515, 573, 667, 670, 767, 774, 787). - Changed
modules\encounter.py
log.error
string to use lazy%
formatting. - Changed
modules\game.py
log.info
string to use lazy%
formatting. - Changed
modules\gameloop.py
log.error
string to use lazy%
formatting. - Removed
modules\gameloop.py
commentedtime.sleep
commands and a disabled function. - Changed
modules\image_utils.py
log.error
string to use lazy%
formatting (line 60, 100, 102). - Changed
modules\image_utils.py
log.info
string to use lazy%
formatting (line 201). - Changed
modules\image_utils.py
print
string to use lazy%
formatting (line 204). - Changed
modules\image_utils.py
log.debug
string to use lazy%
formatting. - Changed
modules\notification.py
log.info
strings to use lazy%
formatting (line 44, 76). - Changed
modules\notification.py
log.error
strings to use lazy%
formatting (line 46, 48, 50, 78, 80, 82). - Changed
modules\resolution.py
log.error
string to use lazy%
formatting. - Changed
modules\resolution.py
log.debug
string to use lazy%
formatting. - Changed
modules\travelpoint.py
log.error
string to use lazy%
formatting. - Changed
modules\treasure.py
log.debug
string to use lazy%
formatting. - Changed
main.py
log.info
strings to use lazy%
formatting (line 22, 41). - Changed
main.py
log.error
string to use lazy%
formatting.
- Added module docstring to main.py
- Added module docstring to \modules\bounty.py
- Added function docstring to \modules\bounty.py searchForEncounter
- Added module docstring to \modules\campfire.py
- Added function docstring to \modules\campfire.py toggle_campfire_screen
- Added function docstring to \modules\campfire.py check_party_tasks
- Added function docstring to \modules\campfire.py check_visitor_tasks
- Added function docstring to \modules\campfire.py claim_task_reward
- Added module docstring to \modules\encounter.py
- Added class docstring to \modules\encounter.py Enemies
- Added class docstring to \modules\encounter.py Board
- Added function docstring to \modules\encounter.py select_enemy_to_attack
- Edited function docstring to \modules\encounter.py select_random_enemy_to_attack
- Edited function docstring to \modules\encounter.py priorityMercByRole
- Edited function docstring to \modules\encounter.py pickBestAllyToBuff
- Edited function docstring to \modules\encounter.py get_ability_for_this_turn
- Added function docstring to \modules\encounter.py parse_ability_setting
- Added function docstring to \modules\encounter.py didnt_find_a_name_for_this_one
- Edited function docstring to \modules\encounter.py select_ability
- Edited function docstring to \modules\file_utils.py readjson
- Edited function docstring to \modules\file_utils.py read_ini_to_dict
- Edited function docstring to \modules\file_utils.py parseINI
- Edited function docstring to \modules\file_utils.py readINI
- Edited function docstring to \modules\file_utils.py writeINI
- Added module docstring to \modules\game.py
- Edited function docstring to \modules\game.py defaultCase
- Added module docstring to \modules\gameloop.py
- Added module docstring to \modules\image_utils.py
- Edited function docstring to \modules\image_utils.py get_resolution
- Edited function docstring to \modules\image_utils.py resize
- Edited function docstring to \modules\image_utils.py get_gray_image
- Edited function docstring to \modules\image_utils.py find_element_from_file
- Edited function docstring to \modules\image_utils.py partscreen
- Edited function docstring to \modules\image_utils.py find_element_center_on_screen
- Added module docstring to \modules\log_board.py
- Edited function docstring to \modules\log_board.py LogHSMercs
- Added function docstring to \modules\log_board.py find_battle_start_log
- Added function docstring to \modules\log_board.py follow
- Added function docstring to \modules\log_board.py get_zonechanged
- Added function docstring to \modules\log_board.py start
- Added function docstring to \modules\log_board.py stop
- Added function docstring to \modules\log_board.py cleanHand
- Added function docstring to \modules\log_board.py getHand
- Added function docstring to \modules\log_board.py cleanBoard
- Added function docstring to \modules\log_board.py getMyBoard
- Added function docstring to \modules\log_board.py getEnemyBoard
- Added module docstring to \modules\mouse_utils.py
- Added function docstring to \modules\mouse_utils.py mouse_click
- Added function docstring to \modules\mouse_utils.py mouse_scroll
- Added function docstring to \modules\mouse_utils.py mouse_position
- Added function docstring to \modules\mouse_utils.py move_mouse_and_click
- Added function docstring to \modules\mouse_utils.py move_mouse
- Edited function docstring to \modules\mouse_utils.py mouse_random_movement
- Added module docstring to \modules\notification.py
- Edited function docstring to \modules\notification.py send_notification
- Edited function docstring to \modules\notification.py send_slack_notification
- Added module docstring to \modules\resolution.py
- Edited function docstring to \modules\resolution.py resize_image
- Added function docstring to \modules\resolution.py gen_images_new_resolution
- Added module docstring to \modules\travelpoint.py
- Added function docstring to \modules\travelpoint.py get_travelpoints_list
- Edited function docstring to \modules\travelpoint.py travelpointSelection
- Added module docstring to \modules\treasure.py
- Edited function docstring to \modules\treasure.py chooseTreasure
- Added module docstring to \modules\utils.py
- Added module docstring to \modules\platforms\factory.py
- Added function docstring to \modules\platforms\factory.py get_window_manager
- Added module docstring to \modules\platforms\platforms.py
- Added function docstring to \modules\platforms\platforms.py find_os
- Added module docstring to \modules\platforms\window_managers\base.py
- Added function docstring to \modules\platforms\window_managers\base.py WindowMgr
- Added module docstring to \modules\platforms\window_managers\linux.py get_window_geometry
- Edited function docstring to \modules\platforms\window_managers\linux.py WindowMgrLinux
- Edited function docstring to \modules\platforms\window_managers\linux.py find_game
- Added module docstring to \modules\platforms\window_managers\windows\factory.py
- Added function docstring to \modules\platforms\window_managers\windows\factory.py get_window_mgr_on_windows
- Added module docstring to \modules\platforms\window_managers\windows\win32gui_manager.py
- Edited function docstring to \modules\platforms\window_managers\windows\win32gui_manager.py WindowMgrWindowsWin32Gui
- Added function docstring to \modules\platforms\window_managers\windows\win32gui_manager.py init
- Edited function docstring to \modules\platforms\window_managers\windows\win32gui_manager.py find_game
- Added function docstring to \modules\platforms\window_managers\windows\win32gui_manager.py get_window_geometry
- Edited function docstring to \modules\platforms\window_managers\windows\win32gui_manager.py _window_enum_callback
- Added function docstring to \modules\platforms\window_managers\windows\win32gui_manager.py _find_window
- Added function docstring to \modules\platforms\window_managers\windows\win32gui_manager.py _show_window
- Edited function docstring to \modules\platforms\window_managers\windows\win32gui_manager.py _set_foreground
- Added module docstring to \modules\settings\conf\conf.py
- Added function docstring to \modules\settings\conf\conf.py set_settings
- Added function docstring to \modules\settings\conf\conf.py initusersettings
- Added function docstring to \modules\settings\conf\conf.py get_config
- Added function docstring to \modules\settings\conf\conf.py update_settings_with_file
- Added function docstring to \modules\settings\conf\conf.py log_settings_dict
- Added function docstring to \modules\settings\conf\conf.py log_setting_dict_helper
- Added module docstring to \modules\settings\conf\settings.py
- Added function docstring to \modules\settings\conf\settings.py add_bot_settings
- Added function docstring to \modules\settings\conf\settings.py get_system_user_settings
- Edited function docstring to \modules\settings\conf\settings.py get_settings
- Edited function docstring to \modules\settings\conf\settings.py copy_config_from_sample_if_not_exists
- Removed references to bot_speed in multiple files as it's deprecated. Remove bot_speed from your settings.ini if it exists.
Bug fix:
- Blizzard updated the way zone.log is generated, it's now in it's own timestamped directory. Fix by @spxtctre
New:
- Added MFB Config Engine. A GUI for settings.ini configuration. Run conf\user\config.py or config.pyw (no console) 1. Loads settings.ini file if it exists, creates it with defaults if it does not. 2. If combo.ini doesn't exist, it's created with defaults. 3. It checks for log.config and creates one if it does not exist, or appends the necessary section if not found in an existing file. 4. It will only show the appropriate levels for each Zone and Mode, and uses the same naming convention as MFB. i.e. Winterspring Heroic 30, 30b, 30c, ... 5. If you are missing all the files, it may not create all of them and configure all of the settings first launch, launch it a second time (known).
Bug Fixes\Misc:
- Fixed some typos and case issues (bounty.py, encounter.py)
- Fixed some typos (image_utils.py, game.py, bounty.py, campfire.py, travelpoint.py, treasure.py, encounter.py, gameloop.py, battlenetloop.py)
- Removed tests\unit directory.
- Changed setup.cfg to max line length of 100 for flake8, since some comments triggered it with 88.
New:
- Battle.net support for 1920x1080 screen resolution
Bug Fixes:
- Board is well detected during first battle; it was broken after last Hearthstone update
- scroll function updated, for Bounty Level selection, as workaround for Windows users
- a font\name change in english prevents bounties.png from working in darkmoon, this cropped version fixes it
New:
- dedicated environment to install python dependencies
- feature to pause the bot (move mouse in a corner of the screen)
Changes:
- use Python 3.11 (instead of 3.10) - users need to upgrade Python
- output details improved. Users will see less useless logs
- enemies detection improved (useful in Felwood)
Bug Fixes:
- second ability for Lord Godfrey fixed
- second ability for Jandice and Lilian fixed
New:
- new Travel Point menu (with Boss Rush) support added
- support for new portal (travel point skin) added
- support for faction added
- all types updated
- 6 new mercenaries add
- support for dual-type minion support added
- Arcane Ward, Healing Totem and Stoneclaw Totem added and won't attack
Bug Fixes:
- security update
New:
- to be able to target a friendly mercenary\minion selected by name (in combo.ini)
- click on reconnect button when Hearthstone shows the pop-in
New:
- you can configure combos for a specific enemy\battle (usefull for Boss Battle)
- feature added to select mercenaries from cards in hand (usefull for Boss Battle)
New:
- select a passive treasure (when MFB doesn't find a known\configured treasure)
- new Mercenary 'Chromie' added
- user can choose (in combo.ini) which cards to pick to put on board
- boon priorization available
Changes:
- Raven Familiar will use second ability and Blue Portal won't attack
Bug Fixes:
- SPUD leaving your side of the board should be well detected. Fixes #21
- Darkmoon zone added
- thresholds updated to improve battles detection on Encounter Map
New:
- new bounties added (Darkmoon and missing Blackrock)
- trying to support "Bonus loot" button at end of bounty
- Rattlegore (protector) added
Bug Fixes:
- image bounty for Neeru Fireblade wasn't correct
- new images for better battles (encounter map) detection
- update for Jaraxxus (Fel Infernal doesn't have Charge)
- images updated for battle on encounter map (to avoid to click on a disabled battle)
New:
- new Campfire screen (from 24.6 HS patch) is supported