Sziasztok!
Az lenen a gondom, hogy valamiért a kis járműlekérdező függvényem bugol. Majdnem tökéletes, azonban a legnagyobb ID-jű járműnél azt írja, hogy túl sok kocsi van a közelemben.
CMD:alefoglal(playerid)
{
new nearestvehicle, engine, lights, alarm, doors, bonnet, boot, objective;
nearestvehicle = NearestCar(playerid);
Uzenet(playerid,-1,\"%d %d\",nearestvehicle,MAX_VEHICLES);
if(nearestvehicle == -2) return Uzenet(playerid,-1,\"(( Több jármű is van a közeledben! ))\");
else if(nearestvehicle == -1) return Uzenet(playerid,-1,\"(( Nincs a közeledben jármű! ))\");
else
{
GetVehicleParamsEx(nearestvehicle, engine, lights, alarm, doors, bonnet, boot, objective);
PutPlayerInVehicle(playerid, nearestvehicle, 0);
SetVehicleParamsEx(nearestvehicle, 1, lights, alarm, doors, bonnet, boot, objective);
}
return 1;
}
NearestCar(playerid)
{
new Float:Pos[3],eredmeny,mennyinel,vegeredmeny;
for(new carid = 1; carid < MAX_VEHICLES+1; 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)
{
vegeredmeny = eredmeny;
}
else
{
vegeredmeny = -2;
}
}
else
{
vegeredmeny = -1;
}
return vegeredmeny;
}
Ez annyit csinálna, hogy a legközelebbi járműbe bedobna ls beindítaná a motorját, ha nincsen jármű a közelben és ha több is van akkor ezekkel jól visszajelez, de mint említettem a legnagyobb jármű ID-nél azt írja, hogy túl sok van a közelben.
NearestCar = legközelebbi KOCSI!
tehát igazából azt gondoltam, hogy a legközelebbi járműre van szükséged...gondoltam a Car csak elírás volt, de úgy tűnik a Nearest is :)
az neked miért jó, ha több jármű esetén -2-t kapsz vissza? tehát nem tudsz az adattal érdemben mit kezdeni...csak annyit, hogy több jármű van a közelében...
valahol már írtam én is ehhez a függvényhez kommentet de azt nem találtam meg, de megint feltűnt nekem, hogy ha 0,0,0 pozícióra viszem a kocsit akkor többet nem tudom kinyitni, mert ott mindig azt fogja írni, hogy sok kocsi van a közelemben...mert nincs ellenőrizve, hogy a jármű létre van e hozva, csak lekérdezed a pozíciót egy tömbbe és felhasználod az adatokat...
írtam neked egy scriptet:
#include <a_samp>
new veh[3];
public OnFilterScriptInit()
{
// 1: Létrehozok 3 járművet
veh[0] = CreateVehicle(560,10,20,30,40,50,60,0,0);
veh[1] = CreateVehicle(561,10,20,30,40,50,60,0,0);
veh[2] = CreateVehicle(562,10,20,30,40,50,60,0,0);
// 2: Törlöm a középső járművet
DestroyVehicle(veh[1]);
// 3: kiírom a pozíciót
new Float:Pos[3];
for(new i = 1; i <= 4; i++)
{
GetVehiclePos(i,Pos[0],Pos[1],Pos[2]);
printf(\"[%d. jármű, model: %d] %.4f,%.4f,%.4f\",i,GetVehicleModel(i),Pos[0],Pos[1],Pos[2]);
}
return 1;
}
public OnFilterScriptExit()
{
for(new i = 1; i < 4; i++)
{
if(GetVehicleModel(i)) { DestroyVehicle(i); }
}
return 1;
}
kimenetele:
[1. jármű, model: 560] 10.0000,20.0000,30.0000
[2. jármű, model: 0] 10.0000,20.0000,30.0000
[3. jármű, model: 562] 10.0000,20.0000,30.0000
[4. jármű, model: 0] 10.0000,20.0000,30.0000
[/quote]
figyeld meg: 2. és 4. jármű nem létezik, mert NINCS MODEL ID-ja! (2. jármű amit töröltem a 2. lépésnél)
de mégis van pozíció...igen mert a Pos tömböt a cikluson kívül hoztam létre és ha nem tudja felül írni a GetVehiclePos függvény akkor az előző adat marad benne...
ezért kellene ellenőrizni, hogy létezik e a jármű :)
if(GetVehicleModel(i))
Lefordítom magyarra, írjuk már meg neki a komplett scriptet mert nem tudja összerakni.
native IsValidVehicle(playerid);
NearestCar(playerid)
{
new Float:Pos[3],eredmeny,mennyinel,vegeredmeny;
for(new carid = 1; carid < MAX_VEHICLES; carid++)
{
if(!IsValidVehicle(carid)) continue;
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)
{
vegeredmeny = eredmeny;
}
else
{
vegeredmeny = -2;
}
}
else
{
vegeredmeny = -1;
}
return vegeredmeny;
}