How to make a timer for non-admin
#1

Hi, i have a car script where you do /v (car) and it spawns that car. There is no timer on it so anyone can spam the command and make us all lag. How can i make it so that only admins can spam it but normal players have to wait like a minute for each car spawn?

Here is the code (i dont mind putting it out cuz i didnt make it)

pawn Код:
#include <a_samp>

#define FILTERSCRIPT
#if defined FILTERSCRIPT

#define l_red 0xFF0000AA
#define l_green 0x33FF33AA

new aVehicleNames[212][] =
{
    {"Landstalker"},
    {"Bravura"},
    {"Buffalo"},
    {"Linerunner"},
    {"Perrenial"},
    {"Sentinel"},
    {"Dumper"},
    {"Firetruck"},
    {"Trashmaster"},
    {"Stretch"},
    {"Manana"},
    {"Infernus"},
    {"Voodoo"},
    {"Pony"},
    {"Mule"},
    {"Cheetah"},
    {"Ambulance"},
    {"Leviathan"},
    {"Moonbeam"},
    {"Esperanto"},
    {"Taxi"},
    {"Washington"},
    {"Bobcat"},
    {"Mr Whoopee"},
    {"BF Injection"},
    {"Hunter"},
    {"Premier"},
    {"Enforcer"},
    {"Securicar"},
    {"Banshee"},
    {"Predator"},
    {"Bus"},
    {"Rhino"},
    {"Barracks"},
    {"Hotknife"},
    {"Trailer 1"},
    {"Previon"},
    {"Coach"},
    {"Cabbie"},
    {"Stallion"},
    {"Rumpo"},
    {"RC Bandit"},
    {"Romero"},
    {"Packer"},
    {"Monster"},
    {"Admiral"},
    {"Squalo"},
    {"Seasparrow"},
    {"Pizzaboy"},
    {"Tram"},
    {"Trailer 2"},
    {"Turismo"},
    {"Speeder"},
    {"Reefer"},
    {"Tropic"},
    {"Flatbed"},
    {"Yankee"},
    {"Caddy"},
    {"Solair"},
    {"Berkley's RC Van"},
    {"Skimmer"},
    {"PCJ-600"},
    {"Faggio"},
    {"Freeway"},
    {"RC Baron"},
    {"RC Raider"},
    {"Glendale"},
    {"Oceanic"},
    {"Sanchez"},
    {"Sparrow"},
    {"Patriot"},
    {"Quad"},
    {"Coastguard"},
    {"Dinghy"},
    {"Hermes"},
    {"Sabre"},
    {"Rustler"},
    {"ZR-350"},
    {"Walton"},
    {"Regina"},
    {"Comet"},
    {"BMX"},
    {"Burrito"},
    {"Camper"},
    {"Marquis"},
    {"Baggage"},
    {"Dozer"},
    {"Maverick"},
    {"News Chopper"},
    {"Rancher"},
    {"FBI Rancher"},
    {"Virgo"},
    {"Greenwood"},
    {"Jetmax"},
    {"Hotring"},
    {"Sandking"},
    {"Blista Compact"},
    {"Police Maverick"},
    {"Boxville"},
    {"Benson"},
    {"Mesa"},
    {"RC Goblin"},
    {"Hotring Racer A"},
    {"Hotring Racer B"},
    {"Bloodring Banger"},
    {"Rancher"},
    {"Super GT"},
    {"Elegant"},
    {"Journey"},
    {"Bike"},
    {"Mountain Bike"},
    {"Beagle"},
    {"Cropdust"},
    {"Stunt"},
    {"Tanker"},
    {"Roadtrain"},
    {"Nebula"},
    {"Majestic"},
    {"Buccaneer"},
    {"Shamal"},
    {"Hydra"},
    {"FCR-900"},
    {"NRG-500"},
    {"HPV1000"},
    {"Cement Truck"},
    {"Tow Truck"},
    {"Fortune"},
    {"Cadrona"},
    {"FBI Truck"},
    {"Willard"},
    {"Forklift"},
    {"Tractor"},
    {"Combine"},
    {"Feltzer"},
    {"Remington"},
    {"Slamvan"},
    {"Blade"},
    {"Freight"},
    {"Streak"},
    {"Vortex"},
    {"Vincent"},
    {"Bullet"},
    {"Clover"},
    {"Sadler"},
    {"Firetruck LA"},
    {"Hustler"},
    {"Intruder"},
    {"Primo"},
    {"Cargobob"},
    {"Tampa"},
    {"Sunrise"},
    {"Merit"},
    {"Utility"},
    {"Nevada"},
    {"Yosemite"},
    {"Windsor"},
    {"Monster A"},
    {"Monster B"},
    {"Uranus"},
    {"Jester"},
    {"Sultan"},
    {"Stratum"},
    {"Elegy"},
    {"Raindance"},
    {"RC Tiger"},
    {"Flash"},
    {"Tahoma"},
    {"Savanna"},
    {"Bandito"},
    {"Freight Flat"},
    {"Streak Carriage"},
    {"Kart"},
    {"Mower"},
    {"Duneride"},
    {"Sweeper"},
    {"Broadway"},
    {"Tornado"},
    {"AT-400"},
    {"DFT-30"},
    {"Huntley"},
    {"Stafford"},
    {"BF-400"},
    {"Newsvan"},
    {"Tug"},
    {"Trailer 3"},
    {"Emperor"},
    {"Wayfarer"},
    {"Euros"},
    {"Hotdog"},
    {"Club"},
    {"Freight Carriage"},
    {"Trailer 3"},
    {"Andromada"},
    {"Dodo"},
    {"RC Cam"},
    {"Launch"},
    {"Police Car (LSPD)"},
    {"Police Car (SFPD)"},
    {"Police Car (LVPD)"},
    {"Police Ranger"},
    {"Picador"},
    {"S.W.A.T. Van"},
    {"Alpha"},
    {"Phoenix"},
    {"Glendale"},
    {"Sadler"},
    {"Luggage Trailer A"},
    {"Luggage Trailer B"},
    {"Stair Trailer"},
    {"Boxville"},
    {"Farm Plow"},
    {"Utility Trailer"}
};

#endif

public OnPlayerCommandText(playerid, cmdtext[])
{
    new cmd[200], idx;
    cmd = strtok(cmdtext, idx);
   
    if(strcmp(cmd, "/v", true, 10) == 0)
    {
        new String[200];
        new tmp[256];
        new Float:x, Float:y, Float:z;
       
        tmp = strtok(cmdtext, idx);
        if(!strlen(tmp)) return SendClientMessage(playerid, l_red, "Usage: /v [car name].");

        new vehicle = GetVehicleModelIDFromName(tmp);

        if(vehicle < 400 || vehicle > 611) return SendClientMessage(playerid, l_red, "Invalid Vehicle Name.");

        new Float:a;
        GetPlayerFacingAngle(playerid, a);
        GetPlayerPos(playerid, x, y, z);

        if(IsPlayerInAnyVehicle(playerid) == 1)
        {
            GetXYInFrontOfPlayer(playerid, x, y, 8);
        }
        else
        {
            GetXYInFrontOfPlayer(playerid, x, y, 5);
        }
       
        new PlayersVehicle = CreateVehicle(vehicle, x, y, z, a+90, -1, -1, -1);
        LinkVehicleToInterior(PlayersVehicle, GetPlayerInterior(playerid));

        format(String, sizeof(String), "You have spawned a %s", aVehicleNames[vehicle - 400]);
        SendClientMessage(playerid, l_green, String);
        return 1;
    }
    return 0;
}

strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}

GetVehicleModelIDFromName(vname[])
{
    for(new i = 0; i < 211; i++)
    {
        if(strfind(aVehicleNames[i], vname, true) != -1)
        return i + 400;
    }
    return -1;
}

stock GetXYInFrontOfPlayer(playerid, &Float:x2, &Float:y2, Float:distance)
{
    new Float:a;

    GetPlayerPos(playerid, x2, y2, a);
    GetPlayerFacingAngle(playerid, a);

    if(GetPlayerVehicleID(playerid))
    {
        GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
    }

    x2 += (distance * floatsin(-a, degrees));
    y2 += (distance * floatcos(-a, degrees));
}
Reply
#2

Add this to the top of your script:

pawn Код:
new SpawnedRecently[MAX_PLAYERS];
Replace your old /v command with this:

pawn Код:
if(strcmp(cmd, "/v", true, 10) == 0)
{
    new String[200];
    new tmp[256];
    new Float:x, Float:y, Float:z;

    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid, l_red, "Usage: /v [car name].");

    if(!IsPlayerAdmin(playerid) && SpawnedRecently[playerid] == 1) return SendClientMessage(playerid,l_red,"Please Wait Before Spawning Another Car.");

    new vehicle = GetVehicleModelIDFromName(tmp);

    if(vehicle < 400 || vehicle > 611) return SendClientMessage(playerid, l_red, "Invalid Vehicle Name.");

    new Float:a;
    GetPlayerFacingAngle(playerid, a);
    GetPlayerPos(playerid, x, y, z);

    if(IsPlayerInAnyVehicle(playerid) == 1)
    {
        GetXYInFrontOfPlayer(playerid, x, y, 8);
    }
    else
    {
        GetXYInFrontOfPlayer(playerid, x, y, 5);
    }

    new PlayersVehicle = CreateVehicle(vehicle, x, y, z, a+90, -1, -1, -1);
    LinkVehicleToInterior(PlayersVehicle, GetPlayerInterior(playerid));

    format(String, sizeof(String), "You have spawned a %s", aVehicleNames[vehicle - 400]);
    SendClientMessage(playerid, l_green, String);

    if(!IsPlayerAdmin(playerid))
    {
        SetPVarInt(playerid, "WaitSpawn", SetTimerEx("WaitSpawn", 15000, true, "i", playerid));
        SpawnedRecently[playerid] = 1;
    }

    return 1;
}
Add to the bottom of your script:

pawn Код:
forward WaitSpawn(playerid);
public WaitSpawn(playerid);
{
    if(SpawnedRecently[playerid] == 1)
    {
        SpawnedRecently[playerid] = 0;
    }
}
Note:

I used IsPlayerAdmin function to determine whether the player is an RCON admin, replace it with your own admin variable if you have it.

Untested.
Reply
#3

Quote:
Originally Posted by grand.Theft.Otto
Посмотреть сообщение
Add this to the top of your script:

pawn Код:
new SpawnedRecently[MAX_PLAYERS];
Replace your old /v command with this:

pawn Код:
if(strcmp(cmd, "/v", true, 10) == 0)
{
    new String[200];
    new tmp[256];
    new Float:x, Float:y, Float:z;

    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid, l_red, "Usage: /v [car name].");

    if(!IsPlayerAdmin(playerid) && SpawnedRecently[playerid] == 1) return SendClientMessage(playerid,l_red,"Please Wait Before Spawning Another Car.");

    new vehicle = GetVehicleModelIDFromName(tmp);

    if(vehicle < 400 || vehicle > 611) return SendClientMessage(playerid, l_red, "Invalid Vehicle Name.");

    new Float:a;
    GetPlayerFacingAngle(playerid, a);
    GetPlayerPos(playerid, x, y, z);

    if(IsPlayerInAnyVehicle(playerid) == 1)
    {
        GetXYInFrontOfPlayer(playerid, x, y, 8);
    }
    else
    {
        GetXYInFrontOfPlayer(playerid, x, y, 5);
    }

    new PlayersVehicle = CreateVehicle(vehicle, x, y, z, a+90, -1, -1, -1);
    LinkVehicleToInterior(PlayersVehicle, GetPlayerInterior(playerid));

    format(String, sizeof(String), "You have spawned a %s", aVehicleNames[vehicle - 400]);
    SendClientMessage(playerid, l_green, String);

    if(!IsPlayerAdmin(playerid))
    {
        SetPVarInt(playerid, "WaitSpawn", SetTimerEx("WaitSpawn", 15000, true, "i", playerid));
        SpawnedRecently[playerid] = 1;
    }

    return 1;
}
Add to the bottom of your script:

pawn Код:
forward WaitSpawn(playerid);
public WaitSpawn(playerid);
{
    if(SpawnedRecently[playerid] == 1)
    {
        SpawnedRecently[playerid] = 0;
    }
}
Note:

I used IsPlayerAdmin function to determine whether the player is an RCON admin, replace it with your own admin variable if you have it.

Untested.
C:\Documents and Settings/Desktop\samp03csvr_R2-2_win32\filterscripts\car.txt(324) : error 055: start of function body without function header
C:\Documents and Settings\Desktop\samp03csvr_R2-2_win32\filterscripts\car.txt(325) : error 010: invalid function or declaration
Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase


2 Errors.
Reply
#4

What line is 324 and 325 ?
Reply
#5

i fixed 324 it had a {
325: if(SpawnedRecently[playerid] == 1)
Reply
#6

Cool! Very Nice Job
Reply
#7

Quote:
Originally Posted by RepzThat
Посмотреть сообщение
Cool! Very Nice Job
nice job with what? there are errors
Reply
#8

Quote:
Originally Posted by googamalugafoo
Посмотреть сообщение
nice job with what? there are errors
He's a post whore.
Reply
#9

it says it has an error but it works still. Ty and how do i set the time if i want
Reply
#10

Quote:
Originally Posted by Schurman
Посмотреть сообщение
He's a post whore.
ROFL!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)