Jump to content

Duvida com script de chaves


Recommended Posts

Gostaria de fazer um painel vip com keys aleatória que teria um data de validade setada pelo console por exemplo: eu quero uma key que só tenha validade por 2 dias ai eu vou lá e seto, alguém pode me dá uma ajuda 

Server


value = nil

local allowed = { { 48, 57 }, { 65, 90 }, { 97, 122 } }
function generateString ( len )
    
    if tonumber ( len ) then
        math.randomseed ( getTickCount () )

        local str = ""
        for i = 1, len do
            local charlist = allowed[math.random ( 1, 3 )]
            str = str .. string.char ( math.random ( charlist[1], charlist[2] ) )
        end

        return str
    end
    
    return false
    
end

function Teste (  ) 
local accName = getAccountName ( getPlayerAccount ( source ) ) 
if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Console" ) ) then
local Key = generateString(12)
value = Key
outputChatBox(Key.."Nova Key",root)
else
outputChatBox("Fora",root)	
end
end
addEvent ("Gen:Set", true)
addEventHandler ("Gen:Set", root, Teste)



addCommandHandler ( "Usar" , function ( player ) 
if ( value ~= nil ) then 
outputChatBox("Sua Chave: "..tostring(value),source,0,255,0,true)
setElementData ( player, "Vip", "Desbloqueado" )
else 
outputChatBox("Chave inexistente",player,255,0,0,true)
end 
end ) ; 

 

Edited by MRXBBC
Link to comment

Teoricamente, o que eu consegui compreende, foi que, você apenas quer gerar um key por vez.

Então, nessa key gerada, a pessoa apenas dará o comando, caso a key existir, já é ativado o vip na conta dela.

Para adicionar uma validade, basta :

local key = nil

local allowed = { { 48, 57 }, { 65, 90 }, { 97, 122 } }

function generateString ( len )
    
    if tonumber ( len ) then
        math.randomseed ( getTickCount () )

        local str = ""
        for i = 1, len do
            local charlist = allowed[math.random ( 1, 3 )]
            str = str .. string.char ( math.random ( charlist[1], charlist[2] ) )
        end

        return str
    end
    
    return false
    
end

function Teste (  ) 
   local accName = getAccountName ( getPlayerAccount ( source ) ) 
   if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Console" ) ) then
      key = generateString(12)
      outputChatBox("Foi Gerado Uma Nova KEY: "..key.."", source, 255, 255, 255, true)
      if isTimer(tempo_remover_key) then
         killTimer(tempo_remover_key)
      end
      tempo_remover_key = setTimer ( function ( ) --/> AQUI
         key = nil --/> AQUI
      end, 60000*60*24*2, 1) --/> AQUI
   else 
      outputChatBox("Acesso Negado.", source, 255, 255, 255, true)	
   end
end
addEvent ("Gen:Set", true)
addEventHandler ("Gen:Set", root, Teste)


addCommandHandler ( "Usar", function ( player ) 
   if ( key ~= nil ) then 
      outputChatBox("Sua Chave: "..tostring(key), player, 0, 255, 0, true)
      setElementData ( player, "Vip", "Desbloqueado" )
      killTimer(tempo_remover_key) --/> Kill Timer.
      key = nil --/> Nil Variável Key.
   else 
      outputChatBox("Chave Inexistente.", player, 255, 0, 0, true)
   end 
end) 

 

Link to comment
5 minutes ago, Angelo Pereira said:

Teoricamente, o que eu consegui compreende, foi que, você apenas quer gerar um key por vez.

Então, nessa key gerada, a pessoa apenas dará o comando, caso a key existir, já é ativado o vip na conta dela.

Para adicionar uma validade, basta :


local key = nil

local allowed = { { 48, 57 }, { 65, 90 }, { 97, 122 } }

function generateString ( len )
    
    if tonumber ( len ) then
        math.randomseed ( getTickCount () )

        local str = ""
        for i = 1, len do
            local charlist = allowed[math.random ( 1, 3 )]
            str = str .. string.char ( math.random ( charlist[1], charlist[2] ) )
        end

        return str
    end
    
    return false
    
end

function Teste (  ) 
   local accName = getAccountName ( getPlayerAccount ( source ) ) 
   if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Console" ) ) then
      key = generateString(12)
      outputChatBox("Foi Gerado Uma Nova KEY: "..key.."", source, 255, 255, 255, true)
      if isTimer(tempo_remover_key) then
         killTimer(tempo_remover_key)
      end
      tempo_remover_key = setTimer ( function ( ) --/> AQUI
         key = nil --/> AQUI
      end, 60000*60*24*2, 1) --/> AQUI
   else 
      outputChatBox("Acesso Negado.", source, 255, 255, 255, true)	
   end
end
addEvent ("Gen:Set", true)
addEventHandler ("Gen:Set", root, Teste)


addCommandHandler ( "Usar", function ( player ) 
   if ( key ~= nil ) then 
      outputChatBox("Sua Chave: "..tostring(key), player, 0, 255, 0, true)
      setElementData ( player, "Vip", "Desbloqueado" )
      killTimer(tempo_remover_key) --/> Kill Timer.
      key = nil --/> Nil Variável Key.
   else 
      outputChatBox("Chave Inexistente.", player, 255, 0, 0, true)
   end 
end) 

 

se eu quiser setar o dia eu vu setar tempo_remover_key em milisegundos? 

Link to comment
28 minutes ago, MRXBBC said:

se eu quiser setar o dia eu vu setar tempo_remover_key em milisegundos? 

Ele estará sempre em 2 dias, se quiser trazer quantos dias do client-side, para o server-side, então fará basicamente assim :

function Teste ( dia ) --/> Trazer os dias do client....
   local accName = getAccountName ( getPlayerAccount ( source ) ) 
   if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Console" ) ) then
      local dia = tonumber(dia)
      key = generateString(12)
      outputChatBox("Foi Gerado Uma Nova KEY: "..key.."", source, 255, 255, 255, true)
      if isTimer(tempo_remover_key) then
         killTimer(tempo_remover_key)
      end
      tempo_remover_key = setTimer ( function ( ) --/> AQUI
         key = nil --/> AQUI
      end, 60000*60*24*dia, 1) --/> AQUI, fará a soma.
   else 
      outputChatBox("Acesso Negado.", source, 255, 255, 255, true)	
   end
end
addEvent ("Gen:Set", true)
addEventHandler ("Gen:Set", root, Teste

 

  • Thanks 1
Link to comment
  • Other Languages Moderators

Para longos períodos de tempo, usa-se getRealTime().timestamp em vez de setTimer. Até porque se alguém der restart no resource sem querer, o setTimer é perdido e o VIP vai ficar lá pra sempre.

Com o timestamp, vc salva o momento que o VIP foi atribuído na conta do jogador com um setAccount. E depois sempre que ele logar, verifica se já se passaram os 2 dias desde o momento salvo na conta. Se passou, remove o VIP ao logar.

Edited by Lord Henry
  • Thanks 1
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...