Sistema de Vip Temporário - Cifra Modder - 19/10/2023
Alguém tem um sistema de vip temporário, ou tem uma base de como faz?
RE: Sistema de Vip Temporário - pushline - 19/10/2023
Tenho a teoria pra você:
Sistema de vip temporário é só criar uma booleana "isVip" e um váriavel do tempo do vip (pro player na sua enum), podes fazer a manipulação de tempo com gettime() ou pawn-chrono.
Quando o tempo (gettime / unix epoch) atual passar o tempo adicionado no dia, retirar o vip do player (isvip = false) e excluir da tabela / excluir do dof2.
RE: Sistema de Vip Temporário - leonardos08bt - 19/10/2023
Em Gettime:
Comprou/Setou um VIP:
Código: User[playerid][TempoVIP] = gettime()+(86400*MESES); //Substitua o MESES pela quantidade de meses do VIP
Verificar se possui VIP e se o tempo expirou:
Código: stock VerificarVIP(playerid)
{
if(User[playerid][NivelVIP] > 0 && (User[playerid][TempoVIP] - gettime()) > 0) //Verifica se é VIP e se o tempo não expirou
return true;
else //Caso não tenha VIP ou o tempo expirou:
{
if(User[playerid][NivelVIP] > 0) { //Verifica se o Player possui VIP (tempo expirou)
User[playerid][NivelVIP] = 0; //Seta o nível vip para 0
User[playerid][TempoVIP] = 0; //Seta o tempo do vip para 0
SendClientMessage(playerid, -1, "Seu vip acabou!");
}
return false;
}
}
A stock verificar vip pode ser usada em timer de um segundo ou na hora do login do player, fica a seu critério de como irá utilizar.
RE: Sistema de Vip Temporário - Cifra Modder - 19/10/2023
(19/10/2023 08:33)pushline Escreveu: Tenho a teoria pra você:
Sistema de vip temporário é só criar uma booleana "isVip" e um váriavel do tempo do vip (pro player na sua enum), podes fazer a manipulação de tempo com gettime() ou pawn-chrono.
Quando o tempo (gettime / unix epoch) atual passar o tempo adicionado no dia, retirar o vip do player (isvip = false) e excluir da tabela / excluir do dof2.
Sim você está totalmente certo. Só que acho que minha hospedagem está com algum problema, quando eu seto o gettime com o horário, minutos, segundo, no arquivo do player salva um número nada aver, por exemplo: 170828....
Eu tentei usar isso:
Código: #define OneDay 3600*24
Código: gettime() + (OneDay * 30);
(19/10/2023 10:45)leonardos08bt Escreveu: Em Gettime:
Comprou/Setou um VIP:
Código: User[playerid][TempoVIP] = gettime()+(86400*MESES); //Substitua o MESES pela quantidade de meses do VIP
Verificar se possui VIP e se o tempo expirou:
Código: stock VerificarVIP(playerid)
{
if(User[playerid][NivelVIP] > 0 && (User[playerid][TempoVIP] - gettime()) > 0) //Verifica se é VIP e se o tempo não expirou
return true;
else //Caso não tenha VIP ou o tempo expirou:
{
if(User[playerid][NivelVIP] > 0) { //Verifica se o Player possui VIP (tempo expirou)
User[playerid][NivelVIP] = 0; //Seta o nível vip para 0
User[playerid][TempoVIP] = 0; //Seta o tempo do vip para 0
SendClientMessage(playerid, -1, "Seu vip acabou!");
}
return false;
}
}
A stock verificar vip pode ser usada em timer de um segundo ou na hora do login do player, fica a seu critério de como irá utilizar.
Eu tentei dessa forma agora, só que deu um número nada aver que sai dos cálculos da gettime. Salvo esses números: 1699039694
RE: Sistema de Vip Temporário - pushline - 19/10/2023
Está 100% correto o número. gettime() volta a quantidade de segundos desde 1 de janeiro de 1970, desde o início da era unix. você tem que fazer a conversão desse timestamp com alguma função, deixarei uma abaixo caso não tenhas:
Código PHP: printf("%s", returnDate(1699039694));
returnDate( timestamp, _form=0 ) {
new year=1970, day=0, month=0, hourt=0, mins=0, sec=0;
new days_of_month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; new names_of_month[12][10] = {"January","February","March","April","May","June","July","August","September","October","November","December"}; new returnstring[32];
while(timestamp>31622400) { timestamp -= 31536000; if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp -= 86400; year++; }
if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) days_of_month[1] = 29; else days_of_month[1] = 28;
while(timestamp>86400) { timestamp -= 86400, day++; if(day==days_of_month[month]) day=0, month++; }
while(timestamp>60) { timestamp -= 60, mins++; if( mins == 60) mins=0, hourt++; }
sec=timestamp;
switch( _form ) { case 1: format(returnstring, 31, "%02d/%02d/%d %02d:%02d:%02d", day+1, month+1, year, hourt, mins, sec); case 2: format(returnstring, 31, "%s %02d, %d, %02d:%02d:%02d", names_of_month[month],day+1,year, hourt, mins, sec); case 3: format(returnstring, 31, "%d %c%c%c %d, %02d:%02d", day+1,names_of_month[month][0],names_of_month[month][1],names_of_month[month][2], year,hourt,mins); case 4: format(returnstring, 31, "%s %02d, %d", names_of_month[month],day+1,year); default: format(returnstring, 31, "%02d/%02d/%d %02d:%02d:%02d", day+1, month+1, year, hourt, mins, sec); }
return returnstring; }
RE: Sistema de Vip Temporário - Cifra Modder - 19/10/2023
(19/10/2023 16:47)pushline Escreveu: Está 100% correto o número. gettime() volta a quantidade de segundos desde 1 de janeiro de 1970, desde o início da era unix. você tem que fazer a conversão desse timestamp com alguma função, deixarei uma abaixo caso não tenhas:
Código PHP: printf("%s", returnDate(1699039694));
returnDate( timestamp, _form=0 ) {
new year=1970, day=0, month=0, hourt=0, mins=0, sec=0;
new days_of_month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; new names_of_month[12][10] = {"January","February","March","April","May","June","July","August","September","October","November","December"}; new returnstring[32];
while(timestamp>31622400) { timestamp -= 31536000; if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp -= 86400; year++; }
if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) days_of_month[1] = 29; else days_of_month[1] = 28;
while(timestamp>86400) { timestamp -= 86400, day++; if(day==days_of_month[month]) day=0, month++; }
while(timestamp>60) { timestamp -= 60, mins++; if( mins == 60) mins=0, hourt++; }
sec=timestamp;
switch( _form ) { case 1: format(returnstring, 31, "%02d/%02d/%d %02d:%02d:%02d", day+1, month+1, year, hourt, mins, sec); case 2: format(returnstring, 31, "%s %02d, %d, %02d:%02d:%02d", names_of_month[month],day+1,year, hourt, mins, sec); case 3: format(returnstring, 31, "%d %c%c%c %d, %02d:%02d", day+1,names_of_month[month][0],names_of_month[month][1],names_of_month[month][2], year,hourt,mins); case 4: format(returnstring, 31, "%s %02d, %d", names_of_month[month],day+1,year); default: format(returnstring, 31, "%02d/%02d/%d %02d:%02d:%02d", day+1, month+1, year, hourt, mins, sec); }
return returnstring; }
Você está certo. Usarei isso! +Rep
|