Postado Maio 19, 2020 4 anos .Qual servidor ou website você utiliza como base? TFS 1.2 Qual o motivo deste tópico? Olá, boa madrugada. Bom, é o seguinte, no meu servidor gostaria de colocar o sistema de refinar itens.. Funciona da seguinte maneira, os 'miners/blacksmiths' podem refinar os itens.. (armors/legs/shields/helmets e weapons) O miner deve usar a pick, nas minas e extrair os iron ore... Até ai tudo certo.. Porém, para refinar o item, no script você coloca a porcentagem de falha ou de chance para dar certo.. Eu consegui encontrar um script funcional.. Porém, ele tem lá para configurar a chance de falha e tal.. Porém, o certo quando o player "falha no refinamento" o item deve quebrar e virar um metal trash.. E nesse script, não acontece nada quando o player falha, nem exibe a mensagem... Um amigo meu me passou um server uma vez, que tinha esse sistema, eu dei uma olhada no script e é QUASE igual, porém, o dele era mais completo e tinha a função de "quebrar" o item.. Ai eu testei no meu (TFS 1.2) e apareceu o seguinte erro na distro.. Abaixo estarei disponibilizando os 2 scripts, oque funciona porém nao quebra, e o que faz aparecer o erro na distro, por favor, preciso muito desse script, obrigado família! Está surgindo algum erro? Se sim coloque-o aqui. Citar Lua Script Error: [Action Interface] data/actions/scripts/refine.lua:onUse data/actions/scripts/refine.lua:44: attempt to call global 'getItemInfo' (a nil value) stack traceback: [C]: in function 'getItemInfo' data/actions/scripts/refine.lua:44: in function <data/actions/scripts/refine.lua:37> Você tem o código disponível? Se tiver publique-o aqui: Esse funciona, porém não quebra.. local vocations = {1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12} -- Vocações que podem refinar itens local ids_bloqueados = {2160, 5706, 2463} -- Itens que não podem ser refinados local controle = { {level = 0, quantOre = 2, chance = 100}, -- Level do item, quantidade de Iron Ore necessaria, chance de sucesso {level = 1, quantOre = 2, chance = 90}, {level = 2, quantOre = 2, chance = 80}, {level = 3, quantOre = 2, chance = 0} } function Item.getLevel(self) if self.uid > 0 then if self:getAttribute("aid") < 1 then return 0 else return (tonumber(self:getAttribute("aid"))-100) or 0 end end return false end function Item.addLevel(self, count) if self.uid > 0 and tonumber(count) > 0 then return self:setAttribute("aid", (self:getLevel() + count)+100) end return false end function getItemDescriptionsById(id) local it = ItemType(id) return {attack = it.getAttack(), defense = it.getDefense(), armor = it.getArmor()} end function onUse(cid, item, fromPosition, itemEx, toPosition) local player = Player(cid) if not isInArray(vocations, player:getVocation():getId()) then return player:sendCancelMessage("Sua vocacao nao pode refinar.") elseif isInArray(ids_bloqueados, itemEx.uid) then return player:sendCancelMessage("Este item nao pode ser refinado.") end local atk = ItemType(itemEx.itemid):getAttack() or nil local def = ItemType(itemEx.itemid):getDefense() or nil local arm = ItemType(itemEx.itemid):getArmor() or nil if atk > 0 or def > 0 or arm > 0 then for _, upgrade in pairs(controle) do local chance = math.random(1, 100) local item = Item(itemEx.uid) if item:getLevel() == upgrade.level then if player:removeItem(5880, upgrade.quantOre) then item:getPosition():sendMagicEffect(CONST_ME_CRAPS) if chance <= upgrade.chance then if item:getLevel() == 0 then item:setAttribute("description", "Esse item foi refinado por " ..player:getName()) end item:addLevel(1) item:setAttribute("name", ItemType(itemEx.itemid):getName().. " + " ..item:getLevel()) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Voce refinou com sucesso! Agora seu "..ItemType(itemEx.itemid):getName().." é + " ..item:getLevel()) if atk > 0 then item:setAttribute("attack", atk+(1*item:getLevel())) return true elseif arm > 0 then item:setAttribute("armor", arm+(1*item:getLevel())) return true elseif def > 0 and atk <= 0 then item:setAttribute("defense", def+(1*item:getLevel())) return true end end else player:sendCancelMessage("Voce nao tem iron ores o suficiente. Voce precisa de "..upgrade.quantOre.." iron ores.") end end end else player:sendCancelMessage("Esse item nao pode ser refinado.") end return true end Esse é oque faz dar o erro na distro: --- Sistema de Upgrade de itens feito por Killua. --- Sistema feito com base no do Bronson Server. local vocations = {1, 2, 31, 48, 49, 50} -- Vocações que podem refinar itens local ids_bloqueados = {2160, 5706, 2463} -- Itens que não podem ser refinados local attributes = {{"attack", true}, {"defense", true}, {"armor", false}} local controle = { {level = 0, quantOre = 3, chance = 100}, -- Level do item, quantidade de Iron Ore necessaria, chance de sucesso {level = 1, quantOre = 3, chance = 80}, {level = 2, quantOre = 3, chance = 60}, {level = 3, quantOre = 3, chance = 40}, {level = 4, quantOre = 3, chance = 35}, {level = 5, quantOre = 3, chance = 35}, {level = 6, quantOre = 3, chance = 20}, {level = 7, quantOre = 3, chance = 15}, {level = 8, quantOre = 3, chance = 10}, {level = 9, quantOre = 3, chance = 5} } function getItemLevel(uid) if uid > 0 then return getItemAttribute(uid, "lvl") or 0 end return false end function doItemAddLevel(uid, count) if uid > 0 and tonumber(count) > 0 then return doItemSetAttribute(uid, "lvl", getItemLevel(uid) + count) end return false end function onUse(cid, item, fromPosition, itemEx, toPosition) if not isInArray(vocations, getPlayerVocation(cid)) then return doPlayerSendTextMessage(cid,18,'Você precisa ser um Blacksmith para refinar itens.') elseif isInArray(ids_bloqueados, itemEx.uid) then doPlayerSendTextMessage(cid,18,'Este item não pode ser refinado.') end if getItemInfo(itemEx.itemid).attack > 0 or getItemInfo(itemEx.itemid).defense > 0 or getItemInfo(itemEx.itemid).armor > 0 then for _, upgrade in pairs(controle) do local atk = getItemAttribute(itemEx.uid, "attack") or getItemInfo(itemEx.itemid).attack local def = getItemAttribute(itemEx.uid, "defense") or getItemInfo(itemEx.itemid).defense local arm = getItemAttribute(itemEx.uid, "armor") or getItemInfo(itemEx.itemid).armor local chance = math.random(1, 100) if getItemLevel(itemEx.uid) == upgrade.level then if doPlayerRemoveItem(cid, 5880, upgrade.quantOre) then doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_CRAPS) if chance <= upgrade.chance then if getItemLevel(itemEx.uid) == 0 then doItemSetAttribute(itemEx.uid, "description", "Ele foi refinado por " ..getCreatureName(cid).. " ! ") end doItemAddLevel(itemEx.uid, 1) doItemSetAttribute(itemEx.uid, "name", getItemNameById(itemEx.itemid).. " + " ..getItemLevel(itemEx.uid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Voce refinou com sucesso seu "..getItemNameById(itemEx.itemid).." agora ele esta + " ..getItemLevel(itemEx.uid).. " !") if getItemInfo(itemEx.itemid).attack > 0 then doItemSetAttribute(itemEx.uid, "attack", atk + 1) return true elseif getItemInfo(itemEx.itemid).armor > 0 then doItemSetAttribute(itemEx.uid, "armor", arm + 1) return true elseif getItemInfo(itemEx.itemid).defense > 0 and getItemInfo(itemEx.itemid).attack <= 0 then doItemSetAttribute(itemEx.uid, "defense", def + 1) return true end else doTransformItem(itemEx.uid, 2256) doItemSetAttribute(itemEx.uid, 'name', "metal trash") doItemSetAttribute(itemEx.uid, 'attack', 0) doItemSetAttribute(itemEx.uid, 'armor', 0) doItemSetAttribute(itemEx.uid, 'defense', 0) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce falhou.") return true end else doPlayerSendCancel(cid, "Voce nao tem iron ores o suficiente. Voce precisa de "..upgrade.quantOre.." iron ores.") end end end else doPlayerSendCancel(cid, "Este item nao pode ser refinado.") end return true end Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
Postado Maio 19, 2020 4 anos @Jonathan01 Tenta assim, usando a primeira script que você mandou: Mostrar conteúdo oculto local vocations = {1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12} -- Vocações que podem refinar itens local ids_bloqueados = {2160, 5706, 2463} -- Itens que não podem ser refinados local controle = { {level = 0, quantOre = 2, chance = 100}, -- Level do item, quantidade de Iron Ore necessaria, chance de sucesso {level = 1, quantOre = 2, chance = 90}, {level = 2, quantOre = 2, chance = 80}, {level = 3, quantOre = 2, chance = 0} } local metalTrash = 3310 -- ID do item ao falhar. function Item.getLevel(self) if self.uid > 0 then if self:getAttribute("aid") < 1 then return 0 else return (tonumber(self:getAttribute("aid"))-100) or 0 end end return false end function Item.addLevel(self, count) if self.uid > 0 and tonumber(count) > 0 then return self:setAttribute("aid", (self:getLevel() + count)+100) end return false end function getItemDescriptionsById(id) local it = ItemType(id) return {attack = it.getAttack(), defense = it.getDefense(), armor = it.getArmor()} end function onUse(cid, item, fromPosition, itemEx, toPosition) local player = Player(cid) if not isInArray(vocations, player:getVocation():getId()) then return player:sendCancelMessage("Sua vocacao nao pode refinar.") elseif isInArray(ids_bloqueados, itemEx.uid) then return player:sendCancelMessage("Este item nao pode ser refinado.") end local atk = ItemType(itemEx.itemid):getAttack() or nil local def = ItemType(itemEx.itemid):getDefense() or nil local arm = ItemType(itemEx.itemid):getArmor() or nil if atk > 0 or def > 0 or arm > 0 then for _, upgrade in pairs(controle) do local chance = math.random(1, 100) local item = Item(itemEx.uid) if item:getLevel() == upgrade.level then if player:removeItem(5880, upgrade.quantOre) then item:getPosition():sendMagicEffect(CONST_ME_CRAPS) if chance <= upgrade.chance then if item:getLevel() == 0 then item:setAttribute("description", "Esse item foi refinado por " ..player:getName()) end item:addLevel(1) item:setAttribute("name", ItemType(itemEx.itemid):getName().. " + " ..item:getLevel()) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Voce refinou com sucesso! Agora seu "..ItemType(itemEx.itemid):getName().." é + " ..item:getLevel()) if atk > 0 then item:setAttribute("attack", atk+(1*item:getLevel())) return true elseif arm > 0 then item:setAttribute("armor", arm+(1*item:getLevel())) return true elseif def > 0 and atk <= 0 then item:setAttribute("defense", def+(1*item:getLevel())) return true end else item:transform(metalTrash, 1) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "O refinamento falhou.") return true end else player:sendCancelMessage("Voce nao tem iron ores o suficiente. Voce precisa de "..upgrade.quantOre.." iron ores.") end end end else player:sendCancelMessage("Esse item nao pode ser refinado.") end return true end
Postado Maio 19, 2020 4 anos Autor Meu parça, funcionou sim, porém quando o refinamento falha, o item tá sumindo, é possivel você arrumar e colocar pro item virar um metal trash? ID do metal trash 16:24 You see metal trash. It weighs 3.00 oz. Item ID: 2256 Position: 1710, 1253, 7 Meu mano, muito obrigado pela força, localizei no script a parte de falha, e achei lá o comando pra transformar em metal trash, ai eu só substitui pelo ID e deu certo, VALEU MANO! TMJ!
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.