[Include] IsFirstJoin [reconnection detect]
#1

Introduзгo:
este realese traz й util para saber se o player levou disconect e re-entrou no servidor, ou servidor tenha reiniciado quais os jogadores estavam presentes antes

Callback:
PHP код:
//chamado a primeira vez que conecta no servidor (antes de OnPlayerConnect)
public OnClientJoin(playerid)
//Chamado quando o player reconecta ao server por motivo de falhas na conexгo
public OnPlayerReconnect(playeridrepeats)
repeats=reincidкncias 
Funзхes:
PHP код:
IsFirstJoin(playerid);//se й a primeira conexгo
GetPlayerDisconnects(playerid);//quantas vezes o player levou disconect 
Exemplo de utilizaзгo:
se repetir a remoзгo de uma construзгo padrгo, o player ira crashar, й um problema quando vocк tem que reiniciar o servidor, e tem players, que podem crashar, no caso, vocк sу deletara a primeira vez que conectar!
PHP код:
public OnPlayerConnect(playerid)
{
    if(
IsFirstJoin(playerid))
    {
        
RemoveBuildingForPlayer(playeridmodelidfXfYfZfRadius);
        
RemoveBuildingForPlayer(playeridmodelidfXfYfZfRadius);
        
RemoveBuildingForPlayer(playeridmodelidfXfYfZfRadius);
        ...
    }
    return 
1;

Dependкncia:Creditos:
Quote:
RazorGuigo -> Inital Realese

Link para download:

GitHub: https://github.com/RodrigoDornelles/IsFirstJoin [V 2.2]
Reply
#2

Good Job! +REP
Reply
#3

Testei aqui e a IsFirstJoin(playerid); estб retornando positivo o tempo todo.
Puxei o cabo da internet pra forзar um reconnect e mesmo assim diz que й uma First Join.

Estou usando a ъltima versгo do Pawn.RakNet e a versгo 0.3.DL do samp.
Reply
#4

Quote:
Originally Posted by JR_Junior
Посмотреть сообщение
Testei aqui e a IsFirstJoin(playerid); estб retornando positivo o tempo todo.
Puxei o cabo da internet pra forзar um reconnect e mesmo assim diz que й uma First Join.

Estou usando a ъltima versгo do Pawn.RakNet e a versгo 0.3.DL do samp.
ele funciona com exatidгo somente em OnPlayerConnect, se vocк quiser utilizar em outra callback ou timer fassa o seguinte:

PHP код:
public OnPlayerConnect(playerid)
{
    
DC_LOGIN[playerid]++;
    if(
DC_LOGIN[playerid] > 1)
    {
        
//ST_LOGIN[playerid]= false; <--- deixe comentado
        #if defined OnPlayerReconnect
            
OnPlayerReconnect(playeridDC_LOGIN[playerid]);
        
#endif 
    
}
    
#if defined STL_OnPlayerConnect
        
return OnPlayerConnect(playerid);
    
#else
        
return 1;
    
#endif

suspeito que este problema seja causado por hooks, mas ainda nгo fiz testes sobre isso
Reply
#5

Quote:
Originally Posted by RazorGuigo
Посмотреть сообщение
ele funciona com exatidгo somente em OnPlayerConnect, se vocк quiser utilizar em outra callback ou timer fassa o seguinte:

PHP код:
public OnPlayerConnect(playerid)
{
    
DC_LOGIN[playerid]++;
    if(
DC_LOGIN[playerid] > 1)
    {
        
//ST_LOGIN[playerid]= false; <--- deixe comentado
        #if defined OnPlayerReconnect
            
OnPlayerReconnect(playeridDC_LOGIN[playerid]);
        
#endif 
    
}
    
#if defined STL_OnPlayerConnect
        
return OnPlayerConnect(playerid);
    
#else
        
return 1;
    
#endif

suspeito que este problema seja causado por hooks, mas ainda nгo fiz testes sobre isso
Deixa eu ver se entendi: if(rpcid == 0x19) - Indica que й uma nova conexгo, ou reconexгo tambйm?
Eu fiz um debug e esse rpcid retorna em ambas as situaзхes, ou seja, nгo importa se й uma first join ou um reconnect. Por isso sempre serб uma First Join, pois a variбvel sempre serб resetada apуs essa condiзгo(rpcid == 0x19): DC_LOGIN[playerid] = 0;.

Dessa forma, a soluзгo nгo estб em comentar a negativaзгo da variбvel, a qual nem chega a ser usada, pois a condiзгo if(DC_LOGIN[playerid] > 1) nunca existirб.

Nгo entendo de Pawn.RakNet, mas acredito que deve ter outro rpcid que indique uma reconnect.

NOTA: Nгo estou usando em forma de include, estou usando diretamente no GM.
Reply
#6

Quote:
Originally Posted by JR_Junior
Посмотреть сообщение
Deixa eu ver se entendi: if(rpcid == 0x19) - Indica que й uma nova conexгo, ou reconexгo tambйm?
Eu fiz um debug e esse rpcid retorna em ambas as situaзхes, ou seja, nгo importa se й uma first join ou um reconnect. Por isso sempre serб uma First Join, pois a variбvel sempre serб resetada apуs essa condiзгo(rpcid == 0x19): DC_LOGIN[playerid] = 0;.

Dessa forma, a soluзгo nгo estб em comentar a negativaзгo da variбvel, a qual nem chega a ser usada, pois a condiзгo if(DC_LOGIN[playerid] > 1) nunca existirб.

Nгo entendo de Pawn.RakNet, mas acredito que deve ter outro rpcid que indique uma reconnect.

NOTA: Nгo estou usando em forma de include, estou usando diretamente no GM.
0x19 -> sу й chamado uma vez por vez que abre o seu GTA, se o servidor reinicia as variбveis voltam para o valor default 0, e nгo sгo alteradas, pois o jogador hб enviou o rpc 0x19

if(DC_LOGIN[playerid] > 1) eu coloquei isso para perceber se o player teve uma leve desconexгo em seu GTA, mas o servidor continuou online (assim nгo voltando as variбveis para o valor default), em teoria era para funcionar mas nгo sei qual foi o erro na pratica! lamento.

sempre que faзo correзгo em algum release, eu atualizo o topico sobre isso, entгo qualquer coisa postarei aqui um novo patching!
Reply
#7

Tб ok entгo! Vou aguardar! Valeu.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)