Ir para conteúdo
  • Cadastre-se

(Resolvido)Como faz pra checar storage em tabela?


Ir para solução Resolvido por Wise,

Posts Recomendados

Como faz pra um checar uma storage em tabela? exemplo:

 

Fiz um item que ao usar ele checa a storage do player e se ele tiver X storage, ele ganha uma certa quantidade de HP.

 

Só que da esse erro ao checar a storage pela tabela:

[18/11/2015 23:50:00] data/actions/scripts/Classes/teste.lua:9: attempt to call global 'getPlayerStorage' (a nil value)

local config = {

    [3001] = {HP = 900}, -- [Storage] = {HP = Quantidade}
    [3002] = {HP = 780},
}

function onUse(cid, item, frompos)

local valor = config[getPlayerStorageValue(cid)]

setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) +valor.HP)
doCreatureAddHealth(cid, getCreatureMaxHealth(cid))

doSendMagicEffect(frompos, 10)

doPlayerSendTextMessage(cid, 20, "Congratulations!")

return true
end

Como faço pra não ocorrer esse erro e checar a storage? pliz :wacko:

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

"Pense nisso você tbm"

"Tudo o que um sonho precisa para ser realizado é alguém que acredite que ele possa ser realizado"

35l7z91.jpg

Link para o post
Compartilhar em outros sites
local config = {
    
    [3001] = {HP = 900}, -- [Storage] = {HP = Quantidade}
    [3002] = {HP = 780},
}

function onUse(cid, item, frompos)
    
    local valor = config[getPlayerStorageValue(cid)]
    if valor then
       setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) +valor.HP)
       doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
       doSendMagicEffect(frompos, 10)
       doPlayerSendTextMessage(cid, 20, "Congratulations!")
    end
    
    return true
end

 

 

Só colocar o valor em questão

if tabela[x] then
   print("foi")
else
   print("n foi")
end

se X corresponder a algum índice da tabela, vai retornar algo, se não, nil, e nil é interpretado como false, no if do lua.

@Flaah, não esqueça de remover o item, ou modificar o storage, para que o player não possa usar de novo quantas vezes quiser.

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites
20 horas atrás, Flaah disse:

data/actions/scripts/Classes/teste.lua:9: attempt to call global 'getPlayerStorage' (a nil value)

 

Veja:

local valor = config[getPlayerStorageValue(cid)]

Você se esqueceu de determinar o parâmetro referente ao id da key a ter o valor retornado, por isso o nil citado.

getPlayerStorageValue(cid, key)

Faça uso de um escopo como o que o membro acima fez, para evitar demais erros.
Editado por Wise (veja o histórico de edições)

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

Ocorreu esse erro:

[19/11/2015 22:20:53] [Error - Action Interface]
[19/11/2015 22:20:53] data/actions/scripts/Classes/guerreiro.lua:onUse
[19/11/2015 22:20:53] Description:
[19/11/2015 22:20:53] (luaGetCreatureStorage) Creature not found

 

#EDIT

 

Fiz uma pequena edição pra arrumar esse erro, só que agora o player mesmo com a storage, não da o HP referente a storage setada no player.

 

Script:

 

local config = {
    
    [3001] = {HP = 900}, -- [Storage] = {HP = Quantidade}
    [3002] = {HP = 780},
}

function onUse(cid, item, frompos)
    
    if valor then
    local valor = config[getPlayerStorageValue(cid)]

       setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) +valor.HP)
       doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
       doSendMagicEffect(frompos, 10)
       doPlayerSendTextMessage(cid, 20, "Congratulations!")

    end
    return true
end

 

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

"Pense nisso você tbm"

"Tudo o que um sonho precisa para ser realizado é alguém que acredite que ele possa ser realizado"

35l7z91.jpg

Link para o post
Compartilhar em outros sites
  • Solução
17 horas atrás, Flaah disse:

só que agora o player mesmo com a storage, não da o HP referente a storage setada no player.

Você não deu ouvidos ao que eu disse acima. Releia e depois observe:

 

local skey = 1234 -- storage key id
local t = {
    [3001] = 900, -- [valueId] = HP
    [3002] = 780
}

 

function onUse(cid, item, fromPos)
    local v = t[getPlayerStorageValue(cid, skey)]
    
    if v then
        setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) + v)
        doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
        doSendMagicEffect(fromPos, CONST_ME_TELEPORT)
        doPlayerSendTextMessage(cid, 20, "Congratulations!")
    end

 

    return true
end

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

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

Mesmo assim não foi brother :wacko:

"Pense nisso você tbm"

"Tudo o que um sonho precisa para ser realizado é alguém que acredite que ele possa ser realizado"

35l7z91.jpg

Link para o post
Compartilhar em outros sites
4 horas atrás, Flaah disse:

Mesmo assim não foi brother :wacko:

 

O que deu?

o script dele está correto.

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

Mesmo com a storage eu não recebo o HP.

Tbm não da erro algum no console.

"Pense nisso você tbm"

"Tudo o que um sonho precisa para ser realizado é alguém que acredite que ele possa ser realizado"

35l7z91.jpg

Link para o post
Compartilhar em outros sites

O script do Wise está funcionando normalmente, você deve citar o valor da storage "1234" na tabela.

Se o valor da storage 1234 for 3001 adiciona 900 de hp, se o valor da storage 1234 for 3002 adiciona 780 de hp.

Use o comando /storage Player, 1234, 3001 para testar!

Link para o post
Compartilhar em outros sites

  setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) + v)

 

Como ele vai receber tal vida se não tem um numero válido...

 

                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Assinatura~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                                                pmnz1.jpg

Link para o post
Compartilhar em outros sites

@Wakon então eu tbm tenho q setar o valor 1234 no player além do valor da tabela (3001)?

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

"Pense nisso você tbm"

"Tudo o que um sonho precisa para ser realizado é alguém que acredite que ele possa ser realizado"

35l7z91.jpg

Link para o post
Compartilhar em outros sites
34 minutos atrás, Flaah disse:

@Wakon então eu tbm tenho q setar o valor 1234 no player além do valor da tabela (3001)?

 

Você não está entendendo.

 

Quando falamos de storage, há dois valores: key, value.

a key é o que você precisa para pegar o value, no caso, 1234, virou a key, e 3001 é o value.

 

antes 3001 era o value, só que para fazer funcionar daquele jeito, teria que usar um comando for, que é bem mais pesado em termos de desempenho, em relação a maneira que o wise fez...

 

Então onde você usou: 

doCreatureSetStorage(cid, 3001, 1)

ficará:

doCreatureSetStorage(cid, 1234, 3001)

 

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

E pra remover o valor 3001 é:


setPlayerStorageValue(cid, 3001, 0) ou setPlayerStorageValue(cid, 0, 3001)?

 

Não sei se isso vai fazer diferença, mais o server que estou trabalhando é 0.3.6 - 8.54 kk' :P

"Pense nisso você tbm"

"Tudo o que um sonho precisa para ser realizado é alguém que acredite que ele possa ser realizado"

35l7z91.jpg

Link para o post
Compartilhar em outros sites
1 minuto atrás, Flaah disse:

setPlayerStorageValue(cid, 3001, 0)

 

0 ou -1 .

o 0 é valor diferente do padrão, um player que nunca teve o storage, é -1.

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

Huum.. quaase conseguir kkk' só esta dando 1 probleminha, tipo: Não to conseguindo retirar a storage setada junto da key 1234, pelo comando setPlayerStorageValue(cid, 3001, 0).

 

Porq tenho um script no creaturescripts, que se reconhecer algum player com a storage 3001 no servidor, ele da um buff na skill.

#EDIT

Mil desculpas, era um erro totalmente meu kk''

Muuito obrigado pela ajuda de vcs, sério mesmo! :tongue:

Ainda sou novato em script kk', mesmo assim estou me esforçando muito pra aprender :wink:

Obrigado @Caronte, @Wise e @Wakon, vcs 3 merecem um Gostei BRUTO pela ajuda, kk' :v

 

Obs: Desculpa @Caronte pela encheção de saco de minha parte kkk' :v

 

Obrigado TibiaKing e toda a equipe! bjs' <3

 

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

"Pense nisso você tbm"

"Tudo o que um sonho precisa para ser realizado é alguém que acredite que ele possa ser realizado"

35l7z91.jpg

Link para o post
Compartilhar em outros sites
58 minutos atrás, Flaah disse:

Huum.. quaase conseguir kkk' só esta dando 1 probleminha, tipo: Não to conseguindo retirar a storage setada junto da key 1234, pelo comando setPlayerStorageValue(cid, 3001, 0).

 

Porq tenho um script no creaturescripts, que se reconhecer algum player com a storage 3001 no servidor, ele da um buff na skill.

#EDIT

Mil desculpas, era um erro totalmente meu kk''

Muuito obrigado pela ajuda de vcs, sério mesmo! :tongue:

Ainda sou novato em script kk', mesmo assim estou me esforçando muito pra aprender :wink:

Obrigado @Caronte, @Wise e @Wakon, vcs 3 merecem um Gostei BRUTO pela ajuda, kk', mas só que pela falta de "munição de gosteis" vou agradecer melhor ao @Wise pelo script. :v


Amanhã estarei agradecendo ao pessoal que tbm me deu essa força, podem vim me cobrar kk' ;D

 

Obs: Desculpa @Caronte pela encheção de saco de minha parte kkk' :v

 

Obrigado TibiaKing e toda a equipe! bjs' <3

 

 

 

 

 

 

Pelo menos você ta aprendendo para não depender de ninguém, é melhor do que sair pedindo as coisas, sem saber pra que funciona.

é bem mais legal ajudar quem quer aprender, do que ajudar quem só quer o script.

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

Verdade, não adianta ser dono de um server sem saber como funciona kk' :wink:

"Pense nisso você tbm"

"Tudo o que um sonho precisa para ser realizado é alguém que acredite que ele possa ser realizado"

35l7z91.jpg

Link para o post
Compartilhar em outros sites
13 horas atrás, karlkalvin disse:

 

Como ele vai receber tal vida se não tem um numero válido...

 

Leia um pouco sobre variáveis, valores numéricos e operadores aritméticos, assim vai interpretar melhor o que foi feito.

 

3 horas atrás, Caronte disse:

Pelo menos você ta aprendendo para não depender de ninguém, é melhor do que sair pedindo as coisas, sem saber pra que funciona

Concordo.

 

@Flaah

Disponha.

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

Desculpe reviver o tópico e o assunto @Wise e @Caronte, mais teria como vcs me darem um help nesse errinho sobre storage e condition?
 

Tipo, estou criando um script aqui, que pela tabela da storage posso adicionar uma condition ao meu personagem.

 

Seria tipo uma "Pedra de Evolução", que ao usar ganharia uma condition de skills e nova vocation. exemplo:

 

Quando o player com storage 3001 usa-se o item, ele ganharia a vocation 11 (Mega Guerreiro), junto de seus buffs de skills.

A mesma coisa com o Elfo, com storage 4001, ao usar o item ele ganha a vocation 12 (Mega Elfo) e seus buffs respectivos.

Segui a script aqui:
 

local skey = 1234

local config = {

[3001] = {LifeOld = 900, LifeNew = 1200, StorOld = 3001, StorNew = 3003, msg = "Mega Guerreiro", condition = megaguerreiro, lookType = 2, vocation = 11, effect = 2},

[4001] = {LifeOld = 800, LifeNew = 2400, StorOld = 4001, StorNew = 4003, msg = "Mega Elfo", condition = megaelfo, lookType = 8, vocation = 12, effect = 2},

}

local megaguerreiro = createConditionObject(CONDITION_ATTRIBUTES)

setConditionParam(megaguerreiro, CONDITION_PARAM_SKILL_FIST, 61)
setConditionParam(megaguerreiro, CONDITION_PARAM_SKILL_CLUB, 62)
setConditionParam(megaguerreiro, CONDITION_PARAM_SKILL_SWORD, 79)
setConditionParam(megaguerreiro, CONDITION_PARAM_SKILL_AXE, 79)
setConditionParam(megaguerreiro, CONDITION_PARAM_TICKS, -1)

local megaelfo = createConditionObject(CONDITION_ATTRIBUTES)

setConditionParam(megaelfo, CONDITION_PARAM_SKILL_FIST, 84)
setConditionParam(megaelfo, CONDITION_PARAM_SKILL_CLUB, 79)
setConditionParam(megaelfo, CONDITION_PARAM_SKILL_SWORD, 35)
setConditionParam(megaelfo, CONDITION_PARAM_SKILL_AXE, 92)
setConditionParam(megaelfo, CONDITION_PARAM_TICKS, -1)

function onUse(cid, item, frompos)

	local vocu = config[getPlayerStorageValue(cid, skey)]
	if vocu then

	setPlayerStorageValue(cid, vocu.StorOld, 0)

	if not isInArray(vocu.vocation, getPlayerVocation(cid)) then

        local outfit = getCreatureOutfit(cid)
        outfit.lookType = vocu.lookType

        doCreatureChangeOutfit(cid, outfit)

	setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) -vocu.LifeOld)
	doCreatureAddHealth(cid, getCreatureMaxHealth(cid))

	doPlayerSetVocation(cid, vocu.vocation)

	setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) +vocu.LifeNew)
	doCreatureAddHealth(cid, getCreatureMaxHealth(cid))

	doSendMagicEffect(frompos, vocu.effect)

	doPlayerSendTextMessage(cid, 20, "Congratulations! You become a "..vocu.msg.."!")

	doAddCondition(cid, vocu.condition)

	setPlayerStorageValue(cid, vocu.StorNew, 1)

	else
	doPlayerSendCancel(cid, "You are now ready.") 

return true

end
end
end

Só que na hora da isso:

[22/11/2015 21:18:57] [Error - Action Interface]
[22/11/2015 21:18:57] data/actions/scripts/Classes/megastone.lua:onUse
[22/11/2015 21:18:57] Description:
[22/11/2015 21:18:57] (luaDoAddCondition) Condition not found

 

Estou com dúvidas de como fazer isso, já tentei de tudo, PLIZ HELP ME.. :cry:

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

"Pense nisso você tbm"

"Tudo o que um sonho precisa para ser realizado é alguém que acredite que ele possa ser realizado"

35l7z91.jpg

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.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por chateadoagr
      Bem-vindo ao Genesis Online Tibia (GOT), um mundo onde a civilização foi devastada por um apocalipse zumbi. Inspirado em referências como The Walking Dead e Resident Evil, o GOT desafia você a sobreviver em meio ao caos, enfrentando hordas de mortos-vivos, explorando ruínas perigosas e formando alianças estratégicas. Embarque nesta jornada épica de sobrevivência e descoberta, onde cada escolha molda seu destino em um cenário hostil repleto de desafios e perigos iminentes.
       
       
      Adentre o universo de Genesis Online Tibia (GOT), um jogo repleto de sistemas inovadores e emocionantes. Equipe-se com um vasto arsenal de armas para enfrentar as ameaças do apocalipse zumbi, enquanto o sistema autoloot simplifica suas conquistas. Desenvolva seu personagem através de um sistema de upgrade único, aprimorando habilidades e atributos para enfrentar desafios cada vez mais formidáveis.
       
      Explore um mundo imersivo onde o som desempenha um papel crucial, criando uma atmosfera envolvente e realista. Vasculhe cada canto em busca de recursos vitais, desvendando segredos e tesouros ocultos. Siga uma cativante história através de missões que expandem o enredo, revelando os mistérios por trás do apocalipse e oferecendo recompensas valiosas.
       
      Em Genesis Online Tibia, a jornada pela sobrevivência é repleta de ação, estratégia e emoção, convidando você a se aventurar em um mundo onde cada decisão molda seu destino e determina sua capacidade de enfrentar os desafios que aguardam.

      Em breve imagens do servidor!
       
       
    • Por Lion
      O sistema de medalhas do TibiaKing foi reativado.
      As medalhas serão entregues automaticamente, muitos de vocês podem já ter recebido.
      Aproximadamente 12.000 contas do Tk já foram notificadas.
       
      Medalhas Raras
      2 novas medalhas raros criados (Guardião da Aurora, Poder Áureo) Quanto mais participar do fórum mais chances tem de desbloquear os medalhas raras.  
      https://tibiaking.com/medalhas/
       
      Show Off:
      tkmedalhas.mp4
       
      Créditos:
      BrooMop (BW) Medalhões-base doados ao Tibia King.
      Tibia (Cipsoft) Molduras-base e itens copiados do Tibia Wiki.
      @Cat Criação de novos medalhões e animações.
       
       
    • Por rafaelvozinho
      Vagas abertas [-]
      Foxers, é com grande felicidade que anunciamos o processo seletivo para recrutamento de um novo Developer e Mapper para a nossa equipe. 
       
      Nós da staff chegamos nessa decisão por sermos apaixonados pelo bom e velho fox world que foi lançado anos atrás no 8.4, por sermos apaixonados sempre tentamos abrir um servidor de fox world porém sempre faltou aquela pitada de inovação, foi então que tivemos a brilhante ideia. Converter o fox do 8.4 para o 12.31 e inserir novidades como: novas caves, itens, monstros e não menos importante quests com sistemas inovadores!

       
      No momento estamos a procura das vagas citadas acima para pessoas que estão afim de crescer com o servidor e evoluir com o mesmo, nós procuramos pessoas dedicadas, que tenha disponibilidade de horario, disponibilidade de contato e dispostas a se dedicarem com o trabalho em equipe. 
      A inscrição poderá ser enviada como mensagem privada ao meu perfil aqui no tibiaking @Faysal, as pessoas que se inscreveram irão passar por uma analise e serão selecionadas para uma entrevista. Aos interessados favor ler as características das vagas disponiveis.
       
      Características [-]
       
      Developer
       - Função: Programador Lua/C++
       - Descrição: Desenvolvimento em Lua, C++, as unicas exigências que pedimos é a entrega dentro do prazo.
       - Idade: Temos preferência por pessoas com mais de 18 anos
       - Experiência: Conhecimento em programação em Lua e C++, ter conhecimento avançado será um grande diferencial.
       - Confiança: Procuramos desenvolvedores responsáveis a fim de prestar um bom serviço na área de desenvolvimento de nossos sistemas, conhecimento, confiança e segurança é primordial!
       
       
      Mapper
       
       - Função: Mapper
       - Descrição: Elaboração de novas áreas e estilização das já existentes
       - Idade: Temos preferência por pessoas com mais de 16 anos
       - Experiência: Conhecimento mediano em mapping, ter conhecimento avançado será um grande diferencial.
       - Confiança: Procuramos mappers responsáveis a fim de prestar um bom serviço na área. Conhecimento e criatividade são essenciais!
       
      Inscrição [-]
       
      Aguardamos as inscrições via Private Messenger aqui no fórum com as seguintes Informações:
       
       
       - Nome Completo: 
       - Idade:
       - Vaga Escolhida:
       - Whatsapp para contato:
       - Experiência:
       - Conhecimentos Adicionais:

      Obs: No campo Experiência utilizar as seguntes categorias: Trainee (novato), Junior (mediano), Pleno (avançado), Sênior (Profissional)
       
      Aguardamos sua inscrição.

      Atenciosamente,
      Rafael  - ADM Rafael - 51 999465729 whatsapp 
    • Por Imperius
      Olá, pessoal! Acabei encontrando um script que tinha feito a um tempo atrás. Estou compartilhando aqui para quem quiser usar ou melhorar.
       
      É bem parecido com os outros sistemas de roleta, igual deste tópico: https://tibiaking.com/forums/topic/101557-action-cassino-roleta-de-items/
       
      Como funciona?
       
      O "Treasure Chest" é um item custom, onde o jogador têm a possibilidade de ganhar itens raros ou bem meia boca. Tudo dependerá da sorte.
       
      O jogador precisa tacar o treasure chest na bancada e acionar a alavanca. O treasure chest irá se transformar em vários itens de forma randômica no qual o jogador poderá ou não ganhar. No final, apenas um item é entregue ao jogador.
       
      Para entender melhor o seu funcionamento, segue o GIF abaixo:
       

       
       
      em data > actions > actions.xml
       
       
      em data > actions > scripts > crie um arquivo chamado leverTreasureChest.lua
       
       
      no banco de dados do servidor, adicione o seguinte código em "SQL":
       
       
       

      Também estou disponibilizando uma página PHP, para quem quiser usar no site do servidor. Na página tem informações sobre o funcionamento, quais são os possíveis prêmios e a lista de jogadores que ganharam os itens raros.
       

       
       
      Espero ter ajudado de alguma forma! : )
       
      treasure_chest.php
    • Por amoxicilina
      Action: Remover skull
       
       
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo