[Ajuda] Anti-TP ,funciona assim ?
#1

Olб pessoal,to tentando fazer um anti teleport,mas nгo sei se minha ideia funciona ou nгo.
Desconsiderando que o player possa entrar em interiores.
Em Ongamemodeinit:
Код:
SetTimer("antitp",3000,1);
Код:
public antitp(playerid)
{
    new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
if(!IsPlayerInRangeOfPoint(playerid, 20.0, x,y,z))
    SendClientMessage(playerid,-1,"tp detectado");
    return 1;
}
Se a posiзгo alcance for maior que 20pontos da ultima posiзгo dele,mandar a msg de tp detectado.

So que ele nao manda a mensagem,mesmo que eu vб fora do alcance em menos de 3s
Reply
#2

Vocк terб que armazenar a ultima posiзгo e comparar com a atual, e lembrando que vai haver falhas se vocк nгo definir alguma variбvel juntamente quando utilizado SetPlayerPos e checando no antiTP se a mesma estб positiva.

A lуgica й simples.
Reply
#3

Nгo vai dar certo esse anti-tp aн nгo, primeiro porque vocк precisa usar um settimerex e nгo settimer, segundo й que precisa ser na onplayerconnect e nгo na ongamemodeinit, e terceiro й que vocк precisa armazenar as coordenadas pra depois de um tempo checar, e do jeito que vocк fez vai dar muito bug...
Reply
#4

Quote:
Originally Posted by n0minal
Посмотреть сообщение
Nгo vai dar certo esse anti-tp aн nгo, primeiro porque vocк precisa usar um settimerex e nгo settimer, segundo й que precisa ser na onplayerconnect e nгo na ongamemodeinit, e terceiro й que vocк precisa armazenar as coordenadas pra depois de um tempo checar, e do jeito que vocк fez vai dar muito bug...
Entгo tб certo assim ?

pawn Код:
new posxtp[MAX_PLAYERS];
new posytp[MAX_PLAYERS];
new posztp[MAX_PLAYERS];
pawn Код:
SetTimerEx("antitp",2000,true,"d",playerid);
pawn Код:
public antitp(playerid)
{
   
    GetPlayerPos(playerid,posxtp[playerid],posytp[playerid],posztp[playerid]);
if(!IsPlayerInRangeOfPoint(playerid, 20.0, posxtp[playerid],posytp[playerid],posztp[playerid]))
    SendClientMessage(playerid,-1,"tp detectado");
    return 1;
    }
Coloquei assim e ele fica mandando a mensagem vбrias vezes,mesmo estando parado.
Reply
#5

Isso nгo vai funcionar desse jeito...
Experimente ligar o timer na OnPlayerSpawn e armazene a posiзгo do player nas variбveis apуs a verificaзгo.
Lembrando que vc deve criar uma stock que armazene acima de tudo a posiзгo atual do player e fazer a funзгo do teleporte.
Ex:
pawn Код:
stock SetPlayerPosEx(playerid, Float:x, Float:y, Float:z)
{
//...
e substituir seus SetPlayerPos por SetPlayerPosEx

PS: Acabei de fazer e funcionou. Se tiver dъvidas, basta perguntar =)
Reply
#6

Quote:
Originally Posted by Artista
Посмотреть сообщение
Isso nгo vai funcionar desse jeito...
Experimente ligar o timer na OnPlayerSpawn e armazene a posiзгo do player nas variбveis apуs a verificaзгo.
Lembrando que vc deve criar uma stock que armazene acima de tudo a posiзгo atual do player e fazer a funзгo do teleporte.
Ex:
pawn Код:
stock SetPlayerPosEx(playerid, Float:x, Float:y, Float:z)
{
//...
e substituir seus SetPlayerPos por SetPlayerPosEx

PS: Acabei de fazer e funcionou. Se tiver dъvidas, basta perguntar =)
Obrigado pela atenзгo.Ontem eu fiz desta maneira :

Onplayerconnect:
pawn Код:
SetTimerEx("antitp",5000,true,"d",playerid);
saiuinterior[playerid] = 0;


pawn Код:
public antitp(playerid)
{
   if(GetPlayerInterior(playerid) != 0)
   {
   saiuinterior[playerid] = 1;
   }else{
    saiuinterior[playerid] = 0;
   }
    GetPlayerPos(playerid,posxantes,posyantes,poszantes);
    SetTimerEx("antitp2",3000,true,"d",playerid);
    return 1;
    }
    public antitp2(playerid)
{

   
if(!IsPlayerInRangeOfPoint(playerid, 80.0,posxantes,posyantes,poszantes ))
{
if(GetPlayerInterior(playerid) == 0 && saiuinterior[playerid] == 0)
    {
    new string[200];
    SendClientMessage(playerid,-1,"tp detectado");
    return 1;
    }
    }
    }
e aparentou funcionar bem
Reply
#7

Sobre a parte do interior, vocк pode usar a public OnPlayerInteriorChange para fazer uma checagem de mudanзa de interior com mais precisгo
Lembrando que qualquer coisa, estamos juntos nessa (odeio cheaters '-')
Reply
#8

Quote:
Originally Posted by Artista
Посмотреть сообщение
Sobre a parte do interior, vocк pode usar a public OnPlayerInteriorChange para fazer uma checagem de mudanзa de interior com mais precisгo
Lembrando que qualquer coisa, estamos juntos nessa (odeio cheaters '-')
Cara,valeu por me falar dessa funзгo,eu pesquisei pra ver se tinha como checar a mudanзa de interior e nгo tinha achado nada =D

+1 REP
Reply
#9

Aproveitando o tуpico,como posso fazer para nгo apitar quando o player spawnar?
Reply
#10

Й como eu disse acima, recomendo que vocк ative o timer no OnPlayerSpawn.
Pois quando vocк estб na parte de selecionar a skin a sua posiзгo estб sendo salva pelo timer. Aн quando aperta no botгo spawn vocк "usa um teleport hack".
Entгo recomendo que ligue o timer depois que o player ser spawnado. Se vocк usa algum sistema de spawn aleatуrio, pra garantir coloque a ativaзгo do timer depois do SetPlayerPos do seu sistema

Ah, e muito obrigado pelo REP *-*
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)