Ir para conteúdo

System de Premiação por ficar ONLINE


GstvoLiber

Posts Recomendados

Bom galera, quis fazer o script pra ajudar um membro da comunidade.. Espero que gostem!

É um script simples, que a cada 1 hora online, dá um item para o player. Esse tempo online será salva num espaço na sua database, e depois vou aprimorar o script para criar um rank dos mais online. De qualquer forma, modificações desse script viram, então aguardem.

Em creaturescript.xml adicione:

<event type="login" name="tempo_on_reward" event="script" value="rewardON.lua"/>
 <event type="logout" name="tempo_on_reward2" event="script" value="rewardON.lua"/>

Em login.lua adicione:

registerCreatureEvent(cid, "tempo_on_reward2")

Agora, na pasta scripts, cria um arquivo chamado rewardON.lua e adicione dentro:

-- Script made by GstavoLiber --
-- Config --
storage = 2001 -- storage que vai salvar o tempo online temporariamente.
item = 2160 -- id do item que será dado como presente
hora = 3600 -- tempo em segundos a ficar online para receber o premio
count = 50 -- qntidade do item premio
-- Config --
function onLogin(cid)
         if(getPlayerStorageValue(uid, storage) >= hora )then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você já está logado a 1 hora! Você receberá seu prêmio em breve. " )
            doPlayerAddItem(uid, item, count)
            local rest = getPlayerStorageValue(uid, storage) - hora
            local query = db.executeQuery("UPDATE `players` SET `value` = `value` + ".. hora .." WHERE `id` = ".. getPlayerGUID(cid) ..";")
            setPlayerStorageValue(uid, storage, 0)
            setPlayerStorageValue(uid, storage, rest)
            return TRUE
         else 
         setPlayerStorageValue(uid, storage, getPlayerStorageValue(uid, storage) + os.time())   
         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Fique logado por 1 hora para ganhar premio! Lembre-se de deslogar e logar para recebe-lo. " )
         end   
return TRUE
end

function onLogout(cid)
	setPlayerStorageValue(uid, storage, getPlayerStorageValue(uid, storage) + os.time())   
	return TRUE -- return false impede o jogador de dar logout
end

Pessoal, tenho uma leve impressão que eu errei na lógica, então caso não funcione o de cima, testa esse de baixo:

-- Script made by GstavoLiber --
-- Config --
storageInit = 2001    -- storage que vai salvar o tempo online temporariamente.
storageFinish = 2002  -- storage que vai salvar o tempo online temporariamente.
storageTotal = 2003
item = 2160 -- id do item que será dado como presente
hora = 3600 -- tempo em segundos a ficar online para receber o premio
count = 50 -- qntidade do item premio
-- Config --
function onLogin(cid)
setPlayerStorageValue(uid, storageInit, os.time())
         if(getPlayerStorageValue(uid, storageTotal) >= hora )then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você já está logado a 1 hora! Você receberá seu prêmio em breve. " )
            doPlayerAddItem(uid, item, count)
            local rest = getPlayerStorageValue(uid, storageTotal) - hora
            local query = db.executeQuery("UPDATE `players` SET `value` = `value` + ".. hora .." WHERE `id` = ".. getPlayerGUID(cid) ..";")
            if(rest > 0) then setPlayerStorageValue(uid, storageTotal, rest)
            else    setPlayerStorageValue(uid, storageTotal, 0)
            end
            return TRUE
         else  
         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Fique logado por 1 hora para ganhar premio! Lembre-se de deslogar e logar para recebe-lo. " )
         end   
return TRUE
end

function onLogout(cid)
    setPlayerStorageValue(uid, storageFinish, os.time())
    setPlayerStorageValue(uid, storageTotal, getPlayerStorageValue(uid, storageTotal) + (getPlayerStorageValue(uid, storageFinish) - getPlayerStorageValue(uid, storageInit)))   
    return TRUE -- return false impede o jogador de dar logout
end

Obrigado pela atenção,

Já ia esquecendo, tem que adicionar na sua database em MYSQl, o seguinte query:

ALTER TABLE players ADD total_time_on int(16) not null AFTER frags;

Mude a palavra frags, para o nome da ultima coluna da sua table players.

 

Se Possível +REP

-GstavoLiber

Editado por GstavoLiber
Link para o comentário
Compartilhar em outros sites

Vamos lá,

 

O sistema será executado toda vez que jogador entrar no jogo, então, se ele entrar, ficar online uma hora, o sistema não dará o prêmio, a menos que ele saia e entre no jogo.

 

Quanto a sua dúvida sobre a query SQL:

db.executeQuery("UPDATE total_time_on SET value = "..hora + value.." WHERE player_id = "..id.. "")

Do jeito que você fez, dá errado mesmo, pois aí você está chamando duas variáveis hora e value, e como você quer, value não é uma variável.

Atenção também para a variável id, que você não declarou também, e a coluna não se chama player_id, mas sim id, no banco de dados dos servidores atuais.

db.executeQuery("UPDATE `players` SET `value` = `value` + ".. hora .." WHERE `id` = ".. getPlayerGUID(cid) ..";")

Fica desse jeito.

 

Não desanime no primeiro erro, estude um pouco mais e você vai longe.

 

Abraço.

Link para o comentário
Compartilhar em outros sites

Vamos lá,

 

O sistema será executado toda vez que jogador entrar no jogo, então, se ele entrar, ficar online uma hora, o sistema não dará o prêmio, a menos que ele saia e entre no jogo.

 

Quanto a sua dúvida sobre a query SQL:

db.executeQuery("UPDATE total_time_on SET value = "..hora + value.." WHERE player_id = "..id.. "")

Do jeito que você fez, dá errado mesmo, pois aí você está chamando duas variáveis hora e value, e como você quer, value não é uma variável.

Atenção também para a variável id, que você não declarou também, e a coluna não se chama player_id, mas sim id, no banco de dados dos servidores atuais.

db.executeQuery("UPDATE `players` SET `value` = `value` + ".. hora .." WHERE `id` = ".. getPlayerGUID(cid) ..";")

Fica desse jeito.

 

Não desanime no primeiro erro, estude um pouco mais e você vai longe.

 

Abraço.

 

 

Obrigado pela atenção, realmente significa muito pra min, foi o primeiro sistema útil que fiz eu acho rsrs...

Vou editar e fazer as alterações corretas.

 

-GstavoLiber

Link para o comentário
Compartilhar em outros sites

  • 1 year later...
  • 10 months later...
  • 4 months later...
  • 3 years later...
Em 28/04/2017 em 15:49, Darciio disse:

vish nem sei como adiciona as paradas ai
ALTER TABLE players ADD total_time_on int(16) not null AFTER frags;

Então cara, na real seria pelo acesso ao PhpMyAdmin, tu seleciona sua DATABASE e na aba SQL tu cola e executa
 

Mas eu mesmo ainda não o teste e não sei dizer se realmente funciona, porém procuro um sistema parecido com o do pbotwars.com

Editado por brumarty
erro na escrita
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...