[Ajuda] SetTimerEx Bugado "Relogio UP"
#1

• Relуgio UP :


• Quando 1 ou mais Players estгo logado o Relуgio UP corre muito rбpido para alguns.
PHP Code:
    UPRelogio[playerid] = SetTimerEx("RelogioUP"1000,true,"i",playerid);
    
PlayerStatus[playerid][20] = CreatePlayerTextDraw(playerid598.600097302.655731"");
    
PlayerTextDrawLetterSize(playeridPlayerStatus[playerid][20], 0.3310001.130000);
    
PlayerTextDrawAlignment(playeridPlayerStatus[playerid][20], 2);
    
PlayerTextDrawColor(playeridPlayerStatus[playerid][20], -1);
    
PlayerTextDrawSetShadow(playeridPlayerStatus[playerid][20], 0);
    
PlayerTextDrawSetOutline(playeridPlayerStatus[playerid][20], -1);
    
PlayerTextDrawBackgroundColor(playeridPlayerStatus[playerid][20], 255);
    
PlayerTextDrawFont(playeridPlayerStatus[playerid][20], 3);
    
PlayerTextDrawSetProportional(playeridPlayerStatus[playerid][20], 1);
    
PlayerTextDrawSetShadow(playeridPlayerStatus[playerid][20], 0); 
Reply
#2

Recomendo utilizar Timer Global para todos os players nesse caso.
Crie um timer com repetiзгo (false) e coloque o mesmo timer dentro do timer. Assim й mais otimizado

Exemplo:

PHP Code:
forward UpGeral();
public 
UpGeral()
{
    for(new 
i!= MAX_PLAYERS; ++i)
    {
        if(
IsPlayerConnected(i))
        {
            
//
        
}
    }
    
SetTimer("UpGeral"1000false);

Reply
#3

PHP Code:
public OnPlayerConnect(playerid)
{
    
// Coloque esse cуdigo na callback onde autentica a senha do usuбrio, para exibir o 'Relуgio UP' quando inserir a senha.
    
UPRelogio[playerid] = SetTimerEx("RelogioUP"1000,true,"i",playerid);
    
    
PlayerStatus[playerid][20] = CreatePlayerTextDraw(playerid598.600097302.655731"");
    
PlayerTextDrawLetterSize(playeridPlayerStatus[playerid][20], 0.3310001.130000);
    
PlayerTextDrawAlignment(playeridPlayerStatus[playerid][20], 2);
    
PlayerTextDrawColor(playeridPlayerStatus[playerid][20], -1);
    
PlayerTextDrawSetShadow(playeridPlayerStatus[playerid][20], 0);
    
PlayerTextDrawSetOutline(playeridPlayerStatus[playerid][20], -1);
    
PlayerTextDrawBackgroundColor(playeridPlayerStatus[playerid][20], 255);
    
PlayerTextDrawFont(playeridPlayerStatus[playerid][20], 3);
    
PlayerTextDrawSetProportional(playeridPlayerStatus[playerid][20], 1);
    
PlayerTextDrawSetShadow(playeridPlayerStatus[playerid][20], 0);
    return 
1;
}
public 
OnPlayerDisconnect(playerid)
{
    
KillTimer(UPRelogio[playerid]);
    return 
1;

Reply
#4

Quote:
Originally Posted by GuiKommander
View Post
Recomendo utilizar Timer Global para todos os players nesse caso.
Crie um timer com repetiзгo (false) e coloque o mesmo timer dentro do timer. Assim й mais otimizado

Exemplo:

PHP Code:
forward UpGeral();
public 
UpGeral()
{
    for(new 
i!= MAX_PLAYERS; ++i)
    {
        if(
IsPlayerConnected(i))
        {
            
//
        
}
    }
    
SetTimer("UpGeral"1000false);

Se eu usar um time para todos, quando eu bloquear o time de um nгo bloquearia de todos tbm ?

Quote:
Originally Posted by XandyMello
View Post
PHP Code:
public OnPlayerConnect(playerid)
{
    
// Coloque esse cуdigo na callback onde autentica a senha do usuбrio, para exibir o 'Relуgio UP' quando inserir a senha.
    
UPRelogio[playerid] = SetTimerEx("RelogioUP"1000,true,"i",playerid);
    
    
PlayerStatus[playerid][20] = CreatePlayerTextDraw(playerid598.600097302.655731"");
    
PlayerTextDrawLetterSize(playeridPlayerStatus[playerid][20], 0.3310001.130000);
    
PlayerTextDrawAlignment(playeridPlayerStatus[playerid][20], 2);
    
PlayerTextDrawColor(playeridPlayerStatus[playerid][20], -1);
    
PlayerTextDrawSetShadow(playeridPlayerStatus[playerid][20], 0);
    
PlayerTextDrawSetOutline(playeridPlayerStatus[playerid][20], -1);
    
PlayerTextDrawBackgroundColor(playeridPlayerStatus[playerid][20], 255);
    
PlayerTextDrawFont(playeridPlayerStatus[playerid][20], 3);
    
PlayerTextDrawSetProportional(playeridPlayerStatus[playerid][20], 1);
    
PlayerTextDrawSetShadow(playeridPlayerStatus[playerid][20], 0);
    return 
1;
}
public 
OnPlayerDisconnect(playerid)
{
    
KillTimer(UPRelogio[playerid]);
    return 
1;

Jб coloquei isso, mas nгo adianta.
Reply
#5

Cara, vocк tem que iniciar o temporizador quando o player logar no servidor e interromper o temporizador quando o usuбrio desconectar. Desta forma estб correta. Se estiver dando lag, й outra cousa que estб interferindo nesse sistema; Vai de vocк analisar sistema por sistema identificar a falha ...
Reply
#6

Quote:
Originally Posted by XandyMello
View Post
Cara, vocк tem que iniciar o temporizador quando o player logar no servidor e interromper o temporizador quando o usuбrio desconectar. Desta forma estб correta. Se estiver dando lag, й outra cousa que estб interferindo nesse sistema; Vai de vocк analisar sistema por sistema identificar a falha ...
Nгo й o lag. Por que quando eu me prendo, mostra uma outra TextDraw. E o SetTimeEx Nгo buga;

Se poder Olha o server ai na minha assinatura, e nele que estou com o problema.
Reply
#7

Quote:
Originally Posted by CALENZ021
View Post
Se eu usar um time para todos, quando eu bloquear o time de um nгo bloquearia de todos tbm ?



Jб coloquei isso, mas nгo adianta.
Pode usar as verificaзхes nesse caso, Coloquei o && PlayerInfo[i][Preso] == 0, Para ver se ele nгo estб preso.

PHP Code:
public OnGameModeInit()
{
    
SetTimer("UpGeral"1000false);
    return 
1;
}
forward UpGeral();
public 
UpGeral()
{
    for(new 
i!= MAX_PLAYERS; ++i)
    {
        if(
IsPlayerConnected(i))
        {
            if(
PlayerInfo[i][SegundoUP] > && PlayerInfo[i][Preso] == 0)
            {
                
pInfo[i][SegundoUP] --;
            }
            if(
PlayerInfo[i][SegundoUP] == && PlayerInfo[i][MinutosUP] >= && PlayerInfo[i][Preso] == 0)
            {
                
pInfo[i][SegundoUP] = 59;
                
pInfo[i][MinutosUP] --;
            }
            if(
PlayerInfo[i][MinutosUP] == && PlayerInfo[i][SegundosUP] == 0)
            {
                
pInfo[i][SegundoUP] = 59;
                
pInfo[i][MinutosUP] = 9;
                
UPLevel(i);
                
//Upou
            
}
        }
    }
    
SetTimer("UpGeral"1000false);

Reply
#8

Poste a callback RelogioUp.
Reply
#9

Mano, tu tem que fazer o q o cara ali falou, salvar o tempo quando o cara deslogar e quando ele logar pegar essa info e mostrar pra ele. Simples, nгo tem mistйrio
Reply
#10

Quote:
Originally Posted by ipsLuan
View Post
Poste a callback RelogioUp.
PHP Code:
forward RelogioUP(playerid);
public 
RelogioUP(playerid)
{
    if(
pSegUP[playerid] == && pMinUP[playerid] == 0)
    {
        if(
PlayerInfo[playerid][Logado] == true)
        {
            if(
PlayerInfo[playerid][Afk] == false)
            {
                
//dini_IntSet(file, "Tempo", dini_Int(file, "Tempo")+1);
                
if(PlayerInfo[playerid][Exp] == 5)
                {
                    
MessageFormat(playerid0x75EA00AA"| UP | Vocк ganhou +1 de Experiкncia ( %d/5 )"PlayerInfo[playerid][Exp]);
                    
PlayerInfo[playerid][Exp]=0;
                    
PlayerInfo[playerid][Level]++;
                    
MessageFormat(playerid0x75EA00AA"| UP | Vocк juntou 5 de Experiкncia e ganhou +1 level ( %d ) ",PlayerInfo[playerid][Level]);
                    
PlayerPlaySound(playerid1057000);
                } else {
                    
PlayerInfo[playerid][Exp]++;
                    
PlayerPlaySound(playerid1057000);
                    
GameTextForPlayer(playerid"~w~UP!"30006);
                    
MessageFormat(playerid0x75EA00AA"| UP | Vocк ganhou +1 de Experiкncia ( %d/5 )"PlayerInfo[playerid][Exp]);
                    
//dini_IntSet(file, "Tempo",0);
                
}
            }
        }
    }
    if(
pSegUP[playerid] == -1)
    {
        if(
pMinUP[playerid] == 0)
        
pMinUP[playerid]=10;
        
pSegUP[playerid]=59;
        
pMinUP[playerid]--;
    }
    
format(Stringsizeof(String), "~w~+~b~UP: ~w~%02d:%02d"pMinUP[playerid],pSegUP[playerid]);
    
PlayerTextDrawSetString(playeridPlayerStatus[playerid][20], String);
    
pSegUP[playerid]--;
    return 
1;

Eu estou muito lento nos raciocнnio, estou aprendendo e criando um server.
Reply
#11

Quote:
Originally Posted by LockedLucas
View Post
Mano, tu tem que fazer o q o cara ali falou, salvar o tempo quando o cara deslogar e quando ele logar pegar essa info e mostrar pra ele. Simples, nгo tem mistйrio
Acho que isso nгo interfere.
Reply
#12

Coloquei para Salvar;
Coloquei para KillTimer quando desconectar. E ainda persiste em as vezes a os segundos correr a cada 3 seg. Help
Reply
#13

https://sampwiki.blast.hk/wiki/SetTimerEx

Reply
#14

@Resolvido.

Problema era:
PHP Code:
mysql_format(IDConexaoQuerysizeof(Query), "SELECT * FROM Contas WHERE Nome='%s'"pPlayerInfo[playerid][pNome]);
mysql_tquery(IDConexaoQuery"LoadAccounts""i"pPlayerInfo[playerid][pNome]);
LoadAccounts(playerid); 
Certo era:
PHP Code:
mysql_format(IDConexaoQuerysizeof(Query), "SELECT * FROM Contas WHERE Nome='%s'"pPlayerInfo[playerid][pNome]);
mysql_tquery(IDConexaoQuery"LoadAccounts""i"playerid); 
Entгo estava carregando "2x a conta".
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)