Ir para conteúdo
  • Cadastre-se

(Resolvido)Double Potion que marca o Tempo


Ir para solução Resolvido por Vodkart,

Posts Recomendados

Boa tarde TK!

Tenho um script de potion exp, que vou postar abaixo, o que eu queria é que tivesse um comando exemplo: !tempopotion

para mostrar o tempo restante de todas as potions (é que meu servidor tem potions x2,x3,x4...)

Exemplo:

Você ainda possui tempo restante de:

X2 = 23 minutos e 30 segundos

X3 = 50 minutos e 21 segundos

X4 = não ativada

X5 = não ativada

 

Meu código da potion de x2 abaixo:

Caso conseguir me ajudar, pode fazer com todas as storages do x2, depois eu arrumo com a storage de cada uma!

 

Spoiler

local config = {  
    rate = 2, 
    storage = 61002, 
    expstorage = 61102, 
    register = 61202, 
    time = 1800, 
}  

function onUse(cid, item, fromPosition, itemEx, toPosition) 
    if getPlayerStorageValue(cid, config.storage) <= 0 then 
        local rates = getPlayerRates(cid) 
        setPlayerStorageValue(cid, config.expstorage, rates[SKILL__LEVEL]) 
        setPlayerStorageValue(cid, config.register, 1) 
        itemEx=itemid == 7439 
        doCreatureSay(cid, "Seu EXP x2 [30 min] foi ativado!", TALKTYPE_ORANGE_1, true, cid) 
        setPlayerStorageValue(cid, config.storage, os.time()+config.time)  
        doPlayerSetExperienceRate(cid, rates[SKILL__LEVEL]+config.rate)  
        doRemoveItem(item.uid,1) 
        registerCreatureEvent(cid, "ExpStagex2") 
    else 
        doCreatureSay(cid, "Você já esta com efeito de x2!", TALKTYPE_ORANGE_1, true, cid) 
    end 
return true 
end 


function onThink(cid, interval) 
    if getPlayerStorageValue(cid, config.register) == 1 then 
        if getPlayerStorageValue(cid, config.storage) <= os.time() then 
            doCreatureSay(cid, "Sua EXP x2 acabou!", TALKTYPE_ORANGE_1, true, cid) 
            setPlayerStorageValue(cid, config.storage, 0) 
            setPlayerStorageValue(cid, config.register, 0) 
            local oldexp = getPlayerStorageValue(cid, config.expstorage) 
            doPlayerSetExperienceRate(cid, oldexp) 
            unregisterCreatureEvent(cid, "ExpStagex2") 
        end 
    end 
return true 
end 
function onLogin(cid) 
    if getPlayerStorageValue(cid, config.register) == 1 then 
        registerCreatureEvent(cid, "ExpStagex2") 
        local rates = getPlayerRates(cid) 
        doCreatureSay(cid, "Seu EXP x2 [30 min] ainda está ativado!", TALKTYPE_ORANGE_1, true, cid) 
        if getPlayerStorageValue(cid, config.storage) > os.time() then 
        local oldexp = getPlayerStorageValue(cid, config.expstorage) 
        doPlayerSetExperienceRate(cid, oldexp+config.rate) 
        end 
    end     
return true 
end

 

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

Aqui no TibiaKing mensagens como UP e BUMP são proibidas, utilize o botão subir este tópico. Esta é uma mensagem automática!
Pedimos que leia as regras do fórum!

Spoiler

Here in TibiaKing messages like UP and BUMP are prohibited, use the button raise this topic. This is an automated message!
Please read the forum rules.

 

Talvez você queira ver:

BestBaiak

[FAQ]Remere's Map Editor - Dúvidas e soluções de bugs 

 

Contato:

1.png.dadb3fc3ee6ffd08292705b6a71e3d88.png Discord:

Link para o post
Compartilhar em outros sites

joga essa função na sua lib:

 

function convertTime(a)
  if(type(tonumber(a)) == "number" and a > 0) then
    if (a <= 3599) then
      local minute = math.floor(a/60)
      local second = a - (60 * minute)

      if(second == 0) then
        return ((minute)..((minute > 1) and " minutos" or " minuto"))
      else
        return ((minute ~= 0) and ((minute>1) and minute.." minutos e " or minute.." minuto e ").. ((second>1) and second.." segundos" or second.." segundo") or ((second>1) and second.." segundos" or second.. " segundo"))
      end
    else
      local hour = math.floor(a/3600)
      local minute = math.floor((a - (hour * 3600))/60)
      local second = (a - (3600 * hour) - (minute * 60))

      if (minute == 0 and second > 0) then
        return (hour..((hour > 1) and " horas e " or " hora e "))..(second..((second > 1) and " segundos" or " segundo"))
      elseif (second == 0 and minute > 0) then
        return (hour..((hour > 1) and " horas e " or " hora e "))..(minute..((minute > 1) and " minutos" or " minuto"))
      elseif (second == 0 and minute == 0) then
        return (hour..((hour > 1) and " horas" or " hora"))
      end
      return (hour..((hour > 1) and " horas, " or " hora, "))..(minute..((minute > 1) and " minutos e " or " minuto e "))..(second..((second > 1) and " segundos" or " segundo"))
    end
  end
end

 

 

 

e a talk vc usa assim:

 

function onSay(cid, words, param, channel)
local potion_storage = 61002
return doPlayerSendTextMessage(cid, 25, getPlayerStorageValue(cid, potion_storage) - os.time() <= 0   and "voce nao tem exp potion no momento." or "voce tem "..convertTime(getPlayerStorageValue(cid, potion_storage) - os.time()).." de exp potion")
end

 

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites

@Vodkart Funciona usando exatamente como você manda vod, eu já tinha criado um com gambis, por que eu uso 1 comando que mostra ao mesmo tempo todas potions ex:

 

doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "# INFO EXP Potions #\n\n[X2] -> "..storagex2.."\n[X3] -> "..storagex3.."\n[X4] -> "..storagex4.."\n[X5] -> "..storagex5.."") 

Teria como adaptar por favor? Eu tentei muito mas não rolou

Para a mensagem em si ficar:

# INFO EXP Potions #

[X2] -> 30 minutos e 20 segundos

[X3] -> Não ativo

....

 

Ao invés de se ele não tiver nenhuma ativa simplesmente não falar nada, mostrar mesmo assim porém tudo 'não ativo'

 

Obrigado pela atenção! você sempre sendo um god

Link para o post
Compartilhar em outros sites
3 horas atrás, Toulouse disse:

@Vodkart Funciona usando exatamente como você manda vod, eu já tinha criado um com gambis, por que eu uso 1 comando que mostra ao mesmo tempo todas potions ex:

 


doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "# INFO EXP Potions #\n\n[X2] -> "..storagex2.."\n[X3] -> "..storagex3.."\n[X4] -> "..storagex4.."\n[X5] -> "..storagex5.."") 

Teria como adaptar por favor? Eu tentei muito mas não rolou

Para a mensagem em si ficar:

# INFO EXP Potions #

[X2] -> 30 minutos e 20 segundos

[X3] -> Não ativo

....

 

Ao invés de se ele não tiver nenhuma ativa simplesmente não falar nada, mostrar mesmo assim porém tudo 'não ativo'

 

Obrigado pela atenção! você sempre sendo um god

 

 

manda seu script ai com todas as storages que vc fez pra eu arrumar

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites

Segue a gambiarra feia @Vodkart 

 

Spoiler

function onSay(cid, words, param)
        
    local storagex2_minutos = math.ceil((getPlayerStorageValue(cid, 61002)-os.time())/60)
    if storagex2_minutos <= 0 then
    storagex2_minutos = 0
    storagex2_minutos_text = "Não ativo"
    elseif storagex2_minutos <= 1 then
    storagex2_minutos_text = ""..math.ceil((getPlayerStorageValue(cid, 61002)-os.time())/60).." minuto"
    else
    storagex2_minutos_text = ""..math.ceil((getPlayerStorageValue(cid, 61002)-os.time())/60).." minutos"
    end
    
    
    
    local storagex3_minutos = math.ceil((getPlayerStorageValue(cid, 61003)-os.time())/60)
    if storagex3_minutos <= 0 then
    storagex3_minutos = 0
    storagex3_minutos_text = "Não ativo"
    elseif storagex3_minutos <= 1 then
    storagex3_minutos_text = ""..math.ceil((getPlayerStorageValue(cid, 61003)-os.time())/60).." minuto"
    else
    storagex3_minutos_text = ""..math.ceil((getPlayerStorageValue(cid, 61003)-os.time())/60).." minutos"
    end
    
    
    
    local storagex4_minutos = math.ceil((getPlayerStorageValue(cid, 61004)-os.time())/60)
    if storagex4_minutos <= 0 then
    storagex4_minutos = 0
    storagex4_minutos_text = "Não ativo"
    elseif storagex4_minutos <= 1 then
    storagex4_minutos_text = ""..math.ceil((getPlayerStorageValue(cid, 61004)-os.time())/60).." minuto"
    else
    storagex4_minutos_text = ""..math.ceil((getPlayerStorageValue(cid, 61004)-os.time())/60).." minutos"
    end
    
    
    local storagex5_minutos = math.ceil((getPlayerStorageValue(cid, 61005)-os.time())/60)
    if storagex5_minutos <= 0 then
    storagex5_minutos = 0
    storagex5_minutos_text = "Não ativo"
    elseif storagex5_minutos <= 1 then
    storagex5_minutos_text = ""..math.ceil((getPlayerStorageValue(cid, 61005)-os.time())/60).." minuto"
    else
    storagex5_minutos_text = ""..math.ceil((getPlayerStorageValue(cid, 61005)-os.time())/60).." minutos"
    end
    
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "# INFO EXP Potions #\n\n[X2] -> "..storagex2_minutos_text.."\n[X3] -> "..storagex3_minutos_text.."\n[X4] -> "..storagex4_minutos_text.."\n[X5] -> "..storagex5_minutos_text.."") 
    
return TRUE
end

 

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

n testei

 

function onSay(cid, words, param)
local str,c ="# INFO EXP Potions #\n\n",2
for i = 61002, 61005 do
str = str.."[X"..c.."] -> "..(getPlayerStorageValue(cid, i) - os.time() <= 0 and "Não ativo" or "voce tem "..convertTime(getPlayerStorageValue(cid, i) - os.time()).." de exp potion").."\n"
c = c + 1
end
return doShowTextDialog(cid, 6579, str)   
end

 

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites
  • 2 months later...
Em 05/05/2018 em 00:13, Vodkart disse:

n testei

 


function onSay(cid, words, param)
local str,c ="# INFO EXP Potions #\n\n",2
for i = 61002, 61005 do
str = str.."[X"..c.."] -> "..(getPlayerStorageValue(cid, i) - os.time() <= 0 and "Não ativo" or "voce tem "..convertTime(getPlayerStorageValue(cid, i) - os.time()).." de exp potion").."\n"
c = c + 1
end
return doShowTextDialog(cid, 6579, str)   
end

 

tem como adaptar esse script somente para 1 double? estou tentando de varias formas aqui, mais sempre tem um erro pra mim deixar pra trás kkkk

e o efeito do double nunca acaba, nunca mesmo, quando você usa um double e acaba o tempo, quando vai tentar usar outro fala que você já esta com um double ativo

Editado por Emanueldk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
17 horas atrás, Emanueldk disse:

tem como adaptar esse script somente para 1 double? estou tentando de varias formas aqui, mais sempre tem um erro pra mim deixar pra trás kkkk

e o efeito do double nunca acaba, nunca mesmo, quando você usa um double e acaba o tempo, quando vai tentar usar outro fala que você já esta com um double ativo

 

exp potion.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<mod name="Exp Potion" version="1.0" author="none" contact="none.com" enabled="yes">
<config name="exppotion"><![CDATA[
exp_info = {rate = 1, storage = {354870,354871,354872}, minutes = 2} -- rate 1 eh 50%
function convertTime(a)
  if(type(tonumber(a)) == "number" and a > 0) then
    if (a <= 3599) then
      local minute = math.floor(a/60)
      local second = a - (60 * minute)
      if(second == 0) then
        return ((minute)..((minute > 1) and " minutos" or " minuto"))
      else
        return ((minute ~= 0) and ((minute>1) and minute.." minutos e " or minute.." minuto e ").. ((second>1) and second.." segundos" or second.." segundo") or ((second>1) and second.." segundos" or second.. " segundo"))
      end
    else
      local hour = math.floor(a/3600)
      local minute = math.floor((a - (hour * 3600))/60)
      local second = (a - (3600 * hour) - (minute * 60))
      if (minute == 0 and second > 0) then
        return (hour..((hour > 1) and " horas e " or " hora e "))..(second..((second > 1) and " segundos" or " segundo"))
      elseif (second == 0 and minute > 0) then
        return (hour..((hour > 1) and " horas e " or " hora e "))..(minute..((minute > 1) and " minutos" or " minuto"))
      elseif (second == 0 and minute == 0) then
        return (hour..((hour > 1) and " horas" or " hora"))
      end
      return (hour..((hour > 1) and " horas, " or " hora, "))..(minute..((minute > 1) and " minutos e " or " minuto e "))..(second..((second > 1) and " segundos" or " segundo"))
    end
  end
end
]]></config>
<event type="login" name="ExpPotionLogin" event="script"><![CDATA[
domodlib('exppotion')
function onLogin(cid)
    if getPlayerStorageValue(cid, exp_info.storage[1]) - os.time() > 0 then 
        registerCreatureEvent(cid, "ExpPotionThink") 
        local rates = getPlayerRates(cid) 
        doCreatureSay(cid, "voce ainda tem "..convertTime(getPlayerStorageValue(cid, exp_info.storage[1]) - os.time()).." de exp potion", TALKTYPE_ORANGE_1, true, cid)
        doPlayerSetExperienceRate(cid, rates[SKILL__LEVEL]+exp_info.rate)
	setPlayerStorageValue(cid, exp_info.storage[3], 1) -- registro  
    end 
	return true
end]]></event>
<event type="think" name="ExpPotionThink" event="script"><![CDATA[
domodlib('exppotion')
function onThink(cid, interval)
	if getPlayerStorageValue(cid, exp_info.storage[3]) > 0 and getPlayerStorageValue(cid, exp_info.storage[1]) - os.time() <= 0 then
            doCreatureSay(cid, "Sua EXP Potion acabou!", TALKTYPE_ORANGE_1, true, cid) 
            doPlayerSetExperienceRate(cid, getPlayerStorageValue(cid, exp_info.storage[2]))
	    setPlayerStorageValue(cid, exp_info.storage[3], 0) -- registro   
        end 
	return true
end]]></event>
<talkaction words="!exppotion;/exppotion" event="buffer"><![CDATA[
domodlib('exppotion')
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,getPlayerStorageValue(cid, exp_info.storage[1]) - os.time() <= 0 and "Nenhuma Exp Potion ativa" or "voce tem "..convertTime(getPlayerStorageValue(cid, exp_info.storage[1]) - os.time()).." de exp potion")]]></talkaction>
<action itemid="7703" event="script"><![CDATA[
domodlib('exppotion')
function onUse(cid, item, fromPosition, itemEx, toPosition) 
    if getPlayerStorageValue(cid, exp_info.storage[1]) - os.time() > 0 then 
     doCreatureSay(cid, "voce ainda tem "..convertTime(getPlayerStorageValue(cid, exp_info.storage[1]) - os.time()).." de exp potion", TALKTYPE_ORANGE_1, true, cid) return true
     end
        local rates = getPlayerRates(cid) 
        setPlayerStorageValue(cid, exp_info.storage[2], rates[SKILL__LEVEL]) 
        doCreatureSay(cid, "Exp potion de ["..exp_info.minutes.." min] foi ativado!", TALKTYPE_ORANGE_1, true, cid) 
        setPlayerStorageValue(cid, exp_info.storage[1], os.time()+exp_info.minutes*60)
	setPlayerStorageValue(cid, exp_info.storage[3], 1) -- registro    
        doPlayerSetExperienceRate(cid, rates[SKILL__LEVEL]+exp_info.rate)
        registerCreatureEvent(cid, "ExpPotionThink")  
        doRemoveItem(item.uid,1) 
	return true
end]]></action>
</mod>

 

!exppotion  ou /exppotion

 

e pode mudar o itemid

 

itemid="7703"

vou colocar no pastebin pq o code do forum ta bugando os script:

 

 

https://pastebin.com/raw/Xnhp2fCB

17 horas atrás, victor4312 disse:

alguém

 

vc quer que a exp acabe qndo morra ou desloge?

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites
  • 1 month later...

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