import pymem.process
import keyboard
import requests
import re
from time import sleep
def fetch_offsets(url):
response = requests.get(url)
response.raise_for_status()
return response.text
def parse_offsets(file_content, offset_name):
pattern = re.compile(rf'{offset_name}\s*=\s*0x([0-9A-Fa-f]+)')
match = pattern.search(file_content)
if match:
return int(match.group(1), 16)
else:
raise ValueError(f"Offset {offset_name} not found in the provided file.")
offsets_url = "https://raw.githubusercontent.com/a2x/cs2-dumper/refs/heads/main/output/offsets.hpp"
client_url = "https://raw.githubusercontent.com/a2x/cs2-dumper/refs/heads/main/output/client_dll.hpp"
offsets_content = fetch_offsets(offsets_url)
client_content = fetch_offsets(client_url)
pm = pymem.Pymem("cs2.exe")
client = pymem.process.module_from_name(pm.process_handle, "client.dll")
engine = pymem.process.module_from_name(pm.process_handle, "engine2.dll")
dwLocalPlayerController_offset = parse_offsets(offsets_content, "dwLocalPlayerController")
dwLocalPlayerController = pm.read_longlong(client.lpBaseOfDll + dwLocalPlayerController_offset)
OFFSET_M_PWEAPONSERVICES = parse_offsets(client_content, "m_pWeaponServices")
OFFSET_M_PWEAPONSIZE = 0x50
OFFSET_M_PWEAPONS = parse_offsets(client_content, "m_hMyWeapons")
OFFSET_M_ATTRIBUTEMANAGER = 0x1148
OFFSET_M_ITEM = parse_offsets(client_content, "m_Item")
OFFSET_M_IITEMDEFINITIONINDEX = parse_offsets(client_content, "m_iItemDefinitionIndex")
OFFSET_M_PGAMESCENENODE = parse_offsets(client_content, "m_pGameSceneNode")
OFFSET_M_MESHGROUPMASK = 0x198
OFFSET_LOCALPLAYERPAWN = parse_offsets(offsets_content, "dwLocalPlayerPawn")
OFFSET_ENTITYLIST = parse_offsets(offsets_content, "dwEntityList")
OFFSET_NETWORKGAMECLIENT = parse_offsets(offsets_content, "dwNetworkGameClient")
OFFSET_M_PVIEWMODELSERVICES = parse_offsets(client_content, "m_pViewModelServices")
OFFSET_M_HVIEWMODEL = parse_offsets(client_content, "m_hViewModel")
OFFSET_DELTATICK = 0x174
dwEntityList = 0x1A36A00
changefov = int(input('Enter FOV\n'))
fov_offset = parse_offsets(client_content, "m_iDesiredFOV")
m_pClippingWeapon = 0x13A0
original_fov = pm.read_int(dwLocalPlayerController + fov_offset)
original_pattern_bytes = None
original_skins = {}
def get_weapon_services(local_player_pawn):
return pm.read_longlong(local_player_pawn + OFFSET_M_PWEAPONSERVICES)
def get_weapon_size(weapon_services):
return pm.read_int(weapon_services + OFFSET_M_PWEAPONSIZE)
def get_controller_from_handle(entity_list, handle):
try:
for i in range(64):
client = pymem.process.module_from_name(pm.process_handle, "client.dll").lpBaseOfDll
entity = pm.read_longlong(client + dwEntityList)
list_entry = pm.read_longlong(entity + ((8 * (i & 0x7FFF) >> 9) + 16))
if not list_entry:
return None
entity_controller = pm.read_longlong(list_entry + (120) * (i & 0x1FF))
if not entity_controller:
return None
return pm.read_longlong(entity_controller)
except Exception as e:
print(f"Controller error: {str(e)}")
return None
def get_weapon_handle(weapon_services, index):
return pm.read_longlong((weapon_services + OFFSET_M_PWEAPONS) + 0x8 * index)
def get_weapon_id(weapon):
try:
return pm.read_int(weapon + OFFSET_M_ATTRIBUTEMANAGER + OFFSET_M_ITEM + OFFSET_M_IITEMDEFINITIONINDEX)
except:
return None
def get_weapon_mesh_group_mask(weapon):
game_scene_node = pm.read_longlong(weapon + OFFSET_M_PGAMESCENENODE)
return pm.read_int(game_scene_node + 0x160 + OFFSET_M_MESHGROUPMASK)
def get_view_model_services(local_player_pawn):
return pm.read_longlong(local_player_pawn + OFFSET_M_PVIEWMODELSERVICES)
def get_view_model_handle(view_model_services):
return pm.read_int(view_model_services + OFFSET_M_HVIEWMODEL)
def set_mask_group(game_scene_node):
return pm.read_int(game_scene_node + 0x160 + OFFSET_M_MESHGROUPMASK)
def toggle_skins():
global original_skins
local_player_pawn = pm.read_longlong(client.lpBaseOfDll + OFFSET_LOCALPLAYERPAWN)
weapon_services = get_weapon_services(local_player_pawn)
weapon_size = get_weapon_size(weapon_services)
entity_list = pm.read_longlong(client.lpBaseOfDll + OFFSET_ENTITYLIST)
for i in range(weapon_size):
weapon_handle = get_weapon_handle(weapon_services, i)
if not weapon_handle:
continue
weapon = pm.read_longlong(local_player_pawn + m_pClippingWeapon)
if not weapon:
continue
weapon_id = get_weapon_id(weapon)
if not weapon_id:
continue
print(weapon_id)
weapon_game_scene_node = pm.read_longlong(weapon + OFFSET_M_PGAMESCENENODE)
mesh_group_mask = get_weapon_mesh_group_mask(weapon)
if weapon_id not in original_skins:
original_skins[weapon_id] = {
"paint": pm.read_int(weapon + 0x1548),
"seed": pm.read_int(weapon + 0x154C),
"stat": pm.read_int(weapon + 0x1554),
"wear": pm.read_float(weapon + 0x1550),
"name": pm.read_string(weapon + OFFSET_M_ATTRIBUTEMANAGER + OFFSET_M_ITEM + 0x2D0),
"item_id_high": pm.read_int(weapon + OFFSET_M_ATTRIBUTEMANAGER + OFFSET_M_ITEM + 0x1D0),
}
print(original_skins)
print(pm.read_int(weapon + OFFSET_M_ATTRIBUTEMANAGER + OFFSET_M_ITEM + 0x1D0))
if mesh_group_mask != -1:
pm.write_int(weapon_game_scene_node + 0x160 + OFFSET_M_MESHGROUPMASK, -1)
if weapon_id == 7:
sleep(5)
pm.write_int(weapon + 0x1548, 180)
elif weapon_id == 1:
pm.write_int(weapon + 0x1548, 37)
pm.write_int(weapon + 0x154C, 0)
pm.write_int(weapon + 0x1554, 1337)
pm.write_float(weapon + 0x1550, 0.00001)
pm.write_string(weapon + OFFSET_M_ATTRIBUTEMANAGER + OFFSET_M_ITEM + 0x2D0, "Alani-NU")
pm.write_int(weapon + OFFSET_M_ATTRIBUTEMANAGER + OFFSET_M_ITEM + 0x1BC, 2)
pm.write_int(weapon + OFFSET_M_ATTRIBUTEMANAGER + OFFSET_M_ITEM + 0x1D0, -1)
view_model_services = get_view_model_services(local_player_pawn)
if not view_model_services:
print("Failed to get view model services.")
return
view_model_handle = get_view_model_handle(view_model_services)
if not view_model_handle:
print("Failed to get view model handle.")
return
view_model = get_controller_from_handle(entity_list, view_model_handle)
if not view_model:
print("Failed to get view model controller.")
return
view_game_scene_node = pm.read_longlong(view_model + OFFSET_M_PGAMESCENENODE)
print(view_game_scene_node)
if view_game_scene_node:
pm.write_int(set_mask_group(view_game_scene_node) + 0x160 + OFFSET_M_MESHGROUPMASK, 2)
print("F8")
while True:
if keyboard.is_pressed('f8'):
toggle_skins()
while keyboard.is_pressed('f8'):
pass