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.
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 por BlazerX
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
-- 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
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 por mister17
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
-- 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
enditems = {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
endheldType = {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
endend
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)
endtierSorteado = 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
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 enddetalhe 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
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 endFuncionou só me tira uma duvida éra o ]?
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.
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
info
Grupo: Barão
Registrado: 16/08/13
Posts: 200
Reputação: +10
Gênero: Masculino
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
Editado Janeiro 15 por mister17