Ir para conteúdo
  • Cadastre-se

(Resolvido)Tile que enxe stamina


Ir para solução Resolvido por Elwyn,

Posts Recomendados

Prezados, bom dia!

Eu gostaria de saber se é possível criar um script de tile que enxe a stamina?

 

 

Por exemplo, a minha idéia é botar um actionid nos tiles dos treiners que a cada 2 minutos vai adicionar 1 minuto de stamina para o player. Dai o player não precisaria deslogar para recuperar a stamina.

Obrigado desde já!

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

Att,
Grafit.

Link para o post
Compartilhar em outros sites

enxe 1 de stamina

1 minuto ou 1 hora?
Especifique o máximo possível quando for fazer um pedido.

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

1 minuto ou 1 hora?

Especifique o máximo possível quando for fazer um pedido.

Perdão!! Seria um minuto mesmo.

Vou editar o post para tentar explicar melhor

Att,
Grafit.

Link para o post
Compartilhar em outros sites

TFS 1.1:

eventsId = {}

local function rechargeStamina(cid)
    local player = Player(cid)

    if not player then
        eventsId[cid] = nil
        return
    end

    player:setStamina(player:getStamina() + 1)

    eventsId[cid] = addEvent(rechargeStamina, 60 * 1000, cid)
end

function onStepIn(creature, item, position, fromPosition)
    if creature:isPlayer() then
        local cid = creature:getId()
        eventsId[cid] = addEvent(rechargeStamina, 60 * 1000, cid)
    end

    return true
end

function onStepOut(creature, item, pos, fromPosition)
    if creature:isPlayer() then
        local cid = creature:getId()
        stopEvent(eventsId[cid])
        eventsId[cid] = nil
    end

    return true
end

 

TFS 0.3.6 ~ 0.4:

OTX 2:

 

eventsId = {}

local function rechargeStamina(cid)
    if not isPlayer(cid) then
        eventsId[cid] = nil
        return
    end

    doPlayerSetStamina(cid, getPlayerStamina(cid) + 1)

    eventsId[cid] = addEvent(rechargeStamina, 1000, cid)
end

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if isPlayer(cid) then
        eventsId[cid] = addEvent(rechargeStamina, 1000, cid)
        print("eventsId (stepIn): " .. eventsId[cid])
    end

    return true
end

function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if isPlayer(cid) then
        stopEvent(eventsId[cid])
        eventsId[cid] = nil
    end

    return true
end

Salve como stamina_tile.lua em movements/script

 

movements.xml:

    <movevent event="StepIn" itemid="407" script="stamina_tile.lua" />
    <movevent event="StepOut" itemid="407" script="stamina_tile.lua" />

Mude itemid="407" para o itemid desejado, caso queira actionid é só mudar de itemid="id do item" para actionid="id da action".

Editado por elwyn (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

TFS 1.1:

eventsId = {}

local function rechargeStamina(cid)
    local player = Player(cid)

    if not player then
        eventsId[cid] = nil
        return
    end

    player:setStamina(player:getStamina() + 1)

    eventsId[cid] = addEvent(rechargeStamina, 60 * 1000, cid)
end

function onStepIn(creature, item, position, fromPosition)
    if creature:isPlayer() then
        local cid = creature:getId()
        eventsId[cid] = addEvent(rechargeStamina, 60 * 1000, cid)
    end

    return true
end

function onStepOut(creature, item, pos, fromPosition)
    if creature:isPlayer() then
        local cid = creature:getId()
        stopEvent(eventsId[cid])
        eventsId[cid] = nil
    end

    return true
end

 

TFS 0.3.6 ~ 0.4:

OTX 2:

 

eventsId = {}

local function rechargeStamina(cid)
    if not isPlayer(cid) then
        eventsId[cid] = nil
        return
    end

    doPlayerSetStamina(cid, getPlayerStamina(cid) + 1)

    eventsId[cid] = addEvent(rechargeStamina, 1000, cid)
end

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if isPlayer(cid) then
        eventsId[cid] = addEvent(rechargeStamina, 1000, cid)
        print("eventsId (stepIn): " .. eventsId[cid])
    end

    return true
end

function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if isPlayer(cid) then
        stopEvent(eventsId[cid])
        eventsId[cid] = nil
    end

    return true
end

Salve como stamina_tile.lua em movements/script

 

movements.xml:

    <movevent event="StepIn" itemid="407" script="stamina_tile.lua" />
    <movevent event="StepOut" itemid="407" script="stamina_tile.lua" />

Mude itemid="407" para o itemid desejado, caso queira actionid é só mudar de itemid="id do item" para actionid="id da action".

Testei e não funcionou!

Não adicionou a stamina, e apareceu as mensagens no console:

eventsId (stepIn): 1002
eventsId (stepIn): 1003
eventsId (stepIn): 1004
eventsId (stepIn): 1005
eventsId (stepIn): 1006
eventsId (stepIn): 1007
eventsId (stepIn): 1008
eventsId (stepIn): 1010
eventsId (stepIn): 1011
eventsId (stepIn): 1012
eventsId (stepIn): 1013
eventsId (stepIn): 1014
eventsId (stepIn): 1125
eventsId (stepIn): 1145

Att,
Grafit.

Link para o post
Compartilhar em outros sites

Teste este:

Registre em movements.xml as tags abaixo:

<movevent type="StepIn" actionid="12129" event="script" value="tile_stamina.lua"/>
    <movevent type="StepOut" actionid="12129" event="script" value="tile_stamina.lua"/>

 

Crie o arquivo tile_stamina.lua e cole o código abaixo dentro:

---------- Script by: Adriano Swatt --------
local maxstamina = 2520  -- quantidade máxima de Stamina (Não sei se é este valor mesmo)
local qtdd = 1 -- quantidade de Stamina é adicionada
local tempo = 5 -- em segundos para cada regeneração
local tileid, action = 412, 12129 -- ID do Piso de Stamina, ActionID usada no Piso
----------- FIM DAS CONFIGURAÇÕES -----------

function onStepIn(cid, item, position, fromPosition)
local getpos = getPlayerPosition(cid)
local tilepos = getTileItemById(getpos, tileid).actionid
local getsta = getPlayerStamina(cid)

    if getsta < maxstamina and isPlayer(cid) then
        addEvent(GetStamina, 100, cid)
    else
        doTeleportThing(cid, fromPosition)
        doPlayerSendCancel(cid, "Sua stamina já está cheia.")
    end
return true
end

function onStepOut(cid, item, position, fromPosition)
    stopEvent(GetStamina)
return true
end

function GetStamina(cid)
local getpos = getPlayerPosition(cid)
local tilepos = getTileItemById(getpos, tileid).actionid
local getsta = getPlayerStamina(cid)

    if tilepos == action then    
        if getsta < maxstamina and isPlayer(cid) then
            doPlayerSendCancel(cid, "Sua stamina está subindo.")
            setPlayerStamina(cid, getsta + qtdd)
            addEvent(GetStamina, tempo * 1000, cid)
        else
            doTeleportThing(cid, fromPosition)
            doPlayerSendCancel(cid, "Sua stamina já está cheia.")
        end
    end
return true
end

 

Poste o resultado.

Boa sorte.

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

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

Testei e não funcionou!

Não adicionou a stamina, e apareceu as mensagens no console:

 

 

Essas mensagens são do print que deixei sem querer. Não apareceram outras mensagens?

 

Se você fizer essa talkaction:

function onSay(cid, words, param)
    local value = param and tonumber(param) or 1

    doPlayerSetStamina(cid, value)

    return true
end

Com a seguinte tag:

    <talkaction access="0-4" words="!teste" event="script" value="stamina.lua" />

E mandar no tibia a seguinte mensagem:

 

 

!teste 20

 

Sua stamina muda para 00:20?

 

A propósito, o script que estou usando no OTX é exatamente este:

 

eventsId = {}

local function rechargeStamina(cid)
    if not isPlayer(cid) then
        eventsId[cid] = nil
        return
    end

    doPlayerSetStamina(cid, getPlayerStamina(cid) + 1)

    eventsId[cid] = addEvent(rechargeStamina, 60 * 1000, cid)
end

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if isPlayer(cid) then
        eventsId[cid] = addEvent(rechargeStamina, 1000, cid)
    end

    return true
end

function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if isPlayer(cid) then
        stopEvent(eventsId[cid])
        eventsId[cid] = nil
    end

    return true
end

 

E funciona perfeitamente. Note que é apenas o script anterior sem o print e com um delay maior no regen de stamina.

Editado por elwyn (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Teste este:

Registre em movements.xml as tags abaixo:

<movevent type="StepIn" actionid="12129" event="script" value="tile_stamina.lua"/>
    <movevent type="StepOut" actionid="12129" event="script" value="tile_stamina.lua"/>

Crie o arquivo tile_stamina.lua e cole o código abaixo dentro:

---------- Script by: Adriano Swatt --------
local maxstamina = 2520  -- quantidade máxima de Stamina (Não sei se é este valor mesmo)
local qtdd = 1 -- quantidade de Stamina é adicionada
local tempo = 5 -- em segundos para cada regeneração
local tileid, action = 412, 12129 -- ID do Piso de Stamina, ActionID usada no Piso
----------- FIM DAS CONFIGURAÇÕES -----------

function onStepIn(cid, item, position, fromPosition)
local getpos = getPlayerPosition(cid)
local tilepos = getTileItemById(getpos, tileid).actionid
local getsta = getPlayerStamina(cid)

    if getsta < maxstamina and isPlayer(cid) then
        addEvent(GetStamina, 100, cid)
    else
        doTeleportThing(cid, fromPosition)
        doPlayerSendCancel(cid, "Sua stamina já está cheia.")
    end
return true
end

function onStepOut(cid, item, position, fromPosition)
    stopEvent(GetStamina)
return true
end

function GetStamina(cid)
local getpos = getPlayerPosition(cid)
local tilepos = getTileItemById(getpos, tileid).actionid
local getsta = getPlayerStamina(cid)

    if tilepos == action then    
        if getsta < maxstamina and isPlayer(cid) then
            doPlayerSendCancel(cid, "Sua stamina está subindo.")
            setPlayerStamina(cid, getsta + qtdd)
            addEvent(GetStamina, tempo * 1000, cid)
        else
            doTeleportThing(cid, fromPosition)
            doPlayerSendCancel(cid, "Sua stamina já está cheia.")
        end
    end
return true
end

Poste o resultado.

Boa sorte.

Muito obrigado pela sua ajuda, mas já consegui com o que o elwyn postou!! 

 

 

Essas mensagens são do print que deixei sem querer. Não apareceram outras mensagens?

 

Se você fizer essa talkaction:

function onSay(cid, words, param)
    local value = param and tonumber(param) or 1

    doPlayerSetStamina(cid, value)

    return true
end

Com a seguinte tag:

    <talkaction access="0-4" words="!teste" event="script" value="stamina.lua" />

E mandar no tibia a seguinte mensagem:

 

 

 

Sua stamina muda para 00:20?

 

A propósito, o script que estou usando no OTX é exatamente este:

 

eventsId = {}

local function rechargeStamina(cid)
    if not isPlayer(cid) then
        eventsId[cid] = nil
        return
    end

    doPlayerSetStamina(cid, getPlayerStamina(cid) + 1)

    eventsId[cid] = addEvent(rechargeStamina, 60 * 1000, cid)
end

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if isPlayer(cid) then
        eventsId[cid] = addEvent(rechargeStamina, 1000, cid)
    end

    return true
end

function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if isPlayer(cid) then
        stopEvent(eventsId[cid])
        eventsId[cid] = nil
    end

    return true
end

 

E funciona perfeitamente. Note que é apenas o script anterior sem o print e com um delay maior no regen de stamina.

Agora foi! Eu que errei em uma configuração aqui!

Só tem um problema, quando o player sai e entra denovo no slot ele adiciona. Ou seja, quando ele fica entrando e saindo a stamina sobe sem contar os 60 * 1000.

Muito obrigado pela ajuda desde já!

 

Att,
Grafit.

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

Muito obrigado pela sua ajuda, mas já consegui com o que o elwyn postou!! 

 

 

Agora foi! Eu que errei em uma configuração aqui!

Só tem um problema, quando o player sai e entra denovo no slot ele adiciona. Ou seja, quando ele fica entrando e saindo a stamina sobe sem contar os 60 * 1000.

Muito obrigado pela ajuda desde já!

 

 

eventsId = {}

local function rechargeStamina(cid)
    if not isPlayer(cid) then
        eventsId[cid] = nil
        return
    end

    doPlayerSetStamina(cid, getPlayerStamina(cid) + 1)

    eventsId[cid] = addEvent(rechargeStamina, 60 * 1000, cid)
end

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if isPlayer(cid) then
        eventsId[cid] = addEvent(rechargeStamina, 60 * 1000, cid)
    end

    return true
end

function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if isPlayer(cid) then
        stopEvent(eventsId[cid])
        eventsId[cid] = nil
    end

    return true
end

 

Agora ele só adicionará a cada minuto.

Link para o post
Compartilhar em outros sites

Tudo bem, sem problemas.

Vou apenas pedir para que selecione como Melhor Resposta para que o tópico receba a tag de Resolvido.

 

Abraços e boa sorte com seu projeto.

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

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites
eventsId = {}

local function rechargeStamina(cid)
    if not isPlayer(cid) then
        eventsId[cid] = nil
        return
    end

    doPlayerSetStamina(cid, getPlayerStamina(cid) + 1)

    eventsId[cid] = addEvent(rechargeStamina, 60 * 1000, cid)
end

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if isPlayer(cid) then
        eventsId[cid] = addEvent(rechargeStamina, 60 * 1000, cid)
    end

    return true
end

function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if isPlayer(cid) then
        stopEvent(eventsId[cid])
        eventsId[cid] = nil
    end

    return true
end

Agora ele só adicionará a cada minuto.

 

Ok, agora está tudo funcionando certo!

Só uma dúvida, vai adicionar a stamina a cada um minuto a partir do momento que ele pisa no tile certo? quando ele pisar vai começar a contagem no caso.

Obrigado pela ajuda de todos!!

Att,
Grafit.

Link para o post
Compartilhar em outros sites

Ok, agora está tudo funcionando certo!

Só uma dúvida, vai adicionar a stamina a cada um minuto a partir do momento que ele pisa no tile certo? quando ele pisar vai começar a contagem no caso.

Obrigado pela ajuda de todos!!

 

Sim, quando ele pisar no tile, um minuto depois ele vai ganhar um de stamina e assim por diante. Isso enquanto estiver no tile, se ele sair, cancela.

Por exemplo, ele pisou, começou a contagem, faltando 1s pra receber a stamina ele sai. Vai cancelar e ele não vai receber stamina.

Link para o post
Compartilhar em outros sites

Sim, quando ele pisar no tile, um minuto depois ele vai ganhar um de stamina e assim por diante. Isso enquanto estiver no tile, se ele sair, cancela.

Por exemplo, ele pisou, começou a contagem, faltando 1s pra receber a stamina ele sai. Vai cancelar e ele não vai receber stamina.

Muito obrigado!

Exatamente como eu queria

Att,
Grafit.

Link para o post
Compartilhar em outros sites
  • 2 years later...
On 25/1/2015 at 10:12 PM, Adriano SwaTT said:

Teste este:

Registre em movements.xml as tags abaixo:

 


<movevent type="StepIn" actionid="12129" event="script" value="tile_stamina.lua"/>
    <movevent type="StepOut" actionid="12129" event="script" value="tile_stamina.lua"/>

 

Crie o arquivo tile_stamina.lua e cole o código abaixo dentro:

 


---------- Script by: Adriano Swatt --------
local maxstamina = 2520  -- quantidade máxima de Stamina (Não sei se é este valor mesmo)
local qtdd = 1 -- quantidade de Stamina é adicionada
local tempo = 5 -- em segundos para cada regeneração
local tileid, action = 412, 12129 -- ID do Piso de Stamina, ActionID usada no Piso
----------- FIM DAS CONFIGURAÇÕES -----------

function onStepIn(cid, item, position, fromPosition)
local getpos = getPlayerPosition(cid)
local tilepos = getTileItemById(getpos, tileid).actionid
local getsta = getPlayerStamina(cid)

    if getsta < maxstamina and isPlayer(cid) then
        addEvent(GetStamina, 100, cid)
    else
        doTeleportThing(cid, fromPosition)
        doPlayerSendCancel(cid, "Sua stamina já está cheia.")
    end
return true
end

function onStepOut(cid, item, position, fromPosition)
    stopEvent(GetStamina)
return true
end

function GetStamina(cid)
local getpos = getPlayerPosition(cid)
local tilepos = getTileItemById(getpos, tileid).actionid
local getsta = getPlayerStamina(cid)

    if tilepos == action then    
        if getsta < maxstamina and isPlayer(cid) then
            doPlayerSendCancel(cid, "Sua stamina está subindo.")
            setPlayerStamina(cid, getsta + qtdd)
            addEvent(GetStamina, tempo * 1000, cid)
        else
            doTeleportThing(cid, fromPosition)
            doPlayerSendCancel(cid, "Sua stamina já está cheia.")
        end
    end
return true
end

 

Poste o resultado.

Boa sorte.

 

brigado pra mi deu certo :D

Link para o post
Compartilhar em outros sites
  • 2 years later...
Em 26/01/2015 em 15:25, Elwyn disse:

 

Sim, quando ele pisar no tile, um minuto depois ele vai ganhar um de stamina e assim por diante. Isso enquanto estiver no tile, se ele sair, cancela.

Por exemplo, ele pisou, começou a contagem, faltando 1s pra receber a stamina ele sai. Vai cancelar e ele não vai receber stamina.

 

 

Galera, desculpa reviver o tópico, mas estou precisando de uma força... a script funcionou, mas quando o player sai do tile não para de subir a stamina..

 

Poderiam dar uma força?

 

TFS 1.3 versão 12.

 

Valeu

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