Szerző Téma: Játsszott óra  (Megtekintve 4044 alkalommal)

Játsszott óra
« Dátum: 2016. június 25. - 23:29:45 »
0 Show voters
Sziasztok, így unalomból este elszeretném magyarázni azoknak az embereknek a játsszott óra kódját akik szeretnének csinálni, vagy valami problémát jelez nekik
Legelső sorban létrehozzuk ugye az enumban a kellékeket meg a regisztrációnál, meg ennél annál, hogy a játsszott órát elmentse
Azután pedig létrehozunk egy változót mindenki számára
 
new HourTimer[MAX_PLAYERS];

 
Ezután létrehozunk egy timert az onplayerspawn alá
 
HourTimer[playerid] = SetTimerEx(\"HourJump\", 1000, true, \"i\", playerid);

 
Amint látjátok ott van a HourJump, nos ennek kell egy public, ugyanis, mellette van az 1000, ami 1 másodpercet jelent, és hát ugye másodpercenként fogja használni a publicot, csináljunk is neki egy publicot forwarddal együtt
 

forward HourJump(playerid);
public HourJump(playerid)

 
Na most mint említettem a publicot 1 másodpercenként fogja használni, ugye mi az enumnál 3 adatot adtunk meg plusszba, az órát, a percet és a másodpercet, na amikor letellik ez az 1 másodperc akkor szépen a másodpercet megnöveljük
 

forward HourJump(playerid);
public HourJump(playerid)
{
JatekosInfo[playerid][MPerc] ++;
if(JatekosInfo[playerid][MPerc] == 60)
{
       JatekosInfo[playerid][Perc] ++;
       JatekosInfo[playerid][MPerc] = 0;
}
if(JatekosInfo[playerid][Perc] == 60)
{
       JatekosInfo[playerid][Ora] ++;
       JatekosInfo[playerid][Perc] = 0;
       new string[256];
       format(string, sizeof(string),\"Játsszott óráid száma mostmár %02d\", JatekosInfo[playerid][Ora]);
       return 1;
}

 
és aztán nagyon egyszerű dolgunk van, méghozzá ha meglesz a 60 másodperc akkor ugye a percet kell megduplázni, és a másodpercet lenullázni, és ha a 60 perc meglesz akkor ugyanígy
Aztán ugye már csak a timereket kell beállítani megfelelően, tehát pl. ne az onplayerconnecthez írjuk a timert, mert ha még be se lépsz akkor elindul és számolni fogja!Én az onplayerspawn-hoz teszem le, ha afkol a játékos akkor
 

KillTimer(HourTimer[playerid]);

 
aztán ugyan úgy vissza ha visszajött a játékos az afk-ból, és még egy, ha kilép a játékos akkor is legyen a killtimer mert tovább fogja számolni..
+ ha még a statsba akarod íratni a játsszott órákat akkor itt a kód hozzá
 

new string[256];
format(string, sizeof(string),\"Játsszott idő: %02d:%02d:%02d\", JatekosInfo[playerid][Ora], JatekosInfo[playerid][Perc], JatekosInfo[playerid][MPerc]);

 
Remélem tudtam segíteni a kezdőknek és nem volt felesleges amit írtam :)
« Utoljára szerkesztve: 2016. június 26. - 00:55:17 írta Broocean »

Játsszott óra
« Válasz #1 Dátum: 2016. június 26. - 13:11:29 »
+2 Show voters
Játszott óra kiszámításáért timert indítani teljesen felesleges. :D

Játsszott óra
« Válasz #2 Dátum: 2016. június 26. - 15:02:55 »
0 Show voters
Idézetet írta: 1ST_Chr date=1466939489\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"61008\" data-ipsquote-contentclass=\"forums_Topic
Játszott óra kiszámításáért timert indítani teljesen felesleges. :D
 
ez is egy módja a játsszott idő elmentésének, amúgy van ennél egyszerűbb is nehezebb is, én most ezt írtam

Dupla hozzászólás automatikusan összefûzve. ( 2016. június 26. - 15:06:28 )

Egyébként meg ha afkol a játékost és te szeretnéd, hogy afk-nál ne számolja, akk timer nélkül hogy állítod le a folyamatot?
« Utoljára szerkesztve: 2016. június 26. - 15:06:28 írta Broocean »

Játsszott óra
« Válasz #3 Dátum: 2016. június 26. - 15:15:20 »
+2 Show voters
Idézetet írta: Broocean date=1466946175\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"61008\" data-ipsquote-contentclass=\"forums_Topic
Egyébként meg ha afkol a játékost és te szeretnéd, hogy afk-nál ne számolja, akk timer nélkül hogy állítod le a folyamatot?
 
Ugyan úgy ahogy logintól disconnectig mérem meddig volt online, le tudom mérni afk kezdetétől a végéig az időt. Majd kivonom belőle. Nem kell diploma hozzá.

Játsszott óra
« Válasz #4 Dátum: 2016. június 26. - 15:24:56 »
0 Show voters
De timerrel könnyebben lehet kezelni és egyszerűbb sztem :D

Játsszott óra
« Válasz #5 Dátum: 2016. június 26. - 15:35:41 »
0 Show voters
Idézetet írta: Broocean date=1466947496\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"61008\" data-ipsquote-contentclass=\"forums_Topic
De timerrel könnyebben lehet kezelni és egyszerűbb sztem :D
 
Pazarlás :D
4 változó, 1 callback, 1 timer.
gettickcount, tickcount, gettime funkciókhoz elég 1 változó. Billentyűleütést és időt lehet megspórolni egy jobb módszerrel.
Valamint a samp timerek pontatlanok is :D És aki kezdő ne tanítson kezdőknek eleve rossz variációkat.
 

//login vagy connect:
LoginTime[playerid] = gettime();
//disconnect
printf(\"Online eltöltött idő: %d mp\", gettime() - LoginTime[playerid]);

Játsszott óra
« Válasz #6 Dátum: 2016. június 26. - 15:39:22 »
0 Show voters
Elmondanám, hogy nem pontatlanok mert nekem teljesen megfelelnek :\"D Egyébként meg ehhez nem kell olyan sok billentyűleütés, ennek a scriptnek a megírásához.. És azért publikáltam, mert nekem teljesen megfelelt ez a módszer és nem is laggolt semmi probléma nem volt vele, gondolom nektek is.. És azért ezt a módszert írtam mert még másikat nem ismerek.
És hiába mondod, hogy rossz csak teszteld és meglátod, hogy nem pontatlan :P

Játsszott óra
« Válasz #7 Dátum: 2016. június 26. - 15:42:16 »
0 Show voters
Idézetet írta: Broocean date=1466948362\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"61008\" data-ipsquote-contentclass=\"forums_Topic
Elmondanám, hogy nem pontatlanok mert nekem teljesen megfelelnek :\"D Egyébként meg ehhez nem kell olyan sok billentyűleütés, ennek a scriptnek a megírásához.. És azért publikáltam, mert nekem teljesen megfelelt ez a módszer és nem is laggolt semmi probléma nem volt vele, gondolom nektek is.. És azért ezt a módszert írtam mert még másikat nem ismerek.
És hiába mondod, hogy rossz csak teszteld és meglátod, hogy nem pontatlan :P
 
Te tudod :)
https://wiki.sa-mp.com/wiki/SetTimerEx
 
Timer intervals are not accurate (roughly 25% off).[/quote]

Játsszott óra
« Válasz #8 Dátum: 2016. június 26. - 15:43:06 »
+1 Show voters
A timerek pontatlanok, a gettime() függvény használata sokkal sorkímélőbb, és fejlettebb mint egy timeren belül számolni a játszott időt.
Ha 300 játékosnak lefut minden másodpercben egyszer a timer, vagy csak 60 másodpercenként is, az is okoz egy minimális loss-t, és leterheli a szervert, bár ez már inkább a soroktól függ, és a te játszott óra rendszeredet is le lehet egyszerűsíteni jóval.
Tanuld meg az unix-time használatát, hidd el sokat fog segíteni. :-[

Játsszott óra
« Válasz #9 Dátum: 2016. június 26. - 15:45:51 »
0 Show voters
Majd megtanulok más módszert is, de aztnem hinném, hogy még 50 játékos is lesz a szerveremen, nem hogy 300, egyébként nekem nem pontatlan a timer, valahogy megfelel de mind1

Játsszott óra
« Válasz #10 Dátum: 2016. június 26. - 16:03:18 »
+2 Show voters
A timer pontatlan, a wikipédián is írják, te nem veszed észre azt a 100-200ms-t, de ha tesztet csinálsz akkor észreveszed hogy ténylegesen jelen van.
Ha módot írsz, vagy scriptet, akkor ne úgy állj hozzá hogy \'nem lesznek annyian -> így nem lesz lag\', az emiteket ismerd meg, hogy hogyan kommunikál a szerver a klienssel, és rá jössz hogy miket rontottál el. Mindenre van egy alternatív megoldás, ami egy alapszintű tudást szükségeltet.
DE MINDEGY!  :D
:-[ :-[ :-[

Nem elérhető Pedró

  • 3341
  • 2014 © Az év Szkriptere
    • Profil megtekintése
Játsszott óra
« Válasz #11 Dátum: 2016. június 26. - 21:37:22 »
+5 Show voters
Hagyjátok esélytelen. Már próbálkoztam vele, de segg az egészhez.
Ajánlanám Broocean, hogy hagyd abba a scriptelést. Kezdő létedre nem hallgatsz a tapasztaltakra, te mindent jobban tudsz azt hiszed.

Játsszott óra
« Válasz #12 Dátum: 2016. június 27. - 17:50:14 »
0 Show voters
Miért hinném azt hogy az enyém jobb, egy szó sem volt erről. Egyébként tik meg egyből leszaroztátok ahelyett hogy őszintén megmondtátok volna, hogy ez így nem jó..

Játsszott óra
« Válasz #13 Dátum: 2016. június 27. - 18:14:22 »
+1 Show voters
Idézetet írta: Broocean date=1467042614\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"61008\" data-ipsquote-contentclass=\"forums_Topic
Miért hinném azt hogy az enyém jobb, egy szó sem volt erről. Egyébként tik meg egyből leszaroztátok ahelyett hogy őszintén megmondtátok volna, hogy ez így nem jó..
 
Ez nem így történt :D mindenki ŐSZINTÉN azt mondta, hogy \"ez így nem jó\". És van jobb megoldás. Senki sem szarozott le semmit

Játsszott óra
« Válasz #14 Dátum: 2016. június 27. - 19:12:02 »
0 Show voters
Nem azt mondtam hogy mindenki hanem Bendi és Pedró szépen leszarozta egyből.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal