Hali!
Jelenleg azt akarom megcsinálni, hogy a kocsikat MySQL -be mentse illetve töltse be. /jarmu parancsal létrehoz egyet,be illeszti MySQL táblába ez megy is. Viszont a betöltés már nem működik, nem spawnolja le a kocsikat.
OnGameModeInitnél meghívom a
loadVehicles();
Ami így nézki:
loadVehicles()
{
new query[128];
format(query,sizeof(query),\"SELECT * FROM sveh\");
mysql_function_query(dbhandle,query,true,\"OnQueryFinish\",\"i\",THREAD_LOAD_VEHICLES);
return 1;
}
OnQueryFinish -be pedig így tölti be:
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[vID] = cache_get_field_content_int(i,\"id\",dbhandle);
cInfo[vModel] = cache_get_field_content_int(i,\"VehModel\",dbhandle);
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);
CreateVehicle(cInfo[vModel],cInfo[vPosX],cInfo[vPosY],cInfo[vPosZ],cInfo[vRot],cInfo[vCol1],cInfo[vCol2],-1);
cInfo[vID]++;
v++;
printf(\"Jarmuvek betoltve: %d\", v);
}
}
printf(\"Jarmuvek betoltve: 0\");
}
}
return 1;
}
Na most nem spawnolja le a kocsikat,tehát nem akarja beolvasni. Mi lehet a gond ? :( Előre is köszönöm.
Ez így rossz, ahogy van, a betöltésre gondolok. :slap: Miért töltöd be a sorok számával megegyező tömbbe az adatokat? Utána miért kezded el mindig 1-el növelni? Nem adsz meg változót annak az értéknek, amivel a CreateVehicle visszatér. Helyesen valahogy így néz ki:
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++)
{
v = cache_get_field_content_int(i,\"id\",dbhandle);
cInfo[v][vModel] = cache_get_field_content_int(i,\"VehModel\",dbhandle);
cInfo[v][vPosX] = cache_get_field_content_float(i,\"VehX\",dbhandle);
cInfo[v][vPosY] = cache_get_field_content_float(i,\"VehY\",dbhandle);
cInfo[v][vPosZ] = cache_get_field_content_float(i,\"VehZ\",dbhandle);
cInfo[v][vRot] = cache_get_field_content_float(i,\"VehRot\",dbhandle);
cInfo[v][vCol1] = cache_get_field_content_int(i,\"VehCol1\",dbhandle);
cInfo[v][vCol2] = cache_get_field_content_int(i,\"VehCol2\",dbhandle);
cInfo[v][vID] = CreateVehicle(cInfo[v][vModel],cInfo[v][vPosX],cInfo[v][vPosY],cInfo[v][vPosZ],cInfo[v][vRot],cInfo[v][vCol1],cInfo[v][vCol2],-1);
printf(\"Jarmuvek betoltve: %d\", num_rows);
}
}
else
printf(\"Jarmuvek betoltve: 0\");
}
}
return 1;
}
Vagyis, betöltöd a jármű ID-jét a \"v\" változóba, ez az SQL ID-je a járműnek. Aztán folyamatosan az adott ID-jű járműnek a tömbjébe fogod betölteni az adatokat a táblából. A \"vID\"\' változó, amit a létrehoztál az enumban (gondolom) fogja tárolni a CreateVehicle által visszaadott értéket, vagyis a kocsi alap ID-jét. Ha van sor, akkor kiprinteli a sorok számát, amit visszaadott a cache_get_data funkció. Ha nincs, akkor 0-át printel ki. Más ötletem nincs :shurg: