Alйm da fуrmula atual acima estб incorreta, onde o certo seria
100 * checkpoints pego / checkpoints total, essa fуrmula apenas vai ser atualizada conforme o usuбrio passa pelos checkpoints.
Para um mйtodo muito mais interativo e realista, segue a fуrmula abaixo:
Quote:
DF = Distвncia final (Distвncia entre inнcio e a posiзгo final, posiзгo do ъltimo checkpoint)
DA = Posiзгo atual (Distвncia entre inнcio, primeiro checkpoint, e posiзгo atual, posiзгo atual do jogador)
|
Primeiro defina os valores acima. Para calcular distвncia use
GetPlayerDistanceFromPoint e posiзхes pode usar
GetPlayerPos.
Apуs isso, ao longo da corrida, pode aplicar a fуrmula:
Pequeno exemplo:
Код:
new posInicial[3] = { // Posiзгo do primeiro checkpoint da corrida
{1122.3344, 1122.3344, 1122.3344}
};
new posFinal[3] = { // Posiзгo do ъltimo checkpoint da corrida
{4455.6677, 4455.6677, 4455.6677}
};
new Float:DF; // Armazenamento da distвncia final
/**
* Calcula a distвncia total da corrida, ou seja,
* o primeiro checkpoint ao ъltimo. Deve ser chamada
* apenas no inнcio da corrida, quando o jogador estiver
* no primeiro checkpoint
*/
calcularDistanciaFinalInicioCorrida() {
DF = GetPlayerDistanceFromPoint(playerid, posFinal[0], posFinal[1], posFinal[2]);
}
/**
* Retorna a porcentagem atual de uma corrida
* que inicia em posInicial e termina em posFinal
*/
Float:calcularPorcentagemCorrida(playerid) {
new Float:posAtual[3];
new Float:DA;
new Float:porcentagem;
GetPlayerPos(playerid, posAtual[0], posAtual[1], posAtual[2]);
// Calculando distвncia atual
DA = GetPlayerDistanceFromPoint(playerid, posInicial[0], posInicial[1], posInicial[2]);
// Calculando porcentagem da corrida
porcentagem = (DA * 100) / DF;
// Retornando resultado
return porcentagem
}
O resultado dessa pequena equaзгo serб a porcentagem atual do usuбrio. Ou seja, se ele estiver na metade do caminho, serб 50%. Pode aplicar essa lуgica no OnPlayerUpdate ou se preferir um timer de x em x segundos para ir atualizando.
-- x --
ATENЗГO: O cуdigo de exemplo nгo foi compilado, por este motivo o mesmo pode conter erros. Caso tiver, nгo irei repara-los. O cуdigo foi feito apenas como um exemplo de aplicaзгo da lуgica, essa sim estб correta.