145 lines
4.2 KiB
Python
145 lines
4.2 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():
|
|
k.tap(key_quick_prayers)
|
|
random_sleep_between(600, 700)
|
|
k.tap(key_book_activation)
|
|
random_sleep_between(600, 700)
|
|
|
|
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)
|