Jump to content

Scripting [7.72] Info Monster - Talkaction


Go to solution Solved by Vodkart,

Recommended Posts

.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

Link to post
Share on other sites

  • Solution
Posted (edited)

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

 

Edited by Vodkart (see edit history)

vodkart_logo.png

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

 

Dota System 8.6 Com Buffs Automáticos + MAPA (100%) - PVP

Link para Downloadhttps://www.4shared.com/rar/SMta8CQ8fi/Dota_Venda.html?

 

[+]--------------------------------------[+]-------------------------------------------[+]

 

DISCORDvodkart#6090

 

Link to post
Share on other sites

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.

Link to post
Share on other sites

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

 

Dota System 8.6 Com Buffs Automáticos + MAPA (100%) - PVP

Link para Downloadhttps://www.4shared.com/rar/SMta8CQ8fi/Dota_Venda.html?

 

[+]--------------------------------------[+]-------------------------------------------[+]

 

DISCORDvodkart#6090

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • By Apache
      TFS 0.4
      Bom tenho esse sistema de castle, esta funciona bem, o único defeito é que ele não entrega os 30% de exp a mais
      para os membros da guild dominante, vou postar o script se alguém conseguir ajuda a resolver agradeço.
       
      action alavanca: 
       
      creaturescripts login.lua
       
       
      globalevents
       
      não achei necessario postar pois só o open e o close do sistema
       
      Lib
       
       
       
       
       
    • By MIzakinha
      Salve senhoras e senhores!

      Estou com um script no meu servidor de tasks diarias, ele funciona normalmente. Só que ele da a mesma task para TODOS os players do server. Tem uma tabela com várias opções de monstros para o player matar, ele pega dentro dessa tabela, 2 monstros aleatórios e da para o player escolher um deles. Só que ele da as MESMAS opções para TODOS os players. Alguém pode me ajudar a identificar o local para fazer com que seja aleatório para cada player diferente? Vou deixar o script aqui.

       
       
    • By Bruce Pereira
      Eu quero colocar uma storage nesse jutsu de dash, para poder criar outros jutsus, eu criei 3 dashs em meu servidor mas ta bugando. exemplo: uso o dash 1 aparece o efeito do dash 2, uso dash 2 e aparece o efeito do dash 3, eu tentei colocar uma storage mas não consegui.
       
      script sem edição minha \/
       
       
    • By stauro
      Alguém poderia me ajudar a colocar bonus exp no meu cast system?
       
       
       
       
       
       
       
       function onSay(cid, words, param, channel) local tmp = param:explode(" ") if not(tmp[1]) then return doPlayerSendCancel(cid, "Parameters needed") end if tmp[1] == "on" then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast has started.") doPlayerSetCastState(cid, true) doPlayerSave(cid) elseif getPlayerCast(cid).status == false then return doPlayerSendCancel(cid, "Your cast has to be running for this action.") elseif tmp[1] == "off" then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast has ended.") doPlayerSetCastState(cid, false) doPlayerSave(cid) elseif isInArray({"pass", "password", "p"}, tmp[1]) then if not(tmp[2]) then return doPlayerSendCancel(cid, "You need to set a password") end if tmp[2]:len() > 10 then return doPlayerSendCancel(cid, "The password is too long. (Max.: 10 letters)") end if tmp[2] == "off" then doPlayerSetCastPassword(cid, "") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast password has been removed.") else doPlayerSetCastPassword(cid, tmp[2]) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast password was set to: " .. tmp[2]) end elseif isInArray({"desc", "description", "d"}, tmp[1]) then local d = param:gsub(tmp[1]..(tmp[2] and " " or ""), "") if not(d) or d:len() == 0 then return doPlayerSendCancel(cid, "You need to specify a description.") end if d:len() > 50 then return doPlayerSendCancel(cid, "The description is too long. (Max.: 50 letters)") end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast description was set to: ") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, d) doPlayerSetCastDescription(cid, d) elseif tmp[1] == "ban" then if not(tmp[2]) then return doPlayerSendCancel(cid, "Specify a spectator that you want to ban.") end if doPlayerAddCastBan(cid, tmp[2]) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' has been banned.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' could not be banned.") end elseif tmp[1] == "unban" then if not(tmp[2]) then return doPlayerSendCancel(cid, "Specify the person you want to unban.") end if doPlayerRemoveCastBan(cid, tmp[2]) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' has been unbanned.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' could not be unbanned.") end elseif param == "bans" then local t = getCastBans(cid) local text = "Cast Bans:\n\n" for k, v in pairs(t) do text = text .. "*" .. v.name .. "\n" end if text == "Cast Bans:\n\n" then text = text .. "No bans." end doShowTextDialog(cid, 5958, text) elseif tmp[1] == "mute" then if not(tmp[2]) then return doPlayerSendCancel(cid, "Specify a spectator that you want to mute.") end if doPlayerAddCastMute(cid, tmp[2]) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' has been muted.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' could not be muted.") end elseif tmp[1] == "unmute" then if not(tmp[2]) then return doPlayerSendCancel(cid, "Specify the person you want to unmute.") end if doPlayerRemoveCastMute(cid, tmp[2]) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' has been unmuted.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' could not be unmuted.") end elseif param == "mutes" then local t = getCastMutes(cid) local text = "Cast Mutes:\n\n" for k, v in pairs(t) do text = text .. "*" .. v.name .. "\n" end if text == "Cast Bans:\n\n" then text = text .. "No mutes." end doShowTextDialog(cid, 5958, text) elseif param == "viewers" then local t = getCastViewers(cid) local text, count = "Cast Viewers:\n#Viewers: |COUNT|\n\n", 0 for _,v in pairs(t) do count = count + 1 text = text .. "*" .. v.name .."\n" end if text == "Cast Viewers:\n#Viewers: |COUNT|\n\n" then text = "Cast Viewers:\n\nNo viewers." end text = text:gsub("|COUNT|", count) doShowTextDialog(cid, 5958, text) elseif param == "status" then local t, c = getCastViewers(cid), getPlayerCast(cid) local count = 0 for _,v in pairs(t) do count = count + 1 end doShowTextDialog(cid, 5958, "Cast Status:\n\n*Viewers:\n " .. count .. "\n*Description:\n "..(c.description == "" and "Not set" or c.description).."\n*Password:\n " .. (c.password == "" and "Not set" or "Set - '"..c.password.."'")) elseif param == "update" then if getPlayerStorageValue(cid, 656544) > os.time() then return doPlayerSendCancel(cid, "You used this command lately. Wait: " .. (getPlayerStorageValue(cid, 656544)-os.time()) .. " sec.") end doPlayerSave(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The cast settings have been updated.") doPlayerSetStorageValue(cid, 656544, os.time()+60) end return true end  
       
       
    • By stauro
      Alguém sabe como adicionar atributo de sorte no item? Tipo  "Luck + 2%"
      Não consigo achar nenhum item que tenha pra eu copiar, os itens que eu sei não estão com esse atributo
       
       
       
       
         
       
       
      Resolvido.
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...

Important Information

Confirmação de Termo