mister17 10 Postado Janeiro 15, 2020 Share Postado Janeiro 15, 2020 (editado) Ola todos tudo bem? Estou implementando alguns sistemas em um server e ao colocar sistema de fusão tive este erro, alguém por gentileza pode me ajudar? Desde ja sou grato por tudo Erro distro Spoiler Editado Janeiro 15, 2020 por mister17 Link para o comentário Compartilhar em outros sites More sharing options...
0 BlazerX 51 Postado Janeiro 15, 2020 Share Postado Janeiro 15, 2020 (editado) Veja bem o que você fez, lembre-se não basta copiar e colar código sem entender, você está tentando concatenar um valor que seja nulo ou seja esse seu heldType[1] não está retornando o valor desejado para que a concatenação seja bem sucedida. Editado Janeiro 15, 2020 por BlazerX mister17 reagiu a isso 1 Link para o comentário Compartilhar em outros sites More sharing options...
0 mister17 10 Postado Janeiro 15, 2020 Autor Share Postado Janeiro 15, 2020 (editado) 16 minutos atrás, BlazerX disse: Veja bem o que você fez, lembre-se não basta copiar e colar código sem entender, você está tentando concatenar um valor que seja nulo ou seja esse seu heldType[1] não está retornando o valor desejado para que a concatenação seja bem sucedida. entendi, eu tenho 1 do mesmo perfil que esta rodando 100% tentei adicionar a parte do valores mas mesmo assim qual eu insiro o paragrafo da cobrança do dinheiro ai ele me reporta este erro Abaixo é o codigo que tenho para apena a fusão esta funcionando 100% sem cobrar o valor necessario Spoiler -- Held Fusion 0.1 by Marcot -- Se encontrou algum erro no script, favor enviar PM explicando os erros -- http://www.tibiaking.com/forum/profile/120572-marcot/ -- Configuracoes necessarias para o script local config = { quest = { -- Precisa fazer quest? (Nao mexa caso negativo) necessaria = false, -- Eh necessario fazer uma quest para liberar o sistema? storageID = 10006, -- Qual o storageID dessa quest? (caso true, anteriormente) }, chestPos = {x = 1017, y = 1072, z = 13, stackpos = 1},-- Posicao do Bau (certifique-se que nao tenha nada encima dele) --{x = 1005, y = 1072, z = 13, stackpos = 1},-- Posicao do Bau (certifique-se que nao tenha nada encima dele) -- Tenha atencao para que a soma das chances dos helds em cada tier seja igual a 100 prices = { ["tier_1"] = 60000, ["tier_2"] = 150000, ["tier_3"] = 300000, ["tier_4"] = 700000, ["tier_5"] = 1000000, ["tier_6"] = 1500000, }, helds = { -- Item IDs e chance de vir o held [1] = { -- Array Tier 1 {ID = 13720, chance = 100}, --{ID = 2160, chance = 80}, --{ID = 2158, chance = 10}, }, [2] = { -- Array Tier 2 {ID = 13818, chance = 100}, --{ID = 2001, chance = 20}, --{ID = 2002, chance = 20}, --{ID = 2003, chance = 20}, --{ID = 2004, chance = 20}, }, [3] = { -- Array Tier 3 }, [4] = { -- Array Tier 4 }, [5] = { -- Array Tier 5 }, [6] = { -- Array Tier 6 }, [7] = { -- Array Tier 7 }, }, } function onUse(cid, item, fromPosition, itemEx, toPosition) if config.quest.necessaria and getPlayerStorageValue (cid, config.quest.storageID) == 0 then -- Erro caso a pessoa use a maquina sem ter feito a quest -- Valido apenas quando a opcao esta ativada doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don\'t have permission to use this machine.") return false end items = {nil, nil, nil} container = getThingFromPos(config.chestPos) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Item selecionado: " .. container.itemid) for i = 0, 2 do items[i + 1] = getContainerItem (container.uid, i) if items [i + 1].itemid == 0 or items [i + 1].itemid == nil then -- Erro quando tem menos de 3 itens no bau doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need 3 held items to fuse.") return false end end heldType = {nil, nil, nil} for j=1, 3 do for i=1, 7 do for k = 1, #config.helds do if config.helds[k].ID == items[j].itemid then heldType[j] = i end end end if heldType [j] == nil then -- Erro a ser exibido caso o jogador coloque algum item que nao seja um held na maquina doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "This machine works only to held items.") return false end end if heldType[1] ~= heldType[2] or heldType[2] ~= heldType[3] then -- Erro a ser exibido caso o jogador coloque helds de tiers diferentes doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need helds with the same tier.") return false elseif heldType[1] == 7 or heldType[2] == 7 or heldType[3] == 7 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You cannot fuse tier 7 held items.") return false end -- Sortear qual held vira for i = 1, 3 do doRemoveItem(items.uid, 1) end tierSorteado = heldType[1] + 1 numeroSorte = math.random(1, 100) itemIDSorteado = sorteiaValor (tierSorteado, numeroSorte) doPlayerAddItem(cid, itemIDSorteado, 1) -- Mensagem exibida ao fundir com sucesso doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You received your new held item.") return true end -- Função retirada de https://pt.stackoverflow.com/questions/147884/sorteio-aleatório-mas-com-diferentes-probabilidades function sorteiaValor (tierSorteado, numeroSorte) x = numeroSorte for i = 1, #config.helds[tierSorteado] do x = x - config.helds[tierSorteado].chance if x <= 0 then return config.helds[tierSorteado].ID end end end O problema é quando eu insiro as linhas abaixo Spoiler if not doPlayerRemoveMoney(cid, config.prices.tier_..heldType[1]) then -- Se nao for possivel retirar a quantia de dinheiro do jogador, finalizar script doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need " .. config.prices.tier_..heldType[1] .. " gold to fuse tier ".. heldType[1].. " held items.") return false end detalhe que se voce ver é o mesmo script porem ao inserir a parte de cobrar o valor que da erro Editado Janeiro 15, 2020 por mister17 Link para o comentário Compartilhar em outros sites More sharing options...
1 BlazerX 51 Postado Janeiro 15, 2020 Share Postado Janeiro 15, 2020 2 horas atrás, mister17 disse: entendi, eu tenho 1 do mesmo perfil que esta rodando 100% tentei adicionar a parte do valores mas mesmo assim qual eu insiro o paragrafo da cobrança do dinheiro ai ele me reporta este erro Abaixo é o codigo que tenho para apena a fusão esta funcionando 100% sem cobrar o valor necessario Ocultar conteúdo -- Held Fusion 0.1 by Marcot -- Se encontrou algum erro no script, favor enviar PM explicando os erros -- http://www.tibiaking.com/forum/profile/120572-marcot/ -- Configuracoes necessarias para o script local config = { quest = { -- Precisa fazer quest? (Nao mexa caso negativo) necessaria = false, -- Eh necessario fazer uma quest para liberar o sistema? storageID = 10006, -- Qual o storageID dessa quest? (caso true, anteriormente) }, chestPos = {x = 1017, y = 1072, z = 13, stackpos = 1},-- Posicao do Bau (certifique-se que nao tenha nada encima dele) --{x = 1005, y = 1072, z = 13, stackpos = 1},-- Posicao do Bau (certifique-se que nao tenha nada encima dele) -- Tenha atencao para que a soma das chances dos helds em cada tier seja igual a 100 prices = { ["tier_1"] = 60000, ["tier_2"] = 150000, ["tier_3"] = 300000, ["tier_4"] = 700000, ["tier_5"] = 1000000, ["tier_6"] = 1500000, }, helds = { -- Item IDs e chance de vir o held [1] = { -- Array Tier 1 {ID = 13720, chance = 100}, --{ID = 2160, chance = 80}, --{ID = 2158, chance = 10}, }, [2] = { -- Array Tier 2 {ID = 13818, chance = 100}, --{ID = 2001, chance = 20}, --{ID = 2002, chance = 20}, --{ID = 2003, chance = 20}, --{ID = 2004, chance = 20}, }, [3] = { -- Array Tier 3 }, [4] = { -- Array Tier 4 }, [5] = { -- Array Tier 5 }, [6] = { -- Array Tier 6 }, [7] = { -- Array Tier 7 }, }, } function onUse(cid, item, fromPosition, itemEx, toPosition) if config.quest.necessaria and getPlayerStorageValue (cid, config.quest.storageID) == 0 then -- Erro caso a pessoa use a maquina sem ter feito a quest -- Valido apenas quando a opcao esta ativada doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don\'t have permission to use this machine.") return false end items = {nil, nil, nil} container = getThingFromPos(config.chestPos) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Item selecionado: " .. container.itemid) for i = 0, 2 do items[i + 1] = getContainerItem (container.uid, i) if items [i + 1].itemid == 0 or items [i + 1].itemid == nil then -- Erro quando tem menos de 3 itens no bau doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need 3 held items to fuse.") return false end end heldType = {nil, nil, nil} for j=1, 3 do for i=1, 7 do for k = 1, #config.helds do if config.helds[k].ID == items[j].itemid then heldType[j] = i end end end if heldType [j] == nil then -- Erro a ser exibido caso o jogador coloque algum item que nao seja um held na maquina doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "This machine works only to held items.") return false end end if heldType[1] ~= heldType[2] or heldType[2] ~= heldType[3] then -- Erro a ser exibido caso o jogador coloque helds de tiers diferentes doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need helds with the same tier.") return false elseif heldType[1] == 7 or heldType[2] == 7 or heldType[3] == 7 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You cannot fuse tier 7 held items.") return false end -- Sortear qual held vira for i = 1, 3 do doRemoveItem(items.uid, 1) end tierSorteado = heldType[1] + 1 numeroSorte = math.random(1, 100) itemIDSorteado = sorteiaValor (tierSorteado, numeroSorte) doPlayerAddItem(cid, itemIDSorteado, 1) -- Mensagem exibida ao fundir com sucesso doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You received your new held item.") return true end -- Função retirada de https://pt.stackoverflow.com/questions/147884/sorteio-aleatório-mas-com-diferentes-probabilidades function sorteiaValor (tierSorteado, numeroSorte) x = numeroSorte for i = 1, #config.helds[tierSorteado] do x = x - config.helds[tierSorteado].chance if x <= 0 then return config.helds[tierSorteado].ID end end end O problema é quando eu insiro as linhas abaixo Ocultar conteúdo if not doPlayerRemoveMoney(cid, config.prices.tier_..heldType[1]) then -- Se nao for possivel retirar a quantia de dinheiro do jogador, finalizar script doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need " .. config.prices.tier_..heldType[1] .. " gold to fuse tier ".. heldType[1].. " held items.") return false end detalhe que se voce ver é o mesmo script porem ao inserir a parte de cobrar o valor que da erro Veja se resolve: if not doPlayerRemoveMoney(cid, config.prices["tier_"..heldType[1]]) then -- Se nao for possivel retirar a quantia de dinheiro do jogador, finalizar script doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need " .. config.prices["tier_"..heldType[1]] .. " gold to fuse tier ".. heldType[1].. " held items.") return false end mister17 reagiu a isso 1 Link para o comentário Compartilhar em outros sites More sharing options...
0 mister17 10 Postado Janeiro 15, 2020 Autor Share Postado Janeiro 15, 2020 5 minutos atrás, BlazerX disse: Veja se resolve: if not doPlayerRemoveMoney(cid, config.prices["tier_"..heldType[1]]) then -- Se nao for possivel retirar a quantia de dinheiro do jogador, finalizar script doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You need " .. config.prices["tier_"..heldType[1]] .. " gold to fuse tier ".. heldType[1].. " held items.") return false end Funcionou só me tira uma duvida éra o ]? Link para o comentário Compartilhar em outros sites More sharing options...
0 BlazerX 51 Postado Janeiro 15, 2020 Share Postado Janeiro 15, 2020 Agora, mister17 disse: O problema era que você estava tentando acessar a tebela prices e seus indices eram tudo string, porem você acessava de forma errada, veja essa imagem: Como você pode ver na linha 14 ao 19 os índices são tudo strings e você tentava acessar na linha 99 e 100 de uma forma totalmente diferente do esperado. mister17 reagiu a isso 1 Link para o comentário Compartilhar em outros sites More sharing options...
0 mister17 10 Postado Janeiro 15, 2020 Autor Share Postado Janeiro 15, 2020 2 minutos atrás, BlazerX disse: O problema era que você estava tentando acessar a tebela prices e seus indices eram tudo string, porem você acessava de forma errada, veja essa imagem: Como você pode ver na linha 14 ao 19 os índices são tudo strings e você tentava acessar na linha 99 e 100 de uma forma totalmente diferente do esperado. Entendi muito obrigado Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
mister17 10
Ola todos tudo bem?
Estou implementando alguns sistemas em um server e ao colocar sistema de fusão tive este erro, alguém por gentileza pode me ajudar?
Desde ja sou grato por tudo
Erro distro
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados