[Ajuda] Reconectar jogador
#1

Entгo, estou hб alguns minutos tentando fazer uma espйcie de 'reconexгo' do jogador com o servidor, tentei fazer aqui de algumas maneiras e resolvi recorrer а pesquisa. Achei algumas soluзхes, muitas delas semelhantes e resolvi usб-las.

pawn Код:
stock Reconectar( playerid )
{
    new
        str[ 7 + 16 ],
        ip[ 16 ]
    ;

    GetPlayerIp( playerid, ip, sizeof( ip ));
    SetPVarString( playerid, "ip", ip );
    format( str, sizeof( str ), "banip %s", ip );
    SendRconCommand( str );
    printf( "DEBUG: Comando '%s' executado.", str );
    return 1;
}

public OnPlayerConnect( playerid )
{
    SetPVarString( playerid, "ip", "sem ip" );
    return 1;
}

public OnPlayerDisconnect( playerid, reason )
{
    new
        str[ 9 + 16 ],
        ip[ 16 ]
    ;

    GetPVarString( playerid, "ip", ip, 16 );
    if( strcmp( ip, "sem ip", false ) != 0 )
    {
        GetPVarString( playerid, "ip", ip, 16 );
        format( str, sizeof( str ), "unbanip %s", ip );
        SendRconCommand( str );
        printf( "DEBUG: Comando '%s' executado.", str );
    }
    return 1;
}
Pois bem, como eu fiz os DEBUG, eu pude acompanhar e estб tudo normal, o servidor lк tudo isso.

No servidor, o jogador sobre 'timeout' normal, mas quando ele tenta reconectar, aparece 'You are banned from this server.' Sendo que no DEBUG aparece: "Comando 'unbanip 127.0.0.1' executado" - Tal como o comando 'banip'.

E o mais 'legal' й que o jogador loga normalmente se fechar o GTA.

Entгo queria saber se alguйm sabe o porquк do player receber o aviso de 'You're banned from this server.'?
Reply
#2

Armazene o IP em uma string global, faзa a funзгo rodar, e em onplayerdisconnect faзa a funзгo de desbanir o IP pela variavel global.
Reply
#3

Dб no mesmo, cara. Jб tinha testado assim.

O problema й que o jogador, ao tentar logar depois do 'timeout' й dado como banido, mas quando eu fecho e o GTA e logo novamente, ele nгo estб.
Reply
#4

Pode tentar algo como isso aqui,
PHP код:
stock Reconectar(playerid) return OnPlayerConnect(playerid), SetPlayerHealth(playerid0.0), ForceClassSelection(playerid); 
Reply
#5

Como isso funcionaria?

@EDIT:
Tб aн a imagem:
Reply
#6

Primeiramente vocк nгo consegue pegar o IP do player na callback OnPlayerDisconnect.

Veja a explicaзгo por JernejL.

Isto й simples.

1. Primeiramente vocк precisa banir o Ip do jogador, mas nгo kicka ele.
2. O player se desconectarб em (timeout - saiu ), No OnPlayerDisconnect vocк desbane o jogador - lembre que GetPlayerIp nгo pega na OnPlayerDisconnect, necessita armazenamento..
3. O cliente do player perderб a conexгo e automaticamente se reconectarб..


Sei que fizeste praticamente isto, mas era funcional antes do 0.3e.
Reply
#7

Justamente por isso que eu jб 'getava' o IP do jogador antes do 'banip', jб que eu preciso do IP do mesmo para poder bani-lo.

E de novo, os comando 'banip' e 'unbanip' sгo executados normalmente, o problema й que mesmo assim, quando ocorre o timeout e o client do jogador tenta reconectar, aparece o aviso de que ele estб banido.

E SeV_ eu me baseei justamente no post desse cara aн.

@EDIT:

E antes do banip me refiro а funзгo Reconectar.
Reply
#8

Jб tentou com outro IP "outros jogadores" ?
Reply
#9

Quando desbane o jogador, nгo se esqueзa de dar reload nos bans para atualizar o servidor. Basta adicionar o seguinte:
pawn Код:
SendRconCommand("reloadbans");
Reply
#10

Esse sistema nгo й mais funcional apуs ao SA-MP 0.3e.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)