enum carInfo{vID,vTulaj[32],vRendszam[32],vModel,Float:vPosX,Float:vPosY,Float:vPosZ,Float:vRot,vCol1,vCol2,KmSzamlalo,Float:VehHP,VehFuel};new cInfo[50][carInfo];
loadVehicles(){new query[128];format(query,sizeof(query),\"SELECT * FROM sveh\");mysql_function_query(dbhandle,query,true,\"OnQueryFinish\",\"i\",THREAD_LOAD_VEHICLES);return 1;}
public OnQueryFinish(resultid, extraid, ConnectionHandle){new num_rows, num_fields;if(resultid != THREAD_NO_RESULT){cache_get_data(num_rows, num_fields);}switch(resultid){ case THREAD_LOAD_VEHICLES: { if(num_rows) { new v; for(new i = 0; i < num_rows ; i++) { cInfo[vModel] = cache_get_field_content_int(i,\"cID\",dbhandle); cInfo[vTulaj] = cache_get_field_content(i, \"Tulaj\", KocsiTulaj); cInfo[vRendszam] = cache_get_field_content(i, \"Rendszam\", KocsiRendszam); cInfo[vPosX] = cache_get_field_content_float(i,\"VehX\",dbhandle); cInfo[vPosY] = cache_get_field_content_float(i,\"VehY\",dbhandle); cInfo[vPosZ] = cache_get_field_content_float(i,\"VehZ\",dbhandle); cInfo[vRot] = cache_get_field_content_float(i,\"VehRot\",dbhandle); cInfo[vCol1] = cache_get_field_content_int(i,\"VehCol1\",dbhandle); cInfo[vCol2] = cache_get_field_content_int(i,\"VehCol2\",dbhandle); cInfo[KmSzamlalo] = cache_get_field_content_int(i,\"KmSzamlalo\",dbhandle); cInfo[VehHP] = cache_get_field_content_float(i,\"VehHP\",dbhandle); cInfo[VehFuel] = cache_get_field_content_int(i,\"Uzemanyag\",dbhandle); CreateVehicle(cInfo[vModel],cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ],cInfo[vRot],cInfo[vCol1],cInfo[vCol2],-1); SetVehicleHealth(i,Float:cInfo[VehHP]); SetVehicleNumberPlate(i,KocsiRendszam); v++; printf(\"Jarmuvek betoltve: %d\", v); } } printf(\"Jarmuvek betoltve: 0\");}}return 1;}
sql táblát tudnád csatolni mert lehet ott van elcsúszva valami
cache_get_field_content(i, \"Tulaj\", cInfo[vTulaj]);
A cache_get_field_content() függvény nem tér vissza a szöveggel. Így nem tudod egyenlőség jel után írni. Csinálhatod úgyis, ahogy azt te elképzelted, hogy eltárolod az értéket egy másik változóba, majd az eltárolt értéket bemásolod a jármű tulaj tömbjébe, de ezt így teljesen felesleges. Nyugodtan mehet egyből a kiolvasott érték a jármű tömbjébe. Tehát a \"KocsiTualj\" stringet felesleges deklarálni. cache_get_field_content(i, \"Tulaj\", cInfo[vTulaj]); És így tovább a többi stringnél is..
public OnQueryFinish(resultid, extraid, ConnectionHandle){new num_rows, num_fields;if(resultid != THREAD_NO_RESULT){cache_get_data(num_rows, num_fields);}switch(resultid){ case THREAD_LOAD_VEHICLES: { if(num_rows) { new v; for(new i = 0; i < num_rows ; i++) { cInfo[vModel] = cache_get_field_content_int(i,\"cID\",dbhandle); cache_get_field_content(i, \"Tulaj\", cInfo[vTulaj]); cache_get_field_content(i, \"Rendszam\", cInfo[vRendszam]); cInfo[vPosX] = cache_get_field_content_float(i,\"VehX\",dbhandle); cInfo[vPosY] = cache_get_field_content_float(i,\"VehY\",dbhandle); cInfo[vPosZ] = cache_get_field_content_float(i,\"VehZ\",dbhandle); cInfo[vRot] = cache_get_field_content_float(i,\"VehRot\",dbhandle); cInfo[vCol1] = cache_get_field_content_int(i,\"VehCol1\",dbhandle); cInfo[vCol2] = cache_get_field_content_int(i,\"VehCol2\",dbhandle); cInfo[KmSzamlalo] = cache_get_field_content_int(i,\"KmSzamlalo\",dbhandle); cInfo[VehHP] = cache_get_field_content_float(i,\"VehHP\",dbhandle); cInfo[VehFuel] = cache_get_field_content_int(i,\"Uzemanyag\",dbhandle); CreateVehicle(cInfo[vModel],cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ],cInfo[vRot],cInfo[vCol1],cInfo[vCol2],-1); SetVehicleHealth(i,Float:cInfo[VehHP]); SetVehicleNumberPlate(i,cInfo[vRendszam]); v++; printf(\"Jarmuvek betoltve: %d\", v); } } printf(\"Jarmuvek betoltve: 0\");}}return 1;}
cInfo[vServerID] = CreateVehicle(cInfo[vModel],cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ],cInfo[vRot],cInfo[vCol1],cInfo[vCol2],-1);SetVehicleHealth(cInfo[vServerID],Float:cInfo[VehHP]);SetVehicleNumberPlate(cInfo[vServerID],cInfo[vRendszam]);
Jó lenne meghatározni, hogy melyik járműnek állítod át a rendszámát, életét, stb... Mivel ha más sorrendben hozod létre a járműveket, akkor ez az egész dolog eltolódhat. Ahhoz meg létre kéne hozni az enumban egy úgy értéket, legyen az mondjuk \"vServerID\", mert már a vID foglalt, ami gondolom a MySQL ID-t tárolja. cInfo[vServerID] = CreateVehicle(cInfo[vModel],cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ],cInfo[vRot],cInfo[vCol1],cInfo[vCol2],-1);SetVehicleHealth(cInfo[vServerID],Float:cInfo[VehHP]);SetVehicleNumberPlate(cInfo[vServerID],cInfo[vRendszam]);
stock VehicleSaveAll(){ // Leghosszabb query: UPDATE sveh SET VehX=\'-1234.12\',VehY=\'-1234.12\',VehZ=\'-1234.12\',VehRot=\'-1234.12\' WHERE ID=\'1234\' new query[1024],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]);GetVehicleHealth(i, Float:cInfo[VehHP]);GetVehicleColor(i, cInfo[vCol1],cInfo[vCol2]); // mentés format(query,sizeof(query),\"UPDATE sveh SET Tulaj=\'%s\',Rendszam=\'%s\',VehX=\'%.2f\',VehY=\'%.2f\',VehZ=\'%.2f\',VehRot=\'%.2f\',VehCol1=\'%d\',VehCol2=\'%d\',KmSzamlalo=\'%d\',VehHP=\'%.2f\',Uzemanyag=\'%d\' WHERE ID=\'%d\'\",cInfo[vTulaj],cInfo[vRendszam],cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ],cInfo[vRot],cInfo[vCol1],cInfo[vCol2],cInfo[KmSzamlalo],cInfo[VehHP],cInfo[VehFuel],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}
print(query);
Tudnád debuggoltatni? Magyarán kiprintelni a MySQL kódot amikor lefut, hátha megtudunk belőle valamit. print(query); De szerintem a gond ott lesz, hogy a ciklus az összes járműre vonatkozik, még azokra is amik csak sima járművek és nem vehetőek meg a szerveren. Vannak ilyenek?
[20:20:37] UPDATE sveh SET Tulaj=\'\',Rendszam=\'\',VehX=\'1620.26\',VehY=\'-2313.68\',VehZ=\'13.29\',VehRot=\'137.64\',VehCol1=\'6\',VehCol2=\'6\',KmSzamlalo=\'0\',VehHP=\'906.11\',Uzemanyag=\'100\' WHERE ID=\'1\'[20:20:37] UPDATE sveh SET Tulaj=\'\',Rendszam=\'\',VehX=\'1643.07\',VehY=\'-2329.10\',VehZ=\'13.65\',VehRot=\'126.19\',VehCol1=\'1\',VehCol2=\'1\',KmSzamlalo=\'0\',VehHP=\'900.00\',Uzemanyag=\'100\' WHERE ID=\'2\'[20:20:37] UPDATE sveh SET Tulaj=\'\',Rendszam=\'\',VehX=\'1673.49\',VehY=\'-2316.26\',VehZ=\'13.14\',VehRot=\'146.74\',VehCol1=\'0\',VehCol2=\'0\',KmSzamlalo=\'0\',VehHP=\'1000.00\',Uzemanyag=\'100\' WHERE ID=\'3\'[20:20:37] UPDATE sveh SET Tulaj=\'\',Rendszam=\'\',VehX=\'1663.66\',VehY=\'-2317.51\',VehZ=\'13.15\',VehRot=\'208.70\',VehCol1=\'4\',VehCol2=\'4\',KmSzamlalo=\'0\',VehHP=\'300.00\',Uzemanyag=\'0\' WHERE ID=\'4\'[20:20:37] Jarmuvek mentve: 4
Szerintem vagy módosultak valahol az adatok, vagy rossz járműt kér le a szerver, de inkább a második. Szerintem teleportálj oda a koordinátára amit kidebuggoltattál és győződj meg róla, hogy valóban azt a járművet kérte le a szerver, aminek van tulaja, rendszáma, stb..
stock VehicleSaveAll(){ new query[512],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]);GetVehicleHealth(i, Float:cInfo[VehHP]);GetVehicleColor(i, cInfo[vCol1],cInfo[vCol2]); // mentés format(query,sizeof(query),\"UPDATE sveh SET Tulaj=\'%s\',Rendszam=\'%s\',VehX=\'%.2f\',VehY=\'%.2f\',VehZ=\'%.2f\',VehRot=\'%.2f\',VehCol1=\'%d\',VehCol2=\'%d\',KmSzamlalo=\'%d\',VehHP=\'%.2f\',Uzemanyag=\'%d\' WHERE ID=\'%d\'\",cInfo[vTulaj],cInfo[vRendszam],cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ],cInfo[vRot],cInfo[vCol1],cInfo[vCol2],cInfo[KmSzamlalo],cInfo[VehHP],cInfo[VehFuel],i); mysql_function_query(dbhandle,query,true,\"\",\"\"); // v++;print(query); } printf(\"Jarmuvek mentve: %d\", v); return v; // visszatérési érték a mentett járművek száma}
#define MAX_PRIVATE_VEH 50new cInfo[MAX_PRIVATE_VEH][carInfo];stock VehicleSaveAll(){ new query[512], v; for(new i = 0; i < MAX_PRIVATE_VEH ; i++) { if( !cInfo[vModel] ) { continue; } // ha nincs ilyen jármű akkor ugrik a következőre // adatok lekérése GetVehiclePos (cInfo[vServerID], cInfo[vPosX], cInfo[vPosY], cInfo[vPosZ]); GetVehicleZAngle(cInfo[vServerID], cInfo[vRot]);GetVehicleHealth(cInfo[vServerID], cInfo[VehHP]);GetVehicleColor (cInfo[vServerID], cInfo[vCol1], cInfo[vCol2]); // mentés format(query,sizeof(query),\"UPDATE sveh SET Tulaj=\'%s\',Rendszam=\'%s\',VehX=\'%.2f\',VehY=\'%.2f\',VehZ=\'%.2f\',VehRot=\'%.2f\',VehCol1=\'%d\',VehCol2=\'%d\',KmSzamlalo=\'%d\',VehHP=\'%.2f\',Uzemanyag=\'%d\' WHERE ID=\'%d\'\", cInfo[vTulaj],cInfo[vRendszam],cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ],cInfo[vRot],cInfo[vCol1],cInfo[vCol2],cInfo[KmSzamlalo],cInfo[VehHP],cInfo[VehFuel], cInfo[vID]); mysql_function_query(dbhandle, query, true, \"\", \"\"); // v++;print(query); } printf(\"Jarmuvek mentve: %d\", v); return v; // visszatérési érték a mentett járművek száma}
Nem sok ötletem van már, de szerintem akkor is a mentéssel és a tömb indexxel van a gond.Eleve felesleges a MAX_VEHICLES-el lepörgetni a ciklust, mivel csak 50 a max létrehozható jármű a tömb indexéből ítélve (new cInfo[50][carInfo].Picit módosítottam a kódot, ez csak a privát járművekre fog vonatkozni.A vID változóból olvassa ki a szerver a MySQL ID-t mentésnél, mert ha \'i\'-t használsz, akkor csak össze fog keveredni minden ha pl törölsz egy járművet az adatbázisból. Tehát módosítsd a jármű betöltést és töltsd be az \"ID\" oszlopot a cInfo[vID] változóba.#define MAX_PRIVATE_VEH 50new cInfo[MAX_PRIVATE_VEH][carInfo];stock VehicleSaveAll(){ new query[512], v; for(new i = 0; i < MAX_PRIVATE_VEH ; i++) { if( !cInfo[vModel] ) { continue; } // ha nincs ilyen jármű akkor ugrik a következőre // adatok lekérése GetVehiclePos (cInfo[vServerID], cInfo[vPosX], cInfo[vPosY], cInfo[vPosZ]); GetVehicleZAngle(cInfo[vServerID], cInfo[vRot]);GetVehicleHealth(cInfo[vServerID], cInfo[VehHP]);GetVehicleColor (cInfo[vServerID], cInfo[vCol1], cInfo[vCol2]); // mentés format(query,sizeof(query),\"UPDATE sveh SET Tulaj=\'%s\',Rendszam=\'%s\',VehX=\'%.2f\',VehY=\'%.2f\',VehZ=\'%.2f\',VehRot=\'%.2f\',VehCol1=\'%d\',VehCol2=\'%d\',KmSzamlalo=\'%d\',VehHP=\'%.2f\',Uzemanyag=\'%d\' WHERE ID=\'%d\'\", cInfo[vTulaj],cInfo[vRendszam],cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ],cInfo[vRot],cInfo[vCol1],cInfo[vCol2],cInfo[KmSzamlalo],cInfo[VehHP],cInfo[VehFuel], cInfo[vID]); mysql_function_query(dbhandle, query, true, \"\", \"\"); // v++;print(query); } printf(\"Jarmuvek mentve: %d\", v); return v; // visszatérési érték a mentett járművek száma}
cInfo[vRendszam] = cache_get_field_content(i, \"Rendszam\", KocsiRendszam);SetVehicleNumberPlate(cInfo[vServerID],KocsiRendszam);