Então galera . fiz aqui , deu certo, e resolvi compartilhar :p
É um velocímetro básico , criado a partir de uma GameTextForPlayer.
Eu particularmente fiquei muito feliz, por que conseguir fazer , sem precisar de muito esforço ,
só usando a lógica que eu tinha pensado ...
Em fim .
Primeiramente, na Public OnPlayerState, vamos verificar se o novo estado do jogador é de Motorista.
Se for, vamos disparar um Timer. Siga o exemplo:
OBS: Crie a variável global Timer_Velo. de preferencia, no topo de seu GM . :p
Assim:
- Código:
new Timer_Velo;
Aqui , na public OnPlayerStateChange, estamos verificando se o estado do jogador é de motorista, se for
a Variável Timer_Velo irá disparar um Timer.
- Código:
public OnPlayerStateChange(playerid, newstate, oldstate)
if( newstate == PLAYER_STATE_DRIVER)
Timer_Velo = SetTimer("KMH", 10, true);
Agora vamos declarar a Public KMH, que foi chamada pelo Timer.
forward KMH(playerid); // Atualizado by DartakousLien :p
public KMH(playerid)
{
new Str[80];
format(Str, sizeof(Str), "~w~KM/H:~g~ %d", GetPlayerSpeed(playerid));
GameTextForPlayer(playerid, Str, false, 6);
Aqui, criamos uma string, que armazenara a velocidade do jogador, que será chamada por uma stock .
Jogamos o valor encontrado dentro da GameTextForPlayer.
OBS: Faça exatamente como está no exemplo.
Agora, no fim do GM, vamos declarar a Stock GetPlayerSpeed. ( Créditos : Desconhecido , achei na net por acaso)
- Código:
stock GetPlayerSpeed(playerid)
new Float:ST[4];
if(IsPlayerInAnyVehicle(playerid))
GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);
else GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);
ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 100.3;
return floatround(ST[3]);
E por ultimo, vamos voltar a public OnPlayerState, e vamos verificar , se o estado antigo do Jogador era Motorista.
Assim , toda vez que ele sair de um veículo em que ele estivesse dirigindo ,a verificação será chamada.
- Código:
public OnPlayerStateChange(playerid, newstate, oldstate)
if( oldstate == PLAYER_STATE_DRIVER)
{
KillTimer(Timer_Velo );
}
Acima, estamos Destruindo o timer, fazendo que a GameTextForPlayer Desapareça .
A Public OnPlayerStateChange deve ficar no final das contas assim :
- Código:
public OnPlayerStateChange(playerid, newstate, oldstate)
if( newstate == PLAYER_STATE_DRIVER);
Timer = SetTimer("KMH", 10, true);
if( oldstate == PLAYER_STATE_DRIVER);
KillTimer(Timer_Velo);
}
return 1;
}
Em fim, espero que tenham entendido.
Minhas intenções foram ajudar. aqui em casa deu certo, ficou como eu esperava.
Algumas ScreenShots :
--
--
Se não carregar :
https://2img.net/r/ihimg/a/img842/4350/samp000eng.png
--
https://2img.net/r/ihimg/a/img29/4905/samp002gme.png
--
https://2img.net/r/ihimg/a/img20/9828/samp001dmf.png
Boa noite !!
Creditos: rCr
quaisquer bugs/erros comente!