Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Помогите автоволл зафиксить

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
27 Ноя 2025
Сообщения
25
Реакции
0
Дарова брадки !
Кароч хотел зафиксить дарк сайд , Сегодня фиксил раге бот и появилось проблема . Автоволл не правильно воркает и раге бот стреляет в стены которые даже не аволл (даже на 1хп) . Пытался зафиксить и с дебагом нихуя не смог помогите .


#include "auto_wall.hpp"

void c_auto_wall::scale_damage(int hitgroup, c_cs_player_pawn* entity, c_cs_weapon_base_v_data* weapon_data, float& damage)
{
static convar_t* mp_damage_scale_ct_head = g_interfaces->m_var->get_by_name("mp_damage_scale_ct_head");
static convar_t* mp_damage_scale_t_head = g_interfaces->m_var->get_by_name("mp_damage_scale_t_head");
static convar_t* mp_damage_scale_ct_body = g_interfaces->m_var->get_by_name("mp_damage_scale_ct_body");
static convar_t* mp_damage_scale_t_body = g_interfaces->m_var->get_by_name("mp_damage_scale_t_body");


auto safe_scale = [](convar_t* cv, float def = 1.f) -> float {
if (!cv) return def;
float v = cv->get_float();
return (v <= 0.f) ? def : v;
};
float damage_scale_ct_head = safe_scale(mp_damage_scale_ct_head);
float damage_scale_t_head = safe_scale(mp_damage_scale_t_head);
float damage_scale_ct_body = safe_scale(mp_damage_scale_ct_body);
float damage_scale_t_body = safe_scale(mp_damage_scale_t_body);

const bool is_ct = entity->m_team_num() == 3, is_t = entity->m_team_num() == 2;
LOG_INFO("[scale_damage] hitgroup=%d team=%d is_ct=%d is_t=%d damage_in=%.1f", hitgroup, entity->m_team_num(), is_ct, is_t, damage);

float head_damage_scale = is_ct ? damage_scale_ct_head : is_t ? damage_scale_t_head : 1.f;
const float body_damage_scale = is_ct ? damage_scale_ct_body : is_t ? damage_scale_t_body : 1.f;

switch (hitgroup)
{
case hitgroup_head:
LOG_INFO("[scale_damage] head_mult=%.2f head_scale=%.2f before=%.1f", weapon_data->m_headshot_multiplier(), head_damage_scale, damage);
damage *= weapon_data->m_headshot_multiplier() * head_damage_scale;
LOG_INFO("[scale_damage] after head mult: damage=%.1f", damage);
break;
case hitgroup_chest:
case hitgroup_left_hand:
case hitgroup_right_hand:
case hitgroup_neck:
damage *= body_damage_scale;
break;
case hitgroup_stomach:
damage *= 1.25f * body_damage_scale;
break;
case hitgroup_left_leg:
case hitgroup_right_leg:
damage *= .75f * body_damage_scale;
break;
default:
break;
}

if (!entity->has_armor(hitgroup) || entity->m_armor_value() <= 0)
return;

float heavy_armor_bonus = 1.f, armor_bonus = .5f, armor_ratio = weapon_data->m_armor_ratio() * .5f;

float damage_to_health = damage * armor_ratio;
const float damage_to_armor = (damage - damage_to_health) * (heavy_armor_bonus * armor_bonus);

LOG_INFO("[scale_damage] armor_ratio=%.2f d2health=%.1f d2armor=%.1f armor_val=%d", armor_ratio, damage_to_health, damage_to_armor, entity->m_armor_value());

if (damage_to_armor > static_cast<float>(entity->m_armor_value()))
damage_to_health = damage - static_cast<float>(entity->m_armor_value()) / armor_bonus;

damage = damage_to_health;
LOG_INFO("[scale_damage] final damage=%.1f", damage);
}

bool c_auto_wall::fire_bullet(vec3_t start, vec3_t end, c_cs_player_pawn* target, c_cs_weapon_base_v_data* weapon_data, penetration_data_t& pen_data, bool is_taser)
{
c_cs_player_pawn* local_player = g_ctx->m_local_pawn;

if (!local_player)
return false;



trace_data_t trace_data = trace_data_t();
trace_data.arr_pointer = &trace_data.arr;

vec3_t direction = end - start;
vec3_t end_pos = direction * weapon_data->m_range();

const trace_filter_t filter(0x1C300B, local_player, nullptr, 3);
g_interfaces->m_trace->create_trace(&trace_data, start, end_pos, filter, 4);

handle_bulllet_penetration_data_t handle_bullet_data = handle_bulllet_penetration_data_t(
static_cast<float>(weapon_data->m_damage()),
weapon_data->m_penetration(),
weapon_data->m_range(),
weapon_data->m_range_modifier(),
4,
false
);

float max_range = weapon_data->m_range();
pen_data.m_damage = static_cast<float>(weapon_data->m_damage());
LOG_INFO("[fire_bullet] init damage=%.1f range=%.1f pen=%.2f", pen_data.m_damage, max_range, weapon_data->m_penetration());

for (int i = 0; i < trace_data.num_update; i++)
{
update_value_t* modulate_values = reinterpret_cast<update_value_t* const>(reinterpret_cast<std::uintptr_t>(trace_data.pointer_update_value) + i * sizeof(update_value_t));

game_trace_t game_trace;
g_interfaces->m_trace->init_trace_info(&game_trace);
g_interfaces->m_trace->get_trace_info(&trace_data, &game_trace, 0.0f, reinterpret_cast<void*>(reinterpret_cast<std::uintptr_t>(trace_data.arr.data()) + sizeof(trace_array_element_t) * (modulate_values->m_handle_index & ENT_ENTRY_MASK)));

if (game_trace.m_hit_entity && game_trace.m_hit_entity->is_player_pawn())
{
if (pen_data.m_damage < 1.f)
continue;

float dmg_before = pen_data.m_damage;
scale_damage(game_trace.get_hit_group(), game_trace.m_hit_entity, weapon_data, pen_data.m_damage);
LOG_INFO("[fire_bullet] hit entity hitgroup=%d dmg_before=%.1f dmg_after=%.1f armor=%d", game_trace.get_hit_group(), dmg_before, pen_data.m_damage, game_trace.m_hit_entity->m_armor_value());

pen_data.m_hitbox = game_trace.get_hitbox_id();
pen_data.m_penetrated = i == 0;

if (is_taser && pen_data.m_penetrated)
break;

return true;
}

if (handle_bullet_penetration(&trace_data, &handle_bullet_data, modulate_values, g_ctx->m_local_pawn->m_team_num()))
break;

pen_data.m_damage = handle_bullet_data.m_damage;
}

return false;
}



#pragma once

#include "../../darkside.hpp"
#include "../../valve/interfaces/vtables/i_trace.hpp"

struct penetration_data_t {
float m_damage{ };
uint8_t m_hitgroup{ };

int m_hitbox{ };

bool m_penetrated{ true };
};

struct handle_bulllet_penetration_data_t {
handle_bulllet_penetration_data_t( const float damage, const float pen, const float range_mod, const float range, const int pen_count, const bool failed ) :
m_damage( damage ),
m_penetration( pen ),
m_range_modifier( range_mod ),
m_range( range ),
m_pen_count( pen_count ),
m_failed( failed )
{}

float m_damage{ };
float m_penetration{ };
float m_range_modifier{ };
float m_range{ };
int m_pen_count{ };
bool m_failed{ };
};

enum e_hitgroups
{
hitgroup_gear,
hitgroup_head,
hitgroup_chest,
hitgroup_stomach,
hitgroup_left_hand,
hitgroup_right_hand,
hitgroup_left_leg,
hitgroup_right_leg,
hitgroup_neck
};

class c_auto_wall {
using fn_handle_bullet_penetration = bool( __fastcall* ) ( trace_data_t*, handle_bulllet_penetration_data_t*, update_value_t*, int, void* );

inline bool handle_bullet_penetration( trace_data_t* const trace, handle_bulllet_penetration_data_t* stats, update_value_t* const mod_value, const int team_num ) {
static fn_handle_bullet_penetration fn = reinterpret_cast<fn_handle_bullet_penetration>( g_opcodes->scan( g_modules->m_modules.client_dll.get_name(), xorstr_( "48 8B C4 44 89 48 20 55 57 41 55 41 57 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 41 F6 40 ? ? 0F 57" ) ) );

return fn( trace, stats, mod_value, team_num, nullptr );
}
public:
void scale_damage( int hitgroup, c_cs_player_pawn* entity, c_cs_weapon_base_v_data* weapon_data, float& damage );
bool fire_bullet( vec3_t start, vec3_t end, c_cs_player_pawn* target, c_cs_weapon_base_v_data* weapon_data, penetration_data_t& pen_data, bool is_taser = false );
};

const auto g_auto_wall = std::make_unique<c_auto_wall>( );
 
Дарова брадки !
Кароч хотел зафиксить дарк сайд , Сегодня фиксил раге бот и появилось проблема . Автоволл не правильно воркает и раге бот стреляет в стены которые даже не аволл (даже на 1хп) . Пытался зафиксить и с дебагом нихуя не смог помогите .


#include "auto_wall.hpp"

void c_auto_wall::scale_damage(int hitgroup, c_cs_player_pawn* entity, c_cs_weapon_base_v_data* weapon_data, float& damage)
{
static convar_t* mp_damage_scale_ct_head = g_interfaces->m_var->get_by_name("mp_damage_scale_ct_head");
static convar_t* mp_damage_scale_t_head = g_interfaces->m_var->get_by_name("mp_damage_scale_t_head");
static convar_t* mp_damage_scale_ct_body = g_interfaces->m_var->get_by_name("mp_damage_scale_ct_body");
static convar_t* mp_damage_scale_t_body = g_interfaces->m_var->get_by_name("mp_damage_scale_t_body");


auto safe_scale = [](convar_t* cv, float def = 1.f) -> float {
if (!cv) return def;
float v = cv->get_float();
return (v <= 0.f) ? def : v;
};
float damage_scale_ct_head = safe_scale(mp_damage_scale_ct_head);
float damage_scale_t_head = safe_scale(mp_damage_scale_t_head);
float damage_scale_ct_body = safe_scale(mp_damage_scale_ct_body);
float damage_scale_t_body = safe_scale(mp_damage_scale_t_body);

const bool is_ct = entity->m_team_num() == 3, is_t = entity->m_team_num() == 2;
LOG_INFO("[scale_damage] hitgroup=%d team=%d is_ct=%d is_t=%d damage_in=%.1f", hitgroup, entity->m_team_num(), is_ct, is_t, damage);

float head_damage_scale = is_ct ? damage_scale_ct_head : is_t ? damage_scale_t_head : 1.f;
const float body_damage_scale = is_ct ? damage_scale_ct_body : is_t ? damage_scale_t_body : 1.f;

switch (hitgroup)
{
case hitgroup_head:
LOG_INFO("[scale_damage] head_mult=%.2f head_scale=%.2f before=%.1f", weapon_data->m_headshot_multiplier(), head_damage_scale, damage);
damage *= weapon_data->m_headshot_multiplier() * head_damage_scale;
LOG_INFO("[scale_damage] after head mult: damage=%.1f", damage);
break;
case hitgroup_chest:
case hitgroup_left_hand:
case hitgroup_right_hand:
case hitgroup_neck:
damage *= body_damage_scale;
break;
case hitgroup_stomach:
damage *= 1.25f * body_damage_scale;
break;
case hitgroup_left_leg:
case hitgroup_right_leg:
damage *= .75f * body_damage_scale;
break;
default:
break;
}

if (!entity->has_armor(hitgroup) || entity->m_armor_value() <= 0)
return;

float heavy_armor_bonus = 1.f, armor_bonus = .5f, armor_ratio = weapon_data->m_armor_ratio() * .5f;

float damage_to_health = damage * armor_ratio;
const float damage_to_armor = (damage - damage_to_health) * (heavy_armor_bonus * armor_bonus);

LOG_INFO("[scale_damage] armor_ratio=%.2f d2health=%.1f d2armor=%.1f armor_val=%d", armor_ratio, damage_to_health, damage_to_armor, entity->m_armor_value());

if (damage_to_armor > static_cast<float>(entity->m_armor_value()))
damage_to_health = damage - static_cast<float>(entity->m_armor_value()) / armor_bonus;

damage = damage_to_health;
LOG_INFO("[scale_damage] final damage=%.1f", damage);
}

bool c_auto_wall::fire_bullet(vec3_t start, vec3_t end, c_cs_player_pawn* target, c_cs_weapon_base_v_data* weapon_data, penetration_data_t& pen_data, bool is_taser)
{
c_cs_player_pawn* local_player = g_ctx->m_local_pawn;

if (!local_player)
return false;



trace_data_t trace_data = trace_data_t();
trace_data.arr_pointer = &trace_data.arr;

vec3_t direction = end - start;
vec3_t end_pos = direction * weapon_data->m_range();

const trace_filter_t filter(0x1C300B, local_player, nullptr, 3);
g_interfaces->m_trace->create_trace(&trace_data, start, end_pos, filter, 4);

handle_bulllet_penetration_data_t handle_bullet_data = handle_bulllet_penetration_data_t(
static_cast<float>(weapon_data->m_damage()),
weapon_data->m_penetration(),
weapon_data->m_range(),
weapon_data->m_range_modifier(),
4,
false
);

float max_range = weapon_data->m_range();
pen_data.m_damage = static_cast<float>(weapon_data->m_damage());
LOG_INFO("[fire_bullet] init damage=%.1f range=%.1f pen=%.2f", pen_data.m_damage, max_range, weapon_data->m_penetration());

for (int i = 0; i < trace_data.num_update; i++)
{
update_value_t* modulate_values = reinterpret_cast<update_value_t* const>(reinterpret_cast<std::uintptr_t>(trace_data.pointer_update_value) + i * sizeof(update_value_t));

game_trace_t game_trace;
g_interfaces->m_trace->init_trace_info(&game_trace);
g_interfaces->m_trace->get_trace_info(&trace_data, &game_trace, 0.0f, reinterpret_cast<void*>(reinterpret_cast<std::uintptr_t>(trace_data.arr.data()) + sizeof(trace_array_element_t) * (modulate_values->m_handle_index & ENT_ENTRY_MASK)));

if (game_trace.m_hit_entity && game_trace.m_hit_entity->is_player_pawn())
{
if (pen_data.m_damage < 1.f)
continue;

float dmg_before = pen_data.m_damage;
scale_damage(game_trace.get_hit_group(), game_trace.m_hit_entity, weapon_data, pen_data.m_damage);
LOG_INFO("[fire_bullet] hit entity hitgroup=%d dmg_before=%.1f dmg_after=%.1f armor=%d", game_trace.get_hit_group(), dmg_before, pen_data.m_damage, game_trace.m_hit_entity->m_armor_value());

pen_data.m_hitbox = game_trace.get_hitbox_id();
pen_data.m_penetrated = i == 0;

if (is_taser && pen_data.m_penetrated)
break;

return true;
}

if (handle_bullet_penetration(&trace_data, &handle_bullet_data, modulate_values, g_ctx->m_local_pawn->m_team_num()))
break;

pen_data.m_damage = handle_bullet_data.m_damage;
}

return false;
}



#pragma once

#include "../../darkside.hpp"
#include "../../valve/interfaces/vtables/i_trace.hpp"

struct penetration_data_t {
float m_damage{ };
uint8_t m_hitgroup{ };

int m_hitbox{ };

bool m_penetrated{ true };
};

struct handle_bulllet_penetration_data_t {
handle_bulllet_penetration_data_t( const float damage, const float pen, const float range_mod, const float range, const int pen_count, const bool failed ) :
m_damage( damage ),
m_penetration( pen ),
m_range_modifier( range_mod ),
m_range( range ),
m_pen_count( pen_count ),
m_failed( failed )
{}

float m_damage{ };
float m_penetration{ };
float m_range_modifier{ };
float m_range{ };
int m_pen_count{ };
bool m_failed{ };
};

enum e_hitgroups
{
hitgroup_gear,
hitgroup_head,
hitgroup_chest,
hitgroup_stomach,
hitgroup_left_hand,
hitgroup_right_hand,
hitgroup_left_leg,
hitgroup_right_leg,
hitgroup_neck
};

class c_auto_wall {
using fn_handle_bullet_penetration = bool( __fastcall* ) ( trace_data_t*, handle_bulllet_penetration_data_t*, update_value_t*, int, void* );

inline bool handle_bullet_penetration( trace_data_t* const trace, handle_bulllet_penetration_data_t* stats, update_value_t* const mod_value, const int team_num ) {
static fn_handle_bullet_penetration fn = reinterpret_cast<fn_handle_bullet_penetration>( g_opcodes->scan( g_modules->m_modules.client_dll.get_name(), xorstr_( "48 8B C4 44 89 48 20 55 57 41 55 41 57 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 41 F6 40 ? ? 0F 57" ) ) );

return fn( trace, stats, mod_value, team_num, nullptr );
}
public:
void scale_damage( int hitgroup, c_cs_player_pawn* entity, c_cs_weapon_base_v_data* weapon_data, float& damage );
bool fire_bullet( vec3_t start, vec3_t end, c_cs_player_pawn* target, c_cs_weapon_base_v_data* weapon_data, penetration_data_t& pen_data, bool is_taser = false );
};

const auto g_auto_wall = std::make_unique<c_auto_wall>( );
трейс дату фикси🫩🫩🫩
 
просто трейс дату почини и обратно старый авто волл дарксайда поставь
struct trace_data_t {
std::int32_t uk1{ };
float uk2{ 52.0f };
void* arr_pointer{ };
std::int32_t uk3{ 128 };
std::int32_t uk4{ static_cast<std::int32_t>( 0x80000000 ) };
std::array< trace_array_element_t, 0x80 > arr = { };
std::byte pad_001[ 0x8 ];
std::int64_t num_update{ };
void* pointer_update_value{ };
std::byte pad_002[ 0xC8 ];
vec3_t start{ }, end{ };
std::byte pad_003


[ 0x50 ];
};
А что тут фиксить? чет не доходит
если вы зафиксили, скиньте мне под хайдом пж
Нэ
 
struct trace_data_t {
std::int32_t uk1{ };
float uk2{ 52.0f };
void* arr_pointer{ };
std::int32_t uk3{ 128 };
std::int32_t uk4{ static_cast<std::int32_t>( 0x80000000 ) };
std::array< trace_array_element_t, 0x80 > arr = { };
std::byte pad_001[ 0x8 ];
std::int64_t num_update{ };
void* pointer_update_value{ };
std::byte pad_002[ 0xC8 ];
vec3_t start{ }, end{ };
std::byte pad_003


[ 0x50 ];
};
А что тут фиксить? чет не доходит

Нэ
трейс дату апдейтни все структуры и паттерны
 
ахахахах у тебя шиза или что. все молчали блять
1774468344331.png
 
то есть ты ответил это на сообщение состоящее из эмодзи?

Посмотреть вложение 331378
или ты сам себе решил задать вопрос какие оффсеты тебе нужны?)))

просто угарно выглядит
ты что говоришь я не понимаю вы меня запутать хотите или что, я уже структуры сам обновил никому не дам эмодзи не кидать !!!
 
ты что говоришь я не понимаю вы меня запутать хотите или что, я уже структуры сам обновил никому не дам эмодзи не кидать !!!
аххаахаха тип сам не выкупает что написал
 
Назад
Сверху Снизу