Szerző Téma: Vontatás parancs  (Megtekintve 1339 alkalommal)

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Vontatás parancs
« Dátum: 2014. szeptember 28. - 21:30:53 »
0 Show voters
Sziasztok!
Régebben nagyon sokat gondolkodtam azon, hogy a vontatás parancsom miért nem mûködik, pontosabban miért nem mûködik rendeltetés szerûen, és most hosszú szünet után megint el kezdtem rajta gondolkodni, de idáig sikertelenül.
Így gondoltam megosztom veletek, hátha rájöttök a hibára. Elõre is köszönöm a segítséget.
http://pastebin.com/MzeBYQpQ
« Utoljára szerkesztve: 2014. október 18. - 19:08:42 írta Flash »

Nem elérhető rayle

  • 174
    • Profil megtekintése
Vontatás parancs
« Válasz #1 Dátum: 2014. szeptember 28. - 21:44:05 »
0 Show voters
Mi a baj vele?

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
Vontatás parancs
« Válasz #2 Dátum: 2014. szeptember 28. - 21:45:08 »
0 Show voters
Nem néztem rendesen át, de mi van, ha kocsi == -1 helyett kocsi == INVALID_VEHICLE_ID-t használsz? Az nem -1, 65535. :)
Hülyeség.

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Vontatás parancs
« Válasz #3 Dátum: 2014. szeptember 28. - 23:00:47 »
0 Show voters
Igazából eléggé furcsa, mert ilyet még nem tapasztaltam.
Egy játékos tapasztalata:
 
Alapból nem kapcsolja rá a V-s autót ugyan úgy azt írja hogy vontató 89 vontatni való 89
De ha odaállunk egy frakciós vagy munka jármûvel, nagyon közel a V-s autóhoz és úgy próbáljuk meg megint felcsatolni akkor sikeresen felcsatolja és azt írja vontató 89 vontatni való 159 (a v-s autó) így már tudunk vontatni…….Olyan mintha valamiért a frakciós jármûvet akarná rácsatolni de mégis a V-st teszi rá :)
De néha van úgy hogy a frakkisat csatolja rá és ilyenkor egybe megy a két jármû mint egy szendvics…..kb ennyi az észrevétel
[/quote]
A V-s autó annyiból különbözik a sima autótól, hogy a hozzá tartozó változóknál lévõ ID változó értéké nem 0. (de ennek nem kéne befolyásoló tényezõnek lennie.)
A frakciójármû pedig annyiból különbözik, hogy létrehozásukkor eltárolom az id-jüket egy tömbben, hogy késõbb hivatkozni tudjak rájuk.

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Vontatás parancs
« Válasz #4 Dátum: 2014. szeptember 29. - 10:05:05 »
+1 Show voters
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
« Utoljára szerkesztve: 2014. szeptember 30. - 13:55:28 írta Dfoglalo »
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Vontatás parancs
« Válasz #5 Dátum: 2014. szeptember 29. - 21:03:00 »
0 Show voters
Te hol láttad ezt a részletet?
Épp az, hogy kikötöttem, hogy jármûben legyen, majd elmentettem az ID-jét, hogy késõbb a ciklusban kiköthessem, hogy a kocsi ne lehessen az a kocsi, amiben õ maga ül.

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Vontatás parancs
« Válasz #6 Dátum: 2014. szeptember 30. - 08:39:34 »
+1 Show voters
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...
« Utoljára szerkesztve: 2014. szeptember 30. - 13:55:46 írta Dfoglalo »
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Vontatás parancs
« Válasz #7 Dátum: 2014. szeptember 30. - 12:24:49 »
0 Show voters
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;
« Utoljára szerkesztve: 2014. szeptember 30. - 13:55:34 írta Dfoglalo »

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Vontatás parancs
« Válasz #8 Dátum: 2014. szeptember 30. - 12:51:44 »
+1 Show voters
írtam 1-et azt próbáld ki mûködik e megfelelõen, ott újra írtam a függvényt
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Vontatás parancs
« Válasz #9 Dátum: 2014. szeptember 30. - 13:35:07 »
0 Show voters
Majd valamikor megpróbálom. De engem inkább az érdekelne, hogy az enyém miért nem megy.

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Vontatás parancs
« Válasz #10 Dátum: 2014. szeptember 30. - 14:06:59 »
+1 Show voters
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:



// vontat parancs
CMD:vontat(playerid)
{
// Ha a játékos be van lépve
    if(Belepve[playerid]!= 0)
    {
        // Ha a játékos jármûben van
        if(IsPlayerInAnyVehicle(playerid))
        {
            // játékos jármûvének lekérdezése
            new vehid = GetPlayerVehicleID(playerid);
            // Ha vontatóban ül a játékos
            if(GetVehicleModel(vehid) == 525)
            {
                // legközelebbi jármû lekérdezése (ugyanaz mint a játékos jármûve!)
                new kocsi = GetClosestVehicle(playerid);
                // legközelebbi jármû változó
                new id= -1;
                // jármûvek bejárása
                for(new x=0;x<MAX_VEHICLES;x++)
                {
                    // ha közelebb van a játékoshoz a jármû mint 10 méter
                    if(GetDistanceToVehicle(playerid, x) < 10)
                    {
                        // ha a jármû -1
                        if(id == -1)
                        {
                            // legközelebbi jármû változó = éppen ellenõrzött jármû
                            id = x;
                        }
                        // ha a jármû nem -1
                        else
                        {
                            // ha a \'legközelebbi jármû\' messzebb van mint az éppen ellenõrzött jármû ÉS nem a játékos jármûve
                            if(GetDistanceToVehicle(playerid,id) > GetDistanceToVehicle(playerid,x) && kocsi != x)
                            {
                                // legközelebbi jármû változó = éppen ellenõrzött jármû
                                id=x;
                            }
                        }
                    }
                }
                // 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
                if(id == -1) return SendClientMessage(playerid, HIBA, \"A közelben nincs jármû!\");
      // ha nincs trailer csatolva a játékos jármûvéhez
      if(GetVehicleTrailer(vehid) == 0)
                {
                     // jármû csatolás
                      AttachTrailerToVehicle(id, vehid);
                      SendClientMessage(playerid,SIKERES,\"Felcsatolva.\");
                      new string[256];
                      format(string,sizeof(string),\"TESZT: Vontató: %d | Vontatni való: %d\",kocsi,id);
                      SendClientMessage(playerid,-1,string);
                      return 1;
                }
                // ha van trailer csatolva a játékos jármûvéhez
                else
                {
                    // jármû leválasztása
                      DetachTrailerFromVehicle(vehid);
                    SendClientMessage(playerid,SIKERES,\"Lecsatolva.\");
                   new string[256];
                    format(string,sizeof(string),\"TESZT: Vontató: %d | Vontatni való: %d\",kocsi,id);
                    SendClientMessage(playerid,-1,string);
                    return 1;
      }
   }
            else SendClientMessage(playerid,HIBA,\"Ez nem vontatókocsi!\");
        }
        else SendClientMessage(playerid,HIBA,\"Nem vagy autóban!\");
    }
    else Logolj(playerid);
    return 1;
}

 
 
[mod]Javítottam helyetted a

taget

tagre![/mod]
« Utoljára szerkesztve: 2014. október 03. - 15:15:38 írta Dfoglalo »
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Vontatás parancs
« Válasz #11 Dátum: 2014. szeptember 30. - 18:18:05 »
0 Show voters
Köszi, valószínûleg ez volt a hiba. Kibõvítettem az elsõ if-et egy kritériummal, hogy az x nem lehet a saját kocsi. Ment a sok +

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Vontatás parancs
« Válasz #12 Dátum: 2014. október 18. - 19:08:32 »
0 Show voters
[gmod]Zárok![/gmod]

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal