Raycast Async (StartShapeTestLosProbe)

// Raycast utilizando `setTicks` para gerenciar os ciclos
function performRaycast(start, end, flags = -1, ignoreEntity = 0) {
    return new Promise((resolve) => {
        const handle = StartShapeTestLosProbe(start.x, start.y, start.z, end.x, end.y, end.z, flags, ignoreEntity, 7);
        // Usar ticks para verificar o resultado
        const tick = setTick(() => {
            const [ready, hit, hitPosition, normal, entityHit] = GetShapeTestResult(handle);
            if (ready>1) {
                clearTick(tick); // Para o loop de ticks quando o resultado estiver pronto
                resolve({
                    hit,
                    hitPosition,
                    normal,
                    entityHit,
                });
            }else{
                if(ready == 0){
                    console.error("handle " + handle + " inválido para o RayCast !")
                    clearTick(tick);
                    resolve({
                        hit,
                    }); 
                }
            }
        });
    });
}
// Uso no jogo
setTick(async () => {
    const ped = PlayerPedId();
    const [x, y, z] = GetEntityCoords(ped, true); // Coordenadas do Ped
    const [fx, fy, fz] = GetEntityForwardVector(ped); // Vetor para onde o Ped está olhando
    // Calcula as coordenadas na frente do Ped
    const frenteX = x + fx * 10;
    const frenteY = y + fy * 10;
    const frenteZ = z + fz * 10;
    // Define os vetores de início e fim do raycast
    const start = { x: x, y: y, z: z };
    const end = { x: frenteX, y: frenteY, z: frenteZ };
    // Desenha uma linha para visualizar o raycast (apenas para fins de debug)
    DrawLine(x,y, z, frenteX,frenteY, frenteZ, 255, 255,0,255);
    // Faz o raycast
    const raycastResult = await performRaycast(start, end);
    // Verifica o resultado
    if (raycastResult.hit) {
        console.log('Objeto atingido:', raycastResult.entityHit);
        console.log('Posição de impacto:', raycastResult.hitPosition);
        console.log('Normal da superfície:', raycastResult.normal);
    } else {
        console.log('Nenhum objeto atingido.');
    }
})

Parâmetros Importantes StartShapeTestLosProbe

Explicação dos Resultados