[Duda] Limitar el uso de un comando a x veces
#4

Aca te dejo un ejemplo de como seria lo que tu quieres con algunas otras cosas que te pueden interesar:
pawn Код:
#include <a_samp>

/*Definimos el uso maximo de veces que el comando puede ser utilizado.
Puedes colocarlo directamente en el comando, yo lo hice asi para que sea mas
generico*/

#define MAX_USE     (10)

/*Algunas variables que utilizaremos para el comando definidas en forma de enum
para utilizarlas en el array que aparece debajo*/

enum PD
{
    //Este sera el contador, variable que almacena la cantidad de veces que se utilizo el comando
    MiComando_Contador,
    //Este es el temporizador que ira reduciendo el tiempo que le falta al jugador para volver a utilizar el comando
    MiComando_Timer,
    //Tiempo en segundos que le quedan de espera al jugador para utilizar el comando nuevamente
    MiComando_Segundos
};
new Info[MAX_PLAYERS][PD];

//Callback llamado donde se crean los comandos
public OnPlayerCommandText(playerid, cmdtext[])
{
    //Nuestro comando
    if(!strcmp(cmdtext, "/micomando", true))
    {
        //Si el comando fue utilizado la cantidad de veces definidas (o mas por error), entonces paramos el comando
        if(Info[playerid][MiComando_Contador] >= MAX_USE)
        {
            //Espacio calculado para utilizar grandes tiempos de espera (superiores a 24hs), caso contrario basta con 60 celdas.
            new str[70];
            //Creamos nuestro temporizador
            Info[playerid][MiComando_Timer] = SetTimerEx("MiComando_Reset", 1000, 1, "i", playerid);
            //Asignamos el tiempo que debera esperar el jugador para utilizar el comando nuevamente (1Hs=60segundos*60minutos)
            Info[playerid][MiComando_Segundos] = 60*60;
            //Extra, formateamos un string para avisarle al jugador el tiempo de espera que le queda
            format(str, 128, "Debes esperar %i:%i:%i para volver a utilizar este comando.", (((Info[playerid][MiComando_Segundos] / (60*60)) != 0) ? (Info[playerid][MiComando_Segundos] / (60*60)) : (0)), (((Info[playerid][MiComando_Segundos] / (60)) != 0) ? (Info[playerid][MiComando_Segundos] / (60)) : (0)), Info[playerid][MiComando_Segundos]);
            //Enviamos el mensaje y cortamos el comando
            return SendClientMessage(playerid, -1, str);
        }
        //El jugador puede utilizar el comando y se lo decimos.
        SendClientMessage(playerid, -1, "Aun puedes utilizar el comando!");
        //Sumamos 1 al contador por la cantidad de veces que el jugador utilizo el comando
        Info[playerid][MiComando_Contador]++;
        return 1;
    }
    return 0;
}

//Definimos nuestro temporizador (su callback)
forward MiComando_Reset(playerid);
public MiComando_Reset(playerid)
{
    //Si el tiempo es mayor a 0, entonces restamos otro segundo, caso contrario eliminamos el temporizador y reiniciamos su contador
    if(Info[playerid][MiComando_Segundos] > 0)
        Info[playerid][MiComando_Segundos]--;
    else
    {
        KillTimer(Info[playerid][MiComando_Timer]);
        Info[playerid][MiComando_Contador] = 0;
    }
}
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 4 Guest(s)