Portal SAMP
[Ajuda] Settimer Bugando tudo - 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] Settimer Bugando tudo (/showthread.php?tid=4586)



Settimer Bugando tudo - jose3212 - 01/03/2024

E ai galerinha do fórum beleza?? Estou criando um sisteminha aqui de o jogador quando tomar um tiro ou morrer de alguma maneira ele ficar caido no uns 5 minutos! Só que até que tá funcionando, mas o settimer ta bugado e bugando tudo, já joguei ele na onplayerdeath e onplayerspaw e deu na mesma, e não foi essa primeira vez que isso buga, uma vez fui criar um sistema de o policial matar o jogador procurado ele ir preso automaticamente, funcionou, só que o tempo ficou bugado passando rapido sabe e bugando tudo que tem settimer.

olha o codigo na onplayerdeath
Código:
if (killerid != INVALID_PLAYER_ID)
    {
        new
            zone[MAX_ZONE_NAME],
            Float:pX,
            Float:pY,
            Float:pZ,
            str[120]
        ;
        GetPlayer2DZone(playerid, zone, MAX_ZONE_NAME);
        GetPlayerPos(playerid, pX, pY, pZ);
        SetPVarFloat(playerid, "LocalX", pX);
        SetPVarFloat(playerid, "LocalY", pY);
        SetPVarFloat(playerid, "LocalZ", pZ);
        ShowPlayerProgressBar(playerid, Bar_Morto[playerid][0]);
        SetPlayerProgressBarValue(playerid, Bar_Morto[playerid][0], S[playerid]);
        foreach(Player,i)
        {
            if(pInfo[i][Prof] == MEDICO)
            {
                format(str,sizeof(str), "| COPOM | Um(a) jogador(a) está ferido nas localidades de %s! Use /localizar %s(%d)", zone, PlayerName(playerid), playerid);
                SendClientMessage(i, COR_MEDICO, str);
            }
        }
        pmorto[playerid] = true;
    }

Olha o código da onplayerspawn
Código:
if(pmorto[playerid] == true)
    {
        SetPlayerPos(playerid, GetPVarFloat(playerid, "LocalX"), GetPVarFloat(playerid, "LocalY"), GetPVarFloat(playerid, "LocalZ"));
        SetPlayerCameraPos(playerid, GetPVarFloat(playerid, "LocalX"), GetPVarFloat(playerid, "LocalY"), GetPVarFloat(playerid, "LocalZ")-5);
        SendClientMessage(playerid, -1, "| MEDICO | Você foi ferido, os paramedicos foram informados deve aguardar o resgate");
        GameTextForPlayer(playerid, "Você está ferido", 5000, 6);
        ApplyAnimation(playerid, "CRACK", "crckidle2", 4.1, true, true, true, true, 1, 1);
        TogglePlayerControllable(playerid, 0);
    }
E a public do contador que ta bugando tudo
Código:
public ContarMortoTempo(playerid)
{    
    if(pInfo[playerid][Logado] == true)
    {
        new str[100];
        if(pmorto[playerid] == true)
        {
            if(S[playerid] < 100)
            {    
                TempoM[playerid] = SetTimerEx("ContarMortoTempo", 1000, false, "d", playerid);
                S[playerid]++;
                if(S[playerid] >= 100)
                {
                    SendClientMessage(playerid, -1, "| SE FU | Vixi! O resgate não veio te ajudar.");
                    KillTimer(TempoM[playerid]);
                    PlayerTextDrawHide(playerid, ContarMorto[playerid][0]);
                    ClearAnimations(playerid);
                    S[playerid] = 0;
                }
            }
            PlayerTextDrawShow(playerid, ContarMorto[playerid][0]);
            format(str,sizeof(str), "Aguardando resgate %02d%", S[playerid]);
            PlayerTextDrawSetString(playerid, ContarMorto[playerid][0], str);
            ShowPlayerProgressBar(playerid, Bar_Morto[playerid][0]);
            SetPlayerProgressBarMaxValue(playerid, Bar_Morto[playerid][0], S[playerid]);
            ApplyAnimation(playerid, "CRACK", "crckidle2", 4.1, true, true, true, true, 1, 1);
                
        }
    }
    return 1;
}

Tá fd galera.


RE: Settimer Bugando tudo - strelo - 04/03/2024

Aqui está um exemplo de como você pode ajustar o código:


Código:
// Na sua função onPlayerDeath, inicie o timer uma vez, se necessário.
if (killerid != INVALID_PLAYER_ID) {
    // Seu código existente aqui...
    // Certifique-se de que o timer só seja iniciado se ainda não estiver rodando.
    if (TempoM[playerid] == 0) {
        TempoM[playerid] = SetTimerEx("ContarMortoTempo", 1000, true, "d", playerid); // true para repetir
    }
}

// Modifique a função ContarMortoTempo para não reiniciar o timer
public ContarMortoTempo(playerid) {
    if (pInfo[playerid][Logado] == true && pmorto[playerid] == true) {
        S[playerid]++;
        if (S[playerid] >= 100) {
            // Seu código para tratar o jogador após o tempo terminar...
            KillTimer(TempoM[playerid]);
            TempoM[playerid] = 0; // Resetar o timer para indicar que não está mais ativo.
            pmorto[playerid] = false; // Resetar o estado de morte.
        } else {
            // Atualize a UI do jogador aqui...
        }
    }
    return 1;
}

// Na sua função onPlayerSpawn, certifique-se de cancelar o timer se ele estiver ativo.
if (pmorto[playerid] == true) {
    if (TempoM[playerid] != 0) {
        KillTimer(TempoM[playerid]);
        TempoM[playerid] = 0;
    }
    // Seu código existente aqui...
}



RE: Settimer Bugando tudo - jose3212 - 09/03/2024

Valeu manin!