[Ajuda]Problema com loop.
#1

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?
Reply
#2

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

Й 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.
Reply
#4

Entendi nada ;/ explique melhor.
Reply
#5

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?
Reply
#6

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--;
}
Reply
#7

mas tu tento usar o codigo que o ricop posto?
Reply
#8

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);
}
Reply
#9

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 .
Reply
#10

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                            
            }
    }
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)