Jump to content
  • 0

pomoc Kdy byl naposled online


Pavel Tuček

Dotaz

Zdravím,

mám udelanej system, že když se hráč odpojí, tak se uloží jeho gettime() . Já bych ted potřeboval, jak vypočítat z toho času, kdy byl naposled online. Napr. "Naposled online před 2 dny." nebo "Naposled online před 48 hod."

Edited by Pavel Tuček
Link to comment
Share on other sites

14 odpovědí na tuto otázku

Recommended Posts

  • 0
  • Globální moderátor

Načíst aktuální gettime, tzn. dostaneš nějakej ten unixovej timestamp a odečteš hodnotu kdy se odpojil. Z toho akorát vypočítáš kolik dní/hodin/minut/sekund uběhlo a vyformatuješ do "Naposled online před %s", kde %s bude řetězec skládající se z čísla a formu času.

Link to comment
Share on other sites

  • 0
  • Globální moderátor

Tak pro jednoduchost, máš 48600 sekund. Víš že hodina má 60*60s = 3600s.

 

Na hodiny převedeš tak, že vydělíš 48600/3600 = 13h

Na minuty by to bylo 48600/60 = 810min

 

Těch možností je spoustu, je na tobě jak si vybereš, která varianta se ti píše nejlépe. Klidně si udělej množinu units s časy a vzít ho cyklem nebo rozvětvením ifů

 

 

EDIT:

 

if ( rozdil > 3600 ) string = rozdil/3600 hodiny

if ( rozdil < 3600 ) string = rozdil/60 minuty

if ( rozdil < 60)  string = rozdil sekundy

 

Nebo

 

mnozina[][] = { 

{ 3600, "hodiny" },

{ 60, "minuty" },

{ 1 , "sekundy" }};

 

for( i = 0; i < sizeof(mnozina) ; i++ )

     if(rozdil < mnozina[1]) continue;

     cas = rozdil/mnozina[1];

     strins(date,mnozina[2]); // tímhle si nejsem jistej a každopádně stejně je tenhle blok spíše takovej pseudo pseudo-kódu

     break;

}

 

a pak vypsat string = cas date.

 

 

Čeština má nevýhodu v tom, že má skloňování. Tudíž jestli to chceš mít hezky, tak budeš ještě muset vyformátovat. 

Edited by HighPrint
Link to comment
Share on other sites

  • 0
  • Globální moderátor

Máš už to upravený na datový typ Float?

 

+ nech si vypsat gettime() a ten Offline a postni to sem

 

 

edit:// co já si pamatuju, tak to v pawn se řeší samo... asi jsem se mýlil

Edited by HighPrint
Link to comment
Share on other sites

  • 0

sice si tam muzes dat datovy typ float. ale dokud delis cele cislo celym vzdycky ti to hodi cele cislo

new Float:cas = floatmul(floatdiv(gettime()-dini_Int(file,"Offline"),3600*60),24);

predpoklaam ze setim 0.00 snazis aby si v tom 00 mel minuty ale musis myslet nato ze hodiny maji 60 minutovej system zato integer pracuje s desitkovou soustavou.

Edited by ATomas
Link to comment
Share on other sites

  • 0

sice si tam muzes dat datovy typ float. ale dokud delis cele cislo celym vzdycky ti to hodi cele cislo

new Float:cas = floatmul(floatdiv(gettime()-dini_Int(file,"Offline"),3600*60),24);
predpoklaam ze setim 0.00 snazis aby si v tom 00 mel minuty ale musis myslet nato ze hodiny maji 60 minutovej system zato integer pracuje s desitkovou soustavou.

 

čiže keď dám 10/3 tak mi to hodí 3 a nemusím dávať float kvôli 3,33 periodických?

 

to je len príklad....keď by som dal 20/3 tak by to malo byť 6.66...vráti mi to 6 alebo 7? kedže 6 sa zaokrúhľuje hore

Link to comment
Share on other sites

  • 0

proč místo složitého konvertování gettime(); si proste neuložíš při disconnectu getdate(); ano sice to máš dva řádky do souboru navíc ale máš to zjednodušení o to nepříjemné(pro mě nepříjemné :d ) konvertování gettime(); :)

Link to comment
Share on other sites

  • 0

proč místo složitého konvertování gettime(); si proste neuložíš při disconnectu getdate(); ano sice to máš dva řádky do souboru navíc ale máš to zjednodušení o to nepříjemné(pro mě nepříjemné :d ) konvertování gettime(); :)

A co je na tom prijemnejsiho ? Potom nasledne budes slozite pocitat s nekolika cisly naraz, aby jsi zjistil kdy byl vlastne online (nechce "razitko casu", ale spocitat jak 'dlouho'), zde je unix time asi nejlepsi metodou. Jediny problem ktery on ma je matematika, myslenka je spravna :d

Link to comment
Share on other sites

  • 0
  • Globální moderátor

čiže keď dám 10/3 tak mi to hodí 3 a nemusím dávať float kvôli 3,33 periodických?

 

to je len príklad....keď by som dal 20/3 tak by to malo byť 6.66...vráti mi to 6 alebo 7? kedže 6 sa zaokrúhľuje hore

 

Vždy se zaokruhluje dolů.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...