Szerző Téma: /sveh parancs  (Megtekintve 931 alkalommal)

Nem elérhető KrisT

  • 106
    • Profil megtekintése
/sveh parancs
« Dátum: 2014. augusztus 22. - 13:30:57 »
0 Show voters
Sziasztok! Van egy /sveh parancsom, ami lementi egy fájlba az autókat, és betölti azokat szerverindításkor. Mikor újrainditoma s zervert, lehozok egy autót, és beírom, hogy /sveh, akkor ami ugyanazona  rendszámon volt autó lementve, azt átírja erre, tehát a frissebbik lementésre. Hoyg lehetne emgcsinálni, hogy ellenõrizze, hogy van-e olyan autó már és ha van akkor egy új számot adjon neki? tehát 50es az ID, és lementené 50es IDvel, de mivel már van olyan, ezért 51essel menti le. De ha olyan is van, akkor 52el, és így tovább. Remélem értitek.
Kód:
 
new svehmentes[128];

 

public OnGameModeInit()
{
for(new i=0; i<MAX_VEHICLES; i++) // Egy ciklus amivel végig megyünk az összes kocsin
{
        format(svehmentes,sizeof(svehmentes),\"/Carss/%d.ini\",i); // Formázzuk a fájlt
       if(fexist(svehmentes)) // Ha létezik a file
        {
      new Float:posx, Float:posy, Float:posz, Float:angle, model,color1,color2; // Létrehozzuk a megfelelõ változókat
      posx = dini_Float(svehmentes,\"PosX\"); // Lekérjük a fájlból az -X kordinátát
      posy = dini_Float(svehmentes,\"PosY\"); // -Y kordinátát
      posz = dini_Float(svehmentes,\"PosZ\"); // -Z kordinátát
      angle = dini_Float(svehmentes,\"Angle\"); // -Forgásirányát
      model = dini_Int(svehmentes,\"Model\"); // -a model id-jét
      color1 = dini_Int(svehmentes,\"Color1\");
      color2 = dini_Int(svehmentes,\"Color2\");
      CreateVehicle(model,posx,posy,posz,angle,color1,color2,-1); // Létrehozzuk a kocsit
      ...
          }
}

 

CMD:sveh(playerid)
{
if(IsPlayerConnected(playerid) && Belepve[playerid] == 1)
{
    if(JatekosInfo[playerid][Tulaj] == 1)
    {
   if(IsPlayerInAnyVehicle(playerid)) // Ha jármûben van a játékos
   {
       new color1, color2;
      new vehid = GetPlayerVehicleID(playerid); // Lekérjük hogy a játékos melyik id-jû kocsiban van
      new Float:posx, Float:posy, Float:posz, Float:angle, model; // Létrehozzul a változókat
      model = GetVehicleModel(vehid);
      GetVehiclePos(vehid,posx,posy,posz); // Lekérjük a kocsi kordinátáját
      GetVehicleZAngle(vehid,angle); // Lekérjük a kocsi forgásirányát
      GetVehicleColor(vehid,color1,color2);
      format(svehmentes,sizeof(svehmentes),\"/Cars1/%d.ini\",vehid); // Formázzuk a file változót a mappának megfelelõen
      if(!fexist(svehmentes)) // Ha létezik a file
      {
         dini_Create(svehmentes); // Létrehozzuk a fájlt
         dini_FloatSet(svehmentes,\"PosX\",posx); // Lementjük az -X koordinátát
         dini_FloatSet(svehmentes,\"PosY\",posy); // -Y koordinátát
         dini_FloatSet(svehmentes,\"PosZ\",posz); // -Z koordinátát
         dini_FloatSet(svehmentes,\"Angle\",angle); // -Forgásirányát
         dini_IntSet(svehmentes,\"Model\",model); // -A model id-jét
         dini_IntSet(svehmentes,\"Color1\",color1);
         dini_IntSet(svehmentes,\"Color2\",color2);
         SendClientMessage(playerid,COLOR_BLUE,\"Játmû lementve!\");
      }
      else // Ha nem létezik a file
      {
         dini_FloatSet(svehmentes,\"PosX\",posx); // Lementjük az -X koordinátát
         dini_FloatSet(svehmentes,\"PosY\",posy); // -Y koordinátát
         dini_FloatSet(svehmentes,\"PosZ\",posz); // -Z koordinátát
         dini_FloatSet(svehmentes,\"Angle\",angle); // -Forgásirányát
         dini_IntSet(svehmentes,\"Model\",model);   // -A model id-jét
         dini_IntSet(svehmentes,\"Color1\",color1);
         dini_IntSet(svehmentes,\"Color2\",color2);
      }
   }
   else // Ha nincs jármûben a játékos
   {
      SendClientMessage(playerid,COLOR_LIGHTRED,\"Nem vagy jármûben!\");
   }
}
else MSG(playerid,COLOR_LIGHTRED,\"Nem vagy Tulajdonos!\");
}
else SendClientMessage(playerid,COLOR_LIGHTRED,\"Nem vagy bejelentkezve!\");
return 1;
}

 
((nem tudom pawn kódot beírni emrt nincs ott az ikonja, bocsi))
[mod]Javítottam a

taget

tagre![/mod]
« Utoljára szerkesztve: 2014. augusztus 22. - 14:15:26 írta Dfoglalo »

Nem elérhető M1A1

/sveh parancs
« Válasz #1 Dátum: 2014. augusztus 22. - 19:03:05 »
0 Show voters
Ezt a részt cseréld le:



                                format(svehmentes,sizeof(svehmentes),\"/Cars1/%d.ini\",vehid); // Formázzuk a file változót a mappának megfelelõen
                                if(!fexist(svehmentes)) // Ha létezik a file
                                {
                               
                                        dini_Create(svehmentes); // Létrehozzuk a fájlt
                                        dini_FloatSet(svehmentes,\"PosX\",posx); // Lementjük az -X koordinátát
                                        dini_FloatSet(svehmentes,\"PosY\",posy); // -Y koordinátát
                                        dini_FloatSet(svehmentes,\"PosZ\",posz); // -Z koordinátát
                                        dini_FloatSet(svehmentes,\"Angle\",angle); // -Forgásirányát
                                        dini_IntSet(svehmentes,\"Model\",model); // -A model id-jét
                                        dini_IntSet(svehmentes,\"Color1\",color1);
                                        dini_IntSet(svehmentes,\"Color2\",color2);
                                        SendClientMessage(playerid,COLOR_BLUE,\"Játmû lementve!\");
                                }
                                else // Ha nem létezik a file
                                {
                                        dini_FloatSet(svehmentes,\"PosX\",posx); // Lementjük az -X koordinátát
                                        dini_FloatSet(svehmentes,\"PosY\",posy); // -Y koordinátát
                                        dini_FloatSet(svehmentes,\"PosZ\",posz); // -Z koordinátát
                                        dini_FloatSet(svehmentes,\"Angle\",angle); // -Forgásirányát
                                        dini_IntSet(svehmentes,\"Model\",model);  // -A model id-jét
                                        dini_IntSet(svehmentes,\"Color1\",color1);
                                        dini_IntSet(svehmentes,\"Color2\",color2);
                                }

 
 
Ilyesmire:
 
for(new i = vehid; i < MAX_VEHICLES; i++) // \"i\" kezdeti értéke a jármû jelenlegi  ID-je. Minden lefutásnál \"i\" értékét növelje, míg az kisebb, mint MAX_VEHICLES.
{
      format(svehmentes, sizeof(svehmentes), \"/Cars1/%d.ini\", i); //formázzuk az \"svehmentes\"-t fájlnévnek \"i\" értékével.
      if(!fexist(svehmentes)) dini_Create(svehmentes), break; //Ha a fájl nem létezik, létrehozzuk és kilépünk a ciklusból.
      else continue; // Ellenkezõ esetben továbblépünk, mert ilyen ID-jû jármû már van. (Ez a sor igazából felesleges, de a könnyebb megértés érdekében ideírom.)
}
//Mentünk
dini_FloatSet(svehmentes, \"PosX\", posx); // Lementjük az - X koordinátát
dini_FloatSet(svehmentes, \"PosY\", posy); // - Y koordinátát
dini_FloatSet(svehmentes, \"PosZ\", posz); // - Z koordinátát
dini_FloatSet(svehmentes, \"Angle\", angle); // - forgásirányát
dini_IntSet(svehmentes, \"Model\", model); // - a model id-jét
dini_IntSet(svehmentes, \"Color1\", color1); // - az 1-es színét
dini_IntSet(svehmentes, \"Color2\", color2);// - a 2-es színét
SendClientMessage(playerid, COLOR_BLUE, \"Jármû lementve!\");

 
Ha valamit elírtam, akkor elnézést!

Dupla hozzászólás automatikusan összefûzve. ( [time]2014. augusztus 22. 19:37:29[/time] )

Illetve talán jobb, ha 0-tól nézed a fájlokat, nem a jármû ID-jétõl..
 
for(new i = 0; i < MAX_VEHICLES; i++)

 
De amúgy ezzel a mentési móddal a jármû ID-k sokszor változni fognak.. Szóval nem biztos hogy ez a legjobb megoldás, persze csak ha ez nem gond.
« Utoljára szerkesztve: 2014. augusztus 23. - 00:39:03 írta M1A1 »

Nem elérhető KrisT

  • 106
    • Profil megtekintése
/sveh parancs
« Válasz #2 Dátum: 2014. augusztus 22. - 23:02:24 »
0 Show voters
Hát majd olyat akarok h frakcióra szabott jármû. Pl csak a frakcio tagjai ulhetnek bele.. meg csak adminkocsi stb

Nem elérhető M1A1

/sveh parancs
« Válasz #3 Dátum: 2014. augusztus 23. - 01:14:02 »
0 Show voters
Írok egy gyors példaszerûséget, ne pont így írd, csak ilyesmit:
Mondjuk létrehozol egy integer tömböt a jármûveknek, amiben megadod, hogy hova tartoznak. A jármûvek betöltésénél kiolvasod, a mentési résznél kíírod az értékét. A kód elején definálod, hogy hova tartozhatnak a jármûvek, pl.:
 
#define FK_CIVIL 0
#define FK_VALAMI 1
#define FK_VALAMICSODA 2

 
stb..
Vagy ha már definálva vannak frakció ID-k, akkor azokat használod.
Létrehozol egy új parancsot, mondjuk CMD:setvehfk. Itt megadhatod a jármû frakció ID-jét, miután létrehoztad.
Aztán a motorbeindítás parancsnál ellenõrzöd, hogy a játékos ugyan abba a frakcióba tartozik-e, mint a jármû, vagy a jármû civil-e. Ha egyik sem, akkor nem tudja beindítani a jármûvet.

Nem elérhető huhboy

  • 894
  • huhboy
    • Profil megtekintése
/sveh parancs
« Válasz #4 Dátum: 2014. augusztus 23. - 02:35:54 »
0 Show voters
a fájlokat az id-re mentsd.
létrehozol egy változót, ami alapértelmezetten 0.
aztán egy eljárást hozol létre, ami ellenõrzi, hogy a jármû id-jérevan- efájl. ha van, akkor megnöveled eggyel a változót, és újra futtatod.
iff van, hogy hogy csináld, a többivel kitudod egészíteni
 

new mentesiid;
CMD:sveh(playerid)
{
mentesiid = 1;
Kocsimentes(playerid);
return 1;
}
stock Kocsimentes(playerid, vehicleid)
{
new file[128];
vid = GetPlayerVehicleID(playerid);
format(file, sizeof(file), \"/Cars1/%s.ini\", mentesiid);
if(dini_Exists(file)) return mentesiid++, Kocsimentes(playerid);
else
{
/*
    mentési cucc
    */
}
return 1;
}

 
jaa, nem teszteltem le, de mûködnie KELL!
xd

Nem elérhető KrisT

  • 106
    • Profil megtekintése
/sveh parancs
« Válasz #5 Dátum: 2014. augusztus 24. - 00:18:26 »
0 Show voters
Parancsot valaki leirná? Sajnos magamtol nem tudom még leirni a parancsot.

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
/sveh parancs
« Válasz #6 Dátum: 2014. szeptember 13. - 00:08:41 »
0 Show voters
[mod]Ha megoldódott a problémád, zárd a témát![/mod]

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal