[Tutorial] Spawning a car by name not using indivisual commands
#1

Hi, just saw a script with indivisual commands like /nrg and /infernus and what not! This is a small snippet, would probably help you! You need to do this using OnPlayerCommandText, if by a command processor like zcmd, use the callback OnPlayerCommandPerformed, like the first poster has stated below.

You need an array with all the names of vehicles.

pawn Код:
static const gNames[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"}
};
Then, you need to use the callback OnPlayerCommandText - contains cmdtext - which is the text sent by the player. We used strcmp to compare the strings and identify and handle commands.

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    for(new i = 0 ; i < sizeof(gNames); i++) // Loop through all the names of vehicles
    {
          // You can delete the '/' in the cmdtext, or ADD / to every vehicle name. Deleting seems better instead of  adding, 212 times!
           strdel(cmdtext, 0, 1); // Delete the first char

           if(strfind(gNames[i], cmdtext, true) != -1))
           // Matched, so add 400 to the index (First index - 0, Landstalker model is 400..)
           {
                    new Float: x, Float: y, Float: z;
                    GetPlayerPos(playerid, x, y, z);
                 
                    new _temp = CreateVehicle( (400 + i), x, y, z + 5, 0, 0, 0); // Look at the wiki for the params
                    PutPlayerInVehicle(playerid, _temp, 0); // Put in _temp vehicle in driver seat
                    return 1;  // Break out of the loop
            }
     }

    return 0;
   
}
That's it! You can reduce the array to the vehicles you WANT to allow. But then you wouldn't add 400. (NRG, FCR, Infernus, etc)
Reply
#2

Quote:
Originally Posted by RajatPawar
Посмотреть сообщение
Hi, just saw a script with indivisual commands like /nrg and /infernus and what not! This is a small snippet, would probably help you! You need to do this using OnPlayerCommandText and NOT a command processor like zcmd.
It would work even if zcmd is being used, though not by using the basic way of creating commands using zcmd.
pawn Код:
public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
    //This callback is called always when a command is executed.
    if(!success) //It's better to check if it's not a command which is created by zcmd basically to avoid collision.
    {
      //Stuffs
    }
    return 1;
}
Reply
#3

Quote:
Originally Posted by Lordzy
Посмотреть сообщение
It would work even if zcmd is being used, though not by using the basic way of creating commands using zcmd.
pawn Код:
public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
    //This callback is called always when a command is executed.
    if(!success) //It's better to check if it's not a command which is created by zcmd basically to avoid collision.
    {
      //Stuffs
    }
    return 1;
}
True that, forgot about the callbacks, thanks and edited.
Reply
#4

I can't get though how i could script it using zcmd? i mean /car [name]
Reply
#5

Very... Very Simple. There's a lot of functions already made to do this exact job, but this tutorial is still good.
Reply
#6

Lol i thought car id
Reply
#7

You could use the custom specifiers that sscanf offers for an easier way.
Reply
#8

Did you actually bother to test this code for flaws and bugs?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)