Ir para conteúdo

Featured Replies

Postado
  • Autor
Em 17/06/2023 em 04:24, L3K0T disse:

Se puder poste a solução para ajudar as outras pessoas ;)

Vou fazer um resumo pq precisaria criar um tutorial ou post pois envolve varias modificações;
Basicamente é necessário criar um script com a função "onGainExp", que esse script tera a condição se a xp vier de players
nesse mesmo script setar o storage value para cada morte baseado na ID (getGuid) do player.
dai vem a condição de controlar a quantidade de kills assim que ele ganhe exp de players (a cada ganho de xp um storage value).
logo se acontecer de chegar o limite configurada, exp = 0

No caso do "reset" eu peguei o proprio "autoSave" e coloquei a função em SQL para setar = 0 o storageValue que estiver no range (BEETWEEN X AND Y).
e colocar o intervalo de 4 horas, por exemplo.
PS¹: é necessario habilitar no config.lua "expfromplayers" e colocar um rage elevado (ex: 200) e depois no script "onGainExp" que será feitas as modificações das condições para ganhar exp.
 PS²: desisti de tentar criar com a função "onkill" pq se houvessem mais de 1 ou varios players batendo a exp era apenas para quem "ganhava a kill".

Em breve poderei postar,

Talvez eu poste minhas configs e modificações num server completo, caso alguém queria deixar ele online.

Abraço!

  • Respostas 10
  • Visualizações 517
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Mateus Robeerto
    Mateus Robeerto

    function onPlayerKill(player, creature, lastHit) if not creature:isPlayer() then return true end for cid, damage in pairs(creature:getDamageMap()) do local fragid = 200000

  • Se puder poste a solução para ajudar as outras pessoas

  • Vou fazer um resumo pq precisaria criar um tutorial ou post pois envolve varias modificações; Basicamente é necessário criar um script com a função "onGainExp", que esse script tera a condição se a

Postado
  • Diretor
12 horas atrás, jcfd.joao disse:

Vou fazer um resumo pq precisaria criar um tutorial ou post pois envolve varias modificações;
Basicamente é necessário criar um script com a função "onGainExp", que esse script tera a condição se a xp vier de players
nesse mesmo script setar o storage value para cada morte baseado na ID (getGuid) do player.
dai vem a condição de controlar a quantidade de kills assim que ele ganhe exp de players (a cada ganho de xp um storage value).
logo se acontecer de chegar o limite configurada, exp = 0

No caso do "reset" eu peguei o proprio "autoSave" e coloquei a função em SQL para setar = 0 o storageValue que estiver no range (BEETWEEN X AND Y).
e colocar o intervalo de 4 horas, por exemplo.
PS¹: é necessario habilitar no config.lua "expfromplayers" e colocar um rage elevado (ex: 200) e depois no script "onGainExp" que será feitas as modificações das condições para ganhar exp.
 PS²: desisti de tentar criar com a função "onkill" pq se houvessem mais de 1 ou varios players batendo a exp era apenas para quem "ganhava a kill".

Em breve poderei postar,

Talvez eu poste minhas configs e modificações num server completo, caso alguém queria deixar ele online.

Abraço!

 

Pensei nisso complexo

 

local function getPlayerKills(player)
    local killsStorage = 1000 -- StorageValue para armazenar as mortes do jogador
    return player:getStorageValue(killsStorage)
end

local function setPlayerKills(player, kills)
    local killsStorage = 1000 -- StorageValue para armazenar as mortes do jogador
    player:setStorageValue(killsStorage, kills)
end

function onGainExp(player, exp, fromPlayer)
    local maxKills = 10 -- Número máximo de kills permitidas antes de zerar a experiência
    local expStorage = 2000 -- StorageValue para armazenar a experiência do jogador
    local fragid = 3000 -- StorageValue para armazenar o contador de frags
    local timeFrag = 4000 -- StorageValue para armazenar o tempo do último frag
    local requiredFrags = 3 -- Número mínimo de frags necessários para ativar o evento
    
    -- Verifica se o jogador possui frags suficientes e se a experiência é maior que zero
    if player:getStorageValue(fragid) >= requiredFrags and exp > 0 then
        local currentExp = player:getStorageValue(expStorage)
        local currentKills = getPlayerKills(player)
        
        -- Verifica se o jogador atingiu o limite de kills
        if currentKills >= maxKills then
            return 0 -- Retorna 0 para zerar a experiência ganha
        else
            -- Atualiza o número de kills e a experiência do jogador
            setPlayerKills(player, currentKills + 1)
            player:setStorageValue(expStorage, currentExp + exp)
        end
    end

    return exp -- Retorna a experiência atualizada
end

function onLogin(player)
    local resetInterval = 4 * 60 * 60 -- Intervalo de reset em segundos (4 horas)
    local lastResetStorage = 3000 -- StorageValue para armazenar o último reset
    local fragid = 3000 -- StorageValue para armazenar o contador de frags
    local timeFrag = 4000 -- StorageValue para armazenar o tempo do último frag
    local timeThreshold = 2 * 60 * 60 -- Tempo em segundos para reiniciar o contador de frags
    local requiredFrags = 3 -- Número mínimo de frags necessários para ativar o evento
    
    -- Verifica se já passou o intervalo de reset desde o último login
    local lastReset = player:getStorageValue(lastResetStorage)
    local currentTime = os.time()
    if lastReset ~= nil and currentTime - lastReset >= resetInterval then
        -- Realiza o reset do número de kills e a experiência do jogador
        setPlayerKills(player, 0)
        player:setStorageValue(expStorage, 0)
        player:setStorageValue(lastResetStorage, currentTime)
    end
    
    -- Verifica se já passaram 2 horas desde o último frag
    local lastFrag = player:getStorageValue(timeFrag)
    if lastFrag ~= nil and currentTime - lastFrag >= timeThreshold then
        player:setStorageValue(fragid, 0) -- Reinicia o contador de frags
    end
    
    -- Verifica se o jogador possui frags suficientes ao fazer o login
    if player:getStorageValue(fragid) < requiredFrags then
        player:setStorageValue(fragid, 0) -- Zera o contador de frags
    end
end

-- Registra os eventos
registerCreatureEvent(cid, "onGainExp")
registerCreatureEvent(cid, "onLogin")
 

 

<event type="gainExperience" name="onGainExp" event="script" value="scripts/gainexp.lua"/>
<event type="login" name="onLogin" event="script" value="scripts/login.lua"/>
 

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Postado
  • Autor
10 horas atrás, L3K0T disse:

 

Pensei nisso complexo

 

local function getPlayerKills(player)
    local killsStorage = 1000 -- StorageValue para armazenar as mortes do jogador
    return player:getStorageValue(killsStorage)
end

local function setPlayerKills(player, kills)
    local killsStorage = 1000 -- StorageValue para armazenar as mortes do jogador
    player:setStorageValue(killsStorage, kills)
end

function onGainExp(player, exp, fromPlayer)
    local maxKills = 10 -- Número máximo de kills permitidas antes de zerar a experiência
    local expStorage = 2000 -- StorageValue para armazenar a experiência do jogador
    local fragid = 3000 -- StorageValue para armazenar o contador de frags
    local timeFrag = 4000 -- StorageValue para armazenar o tempo do último frag
    local requiredFrags = 3 -- Número mínimo de frags necessários para ativar o evento
    
    -- Verifica se o jogador possui frags suficientes e se a experiência é maior que zero
    if player:getStorageValue(fragid) >= requiredFrags and exp > 0 then
        local currentExp = player:getStorageValue(expStorage)
        local currentKills = getPlayerKills(player)
        
        -- Verifica se o jogador atingiu o limite de kills
        if currentKills >= maxKills then
            return 0 -- Retorna 0 para zerar a experiência ganha
        else
            -- Atualiza o número de kills e a experiência do jogador
            setPlayerKills(player, currentKills + 1)
            player:setStorageValue(expStorage, currentExp + exp)
        end
    end

    return exp -- Retorna a experiência atualizada
end

function onLogin(player)
    local resetInterval = 4 * 60 * 60 -- Intervalo de reset em segundos (4 horas)
    local lastResetStorage = 3000 -- StorageValue para armazenar o último reset
    local fragid = 3000 -- StorageValue para armazenar o contador de frags
    local timeFrag = 4000 -- StorageValue para armazenar o tempo do último frag
    local timeThreshold = 2 * 60 * 60 -- Tempo em segundos para reiniciar o contador de frags
    local requiredFrags = 3 -- Número mínimo de frags necessários para ativar o evento
    
    -- Verifica se já passou o intervalo de reset desde o último login
    local lastReset = player:getStorageValue(lastResetStorage)
    local currentTime = os.time()
    if lastReset ~= nil and currentTime - lastReset >= resetInterval then
        -- Realiza o reset do número de kills e a experiência do jogador
        setPlayerKills(player, 0)
        player:setStorageValue(expStorage, 0)
        player:setStorageValue(lastResetStorage, currentTime)
    end
    
    -- Verifica se já passaram 2 horas desde o último frag
    local lastFrag = player:getStorageValue(timeFrag)
    if lastFrag ~= nil and currentTime - lastFrag >= timeThreshold then
        player:setStorageValue(fragid, 0) -- Reinicia o contador de frags
    end
    
    -- Verifica se o jogador possui frags suficientes ao fazer o login
    if player:getStorageValue(fragid) < requiredFrags then
        player:setStorageValue(fragid, 0) -- Zera o contador de frags
    end
end

-- Registra os eventos
registerCreatureEvent(cid, "onGainExp")
registerCreatureEvent(cid, "onLogin")
 

 

<event type="gainExperience" name="onGainExp" event="script" value="scripts/gainexp.lua"/>
<event type="login" name="onLogin" event="script" value="scripts/login.lua"/>

 

 


 

MUITO BOM.
eu manjo pouco de scripts/programação.
no meu caso, eu pego sempre o que ja esta pronto e faço modificações a partir dali.
pq sempre leio o que esta dentro e a imaginação flui.
cada vez que abro um script que ja existe as ideias fluem, até armadura que reflete o dano estou conseguindo fazer. kkkkkkkkkkkk
controle de damage por diferença de lvl (para +)., etc, etc
vc foi muito bom em criar esse do zero, parabéns.
só nao consigo dizer pra vc se tem erro ou nao pq eu uso o tfs diferente desse que vc postou...
um abraço!

Postado
  • Diretor
11 horas atrás, jcfd.joao disse:

MUITO BOM.
eu manjo pouco de scripts/programação.
no meu caso, eu pego sempre o que ja esta pronto e faço modificações a partir dali.
pq sempre leio o que esta dentro e a imaginação flui.
cada vez que abro um script que ja existe as ideias fluem, até armadura que reflete o dano estou conseguindo fazer. kkkkkkkkkkkk
controle de damage por diferença de lvl (para +)., etc, etc
vc foi muito bom em criar esse do zero, parabéns.
só nao consigo dizer pra vc se tem erro ou nao pq eu uso o tfs diferente desse que vc postou...
um abraço!

Qual tfs, ele é pra tfs 1.3

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo