[Ajuda] Sitema Vip
#1

Fiz um sisteminha Vip baseado em um filterscript que vi, mas, por algum motivo que atй agora nгo encontrei, o Vip do jogador vence logo apуs ele ativar:
No comando de ativar:
PHP код:
format(Querysizeof(Query), "UPDATE `vip` SET `vipNome`='%s',`vipGetTime`='%i' WHERE `vipKey`='%s'",
        
PlayerInfo[playerid][pNome],(VipInfo[playerid][vDias] * 24 60 60) + gettime(),key);
        
db_query(ConnectQuery);
        
ChecarVip(playerid); 
Stock ChecarVip(playerid)
PHP код:
new Query[90], DBResult:Resultado;
    
format(Querysizeof(Query), "SELECT * FROM `vip` WHERE `vipNome`='%s'"PlayerInfo[playerid][pNome]);
    
Resultado db_query(ConnectQuery);
    if(
db_num_rows(Resultado))
    {
        
VipInfo[playerid][vLevel] = db_get_field_assoc_int(Resultado"vipLevel");
        
db_get_field_assoc(Resultado"vipKey"VipInfo[playerid][vKey], 13);
        
VipInfo[playerid][vDias] = db_get_field_assoc_int(Resultado"vipDias");
        
VipInfo[playerid][vGetTime] = db_get_field_assoc_int(Resultado"vipGetTime");
        
        if(
gettime() >= VipInfo[playerid][vGetTime])
        {
            
format(Querysizeof(Query), "DELETE FROM `vip` WHERE `vipNome`='%s'"PlayerInfo[playerid][pNome]);
            
db_query(ConnectQuery);
            
SendClientMessage(playerid,COR_AMARELO,"=-=-=-=-= VENCIMENTO =-=-=-=-=");
            
SendClientMessage(playerid,COR_AMARELO,"Infelizmente, seu Vip venceu!");
            
SendClientMessage(playerid,COR_AMARELO,"=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
            
ResetVipStats(playerid);
        }
    } 
Creio que o erro esteja na linha
Код:
if(gettime() >= VipInfo[playerid][vGetTime])
mais nгo entendo pq.
Alguem esta vendo algo que esta passando direto por min?
Reply
#2

https://sampwiki.blast.hk/wiki/Gettime

gettime tem que ser chamado com variaveis para guardar hora minuto e segundo.
deve ser por isso.

Код:
new Hour, Minute, Second, Timestamp;
Timestamp = gettime(Hour, Minute, Second);
printf("%02d:%02d:%02d", Hour, Minute, Second);
printf("Seconds since midnight 1st January 1970: %d", Timestamp);
Reply
#3

Faзa a ativaзгo assim:

Coloque o gettime() + os dias em uma variбvel e use essa variбvel no salvamento, substituindo isso:
PHP код:
(VipInfo[playerid][vDias] * 24 60 60) + gettime() 
PHP код:
new vipDias[MAX_PLAYERS];
vipDias[playerid] = gettime() + dias 
Acho que vocк entendeu o que eu quis dizer.
Reply
#4

Quote:
Originally Posted by RenanMsV
Посмотреть сообщение
https://sampwiki.blast.hk/wiki/Gettime

gettime tem que ser chamado com variaveis para guardar hora minuto e segundo.
deve ser por isso.

Код:
new Hour, Minute, Second, Timestamp;
Timestamp = gettime(Hour, Minute, Second);
printf("%02d:%02d:%02d", Hour, Minute, Second);
printf("Seconds since midnight 1st January 1970: %d", Timestamp);
Entгo, disso eu sei, mais em dois sistemas parecidos que vi, eles utilizam desta maneira sem salvar em nenhuma variбvel.Eu li no wiki que o gettime()sem parвmetros retorna um "codigo" sу nгo entendi muito bem como funciona.
Mais obrigado pela ajuda, irei tentar fazer por getdate, se souber de algum sistema base com getdate e puder mandar pra min eu agradeзo!
Reply
#5

Quote:
Originally Posted by MtPlayerZ
Посмотреть сообщение
Entгo, disso eu sei, mais em dois sistemas parecidos que vi, eles utilizam desta maneira sem salvar em nenhuma variбvel.Eu li no wiki que o gettime()sem parвmetros retorna um "codigo" sу nгo entendi muito bem como funciona.
Mais obrigado pela ajuda, irei tentar fazer por getdate, se souber de algum sistema base com getdate e puder mandar pra min eu agradeзo!
Vou te explicar.
Gettime() retorna a quantidade de milissegundos desde 1 de janeiro de 1970 (padrгo em todas as linguagens de programaзгo).

Agora, com este cуdigo, vocк pega a quantidade de segundos e soma mais os segundos equivalente aos dias de VIP.

Simples assim!

Veja este tutorial do Don_Speed e adapte ao seu GM e salvamento.
https://sampforum.blast.hk/showthread.php?tid=444338
Reply
#6

O problema pode ser a variбvel VipInfo[playerid][vDias] que deve estar zerada. Faзa um teste substituindo ela por um nъmero qualquer:
PHP код:
format(Querysizeof(Query), "UPDATE `vip` SET `vipNome`='%s',`vipGetTime`='%i' WHERE `vipKey`='%s'"
        
PlayerInfo[playerid][pNome],(24 60 60) + gettime(),key); 
        
db_query(ConnectQuery); 
        
ChecarVip(playerid); 
Reply
#7

Nгo й relativo ao seu problema, mas queria soltar uma opiniгo em relaзгo ao seu codigo.

ChecarVip = CheckVip
pNome = pName
vDias = vDays
Resultado = Result

========= OU ========

PlayerInfo = InfoJogador
ChecarVip = AnalisarVip

etc etc....
Ou faзa tudo em portugues, ou tudo em ingles
Nгo misture

Se deseja avanзar na area do script / programaзгo, tente comeзar por ser coerente e escrever tudo em Ingles.

Sobre o seu problema:
Funзгo gettime() , devolve o timestamp, ou seja, o numero de segundos que passaram desde 1970
Dai sim, o valor que passa й uma quantia de segundos

Some o valor que quer adicionar de vip , ao timestamp, e o resultado serб o timestamp que representa a data de termino.
Apos ter esse valor, para analizar que acabou, so verifique se o timestamp atual й >= que o timestamp salvo de termino do vip.

Em mysql existe um tipo de dados mesmo chamado "timestamp", que dб ao phpmyadmin uma representaзгo grafica da data correspondente.
Use-o, em vez de um valor inteiro.

Espero ter ajudado.
Reply
#8

Quote:
Originally Posted by klap
Посмотреть сообщение
Nгo й relativo ao seu problema, mas queria soltar uma opiniгo em relaзгo ao seu codigo.

ChecarVip = CheckVip
pNome = pName
vDias = vDays
Resultado = Result

========= OU ========

PlayerInfo = InfoJogador
ChecarVip = AnalisarVip

etc etc....
Ou faзa tudo em portugues, ou tudo em ingles
Nгo misture

Se deseja avanзar na area do script / programaзгo, tente comeзar por ser coerente e escrever tudo em Ingles.

Sobre o seu problema:
Funзгo gettime() , devolve o timestamp, ou seja, o numero de segundos que passaram desde 1970
Dai sim, o valor que passa й uma quantia de segundos

Some o valor que quer adicionar de vip , ao timestamp, e o resultado serб o timestamp que representa a data de termino.
Apos ter esse valor, para analizar que acabou, so verifique se o timestamp atual й >= que o timestamp salvo de termino do vip.

Em mysql existe um tipo de dados mesmo chamado "timestamp", que dб ao phpmyadmin uma representaзгo grafica da data correspondente.
Use-o, em vez de um valor inteiro.

Espero ter ajudado.
Vi um tutorial explicando sobre o tempo Unix utilizado nesses sistemas e consegui fazer, era sу utilizar getime()+dias convertidos em segundos.
A respeito de ficar misturando entre inglкs e portuguкs, й doidera minha mesmo kkkk, desde que funcione, pra min ta bгo.
Vlw pela ajuda galera!
@Closed
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)