Szerző Téma: Egyedi jármû rendszer hiba  (Megtekintve 1191 alkalommal)

Egyedi jármû rendszer hiba
« Dátum: 2013. november 03. - 19:36:06 »
0 Show voters
Sziasztok!
Saját modba kitaláltam egy jármû rendszert, viszont nem mûködik minden normálisan benne (pawno elfogadja).
Az autók betöltenek rendesen, viszont a mentésnél keverednek az adatok (benzin, pozíció).
Itt a részlet:
Ongamemodeinit alatt:
 
for(new vi = 0; vi < 2000; vi++)
       {
       format(vfile, sizeof(vfile), \"/vehicles/%i.ini\", vi);
if(dini_Exists(vfile))
    {
    format(vInfo[vi][tulaj], MAX_PLAYER_NAME+1, \"%s\", dini_Get(vfile, \"Tulaj\"));
    vInfo[vi][col1] = dini_Int(vfile, \"Col1\");
    vInfo[vi][col2] = dini_Int(vfile, \"Col2\");
    vInfo[vi][posx] = dini_Float(vfile, \"PosX\");
    vInfo[vi][posy] = dini_Float(vfile, \"PosY\");
    vInfo[vi][posa] = dini_Float(vfile, \"PosZ\");
    vInfo[vi][fuel] = dini_Float(vfile, \"Fuel\");
    format(vInfo[vi][rendszam], 20, \"%s\", dini_Get(vfile, \"Rendszám\"));
    veh[vi] = AddStaticVehicleEx(dini_Int(vfile, \"Model\"), vInfo[vi][posx], vInfo[vi][posy], vInfo[vi][posz], vInfo[vi][posa], vInfo[vi][col1], vInfo[vi][col2],6*60*60*1000);
   SetVehicleHealth(veh[vi], dini_Float(vfile, \"Vhp\"));
   SetVehicleNumberPlate(veh[vi], vInfo[vi][rendszam]);
   SetVehicleParamsEx(veh[vi], true, false, false, false, false, false, false);
   SetTimerEx(\"KocsiTimer\", 1*1000, true, \"i\", vi);
   }
}

 
Ongamemodeexit alatt:
 
for(new vi = 0; vi < 2000; vi++)
       {
       format(vfile, sizeof(vfile), \"/vehicles/%i.ini\", vi);
if(dini_Exists(vfile))
    {
    dini_Set(vfile, \"Tulaj\", vInfo[vi][tulaj]);
    dini_IntSet(vfile, \"Col1\", vInfo[vi][col1]);
    dini_IntSet(vfile, \"Col2\", vInfo[vi][col2]);
    dini_FloatSet(vfile, \"PosX\", vInfo[vi][posx]);
    dini_FloatSet(vfile, \"PosY\", vInfo[vi][posy]);
    dini_FloatSet(vfile, \"PosZ\", vInfo[vi][posz]);
    dini_FloatSet(vfile, \"PosA\", vInfo[vi][posa]);
    dini_FloatSet(vfile, \"Fuel\", vInfo[vi][fuel]);
    dini_Set(vfile, \"Rendszám\", vInfo[vi][tulaj]);
    new Float:vhhp;
    vhhp = GetVehicleHealth(veh[vi], vhhp);
    dini_FloatSet(vfile, \"Vhp\", vhhp);
   }
}

 
Timer:
 
public kocsitimer(vehid)
{
new Float:cdis[MAX_VEHICLES];
GetVehicleParamsEx(veh[vehid], engine, lights, alarm, doors, bonnet, boot, objective);
cdis[vehid] = GetVehicleDistanceFromPoint(veh[vehid], vInfo[vehid][posx], vInfo[vehid][posy], vInfo[vehid][posz]);
if(engine == 1)
{
if(cdis[vehid] == 0)
    {
    vInfo[veh[vehid]][fuel] = vInfo[veh[vehid]][fuel]-0.0001;
    }else{
    vInfo[veh[vehid]][fuel] = vInfo[veh[vehid]][fuel]-(cdis[vehid]/100);
    }
}
GetVehiclePos(veh[vehid], vInfo[vehid][posx], vInfo[vehid][posy], vInfo[vehid][posz]);
GetVehicleZAngle(veh[vehid], vInfo[vehid][posz]);
return 1;
}

 
Köszi a segítséget elõre is :)
Szerk: útközben beállítottam, hogy csak járó motornál csökkenjen a benzin, így nem fog vontatásnál fogyasztani a jármû.
« Utoljára szerkesztve: 2013. november 03. - 20:25:35 írta kiakovi »

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Egyedi jármû rendszer hiba
« Válasz #1 Dátum: 2013. november 04. - 08:11:36 »
+1 Show voters
szia
nem akarok beleszólni, mit hogyan oldasz meg, de szerintem ez a megoldás eléggé terheli a szervert, a sok timer, meg másodpercenkénti adatlekérdezés, de ha neked megfelel akkor használd egészséggel :)
jeleznék néhány észrevételt:
 
format(vInfo[vi][tulaj], MAX_PLAYER_NAME+1, \"%s\", dini_Get(vfile, \"Tulaj\"));

 
MAX_PLAYER_NAME+1
SA-MP-ben engedett játékosnév max hossza 20 karakter, MAX_PLAYER_NAME értéke 24, szóval nem kell a +1
 
6*60*60*1000

 
én a helyedben inkább beírnám a számot és comment-el oda írnám, hogy 6 óra
PosA tulajdonságot nem töltöd be, csak elmented
 
SetTimerEx(\"KocsiTimer\", 1*1000, true, \"i\", vi);

 
lehet lusta vagy számolgatni, de azért ez túlzás :D
1*1000
 
new Float:cdis[MAX_VEHICLES];

 
miért kell ekkora tömb amikor így adod meg a timert?
 
SetTimerEx(\"KocsiTimer\", 1*1000, true, \"i\", vi);

 
de még akkor sem lenne rá szükséged ha ciklussal mennél végig a jármûveken, mivel egyszerre egy jármûvel foglalkozol
 
GetVehicleParamsEx(veh[vehid], engine, lights, alarm, doors, bonnet, boot, objective);

 
itt hol tárolod az adatot?
 
vInfo[veh[vehid]][fuel] = vInfo[veh[vehid]][fuel]-0.0001;
vInfo[veh[vehid]][fuel] = vInfo[veh[vehid]][fuel]-(cdis[vehid]/100);

 
helyett:
 
vInfo[veh[vehid]][fuel] -= 0.0001;
vInfo[veh[vehid]][fuel] -= (cdis[vehid]/100);

 
Ami az egyik problémát okozza az ez a sor:
 
GetVehicleZAngle(veh[vehid], vInfo[vehid][posz]);

 
itt szerintem a posa-ba akartad lekérdezni és nem a posz-be
Nagyjából, ennyi amit így ránézésbõl megtudtam állapítani.
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Egyedi jármû rendszer hiba
« Válasz #2 Dátum: 2013. november 04. - 18:17:59 »
0 Show voters
Köszi a segítséget, tanácsokat, autószínek, model id, az pozíciók és a rendszám jól tölt be. Adatmentés paranccsal megy mostantól, nem timerrel.
Viszont van még 2 problémám.
 
public kocsisave()
{
GetVehiclePos(veh[vehid[vi]], vInfo[vehid[vi]][posx], vInfo[vehid[vi]][posy], vInfo[vehid[vi]][posz]);
GetVehicleZAngle(veh[vehid[vi]], vInfo[vehid[vi]][posa]);
format(vfile, sizeof(vfile), \"/vehicles/%i.ini\", vehid[vi]);
if(dini_Exists(vfile))
{
dini_IntSet(vfile, \"Col1\", vInfo[vehid[vi]][col1]);
dini_IntSet(vfile, \"Col2\", vInfo[vehid[vi]][col2]);
dini_FloatSet(vfile, \"PosX\", vInfo[vehid[vi]][posx]);
dini_FloatSet(vfile, \"PosY\", vInfo[vehid[vi]][posy]);
dini_FloatSet(vfile, \"PosZ\", vInfo[vehid[vi]][posz]);
dini_FloatSet(vfile, \"PosA\", vInfo[vehid[vi]][posa]);
dini_FloatSet(vfile, \"Fuel\", vInfo[vehid[vi]][fuel]);
/*new Float:vhhp[MAX_VEHICLES];
GetVehicleHealth(veh[vehid[vi]], vhhp[vehid[vi]]);
dini_FloatSet(vfile, \"Vhp\", vhhp[vehid[vi]]);
if(vhhp[vehid[vi]] << 250.0)
    {
    DestroyVehicle(veh[vehid[vi]]);
    dini_Remove(vfile);
    }*/
}
return 1;
}

 
[A mentésnél lekérném, hogy a jármû hp-ja kisebb-e 250-nél és ha igaz, törölje a kocsit és a file-t. Sajnos az összes kocsit törli fájlostul, pedig mindnek az élete nagyobb 250-nél biztosan.] << Hülye voltam, javítottam... :D
A másik, hogy hogyan csökkentsem a benzint, ha a vagy megy a motorja vagy áll és a kocsi mozog?
(ha meg nem megy a motorja, ne csökkenjen a benzin) :)
« Utoljára szerkesztve: 2013. november 04. - 18:34:52 írta kiakovi »

Egyedi jármû rendszer hiba
« Válasz #3 Dátum: 2013. november 04. - 18:35:14 »
0 Show voters
Ezt a sort is nézd át légy szíves:
 
vInfo[vi][posa] = dini_Float(vfile, \"PosZ\");

 
a posa nem az arcot jelenti? a PosZ van ott a vfile-nél.

Egyedi jármû rendszer hiba
« Válasz #4 Dátum: 2013. november 04. - 18:45:34 »
0 Show voters

Ezt a sort is nézd át légy szíves:
 
vInfo[vi][posa] = dini_Float(vfile, \"PosZ\");

 
a posa nem az arcot jelenti? a PosZ van ott a vfile-nél.
 
[/quote]
Nem arcot jelent.  :D :D :D :D
Angle = szög

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Egyedi jármû rendszer hiba
« Válasz #5 Dátum: 2013. november 04. - 19:05:58 »
0 Show voters
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Egyedi jármû rendszer hiba
« Válasz #6 Dátum: 2013. november 04. - 19:08:33 »
0 Show voters

 

Ezt a sort is nézd át légy szíves:
 
vInfo[vi][posa] = dini_Float(vfile, \"PosZ\");

 
a posa nem az arcot jelenti? a PosZ van ott a vfile-nél.
 
[/quote]
Nem arcot jelent.  :D :D :D :D
Angle = szög
 
[/quote]
Igen, azt tudom, de a nézet szöget jelenti.

Egyedi jármû rendszer hiba
« Válasz #7 Dátum: 2013. november 05. - 20:43:57 »
0 Show voters
Köszönöm a segítséget, a jármûrendszer teljesen mûködik, a benzint meg fogom oldani. :)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal