Detectar jogadores de RT e kicka-los -
KoloradO - 04.12.2017
Como detectar jogadores com RT?
Pra quem nгo sabe RT й quando o jogador meio que laga e nгo recebe informaзхes do servidor.
Exemplo: se usar SetPlayerPos em um jogador de RT nada acontecerб.
Re: Detectar jogadores de RT e kicka-los -
Jorginhoda12 - 04.12.2017
NetStats_PacketLossPercent
Re: Detectar jogadores de RT e kicka-los - Jelly23 - 04.12.2017
Quote:
Originally Posted by Jorginhoda12
NetStats_PacketLossPercent
|
Nem todos os jogadores com packetloss estгo desincronizados/com RT.
Re: Detectar jogadores de RT e kicka-los -
Locky_ - 04.12.2017
Quote:
Originally Posted by KoloradO
Como detectar jogadores com RT?
Pra quem nгo sabe RT й quando o jogador meio que laga e nгo recebe informaзхes do servidor.
Exemplo: se usar SetPlayerPos em um jogador de RT nada acontecerб.
|
Й possнvel usar a callback OnPlayerUpdate, se esta parar de receber dados, provavelmente o jogador esteja desincronizado/esc (nгo tenho muita certeza, mas de esc tenho certeza).
Acho que tambйm й possнvel atravйs de plugins raknet
Re: Detectar jogadores de RT e kicka-los - Jelly23 - 04.12.2017
Quote:
Originally Posted by Locky_
Й possнvel usar a callback OnPlayerUpdate, se esta parar de receber dados, provavelmente o jogador esteja desincronizado. Acho que tambйm й possнvel atravйs de plugins raknet
|
Jogadores desincronizados vгo continuar mandando atualizaзхes, por isso ainda й possнvel vк-los se movendo, entгo a callback vai continuar sendo chamada.
Re: Detectar jogadores de RT e kicka-los -
KoloradO - 04.12.2017
A melhor coisa que eu consegui fazer atй agora foi isso.
Mas nгo tenho certeza se й seguro.
Code:
#include <a_samp>
new PacketAltoAvisos[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
PacketAltoAvisos[playerid] = 0;
return 1;
}
public OnPlayerUpdate(playerid)
{
if(!IsPlayerNPC(playerid))
{
new
szString[144],
Float:Pocket,
Nome[24];
GetPlayerPacketloss(playerid,Pocket);
if(Pocket >= 8.0)
{
PacketAltoAvisos[playerid] ++;
if(PacketAltoAvisos[playerid] >= 8)
{
GetPlayerName(playerid, Nome, 24);
format(szString, sizeof(szString), "[Aviso]: %s(id:%d) Possнvelmente estб de RT - Packet Loss: %0.1f", Nome, playerid, Pocket);
SendClientMessageToAll(-1, szString);
}
}
else PacketAltoAvisos[playerid] = 0;
}
return 1;
}
stock GetPlayerPacketloss(playerid,&Float:packetloss)
{
/* Returns the packetloss percentage of the given playerid - Made by Fusez */
if(!IsPlayerConnected(playerid)) return 0;
new nstats[400+1], nstats_loss[20], start, end;
GetPlayerNetworkStats(playerid, nstats, sizeof(nstats));
start = strfind(nstats,"packetloss",true);
end = strfind(nstats,"%",true,start);
strmid(nstats_loss, nstats, start+12, end, sizeof(nstats_loss));
packetloss = floatstr(nstats_loss);
return 1;
}
Re: Detectar jogadores de RT e kicka-los -
Locky_ - 05.12.2017
Quote:
Originally Posted by Jelly23
Jogadores desincronizados vгo continuar mandando atualizaзхes, por isso ainda й possнvel vк-los se movendo, entгo a callback vai continuar sendo chamada.
|
Em meu servidor, os jogadores costumam notar o "relуgio" travado. Muitas vezes, o jogador que tem o "relуgio travado", as vezes fica com ampulheta em cima, e consegue falar no chat e visualizar o chat. Sу que tudo para de carregar para este jogador. Agora, nunca testei como detectar isto.
Quote:
Originally Posted by KoloradO
A melhor coisa que eu consegui fazer atй agora foi isso.
Mas nгo tenho certeza se й seguro.
Code:
#include <a_samp>
new PacketAltoAvisos[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
PacketAltoAvisos[playerid] = 0;
return 1;
}
public OnPlayerUpdate(playerid)
{
if(!IsPlayerNPC(playerid))
{
new
szString[144],
Float:Pocket,
Nome[24];
GetPlayerPacketloss(playerid,Pocket);
if(Pocket >= 8.0)
{
PacketAltoAvisos[playerid] ++;
if(PacketAltoAvisos[playerid] >= 8)
{
GetPlayerName(playerid, Nome, 24);
format(szString, sizeof(szString), "[Aviso]: %s(id:%d) Possнvelmente estб de RT - Packet Loss: %0.1f", Nome, playerid, Pocket);
SendClientMessageToAll(-1, szString);
}
}
else PacketAltoAvisos[playerid] = 0;
}
return 1;
}
stock GetPlayerPacketloss(playerid,&Float:packetloss)
{
/* Returns the packetloss percentage of the given playerid - Made by Fusez */
if(!IsPlayerConnected(playerid)) return 0;
new nstats[400+1], nstats_loss[20], start, end;
GetPlayerNetworkStats(playerid, nstats, sizeof(nstats));
start = strfind(nstats,"packetloss",true);
end = strfind(nstats,"%",true,start);
strmid(nstats_loss, nstats, start+12, end, sizeof(nstats_loss));
packetloss = floatstr(nstats_loss);
return 1;
}
|
Parece que este cуdigo й antigo, pois й possнvel pegar o packet loss com a funзгo NetStats_PacketLossPercent, ao invйs de usar GetPlayerNetworkStats e obter a informaзгo de packetloss dentro da string.
Re: Detectar jogadores de RT e kicka-los -
Marllun - 05.12.2017
Isso acontecia no server de rpg que eu jogava, o bug acontecia para qualquer pessoa mesmos problemas. Eu acho que atй hoje eles nгo conseguiram resolver.
Re: Detectar jogadores de RT e kicka-los -
KoloradO - 05.12.2017
Na wiki sa-mp diz que usar GetPlayerNetworkStats pra pegar o packet loss й mais preciso do q usar netStats_PacketLossPercent
Re: Detectar jogadores de RT e kicka-los -
Dayvison_ - 05.12.2017
Tenho dois mйtodos, porem o primeiro nгo tenho certeza se ira funcionar.
- NВO SEI SE VAI FUNCIONAR, NECESSITA TESTE, APENAS UMA TEORIA, PODE ATRAPALHAR O JOGADOR.
Passos:- 1 . Armazena a posiзгo do jogador.
- 2 . Congele o jogador(Em minha teoria ele nгo ficaria congelado ja que, esta de rt).
- 2 . Obtenha a posiзгo do mesmo apуs x segundos.
- 4 . Compare as duas posiзхes, caso estejam diferentes o player esta de rt, ou utilizando algum cheat.
SE ISTO FUNCIONAR: caso deseje kickar o jogador, certifique-se de que o mesmo esta se movendo.
- PODE ATRAPALHAR O JOGADOR.
Passos:- 1 . Mostre um dialogo ao jogador "Vocк estб com rt?", "Nгo".
- 2 . Caso o jogador aperte o botгo, ele nгo estб de rt jб que o mesmo nгo irб ver o dialogo caso esteja.
Re: Detectar jogadores de RT e kicka-los -
KoloradO - 05.12.2017
Quote:
Originally Posted by Dayvison_
Tenho dois mйtodos, porem o primeiro nгo tenho certeza se ira funcionar.
- NВO SEI SE VAI FUNCIONAR, NECESSITA TESTE, APENAS UMA TEORIA, PODE ATRAPALHAR O JOGADOR.
Passos:- 1 . Armazena a posiзгo do jogador.
- 2 . Congele o jogador(Em minha teoria ele nгo ficaria congelado ja que, esta de rt).
- 2 . Obtenha a posiзгo do mesmo apуs x segundos.
- 4 . Compare as duas posiзхes, caso estejam diferentes o player esta de rt, ou utilizando algum cheat.
SE ISTO FUNCIONAR: caso deseje kickar o jogador, certifique-se de que o mesmo esta se movendo.
- PODE ATRAPALHAR O JOGADOR.
Passos:- 1 . Mostre um dialogo ao jogador "Vocк estб com rt?", "Nгo".
- 2 . Caso o jogador aperte o botгo, ele nгo estб de rt jб que o mesmo nгo irб ver o dialogo caso esteja.
|
Isso й inutil. se for pra usar isso eu uso /tapa (Setar posiзгo do player) e checar manualmente.
mas vlw pelo comentбrio, eu quero algo automбtico.
Como ngm me ajudou acho que vou usar isso aqui mesmo, mas nгo sei se vai funcionar 100 %
Code:
public OnPlayerUpdate(playerid)
{
if(!IsPlayerNPC(playerid))
{
new
szString[144],
Float:Pocket,
Nome[24];
GetPlayerPacketloss(playerid,Pocket);
if(Pocket >= 10.0)
{
PacketAltoAvisos[playerid] ++;
if(PacketAltoAvisos[playerid] >= 30)
{
GetPlayerName(playerid, Nome, 24);
format(szString, sizeof(szString), "[Aviso]: %s(id:%d) Possнvelmente estб de RT - Packet Loss:%0.1f", Nome, playerid, Pocket);
SendClientMessageToAll(-1, szString);
}
}
else PacketAltoAvisos[playerid] = 0;
}
return 1;
}
stock GetPlayerPacketloss(playerid,&Float:packetloss)
{
/* Returns the packetloss percentage of the given playerid - Made by Fusez */
if(!IsPlayerConnected(playerid)) return 0;
new nstats[400+1], nstats_loss[20], start, end;
GetPlayerNetworkStats(playerid, nstats, sizeof(nstats));
start = strfind(nstats,"packetloss",true);
end = strfind(nstats,"%",true,start);
strmid(nstats_loss, nstats, start+12, end, sizeof(nstats_loss));
packetloss = floatstr(nstats_loss);
return 1;
}
Re: Detectar jogadores de RT e kicka-los -
RcLuanz1n - 27.10.2018
Eu tinha esse sistema de anti RT, irei procurar