Jump to content

(Resolvido)[BUG SCRIPT] Double xp potion socorro


Go to solution Solved by llucas75,

Recommended Posts

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Á :)

Edited by Daaniel (see edit history)
Link to post
Share on other 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 to post
Share on other 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

Edited by poko360 (see edit history)
Link to post
Share on other 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...

Edited by llucas75 (see edit history)

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

 

 

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

 

Atenciosamente,

                   Lucas.

Abraços!

Link to post
Share on other 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

Edited by poko360 (see edit history)
Link to post
Share on other 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?

Edited by llucas75 (see edit history)

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

 

 

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

 

Atenciosamente,

                   Lucas.

Abraços!

Link to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other sites

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

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

 

 

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

 

Atenciosamente,

                   Lucas.

Abraços!

Link to post
Share on other 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.

Edited by llucas75 (see edit history)

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

 

 

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

 

Atenciosamente,

                   Lucas.

Abraços!

Link to post
Share on other 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.

Edited by llucas75 (see edit history)

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

 

 

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

 

Atenciosamente,

                   Lucas.

Abraços!

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

Confirmação de Termo