[Ajuda] sistema de cadeia em loop
#1

Pois bem, alguns jogadores do servidor estгo tendo um bug mto chato.
Depois que eles sгo soltos ou da cadeia de admin ou da delegacia, eles entram em loop.
Jб vi e revi o cуdigo e nгo consigo descobrir pq?

Executado no OnPlayerSpawn;
PHP Code:
stock ChecarCadeia(playerid)
{
    if(
PlayerInfo[playerid][pPreso] == 0)return 0;
    else if(
PlayerInfo[playerid][pPreso] != 0)
    {
        
PrenderJogador(playerid);
    }
    return 
1;
}
stock PrenderJogador(playerid)
{
    if(
PlayerInfo[playerid][pPreso] == 1)
    {
        
PrisaoPublica(playerid);
    }
    else if(
PlayerInfo[playerid][pPreso] == 2)
    {
        
PrisaoAdmin(playerid);
    }
    return 
true;
}
stock PrisaoPublica(playerid)
{
    new 
string[64];
    new 
Celas random(6);
    new 
tempo PlayerInfo[playerid][pTempoPreso];
    
TogglePlayerSpectating(playerid0);
    switch(
Celas)
    {
        case 
0:{ SetPlayerInterior(playerid3); SetPlayerPos(playerid190.2162.10001105.0);}
        case 
1:{ SetPlayerInterior(playerid3); SetPlayerPos(playerid194.5162.399991005.0);}
        case 
2:{ SetPlayerInterior(playerid3); SetPlayerPos(playerid198.5162.100011005.0);}
        case 
3:{ SetPlayerInterior(playerid3); SetPlayerPos(playerid197.60001174.21005.0);}
        case 
4:{ SetPlayerInterior(playerid3); SetPlayerPos(playerid193.0174.71005.0);}
        case 
5:{ SetPlayerInterior(playerid3); SetPlayerPos(playerid189.10001174.600011005.0);}
    }
    
PlayerInfo[playerid][pAlgemado] = false;
    
SetPlayerSpecialAction(playeridSPECIAL_ACTION_NONE);
    
format(stringsizeof(string), "[CADEIA] Voce deve cumprir %d minutos de prisao!"tempo);
    
SendClientMessage(playeridCOR_AMARELOstring);
    
ShowPlayerDialog(playerid998DIALOG_STYLE_MSGBOX"PRISAO""VOCE FOI PRESO PELA POLICIA!""OK""");
    new 
Query1[90], Query2[90],DBResult:Resultado;
    
format(Query2sizeof(Query2), "SELECT * FROM `cadeia` WHERE `presoNome`='%s'"PlayerInfo[playerid][pNome]);
    
Resultado db_query(ConnectQuery2);
    if(
db_num_rows(Resultado) == 0)
    {
        
format(Query1sizeof(Query1), "INSERT INTO `cadeia`(`presoNome`,`presoTipo`,`presoTempo`) VALUES('%s',%d,%d);",
        
PlayerInfo[playerid][pNome],PlayerInfo[playerid][pPreso],PlayerInfo[playerid][pTempoPreso]);
        
db_query(ConnectQuery1);
    }
    
db_free_result(Resultado);
    
TimerCadeiaPublica[playerid] = SetTimerEx("CadeiaPublica",minutos(1),true,"i",playerid);
    return 
true;
}
stock PrisaoAdmin(playerid)
{
    new 
string[64];
       new 
tempo PlayerInfo[playerid][pTempoPreso];
       
TogglePlayerSpectating(playerid0);
    
SetPlayerInterior(playerid5);
    
SetPlayerPos(playerid322.197998,302.497985,999.148437);
    
format(stringsizeof(string), "[PRISAO] Voce deve cumprir %d minutos de prisao!"tempo);
    
SendClientMessage(playeridCOR_AMARELOstring);
    
ShowPlayerDialog(playerid998DIALOG_STYLE_MSGBOX"PRISAO""VOCE FOI PRESO PELA STAFF!""OK""");
    new 
Query1[90], Query2[90],DBResult:Resultado;
    
format(Query2sizeof(Query2), "SELECT * FROM `cadeia` WHERE `presoNome`='%s'"PlayerInfo[playerid][pNome]);
    
Resultado db_query(ConnectQuery2);
    if(
db_num_rows(Resultado) == 0)
    {
        
format(Query1sizeof(Query1), "INSERT INTO `cadeia`(`presoNome`,`presoTipo`,`presoTempo`) VALUES('%s',%d,%d);",
        
PlayerInfo[playerid][pNome],PlayerInfo[playerid][pPreso],PlayerInfo[playerid][pTempoPreso]);
        
db_query(ConnectQuery1);
    }
    
db_free_result(Resultado);
    
TimerCadeiaAdmin[playerid] = SetTimerEx("CadeiaAdmin",minutos(1),true,"i",playerid);
    return 
true;
}
forward CadeiaPublica(playerid);
public 
CadeiaPublica(playerid)
{
    if(
PlayerInfo[playerid][pTempoPreso] != 0)
    {
        
PlayerInfo[playerid][pTempoPreso] -= 1;
        return 
true;
    }
    else if(
PlayerInfo[playerid][pTempoPreso] == 0)
    {
        
SoltarJogador(playerid);
    }
    
    return 
true;
}
forward CadeiaAdmin(playerid);
public 
CadeiaAdmin(playerid)
{
    if(
PlayerInfo[playerid][pTempoPreso] != 0)
    {
        
PlayerInfo[playerid][pTempoPreso] -= 1;
        return 
true;
    }
    else if(
PlayerInfo[playerid][pTempoPreso] == 0)
    {
        
SoltarJogador(playerid);
    }
    return 
true;
}
forward SoltarJogador(playerid);
public 
SoltarJogador(playerid)
{
    new 
Query[180];
    
format(Querysizeof(Query), "DELETE FROM `cadeia` WHERE `presoNome`='%s'",PlayerInfo[playerid][pNome]);
    
db_query(ConnectQuery);
    
PlayerInfo[playerid][pPreso] = 0;
    
PlayerInfo[playerid][pTempoPreso] = 0;
    
PlayerInfo[playerid][pCalado] = false;
    
PlayerInfo[playerid][pNivelProcurado] = 0;
    
SetPlayerWantedLevel(playeridPlayerInfo[playerid][pNivelProcurado]);
    
SendClientMessage(playerid,COR_VERDE,"[LIBERDADE] Voce foi solto! Nao cometa mais crimes!");
    
KillTimer(TimerCadeiaPublica[playerid]);
    
KillTimer(TimerCadeiaAdmin[playerid]);
    
SpawnPlayer(playerid);
    
SalvarDB(playerid);

O loop fica dando ali no SoltarJogador, fazendo ele ficar voltando pro Spawn a cada 2 minutos, como se o timer nгo tivesse sendo parado.
Alguem saberia me dizer onde esta o erro no code?
Reply


Messages In This Thread
sistema de cadeia em loop - by MtPlayerZ - 08.03.2019, 15:04
Re: sistema de cadeia em loop - by zHellSync - 08.03.2019, 15:16
Re: sistema de cadeia em loop - by MtPlayerZ - 08.03.2019, 15:20
Re: sistema de cadeia em loop - by zHellSync - 08.03.2019, 15:23
Re: sistema de cadeia em loop - by MtPlayerZ - 08.03.2019, 15:27
Re: sistema de cadeia em loop - by zHellSync - 08.03.2019, 17:58

Forum Jump:


Users browsing this thread: 1 Guest(s)