Ir para conteúdo
  • Cadastre-se

(Resolvido)[BUG SCRIPT] Double xp potion socorro


Ir para solução Resolvido por llucas75,

Posts Recomendados

oi, meu double exp potion ta bugado

exemplo: quando o player clika no double exp potion fica contando 30 minutos,ai quando acaba os 30 minutos o player nao pode usar de novo (ALGUNS PLAYERS) eles dizem que nao conseguem usar denovo porque diz q o potion esta em efeito (só que ja acabou os 30 minutos)

 

como eu arrumo esse bug?

 

o script q eu uso é esse

 

MODS

<?xml version="1.0" encoding="UTF-8"?>
<mod name="AdvancedExpPotionSystem" enabled="yes" author="MatheusMkalo" forum="TibiaKing.com">
<!-- Configs and Functions -->
<config name="PotionExpConfigs"><![CDATA[
------ CONFIGURE SEU SCRIPT ------ TRUE ou FALSE
configs = {
time = 30, ---- TIME IN MINUTES
needpa = TRUE,
needlvl = {TRUE, level = 1},
costmana = {TRUE, mana = 1000},
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="12289" event="script"><![CDATA[
domodlib('PotionExpConfigs')
if getPlayerStorageValue(cid, 62164) >= 1 then
    return doPlayerSendCancel(cid, "You are already taking effect from this item.")
end
if configs.needpa and not isPremium(cid) then
    return doPlayerSendCancel(cid, "You need to be a premmium account to use this item.")
end
if configs.needlvl[1] and getPlayerLevel(cid) < configs.needlvl.level then
    return doPlayerSendCancel(cid, "You need to be level " .. configs.needlvl.level .. " to use this item.")
end
if configs.costmana[1] then
if getCreatureMana(cid) < configs.costmana.mana then
    return doPlayerSendCancel(cid, "You need " .. configs.costmana.mana .. " mana to use this item.")
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, "The effect of the exp potion end.")
end
creatureEvent(doPlayerSendCancel, (configs.time*60-i)*1000, cid, "2x de experiencia!, o efeito acabara 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 ira receber mais exp por matar os mosntros.")
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(doPlayerSendCancel, (time*60-(os.time()-getPlayerStorageValue(cid, 62164)))*1000, cid, "The effect of the exp potion end.")
	   end
	   creatureEvent(doPlayerSendCancel, ((time*60-(os.time()-getPlayerStorageValue(cid, 62164)))-i)*1000, cid, "2x de experiencia!, o efeito acabara em "..a..".")
	   end
    end
return TRUE
]]></creaturescript>
</mod>

OBRIGADO DESDE JÁ :)

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

Tente isso

 




------ CONFIGURE SEU SCRIPT ------ TRUE ou FALSE
configs = {
time = 30, ---- TIME IN MINUTES
needpa = TRUE,
needlvl = {TRUE, level = 1},
costmana = {TRUE, mana = 1000},
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
]]>

domodlib('PotionExpConfigs')
if getPlayerStorageValue(cid, 62164) >= 1 then
return doPlayerSendCancel(cid, "You are already taking effect from this item.")
end
if configs.needpa and not isPremium(cid) then
return doPlayerSendCancel(cid, "You need to be a premmium account to use this item.")
end
if configs.needlvl[1] and getPlayerLevel(cid) < configs.needlvl.level then
return doPlayerSendCancel(cid, "You need to be level " .. configs.needlvl.level .. " to use this item.")
end
if configs.costmana[1] then
if getCreatureMana(cid) < configs.costmana.mana then
return doPlayerSendCancel(cid, "You need " .. configs.costmana.mana .. " mana to use this item.")
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, "The effect of the exp potion end.")
setPlayerStorageValue(cid, 62164, 0)
end
creatureEvent(doPlayerSendCancel, (configs.time*60-i)*1000, cid, "2x de experiencia!, o efeito acabara 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 ira receber mais exp por matar os mosntros.")
setPlayerStorageValue(cid, 62164, os.time())
creatureEvent(setPlayerStorageValue, configs.time *60*1000, cid, 62164, 0)
return TRUE
]]>
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(doPlayerSendCancel, (time*60-(os.time()-getPlayerStorageValue(cid, 62164)))*1000, cid, "The effect of the exp potion end.")
end
creatureEvent(doPlayerSendCancel, ((time*60-(os.time()-getPlayerStorageValue(cid, 62164)))-i)*1000, cid, "2x de experiencia!, o efeito acabara em "..a..".")
end
end
return TRUE
]]>

Scripter: |||||||||| 10%

 

 

Te ajudei?? REP + e ficamos quites...  ;D

 

Atenciosamente,

                   Lucas.

Abraços!

Link para o post
Compartilhar em outros sites

Teria como colocar sem isso? getPlayerStorageValue(cid, 62164)

tipo eu queria q o player pudesse usar quantas vezes quisesse mesmo o efeito do potion tiver ativado

 

Oque eu quero exemplo: o total de minutos do potion é 30 minutos certo?

dai um player usa o potion, (exemplo) quando tiver faltando 9 minutos pra acabar, eu queria q ele pudesse usar denovo ai o tempo da potion resetava pra 30 minutos denovo entende?

 

Oque eu não quero: que o player não use o potion quando der exatos 30 minutos sem poder usar outro potion nesse intervalo de 30 minutos

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

Ops postei errado desculpe amigo tente

 

<?xml version="1.0" encoding="UTF-8"?>
<mod name="AdvancedExpPotionSystem" enabled="yes" author="MatheusMkalo" forum="TibiaKing.com">
<!-- Configs and Functions -->
<config name="PotionExpConfigs"><![CDATA[
------ CONFIGURE SEU SCRIPT ------ TRUE ou FALSE
configs = {
time = 30, ---- TIME IN MINUTES
needpa = TRUE,
needlvl = {TRUE, level = 1},
costmana = {TRUE, mana = 1000},
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="12289" event="script"><![CDATA[
domodlib('PotionExpConfigs')
if getPlayerStorageValue(cid, 62164) >= 1 then
    return doPlayerSendCancel(cid, "You are already taking effect from this item.")
end
if configs.needpa and not isPremium(cid) then
    return doPlayerSendCancel(cid, "You need to be a premmium account to use this item.")
end
if configs.needlvl[1] and getPlayerLevel(cid) < configs.needlvl.level then
    return doPlayerSendCancel(cid, "You need to be level " .. configs.needlvl.level .. " to use this item.")
end
if configs.costmana[1] then
if getCreatureMana(cid) < configs.costmana.mana then
    return doPlayerSendCancel(cid, "You need " .. configs.costmana.mana .. " mana to use this item.")
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, "The effect of the exp potion end.")
setPlayerStorageValue(cid, 62164, 0)
end
creatureEvent(doPlayerSendCancel, (configs.time*60-i)*1000, cid, "2x de experiencia!, o efeito acabara 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 ira receber mais exp por matar os mosntros.")
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(doPlayerSendCancel, (time*60-(os.time()-getPlayerStorageValue(cid, 62164)))*1000, cid, "The effect of the exp potion end.")
  end
  creatureEvent(doPlayerSendCancel, ((time*60-(os.time()-getPlayerStorageValue(cid, 62164)))-i)*1000, cid, "2x de experiencia!, o efeito acabara em "..a..".")
  end
    end
return TRUE
]]></creaturescript>

</mod>

 

O id d pot vc coloca aqui >> <action itemid="12289" event="script"><![CDATA[ coloque o id da pot em itemid.

 

Agora teste e diga se da pra usar denovo depois que o efeito acaba...

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

Scripter: |||||||||| 10%

 

 

Te ajudei?? REP + e ficamos quites...  ;D

 

Atenciosamente,

                   Lucas.

Abraços!

Link para o post
Compartilhar em outros sites

Não funcionou

 

15:08 ADM Holiday [496]: eae
15:08 ADM Holiday [496]: ve agora
15:08 Druh [4102]: mesma coisa

 

eu ja tentei mudar o storage pra +1 em todos, funciona sim, agora quando da um tempo, o bug volta de novo

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

faz assim... Vai na sua database, ai la tem players_storage apague todos que tiver a storage(62164) e peça pra testarem denovo... Provavelmente vai funcionar.

 

Pq agora não funcionou? simples eu adicionei pra tirar a storage 62164 quando o efeito da poção acabar, já que o evento pra poção acabar pra eles já aconteceu e não tirou o storage... então continuara dando que eles já tem o storage na verificação, mas apartir de agora todos que tiver esse storage no momento que acabar a pot , ele vai ser removido, entendeu?

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

Scripter: |||||||||| 10%

 

 

Te ajudei?? REP + e ficamos quites...  ;D

 

Atenciosamente,

                   Lucas.

Abraços!

Link para o post
Compartilhar em outros sites

15:17 ADM Holiday [496]: tenta
15:17 ADM Holiday [496]: agora
15:17 Druh [4104]: aff
15:17 Druh [4104]: msm coisa
15:17 ADM Holiday [496]: ?
15:17 Druh [4104]: nao usa
15:18 ADM Holiday [496]: tenta
15:18 ADM Holiday [496]: agora
15:18 ADM Holiday [496]: ?
15:18 Druh [4104]: nao usa
15:18 Druh [4104]: ainda

 

 

apaguei o storage no SQL como vc pediu e ainda nao ta pegando :(

Link para o post
Compartilhar em outros sites

Então tente esse sistema

 

em actions exp.lua

 

function onUse(cid, item, frompos, item2, topos)


local pausa = 30*60*1000 -- (1000 = 1 segundos) Tempo que o script durará
local texto = "Você dobrou sua Experiencia por 30 minutos" -- Texto que irá receber ao usar a potion.
textofinal = "Acabou o potion de Experiencia." -- Texto que irá receber quando o efeito da potion acabar.
local exp = 2 -- O quanto que você quer que dobre sua experiencia, por exemplo 2 é 2x as rates do seu server.
expfinal = 1 --Não mude, isso é para a experiencia voltar ao normal.
if item.itemid == 9930 then
doRemoveItem(item.uid,1)
doPlayerSetExperienceRate(cid,exp)
doSendMagicEffect(frompos,13)
doPlayerSendTextMessage(cid,22,texto)
addEvent(potion,pausa,cid)
end
end

function potion(pos, cid)
doPlayerSetExperienceRate(pos,expfinal)
doPlayerSendTextMessage(pos,22,textofinal)
end

 

tag

 

<action itemid="9930" script="exp.lua"/>

 

só mude if item.itemid == 9930 then para itemid desejada e <action itemid="9930" script="exp.lua"/> para item desejado também

 

 e apague esse seu mod.. deve resolver...

Scripter: |||||||||| 10%

 

 

Te ajudei?? REP + e ficamos quites...  ;D

 

Atenciosamente,

                   Lucas.

Abraços!

Link para o post
Compartilhar em outros sites

N mas posso restringir se vc assim prefirir.. quer que eu restrinja o uso?

Scripter: |||||||||| 10%

 

 

Te ajudei?? REP + e ficamos quites...  ;D

 

Atenciosamente,

                   Lucas.

Abraços!

Link para o post
Compartilhar em outros sites

tipo, esse script nao mostra quanto tempo falta pra acabar a potion :/

se pudesse colocar um efeito tipo isso doSendMagicEffect(getPlayerPosition(cid), CONST_ME_ICETORNADO), pra mostrar que o player ta com efeito ta ligado? teria como fazer isso? tipo cada 1 segundo soltar esse efeito até a potion acabar


sim voce poderia restrinjir? olha

15:38 Fellz [5825]: aff veio
15:38 Fellz [5825]: perdi 5 potions
15:38 Fellz [5825]: nessa besteira

15:38 Fellz [5825]: de ficar clicando no potion

Link para o post
Compartilhar em outros sites

Humm... entendiii vou tentar ok? depois te mando.

Scripter: |||||||||| 10%

 

 

Te ajudei?? REP + e ficamos quites...  ;D

 

Atenciosamente,

                   Lucas.

Abraços!

Link para o post
Compartilhar em outros sites

Cara não consegui colocar o efeito... mas em compensação eu consegui restringir e quando o cara ja tomou e tenta tomar outra aparece vc tem que esperar o efeito da pot acabar!

 

Vou tentar mais um pouco colocar o efeito se eu conseguir posto aki blz?

 

Edited:vou terminar de mecher no script e posto.

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

Scripter: |||||||||| 10%

 

 

Te ajudei?? REP + e ficamos quites...  ;D

 

Atenciosamente,

                   Lucas.

Abraços!

Link para o post
Compartilhar em outros sites

acho que o efeito coloca no creature script, vc tentou la?

Edit: achei outro script so que da o mesmo error do antigo (que eu postei)

=/

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

cara muito obrigado, valeu mesmo REP+

 

 

edit: nao funcionou aqui, quando eu dou USE nao acontece nada '-'

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

Confira se vc colocou o id do seu item em local (seuitem = 9930 -- seu item que dará double exp) e o msm id na actions.

 

e confira também se vc colocou TODO O SCRIPT EXPO, não esqueceu de nenhuma parte...

 

Se não funcionar poste seu expo.lua e sua tag no actions.

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

Scripter: |||||||||| 10%

 

 

Te ajudei?? REP + e ficamos quites...  ;D

 

Atenciosamente,

                   Lucas.

Abraços!

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo