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

Вопрос Problems related to traces

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
28 Фев 2026
Сообщения
9
Реакции
0
when I dont initialize things from Ray_t like vecStart/vecEnd the fraction will always be 1 (after traceship)
can anyone tell me why?


C++:
Expand Collapse Copy
    bool IsVisible( C_CSPlayerPawn* pLocal, C_CSPlayerPawn* pTarget )
    {
        CTraceFilter filter( pLocal, 0x1C1003, 4, 15 );
        Ray_t ray = Ray_t();
        CGameTrace trace = CGameTrace();

        CTX::pCS2->pPhysics2World->TraceShape( &ray, pLocal->GetGameSceneNode( )->GetAbsOrigin( ), pTarget->GetGameSceneNode( )->GetAbsOrigin( ) + Math::Vector_t< float, 3 >( 0, 0, 64 ), &filter, &trace );

        printf("fraction: %f\n", trace.flFraction);

        return trace.pHitEntity == pTarget || trace.flFraction == 1.0f;
    }



C++:
Expand Collapse Copy
#pragma once

#include <cstddef>

#include "../../../context/memory.hpp"

#include "../../math/datatypes/vector_t.hpp"

class CEntityInstance;
class C_BaseEntity;
class C_CSPlayerPawn;

struct Ray_t
{
    Math::Vector_t< float, 3 > vecStart;
    Math::Vector_t< float, 3 > vecEnd;
    Math::Vector_t< float, 3 > vecMins;
    Math::Vector_t< float, 3 > vecMaxs;
private:
    [[maybe_unused]] std::byte pad0[ 0x4 ];
public:
    std::uint8_t uType;
};

class CTraceInfo
{
public:
    float flUnknown;
    float flDistance;
    float flDamage;
    std::uint32_t uPenetrationCount;
    std::uint32_t uHandle;
    std::uint32_t uPenetrationFlags;
};

struct TraceData_t
{
private:
    [[maybe_unused]] std::byte pad0[ 0x8 ];
public:
    void* pArrayPtr;
private:
    [[maybe_unused]] std::byte pad1[ 0x1810 ];
public:
    int iCurrentSurface;
    CTraceInfo* pTraceInfo;
    int iTotalSurfaces;
private:
    [[maybe_unused]] std::byte pad2[ 0xC0 ];
public:
    Math::Vector_t< float, 3 > vecStart;
    Math::Vector_t< float, 3 > vecEnd;
private:
    [[maybe_unused]] std::byte pad3[ 0x50 ];
};

class CHitBox
{
public:
    const char* szName;
    const char* szSurfaceProperty;
    const char* szBoneName;
    Math::Vector_t< float, 3 > vecMinBounds;
    Math::Vector_t< float, 3 > vecMaxBounds;
    float flShapeRadius;
    std::uint32_t uBoneNameHash;
    int iGroupID;
    std::uint8_t uShapeType;
    bool bTranslationOnly;
private:
    [[maybe_unused]] std::byte pad0[ 0x2 ];
public:
    std::uint32_t uCRC;
    std::uint32_t uColor;
    std::uint16_t uHitBoxIndex;
};

class CGameTrace
{
public:
    void* pSurfaceProperties;
    C_BaseEntity* pHitEntity;
    CHitBox* pHitBox;
private:
    [[maybe_unused]] std::byte pad0[ 0x38 ];
public:
    std::uint32_t uSurfaceFlags;
private:
    [[maybe_unused]] std::byte pad1[ 0x24 ];
public:
    Math::Vector_t< float, 3 > vecStart;
    Math::Vector_t< float, 3 > vecEnd;
    Math::Vector_t< float, 3 > vecNormal;
    Math::Vector_t< float, 3 > vecPosition;
private:
    [[maybe_unused]] std::byte pad2[ 0x4 ];
public:
    float flFraction;
private:
    [[maybe_unused]] std::byte pad3[ 0x6 ];
public:
    std::uint8_t uShapeType;
    bool bStartSolid;
private:
    [[maybe_unused]] std::byte pad4[ 0x4D ];
};

class CTraceFilter
{
public:
    CTraceFilter( C_CSPlayerPawn* pPassEntity, std::uint64_t uMask, char iLayer, char uInteractsWith )
    {
        static auto* const InitFilter = CTX::pMemory->FilterInit.Cast< void ( * )( void*, C_CSPlayerPawn*, std::uint64_t, int, std::uint16_t ) >( );

        InitFilter( this, pPassEntity, uMask, iLayer, uInteractsWith );
    }

    virtual ~CTraceFilter( ) = default;

    virtual bool ShouldHitEntity( [[maybe_unused]] CEntityInstance* pEntity )
    {
        return true;
    }
private:
    [[maybe_unused]] std::byte pad0[ 0x48 ];
};
 
Назад
Сверху Снизу