SA-MP Forums Archive
[Ajuda] Funзгo nгo vai de acordo com o comando! - 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] Funзгo nгo vai de acordo com o comando! (/showthread.php?tid=559496)



Funзгo nгo vai de acordo com o comando! - PetterAdriano - 23.01.2015

Olhem

Eu estou com uma eagle e uma MP5, mais a variavel " RetirarEquipamento " nгo me retorna como verdadeira, ela continua como falsa, ou melhor continua igual a 0.

pawn Код:
public OnPlayerUpdate(playerid)
{
    for (new Slots = 0; Slots < 13; Slots++)
    {
        new Arma_ID, Balas;
        GetPlayerWeaponData(playerid, Slots, Arma_ID, Balas);
        if(Arma_ID == 24 || Arma_ID == 29)
        {
            RetirarEquipamento[playerid] = 1;
        }
        else
        {
            RetirarEquipamento[playerid] = 0;
        }
    }
    return true;
}



Re: Funзгo nгo vai de acordo com o comando! - Rodney Francalim - 23.01.2015

Isso porque o loop vai do slot 0 ao slot 12.

O slot 12 й o slot do detonador, entгo, no final do loop, quando vocк pede pra Arma_ID receber o ID da arma no slot 12, vai receber ou o ID do detonador, ou algum outro ID que represente um erro, que o jogador nгo tem a arma no slot.

Quando ele chega na Deagle e na MP5, o RetirarEquipamento[playerid] recebe 1, mas quando chega em QUALQUER outra arma, ele vai pra 0.

Recomendo o uso do break; no momento em que a variбvel RetirarEquipamento[playerid] recebe o valor 1.

Apesar de vocк estar fazendo isso no OnPlayerUpdate...


Re: Funзгo nгo vai de acordo com o comando! - PetterAdriano - 23.01.2015

Quote:
Originally Posted by Rodney Francalim
Посмотреть сообщение
Isso porque o loop vai do slot 0 ao slot 12.

O slot 12 й o slot do detonador, entгo, no final do loop, quando vocк pede pra Arma_ID receber o ID da arma no slot 12, vai receber ou o ID do detonador, ou algum outro ID que represente um erro, que o jogador nгo tem a arma no slot.

Quando ele chega na Deagle e na MP5, o RetirarEquipamento[playerid] recebe 1, mas quando chega em QUALQUER outra arma, ele vai pra 0.

Recomendo o uso do break; no momento em que a variбvel RetirarEquipamento[playerid] recebe o valor 1.

Apesar de vocк estar fazendo isso no OnPlayerUpdate...
Nгo entendi foi nada


Re: Funзгo nгo vai de acordo com o comando! - PetterAdriano - 23.01.2015

Quote:
Originally Posted by Rodney Francalim
Посмотреть сообщение
Isso porque o loop vai do slot 0 ao slot 12.

O slot 12 й o slot do detonador, entгo, no final do loop, quando vocк pede pra Arma_ID receber o ID da arma no slot 12, vai receber ou o ID do detonador, ou algum outro ID que represente um erro, que o jogador nгo tem a arma no slot.

Quando ele chega na Deagle e na MP5, o RetirarEquipamento[playerid] recebe 1, mas quando chega em QUALQUER outra arma, ele vai pra 0.

Recomendo o uso do break; no momento em que a variбvel RetirarEquipamento[playerid] recebe o valor 1.

Apesar de vocк estar fazendo isso no OnPlayerUpdate...
Complicado, mais eu fiz desta maneira, serб que resolve?

pawn Код:
for (new Slots = 0; Slots < 13; Slots++)
    {
        new Armas, Balas;
        for(new AR = 0 ; AR < 47 ; AR++)
        {
            GetPlayerWeaponData(playerid, Slots, AR, Balas);
            if(AR == 24 || AR == 29)
            {
                RetirarEquipamento[playerid] = 1;
            }
            else
            {
                RetirarEquipamento[playerid] = 0;
            }
        }
    }



Re: Funзгo nгo vai de acordo com o comando! - Rodney Francalim - 23.01.2015

Cara, й bom analisar bem antes de ficar usando loop dentro de loop, dentro do OnPlayerUpdate

Faz assim:
pawn Код:
public OnPlayerUpdate(playerid)
{
    new
        Arma[12][2]
    ;

    for(new i = 0; i < 13; ++i)
        GetPlayerWeaponData(playerid, i, Arma[i][0], Arma[i][1]);

    if(Arma[2][0] == 24 || Arma[4][0] == 29) RetirarEquipamento[playerid] = 1;

    return 1;
}



Re: Funзгo nгo vai de acordo com o comando! - PetterAdriano - 23.01.2015

Quote:
Originally Posted by Rodney Francalim
Посмотреть сообщение
Cara, й bom analisar bem antes de ficar usando loop dentro de loop, dentro do OnPlayerUpdate

Faz assim:
pawn Код:
public OnPlayerUpdate(playerid)
{
    new
        Arma[12][2]
    ;

    for(new i = 0; i < 13; ++i)
        GetPlayerWeaponData(playerid, i, Arma[i][0], Arma[i][1]);

    if(Arma[2][0] == 24 || Arma[4][0] == 29) RetirarEquipamento[playerid] = 1;

    return 1;
}
vou usar assim
pawn Код:
new  Arma[2], bala ;
    GetPlayerWeaponData(playerid, 2, Arma[0], bala);
    GetPlayerWeaponData(playerid, 5, Arma[1], bala);
    if(Arma[0] == 24)
    {
        RetirarEquipamento[playerid] = 1;
    }
    else if(Arma[1] == 31)
    {
        RetirarEquipamento[playerid] = 1;
    }
    else
    {
        RetirarEquipamento[playerid] = 0;
    }



Re: Funзгo nгo vai de acordo com o comando! - Artista - 23.01.2015

Use o break
pawn Код:
new Arma[2];
for (new i = 0; i < 13; i++ ) {
    GetPlayerWeaponData(playerid, i, Arma[0], Arma[1]);
    if(Arma[0] == 24 || Arma[0] == 29) {
        RetirarEquipamento[playerid] = 1;
        break;
    }
}
E tambйm se vocк quer apenas remover a deagle ou MP5, poderia ter iniciado o loop no slot 2 atй o 4.
Assim:
pawn Код:
for (new i = 2; i < 5; i++ )