08.03.2019, 15:04
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;
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?
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(playerid, 0);
switch(Celas)
{
case 0:{ SetPlayerInterior(playerid, 3); SetPlayerPos(playerid, 190.2, 162.10001, 105.0);}
case 1:{ SetPlayerInterior(playerid, 3); SetPlayerPos(playerid, 194.5, 162.39999, 1005.0);}
case 2:{ SetPlayerInterior(playerid, 3); SetPlayerPos(playerid, 198.5, 162.10001, 1005.0);}
case 3:{ SetPlayerInterior(playerid, 3); SetPlayerPos(playerid, 197.60001, 174.2, 1005.0);}
case 4:{ SetPlayerInterior(playerid, 3); SetPlayerPos(playerid, 193.0, 174.7, 1005.0);}
case 5:{ SetPlayerInterior(playerid, 3); SetPlayerPos(playerid, 189.10001, 174.60001, 1005.0);}
}
PlayerInfo[playerid][pAlgemado] = false;
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_NONE);
format(string, sizeof(string), "[CADEIA] Voce deve cumprir %d minutos de prisao!", tempo);
SendClientMessage(playerid, COR_AMARELO, string);
ShowPlayerDialog(playerid, 998, DIALOG_STYLE_MSGBOX, "PRISAO", "VOCE FOI PRESO PELA POLICIA!", "OK", "");
new Query1[90], Query2[90],DBResult:Resultado;
format(Query2, sizeof(Query2), "SELECT * FROM `cadeia` WHERE `presoNome`='%s'", PlayerInfo[playerid][pNome]);
Resultado = db_query(Connect, Query2);
if(db_num_rows(Resultado) == 0)
{
format(Query1, sizeof(Query1), "INSERT INTO `cadeia`(`presoNome`,`presoTipo`,`presoTempo`) VALUES('%s',%d,%d);",
PlayerInfo[playerid][pNome],PlayerInfo[playerid][pPreso],PlayerInfo[playerid][pTempoPreso]);
db_query(Connect, Query1);
}
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(playerid, 0);
SetPlayerInterior(playerid, 5);
SetPlayerPos(playerid, 322.197998,302.497985,999.148437);
format(string, sizeof(string), "[PRISAO] Voce deve cumprir %d minutos de prisao!", tempo);
SendClientMessage(playerid, COR_AMARELO, string);
ShowPlayerDialog(playerid, 998, DIALOG_STYLE_MSGBOX, "PRISAO", "VOCE FOI PRESO PELA STAFF!", "OK", "");
new Query1[90], Query2[90],DBResult:Resultado;
format(Query2, sizeof(Query2), "SELECT * FROM `cadeia` WHERE `presoNome`='%s'", PlayerInfo[playerid][pNome]);
Resultado = db_query(Connect, Query2);
if(db_num_rows(Resultado) == 0)
{
format(Query1, sizeof(Query1), "INSERT INTO `cadeia`(`presoNome`,`presoTipo`,`presoTempo`) VALUES('%s',%d,%d);",
PlayerInfo[playerid][pNome],PlayerInfo[playerid][pPreso],PlayerInfo[playerid][pTempoPreso]);
db_query(Connect, Query1);
}
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(Query, sizeof(Query), "DELETE FROM `cadeia` WHERE `presoNome`='%s'",PlayerInfo[playerid][pNome]);
db_query(Connect, Query);
PlayerInfo[playerid][pPreso] = 0;
PlayerInfo[playerid][pTempoPreso] = 0;
PlayerInfo[playerid][pCalado] = false;
PlayerInfo[playerid][pNivelProcurado] = 0;
SetPlayerWantedLevel(playerid, PlayerInfo[playerid][pNivelProcurado]);
SendClientMessage(playerid,COR_VERDE,"[LIBERDADE] Voce foi solto! Nao cometa mais crimes!");
KillTimer(TimerCadeiaPublica[playerid]);
KillTimer(TimerCadeiaAdmin[playerid]);
SpawnPlayer(playerid);
SalvarDB(playerid);
}
Alguem saberia me dizer onde esta o erro no code?