feat: implement various player hacks and refactor main loop for modularity
Some checks failed
Python Type Check and Lint / ci (push) Failing after 1s

This commit is contained in:
암냥 2026-05-30 18:45:42 +09:00
commit 1730b73d1f
9 changed files with 141 additions and 85 deletions

View file

@ -1,60 +0,0 @@
import sys
import pyMeow as pm
from pynput import keyboard
class Pointer:
local_player = 0x17E0A8
entity_list = 0x18AC04
player_count = 0x18AC0C
view_matrix = 0x17DFD0
class ProcessManager:
"""프로세스 및 모듈 초기화 관리"""
proc = None
base = None
@classmethod
def initialize(cls):
"""AssaultCube 프로세스 초기화"""
try:
cls.proc = pm.open_process("ac_client.exe")
cls.base = pm.get_module(cls.proc, "ac_client.exe")["base"]
print("Process and base initialized successfully.")
except Exception as e:
print(f"Error initializing process: {e}")
sys.exit(1)
@classmethod
def get_proc(cls):
return cls.proc
@classmethod
def get_base(cls):
return cls.base
class KeyboardManager:
"""키보드 입력 관리"""
left_shift_pressed = False
@classmethod
def setup(cls):
"""키보드 리스너 시작"""
listener = keyboard.Listener(on_press=cls._on_press, on_release=cls._on_release)
listener.start()
@classmethod
def _on_press(cls, key):
if key == keyboard.Key.shift_l:
cls.left_shift_pressed = True
@classmethod
def _on_release(cls, key):
if key == keyboard.Key.shift_l:
cls.left_shift_pressed = False
@classmethod
def is_left_shift_pressed(cls):
return cls.left_shift_pressed

77
main.py
View file

@ -1,30 +1,73 @@
import sys
import pyMeow as pm import pyMeow as pm
from libs.core import Pointer, ProcessManager, KeyboardManager
from modules.esp import Entity, init_colors as init_esp_colors from lib.keyboard import KeyboardManager
from modules.aimbot import do_aimbot from modules.esp import Entity, init_colors as init_esp_colors, process_entities
from modules.aimbot import AimBot
from modules.armor import ArmorHack
from modules.health import HealthHack
from modules.grenade import GrenadeHack
from modules.mtp57 import MTP57Hack
from modules.mk77 import MK77Hack
class Pointer:
local_player = 0x17E0A8
entity_list = 0x18AC04
player_count = 0x18AC0C
view_matrix = 0x17DFD0
proc = None
base = None
hacks = {
"aimbot": True,
"esp": True,
"armor": True,
"health": True,
"grenade": True,
"mtp57": True,
"mk77": True
}
def init(): def init():
ProcessManager.initialize() try:
proc = pm.open_process("ac_client.exe")
base = pm.get_module(proc, "ac_client.exe")["base"]
print("Process and base initialized successfully.")
except Exception as e:
print(f"Error initializing process: {e}")
sys.exit(1)
print(f"proc : {proc}")
print(f"base : {base}")
KeyboardManager.setup() KeyboardManager.setup()
print("Starting ESP + Aimbot (Hold Right Shift) overlay...")
pm.overlay_init(target="AssaultCube", fps=144, trackTarget=True) pm.overlay_init(target="AssaultCube", fps=144, trackTarget=True)
init_esp_colors() init_esp_colors()
def main(): def main():
proc = ProcessManager.get_proc()
base = ProcessManager.get_base()
while pm.overlay_loop(): while pm.overlay_loop():
pm.begin_drawing() pm.begin_drawing()
pm.draw_fps(10, 10)
try: try:
player_count = pm.r_int(proc, base + Pointer.player_count) player_count = pm.r_int(proc, base + Pointer.player_count)
local_player_addr = pm.r_int(proc, base + Pointer.local_player) local_player_addr = pm.r_int(proc, base + Pointer.local_player)
my_team = pm.r_int(proc, local_player_addr + 0x30C) # team offset my_team = pm.r_int(proc, local_player_addr + 0x30C) # team offset
if hacks["armor"] == True:
ArmorHack.apply(proc, local_player_addr)
if hacks["health"] == True:
HealthHack.apply(proc, local_player_addr)
if hacks["grenade"] == True:
GrenadeHack.apply(proc, local_player_addr)
if hacks["mtp57"] == True:
MTP57Hack.apply(proc, local_player_addr)
if hacks["mk77"] == True:
MK77Hack.apply(proc, local_player_addr)
valid_entities = [] valid_entities = []
if player_count > 1: if player_count > 1:
@ -32,20 +75,10 @@ def main():
ent_buffer = pm.r_ints(proc, ent_list, player_count)[1:] ent_buffer = pm.r_ints(proc, ent_list, player_count)[1:]
v_matrix = pm.r_floats(proc, base + Pointer.view_matrix, 16) v_matrix = pm.r_floats(proc, base + Pointer.view_matrix, 16)
for addr in ent_buffer: valid_entities = process_entities(proc, ent_buffer, v_matrix, hacks.get("esp"))
if addr == 0: continue
try:
ent = Entity(proc, addr)
valid_entities.append(ent)
if ent.wts(v_matrix):
ent.draw_box()
ent.draw_name()
ent.draw_health()
except:
continue
# 에임봇 실행 if hacks["aimbot"] == True:
do_aimbot(proc, valid_entities, local_player_addr, my_team, KeyboardManager.is_left_shift_pressed()) AimBot(proc, valid_entities, local_player_addr, my_team, KeyboardManager.is_left_shift_pressed())
except Exception as e: except Exception as e:
pass pass

View file

@ -7,7 +7,7 @@ class AimbotOffsets:
yaw = 0x34 # camera_x yaw = 0x34 # camera_x
pitch = 0x38 # camera_y pitch = 0x38 # camera_y
def do_aimbot(proc, entities, local_player_addr, my_team, left_shift_pressed): def AimBot(proc, entities, local_player_addr, my_team, left_shift_pressed):
if not left_shift_pressed or not entities: if not left_shift_pressed or not entities:
return return

12
modules/armor.py Normal file
View file

@ -0,0 +1,12 @@
import pyMeow as pm
class ArmorHack:
offset = 0xF0
@classmethod
def apply(cls, proc, local_player_addr, value=100):
"""local_player의 Armor 값을 100으로 고정시킵니다."""
try:
pm.w_int(proc, local_player_addr + cls.offset, value)
except Exception as e:
pass

View file

@ -97,3 +97,18 @@ class Entity:
segments=0, segments=0,
color=self.color, color=self.color,
) )
def process_entities(proc, ent_buffer, v_matrix, enable_esp):
valid_entities = []
for addr in ent_buffer:
if addr == 0: continue
try:
ent = Entity(proc, addr)
valid_entities.append(ent)
if enable_esp and ent.wts(v_matrix):
ent.draw_box()
ent.draw_name()
ent.draw_health()
except:
continue
return valid_entities

12
modules/grenade.py Normal file
View file

@ -0,0 +1,12 @@
import pyMeow as pm
class GrenadeHack:
offset = 0x144
@classmethod
def apply(cls, proc, local_player_addr, value=9999999):
"""local_player의 Grenade 값을 9999999로 고정시킵니다."""
try:
pm.w_int(proc, local_player_addr + cls.offset, value)
except Exception as e:
pass

12
modules/health.py Normal file
View file

@ -0,0 +1,12 @@
import pyMeow as pm
class HealthHack:
offset = 0xEC
@classmethod
def apply(cls, proc, local_player_addr, value=9999):
"""local_player의 Health 값을 9999로 고정시킵니다."""
try:
pm.w_int(proc, local_player_addr + cls.offset, value)
except Exception as e:
pass

16
modules/mk77.py Normal file
View file

@ -0,0 +1,16 @@
import pyMeow as pm
class MK77Hack:
# 008438DC is MK-77 Ammo -> offset 0x12C from local_player (0x8437B0)
# 008438B8 is MK-77 Mag -> offset 0x108 from local_player (0x8437B0)
offset_ammo = 0x12C
offset_mag = 0x108
@classmethod
def apply(cls, proc, local_player_addr, ammo_value=999, mag_value=99):
"""local_player의 MK-77 총알 및 탄창 개수를 고정시킵니다."""
try:
pm.w_int(proc, local_player_addr + cls.offset_ammo, ammo_value)
pm.w_int(proc, local_player_addr + cls.offset_mag, mag_value)
except Exception as e:
pass

16
modules/mtp57.py Normal file
View file

@ -0,0 +1,16 @@
import pyMeow as pm
class MTP57Hack:
# 008438F0 is MTP-57 Ammo -> offset 0x140 from local_player (0x8437B0)
# 008438CC is MTP-57 Mag -> offset 0x11C from local_player (0x8437B0)
offset_ammo = 0x140
offset_mag = 0x11C
@classmethod
def apply(cls, proc, local_player_addr, ammo_value=999, mag_value=99):
"""local_player의 MTP-57 총알 및 탄창 개수를 고정시킵니다."""
try:
pm.w_int(proc, local_player_addr + cls.offset_ammo, ammo_value)
pm.w_int(proc, local_player_addr + cls.offset_mag, mag_value)
except Exception as e:
pass