Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

[ PAMOKA ] mySQL TOP žaidėjų sistemos kūrimas.


sancio

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3792 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki, taigi kaip iš temos pavadinimo matot šiandien aš jus pamokinsiu kūrti TOP sistemą su mySQL pagalbą. :)

P.S Senai neesu dirbęs su PAWN tad jei rasite klaidų rašykit į temą, dėkis: )

VISKAS VEIKIA TIK SU R5 , R6 mySQL PLUGINAIS.

Pradėsim.

Taigi pirmą, reikės susikūrti mums komandą /top :)

ZCMD :

CMD:top ( playerid ) // Susikūriam komandą, 'playerid' reikalingas, nes naudosim dialogo rodymui 
{
ShowPlayerDialog ( playerid , 1 , DIALOG_STYLE_LIST , "{ffffff}TOP {ffcc00}SISTEMA" , "TOP 10 Žaidėjų pagal litus" , "Rinktis" , "Uždaryti" ) ; // Parodom GUI su TOP pasirinkimu.
return 1;
}

STRCMP :

P.S Šia komandą, dėti po OnPlayerCommandText callbacko.

if ( !strcmp ( cmdtext , "/top" , true , 3 ) ) // Susikūriam komandą, 'playerid' reikalingas, nes naudosim dialogo rodymui 
{
ShowPlayerDialog ( playerid , 1 , DIALOG_STYLE_LIST , "{ffffff}TOP {ffcc00}SISTEMA" , "TOP 10 Žaidėjų pagal litus" , "Rinktis" , "Uždaryti" ) ; // Parodom GUI su TOP pasirinkimu.
return 1;
}

P.SS. ten kur po playerid dialogo parodime "1" pakeiskite į savo dialog ID.

Dabar einam prie OnDialogResponse callbacko ir ten rašome.

if ( dialogid == nurodytasVirsujeID ) // tikrinam ar dialogid lygus to GUI ID'ui
{
if ( response ) // Jeigu paspaudė pirma mygtuką t.y "RINKTIS"
{
new
string [ 200 ],
string2 [ 300 ],
tempString [ 100 ],
tempVardas [ 30 ],
tempValue
eilesNR = 0
;
switch ( listitem ) // Padarom tikrinimą, kurį eilutė išrinko žaidėjas
{
case 0: { // Jeigu išrinko pirmą eilutė t.y eilutės ID 0
format ( string , sizeof ( string ) , "{ffffff}TOP {ffcc00}10 {ffffff}pagal {ffcc00}litus\n\n" ) ; // Įrašom į string tekstą.
mysql_query ( "SELECT * FROM jusuDB ORDER BY pinigai DESC LIMIT 10" ) ; // traukiam iš jūsų DB'o info. P.S ten kur jusuDb ir pinigai pakeiskit į savo.
mysql_store_result ( ) ; // įrašom info.
while ( mysql_fetch_row_format ( tempString ) ) // Traukiam 10 žaidėjų info pagal pinigus;
{
 eilesNR ++ ; // Pridėdame prie eilesNR 1
 mysql_fetch_field_row ( tempVardas , "Vardas" ) ; // Įrašome varda į tempVardas stringą
 mysql_fetch_field_row ( tempValue , "Pinigai" ) ; // Įrašome pinigų skaič. į tempValue integer tipo stringą.
 new
 tempMoney = strval ( tempValue ) // formatuojam pinigus į integer tipą.
 ;
 format ( string2 , sizeof ( string2 ) , "\
 {ffffff}%d.{ffcc00}%s {ffffff}%d,00 LT\n" , eilesNR , tempVardas , tempMoney ) ; // formatojam GUI tekstą.
 strcat ( string , string2 , sizeof ( string ) ) ; // pridėdame prie string visa suformatuotą tekstą.
}
ShowPlayerDialog ( playerid , 2 , DIALOG_STYLE_MSGBOX , "TOP 10" , string , "Uždaryti" , "" ) ; // parodom langą.
mysql_free_result ( ) ; // nulinam INFO.
}
}
}

SĖKMĖS KŪRIME. Jeigu yra klaidų rašykėt :).

© SanCio` 2013.

Redaguota , nario sancio
Nuoroda į komentarą
Dalintis per kitą puslapį

Gal dialogid parinkti nekokie, nes visi GRP verks kad nesamonės vyksta.

Vienintelis dalykas ką pasiūlyčiau, tai vietoj "while" ciklo naudot "for", galima skaičiuoti iki "mysql_num_rows()" arba 10 kadangi nurodai "LIMIT 10". Bet tokiu atveju siūlyčiau vistiek skaičiuoti iki "mysql_num_rows()" jeigu būtų mažiau nei 10.

Kita smulkmena prie kurios prisikabinsiu tai kad paprastai lietuvių lentelės būna netvarkingos ir turi ~40 stulpelių, todėl šiuo atveju vertėtų rinktis ne viską.(Čia aišku ne pamokos klaida tik šiaip).

O bendrai, smagu žiūrėt kad kažkas žino bent kiek SQL kalbos, nes tiesą sakant nematau kad kasnors siųstų bent kiek sudėtingesnes užklausas...

EDIT:pridėjau į sąrašą.

Redaguota , nario Bebras
Nuoroda į komentarą
Dalintis per kitą puslapį

Gal dialogid parinkti nekokie, nes visi GRP verks kad nesamonės vyksta.

Vienintelis dalykas ką pasiūlyčiau, tai vietoj "while" ciklo naudot "for", galima skaičiuoti iki "mysql_num_rows()" arba 10 kadangi nurodai "LIMIT 10". Bet tokiu atveju siūlyčiau vistiek skaičiuoti iki "mysql_num_rows()" jeigu būtų mažiau nei 10.

Kita smulkmena prie kurios prisikabinsiu tai kad paprastai lietuvių lentelės būna netvarkingos ir turi ~40 stulpelių, todėl šiuo atveju vertėtų rinktis ne viską.(Čia aišku ne pamokos klaida tik šiaip).

O bendrai, smagu žiūrėt kad kažkas žino bent kiek SQL kalbos, nes tiesą sakant nematau kad kasnors siųstų bent kiek sudėtingesnes užklausas...

EDIT:pridėjau į sąrašą.

:D Na taip ir maniau kad prisikabinsi. Neesu jau dirbęs daug laiko su PAWN, nes nebesidomiu skriptingu: D Kad čia easy užklausą yra, teisiog aš dirbu tarp web-programingo, ir reikia daug daug sudetingesniu užklausų negu čia. :)

Nuoroda į komentarą
Dalintis per kitą puslapį

O kodėl nenaudoji while(mysql_retrieve_row())?

Nes mysql_retrieve_row tik "internal pointeri" patraukia. O mysq_fetch_row_format dar jau paima visą eilutę.

Aš kalbu kad sudėtinga užklausa Lietuvos samp pasaulio standartais :)

Pats pradėjau gilintis į SQL. Kuo toliau tuo geresnių dalykų atrandu, paskutinysis buvo "Trigeriai" :)

Nuoroda į komentarą
Dalintis per kitą puslapį

Nes mysql_retrieve_row tik "internal pointeri" patraukia. O mysq_fetch_row_format dar jau paima visą eilutę.

Aš kalbu kad sudėtinga užklausa Lietuvos samp pasaulio standartais :)

Pats pradėjau gilintis į SQL. Kuo toliau tuo geresnių dalykų atrandu, paskutinysis buvo "Trigeriai" :)

Uuh "Triggeriai" geras dalykas :) Sėkmės.

Lietuviškai gali?

Jis norėjo pasakyti kad mysql_retrieve_row netraukia pilnos eilutės kiek pamenu, o mysql_fetch_row_format traukia pilną eilutė.

Nuoroda į komentarą
Dalintis per kitą puslapį

Nėra labai jau sunku, tačiau gerai, kad yra tokia pamoka. Man rodos galėjai kintamuosius į vieną eilę sudėti, o ne į apačią, kažkaip netaip žiūrisi ;x

SG'as supiso lygiavima visa :D Į viena eilę nededu, nes man tada sunkiau skaityti kodą. Čia mano lygiavimo stilius.

Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3792 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...