02.05.2017, 14:43
Hello! 
I have a pretty bad bug in server , when i drive a vehicle ( mostly ) a public function freezes, i use a timer to call it each 1010 miliseconds, it's Checkvehinfo ( for realtime speed, odometer, fuel, status + auto car fix for admins )
so when it freezes it doesn't auto fix anymore and speed stops at a number ( not always but mostly )
when i checked server log i found this error detected by crashdetect every second ( 1010 ms ):
server log is fully spammed xD,
here is the public function :
thanks, i apperciate any kind of help/advice.

I have a pretty bad bug in server , when i drive a vehicle ( mostly ) a public function freezes, i use a timer to call it each 1010 miliseconds, it's Checkvehinfo ( for realtime speed, odometer, fuel, status + auto car fix for admins )
so when it freezes it doesn't auto fix anymore and speed stops at a number ( not always but mostly )
when i checked server log i found this error detected by crashdetect every second ( 1010 ms ):
Код:
[16:30:03] [debug] AMX backtrace: [16:30:03] [debug] #0 0010987c in public Checkvehinfo () from Blast.amx [16:30:04] [debug] Run time error 4: "Array index out of bounds" [16:30:04] [debug] Accessing element at negative index -1 ***** after 1 sec ***** [16:30:04] [debug] AMX backtrace: [16:30:04] [debug] #0 0010987c in public Checkvehinfo () from Blast.amx [16:30:05] [debug] Run time error 4: "Array index out of bounds" [16:30:05] [debug] Accessing element at negative index -1
here is the public function :
PHP код:
public Checkvehinfo()
{
foreach(Player,i)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pAdmin] >= 1) RepairVehicle(GetPlayerVehicleID(i));
new carid = HireCar[i];
if(GetPlayerState(i) == PLAYER_STATE_DRIVER)
{
new vehicle = GetPlayerVehicleID(i),
spe = Carspeed(i);
new str1[128],str2[128],str3[128],str4[128],str5[128],str6[128];
PlayerTextDrawShow(i, Speedd[i]);
format(str1,sizeof(str1)," Speed: ~y~%d Km/h",spe);
PlayerTextDrawSetString(i, Speedd[i], str1); // sa facem si la bicicleta
if(SwitchKey[i] == 2 && gCarLock[carid] == 1)
{
PlayerTextDrawShow(i, Fuell[i]);
format(str2,sizeof(str2),"Fuel: ~y~%d", Gas[vehicle]);
PlayerTextDrawSetString(i, Fuell[i], str2);
PlayerTextDrawShow(i, carlocked[i]);
format(str3,sizeof(str3),"~y~LOCKED");
PlayerTextDrawSetString(i, carlocked[i], str3);
}
if(SwitchKey[i] == 2 && gCarLock[carid] == 0)
{
PlayerTextDrawShow(i, Fuell[i]);
format(str2,sizeof(str2),"Fuel: ~y~%d", Gas[vehicle]);
PlayerTextDrawSetString(i, Fuell[i], str2);
PlayerTextDrawShow(i, carlocked[i]);
format(str3,sizeof(str3), "UNLOCKED");
PlayerTextDrawSetString(i, carlocked[i], str3);
}
if(IsABike(vehicle) && SwitchKey[i] != 2)
{
PlayerTextDrawShow(i, Speedd[i]);
format(str1,sizeof(str1)," Speed: ~y~%d Km/h",spe);
PlayerTextDrawSetString(i, Speedd[i], str1);
PlayerTextDrawShow(i, bikeunlocked[i]);
format(str6,sizeof(str6), "UNLOCKED");
PlayerTextDrawSetString(i, bikeunlocked[i], str6);
}
else if(!IsABike(vehicle) && !OwnedVeh(vehicle) && SwitchKey[i] != 2)
{
PlayerTextDrawShow(i, Fuell[i]);
format(str2,sizeof(str2),"Fuel: ~y~%d", Gas[vehicle]);
PlayerTextDrawSetString(i, Fuell[i], str2);
PlayerTextDrawShow(i, unlocked[i]);
format(str6,sizeof(str6), "UNLOCKED");
PlayerTextDrawSetString(i, unlocked[i], str6);
}
if(OwnedVeh(vehicle) != 0 && !IsAPlane(vehicle) && !IsABike(vehicle) && SwitchKey[i] != 2)
{
PlayerTextDrawShow(i, Fuell[i]);
format(str2,sizeof(str2),"Fuel: ~y~%d", Gas[vehicle]);
PlayerTextDrawSetString(i, Fuell[i], str2);
PlayerTextDrawShow(i, Odom[i]);
format(str3,sizeof(str3),"Odometer: ~y~%.0fKM",CarInfo[OwnedVeh(vehicle)][cKM]);
PlayerTextDrawSetString(i, Odom[i], str3);
}
if(OwnedVeh(vehicle) != 0 && CarInfo[OwnedVeh(vehicle)][cLock] == 0 && SwitchKey[i] != 2)
{
PlayerTextDrawShow(i, carlocked[i]);
format(str4,sizeof(str4),"UNLOCKED");
PlayerTextDrawSetString(i, carlocked[i], str4);
}
else if(OwnedVeh(vehicle) != 0 && CarInfo[OwnedVeh(vehicle)][cLock] == 1 && SwitchKey[i] != 2)
{
PlayerTextDrawShow(i, carlocked[i]);
format(str5,sizeof(str5),"~y~LOCKED");
PlayerTextDrawSetString(i, carlocked[i], str5);
}
}
else if(GetPlayerState(i) == PLAYER_STATE_PASSENGER)
{
new count;
foreach(Player, x)
{
if(GetPlayerState(x) == PLAYER_STATE_PASSENGER)
{
if(GetPlayerVehicleID(x) == GetPlayerVehicleID(i))
{
count ++;
}
}
if(count >= 1)
{
new vehicle = GetPlayerVehicleID(i),
spe = Carspeed(i);
new str1[128],str2[128],str3[128],str4[128],str5[128],str6[128];
PlayerTextDrawShow(i, Speedd[i]);
format(str1,sizeof(str1)," Speed: ~y~%d Km/h",spe);
PlayerTextDrawSetString(i, Speedd[i], str1);
if(SwitchKey[i] == 2 && gCarLock[carid] == 1)
{
PlayerTextDrawShow(i, Fuell[i]);
format(str2,sizeof(str2),"Fuel: ~y~%d", Gas[vehicle]);
PlayerTextDrawSetString(i, Fuell[i], str2);
PlayerTextDrawShow(i, carlocked[i]);
format(str3,sizeof(str3),"~y~LOCKED");
PlayerTextDrawSetString(i, carlocked[i], str3);
}
if(SwitchKey[i] == 2 && gCarLock[carid] == 0)
{
PlayerTextDrawShow(i, Fuell[i]);
format(str2,sizeof(str2),"Fuel: ~y~%d", Gas[vehicle]);
PlayerTextDrawSetString(i, Fuell[i], str2);
PlayerTextDrawShow(i, carlocked[i]);
format(str3,sizeof(str3), "UNLOCKED");
PlayerTextDrawSetString(i, carlocked[i], str3);
}
if(!IsABike(vehicle) && SwitchKey[i] != 2) // trebuie sa facem alt tw pt bike la unlcoked?da, sa l
{
PlayerTextDrawShow(i, Fuell[i]);
format(str2,sizeof(str2),"Fuel: ~y~%d", Gas[vehicle]);
PlayerTextDrawSetString(i, Fuell[i], str2);
format(str4,sizeof(str4),"UNLOCKED");
PlayerTextDrawShow(i, unlocked[i]);
format(str6,sizeof(str6), "UNLOCKED");
PlayerTextDrawSetString(i, unlocked[i], str6);
}
if(OwnedVeh(vehicle) != 0 && !IsAPlane(vehicle) && SwitchKey[i] != 2)
{
PlayerTextDrawShow(i, Odom[i]);
format(str3,sizeof(str3),"Odometer: ~y~%.0fKM",CarInfo[OwnedVeh(vehicle)][cKM]);
PlayerTextDrawSetString(i, Odom[i], str3);
}
if(OwnedVeh(vehicle) != 0 && CarInfo[OwnedVeh(vehicle)][cLock] == 0 && SwitchKey[i] != 2)
{
PlayerTextDrawShow(i, carlocked[i]);
format(str4,sizeof(str4),"UNLOCKED");
PlayerTextDrawSetString(i, carlocked[i], str4);
}
else if(OwnedVeh(vehicle) != 0 && CarInfo[OwnedVeh(vehicle)][cLock] == 1 && SwitchKey[i] != 2)
{
PlayerTextDrawShow(i, carlocked[i]);
format(str5,sizeof(str5),"~y~LOCKED");
PlayerTextDrawSetString(i, carlocked[i], str5);
}
}
else if(count < 1)
{
PlayerTextDrawHide(i, Fuell[i]);
PlayerTextDrawHide(i, Speedd[i]);
PlayerTextDrawHide(i, carlocked[i]);
PlayerTextDrawHide(i, Odom[i]);
PlayerTextDrawHide(i, unlocked[i]);
}
}
}
else if(GetPlayerState(i) != PLAYER_STATE_DRIVER && GetPlayerState(i) != PLAYER_STATE_PASSENGER)
{
PlayerTextDrawHide(i, Fuell[i]);
PlayerTextDrawHide(i, Speedd[i]);
PlayerTextDrawHide(i, carlocked[i]);
PlayerTextDrawHide(i, Odom[i]);
PlayerTextDrawHide(i, unlocked[i]);
PlayerTextDrawHide(i, bikeunlocked[i]);
}
}
}
return 1;
}