hát én elég sok hibát véltem felfedezni itt...de lehet csak szerintem hiba, én biztosan nem így csinálnám...
NearestCar(playerid)
{
new Float:Pos[3],eredmeny,mennyinel;
for(new carid = 1; carid < MAX_VEHICLES; carid++)
{
GetVehiclePos(carid,Pos[0],Pos[1],Pos[2]);
if(IsPlayerInRangeOfPoint(playerid, 5,Pos[0],Pos[1],Pos[2]))
{
eredmeny = carid;
mennyinel ++;
}
}
if(eredmeny != 0) { if(mennyinel == 1) { return eredmeny; } else { return -2; } } else { return -1; }
}
NearestCar = legközelebbi kocsi (most a kocsi és a jármű közötti különbségtől tekintsünk el)
Tehát névből gondolva ez a függvény a legközelebbi kocsi ID-ját adja vissza...
Közben az 5 méteres körzetben levő járművet, de azt is csak akkor ha 1 db van ebben a körben...ha több akkor -2 értékkel tér vissza...
És az sincs ellenőrizve, hogy létezik e egyáltalán a jármű, szóval a 0.0, 0.0, 0.0 pozícióhoz 5 méteres körzetben állva visszaad -2-t...
nearestvehicle = NearestCar(playerid);
GetVehiclePos(nearestvehicle, pos[0], pos[1], pos[2]);
if(IsPlayerInRangeOfPoint(playerid, 5, pos[0], pos[1], pos[2]))
{
GetVehicleParamsEx(nearestvehicle, engine, lights, alarm, doors, bonnet, boot, objective);
PutPlayerInVehicle(playerid, nearestvehicle, 0);
SetVehicleParamsEx(nearestvehicle, 1, lights, alarm, doors, bonnet, boot, objective);
cmd_me(playerid, \"lefoglal egy járművet\");
}
Itt nincs lekezelve, hogy a visszatért érték mi...tehát ha -2-t vagy -1-et adott vissza a kód, akkor 0.0,0.0,0.0 pozíción állva (vagy annak 5 méteres körzetében) belefut az if-be:
if(IsPlayerInRangeOfPoint(playerid, 5, pos[0], pos[1], pos[2]))
Én 2 függvényt írnék ide...
GetNearestVehicle = legközelebbi jármű lekérdezése
GetRangePlayerToVehicle vagy IsPlayerRangeOfVehicle = Távolság lekérdezése vagy Megadott távon belül van e
magát a jelzett hibát, hogy az utolsó ID-val nem működik a kód ránézésre nem találtam meg...
MAX_VEHICLES-t újra definiáltad? mert akkor lehet ez a gond...