06.03.2018, 01:36
Quote:
Boa noite!
Estou com um problema em um comando que estou a desenvolver para veнculos... O que ocorre й que a define tem um mбximo de 250 veнculos, com isso, o loop busca em todas elas, assim, causando um delay durante essa procura. Minha dъvida й se tem como amenizar isto, pois fica entre 10 segundos travado enquanto estб fazendo a verificaзгo. Код:
#define MAX_VEICULOS 250 for(new i; i < MAX_VEICULOS; i++) { format(fCarro, sizeof(fCarro), "Veiculos/%i.ini", i); if(DOF2_GetBool(fCarro, "Trancado") == true) { SCM(playerid, -1, "Macarena"); } } |
Essa DOF2_GetBool й uma das que causa um bom delay. Para evitar usar ela em um looping (causando a leitura dessa funзгo 250 vezes, o que nгo й muito legal), vocк poderб utilizar uma variбvel onde vai armazenar essa informaзгo.
Por exemplo, toda vez que um veнculo for trancado, vocк pode utilizar:
Код:
vTrancado[vehicleid] = true;
Код:
for(new i; i <= GetVehiclePoolSize(); i++) { if(vTrancado[i]) { SCM(playerid, -1, "Macarena"); } }
Se hб dъvidas quanto а funзгo GetVehiclePoolSize (https://sampwiki.blast.hk/wiki/GetVehiclePoolSize), basicamente ela retorna o maior ID do veнculo conectado, o que otimiza o cуdigo para que ao invйs de fazer um looping de 250, dos quais alguns IDs de veнculo talvez nem tenha sido criados, o GetVehiclePoolSize vai retornar o ъltimo ID do veнculo conectado.
Outra soluзгo que vocк poderia utilizar (mas que nгo recomendo) seria continuar com aquele seu cуdigo e no inнcio do looping (antes do format), vocк colocaria a condicional
Код:
if(!IsValidVehicle(i)) continue;
Caso tenha restado alguma dъvida, envie-me uma MP.