Portal SAMP
[Ajuda] Players se matam na cadeia e spawna fora da cadeia. - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Players se matam na cadeia e spawna fora da cadeia. (/showthread.php?tid=1439)



Players se matam na cadeia e spawna fora da cadeia. - fear - 23/07/2021

bom dia.

como faço pra corrigir esse bug??

comando de cadeia:

Código PHP:
CMD:cadeia(playeridparams[])
{
    if(
ChecarPermissoes(playerid) || AdmServer(playerid1)) return 1;

    new 
idtimemotive[55 + (MAX_PLAYER_NAME 2) + 19 1];

    if(
sscanf(params"uis[19]"idtimemotive))
        return 
SendClientMessage(playeridCOLOR_YELLOW"<!> {FFFFFF}Use: /Cadeia <id> <tempo em minutos> <motivo>");

    if(!
IsPlayerConnected(id))
        return 
SendClientMessage(playeridCOLOR_YELLOW"<!> {FFFFFF}Esse jogador não está conectado!");

    if(
ContaPlayer[id][Level] > 0)
        return 
SendClientMessage(playeridCOLOR_YELLOW"<!> {FFFFFF}Você não pode dar cadeia em administradores!");

    if(
IsPlayerInChainAdmin(id))
        return 
SendClientMessage(playeridCOLOR_YELLOW"<!> {FFFFFF}Esse jogador já está na cadeia admin! Para tira-lo Use: /Rcadeia <id> <motivo>");

    
PutPlayerInChainAdmin(idtime 60);

    
format(motivesizeof(motive), "Admin %s prendeu %s na CADEIA ADMIN por %d minuto%s. Motivo: %s."Nome(playerid), Nome(id), time, (time == 1) ? ("") : ("s"), motive);
    
MsgToAll(0xFF444499motive);
    return 
1;


Talvez setar a vida infinita pra quem esta preso não se matar... só não sei como fazer


RE: Players se matam na cadeia e spawna fora da cadeia. - xbruno1000x - 23/07/2021

Crie uma bool: Preso[MAX_PLAYERS] e assinale como verdadeira ao prender alguém. Depois vá na OnPlayerSpawn e crie uma if(Preso[playerid] == true) SetPlayerPos(playerid, X,Y,Z);//Pos da cadeia aqui


RE: Players se matam na cadeia e spawna fora da cadeia. - fear - 23/07/2021

(23/07/2021 12:13)xbruno1000x Escreveu: Crie uma bool: Preso[MAX_PLAYERS] e assinale como verdadeira ao prender alguém. Depois vá na OnPlayerSpawn e crie uma if(Preso[playerid] == true) SetPlayerPos(playerid, X,Y,Z);//Pos da cadeia aqui

Não consigo fazer isso. mas acho que ja tem..

Código PHP:
enum E_PLAYER_CHAIN_ADMIN
{
    
bool:E_PLAYER_IN_CHAIN,
    
E_PLAYER_CHAIN_TIME


Código PHP:
static PutPlayerInChainAdmin(playeridtime)
{
    
time gettime() + time;//(60 * time);

    
playerChainAdmin[playerid][E_PLAYER_IN_CHAIN] = true;
    
playerChainAdmin[playerid][E_PLAYER_CHAIN_TIME] = time;

    
SetPlayerWantedLevel(playerid0);

    if(
IsPlayerCuffed(playerid))
        
UnshacklePlayer(playeridREASON_NONE);

    if(
IsPlayerArrasted(playerid))
        
ChangePlayerArrestedState(playeridGetPlayerArrastedMe(playerid), REASON_ADMIN);

    if(
IsPlayerApproached(playerid))
        
ChangePlayerApproachedState(playeridGetPlayerApproachedMe(playerid), REASON_ADMIN);

    
TogglePlayerControllable(playeridtrue);

    
SetPlayerTeam(playeridTEAM_JAIL);

    
SetPlayerVirtualWorld(playerid6666);
    
SetPlayerInterior(playerid6);
    
SetPlayerPos(playeridprisionPosition[0], prisionPosition[1], prisionPosition[2]);
    
SetPlayerFacingAngle(playeridprisionPosition[3]);

    
SetCameraBehindPlayer(playerid);

    
SetTimerEx("ShowPlayerPrisionTime"900false"iii"playeridtime1);


o problema e quando se mata dentro e spawna fora talvez com o codigo tu consiga me dar a solução.. tentei do jeito que você falou acima e da muito erro.


RE: Players se matam na cadeia e spawna fora da cadeia. - Lightz/Conta nova - 23/07/2021

(23/07/2021 12:31)fear Escreveu:
(23/07/2021 12:13)xbruno1000x Escreveu: Crie uma bool: Preso[MAX_PLAYERS] e assinale como verdadeira ao prender alguém. Depois vá na OnPlayerSpawn e crie uma if(Preso[playerid] == true) SetPlayerPos(playerid, X,Y,Z);//Pos da cadeia aqui

Não consigo fazer isso. mas acho que ja tem..

Código PHP:
enum E_PLAYER_CHAIN_ADMIN
{
    
bool:E_PLAYER_IN_CHAIN,
    
E_PLAYER_CHAIN_TIME


Código PHP:
static PutPlayerInChainAdmin(playeridtime)
{
    
time gettime() + time;//(60 * time);

    
playerChainAdmin[playerid][E_PLAYER_IN_CHAIN] = true;
    
playerChainAdmin[playerid][E_PLAYER_CHAIN_TIME] = time;

    
SetPlayerWantedLevel(playerid0);

    if(
IsPlayerCuffed(playerid))
        
UnshacklePlayer(playeridREASON_NONE);

    if(
IsPlayerArrasted(playerid))
        
ChangePlayerArrestedState(playeridGetPlayerArrastedMe(playerid), REASON_ADMIN);

    if(
IsPlayerApproached(playerid))
        
ChangePlayerApproachedState(playeridGetPlayerApproachedMe(playerid), REASON_ADMIN);

    
TogglePlayerControllable(playeridtrue);

    
SetPlayerTeam(playeridTEAM_JAIL);

    
SetPlayerVirtualWorld(playerid6666);
    
SetPlayerInterior(playerid6);
    
SetPlayerPos(playeridprisionPosition[0], prisionPosition[1], prisionPosition[2]);
    
SetPlayerFacingAngle(playeridprisionPosition[3]);

    
SetCameraBehindPlayer(playerid);

    
SetTimerEx("ShowPlayerPrisionTime"900false"iii"playeridtime1);


o problema e quando se mata dentro e spawna fora talvez com o codigo tu consiga me dar a solução.. tentei do jeito que você falou acima e da muito erro.
Deixa eu ver se entendi, você quer que quem tá preso fique com  vida infinita para não morrer? Se for isso posso te ajudar.


RE: Players se matam na cadeia e spawna fora da cadeia. - zBL4CK - 23/07/2021

Acredito que o que ele quer dizer é que os players que estão presos quando morrem la na cadeia alem de spawnar dentro da cadeia spawna fora como um player normal.

se for isso faça uma verificação em OnPlayerDeath se o player ta com a var de preso para true ou seja 

Código PHP:
public OnPlayerDeath(playeridkilleridreason)
{
    if(playerpreso[playerid] == true) {
       SetPlayerPos(playerid0.00.00.0); // coloque aki a pos onde vc deseja que o player dê spawn apos a morte na prisao
    }
    return 1;




RE: Players se matam na cadeia e spawna fora da cadeia. - xbruno1000x - 23/07/2021

Com o código completo fica mais prático.

Tente assim:
Código:
static PutPlayerInChainAdmin(playerid, time)
{
    time = gettime() + time;//(60 * time);

    playerChainAdmin[playerid][E_PLAYER_IN_CHAIN] = true;
    playerChainAdmin[playerid][E_PLAYER_CHAIN_TIME] = time;

    SetPlayerWantedLevel(playerid, 0);

    if(IsPlayerCuffed(playerid))
        UnshacklePlayer(playerid, REASON_NONE);

    if(IsPlayerArrasted(playerid))
        ChangePlayerArrestedState(playerid, GetPlayerArrastedMe(playerid), REASON_ADMIN);

    if(IsPlayerApproached(playerid))
        ChangePlayerApproachedState(playerid, GetPlayerApproachedMe(playerid), REASON_ADMIN);

    TogglePlayerControllable(playerid, true);

    SetPlayerTeam(playerid, TEAM_JAIL);

    SetPlayerVirtualWorld(playerid, 6666);
    SetPlayerInterior(playerid, 6);
    SetPlayerPos(playerid, prisionPosition[0], prisionPosition[1], prisionPosition[2]);
    SetPlayerFacingAngle(playerid, prisionPosition[3]);
    SetPlayerHealth(playerid, 99999.0);
    SetCameraBehindPlayer(playerid);

    SetTimerEx("ShowPlayerPrisionTime", 900, false, "iii", playerid, time, 1);

}
Dessa forma a vida ficará infinita na cadeia, não se esqueça de setar para 100 quando o player sair.


RE: Players se matam na cadeia e spawna fora da cadeia. - fear - 23/07/2021

(23/07/2021 14:22)xbruno1000x Escreveu: Com o código completo fica mais prático.

Tente assim:
Código:
static PutPlayerInChainAdmin(playerid, time)
{
    time = gettime() + time;//(60 * time);

    playerChainAdmin[playerid][E_PLAYER_IN_CHAIN] = true;
    playerChainAdmin[playerid][E_PLAYER_CHAIN_TIME] = time;

    SetPlayerWantedLevel(playerid, 0);

    if(IsPlayerCuffed(playerid))
        UnshacklePlayer(playerid, REASON_NONE);

    if(IsPlayerArrasted(playerid))
        ChangePlayerArrestedState(playerid, GetPlayerArrastedMe(playerid), REASON_ADMIN);

    if(IsPlayerApproached(playerid))
        ChangePlayerApproachedState(playerid, GetPlayerApproachedMe(playerid), REASON_ADMIN);

    TogglePlayerControllable(playerid, true);

    SetPlayerTeam(playerid, TEAM_JAIL);

    SetPlayerVirtualWorld(playerid, 6666);
    SetPlayerInterior(playerid, 6);
    SetPlayerPos(playerid, prisionPosition[0], prisionPosition[1], prisionPosition[2]);
    SetPlayerFacingAngle(playerid, prisionPosition[3]);
    SetPlayerHealth(playerid, 99999.0);
    SetCameraBehindPlayer(playerid);

    SetTimerEx("ShowPlayerPrisionTime", 900, false, "iii", playerid, time, 1);

}
Dessa forma a vida ficará infinita na cadeia, não se esqueça de setar para 100 quando o player sair.

@EDIT! resolvido. Obrigado.