Unix Time Stamp
Kas tai yra? Tai yra nuostabus dalykas. Jo esmė labai paprasta: jis skaičiuoja kiek sekundžių praėjo nuo 1970 metų sausio 1 dienos.
Šis stebuklas naudojamas daugelyje programų, mes, pawn kalboje taipat galime jį daug kur panaudoti.
Dar vienas įdomus dalykas, jis nustos skaičiuoti 2038 metų sausio 19 diena. Kas nutiks tada? Milijonai , o gal ir milijardai programų visame pasaulyje nustos veikti!
O kadangi laiko iki to turime dar daug, grižkime į Pawn pasaulį.
Pirmas klausimas tikriausiai bus, kaip jį išgauti, ar ne? Tam yra labai paprasta funkcija "gettime();", ji gražina sekundžių skaičių nuo minėtos datos.
PVZ:
new string[70]; format(string,sizeof(string),"Nuo 1970 metų sausio 1 dienos praėjo %d sekundžių",gettime()); SendClientMessage(playerid,0xFF0000FF,string);
Pavizdys viršuje neatrodo labai naudingas, ar ne?
Kyla klausimas ką galima naudingesnio padaryti su Unix Time Stamp. O atsakymas paprastas - bausmes. Tokias kaip ban ar jail. Pavizdys:
CMD:ban(playerid,params[]) { new tmp,tmp2; if(sscanf(params,"dd",tmp,tmp2)) SendClientMessage(playerid,0xFF0000FF,"Naudojimas /ban [zaidejo ID] [Laikas valandomis]"); else if(!IsPlayerConnected(playerid)) SendClientMessage(playerid,0xFF0000FF,"Neteisingas zaidejo ID"); else { new banlaikas,Vardas[MAX_PLAYER_NAME],query[80]; banlaikas = gettime() + tmp2 * 3600; // tmp2 dauginame kad paverstume valandas sekundemis /* o dabar jau priklauso nuo jusu saugojimo sistemos esme kad kintamajo "banlaikas" verte reikia kurnors irasyti */ GetPlayerName(tmp,Vardas,sizeof(Vardas)); format(query,sizeof(query),"INSERT INTO bausmes (Vardas, BausmesPabaiga) VALUES ('%s', %d)", Vardas,banlaikas); mysql_query(query); } return 1; }
Tai įrašys skaičių sekundžių kiek turi būti praėję sekundžių nuo 1970-jų kad žaidėjo bausmė baigtusi. Jeigu nesupratot,pavizdys:
public OnPlayerConnect(playerid) { new query[64]; new Vardas[MAX_PLAYER_NAME], laikas; GetPlayerName(playerid,Vardas,sizeof(Vardas)); format(query,sizeof(query),"SELECT BausmesPabaiga FROM bausmes WHERE Vardas = '%s'",Vardas); mysql_query(query); mysql_store_result(); if(mysql_num_rows() != 0) { laikas= mysql_fetch_int(); if(laikas<=gettime()) { // Visa magija sitoje eiluteje. Jeigu siuometu laikas yra mazesnis negu nustateme banindami, ismetame ji lauk SendClientMessage(playerid,0xFF0000FF,"Gavai bana, eik miegot"); Kick(playerid); } } return 1; }
Gal pavizdys tiem kas nemoka MySQL ir nelabai aiškus, bet svarbiausia eilute pakomentavau, o šiaip nematau jokios kliuties kad tai neveiktų su betkokia kita saugojimo sistema.
Apibendrinimas:
Unix Time Stamp galima naudoti banams, kalėjimo laikui, laikiniems VIP ir pnš.
Naudojimas trumpai:
- Nustatome bausmės/vip nuėmimo laiką prie gettime() pridėdami norima laiką
- Tikriname ar dabartinis laikas nėra didesnis ar lygus nustatytam laikui