28/03/2023 11:24
(28/03/2023 11:02)hiwyn Escreveu:(28/03/2023 10:53)Dr Editor Escreveu:(28/03/2023 10:10)hiwyn Escreveu:(28/03/2023 08:06)Dr Editor Escreveu: Não encontrei a distância em que os veículos aparecem para os jogadores, mas você pode ver isso utilizando a função OnVehicleStreamIn e no momento em que for chamada você pega a distância entre o player e o veículo.
Utilizando essa distância-base basta criar um loop com o mesmo alcance e identificar quais veículos estão dentro desta condição.
A questão não é a distancia
O problema do tópico que é o que eu não sei fazer é:
Como criar a lista de veiculos streammados pra players com o Interator da lib foreach
E conseguir percorrer ela sem cair meu servidor
Entendi exatamente o ponto do tópico e te dei um norte de como resolver isso através de outra alternativa.
Seu código é curto e não apresenta nenhum erro lógico. Neste caso temos que otpar por um plano B.
Espero que consiga compreender com o exemplo abaixo baseado na minha primeira resposta:
Vamos supor que a distância do stream de veículos é 200;
Código:CMD:test(playerid) {
new Float:stream = 200.0, Float:x, Float:y, Float:z;
for(new i = 0; i < MAX_VEHICLES; i ++) {
if(!IsValidVehicle(i))
continue;
GetVehiclePos(i, x, y, z);
if(IsPlayerInRangeOfPoint(playerid, stream, x, y, z))
printf("%i", vehid);
}
return true;
}
É um código apenas para exemplificar o que estava tentando explicar. Fiz na marra, não compilei e serve apenas para se basear na lógica.
Para maior precisão basta diminuir a distância de stream.
Eu to tentando criar listas personalizadas pra evitar esse tipo de código (que é o que eu atualmente uso no meu GM)
Os carros foram só um exemplo, queria criar diversas listas
Imagina se MAX_VEHICLES é 2000, esse seu código vai percorrer 2.000 vezes e fazer 2 verificações (uma delas que não é muito leve)
No caso um jogador pode ter só 3 carros stremmados pra ele... Isso a longo prazo ou rodando em timers cresce exponencialmente.
Mas obrigado por tentar ajudar.
Só pra finalizar acho válido tentar utilizar outros recursos do foreach.
1 - Inicialize o iterator com Iter_Init
2 - Se ele está duplicando o valor nos demais índices, é cabível conferir se o valor já está adicionado à lista usando Iter_Contains
Dê uma olhada na documentação para ajudar.
SA:MP Dev Tools
Faça mais, ganhe mais e poupe tempo!
Viper Anti-Cheat
Torne seu servidor mais seguro!
________________________________________
Soluções personalizadas para SA:MP
Discord: .eduardoac | Eduardo AC#3140
Faça mais, ganhe mais e poupe tempo!
Viper Anti-Cheat
Torne seu servidor mais seguro!
________________________________________
Soluções personalizadas para SA:MP
Discord: .eduardoac | Eduardo AC#3140