en vez de tener 20 timers crea solo uno y 20 variables que chequeen si esta robada ejecutar la funcion dentro del timer
|
#define MAX_TIENDAS 20
new TiendaRobo[MAX_TIENDAS]; // o directamente [20]
TiendaRobo[TIENDAID] = 0;
public OnGameModeInit()
{
SetTimerEx("CheckRob", 1000, true);
return 1;
}
public CheckRob()
{
for(new i; i < MAX_PLAYERS; i++) if(rob[i] == true)
{
//Code
}
return 1;
}
#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;
}
}