scripts/full_abyssal_beasts.py
2025-06-20 17:16:32 +02:00

140 lines
4.1 KiB
Python

from typing import Callable
import pynput.keyboard as keyboard
import pynput.mouse as mouse
from secrets import randbelow
from pynput.mouse import Button
from pynput.keyboard import Key
from datetime import datetime, timedelta
import time
# Constants
potion_doses = 16 * 6
potion_duration_seconds = 7.5 * 60
key_quick_prayers = 'o'
key_book_activation = 'p'
key_pvm_hub_teleport = 'h'
key_aggression_potion = '7'
key_lantadyme_stick = '8'
position_compass = (1173, 34)
position_bank_chest_teleport = (896, 238)
position_bank_chest_after = (676, 339)
position_ectoplasm = (1210, 478)
position_ectoplasmator = (1210, 447)
position_open_page = (1250, 443)
position_select_all_page = (1205, 484)
position_open_springs = (1290, 444)
position_select_all_springs = (1256, 485)
position_open_divine_charge = (1330, 444)
position_select_all_divine_charge = (1267, 518)
k = keyboard.Controller()
m = mouse.Controller()
def random_between(minimum: int, maximum: int) -> int:
delta = maximum - minimum
return minimum + randbelow(delta)
def random_sleep_between(min_milliseconds: int, max_milliseconds: int) -> int:
sleep_microseconds = random_between(min_milliseconds * 1_000,
max_milliseconds * 1_000)
sleep_seconds = sleep_microseconds / 1_000_000
print(f"Sleeping for: {sleep_seconds} seconds")
time.sleep(sleep_seconds)
return sleep_microseconds
def click_at(position: tuple[int, int]):
m.position = position
m.click(Button.left)
def right_click_at(position: tuple[int, int]):
m.position = position
m.click(Button.right)
def full_setup():
k.tap(key_pvm_hub_teleport)
random_sleep_between(6_000, 7_000)
click_at(position_compass)
random_sleep_between(100, 300)
click_at(position_bank_chest_teleport)
random_sleep_between(4_000, 5_000)
k.tap('2')
random_sleep_between(1_800, 2_200)
click_at(position_ectoplasm)
random_sleep_between(500, 700)
click_at(position_ectoplasmator)
random_sleep_between(1_200, 1_400)
k.type('999')
random_sleep_between(500, 700)
k.tap(Key.enter)
random_sleep_between(500, 700)
right_click_at(position_open_page)
random_sleep_between(500, 700)
click_at(position_select_all_page)
random_sleep_between(500, 700)
right_click_at(position_open_springs)
random_sleep_between(500, 700)
click_at(position_select_all_springs)
random_sleep_between(500, 700)
right_click_at(position_open_divine_charge)
random_sleep_between(500, 700)
click_at(position_select_all_divine_charge)
random_sleep_between(500, 700)
click_at(position_bank_chest_after)
random_sleep_between(1_800, 2_200)
k.tap('1')
def start_abyssal_beasts():
global potion_doses
for dose in range(potion_doses):
start_of_dose_time = datetime.now()
dose_ends_at = start_of_dose_time + timedelta(
seconds=potion_duration_seconds)
print(f"{start_of_dose_time} : Dose {dose + 1} out of {potion_doses}")
k.tap(key_aggression_potion)
print("Pressed overload")
random_sleep_between(600, 1300)
k.tap(key_lantadyme_stick)
print("Pressed lantadyme stick")
while datetime.now() < dose_ends_at:
k.tap(" ")
print("Pressed space - looting")
delta_to_dose_end = dose_ends_at - datetime.now()
print(f"Time until dose ends: {delta_to_dose_end}")
if (delta_to_dose_end.total_seconds() < timedelta(seconds=60)):
print("Reduced sleep")
random_sleep_between(25_000, 40_000)
else:
print("Regular sleep")
random_sleep_between(25_000, 70_000)
def add_keybind(keybind: str | Key, action: Callable):
def on_release(key):
try:
if key == keybind:
action()
else:
if key.char == keybind:
action()
except:
pass
keyboard.Listener(on_release=on_release).start()
add_keybind(Key.f11, start_abyssal_beasts)
add_keybind(Key.f12, full_setup)
while True:
time.sleep(1000)