#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;
}
|
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 :/ |
#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;
}