Szerző Téma: Másodperc lekérdezés  (Megtekintve 1108 alkalommal)

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
Másodperc lekérdezés
« Dátum: 2014. március 23. - 13:52:11 »
0 Show voters
Hali.
Volna egy olyan gondom, hogy NPC csatlakozáskor megbolondul valamiét a timer és szívritmuszavara lesz :D Ez alatt azt kell érteni, hogy a folyamatosan 5 másodpercenként ismétlõdõ timernél ez a szindróma lép fel:
 

[03:31:00] Incoming connection: IP
[03:31:00] [join] [LM]SnooP has joined the server (IP-m)
[03:31:02] Incoming connection: IP
[03:31:02] [npc:join] asd has joined the server (NPC IP)
[03:31:02] Incoming connection: IP
[03:31:05] [part] [LM]SnooP has left the server (0:1)
[03:31:07] 5 -ik masodperc 2 torlese
[03:31:08] 10-ik masodperc 3-4 torlese
[03:31:12] 15-ik masodperc, 5-os torlese
[03:31:13] 20-ik mp 6-7 torlese
[03:31:18] 25-ik mp 7-8 torlese
[03:31:18] 30-ik mp 10 torlese

 
Itt aki nem vette volna észre a logban a másodperceket kell nézni.


Namár most, mivel én trükkösnek éreztem magam ezért emiatt megírtam egy stockot magamnak ami lekérdezi a másodperceket ez így néz ki:
 

stock GetSeconds()
{
new Hour, Minute, Second;
gettime(Hour, Minute, Second);
printf(\"%d Second\", Second);
return Second;
}

 
A célom az volna, hogy minden ötödik másodpercben ami a timernél fel van osztva (mindjárt lent bemásolom) lekérdezi az idõt, majd akkor jeleníti meg a következõ textdrawot, ha az újból lekérdezett idõ megegyezik a régebben lekérdezett idõ +5-el. Bár ez kissé bonyolultnak tûnik így leírva, ám scriptben könnyebben érthetõ:
 

public szovegtimer(playerid)
{
   Szamlalo++;
new mp, mp2;
if(Szamlalo == 1)
{
    TextDrawHideForPlayer(playerid, Textdraw2);
    print(\"5 -ik masodperc 2 torlese\");
TextDrawShowForPlayer(playerid,Textdraw3);
    TextDrawShowForPlayer(playerid,Textdraw4);
mp = GetSeconds();
    return 1;
    }
if(GetSeconds() == mp+6)
{
    TextDrawHideForPlayer(playerid, Textdraw3);
TextDrawHideForPlayer(playerid, Textdraw4);
print(\"10-ik masodperc 3-4 torlese\");
    TextDrawShowForPlayer(playerid,Textdraw5);
    mp2 = GetSeconds();
    return 1;
}
if(GetSeconds() == mp2+6)
{
    TextDrawHideForPlayer(playerid, Textdraw5);
    print(\"15-ik masodperc, 5-os torlese\");
    TextDrawShowForPlayer(playerid,Textdraw6);
TextDrawShowForPlayer(playerid,Textdraw7);
return 1;
}
     // Itt még van ezután pár ugyan ilyen felépítésû Textdraw
   return 1;
}

 
Amit kell tudni, hogy a timer egy SetTimerEx pontosan így néz ki:
 

myTimer = SetTimerEx(\"szovegtimer\", 5000, true, \"i\", playerid);

 
És az NPC is OnPlayerSpawn-nál van meghívva


Probléma
A fõ probléma ugyebár az, hogy a timer buggol, ám ezt nem lehet megjavítani. A timer eljárásánál az, hogy a Szamlalo++ switchelem és casekre bontom nem mûködik próbáltam így ez az egyetlen módja amit felvázoltam, hogy hogyan lehetne leellenõrizni az idõt. Igen, ám csak valamiért ez sem akar mûködni. Le ellenõrzi, ki is írja ám valamiért nem akar átlépni a dolgokon.
Lásd:
 

[14:49:45] 5 -ik masodperc 2 torlese
[14:49:45] 45 Second
[14:49:46] 46 Second
[14:49:46] 46 Second
[14:49:51] 51 Second
[14:49:51] 51 Second
[14:49:51] 51 Second
[14:49:51] 51 Second
[14:49:56] 56 Second
[14:49:56] 56 Second
[14:49:57] 57 Second
[14:49:57] 57 Second

 
Nem tudom, hogy mit ronthattam el ezért gondoltam megkérdezem itt, hátha valaki véletlenül ráeszmélt a hibámra és ezáltal valahogy tovább juthatnék ezen a téren. Valamint aki tudd valami más megoldást ezeknek a textdrawoknak 5 másodpercenkénti váltásairól annak szívesen várom az ötletét :)
Köszönöm, hogy elolvastátok.
Üdv RusH.
« Utoljára szerkesztve: 2014. március 23. - 13:54:25 írta RusH. »

Másodperc lekérdezés
« Válasz #1 Dátum: 2014. március 23. - 19:16:24 »
+1 Show voters
OnPlayerUpdate-nál érdemes megpróbálni, tudtommal az egy másodpercenként hívódik meg (nem biztos).

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
Másodperc lekérdezés
« Válasz #2 Dátum: 2014. március 23. - 19:26:23 »
0 Show voters
Valóban 1mp-ként hívódik meg: \"Important Note: This callback is called very frequently per second per player, only use it when you know what it\'s meant for.\"
Viszont a timert gõzöm sincs, hogy tudnám összekötni az OnPlayerUpdateal, így hirtelen csak globális változók ugrottak be, mint esetleges átkötések.

Másodperc lekérdezés
« Válasz #3 Dátum: 2014. március 23. - 21:17:08 »
+1 Show voters
OnPlayerUpdate alapjáraton egy \"timer\" csak a változókat tedd bele, fölösleges timer-t kötni hozzá.

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Másodperc lekérdezés
« Válasz #4 Dátum: 2014. március 24. - 01:45:09 »
+1 Show voters
OnPlayerUpdate akkor 1 sec-es ha áll a játékos de ha mozog akkor kb 10x fut le másodpercenként...
itt egy script amivel letudod ellenõrizni:



#include <a_samp>
public OnPlayerUpdate(playerid)
{
new str[8], szam = random(10000);
format(str,sizeof(str),\"%d\",szam);
SendClientMessage(playerid,0xFF6600FF,str);
return 1;
}

 
 
mit akarsz elérni a timer-el? hátha van rá más megoldás...
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
Másodperc lekérdezés
« Válasz #5 Dátum: 2014. március 24. - 14:32:10 »
0 Show voters
Idézetet írta: Kovacs_Richard date=1395621909\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"47320\" data-ipsquote-contentclass=\"forums_Topic
mit akarsz elérni a timer-el? hátha van rá más megoldás...
 
A timerrel a célom az az volna, hogy minden ötödik másodpercben megjelenítsen egy bizonyos textdrawot, majd a rákövetkezõ másik ötödik másodpercben törölje azt. Tehát az ötödik másodpercben megjelenített textdraw a tizedik másodpercben törlõdik és a tizedik másodpercben megjelenítek egy újabb textdrawot ami törlõdik a 15 mp-ben és így tovább. Ez 25 másodpercig tartana majd a timer leállna.
Ez volna cél.

Kamblo

  • Vendég
Másodperc lekérdezés
« Válasz #6 Dátum: 2014. március 28. - 20:24:40 »
0 Show voters
Próbáld y_timers-el.

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
Másodperc lekérdezés
« Válasz #7 Dátum: 2014. március 29. - 11:57:08 »
0 Show voters
Ez nem segített, már próbáltam :/

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
Másodperc lekérdezés
« Válasz #8 Dátum: 2014. március 23. - 13:52:11 »
0 Show voters
Hali.
Volna egy olyan gondom, hogy NPC csatlakozáskor megbolondul valamiét a timer és szívritmuszavara lesz :D Ez alatt azt kell érteni, hogy a folyamatosan 5 másodpercenként ismétlõdõ timernél ez a szindróma lép fel:
 

[03:31:00] Incoming connection: IP
[03:31:00] [join] [LM]SnooP has joined the server (IP-m)
[03:31:02] Incoming connection: IP
[03:31:02] [npc:join] asd has joined the server (NPC IP)
[03:31:02] Incoming connection: IP
[03:31:05] [part] [LM]SnooP has left the server (0:1)
[03:31:07] 5 -ik masodperc 2 torlese
[03:31:08] 10-ik masodperc 3-4 torlese
[03:31:12] 15-ik masodperc, 5-os torlese
[03:31:13] 20-ik mp 6-7 torlese
[03:31:18] 25-ik mp 7-8 torlese
[03:31:18] 30-ik mp 10 torlese

 
Itt aki nem vette volna észre a logban a másodperceket kell nézni.


Namár most, mivel én trükkösnek éreztem magam ezért emiatt megírtam egy stockot magamnak ami lekérdezi a másodperceket ez így néz ki:
 

stock GetSeconds()
{
new Hour, Minute, Second;
gettime(Hour, Minute, Second);
printf(\"%d Second\", Second);
return Second;
}

 
A célom az volna, hogy minden ötödik másodpercben ami a timernél fel van osztva (mindjárt lent bemásolom) lekérdezi az idõt, majd akkor jeleníti meg a következõ textdrawot, ha az újból lekérdezett idõ megegyezik a régebben lekérdezett idõ +5-el. Bár ez kissé bonyolultnak tûnik így leírva, ám scriptben könnyebben érthetõ:
 

public szovegtimer(playerid)
{
   Szamlalo++;
new mp, mp2;
if(Szamlalo == 1)
{
    TextDrawHideForPlayer(playerid, Textdraw2);
    print(\"5 -ik masodperc 2 torlese\");
TextDrawShowForPlayer(playerid,Textdraw3);
    TextDrawShowForPlayer(playerid,Textdraw4);
mp = GetSeconds();
    return 1;
    }
if(GetSeconds() == mp+6)
{
    TextDrawHideForPlayer(playerid, Textdraw3);
TextDrawHideForPlayer(playerid, Textdraw4);
print(\"10-ik masodperc 3-4 torlese\");
    TextDrawShowForPlayer(playerid,Textdraw5);
    mp2 = GetSeconds();
    return 1;
}
if(GetSeconds() == mp2+6)
{
    TextDrawHideForPlayer(playerid, Textdraw5);
    print(\"15-ik masodperc, 5-os torlese\");
    TextDrawShowForPlayer(playerid,Textdraw6);
TextDrawShowForPlayer(playerid,Textdraw7);
return 1;
}
     // Itt még van ezután pár ugyan ilyen felépítésû Textdraw
   return 1;
}

 
Amit kell tudni, hogy a timer egy SetTimerEx pontosan így néz ki:
 

myTimer = SetTimerEx(\"szovegtimer\", 5000, true, \"i\", playerid);

 
És az NPC is OnPlayerSpawn-nál van meghívva


Probléma
A fõ probléma ugyebár az, hogy a timer buggol, ám ezt nem lehet megjavítani. A timer eljárásánál az, hogy a Szamlalo++ switchelem és casekre bontom nem mûködik próbáltam így ez az egyetlen módja amit felvázoltam, hogy hogyan lehetne leellenõrizni az idõt. Igen, ám csak valamiért ez sem akar mûködni. Le ellenõrzi, ki is írja ám valamiért nem akar átlépni a dolgokon.
Lásd:
 

[14:49:45] 5 -ik masodperc 2 torlese
[14:49:45] 45 Second
[14:49:46] 46 Second
[14:49:46] 46 Second
[14:49:51] 51 Second
[14:49:51] 51 Second
[14:49:51] 51 Second
[14:49:51] 51 Second
[14:49:56] 56 Second
[14:49:56] 56 Second
[14:49:57] 57 Second
[14:49:57] 57 Second

 
Nem tudom, hogy mit ronthattam el ezért gondoltam megkérdezem itt, hátha valaki véletlenül ráeszmélt a hibámra és ezáltal valahogy tovább juthatnék ezen a téren. Valamint aki tudd valami más megoldást ezeknek a textdrawoknak 5 másodpercenkénti váltásairól annak szívesen várom az ötletét :)
Köszönöm, hogy elolvastátok.
Üdv RusH.
« Utoljára szerkesztve: 2014. március 23. - 13:54:25 írta RusH. »

Másodperc lekérdezés
« Válasz #9 Dátum: 2014. március 23. - 19:16:24 »
0 Show voters
OnPlayerUpdate-nál érdemes megpróbálni, tudtommal az egy másodpercenként hívódik meg (nem biztos).

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
Másodperc lekérdezés
« Válasz #10 Dátum: 2014. március 23. - 19:26:23 »
0 Show voters
Valóban 1mp-ként hívódik meg: \"Important Note: This callback is called very frequently per second per player, only use it when you know what it\'s meant for.\"
Viszont a timert gõzöm sincs, hogy tudnám összekötni az OnPlayerUpdateal, így hirtelen csak globális változók ugrottak be, mint esetleges átkötések.

Másodperc lekérdezés
« Válasz #11 Dátum: 2014. március 23. - 21:17:08 »
0 Show voters
OnPlayerUpdate alapjáraton egy \"timer\" csak a változókat tedd bele, fölösleges timer-t kötni hozzá.

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Másodperc lekérdezés
« Válasz #12 Dátum: 2014. március 24. - 01:45:09 »
0 Show voters
OnPlayerUpdate akkor 1 sec-es ha áll a játékos de ha mozog akkor kb 10x fut le másodpercenként...
itt egy script amivel letudod ellenõrizni:



#include <a_samp>
public OnPlayerUpdate(playerid)
{
new str[8], szam = random(10000);
format(str,sizeof(str),\"%d\",szam);
SendClientMessage(playerid,0xFF6600FF,str);
return 1;
}

 
 
mit akarsz elérni a timer-el? hátha van rá más megoldás...
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
Másodperc lekérdezés
« Válasz #13 Dátum: 2014. március 24. - 14:32:10 »
0 Show voters
Idézetet írta: Kovacs_Richard date=1395621909\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"47320\" data-ipsquote-contentclass=\"forums_Topic
mit akarsz elérni a timer-el? hátha van rá más megoldás...
 
A timerrel a célom az az volna, hogy minden ötödik másodpercben megjelenítsen egy bizonyos textdrawot, majd a rákövetkezõ másik ötödik másodpercben törölje azt. Tehát az ötödik másodpercben megjelenített textdraw a tizedik másodpercben törlõdik és a tizedik másodpercben megjelenítek egy újabb textdrawot ami törlõdik a 15 mp-ben és így tovább. Ez 25 másodpercig tartana majd a timer leállna.
Ez volna cél.

Kamblo

  • Vendég
Másodperc lekérdezés
« Válasz #14 Dátum: 2014. március 28. - 20:24:40 »
0 Show voters
Próbáld y_timers-el.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal