Commit Graph
34 Commits
Author SHA1 Message Date
alexandClaude Sonnet 4.6 d6c8d8d5f7 fix: replace custom tesserocr wheel with conda-forge package
The custom tesserocr-2.5.2 wheel was compiled on a specific machine
against DLL versions that do not match a fresh conda-forge installation.
This caused persistent ImportError: DLL load failed regardless of PATH
or LoadLibraryExW approach.

conda-forge's tesserocr package is compiled against the exact same
conda-forge tesseract/leptonica binaries, so all DLL dependencies
are automatically satisfied within the conda environment — no manual
DLL path manipulation needed.

Changes:
- environment.yml: add tesserocr + tesseract as conda-forge packages,
  remove leptonica pin (no longer needed), remove custom wheel from pip
- install.bat: replace wheel force-reinstall with pip uninstall cleanup
- src/*.py: simplify DLL fix to os.add_dll_directory only

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-05-24 14:49:00 +02:00
alexandClaude Sonnet 4.6 ee940b7e3d fix: pin leptonica=1.78.0 to match tesserocr wheel DLL dependency
The custom tesserocr wheel links against leptonica-1.78.0.dll at
compile time. Unpinned leptonica on conda-forge resolves to 1.82+
which installs leptonica-1.82.0.dll — a different filename — so
Windows DLL loader cannot find it regardless of os.add_dll_directory.

Also force-reinstall the wheel in install.bat to guarantee the
correct binary is used (not a stale cached version), and add a
diagnostic that prints which DLLs are actually present when the
smoke test fails so the root cause is visible instead of a vague
warning.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-05-24 13:51:54 +02:00
alex 77d84680c6 fix CI: remove broken pytest-pythonpath, add test→build pipeline, fix test asset guards 2026-05-22 23:24:41 +02:00
Randi 11440a3d24 Hardcoded numpy in environment.yml as latest version causes issue. 2025-11-08 11:15:49 -05:00
Randi 6b2f719605 Tweaked env file. 2024-05-25 13:24:34 -04:00
Randi 39788df29c Set params.ini to match sorc. Updated environment.yml to set dependencies on package versions such as mss 7.0.1. Updated discord_embeds.py to work with latest discord version. Updated save_exit button image. Updated char_state image and roi. 2024-05-19 21:44:00 -04:00
Gleed f9780c5942 Bugfix: Build process (#887)
* Bump version to v0.8.0

* Bump version to v0.8.0

* init

* vers
2022-06-17 10:00:05 -04:00
Gleed 5127417bd3 Major feature: NTIP pickit syntax integration, OCR pickit, OCR item property filtering (#724)
By @Riddle1001 @Ezro @mgleed @D2RLegit Sosa
2022-06-16 09:46:14 -04:00
Gleed 3b3282acea Bugfix: Tesserocr dll version compatibility (#873)
* init

* save
2022-06-15 20:56:43 -04:00
mgleedandaeon0 3e6f9a9bf1 Migrate from Python 3.9 to 3.10 (#826)
* migrate from python 3.9 to 3.10, recompiled tesserocr

* cleanup old types, change all Unions to |

* add a few match/case statements

* Update ci.yml

Co-authored-by: aeon0 <[email protected]>
2022-06-05 08:01:28 -04:00
Aimware0andYour Name cceb7905c7 Enhancement: Logger colors (#663)
Co-authored-by: Your Name <[email protected]>
2022-03-28 09:17:47 -04:00
mgleed 46202e5a69 Bugfix/enhancement: Fix ocr output wordlist check, replace difflib with Lev (#658)
* init

* remove unused difflib import

* use built-in function

* small changes
2022-03-23 16:11:57 -04:00
mgleed 9b22917660 Refactor: UI overhaul (#558)
Summary of changes:
-Rearranged many UI-related functions across the codebase (particularly in ui_manager.py) into individual components. See src/ui_components/. Functions related to components can be called like if waypoint.use_wp("Arcane Sanctuary"): or loading.wait_for_loading_screen(2.0)
-Removed Screen and TemplateFinder dependencies across the codebase
-Screen functions separated from class
-TemplateFinder made into a singleton
-Added generic ScreenObject UI functions to simply detect UI elements on screen; e.g., detect_screen_object(ScreenObjects.TownPortal), wait_for_screen_object(ScreenObjects.Loading, 2). Also included related functions like select_screen_object_match(template_match) to automatically select the match.
-Consolidated assets. Organized templates folder into components. Adjusted some asset ROI's and alpha channels.
-Changed some template searches to grayscale for speed
-Reworked save/exit routine, should now be more consistent and faster with normal exit, chicken exit, and death exit.
-Got rid of unused and consolidated duplicate game.ini parameters
-spelling fix _last_merc_healh
-NPC manager class removed and replaced with functions
-D2 window detection now runs on its own thread for semi-live window position offsets.
-Character selection reworked. OCR your selected character for fun (not that accurate, lol)
-Simplified game start and difficulty select
-Added a get experience function, but this is not called anywhere yet
-Reworked corpse pickup. pickup_corpse is no longer a necessary argument/parameter throughout the codebase (bot.py, game_controller.py, runs, etc.)
2022-02-20 18:49:04 -05:00
mgleed c65ae545df Bugfix: Provide precompiled tesserocr (#520)
* Revert tesserocr to conda-forge rather than pip

Tesserocr with Tesseract > 5 works with pip install but installer fails if user doesn't have VS compilers. Will revisit

* fixed by providing precompiled tesserocr
2022-02-06 15:14:12 -05:00
mgleed f8e41d525b OCR as a service (#505) 2022-02-05 23:49:17 -05:00
aeon0 27f0e3d793 Revert "Add Linting (#487)" (#490)
This reverts commit 5e1a783394.
2022-01-28 18:24:47 +01:00
aeon0 5e1a783394 Add Linting (#487)
* add black linting

* fix linting

* doc update
2022-01-28 17:47:03 +01:00
aeon0 04dac4070f Bump version to v0.6.3 (#450) 2022-01-14 12:18:39 +01:00
aeon0 28ca8d2ee7 Nova sorc trav update (#443) 2022-01-13 12:40:53 +01:00
egut125 dff178bbc7 Breaking Messenger Module into something more flexible for specif… (#370)
* WIP Breaking Messenger Module into something more flexible for specific apis

* Cleanup and removal of data class

* Working embeds sort of

* Simple embeds set up

* Adding image of stashing items to discord embed

* Discord Embed updates with images

death_manager and game_controller both store path to last death/chicken screenshot
Pass last screenshot path along to game_stats and discord_embeds to place in discord message

* Color adjust

* Updating filenames formobile notifications

* Create loot_screenshots folder if it doesn't exist and api=discord

* Fixing missed messenger.send calls

* UI for discord updates

* Switching to i_api and explicit functions

* Update all messenger calls to new functions

* Param name change

* Simplify discord_basic api

* Switching from interface to generic api class

* One new messenger call from master

* spacing
2022-01-06 18:33:59 +01:00
Francesco c92d32b6de Improved debugger (#361) 2022-01-05 22:15:10 +01:00
Francesco d35fda18c0 pywin32 dependency fix (#394)
* My pick up and sorc parameters

* Moved the game logic away from the main within the new GameController class.
Refactored the main to use built-in keyboard add_hotkey and wait functions instead of self-written main loop.

* Revert "My pick up and sorc parameters"

This reverts commit 0920a406

* Changed number of loot columns

* Changes as per the comments:
Handle non-existing backup file.
Removed newline at the beginning of GameController class.
Changed line splitted into multiple lines back to a single line.

* Refactored graphic debugger with similar logic to botty to now have a controller.

* Added a small comment on the graphic debugger class and fixed a now-typo on the presented menu

* Bug Fix: if pressing F11 repeatedly the main loop may crash due to self.bot not yet initialized in the game_controller.

A safe solution would be to try and catch all but that would also be an overkill as it would most likely mask exceptions that we might want to make the program crash.

Checking that self.bot is initialized should work for the time being.

* No need to re-assign the resume key within the game controlelr anymore

* Urgent 1 liner bug fix for always_on_top: name 'config' is not defined

* Bug fix, keyboard dependency on game_recovery.py
For some reason PyCharm seems to flag this import as unused while it is actually used.

* Moved pywin32 dependency outside of pip (tested a clean install on two machines with this change and worked fine)

Also removed the win32api import that was causing the issue.

Both changes fix the issue that several people are expereincing on discord separately (either would fix it but both are better).
2022-01-05 10:49:44 +01:00
aeon0 e099848ed4 Npc serach optimization (#391)
* NPC search optimization

* fix pywin32 version
2022-01-04 12:24:43 +01:00
Francesco 01e8078067 set D2R window to be always on top (#382)
* My pick up and sorc parameters

* Moved the game logic away from the main within the new GameController class.
Refactored the main to use built-in keyboard add_hotkey and wait functions instead of self-written main loop.

* Revert "My pick up and sorc parameters"

This reverts commit 0920a406

* Changed number of loot columns

* Changes as per the comments:
Handle non-existing backup file.
Removed newline at the beginning of GameController class.
Changed line splitted into multiple lines back to a single line.

* Refactored graphic debugger with similar logic to botty to now have a controller.

* Added a small comment on the graphic debugger class and fixed a now-typo on the presented menu

* Bug Fix: if pressing F11 repeatedly the main loop may crash due to self.bot not yet initialized in the game_controller.

A safe solution would be to try and catch all but that would also be an overkill as it would most likely mask exceptions that we might want to make the program crash.

Checking that self.bot is initialized should work for the time being.

* No need to re-assign the resume key within the game controlelr anymore

* Saving changes before switching repo

* Move the logic to set d2r always on top in the utils package.

* Remvoed unused dependency

* Always on top currently only works in Windows

* Removed one-time used variable

* Moved D2R window always on top to advanced_options.

Now the D2R window is set always on top only when the bot start (F11) and when it pause or F12 is pressed the D2R window (if it still exists) will be restored to its original value
2022-01-03 17:26:07 +01:00
aeon0 7eef36c2df Add Tests and Coverage report (#341) 2021-12-28 14:40:28 +01:00
cutebeast 2aff1800ef dclone ip hunting (#270)
* dclone ip hunting

This is add on to pause the bot and send msg to discord if we are able to obtain the correct hot ip for dclone.

* Update for dclone ip check

using messenger instead of discord
update param for section on dclone
move the block to check for ip to after town spawn

* update for dclone for ip hunting

allow setting to disable to ip search
2021-12-12 16:15:20 +01:00
aeon0 1d7fcbafca Update release process (#161)
* Update release process

* update ci
2021-12-01 17:53:46 +01:00
aeon0 810a76aba7 Setting up CI (#22) 2021-11-14 11:25:11 +01:00
aeon0 ce498893d3 add first test 2021-11-14 07:51:40 +01:00
aeon0 b3bed8a1fe discord integration for drops and getting stuck 2021-11-10 18:37:41 +01:00
aeon0 7181494a86 feat(mouse): Nicer mouse movement 2021-11-08 16:14:30 +01:00
jagarop a7d7a96268 add zstandard 2021-11-06 20:06:29 -03:00
aeon0 c33de8837b feat(run): Automatically set relevent settings in D2R 2021-11-05 12:12:54 +01:00
aeon0 a8141b91db initial 2021-11-04 21:24:44 +01:00