SA-MP Forums Archive
[Ajuda]Problema com loop. - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda]Problema com loop. (/showthread.php?tid=315149)



[Ajuda]Problema com loop. - iansinho - 01.02.2012

Bem, eu estou fazendo um sistema em qual eu tenho que diminuir uma variбvel sempre que a callback "Payday" for chamada, e que quando esta variбvel bater 0, enviar uma mensagem para o jogador.

Aqui um exemplo:

Код:
//cуdigos da public

for(new i = 0; i <= MAX_PLAYERS; ++i)    
{
    for(new car = 1; car < sizeof(CarInfo); car++)    
    {                     
        if(VariavelExemplo1[i] == 999) continue;                    
        if(VariavelExemplo2[i] == 999) continue;    
        if(Variavel[car] == 0) continue;                
        Variavel[car]--;            
        if(Variavel] == 0)
        {
            //Caso bata 0, enviar uma mensagem                            
        }            
        SalvarDados(i); //salvardados
    }        
}   

//fim da public

O que estб acontecendo: quando a callback й chamada (APENAS 1 VEZ), independentemente do valor da "Variavel", ela vai pra 0.
Exemplo: variбvel = 5000.
Quando a callback й chamada, em vez de ir para 4999 ela vai para 0.

O que estб acontecendo e como eu posso retirar este problema?



Re: [Ajuda]Problema com loop. - Lucas_Alemao - 01.02.2012

olha cara postando esse codigo ninguem pode ver bug, posta o pedaзo original do codigo po


Re: [Ajuda]Problema com loop. - iansinho - 01.02.2012

Й esse o cуdigo original, apenas troquei o NOME das variбveis e mais nada.
O que vem antes e depois da public nгo tem nada haver.



Re: [Ajuda]Problema com loop. - [Pawno] - 02.02.2012

Entendi nada ;/ explique melhor.


Re: [Ajuda]Problema com loop. - iansinho - 02.02.2012

Oh my gosh...

Este cуdigo acima deveria retirar uma unidade do valor da "Variavel[car]", mas em vez dele retirar apenas 1, ele retira todo o valor а 0.
Como o exemplo:
Se o valor da "Variavel[car]" estiver 55 (qualquer numero maior que 0), assim que a Callback que possui este codigo for chamada, o valor dela estarб 0, e nгo 54 (deveria ser 55 - 1). Agora quero saber porque isso acontece.

Entendeu?


Re: [Ajuda]Problema com loop. - Ricop522 - 02.02.2012

pawn Код:
for(new i = 0; i <= MAX_PLAYERS; ++i)    
{
    for(new car = 1, b = sizeof(CarInfo); car != b; ++car)    
    {                    
        if(VariavelExemplo1[i] == 999 || VariavelExemplo2[i] == 999 || Variavel[car] == 0) break;      
        Variavel[car]--;            
        if(Variavel[car] == 0)
        {
            //Caso bata 0, enviar uma mensagem                            
        }            
        SalvarDados(i);
    }        
}
Se vocк quer repetiзхes atй a variavel ficar a 0 use while, o for vai funcionar uma vez a public ser chamada.

Se nгo funcionar, vocк serб obrigado a postar a public, isso vai ajudar..


pawn Код:
new c = Variavel[car];
while(c != 0) {
     c--;
}



Re: [Ajuda]Problema com loop. - Lucas_Alemao - 02.02.2012

mas tu tento usar o codigo que o ricop posto?


Re: [Ajuda]Problema com loop. - DreeH - 02.02.2012

pawn Код:
for(new i = 0; i != MAX_PLAYERS; ++i)
{
    if(VariavelExemplo1[i] == 999 || VariavelExemplo2[i] == 999) continue;
    new car = sizeof(CarInfo);
    do
    {
        Variavel[car]--;
        if(Variavel[car] == 0)
        {
            //Caso bata 0, enviar uma mensagem
        }
        SalvarDados(i); //salvardados
    }
    while(car != 0);
}



Re: [Ajuda]Problema com loop. - rjjj - 02.02.2012

Este loop (em azul) do seu cуdigo :


Код:
//cуdigos da public

for(new i = 0; i <= MAX_PLAYERS; ++i)    
{
    for(new car = 1; car < sizeof(CarInfo); car++)    
    {                     
        if(VariavelExemplo1[i] == 999) continue;                    
        if(VariavelExemplo2[i] == 999) continue;    
        if(Variavel[car] == 0) continue;                
        Variavel[car]--;            
        if(Variavel] == 0)
        {
            //Caso bata 0, enviar uma mensagem                            
        }            
        SalvarDados(i); //salvardados
    }        
}   

//fim da public
Й que й responsбvel por diminuir em 1 unidade o valor de cada parte da array Variavel .



Mas observe que ele estб dentro de outro loop, por isso os decrйscimos estгo ocorrendo vбrias vezes mesmo quando a callback й chamada apenas 1 vez .



Vocк pode restringir a execuзгo do loop interno por meio de uma variбvel booleana, mas nгo sei bem o que vocк quer que o cуdigo faзa.



Espero ter ajudado .


Re: [Ajuda]Problema com loop. - Ricop522 - 02.02.2012

Entгo tenta isso
pawn Код:
for(new i = 0; i <= MAX_PLAYERS; ++i)    
{                        
        new v = VariavelExemplo1[i], v2 = VariavelExemplo2[i];    
        SalvarDados(i); //salvardados
           
}  
for(new car = 1; car < sizeof(CarInfo); car++)    
{
    if(v != 999 || v2 != 999) {
        if(Variavel[car] == 0) continue;                
            Variavel[car]--;            
            if(Variavel] == 0)
            {
                    //Caso bata 0, enviar uma mensagem                            
            }
    }
}