Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Как фиксануть авто волл

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
9 Апр 2025
Сообщения
14
Реакции
1
Короче есть авто волл он работает но ккриво не все стеныы простреливает ну и на кастом картах пытается прострелить не пробиваемые стены ккороче багованый он авто волл из darkside хелп плиз :summyrose:


autowall.cpp:
Expand Collapse Copy
#include "../../Precompiled.h"

// ПОЛНАЯ РЕАЛИЗАЦИЯ AUTOWALL ИЗ darkside-sdk-fix-main
// Полностью адаптировано для работы со структурой этого проекта

void CAutowall::CFunctions::CScaleDamage::ScaleDamage(int hitgroup, C_CSPlayerPawn* entity, CCSWeaponBaseVData* Weapon_data, float& damage)
{
    CONVAR(mp_damage_scale_ct_head);
    CONVAR(mp_damage_scale_t_head);
    CONVAR(mp_damage_scale_ct_body);
    CONVAR(mp_damage_scale_t_body);

    float damage_scale_ct_head = mp_damage_scale_ct_head->GetFloat();
    float damage_scale_t_head = mp_damage_scale_t_head->GetFloat();
    float damage_scale_ct_body = mp_damage_scale_ct_body->GetFloat();
    float damage_scale_t_body = mp_damage_scale_t_body->GetFloat();

    const bool is_ct = entity->m_iTeamNum() == 3;
    const bool is_t = entity->m_iTeamNum() == 2;

    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;

    переключатель (группа попаданий)
    {
    случай HITGROUP_HEAD:
        урон *= Weapon_data->m_flHeadshotMultiplier() * head_damage_scale;
        перерыв;
    случай HITGROUP_CHEST:
    случай HITGROUP_LEFTARM:
    случай HITGROUP_RIGHTARM:
    случай HITGROUP_NECK:
        повреждение *= body_damage_scale;
        перерыв;
    случай HITGROUP_STOMACH:
        урон *= 1.25f * body_damage_scale;
        перерыв;
    случай HITGROUP_LEFTLEG:
    случай HITGROUP_RIGHTLEG:
        повреждение *= .75f * body_damage_scale;
        перерыв;
    по умолчанию:
        перерыв;
    }

    если (!entity->IsArmored(hitgroup))
        возвращаться;

    float heavy_armor_bonus = 1.f;
    float armor_bonus = .5f;
    float armor_ratio = Weapon_data->m_flArmorRatio() * .5f;

    float damage_to_health = урон * коэффициент_брони;
    const float урон_броне = (урон - урон_здоровью) * (бонус_тяжелой_брони * бонус_брони);

    если (damage_to_armor > static_cast<float>(entity->m_ArmorValue())
        damage_to_health = damage - static_cast<float>(entity->m_ArmorValue()) / armor_bonus;

    повреждение = повреждение_здоровья;
}

bool CAutowall::CFunctions::CFireBullet::FireBullet(Начало вектора, Конец вектора, данные_проникновения_t* данные_пера, C_CSPlayerPawn* цель, bool is_taser)
{
    C_CSPlayerPawn* local_player = Globals::m_pLocalPlayerPawn;

    если (!local_player)
        вернуть false;

    автоматически Weapon_data = LocalPlayerData::m_pWeaponBaseVData;
    если (!weapon_data)
        вернуть false;

    TraceData_t trace_data = TraceData_t();
    trace_data.m_ArrPointer = &trace_data.m_Arr;

    Направление вектора = конец - начало;
    Вектор end_pos = направление * Weapon_data->m_flRange();

    const TraceFilter_t filter(0x1C300B, local_player, nullptr, 3);
    Интерфейсы::m_pVPhys2World->TraceToExit(&trace_data, start, end_pos, filter, 4);

    HandleBulletDataObj_t handle_bullet_data(
        static_cast<float>(weapon_data->m_nDamage()),
        Weapon_data->m_flPenetration(),
        Данные_оружия->m_flRange(),
        Данные_оружия->m_flRangeModifier(),
        4,
        ЛОЖЬ
    );

    float max_range = Weapon_data->m_flRange();
    pen_data->m_damage = static_cast<float>(weapon_data->m_nDamage());

    для (int i = 0; i < trace_data.m_nSurfaces; i++)
    {
        UpdateValue_t* modulate_values = reinterpret_cast<UpdateValue_t* const>(
            reinterpret_cast<std::uintptr_t>(trace_data.pointer_update_value) + i * sizeof(UpdateValue_t)
        );

        GameTrace_t game_trace;
        Интерфейсы::m_pVPhys2World->InitTraceInfo(&game_trace);
        Интерфейсы::m_pVPhys2World->GetTraceInfo(
            &trace_data,
            &game_trace,
            0.0f,
            reinterpret_cast<void*>(
                reinterpret_cast<std::uintptr_t>(trace_data.m_Arr) +
                sizeof(trace_array_element_t) * (modulate_values->m_HandleIdx & ENT_ENTRY_MASK)
            )
        );

        если (game_trace.m_pHitEntity && game_trace.m_pHitEntity->IsPlayerPawn())
        {
            если (pen_data->m_damage < 1.f)
                продолжать;

            g_Autowall->m_Functions.m_ScaleDamage.ScaleDamage(
                game_trace.GetHitgroup(),
                game_trace.m_pHitEntity,
                данные_оружия,
                pen_data->m_damage
            );

            pen_data->m_hitbox = game_trace.GetHitboxId();
            pen_data->m_penetrated = i == 0;

            если (is_taser && pen_data->m_penetrated)
                перерыв;

            вернуть истину;
        }

        если (Interfaces::m_pVPhys2World->HandleBulletPenetration(
            &trace_data,
            &handle_bullet_data,
            modulate_values,
            static_cast<int>(local_player->m_iTeamNum())
        ))
            перерыв;

        pen_data->m_damage = handle_bullet_data.m_flDmg;
    }

    вернуть false;
}

int CAutowall::CalculateDamage(C_CSPlayerPawn* pTargetPawn, C_CSWeaponBaseGun* pBaseGun, Vector vecEnd)
{
    вернуть 0;
}

// Вспомогательные структуры и функции для отката TraceToExit
структура TraceResult_t
{
    Вектор m_vecEndPos;
    char unk1[28];
};

беззнаковое __int8 sub_61C8A0(void* a1, void* a2, __int64 a3, беззнаковое __int8 a4)
{
    использование sub_61C8A0Fn = беззнаковый __int8(__fastcall*)(void*, void*, __int64, беззнаковый __int8);
    статический sub_61C8A0Fn sub_61C8A0 = reinterpret_cast<sub_61C8A0Fn>(
        Memory::GetAbsoluteAddress(Memory::FindPattern(CLIENT_DLL, X("E8 ? ? ? ? 48 8B 5C 24 ? 48 8B 6C 24 ? 48 8B 74 24 ? 0F 28 74 24 ? 48 83 C4 ? 5F C3 CC CC CC 48 89 5C 24")), 0x1, 0x0)
    );

    вернуть sub_61C8A0(a1, a2, a3, a4);
}

Вектор* НормализоватьВекторНаМесте(Вектор* вектор)
{
    использование NormalizeVectorInPlaceFn = Vector * (__fastcall*)(Vector*);
    static NormalizeVectorInPlaceFn NormalizeVectorInPlace = reinterpret_cast<NormalizeVectorInPlaceFn>(
        Memory::GetAbsoluteAddress(Memory::FindPattern(CLIENT_DLL, X("E8 ? ? ? ? F2 0F 10 0B 4C 8B C3")), 0x1, 0x0)
    );

    вернуть NormalizeVectorInPlace(вектор);
}

bool FillTraceData(TraceData_t* pTraceData, TraceResult_t* pTraceResult)
{
    использование FillTraceDataFn = bool(__fastcall*)(TraceData_t*, TraceResult_t*);
    статическая FillTraceDataFn FillTraceDataFunc = reinterpret_cast<FillTraceDataFn>(
        Память::НайтиШаблон(CLIENT_DLL, X("40 55 56 41 54 41 55 41 57 48 8B EC"))
    );

    вернуть FillTraceDataFunc(pTraceData, pTraceResult);
}

static bool CheckHitboxesWrapper(CVPhys2World* pVPhys2World, TraceData_t* pTraceData, Vector* vecStart, TraceResult_t* pTraceResult, int64_t* pTraceMask, int nMagicNumber)
{
    использование CheckHitboxesWrapperFn = char(__fastcall*)(CVPhys2World*, TraceData_t*, Vector*, TraceResult_t*, int64_t*, int);
    статическая CheckHitboxesWrapperFn CheckHitboxesWrapperFunc = reinterpret_cast<CheckHitboxesWrapperFn>(
        Память::НайтиШаблон(CLIENT_DLL, X("48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC ? 48 8B 09"))
    );

    return CheckHitboxesWrapperFunc(pVPhys2World, pTraceData, vecStart, pTraceResult, pTraceMask, nMagicNumber);
}

Интерфейсы пространства имен
{
    класс CCSHitboxSystem
    {
    общественность:
        __int64(__fastcall** ppfunc0)(__int64, TraceData_t*, __int64, Vector*, TraceResult_t*, int, int, __int64, int);
        MEM_PAD(0x28);
        int* m_pEntityList;
    общественность:
        bool HandleEntityList(TraceData_t* pTraceData, Vector* vecStart, TraceResult_t* pTraceResult, __int64 nTraceMask, int nMagicNumber)
        {
            использование fnHandleEntityList = bool(__fastcall*)(CCSHitboxSystem*, TraceData_t*, Vector*, TraceResult_t*, __int64, int, int);
            static auto HandleEntityList_INTERNAL = reinterpret_cast<fnHandleEntityList>(Memory::GetAbsoluteAddress(Memory::FindPattern(CLIENT_DLL, "E8 ? ? ? ? 84 C0 74 ? 48 63 03"), 0x1, 0x0));

            вернуть HandleEntityList_INTERNAL(this, pTraceData, vecStart, pTraceResult, nTraceMask, 0, nMagicNumber);
        }
    };

    CCSHitboxSystem* m_pHitboxSystem = nullptr;
}

static bool HandleEntityListRebuilt(C_CSPlayerPawn* pTargetPawn, Vector* vecStart, TraceResult_t* pTraceResult, TraceData_t* pTraceData, int nMagicNumber, int64_t* pTraceMask)
{
    использование fnSetTraceData = __int64(__fastcall*)(TraceData_t*, void*);
    static fnSetTraceData SetTraceData = (fnSetTraceData)Memory::GetAbsoluteAddress(Memory::FindPattern(CLIENT_DLL, "E8 ? ? ? ? 8B 85 ? ? ? ? 48 8D 54 24 ? F2 0F 10 45"), 0x1, 0x0);

    GameTrace_t objGameTrace = GameTrace_t();
    TraceFilter_t objFilter = TraceFilter_t(0x1C3003, Globals::m_pLocalPlayerPawn, nullptr, 4);
    Ray_t objRay = Ray_t();

    auto pCollisionProperty = Memory::CallVFunc<__int64, 57>(pTargetPawn);
    Matrix3x4_t v31 = *(Matrix3x4_t*)(pCollisionProperty + 0x18);

    Интерфейсы::m_pVPhys2World->TraceShape(&objRay, *vecStart, pTraceResult->m_vecEndPos, &objFilter, &objGameTrace);
    bool bHitPlayer = objGameTrace.m_pHitEntity == pTargetPawn;
    если (bHitPlayer)
    {
        SetTraceData(pTraceData, &v31);
        pTraceResult->m_vecEndPos = objGameTrace.m_vecEndPos;
    }
    вернуть bHitPlayer;
}

bool __fastcall CheckHitboxesWrapperRebuilt(CVPhys2World* pVPhys2World, TraceData_t* pTraceData, Vector* vecStart, TraceResult_t* pTraceResult, uint64_t* pTraceMask, int nMagicNumber)
{
    используя fn = bool(__fastcall*)(CVPhys2World*, TraceData_t*, Vector*, TraceResult_t*, uint64_t*, int);
    static fn x = (fn)Memory::FindPattern(CLIENT_DLL, "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC ? 48 8B 09");
    вернуть x(pVPhys2World, pTraceData, vecStart, pTraceResult, pTraceMask, nMagicNumber);
}

bool CAutowall::CRebuiltFunctions::CTraceToExit::TraceToExit(TraceData_t* pTraceData, Vector& vecStart, Vector& vecEnd, TraceFilter_t mTraceFilter, int iPenCount, C_CSPlayerPawn* pTargetPawn)
{
    если (!pTraceData)
        вернуть false;

    TraceResult_t objTraceResult = { };

    pTraceData->m_vecStart = vecStart;
    objTraceResult.m_vecEndPos = vecEnd;

    FillTraceData(pTraceData, &objTraceResult);
    CheckHitboxesWrapperRebuilt(Interfaces::m_pVPhys2World, pTraceData, &vecStart, &objTraceResult, &mTraceFilter.m_uTraceMask, -1.0f);

    вернуть FillTraceData(pTraceData, &objTraceResult);
}
[/КОД]
 
кинь пожалуйста без переводчика кода на русский
ну блят ккод не мой там скорее всего ии сделай эту залупу
я не понимаю в чем проблема просто помочь я не оч шарю
 
ну блят ккод не мой там скорее всего ии сделай эту залупу
я не понимаю в чем проблема просто помочь я не оч шарю
если ты не шаришь тогда не задавай эти тупые вопросы
 
ну давай по фактам тут же есть люди которые шарят насчет тебя не знаю но они же были такими же как я ничего не понимали в начале ну и накопился опыт ум и теперьь они шарят а есть люди которые не давно начали изучать языки и тд и не оченььп понимают так вот для этого и создали помощь и вопросы НОВИЧКАМ а не чтоб высирать тут ты не ответить так ответитьь когда небудь ддругой
 
ну давай по фактам тут же есть люди которые шарят насчет тебя не знаю но они же были такими же как я ничего не понимали в начале ну и накопился опыт ум и теперьь они шарят а есть люди которые не давно начали изучать языки и тд и не оченььп понимают так вот для этого и создали помощь и вопросы НОВИЧКАМ а не чтоб высирать тут ты не ответить так ответитьь когда небудь ддругой
ты скинул какое то дерьмо чтобы челу даже код понять ему все твое придется переписать
 
ну блят ккод не мой там скорее всего ии сделай эту залупу
я не понимаю в чем проблема просто помочь я не оч шарю
посмотри на реализацию TraceToExit. возьми паттерн, посмотри в иде, что там да как, и сравни свой вызов с игровым. тебе все сразу станет ясно
 
посмотри на реализацию TraceToExit. возьми паттерн, посмотри в иде, что там да как, и сравни свой вызов с игровым. тебе все сразу станет ясно
спасибо
 
ну давай по фактам тут же есть люди которые шарят насчет тебя не знаю но они же были такими же как я ничего не понимали в начале ну и накопился опыт ум и теперьь они шарят а есть люди которые не давно начали изучать языки и тд и не оченььп понимают так вот для этого и создали помощь и вопросы НОВИЧКАМ а не чтоб высирать тут ты не ответить так ответитьь когда небудь ддругой
ну давай по фактам тут же есть люди которые шарят насчет тебя не знаю но они же были такими же как я ничего не понимали в начале ну и накопился опыт ум и теперьь они шарят а есть люди которые не давно начали изучать языки и тд и не оченььп понимают так вот для этого и создали помощь и вопросы НОВИЧКАМ а не чтоб высирать тут ты не ответить так ответитьь когда небудь ддругой
 
Назад
Сверху Снизу