SetTimerEx won't repeat...
#1

Hi, i've got a problem with SetTimerEx. Firstly, no it's not about repeating it all the time. I want it to re-start after i've used it.
Ok it's hard to understand like that, so here:
pawn Код:
#include a_samp

    enum crack2
    {
            bool: is_cracked,
            timer,
            c_down,
            bool:c_isover,
            Float:health
    };

    new crack[MAX_PLAYERS][crack2];

    forward Crack_Timer(playerid);
    forward Count_Down(playerid);

    public OnPlayerSpawn(playerid)
    {
            crack[playerid][is_cracked] = false;
            crack[playerid][c_isover] = false;
            crack[playerid][timer] = SetTimerEx("Crack_Timer",1500,true,"i",playerid);
            return 1;
    }
   
        public Crack_Timer(playerid)
    {
            GetPlayerHealth(playerid,crack[playerid][health]);
            if( (crack[playerid][health] <= 20) && (crack[playerid][is_cracked] == false) )
            {
                    crack[playerid][is_cracked] = true;
                    TogglePlayerControllable(playerid,false);
                    ApplyAnimation(playerid,"PED","KO_spin_L",2.8,0,1,1,1,0);
                    crack[playerid][c_down] = SetTimerEx("Count_Down", 5 * 60 * 250, false, "i", playerid);
            }
            return 1;
    }

    public Count_Down(playerid)
    {
            if(crack[playerid][is_cracked] == true) {
            crack[playerid][c_isover] = true;
            KillTimer(crack[playerid][timer]);
            }
            return 1;
    }

    PlayerToPlayer(playerid,toplayerid)
    {
            new Float:pos[2][3];
            GetPlayerPos(playerid,pos[0][0],pos[0][1],pos[0][2]);
            GetPlayerPos(toplayerid,pos[1][0],pos[1][1],pos[1][2]);
            pos[0][0] -= pos[1][0];
            pos[0][1] -= pos[1][1];
            pos[0][2] -= pos[1][2];
            return floatround( floatsqroot( (floatpower(pos[0][0],2) + floatpower(pos[0][1],2) + floatpower(pos[0][2],2) ) ), floatround_round);
    }
   
    public OnPlayerCommandText(playerid, cmdtext[])
    {
            if(!strcmp(cmdtext,"/getup",true))
            {
                if( (crack[playerid][is_cracked] == true) && (crack[playerid][c_isover] == true))
                {
                    SendClientMessage(playerid, -1, "You got up!");
                    crack[playerid][is_cracked] = false;
                    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_NONE);
                    TogglePlayerControllable(playerid,true);
                    SetPlayerHealth(playerid, 25);
                    SetTimerEx("Crack_Timer",2000,true,"i",playerid);
                    }
                return 1;
            }
            if(!strcmp(cmdtext,"/helpup",true,9))
            {
                if(!cmdtext[8]) SendClientMessage(playerid,-1,"USAGE: /helpup [ID]");
                else if (PlayerToPlayer(playerid,cmdtext[9]) >= 5) SendClientMessage(playerid,-1,"Player too far!");
                    else if( (crack[cmdtext[9]][is_cracked] == true) && (cmdtext[9] != playerid))
                    {
                        ApplyAnimation(playerid,"BOMBER","BOM_Plant",2.6,1,1,1,0,6800);
                        crack[cmdtext[9]][is_cracked] = false;
                        crack[cmdtext[9]][c_isover] = false;
                        KillTimer(crack[cmdtext[9]][timer]);
                        KillTimer(crack[cmdtext[9]][c_down]);
                        SetPlayerSpecialAction(cmdtext[9],SPECIAL_ACTION_NONE);
                    }
                return 1;
            }
            return 0;
}
So there's the problem. First time I do /getup command after the timer (c_down) it works fine. It does what it's scripted to do, no problem. But after I get HP under 20 again, the timer won't repeat then.. I can use /getup command without any timer limit.. So why it won't work after the first time? I've tried everything, nothing helps... Hope i'll get some quick answer, this is stealing my attention seriously. x(
Reply
#2

Try this:
pawn Код:
#include a_samp

    enum crack2
    {
            bool: is_cracked,
            timer,
            c_down,
            bool:c_isover,
            Float:health
    };

    new crack[MAX_PLAYERS][crack2];

    forward Crack_Timer(playerid);
    forward Count_Down(playerid);

    public OnPlayerSpawn(playerid)
    {
            crack[playerid][is_cracked] = false;
            crack[playerid][c_isover] = false;
            crack[playerid][timer] = SetTimerEx("Crack_Timer",1500,true,"i",playerid);
            crack[playerid][c_down] = SetTimerEx("Count_Down", 5 * 60 * 250, false, "i", playerid);
            return 1;
    }

    public Crack_Timer(playerid)
    {
            GetPlayerHealth(playerid,crack[playerid][health]);
            if( (crack[playerid][health] <= 20) && (crack[playerid][is_cracked] == false) )
            {
                    if(crack[playerid][is_cracked] == false) crack[playerid][is_cracked] = true;
                    TogglePlayerControllable(playerid,false);
                    ApplyAnimation(playerid,"PED","KO_spin_L",2.8,0,1,1,1,0);
            }
            return 1;
    }

    public Count_Down(playerid)
    {
            if(crack[playerid][is_cracked] == true)
            {
                crack[playerid][c_isover] = true;
                KillTimer(crack[playerid][timer]);
            }
            return 1;
    }
Reply
#3

Nothing changed, it's still not using the timer after getting in crack at second+ time...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)