Postado Março 29, 2020 5 anos 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: Mostrar conteúdo oculto 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 Março 29, 2020 5 anos 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 Março 29, 2020 5 anos 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 Mostrar conteúdo oculto @Vodkart vi que o script tem créditos seu, podes desenrolar isso pra mim? :SEDIT: @ikaroangelo21 se euquiser adicionar outro script igual, tenho que mudar oque? Editado Março 29, 2020 5 anos por poko360 (veja o histórico de edições)
Postado Março 29, 2020 5 anos @poko360 quem que fica mostrando o tempo real? esse que eu fiz no mods já é pelo creaturescript
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.