[HELP]Reading car names with ID's - Read. (giving +1 rep who soolve it for me)
#1

Hai,
I have started a new gamemode, and started using for first time zcmd and sscanf. I have made a /car command easily, it is /car [ID], and it works perfectly good. next thing is that I wanted also to be able to use /car [Name/Part of name]. Example, /car infer for infernus. I have copied from here all car list, a GetModelIDFromName function, and I just need if someone should explain me how to make it work also with names. I jsutw ant to keep this, so I can use /car 411 for xample, an in same time /car infernus @ same command. I'll give +1 rep to everyone who helps me.

heres code:

pawn Код:
COMMAND:car(playerid,params[])
{
    if (IsPlayerInAnyVehicle(playerid) != 1)
        {
            new Float: x, Float: y, Float: z, Float: r, vehicle;
            if (!sscanf(params, "i", vehicle))
             {
               if((vehicle < 400 || vehicle > 611) != true )
                {
                    GetPlayerPos(playerid,x,y,z);
                    GetPlayerFacingAngle(playerid,r);
                    vehicle =  CreateVehicle(vehicle, x, y, z, r, 0, 1, 0);
                    PutPlayerInVehicle(playerid,vehicle,0);
                }
               else  SendClientMessage(playerid,-1,"***"#COL_CYAN" ID's: "COL_BLUE"    400-611");
            }
            else SendClientMessage(playerid,-1,"***"#COL_CYAN" Usage: "COL_BLUE"    /car [Car ID]");
        }
    else SendClientMessage(playerid,-1,"***"#COL_CYAN" You already have a "#COL_MAGENTA"car!!");
    return 1;
}
Thank you in advance,
Aco.
Reply
#2

pawn Код:
COMMAND:car(playerid,params[])
{
    if (IsPlayerInAnyVehicle(playerid) != 1)
    {
        //rest of code... sscanf...
        if(isNumeric(params))
        {
            if((vehicle < 400 || vehicle > 611) != true )
            {
                GetPlayerPos(playerid,x,y,z);
                GetPlayerFacingAngle(playerid,r);
                vehicle =  CreateVehicle(vehicle, x, y, z, r, 0, 1, 0);
                PutPlayerInVehicle(playerid,vehicle,0);
            }
            else  SendClientMessage(playerid,-1,"***"#COL_CYAN" ID's: "COL_BLUE"    400-611");
        }
        else
        {
            vehicle = GetVehicleModelIDFromName(params);
            CreateVehicle(vehicle, x, y, z, r, 0, 1, 0);
            PutPlayerInVehicle(playerid,vehicle,0);
        }
        //other code
}
That's not the whole code, just the changes I've made! Add the messages etc by yourself. It should work.
The only thing you need to do is use "isNumeric(params)" and check if it is numeric.
If it is create the ID specified, if not convert the name using GetVehicleModelIDFromName...
Add this:
pawn Код:
stock isNumeric(const string[]) {
    new length=strlen(string);
    if (length==0) return false;
    for (new i = 0; i < length; i++) {
        if (
        (string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+') // Not a number,'+' or '-'
        || (string[i]=='-' && i!=0)                                             // A '-' but not at first.
        || (string[i]=='+' && i!=0)                                             // A '+' but not at first.
        ) return false;
    }
    if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
    return true;
}
Reply
#3

Try this one:
PHP код:
COMMAND:car(playerid,params[])
{
    if (
IsPlayerInAnyVehicle(playerid) != 1)
        {
            new 
FloatxFloatyFloatzFloatrvehicle[25],vehid,i=0;
            if (
sscanf(params"s"vehicle))
                return 
SendClientMessage(playerid, -1"  Usage /car [name]");
                for(
400;<= 611;i++)
                {
                    if(!
strcmp(vehicleVehicleNames[i-400], true))    
                    {
                        
GetPlayerPos(playerid,x,y,z);
                        
GetPlayerFacingAngle(playerid,r);
                        
vehid =  CreateVehicle(ixyzr010);
                        
PutPlayerInVehicle(playerid,vehid,0);
                        
SendClientMessage(playerid,-1,"Car created");
                    }
                }
                
        }
    else 
SendClientMessage(playerid,-1,"*** You already have a car!!");
    return 
1;

Reply
#4

I'd use first as it is looking faster the another one command, since second command have counting trought 200 vehicle for every attemping command. Thank you anyway, +1 rep.

First oen doesen't works,
Second one freezes server, cause it do same command in the counting you made.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)