[Pedido] Sistema de VIP
#1

Por favor alguem tem um sistema de vip premium que expire sozinho й funcione muito bem й tambem colocar a quantidade de meses eu tentei retirar o sistema da GM PlayHappy mais o vip expira sai do nada

Se alguem tiver algum sistema por favor me mande ou saiba de alguma gm que tenha por favor me mande.
Obrigado!!
Reply
#2

pawn Код:
#include <a_samp>

new
    pVip[MAX_PLAYERS][2]
;
   
enum
{
    VIP_NONE = 0,
    VIP_REMOVE = 1,
    VIP_SET = 2,
    VIP_NO_TIME = 3,
    VIP_NOT_CONNECTED = 4
}
   
   
stock month_to_timestamp(months)
{
    /*
        Explicaзгo:
            sabemos que 1 hora sгo 3600 segundos, logo um dia serг 24 * 3600.
            sabendo que 1 dia sгo ( 24 * 3600 ), um mкs serб ( (24 * 3600) * 30)
            agora multiplicamos a quantidade de meses (((24 * 3600) * 30) * months)
           
            Por fim somamos o gettime para obtermos um futuro timestamp.

        Modo de uso: setVip(playerid,month_to_timestamp(3));
    */


    return ( ( ( ( 3600 * 24 ) * 30 ) * months ) + gettime() );
}

stock setVip(playerid,time)
{
    if(IsPlayerConnected(playerid)){
        if(pVip[playerid][0] == 1 && time == 0)
        {
            /*
                Aqui removemos o vip do jogador!
            */


            pVip[playerid][0] = 0; //Aqui colocamos o vip para 0
            pVip[playerid][1] = 0; //Aqui foi colocamos o valor do tempo para 0
           
            /*
                Por fim aqui deve ficar um sistema de salvamento, de forma a
                atualizar os dados do jogador, informando o sistema que o mesmo
                jб nгo possui vip.
            */

           

            return VIP_REMOVED; //isto й definido numa variбvel.
        } else if(
       
            if(time == 0)
            {
                return VIP_NO_TIME; //Ocorreu um erro, a variavel max_time tem valor de 0.
            } else {
                pVip[playerid][0] = 1; //Setamos o vip para 1 ( isto significa que o player tem vip )
                pVip[playerid][1] = time; //Setamos o tempo de duraзгo para o vip ( dessa forma quando o tempo passar o vip serб retirado )
               
                /*
                    Nesta parte й necessбio salvar os dados.
                */

               
                return VIP_SET; //O Vip foi setado com sucesso!
            }
        }
    } else { return VIP_NOT_CONECTED; //O jogador nгo estб conectado. }
   
    return VIP_NONE;
}

public OnPlayerConnect(playerid)
{
    /*
        Aqui carregamos os dados dos vips.
    */

    return 1;
}

public OnPlayerUpdate(playerid)
{
    /*
        Aqui й onde verificamos o vip do jogador,
    */

   
    if(gettime() == pVip[playerid][1] || gettime() > pVip[playerid][1])
    {
        /*
            Verificamos se o timestamp й igual ao do vip, caso seja removemos o
            vip, pois isso significa que o tempo limite jб chegou. Para nгo haver
            problemas utilizamos uma segunda condiзг que verifica se o timestamp
            й maior que o tempo do vip, isto significa que o timestamp jб passou
            o limite de vip do jogador.
        */

        SendClientMessage(playerid,-1,"O seu vip terminou!");
        setVip(playerid,0); //agora colocamos o vip para 0
    }
   
    /*
        Se quiser tambйm й possнvel remover o vip se o jogador estiver offline
        mas isso jб й mais complicado...
    */

    return 1;
}
Fiz um simples sistema de VIP, agora й sу adaptares, devo dizer que nгo testei o mesmo, mas caso esteja algo errado й sу enviares PM.
Reply
#3

rebelox , estive visualizando este seu sistema de vip , tenho uma duvida sobre esse gettime ,
no caso vocк usou um operador , "<" mais e se caso eu ganho o vip hoje , ai eu guardo na minha variavel
a data em que eu recebi o vip , ai eu adiciono +30 , ele vai setar automaticamente para o mes seguinte ou vai por exemplo , 20+30 = 50 , tipo vai pro dia 50 ? (nгo existente й claro).

Nunca tentei trabalhar com esse gettime , pelo menos nгo em pawn :/
Reply
#4

Quote:
Originally Posted by darkxdll
Посмотреть сообщение
rebelox , estive visualizando este seu sistema de vip , tenho uma duvida sobre esse gettime ,
no caso vocк usou um operador , "<" mais e se caso eu ganho o vip hoje , ai eu guardo na minha variavel
a data em que eu recebi o vip , ai eu adiciono +30 , ele vai setar automaticamente para o mes seguinte ou vai por exemplo , 20+30 = 50 , tipo vai pro dia 50 ? (nгo existente й claro).

Nunca tentei trabalhar com esse gettime , pelo menos nгo em pawn :/
Nгo, o gettime retorna o timestamp atual, agora й 1406380408 se eu adicionar 1 mкs ( 2592000 ) iria significar que esse seria o timestamp daqui a um mкs.

Lк isto para entenderes melhor sobre o timestamp.
http://pt.wikipedia.org/wiki/Era_Unix
Reply
#5

Ah sim . Entendi eu li a wiki , o problema citado la sobre as variaveis int32 , eu ja tinha me informado , timestamp й um pouco chato de entender mais eu vou me informar um pouco mais sobre ele .

Obrigado cara!
Reply
#6

Esse sistema vip e do GM DTEN funciona perfeitamente vc pode setar dias vip com ele vc vai precisar da include
deten_vip

e esse cod para setar o vip
Код:
#include <a_samp>
#include <sscanf2>
#include "../include/dten_vip.inc"

#define DIALOG_DARVIP                99999
#define DIALOG_TIRARVIP              88888
public OnFilterScriptInit()
{
	print("\n--------------------------------------");
	print(" Blank Filterscript by your name here");
	print("--------------------------------------\n");
	return 1;
}

public OnFilterScriptExit()
{
	return 1;
}

public OnPlayerConnect(playerid)
{
    CheckPlayerVIP(playerid);
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
 	if (strcmp("/Setarvip", cmdtext, true, 10) == 0)
	{
        if(IsPlayerAdmin(playerid))
        {
           ShowPlayerDialog(playerid, DIALOG_DARVIP, DIALOG_STYLE_INPUT,"SetarVip","Digite o [ID] ou o [NICK] do jogador. \nE os [DIAS] que serб vip.","Setar","Cancelar");
        }
        else
        {
           SendClientMessage(playerid,0xFFFF00AA,"[x]({FF0000}/setarvip{FFFF00})[x] {FF0000}Comando errado.");
        }
        return 1;
	}
   	if (strcmp("/Tirarvip", cmdtext, true, 10) == 0)
	{
        if(IsPlayerAdmin(playerid))
        {
           ShowPlayerDialog(playerid, DIALOG_TIRARVIP, DIALOG_STYLE_INPUT,"TirarVip","Digite o [ID] ou o [NICK] do jogador","Tirar","Cancelar");
        }
        else
        {
          SendClientMessage(playerid, 0xFFFF00AA, "{FFFF00}[x]({FF0000}/tirarvip{FFFF00})[x] {FF0000}Comando errado.");
        }
        return 1;
	}
    if (strcmp("/eusouvip", cmdtext, true, 10) == 0)
    {
        if(IsPlayerVIP(playerid)) return SendClientMessage(playerid,0xFFFF00AA,"Vocк nгo e vip.");
        {
             SendPlayerMessageToAll(0xFFFF00AA,"Eu sou vip entгo me chupa........");
        }
        return 1;
    }
	return 0;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	if(dialogid == DIALOG_TIRARVIP)
	{
		if(response)
		{
			new plid, string[256];
			if(sscanf(inputtext, "u", plid))
			{
				ShowPlayerDialog(playerid, DIALOG_TIRARVIP, DIALOG_STYLE_INPUT,"TirarVip","Vocк digito algo errado.\nDigite o id ou o nick do jogador.","Tirar","Cancelar");
				return 1;
			}
			if(IsPlayerConnected(plid))
			{
				UnsetPlayerVIP(plid);
				format(string, sizeof(string), "%s (%d) (») Retirou o VIP do(a): %s (%d)", getName(playerid), playerid, getName(plid), plid);
				SendClientMessageToAll(0xFF0000AA, string);
			}
			else
			{
				SendClientMessage(playerid, 0xFF0000AA, "Valor invбlido, tente novamente!");
			}
		}
		return 1;
	}
	if(dialogid == DIALOG_DARVIP)
	{
		if(response)
		{
			new plid, dias, string[256];
			if(sscanf(inputtext, "ui", plid, dias))
			{
				ShowPlayerDialog(playerid, DIALOG_DARVIP, DIALOG_STYLE_INPUT,"SetarVip","Vocк digito algo errado.\nDigite o [ID] ou o [NICK] do jogador. \nE os [DIAS].","Setar","Cancelar");
				return 1;
			}
			if(IsPlayerConnected(plid))
			{
				if(dias > 30 || dias < 1)
				{
					ShowPlayerDialog(playerid, DIALOG_DARVIP, DIALOG_STYLE_INPUT,"SetarVip","Nгo pode setar mais \nde 30 dias ou menos de 1 dia!","Setar","Cancelar");
				}
				else
				{
					if(GetVIPDays(plid) > 5)
					{
						SendClientMessage(playerid, 0xFF0000AA, "Este jogador ainda tem mais de 5 dias VIP.");
					}
					else
					{
						SetPlayerVIP(plid, dias);
						format(string, sizeof(string), "%s (%d) (») Promoveu: %s (%d) para VIP (») Por %d dia(s)!", getName(playerid), playerid, getName(plid), plid, dias);
						SendClientMessageToAll(0xCC00CCAA, string);
					}
				}
			}
			else
			{
                ShowPlayerDialog(playerid, DIALOG_DARVIP, DIALOG_STYLE_INPUT,"SetarVip","Valor invбlido, tente novamente!","Setar","Cancelar");
            }
		}
	}
	return 1;
}
nгo se esqueзa de criar uma pasta vips na pasta scriptfiles
caso manden eu tirar esse codigo e a include vгo ser tirada sem aviso porque nгo e meu essa invenзгo OK>>
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)