Ir para conteúdo
  • Cadastre-se

Storage Temporaria Em Spell


Ir para solução Resolvido por L3K0T,

Posts Recomendados

.Qual servidor ou website você utiliza como base? 

tfs 0.3.6

Qual o motivo deste tópico? 

tentando colocar storage temporaria de 3 min

Está surgindo algum erro? Se sim coloque-o aqui. 

Citar

 

então rapaziada ja tentei colocar pra setar 1 na storage 55512, eu até  consegui mas, eu queria q depois q a spell acabasse voltasse pra 0 ou -1 que é o valor normal de todas storages do meu servidor não sei se teria como, abaixo a function da spell.

estou com um problema q a spell ela muda a outfit do player e no caso estou querendo setar uma storage para o player não poder usar a talkaction que muda de roupa, no caso !saga.

Você tem o código disponível? Se tiver publique-o aqui: 

function onCastSpell(cid, var)
local waittime = 310 -- Tempo de exhaustion
local storage = 55512 -- não mecha
if getPlayerStorageValue(cid, storage) > 0 then
if exhaustion.check(cid, storage) then
doPlayerSendCancel(cid, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.")
end
return false
end 
	if (not isCreature(cid)) then
		return false
	end
	exhaustion.set(cid, storage, waittime)
	setPlayerStorageValue(cid,storage,1)
	if getCreatureCondition(cid, CONDITION_ATTRIBUTES, 50) == false and getCreatureCondition(cid, CONDITION_HASTE, 51) == false and getCreatureCondition(cid, CONDITION_REGENERATION, 52) == false then
		OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
		return true
	else
		doPlayerSendCancel(cid, "Você já esta transformado.")
	end
	return true
end

 

Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 

 

Editado por Gabrielx17 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Sub-Admin
Em 10/04/2024 em 18:59, Gabrielx17 disse:

.Qual servidor ou website você utiliza como base? 

tfs 0.3.6

Qual o motivo deste tópico? 

tentando colocar storage temporaria de 3 min

Está surgindo algum erro? Se sim coloque-o aqui. 

então rapaziada ja tentei colocar pra setar 1 na storage 55512, eu até  consegui mas, eu queria q depois q a spell acabasse voltasse pra 0 ou -1 que é o valor normal de todas storages do meu servidor não sei se teria como, abaixo a function da spell.

estou com um problema q a spell ela muda a outfit do player e no caso estou querendo setar uma storage para o player não poder usar a talkaction que muda de roupa, no caso !saga.

Você tem o código disponível? Se tiver publique-o aqui: 


function onCastSpell(cid, var)
local waittime = 310 -- Tempo de exhaustion
local storage = 55512 -- não mecha
if getPlayerStorageValue(cid, storage) > 0 then
if exhaustion.check(cid, storage) then
doPlayerSendCancel(cid, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.")
end
return false
end 
	if (not isCreature(cid)) then
		return false
	end
	exhaustion.set(cid, storage, waittime)
	setPlayerStorageValue(cid,storage,1)
	if getCreatureCondition(cid, CONDITION_ATTRIBUTES, 50) == false and getCreatureCondition(cid, CONDITION_HASTE, 51) == false and getCreatureCondition(cid, CONDITION_REGENERATION, 52) == false then
		OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
		return true
	else
		doPlayerSendCancel(cid, "Você já esta transformado.")
	end
	return true
end

 

Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 

 

function onCastSpell(cid, var)
    local waittime = 310 -- Tempo de exhaustion
    local storage = 55512 -- Storage para controlar a spell

    -- Verificar se o jogador já usou a spell
    if getPlayerStorageValue(cid, storage) > 0 then
        if exhaustion.check(cid, storage) then
            doPlayerSendCancel(cid, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.")
        end
        return false
    end 


    if (not isCreature(cid)) then
        return false
    end

 
    exhaustion.set(cid, storage, waittime)
    

    setPlayerStorageValue(cid, storage, 1)


    if not (getCreatureCondition(cid, CONDITION_ATTRIBUTES, 50) or getCreatureCondition(cid, CONDITION_HASTE, 51) or getCreatureCondition(cid, CONDITION_REGENERATION, 52)) then

        OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
        return true
    else

        doPlayerSendCancel(cid, "Você já está transformado.")
        return false
    end
end

 

 

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

 

Link para o post
Compartilhar em outros sites
17 horas atrás, L3K0T disse:


function onCastSpell(cid, var)
    local waittime = 310 -- Tempo de exhaustion
    local storage = 55512 -- Storage para controlar a spell

    -- Verificar se o jogador já usou a spell
    if getPlayerStorageValue(cid, storage) > 0 then
        if exhaustion.check(cid, storage) then
            doPlayerSendCancel(cid, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.")
        end
        return false
    end 


    if (not isCreature(cid)) then
        return false
    end

 
    exhaustion.set(cid, storage, waittime)
    

    setPlayerStorageValue(cid, storage, 1)


    if not (getCreatureCondition(cid, CONDITION_ATTRIBUTES, 50) or getCreatureCondition(cid, CONDITION_HASTE, 51) or getCreatureCondition(cid, CONDITION_REGENERATION, 52)) then

        OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
        return true
    else

        doPlayerSendCancel(cid, "Você já está transformado.")
        return false
    end
end

 

sobre o script, tipo eu queria q depois q acabasse a spell voltasse pra -1 ou para 0 a storage pode ser qualquer um dos dois 0 ou -1, não sei se teria como. é uma spell de buff.

vejo q você sempre esta ajudando aqui no TK inclusive ja me ajudou muito, não vejo ninguem mais ajudando alem de voce. vou deixar meu rep+ pra voce, sempre ta online ajudando a comunidade, vc é minha esperança😄.

Editado por Gabrielx17 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Sub-Admin
  • Solução
19 minutos atrás, Gabrielx17 disse:

sobre o script, tipo eu queria q depois q acabasse a spell voltasse pra -1 ou para 0 a storage pode ser qualquer um dos dois 0 ou -1, não sei se teria como. é uma spell de buff.

vejo q você sempre esta ajudando aqui no TK inclusive ja me ajudou muito, não vejo ninguem mais ajudando alem de voce. vou deixar meu rep+ pra voce, sempre ta online ajudando a comunidade, vc é minha esperança😄.

function onCastSpell(cid, var)
    local waittime = 310 -- Tempo de exhaustion
    local storage = 55512 -- Storage para controlar a spell

    -- Verificar se o jogador já usou a spell
    if getPlayerStorageValue(cid, storage) > 0 then
        if exhaustion.check(cid, storage) then
            doPlayerSendCancel(cid, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.")
        end
        return false
    end 

    if not isCreature(cid) then
        return false
    end

    exhaustion.set(cid, storage, waittime)
    setPlayerStorageValue(cid, storage, 1)

    if not (getCreatureCondition(cid, CONDITION_ATTRIBUTES, 50) or getCreatureCondition(cid, CONDITION_HASTE, 51) or getCreatureCondition(cid, CONDITION_REGENERATION, 52)) then
        OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
        
        -- Definir a storage de volta para -1 ou 0 após o término do efeito da spell
        addEvent(function()
            setPlayerStorageValue(cid, storage, -1) -- Pode ser -1 ou 0 aqui
        end, waittime * 1000) -- Convertendo segundos para milissegundos
        
        return true
    else
        doPlayerSendCancel(cid, "Você já está transformado.")
        return false
    end
end

 

 

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

 

Link para o post
Compartilhar em outros sites
20 minutos atrás, L3K0T disse:





function onCastSpell(cid, var)
    local waittime = 310 -- Tempo de exhaustion
    local storage = 55512 -- Storage para controlar a spell

    -- Verificar se o jogador já usou a spell
    if getPlayerStorageValue(cid, storage) > 0 then
        if exhaustion.check(cid, storage) then
            doPlayerSendCancel(cid, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.")
        end
        return false
    end 

    if not isCreature(cid) then
        return false
    end

    exhaustion.set(cid, storage, waittime)
    setPlayerStorageValue(cid, storage, 1)

    if not (getCreatureCondition(cid, CONDITION_ATTRIBUTES, 50) or getCreatureCondition(cid, CONDITION_HASTE, 51) or getCreatureCondition(cid, CONDITION_REGENERATION, 52)) then
        OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
        
        -- Definir a storage de volta para -1 ou 0 após o término do efeito da spell
        addEvent(function()
            setPlayerStorageValue(cid, storage, -1) -- Pode ser -1 ou 0 aqui
        end, waittime * 1000) -- Convertendo segundos para milissegundos
        
        return true
    else
        doPlayerSendCancel(cid, "Você já está transformado.")
        return false
    end
end

 

--ultimo edit--

obrigado mano funcionou perfeitamente vc é fera!!!

20 minutos atrás, L3K0T disse:


function onCastSpell(cid, var)
    local waittime = 310 -- Tempo de exhaustion
    local storage = 55512 -- Storage para controlar a spell

    -- Verificar se o jogador já usou a spell
    if getPlayerStorageValue(cid, storage) > 0 then
        if exhaustion.check(cid, storage) then
            doPlayerSendCancel(cid, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.")
        end
        return false
    end 

    if not isCreature(cid) then
        return false
    end

    exhaustion.set(cid, storage, waittime)
    setPlayerStorageValue(cid, storage, 1)

    if not (getCreatureCondition(cid, CONDITION_ATTRIBUTES, 50) or getCreatureCondition(cid, CONDITION_HASTE, 51) or getCreatureCondition(cid, CONDITION_REGENERATION, 52)) then
        OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
        
        -- Definir a storage de volta para -1 ou 0 após o término do efeito da spell
        addEvent(function()
            setPlayerStorageValue(cid, storage, -1) -- Pode ser -1 ou 0 aqui
        end, waittime * 1000) -- Convertendo segundos para milissegundos
        
        return true
    else
        doPlayerSendCancel(cid, "Você já está transformado.")
        return false
    end
end

 

uma pergunta eu consigo usar esse addevent para setar storage em etapas? tipo:

storage 55512 = 1 por 20 segundos

storage 55512 = 2 por 30 segundos

storage 55512 = 3 por 40 segundos

no caso seria quando o player usar a spell

tipo usei spell susano(buff)

ai no momento q eu usei daria 55512 = 1 por 20 segundos

ai acabando os 20 segundos:

ja iria pra storage 55512 = 2 por 30 segundos

e acabando os 30 segundos:

 55512 = 3 por 40 segundos

Editado por Gabrielx17 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Sub-Admin
1 hora atrás, Gabrielx17 disse:

--ultimo edit--

obrigado mano funcionou perfeitamente vc é fera!!!

uma pergunta eu consigo usar esse addevent para setar storage em etapas? tipo:

storage 55512 = 1 por 20 segundos

storage 55512 = 2 por 30 segundos

storage 55512 = 3 por 40 segundos

no caso seria quando o player usar a spell

tipo usei spell susano(buff)

ai no momento q eu usei daria 55512 = 1 por 20 segundos

ai acabando os 20 segundos:

ja iria pra storage 55512 = 2 por 30 segundos

e acabando os 30 segundos:

 55512 = 3 por 40 segundos

function onCastSpell(cid, var)
    local storage = 55512 -- Storage para controlar a spell
    local stage = getPlayerStorageValue(cid, storage) or 0 -- Obtém o estágio atual da spell, se não houver nenhum, assume 0
    local waittimes = {20, 30, 40} -- Tempos de espera para cada estágio em segundos
    
  
    if stage > 0 then
        doPlayerSendCancel(cid, "Você já está sob o efeito da spell.")
        return false
    end 

    if not isCreature(cid) then
        return false
    end

    -- Definir o estágio inicial da spell
    setPlayerStorageValue(cid, storage, 1)
    stage = 1

    -- Função para avançar para o próximo estágio após o término do atual
    local function advanceStage()
        if stage < #waittimes then
            stage = stage + 1
            setPlayerStorageValue(cid, storage, stage)
            -- Programar o próximo avanço de estágio
            addEvent(advanceStage, waittimes[stage] * 1000)
        else
            -- Resetar a storage quando todos os estágios terminarem
            setPlayerStorageValue(cid, storage, -1)
        end
    end

    -- Iniciar o avanço de estágio
    addEvent(advanceStage, waittimes[stage] * 1000)


    -- Definir a exhaustion e aplicar os efeitos iniciais da spell
    local waittime = waittimes[1] -- Definir o tempo de exhaustion baseado no primeiro estágio
    exhaustion.set(cid, storage, waittime)
    OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
    
    -- Definir a storage de volta para -1 após o término do efeito da spell
    addEvent(function()
        setPlayerStorageValue(cid, storage, -1)
    end, waittime * 1000) -- Convertendo segundos para milissegundos
    
    return true
end

 

 

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

 

Link para o post
Compartilhar em outros sites
57 minutos atrás, L3K0T disse:








function onCastSpell(cid, var)
    local storage = 55512 -- Storage para controlar a spell
    local stage = getPlayerStorageValue(cid, storage) or 0 -- Obtém o estágio atual da spell, se não houver nenhum, assume 0
    local waittimes = {20, 30, 40} -- Tempos de espera para cada estágio em segundos
    
  
    if stage > 0 then
        doPlayerSendCancel(cid, "Você já está sob o efeito da spell.")
        return false
    end 

    if not isCreature(cid) then
        return false
    end

    -- Definir o estágio inicial da spell
    setPlayerStorageValue(cid, storage, 1)
    stage = 1

    -- Função para avançar para o próximo estágio após o término do atual
    local function advanceStage()
        if stage < #waittimes then
            stage = stage + 1
            setPlayerStorageValue(cid, storage, stage)
            -- Programar o próximo avanço de estágio
            addEvent(advanceStage, waittimes[stage] * 1000)
        else
            -- Resetar a storage quando todos os estágios terminarem
            setPlayerStorageValue(cid, storage, -1)
        end
    end

    -- Iniciar o avanço de estágio
    addEvent(advanceStage, waittimes[stage] * 1000)


    -- Definir a exhaustion e aplicar os efeitos iniciais da spell
    local waittime = waittimes[1] -- Definir o tempo de exhaustion baseado no primeiro estágio
    exhaustion.set(cid, storage, waittime)
    OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
    
    -- Definir a storage de volta para -1 após o término do efeito da spell
    addEvent(function()
        setPlayerStorageValue(cid, storage, -1)
    end, waittime * 1000) -- Convertendo segundos para milissegundos
    
    return true
end

 

Perfeito mano dei uma ajeitada aqui consegui!

Obrigado voce é zika 

rep+ pra voce até eu n puder mais!

Na verdade eu so não consegui uma coisa, quando o player desloga ou morre ele n consegue mais usar a spell pq fica setada em um numero e não volta qnd morre ou desloga se conseguir dar uma força ai agradeço ta me ajudando pra caramba kkkk so tenho a te agradecer!

57 minutos atrás, L3K0T disse:



function onCastSpell(cid, var)
    local storage = 55512 -- Storage para controlar a spell
    local stage = getPlayerStorageValue(cid, storage) or 0 -- Obtém o estágio atual da spell, se não houver nenhum, assume 0
    local waittimes = {20, 30, 40} -- Tempos de espera para cada estágio em segundos
    
  
    if stage > 0 then
        doPlayerSendCancel(cid, "Você já está sob o efeito da spell.")
        return false
    end 

    if not isCreature(cid) then
        return false
    end

    -- Definir o estágio inicial da spell
    setPlayerStorageValue(cid, storage, 1)
    stage = 1

    -- Função para avançar para o próximo estágio após o término do atual
    local function advanceStage()
        if stage < #waittimes then
            stage = stage + 1
            setPlayerStorageValue(cid, storage, stage)
            -- Programar o próximo avanço de estágio
            addEvent(advanceStage, waittimes[stage] * 1000)
        else
            -- Resetar a storage quando todos os estágios terminarem
            setPlayerStorageValue(cid, storage, -1)
        end
    end

    -- Iniciar o avanço de estágio
    addEvent(advanceStage, waittimes[stage] * 1000)


    -- Definir a exhaustion e aplicar os efeitos iniciais da spell
    local waittime = waittimes[1] -- Definir o tempo de exhaustion baseado no primeiro estágio
    exhaustion.set(cid, storage, waittime)
    OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
    
    -- Definir a storage de volta para -1 após o término do efeito da spell
    addEvent(function()
        setPlayerStorageValue(cid, storage, -1)
    end, waittime * 1000) -- Convertendo segundos para milissegundos
    
    return true
end

 

Spoiler

function onCastSpell(cid, var)
    local storage = 55512 -- Storage para controlar a spell
    local stage = getPlayerStorageValue(cid, storage) or 0 -- Obtém o estágio atual da spell, se não houver nenhum, assume 0
    local waittimes = {30, 30, 40, 50, 60} -- Tempos de espera para cada estágio em segundos
    local storage2 = 55513
    local waittime3 = 310
  
    if exhaustion.check(cid, storage2) then
    doPlayerSendCancel(cid, "Aguarde " .. exhaustion.get(cid, storage2) .. " segundos para usar a spell novamente.")
    return false
    end
  
      if not isCreature(cid) then
        return false
    end
  
    if stage > 0 then
        doPlayerSendCancel(cid, "Você já está sob o efeito da spell.")
        return false
    end 

    -- Definir o estágio inicial da spell
    setPlayerStorageValue(cid, storage, 1)
    stage = 1

    -- Função para avançar para o próximo estágio após o término do atual
    local function advanceStage()
        if stage < #waittimes then
            stage = stage + 1
            setPlayerStorageValue(cid, storage, stage)
            -- Programar o próximo avanço de estágio
            addEvent(advanceStage, waittimes[stage] * 1000)
        else
            -- Resetar a storage quando todos os estágios terminarem
            setPlayerStorageValue(cid, storage, -1)
        end
    end

    -- Iniciar o avanço de estágio
    addEvent(advanceStage, waittimes[stage] * 1000)


    -- Definir a exhaustion e aplicar os efeitos iniciais da spell
    local waittime = waittimes[1] -- Definir o tempo de exhaustion baseado no primeiro estágio
    exhaustion.set(cid, storage2, waittime3)
    OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
    
    -- Definir a storage de volta para -1 após o término do efeito da spell
    addEvent(function()
        setPlayerStorageValue(cid, storage, -1)
    end, waittime * 1000) -- Convertendo segundos para milissegundos
    
    return true
end

eu deixei assim e ta funcionando perfeitamente aqui, os unicos problemas são o loggout, caso se o player morrer ou deslogar durante a spell(buff), ele fica impossibilitado de usar a spell(buff)

tem como dar uma força?

Editado por Gabrielx17 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Sub-Admin
47 minutos atrás, Gabrielx17 disse:

Perfeito mano dei uma ajeitada aqui consegui!

Obrigado voce é zika 

rep+ pra voce até eu n puder mais!

Na verdade eu so não consegui uma coisa, quando o player desloga ou morre ele n consegue mais usar a spell pq fica setada em um numero e não volta qnd morre ou desloga se conseguir dar uma força ai agradeço ta me ajudando pra caramba kkkk so tenho a te agradecer!

  Mostrar conteúdo oculto

function onCastSpell(cid, var)
    local storage = 55512 -- Storage para controlar a spell
    local stage = getPlayerStorageValue(cid, storage) or 0 -- Obtém o estágio atual da spell, se não houver nenhum, assume 0
    local waittimes = {30, 30, 40, 50, 60} -- Tempos de espera para cada estágio em segundos
    local storage2 = 55513
    local waittime3 = 310
  
    if exhaustion.check(cid, storage2) then
    doPlayerSendCancel(cid, "Aguarde " .. exhaustion.get(cid, storage2) .. " segundos para usar a spell novamente.")
    return false
    end
  
      if not isCreature(cid) then
        return false
    end
  
    if stage > 0 then
        doPlayerSendCancel(cid, "Você já está sob o efeito da spell.")
        return false
    end 

    -- Definir o estágio inicial da spell
    setPlayerStorageValue(cid, storage, 1)
    stage = 1

    -- Função para avançar para o próximo estágio após o término do atual
    local function advanceStage()
        if stage < #waittimes then
            stage = stage + 1
            setPlayerStorageValue(cid, storage, stage)
            -- Programar o próximo avanço de estágio
            addEvent(advanceStage, waittimes[stage] * 1000)
        else
            -- Resetar a storage quando todos os estágios terminarem
            setPlayerStorageValue(cid, storage, -1)
        end
    end

    -- Iniciar o avanço de estágio
    addEvent(advanceStage, waittimes[stage] * 1000)


    -- Definir a exhaustion e aplicar os efeitos iniciais da spell
    local waittime = waittimes[1] -- Definir o tempo de exhaustion baseado no primeiro estágio
    exhaustion.set(cid, storage2, waittime3)
    OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
    
    -- Definir a storage de volta para -1 após o término do efeito da spell
    addEvent(function()
        setPlayerStorageValue(cid, storage, -1)
    end, waittime * 1000) -- Convertendo segundos para milissegundos
    
    return true
end

eu deixei assim e ta funcionando perfeitamente aqui, os unicos problemas são o loggout, caso se o player morrer ou deslogar durante a spell(buff), ele fica impossibilitado de usar a spell(buff)

tem como dar uma força?


    local storage = 55512 -- Storage para controlar a spell
    local stage = getPlayerStorageValue(cid, storage)
    if stage and stage > 0 then
        local waittimes = {20, 30, 40, 50} -- Tempos de espera para cada estágio em segundos
        local remainingTime = (waittimes[stage] - (os.time() - getPlayerStorageValue(cid, storage .. "time"))) -- Tempo restante em segundos
        if remainingTime > 0 then
            addEvent(function()
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você está sob o efeito do estágio " .. stage .. " da spell.")
            end, 1000)
            addEvent(function()
                setPlayerStorageValue(cid, storage, -1)
            end, remainingTime * 1000) -- Definir a storage de volta para -1 após o término do efeito da spell
        end
    end

coloca no login.lua ^^^^^^^

function onCastSpell(cid, var)
    local storage = 55512 -- Storage para controlar a spell
    local stage = getPlayerStorageValue(cid, storage) or 0 -- Obtém o estágio atual da spell, se não houver nenhum, assume 0
    local waittimes = {20, 30, 40, 50} -- Tempos de espera para cada estágio em segundos
    
    -- Verificar se o jogador já usou a spell
    if stage > 0 then
        doPlayerSendCancel(cid, "Você já está sob o efeito da spell.")
        return false
    end 

    if not isCreature(cid) then
        return false
    end

    -- Definir o estágio inicial da spell
    setPlayerStorageValue(cid, storage, 1)
    stage = 1

    local function advanceStage()
        if isPlayerLoggedIn(cid) then -- Verificar se o jogador está logado antes de avançar de estágio
            if stage < #waittimes then
                stage = stage + 1
                setPlayerStorageValue(cid, storage, stage)
                -- Programar o próximo avanço de estágio
                addEvent(advanceStage, waittimes[stage] * 1000)
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você avançou para o estágio " .. stage .. " da spell.")
            else
                -- Resetar a storage quando todos os estágios terminarem
                setPlayerStorageValue(cid, storage, -1)
            end
        else
            -- O jogador desconectou, interromper o avanço de estágio
            setPlayerStorageValue(cid, storage, stage) -- Salvar o estágio atual
        end
    end


    addEvent(advanceStage, waittimes[stage] * 1000)




    local waittime = waittimes[1] -- Definir o tempo de exhaustion baseado no primeiro estágio
    exhaustion.set(cid, storage, waittime)
    OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
    doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você está sob o efeito do estágio 1 da spell.")
    

    addEvent(function()
        setPlayerStorageValue(cid, storage, -1)
    end, waittime * 1000) -- Convertendo segundos para milissegundos
    
    return true
end

spells.luaa ^^

 

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

 

Link para o post
Compartilhar em outros sites
45 minutos atrás, L3K0T disse:



    local storage = 55512 -- Storage para controlar a spell
    local stage = getPlayerStorageValue(cid, storage)
    if stage and stage > 0 then
        local waittimes = {20, 30, 40, 50} -- Tempos de espera para cada estágio em segundos
        local remainingTime = (waittimes[stage] - (os.time() - getPlayerStorageValue(cid, storage .. "time"))) -- Tempo restante em segundos
        if remainingTime > 0 then
            addEvent(function()
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você está sob o efeito do estágio " .. stage .. " da spell.")
            end, 1000)
            addEvent(function()
                setPlayerStorageValue(cid, storage, -1)
            end, remainingTime * 1000) -- Definir a storage de volta para -1 após o término do efeito da spell
        end
    end

coloca no login.lua ^^^^^^^



function onCastSpell(cid, var)
    local storage = 55512 -- Storage para controlar a spell
    local stage = getPlayerStorageValue(cid, storage) or 0 -- Obtém o estágio atual da spell, se não houver nenhum, assume 0
    local waittimes = {20, 30, 40, 50} -- Tempos de espera para cada estágio em segundos
    
    -- Verificar se o jogador já usou a spell
    if stage > 0 then
        doPlayerSendCancel(cid, "Você já está sob o efeito da spell.")
        return false
    end 

    if not isCreature(cid) then
        return false
    end

    -- Definir o estágio inicial da spell
    setPlayerStorageValue(cid, storage, 1)
    stage = 1

    local function advanceStage()
        if isPlayerLoggedIn(cid) then -- Verificar se o jogador está logado antes de avançar de estágio
            if stage < #waittimes then
                stage = stage + 1
                setPlayerStorageValue(cid, storage, stage)
                -- Programar o próximo avanço de estágio
                addEvent(advanceStage, waittimes[stage] * 1000)
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você avançou para o estágio " .. stage .. " da spell.")
            else
                -- Resetar a storage quando todos os estágios terminarem
                setPlayerStorageValue(cid, storage, -1)
            end
        else
            -- O jogador desconectou, interromper o avanço de estágio
            setPlayerStorageValue(cid, storage, stage) -- Salvar o estágio atual
        end
    end


    addEvent(advanceStage, waittimes[stage] * 1000)




    local waittime = waittimes[1] -- Definir o tempo de exhaustion baseado no primeiro estágio
    exhaustion.set(cid, storage, waittime)
    OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
    doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você está sob o efeito do estágio 1 da spell.")
    

    addEvent(function()
        setPlayerStorageValue(cid, storage, -1)
    end, waittime * 1000) -- Convertendo segundos para milissegundos
    
    return true
end

spells.luaa ^^

[12/04/2024 22:20:31] [Error - Spell Interface] 
[12/04/2024 22:20:31] In a timer event called from: 
[12/04/2024 22:20:31] data/spells/scripts/maito gai/hachimon_tonkou.lua:onCastSpell
[12/04/2024 22:20:31] Description: 
[12/04/2024 22:20:31] data/spells/scripts/maito gai/hachimon_tonkou.lua:209: attempt to call global 'isPlayerLoggedIn' (a nil value)
[12/04/2024 22:20:31] stack traceback:
[12/04/2024 22:20:31]     data/spells/scripts/maito gai/hachimon_tonkou.lua:209: in function <data/spells/scripts/maito gai/hachimon_tonkou.lua:208>

 

da esse erro na distro e esta setando somente a primeira storage (1) o resto fica tudo -1 -1 -1 -1

Editado por Gabrielx17 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Sub-Admin
7 horas atrás, Gabrielx17 disse:

[12/04/2024 22:20:31] [Error - Spell Interface] 
[12/04/2024 22:20:31] In a timer event called from: 
[12/04/2024 22:20:31] data/spells/scripts/maito gai/hachimon_tonkou.lua:onCastSpell
[12/04/2024 22:20:31] Description: 
[12/04/2024 22:20:31] data/spells/scripts/maito gai/hachimon_tonkou.lua:209: attempt to call global 'isPlayerLoggedIn' (a nil value)
[12/04/2024 22:20:31] stack traceback:
[12/04/2024 22:20:31]     data/spells/scripts/maito gai/hachimon_tonkou.lua:209: in function <data/spells/scripts/maito gai/hachimon_tonkou.lua:208>

 

da esse erro na distro e esta setando somente a primeira storage (1) o resto fica tudo -1 -1 -1 -1

 

 

logout:
 

local storage = 55512 -- Storage para controlar a spell
    local stages = {20, 30, 40} -- Tempos de duração para cada estágio em segundos
    local remainingTime = exhaustion.get(cid, storage) -- Obtém o tempo restante da spell

    local stage = 1

    for i, stageDuration in ipairs(stages) do
        if remainingTime <= stageDuration then
            stage = i
            break
        end
        remainingTime = remainingTime - stageDuration
    end

    -- Salva o estágio e o tempo restante da spell no storage do jogador
    setPlayerStorageValue(cid, storage, stage)
    exhaustion.set(cid, storage, remainingTime)

 

 

login
 

local storage = 55512 -- Storage para controlar a spell
    local stages = {20, 30, 40} -- Tempos de duração para cada estágio em segundos
    local remainingTime = getPlayerStorageValue(cid, storage) or 0 -- Obtém o tempo restante da spell do storage

    local stage = 1
    -- Determina o estágio com base no tempo restante
    for i, stageDuration in ipairs(stages) do
        if remainingTime <= stageDuration then
            stage = i
            break
        end
        remainingTime = remainingTime - stageDuration
    end

    -- Restaura o estágio da spell para o jogador
    setPlayerStorageValue(cid, storage, stage)
    exhaustion.set(cid, storage, remainingTime)

 

 

spells

 

function onCastSpell(cid, var)
    local storage = 55512 -- Storage para controlar a spell
    local stage = getPlayerStorageValue(cid, storage) or 0 -- Obtém o estágio atual da spell, se não houver nenhum, assume 0
    local waittimes = {20, 30, 40} -- Tempos de espera para cada estágio em segundos
    
  
    if stage > 0 then
        doPlayerSendCancel(cid, "Você já está sob o efeito da spell.")
        return false
    end 

    if not isCreature(cid) then
        return false
    end

    -- Definir o estágio inicial da spell
    setPlayerStorageValue(cid, storage, 1)
    stage = 1

    -- Função para avançar para o próximo estágio após o término do atual
    local function advanceStage()
        if stage < #waittimes then
            stage = stage + 1
            setPlayerStorageValue(cid, storage, stage)
            -- Programar o próximo avanço de estágio
            addEvent(advanceStage, waittimes[stage] * 1000)
        else
            -- Resetar a storage quando todos os estágios terminarem
            setPlayerStorageValue(cid, storage, -1)
        end
    end

    -- Iniciar o avanço de estágio
    addEvent(advanceStage, waittimes[stage] * 1000)


    -- Definir a exhaustion e aplicar os efeitos iniciais da spell
    local waittime = waittimes[1] -- Definir o tempo de exhaustion baseado no primeiro estágio
    exhaustion.set(cid, storage, waittime)
    OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
    
    -- Definir a storage de volta para -1 após o término do efeito da spell
    addEvent(function()
        setPlayerStorageValue(cid, storage, -1)
    end, waittime * 1000) -- Convertendo segundos para milissegundos
    
    return true
end



 

 

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

 

Link para o post
Compartilhar em outros sites
7 horas atrás, L3K0T disse:

 

 

logout:
 




local storage = 55512 -- Storage para controlar a spell
    local stages = {20, 30, 40} -- Tempos de duração para cada estágio em segundos
    local remainingTime = exhaustion.get(cid, storage) -- Obtém o tempo restante da spell

    local stage = 1

    for i, stageDuration in ipairs(stages) do
        if remainingTime <= stageDuration then
            stage = i
            break
        end
        remainingTime = remainingTime - stageDuration
    end

    -- Salva o estágio e o tempo restante da spell no storage do jogador
    setPlayerStorageValue(cid, storage, stage)
    exhaustion.set(cid, storage, remainingTime)

 

 

login
 




local storage = 55512 -- Storage para controlar a spell
    local stages = {20, 30, 40} -- Tempos de duração para cada estágio em segundos
    local remainingTime = getPlayerStorageValue(cid, storage) or 0 -- Obtém o tempo restante da spell do storage

    local stage = 1
    -- Determina o estágio com base no tempo restante
    for i, stageDuration in ipairs(stages) do
        if remainingTime <= stageDuration then
            stage = i
            break
        end
        remainingTime = remainingTime - stageDuration
    end

    -- Restaura o estágio da spell para o jogador
    setPlayerStorageValue(cid, storage, stage)
    exhaustion.set(cid, storage, remainingTime)

 

 

spells

 




function onCastSpell(cid, var)
    local storage = 55512 -- Storage para controlar a spell
    local stage = getPlayerStorageValue(cid, storage) or 0 -- Obtém o estágio atual da spell, se não houver nenhum, assume 0
    local waittimes = {20, 30, 40} -- Tempos de espera para cada estágio em segundos
    
  
    if stage > 0 then
        doPlayerSendCancel(cid, "Você já está sob o efeito da spell.")
        return false
    end 

    if not isCreature(cid) then
        return false
    end

    -- Definir o estágio inicial da spell
    setPlayerStorageValue(cid, storage, 1)
    stage = 1

    -- Função para avançar para o próximo estágio após o término do atual
    local function advanceStage()
        if stage < #waittimes then
            stage = stage + 1
            setPlayerStorageValue(cid, storage, stage)
            -- Programar o próximo avanço de estágio
            addEvent(advanceStage, waittimes[stage] * 1000)
        else
            -- Resetar a storage quando todos os estágios terminarem
            setPlayerStorageValue(cid, storage, -1)
        end
    end

    -- Iniciar o avanço de estágio
    addEvent(advanceStage, waittimes[stage] * 1000)


    -- Definir a exhaustion e aplicar os efeitos iniciais da spell
    local waittime = waittimes[1] -- Definir o tempo de exhaustion baseado no primeiro estágio
    exhaustion.set(cid, storage, waittime)
    OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
    
    -- Definir a storage de volta para -1 após o término do efeito da spell
    addEvent(function()
        setPlayerStorageValue(cid, storage, -1)
    end, waittime * 1000) -- Convertendo segundos para milissegundos
    
    return true
end



 

[13/04/2024 12:53:52] Chaves has logged in.

[13/04/2024 12:53:52] [Error - CreatureScript Interface] 
[13/04/2024 12:53:52] data/creaturescripts/scripts/login.lua:onLogin
[13/04/2024 12:53:52] Description: 
[13/04/2024 12:53:52] data/creaturescripts/scripts/login.lua:58: attempt to compare boolean with number
[13/04/2024 12:53:52] stack traceback:
[13/04/2024 12:53:52]     data/creaturescripts/scripts/login.lua:58: in function <data/creaturescripts/scripts/login.lua:6>
[13/04/2024 12:53:52] Chaves has logged out.

 

coloquei as duas tags em login.lua ta certo?

o char nem loga e aparece esse erro ai na distro.

 

mano não teria um codigo pra colocar no login.lua que quando logasse tirasse essa storage de todos player? porque so vou usar essa spell pra esse buff de um personagem mesmo e se o cara deslogar e logar ele ja perderia o buff se fosse pra todos que logarem perder essa storage tava de boa porque so uma voc iria conseguir usar essa spell ele teria q esperar o tempo da spell voltar porque estou usando outra storage pra setar o tempo de usar a spell dnv, obrigado por dar uma atenção cara vc é fera!

facilitaria bem mais com o codigo de resetar essa storage toda vez que relogasse, morresse, etc. porque a spell ta funcionando perfeitamente do jeito q eu quero aqui o problema é so a storage que fica travado nos stages quando reloga,morre,etc.

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

Não há necessidade de fazer isso no onLogin e onLogout, pois, caso o jogador relogue ou morra, esse addvent é capaz de identificar o CID do jogador se ele estiver online. Nesse caso, ele passará pela storage para resetá-la, utilizando, por exemplo, setPlayerStorageValue(cid, 4000, 0), que é responsável por esse reset. O método mais apropriado é utilizar getPlayerGUID() em vez disso. Dessa forma, se desejar que o addEvent seja acionado no jogador mesmo após ele ter deslogado ou morrido, será necessário recriar o objeto do jogador de forma convencional, porém utilizando getPlayerGUID(). Além disso, o GUID é um identificador permanente. Assim, ao invés de utilizar isPlayer(cid), é recomendado utilizar getPlayerGUID(). Desta maneira, caso o jogador realize login e logout, e o evento adicional esteja ocorrendo, será possível recriar o objeto do jogador utilizando o GUID e encontrar o jogador novamente.

 

 

Sem usar esse método 'GUID', o addvent não consegue encontrar o jogador após a morte ou relogar. Isso poderia causar um crash no servidor.

 

 

 

 

function onCastSpell(cid, var)
    local storage = 55512 -- Storage para controlar a spell
    local stages = {
        {time = 20, value = 1}, -- 20 segundos, storage = 1
        {time = 30, value = 2}, -- 30 segundos adicionais, storage = 2
        {time = 40, value = 3}  -- 40 segundos adicionais, storage = 3
    }

    -- Verificar se o jogador já usou a spell
    if getPlayerStorageValue(cid, storage) > 0 then
        doPlayerSendCancel(cid, "Você já está sob o efeito da spell.")
        return false
    end 

    if not isCreature(cid) then
        return false
    end

    -- Função para alterar a storage e verificar se o jogador está online
    local function changeStorage(playerGUID, newValue, previousTime)
        local player = getPlayerByGUID(playerGUID)
        if player then
            setPlayerStorageValue(player, storage, newValue)
            if newValue == -1 then
                doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_BLUE, "O efeito da spell terminou.")
            end
        end
    end

    -- Obter o GUID do jogador
    local playerGUID = getPlayerGUID(cid)

    -- Definir a storage inicial
    setPlayerStorageValue(cid, storage, stages[1].value)

    -- Agendar as mudanças de storage
    local accumulatedTime = 0
    for i, stage in ipairs(stages) do
        accumulatedTime = accumulatedTime + stage.time
        addEvent(changeStorage, accumulatedTime * 1000, playerGUID, stage.value, accumulatedTime)
    end

    -- Agendar o reset da storage para o valor -1 após o último estágio
    accumulatedTime = accumulatedTime + stages[#stages].time
    addEvent(changeStorage, accumulatedTime * 1000, playerGUID, -1, accumulatedTime)

    return true
end

-- Função auxiliar para encontrar o jogador pelo GUID
function getPlayerByGUID(guid)
    for _, pid in ipairs(getPlayersOnline()) do
        if getPlayerGUID(pid) == guid then
            return pid
        end
    end
    return nil -- Jogador não encontrado ou offline
end

 

Editado por Mateus Robeerto (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
20 minutos atrás, Mateus Robeerto disse:

Não há necessidade de fazer isso no onLogin e onLogout, pois, caso o jogador relogue ou morra, esse addvent é capaz de identificar o CID do jogador se ele estiver online. Nesse caso, ele passará pela storage para resetá-la, utilizando, por exemplo, setPlayerStorageValue(cid, 4000, 0), que é responsável por esse reset. O método mais apropriado é utilizar getPlayerGUID() em vez disso. Dessa forma, se desejar que o addEvent seja acionado no jogador mesmo após ele ter deslogado ou morrido, será necessário recriar o objeto do jogador de forma convencional, porém utilizando getPlayerGUID(). Além disso, o GUID é um identificador permanente. Assim, ao invés de utilizar isPlayer(cid), é recomendado utilizar getPlayerGUID(). Desta maneira, caso o jogador realize login e logout, e o evento adicional esteja ocorrendo, será possível recriar o objeto do jogador utilizando o GUID e encontrar o jogador novamente.

 

 

Sem usar esse método 'GUID', o addvent não consegue encontrar o jogador após a morte ou relogar. Isso poderia causar um crash no servidor.

 

 

 

 


function onCastSpell(cid, var)
    local storage = 55512 -- Storage para controlar a spell
    local stages = {
        {time = 20, value = 1}, -- 20 segundos, storage = 1
        {time = 30, value = 2}, -- 30 segundos adicionais, storage = 2
        {time = 40, value = 3}  -- 40 segundos adicionais, storage = 3
    }

    -- Verificar se o jogador já usou a spell
    if getPlayerStorageValue(cid, storage) > 0 then
        doPlayerSendCancel(cid, "Você já está sob o efeito da spell.")
        return false
    end 

    if not isCreature(cid) then
        return false
    end

    -- Função para alterar a storage e verificar se o jogador está online
    local function changeStorage(playerGUID, newValue, previousTime)
        local player = getPlayerByGUID(playerGUID)
        if player then
            setPlayerStorageValue(player, storage, newValue)
            if newValue == -1 then
                doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_BLUE, "O efeito da spell terminou.")
            end
        end
    end

    -- Obter o GUID do jogador
    local playerGUID = getPlayerGUID(cid)

    -- Definir a storage inicial
    setPlayerStorageValue(cid, storage, stages[1].value)

    -- Agendar as mudanças de storage
    local accumulatedTime = 0
    for i, stage in ipairs(stages) do
        accumulatedTime = accumulatedTime + stage.time
        addEvent(changeStorage, accumulatedTime * 1000, playerGUID, stage.value, accumulatedTime)
    end

    -- Agendar o reset da storage para o valor -1 após o último estágio
    accumulatedTime = accumulatedTime + stages[#stages].time
    addEvent(changeStorage, accumulatedTime * 1000, playerGUID, -1, accumulatedTime)

    return true
end

-- Função auxiliar para encontrar o jogador pelo GUID
function getPlayerByGUID(guid)
    for _, pid in ipairs(getPlayersOnline()) do
        if getPlayerGUID(pid) == guid then
            return pid
        end
    end
    return nil -- Jogador não encontrado ou offline
end

 

funciona os stages de storage mas no caso como é uma spell de buff, o buff é cortado quando desloga ou morre, e o stages continuam, o certo seria os stages serem cortados juntos com os buffs da spell(voltar para -1 a storage caso morra ou deslogue).

e no caso cortou o buff e os efeitos, não esta dando os atributos que são: ml,fist,sword,club e axe.

vou deixar um codigo aqui pra vcs terem uma noção de como a spell estava funcionando certinho, porem tinha somente esse erro da storage não voltar a -1 quando morresse ou deslogasse, a storage ela continuava no ultimo stage tipo desloguei enquanto tava no stage3, o player continuava com a storage 55512=3.

 

Spoiler

function onCastSpell(cid, var)
    local storage = 55512 -- Storage para controlar a spell
    local stage = getPlayerStorageValue(cid, storage) or 0 -- Obtém o estágio atual da spell, se não houver nenhum, assume 0
    local waittimes = {30, 30, 40, 50, 60} -- Tempos de espera para cada estágio em segundos
    local storage2 = 55513
    local waittime3 = 310
  
    if exhaustion.check(cid, storage2) then
    doPlayerSendCancel(cid, "Aguarde " .. exhaustion.get(cid, storage2) .. " segundos para usar a spell novamente.")
    return false
    end
  
      if not isCreature(cid) then
        return false
    end
  
    if stage > 0 then
        doPlayerSendCancel(cid, "Você já está sob o efeito da spell.")
        return false
    end 

    -- Definir o estágio inicial da spell
    setPlayerStorageValue(cid, storage, 1)
    stage = 1

    -- Função para avançar para o próximo estágio após o término do atual
    local function advanceStage()
        if stage < #waittimes then
            stage = stage + 1
            setPlayerStorageValue(cid, storage, stage)
            -- Programar o próximo avanço de estágio
            addEvent(advanceStage, waittimes[stage] * 1000)
        else
            -- Resetar a storage quando todos os estágios terminarem
            setPlayerStorageValue(cid, storage, -1)
        end
    end

    -- Iniciar o avanço de estágio
    addEvent(advanceStage, waittimes[stage] * 1000)


    -- Definir a exhaustion e aplicar os efeitos iniciais da spell
    local waittime = waittimes[1] -- Definir o tempo de exhaustion baseado no primeiro estágio
    exhaustion.set(cid, storage2, waittime3)
    OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
    
    -- Definir a storage de volta para -1 após o término do efeito da spell
    addEvent(function()
        setPlayerStorageValue(cid, storage, -1)
    end, waittime * 1000) -- Convertendo segundos para milissegundos
    
    return true
end

ai no caso tem uma storage pra setar o tempo que o player vai poder usar a spell dnv

e outra storage que ira setar os stages.

Link para o post
Compartilhar em outros sites
function onCastSpell(cid, var)
    local waittime = 310 -- Tempo de exaustão
    local storage = 55512 -- Storage para controlar a spell
    local stages = {
        {time = 20, value = 1}, -- 20 segundos, storage = 1
        {time = 30, value = 2}, -- 30 segundos adicionais, storage = 2
        {time = 40, value = 3}  -- 40 segundos adicionais, storage = 3
    }

    if not isCreature(cid) then
        return false
    end

    -- Verificar se o jogador já usou a spell
    if getCreatureStorageValue(cid, storage) > 0 then
        doSendCancel(cid, "Você já está sob o efeito da spell.")
        return false
    end 

    -- Definir a exaustão e a storage inicial
    doSetExhaustion(cid, storage, waittime)
    setCreatureStorageValue(cid, storage, 1)

    -- Função para alterar a storage e verificar se o jogador está online
    local function changeStorage(cidGUID, newValue)
        local creature = getCreatureByGUID(cidGUID)
        if creature and isCreature(creature) then
            setCreatureStorageValue(creature, storage, newValue)
            if newValue == -1 then
                doSendTextMessage(creature, MESSAGE_STATUS_CONSOLE_BLUE, "O efeito da spell terminou.")
            else
                local creaturePos = getCreaturePosition(creature)
                for i = 1, 5 do
                    doSendMagicEffect(creaturePos, CONST_ME_FIREWORK_RED)
                end
                doSendTextMessage(creature, MESSAGE_INFO_DESCR, "Você recebeu os atributos ML, FIST, SWORD, CLUB e AXE!")
                doAddCondition(creature, createConditionObject(CONDITION_ATTRIBUTES, 60 * 1000, {
                    [CONDITION_PARAM_STAT_MAGICLEVEL] = 3,
                    [CONDITION_PARAM_STAT_MAXHITPOINTS] = 3,
                    [CONDITION_PARAM_STAT_MAXMANAPOINTS] = 3,
                    [CONDITION_PARAM_STAT_SOULPOINTS] = 3,
                    [CONDITION_PARAM_STAT_MAGICPOINTS] = 3
                }))
            end
        end
    end

    -- Obter o GUID do jogador
    local cidGUID = getPlayerGUID(cid)

    -- Agendar as mudanças de storage
    local accumulatedTime = 0
    for i, stage in ipairs(stages) do
        accumulatedTime = accumulatedTime + stage.time
        addEvent(changeStorage, accumulatedTime * 1000, cidGUID, stage.value)
    end

    -- Agendar o reset da storage para o valor -1 após o último estágio
    accumulatedTime = accumulatedTime + stages[#stages].time
    addEvent(changeStorage, accumulatedTime * 1000, cidGUID, -1)

    -- Verificar se o jogador já está transformado
    if not getCreatureCondition(cid, CONDITION_ATTRIBUTES) then
        OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
        return true
    else
        doSendCancel(cid, "Você já está transformado.")
        return false
    end
end

 

Link para o post
Compartilhar em outros sites
Em 14/04/2024 em 17:48, Mateus Robeerto disse:


function onCastSpell(cid, var)
    local waittime = 310 -- Tempo de exaustão
    local storage = 55512 -- Storage para controlar a spell
    local stages = {
        {time = 20, value = 1}, -- 20 segundos, storage = 1
        {time = 30, value = 2}, -- 30 segundos adicionais, storage = 2
        {time = 40, value = 3}  -- 40 segundos adicionais, storage = 3
    }

    if not isCreature(cid) then
        return false
    end

    -- Verificar se o jogador já usou a spell
    if getCreatureStorageValue(cid, storage) > 0 then
        doSendCancel(cid, "Você já está sob o efeito da spell.")
        return false
    end 

    -- Definir a exaustão e a storage inicial
    doSetExhaustion(cid, storage, waittime)
    setCreatureStorageValue(cid, storage, 1)

    -- Função para alterar a storage e verificar se o jogador está online
    local function changeStorage(cidGUID, newValue)
        local creature = getCreatureByGUID(cidGUID)
        if creature and isCreature(creature) then
            setCreatureStorageValue(creature, storage, newValue)
            if newValue == -1 then
                doSendTextMessage(creature, MESSAGE_STATUS_CONSOLE_BLUE, "O efeito da spell terminou.")
            else
                local creaturePos = getCreaturePosition(creature)
                for i = 1, 5 do
                    doSendMagicEffect(creaturePos, CONST_ME_FIREWORK_RED)
                end
                doSendTextMessage(creature, MESSAGE_INFO_DESCR, "Você recebeu os atributos ML, FIST, SWORD, CLUB e AXE!")
                doAddCondition(creature, createConditionObject(CONDITION_ATTRIBUTES, 60 * 1000, {
                    [CONDITION_PARAM_STAT_MAGICLEVEL] = 3,
                    [CONDITION_PARAM_STAT_MAXHITPOINTS] = 3,
                    [CONDITION_PARAM_STAT_MAXMANAPOINTS] = 3,
                    [CONDITION_PARAM_STAT_SOULPOINTS] = 3,
                    [CONDITION_PARAM_STAT_MAGICPOINTS] = 3
                }))
            end
        end
    end

    -- Obter o GUID do jogador
    local cidGUID = getPlayerGUID(cid)

    -- Agendar as mudanças de storage
    local accumulatedTime = 0
    for i, stage in ipairs(stages) do
        accumulatedTime = accumulatedTime + stage.time
        addEvent(changeStorage, accumulatedTime * 1000, cidGUID, stage.value)
    end

    -- Agendar o reset da storage para o valor -1 após o último estágio
    accumulatedTime = accumulatedTime + stages[#stages].time
    addEvent(changeStorage, accumulatedTime * 1000, cidGUID, -1)

    -- Verificar se o jogador já está transformado
    if not getCreatureCondition(cid, CONDITION_ATTRIBUTES) then
        OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
        return true
    else
        doSendCancel(cid, "Você já está transformado.")
        return false
    end
end

 

Spoiler

function onCastSpell(cid, var)
    local waittime = 310 -- Tempo de exaustão
    local storage = 55512 -- Storage para controlar a spell
    local storage2 = 55513 -- Storage para controlar a spell
    local stages = {
        {time = 0, value = 1}, -- 0 segundos, storage = 1
        {time = 30, value = 2}, -- 30 segundos adicionais, storage = 2
        {time = 30, value = 3},    -- 40 segundos adicionais, storage = 3
        {time = 40, value = 4}, -- 50 segundos adicionais, storage = 4
        {time = 50, value = 5}  -- 60 segundos adicionais, storage = 5
    }

    if exhaustion.check(cid, storage2) then
    doPlayerSendCancel(cid, "Aguarde " .. exhaustion.get(cid, storage2) .. " segundos para usar a spell novamente.")
    return false
    end

    if not isCreature(cid) then
        return false
    end

    -- Verificar se o jogador já usou a spell
    if getPlayerStorageValue(cid, storage) > 0 then
        return false
    end 

    -- Definir a exaustão e a storage inicial
    exhaustion.set(cid, storage2, waittime)
    setPlayerStorageValue(cid, storage, 1)

    -- Função para alterar a storage e verificar se o jogador está online
    local function changeStorage(cidGUID, newValue)
        local creature = getPlayerByGUID(cidGUID)
        if creature and isCreature(creature) then
            setPlayerStorageValue(creature, storage, newValue)
            if newValue == -1 then
end
end
end

    -- Obter o GUID do jogador
    local cidGUID = getPlayerGUID(cid)

    -- Agendar as mudanças de storage
    local accumulatedTime = 0
    for i, stage in ipairs(stages) do
        accumulatedTime = accumulatedTime + stage.time
        addEvent(changeStorage, accumulatedTime * 1000, cidGUID, stage.value)
    end

    -- Agendar o reset da storage para o valor -1 após o último estágio
    accumulatedTime = accumulatedTime + stages[#stages].time
    addEvent(changeStorage, accumulatedTime * 1000, cidGUID, -1)

    -- Verificar se o jogador já está transformado
    if getCreatureCondition(cid, CONDITION_ATTRIBUTES, 50) == false and getCreatureCondition(cid, CONDITION_HASTE, 51) == false and getCreatureCondition(cid, CONDITION_REGENERATION, 52) == false then
        OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1)
        return true
    else
        doPlayerSendCancel(cid, "Você já está transformado.")
        return true
    end
end

editei um pouco o codigo pra funcionar estava dando uns erros na distro, mais mesmo assim se deslogar durante o buff e estiver com uma storage, como a 3 por exemplo, (55512 = 3) depois de um tempo o player logar ela n volta pra -1, ele continua com a 3 ai no caso o player n iria conseguir usar o buff mais, não existe um codigo pra colocar no creaturescript pra quando todos os players logarem terem essa storage 55512 = -1?? facilitaria muito mais pois o codigo da spell ja esta funcional aqui.

Editado por Gabrielx17 (veja o histórico de edições)
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