ZN
dúvida

Proibir nome de monstro script LUA

Por znotewebsite, 09 de jun. de 2013 em Scripts

script
14
2k
09 de junho de 2013 às 08:19

Eae galerinha, eu uso ZNOTE como plataforma por diversos motivos alguns até obrigatórios, mas eu acho ele a melhor plataforma hoje então não ligo, só que eu não sei como bloquear nome de criaturas por lá, teria alguma forma de bloquear nome de criaturas? Tipo ao player logar... nome = dragon,rotworm = kick,ban ou qlqr coisa, teleportado pra algum lugar... Alguém saberia alguma forma de me ajudar?

AdilsonHackerA
09 de junho de 2013 às 10:35

Você usar Site ? Pelo Modern ACC tem como configurar para o player não por certos nome inválidos !

 

Abraços!

brun123B
09 de junho de 2013 às 12:51

tem como bloquear por script, assim:

 

cria um arquivo chamado monstername.lua em data/creaturescripts/scripts e cole isso dentro:

 

function onLogin(cid)
   local result = doCreateMonster(getCreatureName(cid), getThingPos(cid), false)
   if tonumber(result) then
       doRemoveCreature(result)
   end
return not result
end

 

agora abra o arquivo creaturescripts.xml (data/creaturescripts) e adicione essa tag:

 

<event type="login" name="CheckMonsterName" event="script" value="monstername.lua"/>

AdilsonHackerA
09 de junho de 2013 às 14:06

Amigo testei aqui deu erro , qualquer player que logar o script pensa que e monster é não acontece nada , só da esse erro no console , se desse pra arruma e pra quando o player com nome de monstro logar é for kikado aparecer a msg "Proibido Nomes De Monstro" ou algo assim ficaria legal !

 

SS

 

 

 

post-360171-0-85837700-1370798470_thumb.jpg

 

 

 

Abraços!

Editado Junho 9 por AdilsonHacker

brun123B
09 de junho de 2013 às 15:36

ah você usa versão mais antiga, aí complica... testa assim:

 

local xml = io.open(getDataDir().."monster/monsters.xml", "r")
local monsters = false
if xml then
   monsters = xml:read("*all")
   xml:close()
end

function onLogin(cid)

   if monsters and monsters:find('name="'..getCreatureName..'"') then
       return false
   end

return true
end

AdilsonHackerA
09 de junho de 2013 às 15:40

Versão 8.60 , amigo tenta fazer um que não permita o player criar personagens com nome que possamos editar o nomes que não são permitidos! exemplo :

 

Local monster : "demon","frost dragon","fury" , é assim por diante !

 

Só uma ideia!

 

Flw

09 de junho de 2013 às 16:06

Versão 8.60 , amigo tenta fazer um que não permita o player criar personagens com nome que possamos editar o nomes que não são permitidos! exemplo :

 

Local monster : "demon","frost dragon","fury" , é assim por diante !

 

Só uma ideia!

 

Flw

 

Incentiva o cara ai da um rep :D

 

ah você usa versão mais antiga, aí complica... testa assim:

 

local xml = io.open(getDataDir().."monster/monsters.xml", "r")
local monsters = false
if xml then
monsters = xml:read("*all")
xml:close()
end

function onLogin(cid)

if monsters and monsters:find('name="'..getCreatureName..'"') then
	return false
end

return true
end

 

Cara n funfo nenhum dos dois :\

+rep por ter tentado ajudar

brun123B
09 de junho de 2013 às 16:53

usa essa script:

 

local xml = io.open(getDataDir().."monster/monsters.xml", "r")
local monsters = false
if xml then
   monsters = xml:read("*all")
   xml:close()
end

function onLogin(cid)

   print(type(monsters))
   print(getDataDir().."monster/monsters.xml")

   if monsters and monsters:find('name="'..getCreatureName..'"') then
       return false
   end

return true
end

 

vai aparecer 2 mensagens no seu console, me mostra elas

09 de junho de 2013 às 17:11

usa essa script:

 

local xml = io.open(getDataDir().."monster/monsters.xml", "r")
local monsters = false
if xml then
monsters = xml:read("*all")
xml:close()
end

function onLogin(cid)

print(type(monsters))
print(getDataDir().."monster/monsters.xml")

if monsters and monsters:find('name="'..getCreatureName..'"') then
	return false
end

return true
end

 

vai aparecer 2 mensagens no seu console, me mostra elas

 

[Error - CreatureScript Interface]

data/creaturescripts/scripts/monstername.lua:onLogin

Description:

data/creaturescripts/scripts/monstername.lua:13: attempt to concatenate global 'getCreatureName' <a function value>

stack traceback:

data/creaturescripts/scripts/monstername.lua:13: in function <data/creaturescripts/scripts/monstername.lua:8>

SkymagnumS
09 de junho de 2013 às 20:05

local xml = io.open(getDataDir().."monster/monsters.xml", "r")
local monsters = false
if xml then
       monsters = xml:read("*all")
       xml:close()
end

function onLogin(cid)

       print(type(monsters))
       print(getDataDir().."monster/monsters.xml")

       if monsters and monsters:find('name="'..getCreatureName(cid)..'"') then
               return false
       end

return true
end

or

function getAllMonsterNames()

local tmp = {}

   local file = io.open("data/monster/monster.xml", "r")

   for i in file:read("*a"):gmatch("<monsters(.-)</monsters>") do
       table.insert(tmp, i:match("monster name=(.-)"))
   end

   return tmp
end

function onLogin(cid)

   if isInArray(getAllMonsterNames(), getCreatureName(cid)) then
       doAddNamelock(getCreatureName(cid))
       return false
   end

   return true
end

brun123B
09 de junho de 2013 às 20:40

sky, seu loop do for é executado apenas uma vez e a captura é feita incorretamente... o certo seria algo assim:

 

function getAllMonsterNames()
local tmp = {}
local file = io.open("monsters.xml", "r")
for i in file:read("*a"):gmatch("<(.-)>") do
	local name = i:match('.+name="(.-)".+')
	if name then
		table.insert(tmp, name)
	end
end
return tmp
end

 

mas o problema dessa função é que sempre que um player fizer login, o servidor vai ter que abrir o monsters.xml, fazer um loop considerável e depois fechar o arquivo (coisa que faltou na função) e se vários players logarem ao mesmo tempo, o server pode travar... então o mais correto seria abrir o arquivo apenas uma vez e armazenar os nomes dos monstros lidos e guardar as informações em uma variável que permanece até que o servidor feche, assim o arquivo só será aberto uma vez

 

usa esse script:

 

local xml = io.open(getDataDir().."monster/monsters.xml", "r")
local monsters = false
if xml then
local text = xml:read("*all")
xml:close()
monsters = {}
for monstername in text:gmatch('name="(.-)"') do
	table.insert(monsters, monstername)
end
end

function onLogin(cid)

if monsters and isInArray(monsters, getCreatureName(cid)) then
	return false
end

return true
end

Editado Junho 9 por brun123

09 de junho de 2013 às 21:01

Funcionou o ultimo, amanha termino de dar os reps de geral!

Qnd tento entrar com dragon lord, na distro da q ele deu out e no tibia fica só carregando :D

 

Valeu ai!

Editado Junho 9 por znotewebsite

EnselfE
09 de junho de 2013 às 21:47

Topico Resolvido / Reportado para Moverem

Editado Junho 9 por Enself

vital900V
09 de junho de 2013 às 21:50

resolvido/fechado/movido.