SA-MP Forums Archive
Adding a timer to this... - 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: Adding a timer to this... (/showthread.php?tid=374082)



Adding a timer to this... - Luke_James - 01.09.2012

pawn Код:
command(advert, playerid, params[])
{
    new message[128], string[256];
    if(sscanf(params, "s[128]", message))
    {
        SendClientMessage(playerid, WHITE, "Server: /advert [advertisement]");
        SendClientMessage(playerid, GREY, "Example: '/advert Selling my Blista Compact. 15k miles, just been serviced.'");
        SendClientMessage(playerid, GREY, "Will show: [ADVERT] Selling my Blista Compact. 15k miles, just been serviced. [Callum Getty - Phone: 1241231]");
    }
    else
    {
        format(string, sizeof(string), "[ADVERT] %s [%s - Call: %d]", message, RemoveUnderScore(playerid), Player[playerid][CellPhoneNumber]);
        SendClientMessageToAll(ADVERT, string);
    }
    return 1;
}
I've never done a timer before, can someone explain it to me please?


Re: Adding a timer to this... - Luke_James - 01.09.2012

Anyone? Would be much appreciated, usually if I have a question I take a shot at scripting what I'm asking about, but I literally have no clue


Re: Adding a timer to this... - Roko_foko - 01.09.2012

it's not that hard. Look:
pawn Код:
new bool:GloabalAdvertisement=true;
OnGameModeInit()
{
    GloabalAdvertisement=true;
    return 1;
}
command(advert, playerid, params[])
{
    new message[128], string[256];
    if(sscanf(params, "s[128]", message))
    {
        if(GloabalAdvertisement){
        GloabalAdvertisement=false;
        SetTimer("MakeGloabalAdverisementTrue",5000/* 5 seconds*/,false);
        SendClientMessage(playerid, WHITE, "Server: /advert [advertisement]");
        SendClientMessage(playerid, GREY, "Example: '/advert Selling my Blista Compact. 15k miles, just been serviced.'");
        SendClientMessage(playerid, GREY, "Will show: [ADVERT] Selling my Blista Compact. 15k miles, just been serviced. [Callum Getty - Phone: 1241231]");
        }
        else SendClientMessage(MORE TO WAIT);
    }
    else
    {
        format(string, sizeof(string), "[ADVERT] %s [%s - Call: %d]", message, RemoveUnderScore(playerid), Player[playerid][CellPhoneNumber]);
        SendClientMessageToAll(ADVERT, string);
    }
    return 1;
}
forward public MakeGloabalAdverisementTrue();
public MakeGloabalAdverisementTrue()
{
    GloabalAdvertisement=true;
}
Need explanation?


Re: Adding a timer to this... - Luke_James - 01.09.2012

I get it, thanks. Say if I wanted to make it so our VIP's only had to wait 30 seconds, would I do this...

pawn Код:
command(advert, playerid, params[])
{
    new message[128], string[256];
    if(sscanf(params, "s[128]", message))
    {
        if(GloabalAdvertisement){
        GloabalAdvertisement=false;
        SetTimer("MakeGloabalAdverisementTrue",60000/,false);
        {
            if(Player[playerid][DonateRank] >=2)
            SetTimer("MakeGlobalAdvertisementTrue",30000,false);
        }
        SendClientMessage(playerid, WHITE, "Server: /advert [advertisement]");
        SendClientMessage(playerid, GREY, "Example: '/advert Selling my Blista Compact. 15k miles, just been serviced.'");
        SendClientMessage(playerid, GREY, "Will show: [ADVERT] Selling my Blista Compact. 15k miles, just been serviced. [Callum Getty - Phone: 1241231]");
        }
        else SendClientMessage(playerid, WHITE, "You must wait 60 seconds (30 seconds for VIP's) between advertisements!");
    }
    else
    {
        format(string, sizeof(string), "[ADVERT] %s [%s - Call: %d]", message, RemoveUnderScore(playerid), Player[playerid][CellPhoneNumber]);
        SendClientMessageToAll(ADVERT, string);
    }
    return 1;
}



Re: Adding a timer to this... - Admigo - 01.09.2012

Why everybody makes so much timers:P I only use one timer for the whole server.


Re: Adding a timer to this... - ATTAN - 01.09.2012

Try this:
pawn Код:
command(advert, playerid, params[])
{
    new message[128], string[256];
    if (sscanf(params, "s[128]", message) || isnull(params))
    {
        SendClientMessage(playerid, WHITE, "Server: /advert [advertisement]");
        SendClientMessage(playerid, GREY, "Example: '/advert Selling my Blista Compact. 15k miles, just been serviced.'");
        SendClientMessage(playerid, GREY, "Will show: [ADVERT] Selling my Blista Compact. 15k miles, just been serviced. [Callum Getty - Phone: 1241231]")
        SendClientMessage(playerid, WHITE, "You must wait 60 seconds (30 seconds for VIP's) between advertisements!");
        return 1;
    }
    else
    {
        format(string, sizeof(string), "[ADVERT] %s [%s - Call: %d]", message, RemoveUnderScore(playerid), Player[playerid][CellPhoneNumber]);
        SendClientMessageToAll(ADVERT, string);
    }
    if (GloabalAdvertisement)
    {
        GloabalAdvertisement = false;
        if (Player[playerid][DonateRank] >= 2) SetTimer("MakeGlobalAdvertisementTrue", 30000, false);
        else SetTimer("MakeGloabalAdverisementTrue", 60000, false);
    }
    return 1;
}



Re: Adding a timer to this... - Luke_James - 01.09.2012

It compiled fine when I used the above one;

pawn Код:
command(advert, playerid, params[])
{
    new message[128], string[256];
    if(sscanf(params, "s[128]", message))
    {
        if(GloabalAdvertisement){
        GloabalAdvertisement=false;
        SetTimer("MakeGloabalAdverisementTrue",60000/,false);
        {
            if(Player[playerid][DonateRank] >=2)
            SetTimer("MakeGlobalAdvertisementTrue",30000,false);
        }
        SendClientMessage(playerid, WHITE, "Server: /advert [advertisement]");
        SendClientMessage(playerid, GREY, "Example: '/advert Selling my Blista Compact. 15k miles, just been serviced.'");
        SendClientMessage(playerid, GREY, "Will show: [ADVERT] Selling my Blista Compact. 15k miles, just been serviced. [Callum Getty - Phone: 1241231]");
        }
        else SendClientMessage(playerid, WHITE, "You must wait 60 seconds (30 seconds for VIP's) between advertisements!");
    }
    else
    {
        format(string, sizeof(string), "[ADVERT] %s [%s - Call: %d]", message, RemoveUnderScore(playerid), Player[playerid][CellPhoneNumber]);
        SendClientMessageToAll(ADVERT, string);
    }
    return 1;
}



Re: Adding a timer to this... - nickdodd25 - 01.09.2012

Hmm no one said that you can also make it timerless, use GetTickCount..
pawn Код:
new CmdDelayadvert[MAX_PLAYERS];
command(advert, playerid, params[])
{
    new message[128], string[256];
    if (CmdDelayadvert[playerid]<GetTickCount())//checks if the players time is up
    {
        if(sscanf(params, "s[128]", message))
        {
            SendClientMessage(playerid, WHITE, "Server: /advert [advertisement]");
            SendClientMessage(playerid, GREY, "Example: '/advert Selling my Blista Compact. 15k miles, just been serviced.'");
            SendClientMessage(playerid, GREY, "Will show: [ADVERT] Selling my Blista Compact. 15k miles, just been serviced. [Callum Getty - Phone: 1241231]");
        }
        else
        {
            format(string, sizeof(string), "[ADVERT] %s [%s - Call: %d]", message, RemoveUnderScore(playerid), Player[playerid][CellPhoneNumber]);
            SendClientMessageToAll(ADVERT, string);
            CmdDelayadvert[playerid] = GetTickCount()+30000; //30000 = 30 seconds
        }
    }
    else
    {
        SendClientMessage(playerid,GREY,"You Can only use this command every 30 seconds!!!");
    }
    return 1;
}



Re: Adding a timer to this... - Luke_James - 01.09.2012

Does this delay the command for all players, or just the player that did it?


Re: Adding a timer to this... - nickdodd25 - 01.09.2012

Quote:
Originally Posted by Luke_James
Посмотреть сообщение
Does this delay the command for all players, or just the player that did it?
Just the player that did it.