diff --git a/config/params.ini b/config/params.ini index 1dd089f..f7ffcd1 100644 --- a/config/params.ini +++ b/config/params.ini @@ -22,7 +22,7 @@ difficulty=hell ; name: bot profile name used in logs/messages and mod launch option replacement name=FiskenErSej ; randomize_runs: 0 = run in listed order, 1 = shuffle run order -randomize_runs=1 +randomize_runs=0 ; target_tz: target Terror Zone id (leave as default unless you know the mapping) target_tz=1 ; saved_games_folder: optional override path to D2R Saved Games folder (blank = auto) @@ -32,7 +32,7 @@ level_max_steps=20 ; Set to 1 to enable auto-login and auto-launch of D2R on startup. ; Credentials below are ONLY used when auto_login=1. -auto_login=0 +auto_login=1 bnet_name=${BOTTY_BNET_NAME} bnet_pass=${BOTTY_BNET_PASS} @@ -42,13 +42,13 @@ char_name=${BOTTY_CHAR_NAME} ; messaging ; custom_loot_message_hook: optional separate webhook for loot notifications -custom_loot_message_hook=https://discord.com/api/webhooks/1510992232939913297/20rbnGmpTWMKBBL6JN0JaE897jLGOmHl6zclJ1AO82o2dtD67YHfAKMD-e4G8DWvUOXV +custom_loot_message_hook=${BOTTY_CUSTOM_LOOT_MESSAGE_HOOK} ; custom_message_hook: main webhook for status/death/chicken messages -custom_message_hook=https://discord.com/api/webhooks/1510992232939913297/20rbnGmpTWMKBBL6JN0JaE897jLGOmHl6zclJ1AO82o2dtD67YHfAKMD-e4G8DWvUOXV +custom_message_hook=${BOTTY_CUSTOM_MESSAGE_HOOK} ; discord_log_chicken: 1 = send chicken/death style notifications discord_log_chicken=1 ; discord_status_runs: send periodic status every X completed runs (blank/0 disables) -discord_status_runs=100 +discord_status_runs=10 ; discord_status_count: legacy fallback, send periodic status every X games (blank/0 disables) discord_status_count=20 ; message_api_type: "" disables messaging, "discord" or "generic_api" @@ -66,14 +66,13 @@ d2r_path=C:\Program Files (x86)\Diablo II Resurrected ; max_consecutive_fails: stop bot after this many failed runs in a row max_consecutive_fails=5 ; max_game_length_s: emergency timeout per run/game -max_game_length_s=160 +max_game_length_s=600 ; auto_downgrade_threshold: if combined chickens+deaths exceed this number within 1 hour, ; bot automatically lowers difficulty by one tier (hell->nightmare->normal) and restarts. ; Set to 0 to disable. (NOTE: feature is parsed but not yet active in bot logic) auto_downgrade_threshold=0 -; if you set this field to 1, botty will attempt to restart d2 after a crash or failure -restart_d2r_when_stuck=0 +restart_d2r_when_stuck=1 ; hardcore: 1 enables hardcore-safe assumptions in some routines hardcore=0 @@ -181,7 +180,7 @@ skill_mistake_chance = 0.015 ; run_countess (Act 1 Forgotten Tower) ; run_mephisto (Act 3 Durance of Hate) ; run_baal (Act 5 Throne of Destruction) -order=run_trav +order=run_pindle, run_eldritch_shenk, run_arcane, run_diablo, run_vizier, run_trav [char] ; ========================== @@ -194,9 +193,9 @@ type=hammerdin ; belt_rows: in-game belt size (2/3/4) belt_rows=4 ; casting_frames: your char cast breakpoint (affects action timing) -casting_frames=11 +casting_frames=8 ; cta_casting_frames: cast breakpoint on CTA swap (if used) -cta_casting_frames=11 +cta_casting_frames=8 ; attack_frames: base attack animation timing for non-cast attacks attack_frames=15 ; cta_available: 1 if Call to Arms swap exists, else 0 @@ -225,13 +224,13 @@ show_items=alt ; stand_still cannot be the default "shift" as it would interfere with merc healing stand_still=capslock ; teleport: leave empty if you can't use -teleport=f4 -town_portal=f8 +teleport=b +town_portal=6 ; call to arms settings: ; weapon_switch/battle_orders/battle_command only used when cta_available=1 weapon_switch=w -battle_orders=f6 -battle_command=f5 +battle_orders=7 +battle_command=8 ; ========================== ; ==== Optional configs ==== @@ -248,7 +247,7 @@ use_merc=1 ; Normal: 1064-1588 HP, 75% fire, 70% poison ; Nightmare: 4773-5859 HP, 100% poison ; Hell: 13094-16070 HP, 75% fire, 50% cold, 33% light, 100% poison -; With Conviction (-33% res): Hell Pindle = 50% fire, 17% cold, 0% light, 67% poison +; With Conviction (-33% res), Hell Pindle = 50% fire, 17% cold, 0% light, 67% poison ; CTA adds +100% dmg to hammer. Need ~60%+ FCR and good IAS to kill in 8s. ; atk_len_nihlathak = 4.0 (Nihlathak - single boss) ; atk_len_eldritch = 3.0 (Eldritch only - single boss) @@ -262,10 +261,10 @@ use_merc=1 ; atk_len_baal_waves = 30.0 (Baal's spawn waves before boss) ; ; Chaos Sanctuary (Diablo run) individual fights: -; atk_len_cs_trashmobs = 2.0 (Trash packs in CS) -; atk_len_diablo_vizier = 2.0 (Vizier of Chaos - seal boss A) -; atk_len_diablo_infector = 4.0 (Infector of Souls - seal boss C) -; atk_len_diablo_deseis = 5.0 (Lord De Seis - seal boss B, hardest seal) +; atk_len_cs_trashmobs = 2.0 (Trash packs in CS) +; atk_len_diablo_vizier = 2.0 (Vizier of Chaos - seal boss A) +; atk_len_diablo_infector = 4.0 (Infector of Souls - seal boss C) +; atk_len_diablo_deseis = 5.0 (Lord De Seis - seal boss B, hardest seal) ; ; Increase these if your hammer kills slower (low IAS/FCR). ; Decrease if your hammer kills faster (high IAS/FCR, good gear). @@ -273,7 +272,7 @@ use_merc=1 atk_len_arc=2.5 atk_len_eldritch=3.0 atk_len_nihlathak=4.0 -atk_len_pindle=3.0 +atk_len_pindle=8.0 atk_len_shenk=4.0 atk_len_diablo=3.0 atk_len_trav=4.0 @@ -319,24 +318,24 @@ fill_shared_stash_first=0 ; to gamble, add any/all of the following: circlet, ring, coronet, talon, amulet gamble_items= ; open_chests: 1 = open clickable chests along path when possible -open_chests=0 +open_chests=1 ; pre_buff_every_run: 1 = always recast buffs at run start pre_buff_every_run=0 ; runs_per_repair: visit repair vendor every X runs (blank/0 disables) -runs_per_repair=2000 +runs_per_repair=5 ; repair_npc: preferred repair vendor strategy. ; - a4_halbu (recommended, most stable) ; - a5_larzuk (faster when templates are reliable) repair_npc=a4_halbu ; runs_per_stash: stash/sell every X runs (blank/0 disables) -runs_per_stash=1 +runs_per_stash=4 ; sell_junk: 1 = vendor non-keep items automatically -sell_junk=0 +sell_junk=1 ; protect_shields_from_sell: 1 = never vendor items with "shield" in detected name (recommended safety) protect_shields_from_sell=1 ; pick_rares_for_gold: 1 = pick all yellow (rare) ground items; non-keep rares will be sold ; Requires sell_junk=1 to convert extra pickups into gold. -pick_rares_for_gold=1 +pick_rares_for_gold=0 ; pick_gold: 1 = pick up ground gold piles, 0 = ignore all ground gold pick_gold=1 @@ -347,12 +346,12 @@ stash_destination=0,1,2,3 ; chipped, flawed, standard, flawless transmute=flawless ;how often we want to run transmute routine(e.g. every 100 games) -transmute_every_x_game=200 +transmute_every_x_game=2000 ; number of stash tabs (ROTW has more than 6, adjust as needed) stash_tabs=6 ; potion transmute settings ; convert_rejuv: 1 = convert regular Rejuv Potions to Full Rejuv via cube (3 -> 1) -convert_rejuv=0 +convert_rejuv=1 ; min_rejuv_to_convert: minimum regular rejuv potions in inventory before starting conversion min_rejuv_to_convert=6 @@ -402,22 +401,23 @@ hydra=f1 ; ==== Builds: Paladin ==== ; ========================= [paladin] -cleansing=f2 -holy_shield=f7 -redemption= -vigor=f3 +cleansing=f9 +holy_shield=f2 +redemption=f3 +vigor=f4 [fohdin] ; foh must be left skill, hotkey required -blessed_hammer=f9 -concentration=f1 -conviction= +blessed_hammer=f1 +concentration=f8 +conviction=f5 foh=f6 holy_bolt=f7 [hammerdin] -blessed_hammer=f9 -concentration=f1 +blessed_hammer=f1 +concentration=f8 +conviction=f5 ; ========================= ; ==== Builds: Warlock ==== @@ -575,13 +575,13 @@ buff_2= ; select_runs_key: open run selector UI select_runs_key=pagedown ; restore_settings_from_backup_key: restore backed-up D2R settings -restore_settings_from_backup_key=f10 +restore_settings_from_backup_key=insert ; settings_backup_key: create backup of current D2R settings settings_backup_key=pause ; auto_settings_key: auto-apply required D2R settings auto_settings_key=pageup ; graphic_debugger_key: toggle on-screen debug layers -graphic_debugger_key=insert +graphic_debugger_key=delete ; resume_key: start/pause bot loop resume_key=f11 ; exit_key: hard stop bot @@ -605,7 +605,7 @@ message_headers= ; ocr_during_pickit: 1 = run OCR while looting (slower, more diagnostics) ocr_during_pickit=0 ;use "can_teleport_natively" or "can_teleport_with_charges" if you want to force certain behavior in case autodetection isn't working properly -override_capabilities= +override_capabilities=can_teleport_natively ; pathing_delay_factor: movement/click delay multiplier (1 fast .. 10 slow) pathing_delay_factor=2 ; If you want to control Hyper-V window from host use 0,51 here diff --git a/src/inventory/common.py b/src/inventory/common.py index db888d0..508b1f9 100644 --- a/src/inventory/common.py +++ b/src/inventory/common.py @@ -159,7 +159,7 @@ def read_gold(img: np.ndarray = None, type: str = "inventory"): Logger.debug(f"{type.upper()} gold: {number}") return number -def wait_for_left_inventory(timeout: int = 5): +def wait_for_left_inventory(timeout: int = 10): start=time.time() while time.time() - start < timeout: if left_inventory_ready(grab()): diff --git a/src/item/pickit.py b/src/item/pickit.py index dd11c19..fb8ee24 100644 --- a/src/item/pickit.py +++ b/src/item/pickit.py @@ -184,6 +184,9 @@ class PickIt: :param char: The character used to pick up the item TODO :return: return a list of the items that were picked up """ + # Re-detect window position to mitigate 1282x720 vs 1280x720 template drift + from screen import find_and_set_window_position + find_and_set_window_position(force=True) self._reset_state() keyboard.send(Config().char["show_items"]) wait(0.16, 0.16) #wait 4 frames for items to refresh