[Ajuda]Problema com bug
#1

Tenho um sistema de drogas no meu GM que eu fiz da seguinte forma:
O cara planta, colhe a vai para um banco de drogas da mafia.

o comando para pegar as drogas do banco й o seguinte:
pawn Код:
if (PlayerInfo[playerid][pMember] == 14 || PlayerInfo[playerid][pLeader] == 14)
              {
                        if(!bancoon2)
            {
                if (PlayerToPoint(3, playerid,687.7962,-1286.3744,13.5738))
                {
                    tmp = strtok(cmdtext, idx);
                    if(!strlen(tmp))
                    {
                        SendClientMessage(playerid, COLOR_GRAD2, "USE: /pegardrogas [quantia]");
                        return 1;
                    }
                    new quantia = strval(tmp);
                    if(quantia > sysyak[QuantMac2])
                    {
                        SendClientMessage(playerid, VERMELHO, "O Banco nгo tem toda essa quantia!");
                        return 1;
                    }
                    if (tdrogas2[playerid] == 1)
                    {
                        SendClientMessage(playerid, COLOR_LIGHTBLUE,"Aguarde 12 horas para usar o comando novamente");
                        return 1;
                    }
                    if(PlayerInfo[playerid][pDrugs] >= 99)
                    {
                    format(string, sizeof(string), "  Voce ainda tem %d g de drogas,Venda tudo primeiro !", PlayerInfo[playerid][pDrugs]);
                    SendClientMessage(playerid, COLOR_GREY, string);
                    return 1;
                    }
                    if(quantia > 40)
                     {
                      SendClientMessage(playerid, COLOR_GREY, "Vocк nгo pode pegar mais de 40 unidades de maconha");
                      return 1;
                      }
                    PlayerInfo[playerid][pDrugs] += quantia;
                    sysyak[QuantMac2] -= quantia;
                    SetTimerEx("tempodrogas2",4320000,0,"i",playerid);
                    GetPlayerName(playerid, sendername, sizeof(sendername));
                    format(string, sizeof(string), "** (( %s pegou %d gramas de drogas do banco )) **", sendername, quantia);
                    SendFamilyMessage(14, 0x7BDDA5AA, string);
                    SaveMaconhaYak();
                    tdrogas2[playerid] = 1;
                }}
            }
Como pode ver ali no meio, tem uma restriзгo que nгo permite pegar mais de 40g pro vez.
So que se o cara digita /pegardrgoas 9999999999999999999 buga e ele recebe uns 3000000 em drogas e o Banco de drogas acumula 1kk de drogas mais ou menos.
Ou se ele colocar muitos 9 o banco fica negativo e ele recebe muita droga.

Nгo o porque disso, ja que tem uma restricao para mais de 40g....

Alguem pode me ajudar??
Reply
#2

keller012, troquei algumas variбveis do seu comando e o testei. Cheguei б conclusгo que o Bug й na prуpria funзгo strtok. Dк uma olhada em zcmd que talvez essa funзгo nгo tenha esse Bug.


Vocк postou apenas uma parte do seu comando, tive que montar o comeзo dele vendo um GodFather, entгo poste sempre o comando do comeзo ao fim.


Nгo consegui arrumar seu comando perfeitamente, cada vez que se restringe um nъmero como o que vocк citou algum outro mais б frente й liberado. Mas eliminei parte do seu problema, alйm de ter dado uma identada. Espero ter ajudado


pawn Код:
if(strcmp(cmd, "/pegardrogas", true) == 0)
    {
        if (PlayerInfo[playerid][pMember] == 14 || PlayerInfo[playerid][pLeader] == 14)
        {
            if(!bancoon2)
            {
                if (PlayerToPoint(3, playerid,687.7962,-1286.3744,13.5738))
                {
                    new quantia;
                    tmp = strtok(cmdtext, idx);
                    quantia = strval(tmp);
                    if(!strlen(tmp))
                    {
                        SendClientMessage(playerid, COLOR_GRAD2, "USE: /pegargrana [quantia]");
                        return 1;
                    }
                    if(quantia == 999999999999  && quantia <= 999999999999999)
                    {
                        SendClientMessage(playerid, COLOR_GREY, "Vocк nгo pode pegar mais de 40 unidades de maconha");
                        return 1;
                    }
                    if(quantia == 999999999999 || quantia == 999999999999999 || quantia == 9999999999999999 || quantia == 99999999999999999 || quantia == 999999999999999999)
                    {
                        SendClientMessage(playerid, COLOR_GREY, "Vocк nгo pode pegar mais de 40 unidades de maconha");
                        return 1;
                    }
                    if(quantia == 999999999999999)
                    {
                        SendClientMessage(playerid, COLOR_GREY, "Vocк nгo pode pegar mais de 40 unidades de maconha");
                        return 1;
                    }
                    if(quantia > 40)
                    {
                        SendClientMessage(playerid, COLOR_GREY, "Vocк nгo pode pegar mais de 40 unidades de maconha");
                        return 1;
                    }
                    if(quantia > sysyak[QuantMac2])
                    {
                        SendClientMessage(playerid, VERMELHO, "O Banco nгo tem toda essa quantia!");
                        return 1;
                    }
                    if (tdrogas2[playerid] == 1)
                    {
                        SendClientMessage(playerid, COLOR_LIGHTBLUE,"Aguarde 12 horas para usar o comando novamente");
                        return 1;
                    }
                    if(PlayerInfo[playerid][pDrugs] >= 99)
                    {
                        format(string, sizeof(string), "  Voce ainda tem %d g de drogas,Venda tudo primeiro !", PlayerInfo[playerid][pDrugs]);
                        SendClientMessage(playerid, COLOR_GREY, string);
                        return 1;
                    }
                    PlayerInfo[playerid][pDrugs] += quantia;
                    sysyak[QuantMac2] -= quantia;
                    SetTimerEx("tempodrogas2",4320000,0,"i",playerid);
                    GetPlayerName(playerid, sendername, sizeof(sendername));
                    format(string, sizeof(string), "** (( %s pegou %d gramas de drogas do banco )) **", sendername, quantia);
                    SendFamilyMessage(14, 0x7BDDA5AA, string);
                    SaveMaconhaYak();
                    tdrogas2[playerid] = 1;
                }
            }
       }
       return 1;
    }
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)