SA-MP Forums Archive
How can I add a timer to make it so players cant get armor every second? - 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: How can I add a timer to make it so players cant get armor every second? (/showthread.php?tid=282919)



How can I add a timer to make it so players cant get armor every second? - rangerxxll - 13.09.2011

It's kind of hard to explain. I want to make it so players can get weapons without a timer, but not the armor. This is my current code:
pawn Код:
COMMAND:getweapons(playerid, cmdtext)
{
    if (!IsPlayerInRangeOfPoint(playerid, 7.0, 2196.2363,-3319.5674,192) && !IsPlayerInRangeOfPoint(playerid, 7.0, 2160.5581,-3017.5974,191))
    {
        SendClientMessage(playerid, 0xFF0000FF, "You're not near the weapon crates"); return 1;
    }
    ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Pick a weapon:", "Deagle\nCombat Shotgun\nAK47\nTearGas\nChainsaw\nSniper\nMinigun\nFlamethrower\nVest", "Pick", "Close");
    return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 32)
    {
        if(!response) return 1; // if he clicked the other button, stop the code
        switch(listitem) // Switch trough all list items
        {
            case 0: GivePlayerWeapon(playerid, 24, 100);
            case 1: GivePlayerWeapon(playerid, 27, 100);
            case 2: GivePlayerWeapon(playerid, 30, 200);
            case 3: GivePlayerWeapon(playerid, 17, 10);
            case 4: GivePlayerWeapon(playerid, 9, 1);
            case 5: GivePlayerWeapon(playerid, 34, 100);
            case 6: GivePlayerWeapon(playerid, 38, 500);
            case 7: GivePlayerWeapon(playerid, 37, 500);
            case 8: SetPlayerArmour(playerid, 100); // I want this to have a timer
        }
    }
    return 1;
}
If you don't get what I mean, just ask. Thanks for the help


Re: How can I add a timer to make it so players cant get armor every second? - RelaxCafe - 13.09.2011

new gotarmour[500];

As soon as the player buys the armour. Which is at case 8, do this: "case 8:{SetPlayerArmour(playerid, 100); gotarmour[playerid] = 1;SetTimerEx("ArmourUpdate", 300000, 0, "i", playerid);};
forward ArmourUpdate(playerid);
public ArmourUpdate(playerid)
{
if(gotarmour[playerid] == 1)gotarmour[playerid] = 0;
}
public OnPlayerDisconnect(playerid)
{
gotarmour[playerid] = 0;
}


Re: How can I add a timer to make it so players cant get armor every second? - rangerxxll - 13.09.2011

Quote:
Originally Posted by RelaxCafe
Посмотреть сообщение
new gotarmour[500];

As soon as the player buys the armour. Which is at case 8, do this: "case 8:{SetPlayerArmour(playerid, 100); gotarmour[playerid] = 1;SetTimerEx("ArmourUpdate", 300000, 0, "i", playerid);};
forward ArmourUpdate(playerid);
public ArmourUpdate(playerid)
{
if(gotarmour[playerid] == 1)gotarmour[playerid] = 0;
}
public OnPlayerDisconnect(playerid)
{
gotarmour[playerid] = 0;
}
I get these errors.
Quote:

C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(326) : error 017: undefined symbol "gotarmour"
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(326) : warning 215: expression has no effect
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(326) : error 001: expected token: ";", but found "]"
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(326) : error 029: invalid expression, assumed zero
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(326) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase


4 Errors.

Edit: Hold on, forgot to do one thing


Re: How can I add a timer to make it so players cant get armor every second? - rangerxxll - 13.09.2011

These are the errors after I added
pawn Код:
new gotarmour[500];
Quote:

C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(329) : error 002: only a single statement (or expression) can follow each "case"
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(331) : error 029: invalid expression, assumed zero
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(331) : error 017: undefined symbol "ArmourUpdate"
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(332) : error 029: invalid expression, assumed zero
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(332) : error 017: undefined symbol "ArmourUpdate"
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(336) : error 029: invalid expression, assumed zero
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(336) : error 004: function "OnPlayerDisconnect" is not implemented
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(341) : warning 209: function "OnDialogResponse" should return a value
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(342) : error 010: invalid function or declaration
Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase


8 Errors.




Re: How can I add a timer to make it so players cant get armor every second? - =WoR=G4M3Ov3r - 13.09.2011

https://sampwiki.blast.hk/wiki/SetTimerEx


Re: How can I add a timer to make it so players cant get armor every second? - PrawkC - 13.09.2011

pawn Код:
new ArmorTime[MAX_PLAYERS];
COMMAND:getweapons(playerid, cmdtext)
{
    if (!IsPlayerInRangeOfPoint(playerid, 7.0, 2196.2363,-3319.5674,192) && !IsPlayerInRangeOfPoint(playerid, 7.0, 2160.5581,-3017.5974,191))
    {
        SendClientMessage(playerid, 0xFF0000FF, "You're not near the weapon crates"); return 1;
    }
    ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Pick a weapon:", "Deagle\nCombat Shotgun\nAK47\nTearGas\nChainsaw\nSniper\nMinigun\nFlamethrower\nVest", "Pick", "Close");
    return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 32)
    {
        if(!response) return 1; // if he clicked the other button, stop the code
        switch(listitem) // Switch trough all list items
        {
            case 0: GivePlayerWeapon(playerid, 24, 100);
            case 1: GivePlayerWeapon(playerid, 27, 100);
            case 2: GivePlayerWeapon(playerid, 30, 200);
            case 3: GivePlayerWeapon(playerid, 17, 10);
            case 4: GivePlayerWeapon(playerid, 9, 1);
            case 5: GivePlayerWeapon(playerid, 34, 100);
            case 6: GivePlayerWeapon(playerid, 38, 500);
            case 7: GivePlayerWeapon(playerid, 37, 500);
            case 8:
            {
                if(ArmorTime[playerid] > gettime()) return SendClientMessage(playerid, -1, "You already got armor recently!");
                SetPlayerArmour(playerid, 100); // I want this to have a timer
                ArmorTime[playerid] = gettime() + 15000;
            }
        }
    }
    return 1;
}



Re: How can I add a timer to make it so players cant get armor every second? - rangerxxll - 13.09.2011

Quote:
Originally Posted by PrawkC
Посмотреть сообщение
pawn Код:
new ArmorTime[MAX_PLAYERS];
COMMAND:getweapons(playerid, cmdtext)
{
    if (!IsPlayerInRangeOfPoint(playerid, 7.0, 2196.2363,-3319.5674,192) && !IsPlayerInRangeOfPoint(playerid, 7.0, 2160.5581,-3017.5974,191))
    {
        SendClientMessage(playerid, 0xFF0000FF, "You're not near the weapon crates"); return 1;
    }
    ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Pick a weapon:", "Deagle\nCombat Shotgun\nAK47\nTearGas\nChainsaw\nSniper\nMinigun\nFlamethrower\nVest", "Pick", "Close");
    return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 32)
    {
        if(!response) return 1; // if he clicked the other button, stop the code
        switch(listitem) // Switch trough all list items
        {
            case 0: GivePlayerWeapon(playerid, 24, 100);
            case 1: GivePlayerWeapon(playerid, 27, 100);
            case 2: GivePlayerWeapon(playerid, 30, 200);
            case 3: GivePlayerWeapon(playerid, 17, 10);
            case 4: GivePlayerWeapon(playerid, 9, 1);
            case 5: GivePlayerWeapon(playerid, 34, 100);
            case 6: GivePlayerWeapon(playerid, 38, 500);
            case 7: GivePlayerWeapon(playerid, 37, 500);
            case 8:
            {
                if(ArmorTime[playerid] > gettime()) return SendClientMessage(playerid, -1, "You already got armor recently!");
                SetPlayerArmour(playerid, 100); // I want this to have a timer
                ArmorTime[playerid] = gettime() + 15000;
            }
        }
    }
    return 1;
}
It compiles, but in game when I do /getweapons and choose vest, I dont get a vest, and when I try to get a vest again I dont get a message saying that I cant.

pawn Код:
COMMAND:getweapons(playerid, cmdtext)
{
    if (!IsPlayerInRangeOfPoint(playerid, 7.0, 2196.2363,-3319.5674,192) && !IsPlayerInRangeOfPoint(playerid, 7.0, 2160.5581,-3017.5974,191))
    {
        SendClientMessage(playerid, 0xFF0000FF, "You're not near the weapon crates"); return 1;
    }
    ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Pick a weapon:", "Deagle\nCombat Shotgun\nAK47\nTearGas\nChainsaw\nSniper\nMinigun\nFlamethrower\nVest", "Pick", "Close");
    return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 32)
    {
        if(!response) return 1; // if he clicked the other button, stop the code
        switch(listitem) // Switch trough all list items
        {
            case 0: GivePlayerWeapon(playerid, 24, 100);
            case 1: GivePlayerWeapon(playerid, 27, 100);
            case 2: GivePlayerWeapon(playerid, 30, 200);
            case 3: GivePlayerWeapon(playerid, 17, 10);
            case 4: GivePlayerWeapon(playerid, 9, 1);
            case 5: GivePlayerWeapon(playerid, 34, 100);
            case 6: GivePlayerWeapon(playerid, 38, 500);
            case 7: GivePlayerWeapon(playerid, 37, 500);
            case 8:
            {
                if(ArmorTime[playerid] > gettime()) return SendClientMessage(playerid, COLOR_RED, "You already got armor recently!");
                SetPlayerArmour(playerid, 100); // I want this to have a timer
                ArmorTime[playerid] = gettime() + 15000;
            }
        }
    }
    return 1;
}
If I add
pawn Код:
SetPlayerArmour(playerid, 100);
To Case 8. I get 4 errors.
Quote:

C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(327) : error 017: undefined symbol "GivePlayerArmour"
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(32 : error 002: only a single statement (or expression) can follow each "case"
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(333) : warning 209: function "OnDialogResponse" should return a value
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(334) : error 054: unmatched closing brace ("}")
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(335) : error 010: invalid function or declaration
Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase


4 Errors.




Re: How can I add a timer to make it so players cant get armor every second? - =WoR=G4M3Ov3r - 13.09.2011

Quote:
Originally Posted by rangerxxll
Посмотреть сообщение
It compiles, but in game when I do /getweapons and choose vest, I dont get a vest, and when I try to get a vest again I dont get a message saying that I cant.

pawn Код:
COMMAND:getweapons(playerid, cmdtext)
{
    if (!IsPlayerInRangeOfPoint(playerid, 7.0, 2196.2363,-3319.5674,192) && !IsPlayerInRangeOfPoint(playerid, 7.0, 2160.5581,-3017.5974,191))
    {
        SendClientMessage(playerid, 0xFF0000FF, "You're not near the weapon crates"); return 1;
    }
    ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Pick a weapon:", "Deagle\nCombat Shotgun\nAK47\nTearGas\nChainsaw\nSniper\nMinigun\nFlamethrower\nVest", "Pick", "Close");
    return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 32)
    {
        if(!response) return 1; // if he clicked the other button, stop the code
        switch(listitem) // Switch trough all list items
        {
            case 0: GivePlayerWeapon(playerid, 24, 100);
            case 1: GivePlayerWeapon(playerid, 27, 100);
            case 2: GivePlayerWeapon(playerid, 30, 200);
            case 3: GivePlayerWeapon(playerid, 17, 10);
            case 4: GivePlayerWeapon(playerid, 9, 1);
            case 5: GivePlayerWeapon(playerid, 34, 100);
            case 6: GivePlayerWeapon(playerid, 38, 500);
            case 7: GivePlayerWeapon(playerid, 37, 500);
            case 8:
            {
                if(ArmorTime[playerid] > gettime()) return SendClientMessage(playerid, COLOR_RED, "You already got armor recently!");
                SetPlayerArmour(playerid, 100); // I want this to have a timer
                ArmorTime[playerid] = gettime() + 15000;
            }
        }
    }
    return 1;
}
If I add
pawn Код:
SetPlayerArmour(playerid, 100);
To Case 8. I get 4 errors.
Its because there's no such thing as GivePlayerArmour, its SetPlayerArmour, remove the line that says GivePlayerArmour, or change it to SetPlayerArmour


Re: How can I add a timer to make it so players cant get armor every second? - rangerxxll - 13.09.2011

Quote:
Originally Posted by G4M3Ov3r
Посмотреть сообщение
Its because there's no such thing as GivePlayerArmour, its SetPlayerArmour, remove the line that says GivePlayerArmour, or change it to SetPlayerArmour
Oh, my mistake. Testing now.


Re: How can I add a timer to make it so players cant get armor every second? - rangerxxll - 13.09.2011

Now I get
Quote:

C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(32 : error 002: only a single statement (or expression) can follow each "case"
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(333) : warning 209: function "OnDialogResponse" should return a value
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(334) : error 054: unmatched closing brace ("}")
C:\Documents and Settings\Lucas\Desktop\Serverstuff\MyTestServerV1. 0\filterscripts\minigame.pwn(335) : error 010: invalid function or declaration
Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase


3 Errors.

Code:
pawn Код:
COMMAND:getweapons(playerid, cmdtext)
{
    if (!IsPlayerInRangeOfPoint(playerid, 7.0, 2196.2363,-3319.5674,192) && !IsPlayerInRangeOfPoint(playerid, 7.0, 2160.5581,-3017.5974,191))
    {
        SendClientMessage(playerid, 0xFF0000FF, "You're not near the weapon crates"); return 1;
    }
    ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Pick a weapon:", "Deagle\nCombat Shotgun\nAK47\nTearGas\nChainsaw\nSniper\nMinigun\nFlamethrower\nVest", "Pick", "Close");
    return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 32)
    {
        if(!response) return 1; // if he clicked the other button, stop the code
        switch(listitem) // Switch trough all list items
        {
            case 0: GivePlayerWeapon(playerid, 24, 100);
            case 1: GivePlayerWeapon(playerid, 27, 100);
            case 2: GivePlayerWeapon(playerid, 30, 200);
            case 3: GivePlayerWeapon(playerid, 17, 10);
            case 4: GivePlayerWeapon(playerid, 9, 1);
            case 5: GivePlayerWeapon(playerid, 34, 100);
            case 6: GivePlayerWeapon(playerid, 38, 500);
            case 7: GivePlayerWeapon(playerid, 37, 500);
            case 8: SetPlayerArmour(playerid, 100);
            {
                if(ArmorTime[playerid] > gettime()) return SendClientMessage(playerid, COLOR_RED, "You already got armor recently!");
                SetPlayerArmour(playerid, 100); // I want this to have a timer
                ArmorTime[playerid] = gettime() + 15000;
            }
        }
    }
    return 1;
}