Pagrindinis diskusijų puslapis Grand Theft Auto multiplayer Pamokos SA-MP Laiko žymės arba UNIX TIMESTAMP naudojimas

Laiko žymės arba UNIX TIMESTAMP naudojimas

Pamokos sa-mp modifikacijai. Serverio kūrimo pamokos, skriptai.
Standartinė Lapkritis 20th, 2011, 6:25 pm
GuitarHero Vartotojo avataras
Didelis žinovas
Didelis žinovas

Pranešimai: 699
Miestas: Šiauliai
Padėkojo: 5 kartus
Gavo padėkų: 50 kartus
Skype: guitarherolt
Mano serveris: Kuriamas.
Atsiliepimai: 38
Pradžiai

Sveiki, šiame support'e esu jau kurį laiką ir manau jau pats metas parašyti kokią nors retesnę pamoką :). Pirmoji mano pamoka yra apie laiko žymes/skales, kitaip dar vadinamas UNIX TIMESTAMPS. Tačiau viskas iš pradžių.

1. Kas yra UNIX TIMESTAMP?

UNIX TIMESTAMP yra laiko trukmė nuo 1970 m. sausio 1 d. iki 2038 m. sausio 19 d. UNIX TIMESTAMP yra sveikasis skaičius (angl. integer), kuris nurodo kiek praėjo sekundžių nuo 1970 m. sausio 1d. Daugelis SA:MP skripterių, ypač lietuvių, naudoja kur kas sunkesnius būdus talpinant datą (pvz.: išsaugoja metus, mėnesius, dienas, valandas, minutes ir sekundes atskirai), todėl jų skriptai tampa, kur kas labiau apkrauti, nei būtų naudojant vieną UNIX TIMESTAMP. UNIX TIMESTAMP atrodo taip: 1320404821.

2. Kada naudoti UNIX TIMESTAMP?

Mano nuomone, UNIX TIMESTAMP geriausiai naudoti visose situacijose, kur naudojate datas. Pavyzdžiui, norite sukurti VIP'ą, kuris galiotų parą/savaitę/mėnesį. Situacijų, kuriose ši naudinga funkcija gali būti panaudota yra begalė, tereikia šiek tiek išradingumo. Aš asmeniškai UNIX TIMESTAMP naudoju ir registracijos bei prisijungimo datoms, kurias atvaizduoju tinklalapyje, nes šis būdas daug paprastesnis.

3. Kaip išgauti UNIX TIMESTAMP PAWN skripte?

Turbūt kiekvienas žinote funkciją, kurią naudojate išgaunant valandas, minutes ir sekundes:
gettime( &hour, &minute, &second );
Todėl norėdami išgauti UNIX TIMESTAMP naudokite šią funkciją, tik be parametrų:
new
    timestamp = gettime( );
Dabar kintamąjame bus įrašyta šio momento data ir laikas, kuri bus panaši į 1320404821.

4. Kaip prie UNIX TIMESTAMP pridėti, kurį nors laiko tarpą?

Kaip ir anksčiau minėjau UNIX TIMESTAMP yra sveikasis skaičius (angl. integer) ir jame nurodomas laiko tarpas sekundėmis, todėl mes su juo galime atlikti įvairius skaičiavimus. Todėl kiekvieną laiko tarpą turime pasiversti sekundėmis:

  • 1 minutė: 60 * 1 = 60 sek.
  • 15 minučių: 60 * 15 = 900 sek.
  • 1 valanda: 60 * 60 = 3600 sek.
  • 24 valandos (para): 60 * 60 * 24 = 86400 sek.
  • 1 savaitė: 60 * 60 * 24 * 7 = 604800 sek.
  • 1 mėnuo: 60 * 60 * 24 * 30 = 2592000 sek.
  • 1 metai: 60 * 60 * 24 * 365 = 31536000 sek.

Pavyzdžiui, žaidėjas nusiperka VIP'ą kuris galioja 1 mėnesį:
new
    galioja = gettime( ) + 2592000; // Prie šiandien dienos pridedame 1 mėnesį


5. Kaip iššifruoti UNIX TIMESTAMP?

Šis punktas yra juodoji šios funkcijos pusė. PAWN kalboje iššifravimo funkcijos nėra. Tačiau tai nesumažina UNIX TIMESTAMP patogumo, nes atvejų, kai reikia iššifruoti UNIX TIMESTAMP pačiame serveryje yra labai mažai, nebent norite žaidėjo statistikoje rodyti datą, kiek jam galioja VIP ir panašiai. Bet jei jūsų serveris turi tinklalapį, tuomet ten nesunkiai galite iššifruoti UNIX TIMESTAMP, nes PHP programavimo kalboje yra date( ) funkcija.

Pavyzdys:
<?php
    date( "Y-m-d G:i:s", $timestamp ); // Atvaizduos 2011-04-17 21:15:41 tipo datą
?>


6. Kaip naudoti UNIX TIMESTAMP su MySQL?

Visas naudojimas išlieka tas pats, tačiau jei norite į duomenų bazę įrašyti datą UNIX TIMESTAMP tipo, jums nebereikia naudoti gettime( ) funkcijos, nes MySQL turi UNIX_TIMESTAMP( ) parametrą.

Pavyzdys:
new
    sql[ 128 ];

format     ( sql, sizeof ( sql ), "INSERT INTO `bans` (`name`, `id`, `date`, `expire`) VALUES ('%s', %d, UNIX_TIMESTAMP( ), UNIX_TIMESTAMP( ) + 604800 )", name, id );
mysql_query( sql );


Ši užklausa:
  • Į `date` laukelį įrašys datą, kada žaidėjas buvo užblokuotas.
  • Į `expire` laukelį įrašys datą, kada žaidėjas bus atblokuotas (po 1 savaitės).

7. Kaip lyginti vieną UNIX TIMESTAMP su kitu?

UNIX TIMESTAMP yra sveikieji skaičiai, todėl tikrindami galime naudoti >, <, >=, <= veiksmus.

Pavyzdys, kuriame tikriname blokavimo galiojimo laiką:
new
    sql[ 128 ];

format     ( sql, sizeof ( sql ), "SELECT `expire` FROM `bans` WHERE `id` = %d", id );
mysql_query( sql );

mysql_store_result( );

new
    expire = mysql_fetch_int( );

mysql_free_result( );

if ( gettime( ) > expire )
{
    // Jei jau praėjo nurodytas laikas - atblokuojame
}


Pabaigai
Pamoką, kuriau išsamią, todėl nesiskūskit, kad per ilga, o jei kas neaišku - klauskit. Laukiu pastabų, nuomonių, komentarų. Laukit kitų mano pamokų. :D


Už šią žinutę autorius GuitarHero gavo padėkojimą:
svedas (Lapkritis 20th, 2011, 9:40 pm)
Vertinimas: 11.11%
 

Reklama

Standartinė Lapkritis 20th, 2011, 6:27 pm
juraska Vartotojo avataras
GTA-support.lt komanda

Pranešimai: 1320
Miestas: Šilalė
Padėkojo: 28 kartus
Gavo padėkų: 44 kartus
Skype: dovydasjuraska
Atsiliepimai: 29

Great pamoka.

Standartinė Lapkritis 20th, 2011, 6:30 pm
svedas Vartotojo avataras
GTA-support.lt komanda

Pranešimai: 3866
Padėkojo: 36 kartus
Gavo padėkų: 145 kartus
Skype: svedas01
Mano serveris: reallife:7777
Atsiliepimai: 19

Neblogai :)


Standartinė Lapkritis 20th, 2011, 7:21 pm
GuitarHero Vartotojo avataras
Didelis žinovas
Didelis žinovas

Pranešimai: 699
Miestas: Šiauliai
Padėkojo: 5 kartus
Gavo padėkų: 50 kartus
Skype: guitarherolt
Mano serveris: Kuriamas.
Atsiliepimai: 38

Standartinė Lapkritis 20th, 2011, 7:34 pm
HsB` Vartotojo avataras
Skripteris
Skripteris

Pranešimai: 404
Padėkojo: 16 kartus
Gavo padėkų: 9 kartus
Skype: Arnoldas.Zeimis
Mano serveris: Kuriamas
Atsiliepimai: 7
Man atrodo,akd šis dalykas turėtu but tarp Resursų :)

Standartinė Lapkritis 20th, 2011, 7:36 pm
GuitarHero Vartotojo avataras
Didelis žinovas
Didelis žinovas

Pranešimai: 699
Miestas: Šiauliai
Padėkojo: 5 kartus
Gavo padėkų: 50 kartus
Skype: guitarherolt
Mano serveris: Kuriamas.
Atsiliepimai: 38
HsB` rašė:
Man atrodo,akd šis dalykas turėtu but tarp Resursų :)

O man taip neatrodo...

Standartinė Lapkritis 20th, 2011, 8:32 pm
Stuneris Vartotojo avataras
Forumo Dievas
Forumo Dievas

Pranešimai: 1403
Padėkojo: 0 kartą
Gavo padėkų: 109 kartus
Skype: kristupas19
Atsiliepimai: 12

O man atrodo, kad google vertėjas padirbėjo :D

Standartinė Lapkritis 20th, 2011, 9:36 pm
GuitarHero Vartotojo avataras
Didelis žinovas
Didelis žinovas

Pranešimai: 699
Miestas: Šiauliai
Padėkojo: 5 kartus
Gavo padėkų: 50 kartus
Skype: guitarherolt
Mano serveris: Kuriamas.
Atsiliepimai: 38
Stuneri, rask lygiai tokia pat pamoka duosiu atsiliepima. :D O jei kalbi apie sa-mp.com forume esancia, tai si tik siek tiek panasi, nes kalba vis gi eina apie ta pati. :)



  • Reklama

Grįžti į SA-MP