Начинающий
Начинающий
- Статус
- Оффлайн
- Регистрация
- 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?
can anyone tell me why?
C++:
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++:
#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 ];
};