Portal SAMP
[Ajuda] barra da fome e sede - 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] barra da fome e sede (/showthread.php?tid=3175)



barra da fome e sede - MagnatuS - 13/01/2023

eu fiz um sistema de barrinha de fome e sede mais quando chegar 20% ela passa da barra voces pode me ajuda ?


Código:
Mag: AtualizarFomeSede(playerid)
{
    if(PlayerSpectando[playerid] == false)
    {
        if(UserInfo[playerid][user_fome] > 100) UserInfo[playerid][user_fome] = 100;
        if(UserInfo[playerid][user_sede] > 100) UserInfo[playerid][user_sede] = 100;
        new Float:vidaplayer;
        GetPlayerHealth(playerid, vidaplayer);
        
        PlayerTextDrawSetString(playerid, ContFomeSede[playerid], fmat_return("%d%", UserInfo[playerid][user_fome]));
        PlayerTextDrawTextSize(playerid, BarraFomeSede[playerid], 440+UserInfo[playerid][user_fome]  , 1.0 );
        PlayerTextDrawShow(playerid, BarraFomeSede[playerid]);
        
        PlayerTextDrawSetString(playerid, ContFomeSede1[playerid], fmat_return("%d%", UserInfo[playerid][user_sede]));
        PlayerTextDrawTextSize(playerid, BarraFomeSede1[playerid], 530+UserInfo[playerid][user_sede]  , 1.0 );
        PlayerTextDrawShow(playerid, BarraFomeSede1[playerid]);
       
        if(UserInfo[playerid][user_fome] == 10)
        {
            PlayerTextDrawSetString(playerid, ContFomeSede[playerid], fmat_return("%d%", UserInfo[playerid][user_fome]));
            PlayerTextDrawTextSize(playerid, BarraFomeSede[playerid], 477+UserInfo[playerid][user_fome]  , 1.0 );
            PlayerTextDrawShow(playerid, BarraFomeSede[playerid]);
        }
        if(UserInfo[playerid][user_fome] == 9)
        {
            PlayerTextDrawSetString(playerid, ContFomeSede[playerid], fmat_return("%d%", UserInfo[playerid][user_fome]));
            PlayerTextDrawTextSize(playerid, BarraFomeSede[playerid], 474+UserInfo[playerid][user_fome]  , 1.0 );
            PlayerTextDrawShow(playerid, BarraFomeSede[playerid]);
        }
        if(UserInfo[playerid][user_fome] == 8)
        {
            PlayerTextDrawSetString(playerid, ContFomeSede[playerid], fmat_return("%d%", UserInfo[playerid][user_fome]));
            PlayerTextDrawTextSize(playerid, BarraFomeSede[playerid], 471+UserInfo[playerid][user_fome]  , 1.0 );
            PlayerTextDrawShow(playerid, BarraFomeSede[playerid]);
        }
        if(UserInfo[playerid][user_fome] == 7)
        {
            PlayerTextDrawSetString(playerid, ContFomeSede[playerid], fmat_return("%d%", UserInfo[playerid][user_fome]));
            PlayerTextDrawTextSize(playerid, BarraFomeSede[playerid], 468+UserInfo[playerid][user_fome]  , 1.0 );
            PlayerTextDrawShow(playerid, BarraFomeSede[playerid]);
        }
        if(UserInfo[playerid][user_fome] == 6)
        {
            PlayerTextDrawSetString(playerid, ContFomeSede[playerid], fmat_return("%d%", UserInfo[playerid][user_fome]));
            PlayerTextDrawTextSize(playerid, BarraFomeSede[playerid], 465+UserInfo[playerid][user_fome]  , 1.0 );
            PlayerTextDrawShow(playerid, BarraFomeSede[playerid]);
        }
        if(UserInfo[playerid][user_fome] <= 5)
        {
            PlayerTextDrawSetString(playerid, ContFomeSede[playerid], fmat_return("%d%", UserInfo[playerid][user_fome]));
            PlayerTextDrawTextSize(playerid, BarraFomeSede[playerid], 462+UserInfo[playerid][user_fome]  , 1.0 );
            PlayerTextDrawShow(playerid, BarraFomeSede[playerid]);
        }
        if(UserInfo[playerid][user_sede] == 10)
        {
            PlayerTextDrawSetString(playerid, ContFomeSede1[playerid], fmat_return("%d%", UserInfo[playerid][user_sede]));
            PlayerTextDrawTextSize(playerid, BarraFomeSede1[playerid], 520+UserInfo[playerid][user_sede]  , 1.0 );
            PlayerTextDrawShow(playerid, BarraFomeSede1[playerid]);
        }
        if(UserInfo[playerid][user_sede] == 9)
        {
            PlayerTextDrawSetString(playerid, ContFomeSede1[playerid], fmat_return("%d%", UserInfo[playerid][user_sede]));
            PlayerTextDrawTextSize(playerid, BarraFomeSede1[playerid], 510+UserInfo[playerid][user_sede]  , 1.0 );
            PlayerTextDrawShow(playerid, BarraFomeSede1[playerid]);
        }
        if(UserInfo[playerid][user_sede] == 8)
        {
            PlayerTextDrawSetString(playerid, ContFomeSede1[playerid], fmat_return("%d%", UserInfo[playerid][user_sede]));
            PlayerTextDrawTextSize(playerid, BarraFomeSede1[playerid], 500+UserInfo[playerid][user_sede]  , 1.0 );
            PlayerTextDrawShow(playerid, BarraFomeSede1[playerid]);
        }
        if(UserInfo[playerid][user_sede] == 7)
        {
            PlayerTextDrawSetString(playerid, ContFomeSede1[playerid], fmat_return("%d%", UserInfo[playerid][user_sede]));
            PlayerTextDrawTextSize(playerid, BarraFomeSede1[playerid], 490+UserInfo[playerid][user_sede]  , 1.0 );
            PlayerTextDrawShow(playerid, BarraFomeSede1[playerid]);
        }
        if(UserInfo[playerid][user_sede] == 6)
        {
            PlayerTextDrawSetString(playerid, ContFomeSede1[playerid], fmat_return("%d%", UserInfo[playerid][user_sede]));
            PlayerTextDrawTextSize(playerid, BarraFomeSede1[playerid], 480+UserInfo[playerid][user_sede]  , 1.0 );
            PlayerTextDrawShow(playerid, BarraFomeSede1[playerid]);
        }
        if(UserInfo[playerid][user_sede] <= 5)
        {
            PlayerTextDrawSetString(playerid, ContFomeSede1[playerid], fmat_return("%d%", UserInfo[playerid][user_sede]));
            PlayerTextDrawTextSize(playerid, BarraFomeSede1[playerid], 470+UserInfo[playerid][user_sede]  , 1.0 );
            PlayerTextDrawShow(playerid, BarraFomeSede1[playerid]);
        }
        retirada[playerid] ++;
        PlayerTextDrawShow(playerid,BarraFomeSede[playerid]);
        PlayerTextDrawShow(playerid,BarraFomeSede1[playerid]);
       
        if(retirada[playerid] == 150)
        {
            if(vidaplayer > 5)
            {
                if(UserInfo[playerid][user_fome] < 10  || UserInfo[playerid][user_sede] < 10)
                {
                    UserInfo[playerid][user_fome] -- ;
                    UserInfo[playerid][user_sede] -= random(2);
                    if(UserInfo[playerid][user_fome] < 1)UserInfo[playerid][user_fome] = 1;
                    if(UserInfo[playerid][user_sede] < 1)UserInfo[playerid][user_sede] = 1;

                    if(vidaplayer >10 )
                    {
                        SetPlayerHealth(playerid, vidaplayer - 10);
                    }
                    else if(vidaplayer >6 )
                    {
                        SetPlayerHealth(playerid, vidaplayer - 6);
                    }
                    else if(vidaplayer >3 )
                    {
                        SetPlayerHealth(playerid, vidaplayer - 3);
                    }
                    if(UserInfo[playerid][user_fome] < 10){
                        SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Você esta com muita fome, coma algo ou morrerá de fome!");
                    }
                    if(UserInfo[playerid][user_sede] < 10){
                        SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Você esta com muita sede, beba algo ou morrerá de sede!");
                    }
                    retirada[playerid] = 0;
                    return 1;
                }

                if(UserInfo[playerid][user_fome] < 25 || UserInfo[playerid][user_sede] < 25)
                {
                    UserInfo[playerid][user_fome] -- ;
                    UserInfo[playerid][user_sede] -= random(2);
                    if(UserInfo[playerid][user_fome] < 1)UserInfo[playerid][user_fome] = 1;
                    if(UserInfo[playerid][user_sede] < 1)UserInfo[playerid][user_sede] = 1;
                    if(vidaplayer >5 )
                    {
                        SetPlayerHealth(playerid, vidaplayer - 5);
                    }
                    retirada[playerid] = 0;
                    return 1;
                }
                if(UserInfo[playerid][user_fome] < 50 || UserInfo[playerid][user_sede] < 50 )
                {
                    UserInfo[playerid][user_fome] -- ;
                    UserInfo[playerid][user_sede] -= random(2);
                    if(UserInfo[playerid][user_fome] < 1)UserInfo[playerid][user_fome] = 1;
                    if(UserInfo[playerid][user_sede] < 1)UserInfo[playerid][user_sede] = 1;
                    if(vidaplayer >2 )
                    {
                        SetPlayerHealth(playerid, vidaplayer - 2);
                    }
                    retirada[playerid] = 0;
                    return 1;
                }
                UserInfo[playerid][user_fome] -- ;
                   UserInfo[playerid][user_sede] -= random(2);
                retirada[playerid] = 0;
            }
        }
        SalvarConta(playerid);
    }
    return 1;
}

imagem do bug

https://ibb.co/jvVc4N9


RE: barra da fome e sede - xbruno1000x - 13/01/2023

Isso aí é meio complicado de te ajudar, pois a criação de uma barra de progresso envolve alguns cálculos que eu não sei como você fez.

Eu costumo pegar a coordenada inicial e a final. Encontro a diferença entre as duas. Essa diferença eu divido por 100 e seto o tamanho multiplicando pelo valor da variável de fome ou sede(que deve ir de 0 a 100) + valor da coordenada inicial.


RE: barra da fome e sede - ziiQz - 13/01/2023

Estou pelo celular então fica meio difícil de dar um help por agora, mas..

Código:
        if(UserInfo[playerid][user_fome] <= 5)
        {
            PlayerTextDrawSetString(playerid, ContFomeSede[playerid], fmat_return("%d%", UserInfo[playerid][user_fome]));
            PlayerTextDrawTextSize(playerid, BarraFomeSede[playerid], 462+UserInfo[playerid][user_fome]  , 1.0 );
            PlayerTextDrawShow(playerid, BarraFomeSede[playerid]);
        }

Aqui diz que, se a barra de fome for menor que ou igual a 5 a textdraw diminui de tamanho, então todas as vezes que for atualizar, se for menor que 5, vai diminuir, pela lógica, a fome vai até 0, então, ela vai diminuir eternamente. O correto seria você ajustar até ficar zerado, com o valor zerado, parar de atualizar o tamanho da textdraw.

Porém, acredito que você está se esforçando demais, poderia simplesmente utilizar uma progressbar, tente esta include, no próprio git tem os detalhes de como utilizar.
https://github.com/Southclaws/progress2


RE: barra da fome e sede - MagnatuS - 13/01/2023

essa e cordenada da fome

BarraFomeSede[playerid] = CreatePlayerTextDraw(playerid, 467.016510, 436.814697, "box");
PlayerTextDrawLetterSize(playerid, BarraFomeSede[playerid], 0.000000, 0.458332);
PlayerTextDrawTextSize(playerid, BarraFomeSede[playerid], 540.620605, 0.000000);

essa e cordenada da sede

BarraFomeSede1[playerid] = CreatePlayerTextDraw(playerid, 556.208435, 436.814697, "box");
PlayerTextDrawLetterSize(playerid, BarraFomeSede1[playerid], 0.000000, 0.458332);
PlayerTextDrawTextSize(playerid, BarraFomeSede1[playerid], 629.798828, 0.000000);

nao sei se da pra vcs ajudar sobre acordenada