[Tutorial] Uso De GetTickCount
#1

Uso De GetTickCount

Que Es GetTickCountї
Simplemente Es Un Contador De Tiempo (Por Asi Decirlo) Que Mide El Tiempo Cada Vez Que Se Manda a Llamar Una Funcion

Para Que Usarloї
Puedes Usarlo En Vez De SetTimerEx o SetTimer (Algunos Casos) Asi Se Reduce el Lag Ya Que SetTimerEx o SetTimer Ejecutan Un Temporizador en El Servidor y GetTickCount Solo Mide El Tiempo Cada Vez Que Es Llamado Con Esto Reducirias el Lag Notablemente si Son Muchos SetTimerEx

Comenzemos Con Un Ejemplo Con SetTimerEx
pawn Код:
new Variable[MAX_PLAYERS];
    public OnPlayerConnect(playerid)
        {
            Variable[playerid]=0;
            return 1;
        }
    public OnPlayerCommandText(playerid, cmdtext[])
    {
        if(strcmp(cmdtext, "/prueba", true) == 0)
            {
            if (Variable[playerid]==1) return SendClientMessage(playerid,0,"Aun Esta en Progreso !");
            else
                {
                SendClientMessage(playerid,0,"La Variable Esta En 0");
                SetTimerEx("Listo", 10000, false, "i", playerid);
                Variable[playerid]=1;
                }
            return 1;
            }
        return 0;
    }
    forward Listo(playerid);
    public Listo(playerid)
        {
            Variable[playerid]=0;
            return 0;
        }

Ahora Con GetTickCount
pawn Код:
new Variable[MAX_PLAYERS];
    public OnPlayerConnect(playerid)
        {
            Variable[playerid]=0;
            return 1;
        }
    public OnPlayerCommandText(playerid, cmdtext[])
    {
        if(strcmp(cmdtext, "/prueba", true) == 0)
            {
            if(Listo(playerid)) return SendClientMessage(playerid,0,"Aun Esta en Progreso !");
            else
                {
                Variable[playerid]=GetTickCount();
                SendClientMessage(playerid,0,"La Variable Esta En 0");
                }
            return 1;
            }
        return 0;
    }
    stock Listo(playerid)
    {
        if(GetTickCount() - Variable[playerid] < 10000)
            return 1;

        return 0;
    }
Se Nota La Diferenciaї Con Esto Podran Disminuir El Lag Pero Solo En Algunas Funciones Puede Ser Usada Solo Cuando Es Llamada No Cuando Debe Ser Llamada Me Explicoї Osea Si Vas a Usar un AntiFlood Por lo General Es Muy Util Pero Si Es Una Funcion Que Debe Avisar Algo al Jugador No Funcionara


Basicamente Se Usa GetTickCount En Dos Pasos
pawn Код:
//Paso 1:
    Variable[playerid]=GetTickCount();
    //Aqui La Variable Que Tengamos Se Iguala a El Tiempo De GetTickCount
    //Cuando Ejecutamos Una Instruccion

//Paso 2:
    GetTickCount() - Variable[playerid] < 10000)
    //Aqui Con Un if Checamos Si El Tiempo Menos El Tiempo De La Variable
    //Tomada Anteriormente Es Menor a 10000.. Si Lo Es Esto Continuara
    //De Lo Contrario Se Detendra Hasta Que Se Vuelva a Medir el Tiempo
    //Y Sea Este El Necesario (10000 ms)
Es Mi Primer Tutorial Si tienen Dudas o Algo Esta Mal Seria Muy Amable Que Me Lo Hagan Saber Para Corregirlo... Los Codigos no Eh Tenido Tiempo De Probarlos Son Solo Ejemplos... Si Creen Que Debo Agregarle o Quitarle Algo Tambien Haganmelo Saber Gracias
Reply
#2

Perfecto, si funciona xD
Aunque nu entiendo bien cuando mismo es q se debe usar e_e
Reply
#3

por ejemplo amigo cuando un usuario hace flood en el chat tu podras bloquearselo y ejecutar un SetTimerEx que cambiara la variable en un tiempo para que pueda usarlo... sin embargo este usuario seguira intentando usar el chat entonces si ejecutas un SetTimerEx creas un poco mas de lag.. por eso necesitas GetTickCount este sera llamado cada vez que el usuario quiera hablar por el chat y comparara si ya paso cierto tiempo para usarlo..
en pocas palabras SetTimerEx es un temporizador que da lag ya que esta contando el tiempo de x cosa
GetTickCount es un comparador de tiempo que tiene que ser llamado cada vez que sea necesario
Reply
#4

Ya entendн, usado por ejemplo en cmds q debes usar cada cierto tiempo ><
Aunque el flood del chat uso esta simple funciуn mбs efectiva en OnPlayerText xD

Код:
static LastText[MAX_PLAYERS][128];
if(strfind(LastText[playerid], text, false) != -1) return SendClientMessage(playerid, COLOR_WHITE, "[INFO]: NO te repitas! [Flood]"), 0;
strmid(LastText[playerid], text, 0, strlen(text), sizeof(LastText[]));
Reply
#5

eso te evitara el flood de las palabras repetidas.. aunque ahora hay programas que te envian un ataque de 10 frases en menos de 1 segundo y al no ser las mismas el servidor las dejara pasar y entrar al chat.. en esto seria conveniente usar un antiflood por cierto tiempo
Reply
#6

El ladmin lo tiene, acuerdate .-.
Reply
#7

Quote:
Originally Posted by dannypanda05
Посмотреть сообщение
El ladmin lo tiene, acuerdate .-.
Okay tienes razon.. espero que te halla quedado claro como usarlo y su Diferencia con SetTimerEx
Reply
#8

Jajajaj los 2 llenando el tema de mensajes ¬¬ esta bien el tutorial, y si funciona efectivamente e.e
Reply
#9

no fue mi idea llenarlo de mensajes.. pero que bueno que te halla servido
Reply
#10

GetTickCount() te devuelve los milisegundos que han pasado desde que encendiste tu PC, no es un contador de tiempo, el cual quedarб fuera de rango aproximadamente a los 24 dнas de ejecuciуn continua, es decir, que va a ir sumando hasta que llega el lнmite de nъmeros que puede almacenar una variable integer o de nъmero enteros en nuestro idioma.
Preferirнa el uso en este caso de gettime(), que te devuelve el Unix Timestamp, es decir, los segundos que han pasado desde el 1 de Enero de 1970, y no va a llegar al lнmite de almacenamiento hasta el 2033, aparte que te devuelve en segundos que es una unidad de tiempo fбcil de manejar.
Tampoco hace falta hacer una funciуn que chequee si estб listo o no.
Recomendaciуn: No escribas cada palabra con una letra mayъsculas, queda realmente mal. Es preferible que escribas todo en minъscula a que escribas asн.
Y si no sabes el uso correcto de las mayъsculas y minъsculas en el espaсol, acб te dejo para que leas un cuadro sencillo al comienzo de este documento PDF: http://blog.pucp.edu.pe/media/2490/2...minusculas.pdf
Ojalб que no tomes mal mis crнticas, son para que mejores simplemente, porque la verdad no es mi intenciуn molestar.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)