GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: ProPeti - 2015. Július 03. - 01:42:29

Cím: Kocsi lefoglalás
Írta: ProPeti - 2015. Július 03. - 01:42:29
Sziasztok!
Írtam egy autó lefoglalás parancsot adminoknak és van vele egy kis gond. Részben működik viszont a legnagyobb ID-jű (azaz a legújabb kocsit) nem engedi, mindig azt írja hogy nincs a közelemben jármű. A többinél viszont semmi gond.
Itt a kód:
 

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; }
}
CMD:alefoglal(playerid)
{
if(gPlayerLogged[playerid] == 1)
{
if(PlayerInfo[playerid][Admin] > 2)
{
   new nearestvehicle, engine, lights, alarm, doors, bonnet, boot, objective, Float:pos[3];
   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\");
   }
   else Uzenet(playerid, -1, \"(( Nincs jármű a közeledben! ))\");
} else return 0;
} else return 0;
return 1;
}
Cím: Kocsi lefoglalás
Írta: Kovacs_Richard - 2015. Július 03. - 07:58:13
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...