Ir para conteúdo
GstvoLiber

creatureevent System de Premiação por ficar ONLINE

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

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao entendi muito esta parte..

 

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.


  • Conteúdo Similar

    • Por Duuhzinhow
      Eae galerinha do xtibia, vim aqui hoje para ensinar uma coisa simples, mas que muitos nao sabem, e queriam aprender de uma forma bem facil. Vou ensinar á criar spells básicas de damage, de area, e alvo unico... Primeiro, irei ensinar uma de alvo unico.
       
      Vá em data/spells/scripts copie um arquivo .lua e renomeie para o que desejar:
       
      Please login or register to see this spoiler.
    • Por jenison06
      Base: PokeStorm
      Bom dia
      Queria um Sistema de Usar Potion na Pokeball ou na Portrait se possivel.
       
      Aqui esta meu Potion.lua
      local potions = { [8783] = {baseHeal = 1800, healTimes = 10, msgColor = 175}, --Full Potion [2112] = {baseHeal = 950, healTimes = 8, msgColor = 181}, --Hyper Potion [2113] = {baseHeal = 600, healTimes = 7, msgColor = 23}, --Ultra Potion [2115] = {baseHeal = 350, healTimes = 6, msgColor = 30}, --Great Potion [2114] = {baseHeal = 200, healTimes = 5, msgColor = 177}, --Small Potion [9270] = {baseHeal = 225, healTimes = 5, msgColor = 177}, --Starter's Small Potion } local texts = { [PORTUGUESE] = {"Use isso em você mesmo ou em seu pokémon.", "Você já está se curando.", "Seu pokémon já está sendo curado."}, [ENGLISH] = {"Use it in your pokemon or in yourself.", "You are already healing yourself.", "Your pokemon is already being healed."}, } local potionState = {} local function potionHeal(cid, heal, healed, maxHeal) if isCreature(cid) and healed <= maxHeal then doCreatureAddHealth(cid, heal) doSendMagicEffect(getCreaturePosition(cid), 12) addEvent(potionHeal, 1000, cid, heal, healed+1, maxHeal) else potionState[cid] = nil end end function onUse (cid,item,frompos,item2,topos) local txt = texts[getPlayerLanguage(cid)] local potion = potions[item.itemid] if not isCreature(item2.uid) or getCreatureMaster(item2.uid) ~= cid then doPlayerSendCancel(cid, txt[1]) return true end if not potionState[item2.uid] then if isPokeballIn(item2.itemid) then healQuant = potion.baseHeal*(1+getPlayerSkillLevel(cid, SKILL_FIRSTAID)*0.05) elseif isSummon(item2.uid) then healQuant = potion.baseHeal*(1+getPlayerSkillLevel(cid, SKILL_FIRSTAID)*0.05) else healQuant = potion.baseHeal*(1+getPlayerSkillLevel(cid, SKILL_FIRSTAID)*0.05/2) end potionState[item2.uid] = true doRemoveItem(item.uid, 1) doSendAnimatedText(getCreaturePosition(item2.uid), 'HEALING!', potion.msgColor) potionHeal(item2.uid, healQuant, 1, potion.healTimes) else if isPlayer(item2.uid) then doPlayerSendCancel(cid, txt[2]) else doPlayerSendCancel(cid, txt[3]) end end return true end  
    • Por RIANLHP
      Versão do Servidor: TFS - 0.4 Tipo de Script: monster Código: Please login or register to see this spoiler.
      Pessoal, como adiciona RACE ao meu Wodbo, Só existe dois tipos, Blood e Energy, Queria encontrar outras, não estou conseguindo nem tirar blood dos treiners, alguém pode ajudar? 
      Encontrei solução, se tiver como fechar o tópico agradeço!
    • Por Pluzetti2104
      Versão do Servidor: TFS - 0.3.5 Tipo de Script: moveevent Código: Please login or register to see this spoiler.
      Opa gente beleza? bom seguinte eu tenho o codigo que quando voce sai da cidade ou entra ele informa se esta saindo ou entrando, como do OtPokemon, segue código.
       
       
       
      Ele está configurado pra quando sair para o lado de celadon do mapa, agora eu queria saber, eu fui colocar na posicao do norte, pensei comigo 1 e 3 é pra celadon, entao cerulean resta 2 e 4, tentei mudar, porém ele só mostra a mensagem de eu saindo e nao entrando. (SIM) ja coloquei uma tag especifica pra ele no xml.
      Resumindo pra oeste (celadon) ele vai normal, pra sair de saffron ao norte aparece tbm a mensagem, agr para entrar nao...alguem poderia me dar uma ajudinha por favor?
      obrigado desde já.
    • Por darkalvaro
      Versão do Servidor: TFS - 0.3.4 Tipo de Script: actions Código: Please login or register to see this spoiler.
       
×
×
  • Criar Novo...