SA-MP Forums Archive
Alguna forma de optimizar, Timers - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Alguna forma de optimizar, Timers (/showthread.php?tid=436109)



Alguna forma de optimizar, Timers - [CG]Milito - 10.05.2013

Hola!

Tengo una duda, Como ustedes saben, Estoy creando un GM de Cops 'N Robbers pero nunca lo he probado con mas de
4 players. Y no se si esto llegarнa a causar lag;

El sistema de robo es simple, cuando alguien lo roba, Creo una variable y creo un timer que vuelve a poner la variable a 0, Para que la tienda pueda ser robada otra vez, PERO... Tengo un Timer para cada tienda.

Si las 20 tiendas que tengo han sido robadas, tendrнa 20 timers corriendo al mismo tiempo.


Como podrнa optimizarlo?


Gracias por su atenciуn!


Respuesta: Alguna forma de optimizar, Timers - xSDx - 10.05.2013

en vez de tener 20 timers crea solo uno y 20 variables que chequeen si esta robada ejecutar la funcion dentro del timer


Respuesta: Alguna forma de optimizar, Timers - Fluid016 - 10.05.2013

Quote:
Originally Posted by xSDx
Посмотреть сообщение
en vez de tener 20 timers crea solo uno y 20 variables que chequeen si esta robada ejecutar la funcion dentro del timer
Claro,
pawn Код:
#define MAX_TIENDAS 20
new TiendaRobo[MAX_TIENDAS]; // o directamente [20]
uso:
pawn Код:
TiendaRobo[TIENDAID] = 0;



Respuesta: Alguna forma de optimizar, Timers - spell - 10.05.2013

un timer al iniciarse el server, algo asi
pawn Код:
public OnGameModeInit()
{
    SetTimerEx("CheckRob", 1000, true);
    return 1;
}

public CheckRob()
{
    for(new i; i < MAX_PLAYERS; i++) if(rob[i] == true)
    {
        //Code
    }
    return 1;
}



Respuesta: Alguna forma de optimizar, Timers - TheChaoz - 11.05.2013

La mejor forma es una convinacion de la solucion propuesta y para que sea representativo de tu primer aproximacion, registrar tiempos.

Ej:

pawn Код:
#include <a_samp>

//Macro indicando la cantidad maxima de tiendas
#define MAX_STORES        (100)
//Macro indicando en ms el tiempo que debe pasar para que una tienda pueda robarse nuevamente
#define ROB_TIME            (600000)

//Datos de la tienda que necesitaremos
enum ENUM_STORE_DATA
{
    bool:Created,//Este campo debe setearse a verdadero ('true') al crear una tienda nueva y a falso ('false') al destruir la misma
    bool:CanRob,//Representa si la tienda puede o no ser robada
    LastRob//Representa el ultimo momento en el cual la tienda fue robada
};

//Array para almacenar los datos de cada tienda
new Store[MAX_STORES][ENUM_STORE_DATA];

//Necesitamos crear nuestro timer al comienzo ya que sera 1 solo para todas las tiendas
public OnGameModeInit()
{
    SetTimer("CheckStores", 2500, 1);
    return 1;
}

//Esta es un callback representativo del momento en el que un usuario roba una tienda
forward OnStoreRobbed(storeid, robberid);
public OnStoreRobbed(storeid, robberid)
{
    Store[storeid][CanRob] = false;
    Store[storeid][LastRob] = gettime();
    return 1;
}

forward CheckStores();
public CheckStores()
{
    for(new i; i<MAX_STORES; i++)
    {
        if(!Store[i][Created] || Store[i][CanRob])
            continue;
        if((gettime() - Store[i][LastRob]) >= ROB_TIME)
            Store[i][CanRob] = true;
    }
}