ezt próbáld ki:
CMD:vontat(playerid)
{
// ha nincs belépve a játékos
if(Belepve[playerid] == 0) { return Logolj(playerid); }
// ha nincs jármûben
if(!IsPlayerInAnyVehicle(playerid)) { return SendClientMessage(playerid,HIBA,\"Nem vagy autóban!\"); }
// játékos jármûvének lekérdezése
new vehid = GetPlayerVehicleID(playerid);
// ha nem vontatóban ül a játékos
if(GetVehicleModel(vehid) != 525) { return SendClientMessage(playerid,HIBA,\"Ez nem vontatókocsi!\"); }
// ha nem vontat a jármû
if(GetVehicleTrailer(vehid) == 0)
{
new vid = GetClosestVehicle(playerid);
// ha nincs jármû a közelében
if(vid == -1 || GetDistanceToVehicle(playerid,vid) > 10.0) { return SendClientMessage(playerid, HIBA, \"A közelben nincs jármû!\"); }
AttachTrailerToVehicle(vid, vehid);
SendClientMessage(playerid,SIKERES,\"Felcsatolva.\");
}
// ha vontat a jármû
else
{
DetachTrailerFromVehicle(vehid);
SendClientMessage(playerid,SIKERES,\"Lecsatolva.\");
}
return 1;
}
stock GetClosestVehicle(playerid)
{
if(!IsPlayerConnected(playerid)) { return -1; } // ha nincs csatlakozva a játékos
// Ezt kihagynám ebben az esetben, mert akkor a játékos a saját autóját vontatná...csak így máshol kell ellenõrizni, hogy jármûben van e
//if(IsPlayerInAnyVehicle(playerid)) { return GetPlayerVehicleID(playerid); } // ha jármûben van a játékos
new closestvehicle = -1; // legközelebbi jármû
new Float:closestdist = 5000.0; // legközelebbi távolság
for(new v = 1; v < MAX_VEHICLES; v++)
{
if(!GetVehicleModel(v)) { continue; } // Ha nincs létrehozva a jármû
new Float:dist = GetDistanceToVehicle(playerid,v); // a játékos és a jármû közötti távolság lekérdezése
if(dist < closestdist) // ha közelebb van mint az elõzõ \'legközelebbi jármû\'
{
closestdist = dist;
closestvehicle = v;
}
}
return closestvehicle; // legközelebbi jármû ID-val tér vissza, vagy ha nincs jármû akkor -1-el
}
A tiedében egy elég nagy hiba volt:
new kocsi = -1;
if(IsPlayerInAnyVehicle(playerid)) kocsi = GetPlayerVehicleID(playerid);
if(kocsi != -1)
return kocsi;
ha jármûben volt akkor a saját jármûvét adta vissza a függvény így azt akarta csatolni...esetleg még egy függvény paraméterrel add, meg hogy saját jármûvet figyeljen e, vagy külön függvényt hozz létre...amit írtam abban a saját jármûvet nem veszi figyelembe
ez a 2 sor ugyanaz akkor...szóval felesleges 2x lekérdezni és eltárolni ugyanazt az ID-t...
new kocsi = GetClosestVehicle(playerid);
new vehid = GetPlayerVehicleID(playerid);
tehát a GetClosestVehicle függvény használata itt felesleges...
Az jogos, de ettõl még nem fog mûködni a parancs.
(mivel a getclosestvehicle a játékos jármûvét adja vissza, ha jármûben ül.)
if(IsPlayerInAnyVehicle(playerid)) kocsi = GetPlayerVehicleID(playerid);
if(kocsi != -1)
return kocsi;
na szerintem megtaláltam...
beírtam commentbe:
// ha nincs a közelében jármû
// ez hibás...mivel az elõzõ ciklusban az elsõ if miatt az id lehet a saját jármû >>> if(id == -1) { id = x; }
// tehát ez nem fut le soha...plusz ha a saját kocsi 1-es akkor hiába van másik jármû a közelébe mivel
// if(GetDistanceToVehicle(playerid,id) > GetDistanceToVehicle(playerid,x) && kocsi != x)
// feltétel nem lesz igaz ebben az esetben
// tehát saját jármû id után nem ellenõrzi a jármûveket, valószínûleg ez a hiba...
// pl 100-as a kocsi akkor 1-99-ig tudja csatolni, de 100 fölött már nem, mivel a saját kocsinál egyik sem lesz közelebb
itt az egész: