Szerző Téma: Melyiket válasszam?  (Megtekintve 1659 alkalommal)

Nem elérhető AnthonyGates

  • 546
  • AnthonyGates
    • Profil megtekintése
Melyiket válasszam?
« Dátum: 2014. június 07. - 22:54:30 »
0 Show voters
Üdv! Középhaladó scripter vagyok, most egy új, lõdözõs modot készítenék. Kérdésem lenne:
Melyik parancsfeldolgozót használjam?
Milyen módon tároljam az adatokat? Fájlalapon szeretném, melyik a legmegbíhatóbb módszer?
« Utoljára szerkesztve: 2014. június 08. - 11:52:11 írta Flash »

Nem elérhető Pedró

  • 3341
  • 2014 © Az év Szkriptere
    • Profil megtekintése
Melyiket válasszam?
« Válasz #1 Dátum: 2014. június 07. - 23:05:57 »
0 Show voters
ZCMD
dfile, vagy esetleg MySQL (de az nem helyi-fájl-alapú)

Nem elérhető AnthonyGates

  • 546
  • AnthonyGates
    • Profil megtekintése
Melyiket válasszam?
« Válasz #2 Dátum: 2014. június 07. - 23:14:34 »
0 Show voters
Tudom, hogy az SQL lenne a legmegfelelõbb, viszont sampban valamiért nem hajlandó együtt dolgozni velem. PHPban semmi baj.

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
Melyiket válasszam?
« Válasz #3 Dátum: 2014. június 08. - 11:20:52 »
0 Show voters
Parancsfeldolgozónak YCMD. Azzal parancsonként megadhatod a hozzá tartozó segítséget, szóval a helpnél mindig csak pár sor lesz mindem parancsot kiíratni. Rengeteg plusz funkciója van, és gyorsabb is a ZCMD-nél.
Mentéshez pedig MySQL. Ha most kezded (legalábbis pawnban), az R38-al tedd.
Ennek a futásához kell ez a pakk: http://www.microsoft.com/en-us/download/details.aspx?id=30679
Ha 32 bites a Windowsod, csak az x86-osat tedd fel, ha 64 bites, elõször az x86-osat, majd az x64-eset. A honlapon ki lehet választani melyiket szeretnéd. Rendszergazdaként kell futtatni!
Ha - a legtöbb hosthoz hasonlóan - linuxod van, és nem akarod a libek telepítésével piszkálni a konfigost (amit ugye csak õ, mint root tud megtenni), használd a mysql_static.so fájlt.
A legmegfelelõbb plugint innen szedheted le: https://github.com/pBlueG/SA-MP-MySQL/releases
Röviden annyi, hogy létrehozol egy globális változót, mondjuk
new Kapcs;

 és egyet, hogy a késõbb formázott queryket tároljuk. Pl. Mindig a játékos nevét formázzuk ebbe. Tehát:
 
new Kapcs, query[500];

 
OnGameModeInit-hez megadod, hogy az Kapcs változó értéke az legyen, ami a csatlakozásod (mysql adatbázissal való kapcsolatod) id-je. Ez azért kell, mert ez a verzió több kapcsolatot is támogat, akár használod, akár nem.
 
Kapcs = mysql_connect(...)

 
Az ilyeneket ki lehet lesni wikirõl.
Ami még fontos: OnGameModeExit-nél (miután mindent mentettünk persze) le kell zárni a kapcsolatot, mert a microsoft sz*rján keresztül tovább futna a kapcsolat, ami a következõ indításnál hibákat okozhat.
 
mysql_close(Kapcs);

 
Most jön a fõ rész, a query!
A queryk közül 2 használatos: query, tquery.
A query lefut, és rögtön utána lehet lekérni dolgokat. Ezt már kevésbé használják, mert laggoltathatja a szervert, mert nem külön szálon fut, nekem speciel van, hogy le sem kéri teljesen, már ugrik tovább (0-s adatokat használ, meg töktudja. Figyelem! A query után nem kell lekérni az eredményt (mint r6-ban, rögtön lehet mysql_fetch_field_content_intet használni, ami azt hiszem oszlopnévre  és sorra kérdezi le a dolgot, a másik meg oszlop-és sorszámra (ez ciklusoknál hasznos.
A mysql tquery. Ez azért jó, mert valahogyan külön szálon futtatja le a queryt, így pár tized milliszekundum (!) (pl. 0.560 ms) alatt lefut egy hosszabb query is! Miben más? Abban, hogy, ha el akarjuk tárolni az eredményt, meg kell adni neki egy eljárást, ahol meglegyen az eredmény, szabadon lekérdezgethetünk, ilyesmi, nem kell free_result. Példa, mikor kell eljárás, mikor nem:
Itt nem kellett plusz eljárás, mert miután beállította a pénzét 1500-ra, konkrétan (majdnem) lesz*rhatjuk, milyen eredményt dobott vissza.
 
new nev[25];
GetPlayerName(playerid, nev, sizeof(nev));
format(query, 150, \"UPDATE jatekosok SET Penz = \'1500\' WHERE Nev = \'%s\'\", nev);
mysql_tquery(Kapcs, query);

 
Itt pedig kell, mert a lekért adatokat fel szeretnénk használni:
 
//...
format(query, 150, \"SELECT * FROM jatekosok WHERE Nev = \'%s\'\", nev);
mysql_tquery(Kapcs, query, \"JatekosAdatBetoltott\", \"d\", playerid);
forward JatekosAdatBetoltott(playerid);
public JatekosAdatBetoltott(playerid) {
if(!cache_num_rows()) //nincs regisztrálva
else //regisztrálva van
return 1;
}

 
Még kitérnék a mysql_formatra: ez hasonló a formathoz, csak bele lehet formázni escapelt stringeket is (%s helyett %e), amit gondolom tudsz, micsoda, ha már php-ben használtad. Megakadályozza az SQL injectiont.
 
mysql_format(Kapcs, query, 256, \"SELECT * from jatekosok WHERE Nev = %s AND Jelszo = SHA1(\'%e\')\");

 
Így, ha jelszóhoz olyat ír, azt átírja másra, így a rendszered biztonságban lesz.
Hogy kell adatokat lekérni kiválasztás után?
Ezekre a wiki azt mondja, valami cachet aktiválni kell hozzá, érdekes, én csak simán használom, és gyors is, jó is, nem is dob a logba warningot (pedig log_all-ra van téve).
Sor- és oszlopszám alapján:
cache_get_row
cache_get_row_int
cache_get_row_float
Sorszám és oszlopnév alapján:
cache_get_field_content
cache_get_field_content_int
cache_get_field_content_float
Ha valami nagyon máshogy volt PHP-ban, és nem jól magyaráztam, itt lesz egy kis segítség: http://wiki.sa-mp.com/wiki/MySQL/R33#Cache_functions
Egyelõre ennyi. Sok szerencsét, további jó scriptelést! A hibákért elõre is elnézést kívánok, telefonról voltam. =)
U.i.: ha PHP-ban értetted, itt is fogod.
U.i.2.: Ha nem akarod mindig a forwardot és a publicot is kiírni:
 
#define Fgv:%0(%1) forward %0(%1); public %0(%1)

 
És akkor csak így használod:
 
Fgv:JatekosAdatBetoltott(playerid) {
//...
    return 1;
}
« Utoljára szerkesztve: 2014. június 08. - 17:03:09 írta KovaNovik »

Nem elérhető AnthonyGates

  • 546
  • AnthonyGates
    • Profil megtekintése
Melyiket válasszam?
« Válasz #4 Dátum: 2014. június 07. - 22:54:30 »
0 Show voters
Üdv! Középhaladó scripter vagyok, most egy új, lõdözõs modot készítenék. Kérdésem lenne:
Melyik parancsfeldolgozót használjam?
Milyen módon tároljam az adatokat? Fájlalapon szeretném, melyik a legmegbíhatóbb módszer?
« Utoljára szerkesztve: 2014. június 08. - 11:52:11 írta Flash »

Nem elérhető Pedró

  • 3341
  • 2014 © Az év Szkriptere
    • Profil megtekintése
Melyiket válasszam?
« Válasz #5 Dátum: 2014. június 07. - 23:05:57 »
0 Show voters
ZCMD
dfile, vagy esetleg MySQL (de az nem helyi-fájl-alapú)

Nem elérhető AnthonyGates

  • 546
  • AnthonyGates
    • Profil megtekintése
Melyiket válasszam?
« Válasz #6 Dátum: 2014. június 07. - 23:14:34 »
0 Show voters
Tudom, hogy az SQL lenne a legmegfelelõbb, viszont sampban valamiért nem hajlandó együtt dolgozni velem. PHPban semmi baj.

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
Melyiket válasszam?
« Válasz #7 Dátum: 2014. június 08. - 11:20:52 »
0 Show voters
Parancsfeldolgozónak YCMD. Azzal parancsonként megadhatod a hozzá tartozó segítséget, szóval a helpnél mindig csak pár sor lesz mindem parancsot kiíratni. Rengeteg plusz funkciója van, és gyorsabb is a ZCMD-nél.
Mentéshez pedig MySQL. Ha most kezded (legalábbis pawnban), az R38-al tedd.
Ennek a futásához kell ez a pakk: http://www.microsoft.com/en-us/download/details.aspx?id=30679
Ha 32 bites a Windowsod, csak az x86-osat tedd fel, ha 64 bites, elõször az x86-osat, majd az x64-eset. A honlapon ki lehet választani melyiket szeretnéd. Rendszergazdaként kell futtatni!
Ha - a legtöbb hosthoz hasonlóan - linuxod van, és nem akarod a libek telepítésével piszkálni a konfigost (amit ugye csak õ, mint root tud megtenni), használd a mysql_static.so fájlt.
A legmegfelelõbb plugint innen szedheted le: https://github.com/pBlueG/SA-MP-MySQL/releases
Röviden annyi, hogy létrehozol egy globális változót, mondjuk
new Kapcs;

 és egyet, hogy a késõbb formázott queryket tároljuk. Pl. Mindig a játékos nevét formázzuk ebbe. Tehát:
 
new Kapcs, query[500];

 
OnGameModeInit-hez megadod, hogy az Kapcs változó értéke az legyen, ami a csatlakozásod (mysql adatbázissal való kapcsolatod) id-je. Ez azért kell, mert ez a verzió több kapcsolatot is támogat, akár használod, akár nem.
 
Kapcs = mysql_connect(...)

 
Az ilyeneket ki lehet lesni wikirõl.
Ami még fontos: OnGameModeExit-nél (miután mindent mentettünk persze) le kell zárni a kapcsolatot, mert a microsoft sz*rján keresztül tovább futna a kapcsolat, ami a következõ indításnál hibákat okozhat.
 
mysql_close(Kapcs);

 
Most jön a fõ rész, a query!
A queryk közül 2 használatos: query, tquery.
A query lefut, és rögtön utána lehet lekérni dolgokat. Ezt már kevésbé használják, mert laggoltathatja a szervert, mert nem külön szálon fut, nekem speciel van, hogy le sem kéri teljesen, már ugrik tovább (0-s adatokat használ, meg töktudja. Figyelem! A query után nem kell lekérni az eredményt (mint r6-ban, rögtön lehet mysql_fetch_field_content_intet használni, ami azt hiszem oszlopnévre  és sorra kérdezi le a dolgot, a másik meg oszlop-és sorszámra (ez ciklusoknál hasznos.
A mysql tquery. Ez azért jó, mert valahogyan külön szálon futtatja le a queryt, így pár tized milliszekundum (!) (pl. 0.560 ms) alatt lefut egy hosszabb query is! Miben más? Abban, hogy, ha el akarjuk tárolni az eredményt, meg kell adni neki egy eljárást, ahol meglegyen az eredmény, szabadon lekérdezgethetünk, ilyesmi, nem kell free_result. Példa, mikor kell eljárás, mikor nem:
Itt nem kellett plusz eljárás, mert miután beállította a pénzét 1500-ra, konkrétan (majdnem) lesz*rhatjuk, milyen eredményt dobott vissza.
 
new nev[25];
GetPlayerName(playerid, nev, sizeof(nev));
format(query, 150, \"UPDATE jatekosok SET Penz = \'1500\' WHERE Nev = \'%s\'\", nev);
mysql_tquery(Kapcs, query);

 
Itt pedig kell, mert a lekért adatokat fel szeretnénk használni:
 
//...
format(query, 150, \"SELECT * FROM jatekosok WHERE Nev = \'%s\'\", nev);
mysql_tquery(Kapcs, query, \"JatekosAdatBetoltott\", \"d\", playerid);
forward JatekosAdatBetoltott(playerid);
public JatekosAdatBetoltott(playerid) {
if(!cache_num_rows()) //nincs regisztrálva
else //regisztrálva van
return 1;
}

 
Még kitérnék a mysql_formatra: ez hasonló a formathoz, csak bele lehet formázni escapelt stringeket is (%s helyett %e), amit gondolom tudsz, micsoda, ha már php-ben használtad. Megakadályozza az SQL injectiont.
 
mysql_format(Kapcs, query, 256, \"SELECT * from jatekosok WHERE Nev = %s AND Jelszo = SHA1(\'%e\')\");

 
Így, ha jelszóhoz olyat ír, azt átírja másra, így a rendszered biztonságban lesz.
Hogy kell adatokat lekérni kiválasztás után?
Ezekre a wiki azt mondja, valami cachet aktiválni kell hozzá, érdekes, én csak simán használom, és gyors is, jó is, nem is dob a logba warningot (pedig log_all-ra van téve).
Sor- és oszlopszám alapján:
cache_get_row
cache_get_row_int
cache_get_row_float
Sorszám és oszlopnév alapján:
cache_get_field_content
cache_get_field_content_int
cache_get_field_content_float
Ha valami nagyon máshogy volt PHP-ban, és nem jól magyaráztam, itt lesz egy kis segítség: http://wiki.sa-mp.com/wiki/MySQL/R33#Cache_functions
Egyelõre ennyi. Sok szerencsét, további jó scriptelést! A hibákért elõre is elnézést kívánok, telefonról voltam. =)
U.i.: ha PHP-ban értetted, itt is fogod.
U.i.2.: Ha nem akarod mindig a forwardot és a publicot is kiírni:
 
#define Fgv:%0(%1) forward %0(%1); public %0(%1)

 
És akkor csak így használod:
 
Fgv:JatekosAdatBetoltott(playerid) {
//...
    return 1;
}
« Utoljára szerkesztve: 2014. június 08. - 17:03:09 írta KovaNovik »

Nem elérhető Awide

Melyiket válasszam?
« Válasz #8 Dátum: 2014. június 12. - 13:20:00 »
0 Show voters
Tároláshoz az Y_Ini-t vagy dof2-t tudom ajánlani, õk egyenlõre a leggyorsabbak, amennyira én tudom.

Melyiket válasszam?
« Válasz #9 Dátum: 2014. június 12. - 18:52:00 »
0 Show voters
gyerekek.. SQLite? mi a f@sznak van a SAMPban ha senki nem használja?? :O
ha egy géprõl fut a szervereddel, akkor PHPban is tudod használni.. >.>

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
Melyiket válasszam?
« Válasz #10 Dátum: 2014. június 25. - 22:46:03 »
0 Show voters
Minek van a sampban a kocsi streamer, ha csak akadályoz? Minek van a sampban fájlkezelõ, ha lassú és használhatatlanul bugos?

Melyiket válasszam?
« Válasz #11 Dátum: 2014. július 04. - 01:25:12 »
0 Show voters
Idézetet írta: KovaNovik date=1403729163\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"48629\" data-ipsquote-contentclass=\"forums_Topic
Minek van a sampban a kocsi streamer, ha csak akadályoz? Minek van a sampban fájlkezelõ, ha lassú és használhatatlanul bugos?
 
kíváncsi lennék Te hogy târolnád a fájlokat az alap filekezelõ nélkül

Melyiket válasszam?
« Válasz #12 Dátum: 2014. július 04. - 06:50:16 »
0 Show voters
Off:
 
 lõdözõs

 

legmegbíhatóbb

 
..

Melyiket válasszam?
« Válasz #13 Dátum: 2014. július 04. - 07:25:10 »
0 Show voters
Spoiler for OFF:

Idézetet írta: DragonSoul date=1404449416\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"48629\" data-ipsquote-contentclass=\"forums_Topic
Off:
 
 lõdözõs

 

legmegbíhatóbb

 
..
 
jólvanna. ilyeneket illik spoiler tagbe rakni.  amúgy igen, lõdözõs: www.goo.gl/17im2j

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal