SA-MP Forums Archive
/getcar not working right - 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: /getcar not working right (/showthread.php?tid=400714)



/getcar not working right - EAsT-OAK_510 - 19.12.2012

Okay, so the problem with this command is that when people use the command twice (once to spawn their car, and the other for the hell of it) it keeps spawning their cars. So if they use it 3 times, it spawns 3 cars.

What I need help on is basically making a function of some sort (or whatever it's called) that checks if a certain player already has their car spawned (either 1 or 2) to send them a message saying "you already have a car spawned!" and not letting them create a new car.

pawn Код:
CMD:getcar(playerid, params[])
{
    if(!IsPlayerLoggedIn(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You need to login first before using any command.");
    new num;
    if(sscanf(params, "d", num)) return SendClientMessage(playerid, -1, "USAGE: /getcar [1-2]");
    if(num != 1 && num != 2) return SendClientMessage(playerid, -1, "USAGE: /getcar [1-2]");
    if(num == 1)
    {
        if(PlayerInfo[playerid][vModel])
        {
            PlayerInfo[playerid][pVeh] = CreateVehicle(PlayerInfo[playerid][vModel], PlayerInfo[playerid][vX],PlayerInfo[playerid][vY],PlayerInfo[playerid][vZ],PlayerInfo[playerid][vA],PlayerInfo[playerid][vC1],PlayerInfo[playerid][vC2],1200);
            if(PlayerInfo[playerid][vLocked]) SetVehicleParamsEx(PlayerInfo[playerid][pVeh], 0, 0, 0, 0, 0, 0, 0);
            for(new i=0; i<14; i++)
            {
                AddVehicleComponent(PlayerInfo[playerid][pVeh], PlayerInfo[playerid][pVehMod][i]);
            }
            SendClientMessage(playerid, COLOR_GREY, "Your vehicle has been spawned.");
        }
        return 1;
    }
    else if(num == 2)
    {
        if(PlayerInfo[playerid][vVModel])
        {
            PlayerInfo[playerid][pVVeh] = CreateVehicle(PlayerInfo[playerid][vVModel], PlayerInfo[playerid][vVX],PlayerInfo[playerid][vVY],PlayerInfo[playerid][vVZ],PlayerInfo[playerid][vVA],PlayerInfo[playerid][vVC1],PlayerInfo[playerid][vVC2],1200);
            if(PlayerInfo[playerid][vVLocked]) SetVehicleParamsEx(PlayerInfo[playerid][pVVeh], 0, 0, 0, 0, 0, 0, 0);
            for(new i=0; i<14; i++)
            {
                AddVehicleComponent(PlayerInfo[playerid][pVVeh], PlayerInfo[playerid][pVVehMod][i]);
            }
            SendClientMessage(playerid, COLOR_GREY, "Your vehicle has been spawned.");
        }
        return 1;
    }
    return 1;
}



Re: /getcar not working right - Nick.D - 19.12.2012

Save the created car to a global player variable, then in the command, check if the variable is greater than 0... if it is, destroy the vehicle, then create the vehicle and assign it to the variable again.


Re: /getcar not working right - EAsT-OAK_510 - 19.12.2012

Quote:
Originally Posted by Nick.D
Посмотреть сообщение
Save the created car to a global player variable, then in the command, check if the variable is greater than 0... if it is, destroy the vehicle, then create the vehicle and assign it to the variable again.
Will this interfere with the other player's cars? because I used to have this and it caused the other player's cars to get destroyed:

pawn Код:
CMD:getcar(playerid, params[])
{
    new engine, vehicleid, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    if(!IsPlayerLoggedIn(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You need to login first before using any command.");
    if(sscanf(params, "mj", params)) return SendClientMessage(playerid, -1, "USAGE: /getcar [1-2]");
    if(!strcmp(params, "1", true))
    {
        if(PlayerInfo[playerid][vModel])
        {
            if(PlayerInfo[playerid][pVeh] != INVALID_VEHICLE_ID) DestroyVehicle(PlayerInfo[playerid][pVeh]);
            PlayerInfo[playerid][pVeh] = CreateVehicle(PlayerInfo[playerid][vModel], PlayerInfo[playerid][vX],PlayerInfo[playerid][vY],PlayerInfo[playerid][vZ],PlayerInfo[playerid][vA],PlayerInfo[playerid][vC1],PlayerInfo[playerid][vC2],1200);
            ChangeVehiclePaintjob(PlayerInfo[playerid][pVeh], PlayerInfo[playerid][vPJ]);
            if(PlayerInfo[playerid][vLocked]) SetVehicleParamsEx(PlayerInfo[playerid][pVeh], 0, 0, 0, 1, 0, 0, 0);
            SetVehicleParamsEx(vehicleid, 0, lights, alarm, doors, bonnet, boot, objective);
            for(new i=0; i<14; i++)
            {
                AddVehicleComponent(PlayerInfo[playerid][pVeh], PlayerInfo[playerid][pVehMod][i]);
            }
        }
        return 1;
    }
    else if(!strcmp(params, "2", true))
    {
        if(PlayerInfo[playerid][vVModel])
        {
            if(PlayerInfo[playerid][pVVeh] != INVALID_VEHICLE_ID) DestroyVehicle(PlayerInfo[playerid][pVVeh]);
            PlayerInfo[playerid][pVVeh] = CreateVehicle(PlayerInfo[playerid][vVModel], PlayerInfo[playerid][vVX],PlayerInfo[playerid][vVY],PlayerInfo[playerid][vVZ],PlayerInfo[playerid][vVA],PlayerInfo[playerid][vVC1],PlayerInfo[playerid][vVC2],1200);
            ChangeVehiclePaintjob(PlayerInfo[playerid][pVVeh], PlayerInfo[playerid][vVPJ]);
            if(PlayerInfo[playerid][vVLocked]) SetVehicleParamsEx(PlayerInfo[playerid][pVVeh], 0, 0, 0, 1, 0, 0, 0);
            SetVehicleParamsEx(vehicleid, 0, lights, alarm, doors, bonnet, boot, objective);
            for(new i=0; i<14; i++)
            {
                AddVehicleComponent(PlayerInfo[playerid][pVVeh], PlayerInfo[playerid][pVVehMod][i]);
            }
        }
        return 1;
    }
    return 1;
}



Re: /getcar not working right - Nick.D - 19.12.2012

Quote:
Originally Posted by EAsT-OAK_510
Посмотреть сообщение
Will this interfere with the other player's cars? because I used to have this and it caused the other player's cars to get destroyed:
It shouldn't do. I use a similar feature in my vehicle spawning command, and it works perfectly.


Re: /getcar not working right - EAsT-OAK_510 - 19.12.2012

So my attempt to it is this:

pawn Код:
new createdcar[MAX_PLAYERS];//top of script

CMD:getcar(playerid, params[])
{
    if(!IsPlayerLoggedIn(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You need to login first before using any command.");
    new num;
    if(sscanf(params, "d", num)) return SendClientMessage(playerid, -1, "USAGE: /getcar [1-2]");
    if(num != 1 && num != 2) return SendClientMessage(playerid, -1, "USAGE: /getcar [1-2]");
    if(num == 1)
    {
        if(CreatedCar == 0)
        {
            if(PlayerInfo[playerid][vModel])
            {
                PlayerInfo[playerid][pVeh] = CreateVehicle(PlayerInfo[playerid][vModel], PlayerInfo[playerid][vX],PlayerInfo[playerid][vY],PlayerInfo[playerid][vZ],PlayerInfo[playerid][vA],PlayerInfo[playerid][vC1],PlayerInfo[playerid][vC2],1200);
                if(PlayerInfo[playerid][vLocked]) SetVehicleParamsEx(PlayerInfo[playerid][pVeh], 0, 0, 0, 0, 0, 0, 0);
                for(new i=0; i<14; i++)
                {
                    AddVehicleComponent(PlayerInfo[playerid][pVeh], PlayerInfo[playerid][pVehMod][i]);
                }
                SendClientMessage(playerid, COLOR_GREY, "Your vehicle has been spawned.");
                CreatedCar[playerid] = 1;
            }
        )
        else if(CreatedCar == 1)
        {
            SendClientMessage(playerid, COLOR_GREY, "Your vehicle is already spawned!");
        }
    }
    else if(num == 2)
    {
        if(CreatedCar == 0)
        {
            if(PlayerInfo[playerid][vVModel])
            {
                PlayerInfo[playerid][pVVeh] = CreateVehicle(PlayerInfo[playerid][vVModel], PlayerInfo[playerid][vVX],PlayerInfo[playerid][vVY],PlayerInfo[playerid][vVZ],PlayerInfo[playerid][vVA],PlayerInfo[playerid][vVC1],PlayerInfo[playerid][vVC2],1200);
                if(PlayerInfo[playerid][vVLocked]) SetVehicleParamsEx(PlayerInfo[playerid][pVVeh], 0, 0, 0, 0, 0, 0, 0);
                for(new i=0; i<14; i++)
                {
                    AddVehicleComponent(PlayerInfo[playerid][pVVeh], PlayerInfo[playerid][pVVehMod][i]);
                }
                SendClientMessage(playerid, COLOR_GREY, "Your vehicle has been spawned.");
                CreatedCar[playerid] = 1;
            }
        )
        else if(CreatedCar == 1)
        {
            SendClientMessage(playerid, COLOR_GREY, "Your vehicle is already spawned!");
        }
    }
    return 1;
}
Will it work?


Re: /getcar not working right - Horrible - 20.12.2012

Quote:
Originally Posted by EAsT-OAK_510
Посмотреть сообщение
So my attempt to it is this:

pawn Код:
new createdcar[MAX_PLAYERS];//top of script

CMD:getcar(playerid, params[])
{
    if(!IsPlayerLoggedIn(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You need to login first before using any command.");
    new num;
    if(sscanf(params, "d", num)) return SendClientMessage(playerid, -1, "USAGE: /getcar [1-2]");
    if(num != 1 && num != 2) return SendClientMessage(playerid, -1, "USAGE: /getcar [1-2]");
    if(num == 1)
    {
        if(CreatedCar == 0)
        {
            if(PlayerInfo[playerid][vModel])
            {
                PlayerInfo[playerid][pVeh] = CreateVehicle(PlayerInfo[playerid][vModel], PlayerInfo[playerid][vX],PlayerInfo[playerid][vY],PlayerInfo[playerid][vZ],PlayerInfo[playerid][vA],PlayerInfo[playerid][vC1],PlayerInfo[playerid][vC2],1200);
                if(PlayerInfo[playerid][vLocked]) SetVehicleParamsEx(PlayerInfo[playerid][pVeh], 0, 0, 0, 0, 0, 0, 0);
                for(new i=0; i<14; i++)
                {
                    AddVehicleComponent(PlayerInfo[playerid][pVeh], PlayerInfo[playerid][pVehMod][i]);
                }
                SendClientMessage(playerid, COLOR_GREY, "Your vehicle has been spawned.");
                CreatedCar[playerid] = 1;
            }
        )
        else if(CreatedCar == 1)
        {
            SendClientMessage(playerid, COLOR_GREY, "Your vehicle is already spawned!");
        }
    }
    else if(num == 2)
    {
        if(CreatedCar == 0)
        {
            if(PlayerInfo[playerid][vVModel])
            {
                PlayerInfo[playerid][pVVeh] = CreateVehicle(PlayerInfo[playerid][vVModel], PlayerInfo[playerid][vVX],PlayerInfo[playerid][vVY],PlayerInfo[playerid][vVZ],PlayerInfo[playerid][vVA],PlayerInfo[playerid][vVC1],PlayerInfo[playerid][vVC2],1200);
                if(PlayerInfo[playerid][vVLocked]) SetVehicleParamsEx(PlayerInfo[playerid][pVVeh], 0, 0, 0, 0, 0, 0, 0);
                for(new i=0; i<14; i++)
                {
                    AddVehicleComponent(PlayerInfo[playerid][pVVeh], PlayerInfo[playerid][pVVehMod][i]);
                }
                SendClientMessage(playerid, COLOR_GREY, "Your vehicle has been spawned.");
                CreatedCar[playerid] = 1;
            }
        )
        else if(CreatedCar == 1)
        {
            SendClientMessage(playerid, COLOR_GREY, "Your vehicle is already spawned!");
        }
    }
    return 1;
}
Will it work?
yeah i think it's will work. just test it


Re: /getcar not working right - eesh - 20.12.2012

Код:
native IsValidVehicle(vehicleid);

CMD:getcar(playerid, params[])
{
    if(!IsPlayerLoggedIn(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You need to login first before using any command.");
    if(IsValidVehicle(PlayerInfo[playerid][pVeh]) DestroyVehicle(PlayerInfo[playerid][pVeh]);
    new num;
    if(sscanf(params, "d", num)) return SendClientMessage(playerid, -1, "USAGE: /getcar [1-2]");
    if(num != 1 && num != 2) return SendClientMessage(playerid, -1, "USAGE: /getcar [1-2]");
    if(num == 1)
    {
        if(PlayerInfo[playerid][vModel])
        {
            PlayerInfo[playerid][pVeh] = CreateVehicle(PlayerInfo[playerid][vModel], PlayerInfo[playerid][vX],PlayerInfo[playerid][vY],PlayerInfo[playerid][vZ],PlayerInfo[playerid][vA],PlayerInfo[playerid][vC1],PlayerInfo[playerid][vC2],1200);
            if(PlayerInfo[playerid][vLocked]) SetVehicleParamsEx(PlayerInfo[playerid][pVeh], 0, 0, 0, 0, 0, 0, 0);
            for(new i=0; i<14; i++)
            {
                AddVehicleComponent(PlayerInfo[playerid][pVeh], PlayerInfo[playerid][pVehMod][i]);
            }
            SendClientMessage(playerid, COLOR_GREY, "Your vehicle has been spawned.");
        }
        return 1;
    }
    else if(num == 2)
    {
        if(PlayerInfo[playerid][vVModel])
        {
            PlayerInfo[playerid][pVVeh] = CreateVehicle(PlayerInfo[playerid][vVModel], PlayerInfo[playerid][vVX],PlayerInfo[playerid][vVY],PlayerInfo[playerid][vVZ],PlayerInfo[playerid][vVA],PlayerInfo[playerid][vVC1],PlayerInfo[playerid][vVC2],1200);
            if(PlayerInfo[playerid][vVLocked]) SetVehicleParamsEx(PlayerInfo[playerid][pVVeh], 0, 0, 0, 0, 0, 0, 0);
            for(new i=0; i<14; i++)
            {
                AddVehicleComponent(PlayerInfo[playerid][pVVeh], PlayerInfo[playerid][pVVehMod][i]);
            }
            SendClientMessage(playerid, COLOR_GREY, "Your vehicle has been spawned.");
        }
        return 1;
    }
    return 1;
}
IM not sure if IsValidVehicle works

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


Re: /getcar not working right - EAsT-OAK_510 - 20.12.2012

pawn Код:
if(IsValidVehicle(PlayerInfo[playerid][pVeh]) DestroyVehicle(PlayerInfo[playerid][pVeh]);
This give me an error

Код:
error 001: expected token: ")", but found "-identifier-"



Re: /getcar not working right - eesh - 20.12.2012

if(IsValidVehicle(PlayerInfo[playerid][pVeh])) DestroyVehicle(PlayerInfo[playerid][pVeh]);

missed a bracket :P


Re: /getcar not working right - EAsT-OAK_510 - 20.12.2012

Quote:
Originally Posted by eesh
Посмотреть сообщение
if(IsValidVehicle(PlayerInfo[playerid][pVeh])) DestroyVehicle(PlayerInfo[playerid][pVeh]);

missed a bracket :P
It still gives me the same problem. If another player also has their car spawned near me when i use /getcar 1 it destroys their car and spawns mine.