import time
import ctypes
import struct

user32 = ctypes.windll.user32
kernel32 = ctypes.windll.kernel32

hwinsta = user32.OpenWindowStationW("WinSta0", False, 0x10000000)
if hwinsta: user32.SetProcessWindowStation(hwinsta)
hdesk = user32.OpenDesktopW("Default", 0, False, 0x10000000)
if hdesk: user32.SetThreadDesktop(hdesk)

hwnd = user32.FindWindowW("POEWindowClass", None)
user32.ShowWindow(hwnd, 9)
user32.SetForegroundWindow(hwnd)
user32.BringWindowToTop(hwnd)
time.sleep(0.2)

user32.SetCursorPos(1280, 5)
user32.mouse_event(0x0002, 0, 0, 0, 0)
time.sleep(0.02)
user32.mouse_event(0x0004, 0, 0, 0, 0)
time.sleep(0.3)

pid = 43084
h = kernel32.OpenProcess(0x0010, False, pid)
player_ptr = 0x2AF791A0010

def read_pos(offset):
    buf = ctypes.create_string_buffer(12)
    br = ctypes.c_size_t()
    kernel32.ReadProcessMemory(h, ctypes.c_void_p(player_ptr + offset), buf, 12, ctypes.byref(br))
    return struct.unpack("<fff", buf.raw)

print(f"Before move:")
print(f"  Offset 0x540 (Checkpoint): {read_pos(0x540)}")
print(f"  Offset 0x6B0 (Candidate):  {read_pos(0x6B0)}")

# Move cursor towards 1800, 600
user32.SetCursorPos(1800, 600)
time.sleep(0.05)

# Press 'W' for 600ms
print("Pressing 'W' for 600ms...")
user32.keybd_event(0x57, 0x11, 0, 0)
time.sleep(0.6)
user32.keybd_event(0x57, 0x11, 2, 0)
time.sleep(0.2)

print(f"After move:")
print(f"  Offset 0x540: {read_pos(0x540)}")
print(f"  Offset 0x6B0: {read_pos(0x6B0)}")

kernel32.CloseHandle(h)
