diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 6851044..04ba8ee 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -34,14 +34,14 @@ main.py (main thread) ### Input Layer (`src/input_layer/`) -Native Windows API input replacement (no kernel drivers): +Native Windows API input replacement designed to evade kernel-level anti-cheat (Warden). It bypasses common Python libraries like `pyautogui` or `pynput` which can be easily detected. | File | Purpose | |---|---| -| `win_input.py` | ctypes wrappers for `SendInput`, `GetAsyncKeyState`, `GetCursorPos` | -| `mouse_impl.py` | Humanized mouse with Bezier curves, Gaussian distortion, endpoint wobble | -| `hotkey.py` | Polling-based hotkey manager (replaces `keyboard.add_hotkey`) | -| `__init__.py` | Drop-in API: `from input_layer import keyboard, mouse` | +| `win_input.py` | Low-level `ctypes` wrappers for `SendInput`, `GetAsyncKeyState`, `GetCursorPos`. Uses standard Windows user-mode APIs. | +| `mouse_impl.py` | Humanized mouse controller. Features include: Bezier curve trajectories, Gaussian noise (hand tremor), endpoint wobble, and randomized arrival-to-click delays. | +| `hotkey.py` | Polling-based hotkey manager that avoids global hooks. All polling intervals include micro-jitter. | +| `__init__.py` | Drop-in API that shims standard input calls with stealth timing and variable duration automatically. | All key presses include stealth micro-pauses and variable press duration automatically. @@ -162,12 +162,15 @@ Singleton that merges config files in priority order: Supports variable substitution via `[variables]` sections. -### Stealth (`src/utils/stealth.py`) +### Stealth System (`src/utils/stealth.py`) -Three-tier stealth system: -- **Tier 1 (Input)**: Micro-pauses, click variance, key press duration, endpoint wobble -- **Tier 2 (Behavior)**: Wrong waypoint chance, skill mistake chance, skill hesitation -- **Tier 3 (Session)**: AFK breaks, run skipping, personality seed per character +A multi-tiered approach to mimicking human behavior and evading detection: + +- **Tier 1: Input Stealth**: Automatic micro-pauses (20-120ms), variable key press durations (20-200ms), and non-linear mouse paths via `input_layer`. +- **Tier 2: Behavioral Stealth**: Probabilistic "mistakes" such as clicking the wrong waypoint (2.5% chance) or skill hesitation (80-300ms) before casting. +- **Tier 3: Session Stealth**: Randomized run durations (+/-15%), AFK breaks (2-12 mins), and shuffling of farming routes between rotations. + +All timing across the bot is routed through `utils.misc.wait()`, which applies Gaussian jitter to every sleep call. ### Utilities (`src/utils/`) @@ -181,6 +184,17 @@ Three-tier stealth system: | `node_recorder.py` | Record new path nodes | | `stealth.py` | Stealth behavior randomization | +### Auxiliary Tools + +Standalone tools located in the root directory for project maintenance and development: + +- `asset_manager.py`: Unified interface for auditing, searching, and optimizing template assets. +- `asset_extractor.py`: Screenshot capture and AI-assisted entity cropping workflow. +- `build.py`: PyInstaller wrapper for building production executables. +- `desktop_snap.py`: Lightweight tool for capturing full desktop screenshots. +- `quest_debug.py`: Debugging interface for the questing system. +- `screenshot_tool.py`: Simple utility for taking D2R client area screenshots. + ## Data Flow ``` diff --git a/README.md b/README.md index a718d2b..42c6f22 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Double-click **`run_botty.bat`**. Switch to D2R, go to the hero selection screen ### 1) Graphics and Gameplay Settings -All settings will automatically be set when you execute `main.exe` and press the hotkey for "Adjust D2R settings" (default f9). It is not a 100% thing, in rare cases you might still have to fiddle around with your brightness. I suggest using the "Graphic Debugger" to verify your settings. +All settings will automatically be set when you execute `main.exe` and press the hotkey for "Adjust D2R settings" (default **ctrl+f9**). It is not a 100% thing, in rare cases you might still have to fiddle around with your brightness. I suggest using the "Graphic Debugger" to verify your settings. **Note**: Make sure that no other external programs adapt your graphics settings (HDR, Geforce Experience, etc.) ### 2) Supported builds @@ -222,6 +222,32 @@ python tools/click_recorder.py playback # replay with human-like timing Records mouse clicks with timestamps and replays them with configurable speed and repeat count. +### Asset Manager + +A comprehensive tool for managing bot assets (templates). It helps with inventorying, auditing, searching, and optimizing template images. + +```bash +python asset_manager.py inventory # List all templates +python asset_manager.py audit # Check for missing/low-quality templates +python asset_manager.py search # Search for a specific template +python asset_manager.py quality # Analyze template quality (SNR, contrast) +python asset_manager.py batch resize 64x64 # Batch process templates +``` + +Features include similarity checking (to find duplicates), automatic cropping, and validation of template paths. + +### Asset Extractor + +A workflow tool for capturing and cropping new templates from D2R screenshots. Designed to work alongside an AI agent for rapid asset generation. + +```bash +python asset_extractor.py +``` + +- **F1**: Capture D2R screen to `screenshots/debug/latest.png`. +- **F2**: Crop entities using an AI-generated `latest_annotations.json` file. +- **F3**: List all currently extracted assets. + ### Builds || [sorceress] | Descriptions | || ------------- | ----------------------------------------------------------------------------- | diff --git a/config/params.ini b/config/params.ini index 4b029f4..ce3f524 100644 --- a/config/params.ini +++ b/config/params.ini @@ -18,8 +18,8 @@ bnet_pass= char_name=ZapZap ; messaging -custom_loot_message_hook= -custom_message_hook= +custom_loot_message_hook=https://discord.com/api/webhooks/1508382502857871380/J4JGQVz0cCyQSM9sSDWvkAUIqb2w7Z2UgEXDQcqBygiDqAgOwhQy5qb0Stj_iQ-RaufH +custom_message_hook=https://discord.com/api/webhooks/1508382502857871380/J4JGQVz0cCyQSM9sSDWvkAUIqb2w7Z2UgEXDQcqBygiDqAgOwhQy5qb0Stj_iQ-RaufH discord_log_chicken=1 discord_status_count=20 message_api_type=discord @@ -169,7 +169,7 @@ use_merc=1 atk_len_arc=2.5 atk_len_eldritch=3.0 atk_len_nihlathak=4.0 -atk_len_pindle=9.0 +atk_len_pindle=3.0 atk_len_shenk=4.0 atk_len_diablo=3.0 atk_len_trav=3.0 @@ -444,11 +444,11 @@ buff_2= [advanced_options] ; startup hotkeys -select_runs_key=f6 -restore_settings_from_backup_key=f7 -settings_backup_key=f8 -auto_settings_key=f9 -graphic_debugger_key=f10 +select_runs_key=f9 +restore_settings_from_backup_key=f10 +settings_backup_key=pause +auto_settings_key=scrolllock +graphic_debugger_key=insert resume_key=f11 exit_key=f12