Portal SAMP
[Ajuda] Porcentagem - 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] Porcentagem (/showthread.php?tid=4836)



Porcentagem - Lvzin Samp - 10/07/2024

Olá queria saber como que faz um cronômetro que indica quando a progress bar irar sumir igual ao exemplo abaixo, eu tentei fazer pelo SetTimerEx mais não deu certo.

Video - https://uploadnow.io/f/BH7syqV


RE: Porcentagem - xbruno1000x - 10/07/2024

É com setTimerEx mesmo. Mostra aí como tentou fazer.


RE: Porcentagem - Lvzin Samp - 11/07/2024

(10/07/2024 22:31)xbruno1000x Escreveu: É com setTimerEx mesmo. Mostra aí como tentou fazer.

(10/07/2024 22:31)xbruno1000x Escreveu: É com setTimerEx mesmo. Mostra aí como tentou fazer.

Código PHP:
enum pnfo{
    
MinutosPorc,
    
SegundosPorc,
}
new 
PInfo[MAX_PLAYERS][pnfo];


new 
TimerPorcentagem[MAX_PLAYERS];

#include YSI_Coding\y_hooks
hook OnPlayerDisconnect(playeridreason)
{
    
KillTimer(TimerPorcentagem[playerid]);
    return 
1;
}

hook OnGameModeInt()
{
    
Aviso[playerid][3] = CreatePlayerTextDraw(playerid363.000363.000"00:00");
    PlayerTextDrawLetterSize(playeridAviso[playerid][3], 0.1500.999);
    PlayerTextDrawAlignment(playeridAviso[playerid][3], 1);
    PlayerTextDrawColor(playeridAviso[playerid][3], -1);
    PlayerTextDrawSetShadow(playeridAviso[playerid][3], 0);
    PlayerTextDrawSetOutline(playeridAviso[playerid][3], 0);
    PlayerTextDrawBackgroundColor(playeridAviso[playerid][3], 150);
    PlayerTextDrawFont(playeridAviso[playerid][3], 1);
    PlayerTextDrawSetProportional(playeridAviso[playerid][3], 1);
    return 
1;
}

CMD:teste(playerid)
{
    for(new 
i<9i++)
        
TextDrawShowForPlayer(playeridProgress[i]);

    for(new 
i<3i++)
    
    PlayerTextDrawShow(playeridAviso[playerid][i]);

    
TimerPorcentagem[playerid] = SetTimerEx("Porcentagem"1000true"i"playerid);

    new 
string[125];
    
format(stringsizeof(string), "%02d:%02d"PInfo[playerid][MinutosPorc], PInfo[playerid][SegundosPorc]);
    
PlayerTextDrawSetString(playeridAviso[playerid][3], string);
    
PlayerTextDrawShow(playeridAviso[playerid][3]);
      return 1;
}

forward Porcentagem(playerid);
public 
Porcentagem(playerid)
{
    if(PInfo[playerid][SegundosPorc] > 0)
    {
    
    PInfo[playerid][SegundosPorc] --;
    }
    if(
PInfo[playerid][SegundosPorc] == && PInfo[playerid][MinutosPorc] >= 1)
    {
        
PInfo[playerid][SegundosPorc] = 59;
        
PInfo[playerid][MinutosPorc] --;
    }
    if(
PInfo[playerid][SegundosPorc] == && PInfo[playerid][MinutosPorc] == 0)
    {
        
KillTimer(TimerPorcentagem[playerid]);
        
TimerPorcentagem[playerid] = 0;

        
PInfo[playerid][MinutosPorc] = 0;
        
PInfo[playerid][SegundosPorc] = 0;

        for(new 
i<9i++)
            
TextDrawHideForPlayer(playeridProgress[i]);

        for(new 
i<3i++)
    
        PlayerTextDrawHide(playeridAviso[playerid][i]);
        return 
1;
    }
    new 
string[10000];
    
format(stringsizeof(string), "%02d:%02d"PInfo[playerid][MinutosPorc], PInfo[playerid][SegundosPorc]);
    
PlayerTextDrawSetString(playerid,  Aviso[playerid][3], string);
    return 
1;




RE: Porcentagem - xbruno1000x - 12/07/2024

Testei o seu timer e está funcionando bem.

Encontrei um problema de boa prática nesse variável:
Código:
new string[10000];
Jamais use um tamanho tão grande numa variável. Você criou um vetor de 10000 sendo que um de 10 já funcionaria.

Código:
hook OnGameModeInt()
{
    Aviso[playerid][3] = CreatePlayerTextDraw(playerid, 363.000, 363.000, "00:00");
    PlayerTextDrawLetterSize(playerid, Aviso[playerid][3], 0.150, 0.999);
    PlayerTextDrawAlignment(playerid, Aviso[playerid][3], 1);
    PlayerTextDrawColor(playerid, Aviso[playerid][3], -1);
    PlayerTextDrawSetShadow(playerid, Aviso[playerid][3], 0);
    PlayerTextDrawSetOutline(playerid, Aviso[playerid][3], 0);
    PlayerTextDrawBackgroundColor(playerid, Aviso[playerid][3], 150);
    PlayerTextDrawFont(playerid, Aviso[playerid][3], 1);
    PlayerTextDrawSetProportional(playerid, Aviso[playerid][3], 1);
    return 1;
}
Esse trecho aqui nem compilaria pois não se usa playerid na OnGameModeInit. Deveria estar na OnPlayerConnect.

O que não estava no seu código era a progressbar, então segue um exemplo usando a include progress2 que automatiza a parte de criação de barra de progresso.

Link da include:
https://raw.githubusercontent.com/Southclaws/progress2/master/progress2.inc

Link do exemplo:
https://raw.githubusercontent.com/Southclaws/progress2/master/demo.pwn

Você deve reduzir a barra dentro do timer.


RE: Porcentagem - Lvzin Samp - 12/07/2024

(12/07/2024 00:30)xbruno1000x Escreveu: Testei o seu timer e está funcionando bem.

Encontrei um problema de boa prática nesse variável:
Código:
new string[10000];
Jamais use um tamanho tão grande numa variável. Você criou um vetor de 10000 sendo que um de 10 já funcionaria.

Código:
hook OnGameModeInt()
{
    Aviso[playerid][3] = CreatePlayerTextDraw(playerid, 363.000, 363.000, "00:00");
    PlayerTextDrawLetterSize(playerid, Aviso[playerid][3], 0.150, 0.999);
    PlayerTextDrawAlignment(playerid, Aviso[playerid][3], 1);
    PlayerTextDrawColor(playerid, Aviso[playerid][3], -1);
    PlayerTextDrawSetShadow(playerid, Aviso[playerid][3], 0);
    PlayerTextDrawSetOutline(playerid, Aviso[playerid][3], 0);
    PlayerTextDrawBackgroundColor(playerid, Aviso[playerid][3], 150);
    PlayerTextDrawFont(playerid, Aviso[playerid][3], 1);
    PlayerTextDrawSetProportional(playerid, Aviso[playerid][3], 1);
    return 1;
}
Esse trecho aqui nem compilaria pois não se usa playerid na OnGameModeInit. Deveria estar na OnPlayerConnect.

O que não estava no seu código era a progressbar, então segue um exemplo usando a include progress2 que automatiza a parte de criação de barra de progresso.

Link da include:
https://raw.githubusercontent.com/Southclaws/progress2/master/progress2.inc

Link do exemplo:
https://raw.githubusercontent.com/Southclaws/progress2/master/demo.pwn

Você deve reduzir a barra dentro do timer.
Conseguir fazer aqui muito obrigado mesmo.