GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => Szkript kérések => SA-MP: Szerverfejlesztés => RP/RPG kérések => A témát indította: Robi222 - 2014. szeptember 25. - 19:32:57

Cím: Jármû lementés gondok
Írta: Robi222 - 2014. szeptember 25. - 19:32:57
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.
Cím: Jármû lementés gondok
Írta: Kovacs_Richard - 2014. szeptember 26. - 09:37:33
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?
Cím: Jármû lementés gondok
Írta: Robi222 - 2014. szeptember 26. - 10:42:50
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 ?
Cím: Jármû lementés gondok
Írta: Kovacs_Richard - 2014. szeptember 26. - 10:59:06
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ó
Cím: Jármû lementés gondok
Írta: Robi222 - 2014. szeptember 26. - 11:00:51
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?
Cím: Jármû lementés gondok
Írta: Kovacs_Richard - 2014. szeptember 29. - 09:23:24
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 :)
Cím: Jármû lementés gondok
Írta: Flash - 2014. október 18. - 19:26:34
[gmod]Megkérném a kedves témanyitót hogy ne hanyagolja el a témáját ha már megnyitotta![/gmod]
Cím: Jármû lementés gondok
Írta: Robi222 - 2014. október 19. - 11:53:33
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! :)