Portal SAMP
[Ajuda] Sistema de gasolina 90% pronto. - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Sistema de gasolina 90% pronto. (/showthread.php?tid=2611)



Sistema de gasolina 90% pronto. - Ryuzaki - 30/07/2022

Boa noite pessoal, estava codando um sistema de gasolina em DOF2, e depois de tudo pronto, me deparei com a seguinte situação.
Se eu coloco na dialog que quero 80 litros, no painel ( textdraw ) ele vai direto para o 80.

Em resumo vamos supor que estou com 0 litros e coloco 80 ele sobe direto para 80, gostaria que fosse de 1 em 1 até atingir 80.
Como posso fazer? tentei usar ( for ) mais não consegui pensar em uma lógica boa e funcional usando o for.


RE: Sistema de gasolina 90% pronto. - xbruno1000x - 30/07/2022

Coloque um timer com a função nativa While. Enquanto o valor da textdraw for diferente da gasolina no carro, o looping vai continuar aumentando de 1 em 1.

Exemplo:
While(Gasolina != 80)
{
//AUMENTO DA TEXTDRAW AQUI
}


RE: Sistema de gasolina 90% pronto. - Ryuzaki - 30/07/2022

(30/07/2022 02:56)xbruno1000x Escreveu: Coloque um timer com a função nativa While. Enquanto o valor da textdraw for diferente da gasolina no carro, o looping vai continuar aumentando de 1 em 1.

Exemplo:
While(Gasolina != 80)
{
//AUMENTO DA TEXTDRAW AQUI
}

Deixa eu ver se entendi, eu devo usar o while e um SetTimer para fazer esse processo? irei começar a fazer aqui ...

Caso não for isso deixarei aqui o pedaço do código de como está, ai se poder me da um exemplo a baixo, minha GM está em módulos, devido a isso a textdraw é atualizada em outro lugar.

Obs: assim que eu terminar aqui posto como resolvido, vlw.


Código:
new gastou, litros, Valor;
        if(GetPlayerMoney(playerid) < 10) return SendClientMessage(playerid, Vermelho, "[ ! ] Você não tem dinheiro suficiente para abastecer.");
        if(PlayerInfo[playerid][Gasolina] >= 80) return SendClientMessage(playerid, Vermelho, "[ ! ] Seu tanque já está cheio.");
        Valor = strval(inputtext);
        if(Valor > 80) return SendClientMessage(playerid, Vermelho, "[ ! ] Você não poder colocar acima de ( 80 ) litros.");
        if(Valor <= 80)
        {
             if(PlayerInfo[playerid][Gasolina] < 80)
             {
             if(GetPlayerMoney(playerid) < 10) return SendClientMessage(playerid, Vermelho, "[ ! ] Você não tem dinheiro suficiente para continuar abastecendo.");

       

             PlayerInfo[playerid][Gasolina] += 1;
             GivePlayerMoney(playerid, -10);
             gastou += 10;
             litros += 1;

            new extrato[100];
            format(extrato,sizeof extrato,"{FFFFFF}Voce acabou de abastecer {8080FF}%d. {FFFFFF}Valor pago: {8080FF}R$ %d", litros,gastou);
            ShowPlayerDialog(playerid,DIALOG_EXTRATO_COMBUSTIVEL,DIALOG_STYLE_MSGBOX,"Extrato do combustível",extrato,"Ok","");



RE: Sistema de gasolina 90% pronto. - Carlos Victor - 30/07/2022

Sim, você pode criar um timer e usar a função while e ir enchendo aos poucos a gasolina, eu fiz um exemplo bem base mesmo... Você pode ver como ficou:
Código PHP:
new fuel 0;
new 
timerFuel;

public 
OnGameModeInit()
{
    for(new 
010i++)
        print(
" ");

    print(
"============================");
    
timerFuel SetTimer("OnFuel"200true);
    return 
1;
}

forward OnFuel();
public 
OnFuel()
{
    while(
fuel 20)
    {
        
KillTimer(timerFuel);
        
printf("Tanque enchido.");
        return 
1;
    }

    
printf("Enchendo gasolina... %d%%"fuel);
    
fuel++;
    return 
1;


E acredito que é do jeito uqe você gostaria que fosse, olha aqui uma screenshot: https://servimg.com/view/20237768/74
Qualquer dúvida, só chamar.


RE: Sistema de gasolina 90% pronto. - Ryuzaki - 31/07/2022

(30/07/2022 18:34)Carlos Victor Escreveu: Sim, você pode criar um timer e usar a função while e ir enchendo aos poucos a gasolina, eu fiz um exemplo bem base mesmo... Você pode ver como ficou:
Código PHP:
new fuel 0;
new 
timerFuel;

public 
OnGameModeInit()
{
    for(new 
010i++)
        print(
" ");

    print(
"============================");
    
timerFuel SetTimer("OnFuel"200true);
    return 
1;
}

forward OnFuel();
public 
OnFuel()
{
    while(
fuel 20)
    {
        
KillTimer(timerFuel);
        
printf("Tanque enchido.");
        return 
1;
    }

    
printf("Enchendo gasolina... %d%%"fuel);
    
fuel++;
    return 
1;


E acredito que é do jeito uqe você gostaria que fosse, olha aqui uma screenshot: https://servimg.com/view/20237768/74
Qualquer dúvida, só chamar.


Problema resolvido, obrigado, eu tinha feito semelhante, porem sem o while somente com for e timer.
Desta maneira deixei sem o for, apenas puxo o timer uma vez com true e o while faz o resto, vlw amigo.