Postado Março 24, 2021 4 anos .Qual servidor ou website você utiliza como base? The OTX Server Version: (2.100 - 6000) - Codename: (FINAL) Qual o motivo deste tópico? Estou disponibilizando um script muito interessante mas preciso de um ajuste final, nessa talkaction, quando você digita /info nome.monstro ele trás as informações de vida, exp e loot. Quando você digita um nome incorreto, ele abre uma janela dizendo que o nome do monstro está incorreto e trás a lista de monstros. Tudo está funcional, porém quando a pessoa digita o nome do monstro incorreto, dá um erro na minha console: Está surgindo algum erro? Se sim coloque-o aqui. Citar [24/3/2021 13:56:46] [Error - TalkAction Interface] [24/3/2021 13:56:46] data/talkactions/scripts/info.lua:onSay [24/3/2021 13:56:46] Description: [24/3/2021 13:56:46] (LuaInterface::luaGetMonsterInfo) Monster not found Você tem o código disponível? Se tiver publique-o aqui: function getDirMonsterByNameMonster(name) t = {} local monster = io.open("data/monster/monsters.xml", "r") for i in monster:read("*a"):gmatch('<monster name="'..tostring(name)..'" file="(.-)"/>') do table.insert(t, tostring(i)) end return t[1] or 0 end function getMonsterLootItens(name) local dir = "data/monster/"..getDirMonsterByNameMonster(name).."" local monster = io.open(""..dir.."", "r") str = "" for i in monster:read("*a"):gmatch('id="(.-)"') do str = ""..str.." - "..getItemNameById(i).."" end return str end function getAllMonster() local str = "" local monster = io.open("data/monster/monsters.xml", "r") str = "Voce digitou incorretamente o nome do monstro veja a lista de monstro\n" for i in monster:read("*a"):gmatch('<monster name="(.-)"') do str = ""..str.." - "..i.."" end return str end function getAttrMonster(name) return "Life = "..getMonsterInfo(name).health.."\nExp = "..getMonsterInfo(name).experience.."\n" end function onSay(cid, words, param, channel) if param == "" or not param or param == " " then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce precisa dizer o nome do monstro") return true end local name = param:lower() if getMonsterInfo(name) then name = name:gsub("(%l)(%w*)", function(a,b) return string.upper(a)..b end) doShowTextDialog(cid, 1397, "Info Monster "..name.."\n"..getAttrMonster(name).."\n\nLoots = "..getMonsterLootItens(name).."") else doShowTextDialog(cid, 1397, getAllMonster()) return true end return true end Poderiam me ajudar para remover esse erro da console? Segue script da talkaction, obrigado. Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
Postado Março 26, 2021 4 anos Solução tenta usar assim: function ExistMonsterByName(name) -- by vodka local monster = io.open("data/monster/monsters.xml", "r"):read("*all") local get = monster:lower():match('name="' .. name:lower() ..'"') if get == nil or get == "" then return false end return true end function getDirMonsterByNameMonster(name) local t = {} local monster = io.open("data/monster/monsters.xml", "r") for i in monster:read("*a"):gmatch('<monster name="'..tostring(name)..'" file="(.-)"/>') do table.insert(t, tostring(i)) end return t[1] or 0 end function getMonsterLootItens(name) local dir = "data/monster/"..getDirMonsterByNameMonster(name).."" local monster = io.open(""..dir.."", "r") str = "" for i in monster:read("*a"):gmatch('id="(.-)"') do str = ""..str.." - "..getItemNameById(i).."" end return str end function getAllMonster() local str = "" local monster = io.open("data/monster/monsters.xml", "r") str = "Voce digitou incorretamente o nome do monstro veja a lista de monstro\n" for i in monster:read("*a"):gmatch('<monster name="(.-)"') do str = ""..str.." - "..i.."" end return str end function getAttrMonster(name) return "Life = "..getMonsterInfo(name).health.."\nExp = "..getMonsterInfo(name).experience.."\n" end function onSay(cid, words, param, channel) if param == "" or not param or param == " " then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce precisa dizer o nome do monstro") return true end local name = param:lower() if not ExistMonsterByName(name) then doShowTextDialog(cid, 1397, getAllMonster()) return true end local name = name:gsub("(%l)(%w*)", function(a,b) return string.upper(a)..b end) doShowTextDialog(cid, 1397, "Info Monster "..name.."\n"..getAttrMonster(name).."\n\nLoots = "..getMonsterLootItens(name).."") return true end Editado Março 26, 2021 4 anos por Vodkart (veja o histórico de edições) [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Março 27, 2021 4 anos Autor 5 horas atrás, Vodkart disse: tenta usar assim: function ExistMonsterByName(name) -- by vodka local monster = io.open("data/monster/monsters.xml", "r"):read("*all") local get = monster:lower():match('name="' .. name:lower() ..'"') if get == nil or get == "" then return false end return true end function getDirMonsterByNameMonster(name) local t = {} local monster = io.open("data/monster/monsters.xml", "r") for i in monster:read("*a"):gmatch('<monster name="'..tostring(name)..'" file="(.-)"/>') do table.insert(t, tostring(i)) end return t[1] or 0 end function getMonsterLootItens(name) local dir = "data/monster/"..getDirMonsterByNameMonster(name).."" local monster = io.open(""..dir.."", "r") str = "" for i in monster:read("*a"):gmatch('id="(.-)"') do str = ""..str.." - "..getItemNameById(i).."" end return str end function getAllMonster() local str = "" local monster = io.open("data/monster/monsters.xml", "r") str = "Voce digitou incorretamente o nome do monstro veja a lista de monstro\n" for i in monster:read("*a"):gmatch('<monster name="(.-)"') do str = ""..str.." - "..i.."" end return str end function getAttrMonster(name) return "Life = "..getMonsterInfo(name).health.."\nExp = "..getMonsterInfo(name).experience.."\n" end function onSay(cid, words, param, channel) if param == "" or not param or param == " " then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce precisa dizer o nome do monstro") return true end local name = param:lower() if not ExistMonsterByName(name) then doShowTextDialog(cid, 1397, getAllMonster()) return true end local name = name:gsub("(%l)(%w*)", function(a,b) return string.upper(a)..b end) doShowTextDialog(cid, 1397, "Info Monster "..name.."\n"..getAttrMonster(name).."\n\nLoots = "..getMonsterLootItens(name).."") return true end Funcionou @Vodkart, muito obrigado. A título de aprendizado, poderia me falar onde e no que reflete a alteração? Obrigado pela atenção.
Postado Março 27, 2021 4 anos 2 minutos atrás, Bruno Rezende disse: Funcionou @Vodkart, muito obrigado. A título de aprendizado, poderia me falar onde e no que reflete a alteração? Obrigado pela atenção. Foi criada uma função para checar se o nome do monstro procurado pelo param está em monsters.xml ExistMonsterByName(name) caso retorne falso, é dado a lista dos monstro que existem no seu servidor, também no monsters.xml. (essa última função já era sua) [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
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.