Szerző Téma: Jármû lementés gondok  (Megtekintve 1203 alkalommal)

Jármû lementés gondok
« Dátum: 2014. szeptember 25. - 19:32:57 »
0 Show voters
Hali!
Úgy akarom megcsinálni a szerveremre,hogy MySQL táblába mentsen minden jármûvet és onnan is töltse be,a betöltés meg van,csak a mentés valahogy nem megy,a koórdinátát nem menti le,de szerintem azzal lesz a gond,hogy nem tudja hogy hova mentse le.
Tehát így néz ki:
itt az enum:
 

enum carInfo
{
vID,
vModel,
Float:vPosX,
Float:vPosY,
Float:vPosZ,
Float:vRot,
vCol1,
vCol2
};
new cInfo[MAX_VEHICLES][carInfo];

 


CMD:vehicles(playerid, params[])
{
VehicleSaveAll();
printf(\"Jarmuvek elmentve!\");
return 1;
}

 
Ezzel meghívom a \'VehicleSaveAll\' -t
Ez meg hívja a VehicleGet és VehicleSave -t:
 

stock VehicleSaveAll()
{
    new index = 0;
    for(new i = 0; i < MAX_VEHICLES ; i++)
    {
VehicleGet(index);
        VehicleSave(index);
index++;
    }
    printf(\"Jarmuvek mentve: %d\", index);
return 1;
}

 
Itt pedig a VehicleSave és VehicleGet:
 

stock VehicleGet(jarmuID)
{
    GetVehiclePos(cInfo[jarmuID][vID],cInfo[jarmuID][vPosX],cInfo[jarmuID][vPosY],cInfo[jarmuID][vPosZ]);
    GetVehicleZAngle(cInfo[jarmuID][vID], cInfo[jarmuID][vRot]);
   
return 1;
}
stock VehicleSave(jarmuID)
{
new query[1024];
format(query,sizeof(query),\"UPDATE sveh SET VehX=\'%f\',VehY=\'%f\',VehZ=\'%f\',VehRot=\'%f\' WHERE ID=\'%d\'\",cInfo[jarmuID][vPosX],cInfo[jarmuID][vPosY],cInfo[jarmuID][vPosZ],cInfo[jarmuID][vRot],cInfo[jarmuID][vID]);
mysql_function_query(dbhandle,query,true,\"\",\"\");
printf(\"Jarmuvek elmentve!\");
SendClientMessageToAll(COLOR_WHITE,\"(( Jármûvek elmentve! ))\");
return 1;
}

 
VehicleGet lekéri a koórdinátát és a forgást (Rotationt),VehicleSave egy jármûvet ment csak le,a VehicleSaveAll -nál pedig for ciklussal lementem az összes jármûvet.
Mi lehet itt a gond ? Elõre is köszi annak aki segít.
EDIT: Azt elfelejtettem hozzá tenni,hogy az elsõ autót amit lerakok egy parancsal,annak a koórdinátáját már elmenti,viszont a többit nem,mintha nem jó ID -re mentené le a többi kocsikat.
« Utoljára szerkesztve: 2014. szeptember 25. - 20:44:23 írta Robi222 »

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Jármû lementés gondok
« Válasz #1 Dátum: 2014. szeptember 26. - 09:37:33 »
0 Show voters
ide nem kell  még egy változó az indexeléshez:
 
for(new i = 0; i < MAX_VEHICLES ; i++)
{
    VehicleGet(i);
    VehicleSave(i);
}

 
ja látom, miért volt külön index...de úgy is MAX_VEHICLES-1-ig fut a ciklus...az ciklus változót (i) is létrehozhatod kívül és akkor így néz ki:
 
new i = 0;
for(; i < MAX_VEHICLES ; i++)

 
A VehicleSave alatt ez a 2 sor miatt 2000-szer (MAX_VEHICLE) fogja írni az üzeneteket:
 
printf(\"Jarmuvek elmentve!\");
SendClientMessageToAll(COLOR_WHITE,\"(( Jármûvek elmentve! ))\");

 
írasd ki ennek az értékét:
 
cInfo[jarmuID][vID]

 
és nézd meg, hogy nem e ugyanaz mindenhol...
amúgy amikor lefuttatod ezt a parancsot milyen üzenetek jönnek a chatben?
« Utoljára szerkesztve: 2014. szeptember 26. - 13:07:51 írta Dfoglalo »
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Jármû lementés gondok
« Válasz #2 Dátum: 2014. szeptember 26. - 10:42:50 »
0 Show voters
Idézetet írta: Kovacs_Richard date=1411717053\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"50740\" data-ipsquote-contentclass=\"forums_Topic
ide nem kell  még egy változó az indexeléshez:
 
for(new i = 0; i < MAX_VEHICLES ; i++)
{
    VehicleGet(i);
    VehicleSave(i);
}

 
ja látom, miért volt külön index...de úgy is MAX_VEHICLES-1-ig fut a ciklus...az ciklus változót (i) is létrehozhatod kívül és akkor így néz ki:
 
new i = 0;
for(; i < MAX_VEHICLES ; i++)

 
A VehicleSave alatt ez a 2 sor miatt 2000-szer (MAX_VEHICLE) fogja írni az üzeneteket:
 
printf(\"Jarmuvek elmentve!\");
SendClientMessageToAll(COLOR_WHITE,\"(( Jármûvek elmentve! ))\");

 
írasd ki ennek az értékét:
 
cInfo[jarmuID][vID]

 
és nézd meg, hogy nem e ugyanaz mindenhol...
amúgy amikor lefuttatod ezt a parancsot milyen üzenetek jönnek a chatben?
 
Köszi a segítséget,még nem teljesen megy,most úgy van, hogy van 3 jármû,3 különbözõ helyen,ha /vehicles -t írok akkor mind a 3 jármûnek ugyanazt a pozíciót menti le,ami az egyik kocsié.
Betölteni betölt rendesen.
Most kicsit átírtam,tehát most így néz ki:
Mód eleje:
 

new jarmuID;
enum carInfo
{
vID,
vModel,
Float:vPosX,
Float:vPosY,
Float:vPosZ,
Float:vRot,
vCol1,
vCol2
};
new cInfo[MAX_VEHICLES][carInfo];

 


CMD:vehicles(playerid, params[])
{
VehicleSaveAll();
printf(\"Jarmuvek elmentve!\");
return 1;
}
 
stock VehicleSaveAll()
{
    //for(new i = 0; i < MAX_VEHICLES ; i++) // Loop through the maximum amount of vehicles allowed by sa-mp.
    for(; cInfo[jarmuID][vID]< sizeof(cInfo);cInfo[jarmuID][vID]++)
{
VehicleGet();
        VehicleSave();
    }
    printf(\"Jarmuvek mentve: %d\", cInfo[jarmuID][vID]); // Print out how many vehicles has been saved.
return 1;
}
 
stock VehicleGet()
{
    GetVehiclePos(jarmuID,cInfo[jarmuID][vPosX],cInfo[jarmuID][vPosY],cInfo[jarmuID][vPosZ]);
    // Get the current position of that vehicle and assign it to our system\'s vehicle information.
    GetVehicleZAngle(jarmuID, cInfo[jarmuID][vRot]);
    // Get the current rotation of that vehicle and assign it to our system\'s vehicle information.
return 1;
}
stock VehicleSave()
{
new query[1024];
format(query,sizeof(query),\"UPDATE sveh SET VehX=\'%f\',VehY=\'%f\',VehZ=\'%f\',VehRot=\'%f\' WHERE ID=\'%d\'\",cInfo[jarmuID][vPosX],cInfo[jarmuID][vPosY],cInfo[jarmuID][vPosZ],cInfo[jarmuID][vRot],cInfo[jarmuID][vID]);
mysql_function_query(dbhandle,query,true,\"\",\"\");
return 1;
}

 
Szerver logban pedig ezt írja,indításkor mikor betölt: \"Jarmuvek betoltve: 3\"
Mivel 3 jármû van,  /vehicles parancsot ha beírom pedig 1 sort ír csak ennyit \"Jarmuvek elmentve: 2000\"
Mi lehet a gond ?
« Utoljára szerkesztve: 2014. szeptember 26. - 13:08:04 írta Dfoglalo »

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Jármû lementés gondok
« Válasz #3 Dátum: 2014. szeptember 26. - 10:59:06 »
0 Show voters
jarmuID globális változó lett? sehol nem látom, hogy változtatnád az értékét...és nem értem miért globális változó
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Jármû lementés gondok
« Válasz #4 Dátum: 2014. szeptember 26. - 11:00:51 »
0 Show voters
Idézetet írta: Kovacs_Richard date=1411721946\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"50740\" data-ipsquote-contentclass=\"forums_Topic
jarmuID globális változó lett? sehol nem látom, hogy változtatnád az értékét...és nem értem miért globális változó
 
Igen,globális,bár most már nem nagyon értem hogy akkor hogy csináljam.
És hogyha így csinálnám ?
/vehicles parancsal meghívom a \"SaveVehicleAll\" -t,és akkor elég lenne csak egy stock ?
 

CMD:vehicles(playerid, params[])
{
VehicleSaveAll();
return 1;
}
stock VehicleSaveAll()
{
new query[1024];
    //for(new i = 0; i < MAX_VEHICLES ; i++) // Loop through the maximum amount of vehicles allowed by sa-mp.
for(new i=0; i < jarmuID+1; i++)
{
GetVehiclePos(jarmuID,cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ]);
GetVehicleZAngle(jarmuID, cInfo[vRot]);
format(query,sizeof(query),\"UPDATE sveh SET VehX=\'%f\',VehY=\'%f\',VehZ=\'%f\',VehRot=\'%f\' WHERE ID=\'%d\'\",cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ],cInfo[vRot],jarmuID);
mysql_function_query(dbhandle,query,true,\"\",\"\");
//VehicleGet();
        //VehicleSave(jarmuID);
    }
    printf(\"Jarmuvek mentve: %d\", jarmuID); // Print out how many vehicles has been saved.
return 1;
}

 
Tehát így?
« Utoljára szerkesztve: 2014. szeptember 26. - 11:03:44 írta Robi222 »

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Jármû lementés gondok
« Válasz #5 Dátum: 2014. szeptember 29. - 09:23:24 »
0 Show voters
ez biztos nem lenne jó...1 jármû ID-ra frissíti az összeset...
próbáld ki ezt:
 
CMD:vehicles(playerid, params[])
{
    new str[22];
    format(str,sizeof(str),\"Jármûvek mentve: %d\",VehicleSaveAll());
    return 1;
}
stock VehicleSaveAll()
{
    // Leghosszabb query: UPDATE sveh SET VehX=\'-1234.12\',VehY=\'-1234.12\',VehZ=\'-1234.12\',VehRot=\'-1234.12\' WHERE ID=\'1234\'
    new query[98],v;
    for(new i = 0; i < MAX_VEHICLES ; i++)
    {
        if(!GetVehicleModel(i)) { continue; } // ha nincs ilyen jármû akkor ugrik a következõre
        // adatok lekérése
        GetVehiclePos(i,cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ]);
        GetVehicleZAngle(i, cInfo[vRot]);
// mentés
format(query,sizeof(query),\"UPDATE sveh SET VehX=\'%.2f\',VehY=\'%.2f\',VehZ=\'%.2f\',VehRot=\'%.2f\' WHERE ID=\'%d\'\",cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ],cInfo[vRot],i);
        mysql_function_query(dbhandle,query,true,\"\",\"\");
//
v++;
    }
    printf(\"Jarmuvek mentve: %d\", v);
    return v; // visszatérési érték a mentett jármûvek száma
}

 
ja és ha szeretnéd használni ezt a funkciót GM módosítás nélkül akkor ajánlom, hogy public-al hozd létre...így megtudod hívni scriptekbõl is...mentés funkciót azért jó ha letudod futtatni scriptbõl esetleges hiba esetén...de ezt te döntöd el :)
« Utoljára szerkesztve: 2014. szeptember 30. - 13:57:05 írta Dfoglalo »
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Jármû lementés gondok
« Válasz #6 Dátum: 2014. október 18. - 19:26:34 »
0 Show voters
[gmod]Megkérném a kedves témanyitót hogy ne hanyagolja el a témáját ha már megnyitotta![/gmod]

Jármû lementés gondok
« Válasz #7 Dátum: 2014. október 19. - 11:53:33 »
0 Show voters
Idézetet írta: Kovacs_Richard date=1411975404\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"50740\" data-ipsquote-contentclass=\"forums_Topic
ez biztos nem lenne jó...1 jármû ID-ra frissíti az összeset...
próbáld ki ezt:
 
CMD:vehicles(playerid, params[])
{
    new str[22];
    format(str,sizeof(str),\"Jármûvek mentve: %d\",VehicleSaveAll());
    return 1;
}
stock VehicleSaveAll()
{
    // Leghosszabb query: UPDATE sveh SET VehX=\'-1234.12\',VehY=\'-1234.12\',VehZ=\'-1234.12\',VehRot=\'-1234.12\' WHERE ID=\'1234\'
    new query[98],v;
    for(new i = 0; i < MAX_VEHICLES ; i++)
    {
        if(!GetVehicleModel(i)) { continue; } // ha nincs ilyen jármû akkor ugrik a következõre
        // adatok lekérése
        GetVehiclePos(i,cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ]);
        GetVehicleZAngle(i, cInfo[vRot]);
// mentés
format(query,sizeof(query),\"UPDATE sveh SET VehX=\'%.2f\',VehY=\'%.2f\',VehZ=\'%.2f\',VehRot=\'%.2f\' WHERE ID=\'%d\'\",cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ],cInfo[vRot],i);
        mysql_function_query(dbhandle,query,true,\"\",\"\");
//
v++;
    }
    printf(\"Jarmuvek mentve: %d\", v);
    return v; // visszatérési érték a mentett jármûvek száma
}

 
ja és ha szeretnéd használni ezt a funkciót GM módosítás nélkül akkor ajánlom, hogy public-al hozd létre...így megtudod hívni scriptekbõl is...mentés funkciót azért jó ha letudod futtatni scriptbõl esetleges hiba esetén...de ezt te döntöd el :)
 
Köszi szépen,sikerült megoldani! :)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal