GTA Közösség - A magyar GTA fórum

Hatalmas Archívum => Fórum Archívum (Témák/Fórumok) => A témát indította: SnooP - 2014. Március 23. - 13:52:11

Cím: Másodperc lekérdezés
Írta: SnooP - 2014. Március 23. - 13:52:11
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.
Cím: Másodperc lekérdezés
Írta: Konstantin - 2014. Március 23. - 19:16:24
OnPlayerUpdate-nál érdemes megpróbálni, tudtommal az egy másodpercenként hívódik meg (nem biztos).
Cím: Másodperc lekérdezés
Írta: SnooP - 2014. Március 23. - 19:26:23
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.
Cím: Másodperc lekérdezés
Írta: Konstantin - 2014. Március 23. - 21:17:08
OnPlayerUpdate alapjáraton egy \"timer\" csak a változókat tedd bele, fölösleges timer-t kötni hozzá.
Cím: Másodperc lekérdezés
Írta: Kovacs_Richard - 2014. Március 24. - 01:45:09
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...
Cím: Másodperc lekérdezés
Írta: SnooP - 2014. Március 24. - 14:32:10
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.
Cím: Másodperc lekérdezés
Írta: Kamblo - 2014. Március 28. - 20:24:40
Próbáld y_timers-el.
Cím: Másodperc lekérdezés
Írta: SnooP - 2014. Március 29. - 11:57:08
Ez nem segített, már próbáltam :/
Cím: Másodperc lekérdezés
Írta: SnooP - 2014. Március 23. - 13:52:11
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.
Cím: Másodperc lekérdezés
Írta: Konstantin - 2014. Március 23. - 19:16:24
OnPlayerUpdate-nál érdemes megpróbálni, tudtommal az egy másodpercenként hívódik meg (nem biztos).
Cím: Másodperc lekérdezés
Írta: SnooP - 2014. Március 23. - 19:26:23
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.
Cím: Másodperc lekérdezés
Írta: Konstantin - 2014. Március 23. - 21:17:08
OnPlayerUpdate alapjáraton egy \"timer\" csak a változókat tedd bele, fölösleges timer-t kötni hozzá.
Cím: Másodperc lekérdezés
Írta: Kovacs_Richard - 2014. Március 24. - 01:45:09
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...
Cím: Másodperc lekérdezés
Írta: SnooP - 2014. Március 24. - 14:32:10
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.
Cím: Másodperc lekérdezés
Írta: Kamblo - 2014. Március 28. - 20:24:40
Próbáld y_timers-el.
Cím: Másodperc lekérdezés
Írta: SnooP - 2014. Március 29. - 11:57:08
Ez nem segített, már próbáltam :/