SA-MP Forums Archive
Every hour and half a hour - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Every hour and half a hour (/showthread.php?tid=656548)

Pages: 1 2


Every hour and half a hour - GospodinX - 18.07.2018

Hi guys

I want to make timer with which I will be able to do some thing every hour and half a hour.
For example( 00:00 00:30 01:00 01:30 02:00 ... 06:00 06:30 etc )

I want to start an race event in 00:00 ,in 00:30 i want to start derby event etc...it's example.


I'm use this:

Код:
task OneMinuteTimer[60000]()
{
	new hours,minutes,seconds;
	gettime(hours,minutes,seconds);
	if(minutes == 30)
	{
		if(hours == 1)
		{
		//This is 01:30
		}
		else if(hours == 2)
		{
		//This is 02:30
		}
	else if(minutes == 0)
	{
		if(hours == 1)
		{
		//This is 01:00
		}
		else if(hours == 2)
		{
		//This is 02:00
		}
	}
	return 1;
}
Now,problem is that sometimes happend that timer omissions some hour.
If timer is called in 02:59:59 and next time in 03:01:01 i can't do anything in 03:00 ..Because my code don't will work in it case.

Do you have any better suggestion?


Re: Every hour and half a hour - Florin48 - 18.07.2018

includes your code in an already created timer that works from second to second.


Re: Every hour and half a hour - GospodinX - 18.07.2018

Quote:
Originally Posted by Florin48
Посмотреть сообщение
includes your code in an already created timer that works from second to second.
If i'm understand you..You think that i check every second if is now xx:00 or xx:30? But if i do it 'n one-second timer i will have true case 59 times on minute...


Re: Every hour and half a hour - Florin48 - 18.07.2018

try a 35-second timer, it's going to go wrong and there's no error.

or try to make a half-hour timer.


Re: Every hour and half a hour - Florin48 - 18.07.2018

this is a timer that runs every 35 seconds, try it.

PHP код:
task OneMinuteTimer[35000]()
{
    new 
hours,minutes,seconds;
    
gettime(hours,minutes,seconds);
    switch(
hours)
    {
        case 
0:
        {
            switch(
minutes)
            {
                case 
0:
                case 
30:
            }
        }
        case 
1:
        {
            switch(
minutes)
            {
                case 
0:
                case 
30:
            }
        }
        case 
2:
        case 
3:
        case 
4:
        case 
5:
        case 
6:
    }
    return 
1;

the code was not tested, try it.


Re: Every hour and half a hour - GospodinX - 18.07.2018

Thank you.But problem with sa-mp is which timer are not exact..It can vary in few seconds.With my code,it will miss some hours,but with 35 seconds I fear that may it can be called 2 times...But i will test it


Re: Every hour and half a hour - Florin48 - 18.07.2018

Quote:
Originally Posted by GospodinX
Посмотреть сообщение
Thank you.But problem with sa-mp is which timer are not exact..It can vary in few seconds.With my code,it will miss some hours,but with 35 seconds I fear that may it can be called 2 times...But i will test it
uses a timerfix to be more accurate timer.


Re: Every hour and half a hour - GospodinX - 26.07.2018

Still don't know how to make it..I'm test with 35 seconds but :

Timer is call two times in one hour

Quote:

15:00:02
15:00:38

I need just one time in one hour...


Re: Every hour and half a hour - JasonRiggs - 26.07.2018

Why don't you make the timer every 1 second?? And use timerfix plugin, and check if the time is XX:00 or XX:30 and done..


Re: Every hour and half a hour - GospodinX - 26.07.2018

Quote:
Originally Posted by JasonRiggs
Посмотреть сообщение
Why don't you make the timer every 1 second?? And use timerfix plugin, and check if the time is XX:00 or XX:30 and done..
Hah..
But if i set it on 1 second,it will be called 60 times on minute

Код:
if(hours == 15 && minute == 0) // 15:00 
{
//This will be called 60 times,i need it just one time...
//If I here start event in this code,it will be started 60 times..
}



Re: Every hour and half a hour - Florin48 - 26.07.2018

try to add second in verification

if(hours == 15 && minute == 0 && second == 0) // 15:00
{


Re: Every hour and half a hour - GospodinX - 26.07.2018

Quote:
Originally Posted by Florin48
Посмотреть сообщение
try to add second in verification

if(hours == 15 && minute == 0 && second == 0) // 15:00
{
Timers are not 100% correct..Sometimes it don't will work..sometimes it will be called for example:
Quote:

14:59:59
and next time in
15:00:01

(tested)


Re: Every hour and half a hour - Florin48 - 26.07.2018

use a timerfix or try

if(hours == 15 && minute == 0 && (second == 0 || second == 1) // 15:00
{
...
}

or you can use a global variable. ex:

PHP код:
new YourVariableName 0;
if(
hours == 15 && minute == && YourVariableName == 0// 15:00 
{
YourVariableName =1;
...

there are different ways to solve a problem.


Re: Every hour and half a hour - JasonRiggs - 26.07.2018

That's WHY I'm saying set a 1 second timer! To be more accurate..


Re: Every hour and half a hour - BlackBank - 26.07.2018

Quote:
Originally Posted by JasonRiggs
Посмотреть сообщение
That's WHY I'm saying set a 1 second timer! To be more accurate..
As he said, timers are not accurate.


Why not do it this way?
PHP код:
task JustARandomTimer[1000]()
{
    static 
pastMinutes = -1;
    new 
hoursminutesseconds;
    
gettime(hoursminutesseconds);
    
// Initial pastMinutes variable
    
if (pastMinutes == -1) {
        
pastMinutes minutes;
    }
    if (
minutes 30 && pastMinutes >= 30) {
        
pastMinutes 0;
        
// Do something under xx:30, called once.
    
}
    else if (
minutes >= 30 && pastMinutes 30) {
        
pastMinutes 30;
        
// Do something above xx:30, called once.
    
}
    return 
1;




Re: Every hour and half a hour - Y_Less - 26.07.2018

Why are you using shorter and shorter timers? If you want something to happen once an hour, use a one hour timer:

Код:
task RaceTimer[60 * 60 * 1000]()
{
    // Called once an hour - no messing, no misses!
}
Simple!

Then use the timerfix plugin to improve the accuracy. Don’t use ad-hoc half-baked pawn solutions that just end up vastly more complex code.


Re: Every hour and half a hour - Florin48 - 26.07.2018

Quote:
Originally Posted by Y_Less
Посмотреть сообщение
Why are you using shorter and shorter timers? If you want something to happen once an hour, use a one hour timer:

Код:
task RaceTimer[60 * 60 * 1000]()
{
    // Called once an hour - no messing, no misses!
}
Simple!

Then use the timerfix plugin to improve the accuracy. Don’t use ad-hoc half-baked pawn solutions that just end up vastly more complex code.
but if I start the server at 13:26 and I want the event to start at 13:30, this one-hour timer will not start when the server is opened at 13:26 and the next time it is accessed will be at 14: 26 and I wanted it at 13:30.
Or y_timer library works differently?


Re: Every hour and half a hour - Y_Less - 26.07.2018

The fact that you wanted it ON the hour was not clear at all from your initial post. You did say "for example", but that doesn't to me mean "exclusively". In that case, timers are not at all the right way to go about this - you should be using `gettime`.


Re: Every hour and half a hour - Florin48 - 27.07.2018

Quote:
Originally Posted by Y_Less
Посмотреть сообщение
The fact that you wanted it ON the hour was not clear at all from your initial post. You did say "for example", but that doesn't to me mean "exclusively". In that case, timers are not at all the right way to go about this - you should be using `gettime`.
I did not create the original post, I just said the requirements that the one who needed the help wanted, gave an example at first you had to look and see that one hour timer would be useless for him.


Re: Every hour and half a hour - GospodinX - 27.07.2018

Quote:

In that case, timers are not at all the right way to go about this - you should be using `gettime`.

But where to use gettime? I don't understand.