Ir para conteúdo

Featured Replies

Postado

.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. 

 

image.png.90f16a07d6778d91552a01afcb794a74.png

Resolvido por Vodkart

Ir para solução
Postado
  • 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 por Vodkart (veja o histórico de edições)

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Postado
  • 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
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)

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#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.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo