Portal SAMP
[Pedido] Sistema de Vip Temporário - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Pedido] Sistema de Vip Temporário (/showthread.php?tid=4096)



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));

returnDatetimestamp_form=)
{

    new 
year=1970day=0month=0hourt=0mins=0sec=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 == 0) && (year 100 != 0)) || (year 400 == 0) ) timestamp -= 86400;
            
year++;
    }

    if ( ((
year == 0) && (year 100 != 0)) || (year 400 == 0) )
        
days_of_month[1] = 29;
    else
        
days_of_month[1] = 28;


    while(
timestamp>86400)
    {
        
timestamp -= 86400day++;
        if(
day==days_of_month[month]) day=0month++;
    }

    while(
timestamp>60)
    {
        
timestamp -= 60mins++;
        if( 
mins == 60mins=0hourt++;
    }

    
sec=timestamp;

    switch( 
_form )
    {
        case 
1format(returnstring31"%02d/%02d/%d %02d:%02d:%02d"day+1month+1yearhourtminssec);
        case 
2format(returnstring31"%s %02d, %d, %02d:%02d:%02d"names_of_month[month],day+1,yearhourtminssec);
        case 
3format(returnstring31"%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 
4format(returnstring31"%s %02d, %d"names_of_month[month],day+1,year);
        default: 
format(returnstring31"%02d/%02d/%d %02d:%02d:%02d"day+1month+1yearhourtminssec);
    }

    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));

returnDatetimestamp_form=)
{

    new 
year=1970day=0month=0hourt=0mins=0sec=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 == 0) && (year 100 != 0)) || (year 400 == 0) ) timestamp -= 86400;
            
year++;
    }

    if ( ((
year == 0) && (year 100 != 0)) || (year 400 == 0) )
        
days_of_month[1] = 29;
    else
        
days_of_month[1] = 28;


    while(
timestamp>86400)
    {
        
timestamp -= 86400day++;
        if(
day==days_of_month[month]) day=0month++;
    }

    while(
timestamp>60)
    {
        
timestamp -= 60mins++;
        if( 
mins == 60mins=0hourt++;
    }

    
sec=timestamp;

    switch( 
_form )
    {
        case 
1format(returnstring31"%02d/%02d/%d %02d:%02d:%02d"day+1month+1yearhourtminssec);
        case 
2format(returnstring31"%s %02d, %d, %02d:%02d:%02d"names_of_month[month],day+1,yearhourtminssec);
        case 
3format(returnstring31"%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 
4format(returnstring31"%s %02d, %d"names_of_month[month],day+1,year);
        default: 
format(returnstring31"%02d/%02d/%d %02d:%02d:%02d"day+1month+1yearhourtminssec);
    }

    return 
returnstring;


Você está certo. Usarei isso! +Rep