Hali,
Szeretnék írni 1 dynamikus jármű rendszert, MySQL-es adatbázissal és sccanf2-es olvasással...
(A kódban lévő sorok száma: 124-141)
new query[128], query2[128];
format(query, sizeof(query), \"COUNT * FROM jarmuvek\");
mysql_query(query);
kocsik = mysql_store_result();
// kocsik = mysql_num_rows();
mysql_free_result();
format(query2, sizeof(query2), \"SELECT * FROM jarmuvek\");
mysql_query(query2);
for(new i=1; i<=kocsik; i++)
{
new j = i;
mysql_fetch_row_format(rows, \"|\");
sscanf(rows, \"p<|>ic[11]fiffffiiiib[4]b[4]b[4]b[4]iiffffi\", Jarmuinfo[j][iD], Jarmuinfo[j][Rendszam], Jarmuinfo[j][Health], Jarmuinfo[j][Model], Jarmuinfo[j][PosX], Jarmuinfo[j][PosY], Jarmuinfo[j][PosZ], Jarmuinfo[j][PosA], Jarmuinfo[j][szin1], Jarmuinfo[j][szin2], Jarmuinfo[j][Paintjob], Jarmuinfo[j][Km], Jarmuinfo[j][Panelek], Jarmuinfo[j][Ajtok], Jarmuinfo[j][Lampak], Jarmuinfo[j][Gumik], Jarmuinfo[j][Felnik], Jarmuinfo[j][Tulaj], Jarmuinfo[j][ParkX], Jarmuinfo[j][ParkY], Jarmuinfo[j][ParkZ], Jarmuinfo[j][ParkA], Jarmuinfo[j][Ertek]);
printf(Jarmuinfo[j][iD], Jarmuinfo[j][Rendszam], Jarmuinfo[j][Health], Jarmuinfo[j][Model], Jarmuinfo[j][PosX], Jarmuinfo[j][PosY], Jarmuinfo[j][PosZ], Jarmuinfo[j][PosA], Jarmuinfo[j][szin1], Jarmuinfo[j][szin2], Jarmuinfo[j][Paintjob], Jarmuinfo[j][Km], Jarmuinfo[j][Panelek], Jarmuinfo[j][Ajtok], Jarmuinfo[j][Lampak], Jarmuinfo[j][Gumik], Jarmuinfo[j][Felnik], Jarmuinfo[j][Tulaj], Jarmuinfo[j][ParkX], Jarmuinfo[j][ParkY], Jarmuinfo[j][ParkZ], Jarmuinfo[j][ParkA], Jarmuinfo[j][Ertek]);
mysql_free_result();
}
return 1;
*a kocsik változó globális..
Na most az én kódom túl hosszú és nem a legjobb..
A fordító a következő hibákat dobta:
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(129) : error 035: argument type mismatch (argument 1)
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(137) : error 075: input line too long (after substitutions)
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(138) : error 017: undefined symbol \"Jarmui\"
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(139) : warning 217: loose indentation
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(139) : error 017: undefined symbol \"nfo\"
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(139) : warning 215: expression has no effect
C:\\Users\\P*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(139) : error 001: expected token: \";\", but found \"]\"
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(139) : error 029: invalid expression, assumed zero
C:\\Users\\*\\Desktop\\gyakorlas\\gamemodes\\*.pwn(139) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
7 Errors.
Na mint látható az a bizonyos sor túl hosszú... pedig még lenne több adat amit bekéne töltenem.
(Szerk.: Hogyan tudnám megoldani, hogy jó legyen? Ha az enum paramétereit elhagyom és rövidebb változókat írnék a sorba, akkor is hosszú lenne.)
Ezen felül pár kérdés:
Melyik a jó?
- kocsik = mysql_store_result();
kocsik = mysql_num_rows();
A carid-t 0-tól vagy 1-től számolja a samp?
Zsoltnak igaza van!
Szedd le a legújabb mysqlt, sokkal egyszerűbb, mutatom is a saját példámat.
Rögtön az elejére kell egy enum amibe lekéred az adatokat!
enum Car{
ID,
db_id,
rszam[8],
modelid,
Float:xPos,
Float:yPos,
Float:zPos,
Float:angle,
tulaj,
col1,
col2
}
new CarInfo[MAX_VEHICLES][Car];
new kapcs, query[2000]; //Ez megy a mod elejére
public OnGameModeInit()
{
mysql_log(LOG_ALL, LOG_TYPE_HTML); //Ezzel minden logolsz ami zajlik a mysqlben HTML fájlba, amit a szerver mappádba tesz
kapcs = mysql_connect(\"localhost\", \"root\", \"zone\", \"\"); //A kapcs nevű változót egyenlővé teszed a mysql connectel amiben megadod az adatb, jelszót stb...
if(mysql_errno(kapcs) != 0) printf(\"MySQL hiba! Hibakód: %d\", mysql_errno(kapcs)); //Ha elhal a mysql akkor printf-eled (pl nincs elindítva az apach vagy valami same things)
mysql_tquery(kapcs, \"SELECT * FROM cars\",\"AutoLoad\"); //Aztán elküldöd a kapcs nevű változóval a kérésedet, amit tovább adsz az AutoLoadnak ami végrehajtja a betöltésed.
return 1;
}
Jöhet az AutoLoad valahova szintén a modba
forward AutoLoad();
public AutoLoad()
{
if(!cache_get_row_count()) return printf(\"Nincs egy autó sem az adatbázisban!\"); //Ha nincs betöltendő sor akkor ezt írja a fekete ablakba.
for(new i = 0; i < cache_get_row_count(); i++) //Különben végig nézzük a sorokat egy for-al
{
new rendszam[8];
cache_get_field_content(i, \"rendszam\", rendszam); //Rendszámot csak így tudod betölteni mert stringet nem tudsz olvasni csak int-et meg float-ot
CarInfo[rszam] = rendszam;
CarInfo[modelid] = cache_get_field_content_int(i,\"modelid\",kapcs); //Innentől meg csak adatbetöltés
CarInfo[tulaj] = cache_get_field_content_int(i,\"tulaj\",kapcs);
CarInfo[xPos] = cache_get_field_content_float(i,\"x\",kapcs);
CarInfo[yPos] = cache_get_field_content_float(i,\"y\",kapcs);
CarInfo[zPos] = cache_get_field_content_float(i,\"z\",kapcs);
CarInfo[angle] = cache_get_field_content_float(i,\"angle\",kapcs);
CarInfo[col1] = cache_get_field_content_int(i,\"col1\",kapcs);
CarInfo[col2] = cache_get_field_content_int(i,\"col2\",kapcs);
//Ezzel pedig szépen lepakolgatod a kocsit
CarInfo[iD] = AddStaticVehicleEx(CarInfo[modelid],CarInfo[xPos],CarInfo[yPos],CarInfo[zPos],CarInfo[angle],CarInfo[col1],CarInfo[col2],300,0);
AutoCount++;
}
return 1;
}
Azt hiszem minden benne van, megéri leszedni a legújabb MySQL-t.
Én így használom ez a saját példám, nem a te kódod alapján írtam, szóval mindenképp módosítanod kell a kódon!
Üdv,
Justrics