[AJUDA]
#1

new times
Reply
#2

Cуdigo feito, Alйm disso vem com um mini tutorial. e tambйm os crйditos especiais.
pawn Код:
new tempo[MAX_PLAYERS]; // topo do gm

public OnGameModeInit()
{
   SetTimerEx( "afk", 1000, true, "i", playerid );// isso daqui diz que й para executar a funзгo afk a cada 1 segundo.
}

forward afk(playerid);
public afk(playerid)
{
    tempo[playerid] = gettime() + (600); // Isto irб criar um timer para o playerid, ou seja para cada jogador.
    new Float:x,Float:y,Float:z,Float:posicao[3]; // aqui sгo as vars que serгo armazenadas...
    GetPlayerPos(playerid,x,y,z); // Aqui pega e salvar a posiзгo do jogador no momento que o timer foi ativado.
    if(tempo[playerid] <= gettime()) // Ao final do timer, irб executar essa funзгo
    {
        GetPlayerPos(playerid,posicao[0],posicao[1],posicao[2]); // Aqui pega denovo a posiзгo do jogador
        if (posicao[0] == x && posicao[1] == y && posicao[2] == z) // Aqui faz um comparaзгo das posiзхes, da posiзгo que foi salva lб encima, com estб posiзгo apуs o timer ter acabado, Se for igual irб executar a funзгo abaixo, kickando o jogador.
        {
           Kick(playerid);
        }
    }
}

Crйditos:
Paulor - Aprendi com ele a usar o getimer.
Reply
#3

Quote:
Originally Posted by leonardo1434
Посмотреть сообщение
Cуdigo feito, Alйm disso vem com um mini tutorial. e tambйm os crйditos especiais.
pawn Код:
new tempo[MAX_PLAYERS]; // topo do gm

public OnGameModeInit()
{
   SetTimerEx( "afk", 1000, true, "i", playerid );// isso daqui diz que й para executar a funзгo afk a cada 1 segundo.
}

forward afk(playerid);
public afk(playerid)
{
    tempo[playerid] = gettime() + (600); // Isto irб criar um timer para o playerid, ou seja para cada jogador.
    new Float:x,Float:y,Float:z,Float:posicao[3]; // aqui sгo as vars que serгo armazenadas...
    GetPlayerPos(playerid,x,y,z); // Aqui pega e salvar a posiзгo do jogador no momento que o timer foi ativado.
    if(tempo[playerid] <= gettime()) // Ao final do timer, irб executar essa funзгo
    {
        GetPlayerPos(playerid,posicao[0],posicao[1],posicao[2]); // Aqui pega denovo a posiзгo do jogador
        if (posicao[0] == x && posicao[1] == y && posicao[2] == z) // Aqui faz um comparaзгo das posiзхes, da posiзгo que foi salva lб encima, com estб posiзгo apуs o timer ter acabado, Se for igual irб executar a funзгo abaixo, kickando o jogador.
        {
           Kick(playerid);
        }
    }
}

Crйditos:
Paulor - Aprendi com ele a usar o getimer.
Cara, vai dar 'Indefinido simbolo: playerid' no OnGameModeInit. Coloque o timer no OnPlayerConnect!
E pra nгo dar bugs armazene o ID do SetTimer e quando o Player sair de KillTimer.

@Edit
Nгo vai funcionar isso meu caro!
Reply
#4

ixi, й mesmo tinha esquecido do ongamemodeinit, colocar no onplayerupdate ou connect como paulor disse.


@paulor, vocк poderia me dizer porque nгo irб dar certo, agradeceria muito *.*. Nгo consigo ver porque nгo iria funcionar D:
Reply
#5

Eu jб postei aqui no fуrum...
Veja:
pawn Код:
#include <a_samp>

new Text3D:esc;

forward CheckNewHealth(playerid);
forward CheckNewHealth2(playerid);
forward CheckTakenHealth(playerid);
forward BanIfHacker(playerid);

public CheckTakenHealth(playerid)
{
        new Float:CurrHealth;
        GetPlayerHealth(playerid,CurrHealth);
        SetPVarFloat(playerid,"CurrHealth",CurrHealth);
        SetTimerEx("CheckNewHealth2",1000,false,"i",playerid);
}

public CheckNewHealth2(playerid)
{
        new Float:NewHealth2;
        GetPlayerHealth(playerid,NewHealth2);
        SetPlayerHealth(playerid,NewHealth2-1);
        SetTimerEx("CheckNewHealth",1000,false,"i",playerid);
}

public CheckNewHealth(playerid)
{
        new Float:NewHealth;
        GetPlayerHealth(playerid,NewHealth);
        SetPVarFloat(playerid,"NewHealth",NewHealth);
        SetTimerEx("BanIfHacker",1000,false,"i",playerid);
}

public BanIfHacker(playerid)
{
        SetTimerEx("CheckTakenHealth",1000,false,"i",playerid);
        if(GetPVarFloat(playerid,"CurrHealth") == GetPVarFloat(playerid,"NewHealth"))
        {
            if(!IsPlayerAdmin(playerid))
            {
                SendClientMessage(playerid,-1,"Kikado por Suspeita de Health Hack (ou ESC)!");
                new pname[MAX_PLAYER_NAME];
                new string[256];
                GetPlayerName(playerid,pname,sizeof(pname));
                format(string,sizeof(string),"[ANTI-CHEAT]: %s foi Kikado por Suspeita de Health Hack (ou ESC)!",pname);
                SendClientMessageToAll(-1,string);
                new baninfo[256];
                format(baninfo,sizeof(baninfo),"Vocк foi Kikado por Suspeita de Health Hack (ou ESC)\n\nCaso seja um engano acesse: www.seila.forumeiros.com!");
                ShowPlayerDialog(playerid,1324,DIALOG_STYLE_MSGBOX,"Kikado!", baninfo,"OK","");
                Kick(playerid);
                esc = Create3DTextLabel("^~ ESC ~^", 0x00007CAA, 1.0, 1.0, 1.0, 40.0, 0);
                Attach3DTextLabelToPlayer(esc, playerid, 0.0, 0.0, 0.4);
            }
        }
        else
        {
            new Float:NewHealth;
            GetPlayerHealth(playerid,NewHealth);
            SetPlayerHealth(playerid,NewHealth+1);
            Delete3DTextLabel(esc);
        }
}
USE A PORRA DO SEARCH DA PRУXIMA...
Reply
#6

use a porra do search da proxima voзes so sabem falar isso se eu soubesse fazer essas coisas nao estaria na forum samp pedindo ajuda
Reply
#7

pawn Код:
new Float: PTOldPos[MAX_PLAYERS][3], PTAFKTime[MAX_PLAYERS], PTAFKTime2[MAX_PLAYERS], Timer[MAX_PLAYERS]; //Crie as Vars

public OnPlayerConnect(playerid) {
   PTAFKTime2[playerid] = tickcount();
   Timer[playerid] = SetTimerEx("PTAFK", 1000, true, "i", playerid); //Iniciei o timer de 1 segundo para o playerid.
}

forward PTAFK(playerid);
public PTAFK(playerid) { //Essa funзгo para ser executado de 1 em 1 segundo.
    new Float: PTPos[3]; //Criei um var para as Pos do playerid.
    GetPlayerPos(playerid, PTPos[0], PTPos[1], PTPos[2]); //Getei as Pos do playerid.
    if(!IsPlayerInRangeOfPoint(playerid, 3.0, PTOldPos[playerid][0], PTOldPos[playerid][1], PTOldPos[playerid][2])) PTAFKTime[playerid] = 0; //Verifico se o playerid nгo estб em um raio de 3 das antigas posiзхes, assim zerando a var.
    else PTAFKTime[playerid] += tickcount() - PTAFKTime2[playerid]; //Se ele tiver no raio de 3 das antigas posiзoes, adc o tickcount - o tickcount anterior

    PTAFKTime2[playerid] = tickcount(); //Armazeno o tickcount
    PTOldPos[playerid][0] = PTPos[0]; //Armazeno a Pos X
    PTOldPos[playerid][1] = PTPos[1]; //Armazeno a Pos Y
    PTOldPos[playerid][2] = PTPos[2]; //Armazeno a Pos Z
    if(PTAFKTime[playerid]/60000 >= 10) { //Verifico se a var divida por 60000(o calculo vai sair em minutos) й maior o igual a 10
        SendClientMessage(playerid, 0xFF0000FF, "Kickado por AFK!"); //Mando a msg para o playerid
        Kick(playerid); //Kick no playerid por Esc
    }
    return 1;
}

public OnPlayerDisconnect(playerid, reason) {
    KillTimer(Timer[playerid]); //Se o playerid se desconectar destruo o timer para ele nгo ficar rodando enquanto o player estiver off.
    return 1;
}
Fiz um especialmente para vocк!


Quote:
Originally Posted by leonardo1434
Посмотреть сообщение
ixi, й mesmo tinha esquecido do ongamemodeinit, colocar no onplayerupdate ou connect como paulor disse.


@paulor, vocк poderia me dizer porque nгo irб dar certo, agradeceria muito *.*. Nгo consigo ver porque nгo iria funcionar D:
Claro! Veja comigo:
pawn Код:
tempo[playerid] = gettime() + (600); //Vc ta armazendo o tempo unix em segundos + 600 segundos que da 10 minutos!
new Float:x,Float:y,Float:z,Float:posicao[3]; //Criou as vars
GetPlayerPos(playerid,x,y,z); //Getou a posiзгo
if(tempo[playerid] <= gettime()) //Aki vc esta verificando Uma coisa que nгo daria certo, pq ? pois a funзгo ela й executa em no maximo 1 milesimo, assim tempo[playerid] nunca vai ser menor sempre maior que gettime!
{
Reply
#8

Paulor sу vocк mesmo hein , Valeu mesmo !

Depois irei testar e tentar converter para um getimer, pois nгo gosto tanto assim de tickcount. xD

Merece resp sу por resolver/esclarecer a merda que eu fiz *.* !



@nгo da pra add resp Q_Q, sorry paulor. D:
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)