(30/01/2024 15:06)zBarbosa Escreveu: Fiz um sistema de Uber e quero que o valor da corrida seja definida pela distância percorrida pelo Uber.
Como faço para ser cobrado uma taxa de dinheiro a cada 100 metros percorridos?
Se armazenar a posição atual do veiculo do uber, e atualizar se a distancia entre o veiculo e a posição armazenada for maior que
100 metros, isso pode ser uma solução para o seu problema.
Código PHP:
new Float:corridaMetros[MAX_VEHICLES][3]; // Array com 3 posições (0, 1, 2)
new UberVeiculo; // Para armazenar o ID do veiculo uber
public OnGameModeInit(){
UberVeiculo = CreateVehicle(....); // Criação do veiculo!
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate){
if(newstate == PLAYER_STATE_PASSENGER){ // Entrou dentro de um veiculo como passageiro
new vehicleid;
if((vehicleid=GetPlayerVehicleID(playerid)) == UberVeiculo){ // Entrou no veiculo do uber
SetTimerEx("timer_UBER", (1000), false, "dd", playerid, vehicleid); // o timer e responsável por fazer a verificação a cada 1 segundo.
GetVehiclePos(vehicleid, corridaMetros[vehicleid][0],corridaMetros[vehicleid][1],corridaMetros[vehicleid][2]); // pegamos a posição do veiculo (Ponto inicial da corrida e atual ponto)
}
}
return 1;
}
forward timer_UBER(vehicleid, playerid);
public timer_UBER(vehicleid, playerid){
// o playerid e o passageiro!
if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER && GetPlayerVehicleID(playerid) == UberVeiculo){ // Caso todas condicoes sejam verdadeiras continue.
// pegamos a distancia entre o veiculo e o ponto atual da corrida.
new Float:distancia
= GetVehicleDistanceFromPoint(vehicleid, corridaMetros[vehicleid][0],corridaMetros[vehicleid][1],corridaMetros[vehicleid][2]);
if(distancia >= 100.0){ // se a distancia for maior ou igual a 100 metros, armazenamos um novo ponto a partir da posição atual do veiculo.
// Novo ponto da corrida
GetVehiclePos(vehicleid, corridaMetros[vehicleid][0],corridaMetros[vehicleid][1],corridaMetros[vehicleid][2]);
if(GetPlayerMoney(playerid) < 100){
// remover o passageiro do veiculo.
RemovePlayerFromVehicle(playerid);
}else{
// descontar o passageiro.
GivePlayerMoney(playerid, -100);
msg(playerid, -1, "100 metros percorridos, você foi descontado $100.");
}
}
SetTimerEx("timer_UBER", (1000), false, "dd", playerid, vehicleid); // Seta o timer novamente.
}else{
// O jogador nao esta no veiculo do UBER ou nao como passageiro.
corridaMetros[vehicleid][0] = 0.0;
corridaMetros[vehicleid][1] = 0.0;
corridaMetros[vehicleid][2] = 0.0;
}
return 1;
}
?