[Ajuda]Problema com bug -
keller012 - 29.11.2010
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??
Re: [Ajuda]Problema com bug - rjjj - 29.11.2010
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;
}