Szerző Téma: Timerek nem állnak le  (Megtekintve 2632 alkalommal)

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Timerek nem állnak le
« Dátum: 2014. április 27. - 15:27:21 »
0 Show voters
Sziasztok!
Amikor valaki kicrashel,vagy csak valamiért nem rendeltetésszerûen lép ki,a timerek nem állnak le valamiért,és ezután belép egy játékos,kétszer olyan gyorsan telik az idõ számára.
Nem tudom,hogy ez csak a haverommal fordul elõ,vagy csak a többiek nem jelentik,de elég idegesítõ.

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Timerek nem állnak le
« Válasz #1 Dátum: 2014. április 27. - 15:32:32 »
0 Show voters

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Timerek nem állnak le
« Válasz #2 Dátum: 2014. április 27. - 15:34:53 »
0 Show voters
Az leáll.De csak akkor ha disconectel a játékos.És úgy látszik,hogy néha nem fut le.

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Timerek nem állnak le
« Válasz #3 Dátum: 2014. április 27. - 15:37:39 »
0 Show voters
Idézetet írta: Flash date=1398605552\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"47926\" data-ipsquote-contentclass=\"forums_Topic
Kódok?
 

Timerek nem állnak le
« Válasz #4 Dátum: 2014. április 27. - 16:02:36 »
0 Show voters
Talán azért mert nem SetTimerEx függvényt kellene használni vagyis én nem ajánlanám pont erre a célra.
Hanem inkább úgy kellene megcsinálni, hogy létrehozni egy idõzítõt, és ciklussal végigmennél az összes játékoson, és akkor nem lenne ilyen probléma.
Nem kell elindítani egy újabb idõzítõt és leállítgatni, elég egy darab ilyen célokra.
foreach.inc szükséges!
 
public OnGameModeInit()
{
SetTimer(\"OsszesJatekos\",1000,true);
return 1;
}
forward OsszesJatekos();
public OsszesJatekos()
{
foreach(new i;Player) //végigmegyünk az összes játékoson
{
new asd = GetPlayerVehicleID(i); // stb..  játékos idõ számlálása stb
}
}

 
[mod]Javítottam pawn code tagre![/mod]
« Utoljára szerkesztve: 2014. április 27. - 16:09:01 írta Dfoglalo »

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Timerek nem állnak le
« Válasz #5 Dátum: 2014. április 27. - 16:23:23 »
0 Show voters
Adj a timernek egy változót, és úgy killtimerezz!
 
new timer;
public OnGameModeInit()
{
        timer = SetTimer(\"OsszesJatekos\",1000,true);
        return 1;
}

 
És ahol megszeretnéd állítani:
 
KillTimer(timer);

Timerek nem állnak le
« Válasz #6 Dátum: 2014. április 27. - 16:40:05 »
0 Show voters
Gondolom a szerveredhez kell. Én úgy csinálom a timereket, ha be van jelentkezve a játékos, akkor mindig elindul egy nem ismétlõdõ timer. Így a disconnect-nél csak a bejelentkezést kell eltávolítani és megáll a timer teljesen.

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Timerek nem állnak le
« Válasz #7 Dátum: 2014. április 27. - 17:54:17 »
0 Show voters
Szóval egy timerrel nézed,hogy ha online,akkor elindítson egy timert? :D
Ui.: Igen tudom,hogy változókkal kell stb,meg le is állítom stb stb stb. Nem emiatt lesz a hiba.

Timerek nem állnak le
« Válasz #8 Dátum: 2014. április 28. - 22:56:53 »
0 Show voters
Ha játékosonként tárolod egy elindított idõzítõ azonosítóját mondjuk így:
 
new timer[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
    timer[playerid] = SetTimer.........
    ....

 
Akkor a változó továbbra is tárolni fogja az elindított timer azonosító számát akkor is ha a játékos kifagy vagy crashel.
Ebbõl kiindulva le lehet állítani akkor is ha egy új játékos fellép a szerverre gyakorlatilag a helyére (ugyanazt az id-t kapja meg amelyik a kifagyott játékosé volt.
Persze azt nem tudni hogy a samp programozója ezt hogyan kezeli hogy idõzítõ azonosításra újra felhasznál-e olyan értéket amit korábban leállításra került, ezért biztonságra törekedve meglehet határozni egy értéket ami azt jelenti hogy az idõzítõ leállításra vagy egyáltalán nem is lett elindítva, ami lehetne mondjuk a -1.
 
new timer[MAX_PLAYERS] = { -1, ... };
public
OnPlayerConnect(playerid)
{
if(timer[playerid] != -1) KillTimer(timer[playerid]); // Így ha véletlenül nem kerülne meghívásra játékos kifagyásakor az OnPlayerDisconnect akkor OnPlayerConnect alatt le lehet állítani egy másik játékos által elindított idõzítõt
    timer[playerid] = SetTimer(\"bla\", 1000, 1);
return 1;
}
public
OnPlayerDisconnect(playerid, reason)
{
KillTimer(timer[playerid]);
timer[playerid] = -1;
}

 
Ez lenne az elmélet, a kérdés hogy mûködik-e a valóságban?

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Timerek nem állnak le
« Válasz #9 Dátum: 2014. április 29. - 06:33:48 »
0 Show voters
és a killtimer után alapból milyen értéket vesz fel a változó?

Timerek nem állnak le
« Válasz #10 Dátum: 2014. április 30. - 22:35:32 »
0 Show voters
Ugyanaz marad mint ami volt, ez elég zavaró samp esetén. (tudtommal)
Ezért írtam KillTimer után egy negatív érték megadást \"timer[playerid] = -1;\".

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Timerek nem állnak le
« Válasz #11 Dátum: 2014. május 01. - 00:16:35 »
0 Show voters
ja ez sok mindent megmagyaráz :D én azt hittem,hogy alapból átírja a változót.Miért nem csinálják ilyenre a SA-MP fejlesztõi?

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
Timerek nem állnak le
« Válasz #12 Dátum: 2014. május 01. - 07:47:35 »
0 Show voters
Hookold meg, ahogy zsoleszka is mondta, és nem kell hozzányúni ahhoz, amit már megírtál olyanra.
 
stock KillTimerJav(&timerid)
{
    if(KillTimer(timerid)) timerid = -1, return 1;
    else return 0;
}
#if defined _ALS_KillTimer
    #undef KillTimer
#else
    #define _ALS_KillTimer
#endif
#define KillTimer KillTimerJav

 
Báár, nem tudom jó-e. Amúgy a KillTimerei használata elõtt, de még az a_samp include után rakd, nekem egyszer ebbõl volt egy kis gond :D

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Timerek nem állnak le
« Válasz #13 Dátum: 2014. május 24. - 14:54:15 »
0 Show voters
[mod]Témát zártam! Ha mégsem oldódott meg a problémád, kérlek jelezd PÜ-be, és megnyitom a témát![/mod]

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
Timerek nem állnak le
« Válasz #14 Dátum: 2014. április 27. - 15:27:21 »
0 Show voters
Sziasztok!
Amikor valaki kicrashel,vagy csak valamiért nem rendeltetésszerûen lép ki,a timerek nem állnak le valamiért,és ezután belép egy játékos,kétszer olyan gyorsan telik az idõ számára.
Nem tudom,hogy ez csak a haverommal fordul elõ,vagy csak a többiek nem jelentik,de elég idegesítõ.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal