SA-MP Forums Archive
Timer issue - 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: Timer issue (/showthread.php?tid=481736)



Timer issue - Deduction - 17.12.2013

Hey Guys,
I have created a timer to basicly count to 25 seconds before it respawns the player.
The issue is that when this happens, the timer seems to decrease each time the player dies.
At top of the script I have:
pawn Код:
#define DEATH_TIME 25
new SecsToGo[MAX_PLAYERS];
new Death[MAX_PLAYERS char] = 0;
So OnPlayerDeath here is the code.

pawn Код:
SecsToGo[playerid] = DEATH_TIME;
DeathTimer{playerid} = SetTimerEx("Death", 1000, true, "i", playerid);
And then I have the timer.

pawn Код:
public Death(playerid)
{
    SecsToGo[playerid]--;
    if(SecsToGo[playerid] < 0)
    {
        SetAlive(playerid);
        return 1;
    }
    return 1;
}
Then I have the timer which sets the player alive.

pawn Код:
stock SetAlive(playerid)
{
    KillTimer(Death{playerid});
    return 1;
}
I have removed the variables, functions which are having no affect to the timer. Can someone please help me on this? And possibly shed some light to why its decreasing the time each time the player dies? If players die enough, they end up dying for like 1 second then respawning.


Re: Timer issue - Patrick - 17.12.2013

There's a lot of error in your code for example you created a variable called Death and a callback called Death that will give you an error error 021: symbol already defined: "Death" and error 010: invalid function or declaration

This code should work.

pawn Код:
//macro
#define function:%0(%1) \
    forward%0(%1); public%0(%1)

#define DEATH_TIME \
    25

//variable
new
    SecsToGo[ MAX_PLAYERS ] , DeathTimer[ MAX_PLAYERS char ];

public OnPlayerDeath( playerid, killerid, reason )
{
    SecsToGo[ playerid ] = DEATH_TIME;
    DeathTimer{ playerid } = SetTimerEx( "Death", 1000, true, "i", playerid ); //timer
    return true;
}

function: Death( playerid )
{
    if(0 < SecsToGo[playerid]) //Yoda Conditions
        SecsToGo[playerid]--; // decrease the timer per second if it's more than 0 .

    if(0 > SecsToGo[playerid]) //Yoda Conditions
        KillTimer( DeathTimer{playerid} ), SpawnPlayer(playerid); //stops the timer and spawns the player
}