Postado Agosto 23, 2022 2 anos O script que da double xp ao clicar no item está com um erro pois quando acaba o tempo da double exp e o char esta off ao logar novamente e usar o item dnv da double exp ele diz que já esta double, mesmo já tendo acabado o tempo da double e a xp tiver normal não da mais para usar o item. Estou bateno cabeça aqui para resolver e talvez aqui tenha uma alma excelente para aajudar obrigado pela atenção galera, vou acompanhar toda hora aqui pra responder rapido quem decidir me ajudar obrigado dnv de vdd Aqui esta o script em Mods Spoiler <?xml version="1.0" encoding="UTF-8"?> <mod name="AdvancedExpPotionSystem" enabled="yes" author="MatheusMkalo" forum="XTibia.com"> <!-- Configs and Functions --> <config name="PotionExpConfigs"><![CDATA[ ------ CONFIGURE SEU SCRIPT ------ TRUE ou FALSE configs = { time = 2, ---- TIME IN MINUTES 1440 = 24h metade = 720 needpa = FALSE, needlvl = {FALSE, level = 8}, costmana = {FALSE, mana = 0}, addrate = 100, -- Exp que vai adicionar em % removeonuse = TRUE } function getTime(s) local n = math.floor(s / 60) s = s - (60 * n) return n, s end CreatureEventChecker = function(event, ...) -- Colex if isCreature(arg[1]) then event(unpack(arg)) end end creatureEvent = function(event, delay, ...) -- Colex addEvent(CreatureEventChecker, delay, event, unpack(arg)) end function getPlayerExtraExpRate(cid) -- By MatheusMkalo return (getPlayerRates(cid)[8]-1)*100 end ]]></config> <!-- exppotion.lua --> <action itemid="5785" event="script"><![CDATA[ domodlib('PotionExpConfigs') if getPlayerStorageValue(cid, 62164) >= 1 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "EXP is ALREADY DOUBLED. Please WAIT to use the ITEM Double Exp again.") end if configs.needpa and not isPremium(cid) then return doPlayerSendCancel(cid, "Need Premium Account") end if configs.needlvl[1] and getPlayerLevel(cid) < configs.needlvl.level then return doPlayerSendCancel(cid, "Voce precisa ser " .. configs.needlvl.level .. " para usar.") end if configs.costmana[1] then if getCreatureMana(cid) < configs.costmana.mana then return doPlayerSendCancel(cid, "Voce precisar ter " .. configs.costmana.mana .. " de mana.") else doCreatureAddMana(cid, -configs.costmana.mana) end end if configs.removeonuse then doRemoveItem(item.uid, 1) end for i = configs.time*60, 1, -1 do local a = math.floor(i/60) .. ":" .. i - (60 * math.floor(i/60)) if #a < 4 then a = string.sub(a,1,2) .. "0" .. string.sub(a, 3) end if i == configs.time*60 then creatureEvent(doPlayerSendChannelMessage, configs.time*60*1000, cid, AuthorName, "[DOUBLE EXP] Expirou. Adquira mais em nosso SITE...", TALKTYPE_CHANNEL_O, 5) end creatureEvent (doPlayerSendChannelMessage,(configs.time*60-i)*1000, cid, AuthorName, "[DOUBLE EXP] Tempo para expirar: "..a.."", TALKTYPE_CHANNEL_O, 5) end doPlayerSetExperienceRate(cid, (1+(configs.addrate/100))+(getPlayerExtraExpRate(cid)/100)) creatureEvent(doPlayerSetExperienceRate, configs.time *60*1000, cid, 1+(getPlayerExtraExpRate(cid)/100-(configs.addrate/100))) doPlayerSendTextMessage(cid, 25, "DOUBLE EXP ATIVA POR 12 HORAS.") setPlayerStorageValue(cid, 62164, os.time()) creatureEvent(setPlayerStorageValue, configs.time *60*1000, cid, 62164, 0) return TRUE ]]></action> <creaturescript type="login" name="ExpPotion" event="script"><![CDATA[ domodlib('PotionExpConfigs') local time = configs.time if os.time()-getPlayerStorageValue(cid, 62164) < time *60 then doPlayerSetExperienceRate(cid, (1+(configs.addrate/100))+(getPlayerExtraExpRate(cid)/100)) creatureEvent(doPlayerSetExperienceRate, (time*60-(os.time()-getPlayerStorageValue(cid, 62164))) * 1000, cid, 1+(getPlayerExtraExpRate(cid)/100-(configs.addrate/100))) creatureEvent(setPlayerStorageValue, (time*60-(os.time()-getPlayerStorageValue(cid, 62164))) * 1000 , cid, 62164, 0) for i = (time*60-(os.time()-getPlayerStorageValue(cid, 62164))), 1, -1 do local a = math.floor(i/60) .. ":" .. i - (60 * math.floor(i/60)) if #a < 4 then a = string.sub(a,1,2) .. "0" .. string.sub(a, 3) end if i == (time*60-(os.time()-getPlayerStorageValue(cid, 62164))) then creatureEvent(doPlayerSendChannelMessage, (time*60-(os.time()-getPlayerStorageValue(cid, 62164)))*1000, cid, AuthorName, "[DOUBLE EXP] Expirou. Adquira mais em nosso SITE...", TALKTYPE_CHANNEL_O, 5) end creatureEvent(doPlayerSendChannelMessage, ((time*60-(os.time()-getPlayerStorageValue(cid, 62164)))-i)*1000, cid, AuthorName, "[DOUBLE EXP] Tempo para expirar: "..a.."", TALKTYPE_CHANNEL_O, 5) end end return TRUE ]]></creaturescript> </mod> Teria que remover a storage né, alguem sabe como seria o código pra adicionar no escript pra derrubar a coluna na database? EDIT - Ou também o tempo podia parar quando estivesse off TFS 0.4 Editado Agosto 23, 2022 2 anos por Leo Zanin (veja o histórico de edições)
Postado Setembro 18, 2022 2 anos Veja se isso resolve o problema Troque: creatureEvent(setPlayerStorageValue, configs.time *60*1000, cid, 62164, 0) return TRUE Por: addEvent(setPlayerStorageValue(cid, 62164, 0), configs.time *60*1000) return TRUE
Postado Setembro 30, 2022 2 anos Não resolveu, agora sempre que utiliza o item ele da esse erro: @Imperius Spoiler [Error - Action Interface] function onUse(cid, item, fromPosition, itemEx, toPosition) domodlib('PotionExpConfigs') if getPlayerStorageValue(cid, 62164) >= 1 then return doPlayerSendCancel(cid, "Voce ja ta sob o efeito efeito da Exp Potion.") end if configs.needpa and not isPremium(cid) then return doPlayerSendCancel(cid, "Voce Precisar ser Premium Para Usar") end if configs.needlvl[1] and getPlayerLevel(cid) < configs.needlvl.level then return doPlayerSendCancel(cid, "Voce Precisa ser " .. configs.needlvl.level .. " Para usar a Potion.") end if configs.costmana[1] then if getCreatureMana(cid) < configs.costmana.mana then return doPlayerSendCancel(cid, "Voce Precisar ter " .. configs.costmana.mana .. " de Mana Para usar a Potion") else doCreatureAddMana(cid, -configs.costmana.mana) end end if configs.removeonuse then doRemoveItem(item.uid, 1) end for i = configs.time*60, 1, -1 do local a = math.floor(i/60) .. ":" .. i - (60 * math.floor(i/60)) if #a < 4 then a = string.sub(a,1,2) .. "0" .. string.sub(a, 3) end if i == configs.time*60 then creatureEvent(doPlayerSendCancel, configs.time*60*1000, cid, "O Efeito da Exp Potion acabou.") end creatureEvent(doPlayerSendCancel, (configs.time*60-i)*1000, cid, "O Efeito da Exp Potion vai acabar em "..a..".") end doPlayerSetExperienceRate(cid, (1+(configs.addrate/100))+(getPlayerExtraExpRate(cid)/100)) creatureEvent(doPlayerSetExperienceRate, configs.time *60*1000, cid, 1+(getPlayerExtraExpRate(cid)/100-(configs.addrate/100))) doPlayerSendTextMessage(cid, 22, "Agora Voce Esta Recebendo mais 20% de EXP por Matar Monstros.") setPlayerStorageValue(cid, 62164, os.time()) addEvent(setPlayerStorageValue(cid, 62164, 0), configs.time *60*1000) return TRUE end:onUse Description: (LuaInterface::luaAddEvent) Callback parameter should be a function Editado Setembro 30, 2022 2 anos por King Laker (veja o histórico de edições) Olá, que tal dar uma olhada no meu projeto? https://discord.gg/bsNkbsyJ3W
Postado Outubro 2, 2022 2 anos @FeeTads o moço aqui ta com o mesmo problema.. Olá, que tal dar uma olhada no meu projeto? https://discord.gg/bsNkbsyJ3W
Postado Outubro 2, 2022 2 anos tenta colocar um onLogin function onLogin(cid) setPlayerStorageValue(cid, 62164, 0) return true que quando o player logar, vai resetar a storage caso queira que a storage não saia mesmo deslogando, e só acabe quando o player realmente tiver fora do time de 60 mins, precisa colocar a storage como os.time @King Laker
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.