StartExpensiveSynchronousShapeTestLosProbeNo 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.
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!");
}
})
1: colisões com o mundo2: Veículos4: Pedestres8: Colisões com ped em ragdolls (O raycast detectará corpos animados ou personagens que estejam em estado de física (ragdoll), ou seja, em queda ou sem controle de movimento.).16: Objetos32: Colisões com água. 64: Colisões com vidro.128: Colisões com rios.256: Colisões com vegetação (foliage).-1: Qualquer colisãoPara testar múltiplos tipos, some o valor das flags escolhidas (exceto a flag -1).
0 para nenhum).2 se teste foi concluído com sucesso 0 caso o teste tenha um handle inválido, isso é diferente para o teste async (StartShapeTestLosProbe) .1 se houve colisão, 0 caso contrário.Este exemplo é muito útil em scripts que envolvem verificações de linha de visão, como IA ou funcionalidades relacionadas a armas e visibilidade.