Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Bom, galerinha, este é um creature event com callback onLogin no qual chama uma função em loop/laço infinito.

checkHunger(cid)

O que faz essa função?
Ela checa os ticks de uma condição de regeneração, na qual o creatureid player adquire ao se alimentar com um food no game.
Se o valor desses ticks indicar que o player não se alimentou, será feita uma contagem de segundos via storage. Se essa contagem passar do tempo máximo que se pode ficar sem se alimentar (alterável), o player começa a perder determinada porcentagem (alterável) de sua saúde (Health/Life/Vida), de certo em certo tempo (também alterável), até que o mesmo se alimente novamente ou simplesmente morra.
Caso o player morra, quando entrar, ele vai continuar perdendo a porcentagem de HP, até que enfim se alimente. Acredito que seja bom para servidores sérios.

Sem mais delongas..


checkhunger.lua (data\creaturescripts\scripts):

-- Developed by Wise ~ TibiaKing.com
local t = {
    hp = 2, -- %
    maxTime = 25 * 60, -- minutes * 60
    lossInterval = 5, -- seconds
    hstor = 98765 -- hunger storage
}

function checkHunger(cid)
    local h = getPlayerStorageValue(cid, t.hstor)
    local loss = t.lossInterval > 1 and t.lossInterval or 2
    
    if getPlayerFlagValue(cid, PLAYERFLAG_CANNOTBEATTACKED) then
        return true
    elseif getPlayerFood(cid) < 1 then
        if h <= t.maxTime then
            if h < 0 then
                setPlayerStorageValue(cid, t.hstor, 0)
            end
            
            setPlayerStorageValue(cid, t.hstor, getPlayerStorageValue(cid, t.hstor) + 1)
        else
            addEvent(function()
                if isPlayer(cid) then
                    doCreatureAddHealth(cid, -(t.hp * (getCreatureMaxHealth(cid) / 100)))
                end
            end, (loss - 1) * 1000)
        end
    else
        if h > 0 then
            setPlayerStorageValue(cid, t.hstor, 0)
        end
    end
    
    addEvent(function()
        if isPlayer(cid) then
            checkHunger(cid)
        end
    end, 1000)
    return true
end

function onLogin(cid)
    return checkHunger(cid) and true
end




Tag - creaturescripts.xml (data\creaturescripts):

<event type="login" name="checkHunger" event="script" value="checkhunger.lua"/>




Configuração simples:

local t = {
    hp = 2, -- porcentagem de HP que o player perderá
    maxTime = 25 * 60, -- tempo máximo para ficar sem se alimentar em minutos * 60 (no caso, seriam 25 minutos, ou seja, 1500 segundos)
    lossInterval = 5, -- tempo do intervalo de perda da porcentagem do HP, em segundos (no caso, perderia a porcentagem estipulada a cada 5 segundos)
    hstor = 98765 -- storage que faz a contagem do tempo máximo
}

PS: com esse callback, não se registra creature event.

The corrupt fear us.

The honest support us.

The heroic join us.

  • Respostas 19
  • Visualizações 3.2k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

Postado

Interessante, não se ve muito hunger system por ae!

 

E tinha que ser você pra trazer isso pro forum né hahaha!

 

Reputado brother!

Postado
  • Autor

Dúvida: foi testado em qual versão?

Obrigado.

Testei com o TFS 0.3.6, mas pelas funções, acredito que execute de boa também com TFS 1.0 e com o TFS 0.4 (com exceção de uma função na última versão citada, tendo que alterar somente setPlayerStorageValue por doCreatureSetStorage).

 

Interessante, não se ve muito hunger system por ae! E tinha que ser você pra trazer isso pro forum né hahaha!

Ah, eu já tinha pensado em fazer isso antes, daí deu vontade e aqui está heheh

Valeu, brother! :)

 

Gostei do sistema. Seria bacana ver isso em um otserver de sobrevivência. Será que tem algum sendo feito por aí?

Que bom que gostou. Então, se encontrar algum que use ele, me avise.

Seria uma honra ver pessoas desfrutando dele por aí ;]

The corrupt fear us.

The honest support us.

The heroic join us.

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