SA-MP Forums Archive
[Ajuda] Ajuda com sistema de carro - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Ajuda com sistema de carro (/showthread.php?tid=419247)



Ajuda com sistema de carro - [ExT]Montana - 28.02.2013

Olб, estou traduzindo o Raven's Roleplay e achei um bug fatal na lуgica do script, no sistema de veнculos.
Exemplo: Quando 2 carros sгo comprados, sгo feitos um Carro Mesa(exemplo)[ID 1] e euros(exemplo)[ID 2], caso o Mesa seja vendido, o euros se torna o ID 1 fazendo com que o dono do carro 2 perca o carro, e passe a ser dono de outro carro. Nгo acontece necessariamente com esses modelos de carro, mas com qualquer um.
OBS: Quando um carro й comprado ele cria o carro, e quando vendido ele destrуi o mesmo.

Cуdigos dos comandos de Compra e Venda dos carros:

Comprar
pawn Код:
else if(strcmp(x_nr,"comprar",true) == 0)
            {
                new car = 1;
                new model = GetVehicleModel(idcar);
                if(IsASalesVehicle(idcar))
                {
                    if(PlayerInfo[playerid][pLevel] < 2)
                    {
                        SendClientMessage(playerid, COLOR_GREY, "Vocк precisa ser level 2 ao menos para comprar um veнculo!");
                        return 1;
                    }
                    if(PlayerInfo[playerid][pPcarkey] == 9999 || PlayerInfo[playerid][pPcarkey2] == 9999) { }
                    else return SendClientMessage(playerid, COLOR_GREY,"* Vocк jб possui 2 veнculos!");
                    if(GetPlayerMoney(playerid) >= GetVehiclePrice(idcar))
                    {
                        if(PlayerInfo[playerid][pCarLic] == 1)
                        {
                            for(new h = 1; h < sizeof(CarInfo); h++)
                            {
                                if(CarInfo[h][cOwned] == 0)
                                {
                                    car = h;
                                    h = 9999;
                                }
                            }
                            format(string, sizeof(string),"LARP/Vehicles/%d.ini",car)
                            dini_Create(string);

                            if(PlayerInfo[playerid][pPcarkey] != 9999) { PlayerInfo[playerid][pPcarkey2] = car; }
                            else { PlayerInfo[playerid][pPcarkey] = car; }
                            CarInfo[car][cOwned] = 1;
                            strmid(CarInfo[car][cOwner], sendername, 0, strlen(sendername), 999);
                            SafeGivePlayerMoney(playerid,-GetVehiclePrice(idcar));
                            if(IsModelAPlane(idcar) || IsModelAHeli(idcar))
                            {
                                CarInfo[car][cLocationx] = 1432.6451;
                                CarInfo[car][cLocationy] = 1378.7216;
                                CarInfo[car][cLocationz] = 11.5507;
                                CarInfo[car][cAngle] = 359.2072;
                                SendClientMessage(playerid, COLOR_YELLOW2, "Sua aeronave foi entregue nгo Aeroporto de Las Venturas, vб busca-lo!");
                                SendClientMessage(playerid, COLOR_YELLOW2, "Seu veнculo foi destrancado e vocк pode pagar alguйm para leva-lo atй o novo local de spawn!");
                                SendClientMessage(playerid, COLOR_NICERED, "LEMBRE-SE: Deixando seu veнculo nгo ponto de entrega pode causar a venda dela por um administrador sem reembolso!!!");
                                GameTextForPlayer(playerid, ConvertToGameText("~p~Parabйns~n~~w~Nгo esqueca de pegar seu aviao nгo aeroporto de ~b~Las Venturas!"), 5000, 3);
                            }
                            else if(IsModelABoat(idcar))
                            {
                                CarInfo[car][cLocationx] = -1568.9614;
                                CarInfo[car][cLocationy] = 169.0118;
                                CarInfo[car][cLocationz] = -0.6016;
                                CarInfo[car][cAngle] = 208.7506;
                                SendClientMessage(playerid, COLOR_YELLOW2, "Seu barco foi entregue nas Docas de San Fierro, vб busca-lo!");
                                SendClientMessage(playerid, COLOR_YELLOW2, "Seu veнculo foi destrancado e vocк pode pagar alguйm para leva-lo atй o novo local de spawn!");
                                SendClientMessage(playerid, COLOR_NICERED, "LEMBRE-SE: Deixando seu veнculo nгo ponto de entrega pode causar a venda dela por um administrador sem reembolso!!!");
                                GameTextForPlayer(playerid, ConvertToGameText("~p~Parabйns~n~~w~nao esqueca de pegar o seu barco nas docas de ~b~San Fierro!"), 5000, 3);
                            }
                            else
                            {
                                CarInfo[car][cLocationx] = -1589.2644;
                                CarInfo[car][cLocationy] = 106.9119;
                                CarInfo[car][cLocationz] = 3.5495;
                                CarInfo[car][cAngle] = 317.1649;
                                SendClientMessage(playerid, COLOR_YELLOW2, "Seu veнculo foi entregue nas Docas de San Fierro, vб busca-lo!");
                                SendClientMessage(playerid, COLOR_YELLOW2, "Seu veнculo foi destrancado e vocк pode pagar alguйm para leva-lo atй o novo local de spawn!");
                                SendClientMessage(playerid, COLOR_NICERED, "LEMBRE-SE: Deixando seu veнculo nгo ponto de entrega pode causar a venda dela por um administrador sem reembolso!!!");
                                GameTextForPlayer(playerid, ConvertToGameText("~p~Parabйns~n~~w~nao esqueca de pegar o seu carro nas docas de ~b~San Fierro!"), 5000, 3);
                            }
                            CarInfo[car][cModel] = model;
                            CarInfo[car][cVirWorld] = 0;
                            CarInfo[car][cPaintjob] = 999;

                            CarInfo[car][cColorOne] = 1;
                            CarInfo[car][cColorTwo] = 1;

                            CarInfo[car][cComponent0] = 0;
                            CarInfo[car][cComponent1] = 0;
                            CarInfo[car][cComponent2] = 0;
                            CarInfo[car][cComponent3] = 0;
                            CarInfo[car][cComponent4] = 0;
                            CarInfo[car][cComponent5] = 0;
                            CarInfo[car][cComponent6] = 0;
                            CarInfo[car][cComponent7] = 0;
                            CarInfo[car][cComponent8] = 0;
                            CarInfo[car][cComponent9] = 0;
                            CarInfo[car][cComponent10] = 0;
                            CarInfo[car][cComponent11] = 0;
                            CarInfo[car][cComponent12] = 0;
                            CarInfo[car][cComponent13] = 0;

                            DestroyVehicle(car);
                            ownedcar[car] = AddStaticVehicleEx(CarInfo[car][cModel],CarInfo[car][cLocationx],CarInfo[car][cLocationy],CarInfo[car][cLocationz],90.0,1,1,30000);
                            PlayerPlayMusic(playerid);
                            SendClientMessage(playerid, COLOR_GRAD2, "Parabйns pela sua nova compra!");
                            SendClientMessage(playerid, COLOR_GRAD2, "Digive /ajudaveiculo para ver o manual do vйiculo!");
                            gEngine[playerid] = 0;
                            engineOn[GetPlayerVehicleID(playerid)] = false;
                            SendClientMessage(playerid, COLOR_GREY, "Lembre-se de colocar um novo cуdigo de seguranзa nгo seu novo veнculo!");
                            new pass[24];
                            format(pass, sizeof(pass),"%d%d%d",random(9),random(9),random(9));
                            CarInfo[car][cCode] = strval(pass);
                            OnPropUpdate(4,car);
                            OnPlayerUpdateEx(playerid);
                        }
                        else
                        {
                            SendClientMessage(playerid, COLOR_WHITE, "* Por questхes de seguranзa, й preciso ter uma Habilitaзгo de motorista para comprar um veнculo!");
                            return 1;
                        }
                    }
                    else
                    {
                        SendClientMessage(playerid, COLOR_GREY, "  Vocк nгo tem dinheiro suficiente em mгos ! ");
                        return 1;
                    }
                }
            }
Vender
pawn Код:
if(strcmp(x_nr,"vender",true) == 0)
            {
                if(IsAtDealership(playerid))
                {
                    if(GetPlayerVehicleID(playerid) == PlayerInfo[playerid][pPcarkey] || GetPlayerVehicleID(playerid) == PlayerInfo[playerid][pPcarkey2])
                    {
                    new ownvehkey;
                    if(GetPlayerVehicleID(playerid) == PlayerInfo[playerid][pPcarkey]) { ownvehkey = PlayerInfo[playerid][pPcarkey]; }
                    else if(GetPlayerVehicleID(playerid) == PlayerInfo[playerid][pPcarkey2]) { ownvehkey = PlayerInfo[playerid][pPcarkey2]; }
                    else { return 1; }
                    if(strcmp(sendername, CarInfo[ownvehkey][cOwner], true) == 0)
                    {
                        new carsellprice = GetVehiclePrice(ownvehkey) / 4 * 3;
                        SafeGivePlayerMoney(playerid,carsellprice);
                        PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
                        format(string, sizeof(string), "~w~Vocк vendeu seu carro por: ~n~~g~$%d", carsellprice);
                        GameTextForPlayer(playerid, ConvertToGameText(string), 10000, 3);
                        if(GetPlayerVehicleID(playerid) == PlayerInfo[playerid][pPcarkey])
                        PlayerInfo[playerid][pPcarkey] = 9999;
                        else if(GetPlayerVehicleID(playerid) == PlayerInfo[playerid][pPcarkey2])
                        PlayerInfo[playerid][pPcarkey2] = 9999;
                        SafeRemovePlayerFromVehicle(playerid);
                        CarInfo[ownvehkey][cOwned] = 0;
                        DestroyVehicle(ownvehkey);
                        TogglePlayerControllable(playerid, 1);
                        format(string, sizeof(string),"LARP/Vehicles/%d.ini",ownvehkey);
                        fremove(string);
                        OnPlayerUpdateEx(playerid);
                        return 1;
                        }
                    }
                    else
                    {
                        SendClientMessage(playerid, COLOR_GREY, "  Vocк precisa estar sentado em seu veнculo para vender! ");
                        return 1;
                    }
                }
                else
                {
                    SendClientMessage(playerid, COLOR_GREY, "Vocк nгo estб em uma Concessionбria");
                    return 1;
                }
            }
Eu pensei em um sistema que ele teleporte os carros vendidos para algum lugar e os defina como carros vendidos, e na hora que for comprar um carro ele detecta um carro destes que foram definidos e o usa. O problema й que nгo sei como fazer com que ele detecte e defina apenas 1 destes...
Espero que tenham entendido e me ajudem.