Ir para conteúdo
  • Cadastre-se

(Resolvido)Acrescentar função no sistema ppoints


Ir para solução Resolvido por Dwarfer,

Posts Recomendados

Boa madrugada galera...

Bom estou utilizando um sistema aqui do TK , que dar ppoints a partir do tempo online, o que estou com problemas?

1 -  Uma Função no sistema de mostrar o tempo q falta para o player receber o ppoint. 

2 - Outra coisa que estou com problema no script, quando o player morre, reloga ou quando reinicia o server o tempo está zerando... Queria que o tempo voltasse a partir de onde ele parou quando logasse novamente.

Alguém que conheça o suficiente poderia me ajudar? Fico grato desde já!!! Espero que alguem possa me ajudar. Valeu!!!
 

Creaturescript
 

Spoiler

--[[
P Points System by LsM.
OTServ Brasil © 2011
Version : v1.0
]]--
function onLogin(cid)
    doCreatureSetStorage(cid, 1219, os.time())
    return true
end
function onLogout(cid)
    doCreatureSetStorage(cid, 1219, 0)
    return true
end


Talkactions

Spoiler

function onSay(cid, words, param, channel)
    local getP = getPoints(cid)
    doPlayerPopupFYI(cid, "Você Possui ".. getP .." Ppoints.")
    return true
end


Globalevents
 

Spoiler

--[[
P Points System by LsM.
OTServ Brasil © 2011
Version : v1.0
]]--
local config = {
                p_time = 7200, -- Tempo em segundos para receber os pontos( 3600 = 1hora )
                p_points = 1 -- Quantidade de pontos recebida a cada "p_time"
                }local function givePoints(cid, quant)
      if os.time() - getCreatureStorage(cid, 1219) >= config.p_time then
           doPlayerSendTextMessage(cid, 19, "Parabéns, você recebeu ".. config.p_points .." ppoint. Agora você tem ".. config.p_points + getPoints(cid) .." ppoints na sua conta. O tempo foi resetado. Proximo ppoint em 2 horas.")  
           doPlayerAddPoints(cid, quant)                
           doCreatureSetStorage(cid, 1219, 0)
           doCreatureSetStorage(cid, 1219, os.time())
      end
      return true
end                
function onThink(interval)
    for i, v in pairs(getPlayersOnline()) do  
         givePoints(v, config.p_points)
    end
    return true
end




 

Link do sistema:
 

Spoiler

 


 

 

up PF

Link para o post
Compartilhar em outros sites
  • Solução

No creaturescripts:

 

Spoiler

function onLogin(cid)
    local query = db.getResult("SELECT (`lastlogout`-`lastlogin`) as ONtime FROM `players` WHERE `name` = '" .. getPlayerName(cid) .. "';")
    if getPlayerStorageValue(cid, 1219) == -1 then
        setPlayerStorageValue(cid, 1219, 0)
        return true
    end
    local addtime = query:getDataInt("ONtime")
    setPlayerStorageValue(cid, 1219, getPlayerStorageValue(cid, 1219) + tonumber(addtime))
    return true
end

 

 

E retire a tag  <event type="logout" name="PlayerResetPointsTimer" event="script" value="points.lua"/> do creaturescripts.xml.

 

No globalevents:

 

Spoiler

local config = {
    p_time = 7200, -- Tempo em segundos para receber os pontos( 3600 = 1hora )
    p_points = 1 -- Quantidade de pontos recebida a cada "p_time"
}

function givePoints(cid, quant)
    local onTime = getPlayerStorageValue(cid, 1219)
    if  onTime >= config.p_time then
        local rest =  onTime%config.p_time
        local add = ((onTime-rest)/config.p_time)*quant
        doPlayerAddPoints(cid, add)
        local text = "Você " .. (rest == 0 and "não possui" or "ainda possui") .. " " .. (rest == 0 and "" or rest) .. " segundos online."
        doPlayerSendTextMessage(cid, 19, "Parabéns, você recebeu " .. add .. " ppoint" .. (add > 1 and "s" or "")..". Agora você tem " .. add + getPoints(cid) .. " ppoints na sua conta. ".. text .." Próximo ppoint em " .. (config.p_time/3600) .. " horas.")
        setPlayerStorageValue(cid, 1219, rest) 
    end
    return true
end                
function onThink(interval)
    for _, pid in ipairs(getPlayersOnline()) do  
         givePoints(pid, config.p_points)
    end
    return true
end

 

 

No talkactions:

 

Spoiler

local config = {
    p_time = 7200, -- Tempo em segundos para receber os pontos( 3600 = 1hora )
    p_points = 1 -- Quantidade de pontos recebida a cada "p_time"
}

function onSay(cid, words, param, channel)
    local onTime = getPlayerStorageValue(cid, 1219)
    local rest =  onTime%config.p_time
    local tempo = config.p_time - rest
    local add = tonumber(((onTime-rest)/config.p_time)*config.p_points)
    local text = ""
    
    if add > 0 then
        text = "Você ganhará " .. add .. " ppoint " .. (add > 1 and "s" or "").."."
    end
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Faltam " .. tempo .. " segundos online para ganhar mais um ppoint." .. text) 
    doPlayerPopupFYI(cid, "Você possui " .. getPoints(cid) .. " Ppoints.")
    return true
end

 

 

Contato:

 

Link para o post
Compartilhar em outros sites

Devo substituir todos os arquivos né? 
Como sou leigo, vou te fazer uma pergunta tosca, retirando a tag do creatureevents, como vai ativar o script?

Link para o post
Compartilhar em outros sites

Você vai substituir esses que você mandou aqui. Você tem que retirar a tag que o eventype = "logout" e deixar a tag que o eventype = "login" que você tinha adicionado antes quando configurando o sistema. 

Contato:

 

Link para o post
Compartilhar em outros sites
9 minutos atrás, Dwarfer disse:

Você vai substituir esses que você mandou aqui. Você tem que retirar a tag que o eventype = "logout" e deixar a tag que o eventype = "login" que você tinha adicionado antes quando configurando o sistema. 

Quando dei reload
16:01 Parabéns, você recebeu 208857 ppoints. Agora você tem 417716 ppoints na sua conta. Você ainda possui 2139 segundos online. Próximo ppoint em 2 horas.

Pelo que parece, vai aparecer em segundos? Não poderia ser por exemplo, Faltam 1 hora 30 minutos e 20 segundos ?

Recebi 208857 qnd dei reload, algo deu errado, eu tinha somente 2 ppoints no adm, ai foi pra 417716  kkkk

Link para o post
Compartilhar em outros sites

Como você queria dar os pontos àqueles que ficaram X tempo online no seu servidor, o que eu fiz foi pegar o tempo online do player toda hora que ele entra no servidor. Esse problema aí aconteceu porque você não deslogou antes de dar o reload e já estava com o os.time() na storage. Então, ao somar o os.time() com o tempo que você ficou online pela última vez, deu esse número grande. Se você tivesse a storage de 1219 igual a -1 ou mesmo 0, funcionaria corretamente. 

 

Contato:

 

Link para o post
Compartilhar em outros sites
23 minutos atrás, Dwarfer disse:

Como você queria dar os pontos àqueles que ficaram X tempo online no seu servidor, o que eu fiz foi pegar o tempo online do player toda hora que ele entra no servidor. Esse problema aí aconteceu porque você não deslogou antes de dar o reload e já estava com o os.time() na storage. Então, ao somar o os.time() com o tempo que você ficou online pela última vez, deu esse número grande. Se você tivesse a storage de 1219 igual a -1 ou mesmo 0, funcionaria corretamente. 

 

Ah, entendi.

Teria alguma gambiarra para eu resetar esses points? Pois foi adicionado para todos os players.. :( 
Tive q fechar o server e n posso abrir pq ta com esses pontos enormes para todos, tive q retirar o npc tb q vende itens por ppoints

Link para o post
Compartilhar em outros sites

Não é gambiarra. Você pode executar na sua database:

 

Para excluir os p_points das contas:

 

ALTER TABLE `accounts` DROP `p_points`

 

Aí você pode adicionar novamente: 

ALTER TABLE `accounts` ADD `p_points` INTEGER NOT NULL DEFAULT 0

 

E para setar aos players o storage 1219 igual a -1: 

 

UPDATE `player_storage` SET `value`=-1 WHERE `key`= 1219

 

 

Contato:

 

Link para o post
Compartilhar em outros sites
3 minutos atrás, Dwarfer disse:

Não é gambiarra. Você pode executar na sua database:

 

Para excluir os p_points das contas:

 

ALTER TABLE `accounts` DROP `p_points`

 

Aí você pode adicionar novamente: 

ALTER TABLE `accounts` ADD `p_points` INTEGER NOT NULL DEFAULT 0

 

E para setar aos players o storage 1219 igual a -1: 

 

UPDATE `player_storage` SET `value`=-1 WHERE `key`= 1219

 

 

1)Usei o primeiro tag no sql para excluir os p-points ai deu este erro
Error while executing query: near "DROP": syntax error

2) Essa é a tag necessaria para executar o script, correto?

3) Esse 3 tag é no sql tb?

Link para o post
Compartilhar em outros sites

3) Sim, todas no mysql. 

 

Você pediu para que resetasse os pontos, então é só apagar a coluna. 

Editado por Dwarfer (veja o histórico de edições)

Contato:

 

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

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.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo