Ir para conteúdo

Featured Replies

Postado

opa, preciso de uma força se possivel.
possuo um script de EXP potion, que quando eu clico, recebo um "Addevent" com o bonus de exp
porem, quando dou /reload actions, todos os players perdem esse efeito e a storage fica (junto com o bonus de exp da exp food)

isso vem me causando alguns problemas com alguns players, pois preciso atualizar o server/remover bugs

 

teria alguma forma de converter esse action, pra creaturescript e remover esse "addevent"?
queria que se o player deslogasse, continuasse contando a exp potion (como se fosse uma storage os.time)
que quando chegasse em 0 do seu tempo os.time, a exp voltasse ao normal e eu pudesse dar /reload creaturescript que nao interferisse no tempo dos players

 

alguem sabe fazer isso?

a action que uso:

 

Spoiler

 

function onUse(cid, item, frompos, item2, topos)
    local pausa = 20*60*1000 -- (1000 = 1 segundos) Tempo que o script durará
    local texto = "Você Multiplicou +250% da sua Experiencia por 20 minutos" -- Texto que irá receber ao usar a potion.
    local textofinal = "Acabou o potion de Experiencia." -- Texto que irá receber quando o efeito da potion acabar.
    local exp = 3.5 -- O quanto que você quer que dobre sua experiencia, por exemplo 2 é 2x as rates do seu server.
    local expfinal = 1 --Não mude, isso é para a experiencia voltar ao normal.
    local limitedeuso = 49015
    local tempo = 20*60*1000 -- 1000 = 1s então 1000 vezes 60 vezes 30 = 30 minutos
    local textofinal1 = "Você já esta sob efeito da potion, se nao estiver, teste relogar!"
    local seuitem = 2695 -- seu item que dará double exp
    local efeito1 = 23 -- efeito que ficara com o char por meia hora
    local efeito2 = 14 -- efeito que acontecera no momento que usar a pot
    --fim da parte configuravel não mecha se nao tiver conhecimento de scripting
    local timeEffect = 1201 -- tempo em segundos que o efeito vai apareceer no player, 31 = 30 segundos. sempre coloque 1 segundo a mais. 
    local function effect(cid, seconds)
        if not isCreature(cid) then return LUA_ERROR end
        local t, pos = convertTime(0, seconds), getCreaturePosition(cid)
        doSendMagicEffect(pos, 24)
        doSendAnimatedText(pos, t.minutes > 0 and t.minutes..":"..t.seconds or t.seconds, math.random(215,215))
        if seconds ~= 1 then
 addEvent(effect, 1000, cid,seconds-1) end
    end
    local function potion(cid)
    doPlayerSetExperienceRate(cid,expfinal)
    end
    if getTilePzInfo(getCreaturePosition(cid)) then
    doSendMagicEffect(getPlayerPosition(cid), 2)
    return doCreatureSay(cid, "[Error] Voce nao pode usar exp foods em area Protection Zone", TALKTYPE_ORANGE_1)
    end
    if item.itemid == seuitem and (getPlayerStorageValue(cid, limitedeuso) - os.time() > 0) then
    doSendMagicEffect(getPlayerPosition(cid), 2)
    return doCreatureSay(cid, "[Error] Voce ja esta sob efeito da potion, se nao estiver tente relogar!", TALKTYPE_ORANGE_1)
    end
    if item.itemid == seuitem and (getPlayerStorageValue(cid, limitedeuso) - os.time() <= 0) then
        doRemoveItem(item.uid,1)
        doPlayerSetExperienceRate(cid,exp)
        doSendMagicEffect(frompos,efeito2)
        setPlayerStorageValue(cid, limitedeuso, os.time() + 1230)
        doPlayerSendTextMessage(cid,22,texto)
        addEvent(potion,pausa,cid)
        effect(cid, 20*60)
    end
    return true
end

 

 


grato

 

Postado

Usa esse MOD, melhor.

<?xml version="1.0" encoding="ISO-8859-1"?>
<mod name="Exp Potion" version="1.0" author="Vodkart" contact="DISCORD: vodkart#6090" enabled="yes">
<config name="exppotion"><![CDATA[
exp_info = {rate = 0.2, storage = {354870,354871,354872}, minutes = 30} -- rate 0.2 = 20%
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)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você ainda tem "..convertTime(getPlayerStorageValue(cid, exp_info.storage[1]) - os.time()).." de Exp Potion.")
        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
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Sua Exp Potion acabou!") 
		-- doPlayerSetExperienceRate(cid, getPlayerStorageValue(cid, exp_info.storage[2]))
		local rates = getPlayerRates(cid)
		doPlayerSetExperienceRate(cid, rates[SKILL__LEVEL]-exp_info.rate)
		setPlayerStorageValue(cid, exp_info.storage[3], 0) -- registro
	end
	return true
end]]></event>
<talkaction words="!exppotion;/exppotion;!exp;/exp" event="buffer"><![CDATA[
domodlib('exppotion')
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, getPlayerStorageValue(cid, exp_info.storage[1]) - os.time() <= 0 and "Você não possui Exp Potion ativa no momento." or "Você tem "..convertTime(getPlayerStorageValue(cid, exp_info.storage[1]) - os.time()).." de exp potion.")]]></talkaction>
<action itemid="12698" event="script"><![CDATA[
domodlib('exppotion')
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getPlayerStorageValue(cid, exp_info.storage[1]) - os.time() > 0 then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você não pode usar outra Exp Potion pois ainda possui uma ativa. Ainda restam: "..convertTime(getPlayerStorageValue(cid, exp_info.storage[1]) - os.time())..".") return true
	end
	
	local rates = getPlayerRates(cid)
	-- setPlayerStorageValue(cid, exp_info.storage[2], rates[SKILL__LEVEL])
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você ativou Exp potion por "..exp_info.minutes.." minutos! Durante este tempo, você receberá +20% exp de monstros. Para saber o tempo, digite: /exppotion") 
	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>

 

Postado
  • Autor

obg, quando dou /reload realmente funciona, mas há alguma maneira de implementar esse sistema pra mostrar o tempo em tempo real? em vez de ficar dando o comando? pq meu script atual ele mostra o tempo restante da potion (fica contando de 1 em 1 segundo)

na parte inferior do tibia

Spoiler

1596497893_Semttulo.png.5ccc8acb1fbe3b8f231ad269105c949d.png


@Vodkart vi que o script tem créditos seu, podes desenrolar isso pra mim? :S


EDIT: @ikaroangelo21 se euquiser adicionar outro script igual, tenho que mudar oque?

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

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.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo