Jump to content
amoxicilina

Scripting Npc não remove storage

Recommended Posts

Olá pessoa tudo bem?. Estou com um problema e preciso da ajuda da comunidade.

Tenho um NPC que entrega uma storage por um "X" período de tempo que no meu caso seria de 2 dia, mais ao passar esse 2 dias esse storage não expira.

Estou usando, TFS 1.3

 

NPC.LUA

Citar

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local config = {
       
item1 = 12400,
item2 = 12400,
item3 = 12400,
item4 = 12400,
count1 = 5,
count2 = 5,
count3 = 5,
count4 = 10,       
level = 8,    -- Level que precisara para viajár
sto = 99952,    -- Storage não mecher 
tempo = 600, -- tempo que vai durar a storage
quest = 39455, -- quest necessaria...

}
if msgcontains(msg, 'missão') then
    if (getPlayerStorageValue(cid, config.sto) <= os.time()) then
       if getPlayerStorageValue(cid, 39455) >= 1 then
        if getPlayerItemCount(cid, config.item1) >= config.count1 and getPlayerItemCount(cid, config.item2) >= config.count2 and getPlayerItemCount(cid, config.item3) >= config.count3 and getPlayerItemCount(cid, config.item4) >= config.count4 then
            selfSay('Claro Você me provou que será um grande guerreito, agora Você tera acesso de 2 dias ao treinamento offline, com ele você pode treinar durante 12 horas seguidas.', cid)
            setPlayerStorageValue(cid, config.sto, os.time()+config.tempo)
            doPlayerRemoveItem(cid, config.item1, config.count1)
            doPlayerRemoveItem(cid, config.item2, config.count2)
            doPlayerRemoveItem(cid, config.item3, config.count3)
            doPlayerRemoveItem(cid, config.item4, config.count4)
        else
            selfSay('Traga-me os 25 protective charm para poder usar o trainer offline', cid)
        end
    else
            selfSay("Você não completou a quest do ilha dos orc ao south da cidade, complete-a e e mostre-me que você e realmente um guerreiro promissor.", cid)
        end
    else    
        selfSay('Você já fez essa missão, volte aqui quando não tiver mais acesso ao treiner, e faremos uma troca de 25 protective charm por mais 2 dias de acesso ao as estatuas.' , cid)
    return true
    end
end
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

 

Share this post


Link to post
Share on other sites

Olá @amoxicilina, tudo bem?

 

Tente assim:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local config = {
       
item1 = 12400,
item2 = 12400,
item3 = 12400,
item4 = 12400,
count1 = 5,
count2 = 5,
count3 = 5,
count4 = 10,       
level = 8,    -- Level que precisara para viajár
sto = 99952,    -- Storage não mecher 
tempo = 2, -- tempo que vai durar a storage (em horas)
quest = 39455, -- quest necessaria...

}
if msgcontains(msg, 'missão') then
    if (getPlayerStorageValue(cid, config.sto) <= os.time()) then
       if getPlayerStorageValue(cid, 39455) >= 1 then
        if getPlayerItemCount(cid, config.item1) >= config.count1 and getPlayerItemCount(cid, config.item2) >= config.count2 and getPlayerItemCount(cid, config.item3) >= config.count3 and getPlayerItemCount(cid, config.item4) >= config.count4 then
            selfSay('Claro Você me provou que será um grande guerreito, agora Você tera acesso de 2 dias ao treinamento offline, com ele você pode treinar durante 12 horas seguidas.', cid)
      		setPlayerStorageValue(cid, config.sto, os.time()+config.tempo*24*60*60)
            doPlayerRemoveItem(cid, config.item1, config.count1)
            doPlayerRemoveItem(cid, config.item2, config.count2)
            doPlayerRemoveItem(cid, config.item3, config.count3)
            doPlayerRemoveItem(cid, config.item4, config.count4)
        else
            selfSay('Traga-me os 25 protective charm para poder usar o trainer offline', cid)
        end
    else
            selfSay("Você não completou a quest do ilha dos orc ao south da cidade, complete-a e e mostre-me que você e realmente um guerreiro promissor.", cid)
        end
    else    
        selfSay('Você já fez essa missão, volte aqui quando não tiver mais acesso ao treiner, e faremos uma troca de 25 protective charm por mais 2 dias de acesso ao as estatuas.' , cid)
    return true
    end
end
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Share this post


Link to post
Share on other sites
21 horas atrás, 9k22 disse:

Olá @amoxicilina, tudo bem?

 

Tente assim:


local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local config = {
       
item1 = 12400,
item2 = 12400,
item3 = 12400,
item4 = 12400,
count1 = 5,
count2 = 5,
count3 = 5,
count4 = 10,       
level = 8,    -- Level que precisara para viajár
sto = 99952,    -- Storage não mecher 
tempo = 2, -- tempo que vai durar a storage (em horas)
quest = 39455, -- quest necessaria...

}
if msgcontains(msg, 'missão') then
    if (getPlayerStorageValue(cid, config.sto) <= os.time()) then
       if getPlayerStorageValue(cid, 39455) >= 1 then
        if getPlayerItemCount(cid, config.item1) >= config.count1 and getPlayerItemCount(cid, config.item2) >= config.count2 and getPlayerItemCount(cid, config.item3) >= config.count3 and getPlayerItemCount(cid, config.item4) >= config.count4 then
            selfSay('Claro Você me provou que será um grande guerreito, agora Você tera acesso de 2 dias ao treinamento offline, com ele você pode treinar durante 12 horas seguidas.', cid)
      		setPlayerStorageValue(cid, config.sto, os.time()+config.tempo*24*60*60)
            doPlayerRemoveItem(cid, config.item1, config.count1)
            doPlayerRemoveItem(cid, config.item2, config.count2)
            doPlayerRemoveItem(cid, config.item3, config.count3)
            doPlayerRemoveItem(cid, config.item4, config.count4)
        else
            selfSay('Traga-me os 25 protective charm para poder usar o trainer offline', cid)
        end
    else
            selfSay("Você não completou a quest do ilha dos orc ao south da cidade, complete-a e e mostre-me que você e realmente um guerreiro promissor.", cid)
        end
    else    
        selfSay('Você já fez essa missão, volte aqui quando não tiver mais acesso ao treiner, e faremos uma troca de 25 protective charm por mais 2 dias de acesso ao as estatuas.' , cid)
    return true
    end
end
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

ainda continua sem remover a storege apos passar o período de 2 horas. 🙁

 

Share this post


Link to post
Share on other sites
13 minutos atrás, amoxicilina disse:

ainda continua sem remover a storege apos passar o período de 2 horas. 🙁

 

 

aaah, são 2 horas? Eu entendi 2 dias... Me desculpe:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local config = {
       
item1 = 12400,
item2 = 12400,
item3 = 12400,
item4 = 12400,
count1 = 5,
count2 = 5,
count3 = 5,
count4 = 10,       
level = 8,    -- Level que precisara para viajár
sto = 99952,    -- Storage não mecher 
tempo = 2, -- tempo que vai durar a storage (em horas)
quest = 39455, -- quest necessaria...

}
if msgcontains(msg, 'missão') then
    if (getPlayerStorageValue(cid, config.sto) <= os.time()) then
       if getPlayerStorageValue(cid, 39455) >= 1 then
        if getPlayerItemCount(cid, config.item1) >= config.count1 and getPlayerItemCount(cid, config.item2) >= config.count2 and getPlayerItemCount(cid, config.item3) >= config.count3 and getPlayerItemCount(cid, config.item4) >= config.count4 then
            selfSay('Claro Você me provou que será um grande guerreito, agora Você tera acesso de 2 dias ao treinamento offline, com ele você pode treinar durante 12 horas seguidas.', cid)
      		setPlayerStorageValue(cid, config.sto, os.time()+config.tempo*60*60)
            doPlayerRemoveItem(cid, config.item1, config.count1)
            doPlayerRemoveItem(cid, config.item2, config.count2)
            doPlayerRemoveItem(cid, config.item3, config.count3)
            doPlayerRemoveItem(cid, config.item4, config.count4)
        else
            selfSay('Traga-me os 25 protective charm para poder usar o trainer offline', cid)
        end
    else
            selfSay("Você não completou a quest do ilha dos orc ao south da cidade, complete-a e e mostre-me que você e realmente um guerreiro promissor.", cid)
        end
    else    
        selfSay('Você já fez essa missão, volte aqui quando não tiver mais acesso ao treiner, e faremos uma troca de 25 protective charm por mais 2 dias de acesso ao as estatuas.' , cid)
    return true
    end
end
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Share this post


Link to post
Share on other sites
1 hora atrás, 9k22 disse:

aaah, são 2 horas? Eu entendi 2 dias... Me desculpe:


local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local config = {
       
item1 = 12400,
item2 = 12400,
item3 = 12400,
item4 = 12400,
count1 = 5,
count2 = 5,
count3 = 5,
count4 = 10,       
level = 8,    -- Level que precisara para viajár
sto = 99952,    -- Storage não mecher 
tempo = 2, -- tempo que vai durar a storage (em horas)
quest = 39455, -- quest necessaria...

}
if msgcontains(msg, 'missão') then
    if (getPlayerStorageValue(cid, config.sto) <= os.time()) then
       if getPlayerStorageValue(cid, 39455) >= 1 then
        if getPlayerItemCount(cid, config.item1) >= config.count1 and getPlayerItemCount(cid, config.item2) >= config.count2 and getPlayerItemCount(cid, config.item3) >= config.count3 and getPlayerItemCount(cid, config.item4) >= config.count4 then
            selfSay('Claro Você me provou que será um grande guerreito, agora Você tera acesso de 2 dias ao treinamento offline, com ele você pode treinar durante 12 horas seguidas.', cid)
      		setPlayerStorageValue(cid, config.sto, os.time()+config.tempo*60*60)
            doPlayerRemoveItem(cid, config.item1, config.count1)
            doPlayerRemoveItem(cid, config.item2, config.count2)
            doPlayerRemoveItem(cid, config.item3, config.count3)
            doPlayerRemoveItem(cid, config.item4, config.count4)
        else
            selfSay('Traga-me os 25 protective charm para poder usar o trainer offline', cid)
        end
    else
            selfSay("Você não completou a quest do ilha dos orc ao south da cidade, complete-a e e mostre-me que você e realmente um guerreiro promissor.", cid)
        end
    else    
        selfSay('Você já fez essa missão, volte aqui quando não tiver mais acesso ao treiner, e faremos uma troca de 25 protective charm por mais 2 dias de acesso ao as estatuas.' , cid)
    return true
    end
end
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

foi mal erro meu achei que tinha colocado pra 2 horas kkkkk... passou as duas horas não perdeu a storage achei q não esta funcionando, kkk... como coloco pra minutos pra testar aqui e ver em um período de tempo menor ? aqui:

setPlayerStorageValue(cid, config.sto, os.time()+config.tempo*60*60*60)

ou 

setPlayerStorageValue(cid, config.sto, os.time()+config.tempo*60) ?

Share this post


Link to post
Share on other sites

@amoxicilina Olá, o tempo em que os.time() retorna é em segundos, ou seja 600 como está na tabela, daria um tempo de 10 minutos.

agora se você fazer * 60, vai dar 10 Horas.

600 * 60 = 36000 = 10Horas.

 


O rei de seu proprio destino é aquele que luta pela gloria do amanhã!
Discord : ZoR#9373


 

Share this post


Link to post
Share on other sites

2 * 24 * 60 * 60

 

Amarelo = segundos

Vermelho = minutos

Azul = horas

Cinza = dias

Share this post


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.


  • Similar Content

    • By Lisbeky
      .Qual servidor ou website você utiliza como base? TFS 0.36
       
      Qual o motivo deste tópico? Amuleto com error de charge e o look fecha o tibia
       
      Está surgindo algum erro? Se sim coloque-o aqui. 
       
      Você tem o código disponível? Se tiver publique-o aqui: 
         
      Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 
       
    • By Mor3nao
      Eu queria que a minha sword vip, tivesse a chance de bater um 'exori', mas to tendo problemas com isso, botei o codigo aí embaixo, tipo, se eu boto a area igual tem nas spells (AREA_SQUARE1X1), dá o erro: LuaScriptInterface::luaCombatSetArea(). Area not found 
      Aí eu tentei botar que nem o da burst arrow:
      area = createCombatArea({ {1, 1, 1}, {1, 3, 1}, {1, 1, 1} }) Aí não dá erro, mas, o "exori" funciona como se fosse o target q usasse, meio q "explode" nele.
       
      Alguem sabe como posso fazer isso, ou, pelo menos, algum comando que eu comando q eu consiga pegar a posição do player q tá atacando?
       
      local combat = createCombatObject() combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) combat:setParameter(COMBAT_PARAM_BLOCKARMOR, true) combat:setFormula(COMBAT_FORMULA_SKILL, 0, 0, 1, 0) local combat2 = createCombatObject() local area = createCombatArea(AREA_SQUARE1X1) combat2:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) combat2:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) combat2:setParameter(COMBAT_PARAM_BLOCKARMOR, true) combat2:setArea(area) function onGetFormulaValues2(player, skill, attack, factor) local skillTotal = skill * attack local levelTotal = player:getLevel() / 5 return -(((skillTotal * 0.07) + 7) + (levelTotal)), -(((skillTotal * 0.09) + 11) + (levelTotal)) end setCombatCallback(combat2, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues2") function onUseWeapon(cid, var, player, creature) local chance = math.random(2) if chance <= 2 then doCombat(cid, combat2, var) else doCombat(cid, combat, var) end return true end  
    • By Babiloniaoz
      Boa galera estou com um erro em actions.lua do meu servidor tfs 1.3 preciso de ajuda não consegui resolver esse erro.
      action.lua
       
      Erro:
      Lua Script Error: [Action Interface] data/actions/scripts/tools/shovel.lua:onUse data/actions/lib/actions.lua:322: attempt to index local 'player' (a nil value) stack traceback:         [C]: in function '__index'         data/actions/lib/actions.lua:322: in function <data/actions/lib/actions. lua:219>   
      Alguém me da essa força tem meu like vlw.
       
    • By Enforc
      Duvida sanada
    • By Mor3nao
      Bom, to tentando fazer um script aqui, tá tudo pronto, só to tendo um pequeno problema, o addEvent, não envia esse "me", a storage no caso, e além disso, nada do que eu conheça, lê ela, queria um jeito de usar o spectators pra achar, mas nao consegui adaptar, como fazer?
       
      obs: Só vai ter uma pessoa nessa area;
             Na real, são 32 opções, só simplifiquei essas 2 primeiras, mas todas nesse mesmo esquema;
             Meu excutavel é o otservbr, 12.31
      local hunts = { [1] = {4, "Glooth Anemone", "Glooth Bandit", "Glooth Brigand" }, [2] = {5, "Vicious Squire", "Hero", "Vile Grandmaster", "Renegade Knight" } } function onUse(player, item, fromPosition, target, toPosition, isHotkey, cid) local rangeX = 2 local rangeY = 2 local centerPosition1 = Position((pPos.x+4), pPos.y, pPos.z) local pPos = player:getPosition() local me = player:getStorageValue(991968668) if pPos.y == 5003 then if (player:getStorageValue(991968667) == 1) then addEvent(spawnMonsters1, 100, centerPosition1, rangeX, rangeY, pPos, me) end end end function spawnMonsters1(centerPosition1, rangeX, rangeY, pPos, me) local b = me local hunt = hunts[b] local monstrorand = math.random(2, hunt[1]) local sumon = hunt[monstrorand] local monstros = 5 local spectators, spectator = Game.getSpectators(centerPosition1, false, false, rangeX, rangeX, rangeY, rangeY) if (#spectators - 1) < monstros then Game.createMonster(sumon, centerPosition1) end addEvent(spawnMonsters1, 100, centerPosition1, rangeX, rangeY, pPos) end Print do erro:

  • Recently Browsing   0 members

    No registered users viewing this page.


Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...