Usando StartExpensiveSynchronousShapeTestLosProbe

No FiveM, a função StartExpensiveSynchronousShapeTestLosProbe é usada para realizar testes de linha (line-of-sight) e determinar se há colisões entre dois pontos no espaço. Isso é útil para verificar visibilidade ou obstruções.

Função JavaScript

Usando a Função

setTick(async()=>{
    let ped = PlayerPedId();
    let [x, y, z] = GetEntityCoords(ped, true); // Coordenadas do Ped
    let [fx, fy, fz] = GetEntityForwardVector(ped); // Vetor para onde o Ped está olhando

    // Calcula as coordenadas na frente do Ped
    let frenteX = x + fx * 10;
    let frenteY = y + fy * 10;
    let frenteZ = z + fz * 10;
    
    // Define os vetores de início e fim do raycast 
    let start = { x: x, y: y, z: z };
    let end = { x: frenteX, y: frenteY, z: frenteZ };
    // Define flags para o teste (2 para veículos, 4 para pedestres, etc.)
    let flags = -1; // Checar colisões com tudo: veículos, pedestres, objetos, chão etc
    //Desenha uma linha na cor vermelha apenas para fins de visualização/debug do raycast
    DrawLine(start.x, start.y, start.z,end.x,end.y, end.z, 255,0,0,255)
    // Executa o teste de linha de visão


    // Inicia o teste de linha de visão
    const rayHandle = StartExpensiveSynchronousShapeTestLosProbe(
        start.x, start.y, start.z, // Coordenadas de início
        end.x,end.y, end.z,       // Coordenadas de destino
        flags,                                         // Flags para tipos de colisão
        ped,                                   // Entidade a ignorar, 0 para nenhuma
        0,                                   // Tipo de colisão normalmente é usado 4 ou 7
    );

    // Obtém os resultados do teste
    const [ready, hit, hitCoords, surfaceNormal, hitEntity] = GetShapeTestResult(rayHandle);

    if (ready>1) {
        if(hit){
            console.log(`Linha obstruída! Colisão em: ${hitCoords}`);
            console.log(`Entidade Colisão: ${hitEntity}`)
        }else{
            console.log("Linha de visão limpa!");
        }
        
    } else {
        console.error("Erro ao verificar colisão, pois deveria estar disponível!");
    }

})

Parâmetros Importantes StartExpensiveSynchronousShapeTestLosProbe

Explicação dos Resultados

Este exemplo é muito útil em scripts que envolvem verificações de linha de visão, como IA ou funcionalidades relacionadas a armas e visibilidade.