Postado Novembro 19, 2015 9 anos 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 Editado Novembro 19, 2015 9 anos por Flaah (veja o histórico de edições)
Postado Novembro 19, 2015 9 anos 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.
Postado Novembro 19, 2015 9 anos 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 Novembro 19, 2015 9 anos por Wise (veja o histórico de edições)
Postado Novembro 20, 2015 9 anos Autor 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 Novembro 20, 2015 9 anos por Flaah (veja o histórico de edições)
Postado Novembro 20, 2015 9 anos 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 Novembro 20, 2015 9 anos por Wise (veja o histórico de edições)
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.