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.